You are on page 1of 26

Id do

Spis treci
Przykadowy rozdzia
Katalog ksiek
Katalog online
Zamw drukowany
katalog
Twj koszyk
Dodaj do koszyka
Cennik i informacje
Zamw informacje
o nowociach
Zamw cennik
Czytelnia
Fragmenty ksiek
online

Kontakt
Helion SA
ul. Kociuszki 1c
44-100 Gliwice
tel. 32 230 98 63
e-mail: helion@helion.pl
Helion 19912010

Aplikacje w Delphi.
Przykady. Wydanie III
Autor: Teresa Pamua
ISBN: 978-83-246-2851-3
Format: 158235, stron: 416

Projektuj wspaniae aplikacje z pomoc rodowiska Delphi 2010!


Wygld i podstawowe funkcje aplikacji, czyli od czego zacz prac
Wprowadzanie danych i okienka komunikatw, czyli zapewnianie dialogu midzy
programem a uytkownikiem
Tworzenie nowych komponentw, czyli jak nada aplikacji niepowtarzalny styl
rodowisko Delphi suy do szybkiego tworzenia aplikacji dziaajcych w systemie Windows.
Zawiera bogate biblioteki komponentw, mechanizmy Plug and Play oraz Code Insight, a take
palety komponentw i narzdzia uatwiajce ich wyszukiwanie. Dziki Delphi IDE mona w prosty
sposb zaprojektowa interfejs uytkownika nowej aplikacji, okreli jej wygld oraz sposb
dziaania w oparciu o istniejce kontrolki i biblioteki klas, w duym stopniu zdajc si na
automatyczne generowanie kodu.
Jeli chcesz pozna, dogbnie zrozumie i wykorzysta do swoich celw sposb dziaania Delphi
2010, powiniene koniecznie sign po ksik Aplikacje w Delphi. Przykady. Znajdziesz tu
wszelkie informacje na temat obsugi samego rodowiska, podstawowych skadnikw kadej
tworzonej aplikacji, wprowadzania i formatowania danych, list, tabel, grupowania i projektowania
nowych komponentw, wykorzystania technologii OLE do zapisu i modyfikacji danych
w formatach .doc i .xls, moliwoci graficznej prezentacji danych, ich drukowania i wsppracy
Twojej aplikacji z multimediami. Wszystko to oraz wiele innych zagadnie pokazano tu na
praktycznych, konkretnych przykadach, uatwiajcych zrozumienie i gotowych do zastosowania
w Twoich wasnych projektach.
Podstawowe skadniki aplikacji, menu gwne i podrczne, pasek narzdzi
Wprowadzanie danych, formatowanie i wywietlanie na ekranie
Okienka komunikatw i okienka dialogowe z karty Dialogs
Listy wyboru i prosty edytor
Grupowanie i dynamiczne tworzenie komponentw
Komponenty do wyboru daty i czasu, odmierzanie czasu
Zakadki TTabControl i TPageControl
Grafika w Delphi i wywietlanie obrazw
Tabelaryzacja danych i ich graficzna prezentacja danych
Wsppraca programu z plikami dyskowymi
Drukowanie w Delphi i programy z wieloma oknami
Posugiwanie si wieloma komponentami tego samego typu
Definiowanie nowych klas komponentw i wykorzystanie mechanizmu OLE
Podstawowe operacje na bazach danych
Delphi i multimedia
Odkryj fantastyczne moliwoci Delphi!

Spis treci
Wprowadzenie................................................................................... 7
Rozdzia 1. Projektowanie aplikacji w Delphi ....................................................... 9

rodowisko zintegrowane Delphi IDE ....................................................................... 10


Elementy projektu aplikacji............................................................................................. 10
Standardowe waciwoci komponentw ........................................................................ 14
Standardowe zdarzenia .................................................................................................... 14
Nowoci w Delphi 2010 .................................................................................................. 17
Jak przeksztaci interfejs aplikacji z Delphi 7 na nowoczeniejszy,
zgodny z nowszymi wersjami Windows? ..................................................................... 20
Jak sprawdzi , czy aplikacja jest ju uruchomiona? ........................................................ 21

Rozdzia 2. Podstawowe skadniki aplikacji ....................................................... 23


Okno aplikacji ................................................................................................................. 23
Ikona aplikacji ................................................................................................................. 28
Wywietlanie napisw..................................................................................................... 29
Rodzaje przyciskw, podobiestwa i rnice .................................................................. 33
Etykiety i przyciski.......................................................................................................... 37
Linki ................................................................................................................................ 42

Rozdzia 3. Menu gwne i podrczne, pasek narzdzi ........................................ 45


Wielopoziomowe menu gwne ...................................................................................... 46
Przyporzdkowanie polece opcjom menu ..................................................................... 48
Menu podrczne .............................................................................................................. 52
Polskie litery w nazwach polece menu .......................................................................... 54
Pasek narzdzi TToolBar................................................................................................. 54

Rozdzia 4. Wprowadzanie danych, formatowanie i wywietlanie 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 bdami przy wprowadzaniu danych.............. 72
Maskowanie danych wejciowych ............................................................................ 72
Blokowanie moliwoci wprowadzania niektrych znakw, np. liter lub cyfr ......... 74
Korzystanie z funkcji konwersji StrToIntDef (z wartoci domyln)...................... 75

Aplikacje w Delphi. Przykady


Zmiana zawartoci okienka TEdit za pomoc suwaka TScrollBar............................ 75
Zmiana zawartoci okienka TEdit za pomoc komponentu TUpDown..................... 76
Stosowanie instrukcji obsugi wyjtkw ................................................................... 77
Obliczenia. Wybrane funkcje moduu Math .................................................................... 79

Rozdzia 5. Okienka komunikatw ..................................................................... 83


Wywietlanie komunikatw z napisami staymi w jzyku systemowym
MessageBox............................................................................................................. 84
Wywietlanie komunikatw za pomoc funkcji ShowMessage, MessageDlg,
MessageDlgPos............................................................................................................. 86

Rozdzia 6. Okienka dialogowe z karty Dialogs................................................... 91


Odczyt i zapis plikw z wykorzystaniem okien dialogowych ......................................... 94
Wywietlanie 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 elementw do listy...................................................................................... 101
Wybieranie elementw z listy ....................................................................................... 102
Sortowanie elementw listy........................................................................................... 105
Sposoby wywietlania elementw listy ......................................................................... 106
Lista z nazwami czcionek.............................................................................................. 107
Blokowanie edycji dla listy TComboBox...................................................................... 108
Czytanie i zapisywanie zawartoci 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
Wywietlanie informacji o pooeniu kursora ............................................................... 117
Automatyczne kasowanie linii niezawierajcych liczb lub wybranych znakw............ 118
Wywietlanie wsprzdnych kursora w polu TMemo i zegara na pasku TStatusBar... 119
Dodawanie danych do TMemo z komponentu TEdit, TComboBbox............................ 121

Rozdzia 9. Grupowanie komponentw............................................................. 123


Pola opcji i pola wyboru................................................................................................ 123
Komponenty grupujce.................................................................................................. 124
Ramka TBevel ............................................................................................................... 130

Rozdzia 10. Komponenty do wyboru daty i czasu TDateTimePicker


i TMonthCalendar.......................................................................... 133
Rozdzia 11. Zakadki TTabControl i TPageControl ............................................. 137
Rozdzia 12. Odmierzanie czasu komponent TTimer ....................................... 145
Rozdzia 13. Grafika w Delphi korzystanie z metod obiektu TCanvas .............. 149
Wywietlanie prostych figur geometrycznych i tekstu .................................................. 150
Rysowanie trwae zdarzenie OnPaint.................................................................... 157
Rysowanie mysz po formularzu................................................................................... 159
Rysowanie mysz po komponencie TImage.................................................................. 160
Przykady animacji w Delphi......................................................................................... 162

Rozdzia 14. Wywietlanie obrazw komponent TImage ................................. 169


Rysowanie po obrazie.................................................................................................... 171
Binaryzacja obrazu ........................................................................................................ 172
Skalowanie obrazw .BMP, .JPG.................................................................................. 175

Spis treci

5
Przegldanie wczytanych obrazw................................................................................ 178
Wywietlanie zawartoci listy obrazkw TImageList ................................................... 179
Zamiana formatu obrazw z .JPG, .GIF, .PNG na .BMP .............................................. 181
GIF animowany ............................................................................................................. 182
Zaznaczanie i wycinanie prostoktnego obszaru z obrazu............................................. 183

Rozdzia 15. Tabelaryzacja danych komponenty TStringGrid, TDrawGrid


i TValueListEditor .......................................................................... 187
Ustalanie podstawowych parametrw tabeli.................................................................. 190
Wypenianie tabeli danymi ............................................................................................ 192
Wybieranie komrek tabeli............................................................................................ 194
Filtrowanie wprowadzanych danych ............................................................................. 197
Niestandardowe przejcie do kolejnej komrki klawisz Enter.................................. 199
Zmiana koloru i wyrwnania tekstu w wybranych komrkach ..................................... 200
Zmiana koloru wierszy tabeli ........................................................................................ 204
Wywietlanie tekstu w komrce w dwch wierszach.................................................... 206
Totolotek ....................................................................................................................... 208
Tabela i lista .................................................................................................................. 210
Wywietlanie listy obrazw i tekstu w tabeli TDrawGrid ............................................. 211
Wywietlanie obrazu pobranego z pliku w komrkach tabeli TDrawGrid .................... 213
Wprowadzanie tekstu do komrek tabeli TDrawGrid ................................................... 217
Tabela TValueListEditor ............................................................................................... 218

Rozdzia 16. Graficzna prezentacja danych komponent TChart ....................... 223


Rysowanie wykresw z wykorzystaniem komponentu TChart ..................................... 223
Opis wybranych waciwoci, metod i zdarze komponentw
TChart i TChartSeries ................................................................................................. 226
Wykresy koowe............................................................................................................ 229
Wykresy kolumnowe..................................................................................................... 232
Wykresy funkcji matematycznych................................................................................. 235
Formatowanie i skalowanie wykresw.......................................................................... 239
Posugiwanie si wieloma wykresami ........................................................................... 245
Wykres Gantta ............................................................................................................... 248

Rozdzia 17. Wsppraca programu z plikami dyskowymi .................................... 251


Wybr foldera plikw.................................................................................................... 251
Wyszukiwanie plikw ................................................................................................... 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 plikw ........................................................................................... 261
Korzystanie ze strumieni ............................................................................................... 262

Rozdzia 18. Drukowanie w Delphi..................................................................... 269


Drukowanie napisw 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 midzy moduami ................................................................ 293
Program z hasem .......................................................................................................... 296
Wywietlanie tytuu programu ...................................................................................... 299

Aplikacje w Delphi. Przykady


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

Rozdzia 20. Posugiwanie si wieloma komponentami tego samego typu.


Operatory Is i As ........................................................................... 305
Wprowadzanie i kasowanie danych dla kilku okienek edycyjnych ............................... 306
Przypisywanie grupie komponentw tej samej procedury obsugi zdarzenia ................ 308
Wywietlanie informacji o numerach kontrolek, ich nazwach i klasach ....................... 311
Ankieta .......................................................................................................................... 312

Rozdzia 21. Przykady 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 komponentw ............................................. 327


Wywietlanie kontrolek i przypisywanie zdarzeniom procedur obsugi........................ 328
Przykady dynamicznego tworzenia wykresw ............................................................. 333
Tworzenie menu w czasie dziaania programu .............................................................. 336
Tablice dynamiczne....................................................................................................... 338

Rozdzia 23. Definiowanie nowych klas komponentw........................................ 341


Klasa tabel z wyrwnaniem zawartoci komrek do prawej strony .............................. 341
Klasa okienek z waciwoci Alignment...................................................................... 343
Instalowanie nowych komponentw na palecie komponentw ..................................... 345
Instalacja nowego komponentu w Delphi 2006............................................................. 349
Nowy komponent do ankiety......................................................................................... 351
Nowy komponent zoony z komponentw standardowych.......................................... 353
Instalacja nowego komponentu w Delphi 2010............................................................. 356

Rozdzia 24. Podstawowe operacje na bazach danych........................................ 357


Przegldanie istniejcych baz danych w formacie .dbf.................................................. 359
Tworzenie wasnej bazy danych .................................................................................... 361
Modyfikowanie bazy ..................................................................................................... 363
Filtrowanie rekordw bazy danych................................................................................ 365
Wyszukiwanie rekordw ............................................................................................... 367
Sortowanie..................................................................................................................... 368
Rysowanie wykresw na podstawie danych z bazy....................................................... 368
Obliczanie redniej ze wszystkich wartoci danego pola............................................... 370
Biblioteka przykad relacyjnej bazy danych ............................................................. 370
Logiczne poczenie 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
Niektre komponenty maj waciwo typu obiektowego Canvas (tzw. ptno). S to
m.in.: TForm, TImage, TPaintBox, TBitmap, TComboBox, TStringGrid, TListBox, TPrinter.
Waciwo Canvas zawiera metody, ktre pozwalaj na rysowanie na tych komponentach za pomoc linii rnych figur, kolorowanie powierzchni oraz wywietlanie tekstu.
Moliwa jest rwnie zmiana koloru i gruboci linii, koloru i wzoru wypenienia, atrybutw czcionki itd.
Rysowanie za pomoc metod obiektu Canvas rnych obiektw moe by przydatne
do zmiany cech niektrych komponentw, np. TStringGrid czy TChart, a take przy
drukowaniu formularza i tekstu.
Rysowanie po obrazie wczytanym do komponentu TImage jest moliwe wtedy, kiedy
jest to obraz w formacie .BMP (bitmapa), poniewa bitmapa ma waciwo Canvas.
Jeli do komponentu TImage wczytany zostanie obraz w formacie .JPG, .GIF lub .PNG,
to naley go przeksztaci na bitmap. W przykadzie 13.14 przedstawiono zastosowanie tej moliwoci.
Wybrane waciwoci klasy TCanvas:
Brush okrela wzr lub kolor wypenienia figur (tzw. pdzel).
Font krj czcionki dla wywietlanych napisw.
Pen okrela cechy krelonych linii: grubo , styl, kolor (tzw. piro).
PenPos okrela wsprzdne kursora graficznego.

150

Aplikacje w Delphi. Przykady

Podstawowymi parametrami wikszoci procedur i funkcji graficznych s wsprzdne punktu na komponencie, po ktrym rysujemy. Lewy grny rg ma wsprzdne
(0, 0), a prawy dolny najczciej (Width, Height). Na rysunku 13.1 przedstawiono wsprzdne okna formularza, ktre wykorzystano w zadaniach z tego rozdziau. Wsprzdne liczone s wzgldem punktu o wsprzdnych (0, 0).
Rysunek 13.1.
Formularz
z zaznaczonymi
wartociami
wsprzdnych
wierzchokw (x, y)

Wywietlanie prostych
figur geometrycznych i tekstu
Proste figury i tekst moemy wywietli na formularzu, korzystajc z procedur i funkcji obiektu typu TCanvas tabela 13.1. Waciwoci takiego obiektu umoliwiaj m.in.
zmian gruboci i stylu rysowanych linii, zmian koloru i wzoru wypenienia figur oraz
wybr kroju i stylu czcionki dla tekstu.
Tabela 13.1. Wybrane metody obiektu TCanvas
Metoda

Znaczenie

Kolor:=Canvas.Pixels[x,y]

Za pomoc funkcji Pixels mona odczyta kolor piksela w miejscu


o wsprzdnych (x, y) zmienna Kolor jest typu TColor.

Canvas.Pixels[10,20]:=clRed

Ta sama funkcja wywoana w ten sposb powoduje wywietlenie


na formularzu czerwonego punktu w miejscu o wsprzdnych
[10, 20] wsprzdn poziom (x) liczymy od lewej do prawej,
a wsprzdn pionow od gry w d. Wsprzdne lewego grnego
wierzchoka to (0, 0).

MoveTo(x,y: integer)

Przenosi kursor graficzny do punktu o wsprzdnych x, y.

LineTo(x,y:integer)

Rysuje lini od biecej pozycji kursora graficznego do punktu


o wsprzdnych x, y.

Rectangle(x1, y1, x2, y2:


Integer)

Procedura rysuje prostokt wypeniony standardowym kolorem


pdzla (Canvas.Brush.Color).

Ellipse(x1, y1, x2, y2:


Integer)

Procedura rysuje elips (lub koo) parametrami s wsprzdne


dwch przeciwlegych wierzchokw prostokta (kwadratu), w ktry
elipsa jest wpisana.

Rozdzia 13. i Grafika w Delphi korzystanie z metod obiektu TCanvas

151

Tabela 13.1. Wybrane metody obiektu TCanvas cig dalszy


Metoda

Znaczenie

Polyline(Points: array of
TPoint)

Procedura rysuje lini aman lub wielokt. Parametrami s


wsprzdne punktw, ktre zostan poczone lini. Jeli
wsprzdne punktu pierwszego i ostatniego s takie same,
to rysowany jest wielokt; 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 picioramienn (patrz pomoc dla polyline).


Polygon(Points: array of
TPoint)

Procedura umoliwia narysowanie wielokta wypenionego


biecym kolorem i stylem pdzla. Przykadowo instrukcje:
Canvas.Brush.Color = clRed;
Canvas.Polygon([Point(10, 10), Point(30, 10),
Point(130, 30), Point(240, 120)]);

spowoduj narysowanie czworokta wypenionego kolorem


czerwonym. Wsprzdne punktu pierwszego i ostatniego nie musz
si pokrywa , poniewa procedura i tak czy na kocu punkt ostatni
z punktem pierwszym.
Refresh

Odwieanie formularza procedura kasuje wszystkie obiekty


rysowane za pomoc metod obiektu Canvas i nieumieszczone
w procedurze obsugi zdarzenia OnPaint.

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

Rysuje obraz okrelony parametrem Graphic w miejscu


o wsprzdnych x i y (przykad 13.14).

Arc(x1,y1, x2,y2, x3,y3,


x4,y4: integer)

Rysuje krzyw eliptyczn w prostokcie o wsprzdnych (x1, y1;


x2, y2) od punktu o wsprzdnych (x3, y3) do punktu (x4, y4).

TextOut(x,y:integer; const
Text:string)

Wywietla tekst od punktu o wsprzdnych x, y lewy grny rg


prostokta zawierajcego tekst; Text to parametr w postaci tekstu
staego w apostrofach, np. 'Ala ma kota', lub zmienna zawierajca
acuch znakw, np. a:='Ala ma kota' (const w nagwku
procedury oznacza podobne wywoanie jak w przypadku wartoci,
lecz umoliwia bardziej efektywne wykorzystanie pamici).

CopyRect(const Dest: TRect;


Canvas: TCanvas; const
Source: TRect)

Kopiuje cz obrazu z jednego ptna na inne ptno.

FillRect(const Rect: TRect)

Rysowanie prostokta wypenionego biecym kolorem i wzorem.

FloodFill(X, Y: Integer;
Color: TColor; FillStyle:
TFillStyle)

Wypenianie, tzw. powodziowe, obiektw.

FrameRect(const Rect:
TRect)

Rysowanie obwodu prostokta.

Pie(X1, Y1, X2, Y2, X3, Y3,


X4, Y4: Integer);

Rysowanie wycinka koa.

RoundRect(X1, Y1, X2, Y2,


X3, Y3: Integer)

Rysowanie prostokta z zaokrglonymi naronikami.

StretchDraw(const Rect:
TRect; Graphic: TGraphic)

Dopasowanie rysunku do obszaru danego prostokta.

152

Aplikacje w Delphi. Przykady

Tabela 13.1. Wybrane metody obiektu TCanvas cig dalszy


Metoda

Znaczenie

TextHeight(const Text:
string): Integer

Funkcja zwraca wysoko tekstu w pikselach.

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

Procedura wywietla napis na komponencie majcym waciwo


TCanvas.

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

Procedura wywietla napis w prostokcie, ktrego wsprzdne


s podane w postaci typu TRect (pierwszy parametr). Procedura
bya wykorzystywana przy formatowaniu komrek tabeli.

TextWidth(const Text:
string): Integer

Funkcja zwraca szeroko tekstu w pikselach.

Oprcz wymienionych metod zdefiniowane s te, ktre korzystaj z tzw. mechanizmw


niskopoziomowych i waciwoci Handle komponentu, np. instrukcja:
kol:=GetNearestColor( Form1.Canvas.Handle, RGB(125,67,22));

spowoduje przypisanie zmiennej kol koloru najbardziej zblionego do podanego


w przypadku gdy biecy tryb graficzny nie ma koloru typu RGB.

