Aplikacje w DELPHI (cd..)



Podobne dokumenty
Aplikacje w DELPHI (cd..)

Obsługa grafiki w Delphi, rysowanie na płótnie, obsługa myszki, zapisywanie obrazków do plików, bitmapy pozaekranowe.

Rozdział 9. Grupowanie komponentów Pola opcji i pola wyboru Komponenty grupujące Ramka TBevel...115

PROGRAM: WYSZUKANIE LICZBY MAKSYMALNEJ

Wprowadzenie do systemu Delphi

Delphi podstawy programowania. Środowisko Delphi

narzędzie Linia. 2. W polu koloru kliknij kolor, którego chcesz użyć. 3. Aby coś narysować, przeciągnij wskaźnikiem w obszarze rysowania.

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Szybkie tworzenie grafiki w GcIde

Nazwa implementacji: Kółko i krzyżyk w Lazarusie. Autor: Piotr Fiorek Andrzej Stefaniuk

Darmowa publikacja dostarczona przez Złote Myśli

Wizualne systemy programowania. Wykład 11 Grafika. dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD

Dialogi, Memo i Image. Modified właściwość typu Boolean. Jest automatycznie ustawiana na True kaŝdorazowo po dokonaniu zmian treści wpisanej w Memo.

Po uruchomieniu Lazarusa należy wybrać z paska górnego opcję Projekt i następnie Nowy Projekt. Pokaże się okno:

Kierunek: ETI Przedmiot: Programowanie w środowisku RAD - Delphi Rok III Semestr 5. Ćwiczenie 5 Aplikacja wielo-okienkowa

Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach.

Ćwiczenie z wykorzystaniem zmiennych i komponentu TGauge. TTimer co pewien czas. Gra. A jednak odlicza. Stoper. Aktualny czas, czyli zegar

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Niniejszy ebook jest własnością prywatną.

Aplikacje w Delphi. Przykłady. Wydanie III

1. Otwórz swój program. 2. Przejdź do źródła. Posłuży ci do tego funkcja Toggle Form/Unit lub naciśnięcie klawisza F12. [rys.1]

1. Umieść kursor w miejscu, w którym ma być wprowadzony ozdobny napis. 2. Na karcie Wstawianie w grupie Tekst kliknij przycisk WordArt.

Tworzenie własnych komponentów

Wykład 7: Lazarus GUI

Tak przygotowane pliki należy umieścić w głównym folderze naszego programu. Klub IKS

Microsoft Small Basic

Ćwiczenie 6 Proste aplikacje - podstawowe komponenty.

Wstęp Arkusz kalkulacyjny Za co lubimy arkusze kalkulacyjne Excel

Obsługa mapy przy użyciu narzędzi nawigacji

Obsługa programu Paint materiały szkoleniowe

Programowanie obiektowe

Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego

Obsługa programu Paint. mgr Katarzyna Paliwoda

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D

Narzędzia programu Paint

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

CorelDRAW. 1. Rysunek rastrowy a wektorowy. 2. Opis okna programu

Delphi. Lazarus. Kompilatory Delphi. Linki do stron o Delphi

Programowanie Delphi obliczenia, schematy blokowe

Tworzenie prostych obrazów wektorowych w programie CorelDRAW 12

Rysowanie punktów na powierzchni graficznej

Kurs Adobe Photoshop Elements 11

Opis Edytora postaci Logomocji

1. OPEN OFFICE RYSUNKI

Techniki wstawiania tabel

CorelDRAW. wprowadzenie

Wprowadzenie 7. Rozdział 2. Podstawowe składniki aplikacji 23

Grażyna Koba. Grafika komputerowa. materiały dodatkowe do podręcznika. Informatyka dla gimnazjum

Język programowania PASCAL

Dodanie nowej formy do projektu polega na:

Wprowadzenie do języka Pascal

Adobe InDesign lab.1 Jacek Wiślicki, Paweł Kośla. Spis treści: 1 Podstawy pracy z aplikacją Układ strony... 2.

MS Word Długi dokument. Praca z długim dokumentem. Kinga Sorkowska

Ćwiczenia - CorelDraw

Ćw. I Projektowanie opakowań transportowych cz. 1 Ćwiczenia z Corel DRAW

Podstawy Programowania 2

Zajęcia nr 15 JavaScript wprowadzenie do JavaScript

Edytor tekstu OpenOffice Writer Podstawy

Prezentacja multimedialna MS PowerPoint 2010 (podstawy)

Kod źródłowy programu: program Grafika1; uses crt, graph; (1) var sterownik, tryb:smallint; (2)

Visual Studio instalacja

Cel: Przypisujemy przyciskom określone funkcje panel górny (Panel1)

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

LIVE Gra w życie. LIVE w JavaScript krok po kroku. ANIMACJA Rozpoczynamy od podstawowego schematu stosowanego w animacji

Delphi 7 + Indy 10 Przykłady prostych aplikacji sieciowych

UWAGA: poniższe procedury przygotowane zostały w oparciu o program HiTi PhotoDesiree 2 w wersji

Maskowanie i selekcja

W kolejnym odcinku zajmiemy się umieszczaniem w naszym projekcie zestawu ikon służących szybkiemu korzystaniu z opcji programu.

Informatyka Edytor tekstów Word 2010 dla WINDOWS cz.3

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

WASM AppInventor Lab 3. Rysowanie i animacja po kanwie PODSTAWY PRACY Z KANWAMI

Niniejszy ebook jest własnością prywatną. Został zakupiony legalnie w serwisie Netpress.pl, będącym oficjalnym Partnerem Wydawcy.

Ćwiczenie 25 Działania matematyczne we Flashu

Cykl lekcji informatyki w klasie IV szkoły podstawowej. Wstęp

Przed rozpoczęciem pracy otwórz nowy plik (Ctrl +N) wykorzystując szablon acadiso.dwt

Informatyka Edytor tekstów Word 2010 dla WINDOWS cz.3

ECDL/ICDL CAD 2D Moduł S8 Sylabus - wersja 1.5

Ćwiczenie 1 Proste aplikacje - podstawowe komponenty.

Zaprojektuj grę logiczną NIM. Program losuje w każdym rzędzie od 1 do 10 grzybów. Gracz

Kurs WWW. Paweł Rajba.

Podstawy Informatyki Wykład V

Programowanie: grafika w SciLab Slajd 1. Programowanie: grafika w SciLab

Praktyczne wykorzystanie arkusza kalkulacyjnego w pracy nauczyciela część 1

Zaznaczanie komórek. Zaznaczenie pojedynczej komórki polega na kliknięciu na niej LPM

Program graficzny MS Paint.

I. Program II. Opis głównych funkcji programu... 19

Edytor tekstu MS Word podstawy

Logo Komeniusz. Gimnazjum w Tęgoborzy. Mgr Zofia Czech

MS Access formularze

KROK 17 i 18. Cel: Tworzymy oddzielne okno - O autorze. 1. Otwórz swój program. 2. Skompiluj i sprawdź, czy działa prawidłowo.

Dodawanie grafiki i obiektów

Jak uzyskać efekt 3D na zdjęciach z wykorzystaniem programu InkScape

Tworzenie i edycja dokumentów w aplikacji Word.

Przewodnik po obszarze roboczym

1. Przypisy, indeks i spisy.

Programowanie obiektowe

Widok po uruchomieniu. Widok w trakcie gry

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

ROZKŁAD MATERIAŁU DO II KLASY LICEUM (ZAKRES ROZSZERZONY) A WYMAGANIA PODSTAWY PROGRAMOWEJ.

Rozdział 1. Wstęp 5. Rozdział 2. Pierwsze kroki 13. Rozdział 3. Podstawy rysunku wektorowego 35

Transkrypt:

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

Grafika 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. 2

Grafika w Delphi komponent Shape 3

