Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00712 007586 13829487 na godz. na dobę w sumie
Aplikacje w Delphi. Przykłady. Wydanie III - książka
Aplikacje w Delphi. Przykłady. Wydanie III - książka
Autor: Liczba stron: 416
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-2851-3 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> delphi - programowanie
Porównaj ceny (książka, ebook, audiobook).

Projektuj wspaniałe aplikacje z pomocą środowiska Delphi 2010!

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

Odkryj fantastyczne możliwości Delphi!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

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 komponen- tach 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, atry- butó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 zastosowa- nie 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Ċd- ne 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Ċd- ne 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 funk- cji 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] Canvas.Pixels[10,20]:=clRed MoveTo(x,y: integer) LineTo(x,y:integer) Rectangle(x1, y1, x2, y2: Integer) Ellipse(x1, y1, x2, y2: Integer) Znaczenie Za pomocą funkcji Pixels moĪna odczytaü kolor piksela w miejscu o wspóárzĊdnych (x, y) — zmienna Kolor jest typu TColor. 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). Przenosi kursor graficzny do punktu o wspóárzĊdnych x, y. 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. i 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). Rozwiñzanie Wstaw etykietĊ TLabel. WspóárzĊdne prawego dolnego wierzchoáka formularza moĪe- my odczytaü, korzystając z wáaĞciwoĞci ClientWidth i ClientHeight formularza. Na- leĪ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. Rozwiñzanie 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. i Grafika w Delphi — korzystanie z metod obiektu TCanvas 153 Rysunek 13.2. Formularz z przekątnymi pozostającymi po zmianie jego rozmiaru Rozwiñzanie 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 wyko- rzystaü dwa zdarzenia: OnPaint i OnResize. W procedurach obsáugi tych zdarzeĔ po- winny znaleĨü siĊ instrukcje jak w procedurach poniĪej: procedure TForm1.FormPaint(Sender: TObject); begin Canvas.Pen.Color:=clRed; Canvas.Moveto(0,0); Canvas.Lineto(ClientWidth, ClientHeight); Canvas.Moveto(ClientWidth,0); Canvas.Lineto(0, ClientHeight); end; i procedure TForm1.FormResize(Sender: TObject); begin Refresh; // przy zmianie rozmiaru okna // kasowane sæ poprzednie przekætne end; Przykäad 13.4. WyĞwietl na formularzu punkty rozmieszczone losowo i o losowych kolorach. Rozwiñzanie Wstaw przycisk i w procedurze obsáugi zdarzenia OnClick wpisz odpowiednie instrukcje: 154 Aplikacje w Delphi. Przykäady //Losowe punkty procedure TForm1.Button2Click(Sender: TObject); var i:integer; begin for i:=1 to 10000 do Canvas.Pixels[Random(ClientWidth), Random(ClientHeight)]:= RGB( Random(255),Random(255), Random (255 ) ); end; Przykäad 13.5. WyĞwietl na formularzu trzy róĪne prostokąty — ramkĊ, prostokąt wypeániony kolo- rem Brush.Color, prostokąt z zaokrąglonymi brzegami. Rozwiñzanie W procedurze obsáugi przycisku wpisz instrukcje jak poniĪej: procedure TForm1.Button3Click(Sender: TObject); var prost: TRect; begin 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); end; Przykäad 13.6. WyĞwietl na Ğrodku formularza napis Zadania z Delphi w kolorze niebieskim, o roz- miarze czcionki równym 36 pkt, bez táa — rysunek 13.3. Rysunek 13.3. Napis na Ğrodku formularza Rozdziaä 13. i Grafika w Delphi — korzystanie z metod obiektu TCanvas 155 Rozwiñzanie W procedurze wykorzystano funkcje zwracające szerokoĞü i wysokoĞü napisu oraz roz- miary formularza — i na tej podstawie obliczono wspóárzĊdne lewego górnego wierz- choáka wyĞwietlanego napisu: procedure TForm1.Button2Click(Sender: TObject); var x,y:integer; begin 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 ); end; Przykäad 13.7. Narysuj elipsĊ o maksymalnych wymiarach na formularzu. Rozwiñzanie 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. Rozwiñzanie I sposób — z wykorzystaniem procedury PolyLine i FloodFill: procedure TForm1.Button6Click(Sender: TObject); begin 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) end; 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); begin 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)]); end; Przykäad 13.9. WyĞwietl na formularzu linie rysowane róĪnymi stylami. Rozwiñzanie 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; 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 := psSolid; 1: Canvas.Pen.Style := psDash; 2: Canvas.Pen.Style := psDot; 3: Canvas.Pen.Style := psDashDot; 4: Canvas.Pen.Style := psDashDotDot; end; Canvas.LineTo(x+200, y); end; Przykäad 13.10. WyĞwietl na formularzu prostokąt malowany róĪnymi stylami pĊdzla po kaĪdym klik- niĊciu przycisku. Rozwiñzanie 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); begin 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. i Grafika w Delphi — korzystanie z metod obiektu TCanvas 157 5: Canvas.Brush.Style := bsDiagCross; 6: Canvas.Brush.Style := bsHorizontal; 7: Canvas.Brush.Style := bsVertical; end; Canvas.Rectangle(0,0, 200,100); end; Rysowanie „trwaäe” — zdarzenie OnPaint Instrukcje zawierające metody obiektu Canvas moĪna umieszczaü w procedurach ob- sá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 kom- ponentów podobne zdarzenia mają inne nazwy. Przedstawiono je w tabeli 13.2. Tabela 13.2. Zdarzenia umoĪliwiające rysowanie „trwaáe” Zdarzenie OnPaint 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. 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. Zdarzenie dla komponentu typu TChart, odpowiednik zdarzenia OnPaint. OnAfterDraw 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 przy- kryciu okna formularza innym oknem. Prostokąt powinien rysowaü siĊ po klikniĊciu przycisku i kasowaü po klikniĊciu drugiego przycisku — rysunek 13.4. Rozwiñzanie 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 pro- cedurĊ obsáugi tego zdarzenia z nową instrukcją naleĪy wywoáaü za pomocą przycisku. 158 Rysunek 13.4. Rysowanie i kasowanie prostokąta na formularzu Aplikacje w Delphi. Przykäady Szkielet procedury FormPaint moĪna uzyskaü, klikając dwukrotnie w oknie Inspekto- ra 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); begin Canvas.Rectangle(100,100,ClientWidth-100,ClientHeight-100); end; //procedura rysuje prostokæt koloru czerwonego i przypisuje procedurze obsđugi //zdarzenia OnPaint procedurú FormPaint procedure TForm1.Button1Click(Sender: TObject); begin Canvas.Pen.Color:=clRed; Canvas.Rectangle(100,100,ClientWidth-100,ClientHeight-100); OnPaint:=FormPaint;//przypisanie procedurze obsđugi zdarzenia procedury rysujæcej //prostokæt end; // odđæczenie procedury FormPaint od zdarzenia OnPaint — wykasowanie prostokæta procedure TForm1.Button2Click(Sender: TObject); begin OnPaint:=nil; //ta instrukcja spowoduje, ľe rysunek prostokæta nie búdzie odnawiany Refresh; //procedura ta kasuje prostokæt end; Przykäad 13.12. Wypeánij táo formularza bitmapą, np. wzorek.bmp. Rozwiñzanie W procedurze obsáugi zdarzenia OnPaint dla formularza wpisz instrukcje jak w proce- durze poniĪej. Rozdziaä 13. i 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; begin y := 0; while y Height do begin x := 0; while x Width do begin Canvas.Draw(x, y, Bitmap); x := x + Bitmap.Width; end; y := y + Bitmap.Height; end; end; 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). Wte- dy treĞü metody FormCreate powinna byü nastĊpująca: procedure TForm1.FormCreate(Sender: TObject); var obraz:TImage; //trzeba zadeklarowaè moduđ ExtCtrls begin Bitmap:=TBitmap.Create; obraz:=TImage.Create(Self); obraz.Picture.LoadFromFile( wzorek.jpg ); //zamiana formatu obrazu JPG na TBitmap Bitmap.Assign(obraz.Picture.Graphic); end; 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 przy- cisku myszy. 160 Aplikacje w Delphi. Przykäady Rozwiñzanie 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); begin Canvas.MoveTo(x,y); end; procedure TForm1.FormMouseMove(Sender: TObject;Shift: TShiftState; X, Y: Integer); begin if ssLeft in Shift then //czy lewy przycisk myszy wciħniúty Canvas.LineTo(x,y); end; 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 dru- giego przycisku. Rozwiñzanie 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; begin for i:=1 to 100 do Image1.Canvas.Pixels[Random(Image1.Width), Random(Image1.Height)]:=clWhite; end; Dla przycisku Button2 — rysowanie losowych kóáek: Rozdziaä 13. i Grafika w Delphi — korzystanie z metod obiektu TCanvas 161 procedure TForm1.Button2Click(Sender: TObject); var i,k,t: integer; begin for i:=1 to 100 do begin k:=Random(Image1.Width); t:=Random(Image1.Height); Image1.Canvas.Ellipse(k,t,k+10,t+10); end; end; 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 przed- stawiającego np. mapĊ obiektów (domków). Obiekty rysowane są na mapie po poda- niu wspóárzĊdnych i klikniĊciu przycisku lub po klikniĊciu na mapie — rysunek 13.5. Rysunek 13.5. Rysowanie obiektów na obrazie Rozwiñzanie 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); begin with Image1.Canvas do begin //daszek Polygon([Point(x,y),Point(x+10,y-10),Point(x+20,y)]); //reszta Rectangle(x+3,y,x+17,y+10); end; end; 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 spo- só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 proce- durze poniĪej. procedure TForm1.Button1Click(Sender: TObject); var x,y: integer; begin x:=StrtoIntDef(Edit1.Text,10); y:=StrtoIntDef(Edit2.Text,10); //rysowanie obiektu - domek Rysuj_domek(x,y); end; Funkcja StrtoIntDef umoĪliwia zabezpieczenie programu przed báĊdami. JeĞli w okien- ku 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ü zda- rzenie 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); begin Rysuj_domek(X,Y); end; 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Ğwie- tlany w miejsce pierwszego dopiero po zakoĔczeniu operacji. W zadaniach przykáadowych zastosowano pierwszy sposób animacji. Udaáo siĊ uzy- skaü odpowiednią páynnoĞü ruchu obiektów, dlatego nie wykorzystano sposobu z uĪy- ciem dwóch obszarów rysowania. Rozdziaä 13. i Grafika w Delphi — korzystanie z metod obiektu TCanvas 163 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. Rozwiñzanie W procedurze obsáugi przerwania od Timera wpisz: {$J+} procedure TForm1.Timer1Timer(Sender: TObject); const x1:integer=0; y1:integer=100; krok:integer=5; begin //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; end; Dyrektywa {$J+}przed treĞcią procedury wáącza opcjĊ kompilatora umoĪliwiającą zmia- nĊ 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 wzo- rem — rysunek 13.6. Rysunek 13.6. Animacja z táem Rozwiñzanie 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); begin //W procedurze FormCreate naleľy przeczytaè bitmapú z pliku. Bitmap:=TBitmap.Create; Bitmap.LoadFromFile( c:windowskawa.bmp ); end; // procedura pobiera prostokætny fragment formularza i uruchamia Timer procedure TForm1.Button1Click(Sender: TObject); var x,y:integer; begin // 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 end; {$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; begin //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; end; //wypeđnianie formularza bitmapæ procedure TForm1.FormPaint(Sender: TObject); var x, y: Integer; begin y := 0; while y Height do begin x := 0; while x Width do begin Canvas.Draw(x, y, Bitmap); Rozdziaä 13. i Grafika w Delphi — korzystanie z metod obiektu TCanvas 165 x := x + Bitmap.Width; end; y := y + Bitmap.Height; end; end; // procedura FormDestroy zwalnia pamiúè // zajmowanæ przez bitmapy procedure TForm1.FormDestroy(Sender: TObject); begin Bitmap.Free; Bitmap1.Free; end; 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. Rysunek 13.7. Animacja niebieskiej kulki Rozwiñzanie Na formularzu umieĞü komponent TPaintBox i TTimer. Komponent TPaintBox jest sto- sowany do wyĞwietlania (kreĞlenia) grafiki, która ma byü ograniczona do obszaru pro- stokątnego. Korzystając z komponentu TPaintBox, programista nie musi kontrolowaü, czy obszar ten nie zostaá przekroczony — jeĞli narysowany obiekt nie mieĞci siĊ we- wną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 komponen- tu. 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 begin with PaintBox1.Canvas do begin //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 begin krokx:=6+Random(5); krokx:=-krokx; end; if (y Paintbox1.Height-6) then begin kroky:=6+Random(5); kroky:=-kroky; end; if (x =6) then krokx:=-krokx; if (y =6) then kroky:=-kroky; end; //with end; Korzystając z Inspektora Obiektów, wáaĞciwoĞci Interval komponentu Timer1 przy- pisz 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. i Grafika w Delphi — korzystanie z metod obiektu TCanvas 167 Rozwiñzanie Wstaw komponenty TButton i TShape. Dla komponentu TShape ustaw wáaĞciwoĞü Shape na stCircle i wáaĞciwoĞü BrushColor na clYellow. W procedurze obsáugi klikniĊcia przycisku wpisz instrukcje jak poniĪej: procedure TForm1.Button1Click(Sender: TObject); begin if Shape1.Shape=stCircle then Shape1.Shape:=stRectangle else Shape1.Shape:=stCircle; Form1.ActiveControl:=nil; end; W celu sprawdzenia klawiszy strzaáek wykorzystaj zdarzenie OnKeyDown dla formula- rza. TreĞü procedury obsáugi tego zdarzenia przedstawiono poniĪej: procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin 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óđ end; end; 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ü kur- sor na sáowie vk_Left i nacisnąü F1 lub wyszukaü hasáo Virtual Key Codes.
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Aplikacje w Delphi. Przykłady. Wydanie III
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: