Obszar rysowania czyli Canvas
Wszelkie operacje na grafice odbywają się na obiekcie typu TCanvas (kanwie).
Główne właściwości kanwy:
Brush określa atrybuty wypełnienia rysowanych obiektów:
Brush.Style.styl wypełnienia rysowanych obiektów, np.
bsSolid - stały jednolity kolor
bsCross - siatka
bsDiagCross - siatka przecinająca się pod ukosem
bsHorizontal - linie poziome
bsVertical - linie pionowe
bsClear - styl przeźroczysty
bsBDiagonal - linie pod ukosem "spadające" z prawego górnego rogu w dolny lewy
bsFDiagonal - linie "spadające" z lewego górnego rogu na prawy dolny.
Brush.Color kolor wypełnienia, np. clYellow, clRed, clBlack
Font ustawianie czcionki.np.:
Canvas.Font.Name := 'Arial Black'; // czionka
Canvas.Font.Size := 18; // rozmiar czionki
Canvas.Font.Color := clBlue; // kolor czcionki
Canvas.Font.Style := Font.Style + [fsUnderline] + [fsBold] //styl czcionki
Pen - (pióro) wszystkie właściwości rysowania lini - kontur.
Pen.Color - kolor lini, obramowania.
Pen.Width - grubość lini w pikslach
Pen.Mode - styl lini, obramowań. Style:
psSolid - linia ciągła
psDash - seria "dashes"
psDot - linia kropkowana
psDashDot - linia składająca się z "dashes" i kropek
psDashDotDot - "dash", kropka, kropka, "dash", kropka, kropka, "dash", kropka, kropka ..
psClear - brak lini
psInsideFrame - linia ciągła z różnymi kolorami dla różnych grubości
Główne metody kanwy:
Pixels[x,y] wygenerowanie punktu o współrzędnych x,y, np. Canvas.Pixels[110,210]:=clRed; //wygenerowanie punktu na formularzu w kolorze Czerwonym
LineTo(x,y) rysuje linię od pozycji kursora kanwy, do punktu o współrzędnych x,y
MoveTo(x,y) ustawia kursor kanwy do punktu o współrzędnych x,y
Rectangle(x1,y1,x2,y2) rysuje kwadrat o współrzędnych wierzchołków x1,y1,x2,y2
Elipse(x1,y1,x2,y2) rysuje elipsę o ogniskowych x1,y1,x2,y2
Draw(x,y,Grafika) rysuje obraz podany pod Grafika, np. bitmap, oddalony od lewej o x i od góry o y.
TextOut(x,y,tekst) wyświetla tekst w punkcie x,y, np.
Canvas.TextOut(100, 200,”Programowanie w Delphi");
Ćwiczenia do metody CANVAS
Zajmiemy się rysowaniem po formularzu czyli grafiką. Metoda, która będzie nam to tego potrzebna nazywa się Canvas i określa obszar rysowania. Metoda ta jest dostępna dla wielu obiektów, nas głownie będzie interesowała dla formularza, ponieważ właśnie po formularzu będziemy rysowali. Dla metody canvas istniej wiele procedur i funkcji, najlepiej można się o tym przekonać wpisując Canvas. I rozwinie się lista tych metod. Niektóre z nich zostaną omówione.
Przykład1:
Na początek linie. Do narysowania linii prostej służą funkcje MoveTo(x,y) i LineTo(x,y). Pierwsza z nich służy do ustalenia pierwszego punktu, a drugi do ustalenia drugiego (końcowego) po klinięciu na formularz, np.:
procedure TForm1.FormClick(Sender: TObject);
begin
Canvas.MoveTo(0,0);
Canvas.LineTo(Form1.Width, Form1.Height);
end;
narysuje linię prowadzącą z lewego górnego narożnika formy do jej lewej dolnej krawędzi.
Przykład2
Do wygenerowania punktu może służyć metoda Pixels, po dwukrotnym kliknęciu na formularz np.:
procedure TForm1.FormDblClick(Sender: TObject);
begin
Canvas.Pixels[120,240]:=clLime; //wygenerowanie punktu na formularzu w kolorze Lime
end;
Przykład 3
Teraz narysujemy krzywe. Do ich rysowania służy funkcja PolyBezier(canvas handle, pointer to array of TPoint, number of points).
Wszystkie te instrukcje najlepiej umieścić w procedurze:
procedure TForm1.FormPaint(Sender: TObject);
begin
end;
uruchamianej po zajściu zdarzenia OnPaint polegającego na konieczności odświeżania formularza.
Narysujemy dwiema krzywymi ósemkę:
var
pkt:array[1..4] of TPoint; // tablica ze współrzędnymi
begin
pkt[1]:=Point(100,0); // podanie współrzędnych
pkt[2]:=Point(0,50);
pkt[3]:=Point(200,100);
pkt[4]:=Point(100,150);
PolyBezier(canvas.handle, pkt, 4); // narysowanie pierwszej części
pkt[1]:=Point(100,0);// podanie nowych współrzędnych
pkt[2]:=Point(200,50);
pkt[3]:=Point(0,100);
pkt[4]:=Point(100,150);
PolyBezier(canvas.handle, pkt, 4); // narysowanie drugiej części
end;
Do narysowania figur można wykorzystać dwie funkcje: PolyLine(canvas handle, pointer to array of TPoint, number of points) lub Polygon(canvas handle, pointer to array of TPoint, number of points); np.:
Narysujemy w lewym górnym rogu formularza gwiazdę:
var pkt: array[1..6] of TPoint;
begin
pkt[1]:=Point(40,10);
pkt[2]:=Point(20,60);
pkt[3]:=Point(70,30);
pkt[4]:=Point(10,30);
pkt[5]:=Point(60,60);
pkt[6]:=Point(40,10);
Polyline(canvas.handle,pkt,6);
end;
Aby wypełnić danym kolorem zamknięty obszar można użyć do tego funkcja FloodFill(X, Y, TColor; TFillStyle).
var
pkt: array[1..4] of TPoint;
begin
pkt[1]:=Point(100,0);
pkt[2]:=Point(0,200);
pkt[3]:=Point(300,200);
pkt[4]:=Point(200,0);
Polygon(canvas.handle, pkt, 4);
canvas.brush.color:=clred;
Canvas.FloodFill(100, 1, clWhite, fsSurface);
end;
Są dwie możliwości wypełnienia: fsSurface - Wypełnia obszar, który zawiera kolor zadeklarowany w funkcji; fsBorder - Wypełnia obszar, który nie zawiera koloru zadeklarowanego w funkcji.
Przykład4
Do narysowania figury foremnej służą procedury:
Canvas.Rectlange(X1:integer;Y1:integer;X2:integer;Y2:integer); // rysuje prostokąt o podanych wymiarach
Canvas.Ellipse(X1:integer;Y1:integer;X2:integer;Y2:integer); //rysuje elipsę o podanych wymiarach
Do określenia wypełnienia takiego obiektu służy metoda Brush np.:
Canvas.Brush.Color:=clblue //wypełnienie kolorem niebieskim
Canvas.Brush.Styl:=bsClear //obiekt zostaje wyczyszczony
Podobnie aby określić kontur obiektu należy użyć metody Pen np.”
Canvas.Pen.Color:=clred //kontur zostanie narysowany kolorem czerwonym
Canvas.Pen.Styl:=psDot //obiekt zostaje narysowany linią przerywaną
Ćwiczenia
Umieść w procedurze OnPaint dla formularza polecenia które narysują koło w kolorze Lime bez wypełnienia, oraz kwadrat w kolorze Fuchsia wypełniony deseniem zakreskowanym.
Narysuj na formularzu koła olimpijskie każde w innym kolorze.
Narysuj na formularzu kwadrat i wpraw go ruch, tak aby zmieniał swoje na formularzu.
Umieść na formularzu tekst „Programowanie w Delphi” i wpraw ten tekst w ruch tak aby pojawił się z lewej strony formularza i chował się z prawej strony. Wystarczy jeżeli ruch zostanie wykonany raz.
Narysuj na formularzu choinkę i gwiazdkę oraz dołóż kolędę, która będzie uruchamiana po kompilacji programu.
Wykonaj w delphi formularz w którym zademonstrujesz możliwości rysowania na formularzu różnych figur.