Top Banner
26

Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

Dec 01, 2018

Download

Documents

votu
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy
Page 2: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

Idź do

• Spis treści• Przykładowy rozdział

• Katalog online

• Dodaj do koszyka

• Zamów cennik

• Zamów informacjeo nowościach

• Fragmenty książekonline

Helion SAul. Kościuszki 1c44-100 Gliwicetel. 32 230 98 63e-mail: [email protected]© Helion 1991–2010

Katalog książek

Twój koszyk

Cennik i informacje

Czytelnia

Kontakt

• Zamów drukowanykatalog

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!

Page 3: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

Spis tre�ciWprowadzenie................................................................................... 7

Rozdzia� 1. Projektowanie aplikacji w Delphi ....................................................... 9rodowisko zintegrowane — Delphi IDE ....................................................................... 10Elementy projektu aplikacji ............................................................................................. 10Standardowe w�a�ciwo�ci komponentów ........................................................................ 14Standardowe zdarzenia .................................................................................................... 14Nowo�ci w Delphi 2010 .................................................................................................. 17Jak przekszta�ci interfejs aplikacji z Delphi 7 na nowocze�niejszy,

zgodny z nowszymi wersjami Windows? ..................................................................... 20Jak sprawdzi, czy aplikacja jest ju� uruchomiona? ........................................................ 21

Rozdzia� 2. Podstawowe sk�adniki aplikacji ....................................................... 23Okno aplikacji ................................................................................................................. 23Ikona aplikacji ................................................................................................................. 28Wy�wietlanie napisów..................................................................................................... 29Rodzaje przycisków, podobie�stwa i ró�nice .................................................................. 33Etykiety i przyciski.......................................................................................................... 37Linki ................................................................................................................................ 42

Rozdzia� 3. Menu g�ówne i podr�czne, pasek narz�dzi ........................................ 45Wielopoziomowe menu g�ówne ...................................................................................... 46Przyporz�dkowanie polece� opcjom menu ..................................................................... 48Menu podr�czne .............................................................................................................. 52Polskie litery w nazwach polece� menu .......................................................................... 54Pasek narz�dzi TToolBar................................................................................................. 54

Rozdzia� 4. Wprowadzanie danych, formatowanie i wy�wietlanie na ekranie........ 57Liczby — funkcje konwersji i formatowanie .................................................................. 58Daty — funkcje konwersji i formatowanie daty oraz czasu ............................................ 60Przecinek czy kropka? ..................................................................................................... 62Systemowe separatory liczb i daty .................................................................................. 63Wprowadzanie danych za pomoc� okienek edycyjnych TEdit........................................ 64Wprowadzanie danych za pomoc� okienek InputBox i InputQuery................................ 71Sposoby zabezpieczania programu przed b��dami przy wprowadzaniu danych.............. 72

Maskowanie danych wej�ciowych ............................................................................ 72Blokowanie mo�liwo�ci wprowadzania niektórych znaków, np. liter lub cyfr ......... 74Korzystanie z funkcji konwersji StrToIntDef (z warto�ci� domy�ln�)...................... 75

Page 4: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

4 Aplikacje w Delphi. Przyk�ady

Zmiana zawarto�ci okienka TEdit za pomoc� suwaka TScrollBar............................ 75Zmiana zawarto�ci okienka TEdit za pomoc� komponentu TUpDown..................... 76Stosowanie instrukcji obs�ugi wyj�tków ................................................................... 77

Obliczenia. Wybrane funkcje modu�u Math .................................................................... 79

Rozdzia� 5. Okienka komunikatów..................................................................... 83Wy�wietlanie komunikatów z napisami sta�ymi w j�zyku systemowym

— MessageBox............................................................................................................. 84Wy�wietlanie komunikatów za pomoc� funkcji ShowMessage, MessageDlg,

MessageDlgPos............................................................................................................. 86

Rozdzia� 6. Okienka dialogowe z karty Dialogs................................................... 91Odczyt i zapis plików z wykorzystaniem okien dialogowych ......................................... 94Wy�wietlanie nazwy wybranego koloru za pomoc� okna TColorDialog ........................ 96Zmiana czcionki na etykiecie za pomoc� okna TFontDialog .......................................... 96

