Aplikacje w Delphi. Przykłady. Wydanie III



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

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

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

Aplikacje w DELPHI (cd..)

Instrukcja obsługi Norton Commander (NC) wersja 4.0. Autor: mgr inż. Tomasz Staniszewski

GEO-SYSTEM Sp. z o.o. GEO-RCiWN Rejestr Cen i Wartości Nieruchomości Podręcznik dla uŝytkowników modułu wyszukiwania danych Warszawa 2007

PERSON Kraków

INTERAKTYWNA APLIKACJA MAPOWA MIASTA RYBNIKA INSTRUKCJA OBSŁUGI

Zarządzanie Zasobami by CTI. Instrukcja

Instrukcja obsługi platformy zakupowej e-osaa (klient podstawowy)

VinCent Office. Moduł Drukarki Fiskalnej

Aplikacje w Delphi. Przyk³ady

Instalacja. Zawartość. Wyszukiwarka. Instalacja Konfiguracja Uruchomienie i praca z raportem Metody wyszukiwania...

PROGRAM NAUCZANIA INFORMATYKA

SZABLONY KOMUNIKATÓW SPIS TREŚCI

Laboratorium nr 2. Edytory tekstu.

dbsamples.udl lub przygotowany wcześniej plik dla Excela) i OK,

Księgarnia PWN: Wojciech Sterna Delphi od podstaw

Tworzenie aplikacji internetowych E14

Nowe funkcjonalności

Tekst ozdobny i akapitowy

STRONA GŁÓWNA SPIS TREŚCI. Zarządzanie zawartością stron... 2 Tworzenie nowej strony... 4 Zakładka... 4 Prawa kolumna... 9

Zmiany w programie C GEO v. 6.5

SKRÓCONA INSTRUKCJA OBSŁUGI ELEKTRONICZNEGO BIURA OBSŁUGI UCZESTNIKA BADANIA BIEGŁOŚCI

Ramki tekstowe w programie Scribus

Praca z układem. Omówione zagadnienia. Tworzenie tła

Ćwiczenie 6.5. Otwory i śruby. Skrzynia V

INSTRUKCJA DO PROGRAMU LICZARKA 2000 v 2.56

Użytkowanie elektronicznego dziennika UONET PLUS.

INSTRUKCJA WebPTB 1.0

Kilka zasad o których warto trzeba pamiętać

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

Aplikacje w DELPHI (cd..)

Instrukcja obsługi panelu operacyjnego XV100 w SZR-MAX-1SX

Systemy mikroprocesorowe - projekt

Jak spersonalizować wygląd bloga?

Obsługa bazy współrzędnych geodezyjnych C-Geo

I. Zakładanie nowego konta użytkownika.

Centrum Informatyki "ZETO" S.A. w Białymstoku. Instrukcja użytkownika dla urzędników nadających uprawnienia i ograniczenia podmiotom w ST CEIDG

Pracownia internetowa w każdej szkole. Opiekun pracowni internetowej SBS 2003 PING

Microsoft Management Console

Rozdzia 3. Kalendarz wprowadzanie dat do arkusza Obs uga formularzy Uwagi dotycz ce obs ugi okien dialogowych kalendarza...

Zintegrowane Systemy Zarządzania Biblioteką SOWA1 i SOWA2 SKONTRUM

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

INSTRUKCJA KORZYSTANIA Z ELEKTRONICZNEJ ŚCIEŻKI WYKAZÓW

Przeniesienie lekcji SITA z płyt CD na ipoda touch

REJESTRATOR RES800 INSTRUKCJA OBSŁUGI

Specyfikacja techniczna banerów Flash

PODRĘCZNIK UŻYTKOWNIKA

Wdrożenie modułu płatności eservice dla systemu Virtuemart 2.0.x

GRAFIKA PROGRAMOWANA W PASCALU ==================================

W wyświetlonym okienku New Web Server Application wybierz opcję Web App Debugger Executable, a w polu Class Name wpisz: P1.

Zaznaczając checkbox zapamiętaj program zapamięta twoje dane logowania. Wybierz cmentarz z dostępnych na rozwijalnej liście.

ECDL Advanced Moduł AM3 Przetwarzanie tekstu Syllabus, wersja 2.0

enova Workflow Obieg faktury kosztowej

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

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.

Google SketchUp. cwiczenia praktyczne. 2.1 Tworzenie modelu przez wycinanie obszarów

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

Rachunek_UCP. C e l. Zarejestrowanie rachunku do umowy cywilnoprawnej w systemie SAP. Wymagania wstępne

Warszawa, r.

7. OPRACOWYWANIE DANYCH I PROWADZENIE OBLICZEŃ powtórka

Instrukcja. 1 Zamawiając kuriera. W Paczkomacie lub POK. 3 Nadając list polecony. nadawania przesyłek z Allegro: (Punkt Obsługi Klienta)

Pierwsze kroki. Krok 1. Uzupełnienie danych własnej firmy

Elementy animacji sterowanie manipulatorem

WordPad. Czyli mój pierwszy edytor tekstu

Praca na wielu bazach danych część 2. (Wersja 8.1)

ATEKO, s.r.o. E-learning. Instrukcje dla studentów

Bazy danych. Andrzej Łachwa, UJ, /15

Metody opracowywania dokumentów wielostronicowych. Technologia Informacyjna Lekcja 28

1.Rysowanie wałka. Dostosowanie paska narzędzi Tworzenie nowego wałka. Uniwersytet Technologiczno Przyrodniczy w Bydgoszczy

1. Korzyści z zakupu nowej wersji Poprawiono Zmiany w słowniku Stawki VAT Zmiana stawki VAT w kartotece Towary...

PROGRAM: WYSZUKANIE LICZBY MAKSYMALNEJ

Symfonia Produkcja Instrukcja instalacji. Wersja 2013

Instrukcja wprowadzania ocen do systemu USOSweb

INSTRUKCJA PROGRAMU BHM SPIS TREŚCI

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

Instrukcja instalacji programu Plantator oraz transferu pliku danych z/do PC kolektor danych PT-20

Zestaw skróconych instrukcji dotyczący najważniejszych operacji w programie Merkury Quattro.

z programowania z przykładowymi rozwiązaniami

Promocja i identyfikacja wizualna projektów współfinansowanych ze środków Europejskiego Funduszu Społecznego

Opis zmian funkcjonalności platformy E-GIODO wprowadzonych w związku z wprowadzeniem możliwości wysyłania wniosków bez podpisu elektronicznego

Kancelaris - Zmiany w wersji 2.50

epuap Ogólna instrukcja organizacyjna kroków dla realizacji integracji

Opis obsługi systemu Ognivo2 w aplikacji Komornik SQL-VAT

Moduł. Rama 2D suplement do wersji Konstruktora 4.6

