Aplikacje w Delphi. Przykłady

18
Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: [email protected] PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ IDZ DO IDZ DO ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG KATALOG KSI¥¯EK KATALOG KSI¥¯EK TWÓJ KOSZYK TWÓJ KOSZYK CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE O NOWOCIACH ZAMÓW INFORMACJE O NOWOCIACH ZAMÓW CENNIK ZAMÓW CENNI K CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE SPIS TRECI SPIS TRECI DODAJ DO KOSZYKA DODAJ DO KOSZYKA KATALOG ONLINE KATALOG ONLINE Aplikacje w Delphi. Przyk³ady Autor: Teresa Pamula ISBN: 83-7361-212-2 Format: B5, stron: 260 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 powiê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 wyjaniaj¹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¿liwoci wspania³ego narzêdzia jakim jest Delphi.

description

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 danychNie 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

Transcript of Aplikacje w Delphi. Przykłady

Page 1: Aplikacje w Delphi. Przykłady

Wydawnictwo Helionul. Chopina 644-100 Gliwicetel. (32)230-98-63e-mail: [email protected]

PRZYK£ADOWY ROZDZIA£PRZYK£ADOWY ROZDZIA£

IDZ DOIDZ DO

ZAMÓW DRUKOWANY KATALOGZAMÓW DRUKOWANY KATALOG

KATALOG KSI¥¯EKKATALOG KSI¥¯EK

TWÓJ KOSZYKTWÓJ KOSZYK

CENNIK I INFORMACJECENNIK I INFORMACJE

ZAMÓW INFORMACJEO NOWO�CIACH

ZAMÓW INFORMACJEO NOWO�CIACH

ZAMÓW CENNIKZAMÓW CENNIK

CZYTELNIACZYTELNIA

FRAGMENTY KSI¥¯EK ONLINEFRAGMENTY KSI¥¯EK ONLINE

SPIS TRE�CISPIS TRE�CI

DODAJ DO KOSZYKADODAJ DO KOSZYKA

KATALOG ONLINEKATALOG ONLINE

Aplikacje w Delphi.Przyk³adyAutor: Teresa PamulaISBN: 83-7361-212-2Format: B5, stron: 260

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.

Page 2: Aplikacje w Delphi. Przykłady

Spis treści

Wprowadzenie ................................................................................... 7

Rozdział 1. Projektowanie aplikacji w Delphi ........................................................ 9Środowisko zintegrowane — Delphi IDE ............................................................................9Elementy projektu aplikacji ..............................................................................................10Standardowe właściwości komponentów..........................................................................13Standardowe zdarzenia......................................................................................................14

Rozdział 2. Podstawowe składniki aplikacji........................................................ 17Okno aplikacji ...................................................................................................................17Ikona aplikacji ...................................................................................................................22Wyświetlanie napisów.......................................................................................................22Rodzaje przycisków, podobieństwa i różnice ...................................................................27Etykiety i przyciski............................................................................................................30

Rozdział 3. Menu główne i podręczne................................................................. 35Wielopoziomowe menu główne........................................................................................35Przyporządkowanie poleceń opcjom menu.......................................................................37Menu podręczne ................................................................................................................40„Polskie litery” w nazwach poleceń menu........................................................................41

Rozdział 4. Wprowadzanie danych, formatowanie i wyświetlanie na ekranie ........ 43Liczby — funkcje konwersji i formatowanie liczb. Przecinek czy kropka?.....................44Daty — funkcje konwersji i formatowanie daty i czasu ...................................................46Systemowe separatory liczb i daty ....................................................................................49Wprowadzanie danych za pomocą okienek edycyjnych TEdit.........................................49Wprowadzanie danych za pomocą okienek InputBox i InputQuery.................................54Sposoby zabezpieczenia programu przed błędami przy wprowadzaniu danych ..............55Obliczenia. Wybrane funkcje modułu Math .....................................................................61

Rozdział 5. Okienka komunikatów ..................................................................... 65Wyświetlanie komunikatów z napisami stałymi w języku systemowym— MessageBox...............................................................................................................66

Wyświetlanie komunikatów za pomocą funkcji ShowMessage, MessageDlg,MessageDlgPos...............................................................................................................67

Page 3: Aplikacje w Delphi. Przykłady

4 Aplikacje w Delphi. Przykłady

Rozdział 6. Okienka dialogowe z karty Dialogs ................................................... 73

Rozdział 7. Listy wyboru — TListBox i TComboBox............................................. 79Dodawanie elementów do listy .........................................................................................81Wybieranie elementów z listy ...........................................................................................82Sposoby wyświetlania elementów listy.............................................................................84Blokowanie edycji dla listy TComboBox .........................................................................86Czytanie i zapisywanie zawartości listy do pliku dyskowego ..........................................87

Rozdział 8. Prosty edytor — komponent TMemo................................................. 89Kopiowanie, wycinanie i wklejanie tekstu........................................................................90Czytanie i zapisywanie tekstu do pliku .............................................................................91Wyświetlanie informacji o położeniu kursora ..................................................................92Automatyczne kasowanie linii nie zawierających liczb lub wybranych znaków .............93

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

Rozdział 10. Tabelaryzacja danych — komponent TStringGrid ............................. 101Ustalanie podstawowych parametrów tabeli...................................................................104Wypełnianie tabeli danymi..............................................................................................106Wybieranie komórek tabeli .............................................................................................108Filtrowanie wprowadzanych danych...............................................................................110Niestandardowe przejście do kolejnej komórki — klawisz Enter ..................................112Zmiana koloru i wyrównania tekstu w wybranych komórkach ......................................114Wyświetlanie tekstu w komórce w dwóch wierszach.....................................................117Totolotek .........................................................................................................................119Tabela i lista ....................................................................................................................121

Rozdział 11. Graficzna prezentacja danych — komponent TChart........................ 123Rysowanie wykresów z wykorzystaniem komponentu TChart ......................................123Opis wybranych właściwości, metod i zdarzeń komponentów TChart i TChartSeries ..125Wykresy kołowe..............................................................................................................128Wykresy kolumnowe.......................................................................................................131Wykresy funkcji matematycznych ..................................................................................134Formatowanie i skalowanie wykresów ...........................................................................138Posługiwanie się wieloma wykresami.............................................................................142

Rozdział 12. Odmierzanie czasu — komponent TTimer........................................ 147

Rozdział 13. Grafika w Delphi — korzystanie z metod obiektu TCanvas............... 149Wyświetlanie prostych figur geometrycznych i tekstu ...................................................150Rysowanie „trwałe” — zdarzenie OnPaint .....................................................................156Przykłady animacji w Delphi ..........................................................................................158

Rozdział 14. Wyświetlanie obrazów — komponent TImage.................................. 163Rysowanie po obrazie .....................................................................................................165Binaryzacja obrazu..........................................................................................................166

Rozdział 15. Współpraca programu z plikami dyskowymi .................................... 169Wybór foldera plików .....................................................................................................169Wyszukiwanie plików.....................................................................................................171Zapisywanie danych z okienek TEdit i tabeli do pliku tekstowego................................174Czytanie danych z pliku tekstowego...............................................................................175Zapisywanie i odczytywanie danych z tabeli do pliku *.csv ..........................................177

Page 4: Aplikacje w Delphi. Przykłady

Spis treści 5

Rozdział 16. Drukowanie w Delphi ..................................................................... 179Drukowanie napisów i tekstu z okienek edycyjnych ......................................................180Drukowanie tabeli i wykresu...........................................................................................181Drukowanie obrazu .........................................................................................................184

Rozdział 17. Programy z wieloma oknami........................................................... 187Wymiana danych i metod między modułami..................................................................187Program z hasłem............................................................................................................190Wyświetlanie tytułu programu........................................................................................192