Przykad 13.1.
Wywietl na etykiecie wsprzdne prawego dolnego wierzchoka formularza lewy
grny ma wsprzdne (0, 0).

Rozwizanie
Wstaw etykiet TLabel. Wsprzdne prawego dolnego wierzchoka formularza moemy odczyta , korzystajc z waciwoci ClientWidth i ClientHeight formularza. Naley wpisa np. w procedurze obsugi zdarzenia OnClick etykiety instrukcj:
Label1.Caption:=IntToStr(ClientWidth)+','+IntToStr(ClientHeight);

lub uy funkcji GetClientRectangle, ktra zwraca warto typu TRect okrelajc
wsprzdne dwch przeciwlegych wierzchokw formularza:
R:=Form1.GetClientRectangle; //R typu TRect mona zadeklarowa jako zmienn lokaln
Label1.Caption:=Inttostr(R.Right)+','+ Inttostr(R.Bottom);

Przykad 13.2.
Na rodku formularza wywietl punkt koloru czerwonego, przy czym nie moe w tym
miejscu znajdowa si inny obiekt (np. przycisk), bo wywietlony piksel zostanie przez
ten obiekt przesonity.

Rozwizanie
Ponisz instrukcj wpisz np. w procedurze obsugi przycisku:
Canvas.Pixels[ClientWidth div 2, ClientHeight div 2]:=clRed;

Przykad 13.3.
Narysuj linie koloru czerwonego bdce przektnymi formularza rysunek 13.2.

Rozdzia 13. i Grafika w Delphi korzystanie z metod obiektu TCanvas

153

Rysunek 13.2.
Formularz
z przektnymi
pozostajcymi
po zmianie
jego rozmiaru

Rozwizanie
Ponisze instrukcje wpisz np. w procedurze obsugi przycisku.
Pierwsza przektna:
Canvas.Pen.Color:=clRed; //zmiana koloru pira na czerwony
//przesunicie kursora graficznego do punktu o wsprzdnych (0,0)
Canvas.Moveto(0,0);
//narysowanie linii od biecego pooenia kursora graficznego do punktu z prawego
//dolnego wierzchoka
Canvas.Lineto(ClientWidth, ClientHeight);

Narysuj drug przektn.


Aby przektne pozostay na formularzu podczas zmiany jego rozmiaru, naley wykorzysta dwa zdarzenia: OnPaint i OnResize. W procedurach obsugi tych zdarze powinny znale si instrukcje jak w procedurach poniej:
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 przektne
end;

Przykad 13.4.
Wywietl na formularzu punkty rozmieszczone losowo i o losowych kolorach.

Rozwizanie
Wstaw przycisk i w procedurze obsugi zdarzenia OnClick wpisz odpowiednie instrukcje:

154

Aplikacje w Delphi. Przykady


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

Przykad 13.5.
Wywietl na formularzu trzy rne prostokty ramk, prostokt wypeniony kolorem Brush.Color, prostokt z zaokrglonymi brzegami.

Rozwizanie
W procedurze obsugi przycisku wpisz instrukcje jak poniej:
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;
//prostokt wypeniony
Canvas.Rectangle(200,120,300,210);
//prostokt z zaokrglonymi brzegami
Canvas.RoundRect(200,230,300,320,20,20);
end;

Przykad 13.6.
Wywietl na rodku formularza napis Zadania z Delphi w kolorze niebieskim, o rozmiarze czcionki rwnym 36 pkt, bez ta rysunek 13.3.
Rysunek 13.3.
Napis na rodku
formularza

Rozdzia 13. i Grafika w Delphi korzystanie z metod obiektu TCanvas

155

Rozwizanie
W procedurze wykorzystano funkcje zwracajce szeroko i wysoko napisu oraz rozmiary formularza i na tej podstawie obliczono wsprzdne lewego grnego wierzchoka wywietlanego 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;

Przykad 13.7.
Narysuj elips o maksymalnych wymiarach na formularzu.

Rozwizanie
W procedurze obsugi przycisku wpisz instrukcj:
//elipsa wpisana w prostokt o rozmiarach formularza
Canvas.Ellipse(0,0, ClientWidth, ClientHeight);

Przykad 13.8.
Narysuj na formularzu trjkt o zielonym obwodzie i tym wypenieniu.

Rozwizanie
I sposb z wykorzystaniem procedury PolyLine i FloodFill:
procedure TForm1.Button6Click(Sender: TObject);
begin
Canvas.Brush.Color:=clYellow;
Canvas.Pen.Color:=clGreen;
//rysowanie trjkta
Canvas.Polyline([Point(20,20),Point(200,20),Point(110,100),Point(20,20)]);
Canvas.Floodfill(100,25,clgreen,fsborder); //procedura wypenia obiekt narysowany
//kolorem zielonym, wewntrz ktrego znajduje si punkt o wsprzdnych (100,25)
end;

II sposb z wykorzystaniem procedury Polygon, rysujcej wielokt wypeniony biecym kolorem pdzla (Brush). Wsprzdne ostatniego punktu nie musz pokrywa
si ze wsprzdnymi punktu pierwszego wielokta, poniewa pierwszy punkt jest
automatycznie czony z ostatnim:
procedure TForm1.Button1Click(Sender: TObject);
begin
Canvas.Brush.Color:=clYellow;

156

Aplikacje w Delphi. Przykady