Instrukcja instalacji oraz wykorzystania podpisu cyfrowego

InsERT GT Własne COM 1.0

2. Program USOS. 2.1 Bezpiecze stwo i ochrona danych osobowych. 2.2 Uruchomienie programu

Skitch for Android Instrukcja obsługi 2012 Evernote Corporation Wszelkie prawa zastrzeżone Opublikowano: Jun 19, 2012

Instrukcja dotycząca generowania klucza dostępowego do Sidoma v8

Delphi podstawy programowania. Środowisko Delphi

Programy. Z Delphi. Opracowała Małgorzata Roguska

Zdalne odnawianie certyfikatów do SWI

Firma Informatyczna JazzBIT

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

2004 Heden Media. Wszelkie prawa zastrzeżone. Wirtualne laboratorium z napędów i sterowania pneumatycznego. Minimalne wymagania

Ostatnia cena sprzeda y klienta 1.0 dodatek do Symfonia Faktura dla 1 firmy

Transkrypt:

Idź do Spis treści Przykładowy rozdział Katalog książek Katalog online Zamów drukowany katalog Twój koszyk Dodaj do koszyka Cennik i informacje Zamów informacje o nowościach Zamów cennik Czytelnia Fragmenty książek online Kontakt Helion SA ul. Kościuszki 1c 44-100 Gliwice tel. 32 230 98 63 e-mail: helion@helion.pl Helion 1991 2010 Aplikacje w Delphi. Przykłady. Wydanie III Autor: Teresa Pamuła ISBN: 978-83-246-2851-3 Format: 158 235, stron: 416 Projektuj wspaniałe aplikacje z pomocą środowiska Delphi 2010! Wygląd i podstawowe funkcje aplikacji, czyli od czego zacząć pracę Wprowadzanie danych i okienka komunikatów, czyli zapewnianie dialogu między programem a użytkownikiem Tworzenie nowych komponentów, czyli jak nadać aplikacji niepowtarzalny styl Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy Plug and Play oraz Code Insight, a także palety komponentów i narzędzia ułatwiające ich wyszukiwanie. Dzięki Delphi IDE można w prosty sposób zaprojektować interfejs użytkownika nowej aplikacji, określić jej wygląd oraz sposób działania w oparciu o istniejące kontrolki i biblioteki klas, w dużym stopniu zdając się na automatyczne generowanie kodu. Jeśli chcesz poznać, dogłębnie zrozumieć i wykorzystać do swoich celów sposób działania Delphi 2010, powinieneś koniecznie sięgnąć po książkę Aplikacje w Delphi. Przykłady. Znajdziesz tu wszelkie informacje na temat obsługi samego środowiska, podstawowych składników każdej tworzonej aplikacji, wprowadzania i formatowania danych, list, tabel, grupowania i projektowania nowych komponentów, wykorzystania technologii OLE do zapisu i modyfikacji danych w formatach.doc i.xls, możliwości graficznej prezentacji danych, ich drukowania i współpracy Twojej aplikacji z multimediami. Wszystko to oraz wiele innych zagadnień pokazano tu na praktycznych, konkretnych przykładach, ułatwiających zrozumienie i gotowych do zastosowania w Twoich własnych projektach. Podstawowe składniki aplikacji, menu główne i podręczne, pasek narzędzi Wprowadzanie danych, formatowanie i wyświetlanie na ekranie Okienka komunikatów i okienka dialogowe z karty Dialogs Listy wyboru i prosty edytor Grupowanie i dynamiczne tworzenie komponentów Komponenty do wyboru daty i czasu, odmierzanie czasu Zakładki TTabControl i TPageControl Grafika w Delphi i wyświetlanie obrazów Tabelaryzacja danych i ich graficzna prezentacja danych Współpraca programu z plikami dyskowymi Drukowanie w Delphi i programy z wieloma oknami Posługiwanie się wieloma komponentami tego samego typu Definiowanie nowych klas komponentów i wykorzystanie mechanizmu OLE Podstawowe operacje na bazach danych Delphi i multimedia Odkryj fantastyczne możliwości Delphi!

Spis tre ci Wprowadzenie... 7 Rozdzia 1. Projektowanie aplikacji w Delphi... 9 rodowisko zintegrowane Delphi IDE... 10 Elementy projektu aplikacji... 10 Standardowe w a ciwo ci komponentów... 14 Standardowe zdarzenia... 14 Nowo ci w Delphi 2010... 17 Jak przekszta ci interfejs aplikacji z Delphi 7 na nowocze niejszy, zgodny z nowszymi wersjami Windows?... 20 Jak sprawdzi, czy aplikacja jest ju uruchomiona?... 21 Rozdzia 2. Podstawowe sk adniki aplikacji... 23 Okno aplikacji... 23 Ikona aplikacji...28 Wy wietlanie napisów... 29 Rodzaje przycisków, podobie stwa i ró nice... 33 Etykiety i przyciski... 37 Linki... 42 Rozdzia 3. Menu g ówne i podr czne, pasek narz dzi... 45 Wielopoziomowe menu g ówne... 46 Przyporz dkowanie polece opcjom menu... 48 Menu podr czne... 52 Polskie litery w nazwach polece menu... 54 Pasek narz dzi TToolBar... 54 Rozdzia 4. Wprowadzanie danych, formatowanie i wy wietlanie na ekranie... 57 Liczby funkcje konwersji i formatowanie... 58 Daty funkcje konwersji i formatowanie daty oraz czasu... 60 Przecinek czy kropka?... 62 Systemowe separatory liczb i daty... 63 Wprowadzanie danych za pomoc okienek edycyjnych TEdit... 64 Wprowadzanie danych za pomoc okienek InputBox i InputQuery... 71 Sposoby zabezpieczania programu przed b dami przy wprowadzaniu danych... 72 Maskowanie danych wej ciowych... 72 Blokowanie mo liwo ci wprowadzania niektórych znaków, np. liter lub cyfr... 74 Korzystanie z funkcji konwersji StrToIntDef (z warto ci domy ln )... 75

