Canvas



Zajmiemy się rysowaniem po formularzu. Jednak nie omówię tu rzeczy, które są powrzechnie znane. Narysujemy linie proste, krzywe, figury geometryczne, nauczymy się wypełniać zamknięte obszary.

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, np.:
MoveTo(0, 0);
LineTo(Form1.Width, Form1.Height)
narysuje linię prowadzącą z lewego górnego narożnika formy do jej lewej dolnej krawędzi. Teraz narysujemy krzywe. Do ich rysowania służy funkcja PolyBezier(canvas handle, pointer to array of TPoint, number of points). 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.:

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;
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);
end;
Dobra, a teraz pokażę jak wypełnić danym kolorem zamknięty obszar. Sł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.





...powrót