Upload
buidang
View
256
Download
1
Embed Size (px)
Citation preview
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
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.
3
Grafika w Delphi – komponent ShapeGrafika w Delphi – komponent Shape
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;
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.
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).
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.
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ą.
9
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.');
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).
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.
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.
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.
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;
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;
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;
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.
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).
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;
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;
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);
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.
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');
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.
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.
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).
28
Edytor graficznyEdytor graficzny
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.
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.
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.
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’);
33
34
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.
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...
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.
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;
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.
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.
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;
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 *)
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. *)
44
Data i czasData i czas
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.
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;
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
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
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;
50
Data i czasData i czas
Odebranie z komponentu DateTimePicker wybranej przez użytkownika daty i wyświetlenie jej na etykiecie.
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.
52
Okna dialogoweOkna dialogowe
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
54
Okienka dialogoweOkienka dialogowe
TopenDialog – służy do wyświetlania okna Otwarcie pliku
55
Okienka dialogoweOkienka dialogowe
dla okna ustawiony filtr na wyświetlane pliki przez wykorzystanie właściwości Filter.
56
Okienka dialogoweOkienka dialogowe
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
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
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
60
61
MODUŁYMODUŁY
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.
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.
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.
65
Opis modułuOpis modułu
66
Opis modułu
67
Opis modułu
68
Opis modułu
69
Opis modułu
70
Opis modułu
71
Opis modułu
72
Opis modułu
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
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.
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.
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))
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
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.
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
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
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)
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
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).
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)
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.