4 Aplikacje w Delphi. Przyk ady Zmiana zawarto ci okienka TEdit za pomoc suwaka TScrollBar... 75 Zmiana zawarto ci okienka TEdit za pomoc komponentu TUpDown... 76 Stosowanie instrukcji obs ugi wyj tków... 77 Obliczenia. Wybrane funkcje modu u Math... 79 Rozdzia 5. Okienka komunikatów... 83 Wy wietlanie komunikatów z napisami sta ymi w j zyku systemowym MessageBox... 84 Wy wietlanie komunikatów za pomoc funkcji ShowMessage, MessageDlg, MessageDlgPos... 86 Rozdzia 6. Okienka dialogowe z karty Dialogs... 91 Odczyt i zapis plików z wykorzystaniem okien dialogowych... 94 Wy wietlanie nazwy wybranego koloru za pomoc okna TColorDialog... 96 Zmiana czcionki na etykiecie za pomoc okna TFontDialog... 96 Rozdzia 7. Listy wyboru TListBox i TComboBox... 99 Dodawanie elementów do listy... 101 Wybieranie elementów z listy... 102 Sortowanie elementów listy... 105 Sposoby wy wietlania elementów listy... 106 Lista z nazwami czcionek... 107 Blokowanie edycji dla listy TComboBox... 108 Czytanie i zapisywanie zawarto ci listy do pliku dyskowego... 109 Konfigurator... 110 Rozdzia 8. Prosty edytor komponent TMemo... 113 Kopiowanie, wycinanie i wklejanie tekstu... 115 Czytanie i zapisywanie tekstu do pliku... 116 Wy wietlanie informacji o po o eniu kursora... 117 Automatyczne kasowanie linii niezawieraj cych liczb lub wybranych znaków... 118 Wy wietlanie wspó rz dnych kursora w polu TMemo i zegara na pasku TStatusBar... 119 Dodawanie danych do TMemo z komponentu TEdit, TComboBbox... 121 Rozdzia 9. Grupowanie komponentów... 123 Pola opcji i pola wyboru... 123 Komponenty grupuj ce... 124 Ramka TBevel... 130 Rozdzia 10. Komponenty do wyboru daty i czasu TDateTimePicker i TMonthCalendar... 133 Rozdzia 11. Zak adki TTabControl i TPageControl... 137 Rozdzia 12. Odmierzanie czasu komponent TTimer... 145 Rozdzia 13. Grafika w Delphi korzystanie z metod obiektu TCanvas... 149 Wy wietlanie prostych figur geometrycznych i tekstu... 150 Rysowanie trwa e zdarzenie OnPaint... 157 Rysowanie mysz po formularzu... 159 Rysowanie mysz po komponencie TImage... 160 Przyk ady animacji w Delphi... 162 Rozdzia 14. Wy wietlanie obrazów komponent TImage... 169 Rysowanie po obrazie... 171 Binaryzacja obrazu... 172 Skalowanie obrazów.bmp,.jpg... 175

Spis tre ci 5 Przegl danie wczytanych obrazów... 178 Wy wietlanie zawarto ci listy obrazków TImageList... 179 Zamiana formatu obrazów z.jpg,.gif,.png na.bmp... 181 GIF animowany... 182 Zaznaczanie i wycinanie prostok tnego obszaru z obrazu... 183 Rozdzia 15. Tabelaryzacja danych komponenty TStringGrid, TDrawGrid i TValueListEditor... 187 Ustalanie podstawowych parametrów tabeli... 190 Wype nianie tabeli danymi... 192 Wybieranie komórek tabeli... 194 Filtrowanie wprowadzanych danych... 197 Niestandardowe przej cie do kolejnej komórki klawisz Enter... 199 Zmiana koloru i wyrównania tekstu w wybranych komórkach... 200 Zmiana koloru wierszy tabeli... 204 Wy wietlanie tekstu w komórce w dwóch wierszach... 206 Totolotek... 208 Tabela i lista... 210 Wy wietlanie listy obrazów i tekstu w tabeli TDrawGrid... 211 Wy wietlanie obrazu pobranego z pliku w komórkach tabeli TDrawGrid... 213 Wprowadzanie tekstu do komórek tabeli TDrawGrid... 217 Tabela TValueListEditor... 218 Rozdzia 16. Graficzna prezentacja danych komponent TChart... 223 Rysowanie wykresów z wykorzystaniem komponentu TChart... 223 Opis wybranych w a ciwo ci, metod i zdarze komponentów TChart i TChartSeries... 226 Wykresy ko owe... 229 Wykresy kolumnowe... 232 Wykresy funkcji matematycznych... 235 Formatowanie i skalowanie wykresów... 239 Pos ugiwanie si wieloma wykresami... 245 Wykres Gantta... 248 Rozdzia 17. Wspó praca programu z plikami dyskowymi... 251 Wybór foldera plików... 251 Wyszukiwanie plików... 254 Zapisywanie danych z okienek TEdit i tabeli TStringgrid do pliku tekstowego... 256 Czytanie danych do okienek TEdit i tabeli TStringgrid z pliku tekstowego... 258 Zapisywanie i odczytywanie danych z tabeli do pliku *.csv... 259 Zmiana nazw grupy plików... 261 Korzystanie ze strumieni... 262 Rozdzia 18. Drukowanie w Delphi... 269 Drukowanie napisów i tekstu z okienek edycyjnych... 270 Drukowanie tabeli... 271 Drukowanie obrazu... 273 Drukowanie tekstu sformatowanego za pomoc komponentu TRichEdit... 274 Drukowanie za pomoc Rave Reports... 280 Rozdzia 19. Programy z wieloma oknami... 293 Wymiana danych i metod mi dzy modu ami... 293 Program z has em... 296 Wy wietlanie tytu u programu... 299

6 Aplikacje w Delphi. Przyk ady Aplikacje typu MDI... 301 Test wyboru... 303 Rozdzia 20. Pos ugiwanie si wieloma komponentami tego samego typu. Operatory Is i As... 305 Wprowadzanie i kasowanie danych dla kilku okienek edycyjnych... 306 Przypisywanie grupie komponentów tej samej procedury obs ugi zdarzenia... 308 Wy wietlanie informacji o numerach kontrolek, ich nazwach i klasach... 311 Ankieta... 312 Rozdzia 21. Przyk ady wykorzystania mechanizmu OLE w Delphi... 315 Komponent TOLEContainer... 316 Zapisywanie tekstu, grafiki i tabeli do dokumentu w formacie.doc... 318 Zapisywanie danych z aplikacji w Delphi w formacie.xls... 321 Czytanie, modyfikacja i zapisywanie pliku w formacie.xls... 324 Rozdzia 22. Dynamiczne tworzenie komponentów... 327 Wy wietlanie kontrolek i przypisywanie zdarzeniom procedur obs ugi... 328 Przyk ady dynamicznego tworzenia wykresów... 333 Tworzenie menu w czasie dzia ania programu... 336 Tablice dynamiczne... 338 Rozdzia 23. Definiowanie nowych klas komponentów... 341 Klasa tabel z wyrównaniem zawarto ci komórek do prawej strony... 341 Klasa okienek z w a ciwo ci Alignment... 343 Instalowanie nowych komponentów na palecie komponentów... 345 Instalacja nowego komponentu w Delphi 2006... 349 Nowy komponent do ankiety... 351 Nowy komponent z o ony z komponentów standardowych... 353 Instalacja nowego komponentu w Delphi 2010... 356 Rozdzia 24. Podstawowe operacje na bazach danych... 357 Przegl danie istniej cych baz danych w formacie.dbf... 359 Tworzenie w asnej bazy danych... 361 Modyfikowanie bazy... 363 Filtrowanie rekordów bazy danych... 365 Wyszukiwanie rekordów... 367 Sortowanie... 368 Rysowanie wykresów na podstawie danych z bazy... 368 Obliczanie redniej ze wszystkich warto ci danego pola... 370 Biblioteka przyk ad relacyjnej bazy danych... 370 Logiczne po czenie tabel... 373 Drukowanie danych za pomoc programu Rave Reports... 374 Rozdzia 25. Delphi i multimedia... 383 Komponent TAnimate... 383 Komponent TMediaPlayer... 384 Playlista... 389 Literatura... 393 Skorowidz... 395

