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
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Kylix. Vademecum
profesjonalisty
Autorzy: Charles Calvert, Marjorie Calvert,
John Kaster, Bob Swart
Tumaczenie: Jakub Mirek (rozdz. 1 10, 12 21),
Andrzej Grayski (rozdz. 11)
ISBN: 83-7197-701-8
Tytu oryginau: Kylix Developer
Format: B5, stron: 808
Stworzenie przez firm Borland Kyliksa, linuksowego odpowiednika popularnego Delphi,
to jeden z kamieni milowych w rozwoju tego systemu operacyjnego. Programici
piszcy aplikacje dziaajce w systemie Linux otrzymali zintegrowane rodowisko typu
RAD, oparte na sprawdzonym jzyku ObjectPascal, umoliwiajce programowanie
wizualne. Ich praca staa si odtd szybsza i bardziej efektywna.
Ksika Kylix. Vademecum profesjonalisty to kompletny przewodnik po Kyliksie
zawierajcy zarwno informacje o rodowisku programistycznym, jak te peny opis
jzyka ObjectPascal i bibliotek CLX. Nie zabrako rwnie prezentacji systemu Linux
i jego specyficznych waciwoci, ktra moe przyda si osobom znajcym ju Delphi
i rozpoczynajcym prac w nowym systemie operacyjnym.
Ksika podzielona jest na pi czci:
1. Prezentacja Delphi i Linuksa podstawy rodowiska RAD, opis ObjectPascala,
programowanie obiektowe, rodowisko X-Window
2. Opis biblioteki CLX architektura CLX, palety, tworzenie komponentw,
programowanie grafiki w Kyliksie
3. Programowanie systemowe w Linuksie aplikacje konsolowe, procesy i wtki
4. Programowanie bazodanowe w Kyliksie DataCLX, sterowniki dbExpress,
tworzenie przykadowej aplikacji
5. Tworzenie aplikacji WWW serwer Apache, komponenty WebBroker
Niezalenie od tego, czy znasz ju Delphi i chcesz przenie swoje umiejtnoci do
rodowiska Linux, czy te przeciwnie, znasz dobrze Linuksa i pragniesz szybko tworzy
zaawansowane aplikacje, znalaze wanie waciwy podrcznik.
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
5RKUVTGEK
IDE Kyliksa ...........................................................................................................................33
Plan ataku ........................................................................................................................34
Pierwsze spojrzenie na IDE.............................................................................................35
Menu ......................................................................................................................................36
Klawisze skrtw w menu...............................................................................................36
Menu podrczne ..............................................................................................................37
Dodawanie nowych narzdzi do menu............................................................................37
Paski narzdzi ..................................................................................................................38
Programowanie wizualne.......................................................................................................39
Paleta komponentw........................................................................................................42
O pakietach ......................................................................................................................43
Uywanie Projektanta formularzy ...................................................................................44
Rozmieszczanie komponentw .......................................................................................45
Inspektor Obiektw .........................................................................................................46
Dostrajanie Inspektora obiektw .....................................................................................47
Edytowanie pliku xfm .....................................................................................................48
Ograniczenia i zakotwiczenia..........................................................................................50
Porzdek tabulatora .........................................................................................................52
Inspektor Obiektw i zdarzenia.......................................................................................52
rdo moduu Kyliksa..........................................................................................................53
Interfejs moduu Kyliksa .................................................................................................55
Implementacja moduu w Kyliksie..................................................................................57
Teatr tajemnic: Gdzie podziaa si metoda FormCreate?................................................59
Pliki rdowe Pascala ...........................................................................................................59
Pliki projektu Delphi .......................................................................................................60
Moduy.............................................................................................................................60
Punkty wejcia programw w Pascalu ............................................................................61
Klauzula uses i bdne koa odwoa ..............................................................................62
Kompilacja w Kyliksie ..........................................................................................................64
Praca z pojemnikami (Containers).........................................................................................65
Program PanelDesign ......................................................................................................67
!!"# $
Zdefiniowanie poj: instrukcja i wyraenie .........................................................................77
Wyraenia........................................................................................................................78
Instrukcje .........................................................................................................................78
Instrukcja warunku: if ............................................................................................................80
Instrukcja wyboru: case .........................................................................................................82
Ptle for..................................................................................................................................84
Instrukcja while......................................................................................................................86
Instrukcja repeat.....................................................................................................................89
Ostatnie uwagi na temat ptli i rozgazie.....................................................................91
Sw kilka o operatorach .......................................................................................................91
Operator podstawienia.....................................................................................................91
Operator dzielenia............................................................................................................91
Operatory boolowskie i logiczne.....................................................................................92
Operatory relacji ..............................................................................................................93
Pobranie adresu zmiennej................................................................................................94
Operatory w arytmetyce acuchw i wskanikw.........................................................94
Ostatnie uwagi na temat operatorw ...............................................................................95
Rekurencja .............................................................................................................................95
Silnia................................................................................................................................96
Cigi Fibonacciego ..........................................................................................................98
Rekursywne rysowanie....................................................................................................99
# %
Zawarto tego rozdziau .....................................................................................................101
Typy cakowitoliczbowe i zmiennoprzecinkowe ................................................................102
Typy porzdkowe ..........................................................................................................103
Procedury obsugujce liczby porzdkowe ...................................................................105
Typy wyliczeniowe........................................................................................................107
Typy zmiennoprzecinkowe............................................................................................108
acuchy znakowe w Pascalu .............................................................................................114
acuchy typu ShortString............................................................................................116
acuchy typu AnsiString .............................................................................................117
acuchy typu PChar ....................................................................................................120
acuchy typu WideString............................................................................................121
Rzutowanie typw ...............................................................................................................122
Operatory as, if i parametr Sender.................................................................................122
Tablice .................................................................................................................................124
Stae tablicowe...............................................................................................................125
Tablice dynamiczne i tablice obiektw .........................................................................126
Sprawdzaj swoje tablice wcz Range Checking .....................................................130
Rekordy................................................................................................................................131
Rekordy i instrukcja with ..............................................................................................132
Rekordy wariantowe......................................................................................................132
Wskaniki ............................................................................................................................136
Praca ze wskanikami do obiektw...............................................................................138
Wskaniki, konstruktory i destruktory ..........................................................................141
Metody wirtualne i dyrektywa override ........................................................................142
Czego nie znajdziesz w Object Pascalu ...............................................................................143
&
'#"($" &
Model obiektu w Kyliksie....................................................................................................145
Gdzie zadeklarowa obiekt............................................................................................146
Zakres widzialnoci w klasie.........................................................................................147
Zakres widzialnoci w klasach wzajemnie si do siebie odwoujcych........................148
Spis treci
Deklarowanie metod......................................................................................................149
Model dziedziczenia w Object Pascalu: virtual i override ............................................150
Uycie w deklaracji dyrektywy dynamic zamiast virtual..............................................151
Wywoywanie przodka przedefiniowanej metody: inherited........................................154
Dyrektywa abstract ........................................................................................................155
Dyrektywa overload ......................................................................................................156
Tworzenie i zwalnianie instancji klasy..........................................................................157
Metody klasowe.............................................................................................................157
Interfejsy ..............................................................................................................................158
Typ interface..................................................................................................................160
Interfejs nie jest klas!...................................................................................................161
Nie mona bezporednio implementowa interfejsu.....................................................161
Uycie klasy do zaimplementowania interfejsu ............................................................162
Wywoywanie metod interfejsu.....................................................................................165
Niszczenie interfejsw...................................................................................................167
Wiele interfejsw w jednym obiekcie ...........................................................................169
Klauzula wyboru metody...............................................................................................172
Deklaracja IInterface .....................................................................................................173
Interfejsy w teorii...........................................................................................................177
Dlaczego warto uywa interfejsw..............................................................................178
Pielgnacja i uaktualnianie interfejsu ............................................................................180
Typ wariantowy ...................................................................................................................181
RTTI i typy zmiennoprzecinkowe .......................................................................................188
Ramki...................................................................................................................................194
Tworzenie ramek ...........................................................................................................195
Wielokrotne uycie ramek.............................................................................................197
Kompilacja z linii polece ...................................................................................................198
)"' %
Edytor kodu rdowego i inne narzdzia ...........................................................................201
Kilka sw o edytorze i debuggerze.....................................................................................201
Wpywanie na wizualne narzdzia z poziomu edytora .................................................202
Meneder projektu ...............................................................................................................205
Eksplorator kodu............................................................................................................207
Dostosowywanie wygldu eksploratora kodu ...............................................................210
Generowanie kodu: kompletowanie klas w edytorze i eksploratorze ...........................211
Przegldarka.........................................................................................................................216
Lista To-Do..........................................................................................................................218
Okna narzdziowe .........................................................................................................220
Zapamitanie pulpitu i pulpitu ledzenia.......................................................................222
Magiczne narzdzia: Code Insight ...................................................................................222
Cud kompletowania kodu ..........................................................................................223
Cud wgldu Parameter Insight..............................................................................224
Code Insight: przegldanie swojego kodu.....................................................................225
Stosowanie szablonw kodu zwiksza szybko pisania programw...........................226
Uywanie debuggera............................................................................................................228
Krokowe przechodzenie kodu .......................................................................................229
Kod, z ktrym debugger sobie nie poradzi: optymalizacje ...........................................231
Kod, przez ktry nie mona przej: Konsolidator .......................................................232
Podgldanie kodu w oknie Watch List ..........................................................................233
Badanie zmiennej ..........................................................................................................234
Praca z punktami wstrzymania ......................................................................................235
Uywanie wyjtkw do ulepszenia swojego kodu ..............................................................237
Deklarowanie wasnych klas wyjtkw ........................................................................238
Klauzula finally i ponowne zgaszanie wyjtku ............................................................239
*
+#,# *
rodowisko systemu Linux w skrcie .................................................................................262
rodowisko graficzne w Linuksie........................................................................................262
Anatomia rodowiska graficznego ................................................................................264
Struktura systemu X Window..............................................................................................265
Historia systemu X Window..........................................................................................265
Nazwa systemu X Window ...........................................................................................265
Czym jest system X Window?.......................................................................................265
Sie i model X klienta/serwera......................................................................................266
Wski kana pomidzy X serwerem a X klientem ........................................................266
Podczanie si do zdalnego serwera.............................................................................267
Programowanie pod X w Kyliksie.......................................................................................268
Program typu Hello World w X ....................................................................................270
Tworzenie gwnego okna za pomoc XCreateWindow ..............................................277
Kaskadowy porzdek okien...........................................................................................283
Tworzenie kontekstu grafiki..........................................................................................283
Ptla zdarze..................................................................................................................284
Podsumowanie dotyczce pisania programw w X ......................................................286
Menedery okien..................................................................................................................287
Po co stworzono menedery okien ................................................................................287
Potga menederw okien .............................................................................................287
Nazewnictwo menederw okien..................................................................................288
Biblioteki obiektw graficznych..........................................................................................288
Kontrolki, komponenty i widgety..................................................................................288
Kilka sw o rodowiskach graficznych ..............................................................................289
rodowisko KDE...........................................................................................................289
rodowisko GNOME ....................................................................................................289
#-,. /
Qt i CLX ..............................................................................................................................294
FreeCLX ........................................................................................................................297
Qt i zdarzenia .......................................................................................................................298
Komunikaty w CLX ......................................................................................................299
Sygnay i odbiorniki w Qt .............................................................................................301
Obiekt aplikacji Qt i ptla zdarze ................................................................................303
Wywoywanie surowego kodu Qt w Object Pascalu .................................................304
Program Slider w CLX ........................................................................................................306
CLX, Qt i obiekt haka..........................................................................................................307
Metoda EventFilter ........................................................................................................311
Praca ze stylami ...................................................................................................................317
Praca z zasobami..................................................................................................................320
Zasoby acuchw znakowych......................................................................................321
Spis treci
0
#"#1"
/
2#1
/
Praca z komunikatami..........................................................................................................360
Proste komunikaty: przydatna kontrolka.......................................................................360
Reagowanie na komunikaty...........................................................................................362
Praca z metod EventFilter w komponentach ...............................................................363
Rozszerzenie moduu ElfControls .......................................................................................366
Sztuka nazywania komponentw ..................................................................................377
Kontrolki TElfBigEdit i TElfEmptyPanel.....................................................................377
Komponenty zoone.....................................................................................................378
Tworzenie waciwoci published w komponencie.......................................................381
Wzmianka na temat zapisywania waciwoci..............................................................382
Drugi zoony komponent ...................................................................................................383
Tworzenie komponentu czcego TLabel i TEdit..............................................................389
Zmienianie pooenia etykiety.......................................................................................399
TElfLabelEdit a kompatybilno z Windows................................................................401
Etykiety z tekstem 3D....................................................................................................402
10
!
"
# $#!6 6 $#
Aplikacje konsolowe............................................................................................................531
Programowanie konsolowe............................................................................................532
Uruchamianie aplikacji konsolowej ..............................................................................533
Zarzdzanie pamici ..........................................................................................................533
Zmienne i struktury danych...........................................................................................534
Obiekty ..........................................................................................................................535
Operacje na plikach w Kyliksie ...........................................................................................536
Operacje na plikach w tradycyjnym Pascalu.................................................................536
Operacje na plikach z uyciem TFileStream.................................................................539
Specyfika plikw w Linuksie ........................................................................................543
Korzystanie z funkcji biblioteki glibc ...........................................................................546
Spis treci
11
12
* "
*
Przeznaczenie warstwy dostpu do danych .........................................................................611
Zmaksymalizowanie szybkoci dostpu do danych ......................................................612
Zapewnienie niezalenoci od platformy ......................................................................612
Zapewnienie atwego wdraania ...................................................................................612
Zminimalizowanie rozmiaru i uycia zasobw .............................................................613
Zapewnienie wsplnego interfejsu do wydajnego przetwarzania SQL
i procedur zapisanych w bazie danych .......................................................................613
Uczynienie programowania sterownikw atwym i rozszerzalnym..............................613
Zapewnienie dostpu do specyficznych funkcji bazy danych.......................................614
Wany rysunek ....................................................................................................................614
Zestawy danych MyBase .....................................................................................................615
Formaty (binarny i XML)..............................................................................................615
Metadane .......................................................................................................................616
Restrykcje ......................................................................................................................618
Dane...............................................................................................................................618
Typy pl.........................................................................................................................618
Pola specjalne ................................................................................................................618
Pakiety delta ..................................................................................................................618
Zwrot do nadawcy .........................................................................................................621
czno z bazami danych ..................................................................................................621
Abstrakcja dbExpress ....................................................................................................622
Odwzorowanie typw danych .......................................................................................634
Programowanie sterownikw dbExpress.............................................................................635
Znajomo biblioteki klienta rnych producentw baz danych ..................................635
Inicjalizowanie rodowiska ...........................................................................................636
czenie z serwerem bazy danych ................................................................................636
Inicjalizowanie uchwytw instrukcji SQL ....................................................................636
Przygotowywanie instrukcji SQL..................................................................................637
Przekazywanie parametrw...........................................................................................637
Wykonywanie instrukcji SQL .......................................................................................638
Wizanie bufora rekordw ............................................................................................638
Pobieranie rekordw......................................................................................................639
Zwalnianie uchwytw i rozczanie ..............................................................................639
Implementacja rdzenia dbExpress .......................................................................................640
SQLDriver .....................................................................................................................640
SQLConnection .............................................................................................................641
SQLCommand ...............................................................................................................642
SQLCursor.....................................................................................................................645
SQLMetaData................................................................................................................645
Spis treci
13
14
#
%%%$"
Rozdzia 1.
Dziki lekturze tego rozdziau zapoznasz si z narzdziami programistycznymi rodowiska Kylix. Opisano tu IDE (zintegrowane rodowisko programistyczne), narzdzie
projektanta formularzy oraz kilka prostych sztuczek, ktre mona wykorzysta w procesie
wizualnego programowania.
Pod koniec tego rozdziau bdziesz wiedzia ju co nieco o tym, jakiego rodzaju programy
moesz tworzy w Kyliksie, a take jak atwo je tworzy uywajc narzdzi zawartych
w IDE.
Dowiadczeni programici Delphi dowiedz si, jakie zmiany naley wykona by przenie ich aplikacje napisane w Object Pascalu ze rodowiska Windows do Kyliksa. IDE
Kyliksa jest waciwie po prostu IDE Delphi 5 przeniesionym do Linuksa. W rezultacie
oba te rodowiska programistyczne s bardzo podobne chocia nie identyczne. Przez
cay czas bd podkrela dzielce je rnice; podpowiem take Czytelnikom tworzcym
dotychczas swoje programy na platformie Windows, co zrobi, by poczuli si komfortowo
w wiecie Linuksa.
32
Uywam IDE Delphi ju od bardzo dawna; take IDE Kyliksa wykorzystuj niezwykle
aktywnie znacznie duej, ni jest ono w ogle uyteczne dla szerszej rzeszy uytkownikw.
Dziki temu znam mnstwo sztuczek pozwalajcych wykorzysta ich zalety. Postaram
si przedstawi ich tutaj tak wiele, jak tylko to moliwe.
By moe zaczynasz ju przeczuwa, jak bardzo skomplikowane jest IDE Kyliksa. Musisz
pamita, e jest to niezwykle potne narzdzie. Nawet ci, ktrzy przez lata uywali
Delphi, mog po prostu nie zna wszystkich jego funkcji.
Na szczcie, wiele cech IDE jest ju wzgldnie znanych dowiadczonym uytkownikom.
Stosowane w nim konwencje i metafory s po prostu takie same jak te, ktre mona odnale w programach StarOffice, Microsoft Office, Visual Basic, Visual C++, KDeveloper
i w wielu innych powszechnie uywanych narzdziach. Co wicej, nawet te bardziej zaawansowane a mniej znane funkcje s zwykle w miar intuicyjne i atwe do zrozumienia.
Sprbuj omwi tu wszystkie najwaniejsze problemy, aby umoliwi Ci poznanie
najwaniejszych cech rodowiska. Powic rwnie troch czasu na wyszczeglnienie
kluczowych lub bardziej uytecznych wasnoci, ktre mogyby nie by oczywiste dla
nowych uytkownikw Kyliksa.
Zaczn od omwienia paskw narzdzi, pokazujc, jak je przestawia i konfigurowa.
Potem skupi si na podstawach wizualnego programowania, zwracajc uwag na techniki
uywania komponentw i projektowania interfejsw. Nastpnie skieruj uwag na edytor
i na to, jak go skonfigurowa. Wyka, jak bardzo moe on by pomocny w przegldaniu
33
Aby uatwi Ci orientacj w nowym, nieznanym Ci jeszcze programie, na rysunku 1.1
przedstawiono gwne czci IDE. S to menu, narzdzie inspektora obiektw (Object
Inspector), paleta komponentw (Component Palette), edytor, narzdzie projektanta
formularzy (Form Designer) oraz paski narzdzi.
Gwne
skadniki IDE
34
Wydaje si, e do dobrym miejscem do rozpoczcia naszej podry po Kyliksie jest
menu. Wprawdzie Ci, do ktrych jest adresowana ta ksika, prawdopodobnie s w stanie
sami je rozpracowa, jednak jest kilka rzeczy, o ktrych warto tu wspomnie; mog by
one przydatne przynajmniej niektrym Czytelnikom.
Menu suy do wykonywania szerokiej gamy zada, wcznie z otwieraniem i zamykaniem
plikw, manipulowaniem debuggerem i dostosowywaniem rodowiska. Domylnie wszystkie funkcje IDE s dostpne poprzez menu.
Dziki temu, e menu moe by obsugiwane za pomoc konfigurowalnych skrtw
klawiszowych, daje ono bardzo szybki dostp do funkcji rodowiska Kyliksa. Przy kadym
poleceniu znajdziemy w nim odwoanie do skrtu klawiaturowego, ktrym mona to
polecenie wywoa; dziki temu w atwy sposb mona wykonywa rutynowe zadania,
takie jak zapis plikw i projektw, czy kompilacja i uruchamianie aplikacji.
Po otworzeniu menu Edit zobaczysz to, co pokazano na rysunkach 1.2 i 1.3. Zatrzymaj
si na chwil i porwnaj te dwa obrazki. Na pierwszy rzut oka wydaj si identyczne.
Jednak po bliszym przyjrzeniu si im zapewne zauwaysz, e klawisze skrtw skojarzone z dan pozycj rni si. Co jest tego przyczyn?
Menu Edit w wersji
default key mappings
35
Menu Edit w wersji
brief key mappings
Aby zrozumie, o co tu chodzi, otwrz menu Tools, wybierz Editor Options, a nastpnie
Key Mappings. Zmie Key Mapping Module z Default na Brief, nastpnie za na Epsilon.
Po kadej zmianie kliknij OK i otwrz menu Edit. Jak sam widzisz, skrty klawiszowe
dla kadej pozycji zmieniay si, w zalenoci od wybranego odwzorowania klawiszy.
Moesz stworzy swoje wasne ustawienia klawiszy i uywa swoich wasnych skrtw.
W rozdziale 8. poka Ci jak to zrobi.
Jeli jeste uytkownikiem emacs lub vi, dla ktrego zintegrowane rodowisko jest
czym nowym, zachcam Ci do powicenia troch czasu na zaznajomienie si
z systemem menu. Standardowe ustawienia klawiszy pozwalaj na otwieranie menu
przez nacinicie klawisza Alt z pierwsz liter nazwy menu. Na przykad skrt Alt+F
otwiera menu File; po jego otwarciu moesz wybra pozycj z menu przez nacinicie
klawisza z t liter, ktra jest w tej pozycji podkrelona, np. S dla zapisu (save) czy C
dla zamknicia (close).
Kolejn kluczow cech systemu menu Kyliksa s menu podrczne (ang. pop-up menus),
wywoywane klikniciem prawym przyciskiem myszy. Waciwie klikanie prawym
przyciskiem myszy po to, eby przywoa menu podrczne, jest czci ideologii Borlanda, poniewa to wanie ta firma bya pionierem na tym polu. Generalnie rzecz biorc,
gdy tylko jeste w IDE Kyliksa i nie za bardzo wiesz, co dalej zrobi, sprbuj klikn
prawym przyciskiem na czymkolwiek, a by moe znajdziesz odpowied. Dla wszystkich
waniejszych okien w IDE opracowano rne i czsto cakiem zoone menu podrczne.
Wasne menu posiadaj np. projektant formularzy, inspektor obiektw, edytor, paleta
komponentw i pasek narzdzi. Nigdy zatem nie zapominaj zatem o klikaniu prawym
przyciskiem myszy!
A oto kolejna niezwykle uyteczna waciwo systemu menu. Otwrz menu Tools i wybierz Configure Tools, po czym kliknij Add. W polu Title wpisz (jeli emacs nie
jest zainstalowany w Twoim systemie, wybierz inny program, ktrego chcesz uywa
np. ,
czy
). W polu Program wpisz
lub odpowiedni
ciek do innego, uywanego przez Ciebie zamiast niego programu. W polu Working dir
36
Otwrz menu Tools. Powiniene teraz zobaczy wpis emacs jako jedn z pozycji do
wyboru w menu. Jeli go tam nie ma lub jeli jest zablokowany, wr do menu Tools
i powtrz czynnoci opisane w poprzednim akapicie.
Aby przetestowa now pozycj w menu, potrzebujesz jakiego pliku do edycji. Otwrz
jaki ju istniejcy projekt, eby mie pewno, e masz prawidowy plik (moesz np. wej
do katalogu /Kylix/demos i otworzy projekt BasicEd. Otwrz View, wybierz Units, a nastpnie BasicEd1). Gdy zobaczysz w edytorze Kyliksa kod z zapisanego pliku, wybierz
kolejno Tools i emacs. Powinien uruchomi si edytor emacs; moesz zatem zobaczy
swoje Pascalowe rdo w klasycznym edytorze GNU. Nowsze wersje edytora emacs
powinny nawet automatycznie podwietla skadni. Jeli edytujesz w tym wanie programie i zapiszesz zmiany, bd one zachowane, gdy wrcisz do IDE Kyliksa.
To wszystko przynajmniej na razie co chciabym powiedzie o systemie menu
Kyliksa. Bd jeszcze wraca do tego tematu podczas omawiania innych niezwykle wanych narzdzi, jak choby debugger czy edytor. Skupi si wtedy na tych czciach menu,
ktre bd zwizane z omawianym tematem.
Paski narzdzi standardowo pojawiaj si bezporednio pod menu gwnym oraz na prawo
od niego. Klikajc na nich, mona zrealizowa wikszo zada, ktre da si wykona
przy uyciu menu i klawiatury. Paski s ponadto prostsze od menu w dostosowywaniu.
Wycznie od Ciebie zaley, czy do wykonywania pewnych zada bdziesz uywa menu,
czy paskw narzdziowych.
Gdy klikniesz na pasku menu prawym przyciskiem myszki, pojawi si odpowiednie menu
kontekstowe. Moesz ukry niemal wszystkie paski narzdziowe, po prostu je odznaczajc w wywietlonym menu. Oprcz tego zauwaysz pewnie, e z lewej strony kadego
paska znajduje si uchwyt (waciwie wyglda on bardziej jak miniaturowy zderzak, ni
uchwyt). Za jego pomoc moesz zapa pasek. Aby to zrobi, po prostu kliknij uchwyt;
teraz, nie zwalniajc klawisza myszki, przecignij pasek w miejsce, w ktrym chciaby
go umieci. Uchwyt moe zosta uyty nie tylko do przemieszczenia paska, ale take
do jego zupenego usunicia z pierwotnego pooenia. Jeli przecigniesz pasek poza
gwne okno IDE, bdzie si on unosi ponad pozostaymi oknami i nie zniknie za nimi.
37
Dwa obrazki tego samego paska narzdzi pierwszy taki, jaki pojawia si
standardowo, drugi za z kilkoma dodanymi do niego ikonami
Moesz take usuwa to, co znajduje si na pasku. Ja na przykad rzadko uywam przyciskw Step Into, Step Over oraz Pause z paska Debug. W zwizku z tym zwykle usuwam
je, umieszczajc w ich miejscu ikony Cut, Copy i Paste z kategorii Edit. Lubi take mie
ikony Compile i Build z kategorii Project na pasku narzdzi Desktops, ktry znajduje
si na prawo od menu. Oczywicie, nie musisz usuwa bd dodawa dokadnie te same
ikony co ja; pisz tu o tym jedynie po to, by by wiadomy otwartoci rodowiska na
podobne dziaania.
Teraz, gdy mamy ju za sob wstpne informacje, nadszed czas, by zgbi tajniki programowania wizualnego. Temat ten stanowi oczywicie istot programowania w Kyliksie.
Techniki tworzenia wizualnego s najwiksz korzyci, jak Kylix przynosi programistom i to wanie one pozwalaj zaoszczdzi mnstwo czasu (prawdopodobnie drug
38
tak istotn rzecz jest debugger, ktry bdzie omwiony w rozdziale 5.). Zanim zagbimy si w szczegy, niech bdzie mi wolno doda jeszcze par sw wstpu. Programowanie wizualne jest wci now ide i podobnie jak wszystkie nowe idee spotyka si
z oporem ludzi niechtnych zmianom. Chciabym powici jeszcze chwil na obalenie
kilku zarzutw, ktre stawia si najczciej wobec tej technologii.
Zarzut pierwszy: Wizualne tworzenie programw moe si wydawa czym
39
dlatego dobrzy programici maj bardzo due szanse znalezienia pracy w tej
dziedzinie. Poza tym, sednem dobrego programowania interfejsw s w kocu i tak
prace estetyczne, a czciowo te szukanie rozwiza czynicych program prostym
dla uytkownika. Rzadko zdarza si znale eksperta od zaawansowanych
algorytmw, ktry byby rwnoczenie utalentowanym projektantem interfejsw.
Narzdzia programowania wizualnego, takie jak Kylix, pozwalaj przekaza
prace estetyczne ludziom odpowiednio utalentowanym, a cikie, intelektualne
zadania najzagorzalszym programistom.
Zarzut czwarty: Aplikacje stworzone przy pomocy programowania wizualnego
s wiksze i bardziej zoone ni to, co mgbym zrobi piszc cay kod rcznie.
To jest chyba najlepszy z klasycznych zarzutw wobec programowania wizualnego.
Wierz jednak, e ta skarga nie odnosi si do wizualnego programowania jako
takiego, a do bibliotek OOP, lecych u jego podstaw. Niewizualne rodowiska,
takie jak Visual C++ Microsoftu rwnie uywaj opartych na OOP bibliotek
(niech nie zmyli Ci nazwa wspomnianego rodowiska: Visual C++ nie jest
narzdziem programowania wizualnego). Programici VC s zaleni od MFC,
tak jak programici GNOME od GTK, a programici KDE od Qt. Wszystkie te
biblioteki zwikszaj objto Twojego kodu. Co wicej, s one zastraszajco
zawie. Niemniej jednak, zyskay du popularno, poniewa wytworzyy
standardy oraz uczyniy zoone zadania znacznie atwiejszymi. Ponadto,
podobnie jak programici VC mog pisa programy, ktre nie korzystaj z MFC,
tak programici Kyliksa mog tworzy kod nie wykorzystujcy CLX. Dla przykadu,
w rozdziale 6., zatytuowanym Poznanie rodowiska Linuksa, nauczysz si jak
pisa bezporednio do XLIB API tworzc programy dla X; nie uywaj one CLX
w ogle. W tej ksice zobaczysz przykady wywoywanych i sterowanych z linii
polece maych aplikacji, ktre rwnie nie uywaj CLX. Wedug dzisiejszych
standardw programy te s cakiem mae, zajmujc nie wicej ni 25 KB.
Moesz tworzy takie lub inne aplikacje Kyliksa nie uywajc nic poza emacs,
kompilatorem Kyliksa wywoywanym z linii polece, oraz .
Zarzut pity: Nie lubi programowania wizualnego, poniewa niepokoi mnie
fakt, i wykorzystuje si w nim czarne skrzynki. Chc mie dostp do caego kodu
mojego projektu. W programowaniu w Kyliksie nie ma nawet mowy o adnych
czarnych skrzynkach. Produkt dostarczony jest razem z wszystkimi rdami
do CLX. Dziki narzdziom wizualnym otrzymujemy szybkie i sprawne metody
napisania dodatkowego kodu. W kadym razie, podczas pracy z narzdziem
projektanta formularzy zwykle moliwe jest zobaczenie caoci kodu, ktry
wanie jest tworzony (wyjtkiem jest sytuacja, gdy korzysta si komponentw
kupionych od osb trzecich, nie udostpniajcych rde). Kod wytwarzany
podczas wizualnego programowania pojawia si w jednym z dwojga miejsc:
bezporednio w pliku rdowym aplikacji lub w pliku xfm zobacz sekcja
Edytowanie pliku xfm nieco dalej w niniejszym rozdziale.
Na przestrzeni lat przygldaem si jak programowanie zorientowane obiektowo z rzadko
uywanej technologii przeistacza si w jedn z najistotniejszych w wiecie programistycznym. Wizualne programowanie nie ma jeszcze takiego prestiu jak OOP, lecz spodziewam si, e w umysach wikszoci programistw z czasem dorwna, a moe nawet
przewyszy swoim znaczeniem OOP.
40
Pora przej do konkretw. Zaczn od omwienia palety komponentw, a nastpnie przejd
do narzdzia projektanta formularzy, ktre zwykle jest uywane cznie z inspektorem
obiektw. Na rysunku 1.7 przedstawiona zostaa paleta komponentw, za na rysunku 1.8
zobaczy mona narzdzie projektanta formularzy. Inne blisko zwizane z nim narzdzie
inspektor obiektw pokazane jest na rysunku 1.9.
Inspektor obiektw
z wywietlonymi
parametrami
kontrolki Edit
Paleta komponentw pojawia si po prawej stronie pod paskiem menu. Skada si ona
z zakadek, ktre zawieraj komponenty dostarczone razem z produktem. Dosy prosto
mona stworzy nowe komponenty i doda je do palety. Zagadnienie tworzenia komponentw zostanie szczegowo omwione w czci II.
Na zakadkach palety komponentw znale mona wiele uytecznych komponentw,
na przykad komponenty pozwalajce tworzy aplikacje operujce na bazach danych
oraz przeznaczone do tworzenia aplikacji WWW. Oczywicie, znajdziemy tam rwnie
standardowe elementy formularzy, takie jak kontrolki edycji czy etykiety.
Porzdek, w jakim uoone s zakadki na palecie komponentw, jest cakowicie konfigurowalny. Kliknij prawym przyciskiem na palecie komponentw i wybierz Properties.
Pojawi si okno dialogowe nazwane Palette Properties, jak pokazano na rysunku 1.10.
Po lewej stronie tego okna znajduje si lista zakadek, a po prawej lista komponentw
znajdujcych si na danej zakadce. Klikniciem okrelonej pozycji po lewej stronie
zmieniasz list komponentw po stronie prawej.
41
Okno Palette
Properties umoliwia
zmian wygldu
palety komponentw
Komponenty na palecie komponentw s przechowywane w zbiorowych bibliotekach,
znanych jako pakiety (ang. packages). Na dysku kada biblioteka jest po prostu specjalnym rodzajem wspdzielonego obiektu jaki programici Windows nazwaliby DLL.
Aby stworzy komponent, piszesz obiekt, ktry pochodzi od jednego ze szczeglnych
zbiorw klas Object Pascala, a nastpnie kompilujesz swj komponent, ktry jest umieszczany w jednej z bibliotek. Jeli wszystko zrobisz dobrze, IDE, ktre potrafi przeszukiwa
biblioteki, pokae ikon Twojego obiektu na palecie komponentw.
Jak zobaczysz w czci II, Istnieje jeszcze jeden, zupenie inny sposb zmieniania
palety komponentw. Wykorzystuje on zaawansowane techniki zwizane z bibliotekami.
Wybierajc Component, i z menu Install Packages zobaczysz list bibliotek, jak to pokazano na rysunku 1.11 (do pokazanego na nim okna moesz dosta si rwnie wybierajc
kolejno Project, Options, Packages). Klikajc przycisk Components przekonasz si, ktre
komponenty znajduj si w danym pakiecie. Jak sam widzisz, wikszo pakietw dostarczonych z Kyliksem znajduje si w katalogu kylix/bin.
42
Lista obecnie
uywanych pakietw,
wywietlona w oknie
dialogowym Project
Options
Pole wyboru znajdujce si na licie Design Packages pozwala okreli, czy komponenty
z danego pakietu maj by wywietlane, czy ukrywane. Przycisk Remove z okna Project
Options pozwala cakowicie usun pakiet, wskutek czego Kylix nie bdzie go wicej adowa. Jeli zdecydujesz, by pewne wiksze pakiety nie byy adowane zwaszcza pakiety
baz danych cae rodowisko Kyliksa bdzie si uruchamiao szybciej. Moe to take
umoliwi stworzenie mniej zagraconej, prostszej do ogarnicia palety komponentw.
Na dole okna Project Options znajduje si opcja pozwalajca okreli, czy pakiety wczytywane w czasie wykonywania programu bd uywane. Dziki niej moemy zadecydowa,
czy komponenty z okrelonych pakietw maj by wczone do programu wykonywalnego aplikacji. Jeli zdecydujesz, e tak wanie ma by, bdziesz mg atwo dosta si
do nich poprzez biblioteki, w ktrych s przechowywane. Gotowe programy korzystajce z pakietw dynamicznie wczytywanych s znacznie mniejsze od programw skonsolidowanych z wszystkimi swoimi obiektami wewntrz pliku wykonywalnego. Z drugiej
strony, jeli zdecydujesz si na uycie zewntrznych pakietw i bdziesz chcia, by inni
mogli korzysta z Twojej aplikacji, bdziesz musia rozprowadza je razem ze swoim
produktem.
To jednak wykracza ju poza zakres tematyki tej czci ksiki; wrcimy do tego w drugiej
jej czci. Chciaem tutaj jedynie wspomnie o komponentach Kyliksa i dyskretnie podejrze ich architektur. S to zagadnienia absolutnie podstawowe i po prostu musisz je pozna,
eby zacz rozumie, jak to wszystko dziaa; pniej, w nastpnych rozdziaach, bdziemy
delikatnie rozsuwa kurtyn, a do koca, odkrywajc najcenniejsze zalety Kyliksa.
!
Projektant formularzy pozwala na zaprojektowanie interfejsu dla projektu. Narzdzie to ma
form okna, na ktrym moesz rozmieszcza rne obiekty z palety komponentw. Komponenty, ktre dodajesz do swojego projektu, mog by widzialne lub nie. Bez wzgldu
na to, Kylix automatycznie tworzy instancj komponentu w momencie umieszczenia go
43
"
Paleta komponentw zawiera standardowe komponenty wywietlane na zakadkach. Aby
doda komponent do projektanta formularzy, kliknij go na palecie, a nastpnie kliknij
narzdzie projektanta. Moesz na przykad klikn komponent button (przycisk) i upuci
go w oknie projektanta, tworzc formularz taki jak na rysunku 1.12.
Przycisk Button1
umieszczony
w oknie projektanta
formularzy Kyliksa
Po umieszczeniu komponentu w jakim okrelonym miejscu na oknie projektanta formularzy, mona go przesuwa poprzez kliknicie i przecignicie na nowe miejsce. Mona
rwnie zmieni jego rozmiar, uywajc uchwytw na jego krawdziach. Jeli wolisz,
moesz uzyska ten sam efekt uywajc inspektora obiektw; powiniene znale w nim
ustawienia (szeroko) i (wysoko) komponentu i zmieni ich wartoci,
jak pokazano na rysunku 1.13.
Ustawienie wasnoci
Width przycisku
na 160 spowodowao
rozcignicie
go wzdu formularza
44
Pomoc kontekstowa
dla wasnoci
Caption obiektu
TButton
do siatki). Opcje te s niesychanie pomocne. Gdy masz np. cztery kontrolki i chcesz,
eby wszystkie miay ten sam rozmiar, naciskasz Shift i klikasz na nich po kolei, a zaznaczysz wszystkie. Nastpnie prawym przyciskiem myszy klikasz na jednej z kontrolek,
wybierasz Size i stosown opcj, np. Grow To Largest.
#
Inspektor obiektw jest jednym z najpotniejszych narzdzi Kyliksa. Z jego pomoc
moesz modyfikowa wasnoci komponentu lub generowa zwizane z nim zdarzenia.
Jeli inspektor obiektw nie jest widoczny w IDE, a chcesz go wywietli, wybierz View,
Object Inspector.
Gdy klikniesz komponent w projektancie formularzy, w inspektorze obiektw pojawi si
jego nazwa. O tym, z ktrym komponentem chcesz pracowa, moesz rwnie zdecydowa wybierajc jego nazw z rozwijanej listy inspektora.
Zakadka Properties inspektora obiektw ujawnia waciwoci komponentu, ktre mona
modyfikowa. Dla kadej waciwoci po lewej stronie okna, w ktrym s one wywietlane, znajduje si jej nazwa; po prawej mona zobaczy puste pole, tzw. edytor ustawie
waciwoci (ang. property editor). Niekiedy edytory waciwoci s zwykymi polami
z tekstem, innym razem s to listy opcji, takich jak choby pola
i . Zdarzaj
si take bardziej skomplikowane jednostki. Aby zobaczy przykad takiej skomplikowanej jednostki, umie w formularzu kontrolk z zakadki Standard. Kliknij dwukrotnie ma ikon, ktra pojawi si w edytorze waciwoci Font (czcionka) kontrolki
. Pojawi si okno dialogowe Font, pokazane na rysunku 1.15. Wybierz w nim
czcionk, ktra ma si pojawi w kontrolce edycji.
Na og, gdy klikasz praw stron wasnoci, wybierasz dla niej opcj. Komponent
posiada np. waciwo . eby zobaczy, jak ona funkcjonuje, wybierz ten komponent z zakadki Standard i upu go na formularzu. Nastpnie kliknij edytor waciwoci;
pojawi si rozwijana lista, z ktrej moesz wybra rodzaj uoenia kontrolki.
45
Okno dialogowe Font
#
Narzdzie inspektora obiektw jest konfigurowalne. eby wywietli pozycje wedug
kategorii lub nazw, kliknij omawiane tu narzdzie prawym przyciskiem myszy i wybierz
Arrange, By Category lub Arange, By Name. Dwa rne widoki, uzyskane w zalenoci
od dokonanego wyboru, pokazane zostay na rysunkach 1.16 i 1.17.
Inspektor obiektw
z wartociami
uoonymi
wedug nazw
Inspektor obiektw
z wartociami
uoonymi wedug
kategorii
46
na inspektorze i wybierz View, None. Wszystkie pozycje znikn. Kliknij ponownie i wybierz
View, Action. W efekcie widoczny stanie si podzbir wasnoci dla obiektu
.
$!
Gdy upuszczasz przycisk na formularzu, w tle generowany jest kod. Cz tego kodu
umieszczona zostaje w edytorze. Reszta pojawia si w pliku xfm, ktry towarzyszy
danemu formularzowi.
Odwoanie do pliku xfm znajduje si w rdle moduu (ang. unit) skojarzonego z danym
formularzem, zaraz po sowie kluczowym
:
Programici Delphi powinni zauway, e xfm pisane jest maymi literami. Podczas
przenoszenia programu z Delphi do Kyliksa, potrzebna bdzie zamiana wszystkich
!"#$%& na !"#'(&. W rzeczywistoci zauwaysz, e Kylix czasami przyjmuje
pliki dfm Delphi z ich nie zmienionym rozszerzeniem. Prawdopodobnie wci jednak
bdziesz musia zmieni w odwoaniach do nich zapisane wielkimi literami $% na (
pisane maymi.
Potrzebna bdzie jeszcze jedna zmiana we wszystkich formularzach. Waciwo Pixel
Per Inch normalnie ustawiona jest w Delphi na 96. Najlepszym ustawieniem w Kyliksie
jest na og 75. Jeli otworzysz w Kyliksie formularz z Delphi i kontrolki oraz tekst bd
mae i ciasno rozstawione, sprbuj zmieni ustawienie Pixel Per Inch z 96 na 75.
Zanim uyjesz tego polecenia, upewnij si, czy masz dobrze zdefiniowan ciek
dostpu; niektre dystrybucje Linuksa wyposaone s w programy o identycznej nazwie.
47
Kod w pliku xfm w duej mierze jest prawdziwym kodem. Jeli chcesz, moesz go rcznie
edytowa, a nawet wstawi go do IDE. Aby zobaczy jak to dziaa, zacznij nowy projekt
i umie przycisk w jego formularzu. Kliknij formularz prawym przyciskiem myszy i wybierz View As Text. W jego rdle znajdziesz nastpujcy kod:
!"#$
%!"$
&'()!*+
,'-)!"+
.%'
!/
/
(!0
(
Uyj edytora, eby skopiowa cay ten blok tekstu. Teraz wr do Kyliksa i zacznij now
aplikacj, ogldajc formularz w normalnym trybie, nie w tekstowym. Majc zaznaczony
formularz wybierz Edit i Paste z menu. W lewym grnym rogu formularza powinien
pojawi si przycisk, ktry zaprojektowae w edytorze. Moesz teraz za pomoc myszy
zmieni jego rozmiar, tak eby cay tekst by widoczny.
Technika wstawiania do projektanta formularzy kontrolek z edytora moe by cakiem
uyteczna. Szczeglnie pomocna moe si okaza podczas naprawiania zniszczonych
formularzy lub podczas porzdkowania formularza, ktry uleg cakowitemu zagmatwaniu. Przydaje si to rwnie podczas przenoszenia aplikacji Delphi do Kyliksa.
Format pliku xfm, zarwno binarny, jak i tekstowy, jest identyczny z formatem dfm,
uywanym przez Delphi pod Windows. Tak dugo, jak wszystkie komponenty,
waciwoci i zdarzenia uyte w pliku dfm istniej zarwno w VCL, jak i CLX, moesz
uywa plikw dfm w aplikacji Kyliksa. Rozszerzenie xfm dla plikw Kyliksa istnieje
po to, by mg atwo sprawdzi, e komponenty w pliku s raczej komponentami
CLX ni VCL. Jak sam zobaczysz, mona przyj zasad, e moliwe jest uywanie
niezmienionych plikw dfm w programach Kyliksa, jeeli formularz, ktry definiuj,
jest stosunkowo prosty. W przeciwnym wypadku moesz mie problemy. Ale nawet
w najgorszych przypadkach wyedytowany plik dfm moe pomc ci w rozpoczciu
tworzenia formularza w Kyliksie.
48
Uywajcy JBuildera programici piszcy w jzyku Java powinni zna ju wiele technik
programowania wizualnego uywanych w Kyliksie. W JBuilderze jednak nie ma adnych
plikw xfm. Zamiast tego, wszystkie wyniki Twoich akcji realizowanych za pomoc
myszki komputerowej zostaj zapamitane w Twoim pliku rdowym, zwykle w metodzie
+. To, czy bardziej podoba Ci si sposb programowania wizualnego w Kyliksie,
czy w Javie, jest spraw gustu; moe te zalee od okrelonego przypadku. Ja, gdy
zaczem uywa technologii JBuildera, pomylaem, e jest lepsza od ukochanej
przeze mnie technologii Delphi. Jednak gdy zaczem tworzy wiksze i bardziej
zoone programy w Javie, coraz bardziej nuce stawao si przewijanie metod
+, ktre skaday si z wielu ekranw informacji wygenerowanych przez narzdzia
do wizualnego projektowania (z pewnoci lepiej byo uywa wizualnych narzdzi ni
rcznie pisa kod i zapewne kod w by przynajmniej tak dobry i w sumie na og
taki sam jak kod, ktry napisabym rcznie. W kadym razie byo tego mnstwo).
Ostatecznie w konkurencji pomidzy narzdziami Javy i Delphi przyznabym pewnie
remis. Java ma zadziwiajc cech przechowywania caego kodu, napisanego w jednym
jzyku, w jednym pliku rdowym. Delphi oraz Kylix odizolowuj cay ten nieestetyczny
kod, umieszczajc go w pliku xfm. Format tego pliku bardzo trafnie reprezentuje sposb
przechowywania informacji przez tych programistw, ktrzy tworz swe aplikacje
korzystajc z narzdzi do programowania wizualnego.
%
Programici uywajcy jzyka Java stosuj do kontroli rozmiarw komponentw w czasie
uruchomienia programu technologie znane jako layout managers (zarzdcy ukadu).
Zarzdcy ci pomagaj okreli sposb, w jaki ma si zachowa formularz, gdy pojawia
si w nieoczekiwanej rozdzielczoci lub gdy uytkownik zmienia jego rozmiar. Kylix nie
posiada tak zoonych narzdzi, oferuje za to waciwoci nazwane )
(ograniczenia) i /
(zakotwiczenia), ktre w podobnych sytuacjach wykazuj swoj zadziwiajc potg.
Umie przycisk w prawym dolnym rogu formularza. Teraz chwy ten rg i zacznij
zmniejsza formularz, jak to jest pokazane na rysunku 1.18.
Kiedy uytkownik zmienia
rozmiar formularza,
komponent staje si
czciowo lub cakowicie
niewidoczny
Jak sam widzisz, komponent moe zosta zarwno czciowo, jak i cakowicie zakryty
w trakcie projektowania lub w czasie uruchomienia. Jeeli stanowi to dla Twojej aplikacji
istotny problem, prostym rozwizaniem okazuje si uycie wasnoci /
.
Zwr uwag na to, i w inspektorze obiektw obok wasnoci /
wystpuje may
znak plusa. Kliknij go, aby otworzy wszystkie pola tej wasnoci. Zaznacz przycisk i ustaw
pola 0( i
na , a i
na
. Teraz zmie znw rozmiar
formularza (najlepiej zrb to kilkakrotnie), a zobaczysz, e podczas zmian przycisk zachowa swoje miejsce w prawym dolnym rogu.
Jeli chcesz, moesz doda do formularza dodatkowe przyciski. Umie np. na nim cztery
przyciski, po jednym w kadym jego rogu. Uyj waciwoci /
, aby zakotwiczy
kady z przyciskw na waciwym mu miejscu. Sprbuj teraz zmieni rozmiar formularza.
49
Jeli nazwa zmiennej skada si z kilku sw, wszystkie powinny zaczyna si wielk
liter, jak np. %,2
. Sowa zastrzeone, ktre s zawsze pogrubiane przez
edytor, powinny by pisane maymi literami, z wyjtkiem typu 1
, ktrego pierwsza
litera zwykle jest wielka (ten wyjtek dla sowa 1
sprawia, i cechujcy si cis,
nienaruszaln struktur jzyk wydaje si nieco mniej formalny). Wszystkie pozostae
sowa zastrzeone, takie jak , , (,
i
( s wedle
konwencji pisane maymi literami.
Jak na razie powiniene mie cztery widzialne przyciski, kady zakotwiczony w innym
rogu formularza. Jeli wszystko poszo dobrze, moesz zmienia rozmiar okna, a kady
przycisk zostanie na swoim miejscu. Na pewno bdziesz chcia sprawdzi, co si stanie,
gdy uczynisz formularz tak maym, jak to tylko moliwe. Odpowied jest oczywista
nastpi chaos. Aby zatem zabroni uytkownikom zbytniego zmniejszania formularza,
moesz ustawi jego waciwo )
na odpowiedni warto.
Zaznacz formularz klikniciem na jego szarym tle. Zauwa, e do inspektora obiektw
wypisane zostay waciwoci aktualnie zaznaczonego obiektu, ktrym w tym wypadku
jest formularz. Kliknij podwjnie waciwo )
w inspektorze obiektw.
Otworzy si ona, umoliwiajc Ci wprowadzenie wartoci 200 i 250 odpowiednio
dla waciwoci % i % formularza. Gdy sprbujesz zmieni jego rozmiar,
zobaczysz, e zatrzymuje si teraz, nie pozwalajc uytkownikowi spowodowa baaganu.
Konwencje w Pascalu s zwykle tak dosowne, jak to tylko moliwe. Z tego powodu
uywanie skrtw w nazwach zmiennych nie jest tu tak powszechne, jak w innych
jzykach. Generalnie rzecz biorc, programici Pascala przyjm zmienne nazywajce
si % i %, ale , czy . Mam zwyczaj doprowadza
t dosowno do granic i nazywa zmienne nawet % czy %.
Kompilator nie umieci oczywicie tych nazw w kodzie skompilowanym z wyczon
opcj debug, tak wic decydujc si na uycie duszych nazw zmiennych nie zwikszasz
rozmiaru finalnego pliku wykonywalnego.
50
&
#
W niektrych aplikacjach kolejno zmieniania elementw aktywnych klawiszem tabulacji
(ang. tab order) moe by istotna. Jeli chcesz zmieni j dla swoich komponentw, kliknij
prawym przyciskiem jeden z nich i wybierz Tab Order z menu podrcznego. W oknie dialogowym Edit Tab Order zaznacz nazw komponentu. Klikajc strzaki w gr i w d
moesz zmieni miejsce komponentu w porzdku tabulatora w swojej aplikacji.
#
Nadszed czas, by omwi zdarzenia (ang. events). Zagadnienia z nimi zwizane znacznie
przewyszaj pod wzgldem swej zoonoci to wszystko, o czym bya do tej pory mowa.
Mamy tu wszak do czynienia z przejciem od zagadnienia wizualnych narzdzi do tematw
zwizanych z edytorem. Omawianie zdarze zwizane jest z pisaniem kodu, za czynno
ta wykonywana jest wanie za pomoc edytora.
Na nastpnych kilku stronach zajmiemy si zagadnieniem wzajemnych powiza pomidzy inspektorem obiektw, edytorem, a reguami skadni jzyka Object Pascal. W pewnym
momencie dyskusji zostanie poddany nawet kompilator. Gdy to wszystko zostanie ju
wyjanione, zrozumienie kilku ostatnich punktw zwizanych z edytorem oraz z narzdziem Code Insite nie bdzie stanowi kopotu. Na kocu przyjrzymy si kilku programom napisanym w Object Pascalu.
Zakadka Events w inspektorze obiektw pokazuje zdarzenia skojarzone z komponentami.
Jeli klikniesz edytor waciwoci dla zdarzenia, Kylix wygeneruje kod w edytorze kodu
rdowego (ang. Source Code Editor), a ten natychmiast zostanie pokazany, tak eby
mg zaprogramowa w nim dalsze dziaania.
eby zobaczy jak dziaaj zdarzenia, zacznij nowy projekt, wybierajc File, New. Teraz
umie w gwnym formularzu projektu kontrolk
z zakadki Standard. Zaznacz
go przy pomocy myszki. Otwrz zakadk Events w inspektorze obiektw. Kliknij dwukrotnie w polu edycji waciwoci dla zdarzenia 3). Pokazany zostanie edytor, a do
programu zostan wstawione nastpujce linijki kodu:
%(
.'6=C
(BD
-'
(D
Ten kod mg zosta rwnie wygenerowany poprzez podwjne kliknicie samego przycisku. Sposb ten przynosi spodziewany efekt, poniewa zdarzenie 3) jest domylnym zdarzeniem dla kontrolki
. Domylne zdarzenie jest zwykle automatycznie
przywoywane podwjnym klikniciem kontrolki.
Zmodyfikuj kod metody kliknicia przycisku w nastpujcy sposb:
%(
.'6=C
(BD
-'
C):55-=/)'59%'5) 5
(D)'5(98)(()/B
(D
51
Teraz uruchom opracowany przez Ciebie program i nacinij przycisk. Pojawi si okno
dialogowe, wywietlajce tekst, ktry podae metodzie 1
%.
%'
>'('
5
(D
D
52
%'
>'('
5
(D
D
' %
'
@
53
!
'
Na wydruku 1.1 przedstawiono deklaracj typowego formularza w Kyliksie. Kod podzielony jest na trzy sekcje. Pierwsz z nich stanowi nazwa moduu, ktra w tym wypadku
wyglda tak:
'E
'D
%'
>'('
5
(D
D
54
zadeklarowania jej typu, jej zmiana w programie nie bdzie moliwa; jeli natomiast
zadeklarujesz j z podaniem typu, bdziesz mg zmienia jej warto take
wewntrz programu. Ten drugi przypadek jest w rzeczywistoci sposobem na
zadeklarowanie z okreleniem wartoci obiektu poza blokiem implementacji.
Oto deklaracja zmiennej, ktra zawiera deklaracj typu:
9< ?
-!"D
55
'
Jest to deklaracja metody
*). Jak zapewne pamitasz, metoda ta jest wywoywana za kadym razem, kiedy uytkownik kliknie przycisk
*. A oto jej implementacja:
%(
.'6=C
(BD
-'
C):55-=@'
(BD
(D
Jeli umiecisz kursor w ciele metody
*) i trzymajc wcinite klawisze Shift
i Ctrl naciniesz strzak w gr, zostaniesz przeniesiony do miejsca deklaracji tej metody.
Jeli naciniesz teraz strzak w d, wrcisz do jej implementacji. Jednym sowem, IDE
jest w peni wiadomy relacji pomidzy tymi dwoma blokami kodu, nawet jeszcze przed
kompilacj. Zagadnienie to omwi bardziej szczegowo w podrozdziale Eksplorator
kodu rozdziau 5.
Jeli znasz si na programowaniu, na pewno rozumiesz relacje pomidzy deklaracj
a implementacj wspomnianej tu metody. Jednak zwizek pomidzy obiektem
i t metod moe wyda si trudny do zrozumienia. Innymi sowy, skd obiekt
wie, e ma wywoa t metod, gdy zostanie kliknity?
Programici korzystajcy na co dzie z jzyka Java znaj ju jedn metod tworzc
zwizek pomidzy obiektem a jego procedurami obsugi zdarze. Programici Windows
API znaj zapewne jeszcze inn. W Object Pascalu natomiast znw obrano trzeci drog,
ktra na szczcie jest cakiem prosta i jej zrozumienie nie przysparza problemw.
Wszystkie obiekty
pochodz od obiektu nazwanego )
, ktry w definicji
swojego typu zawiera pole 6
(,:
9%
<'9A
!%(=C
(BD
.
!55=. %
B
%'
>
&'
.
D
&'
(:>&
()(D
NN> '
'496(
A
(@-A
(@-A
D
.'6<'9A
D
NN> '
'496(
%(
%%9
.'6<'9A
(
.'6:'
.'65(
?5
.'6C(D
(D
Waciwo 3) obiektu
jest domylnie ustawiana na . Warto odpowiada 0; jest ona odpowiednikiem tego, co programici C++ nazywaj 6700 i jest
bardzo podobna do tego, co programici Javy znaj pod nazw . Jeli 3) jest
56
ustawiona na , uytkownik moe klika przycisk cay dzie, a i tak nic si nie stanie.
Gdy jednak waciwoci tej jest przypisana metoda taka jak
*), wanie ona
zostanie wykonana.
Klikajc dwukrotnie przycisk w projektancie formularzy lub edytor waciwoci dla
zdarzenia 3) w inspektorze obiektw, przydzielasz konkretn metod do waciwoci 3) obiektu
.
Zwr uwag na to, e do waciwoci 3) nie moesz przypisa jakiejkolwiek metody;
powinna mie ona typ 6
(,:
<'9A
!%(=C
(BD
Rnica polega na tym, e procedura typu 6
(, jest czci obiektu, podczas gdy
procedura typu %,6
(, ni nie jest.
Ponadto, funkcja zwraca warto, procedura nie.
W programach napisanych w C/C++ i Javie metoda, ktra w rzeczywistoci nic nie zwraca,
w deklaracji oddaje
:
'(
.'6=C
(BD
Nie mona zadeklarowa wskanika do metody w Javie, poniewa jzyk ten nie posiada
typu wskanikowego. To jedna z przyczyn, dla ktrych Java posiada inny ni Object
Pascal mechanizm zdarze. Wielk zalet systemu zdarze Javy jest to, e zdarzenie
3) w Javie (w jej dialekcie znane jako
(
) moe wskazywa
na wicej ni jedn metod w tym samym czasie. W Object Pascalu pojedyncza
instancja
moe posiada tylko jedn obsug zdarzenia 3) na raz.
Z drugiej strony, wielk zalet systemu Pascal jest to, e jest on o wiele atwiejszy
do zrozumienia ni system Java, a take to, e nie wymaga tworzenia adnych
porednich obiektw, takich jak 0
.
57
(
)*
'
+,
Jak zapewne pamitasz, caa ta dyskusja zacza si w momencie, gdy zauwaylimy,
e znikna metoda
)
:
%( .=C
(BD
-'
(D
Zreszt wystarczy nawet umieszczenie samych dwu ukonikw bez tekstu; poinformujesz
w ten sposb IDE Kyliksa, e ma zachowa t metod.
Kod napisany w Pascalu umieszcza si w trzech rodzajach plikw. Oto one:
Modu
58
Gwny plik rdowy projektu zawiera gwny blok programu. Blok ten zaczyna si
sowem zastrzeonym i koczy sowem zastrzeonym . Oto bardzo prosty
program w Pascalu:
%- C' %>- D
-'
&'
=/C' %>- /BD
(
Na program ten skadaj si zaledwie gwny blok i nagwek programu. Jak widzisz,
blok programu zaczyna si sowem i koczy sowem . Po ostatnim zapisano
kropk, poniewa oznacza ono w tym przypadku koniec programu. Jest to w tym pliku
jedyne miejsce, w ktrym po wystpuje kropka.
Jeli projekt skada si z jednego pliku, gwny blok programu jest jego punktem wejcia.
Jako taki jest odpowiednikiem funkcji lub % w programach w C++.
Gwny plik programu moe mie jedno lub dwa rozszerzenia. W wikszoci programw w Delphi, gwny plik powinien mie rozszerzenie .dpr (od Delphi Project), jak
w SimpleProgram.dpr. Dla gwnego pliku programu poprawne jest rozszerzenie .pas,
jednake w wikszoci przypadkw nie uywabym go, poniewa IDE nie zapewnia tego samego zestawu usug dla plikw pas, co dla plikw dpr.
'
Moduy (ang. units) to pliki w Pascalu, ktre nale do projektu. Plik gwny, a take plik
projektu, posiadaj zwykle wiele moduw, ktre s ich wasnoci.
Moduy maj rozszerzenie .pas. A zatem w typowej aplikacji Delphi plik gwny ma
rozszerzenie .dpr, a pozostae pliki .pas.
Moduy podzielone s na dwie czci. Cz pocztkowa znana jest jako interfejs (ang.
interface), a cz gwna nazywana jest implementacj (ang. implementation). Obydwie
pojawiaj si w jednym pliku. Programici C lub C++ mog myle o interfejsie jak o odpowiedniku tego, co nazywaj plikiem nagwkowym.
Wydruki 1.2 i 1.3 przedstawiaj przykad bardzo prostego programu skadajcego si
z pliku projektu i prostego moduu.
Plik gwny projektu SimpleUnit
%- C' %E
'D
55
9E
'D
-'
@C )'
-D
(
59
Moduy zostay stworzone z myl o rozbijaniu kodu na logiczne segmenty. Np. w jednym
mona umieci cay kod zajmujcy si wejciem-wyjciem, w drugim natomiast moemy
trzyma kod obsugujcy baz danych, itd.
W Delphi moduy su jeszcze drugiemu celowi. Jeli chcesz edytowa formularze przy
uyciu projektanta formularzy, kady z nich musi mie swj wasny modu. Mona umieci kilka formularzy w jednym module, lecz projektant formularzy nie bdzie wtedy
dziaa poprawnie.
ledzc wydruk 1.3 moesz zobaczy, e interfejs moduu moe zawiera deklaracje.
Z drugiej strony, implementacja zawiera wykonywalny kod moduu. Modu pokazany
na wydruku 1.3 jest bardzo prosty. W wikszoci programw modu bdzie jednak zawiera wiele rnych elementw, takich jak definicje staych, typw, klas, czy funkcji.
. %
Nie zawsze gwny blok programu w Pascalu jest jego punktem wejcia. Wydruk 1.4 zawiera zmienion wersj moduu przedstawionego na wydruku 1.3.
Zmieniony modu nalecy do programu SimpleUnit
'9E
'D
'
%(@C )'
-D
' %
'
9C'
-5'
-D
%(@C )'
-D
-'
&'
=9C'
-BD
(D
60
'
''''
9C'
-!/'4.'87
869%9 ' 5H:8
'9
'-(92 ''/D
'
''
9C'
-!//D
(
Ta wersja moduu pokazuje, e nie zawsze gwny blok programu bdzie jego punktem
wejcia. Sekcja implementacji moduu %,7 zawiera klauzul 8
oraz
(8
. Kod z sekcji 8
jest wywoywany w momencie, gdy modu jest
pierwszy raz adowany do pamici. Dzieje si to jeszcze zanim gwny blok programu
zostanie wykonany. Gdy tylko program zostanie wczytany do pamici, kod wykonuje
skok do pierwszego moduu wypisanego w bloku . Jeli bdzie w nim znajdowa
si sekcja inicjalizacji, zostanie ona wykonana.
Jeli projekt zawiera wiele moduw, wszystkie ich sekcje inicjalizacji zostan wykonane
zanim kod w ogle dojdzie do gwnego bloku programu. Mwic do ogldnie, jest to
dua rnica w stosunku do tego, co dzieje si w programie C/C++.
Object Pascal wyposaony jest w bloki inicjalizacji, by da twrcom moliwo inicjalizacji zmiennych zadeklarowanych w danym module. Aby mogli oni wyczyci kod, ktry
mg zosta wykonany, dodano sekcj zakoczenia ((8
).
#'
''/
Na samym pocztku wydruku 1.2 moesz zauway element skadni znany jako klauzula
. W tej opcjonalnej klauzuli moesz wyliczy wszystkie moduy, od ktrych Twj
plik zaley. W naszym przypadku gwny plik programu 17 zaley od %,7.
W poprzedniej sekcji opisaem, co si dzieje podczas wykonywania programu. Ciekawe,
e co bardzo podobnego dzieje si podczas przetwarzania plikw w czasie kompilacji.
Pierwsza klauzula z gwnego pliku programu jest podawana do kompilatora. W przykadzie, ktry omawialimy, kompilator najpierw otworzy SimpleUnit.dpr i odkryje, e
%,7 zosta uyty w jego klauzuli . Zaczyna wic przetwarza %,7. Gdy skoczy,
wraca do pliku gwnego, napotyka nastpny modu w polu i zaczyna go przetwarza.
Jeli jakikolwiek modu z klauzuli programu gwnego zawiera pole , ktre
wskazuje na kolejne moduy, zostan one przetworzone przed moduami wyliczonymi
w programie gwnym.
Moduy mog zawiera swoje wasne pola . Pierwsze takie pole w module znajduje
si bezporednio pod sowem
(; drugie za sowem
:
'D
'
55
'8
'"D
61
Jeeli * zawiera 9 w swoim pierwszym , to 9 w swoim pierwszym
nie moe zawiera *. Jeli sprbujesz utworzy tak, niewaciw zaleno, zgoszony
zostanie bd
!!
(
. Aby temu zapobiec, przenie odwoanie do moduu
* w module 9 niej, do pola sekcji implementacji; lub odwrotnie w module
* przenie do teje sekcji odwoanie do moduu 9.
W wikszoci przypadkw to rozwie problem. W kilku jednak takie dziaanie nie wystarczy. eby zrozumie dlaczego takie rozwizanie moe nie dziaa, musisz wiedzie,
e modu * nie dostrzee adnych elementw w 9, dopki ten nie zostanie
zapisany w jego polu . Tak wic, jeli w interfejsie moduu * potrzebujesz odwoa si do czego, co zostao zadeklarowane w interfejsie moduu 9, musisz wpisa
9 na list pierwszego moduu *. Jeeli oprcz tego potrzebujesz wykorzysta w interfejsie moduu 9 co zdefiniowanego w interfejsie moduu *, to masz
pecha. Rozwa przykady przedstawione na wydrukach 1.5 i 1.6.
Modu deklarujcy typ TMyArray i uywajcy moduu unit2 w swojej klauzuli uses
'
'D
'
55
'"D
9%
9J9!9L0ME
'"9%D
E
'"9%E
'"9%D
' %
'
(
Modu wykorzystywany przez unit1, uywajcy typu TMyArray z moduu unit1
oraz definiujcy typ TUnit2Type, uywany przez modu unit1
'
'"D
'
55
'D
9%
E
'"9%?
-D
J99J9D
62
W przykadach tych mona wskaza zakorzeniony bardzo gboko istotny problem, ktrego
rozwizanie wymaga duej ostronoci. Obydwa moduy odwouj si do siebie nawzajem
w swoich pierwszych klauzulach . Nie jest to dozwolone, poniewa powoduje efekt
bdnego koa odwoa. Nie mona tego te rozwiza standardow technik przenoszenia
odwoania z sekcji interfejsu do sekcji implementacji. Nie da to podanego efektu, poniewa kady z moduw wykorzystuje elementy zadeklarowane w interfejsie drugiego.
Mwic cilej, 9 odwouje si do definicji typu %,/
Na koniec jeszcze jedna zasada, ktra powinna utkwi w pamici podczas konstruowania
moduw: kiedy deklarujesz poszczeglne sekcje w interfejsie, nie musisz zwraca uwagi
na ich porzdek. Zwykle sekcja
jest pierwsza, po niej nastpuje sekcja ,, a nastpnie sekcja
. Nic jednak nie stoi na przeszkodzie, aby odwrci ten porzdek. Co
wicej, moesz mie w interfejsie wiele sekcji danego typu. Np. po sekcji
moe
nastpowa sekcja ,, po ktrej moe znajdowa si znw sekcja
.
Moe wydaje Ci si nieco zaskakujce to, e Kylix zna tworzony przez Ciebie kod, nawet
jeli nie zosta on jeszcze skompilowany. Okazuje si, e kod, ktry wpisujesz, jest nieustannie, na bieco, kompilowany przez IDE. Jego binarna posta nie jest zapisywana
na dysk, lecz trzymana w pamici i uywana do wykrywania skadnikw kodu. IDE wie
np., czy pracujesz nad obsug zdarzenia, czy nad inn metod, ktr sam utworzye.
Informacja ta jest wykorzystywana przez IDE na zakadce Events w inspektorze obiektw,
63
ktry jest czsto czym wicej, ni tylko utworzon na dysku prost kopi struktur
znajdujcych si w pamici, cykl czenia jest przyspieszony. W szczeglnoci,
kompilator przetwarza kod i zapisuje z trudem zdobyte w tym procesie informacje
na dysk. Format plikw o i obj generowanych przez programy C++ jest bardzo
zoony i ma mao wsplnego z obrazem, ktry powstaje w pamici w wyniku
kompilacji. Odpowiednikiem plikw o i obj w Object Pascalu jest plik dcu. Z punktu
widzenia kompilatora te pliki s stosunkowo proste w zapisie i ponownym odczytaniu
do pamici. Jednym sowem, s one dla kompilatora prostsze w przetwarzaniu.
Prdko dziaania aplikacji Kyliksa skompilowanej bez zaczania informacji dla debugera, uruchomionej poza IDE, powinna by w zasadzie porwnywalna z prdkoci
dziaania aplikacji C lub C++. W chwili, gdy pisz te sowa, nie ma jeszcze ostatecznych
danych dla Kyliksa. W przeszoci jednak, kod skompilowany w Object Pascalu Borlanda
by tak szybki, jak kod C/C++, lub przynajmniej zaledwie o kilka procent wolniejszy.
W odrnieniu od Javy i Visual Basica, skompilowany kod Object Pascala nigdy nie by
trzy lub nawet cztery razy wolniejszy od kodu w C/C++.
!
"
Kolejne zadanie wykonywane w projektancie formularzy zwizane jest z przydzielaniem
przestrzeni poprzez prac z kontrolkami paneli i zakadek. Moesz np. chcie stworzy
aplikacj z list wyboru po lewej stronie. Gdy uytkownik kliknie list, w podwjnej
przestrzeni po jej prawej stronie bd pojawiay si dodatkowe informacje, jak pokazano
na rysunku 1.19. Co wicej, moesz chcie, by uytkownik mg zmienia rozmiar poszczeglnych elementw okna.
W Kyliksie i Delphi 6 istnieje specyficzny sposb przeciania operatorw z wykorzystaniem typu Variant
przyp. red.
64
Zoona forma
z wieloma
powierzchniami
kontrolka
rozdzielacza
(ang. splitter control)
pozwala na zmian
rozmiarw kadej z nich
W pustej przestrzeni po prawej stronie umie drugi panel i ustaw jego waciwo
/ na ).
Uruchom program i zmie rozmiary okna, tak by wygldao jak na rysunku 1.20. Zauwa,
e takie rozstawienie daje Ci trzy w peni regulowane przestrzenie, ktre jeli tego
zadamy bd zachowywa si jak formularze zagniedone w wikszym formularzu.
Moesz uy
rozdzielaczy
do stworzenia paneli
o zmiennych
rozmiarach;
mog Ci si one
przyda w Twoich
programach
65
Program powstay
na bazie paneli
o zmiennych
rozmiarach,
instruujcy
jak tworzy takie
wanie panele
%
%
Program $ czy w sobie wiele idei, ktre jak dotd zostay omwione w tym
rozdziale. Pokazano go na wydrukach od 1.7 do 1.9.
Kod programu PanelDesign
''
D
'
55
C95E'89%58.5558
FG%)'58F.
58F 58
F@'-58FA.58FC(.5D
9%
!55= B
>
>
D
C%'C%'D
>
">
D
>
Q>
D
C%'"C%'D
>
$>
D
'5 '5D
? -? -D
D
%( C):=C
(BD
%( '5.'6=C
(BD
%'
'5C'
- '5D
'
GC< C'
-D
%(>5 '55= % '5C'
- '5DC< ?
-BD
66
>'(' 5
%'
>'('
5
(D
D
' %
'
55
.(D
67
<:>!5D
'!0 % '5.
;(-'
C! % '5C'
-5L'MD
C!C'%A
(.)5=C8TQ"BD
'=CRU//B)
C!CITQ"D
'='!0B=<:>
(=CRU//BB)
-'
&) '
!CD
' % '5C'
-5L'IMRU//)
-'
<:>!5D
(5-'
<:>!D
'5J((=&) '
BD
&) '
!//D
(D
(5'C!//)
NN<'
'
5'='R= % '5.
;BB
(= % '5C'
-5L'IM!//B)
-'
<:>!D
&) '
!&) '
ICD
'5J((=&) '
BD
&) '
!//D
(5-'
C!C'%
65=CBD
C!CITQ"D
&) '
!&) '
IC
(D
(D
(D
(
Plik Instructions.txt, ktry okrela kolejne kroki budowania w Kyliksie multipanelowej aplikacji
E '23%
E5:-:H2':23'-
E '23
C%'
E5:-:H2':23&'()
0
E '23
(-'%
E5:-:H2':23J'-
.'
E '23
'%
E5:-:H2':23J'-
E '23
(-'6 %
C%'
E5:J'-
8:95623
0
E '23
:9%
>9%'5-:H2':2'J'-
:23.'
68
69
Zdarzenie 31
komponentu jest wywoywane tu przed wywietleniem go uytkownikowi. W momencie, gdy wywoywane jest to zdarzenie, wszystkie istotne elementy
Twojej aplikacji zostay ju zainicjalizowane. Inne zdarzenie, 3)
, jest wywoywane
przed 31
. 3)
jest dobrym miejscem na umieszczenie kodu, ktry nie wpywa na
wygld interfejsu programu. Jednake, jeli chcesz poustawia waciwoci formularza,
zanim ten zostanie wywietlony uytkownikowi, najlepiej zrb to w 31
, nie w 3)
.
Oto zdarzenie 31
dla gwnego formularza programu $:
%( C):=C
(BD
% '5C'
- '5D
-'
'5? 5 ( '=/'
5'
5/BD
'5!C'
- '5.D
% '5!C'
- '5.D
% '5 ( '=/(5'%'
5/BD
>5 '55= % '5BD
'5C'=//BD
% '5D
(D
Zauwa, e tylko jedn linijk zajmuje wczytanie do listy wyboru zawartoci pliku instructions.txt. Waciwo + listy jest typu 1
. Obiekt 1
zosta zaprojektowany z myl o przechowywaniu listy acuchw znakowych. Jeli umiecisz takowy
we waciwoci + obiektu 0
', acuch w zostanie wywietlony na licie wyboru.
Obiekt 1
0 pochodzi od obiektu 1
. 1
0 jest przeznaczony do
uytku jako pojemnik (ang. container) acuchw znakowych. Posiada wszystkie waciwoci obiektu 1
, nie jest jednak przywizany do adnej kontrolki. Reprezentuje
samego siebie.
Obiekt 1
0 posiada analogiczny obiekt, nazwany 0. Obiekt zosta
opracowany po to, by przechowywa dowolne obiekty, podczas gdy 1
0
utworzono po to, by przechowywa acuchy znakw. Te dwa obiekty odgrywaj razem rol
podobn do tej, jak odgrywaj kluczowe klasy w bibliotece STL w programach w C++.
Klasy 1
0 i 0 w Object Pascalu odgrywaj t sam rol, jak moe
odgrywa w Javie tablica obiektw 1
lub obiekt /
,0.
70
Funkcja
0 rozbija zawarto pliku descriptions.txt w taki sposb, e kady
akapit traktowany jest jako pojedynczy acuch znakw. Algorytm zaczyna od pocztku
pliku, wczytuje pierwsz lini, wyrzuca z jej pocztku i koca wszystkie biae znaki i zapisuje wynik do zmiennej
0. Potem w ptli znajduje nastpn lini w pliku, obcina
jej kocowe bity i dodaje do
0. Kontynuuje te dziaania do momentu napotkania
pustej linii. Jest ona traktowana jako znacznik koca akapitu i pocztek nowego. Tak
wic, gdy ma ju cay akapit, docza jego tekst do obiektu 1
0:
'5J((=&) '
BD
Algorytm kontynuuje swoj drog przez cay plik, dodajc akapit za akapitem do 1
4
0. Gdy skoczy, wychodzi z ptli i zwraca sterowanie z powrotem do metody
1
.
Parametr 1
przekazany metodzie 0
'*) jest kopi obiektu, ktry utworzy
zdarzenie. W tym wypadku zawsze bdzie to lista wyboru. Aby dosta si do obiektu,
skorzystam z zasad polimorfizmu i napisz kod, ktry wyglda tak:
%( '5.'6=C
(BD
9 '5 '5D
71
-'
'C
(' '5)
-'
9 '5! '5=C
(BD
9 '5? 5J((=/C2/BD
(D
(D
Kod ten jest wprawdzie poprawny, jednak w programie $ nie ma z niego poytku. Nie ma rzeczywistej potrzeby uywania obiektu 1
, wic po prostu go ignoruj.
W metodzie 0
'*) chciabym przede wszystkim wyznaczy nazw obrazka
towarzyszcego wyborowi uytkownika. Aby utworzy t nazw, wywouj metod
;16. Oywa ona waciwoci 0
'#++' do wyznaczenia pozycji na tej
licie, na ktrej klikn uytkownik:
'5< ! '5? ?
(ID
z Kyliksem. Znajdziesz go jednak wrd materiaw doczonych do tej ksiki; jest take
dostpny na mojej stronie WWW, o adresie www.elvenware.com.
'
?
"C>(0=<
-?
D
?
-B5'
-D
-'
C=58/W(/8L<MBD
:)'
-)=5BR
(
5!/0/I5D
(D
Zmienna jest predeklarowana dla wszystkich funkcji w Kyliksie. Zawsze jest typu
zwracanego przez dan funkcj. W tym wypadku jest acuchem.
W C/C++ i Javie warto zwracana przez funkcj wyznaczana jest przez uycie instrukcji
:
'
5D
5!"I"D
5D
72
%( C=
C55'
-DNN&23:
%%(4
5 5'
-DNNXK)5(
9 '
6 ' 19 '
5J-59
5BDNN&2'( '5
':HK)
Funkcja +91
: jest zakoczona nastpujc ptl :
:)'
-)=5BR
(
5!/0/I5D
Ten fragment kodu mwi, e F:F ma by wstawiane na pocztek acucha , dopki
nie osignie on dugoci okrelonej w zmiennej 0. Np. jeli wynosi 2, a 0
jest rwne 3, po pierwszym przejciu przez ptl bdzie miao warto 02, a po
drugim przejciu osignie 002. W tym momencie speniony zostanie warunek wyjcia
z ptli, a zatem zakoczy si ona.
Nie bd w tej ksice objania jak dziaa w Object Pascalu ptla . Dowiadczeni
programici znajd wszystkie istotne informacje o niej, wpisujc sowo , w edytorze
Kyliksa, umieszczajc na nim kursor i naciskajc klawisz F1. Pojawi si okno pomocy,
wywietlajce wszystkie informacje niezbdne do skonstruowania takiej ptli. W gruncie
rzeczy ptla jest po prostu ptl , bez wzgldu na to, czy pisana jest w C,
Object Pascalu, Javie czy BASIC-u.
73
Istnieje jeszcze drugi sposb na przetumaczenie w Object Pascalu liczby cakowitej na acuch:
C5'
-D
'?
-D
-'
'!"D
C!?
C='BD
(D
Jeli ktra z tych funkcji nie powiedzie si, to spowoduje wyjtek (ang. exception). Obydwie s
w bardzo duym stopniu intuicyjne i znakomicie zaprojektowane. Jak wszystkie dobrze zaprojektowane techniki, s one tak proste i oczywiste, e mona si tylko zastanawia, dlaczego ludzie
w ogle prbuj wykona to zadanie innymi sposobami.
acuch 6 zawiera sowo FF oraz tekstow wersj numeru pozycji zaznaczonej
na licie wyboru i rozszerzenie F#F. Jeli uytkownik klikn np. trzeci pozycj z listy,
warto 6 bdzie wynosia :G#.
Funkcja ;1
$
, pochodzca z moduu 0)
', wyglda nastpujco:
'
GC@'5'
-D
-'
5!A'>)=> C=0BBD
5!?
(''
->)@' '=5B
(D
74
$J. Jeli uyjesz tej funkcji w programie pod Windows, zapewni ona, e do acucha cieki doczony bdzie lewy (ang. backslash), a nie zwyky
ukonik (ang. slash).
Zarwno w C, jak i w Javie do wykonania tego samego zadania, ktre spenia
1
H:I, suy pierwsza warto parametru /
podanego w punkcie wejcia.
Kontrolka %
automatycznie zawija wyrazy i wstawia suwaki (ang. scrollbars), jeli
s one potrzebne. Waciwo 1
obiektu 1
0 pobiera z listy indeks tego
acucha, ktry chcesz wywietli i zwraca skojarzony acuch znakw. Jeli np. lista
acuchw zawiera L3L, L1,L, i L$!M N,L, to 0#1
O:P zwrci L3L,
a 0#1
O9P L$!M N,L.
Waciwo )
obiektu 1
0 mwi ile elementw znajduje si na licie.
Bd ostrony z uywaniem tej zmiennej: jej numeracja zaczyna si od 1, podczas
gdy waciwo 1
obiektu 1
0 od 0. Jeli np. w 1
0 znajduje
si jeden element, )
! bdzie rwne 1, ale do elementu dosta si bdzie mona poprzez %,1
0#1
O:P.
Jedyn czci programu $, ktrej nie omwiem, jest tkwicy u podstaw kod
CLX. Nie ma w Kyliksie czarnych skrzynek. Jeli chcesz zobaczy, jak jest zaimplementowany obiekt 1
0, uruchom system Kylix, umie w edytorze kursor na
sowie 1
0, kliknij prawym przyciskiem myszy i wybierz FindDeclaration.
Zostaniesz przeniesiony do miejsca deklaracji tego obiektu. Nastpnie moesz wcisn
Ctrl+Shift+Strzaka w d, eby przenie si do implementacji. Ale tu wybiegam ju
poza nakrelone ramy wykadu. Zagadnienie poruszania si w edytorze jest samo w sobie
na tyle istotne, e powic mu wicej miejsca w rozdziale 5.
Doszlimy do koca dyskusji na temat programu $. Mam nadziej, e to, i
wspomnielimy o nim w tym miejscu, pomogo Ci zgbi tajemnic tego, jak skonstruowa w Kyliksie prosty program.