Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
Delphi 6. Vademecum
profesjonalisty. Tom I
Autorzy: Xavier Pacheco, Steve Teixeira
Tumaczenie: Andrzej Grayski
ISBN: 83-7197-690-9
Tytu oryginau: Delphi 6 Developer's Guide
Format: B5, stron: okoo 620
Zawiera CD-ROM
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
"
"
"
"
"
"
"
"
!
Rodzina produktw Delphi ....................................................................................................21
Delphi co i dlaczego?........................................................................................................23
Komfort wizualnego projektowania aplikacji .................................................................24
Szybko kompilacji kontra efektywno generowanego kodu ......................................25
Moliwoci jzyka programowania w kontekcie jego zoonoci.................................26
Elastyczno i skalowalno architektury baz danych ....................................................27
Wzorce projektowania i uytkowania wymuszone przez struktur rodowiska .............27
Nieco historii..........................................................................................................................28
Delphi 1 ...........................................................................................................................28
Delphi 2 ...........................................................................................................................29
Delphi 3 ...........................................................................................................................30
Delphi 4 ...........................................................................................................................31
Delphi 5 ...........................................................................................................................31
Delphi 6 ...........................................................................................................................32
rodowisko zintegrowane Delphi 6 .......................................................................................32
Okno gwne....................................................................................................................32
Projektant formularzy ......................................................................................................34
Inspektor obiektw ..........................................................................................................35
Edytor kodu .....................................................................................................................36
Eksplorator kodu..............................................................................................................36
Hierarchia obiektw ........................................................................................................36
Kod rdowy projektu ..........................................................................................................36
Prosta aplikacja ......................................................................................................................38
Jeszcze o zdarzeniach... .........................................................................................................40
Niekontraktowy charakter obsugi zdarze .....................................................................40
Prototypowanie kodu .............................................................................................................41
Rozbudowa zestawu komponentw i konfigurowalne rodowisko.......................................42
Top 10 gorca dziesitka IDE...........................................................................................42
1. Uzupenianie klas ........................................................................................................42
2. Udostpnianie deklaracji symbolu...............................................................................43
3. Od deklaracji do definicji ............................................................................................43
4. Dokowanie...................................................................................................................43
5. Object Browser ............................................................................................................44
6. GUID ...........................................................................................................................44
7. Wyrnianie skadni plikw C++................................................................................44
8. Znaczniki To Do......................................................................................................45
9. Meneder projektw ....................................................................................................45
10. Code Insight...............................................................................................................45
Podsumowanie .......................................................................................................................46
!
$'(
Natura komunikatw............................................................................................................151
Typy komunikatw ..............................................................................................................152
Jak funkcjonuje system komunikatw Windows?...............................................................152
Obsuga komunikatw w kategoriach Delphi......................................................................154
Struktury specyficzne dla rnych typw komunikatw ..............................................155
Przetwarzanie komunikatw................................................................................................155
Kontraktowy charakter obsugi komunikatw ..............................................................157
Zwrotne przekazywanie wyniku obsugi komunikatu...................................................158
Zdarzenie OnMessage klasy TApplication....................................................................159
Wysyanie wasnych komunikatw .....................................................................................159
Metoda Perform() ..........................................................................................................160
Funkcje SendMessage() i PostMessage() ......................................................................160
Komunikaty niestandardowe ...............................................................................................160
Komunikaty powiadamiajce ........................................................................................161
Wewntrzne komunikaty VCL......................................................................................161
Komunikaty definiowane przez uytkownika ...............................................................163
Anatomia systemu komunikatw VCL................................................................................165
Zwizek komunikatw ze zdarzeniami Delphi....................................................................174
Podsumowanie .....................................................................................................................174
&
)* +
Zaoenia oglne..................................................................................................................179
Ktra wersja?.................................................................................................................179
Moduy, komponenty i pakiety......................................................................................181
Zmiany w rodowisku IDE............................................................................................181
Zgodno pomidzy Delphi i Kyliksem ..............................................................................182
Nie w Linuksie...............................................................................................................183
Rnice midzy kompilatorami.....................................................................................183
Indywidualne cechy platformy systemowej ..................................................................184
Nowoci Delphi 6 ................................................................................................................184
Definiowalne typy wariantowe......................................................................................185
Jawne wartociowanie elementw typu wyliczeniowego .............................................185
Dyrektywa $IF...............................................................................................................185
Moliwa niezgodno plikw *.DFM ...........................................................................185
%, !
Natura wtkw .....................................................................................................................211
Rodzaje wielozadaniowoci ..........................................................................................211
Do czego moe si przyda wielowtkowo?..............................................................212
Wielowtkowo a komponenty VCL...........................................................................212
Bdne wykorzystanie wielowtkowoci.......................................................................213
Klasa TThread......................................................................................................................213
Obiekty wtkw a zmienne ...........................................................................................216
Koczenie wtku ...........................................................................................................216
Synchroniczne wykorzystywanie komponentw VCL .................................................218
Przykadowa aplikacja wielowtkowa...........................................................................221
Priorytety i szeregowanie wtkw.................................................................................222
Zawieszanie i wznawianie wtkw ...............................................................................225
Pomiar czasu w ramach wtku ......................................................................................225
Wspdziaanie wtkw aplikacji ........................................................................................228
Pami lokalna wtku....................................................................................................228
Synchronizacja wtkw.................................................................................................232
Przykad zastosowania wielowtkowoci: zaawansowane wyszukiwanie tekstu ...............244
Interfejs uytkownika ....................................................................................................245
Proces przeszukiwania...................................................................................................251
Zmiana priorytetu wtku przeszukujcego....................................................................256
Wielowtkowy dostp do BDE............................................................................................257
-
.$ // !
Czym w istocie jest biblioteka DLL ....................................................................................275
Bazowy adres adowania moduu ..................................................................................276
Nieco terminologii.....................................................................................................277
czenie statyczne kontra czenie dynamiczne..................................................................278
Korzyci pynce z uywania DLL......................................................................................279
Wspdzielenie kodu, zasobw i danych przez wiele aplikacji.....................................279
Ukrycie szczegw implementacyjnych ......................................................................280
Tworzenie i wykorzystywanie bibliotek DLL .....................................................................281
Prosty przykad poznaj si swych pienidzy ...........................................................281
Formularze modalne w bibliotekach DLL.....................................................................283
Formularze niemodalne w bibliotekach DLL................................................................285
Wykorzystywanie bibliotek DLL w aplikacjach Delphi .....................................................287
Automatyczne adowanie biblioteki DLL .....................................................................287
adowanie biblioteki DLL na danie ..........................................................................289
Procedura inicjujco-koczca biblioteki DLL ...................................................................291
Definiowanie procedury inicjujco-koczcej ..............................................................291
Obsuga wyjtkw w bibliotekach DLL ..............................................................................296
Wyjtki a klauzula Safecall ...........................................................................................297
Funkcje zwrotne...................................................................................................................297
Dziaanie funkcji zwrotnej.............................................................................................300
Specyficzne wywietlanie elementw listy ...................................................................301
Wywoywanie funkcji zwrotnych z bibliotek DLL .......................................................301
Wspdzielenie danych biblioteki DLL przez rne procesy ..............................................303
Tworzenie bibliotek DLL z pamici dzielon .............................................................304
Dzielenie globalnych danych biblioteki przez aplikacje ...............................................307
Eksportowanie obiektw z bibliotek DLL...........................................................................310
Podsumowanie .....................................................................................................................314
.
Typy baz danych ..................................................................................................................317
Architektura bazy danych ....................................................................................................318
Poczenia z serwerami baz danych.....................................................................................318
Zbiory danych ......................................................................................................................319
Otwieranie i zamykanie zbioru danych .........................................................................320
Nawigowanie wrd rekordw zbioru danych ..............................................................323
Manipulowanie zawartoci zbioru danych ..................................................................326
Pola rekordu bazy danych....................................................................................................331
Wartoci pl...................................................................................................................331
Typy pl.........................................................................................................................332
Nazwy i numery pl ......................................................................................................332
Operowanie zawartoci pl..........................................................................................333
Edytor pl ......................................................................................................................334
Pola typu BLOB ............................................................................................................340
Filtrowanie danych...............................................................................................................345
Przeszukiwanie zbiorw danych..........................................................................................346
FindFirst() i FindNext() .................................................................................................347
Lokalizowanie rekordu za pomoc metody Locate() ....................................................347
Przeszukiwanie tabeli za pomoc indeksw..................................................................348
0
) %$
,
$12
-
Specyfika technologii dbExpress.........................................................................................363
Jednokierunkowe zbiory danych tylko do odczytu .......................................................363
dbExpress kontra BDE ..................................................................................................364
dbExpress a aplikacje midzyplatformowe ...................................................................364
Komponenty dbExpress .......................................................................................................364
TSQLConnection...........................................................................................................364
TSQLDataSet.................................................................................................................367
Komponenty kompatybilne ...........................................................................................371
TSQLMonitor ................................................................................................................372
Edytowalne, dwukierunkowe zbiory danych dbExpress .....................................................372
TSQLClientDataSet.......................................................................................................372
Realizacja aplikacji dbExpress ............................................................................................373
Podsumowanie .....................................................................................................................373
+
) %$
,$34
Strategia uniwersalnego dostpu do danych ........................................................................375
OLE DB, ADO i ODBC w zarysie ......................................................................................375
Wykorzystanie technologii dbGo for ADO .........................................................................376
Ustanawianie poczenia z baz danych za pomoc dostawcy OLE DB ......................376
Przykadowa baza danych .............................................................................................378
Komponenty dbGo for ADO ...............................................................................................378
Przetwarzanie transakcyjne..................................................................................................384
Podsumowanie .....................................................................................................................386
! :
' &0+
Komponenty pseudowizualne..............................................................................................489
Niestandardowe podpowiedzi kontekstowe ..................................................................489
Animowane komponenty .....................................................................................................493
Komponent TddgMarquee.............................................................................................494
Testowanie komponentu TddgMarquee ........................................................................504
Tworzenie edytorw waciwoci........................................................................................506
Definiowanie nowej klasy edytora.......................................................................................506
Edycja waciwoci w postaci linii tekstu .....................................................................508
Rejestracja nowego edytora waciwoci ......................................................................512
Edycja waciwoci za pomoc okna dialogowego.......................................................512
Edytory komponentw.........................................................................................................516
TComponentEditor ........................................................................................................516
TDefaultEditor...............................................................................................................517
Przykad edycji komponentu .........................................................................................517
Rejestracja edytora komponentu ...................................................................................519
Przechowywanie w strumieniach niepublikowanych danych komponentu.........................520
Okrelenie strumieniowalnego charakteru waciwoci................................................520
Kategoryzacja waciwoci..................................................................................................530
Klasy kategorii waciwoci ..........................................................................................531
Kolekcje komponentw klasy TCollection i TCollectionItem .......................................535
Przykadowy element kolekcji klasa TRunBtnItem .................................................537
TRunButtons kolekcja komponentu .........................................................................537
Implementacja wsppraca kolekcji i jej elementw
z komponentem macierzystym ...................................................................................538
Edycja kolekcji i jej elementw w dialogowym edytorze waciwoci ........................545
Podsumowanie .....................................................................................................................550
;#4
CLX co to jest? ...............................................................................................................551
Architektura CLX ................................................................................................................552
Z Windows do Linuksa........................................................................................................555
Nie ma komunikatw.................................................................................................555
Przykadowe komponenty .............................................................................................556
Edytory rodowiskowe CLX ...............................................................................................585
Pakiety .................................................................................................................................589
Konwencje nazewnicze .................................................................................................590
Pakiety wykonywalne....................................................................................................591
Pakiety rodowiskowe ...................................................................................................593
Ikony komponentw ............................................................................................................596
Podsumowanie .....................................................................................................................597
(
$
<' * == -5
< -5
Rozdzia 13.
Trzy poprzednie rozdziay powicone byy architekturze i projektowaniu komponentw VCL, przeznaczonych dla platformy MS Windows. W niniejszym rozdziale zajmiemy si podstawami projektowania komponentw CLX, umoliwiajcych tworzenie
aplikacji zarwno dla Windows, jak i dla Linuksa. Tak si szczliwie skada, i znaczna cz umiejtnoci nabyta podczas projektowania komponentw VCL okae si
przydatna rwnie w odniesieniu do komponentw CLX.
K
z bibliotek czy
, lecz na tzw. widetach1 zawartych w bibliotece
. Do grupy
zaliczaj si komponenty zapewniajce dostp do danych za
pomoc nowej technologii , natomiast nowe, midzyplatformowe oblicze
WebBrokera ucieleniaj komponenty grupy
.
W niniejszym rozdziale skoncentrujemy si gwnie na , ze szczeglnym
uwzgldnieniem tworzenia nowych komponentw na bazie tej architektury. Opiera si
ona (jak ju wczeniej wspominalimy) na bibliotece
(cute) firmy Troll Tech, stanowicej niezalen od konkretnej platformy bibliotek klas C++, realizujcych funkcjonalno widetw skadajcych si na interfejs uytkownika. cilej w chwili
obecnej biblioteka
zawiera elementy charakterystyczne dla rodowisk MS Windows
oraz X Window System, moe wic by wykorzystywana zarwno na potrzeby aplikacji windowsowych, jak i linuksowych; na jej podstawie zrealizowano wanie linuksowy meneder okien KDE.
Biblioteka
nie jest bynajmniej jedyn dostpn midzyplatformow bibliotek klas;
to, i Borland zdecydowa si wanie na ni, wynika z kilku istotnych przyczyn. Po
pierwsze, jej klasy podobne s w duym stopniu do klas komponentw VCL na
przykad ich waciwoci zrealizowane zostay z udziaem metod dostpowych
xxxx/
xxxx, po drugie wykorzystuj podobny do VCL mechanizm powiadamiania
o zdarzeniach (tzw. sygnay). Wreszcie po trzecie jej widety to nic innego jak standardowe kontrolki interfejsu uytkownika, speniajce t sam rol co standardowe
kontrolki Windows. To wszystko pozwolio na stworzenie komponentw biblioteki
CLX przez nadbudowanie pascalowych otoczek wok gotowych widetw zamiast budowania caej architektury od zera.
Jak przed chwil stwierdzilimy, jest grup klas Object Pascala zbudowanych
na bazie funkcjonalnoci widetw biblioteki
co stanowi analogi do komponentw
VCL zbudowanych na bazie standardowych kontrolek Windows i biblioteki Windows
API. Podobiestwo to nie jest bynajmniej przypadkowe, lecz wynika z jednego z celw
projektowych: atwoci przystosowywania istniejcych aplikacji VCL do architektury
CLX. Rysunki 13.1 i 13.2 przedstawiaj hierarchiczn struktur klas w obydwu tych
rodowiskach; przyciemnione prostokty na rysunku 13.1 wyrniaj podstawowe klasy
biblioteki VCL.
Ju na pierwszy rzut oka wida rnic pomidzy obydwiema hierarchiami w architekturze CLX pojawiy si nowe (w stosunku do VCL) klasy, niektre zostay przesunite do innych gazi. Rnice te zaznaczone zostay na rysunku 13.2 za pomoc rozjanionych prostoktw. I tak, na przykad, komponent zegarowy ( ) nie wywodzi
si ju bezporednio z klasy !!
, lecz z nowej klasy "!!!
, stanowicej klas bazow do obsugi wszystkich tych przypadkw, gdy komponent niewizualny wymaga dostpu do uchwytu (handle) jakiej kontrolki
. Innym przykadem jest
etykieta , nie bdca ju kontrolk graficzn, lecz wywodzca si z klasy #
!
, ktra wykorzystuje rnorodne moliwoci ksztatowania obrzea widetw
.
1
To spolszczona posta angielskiego terminu widget, ktry jest zlepkiem sw Visual Gadget przyp. tum.
Hierarchia klas VCL
$
K
Hierarchia klas CLX
Na szczcie rnice przedstawione na rysunku 13.2 nie maj zbyt duego znaczenia
dla twrcw aplikacji, poniewa wikszo komponentw VCL posiada na gruncie
CLX identycznie nazwane odpowiedniki. Nie maj jednak takiego szczcia twrcy
nowych komponentw zmiany w hierarchii klas maj dla nich znaczenie zasadnicze.
Struktur hierarchii klas mona atwo zobaczy za pomoc przegldarki obiektw
(Object Browser) w Delphi 6 i w Kyliksie; jednak ze wzgldu na synonim $!!
,
uzyskamy dwie identyczne hierarchie (dla $%
!
i $!!
).
Pomidzy VCL i CLX istnieje jeszcze wicej podobiestw, ktrych nie sposb
uwzgldni na przedstawionych rysunkach. Na przykad znane z VCL ptno (!&)
ma w CLX niemal identyczn natur i wykorzystywane jest w bardzo zbliony sposb,
Linux (a raczej podsystem /$!0) nie implementuje typowego dla Windows mechanizmu komunikatw; w efekcie nie do zaakceptowania jest w Kyliksie kod rdowy
%
K
W niniejszym punkcie przyjrzymy si nieco dokadniej przykadom transformacji komponentw VCL na rwnowane komponenty CLX. Na pocztek zajmiemy si popularnym spinerem to pomocniczy komponent wsppracujcy najczciej z polem
edycyjnym, dokonujcy jego automatycznej inkrementacji lub dekrementacji; realizuje
on wiele interesujcych mechanizmw (jak specyficzne rysowanie), wspprac z klawiatur i mysz, przyjmowanie i utrat skupienia (focus) itp.
Trzy kolejne komponenty to pochodne bazowego spinera. Pierwszy z nich wzbogacony
jest o obsug myszy i wywietlanie specyficznych kursorw ju na etapie projektowania, drugi realizuje wspprac z list obrazkw (3%
), trzeci natomiast wsppracuje z kontrolk reprezentujc pole bazy danych.
Wszystkie prezentowane w tym rozdziale moduy nadaj si do wykorzystania zarwno
w Delphi 6, jak i w Kyliksie.
Rysunek 13.3 przedstawia trzy egzemplarze komponentu %!! na formularzu
aplikacji CLX. W odrnieniu od pionowo uoonych strzaek, charakterystycznych dla
windowsowego spinera, komponent ten posiada odpowiednie przyciski w ukadzie poziomym: inkrementujcy i dekrementujcy.
Komponent
TddgSpinner
pomocny przy
wprowadzaniu
liczb cakowitych
Wydruk 13.1 przedstawia kompletny kod rdowy moduu %! implementujcego komponent %!!. Podobnie jak spiner windowsowy, wywodzi si on
z klasy
!
tyle e w tym przypadku jest to klasa CLX i komponent moe by uywany zarwno w Windows, jak i pod Linuksem.
&
!" #
"
!"
! $%
& '#
!"
#
()*
+,
!""-# $"
". "
'"+!
-/01123*
4
5
."
6
7- "5
&8
9
:6 7- "
;
< 5
8(
=
&:
>(5
?@
"&
AB
"5 CA<
5
@D -
A=
(.
"5
"&
(
@
EE>
;CA<
5
;<
"
A<
5
;=
A5
;=
9 -A<
5
;:
=
F
A=
5
;>=
F
A=
5
EE9G
"
";B
-
A .?@
5
;B
-
A
?@
5
&8
EEC,HA
#
"
!+
EEB
9
"9:7F&@:A9:7F(5
'
K
I7F5
EEB
":?
-
&@:A:(5
"I?
-
5
8(
"
">
5@ 5
"F =
&=
A=
5F
A=
5
=
A3"(5@ 5
EE:
"F"C&D
A<
(5@ 5
"<
"C&D
A<
(5@ 5
.
"
>
A>
5
.
"
:B@=
&=
A=
(A=
5
EEC,HA?
-
+
+
"
!
EE"I?
-
EE
"?
-
5@ 5
EE J
"-
5
"5
.
"
-
& CA<
(A=
5
"5
EE.
J
"F?
5@ 5
"F?K 5@ 5
"*F
&@*A95- .A- .(5@ 5
":F
&=
A:=
5- .A- .5
LA<
(5@ 5
":6&=
A:=
5- .A- .5
LA<
(5@ 5
&8
EEC,HA
#"
.
"
F:9-F
&- .A- .5
:>A>
(A=
5@ 5
.
"
F:9-6&- .A- .5
:>A>
(A=
5@ 5
8(
.
"
F:9-F
&- .A- .5
"
:>A>
(A=
5@ 5
.
"
F:9-6&- .A- .5
"
:>A>
(A=
5@ 5
EE:+ $" $"
"=
&CA(5@ 5
"=
9 -&CA<
(5@ 5
"C&CA<
(5@ 5
"
?@
;B
-
;B
-
5
EEB "
$" $"
5
&8
F5EEC,HA $" $%
+
8(
F:5
?
5
;
5
N -.2M5
N
K5
N
5
>
- N
5
>:
5
- N
5
B5
.5
C 5
9 -.M15
B
"5
B
FF5
B
FB@5
B
?
F5
B
?
5
B
?K 5
(
%)
K
B
*F
5
B
*>5
B
*65
B
:F
5
B
::@5
B
:65
B
F5
5
4
:
4
4
"
"
)&DB
A
(5
- &DB
(5
EE<
"
"
'
;=
A"=
;"5
;=
9 -A2M5
;CA15
;<
"
A25
;:
=
F
A;5
;>=
F
A;5
EE<
"
"
"
"- $" $"
9 -AM15
N -A2M5
A5
EEC,HA9
'
"
A"9
5
EEC,HA<
*+
+
EE I7F
<
*A<
*OP D Q5
5
:+ $" $" 4
"
)=
&CA(5
.;=
RHC-
;=
AC5
<
@ 5
5
5
"
)=
9 -&CA<
(5
.;=
9 -RHC-
;=
9 -AC5
<
@ 5
.
-
&C(-
;CAC5
<
@ 5
EE9
-
-
5
5
5
5
: !
$
4
"
)>
5
@
3A3"5
LB..A<
5
A
5
B..A<
5EEC,HA
- >
5
-
@
;
A.);
5
>
)A"=
- 5
.?
-
=-)A.)
=-)A"=
;"5
;
)A"=
- 5
5
EE9$ $%
&8
EEC,HAKD
+
KD
&N
I
I(5EE.
"
7F<
8(
3A3"&;=
9 -,21
9 -,;=
9 -O2N -(5
@)3"
&3).3)3)3 -3)=(5
<
.3"&3,2,2(5
A<
&;C(5
LB..A3)O&3)=,3),
@)KN -&(( @05
EEC,HAB "..&
+
.
"
KD
(
B..A3).O&3)3 -,3).,
%
%
K
@)K9 -&(( @05
&8
EEC,HAS J
K3"&
+
.
"
KD
(
K3"&39 - @0LB..(5
8(
K3"&3B..LB..(5
F =
&:
;:
=
F
3"&11;=
9 -N -((5
F =
&>;>=
F
3"&9 -,;=
9 -19 -N -((5
.;"-
=-)A.)5
F ;"3"&3(5
5
5
5
)>
4
"
)F =
&=
A=
5
F
A=
5=
A3"(5
-
@
.F
-
EE
=-)A"=
-
=-)A;=
5
>
)A"=
- 5
3"
&=
).=
)
=
)3 -=
)=(5
.?
-
&8
EE "D" @
"D" @N - -K
>
)A"D" @
5
=-)A"D" @
5
8(
>
)A"D" @=5
=-)A"D" @=5
>
)A"=
- 5
=-)A"=
- 5
5
.=
:
-
EE $ "
!"
3"
&TN - @0,2
;=
9 -,TN - @0O2(5
EE $ "
!"
)F =
4
"
)F?
5
- F?
5
EE
, $
!
EE%
!"!+
3
5
5
"
)F?K 5
- F?K 5
EE
"
, $
!
EE
!%+
!"!
3
5
5
EEC,HA?
-
+
+
EE
"I?
-
"
)?
-
5
- 5
EE$ #
3
5
5
: J4
)
-
B
-
5 '% + #
.
"
!
"!
C)9$%
3
$
.
#
)
4
.
"
)
-
& CA<
(A=
5
@
D -
A=
5
D -
A5
.D
&;B
-
(-
;B
-
&. CD -
(5
3AD -
5
%
%$
K
5
"
)-
5
.D
&;B
-
(-
;B
-
&.(5
5
EE '% + #
#.
! $" $%C
EE
$$
;C
"
)<
"C&D
A<
(5
- 5
:)3A"I9
D 5EE
%
EE
5
8(
"
)*F
&@*A95- .A- .(5
- *F
&*- .(5
EEC,HA
. '
EEU@IU
+
U*IU
"*.
*I.*IF
A
F"C&;<
"
(5
*I6*I3 -A
<
"C&;<
"
(5
5
5
4
.
"
)>
A>
5
):B@=
&=
A=
(A=
5
@
3A3"5
EE
"
"
.=
:
-
3A3"&11;=
9 -N -(
3A3"&9 -,;=
9 -19 -N -(5
EE"
+
"
V
3A><
3"&3>
(5
5
"
):F
&=
A:=
5
- .A- .5LA<
(5
- :F
&=
- .L(5
.
&"F
(-
;"5EE
$
EE "
.&=
.(
&:B@=
&:
(:B@=
&>((-
;:
=
F
A:B@=
&:
(5
;>=
F
A:B@=
&>(5
3
5
5
5
"
):6&=
A:=
5
- .A- .5LA<
(5
- :6&=
- .L(5
.=
.-
<
"C&;<
"
(
.:B@=
&:
(-
)F:9-F
&- .A- .5
"
:>A>
(A=
5
- F:9-F
&- .:>(5
F"C&;<
"
(5
3A5
5
%
%%
K
.
"
- F:9-6&- .:>(5
<
"C&;<
"
(5
3A5
5
)
Jak wida, kod rdowy moduu niewiele rni si od wersji w VCL. Mimo i rnic jest
niewiele, wikszo z nich jest jednak niezwykle istotna.
Po pierwsze, zwr uwag na nazewnictwo moduw:
, !
i ('; pojawi si te nowy modu wsplny dla VCL i CLX.
Po drugie, mimo i deklaracja klasy komponentu niewiele odbiega w swej postaci od
wersji VCL pod wzgldem deklaracji pl i procedur zdarzeniowych nie ma w niej
metod obsugujcych komunikaty, (01
% i '1!(!%). Kontrolka
!
(w CLX) zamiast wysya komunikat '1!(!% przy zmianie jej waciwoci !, wywouje po prostu (dynamiczn) metod !(!%-. tote
do niej przeniesiona zostaa tre wyeliminowanej metody komunikacyjnej.
Podczas tworzenia komponentu czstym problemem jest obsuga klawiszy strzaek (na
klawiaturze); w przypadku komponentu %!! powoduj one zmian reprezentowanej przez komponent wartoci. W bibliotece VCL informacja o zestawie klawiszy obsugiwanych przez kontrolk przekazywana bya za pomoc komunikatu 01
%;
w CLX nie ma komunikatw i trzeba znale rwnowane rozwizanie zastpcze. Tak
si szczliwie skada, i kontrolka $%
!
definiuje w tym celu waciwo
3!
+, ktrej w konstruktorze przypisuje si stosown warto (i poszerza domylny repertuar obsugiwanych klawiszy o klawisze strzaek).
Wynika std praktyczny wniosek, i komponenty VCL uywajce raczej procedur zdarzeniowych (i metod zarzdzajcych zdarzeniami) ni komunikatw atwiej poddaj si
przenoszeniu na platform CLX.
Po trzecie w konstruktorze, oprcz ustawienia waciwoci 3!
+, dokonywana
jest korekta standardowego ustawienia koloru kontrolki. W VCL kontrolka $!!
dziedziczy swj kolor od kontrolki macierzystej (co symbolizuje warto '$!0),
tymczasem w CLX konstruktor klasy $%
!
ustawia kolor kontrolki na '!;
konieczna jest wic zmiana tego koloru na '$!0.
Na pocztku niniejszego rozdziau stwierdzilimy, i umiejtnoci nabyte w trakcie
projektowania komponentw VCL przydadz si w duym stopniu przy projektowaniu
komponentw CLX. Istotnie deklaracje waciwoci, metody dostpowe, a nawet
procedury zdarzeniowe nie rni si zasadniczo od tych uywanych przez komponenty
VCL. Pewnym wyjtkiem w tym wzgldzie jest metoda ,!
-., wymagajca nieco
wicej przerbek.
%&
Pierwsz przyczyn tego stanu rzeczy jest nieobecno w CLX funkcji
6%!-.,
ktra w wersji VCL dokonywaa wyrodkowania wywietlanego tekstu. Funkcja ta wymaga
kontekstu urzdzenia GDI, dostpnego w VCL pod waciwoci !&"! i nieobecnego w CLX, gdzie wspomniana waciwo ma cakiem inne znaczenie wskazuje
na obiekt odpowiedzialny za wywietlanie (painter). Odpowiednie pooenie tekstu mona jednak wyliczy rcznie, za pomoc dostpnych geometrycznych metod ptna.
Kolejna ingerencja zwizana jest z kolorem, w ktrym (domylnie) zostayby wywietlone przyciski. Na obydwu platformach jest to kolor '6'
&
!, jednak w CLX
warto ta utosamiana jest z '6'
&"%(%(
(w module (').
Wszelkie operacje wykonywane na ptnie komponentu CLX poza jego metod
,!
-. musz by poprzedzone wywoaniem metody !&
-.; po
zako1czeniu rysowania naley wywoa metod !&
-..
Ostatnim z nieprzenonych elementw VCL, przysparzajcym czasem mnstwa kopotw, s kody wirtualnych klawiszy &*1xxxx, stanowice cz Windows API. CLX definiuje w ich miejsce cakowicie nowy zestaw staych rozpoczynajcych si od przedrostka
+1. W przypadku naszego komponentu nie jest to jednak duym problemem, ze wzgldu
na ubogi repertuar klawiszy (4) obsugiwanych w sposb specyficzny.
I tak oto uzyskalimy uniwersalny komponent, przydatny zarwno w Delphi 6, jak i w rodowisku Kyliksa. Najbardziej spektakularnym aspektem tej uniwersalnoci jest moliwo uycia tego samego kodu rdowego w obydwu rodowiskach!
Jak wida, przenoszenie komponentu do rodowiska CLX nie musi by wcale trudne
(chocia odkrycie waciwoci 3!
+ wymagao nieco wysiku). Kiedy jednak przystpimy do rozbudowy komponentu CLX, rnice pomidzy VCL i CLX stan si bardzo wyrane.
Wydruk 13.2 przedstawia kod rdowy komponentu %%!!, pochodnego
w stosunku do %!!. Na rysunku 13.4 wida wyranie, jak kursor myszy zmienia swj wygld, gdy znajdzie si nad jednym z przyciskw; rysunek 13.5 pokazuje
natomiast zmian reprezentowanej wartoci na etapie projektowania (poprzez kliknicie
jednego z przyciskw).
Zmiana wygl*du
kursora wywoana
przez komponent
TddgDesignSpiner
%'
K
Edycja wa-ciwo-ci
komponentu
TddgDesignSpiner
na etapie
projektowania
aplikacji
QddgDsnSpn.Pas kod 'rdowy komponentu TddgDesignSpiner
F
F
!" +
!"
! "
+
" ' ):#
$" $" C
+" "
-/01123*
4
F
5
."
6
5
&8
9
:6 7- "
;
5
8(
F
"&
(
@
EEC,HA"
N.
;-AN5
&8
EEC,HAB'
"
<F?
EE!
"
# C)
EE>
#
". "
C
;-AN5
EEB
9
"9:&@:A9:(5
I5
EEB
":F
N &@:A:F
N (5
"IF
N 5
&8
EEC,HA
' "W3FF
)4EE!"'
!"
8(
;5EEC,HA
EEC,HA .&
.-
.
EE-(
""
EEC,HA>
# "
!
EE
"
= AP1))X08T,2Q.=&
W11WX1W11W11W11WTMW11W11
W11WTMW11W11W11WTMW11W11
W11WTMW11W11W11WT?W11W11
W11WTYW1W11W11WTYWX1W11
W11WTYW0MW11W1XWTYW0TW11
W1TW1W0TW11W1TWT1W1TW11
W10WT1W1TW11W10W11W1TW11
W12W11W1TW11W12W11W1TW11
W11WM1W1MW11W11WT1W1MW11
W11WT1W1MW11W11W01W21W11
W11W01W21W11W11WZ;W;MW11
W11WZ;W;MW11W11WZ;W?MW11
W11WZ;W;MW11W11W11W11W11
W11W11W11W11W11W11W11W11
W11W11W11W11W11W11W11W11
W11W11W11W11W11W11W11W11(5
:AP1))X08T,2Q.=&
W11WX1W11W11W11WZMW11W11
W11WZMW11W11W11WZMW11W11
W11WZMW11W11W11WZ?W11W11
W11WZ;W1W11W11WZ;W;1W11
W11WZ;W;MW11W1XWZ;W;W11
W1ZW;;W;W11W1ZW;;W;W11
W1XW;;W;W11W1XW;;W;W11
W12W;;W;W11W12W;;W;W11
%(
&)
K
W11W;;W;MW11W11WZ;W;MW11
W11WZ;W;MW11W11WX;W;1W11
W11WX;W;1W11W11WZ;W;MW11
W11WZ;W;MW11W11WZ;W?MW11
W11WZ;W;MW11W11W11W11W11
W11W11W11W11W11W11W11W11
W11W11W11W11W11W11W11W11
W11W11W11W11W11W11W11W11(5
4
:F
4
4
"
"F
)&DB
A
(5
@
= = A= N5
:= A= N5
- &DB
(5
&8
EEC,HA9
;-A&N<
"[FF>I=63B3[(5
8(
EEC,HA
"
= = A= I"&X0X0\= ;(5
:= A= I"&X0X0\:;(5
;-AI"&= = := M1(5
.
= I&= = (5
= I&:= (5
5
5
"F
)F5
&8
C,HAIF F
F&;-(5EE
7F<
8(
IF&;-(5
- F5
5
EE
+
" ' J
!
&8
EEC,HA
'
"F
.:B@=
&:
(:B@=
&>(-
&;-(
- 5
5
8(
.:B@=
&:
(:B@=
&>(-
):F
N &@:A
:F
N (5
EEB
!"
+ $" $"
EEC
"! " )
EE7
+
" '
EE $" !
!
+ 2,
F-
EE
"
+ %
+J
EE !
"-!
.:B@=
&:
(:B@=
&>(-
:)3A2
:)3A15
5
8(
.
"
F
)F
?@
&
AB
"N5
?@
A?@
N(A=
5
@
:>A>
5
3A;5
.&
N
(
&?@
I&?@
(
P?@
I:=
>
?@
I:=
3
?@
I:=
F "Q(-
3A
3A;5
5
5
&
&
K
"F
)-
5
@
;A;5
- -
5
EE6
$
!
' $%
EE $" $" C
."F
-
;A7>
;&.(5
&8
EEC,HA;)F
!
F
N
.&;RH
(
&;)F
RH
(-
;)F
): . 5
8(
.&;RH
(
&;)F
NRH
(-
;)F
N): . 5
5
5
)
&
formularzy jest interfejs ukrywajcy si pod waciwoci %! formularza bdcego wacicielem komponentu; w CLX analogiczna waciwo nosi nazw %!"
*. Aby zasygnalizowa zmian zawartoci komponentu, naley wywoa metod 2
8 wspomnianego interfejsu, w ramach obsugi zdarzenia )!(!% robi si to tak
samo w VCL i CLX.
Kolejne rozszerzenie naszego komponentu (ktry nosi teraz nazw %3%
!!)
polega na wyposaeniu go w bitmapy okrelajce wygld obydwu przyciskw. Bitmapy
te stanowi elementy listy typu 3%
(patrz rysunek 13.6) i wywietlane s zamiast
zwykych znakw + i .
Bitmapy nadaj*ce
wygl*d przyciskom
komponentu
TddgImgListSpinner
<
!"
+F
&$
K
<
"&F
(
@
;<A< 5
;<<
KAP2))0Q.<
5
;<-
A-
5
EE9
+
" J
"< -
&
AB
"(5
"
" . "
&D
A
5
B
AB
(5@ 5
"F =
&=
A=
5F
A=
5
=
A3"(5@ 5
""
B..&=
A3"5@A<
(5
"-":
5
EE:+ $" $"
"<&CA< (5@ 5
.
"
7<<
K&><
KA<
(A<
5@ 5
"<<
K&><
KA<
5
CA<
(5@ 5
"
"
"&DB
A
(5@ 5
"F5@ 5
-
<A<
;<
<5
<<
K:
A<
K2
7<<
K
<<
K5
<<
K>A<
K0
7<<
K
<<
K5
5
7- "5EEC,HA:
4
:<
4
4
"
"<
)&DB
A
(5
- &DB
(5
;<-
A-
)5
;<-
)B
-
A< -
5
)F5
;<-
);5
- F5
5
"<
) . "
&D
A
5
B
AB
(5
- . "
&D
B
(5
.&B
3@(
&D
;<(-
.;<<
KP><
KQRHC-
;<<
KP><
KQAC5
<
@ 5
5
5
"<
.;<RH
-
;<)6
3 -
&;<-
(5
;<AC5
.;<RH
-
)< -
&
AB
"(5
.
<-
&
&%
K
-":
5
EE9
6 <
@ "
EE
65
5
5
"<
)-":
5
EE
! $%#" ' $"
EE"! +
.;<)9 -H=
9 --
=
9 -A;<)9 -5
.;<)N -HN --
)F =
&=
A=
5
F
A=
5
=
A3"(5
@
A<
5
-
@
=-)A=
5
>
)A"=
- 5
3"
&=
).=
)
=
)3 -=
)=(5
.=
:
-
EE $ +" U
U
&8
EEC,HA <
#
EE#
$" $" =)
.F
-
;<)F
A"
;<)F
A5
8(
.F
-
;<)=A"=
-
;<)=A"=
;"5
"
B..&=
(5
&8
EEC,HA< )F
;<)F &
@<<
K:
?
(5
8(
;<)F &
@<<
K:
<
?
(5
&&
- F =
&=
F
=
(5
EE $ +" UU
&8
EEC,HA <
#
EE#
$" $" =)
.F
-
;<)F
A"
;<)F
A5
8(
.F
-
;<)=A"=
-
;<)=A"=
;"5
"
B..&=
(5
&8
EEC,HA< )F
;<)F &
@<<
K>?
(5
8(
;<)F &
@<<
K> <
?
(5
- F =
&=
F
=
(5
5
5
5<
)F =
4
"<
)"
B..&=
A3"5
@A<
(5
.;<RH
-
A=
).O&=
)3 -,=
).( @0,
&;<)9 - @0(5
A=
)O&=
)=,=
)( @0,
&;<)N - @0(5
5
5
)
Lista obrazkw 3%
, w VCL stanowica otoczk standardowej kontrolki implementowanej w bibliotece
, w CLX zaimplementowana zostaa w zupenie
inny sposb, za pomoc tzw. prymityww graficznych biblioteki
. T now implementacj zawiera modu 3%
, ktry tym samym zastpi na licie modu
3%
. Nie zmieni si jednak zasadniczo sposb korzystania z listy, ani te nazwa jej
klasy, czego wymiern korzyci jest niezmieniona deklaracja klasy komponentu
(w stosunku do jego wersji VCL). Identyczne s te metody komponentu w obydwu
wersjach, z jednym wszake wyjtkiem.
&'
K
F=
)<
'
<
"-)
-/01123*
4
F=
5
."
6 <
F=F=5
&8
9
:6 7- "
;
<
F=F=5
8(
"&<
(
@
;F
A; F
5EE
+
"EE
+
"
"F-
&
AB
"(5
"6F&
AB
"(5
"D" @-
&
AB
"(5
&8
EEC,HA
'
":?K &@:A:?K (5"I?K 5
":F
N &@:A:F
N (5
"IF
N 5
8(
"
" . "
&D
A
5
B
AB
(5@ 5
"-"; &"
CA
(5@ 5
EE.
!
!"
"-
5@ 5
"*>&@*A-(5@ 5
EEC,HAF?K :?K
"F?K 5@ 5
EEC,HAF
?@
:F
N
.
"
F
?@
&
AB
"N5
?@
A?@
N(A=
5@ 5
EE.
.
!" $" $%C
"F"C&D
A<
(5@ 5
"<
"C&D
A<
(5@ 5
EE+ $" $"
.
"
7; A; 5@ 5
.
"
7F; A
5@ 5
"F; &"
CA
(5@ 5
.
"
7F"AF"5@ 5
"F"&CAF"(5@ 5
.
"
73B
A=
5@ 5
"3B
&CA=
(5@ 5
EE+ !"
"; A;
7; 5
F
A; F
;F
5
"
"
"&DB
A
(5@ 5
"F5@ 5
-
F; A
7F;
F; 5
F"AF"
&(
')
K
7F"
F"5
EE
+
$" !!"
3B
A=
5EEC,HA:
4
:F=
4
4
"
"F=
)&DB
A
(5
- &DB
(5
;F
A; F
)5
EE
.
!"
"- #
!
EE
!
";F
)
A.5
EE!
"
5#
$
EE+!"
# %
;F
)B
F-
AF-
5
;F
)B
6FA6F5
;F
)B
D" @-
AD" @-
5
5
"F=
)F5
;F
);5
;F
A
5
- F5
5
"F=
) . "
&D
A
5
B
AB
(5
- . "
&D
B
(5
.&B
3@(
&;F
RH
(
&D
;F
)F"(-
F"A
5EE$
F"
5
5
.
"
F=
3A;F
); 5
5
.
"
F=
3A;F
); 5
5
"F=
3A;F
)F"5
5
"F=
.;F
)F"RHC-
;F
)F"AC5
EE9
; . "
"
#
EE
!" '
"-#
% +
.
EE
" .CRH
-
)73B
A=
5
3A;F
)3B
5
5
"F=
)3B
&CA=
(5
;F
)3B
AC5
5
'
'
K
"F=
?<
@ ; )&<
@ ; (5
5
5
5
"F=
)-
5
EE
.
!"
#
+
.;F
RH
-
;F
): . 5
- -
5EE7
B
-
5
"F=
- *>&*(5
.*]0Z-
EE"
" $
+?V
;F
)35EE
" $
+"
*A]15EE
! J"
"
5
5
"F=
.3B
;F
)
: .-
EE
#
"-
&8
EEC,HA:= 9
D><.
"
- F"C&D
(5
5
5
"F=
)<
"C&D
A<
(5
.3B
;F
)
: .-
EE
#
"-
&8
EEC,HA:= 9
D><.
"
- <
"C&D
(5
5
5
F=
)F-
#%
"- ' A
2)S
+ $%
!
0)
'
"-!"
"
X)S
+ $%
"T)S
+ #!"
"^)3
"
_)9$" $%F;
4
"F=
)F-
&
AB
"(5
.;F
); RH
-
CA;F
); )D<
5
5
F=
)6F
"
$%
$%
!
"-
"
)9
% $%)
4
"F=
)6F&
AB
"(5
'
'$
K
;F
); )D<
AC5
5
F=
)D" @-
"
"-
)
+
$" $%D" @)
"
"-#
"% $" $"
;F
)D" @
4
"F=
)D" @-
&
AB
"(5
EE
"- G
.&;F
RH
(
;F
)D" @-
EE>'
"
;F
)63"5
K"
;"5EE
'
+
EE "
+
5EE
'
!
5
- 5
5
8(
"F=
)F?K 5
EE>'
"
;F
)63"5
K"
;"5EE
'
+
EE "
+
5EE
'
!
5
- 5
5
&8
EEC,HAF
?@
:F
N
):F
N &@:A:F
N (5
EE
# %# $%"
$"
EE
# ! +
"
$" !
EE
"- "
:)3A15
5
8(
.
"
F=
)F
?@
&
AB
"N5
?@
A?@
N(A=
5
EE
# %# $%"
$"
EE
# ! +
"
$" !
EE
"- "
3A;5
5
)
'