Rozdzia 13. Grafika w Delphi korzystanie z metod obiektu TCanvas Niektóre komponenty maj w a ciwo typu obiektowego Canvas (tzw. 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 TChart, a tak e przy drukowaniu formularza i tekstu. Rysowanie po obrazie wczytanym do komponentu TImage jest mo liwe wtedy, kiedy jest to obraz w formacie.bmp (bitmapa), poniewa bitmapa ma w a ciwo Canvas. Je li do komponentu TImage wczytany zostanie obraz w formacie.jpg,.gif lub.png, to nale y go przekszta ci na bitmap. W przyk adzie 13.14 przedstawiono zastosowanie tej mo liwo ci. Wybrane w a ciwo ci klasy TCanvas: Brush okre la wzór lub kolor wype nienia figur (tzw. p dzel). Font krój czcionki dla wy wietlanych napisów. Pen okre la cechy kre lonych linii: grubo, styl, kolor (tzw. pióro). PenPos okre la wspó rz dne kursora graficznego.

150 Aplikacje w Delphi. Przyk ady 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). Na rysunku 13.1 przedstawiono wspó rz dne okna formularza, które wykorzystano w zadaniach z tego rozdzia u. Wspó rz dne liczone s wzgl dem punktu o wspó rz dnych (0, 0). Rysunek 13.1. Formularz z zaznaczonymi warto ciami wspó rz dnych wierzcho ków (x, y) 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 tabela 13.1. W a ciwo ci takiego obiektu umo liwiaj m.in. zmian grubo ci i stylu rysowanych linii, zmian koloru i wzoru wype nienia figur oraz wybór kroju i stylu czcionki dla tekstu. Tabela 13.1. Wybrane metody obiektu TCanvas Metoda Kolor:=Canvas.Pixels[x,y] Znaczenie 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] wspó rz dn poziom (x) liczymy od lewej do prawej, a wspó rz dn pionow od góry w dó. Wspó rz dne lewego górnego wierzcho ka to (0, 0). MoveTo(x,y: integer) Przenosi kursor graficzny do punktu o wspó rz dnych x, y. LineTo(x,y:integer) Rectangle(x1, y1, x2, y2: Integer) Ellipse(x1, y1, x2, y2: Integer) Rysuje lini od bie cej pozycji kursora graficznego do punktu o wspó rz dnych x, y. Procedura rysuje prostok t wype niony standardowym kolorem p dzla (Canvas.Brush.Color). 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.

Rozdzia 13. Grafika w Delphi korzystanie z metod obiektu TCanvas 151 Tabela 13.1. Wybrane metody obiektu TCanvas ci g dalszy Metoda Polyline(Points: array of TPoint) Polygon(Points: array of TPoint) Refresh Draw(x, y:integer; Graphic:TGraphic) Arc(x1,y1, x2,y2, x3,y3, x4,y4: integer) TextOut(x,y:integer; const Text:string) CopyRect(const Dest: TRect; Canvas: TCanvas; const Source: TRect) FillRect(const Rect: TRect) FloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle) FrameRect(const Rect: TRect) Pie(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer); RoundRect(X1, Y1, X2, Y2, X3, Y3: Integer) StretchDraw(const Rect: TRect; Graphic: TGraphic) Znaczenie 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 (patrz pomoc dla polyline). Procedura umo liwia narysowanie wielok ta wype nionego bie cym kolorem i stylem p dzla. Przyk adowo instrukcje: Canvas.Brush.Color = clred; Canvas.Polygon([Point(10, 10), Point(30, 10), Point(130, 30), Point(240, 120)]); spowoduj 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. Od wie anie formularza procedura kasuje wszystkie obiekty rysowane za pomoc metod obiektu Canvas i nieumieszczone w procedurze obs ugi zdarzenia OnPaint. Rysuje obraz okre lony parametrem Graphic w miejscu o wspó rz dnych x i y (przyk ad 13.14). Rysuje krzyw eliptyczn w prostok cie o wspó rz dnych (x1, y1; x2, y2) od punktu o wspó rz dnych (x3, y3) do punktu (x4, y4). 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). Kopiuje cz obrazu z jednego p ótna na inne p ótno. Rysowanie prostok ta wype nionego bie cym kolorem i wzorem. Wype nianie, tzw. powodziowe, obiektów. Rysowanie obwodu prostok ta. Rysowanie wycinka ko a. Rysowanie prostok ta z zaokr glonymi naro nikami. Dopasowanie rysunku do obszaru danego prostok ta.

152 Aplikacje w Delphi. Przyk ady Tabela 13.1. Wybrane metody obiektu TCanvas ci g dalszy Metoda TextHeight(const Text: string): Integer TextOut(X, Y: Integer; const Text: string) TextRect(Rect: TRect; X, Y: Integer; const Text: string) TextWidth(const Text: string): Integer Znaczenie Funkcja zwraca wysoko tekstu w pikselach. Procedura wy wietla napis na komponencie maj cym w a ciwo TCanvas. Procedura wy wietla napis w prostok cie, którego wspó rz dne s podane w postaci typu TRect (pierwszy parametr). Procedura by a wykorzystywana przy formatowaniu komórek tabeli. Funkcja zwraca szeroko tekstu w pikselach. Oprócz wymienionych metod zdefiniowane s te, które korzystaj z tzw. mechanizmów niskopoziomowych i w a ciwo ci Handle komponentu, np. instrukcja: kol:=getnearestcolor( Form1.Canvas.Handle, RGB(125,67,22)); spowoduje przypisanie zmiennej kol koloru najbardziej zbli onego do podanego w przypadku gdy bie cy tryb graficzny nie ma koloru typu RGB. Przyk ad 13.1. Wy wietl na etykiecie wspó rz dne prawego dolnego wierzcho ka formularza lewy górny ma wspó rz dne (0, 0). Wstaw etykiet TLabel. Wspó rz dne prawego dolnego wierzcho ka formularza mo emy odczyta, korzystaj c z w a ciwo ci ClientWidth i ClientHeight formularza. Nale y wpisa np. w procedurze obs ugi zdarzenia OnClick etykiety instrukcj : Label1.Caption:=IntToStr(ClientWidth)+','+IntToStr(ClientHeight); lub u y funkcji GetClientRectangle, która zwraca warto typu TRect okre laj c wspó rz dne dwóch przeciwleg ych wierzcho ków formularza: R:=Form1.GetClientRectangle; //R typu TRect mo na zadeklarowa jako zmienn lokaln Label1.Caption:=Inttostr(R.Right)+','+ Inttostr(R.Bottom); Przyk ad 13.2. Na rodku formularza wy wietl punkt 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. Poni sz instrukcj wpisz np. w procedurze obs ugi przycisku: Canvas.Pixels[ClientWidth div 2, ClientHeight div 2]:=clRed; Przyk ad 13.3. Narysuj linie koloru czerwonego b d ce przek tnymi formularza rysunek 13.2.

