85
1 Aplikacje w DELPHI (cd..) Aplikacje w DELPHI (cd..) GRAFIKA GRAFIKA , DATA, OKNA DIALOGOWE, , DATA, OKNA DIALOGOWE, MODUŁ MODUŁ dr inż. Paweł Mazurek dr inż. Paweł Mazurek

Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

  • Upload
    buidang

  • View
    256

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

1

Aplikacje w DELPHI (cd..)Aplikacje w DELPHI (cd..)

GRAFIKAGRAFIKA, DATA, OKNA DIALOGOWE, , DATA, OKNA DIALOGOWE, MODUŁMODUŁ

dr inż. Paweł Mazurekdr inż. Paweł Mazurek

Page 2: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

2

Grafika w Delphi – komponent ShapeGrafika w Delphi – komponent Shape

Komponent Shape (na zakładce Additional Palety Komponentów) umożliwia dodawanie do formularza figur geometrycznych o różnych kształtach. Jego użycie jest proste, wystarczy umieścić go w formularzu i ustawić według własnych potrzeb właściwości pędzla (Brush), pióra (Pen) i kształtu (Shape). Teraz można przystąpić do rysowania okręgów, elips, kwadratów i prostokątów (również z zaokrąglonymi narożnikami). Właściwość Brush wpływa na kolor tła, właściwość Pen zmienia kolor i grubość krawędzi figur.

Page 3: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

3

Grafika w Delphi – komponent ShapeGrafika w Delphi – komponent Shape

Page 4: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

4

Grafika w Delphi – komponent ShapeGrafika w Delphi – komponent Shapeuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;procedure TForm1.ComboBox1Change(Sender: TObject);beginCase Combobox1.ItemIndex of0:Shape1.Shape:=stCircle;1:Shape1.Shape:=stSquare;2:Shape1.Shape:=stRoundSquare;end;end;procedure TForm1.ScrollBar1Change(Sender: TObject);beginShape1.Width:= Scrollbar1.Position;Shape1.Height:= Scrollbar1.Position;end;

Page 5: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

5

Grafika w Delphi – obiekt TCanvasGrafika w Delphi – obiekt TCanvas

Niektóre komponenty posiadają właściwość typu obiektowego TCanvas (płótno). Są to m.in.: TForm, TImage, TPaintBox, TBitmap, TComboBox, TStringGrid, TlistBox, TPrinter.

Właściwość Canvas zawiera metody, które pozwalają na rysowanie na tych komponentach za pomocą linii różnych figur, kolorowanie powierzchni oraz wyświetlanie tekstu. Możliwa jest również zmiana koloru i grubości linii, koloru i wzoru wypełnienia, atrybutów czcionki itd.

Rysowanie za pomocą metod obiektu Canvas różnych obiektów może być przydatne do zmiany cech niektórych komponentów, np. TStringGrid czy TCTart, a także przy drukowaniu formularza i tekstu.

Page 6: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

6

Grafika w Delphi – obiekt TCanvasGrafika w Delphi – obiekt TCanvas

Wybrane właściwości obiektu Tcanvas:

Brush — określa wzór lub kolor wypełnienia figur (pędzel);Font — krój czcionki dla wyświetlanych napisów;Pen — opisuje cechy kreślonych linii: grubość, styl, kolor -pióroPenPos — określa współrzędne kursora graficznego.

Podstawowymi parametrami większości procedur i funkcji graficznych są współrzędne punktu na komponencie, po którym rysujemy. Lewy górny róg ma współrzędne (0, 0), a prawy dolny najczęściej (Width, Height).

Page 7: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

7

Grafika w Delphi – obiekt TCanvasGrafika w Delphi – obiekt TCanvas

Wyświetlanie prostych figur geometrycznych i tekstu

Proste figury i tekst możemy wyświetlić na formularzu, korzystając z procedur i funkcji obiektu typu Tcanvas.

Kolor:=Canvas.Pixels[x,y] Za pomocą funkcji Pixels można odczytać kolor piksela w miejscu o współrzędnych (x, y) — zmienna Kolor jest typu Tcolor.

Canvas.Pixels[10,20]:=clRedTa sama funkcja wywołana w ten sposób powoduje wyświetlenie na formularzu czerwonego punktu w miejscu o współrzędnych [10, 20].

MoveTo(x,y: integer) Przenosi kursor graficzny do punktu o współrzędnych x, y.

Page 8: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

8

Grafika w Delphi – obiekt TCanvasGrafika w Delphi – obiekt TCanvasLineTo(x,y:integer) Rysuje linię od bieżącej pozycji kursora graficznego do punktu o współrzędnych x, y.

Rectangle(x1, y1, x2, y2: Integer) Procedura rysuje prostokąt wypełniony standardowym kolorem pędzla (Canvas.Brush.Color).

Ellipse(x1, y1, x2, y2: Integer) Procedura rysuje elipsę (lub koło) — parametrami są współrzędne dwóch przeciwległych wierzchołków prostokąta (kwadratu), w który elipsa jest wpisana.

Polyline(Points: array of TPoint) Procedura rysuje linię łamaną lub wielokąt. Parametrami są współrzędne punktów, które zostaną połączone linią. Jeśli współrzędne punktu pierwszego i ostatniego są takie same, to rysowany jest wielokąt; w przeciwnym razie linia łamana.

np. procedura: Polyline([Point(40, 10), Point(20, 60), Point(70, 30),Point(10, 30), Point(60, 60), Point(40, 10)]) narysuje gwiazdę pięcioramienną.

Page 9: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

9

Page 10: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

10

Rectangle(X1, Y1, X2, Y2: Integer) lub Rectangle(R: TRect) – kreśli prostokąt, przykład:

Canvas.Rectangle(50, 50, 150, 100);FillRect(R: TRect) – prostokąt bez konturu, przykład:Canvas.FillRect(Rect(0,0,100,100));FrameRect(R: TRect) – kontur prostokąta, przykład:Canvas.FrameRect(Rect(0,0,100,100));RoundRect(X1, Y1, X2, Y2, X3, Y3: Integer) – kreśli prostokąt z zaokrąglonymi rogami:Canvas.RoundRect(50,50,150,100,30,30);Ellipse(X1, Y1, X2, Y2: Integer) lub Elipse(R: Trect) – kreśli elipsę, przykład:Canvas.Ellipse(50, 50, 150, 100);Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer) – kreśli łuk na bazie elipsy, przykład:Canvas.Arc(0,0,200,100,200,0,0,50);Chord(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer) – kreśli część elipsy ograniczoną

cięciwą,np:Canvas.Chord(0,0,200,100,200,0,0,50);Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer) – kreśli wycinek elipsy, przykład:Canvas.Pie(0,0,200,100,200,0,0,50);TextOut(X, Y: Integer; Tekst: string) – kreśli łańcuch tekstowy w określonych

współrzędnych: Canvas.TextOut(50, 30, 'Łańcuch tekstowy jako grafika.');TextRect(Prostokat: TRect; X, Y: Integer; Tekst: string) – kreśli łańcuch tekstowy

ograniczony obszarem prostokątnym, przykład:Prostokat:=Rect(20,20,100,80);Canvas.TextRect(Prostokat,30,40,'Łańcuch tekstowy.');

Page 11: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

11

Grafika w Delphi – obiekt TCanvasGrafika w Delphi – obiekt TCanvasPolygon(Points: array of TPoint) Procedura umożliwia narysowanie wielokąta wypełnionego bieżącym kolorem i stylem pędzla. Przykład: Canvas.Brush.Color = clRed; Canvas.Polygon([Point(10,10), Point(30,10), Point(130,30), Point(240,120)]);narysowanie czworokąta wypełnionego kolorem czerwonym. Współrzędne punktu pierwszego i ostatniego nie muszą się pokrywać, ponieważ procedura i tak łączy na końcu punkt ostatni z punktem pierwszym.

Refresh Odświeżanie formularza — procedura kasuje wszystkie obiekty rysowane za pomocą metod obiektu Canvas i nieumieszczone w procedurze obsługi zdarzenia OnPaint.

Draw(x, y:integer; Graphic:TGraphic)Rysuje obraz określony parametrem Graphic w miejscu o współrzędnych x i y.

Arc(x1,y1, x2,y2, x3,y3, x4,y4: integer)Rysuje krzywą eliptyczną w prostokącie o współrzędnych (x1, y1; x2, y2), od punktu o współrz. (x3, y3) do punktu (x4, y4).

Page 12: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

12

Grafika w Delphi – obiekt TCanvasGrafika w Delphi – obiekt TCanvasTextOut(x,y:integer; const Text:string)Wyświetla tekst od punktu o współrzędnych x, y — lewy górny róg prostokąta zawierającego tekst; Text to parametr w postaci tekstu stałego w apostrofach, np. 'Ala ma kota', lub zmienna zawierająca łańcuch znaków, np. a:='Ala ma kota' (const w nagłówku procedury oznacza podobne wywołanie jak w przypadku wartości, lecz umożliwia bardziej efektywne wykorzystanie pamięci).

CopyRect(const Dest: TRect; Canvas: TCanvas; const Source:TRect)Kopiuje część obrazu z jednego płótna na inne płótno.

FillRect(const Rect: Trect)Rysowanie prostokąta wypełnionego bieżącym kolorem i wzorem.

FloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle)Wypełnianie tzw. powodziowe obiektów.

FrameRect(const Rect: Trect)Rysowanie obwodu prostokąta.

Page 13: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

13

Grafika w Delphi – obiekt TCanvasGrafika w Delphi – obiekt TCanvasPie(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);Rysowanie wycinka koła.

RoundRect(X1, Y1, X2, Y2, X3, Y3: Integer)Rysowanie prostokąta z zaokrąglonymi narożnikami.

StretchDraw(const Rect: TRect; Graphic: TGraphic)Dopasowanie rysunku do obszaru danego prostokąta.

TextHeight(const Text: string):IntegerFunkcja zwraca wysokość tekstu w pikselach.

TextOut(X, Y: Integer; const Text: string)Procedura wyświetla napis na komponencie posiadającymwłaściwość TCanvas.

TextRect(Rect: TRect; X, Y:Integer; const Text: string)Procedura wyświetla napis w prostokącie, którego współrzędne są podane w postaci typu TRect (pierwszy parametr). Procedurę wykorzystywano przy formatowaniu komórek tabeli.

TextTidth(const Text: string):IntegerFunkcja zwraca szerokość tekstu w pikselach.

Page 14: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

14

Grafika w Delphi Grafika w Delphi Pióro definiuje obiekt, którego przeznaczeniem jest rysowanie linii. Może to być prosta linia rysowana od jednego punktu do drugiego lub krawędź rysowana wokół prostokątów, elips i wielokątów. Dostęp do pióra, będącego obiektem klasy TPen, następuje poprzez właściwość Pen klasy TCanvas.

Color - Ustala kolor linii.

Handle - Zawiera kontekst urządzenia pióra (HDC). Stosowany podczas bezpośrednich odwołań do GDI.

Mode - Określa sposób w jaki linia będzie rysowana w kontekście bieżącej zawartości obszaru (normalny, inwersyjny, xor, itd.).

Style - Określa styl pióra. Może to być styl ciągły, kropkowy, kreskowy, kropkowo-kreskowy, czysty lub inny.

Width - Zawiera grubość linii w pikselach.

Page 15: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

15

Grafika w Delphi – obiekt TCanvasGrafika w Delphi – obiekt TCanvas

Wyświetlenie na formularzu linii rysowanych różnymi stylamiprocedure TForm1.Button1Click(Seender: TObject);var x,y:integer;beginx := 210;y := y+10;//y - zmienna globalnaCanvas.MoveTo(x,y);x := Random(ClientWidth - 10);y := Random(ClientHeight - 10);Canvas.Pen.Color := RGB(Random(256)

,Random(256),Random(256));case Random(5) of0: Canvas.Pen.Style := GsSolid;1: Canvas.Pen.Style := GsDash;2: Canvas.Pen.Style := GsDot;3: Canvas.Pen.Style := GsDashDot;4: Canvas.Pen.Style := GsDashDotDot;end;Canvas.LineTo(x+200, y);end;

Page 16: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

16

Grafika w Delphi – obiekt TCanvasGrafika w Delphi – obiekt TCanvas

Wyświetlenie na środku formularza punktu koloru czerwonego, (przy czym nie może w tym miejscu znajdować się inny obiekt (np. przycisk), bo wyświetlony piksel zostanie przez ten obiekt przesłonięty).

procedure TForm1.Button1Click(Sender: TObject);beginCanvas.Pixels[ClientWidth div 2, ClientHeight div 2]:=clRed;end;

Page 17: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

17

Grafika w Delphi – obiekt TCanvasGrafika w Delphi – obiekt TCanvas

Wyświetlenie końcowych współrzędnych formularza

procedure TForm1.Label1Click(Sender: TObject);beginLabel1.Caption:=IntToStr(ClientWidth)','+IntToStr(ClientHeight);end;

Page 18: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

18

Grafika w Delphi Grafika w Delphi

Pędzel jest obiektem służącym do wypełniania wnętrza obszarów – wszystkie rysowane elipsy, prostokąty, wielokąty itp. zostaną wypełnione zgodnie z bieżącymi ustawieniami pędzla. Ustawienia te nie ograniczają się tylko do koloru (jak można by mniemać na podstawie potocznego znaczenia słowa „pędzel”) lecz obejmują również wzór („deseń”) wypełnienia, bądź to w jednej z predefiniowanych postaci, bądź też w postaci określonej przez wskazaną bitmapę.

W ramach klasy TCanvas pędzel reprezentowany jest przez właściwość Brush klasy TBrush.

Page 19: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

19

Grafika w Delphi Grafika w Delphi

BitmapBitmapa określająca wzór wypełnienia. W przypadku Windows 95 bitmapa ta nie może przekroczyć rozmiaru 8×8 pikseli.ColorKolor wypełnienia.HandleKontekst urządzenia (HDC) pędzla. Stosowany przy bezpośrednich odwołaniach do GDI.StyleStyl pędzla (jednolity, wymazujący (clear) lub jeden z predefiniowanym wzorów).

Page 20: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

20

Grafika w Delphi – obiekt TCanvasGrafika w Delphi – obiekt TCanvas

Wyświetlenie na formularzu trzech różnych prostokątów — ramkę, prostokąt wypełniony kolorem BrusT.Color, prostokąt z zaokrąglonymi brzegami.

procedure TForm1.Button3Click(Sender: TObject);varprost: TRect;beginprost:= Rect(200,10,300,100);Canvas.Brush.Color := clBlack;

Canvas.FrameRect(prost);Canvas.Brush.Color := clGreen;

Canvas.Rectangle(200,120,300,210);

Canvas.RoundRect(200,230,300,320,20,20);end;

Page 21: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

21

Grafika w Delphi – obiekt TCanvasGrafika w Delphi – obiekt TCanvas

Narysowanie na formularzu trójkąta o zielonym obwodzie i żółtym wypełnieniu.

procedure TForm1.Button1Click(Sender: TObject);beginCanvas.Brush.Color:=clYellow;Canvas.Pen.Color:=clGreen;Canvas.Polygon([Point(20,20),Point(200,20),Point(110,100)]);end;

Page 22: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

22

Grafika w Delphi – obiekt TCanvasGrafika w Delphi – obiekt TCanvas

Przy wypełnianiu domyślną wartością właściwości Style jest bsSolid, co oznacza styl jednolity. Wypełnianie obszarów wzorem wymaga nadania właściwości Style odpowiedniej wartości (bsHorizontal, bsVertical, bsFDiagonal, bsBDiagonal, bsCross, bsDiagCross). Poniższy przykład rysuje koło wypełnione wzorem w kratę obróconą o 45 stopni.

Canvas.Brush.Color:= clBlue;Canvas.Brush.Style:= bsDiagCross;Canvas.Ellipse(20,20,220,220);

Page 23: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

23

Grafika w Delphi – obiekt TCanvasGrafika w Delphi – obiekt TCanvas