Canvas.Pen.Color:=clGreen;
Canvas.Polygon([Point(20,20),Point(200,20),Point(110,100)]);
end;

Przykad 13.9.
Wywietl na formularzu linie rysowane rnymi stylami.

Rozwizanie
Wstaw przycisk TButton. W procedurze obsugi zdarzenia OnClick przycisku wpisz
instrukcje jak w poniszej 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;

Przykad 13.10.
Wywietl na formularzu prostokt malowany rnymi stylami pdzla po kadym klikniciu przycisku.

Rozwizanie
Wstaw przycisk TButton. W procedurze obsugi zdarzenia OnClick przycisku wpisz
instrukcje jak w poniszej procedurze:
//style pdzla
procedure TForm1.Button2Click(Sender: TObject);
begin
Refresh; //kasuje poprzedni prostokt
Canvas.Brush.Color :=RGB(Random(256),Random(256),Random(256)); //kolorem pdzla
//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 trwae
zdarzenie OnPaint
Instrukcje zawierajce metody obiektu Canvas mona umieszcza w procedurach obsugi zdarzenia OnClick dla przyciskw, dla formularza i innych komponentw. Mona rwnie korzysta z innych zdarze komponentw. Jednak tylko niektre z nich
umoliwiaj tzw. trwae rysowanie, czyli rysowanie odnawiane po kadej zmianie,
np. po zmianie rozmiaru okna i przykryciu w ten sposb czci obiektw graficznych.
Dla okna formularza korzysta si w tym celu ze zdarzenia OnPaint. Dla innych komponentw podobne zdarzenia maj inne nazwy. Przedstawiono je w tabeli 13.2.
Tabela 13.2. Zdarzenia umoliwiajce rysowanie trwae
Zdarzenie

Znaczenie

OnPaint

Zdarzenie dla formularza generowane kadorazowo, gdy zawarto okna formularza


wymaga odwieenia. Sytuacja taka ma miejsce przy tworzeniu okna formularza,
a take wtedy, gdy np. jedno okno zostanie przesonite innym oknem lub gdy
nastpuje zmiana jego rozmiaru.

PaintBoxPaint

Odpowiednik zdarzenia OnPaint dla komponentu PaintBox.

OnDrawCell

Zdarzenie wystpujce dla komponentu typu TDrawGrid i TStringGrid umoliwia


trwae rysowanie obiektw i wywietlanie tekstu w komrkach.

OnAfterDraw

Zdarzenie dla komponentu typu TChart, odpowiednik zdarzenia OnPaint.

Rysowanie po komponencie typu TImage nie wymaga odnawiania. Jest trwae.

Przykad 13.11.
Narysuj na formularzu prostokt koloru czerwonego, tak aby nie kasowa si po przykryciu okna formularza innym oknem. Prostokt powinien rysowa si po klikniciu
przycisku i kasowa po klikniciu drugiego przycisku rysunek 13.4.

Rozwizanie
Wstaw dwa przyciski TButton.
Gdyby instrukcj rysujc prostokt umieci w procedurze obsugi zdarzenia OnPaint,
to prostokt byby na formularzu bezporednio po uruchomieniu programu. Dlatego procedur obsugi tego zdarzenia z now instrukcj naley wywoa za pomoc przycisku.

158

Aplikacje w Delphi. Przykady

Rysunek 13.4.
Rysowanie
i kasowanie
prostokta
na formularzu

Szkielet procedury FormPaint mona uzyska , klikajc dwukrotnie w oknie Inspektora Obiektw z prawej strony zdarzenia OnPaint. Pniej trzeba jednak wykasowa
w Inspektorze Obiektw t nazw, aby instrukcje w procedurze obsugi zdarzenia
OnPaint nie wykonyway si bezporednio po uruchomieniu programu.
W przykadzie pokazano, jak wykona takie zadanie.
//procedura obsugi zdarzenia OnPaint dla formularza rysuje prostokt,
// wywoywana programowo moe mie inna nazw
procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.Rectangle(100,100,ClientWidth-100,ClientHeight-100);
end;
//procedura rysuje prostokt koloru czerwonego i przypisuje procedurze obsugi
//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 obsugi zdarzenia procedury rysujcej
//prostokt
end;
// odczenie procedury FormPaint od zdarzenia OnPaint wykasowanie prostokta
procedure TForm1.Button2Click(Sender: TObject);
begin
OnPaint:=nil; //ta instrukcja spowoduje, e rysunek prostokta nie bdzie odnawiany
Refresh;
//procedura ta kasuje prostokt
end;

Przykad 13.12.
Wypenij to formularza bitmap, np. wzorek.bmp.

Rozwizanie
W procedurze obsugi zdarzenia OnPaint dla formularza wpisz instrukcje jak w procedurze poniej.

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 klikniciu w formularz) dopisz instrukcje:


Bitmap:=TBitmap.Create;
Bitmap.LoadFromFile(wzorek.bmp');

Obraz, ktry jest powielany jak to formularza, moe mie te inny format, np. .JPG.
Naley wtedy zamieni format .JPG na .BMP (bitmapa ma waciwo Canvas). Wtedy tre metody FormCreate powinna by nastpujca:
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 prawidowo dziaa, naley jeszcze w sekcji Uses zadeklarowa modu
JPEG zawierajcy definicj klasy TJPEGImage oraz ExtCtrls zawierajcy definicj klasy
TImage. Przykad 13.12A na pycie prezentuje sposb uzyskania ta z obrazu typu .JPG.

Rysowanie mysz po formularzu


Przykad 13.13.
Napisz program umoliwiajcy rysowanie po formularzu po naciniciu lewego przycisku myszy.

160

Aplikacje w Delphi. Przykady

Rozwizanie
Wykorzystano zdarzenie OnMouseDown wystpujce po naciniciu przycisku myszy na
komponencie i zdarzenie OnMouseMove wystpujce przy przesuwaniu kursora myszy
nad komponentem.
Wpisz instrukcje jak w poniszych procedurach obsugi 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 wcinity
Canvas.LineTo(x,y);
end;

Rysowanie mysz
po komponencie TImage
Przykad 13.14.
Napisz program umoliwiajcy wywietlenie w losowych miejscach biaych pikseli
na obrazie po klikniciu przycisku i biaych kek, rwnie losowo, po klikniciu drugiego przycisku.

Rozwizanie
Na formularzu wstaw komponent TScrollBox i wewntrz niego komponent TImage
z zakadki Additional tak, aby lewe grne wierzchoki obu komponentw pokryway
si. Dla komponentu TImage ustaw waciwo Autosize na true i za pomoc waciwoci Picture zaaduj do niego obraz typu .BMP (nie .JPG). Dodaj do formularza jeszcze
dwa przyciski TButton.
W procedurze obsugi zdarzenia OnClick dla przycisku Button1 wpisz instrukcje jak
w procedurze poniej.
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 kek:

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 mona wykona rwnie dla obrazw typu .JPG oraz od wersji Delphi 2009
dla obrazw .GIF i .PNG. Naley jednak wczeniej wykona konwersj do formatu
.BMP, poniewa obiekt tego typu ma waciwo Canvas. Sposb konwersji do typu
.BMP pokazano w przykadach 14.13 oraz 14.7 i 14.8.

Przykad 13.15.
Napisz program umoliwiajcy po klikniciu przycisku wywietlenie obrazu przedstawiajcego np. map obiektw (domkw). Obiekty rysowane s na mapie po podaniu wsprzdnych i klikniciu przycisku lub po klikniciu na mapie rysunek 13.5.
Rysunek 13.5.
Rysowanie obiektw
na obrazie

Rozwizanie
Na formularzu wstaw przycisk TButton, dwa komponenty TEdit. Komponent TScrollBox
i w jego wntrzu TImage. Do komponentu TImage zaaduj obraz.
Obiekt (domek) zostanie narysowany za pomoc nastpujcej 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. Przykady

Parametry x,y okrelaj wsprzdne lewego wierzchoka trjkta (daszku).


Nagwek procedury naley zadeklarowa w sekcji public definicji klasy TForm1 w sposb jak poniej:
procedure Rysuj_domek (x,y:integer);

A tre procedury Rysuj_domek wpisa w sekcji implementation.


W procedurze obsugi zdarzenia OnClick dla przycisku wpisz instrukcje jak w procedurze poniej.
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 umoliwia zabezpieczenie programu przed bdami. Jeli w okienku Edit nie bdzie liczby cakowitej, to nie wystapi bd, tylko domylnie zmiennej x
lub y przypisana zostanie warto 10.
Do rysowania obiektw na obrazie po klikniciu przycisku mona wykorzysta zdarzenie OnMouseDown dla komponentu TImage. Procedura obsugi tego zdarzenia zwraca
wsprzdne punktu kliknicia liczone wzgldem lewego grnego wierzchoka (0, 0).
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Rysuj_domek(X,Y);
end;

Przykady animacji w Delphi


W programowaniu stosuje si rne techniki animacji. Jednym z prostszych sposobw
jest rysowanie obiektu, nastpnie kasowanie i ponowne rysowanie w innym miejscu.
Wad tego rozwizania jest trudno w uzyskaniu pynnoci ruchu obiektw.
Inna metoda polega na zastosowaniu dwch obszarw, na ktrych rysujemy. W danej
chwili widoczny jest tylko jeden z nich. Drugi jest wwczas modyfikowany i wywietlany w miejsce pierwszego dopiero po zakoczeniu operacji.
W zadaniach przykadowych zastosowano pierwszy sposb animacji. Udao si uzyska odpowiedni pynno ruchu obiektw, dlatego nie wykorzystano sposobu z uyciem dwch obszarw rysowania.

Rozdzia 13. i Grafika w Delphi korzystanie z metod obiektu TCanvas

163

Przykad 13.16.
Wykonaj nastpujc animacj: kko o rednicy 30 pkt przesuwa si od lewego do
prawego brzegu formularza i z powrotem.

Rozwizanie
W procedurze obsugi 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 pira
Form1.Canvas.Ellipse(x1,y1,x1+30,y1+30);
//rysowanie kka 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 treci procedury wcza opcj kompilatora umoliwiajc zmian wartoci staych typowanych (ang. Assignable typed constans). Opcja ta powinna by
standardowo wczona, ale jeli nie mamy pewnoci, lepiej doda dyrektyw {$J+}.

Przykad 13.17.
Wykonaj animacj tak jak w zadaniu poprzednim, gdy formularz jest wypeniony wzorem rysunek 13.6.
Rysunek 13.6.
Animacja z tem

Rozwizanie
Na formularzu umie przycisk TButton i komponent TTimer. Waciwo Interval
ustaw na 200 ms, a waciwo Enabled na false. Tre procedur obsugi przycisku
i przerwania od Timera przedstawiono poniej.

164

Aplikacje w Delphi. Przykady

Zadeklaruj zmienn globaln:


var Bitmap,Bitmap1: TBitmap;
//zaadowanie obrazu .BMP do zmiennej Bitmap
procedure TForm1.FormCreate(Sender: TObject);
begin
//W procedurze FormCreate naley przeczyta bitmap z pliku.
Bitmap:=TBitmap.Create;
Bitmap.LoadFromFile('c:\windows\kawa.bmp');
end;
// procedura pobiera prostoktny 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 prostoktnego wycinka formularza - obszaru, po ktrym bdzie si
//poruszao kko
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 Obiektw zablokuj Timer2
end;
{$J+}

//procedura obsugi 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
//jeli zwikszymy rozmiar formularza, to trzeba w procedurze obsugi zdarzenia
//OnResize jeszcze raz pobra bitmap
Canvas.Draw(0,y1,Bitmap1); //wywietlenie wczeniej pobranego paska formularza,
//kasowanie obiektu
//rysowanie kka
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;
//wypenianie 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;

Przykad 13.18.
Wykonaj animacj polegajc na przemieszczaniu si kulki w losowych kierunkach
w prostoktnym obszarze o wymiarach (0, 0, 200, 200). Wykorzystaj komponent
TPaintBox z zakadki System rysunek 13.7.
Rysunek 13.7.
Animacja
niebieskiej kulki

Rozwizanie
Na formularzu umie komponent TPaintBox i TTimer. Komponent TPaintBox jest stosowany do wywietlania (krelenia) grafiki, ktra ma by ograniczona do obszaru prostoktnego. Korzystajc z komponentu TPaintBox, programista nie musi kontrolowa ,
czy obszar ten nie zosta przekroczony jeli narysowany obiekt nie mieci si wewntrz komponentu TPaintBox, to zostaje obcity. Dodatkowo zawarty w nim rysunek
moemy przesuwa po formularzu, zmieniajc waciwoci Left i Top tego komponentu. Procedura przedstawiona poniej dziaa poprawnie z komponentem TPaintBox i bez
niego wtedy kulka przesuwa si po formularzu.
W zadaniu mona rwnie doda przycisk, ktry bdzie wcza zegar (animacj) po
wpisaniu w procedurze obsugi instrukcji Timer1.Enabled:=true; (wczeniej naley
zegar zablokowa w okienku Inspektora Obiektw 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. Przykady


begin
with PaintBox1.Canvas do
begin
//czyszczenie prostokta
Brush.Color:=clWhite;
Rectangle(0,0,200,200);
//obliczenie wsprzdnych
x:=x+krokx;
y:=y+kroky;
//rysowanie koa w kwadracie o boku
// rwnym 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;

Korzystajc z Inspektora Obiektw, waciwoci Interval komponentu Timer1 przypisz warto 50.

Przykad 13.19.
Umie na formularzu komponent typu TButton i TShape. Zadaniem przycisku jest wywietlanie po kadym klikniciu na przemian kka lub prostokta.
Po naciniciu klawiszy strzaek komponent Shape przesuwa si zgodnie z kierunkiem
strzaki rysunek 13.8.
Rysunek 13.8.
Przesuwanie koa
za pomoc
klawiszy strzaek

Aby klawisze strzaek nie byy przechwytywane przez komponent Button1, naley
ustawi dla niego waciwo TabStop na false.

Rozdzia 13. i Grafika w Delphi korzystanie z metod obiektu TCanvas

167

Rozwizanie
Wstaw komponenty TButton i TShape. Dla komponentu TShape ustaw waciwo Shape
na stCircle i waciwo Brush\Color na clYellow. W procedurze obsugi kliknicia
przycisku wpisz instrukcje jak poniej:
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 strzaek wykorzystaj zdarzenie OnKeyDown dla formularza. Tre procedury obsugi tego zdarzenia przedstawiono poniej:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
begin
case Key of
vk_Right: Shape1.Left:=Shape1.Left+10; //strzaka w prawo
vk_Left:
Shape1.Left:=Shape1.Left-10; //strzaka w lewo
vk_Up:
Shape1.Top:=Shape1.Top-10; //strzaka w gr
vk_Down:Shape1.Top:=Shape1.Top+10; //strzaka w d
end;
end;

Shift: TShiftState);

W przykadzie wykorzystano kody klawiszy wirtualnych. Par przykadowych kodw


podano w tabeli 13.3.
Tabela 13.3. Wybrane klawisze i ich kody
Kod klawisza

Klawisz

vk_F1, vk_F2, vkF24

F1, F2, , F24

vk_LBUTTON, vk_RBUTTON

Lewy przycisk myszy, prawy przycisk myszy

vk_INSERT

Ins

vk_DELETE

Del

vk_ESCAPE

Esc

Vk_BACK

Backspace

Vk_TAB

Tab

Wszystkie kody mona znale w Systemie Pomocy Delphi, wystarczy umieci kursor na sowie vk_Left i nacisn F1 lub wyszuka haso Virtual Key Codes.

You might also like