Rozdzia 13. Grafika w Delphi korzystanie z metod obiektu TCanvas 153 Rysunek 13.2. Formularz z przek tnymi pozostaj cymi po zmianie jego rozmiaru Poni sze instrukcje wpisz np. w procedurze obs ugi przycisku. Pierwsza przek tna: Canvas.Pen.Color:=clRed; //zmiana koloru pióra na czerwony //przesuni cie kursora graficznego do punktu o wspó rz dnych (0,0) Canvas.Moveto(0,0); //narysowanie linii od bie cego po o enia kursora graficznego do punktu z prawego //dolnego wierzcho ka Canvas.Lineto(ClientWidth, ClientHeight); Narysuj drug przek tn. Aby przek tne pozosta y na formularzu podczas zmiany jego rozmiaru, nale y wykorzysta dwa zdarzenia: OnPaint i OnResize. W procedurach obs ugi tych zdarze powinny znale si instrukcje jak w procedurach poni ej: i procedure TForm1.FormPaint(Sender: TObject); Canvas.Pen.Color:=clRed; Canvas.Moveto(0,0); Canvas.Lineto(ClientWidth, ClientHeight); Canvas.Moveto(ClientWidth,0); Canvas.Lineto(0, ClientHeight); procedure TForm1.FormResize(Sender: TObject); Refresh; // przy zmianie rozmiaru okna // kasowane s poprzednie przek tne Przyk ad 13.4. Wy wietl na formularzu punkty rozmieszczone losowo i o losowych kolorach. Wstaw przycisk i w procedurze obs ugi zdarzenia OnClick wpisz odpowiednie instrukcje:

154 Aplikacje w Delphi. Przyk ady Rysunek 13.3. Napis na rodku formularza //Losowe punkty procedure TForm1.Button2Click(Sender: TObject); var i:integer; for i:=1 to 10000 do Canvas.Pixels[Random(ClientWidth), Random(ClientHeight)]:= RGB( Random(255),Random(255), Random (255 ) ); Przyk ad 13.5. Wy wietl na formularzu trzy ró ne prostok ty ramk, prostok t wype niony kolorem Brush.Color, prostok t z zaokr glonymi brzegami. W procedurze obs ugi przycisku wpisz instrukcje jak poni ej: procedure TForm1.Button3Click(Sender: TObject); var prost: TRect; prost:= Rect(200,10,300,100); Canvas.Brush.Color := clblack; //ramka Canvas.FrameRect(prost); Canvas.Brush.Color := clgreen; //prostok t wype niony Canvas.Rectangle(200,120,300,210); //prostok t z zaokr glonymi brzegami Canvas.RoundRect(200,230,300,320,20,20); Przyk ad 13.6. Wy wietl na rodku formularza napis Zadania z Delphi w kolorze niebieskim, o rozmiarze czcionki równym 36 pkt, bez t a rysunek 13.3.

Rozdzia 13. Grafika w Delphi korzystanie z metod obiektu TCanvas 155 W procedurze wykorzystano funkcje zwracaj ce szeroko i wysoko napisu oraz rozmiary formularza i na tej podstawie obliczono wspó rz dne lewego górnego wierzcho ka wy wietlanego napisu: procedure TForm1.Button2Click(Sender: TObject); var x,y:integer; Canvas.Font.Name:='Arial'; Canvas.Font.Color:=ClBlue; Canvas.Font.Size:=24; Canvas.Brush.Style:=bsClear; x:=clientwidth-canvas.textwidth('zadania z Delphi'); y:=clientheight-canvas.textheight('z'); Canvas.TextOut(x div 2, y div 2,'Zadania z Delphi'); Przyk ad 13.7. Narysuj elips o maksymalnych wymiarach na formularzu. W procedurze obs ugi przycisku wpisz instrukcj : //elipsa wpisana w prostok t o rozmiarach formularza Canvas.Ellipse(0,0, ClientWidth, ClientHeight); Przyk ad 13.8. Narysuj na formularzu trójk t o zielonym obwodzie i ó tym wype nieniu. I sposób z wykorzystaniem procedury PolyLine i FloodFill: procedure TForm1.Button6Click(Sender: TObject); Canvas.Brush.Color:=clYellow; Canvas.Pen.Color:=clGreen; //rysowanie trójk ta Canvas.Polyline([Point(20,20),Point(200,20),Point(110,100),Point(20,20)]); Canvas.Floodfill(100,25,clgreen,fsborder); //procedura wype nia obiekt narysowany //kolorem zielonym, wewn trz którego znajduje si punkt o wspó rz dnych (100,25) II sposób z wykorzystaniem procedury Polygon, rysuj cej wielok t wype niony bie- cym kolorem p dzla (Brush). Wspó rz dne ostatniego punktu nie musz pokrywa si ze wspó rz dnymi punktu pierwszego wielok ta, poniewa pierwszy punkt jest automatycznie czony z ostatnim: procedure TForm1.Button1Click(Sender: TObject); Canvas.Brush.Color:=clYellow;