Rozdział 18. Posługiwanie się wieloma komponentami tego samego typu.Operatory Is i As............................................................................ 195Wprowadzanie i kasowanie danych dla kilku okienek edycyjnych................................196Przypisywanie grupie komponentów tej samej procedury obsługi zdarzenia.................197Wyświetlanie informacji o numerach kontrolek, ich nazwach i klasach ........................200

Rozdział 19. Tablice dynamiczne........................................................................ 203

Rozdział 20. Dynamiczne tworzenie komponentów.............................................. 207Wyświetlanie kontrolek i przypisywanie zdarzeniom procedur obsługi ........................208Przykłady dynamicznego tworzenia wykresów ..............................................................212Tworzenie menu w czasie działania programu ...............................................................215

Rozdział 21. Definiowanie nowych klas komponentów ........................................ 219Klasa tabel z wyrównaniem zawartości komórek do prawej strony ...............................219Klasa okienek z właściwością Alignment.......................................................................221Instalowanie nowych komponentów na palecie komponentów......................................223Nowy komponent do ankiety ..........................................................................................227

Rozdział 22. Podstawowe operacje na bazach danych ........................................ 231Przeglądanie istniejących baz danych w formacie .dbf...................................................233Tworzenie własnej bazy danych .....................................................................................235Modyfikowanie bazy.......................................................................................................237Filtrowanie rekordów bazy danych .................................................................................238Wyszukiwanie rekordów.................................................................................................240Sortowanie.......................................................................................................................241Rysowanie wykresów na podstawie danych z bazy........................................................242Obliczanie średniej ze wszystkich wartości danego pola................................................243Biblioteka — przykład relacyjnej bazy danych ..............................................................244

Literatura ...................................................................................... 249

Skorowidz...................................................................................... 251

Page 5: Aplikacje w Delphi. Przykłady

Rozdział 13.

Grafika w Delphi

— korzystanie z metod

obiektu TCanvas

Niektóre komponenty posiadają właściwość typu obiektowego ������� (tzw. płótno).

Są to m.in.: ���, ���� , ���������, ������, ��������, ���������, ��������,

����� .

Właściwość ������ 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 ������ różnych obiektów może być przydatne

do zmiany cech niektórych komponentów, np. ��������� czy �����, a także przy

drukowaniu formularza i tekstu.

Wybrane właściwości obiektu �������:

����� — określa wzór lub kolor wypełnienia figur (tzw. pędzel);

��� — krój czcionki dla wyświetlanych napisów;

�� — określa cechy kreślonych linii: grubość, styl, kolor (tzw. pióro);

���� — 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 (�����, � ����). Na rysunku 13.1 przedstawiono współrzędne

okna formularza, które wykorzystano w zadaniach tego rozdziału.

Page 6: Aplikacje w Delphi. Przykłady

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 ������� — 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

������������������� �� Za pomocą funkcji ���� można odczytać kolor piksela

w miejscu o współrzędnych (x, y) — zmienna ����� jest typu

� ����.

�������������� ��������� Ta sama funkcja wywołana w ten sposób powoduje

wyświetlenie na formularzu czerwonego punktu w miejscu

o współrzędnych [10, 20] — współrzędną poziomą (x) liczymy

od lewej do prawej, a współrzędną pionową od góry w dół.Współrzędne lewego górnego wierzchołka to (0, 0).

������ �������� Przenosi kursor graficzny do punktu o współrzędnych x, y.

!����� ������� Rysuje linię od bieżącej pozycji kursora graficznego do punktuo współrzędnych x, y.

��������� ��� �� �����"���� Procedura rysuje prostokąt wypełniony standardowym

kolorem pędzla ( ������������ ����).

#���$��� ��� �� �����"���� 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.

�����������������������%������ 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:

���������������������������������� ����������!��"�������������"���������� ��� �����������������#�

narysuje gwiazdę pięcioramienną (patrz pomoc dla polyline).

Page 7: Aplikacje w Delphi. Przykłady

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