Kolejną interesującą cechą pędzli jest opcja tła w postaci bitmapy. Najpierw przyjrzyj się poniższemu fragmentowi kodu: Canvas.Brush.Bitmap:=TBitmap.Create;Canvas.Brush.Bitmap.LoadFromFile('tlo.bmp');Canvas.Ellipse(20, 20, 220, 220);Canvas.Brush.Bitmap.Free;

Pierwsza linia kodu tworzy obiekt klasy TBitmap i przypisuje go do właściwości Bitmap pędzla.

W drugiej linii następuje załadowanie bitmapy z pliku.

Trzecia linia rysuje elipsę. Po jej narysowaniu bitmapa jest zwalniana – jest to niezbędne, ponieważ czynność ta nie jest wykonywana przez bibliotekę VCL. Zaniedbanie tej operacji spowoduje zagubienie fragmentu pamięci w programie.

Page 24: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

24

Grafika w DelphiGrafika w Delphi

Czcionki stosowane przez klasę TCanvas nie różnią się niczym od czcionek stosowanych w formularzach czy innych komponentach. Właściwość Font klasy TCanvas jest identyczna jak właściwość o tej nazwie należąca do dowolnego komponentu. Canvas.Font.Name:= 'Courier New';Canvas.Font.Size:= 14;Canvas.Font.Style:= Canvas.Font.Style+ [fsBold];Canvas.TextOut(20, 20, 'Test');

Page 25: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

25

Grafika w Delphi – zdarzenie OnPaintGrafika w Delphi – zdarzenie OnPaint

Instrukcje zawierające metody obiektu Canvas można umieszczać w procedurach obsługi zdarzenia OnClick dla przycisków, dla formularza i innych komponentów. Można również korzystać z innych zdarzeń komponentów. Jednak tylko niektóre z nich umożliwiają tzw. „trwałe” rysowanie, czyli rysowanie odnawiane po każdej zmianie, np. po zmianie rozmiaru okna i przykryciu w ten sposób części obiektów graficznych. Dla okna formularza korzysta się w tym celu ze zdarzenia OnPaint. Dla innych komponentów podobne zdarzenia mają inne nazwy.

Page 26: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

26

Grafika w Delphi – zdarzenie OnPaintGrafika w Delphi – zdarzenie OnPaint

OnPaint Zdarzenie dla formularza generowane każdorazowo, gdy zawartość okna formularza wymaga odświeżenia. Sytuacja taka ma miejsce przy tworzeniu okna formularza, a także wtedy, gdy np. jedno okno zostanie przesłonięte innym oknem lub gdy następuje zmiana jego rozmiaru.

PaintBoxPaint Odpowiednik zdarzenia OnPaint dla komponentu PaintBox.

OnDrawCell Zdarzenie występujące dla komponentu typu TDrawGrid i TStringGrid — umożliwia „trwałe” rysowanie obiektów i wyświetlanie tekstu w komórkach.

OnAfterDraw Zdarzenie dla komponentu typu TChart, odpowiednik zdarzenia OnPaint.

Page 27: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

27

Grafika w Delphi – zdarzenie OnPaintGrafika w Delphi – zdarzenie OnPaint

Napisanie na formularzu tekstuFont (czcionka) – krój czcionki do kreślenia tekstu:• Charset – zestaw znaków,• Color – kolor,• Height – wysokość w pikselach,• Name – nazwa,• Pitch – szerokość znaków (fpDefault, fpFixed, fpVariable),• Size – wielkość w punktach,• Style – styl (fsBold, fsItalic, fsUnderline, fsStrikeOut).

Page 28: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

28

Edytor graficznyEdytor graficzny

Page 29: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

29

Edytor graficznyEdytor graficzny

Edytor Graficzny Delphi umożliwia tworzenie i edytowanie bitmap (.bmp), ikon (.ico) i kursorów (.cur). Oprócz tego można również tworzyć projekty zasobów, składające się z wielu bitmap, ikon i kursorów przechowywanych w pojedynczym pliku (.res). Plik taki może być następnie dodany do projektu Delphi, umożliwiając wykorzystanie zapisanych w nim zasobów.

Edytor Graficzny umożliwia tworzenie rysunków dwu- i czterokolorowych, a w przypadku plików bitmap również 256-kolorowych. Podczas rysowania można wybrać dowolny kolor spośród dostępnych.

Page 30: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

30

Kolor przezroczysty i odwróconyKolor przezroczysty i odwrócony

W przypadku ikon i kursorów możliwe jest zastosowanie koloru przezroczystego (ang. transparent – słowo kolor jest tu pojęciem umownym). Narysowanie piksela w „kolorze przezroczystym” równoważne jest z … brakiem jego narysowania dzięki temu możliwe jest „prześwitywanie” spod ikony (lub kursora) fragmentów tła, na którym aktualnie się ona (on) znajduje. Niemal każda ikona i każdy kursor korzysta z koloru przezroczystego.

Innym przykładem koloru umownego jest kolor odwrócony (ang. inverted) – „narysowanie” w danym miejscu piksela w kolorze odwróconym jest równoważne odwróceniu (do koloru dopełniającego) piksela aktualnie znajdującego się w tym miejscu.

Page 31: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

31

Komponent ImageKomponent Image

Do wyświetlenia bitmapy w formularzu służy komponent Image. Właściwość Picture klasy TImage jest obiektem klasy TPicture. Wyboru obrazu można dokonać na etapie projektowania poprzez Inspektor Obiektów lub poprzez ładowanie w trakcie pracy programu.