156 Aplikacje w Delphi. Przyk ady Canvas.Pen.Color:=clGreen; Canvas.Polygon([Point(20,20),Point(200,20),Point(110,100)]); Przyk ad 13.9. Wy wietl na formularzu linie rysowane ró nymi stylami. Wstaw przycisk TButton. W procedurze obs ugi zdarzenia OnClick przycisku wpisz instrukcje jak w poni szej procedurze: //style linii procedure TForm1.Button1Click(Seender: TObject); var x,y:integer; 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 := pssolid; 1: Canvas.Pen.Style := psdash; 2: Canvas.Pen.Style := psdot; 3: Canvas.Pen.Style := psdashdot; 4: Canvas.Pen.Style := psdashdotdot; Canvas.LineTo(x+200, y); Przyk ad 13.10. Wy wietl na formularzu prostok t malowany ró nymi stylami p dzla po ka dym klikni ciu przycisku. Wstaw przycisk TButton. W procedurze obs ugi zdarzenia OnClick przycisku wpisz instrukcje jak w poni szej procedurze: //style p dzla procedure TForm1.Button2Click(Sender: TObject); Refresh; //kasuje poprzedni prostok t Canvas.Brush.Color :=RGB(Random(256),Random(256),Random(256)); //kolorem p dzla //malowane s wzory case Random(7) of 0: Canvas.Brush.Style := bsclear; 1: Canvas.Brush.Style := bssolid; 2: Canvas.Brush.Style := bsbdiagonal; 3: Canvas.Brush.Style := bsfdiagonal; 4: Canvas.Brush.Style := bscross;

Rozdzia 13. Grafika w Delphi korzystanie z metod obiektu TCanvas 157 5: Canvas.Brush.Style := bsdiagcross; 6: Canvas.Brush.Style := bshorizontal; 7: Canvas.Brush.Style := bsvertical; Canvas.Rectangle(0,0, 200,100); Rysowanie trwa e 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. Przedstawiono je w tabeli 13.2. Tabela 13.2. Zdarzenia umo liwiaj ce rysowanie trwa e Zdarzenie OnPaint PaintBoxPaint OnDrawCell OnAfterDraw Znaczenie 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. Odpowiednik zdarzenia OnPaint dla komponentu PaintBox. Zdarzenie wyst puj ce dla komponentu typu TDrawGrid i TStringGrid umo liwia trwa e rysowanie obiektów i wy wietlanie tekstu w komórkach. Zdarzenie dla komponentu typu TChart, odpowiednik zdarzenia OnPaint. Rysowanie po komponencie typu TImage nie wymaga odnawiania. Jest trwa e. Przyk ad 13.11. Narysuj na formularzu prostok t koloru czerwonego, tak aby nie kasowa si po przykryciu okna formularza innym oknem. Prostok t powinien rysowa si po klikni ciu przycisku i kasowa po klikni ciu drugiego przycisku rysunek 13.4. Wstaw dwa przyciski TButton. Gdyby instrukcj rysuj c prostok t umie ci w procedurze obs ugi zdarzenia OnPaint, to prostok t by by na formularzu bezpo rednio po uruchomieniu programu. Dlatego procedur obs ugi tego zdarzenia z now instrukcj nale y wywo a za pomoc przycisku.

158 Aplikacje w Delphi. Przyk ady Rysunek 13.4. Rysowanie i kasowanie prostok ta na formularzu Szkielet procedury FormPaint mo na uzyska, klikaj c dwukrotnie w oknie Inspektora Obiektów z prawej strony zdarzenia OnPaint. Pó niej trzeba jednak wykasowa w Inspektorze Obiektów t nazw, aby instrukcje w procedurze obs ugi zdarzenia OnPaint nie wykonywa y si bezpo rednio po uruchomieniu programu. W przyk adzie pokazano, jak wykona takie zadanie. //procedura obs ugi zdarzenia OnPaint dla formularza rysuje prostok t, // wywo ywana programowo mo e mie inna nazw procedure TForm1.FormPaint(Sender: TObject); Canvas.Rectangle(100,100,ClientWidth-100,ClientHeight-100); //procedura rysuje prostok t koloru czerwonego i przypisuje procedurze obs ugi //zdarzenia OnPaint procedur FormPaint procedure TForm1.Button1Click(Sender: TObject); Canvas.Pen.Color:=clRed; Canvas.Rectangle(100,100,ClientWidth-100,ClientHeight-100); OnPaint:=FormPaint;//przypisanie procedurze obs ugi zdarzenia procedury rysuj cej //prostok t // od czenie procedury FormPaint od zdarzenia OnPaint wykasowanie prostok ta procedure TForm1.Button2Click(Sender: TObject); OnPaint:=nil; //ta instrukcja spowoduje, e rysunek prostok ta nie b dzie odnawiany Refresh; //procedura ta kasuje prostok t Przyk ad 13.12. Wype nij t o formularza bitmap, np. wzorek.bmp. W procedurze obs ugi zdarzenia OnPaint dla formularza wpisz instrukcje jak w procedurze poni ej.