Rozdzia� 7. Listy wyboru — TListBox i TComboBox ............................................ 99Dodawanie elementów do listy...................................................................................... 101Wybieranie elementów z listy ....................................................................................... 102Sortowanie elementów listy........................................................................................... 105Sposoby wy�wietlania elementów listy ......................................................................... 106Lista z nazwami czcionek.............................................................................................. 107Blokowanie edycji dla listy TComboBox...................................................................... 108Czytanie i zapisywanie zawarto�ci listy do pliku dyskowego ....................................... 109Konfigurator .................................................................................................................. 110

Rozdzia� 8. Prosty edytor — komponent TMemo .............................................. 113Kopiowanie, wycinanie i wklejanie tekstu .................................................................... 115Czytanie i zapisywanie tekstu do pliku.......................................................................... 116Wy�wietlanie informacji o po�o�eniu kursora ............................................................... 117Automatyczne kasowanie linii niezawieraj�cych liczb lub wybranych znaków............ 118Wy�wietlanie wspó�rz�dnych kursora w polu TMemo i zegara na pasku TStatusBar... 119Dodawanie danych do TMemo z komponentu TEdit, TComboBbox............................ 121

Rozdzia� 9. Grupowanie komponentów............................................................. 123Pola opcji i pola wyboru................................................................................................ 123Komponenty grupuj�ce.................................................................................................. 124Ramka TBevel ............................................................................................................... 130

Rozdzia� 10. Komponenty do wyboru daty i czasu TDateTimePickeri 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 .............. 149Wy�wietlanie prostych figur geometrycznych i tekstu .................................................. 150Rysowanie „trwa�e” — zdarzenie OnPaint.................................................................... 157Rysowanie mysz� po formularzu................................................................................... 159Rysowanie mysz� po komponencie TImage.................................................................. 160Przyk�ady animacji w Delphi......................................................................................... 162

Rozdzia� 14. Wy�wietlanie obrazów — komponent TImage ................................. 169Rysowanie po obrazie.................................................................................................... 171Binaryzacja obrazu ........................................................................................................ 172Skalowanie obrazów .BMP, .JPG.................................................................................. 175

Page 5: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

Spis tre�ci 5

Przegl�danie wczytanych obrazów................................................................................ 178Wy�wietlanie zawarto�ci listy obrazków TImageList ................................................... 179Zamiana formatu obrazów z .JPG, .GIF, .PNG na .BMP .............................................. 181GIF animowany ............................................................................................................. 182Zaznaczanie i wycinanie prostok�tnego obszaru z obrazu............................................. 183

Rozdzia� 15. Tabelaryzacja danych — komponenty TStringGrid, TDrawGridi TValueListEditor .......................................................................... 187Ustalanie podstawowych parametrów tabeli.................................................................. 190Wype�nianie tabeli danymi ............................................................................................ 192Wybieranie komórek tabeli............................................................................................ 194Filtrowanie wprowadzanych danych ............................................................................. 197Niestandardowe przej�cie do kolejnej komórki — klawisz Enter.................................. 199Zmiana koloru i wyrównania tekstu w wybranych komórkach ..................................... 200Zmiana koloru wierszy tabeli ........................................................................................ 204Wy�wietlanie tekstu w komórce w dwóch wierszach.................................................... 206Totolotek ....................................................................................................................... 208Tabela i lista .................................................................................................................. 210Wy�wietlanie listy obrazów i tekstu w tabeli TDrawGrid ............................................. 211Wy�wietlanie obrazu pobranego z pliku w komórkach tabeli TDrawGrid .................... 213Wprowadzanie tekstu do komórek tabeli TDrawGrid ................................................... 217Tabela TValueListEditor ............................................................................................... 218

Rozdzia� 16. Graficzna prezentacja danych — komponent TChart ....................... 223Rysowanie wykresów z wykorzystaniem komponentu TChart ..................................... 223Opis wybranych w�a�ciwo�ci, metod i zdarze� komponentów

TChart i TChartSeries ................................................................................................. 226Wykresy ko�owe............................................................................................................ 229Wykresy kolumnowe..................................................................................................... 232Wykresy funkcji matematycznych................................................................................. 235Formatowanie i skalowanie wykresów.......................................................................... 239Pos�ugiwanie si� wieloma wykresami ........................................................................... 245Wykres Gantta ............................................................................................................... 248