Grafika w Delphi komponent Shape uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; procedure TForm1.ComboBox1Change(Sender: TObject); begin Case Combobox1.ItemIndex of 0:Shape1.Shape:=stCircle; 1:Shape1.Shape:=stSquare; 2:Shape1.Shape:=stRoundSquare; end; end; procedure TForm1.ScrollBar1Change(Sender: TObject); begin Shape1.Width:= Scrollbar1.Position; Shape1.Height:= Scrollbar1.Position; end; 4

Grafika 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. 5

Grafika 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óro PenPos 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). 6

Grafika 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]:=clRed Ta 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. 7

Grafika w Delphi obiekt TCanvas LineTo(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ą. 8

9

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); 10 Canvas.TextRect(Prostokat,30,40,'Łańcuch tekstowy.');

Grafika w Delphi obiekt TCanvas Polygon(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). 11

Grafika w Delphi obiekt TCanvas TextOut(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; Source:TRect) Kopiuje część obrazu z jednego płótna na inne płótno. const 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. 12

Grafika w Delphi obiekt TCanvas Pie(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):integer Funkcja zwraca wysokość tekstu w pikselach. TextOut(X, Y: Integer; const Text: string) Procedura wyświetla napis na komponencie posiadającym wł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):integer Funkcja zwraca szerokość tekstu w pikselach. 13

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. 14

Grafika w Delphi obiekt TCanvas Wyświetlenie na formularzu linii rysowanych różnymi stylami procedure TForm1.Button1Click(Seender: TObject); var x,y:integer; begin x := 210; y := y+10;//y - zmienna globalna Canvas.MoveTo(x,y); x := Random(ClientWidth - 10); y := Random(ClientHeight - 10); Canvas.Pen.Color := RGB(Random(256),Random(256),Random(256)); case Random(5) of 0: 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; 15

Grafika 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); begin Canvas.Pixels[ClientWidth div 2, ClientHeight div 2]:=clRed; end; 16

Grafika w Delphi obiekt TCanvas Wyświetlenie końcowych współrzędnych formularza procedure TForm1.Label1Click(Sender: TObject); begin Label1.Caption:=IntToStr(ClientWidth)','+IntToStr(ClientHeight); end; 17

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. 18

Grafika w Delphi Bitmap Bitmapa określająca wzór wypełnienia. W przypadku Windows 95 bitmapa ta nie może przekroczyć rozmiaru 8 8 pikseli. Color Kolor wypełnienia. Handle Kontekst urządzenia (HDC) pędzla. Stosowany przy bezpośrednich odwołaniach do GDI. Style Styl pędzla (jednolity, wymazujący (clear) lub jeden z predefiniowanym wzorów). 19

Grafika 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); var prost: TRect; begin prost:= 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; 20

Grafika w Delphi obiekt TCanvas Narysowanie na formularzu trójkąta o zielonym obwodzie i żółtym wypełnieniu. procedure TForm1.Button1Click(Sender: TObject); begin Canvas.Brush.Color:=clYellow; Canvas.Pen.Color:=clGreen; Canvas.Polygon([Point(20,20),Point(200,20),Point(110,100)]); end; 21

Grafika 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); 22

Grafika 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. 23

Grafika 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'); 24

Grafika 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. 25

Grafika 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. 26

Grafika w Delphi zdarzenie OnPaint Napisanie na formularzu tekstu Font (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). 27

Edytor graficzny 28

Edytor 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ż 256kolorowych. Podczas rysowania można wybrać dowolny kolor spośród dostępnych. 29

Kolor 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. 30

Komponent 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. 31

Komponent Image Komponent Image służy do wyświetlania bitmap, metaplików i ikon. Sam komponent jest niewidoczny. Zmiana rozmiaru obrazu Obrazy 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ód wybierz Edit Bring to Front lub Edit Send to Back. Wstawianie rysunku w kodzie programu metoda LoadFromFile - Image1.Picture.LoadFromFile( Rysunki/obrazek1.bmp ); 32