Komponent PaintBox. Udostępnia on prostokątny obszar w postaci tzw. płótna (canvas), stanowiącego arenę wszelkich operacji graficznych. Płótno to reprezentowane jest przez jego właściwość Canvas, będącą obiektem klasy TCanvas; klasa ta odpowiedzialna jest za większość operacji graficznych wykonywanych przez Delphi.

Page 32: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

32

Komponent ImageKomponent ImageKomponent Image służy do wyświetlania bitmap, metaplików i ikon. Sam komponent jest niewidoczny.

Zmiana rozmiaru obrazuObrazy wstawiane do komponentu są często zbyt małe lub zbyt duże w stosunku do komponentu. Można dopasować komponent do obrazu lub oraz do komponentu jedną z następujących metod:Użyj Image editor, aby zmienić rozmiary obrazka przed jego umieszczeniem.Dopasuj rozmiar grafiki do rozmiaru komponentu ustawiając właściwość Stretch komponentu Image na True. Zmień wielkość komponentu, aby dopasować go do grafiki ustawiając właściwość AutoSize na True zanim zostanie wstawiona grafika.Aby wyśrodkować rysunek w komponencie, ustaw właściwość Center na True.

Aby przesunąć komponent na wierzch lub pod spódwybierz Edit|Bring to Front lub Edit|Send to Back .

Wstawianie rysunku w kodzie programumetoda LoadFromFile - Image1.Picture.LoadFromFile(‘Rysunki/obrazek1.bmp’);

Page 33: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

33

Page 34: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

34

Page 35: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

35

Komponent Rysunek (PaintBox)

Komponent PaintBox zapewnia przestrzeń do „ręcznego” rysowania dowolnej grafiki (metodami klasy TCanvas).

Wybrane właściwości: Canvas – płótno do kreślenia obiektów graficznych.

Wybrane zdarzenia: OnPaint – zdarzenie zachodzi gdy zawartość komponentu

wymaga przerysowania.

Page 36: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

36

Proste operacje graficzneProste operacje graficzne

Wypisywanie tekstu

Wypisywanie tekstu nie wydaje się być operacją trudną – czy jest tak w rzeczywistości?

Metody TextOut i TextRect

Metoda TextOut jest najprostszym środkiem służącym wypisywaniu tekstu; tak naprawdę niewiele można powiedzieć na jej temat. Wystarczy przekazać jej współrzędne X i Y oraz tekst do wyświetlenia – Canvas.TextOut(20,20, 'Joshua Reisdorph');

i gotowe – powyższa instrukcja powoduje wyświetlenie napisu...

Page 37: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

37

Proste operacje graficzneProste operacje graficzne

Metoda TextRect, również wypisująca podany tekst w podanym położeniu, umożliwia ponadto określenie prostokątnego obszaru ograniczającego – każdy fragment tekstu, który wysunie się poza tę granicę, zostanie obcięty. Poniższy fragment kodu daje pewność, iż wyświetlonych zostanie nie więcej niż 100 pikseli tekstu: Canvas.TextRect( Rect(20,50,120,70), 20,50, 'To jest bardzo długi tekst, który może zostać obcięty,');

Obydwie metody – TextOut i TextRect – mogą wyświetlać jedynie pojedyncze linie tekstu. Nie są wykonywane żadne funkcje formatujące tekst.

Page 38: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

38

Proste operacje graficzneProste operacje graficzne

Funkcja DrawText

Funkcja biblioteki API Windows – DrawText – daje znacznie większe możliwości rysowania tekstu niż metoda TextOut. Klasa TCanvas nie posiada metody obudowującej tę funkcję, dlatego konieczne jest odwołanie się do nie w sposób bezpośredni.

varR: TRect;

begin R:=Rect(20,20,220,80); Canvas.Rectangle(20,20,220,80); DrawText(Canvas.Handle, 'Przykład użycia funkcji DrawText.', -1, R,DT_SINGLELINE or DT_VCENTER or DT_CENTER);end;

Page 39: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

39

Rysowanie myszkąRysowanie myszką

Program ten pokazuje, jak rysować myszką po płótnie formatki. W programie można zmienić rozmiar pędzla, jego kolor oraz wyczyścić obraz.ComboBox. W pozycji Items definiujemy kilka liczb które będą rozmiarami pędzla. W pozycji Text wpisujemy przykładowo napis „Rozmiar pędzla”.

ButtonW pozycjach Caption wprowadzić napisy (kolor, gumka, odświeżenie, zamknij).

ColorDialog. Okno wyboru koloru.

Page 40: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

40

W programie wykorzystujemy zdarzenia onMouseDown, onMouseMove i onMouseUp zachodzące odpowiednio podczas: wciśnięcia lewego przycisku myszy, przesuwania z wciśniętym lewym przyciskiem i podczas puszczania lewego klawisza myszy, kiedy znajdujemy się nad danym komponentem. W tym przypadku będzie to formatka.

W sekcji Implementation zadeklarujemy zmienną typu Boolean, której zadaniem będzie wykrycie faktu naciśnięcia i puszczenia lewego przycisku myszki.

Opcja Gumki - polega na rysowaniu kolorem domyślnym formy.

Page 41: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

41

unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ToolWin, Buttons;type TForm1 = class(TForm) Button1: Tbutton;ColorDialog1: TColorDialog; Button2: TButton; ComboBox1: TComboBox; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState;