Rozdzia� 17. Wspó�praca programu z plikami dyskowymi.................................... 251Wybór foldera plików.................................................................................................... 251Wyszukiwanie plików ................................................................................................... 254Zapisywanie danych z okienek TEdit i tabeli TStringgrid do pliku tekstowego............ 256Czytanie danych do okienek TEdit i tabeli TStringgrid z pliku tekstowego.................. 258Zapisywanie i odczytywanie danych z tabeli do pliku *.csv ......................................... 259Zmiana nazw grupy plików ........................................................................................... 261Korzystanie ze strumieni ............................................................................................... 262

Rozdzia� 18. Drukowanie w Delphi..................................................................... 269Drukowanie napisów i tekstu z okienek edycyjnych ..................................................... 270Drukowanie tabeli ......................................................................................................... 271Drukowanie obrazu ....................................................................................................... 273Drukowanie tekstu sformatowanego za pomoc� komponentu TRichEdit ..................... 274Drukowanie za pomoc� Rave Reports........................................................................... 280

Rozdzia� 19. Programy z wieloma oknami .......................................................... 293Wymiana danych i metod mi�dzy modu�ami ................................................................ 293Program z has�em .......................................................................................................... 296Wy�wietlanie tytu�u programu ...................................................................................... 299

Page 6: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

6 Aplikacje w Delphi. Przyk�ady

Aplikacje typu MDI....................................................................................................... 301Test wyboru................................................................................................................... 303

Rozdzia� 20. Pos�ugiwanie si� wieloma komponentami tego samego typu.Operatory Is i As ........................................................................... 305Wprowadzanie i kasowanie danych dla kilku okienek edycyjnych ............................... 306Przypisywanie grupie komponentów tej samej procedury obs�ugi zdarzenia ................ 308Wy�wietlanie informacji o numerach kontrolek, ich nazwach i klasach ....................... 311Ankieta .......................................................................................................................... 312

Rozdzia� 21. Przyk�ady wykorzystania mechanizmu OLE w Delphi........................ 315Komponent TOLEContainer ......................................................................................... 316Zapisywanie tekstu, grafiki i tabeli do dokumentu w formacie .DOC........................... 318Zapisywanie danych z aplikacji w Delphi w formacie .XLS......................................... 321Czytanie, modyfikacja i zapisywanie pliku w formacie .XLS ....................................... 324

Rozdzia� 22. Dynamiczne tworzenie komponentów ............................................. 327Wy�wietlanie kontrolek i przypisywanie zdarzeniom procedur obs�ugi........................ 328Przyk�ady dynamicznego tworzenia wykresów............................................................. 333Tworzenie menu w czasie dzia�ania programu .............................................................. 336Tablice dynamiczne....................................................................................................... 338

Rozdzia� 23. Definiowanie nowych klas komponentów........................................ 341Klasa tabel z wyrównaniem zawarto�ci komórek do prawej strony .............................. 341Klasa okienek z w�a�ciwo�ci� Alignment...................................................................... 343Instalowanie nowych komponentów na palecie komponentów..................................... 345Instalacja nowego komponentu w Delphi 2006............................................................. 349Nowy komponent do ankiety......................................................................................... 351Nowy komponent z�o�ony z komponentów standardowych.......................................... 353Instalacja nowego komponentu w Delphi 2010............................................................. 356

Rozdzia� 24. Podstawowe operacje na bazach danych........................................ 357Przegl�danie istniej�cych baz danych w formacie .dbf.................................................. 359Tworzenie w�asnej bazy danych .................................................................................... 361Modyfikowanie bazy ..................................................................................................... 363Filtrowanie rekordów bazy danych................................................................................ 365Wyszukiwanie rekordów ............................................................................................... 367Sortowanie..................................................................................................................... 368Rysowanie wykresów na podstawie danych z bazy....................................................... 368Obliczanie �redniej ze wszystkich warto�ci danego pola............................................... 370Biblioteka — przyk�ad relacyjnej bazy danych ............................................................. 370

Logiczne po��czenie tabel ....................................................................................... 373Drukowanie danych za pomoc� programu Rave Reports ........................................ 374

Rozdzia� 25. Delphi i multimedia ....................................................................... 383Komponent TAnimate ................................................................................................... 383Komponent TMediaPlayer ............................................................................................ 384Playlista ......................................................................................................................... 389

Literatura...................................................................................... 393

Skorowidz ..................................................................................... 395

Page 7: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

Rozdzia� 13.

Grafika w Delphi— korzystanie z metodobiektu TCanvas

Niektóre komponenty maj� w�a�ciwo� typu obiektowego Canvas (tzw. p�ótno). S� tom.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 przydatnedo zmiany cech niektórych komponentów, np. TStringGrid czy TChart, a tak�e przydrukowaniu formularza i tekstu.

