Instrukcja 7b
Cel ćwiczenia : Napisanie aplikacji wyświetlającej przykładową kompozycję graficzną. Krzywe funkcyjne.
Rys. 1 Widok formularza z umieszczonymi komponentami
Uruchomić Delphi.
Umieścić na formularzu komponent Image i ustawić następujące parametry:
Width : 400
Height : 400
Umieścić na formularzu komponent GroupBox (paleta Standard). Własność Caption ustawić na Dane.
Na komponencie GroupBox1 umieścić komponent RadioGroup (paleta Standard). Własność Caption ustawić na: Wybór funkcji. Wybrać własność Items dla RadioGroup1 i wpisać następujące pozycje:
r = a*{abs[sin(k*fi)]+cos(k*fi)}
r = a*abs[sin(k*fi)+cos(k*fi)]
Własność ItemIndex ustawić na: 0.
Na komponencie GroupBox1 umieścić 3 komponenty LabeledEdit (paleta Additional).
Poszczególne własności ustawić zgodnie z tabelą.
Domyślma nazwa: |
Name: |
Text: |
EditLabel->Caption |
LabeledEdit1 |
LEN |
400 |
Liczba punktów wykresu - N: |
LabeledEdit2 |
LEa |
110 |
Parametr - a: |
LabeledEdit3 |
LEk |
12 |
Parametr - k: |
Na formularzu umieścić komponent RadioGroup. Wybrać własność Items dla RadioGroup2 i wpisać następujące pozycje:
linii
tła
Własność Columns ustawić na : 2, Caption na : Kolor.
W części private klasy TForm1 umieścić deklaracje zmiennych:
clTla,clLinii : TColor;
Wygenerować zdarzenie OnCreate dla komponentu Form1 i wpisać następujący kod:
procedure TForm1.FormCreate(Sender: TObject);
begin
clTla:=clBlack;
clLinii:=clWhite;
end;
Umieścić komponent ColorDialog i Button. Dla przycisku własność Caption zmienić na Wybór koloru.
Utworzyć zdarzenie OnClick dla przycisku Button1 i wpisać kod:
procedure TForm1.Button1Click(Sender: TObject);
begin
if ColorDialog1.Execute then begin
case RadioGroup2.ItemIndex of
0 : clLinii := ColorDialog1.Color;
1 : clTla := ColorDialog1.Color;
end;
end;
end;
Umieścić kolejny komponent Button na formularzu, własność Caption ustawić na Rysuj, utworzyć zdarzenie OnClick i wpisać następujący kod rysujący:
procedure TForm1.Button2Click(Sender: TObject);
var
i,nr,N,X,Y,X0,Y0,ZX,ZY: Integer;
k,a,fi,dfi,r,xp,yp: Real;
begin
nr:=RadioGroup1.ItemIndex;
N :=StrToInt(LEN.Text);
a :=StrToFloat(LEa.Text);
k :=StrToFloat(LEk.Text);
with Image1.Canvas do begin
Brush.Color:=clTla;
Brush.Style:=bsSolid;
FillRect(Rect(0,0,Image1.Width,Image1.Height));
Pen.Color:=clLinii;
dfi:=2*Pi/N;
ZX:=Image1.Width; ZY:=Image1.Height;
xp:=ZX/2; yp:=ZY/2;
X0:=Round(xp); Y0:=Round(yp);
MoveTo(Round(X0+a),Y0);
for i:=1 to N do begin
fi:=i*dfi;
if nr=1 then r:=a*(Abs(Sin(k*fi))+Cos(k*fi))
else r:=a*Abs(Sin(k*fi)+Cos(k*fi));
xp:=r*Cos(fi); yp:=r*Sin(fi);
X:=Round(X0+xp); Y:=Round(Y0-yp);
LineTo(X,Y);
end;
end;
end;
Skompilować i uruchomić program przyciskiem F9 na klawiaturze komputera.
Rys. 2 Uruchomiony program
4