Tabela 13.1. Wybrane metody obiektu TCanvas (ciąg dalszy)

Metoda Znaczenie

�����������������������%������ Procedura umożliwia narysowanie wielokąta wypełnionego

bieżącym kolorem i stylem pędzla. Przykładowo, instrukcje:

������������ �������$�%&' ����������(�������������������������"���������������"���"�������������������#�'

spowodują narysowanie czworokąta wypełnionego kolorem

czerwonym. Współrzędne punktu pierwszego i ostatniego nie

muszą się pokrywać, ponieważ procedura i tak łączy na końcu

punkt ostatni z punktem pierwszym.

�%��& Odświeżanie formularza — procedura kasuje wszystkie obiekty

rysowane za pomocą metod obiektu ����� i nieumieszczone

w procedurze obsługi zdarzenia )������.

'��(� ��������)

*��$&����*��$&�� Rysuje obraz określony parametrem *��+��$ w miejscu

o współrzędnych x i y (przykład 13.14).

+���� �� �� �� �, �, �- �-�

����� Rysuje krzywą eliptyczną w prostokącie o współrzędnych (x1, y1;

x2, y2), od punktu o współrzędnych (x3, y3) do punktu (x4, y4).

��./�� �������)������

��������� Wyświetla tekst od punktu o współrzędnych x, y — lewy górny

róg prostokąta zawierającego tekst; �� to parametr w postaci

tekstu stałego w apostrofach, np. ,-���.��/���,, lub zmienna

zawierająca łańcuch znaków, np. ���,-���.��/���, ($����

w nagłówku procedury oznacza podobne wywołanie jak

w przypadku wartości, lecz umożliwia bardziej efektywne

wykorzystanie pamięci).

��$�����������'��������)

���������������)�������0�/���

����

Kopiuje część obrazu z jednego płótna na inne płótno.

1���������������������� Rysowanie prostokąta wypełnionego bieżącym kolorem i wzorem.

1����1����2 �3��"����)�������

������)�1���0������1���0��� Wypełnianie tzw. powodziowe obiektów.

1��4������������������� Rysowanie obwodu prostokąta.

���2� �3� �2� �3� �2, �3, �2-

3-��"���� )Rysowanie wycinka koła.

��/������2� �3� �2� �3� �2,

3,��"���� Rysowanie prostokąta z zaokrąglonymi narożnikami.

0����&'��(����������������)

*��$&�����*��$&�� Dopasowanie rysunku do obszaru danego prostokąta.

��5��&������������������ �

"����Funkcja zwraca wysokość tekstu w pikselach.

��./��2 �3��"����)������

���������� Procedura wyświetla napis na komponencie posiadającym

właściwość � �����.

���������������)�2 �3�

"����)����������������� Procedura wyświetla napis w prostokącie, którego współrzędne

są podane w postaci typu �%$� (pierwszy parametr). Procedura

była wykorzystywana przy formatowaniu komórek tabeli.

��6���&����������������� �

"����Funkcja zwraca szerokość tekstu w pikselach.

Page 8: Aplikacje w Delphi. Przykłady

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 ����� komponentu, np. instrukcja:

/����*�0���� ������1��.�� ������2��&���%*����3� !�����'

spowoduje przypisanie zmiennej ��� 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ę ���� �. Współrzędne prawego dolnego wierzchołka formularza możemy

odczytać, korzystając z właściwości ��� ������� i ��� ��� ���� formularza. Należy

wpisać np. w procedurze obsługi zdarzenia ������� etykiety instrukcję:

4�5��� �+������6����7��� ����8�&���9,�,96����7��� ����2�(���'

lub użyć funkcji � ���� �� ������ , która zwraca wartość typu � �� określającą

współrzędne dwóch przeciwległych wierzchołków formularza:

%��1��.��*� ����%$���(�'��::%���+���%$��.�;���<�&/����=�>�?�/��<.���@���/���@4�5��� �+������6��������%�%�(���9,�,9�6��������%������.�'

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:

����������� ����8�&���&������ ����2�(���&����#��$�%&'

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

Page 9: Aplikacje w Delphi. Przykłady

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:

��������� ������$�%&'�::<.�����/������+�A������$<�=���::+�<����B$��/�������(��C�$<�(��&��+��/�����=�+AD�<B&��$������� ������E���������'::������=�����������&�5�;@$(��+�D�;����/�������(��C�$<�(��&��+��/���<�+��=(��&���(��=��<$��D/� ������4����� ����8�&���� ����2�(���'

Narysuj drugą przekątną.

Aby przekątne pozostały na formularzu podczas zmiany jego rozmiaru, należy wykorzy-stać dwa zdarzenia: ������� i �� ��! . W procedurach obsługi tych zdarzeń powinnyznaleźć się instrukcje, jak w procedurach poniżej:

$����/���1��.��1��.������7�&����)5?$��'7���

��� ��������� ������$�%&'��� ������E���������'��� ������4����� ����8�&���� ����2�(���'��� ������E����� ����8�&�����'��� ������4�������� ����2�(���'��)

i

$����/���1��.��1��.%��<�7�&����)5?$��'7���

���%C���'��::�+�<��<.�������<.������/���������������::�/���=����@�+�+�<&���+�</@����)

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 ������ wpisz odpowiednie instrukcje:

::4���=�+��/��$����/���1��.��������� ��$/�7�&����)5?$��'���������(�'7���

%������������������� �����������%��&�.� ����8�&�����%��&�.� ����2�(���#��%*���%��&�.��33��%��&�.��33���%��&�.���33����'��)

Przykład 13.5.

Wyświetl na formularzu trzy różne prostokąty — ramkę, prostokąt wypełniony kolorem�"��#����, prostokąt z zaokrąglonymi brzegami.

Page 10: Aplikacje w Delphi. Przykłady

154 Aplikacje w Delphi. Przykłady

Rozwiązanie

W procedurze obsługi przycisku wpisz instrukcje jak poniżej:

$����/���1��.��������" ��$/�7�&����)5?$��'���

+�������%$�'7���

���+�������%$���������"�������'��� ������������ ��������$����$/'���::��./���� ������1��.%$��+�����'��� ������������ ��������$�*��'���::+�����/@��=�+D�������� ������%$���(����������"�������'���::+�����/@��<�<��/�@(����.��5�<(�.���� ������%���&%$�������"��"���"���������'��)

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:

$����/���1��.��������� ��$/�7�&����)5?$��'����������(�'7���

��� ������1����0�.��,-����,'��� ������1���� ������ ����'��� ������1����7�<����'��� ������������7�����5� ���'����� ����8�&��F ��������8�&���,G�&��������<�H�+��,�'������ ����2�(��F ��������2�(���,G,�'�� ��������)����&��������&�����,G�&�����<�H�+��,�'��)

Page 11: Aplikacje w Delphi. Przykłady

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ę:

::��+���=+������=�+�����/@������<.����$��C��.����<� ������I���+������� ����8�&���� ����2�(���'

Przykład 13.8.

Narysuj na formularzu trójkąt o zielonym obwodzie i żółtym wypełnieniu.

Rozwiązanie

$����/���1��.�������� ��$/�7�&����)5?$��'7���

��� ������������ ������$�J���='��� ��������� ������$�*��'���::����=������A?/@����� ���������������������������������������������������������������������#�'��� ������1���&C���������3�$�(���C�5��&��'��::+��$&����=�+D�����5�/��������=�������::/����.�<�����.��==�@��<�/�A�(��<��?&�?���B�+��/����=�+AD�<B&��$��������3���)

Przykład 13.9.

Wyświetl na formularzu linie rysowane różnymi stylami.

Rozwiązanie

Wstaw przycisk ��"����. W procedurze obsługi zdarzenia ������� przycisku wpisz

instrukcje, jak w poniższej procedurze:

::����������$����/���1��.��������� ��$/�7�&����)5?$��'����������(�'7���

��������%��&�.� ����8�&���F����'���������%��&�.� ����2�(���F����'���� ��������� ��������%*��%��&�.��3 ��%��&�.��3 ��%��&�.��3 ��'��������%��&�.�3���%��������� ���������7�������+�7���&'��������� ���������7�������+�H���'��������� ���������7�������+�H��'������"�� ���������7�������+�H���H��'��������� ���������7�������+�H���H��H��'����)

�� ������4���������'��)

Page 12: Aplikacje w Delphi. Przykłady

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 ��"����. W procedurze obsługi zdarzenia ������� przycisku wpiszinstrukcje, jak w poniższej procedurze:

::�����+B&<��$����/���1��.��������� ��$/�7�&����)5?$��'7���

��%C���'��::/���?�+�+�<&���+�����/@��� ������������ �������%*��%��&�.��3 ��%��&�.��3 ��%��&�.��3 ��'�::/����.�+B&<���������������������������������������������������������������::�.���=����@�=<���������%��&�.�!���%������� ������������7�������5� ���'������� ������������7�������5�7���&'������� ������������7�������5��H��(����'����"�� ������������7�������5�1H��(����'������� ������������7�������5� ����'����3�� ������������7�������5�H��( ����'���� �� ������������7�������5�2���<�����'����!�� ������������7�������5�K���$��'����)

�� ������%$���(���������������'��)

Rysowanie „trwałe”

— zdarzenie OnPaint

Instrukcje zawierające metody obiektu ������ można umieszczać w procedurach obsłu-gi zdarzenia ������� dla przycisków, dla formularza i innych komponentów. Możnaró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. pozmianie rozmiaru okna i przykryciu w ten sposób części obiektów graficznych. Dla oknaformularza korzysta się w tym celu ze zdarzenia �������. Dla innych komponentówpodobne 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ęciuprzycisku i kasować po kliknięciu drugiego przycisku — rysunek 13.4.

Rozwiązanie

Wstaw dwa przyciski ��"����.

Page 13: Aplikacje w Delphi. Przykłady

Rozdział 13. ♦ Grafika w Delphi — korzystanie z metod obiektu TCanvas 157

Tabela 13.2. Zdarzenia umożliwiające rysowanie „trwałe”

Zdarzenie Znaczenie

.������ 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 gdy następujezmiana jego rozmiaru.

�����8������ Odpowiednik zdarzenia )������ dla komponentu �������.

.�'��(��� Zdarzenie występujące dla komponentu typu �H��=*��& i �7����(*��& — umożliwia„trwałe” rysowanie obiektów i wyświetlanie tekstu w komórkach.

.�+%��'��( Zdarzenie dla komponentu typu � ����, odpowiednik zdarzenia )������.

Rysunek 13.4.Rysowaniei kasowanieprostokątana formularzu

Gdyby instrukcję rysującą prostokąt umieścić w procedurze obsługi zdarzenia �������,to prostokąt byłby na formularzu bezpośrednio po uruchomieniu programu. Dlategoprocedurę obsługi tego zdarzenia z nową instrukcją należy wywołać za pomocą przy-cisku.

W przykładzie pokazano, jak wykonać takie zadanie.

$����/���1��.��E�?����$�7�&����)5?$��'7���

�� ������%$���(���������� ����8�&��F���� ����2�(��F����'��)

::�+��$&��������?�+�����/@��/������$<�=��(����+�<�+���?�+��$&��<��5�D�(��<&��<����)�������+��$&��B�E�?����$$����/���1��.��������� ��$/�7�&����)5?$��'7���

�� ��������� ������$�%&'�� ������%$���(���������� ����8�&��F���� ����2�(��F����'�)��������E�?����$'::+�<�+������+��$&��<��5�D�(��<&��<����+��$&��������?@$?��+�������)

::��&D@$<���+��$&����E�?����$��&�<&��<����)�������L�=�/���=����+�����/@��$����/���1��.��������� ��$/�7�&����)5?$��'7���

��)�����������'��::���������/$?���+�=�&�?��;������/�+�����/@������5B&<���&��=������%C���'������::+��$&�������/���?�+�����/@���)

Page 14: Aplikacje w Delphi. Przykłady

158 Aplikacje w Delphi. Przykłady

Przykład 13.12.

Wypełnij formularz bitmapą, np. kawa.bmp.

Rozwiązanie

W procedurze obsługi zdarzenia ������� dla formularza wpisz instrukcje, jak w pro-cedurze poniżej.

Zadeklaruj zmienną globalną lub pole klasy ���$ (w sekcji �"����):

�������.�+������.�+'

$����/���1��.��1��.������7�&����)5?$��'���������6��(�'7���

���������'���(&�����M�2�(��������7���

������������'������(&����M�8�&�����������7���

��������� ������H��=���������.�+�'���������������9����.�+�8�&��'��������)

�������������9����.�+�2�(��'�����)

��)

W metodzie ��$#��� �� dopisz instrukcje:

���.�+������.�+� ���'���.�+�4��&1��.1���, �N8600�N/�=��5.+,�'

Przykłady animacji w Delphi

W 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 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 danejchwili 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życiemdwóch obszarów rysowania.

Przykład 13.13.

Wykonaj następującą animację: kółko o średnicy 30 punktów przesuwa się od lewegodo prawego brzegu formularza i z powrotem.

Page 15: Aplikacje w Delphi. Przykłady

Rozdział 13. ♦ Grafika w Delphi — korzystanie z metod obiektu TCanvas 159

