PROGRAMOWANIE WIZUALNO
Transkrypt
PROGRAMOWANIE WIZUALNO
Programowanie Wizualno-Obiektowe Zajęcia z Delphi 4, program 1 Programowanie Wizualno-Obiektowe (studia zaoczne - inżynieria komputerowa) Zajęcia z Delphi 4, program 2 Temat: Obsługa grafiki w Delphi, rysowanie wykresów. Zadanie: Program powinien rysować oraz tablicować funkcję f ( x) = x 2 1. Otwieramy nowa aplikację File>NewApplication 2. Zapisujemy projekt przy pomocy File>Save All w katalogu gdzie będzie kompilowany nasz projekt 3. Dodajemy odpowiednie komponenty w kolejności • Panel na którym będzie znajdować się wykres TPanel (paleta Standard) • Obszar do rysowania TPaintBox (paleta System) • Komponent zawierający tabelę z wartościami funkcji TValueListEditor (paleta Additional) • Przycisk do generowania danych TButton (paleta Standard) • Przycisk do rysowania wykresu TButton (paleta Standard) • Etykiety opisujące TLabel (paleta Standard) 1 Programowanie Wizualno-Obiektowe Zajęcia z Delphi 4, program 1 4. Aby tablicować funkcję można wykorzystać komponent automatycznie generujący tablicę z danymi (o odpowiednio opisanych rzędach i kolumnach). Komponent TValueListEditor pozwala na takie tablicowanie, aby opisać odpowiednie kolumny tego komponentu należy wybrać jego własność TitleCaptions, jest to obiekt klasy TStrings tak więc automatycznie otwiera się okno do ustalenia poszczególnych nazw kolumn, nazwać kolumny ('x', 'f(x)'). 5. Zdefiniować typ rekordowy punktów opisanych wartościami rzeczywistymi type TPunkt_real=record x:real; y:real; end; a następnie zadeklarować odpowiednie tablice służące do przechowywania wartości policzonej funkcji, oraz przeskalowanych punktów wykresu private Punkty:array[1..100] of TPunkt_real; Wykres:array[1..100] of TPoint; liczba_punktow:integer; { Private declarations } public 6. Aby wygenerować odpowiednie dane i wpisać je w pola odpowiadające argumentom i wartościom funkcji należy obsłużyć zdarzenie OnClick przycisku służącego do generowania danych. Dodanie kolejnego rzędu do tabeli z danymi wykonuje się przy pomocy metody Form1.ValueListEditor1.InsertRow(kolumna_1:string,...,kolumna_i:string). Generowanie danych dla zadanej funkcji można zrealizować przy pomocy następującej procedury: procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin for i:=1 to 100 do begin Punkty[i].x:=i*0.1; 2 Programowanie Wizualno-Obiektowe Zajęcia z Delphi 4, program 1 Punkty[i].y:=sqr(Punkty[i].x); Form1.ValueListEditor1.InsertRow(FloatToStr(Punkty[i].x),FloatT oStr(Punkty[i].y),true); end; end; Form1.Button2.Enabled:=true; 7. Następnie należy zapisać dane w tablicy w ten sposób, aby można było je pokazać na ekranie, w polu przeznaczonym na wykres. Nasze dane należy najpierw przeskalować tak aby miały wartości dodatnie i całkowite z zakresu x:{0..PaintBox.Width}, y:{0..PaintBox.Height} Do odpowiednich obliczeń należy znaleźć wartości maksymalna i minimalną odpowiednio x i f(x) i określić odpowiednie współczynniki skalujące. Należy też uwzględnić że wartości funkcji mogą być ujemne i że należy je zamienić tak aby można je było narysować na ekranie. Do rysowania funkcji można wykorzystać następującą funkcję (obsługa zdarzenia OnClick przycisku do rysowania wykresu). procedure TForm1.Button2Click(Sender: TObject); var i:integer; wysokosc,szerokosc:integer; max_x, max_y, min_x, min_y:real; begin wysokosc:=Form1.PaintBox1.Height; szerokosc:=Form1.PaintBox1.Width; {skalowanie punktów} max_x:=Punkty[1].x; max_y:=Punkty[1].y; min_x:=Punkty[1].x; min_y:=Punkty[1].y; for i:=1 to 100 do begin if Punkty[i].x>max_x if Punkty[i].y>max_y if Punkty[i].x<min_x if Punkty[i].y<min_y end; then then then then max_x:=Punkty[i].x; max_y:=Punkty[i].y; min_x:=Punkty[i].x; min_y:=Punkty[i].y; for i:=1 to 100 do begin Wykres[i].X:=floor(szerokosc*(Punkty[i].x-min_x)/(max_xmin_x)); Wykres[i].Y:=floor(wysokosc*(Punkty[i].y-min_y)/(max_ymin_y)); end; {lustrzane odbicie punktów} for i:=1 to 100 do begin Wykres[i].Y:=abs(wysokosc-Wykres[i].Y); end; end; {rysowanie punktów} Form1.PaintBox1.Canvas.Polyline(Wykres); 3 Programowanie Wizualno-Obiektowe Zajęcia z Delphi 4, program 1 UWAGA: Można dodatkowo zablokować przycisk do rysowania danych w przypadku kiedy nie są wygenerowane żadne dane, i odblokować go dopiero gdy dane zostaną utworzone i wypisane w tabeli. Do blokowania przycisku służy jego własność Enabled będąca zmienną typu logicznego (false - zablokowany, true - odblokowany). Wynik działania programu: 4