|
||||
|
||||
|
Capitolo 3Assi cartesianiQuesta applicazione è particolarmente importante perché gli algoritmi
utilizzati qui saranno inseriti in un nuovo componente Delphi (TOxy)
a partire dalla prossima lezione e velocizzeranno molto la realizzazione dei
programmi di grafica successivi.
Il componente essenziale di questa applicazione è il PaintBox Collochiamo quindi un PaintBox nella posizione Top =0, Left = 0 e con Width = 401, Height = 401, chiamandolo appunto PaintBox. Alla sua destra inseriamo i controlli che si vedono in figura: 1 Panel (allineato a destra), 1 LabelSc (con la Caption = Scala), 1 EditSc, 1 UpDownSc (collegato a EditSc), 1 ButtonDisegna (con la Caption = Disegna). Vediamo la procedura di disegno che viene associata sia all'evento OnClick del ButtonDisegna, sia all'evento OnChange di EditSc (non è più necessaria l'associazione ad un evento di UpDownScala).
Da notare, inoltre, l'uso dell'istruzione Pascal with do che permette di evitare di scrivere ogni volta PaintBox.Canvas. davanti ai metodi e alle proprietà del Canvas del PaintBox. Infatti, tutti i metodi e le proprietà che sono contenute nel blocco begin end di un with do vengono interpretate come riferite all'oggetto dichiarato dopo il with. procedure TFormAssiCartesiani.ButtonDisegnaClick(Sender: TObject);
var
sc, x, y: Integer;
begin
sc:=StrToIntDef(EditSc.Text, 40);
with PaintBox.Canvas do
begin
Repaint;
MoveTo(0, 200); LineTo(400, 200); // Asse X
MoveTo(400, 200); LineTo(400-20, 200-10);
MoveTo(400, 200); LineTo(400-20, 200+10);
MoveTo(200, 400); LineTo(200, 0); // Asse Y
MoveTo(200, 0); LineTo(200-10, 20);
MoveTo(200, 0); LineTo(200+10, 20);
Brush.Style:=bsClear;
TextOut(400-10, 200+10, 'X'); // Nomi assi
TextOut(200-20, 5, 'Y');
for x:=-200 div sc to 200 div sc-1 do // Etichette asse X
begin
MoveTo(200+x*sc, 200-5); LineTo(200+x*sc, 200+6);
TextOut(200+x*sc+2, 200+1, IntToStr(x));
end;
for y:=-200 div sc to 200 div sc-1 do // Etichette asse Y
begin
MoveTo(200-5, 200-y*sc); LineTo(200+6, 200-y*sc);
TextOut(200+2, 200-y*sc+1, IntToStr(y));
end;
Brush.Style:=bsSolid;
end;
end;
Esercizio. Migliorare il programma allineando il PaintBox alla client (Align = alClient) e modificare la procedura di disegno in modo che si adatti automaticamente alle dimensioni Width e Height del PaintBox quando l'utente ridimensiona la finestra. Infine associare la procedura anche all'evento OnResize della form FormAssiCartesiani.
|
|||
|
||||