Rysowanie po obrazie wczytanym do komponentu TImage jest mo�liwe wtedy, kiedyjest 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.

Page 8: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

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.Formularzz zaznaczonymiwarto�ciamiwspó�rz�dnychwierzcho�ków (x, y)

Wy�wietlanie prostychfigur 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 orazwybór kroju i stylu czcionki dla tekstu.

Tabela 13.1. Wybrane metody obiektu TCanvas

Metoda Znaczenie

Kolor:=Canvas.Pixels[x,y] Za pomoc� funkcji Pixels mo�na odczyta kolor piksela w miejscuo 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�wietleniena 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órnegowierzcho�ka to (0, 0).

MoveTo(x,y: integer) Przenosi kursor graficzny do punktu o wspó�rz�dnych x, y.LineTo(x,y:integer) Rysuje lini� od bie��cej pozycji kursora graficznego do punktu

o wspó�rz�dnych x, y.Rectangle(x1, y1, x2, y2:Integer)

Procedura rysuje prostok�t wype�niony standardowym koloremp�dzla (Canvas.Brush.Color).

Ellipse(x1, y1, x2, y2:Integer)

Procedura rysuje elips� (lub ko�o) — parametrami s� wspó�rz�dnedwóch przeciwleg�ych wierzcho�ków prostok�ta (kwadratu), w któryelipsa jest wpisana.

Page 9: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

Rozdzia� 13. � Grafika w Delphi — korzystanie z metod obiektu TCanvas 151

Tabela 13.1. Wybrane metody obiektu TCanvas — ci�g dalszy

Metoda Znaczenie

Polyline(Points: array ofTPoint)

Procedura rysuje lini� �aman� lub wielok�t. Parametrami s�wspó�rz�dne punktów, które zostan� po��czone lini�. Je�liwspó�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).Polygon(Points: array ofTPoint)

Procedura umo�liwia narysowanie wielok�ta wype�nionegobie��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 koloremczerwonym. Wspó�rz�dne punktu pierwszego i ostatniego nie musz�si� pokrywa, poniewa� procedura i tak ��czy na ko�cu punkt ostatniz punktem pierwszym.

Refresh Od�wie�anie formularza — procedura kasuje wszystkie obiektyrysowane za pomoc� metod obiektu Canvas i nieumieszczonew procedurze obs�ugi zdarzenia OnPaint.

Draw(x, y:integer;Graphic:TGraphic)

Rysuje obraz okre�lony parametrem Graphic w miejscuo wspó�rz�dnych x i y (przyk�ad 13.14).

Arc(x1,y1, x2,y2, x3,y3,x4,y4: integer)

Rysuje krzyw� eliptyczn� w prostok�cie o wspó�rz�dnych (x1, y1;x2, y2) od punktu o wspó�rz�dnych (x3, y3) do punktu (x4, y4).

TextOut(x,y:integer; constText:string)

Wy�wietla tekst od punktu o wspó�rz�dnych x, y — lewy górny rógprostok�ta zawieraj�cego tekst; Text to parametr w postaci tekstusta�ego w apostrofach, np. 'Ala ma kota', lub zmienna zawieraj�ca�a�cuch znaków, np. a:='Ala ma kota' (const w nag�ówkuprocedury oznacza podobne wywo�anie jak w przypadku warto�ci,lecz umo�liwia bardziej efektywne wykorzystanie pami�ci).

CopyRect(const Dest: TRect;Canvas: TCanvas; constSource: TRect)

Kopiuje cz�� obrazu z jednego p�ótna na inne p�ótno.

FillRect(const Rect: TRect) Rysowanie prostok�ta wype�nionego bie��cym kolorem i wzorem.FloodFill(X, Y: Integer;Color: TColor; FillStyle:TFillStyle)

Wype�nianie, tzw. powodziowe, obiektów.

FrameRect(const Rect:TRect)

Rysowanie obwodu prostok�ta.

Pie(X1, Y1, X2, Y2, X3, Y3,X4, Y4: Integer);

Rysowanie wycinka ko�a.

RoundRect(X1, Y1, X2, Y2,X3, Y3: Integer)

Rysowanie prostok�ta z zaokr�glonymi naro�nikami.

StretchDraw(const Rect:TRect; Graphic: TGraphic)

Dopasowanie rysunku do obszaru danego prostok�ta.

