Delphi jest narzędziem do programowania obiektowego w systemie Windows, opartym na języku Object Pascal, którego składnia jest zgodna ze składnią języka Turbo Pascal. Środowisko Delphi IDE (ang. Integrated Development Environment) umożliwia zaprojektowanie w prosty sposób interfejsu użytkownika, generując część kodu programu automatycznie.
Istnieje wiele książek poświęconych Delphi, ta jednak różni się od pozostałych. Przedstawia ona przykłady kodu źródłowego pokazującego, jak w praktyce używać Delphi. Jest więc uzupełnieniem książek omawiających sam język Object Pascal i prezentuje wykorzystanie wiedzy teoretycznej w praktyce programistycznej. Przykładowym tekstom programów towarzyszą komentarze autora wyjaśniające dlaczego użyto takiego, a nie innego rozwiązania.
Zagadnienia omówione w tej książce obejmują szeroki zakres tematyczny:
* Projektowanie interfejsu użytkownika, tworzenie menu
* Formatowanie tekstu i liczb
* Tworzenie okien dialogowych, list wyboru
* Pisanie prostego edytora tekstu
* Prezentacja danych w tabelach i za pomocą wykresów
* Pisanie aplikacji graficznych
* Korzystanie z zasobów dyskowych i drukarek
* Posługiwanie się wieloma komponentami tego samego typu
* Dynamiczne tworzenie komponentów, tworzenie nowych klas komponentów
* Pisanie aplikacji opartych na bazach danych
Nie odkrywaj Ameryki: sprawdź najpierw, jak inni rozwiązali problemy, które napotkałeś programując w Delphi. Ta książka zaoszczędzi Twój czas i pozwoli pisać programy znacznie efektywniej, a przy okazji sprawi, że poznasz wiele nowych możliwości wspaniałego narzędzia jakim jest Delphi.
Praktyczne rozwiązania konkretnych problemów:
* Przykłady kodu źródłowego
* Odautorskie komentarze do przykładów
* Szeroki zakres zagadnień: od podstawowych do zaawansowanych
* Przykład kompletnej aplikacji bazodanowej
* Kod źródłowy zgodny z Delphi 6 i 7
1. IDZ DO
PRZYK£ADOWY ROZDZIA£
SPIS TRE CI Aplikacje w Delphi.
Przyk³ady
KATALOG KSI¥¯EK
Autor: Teresa Pamula
KATALOG ONLINE ISBN: 83-7361-212-2
Format: B5, stron: 260
ZAMÓW DRUKOWANY KATALOG
TWÓJ KOSZYK
DODAJ DO KOSZYKA Delphi jest narzêdziem do programowania obiektowego w systemie Windows, opartym
na jêzyku Object Pascal, którego sk³adnia jest zgodna ze sk³adni¹ jêzyka Turbo Pascal.
rodowisko Delphi IDE (ang. Integrated Development Environment) umo¿liwia
CENNIK I INFORMACJE zaprojektowanie w prosty sposób interfejsu u¿ytkownika, generuj¹c czê æ kodu
programu automatycznie.
ZAMÓW INFORMACJE Istnieje wiele ksi¹¿ek po wiêconych Delphi, ta jednak ró¿ni siê od pozosta³ych.
O NOWO CIACH Przedstawia ona przyk³ady kodu ród³owego pokazuj¹cego, jak w praktyce u¿ywaæ
Delphi. Jest wiêc uzupe³nieniem ksi¹¿ek omawiaj¹cych sam jêzyk Object Pascal
ZAMÓW CENNIK i prezentuje wykorzystanie wiedzy teoretycznej w praktyce programistycznej.
Przyk³adowym tekstom programów towarzysz¹ komentarze autora wyja niaj¹ce
dlaczego u¿yto takiego, a nie innego rozwi¹zania.
CZYTELNIA Zagadnienia omówione w tej ksi¹¿ce obejmuj¹ szeroki zakres tematyczny:
• Projektowanie interfejsu u¿ytkownika, tworzenie menu
FRAGMENTY KSI¥¯EK ONLINE • Formatowanie tekstu i liczb
• Tworzenie okien dialogowych, list wyboru
• Pisanie prostego edytora tekstu
• Prezentacja danych w tabelach i za pomoc¹ wykresów
• Pisanie aplikacji graficznych
• Korzystanie z zasobów dyskowych i drukarek
• Pos³ugiwanie siê wieloma komponentami tego samego typu
• Dynamiczne tworzenie komponentów, tworzenie nowych klas komponentów
• Pisanie aplikacji opartych na bazach danych
Nie odkrywaj Ameryki: sprawd najpierw, jak inni rozwi¹zali problemy, które napotka³e
programuj¹c w Delphi. Ta ksi¹¿ka zaoszczêdzi Twój czas i pozwoli pisaæ programy
Wydawnictwo Helion znacznie efektywniej a przy okazji sprawi, ¿e poznasz wiele nowych mo¿liwo ci
ul. Chopina 6 wspania³ego narzêdzia jakim jest Delphi.
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
2. Spis treści
Wprowadzenie ................................................................................... 7
Rozdział 1. Projektowanie aplikacji w Delphi ........................................................ 9
Środowisko zintegrowane — Delphi IDE ............................................................................9
Elementy projektu aplikacji ..............................................................................................10
Standardowe właściwości komponentów..........................................................................13
Standardowe zdarzenia......................................................................................................14
Rozdział 2. Podstawowe składniki aplikacji........................................................ 17
Okno aplikacji ...................................................................................................................17
Ikona aplikacji ...................................................................................................................22
Wyświetlanie napisów.......................................................................................................22
Rodzaje przycisków, podobieństwa i ró nice ...................................................................27
Etykiety i przyciski............................................................................................................30
Rozdział 3. Menu główne i podręczne................................................................. 35
Wielopoziomowe menu główne........................................................................................35
Przyporządkowanie poleceń opcjom menu.......................................................................37
Menu podręczne ................................................................................................................40
„Polskie litery” w nazwach poleceń menu........................................................................41
Rozdział 4. Wprowadzanie danych, formatowanie i wyświetlanie na ekranie ........ 43
Liczby — funkcje konwersji i formatowanie liczb. Przecinek czy kropka?.....................44
Daty — funkcje konwersji i formatowanie daty i czasu ...................................................46
Systemowe separatory liczb i daty ....................................................................................49
Wprowadzanie danych za pomocą okienek edycyjnych TEdit.........................................49
Wprowadzanie danych za pomocą okienek InputBox i InputQuery.................................54
Sposoby zabezpieczenia programu przed błędami przy wprowadzaniu danych ..............55
Obliczenia. Wybrane funkcje modułu Math .....................................................................61
Rozdział 5. Okienka komunikatów ..................................................................... 65
Wyświetlanie komunikatów z napisami stałymi w języku systemowym
— MessageBox...............................................................................................................66
Wyświetlanie komunikatów za pomocą funkcji ShowMessage, MessageDlg,
MessageDlgPos...............................................................................................................67
3. 4 Aplikacje w Delphi. Przykłady
Rozdział 6. Okienka dialogowe z karty Dialogs ................................................... 73
Rozdział 7. Listy wyboru — TListBox i TComboBox............................................. 79
Dodawanie elementów do listy .........................................................................................81
Wybieranie elementów z listy ...........................................................................................82
Sposoby wyświetlania elementów listy.............................................................................84
Blokowanie edycji dla listy TComboBox .........................................................................86
Czytanie i zapisywanie zawartości listy do pliku dyskowego ..........................................87
Rozdział 8. Prosty edytor — komponent TMemo................................................. 89
Kopiowanie, wycinanie i wklejanie tekstu........................................................................90
Czytanie i zapisywanie tekstu do pliku .............................................................................91
Wyświetlanie informacji o poło eniu kursora ..................................................................92
Automatyczne kasowanie linii nie zawierających liczb lub wybranych znaków .............93
Rozdział 9. Grupowanie komponentów................................................................. 95
Pola opcji i pola wyboru....................................................................................................95
Komponenty grupujące .....................................................................................................96
Ramka TBevel.................................................................................................................100
Rozdział 10. Tabelaryzacja danych — komponent TStringGrid ............................. 101
Ustalanie podstawowych parametrów tabeli...................................................................104
Wypełnianie tabeli danymi..............................................................................................106
Wybieranie komórek tabeli .............................................................................................108
Filtrowanie wprowadzanych danych...............................................................................110
Niestandardowe przejście do kolejnej komórki — klawisz Enter ..................................112
Zmiana koloru i wyrównania tekstu w wybranych komórkach ......................................114
Wyświetlanie tekstu w komórce w dwóch wierszach.....................................................117
Totolotek .........................................................................................................................119
Tabela i lista ....................................................................................................................121
Rozdział 11. Graficzna prezentacja danych — komponent TChart ........................ 123
Rysowanie wykresów z wykorzystaniem komponentu TChart ......................................123
Opis wybranych właściwości, metod i zdarzeń komponentów TChart i TChartSeries ..125
Wykresy kołowe..............................................................................................................128
Wykresy kolumnowe.......................................................................................................131
Wykresy funkcji matematycznych ..................................................................................134
Formatowanie i skalowanie wykresów ...........................................................................138
Posługiwanie się wieloma wykresami.............................................................................142
Rozdział 12. Odmierzanie czasu — komponent TTimer........................................ 147
Rozdział 13. Grafika w Delphi — korzystanie z metod obiektu TCanvas............... 149
Wyświetlanie prostych figur geometrycznych i tekstu ...................................................150
Rysowanie „trwałe” — zdarzenie OnPaint .....................................................................156
Przykłady animacji w Delphi ..........................................................................................158
Rozdział 14. Wyświetlanie obrazów — komponent TImage.................................. 163
Rysowanie po obrazie .....................................................................................................165
Binaryzacja obrazu..........................................................................................................166
Rozdział 15. Współpraca programu z plikami dyskowymi .................................... 169
Wybór foldera plików .....................................................................................................169
Wyszukiwanie plików .....................................................................................................171
Zapisywanie danych z okienek TEdit i tabeli do pliku tekstowego................................174
Czytanie danych z pliku tekstowego...............................................................................175
Zapisywanie i odczytywanie danych z tabeli do pliku *.csv ..........................................177
4. Spis treści 5
Rozdział 16. Drukowanie w Delphi ..................................................................... 179
Drukowanie napisów i tekstu z okienek edycyjnych ......................................................180
Drukowanie tabeli i wykresu...........................................................................................181
Drukowanie obrazu .........................................................................................................184
Rozdział 17. Programy z wieloma oknami ........................................................... 187
Wymiana danych i metod między modułami..................................................................187
Program z hasłem ............................................................................................................190
Wyświetlanie tytułu programu ........................................................................................192
Rozdział 18. Posługiwanie się wieloma komponentami tego samego typu.
Operatory Is i As............................................................................ 195
Wprowadzanie i kasowanie danych dla kilku okienek edycyjnych................................196
Przypisywanie grupie komponentów tej samej procedury obsługi zdarzenia.................197
Wyświetlanie informacji o numerach kontrolek, ich nazwach i klasach ........................200
Rozdział 19. Tablice dynamiczne........................................................................ 203
Rozdział 20. Dynamiczne tworzenie komponentów.............................................. 207
Wyświetlanie kontrolek i przypisywanie zdarzeniom procedur obsługi ........................208
Przykłady dynamicznego tworzenia wykresów ..............................................................212
Tworzenie menu w czasie działania programu ...............................................................215
Rozdział 21. Definiowanie nowych klas komponentów ........................................ 219
Klasa tabel z wyrównaniem zawartości komórek do prawej strony ...............................219
Klasa okienek z właściwością Alignment.......................................................................221
Instalowanie nowych komponentów na palecie komponentów......................................223
Nowy komponent do ankiety ..........................................................................................227
Rozdział 22. Podstawowe operacje na bazach danych ........................................ 231
Przeglądanie istniejących baz danych w formacie .dbf...................................................233
Tworzenie własnej bazy danych .....................................................................................235
Modyfikowanie bazy.......................................................................................................237
Filtrowanie rekordów bazy danych .................................................................................238
Wyszukiwanie rekordów.................................................................................................240
Sortowanie.......................................................................................................................241
Rysowanie wykresów na podstawie danych z bazy........................................................242
Obliczanie średniej ze wszystkich wartości danego pola................................................243
Biblioteka — przykład relacyjnej bazy danych ..............................................................244
Literatura ...................................................................................... 249
Skorowidz...................................................................................... 251
5. Rozdział 13.
Grafika w Delphi
— korzystanie z metod
obiektu TCanvas
Niektóre komponenty posiadają właściwość typu obiektowego 6%CPXCU (tzw. płótno).
Są to m.in.: 6(QTO, 6+OCIG, 62CKPV$QZ, 6$KVOCR, 6%QODQ$QZ, 65VTKPI)TKF, 6.KUV$QZ,
62TKPVGT.
Właściwość %CPXCU zawiera metody, które umo liwiają rysowanie na tych kompo-
nentach 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łnie-
nia, atrybutów czcionki itd.
Rysowanie za pomocą metod obiektu %CPXCU ró nych obiektów mo e być przydatne
do zmiany cech niektórych komponentów, np. 65VTKPI)TKF czy 6%JCTV, a tak e przy
drukowaniu formularza i tekstu.
Wybrane właściwości obiektu 6%CPXCU:
$TWUJ — określa wzór lub kolor wypełnienia figur (tzw. pędzel);
(QPV — krój czcionki dla wyświetlanych napisów;
2GP — określa cechy kreślonych linii: grubość, styl, kolor (tzw. pióro);
2GP2QU — określa współrzędne kursora graficznego.
Podstawowymi parametrami większości procedur i funkcji graficznych są współrzędne
punktu na komponencie, po którym rysujemy. Lewy górny róg ma współrzędne (0, 0),
a prawy dolny najczęściej (9KFVJ, *GKIJV). Na rysunku 13.1 przedstawiono współrzędne
okna formularza, które wykorzystano w zadaniach tego rozdziału.
6. 150 Aplikacje w Delphi. Przykłady
Rysunek 13.1.
Formularz
z zaznaczonymi
wartościami
współrzędnych
wierzchołków (x, y)
Wyświetlanie prostych
figur geometrycznych i tekstu
Proste figury i tekst mo emy wyświetlić na formularzu, korzystając z procedur i funkcji
obiektu typu 6%CPXCU — tabela 13.1. Właściwości takiego obiektu umo liwiają m. in.
zmianę grubości i stylu rysowanych linii, zmianę koloru i wzoru wypełnienia figur oraz
wybór kroju i stylu czcionki dla tekstu.
Tabela 13.1. Wybrane metody obiektu TCanvas
Metoda Znaczenie
-QNQT%CPXCU2KZGNU=Z[? Za pomocą funkcji 2KZGNU mo na odczytać kolor piksela
w miejscu o współrzędnych (x, y) — zmienna -QNQT jest typu
6%QNQT.
%CPXCU2KZGNU=?EN4GF Ta sama funkcja wywołana w ten sposób powoduje
wyświetlenie na formularzu czerwonego punktu w miejscu
o współrzędnych [10, 20] — współrzędną poziomą (x) liczymy
od lewej do prawej, a współrzędną pionową od góry w dół.
Współrzędne lewego górnego wierzchołka to (0, 0).
/QXG6Q
Z[ KPVGIGT Przenosi kursor graficzny do punktu o współrzędnych x, y.
.KPG6Q
Z[KPVGIGT Rysuje linię od bie ącej pozycji kursora graficznego do punktu
o współrzędnych x, y.
4GEVCPING
Z [ Z [ +PVGIGT Procedura rysuje prostokąt wypełniony standardowym
kolorem pędzla (%CPXCU$TWUJ%QNQT).
'NNKRUG
Z [ Z [ +PVGIGT Procedura rysuje elipsę (lub koło) — parametrami są
współrzędne dwóch przeciwległych wierzchołków prostokąta
(kwadratu), w który elipsa jest wpisana.
2QN[NKPG
2QKPVU CTTC[ QH62QKPV Procedura rysuje linię łamaną lub wielokąt. Parametrami są
współrzędne punktów, które zostaną połączone linią. Jeśli
współrzędne punktu pierwszego i ostatniego są takie same,
to rysowany jest wielokąt; w przeciwnym razie linia łamana,
np. procedura:
2QN[NKPG
=2QKPV
2QKPV
2QKPV
2QKPV
2QKPV
2QKPV
?
narysuje gwiazdę pięcioramienną (patrz pomoc dla polyline).
7. Rozdział 13. ♦ Grafika w Delphi — korzystanie z metod obiektu TCanvas 151
Tabela 13.1. Wybrane metody obiektu TCanvas (ciąg dalszy)
Metoda Znaczenie
2QN[IQP
2QKPVU CTTC[ QH62QKPV Procedura umo liwia narysowanie wielokąta wypełnionego
bie ącym kolorem i stylem pędzla. Przykładowo, instrukcje:
%CPXCU$TWUJ%QNQT EN4GF
%CPXCU2QN[IQP
=2QKPV
2QKPV
å2QKPV
2QKPV
?
spowodują narysowanie czworokąta wypełnionego kolorem
czerwonym. Współrzędne punktu pierwszego i ostatniego nie
muszą się pokrywać, poniewa procedura i tak łączy na końcu
punkt ostatni z punktem pierwszym.
4GHTGUJ Odświe anie formularza — procedura kasuje wszystkie obiekty
rysowane za pomocą metod obiektu %CPXCU i nieumieszczone
w procedurze obsługi zdarzenia 1P2CKPV.
TCY
Z [KPVGIGT Rysuje obraz określony parametrem )TCRJKE w miejscu
)TCRJKE6)TCRJKE o współrzędnych x i y (przykład 13.14).
#TE
Z[ Z[ Z[ Z[ Rysuje krzywą eliptyczną w prostokącie o współrzędnych (x1, y1;
KPVGIGT x2, y2), od punktu o współrzędnych (x3, y3) do punktu (x4, y4).
6GZV1WV
Z[KPVGIGT EQPUV Wyświetla tekst od punktu o współrzędnych x, y — lewy górny
6GZVUVTKPI róg prostokąta zawierającego tekst; 6GZV to parametr w postaci
tekstu stałego w apostrofach, np. #NC OC MQVC , lub zmienna
zawierająca łańcuch znaków, np. C #NC OC MQVC (EQPUV
w nagłówku procedury oznacza podobne wywołanie jak
w przypadku wartości, lecz umo liwia bardziej efektywne
wykorzystanie pamięci).
%QR[4GEV
EQPUV GUV 64GEV Kopiuje część obrazu z jednego płótna na inne płótno.
%CPXCU 6%CPXCU EQPUV 5QWTEG
64GEV
(KNN4GEV
EQPUV 4GEV 64GEV Rysowanie prostokąta wypełnionego bie ącym kolorem i wzorem.
(NQQF(KNN
: ; +PVGIGT %QNQT Wypełnianie tzw. powodziowe obiektów.
6%QNQT (KNN5V[NG 6(KNN5V[NG
(TCOG4GEV
EQPUV 4GEV 64GEV Rysowanie obwodu prostokąta.
2KG
: ; : ; : ; : Rysowanie wycinka koła.
; +PVGIGT
4QWPF4GEV
: ; : ; : Rysowanie prostokąta z zaokrąglonymi naro nikami.
; +PVGIGT
5VTGVEJTCY
EQPUV 4GEV 64GEV Dopasowanie rysunku do obszaru danego prostokąta.
)TCRJKE 6)TCRJKE
6GZV*GKIJV
EQPUV 6GZV UVTKPI Funkcja zwraca wysokość tekstu w pikselach.
+PVGIGT
6GZV1WV
: ; +PVGIGT EQPUV Procedura wyświetla napis na komponencie posiadającym
6GZV UVTKPI właściwość 6%CPXCU.
6GZV4GEV
4GEV 64GEV : ; Procedura wyświetla napis w prostokącie, którego współrzędne
+PVGIGT EQPUV 6GZV UVTKPI są podane w postaci typu 64GEV (pierwszy parametr). Procedura
była wykorzystywana przy formatowaniu komórek tabeli.
6GZV9KFVJ
EQPUV 6GZV UVTKPI Funkcja zwraca szerokość tekstu w pikselach.
+PVGIGT
8. 152 Aplikacje w Delphi. Przykłady
Oprócz wymienionych metod zdefiniowane są metody, które korzystają z tzw. mecha-
nizmów niskopoziomowych i właściwości *CPFNG komponentu, np. instrukcja:
MQN)GV0GCTGUV%QNQT
(QTO%CPXCU*CPFNG 4)$
spowoduje przypisanie zmiennej MQN koloru najbardziej zbli onego do podanego —
w przypadku, gdy bie ący tryb graficzny nie posiada koloru typu RGB.
Przykład 13.1.
Wyświetl na etykiecie współrzędne prawego dolnego wierzchołka formularza — lewy
górny ma współrzędne (0, 0).
Rozwiązanie
Wstaw etykietę 6.CDGN. Współrzędne prawego dolnego wierzchołka formularza mo emy
odczytać, korzystając z właściwości %NKGPV9KFVJ i %NKGPV*GKIJV formularza. Nale y
wpisać np. w procedurze obsługi zdarzenia 1P%NKEM etykiety instrukcję:
.CDGN%CRVKQP+PV6Q5VT
%NKGPV9KFVJ
+PV6Q5VT
%NKGPV*GKIJV
lub u yć funkcji )GV%NKGPV4GEVCPING, która zwraca wartość typu 64GEV określającą
współrzędne dwóch przeciwległych wierzchołków formularza:
4(QTO)GV%NKGPV4GEVCPING 4 V[RW 64GEV OQ PC CFGMNCTQYCè LCMQ OKGPPæ NQMCNPæ
.CDGN%CRVKQP+PVVQUVT
44KIJV
+PVVQUVT
4$QVVQO
Przykład 13.2.
Na środku formularza wyświetl punkt koloru czerwonego, przy czym nie mo e w tym
miejscu znajdować się inny obiekt (np. przycisk), bo wyświetlony piksel zostanie przez
ten obiekt przesłonięty.
Rozwiązanie
Poni szą instrukcję wpisz np. w procedurze obsługi przycisku:
%CPXCU2KZGNU=%NKGPV9KFVJ FKX %NKGPV*GKIJV FKX ?EN4GF
Przykład 13.3.
Narysuj linie koloru czerwonego będące przekątnymi formularza — rysunek 13.2.
Rysunek 13.2.
Formularz
z przekątnymi
pozostającymi
po zmianie
jego rozmiaru
9. Rozdział 13. ♦ Grafika w Delphi — korzystanie z metod obiektu TCanvas 153
Rozwiązanie
Poni sze instrukcje wpisz np. w procedurze obsługi przycisku.
Pierwsza przekątna:
%CPXCU2GP%QNQTEN4GF OKCPC MQNQTW RKÎTC PC EGTYQP[
RTGUWPKúEKG MWTUQTC ITCHKEPGIQ FQ RWPMVW Q YURÎ TúFP[EJ
%CPXCU/QXGVQ
PCT[UQYCPKG NKPKK QF DKG æEGIQ RQ Q GPKC MWTUQTC ITCHKEPGIQ FQ RWPMVW RTCYGIQ
åFQNPGIQ YKGTEJQ MC
%CPXCU.KPGVQ
%NKGPV9KFVJ %NKGPV*GKIJV
Narysuj drugą przekątną.
Aby przekątne pozostały na formularzu podczas zmiany jego rozmiaru, nale y wykorzy-
stać dwa zdarzenia: 1P2CKPV i 1P4GUKG. W procedurach obsługi tych zdarzeń powinny
znaleźć się instrukcje, jak w procedurach poni ej:
RTQEGFWTG 6(QTO(QTO2CKPV
5GPFGT 61DLGEV
DGIKP
%CPXCU2GP%QNQTEN4GF
%CPXCU/QXGVQ
%CPXCU.KPGVQ
%NKGPV9KFVJ %NKGPV*GKIJV
%CPXCU/QXGVQ
%NKGPV9KFVJ
%CPXCU.KPGVQ
%NKGPV*GKIJV
GPF
i
RTQEGFWTG 6(QTO(QTO4GUKG
5GPFGT 61DLGEV
DGIKP
4GHTGUJ RT[ OKCPKG TQOKCTW QMPC
MCUQYCPG Uæ RQRTGFPKG RTGMæVPG
GPF
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 1P%NKM wpisz odpowiednie instrukcje:
.QUQYG RWPMV[
RTQEGFWTG 6(QTO$WVVQP%NKEM
5GPFGT 61DLGEV
XCT KKPVGIGT
DGIKP
HQT K VQ FQ
%CPXCU2KZGNU=4CPFQO
%NKGPV9KFVJ 4CPFQO
%NKGPV*GKIJV?
4)$
4CPFQO
4CPFQO
4CPFQO
GPF
Przykład 13.5.
Wyświetl na formularzu trzy ró ne prostokąty — ramkę, prostokąt wypełniony kolorem
$TWUJ%QNQT, prostokąt z zaokrąglonymi brzegami.
10. 154 Aplikacje w Delphi. Przykłady
Rozwiązanie
W procedurze obsługi przycisku wpisz instrukcje jak poni ej:
RTQEGFWTG 6(QTO$WVVQP%NKEM
5GPFGT 61DLGEV
XCT
RTQUV 64GEV
DGIKP
RTQUV 4GEV
%CPXCU$TWUJ%QNQT EN$NCEM
TCOMC
%CPXCU(TCOG4GEV
RTQUV
%CPXCU$TWUJ%QNQT EN)TGGP
RTQUVQMæV Y[RG PKQP[
%CPXCU4GEVCPING
RTQUVQMæV CQMTæINQP[OK DTGICOK
%CPXCU4QWPF4GEV
GPF
Przykład 13.6.
Wyświetl na środku formularza napis „Zadania z Delphi” w kolorze niebieskim, o roz-
miarze czcionki równym 36 pt, bez tła — rysunek 13.3.
Rysunek 13.3.
Napis na środku
formularza
Rozwiązanie
W procedurze wykorzystano funkcje zwracające szerokość i wysokość napisu oraz
rozmiary formularza — i na tej podstawie obliczono współrzędne lewego górnego
wierzchołka wyświetlanego napisu:
RTQEGFWTG 6(QTO$WVVQP%NKEM
5GPFGT 61DLGEV
XCT Z[KPVGIGT
DGIKP
%CPXCU(QPV0COG #TKCN
%CPXCU(QPV%QNQT%N$NWG
%CPXCU(QPV5KG
%CPXCU$TWUJ5V[NGDU%NGCT
Z%NKGPV9KFVJ%CPXCU6GZV9KFVJ
CFCPKC
GNRJK
[%NKGPV*GKIJV%CPXCU6GZV*GKIJV
%CPXCU6GZV1WV
Z FKX [ FKX CFCPKC GNRJK
GPF
11. Rozdział 13. ♦ Grafika w Delphi — korzystanie z metod obiektu TCanvas 155
Przykład 13.7.
Narysuj elipsę o maksymalnych wymiarach na formularzu.
Rozwiązanie
W procedurze obsługi przycisku wpisz instrukcję:
GNKRUC YRKUCPC Y RTQUVQMæV Q TQOKCTCEJ HQTOWNCTC
%CPXCU'NNKRUG
%NKGPV9KFVJ %NKGPV*GKIJV
Przykład 13.8.
Narysuj na formularzu trójkąt o zielonym obwodzie i ółtym wypełnieniu.
Rozwiązanie
RTQEGFWTG 6(QTO$WVVQP%NKEM
5GPFGT 61DLGEV
DGIKP
%CPXCU$TWUJ%QNQTEN;GNNQY
%CPXCU2GP%QNQTEN)TGGP
T[UQYCPKG VTÎLMæVC
%CPXCU2QN[NKPG
=2QKPV
2QKPV
2QKPV
2QKPV
?
%CPXCU(NQQFHKNN
ENITGGPHUDQTFGT RTQEGFWTC Y[RG PKC QDKGMV PCT[UQYCP[
MQNQTGO KGNQP[O YGYPæVT MVÎTGIQ PCLFWLG UKú RWPMV Q YURÎ TúFP[EJ
GPF
Przykład 13.9.
Wyświetl na formularzu linie rysowane ró nymi stylami.
Rozwiązanie
Wstaw przycisk 6$WVVQP. W procedurze obsługi zdarzenia 1P%NKEM przycisku wpisz
instrukcje, jak w poni szej procedurze:
UV[NG NKPKK
RTQEGFWTG 6(QTO$WVVQP%NKEM
5GGPFGT 61DLGEV
XCT Z[KPVGIGT
DGIKP
Z 4CPFQO
%NKGPV9KFVJ
[ 4CPFQO
%NKGPV*GKIJV
%CPXCU2GP%QNQT 4)$
4CPFQO
4CPFQO
4CPFQO
ECUG 4CPFQO
QH
%CPXCU2GP5V[NG RU5QNKF
%CPXCU2GP5V[NG RUCUJ
%CPXCU2GP5V[NG RUQV
%CPXCU2GP5V[NG RUCUJQV
%CPXCU2GP5V[NG RUCUJQVQV
GPF
%CPXCU.KPG6Q
Z [
GPF
12. 156 Aplikacje w Delphi. Przykłady
Przykład 13.10.
Wyświetl na formularzu prostokąt malowany ró nymi stylami pędzla po ka dym kliknię-
ciu przycisku.
Rozwiązanie
Wstaw przycisk 6$WVVQP. W procedurze obsługi zdarzenia 1P%NKEM przycisku wpisz
instrukcje, jak w poni szej procedurze:
UV[NG RúFNC
RTQEGFWTG 6(QTO$WVVQP%NKEM
5GPFGT 61DLGEV
DGIKP
4GHTGUJ MCUWLG RQRTGFPK RTQUVQMæV
%CPXCU$TWUJ%QNQT 4)$
4CPFQO
4CPFQO
4CPFQO
MQNQTGO RúFNC
OCNQYCPG Uæ YQT[
ECUG 4CPFQO
QH
%CPXCU$TWUJ5V[NG DU%NGCT
%CPXCU$TWUJ5V[NG DU5QNKF
%CPXCU$TWUJ5V[NG DU$KCIQPCN
%CPXCU$TWUJ5V[NG DU(KCIQPCN
%CPXCU$TWUJ5V[NG DU%TQUU
%CPXCU$TWUJ5V[NG DUKCI%TQUU
%CPXCU$TWUJ5V[NG DU*QTKQPVCN
%CPXCU$TWUJ5V[NG DU8GTVKECN
GPF
%CPXCU4GEVCPING
GPF
Rysowanie „trwałe”
— zdarzenie OnPaint
Instrukcje zawierające metody obiektu %CPXCU mo na umieszczać w procedurach obsłu-
gi zdarzenia 1P%NKEM dla przycisków, dla formularza i innych komponentów. Mo na
równie korzystać z innych zdarzeń komponentów. Jednak tylko niektóre z nich umo -
liwiają tzw. „trwałe” rysowanie, czyli rysowanie odnawiane po ka dej zmianie, np. po
zmianie rozmiaru okna i przykryciu w ten sposób części obiektów graficznych. Dla okna
formularza korzysta się w tym celu ze zdarzenia 1P2CKPV. Dla innych komponentów
podobne zdarzenia mają inne nazwy. Przedstawiono je w tabeli 13.2.
Przykład 13.11.
Narysuj na formularzu prostokąt koloru czerwonego, tak aby nie kasował się po przy-
kryciu okna formularza innym oknem. Prostokąt powinien rysować się po kliknięciu
przycisku i kasować po kliknięciu drugiego przycisku — rysunek 13.4.
Rozwiązanie
Wstaw dwa przyciski 6$WVVQP.
13. Rozdział 13. ♦ Grafika w Delphi — korzystanie z metod obiektu TCanvas 157
Tabela 13.2. Zdarzenia umo liwiające rysowanie „trwałe”
Zdarzenie Znaczenie
1P2CKPV Zdarzenie dla formularza generowane ka dorazowo, gdy zawartość okna formularza
wymaga odświe enia. Sytuacja taka ma miejsce przy tworzeniu okna formularza,
a tak e wtedy, gdy np. jedno okno zostanie przesłonięte innym oknem lub gdy następuje
zmiana jego rozmiaru.
2CKPV$QZ2CKPV Odpowiednik zdarzenia 1P2CKPV dla komponentu 2CKPV$QZ.
1PTCY%GNN Zdarzenie występujące dla komponentu typu 6TCY)TKF i 65VTKPI)TKF — umo liwia
„trwałe” rysowanie obiektów i wyświetlanie tekstu w komórkach.
1P#HVGTTCY Zdarzenie dla komponentu typu 6%JCTV, odpowiednik zdarzenia 1P2CKPV.
Rysunek 13.4.
Rysowanie
i kasowanie
prostokąta
na formularzu
Gdyby instrukcję rysującą prostokąt umieścić w procedurze obsługi zdarzenia 1P2CKPV,
to prostokąt byłby na formularzu bezpośrednio po uruchomieniu programu. Dlatego
procedurę obsługi tego zdarzenia z nową instrukcją nale y wywołać za pomocą przy-
cisku.
W przykładzie pokazano, jak wykonać takie zadanie.
RTQEGFWTG 6(QTO/QLC2TQE
5GPFGT 61DLGEV
DGIKP
%CPXCU4GEVCPING
%NKGPV9KFVJ%NKGPV*GKIJV
GPF
RTQEGFWTC T[UWLG RTQUVQMæV MQNQTW EGTYQPGIQ K RT[RKUWLG RTQEGFWTG QDU WIK
åFCTGPKC 1P2CKPV RTQEGFWTú /QLC2TQE
RTQEGFWTG 6(QTO$WVVQP%NKEM
5GPFGT 61DLGEV
DGIKP
%CPXCU2GP%QNQTEN4GF
%CPXCU4GEVCPING
%NKGPV9KFVJ%NKGPV*GKIJV
1P2CKPV/QLC2TQERT[RKUCPKG RTQEGFWTG QDU WIK FCTGPKC RTQEGFWT[ T[UWLæEGL
åRTQUV
GPF
QF æEGPKG RTQEGFWT[ /QLC2TQE QF FCTGPKC 1P2CKPV Y[MCUQYCPKG RTQUVQMæVC
RTQEGFWTG 6(QTO$WVVQP%NKEM
5GPFGT 61DLGEV
DGIKP
1P2CKPVPKN VC KPUVTWMELC URQYQFWLG G T[UWPGM RTQUVQMæVC PKG DúFKG QFPCYKCP[
4GHTGUJ RTQEGFWTC VC MCUWLG RTQUVQMæV
GPF
14. 158 Aplikacje w Delphi. Przykłady
Przykład 13.12.
Wypełnij formularz bitmapą, np. kawa.bmp.
Rozwiązanie
W procedurze obsługi zdarzenia 1P2CKPV dla formularza wpisz instrukcje, jak w pro-
cedurze poni ej.
Zadeklaruj zmienną globalną lub pole klasy 6(QTO (w sekcji RWDNKE):
XCT $KVOCR 6$KVOCR
RTQEGFWTG 6(QTO(QTO2CKPV
5GPFGT 61DLGEV
XCT Z [ +PVGIGT
DGIKP
[
YJKNG [ *GKIJV FQ
DGIKP
Z
YJKNG Z 9KFVJ FQ
DGIKP
%CPXCUTCY
Z [ $KVOCR
Z Z
$KVOCR9KFVJ
GPF
[ [
$KVOCR*GKIJV
GPF
GPF
W metodzie (QTO(QTO%TGCVG dopisz instrukcje:
$KVOCR6$KVOCR%TGCVG
$KVOCR.QCF(TQO(KNG
%9+006MCYCDOR
Przykłady animacji w Delphi
W programowaniu stosuje się ró ne techniki animacji. Jednym z prostszych sposobów
jest rysowanie obiektu, następnie kasowanie i ponowne rysowanie w innym miejscu.
Wadą tego sposobu jest trudność w uzyskaniu płynności ruchu obiektów.
Inna metoda polega na zastosowaniu dwóch obszarów, na których rysujemy. W danej
chwili widoczny jest tylko jeden z nich. Drugi jest wówczas modyfikowany i wyświe-
tlany dopiero po zakończeniu operacji w miejsce pierwszego.
W zadaniach przykładowych zastosowano pierwszy sposób animacji. Udało się uzyskać
odpowiednią płynność ruchu obiektów, dlatego nie wykorzystano sposobu z u yciem
dwóch obszarów rysowania.
Przykład 13.13.
Wykonaj następującą animację: kółko o średnicy 30 punktów przesuwa się od lewego
do prawego brzegu formularza i z powrotem.
15. Rozdział 13. ♦ Grafika w Delphi — korzystanie z metod obiektu TCanvas 159
Rozwiązanie
W procedurze obsługi przerwania od Timera wpisz:
] ,
_
RTQEGFWTG 6(QTO6KOGT6KOGT
5GPFGT 61DLGEV
EQPUV ZKPVGIGT
[KPVGIGT
MTQMKPVGIGT
DGIKP
MCUQYCPKG QDKGMVW
%CPXCU$TWUJEQNQT%QNQT MQNQT HQTOWNCTC
%CPXCU2GPEQNQT%QNQT MQNQT RKÎTC
(QTO%CPXCU'NNKRUG
Z[Z
[
T[UQYCPKG MÎ MC MQNQTGO EGTYQP[O
%CPXCU$TWUJEQNQTEN4GF
ZZ
MTQM
%CPXCU'NNKRUG
Z[Z
[
KH Z
%NKGPVYKFVJ VJGP MTQMMTQM
KH Z VJGP MTQMMTQM
GPF
Dyrektywa ] ,
_przed treścią procedury włącza opcję kompilatora umo liwiającą zmianę
wartości stałych typowanych (ang. Assignable typed constans). Opcja ta powinna być
standardowo włączona, ale jeśli nie mamy pewności, lepiej dodać dyrektywę ] ,
_.
Przykład 13.14.
Wykonaj animację tak jak w zadaniu poprzednim, gdy formularz jest wypełniony
wzorem — rysunek 13.5.
Rysunek 13.5.
Animacja z tłem
Rozwiązanie
Na formularzu umieść przycisk 6$WVVQP i komponent 66KOGT. Właściwość +PVGTXCN
ustaw na 200 ms, a właściwość 'PCDNGF na HCNUG. Treść procedur obsługi przycisku
i przerwania od Timera przedstawiono poni ej.
Zadeklaruj zmienną globalną:
XCT $KVOCR$KVOCR 6$KVOCR
RTQEGFWTC RQDKGTC RTQUVQMæVP[ HTCIOGPV HQTOWNCTC K WTWEJCOKC 6KOGT
RTQEGFWTG 6(QTO$WVVQP%NKEM
5GPFGT 61DLGEV
XCT Z[KPVGIGT
16. 160 Aplikacje w Delphi. Przykłady
DGIKP
WVYQTGPKG QDKGMVW $KVOCR
$KVOCR 6$KVOCR%TGCVG
$KVOCR9KFVJ%NKGPV9KFVJ
$KVOCR*GKIJV
RQDTCPKG RTQUVQMæVPGIQ Y[EKPMC HQTOWNCTC QDUCTW RQ MVÎT[O DúFKG UKú RQTWUC Q
MÎ MQ
HQT Z VQ %NKGPV9KFVJ FQ
HQT [ VQ FQ
$KVOCR%CPXCU2KZGNU=Z[?(QTO%CPXCU2KZGNU=Z[
?
6KOGT'PCDNGFVTWG Y +PURGMVQTG 1DKGMVÎY CDNQMWL 6KOGT
GPF
RTQEGFWTC QDU WIK RTGTYCPKC QF 6KOGTC T[UQYCPKG K MCUQYCPKG QDKGMVW EQ OU
RTQEGFWTG 6(QTO6KOGT6KOGT
5GPFGT 61DLGEV
EQPUV ZKPVGIGT
[KPVGIGT
MTQMKPVGIGT
XCT Z[KPVGIGT
DGIKP
LG NK YKúMU[O[ TQOKCT HQTOWNCTC VQ VTGDC Y RTQEGFWTG QDU WIK FCTGPKC
1P4GUKG LGUEG TC RQDTCè DKVOCRú
%CPXCUTCY
[$KVOCR Y[ YKGVNGPKG YEG PKGL RQDTCPGIQ RCUMC HQTOWNCTC
MCUQYCPKG QDKGMVW
T[UQYCPKG MÎ MC
%CPXCU'NNKRUG
Z[Z
[
ZZ
MTQM
KH Z
%NKGPVYKFVJ VJGP MTQMMTQM
KH Z VJGP MTQMMTQM
GPF
Y[RG PKCPKG HQTOWNCTC DKVOCRæ
RTQEGFWTG 6(QTO(QTO2CKPV
5GPFGT 61DLGEV
XCT Z [ +PVGIGT
DGIKP
[
YJKNG [ *GKIJV FQ
DGIKP
Z
YJKNG Z 9KFVJ FQ
DGIKP
%CPXCUTCY
Z [ $KVOCR
Z Z
$KVOCR9KFVJ
GPF
[ [
$KVOCR*GKIJV
GPF
GPF
RTQEGFWTC (QTOGUVTQ[ YCNPKC RCOKúè
CLOQYCPæ RTG DKVOCR[
RTQEGFWTG 6(QTO(QTOGUVTQ[
5GPFGT 61DLGEV
DGIKP
$KVOCR(TGG
$KVOCR(TGG
GPF
17. Rozdział 13. ♦ Grafika w Delphi — korzystanie z metod obiektu TCanvas 161
Przykład 13.15.
Wykonaj animację polegającą na przemieszczaniu się kulki w losowych kierunkach
w prostokątnym obszarze o wymiarach (0, 0, 200, 200). Wykorzystaj komponent
62CKPV$QZ z zakładki System — rysunek 13.6.
Rysunek 13.6.
Animacja
niebieskiej kulki
Rozwiązanie
Na formularzu umieść komponent 62CKPV$QZ i 66KOGT. Komponent 62CKP$QZ jest stoso-
wany do wyświetlania (kreślenia) grafiki, która ma być ograniczona do obszaru prosto-
kątnego. Korzystając z komponentu 62CKPV$QZ, programista nie musi kontrolować, czy
obszar ten nie został przekroczony — jeśli narysowany obiekt nie mieści się wewnątrz
komponentu 62CKPV$QZ, to zostaje obcięty. Dodatkowo zawarty w nim rysunek mo emy
przesuwać po formularzu, zmieniając właściwości .GHV i 6QR tego komponentu. Proce-
dura przedstawiona poni ej działa poprawnie z komponentem 62CKPV$QZ i bez niego
— wtedy kulka przesuwa się po formularzu.
W zadaniu mo na równie dodać przycisk, który będzie włączał zegar (animację) po
wpisaniu w procedurze obsługi instrukcji 6KOGT'PCDNGFVTWG (wcześniej nale y
zegar zablokować w okienku Inspektora Obiektów — 'PCDNGFVTWG).
{J+}
RTQEGFWTG 6(QTO6KOGT6KOGT
5GPFGT 61DLGEV
EQPUV ZKPVGIGT
[KPVGIGT
MTQMZKPVGIGT
MTQM[KPVGIGT
DGIKP
YKVJ 2CKPV$QZ%CPXCU FQ
DGIKP
E[UEGPKG RTQUVQMæVC
$TWUJ%QNQTEN9JKVG
4GEVCPING
QDNKEGPKG YURÎ TúFP[EJ
ZZ
MTQMZ
[[
MTQM[
T[UQYCPKG MQ C Y MYCFTCEKG Q DQMW
TÎYP[O RKMUGNK
$TWUJ%QNQTEN$NWG
'NNKRUG
Z [ Z
[
KH
Z VJGP
DGIKP
MTQMZ
4CPFQO
18. 162 Aplikacje w Delphi. Przykłady
MTQMZMTQMZ
GPF
KH
[ VJGP
DGIKP
MTQM[
4CPFQO
MTQM[MTQM[
GPF
KH
Z VJGP MTQMZMTQMZ
KH
[ VJGP MTQM[MTQM[
GPF YKVJ
GPF
Przykład 13.16.
Umieść na formularzu komponent typu 6$WVVQP i 65JCRG. 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 5JCRG przesuwa się zgodnie z kierunkiem
strzałki — rysunek 13.7.
Rysunek 13.7.
Przesuwanie koła
za pomocą
klawiszy strzałek
Aby klawisze strzałek nie były przechwytywane przez komponent Button1, należy
ustawić dla każdego z nich właściwość 6CD5GV na HCNUG.
Rozwiązanie
Wstaw komponenty 6$WVVQP i 65JCRG. W procedurze obsługi kliknięcia przycisku wpisz
instrukcje, jak poni ej:
RTQEGFWTG 6(QTO$WVVQP%NKEM
5GPFGT 61DLGEV
DGIKP
KH 5JCRG5JCRGUV%KTENG VJGP 5JCRG5JCRGUV4GEVCPING
GNUG 5JCRG5JCRGUV%KTENG
(QTO#EVKXG%QPVTQNPKN
GPF
W celu sprawdzenia klawiszy strzałek wykorzystaj zdarzenie 1P-G[QYP dla formularza.
Treść procedury obsługi tego zdarzenia przedstawiono poni ej:
RTQEGFWTG 6(QTO(QTO-G[QYP
5GPFGT 61DLGEV XCT -G[ 9QTF 5JKHV 65JKHV5VCVG
DGIKP
ECUG -G[ QH
XMA4KIJV 5JCRG.GHV5JCRG.GHV
XMA.GHV 5JCRG.GHV5JCRG.GHV
XMA7R 5JCRG6QR5JCRG6QR
XMAQYP5JCRG6QR5JCRG6QR
GPF
GPF