Rozdzia 13. Grafika w Delphi korzystanie z metod obiektu TCanvas 159 Zadeklaruj zmienn globaln lub pole klasy TForm1 (w sekcji public): var Bitmap: TBitmap; procedure TForm1.FormPaint(Sender: TObject); var x, y: Integer; y := 0; while y < Height do x := 0; while x < Width do Canvas.Draw(x, y, Bitmap); x := x + Bitmap.Width; y := y + Bitmap.Height; W metodzie FormCreate (po dwukrotnym klikni ciu w formularz) dopisz instrukcje: Bitmap:=TBitmap.Create; Bitmap.LoadFromFile(wzorek.bmp'); Obraz, który jest powielany jak t o formularza, mo e mie te inny format, np..jpg. Nale y wtedy zamieni format.jpg na.bmp (bitmapa ma w a ciwo Canvas). Wtedy tre metody FormCreate powinna by nast puj ca: procedure TForm1.FormCreate(Sender: TObject); var obraz:timage; //trzeba zadeklarowa modu ExtCtrls Bitmap:=TBitmap.Create; obraz:=timage.create(self); obraz.picture.loadfromfile('wzorek.jpg'); //zamiana formatu obrazu JPG na TBitmap Bitmap.Assign(obraz.Picture.Graphic); Aby program prawid owo dzia a, nale y jeszcze w sekcji Uses zadeklarowa modu JPEG zawieraj cy definicj klasy TJPEGImage oraz ExtCtrls zawieraj cy definicj klasy TImage. Przyk ad 13.12A na p ycie prezentuje sposób uzyskania t a z obrazu typu.jpg. Rysowanie mysz po formularzu Przyk ad 13.13. Napisz program umo liwiaj cy rysowanie po formularzu po naci ni ciu lewego przycisku myszy.

160 Aplikacje w Delphi. Przyk ady Wykorzystano zdarzenie OnMouseDown wyst puj ce po naci ni ciu przycisku myszy na komponencie i zdarzenie OnMouseMove wyst puj ce przy przesuwaniu kursora myszy nad komponentem. Wpisz instrukcje jak w poni szych procedurach obs ugi zdarze OnMouseDown i OnMo usemove. procedure TForm1.FormMouseDown(Sender: TObject;Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Canvas.MoveTo(x,y); procedure TForm1.FormMouseMove(Sender: TObject;Shift: TShiftState; X, Y: Integer); if ssleft in Shift then //czy lewy przycisk myszy wci ni ty Canvas.LineTo(x,y); Rysowanie mysz po komponencie TImage Przyk ad 13.14. Napisz program umo liwiaj cy wy wietlenie w losowych miejscach bia ych pikseli na obrazie po klikni ciu przycisku i bia ych kó ek, równie losowo, po klikni ciu drugiego przycisku. Na formularzu wstaw komponent TScrollBox i wewn trz niego komponent TImage z zak adki Additional tak, aby lewe górne wierzcho ki obu komponentów pokrywa y si. Dla komponentu TImage ustaw w a ciwo Autosize na true i za pomoc w a ciwo- ci Picture za aduj do niego obraz typu.bmp (nie.jpg). Dodaj do formularza jeszcze dwa przyciski TButton. W procedurze obs ugi zdarzenia OnClick dla przycisku Button1 wpisz instrukcje jak w procedurze poni ej. procedure TForm1.Button1Click(Sender: TObject); var i: integer; for i:=1 to 100 do Image1.Canvas.Pixels[Random(Image1.Width), Random(Image1.Height)]:=clWhite; Dla przycisku Button2 rysowanie losowych kó ek:

Rozdzia 13. Grafika w Delphi korzystanie z metod obiektu TCanvas 161 procedure TForm1.Button2Click(Sender: TObject); var i,k,t: integer; for i:=1 to 100 do k:=random(image1.width); t:=random(image1.height); Image1.Canvas.Ellipse(k,t,k+10,t+10); To samo mo na wykona równie dla obrazów typu.jpg oraz od wersji Delphi 2009 dla obrazów.gif i.png. Nale y jednak wcze niej wykona konwersj do formatu.bmp, poniewa obiekt tego typu ma w a ciwo Canvas. Sposób konwersji do typu.bmp pokazano w przyk adach 14.13 oraz 14.7 i 14.8. Przyk ad 13.15. Napisz program umo liwiaj cy po klikni ciu przycisku wy wietlenie obrazu przedstawiaj cego np. map obiektów (domków). Obiekty rysowane s na mapie po podaniu wspó rz dnych i klikni ciu przycisku lub po klikni ciu na mapie rysunek 13.5. Rysunek 13.5. Rysowanie obiektów na obrazie Na formularzu wstaw przycisk TButton, dwa komponenty TEdit. Komponent TScrollBox i w jego wn trzu TImage. Do komponentu TImage za aduj obraz. Obiekt (domek) zostanie narysowany za pomoc nast puj cej procedury: procedure procedure TForm1.Rysuj_domek(x,y:integer); with Image1.Canvas do //daszek Polygon([Point(x,y),Point(x+10,y-10),Point(x+20,y)]); //reszta Rectangle(x+3,y,x+17,y+10);

162 Aplikacje w Delphi. Przyk ady Parametry x,y okre laj wspó rz dne lewego wierzcho ka trójk ta (daszku). Nag ówek procedury nale y zadeklarowa w sekcji public definicji klasy TForm1 w sposób jak poni ej: procedure Rysuj_domek (x,y:integer); A tre procedury Rysuj_domek wpisa w sekcji implementation. W procedurze obs ugi zdarzenia OnClick dla przycisku wpisz instrukcje jak w procedurze poni ej. procedure TForm1.Button1Click(Sender: TObject); var x,y: integer; x:=strtointdef(edit1.text,10); y:=strtointdef(edit2.text,10); //rysowanie obiektu - domek Rysuj_domek(x,y); Funkcja StrtoIntDef umo liwia zabezpieczenie programu przed b dami. Je li w okienku Edit nie b dzie liczby ca kowitej, to nie wystapi b d, tylko domy lnie zmiennej x lub y przypisana zostanie warto 10. Do rysowania obiektów na obrazie po klikni ciu przycisku mo na wykorzysta zdarzenie OnMouseDown dla komponentu TImage. Procedura obs ugi tego zdarzenia zwraca wspó rz dne punktu klikni cia liczone wzgl dem lewego górnego wierzcho ka (0, 0). procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Rysuj_domek(X,Y); Przyk ady animacji w Delphi W programowaniu stosuje si ró ne techniki animacji. Jednym z prostszych sposobów jest rysowanie obiektu, nast pnie kasowanie i ponowne rysowanie w innym miejscu. Wad tego rozwi zania jest trudno w uzyskaniu p ynno ci ruchu obiektów. Inna metoda polega na zastosowaniu dwóch obszarów, na których rysujemy. W danej chwili widoczny jest tylko jeden z nich. Drugi jest wówczas modyfikowany i wy wietlany w miejsce pierwszego dopiero po zako czeniu operacji. W zadaniach przyk adowych zastosowano pierwszy sposób animacji. Uda o si uzyska odpowiedni p ynno ruchu obiektów, dlatego nie wykorzystano sposobu z u yciem dwóch obszarów rysowania.

Rozdzia 13. Grafika w Delphi korzystanie z metod obiektu TCanvas 163 Rysunek 13.6. Animacja z t em Przyk ad 13.16. Wykonaj nast puj c animacj : kó ko o rednicy 30 pkt przesuwa si od lewego do prawego brzegu formularza i z powrotem. W procedurze obs ugi przerwania od Timera wpisz: {$J+} procedure TForm1.Timer1Timer(Sender: TObject); const x1:integer=0; y1:integer=100; krok:integer=5; //kasowanie obiektu Canvas.Brush.color:=Color; //kolor formularza Canvas.Pen.color:=Color; //kolor pióra Form1.Canvas.Ellipse(x1,y1,x1+30,y1+30); //rysowanie kó ka kolorem czerwonym Canvas.Brush.color:=clRed; x1:=x1+krok; Canvas.Ellipse(x1,y1,x1+30,y1+30); if x1+30>= Clientwidth then krok:=-krok; if x1<=0 then krok:=-krok; Dyrektywa {$J+}przed tre ci procedury w cza opcj kompilatora umo liwiaj c zmian warto ci sta ych typowanych (ang. Assignable typed constans). Opcja ta powinna by standardowo w czona, ale je li nie mamy pewno ci, lepiej doda dyrektyw {$J+}. Przyk ad 13.17. Wykonaj animacj tak jak w zadaniu poprzednim, gdy formularz jest wype niony wzorem rysunek 13.6. Na formularzu umie przycisk TButton i komponent TTimer. W a ciwo Interval ustaw na 200 ms, a w a ciwo Enabled na false. Tre procedur obs ugi przycisku i przerwania od Timera przedstawiono poni ej.

164 Aplikacje w Delphi. Przyk ady Zadeklaruj zmienn globaln : var Bitmap,Bitmap1: TBitmap; //za adowanie obrazu.bmp do zmiennej Bitmap procedure TForm1.FormCreate(Sender: TObject); //W procedurze FormCreate nale y przeczyta bitmap z pliku. Bitmap:=TBitmap.Create; Bitmap.LoadFromFile('c:\windows\kawa.bmp'); // procedura pobiera prostok tny fragment formularza i uruchamia Timer procedure TForm1.Button1Click(Sender: TObject); var x,y:integer; // utworzenie obiektu Bitmap1 Bitmap1 := TBitmap.Create; Bitmap1.Width:=ClientWidth; Bitmap1.Height:=30; //pobranie prostok tnego wycinka formularza - obszaru, po którym b dzie si //porusza o kó ko for x:=0 to ClientWidth-1 do for y:=0 to 29 do Bitmap1.Canvas.Pixels[x,y]:=Form1.Canvas.Pixels[x,y+100]; Timer2.Enabled:=true; //w Inspektorze Obiektów zablokuj Timer2 {$J+} //procedura obs ugi przerwania od Timera - rysowanie i kasowanie obiektu //co 200 ms procedure TForm1.Timer2Timer(Sender: TObject); const x1:integer=0; y1:integer=100; krok:integer=5; var x,y:integer; //je li zwi kszymy rozmiar formularza, to trzeba w procedurze obs ugi zdarzenia //OnResize jeszcze raz pobra bitmap Canvas.Draw(0,y1,Bitmap1); //wy wietlenie wcze niej pobranego paska formularza, //kasowanie obiektu //rysowanie kó ka Canvas.Ellipse(x1,y1,x1+30,y1+30); x1:=x1+krok; if x1+29>=clientwidth then krok:=-krok; if x1<=0 then krok:=-krok; //wype nianie formularza bitmap procedure TForm1.FormPaint(Sender: TObject); var x, y: Integer; y := 0; while y < Height do x := 0; while x < Width do Canvas.Draw(x, y, Bitmap);

Rozdzia 13. Grafika w Delphi korzystanie z metod obiektu TCanvas 165 Rysunek 13.7. Animacja niebieskiej kulki x := x + Bitmap.Width; y := y + Bitmap.Height; // procedura FormDestroy zwalnia pami // zajmowan przez bitmapy procedure TForm1.FormDestroy(Sender: TObject); Bitmap.Free; Bitmap1.Free; Przyk ad 13.18. Wykonaj animacj polegaj c na przemieszczaniu si kulki w losowych kierunkach w prostok tnym obszarze o wymiarach (0, 0, 200, 200). Wykorzystaj komponent TPaintBox z zak adki System rysunek 13.7. Na formularzu umie komponent TPaintBox i TTimer. Komponent TPaintBox jest stosowany do wy wietlania (kre lenia) grafiki, która ma by ograniczona do obszaru prostok tnego. Korzystaj c z komponentu TPaintBox, programista nie musi kontrolowa, czy obszar ten nie zosta przekroczony je li narysowany obiekt nie mie ci si wewn trz komponentu TPaintBox, to zostaje obci ty. Dodatkowo zawarty w nim rysunek mo emy przesuwa po formularzu, zmieniaj c w a ciwo ci Left i Top tego komponentu. Procedura przedstawiona poni ej dzia a poprawnie z komponentem TPaintBox i bez niego wtedy kulka przesuwa si po formularzu. W zadaniu mo na równie doda przycisk, który b dzie w cza zegar (animacj ) po wpisaniu w procedurze obs ugi instrukcji Timer1.Enabled:=true; (wcze niej nale y zegar zablokowa w okienku Inspektora Obiektów Enabled=true). {$J+} procedure TForm1.Timer1Timer(Sender: TObject); const x:integer=6; y:integer=6; krokx:integer=6; kroky:integer=6;

166 Aplikacje w Delphi. Przyk ady with PaintBox1.Canvas do //czyszczenie prostok ta Brush.Color:=clWhite; Rectangle(0,0,200,200); //obliczenie wspó rz dnych x:=x+krokx; y:=y+kroky; //rysowanie ko a w kwadracie o boku // równym 6 pikseli Brush.Color:=clBlue; Ellipse(x-6, y-6, x+6, y+6); if (x>paintbox1.width-6) then krokx:=6+random(5); krokx:=-krokx; if (y>paintbox1.height-6) then kroky:=6+random(5); kroky:=-kroky; if (x<=6) then krokx:=-krokx; if (y<=6) then kroky:=-kroky; //with Korzystaj c z Inspektora Obiektów, w a ciwo ci Interval komponentu Timer1 przypisz warto 50. Przyk ad 13.19. Umie na formularzu komponent typu TButton i TShape. Zadaniem przycisku jest wy- wietlanie po ka dym klikni ciu na przemian kó ka lub prostok ta. Po naci ni ciu klawiszy strza ek komponent Shape przesuwa si zgodnie z kierunkiem strza ki rysunek 13.8. Rysunek 13.8. Przesuwanie ko a za pomoc klawiszy strza ek Aby klawisze strza ek nie by y przechwytywane przez komponent Button1, nale y ustawi dla niego w a ciwo TabStop na false.

Rozdzia 13. Grafika w Delphi korzystanie z metod obiektu TCanvas 167 Wstaw komponenty TButton i TShape. Dla komponentu TShape ustaw w a ciwo Shape na stcircle i w a ciwo Brush\Color na clyellow. W procedurze obs ugi klikni cia przycisku wpisz instrukcje jak poni ej: procedure TForm1.Button1Click(Sender: TObject); if Shape1.Shape=stCircle then Shape1.Shape:=stRectangle else Shape1.Shape:=stCircle; Form1.ActiveControl:=nil; W celu sprawdzenia klawiszy strza ek wykorzystaj zdarzenie OnKeyDown dla formularza. Tre procedury obs ugi tego zdarzenia przedstawiono poni ej: procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); case Key of vk_right: Shape1.Left:=Shape1.Left+10; //strza ka w prawo vk_left: Shape1.Left:=Shape1.Left-10; //strza ka w lewo vk_up: Shape1.Top:=Shape1.Top-10; //strza ka w gór vk_down:shape1.top:=shape1.top+10; //strza ka w dó W przyk adzie wykorzystano kody klawiszy wirtualnych. Par przyk adowych kodów podano w tabeli 13.3. Tabela 13.3. Wybrane klawisze i ich kody Kod klawisza vk_f1, vk_f2, vkf24 vk_lbutton, vk_rbutton vk_insert vk_delete vk_escape Vk_BACK Vk_TAB Klawisz F1, F2,, F24 Lewy przycisk myszy, prawy przycisk myszy Ins Del Esc Backspace Tab Wszystkie kody mo na znale w Systemie Pomocy Delphi, wystarczy umie ci kursor na s owie vk_left i nacisn F1 lub wyszuka has o Virtual Key Codes.