Rozwiązanie

W procedurze obsługi przerwania od Timera wpisz:

OPQ9R$����/���1��.����.����.��7�&����)5?$��'�����������(���'������������(�����'������/��/����(��3'7���

��::/���=�����5�/���� ������������$������ ����'��::/�����C��.����<��� ���������$������ ����'����::/�����+�A����1��.�� ������I���+��������9"����9"��'��::����=����/AD/��/����.�$<�=���.�� ������������$������$�%&'������9/��/'�� ������I���+��������9"����9"��'���%��9"�S�� ����=�&����&��/��/��F/��/'���%��M����&��/��/��F/��/'��)

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 ��"���� i komponent ��� . Właściwość ��� ���

ustaw na 200 ms, a właściwość *���� � na +��� . Treść procedur obsługi przycisku

i przerwania od Timera przedstawiono poniżej.

Zadeklaruj zmienną globalną:

�������.�+����.�+�������.�+'

::�+��$&����+�5����+�����/@����C��(.���C��.����<�������$��.�����.�$����/���1��.��������� ��$/�7�&����)5?$��'����������(�'

Page 16: Aplikacje w Delphi. Przykłady

160 Aplikacje w Delphi. Przykłady

7���

���::���=��<����5�/������.�+�������.�+���������.�+� ���'������.�+��8�&���� ����8�&��'������.�+��2�(����"�'::+�5�����+�����/@��(��=�$��/��C��.����<��F��5�<�����+��/�A��.�5B&<����B�+����<�D�::/AD/���%���������� ����8�&��F��������%������������T������������.�+�� �������������#��1��.�� �������������9���#'����.���I��5�&�����'��::=�6��+/���<�)5�/�A=�<�5��/�?���.����)

::�+��$&�����5�D�(��+�<�=������&���.���F�����=������/���=�����5�/���$������.�$����/���1��.����.����.��7�&����)5?$��'�����������(���'�������������(�����'�������/��/����(��3'������������(�'7���

��::?U���<=�B/�<�.����<.����C��.����<��������<5��=�+��$&��<��5�D�(��<&��<�����::)�%��<�?�<$<���<�+�5��>�5��.�+B��� ������H��=���������.�+��'��::=�U=������=$<U��?�+�5���(��+��/��C��.����<���������������������������������::/���=�����5�/�����::����=����/AD/���� ������I���+��������9"����9"��'��������9/��/'�����%��9�TS� ����=�&����&��/��/��F/��/'�����%��M����&��/��/��F/��/'��)

::=�+D������C��.����<��5��.�+@$����/���1��.��1��.������7�&����)5?$��'���������6��(�'7���

���������'���(&�����M�2�(��������7���

������������'������(&����M�8�&�����������7���

��������� ������H��=���������.�+�'���������������9����.�+�8�&��'��������)

�������������9����.�+�2�(��'�����)

��)

::�+��$&����1��.H������<=������+�.�B>::�<�?.�=��@�+�<<�5��.�+�$����/���1��.��1��.H������7�&����)5?$��'7���

������.�+�1�'������.�+��1�'��)