Page 10: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

152 Aplikacje w Delphi. Przyk�ady

Tabela 13.1. Wybrane metody obiektu TCanvas — ci�g dalszy

Metoda Znaczenie

TextHeight(const Text:string): Integer

Funkcja zwraca wysoko� tekstu w pikselach.

TextOut(X, Y: Integer;const Text: string)

Procedura wy�wietla napis na komponencie maj�cym w�a�ciwo�TCanvas.

TextRect(Rect: TRect; X, Y:Integer; const Text:string)

Procedura wy�wietla napis w prostok�cie, którego wspó�rz�dnes� podane w postaci typu TRect (pierwszy parametr). Proceduraby�a wykorzystywana przy formatowaniu komórek tabeli.

TextWidth(const Text:string): Integer

Funkcja zwraca szeroko� tekstu w pikselach.

Oprócz wymienionych metod zdefiniowane s� te, które korzystaj� z tzw. mechanizmówniskopoziomowych 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 — lewygó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 tymmiejscu znajdowa si� inny obiekt (np. przycisk), bo wy�wietlony piksel zostanie przezten 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.

Page 11: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

Rozdzia� 13. � Grafika w Delphi — korzystanie z metod obiektu TCanvas 153

Rysunek 13.2.Formularzz przek�tnymipozostaj�cymipo zmianiejego 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�kaCanvas.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;

iprocedure TForm1.FormResize(Sender: TObject);begin Refresh; // przy zmianie rozmiaru okna // kasowane s� poprzednie przek�tneend;

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:

Page 12: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

154 Aplikacje w Delphi. Przyk�ady

//Losowe punktyprocedure TForm1.Button2Click(Sender: TObject);var i:integer;beginfor 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);varprost: 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 �rodkuformularza

Page 13: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

Rozdzia� 13. � 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 formularzaCanvas.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� pokrywasi� ze wspó�rz�dnymi punktu pierwszego wielok�ta, poniewa� pierwszy punkt jestautomatycznie ��czony z ostatnim:

procedure TForm1.Button1Click(Sender: TObject);begin Canvas.Brush.Color:=clYellow;

Page 14: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

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 wpiszinstrukcje jak w poni�szej procedurze:

//style liniiprocedure 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 wpiszinstrukcje jak w poni�szej procedurze:

//style p�dzlaprocedure 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;

Page 15: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

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; 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 nichumo�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 Znaczenie

OnPaint Zdarzenie dla formularza generowane ka�dorazowo, gdy zawarto� okna formularzawymaga 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 gdynast�puje zmiana jego rozmiaru.

PaintBoxPaint Odpowiednik zdarzenia OnPaint dla komponentu PaintBox.OnDrawCell Zdarzenie wyst�puj�ce dla komponentu typu TDrawGrid i TStringGrid — umo�liwia

„trwa�e” rysowanie obiektów i wy�wietlanie tekstu w komórkach.OnAfterDraw Zdarzenie dla komponentu typu TChart, odpowiednik zdarzenia OnPaint.

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�ciuprzycisku 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.

Page 16: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

158 Aplikacje w Delphi. Przyk�ady

Rysunek 13.4.Rysowaniei kasowanieprostok�tana formularzu

Szkielet procedury FormPaint mo�na uzyska, klikaj�c dwukrotnie w oknie Inspekto-ra Obiektów z prawej strony zdarzenia OnPaint. Pó�niej trzeba jednak wykasowaw Inspektorze Obiektów t� nazw�, aby instrukcje w procedurze obs�ugi zdarzeniaOnPaint 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� FormPaintprocedure 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�tend;

// od��czenie procedury FormPaint od zdarzenia OnPaint — wykasowanie prostok�taprocedure TForm1.Button2Click(Sender: TObject);begin OnPaint:=nil; //ta instrukcja spowoduje, �e rysunek prostok�ta nie b�dzie odnawiany Refresh; //procedura ta kasuje prostok�tend;

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.

Page 17: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

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;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� ExtCtrlsbegin 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� klasyTImage. Przyk�ad 13.12A na p�ycie prezentuje sposób uzyskania t�a z obrazu typu .JPG.

Rysowanie mysz po formularzuPrzyk�ad 13.13.

Napisz program umo�liwiaj�cy rysowanie po formularzu po naci�ni�ciu lewego przy-cisku myszy.

Page 18: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

160 Aplikacje w Delphi. Przyk�ady