33

34

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. 35

Proste 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... 36

Proste 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. 37

Proste 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. var R: 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; 38

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. Button W pozycjach Caption wprowadzić napisy (kolor, gumka, odświeżenie, zamknij). ColorDialog. Okno wyboru koloru. 39

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. 40

unit Unit1; interface uses 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; 41

var Form1: Tform1; implementation {$R *.dfm} Var rysuj:boolean; <- zmienna śledząca lewy przycisk procedure TForm1.Button1Click(Sender: TObject); begin Close; end; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Canvas.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 *) 42

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin rysuj:=false; End; (*Jak puścimy lewy przycisk, przypisz zmiennej rysuj wartość False. *) procedure TForm1.Button2Click(Sender: TObject); begin if ColorDialog1.Execute Then Canvas.Pen.Color:=ColorDialog1.Color; End; (* Nadaj pędzlowi kolor wybrany w oknie ColorDialog1. *) procedure TForm1.ComboBox1Change(Sender: Tobject); begin Canvas.Pen.Width:=ComboBox1.ItemIndex; End; (* Szerokość (Width) pędzla równa się liczbie z ComboBox1. *) procedure TForm1.Button3Click(Sender: TObject); begin Repaint; End; (* odśwież, wyczyść *) procedure TForm1.Button4Click(Sender: TObject); begin Canvas.Pen.Color:=clBtnFace; end; End. (* Do pędzla (tutaj: Gumki) przypisz kolor formy. *) 43

Data i czas 44

Data i czas Data 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ńcuch function StrToDate (cons S:String):TDateTime; - zamienia datę [podaną w postaci łańcuch na typ TdateTime. Format daty: m/d/y lub y/m/d function DayOfWeek(Data: TDateTime): Integer zwraca numer dnia tygodnia. 45

Data i czas function 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 tygodnia mmmm - wyświetla pełna nazwę miesiąca yyyy - wyświetla rok jako liczbę czterocyfrową. przykład DateTimeToString(wynik, 'dddd,d mmm d yyy r.',date); Label1.Caption:=wynik; 46

Data i czas Time - procedura zwraca bieżący czas systemowy Now 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 TdateTime EncodeTime(g,m,s,ms) przekształca czas wyrażony w postaci godzin... do postaci TdateTime 47

Data i czas Komponent DateTimePicker pozwala na wproadzeniedaty przez wybór kalendarza. Właściwości: DateFormat - format daty: dfshort, dflong Date - data ustawiana jako domyślna w oknie, standardowo - bieżąca MinDate - minimalna data możliwa do wyboru z kalendarza MaxDate - 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 48

Data i czas Aplikacja obliczająca ile dni dzieli datę od daty zadeklarowanej type TForm1 = class(tform) Label1: TLabel; DateTimePicker1: TDateTimePicker; procedure DateTimePicker1Change(Sender: TObject);... procedure TForm1.DateTimePicker1Change(Sender: TObject); var ile:real; begin ile:=datetimepicker1.date-date; Label1.Caption:='Liczba dni: '+IntToStr(Trunc(ile)); end; 49

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

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

Okna dialogowe 52

Okienka 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 niewizualne okna pojawiają się podczas wykonywania funkcji execute : true/false 53

Okienka dialogowe TopenDialog służy do wyświetlania okna Otwarcie pliku 54

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

Okienka dialogowe 56

Wł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 57

Komponenty 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 58

Komponenty Dialogs TPrintDialog wyswietlenie okna definiującego parametry wydruku poprzez określenie wartości: ProntRange Copies PrintToFile Options TPrinterSetupDialog skonfigurowanie drukarki (rozmiar strony, orientacja, właściwości wydruku..) TFindDialog wyświetlenie wyszukania tekstu okna TFontDialog okno dilaogowe wyszukanie i zamianę tekstu dialogowego które do umożliwia 59

60

MODUŁY 61

Moduły System StrUtils Types Dialogs Windows SysUtils DateUtils Classes Variants Math Moduł (ang. unit) jest plikiem tekstowym zawierającym polecenia przetwarzane przez kompilator. Inaczej mówiąc, jest to fragment kodu źródłowego. 62

Moduł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. 63

Budowa 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. 64

Opis modułu 65

Opis 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

Moduł Math W języku Object Pascal obliczamy wartości matematycznych przy użyciu operatorów + - * / wyrażeń 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 73

Moduł 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. 74

Moduł Math Funkcje i procedury trygonometryczne ArcCos(x) arcus cosinus x ArcSin(x) arcus sinus x ArcTan2(x, y) arcus tangens ilorazu x przez y Cotan(x) cotangens x SinCos(x, s, c) sinus i cosinus x (oddzielne obliczenie 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ą zdefiniowane funkcje ArcTan, Cos i Sin. 75

Moduł Math Funkcje i procedury trygonometryczne DegToRad(stopnie) zamiana stopni na radiany RadToDeg(radiany) zamiana radianów na stopnie Przykłady Obliczenie w stopniach przybliżonej wartości funkcji arcsin 0,5: RadToDeg(ArcSin(0.5)) 76

Moduł Math Funkcje hiperboliczne i area funkcje area funkcje funkcje odwrotne względem funkcji hiperbolicznych ArcCosh(x) area cosinus x ArcSinh(x) area sinus x ArcTanh(x) area tangens x Cosh(x) cosinus hiperboliczny x Sinh(x) sinus hiperboliczny x Tanh(x) tangens hiperboliczny x 77

Moduł Math Funkcje logarytmiczne LnXP1(x) logarytm naturalny z x+1 (funkcja zalecana do stosowania dla wartości x bliskich 0) Log10(x) logarytm dziesiętny z x Log2(x) logarytm o podstawie 2 z x LogN(p, x) logarytm o podstawie p z x Przypomnienie:W module System jest zdefiniowana funkcja Ln. 78

Moduł Math Funkcje wykładnicze i potęgowe IntPower (podstawa, wykładnik) argument podstawa podniesiony do potęgi całkowitej określonej przez wykładnik Power (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 79

Moduł Math Funkcje i procedury do obliczeń statystycznych funkcja Sum (dane) obliczanie sumy elementów (dane argument odpowiadający tablicowemu parametrowi otwartemu o elementach typu Double) funkcja SumOfSquares (dane) obliczenie sumy kwadratów elementów SumsAndSquares (dane, suma, suma-kwadratów) jednoczesne obliczenie sumy i sumy kwadratów elementów 80

Moduł Math Funkcje i procedury do obliczeń statystycznych funkcja PopnVariance (dane) wyznaczenie wariancji, tj. funkcja Mean (dane) obliczenie średniej arytmetycznej pewnej liczby elementów funkcja Norm (dane) obliczenie normy euklidesowej wektora (pierwiastek z sumy kwadratów jego składowych) 81

Moduł Math Funkcje i procedury do obliczeń statystycznych funkcja PopnStdDev (dane) wyznaczenie odchylenia standardowego, tj. pierwiastka kwadratowego z wariancji funkcja StdDev (dane) wyznaczenie pierwiastka kwadratowego z nieobciążonego estymatora wariancji MeanAndStdDev (dane, średnia, odchylenie) jednoczesne wyznaczenie średniej i pierwiastka kwadratowego z nieobciążonego estymatora wariancj 82

Moduł Math Funkcje i procedury do obliczeń statystycznych funkcja RandG (średnia, odchylenie) otrzymywanie liczb losowych o rozkładzie normalnym (Gaussa) funkcja RandomRange (i1, i2) otrzymywanie całkowitych liczb losowych z przedziału [i1, i2) Przypomnienie:Funkcja Random z modułu System generuje rzeczywiste liczby losowe z przedziału [0, 1) lub całkowite z przedziału [0, zakres). 83

Moduł 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) 84

Przykł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. 85