Page 17: Aplikacje w Delphi. Przykłady

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 kierunkachw prostokątnym obszarze o wymiarach (0, 0, 200, 200). Wykorzystaj komponent��������� z zakładki System — rysunek 13.6.

Rysunek 13.6.Animacjaniebieskiej kulki

Rozwiązanie

Na formularzu umieść komponent ��������� i ��� . Komponent �������� jest stoso-wany do wyświetlania (kreślenia) grafiki, która ma być ograniczona do obszaru prosto-kątnego. Korzystając z komponentu ���������, programista nie musi kontrolować, czyobszar ten nie został przekroczony — jeśli narysowany obiekt nie mieści się wewnątrzkomponentu ���������, to zostaje obcięty. Dodatkowo zawarty w nim rysunek możemyprzesuwać po formularzu, zmieniając właściwości � +� i ��� tego komponentu. Proce-dura przedstawiona poniżej działa poprawnie z komponentem ��������� 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ę) powpisaniu w procedurze obsługi instrukcji �� $#*���� �,-�" . (wcześniej należyzegar zablokować w okienku Inspektora Obiektów — *���� �-�" ).

{J+}$����/���1��.����.����.��7�&����)5?$��'����������(�� '�����������(�� '������/��/����(�� '������/��/�����(�� '7���

����(��&���������� ������������7���

������::$<��<$<���+�����/@�������������� ������$�8���'������%$���(��������������'�����::�5��$<���=�+AD�<B&��$���������9/��/'����������9/��/�'�����::����=����/�D��=�/=�&��$����5�/������::��A=��.� �+�/�������������� ������$����'�����I���+��F ���F ��9 ���9 �'������%��S�T����&������7���

�������/��/�� 9%��&�.�3�'

Page 18: Aplikacje w Delphi. Przykłady

162 Aplikacje w Delphi. Przykłady

�������/��/��F/��/'�������)

������%���S�T����&������7�����������/��/��� 9%��&�.�3�'��������/��/���F/��/�'�������'������%��M� ���&��/��/��F/��/'������%���M� ���&��/��/���F/��/�'�����'��::=�����'

Przykład 13.16.

Umieść na formularzu komponent typu ��"���� i ����� . 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 ���� 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ść ���� � na +��� .

Rozwiązanie

Wstaw komponenty ��"���� i ����� . W procedurze obsługi kliknięcia przycisku wpisz

instrukcje, jak poniżej:

$����/���1��.��������� ��$/�7�&����)5?$��'7���

����%�7��+��7��+��� ��$���&��7��+��7��+����%$���(�������7��+��7��+���� ��$�'���1��.��-$��� �����������'��)

W celu sprawdzenia klawiszy strzałek wykorzystaj zdarzenie ��/ 01�2� dla formularza.

Treść procedury obsługi tego zdarzenia przedstawiono poniżej:

$����/���1��.��1��.��H�=��7�&����)5?$�'���������8��&'��7��C����7��C�7����'7���

����������%���/V%�(����7��+��4C���7��+��4C�9��'���/V4C�����7��+��4C���7��+��4C�F��'���/VW+������7��+����+��7��+����+F��'���/VH�=��7��+����+��7��+����+9��'����)

��'