Rozwi�zanie

Wykorzystano zdarzenie OnMouseDown wyst�puj�ce po naci�ni�ciu przycisku myszy nakomponencie i zdarzenie OnMouseMove wyst�puj�ce przy przesuwaniu kursora myszynad 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 myszpo komponencie TImage

Przyk�ad 13.14.

Napisz program umo�liwiaj�cy wy�wietlenie w losowych miejscach bia�ych pikselina 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 TImagez zak�adki Additional tak, aby lewe górne wierzcho�ki obu komponentów pokrywa�ysi�. 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 jeszczedwa przyciski TButton.

W procedurze obs�ugi zdarzenia OnClick dla przycisku Button1 wpisz instrukcje jakw 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:

Page 19: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

Rozdzia� 13. � 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 2009dla 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ówna obrazie

Rozwi�zanie

Na formularzu wstaw przycisk TButton, dwa komponenty TEdit. Komponent TScrollBoxi 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;

Page 20: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

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 xlub 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 zwracawspó�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 DelphiW programowaniu stosuje si� ró�ne techniki animacji. Jednym z prostszych sposobówjest 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 danejchwili 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.

Page 21: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

Rozdzia� 13. � 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 doprawego 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 bystandardowo 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� Intervalustaw na 200 ms, a w�a�ciwo� Enabled na false. Tre� procedur obs�ugi przyciskui przerwania od Timera przedstawiono poni�ej.

Page 22: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

164 Aplikacje w Delphi. Przyk�ady

Zadeklaruj zmienn� globaln�:var Bitmap,Bitmap1: TBitmap;//za�adowanie obrazu .BMP do zmiennej Bitmapprocedure TForm1.FormCreate(Sender: TObject);begin//W procedurze FormCreate nale�y przeczyta� bitmap� z pliku. Bitmap:=TBitmap.Create; Bitmap.LoadFromFile('c:\windows\kawa.bmp');end;

// procedura pobiera prostok�tny fragment formularza i uruchamia Timerprocedure 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 Timer2end;

{$J+} //procedura obs�ugi przerwania od Timera - rysowanie i kasowanie obiektu //co 200 msprocedure 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);

Page 23: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

Rozdzia� 13. � 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 bitmapyprocedure TForm1.FormDestroy(Sender: TObject);begin Bitmap.Free; Bitmap1.Free;end;

Przyk�ad 13.18.

Wykonaj animacj� polegaj�c� na przemieszczaniu si� kulki w losowych kierunkachw prostok�tnym obszarze o wymiarach (0, 0, 200, 200). Wykorzystaj komponentTPaintBox z zak�adki System — rysunek 13.7.

Rysunek 13.7.Animacjaniebieskiej 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 rysunekmo�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 bezniego — wtedy kulka przesuwa si� po formularzu.

W zadaniu mo�na równie� doda przycisk, który b�dzie w��cza� zegar (animacj�) powpisaniu w procedurze obs�ugi instrukcji Timer1.Enabled:=true; (wcze�niej nale�yzegar 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;

Page 24: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

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; //withend;

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 kierunkiemstrza�ki — rysunek 13.8.

Rysunek 13.8.Przesuwanie ko�aza pomoc�klawiszy strza�ek

Aby klawisze strza�ek nie by�y przechwytywane przez komponent Button1, nale�yustawi� dla niego w�a�ciwo�� TabStop na false.

Page 25: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy

Rozdzia� 13. � Grafika w Delphi — korzystanie z metod obiektu TCanvas 167

Rozwi�zanie

Wstaw komponenty TButton i TShape. Dla komponentu TShape ustaw w�a�ciwo� Shapena stCircle i w�a�ciwo� Brush\Color na clYellow. W procedurze obs�ugi klikni�ciaprzycisku 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ówpodano w tabeli 13.3.

Tabela 13.3. Wybrane klawisze i ich kody

Kod klawisza Klawisz

vk_F1, vk_F2, … vkF24 F1, F2, …, F24vk_LBUTTON, vk_RBUTTON Lewy przycisk myszy, prawy przycisk myszyvk_INSERT Insvk_DELETE Delvk_ESCAPE EscVk_BACK BackspaceVk_TAB 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.

Page 26: Aplikacje w Delphi. - rafaljak.phg.pl · Środowisko Delphi służy do szybkiego tworzenia aplikacji działających w systemie Windows. Zawiera bogate biblioteki komponentów, mechanizmy