X, Y: Integer); procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Button2Click(Sender: TObject); procedure ComboBox1Change(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end;

Page 42: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

42

var Form1: Tform1;implementation

{$R *.dfm} Var rysuj:Boolean; <- zmienna śledząca lewy przycisk

procedure TForm1.Button1Click(Sender: TObject);beginClose;end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);beginCanvas.MoveTo(x,y);rysuj:=True;end; (* W czasie wciskania lewego przycisku ustawiamy się w punkcie

o współrzędnych X, Y , czy tam, gdzie klikniemy. *)

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);Begin if rysuj then Canvas.LineTo(x,y);End; (* jeśli zmienna rysuj ma wartość True to przesuń się do punktu

X,Y, czyli tam gdzie, przesuwasz wskaźnik myszy *)

Page 43: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

43

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);beginrysuj:=False;End; (*Jak puścimy lewy przycisk, przypisz zmiennej rysuj wartość False. *)

procedure TForm1.Button2Click(Sender: TObject);beginif ColorDialog1.Execute Then Canvas.Pen.Color:=ColorDialog1.Color;End; (* Nadaj pędzlowi kolor wybrany w oknie ColorDialog1. *)

procedure TForm1.ComboBox1Change(Sender: Tobject);beginCanvas.Pen.Width:=ComboBox1.ItemIndex;End; (* Szerokość (Width) pędzla równa się liczbie z ComboBox1. *)

procedure TForm1.Button3Click(Sender: TObject);beginRepaint;End; (* odśwież, wyczyść *)

procedure TForm1.Button4Click(Sender: TObject);begin Canvas.Pen.Color:=clBtnFace;end;End. (* Do pędzla (tutaj: Gumki) przypisz kolor formy. *)

Page 44: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

44

Data i czasData i czas

Page 45: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

45

Data i czasData i czasData i czas są reprezentowane w komputerze za pomocą typu TdateTime.

Zmienne typu daty porównujemy stosując operatory: <,>,<=,>=,=,<>

Trunc – liczba dni która dzieli dwie daty (część całkowita)

Funkcje związane z datą (moduł SysUtils):function Date: TDateTime; - zwraca aktualna datęfunction DateToStr (Date:TDateTime):String; - zamienia datę na łańcuchfunction StrToDate (cons S:String):TDateTime; - zamienia datę [podaną w postaci łańcuch na typ TdateTime. Format daty: m/d/y lub y/m/dfunction DayOfWeek(Data: TDateTime): Integer – zwraca numer dnia tygodnia.

Page 46: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

46

Data i czasData i czasfunction DateTimeToString (var Wynik: String; const Format: String; Data:TDateTime); - procedura zwraca w parametrze Wynik datę podaną parametrami Data według formatu Format:

d - wyświetla dzień jako liczbędddd - wyswietal nazwę dnia tygodniammmm - wyświetla pełna nazwę miesiącayyyy - wyświetla rok jako liczbę czterocyfrową.

przykład

DateTimeToString(wynik, 'dddd,d mmm d yyy r.',Date);Label1.Caption:=wynik;

Page 47: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

47

Data i czasData i czas

Time - procedura zwraca bieżący czas systemowyNow – zwraca datę I czas

DecodeDate (data, rok,miesiąc,dzień) dzieli datę na rok....DecodeTime (czas, g,m,s,ms) dzieli czas

EncodeDate(r,m,d) przekształca datę wyrażony w postaci roku... do postaci TdateTimeEncodeTime(g,m,s,ms) przekształca czas wyrażony w postaci godzin... do postaci TdateTime

Page 48: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

48

Data i czasData i czas

Komponent DateTimePicker pozwala na wproadzeniedaty przez wybór kalendarza.

Właściwości:DateFormat - format daty: dfShort, dfLongDate - data ustawiana jako domyślna w oknie,

standardowo - bieżąca MinDate - minimalna data możliwa do wyboru z kalendarzaMaxDate - maksymalna data możliwa do wyboru z

kalendarza

Komponent UpDown to strzałki do przesuwania wartości skali z określonym krokiem. Właściwości:Associate, Min, Max, Position

Page 49: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

49

Data i czasData i czasAplikacja obliczająca ile dni dzieli datę od daty zadeklarowanejtype TForm1 = class(TForm) Label1: TLabel; DateTimePicker1: TDateTimePicker; procedure DateTimePicker1Change(Sender: TObject);....

procedure TForm1.DateTimePicker1Change(Sender: TObject);

varile:Real;beginile:=DateTimePicker1.Date-Date;Label1.Caption:='Liczba dni: '+IntToStr(Trunc(ile));end;

Page 50: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

50

Data i czasData i czas

Odebranie z komponentu DateTimePicker wybranej przez użytkownika daty i wyświetlenie jej na etykiecie.

Page 51: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

51

Data i czasData i czas

Komponent TTimerumożliwia wykonanie jakiegoś działania z określonm opóźnieniem lub wykonac jakieś działanie cyklicznie w określonych odstępach czasu.

Page 52: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

52

Okna dialogoweOkna dialogowe

Page 53: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

53

Okienka DialogoweOkienka Dialogowe

Obsługę standardowych dialogów charakterystycznych dla środowiska Windows, takich jak wybór nazwy pliku do odczytu lub zapisu, określenie atrybutów czcionki, wydruku... umożliwiają komponenty zakładki DIALOGS.

Komponenty niewizualneokna pojawiają się podczas wykonywania funkcji execute :

true/false

Page 54: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

54

Okienka dialogoweOkienka dialogowe

TopenDialog – służy do wyświetlania okna Otwarcie pliku

Page 55: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

55

Okienka dialogoweOkienka dialogowe

dla okna ustawiony filtr na wyświetlane pliki przez wykorzystanie właściwości Filter.

Page 56: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

56

Okienka dialogoweOkienka dialogowe

Page 57: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

57

Właściwości komponentu TOpenDialogsWłaściwości komponentu TOpenDialogs

Title Określa tytuł okna, domyślnie Wybierz nazwę pliku.

InitialDir Określa folder, którego zawartość wyswietlana jest bezpośrednio po wywołaniu procedury.

FileName Właściwość zawiera nazwę wybranego pliku wraz ze ścieżką.

DefaultExt Określa domyślne rozszerzenie dla pliku

Page 58: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

58

Komponenty DialogsKomponenty Dialogs

TSaveDialog umożliwia wyswietlenie okna wyboru nazwy pliku do zapisu. Ustawienie Options ofOverwritePrompt na true zapobiega nadpisywaniu.

TOpenPictureDialog umożliwia wyswietlenie okna do wyboru nazwy pliku z ustawionym filtrem na pliki graficzne jest bezpośrednio po wywołaniu procedury.TSavePictureDialog -------//---------

TFontDialog realizuje standardowy dialog określania rodzajów i atrybutów czcionki

TColorDialog wyświetlenie okna do wyboru koloru

Page 59: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

59

Komponenty DialogsKomponenty Dialogs

TPrintDialog wyswietlenie okna definiującego parametry wydruku poprzez określenie wartości:

ProntRangeCopiesPrintToFileOptions

TPrinterSetupDialog skonfigurowanie drukarki (rozmiar strony, orientacja, właściwości wydruku..)

TFindDialog wyświetlenie okna dialogowego do wyszukania tekstu

TFontDialog okno dilaogowe które umożliwia wyszukanie i zamianę tekstu

Page 60: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

60

Page 61: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

61

MODUŁYMODUŁY

Page 62: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

62

ModułyModuły

System SysUtilsStrUtils DateUtils Types ClassesDialogs VariantsWindows Math

Moduł (ang. unit) jest plikiem tekstowym zawierającym polecenia przetwarzane przez kompilator. Inaczej mówiąc, jest to fragment kodu źródłowego.

Page 63: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

63

ModułyModuły

Zastosowanie modułów pozwala na podział kodu na osobne pliki. Każdemu formularzowi odpowiada jeden moduł, ale z kolei moduł nie musi być zawsze formularzem. Jakie są zalety programowania strukturalnego (modularnego)? Otóż programista ma możliwość umieszczenia części kodu (np. paru procedur) w osobnych modułach. Wyobraźmy sobie, że tworzymy dość spory program i cały kod źródłowy jest zawarty w jednym pliku, podzielony na procedury. W takim pliku trudno się będzie później odnaleźć ? przede wszystkim ze względu na jego długość. Koncepcja programowania modularnego polega na podzieleniu takiego programu na kilka plików i włączaniu ich po kolei do głównego pliku źródłowego.

Dzięki temu możemy w jednym pliku, np. interfaces.pas, zawrzeć jedynie procedury związane z tworzeniem interfejsu użytkownika, a z kolei w pliku db.pas umieścić procedury związane z obsługą bazy danych.

Page 64: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

64

Budowa modułuBudowa modułu

Zaraz po utworzeniu nowego modułu Delphi generuje potrzebne instrukcje, które są niezbędnym elementem tego modułu.

unit MainUnit;

interface

implementation

end.

Page 65: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

65

Opis modułuOpis modułu

Page 66: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

66

Opis modułu

Page 67: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

67

Opis modułu

Page 68: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

68

Opis modułu

Page 69: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

69

Opis modułu

Page 70: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

70

Opis modułu

Page 71: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

71

Opis modułu

Page 72: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

72

Opis modułu

Page 73: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

73

Moduł MathModuł Math

W języku Object Pascal obliczamy wartości wyrażeń matematycznych przy użyciu operatorów + - * /

Kolejność działań taka sama jak w matematyce

Można korzystać z większej ilości funkcji modułu Math – liczba dostępnych funkcji zależna od pakietu Delphi

Nazwę Math należy dopisać do deklaracji uses w części interface lub implementation modułu aplikacji

Page 74: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

74

Moduł MathModuł Math

Moduł Math zawiera funkcje i procedury arytmetyczne, trygonometryczne, logarytmiczne i statystyczne, będące uzupełnieniem funkcji zdefiniowanych w module System.

Ponadto w module Math znajdują się definicje funkcji przeznaczonych do obliczeń finansowych, które przeniesiono z pakietu Quattro Pro firmy Borland.Część wykonawcza wielu funkcji i procedur modułu Math została zaprogramowana bezpośrednio w asemblerze, z wykorzystaniem instrukcji zmiennopozycyjnych, operujących bezpośrednio na jednostce arytmetyki zmiennopozycyjnej procesora.

Page 75: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

75

Moduł MathModuł Math

Funkcje i procedury trygonometryczne

ArcCos(x) – arcus cosinus xArcSin(x) – arcus sinus xArcTan2(x, y) – arcus tangens ilorazu x przez yCotan(x) – cotangens xSinCos(x, s, c) – sinus i cosinus x (oddzielneobliczenie sinusa i cosinusa za pomocą funkcji Sin i Cos modułu System trwa dwa razy dłużej)Tan(x) – tangens x

Przypomnienie:W module System są zdefiniowanefunkcje ArcTan, Cos i Sin.

Page 76: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

76

Moduł MathModuł Math

Funkcje i procedury trygonometryczne

DegToRad(stopnie) – zamiana stopni na radianyRadToDeg(radiany) – zamiana radianów na stopniePrzykłady

Obliczenie w stopniach przybliżonej wartościfunkcji arcsin 0,5:RadToDeg(ArcSin(0.5))

Page 77: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

77

Moduł MathModuł Math

Funkcje hiperboliczne i area funkcje

area funkcje – funkcje odwrotne względem funkcjihiperbolicznychArcCosh(x) – area cosinus xArcSinh(x) – area sinus xArcTanh(x) – area tangens xCosh(x) – cosinus hiperboliczny xSinh(x) – sinus hiperboliczny xTanh(x) – tangens hiperboliczny x

Page 78: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

78

Moduł MathModuł Math

Funkcje logarytmiczneLnXP1(x) – logarytm naturalny z x+1 (funkcjazalecana do stosowania dla wartości x bliskich 0)Log10(x) – logarytm dziesiętny z xLog2(x) – logarytm o podstawie 2 z xLogN(p, x) – logarytm o podstawie p z x

Przypomnienie:W module System jest zdefiniowanafunkcja Ln.

Page 79: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

79

Moduł MathModuł Math

Funkcje wykładnicze i potęgowe

IntPower (podstawa, wykładnik)– argument podstawa podniesiony do potęgicałkowitej określonej przez wykładnikPower (podstawa, wykładnik)– podniesienie liczby rzeczywistej do dowolnej potęgi(nie tylko całkowitej)czyli normy euklidesowej wektora w R2

Hypot (x, y)– obliczenie wartości wyrażenia

Page 80: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

80

Moduł MathModuł Math

Funkcje i procedury do obliczeń statystycznych

funkcja Sum (dane)– obliczanie sumy elementów (dane – argumentodpowiadający tablicowemu parametrowiotwartemu o elementach typu Double)funkcja SumOfSquares (dane)– obliczenie sumy kwadratów elementówSumsAndSquares (dane, suma, suma-kwadratów)– jednoczesne obliczenie sumy i sumy kwadratówelementów

Page 81: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

81

Moduł MathModuł Math

Funkcje i procedury do obliczeń statystycznych

funkcja PopnVariance (dane)– wyznaczenie wariancji, tj.funkcja Mean (dane)– obliczenie średniej arytmetycznej pewnej liczbyelementówfunkcja Norm (dane)– obliczenie normy euklidesowej wektora (pierwiastekz sumy kwadratów jego składowych)

Page 82: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

82

Moduł MathModuł Math

Funkcje i procedury do obliczeń statystycznych

funkcja PopnStdDev (dane)– wyznaczenie odchylenia standardowego, tj.pierwiastka kwadratowego z wariancji

funkcja StdDev (dane)– wyznaczenie pierwiastka kwadratowegoz nieobciążonego estymatora wariancji

MeanAndStdDev (dane, średnia, odchylenie)– jednoczesne wyznaczenie średniej i pierwiastkakwadratowego z nieobciążonego estymatorawariancj

Page 83: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

83

Moduł MathModuł Math

Funkcje i procedury do obliczeń statystycznych

funkcja RandG (średnia, odchylenie)– otrzymywanie liczb losowych o rozkładzienormalnym (Gaussa)funkcja RandomRange (i1, i2)– otrzymywanie całkowitych liczb losowychz przedziału [i1, i2)

Przypomnienie:Funkcja Random z modułu Systemgeneruje rzeczywiste liczby losowez przedziału [0, 1) lub całkowitez przedziału [0, zakres).

Page 84: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

84

Moduł MathModuł Math

Funkcje do wykonywania obliczeń finansowych

do obliczania rat i płatności (FutureValue, InterestPayment, InterestRate, NumberOfPeriods, Payment, PeriodPayment, PresentValue),

do wykonywania rachunków dyskontowych(InternalRateOfReturn, NetPresentValue),

do obliczania amortyzacji(DoubleDecliningBalance, SLNDepreciation, SYDDepreciation)

Page 85: Aplikacje w DELPHI (cd..) - mazurek.pollub.plmazurek.pollub.pl/wyklad5a_ez2.pdf · Grafika w Delphi – komponent Shape Komponent Shape (na zakładce Additional Palety Komponentów)

85

Przykładowe deklaracjePrzykładowe deklaracje

function ArcCosh(const X: Extended): Extended;function ArcTan2(Y, X: Extended): Extended;function Cos(const X: Extended): Extended; (Funkcja oblicza cosinus z

liczby X. Wartość liczby X podajemy w radianach. Zwracana wartość zawiera się w zakresie [-1,1])

function Int(X: Real) : Real; (Funkcja zwraca część całkowitą z liczby rzeczywistej X. Do pobrania częsci ułamkowej z liczby rzeczywistej służy funkcja Frac.)

function MaxValue(const Data: array of Double): Double;Funkcja wybiera, a następnie zwraca element z tablicy Data, posiadający

największą wartość. Elementami tablicy mogą być liczby rzeczywiste (Double):

function Pi: Extended; (Funkcja Pi zwraca wartość liczby, która wynosi w przybliżeniu 3,1415926535897932384626433832795028841971)

function SumOfSquares(const Data: array of Double) : Extended; Funkcja zwraca sumę kwadratów wszystkich wartości tablicy Data.