SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
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
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
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
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
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.
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).
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
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
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.
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
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
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.
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
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.
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
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
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
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

Contenu connexe

Plus de Wydawnictwo Helion

Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIWydawnictwo Helion
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningWydawnictwo Helion
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykWydawnictwo Helion
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaWydawnictwo Helion
 
Serwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieSerwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieWydawnictwo Helion
 
USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++Wydawnictwo Helion
 
Microsoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga ekspertaMicrosoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga ekspertaWydawnictwo Helion
 
Rewizor GT. Prowadzenie ewidencji księgowej
Rewizor GT. Prowadzenie ewidencji księgowejRewizor GT. Prowadzenie ewidencji księgowej
Rewizor GT. Prowadzenie ewidencji księgowejWydawnictwo Helion
 
Fotografia cyfrowa. Poradnik bez kantów
Fotografia cyfrowa. Poradnik bez kantówFotografia cyfrowa. Poradnik bez kantów
Fotografia cyfrowa. Poradnik bez kantówWydawnictwo Helion
 
Windows Vista. Naprawa i optymalizacja. Ćwiczenia praktyczne
Windows Vista. Naprawa i optymalizacja. Ćwiczenia praktyczneWindows Vista. Naprawa i optymalizacja. Ćwiczenia praktyczne
Windows Vista. Naprawa i optymalizacja. Ćwiczenia praktyczneWydawnictwo Helion
 
FreeBSD 7. Instalacja i konfiguracja
FreeBSD 7. Instalacja i konfiguracjaFreeBSD 7. Instalacja i konfiguracja
FreeBSD 7. Instalacja i konfiguracjaWydawnictwo Helion
 

Plus de Wydawnictwo Helion (20)

Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Java. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie IIJava. Efektywne programowanie. Wydanie II
Java. Efektywne programowanie. Wydanie II
 
JavaScript. Pierwsze starcie
JavaScript. Pierwsze starcieJavaScript. Pierwsze starcie
JavaScript. Pierwsze starcie
 
Ajax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny treningAjax, JavaScript i PHP. Intensywny trening
Ajax, JavaScript i PHP. Intensywny trening
 
PowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktykPowerPoint 2007 PL. Seria praktyk
PowerPoint 2007 PL. Seria praktyk
 
Excel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktykExcel 2007 PL. Seria praktyk
Excel 2007 PL. Seria praktyk
 
Access 2007 PL. Seria praktyk
Access 2007 PL. Seria praktykAccess 2007 PL. Seria praktyk
Access 2007 PL. Seria praktyk
 
Word 2007 PL. Seria praktyk
Word 2007 PL. Seria praktykWord 2007 PL. Seria praktyk
Word 2007 PL. Seria praktyk
 
Serwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacjaSerwisy społecznościowe. Budowa, administracja i moderacja
Serwisy społecznościowe. Budowa, administracja i moderacja
 
AutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PLAutoCAD 2008 i 2008 PL
AutoCAD 2008 i 2008 PL
 
Bazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcieBazy danych. Pierwsze starcie
Bazy danych. Pierwsze starcie
 
Inventor. Pierwsze kroki
Inventor. Pierwsze krokiInventor. Pierwsze kroki
Inventor. Pierwsze kroki
 
Serwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanieSerwer SQL 2008. Administracja i programowanie
Serwer SQL 2008. Administracja i programowanie
 
USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++USB. Praktyczne programowanie z Windows API w C++
USB. Praktyczne programowanie z Windows API w C++
 
Microsoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga ekspertaMicrosoft Visual Studio 2008. Księga eksperta
Microsoft Visual Studio 2008. Księga eksperta
 
Rewizor GT. Prowadzenie ewidencji księgowej
Rewizor GT. Prowadzenie ewidencji księgowejRewizor GT. Prowadzenie ewidencji księgowej
Rewizor GT. Prowadzenie ewidencji księgowej
 
Fotografia cyfrowa. Poradnik bez kantów
Fotografia cyfrowa. Poradnik bez kantówFotografia cyfrowa. Poradnik bez kantów
Fotografia cyfrowa. Poradnik bez kantów
 
Windows Vista. Naprawa i optymalizacja. Ćwiczenia praktyczne
Windows Vista. Naprawa i optymalizacja. Ćwiczenia praktyczneWindows Vista. Naprawa i optymalizacja. Ćwiczenia praktyczne
Windows Vista. Naprawa i optymalizacja. Ćwiczenia praktyczne
 
JavaScript. Praktyczny kurs
JavaScript. Praktyczny kursJavaScript. Praktyczny kurs
JavaScript. Praktyczny kurs
 
FreeBSD 7. Instalacja i konfiguracja
FreeBSD 7. Instalacja i konfiguracjaFreeBSD 7. Instalacja i konfiguracja
FreeBSD 7. Instalacja i konfiguracja
 

Aplikacje w Delphi. Przykłady

  • 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