You are on page 1of 55

IDZ DO

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

Kylix. Vademecum profesjonalisty

 

!!"# $ 
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

Kylix. Vademecum profesjonalisty

Uywanie okna CPU .....................................................................................................240


System pomocy Kyliksa ................................................................................................242
Elf Debug Server .................................................................................................................243
Usugi w module DebugHelp ........................................................................................254
Dane wyjciowe z moduu DebugHelp .........................................................................255
Wysyanie informacji do pliku ......................................................................................256
Wysyanie informacji do serwera HTTP .......................................................................257
Odbieranie informacji HTTP na serwerze.....................................................................258
Pole listy typu owner draw ............................................................................................259

* 

+#,# *
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

Tworzenie nieprostoktnych formularzy .............................................................................322


Dziedziczenie formularzy..............................................................................................323
Przedefiniowanie inicjalizacji widgetu..........................................................................325
Rysowanie ksztatu formularza .....................................................................................329

0 

#"#1"

Strona teoretyczna architektury komponentw ...................................................................331


Tworzenie komponentw potomnych .................................................................................333
Zapisywanie owocw swojej pracy...............................................................................338
Okrelanie cech komponentu.........................................................................................338
Testowanie komponentu................................................................................................340
Pakiety: umieszczanie komponentu na palecie....................................................................341
Czym jest pakiet?...........................................................................................................341
Pakiety i LD_LIBRARY_PATH...................................................................................342
Pakiety i paleta komponentw.......................................................................................344
Tworzenie pakietw.............................................................................................................345
Pakiety projektowe i wykonawcze ................................................................................347
Ikony: praca z plikami dcr .............................................................................................348
Jednoczesne otwieranie pakietu i projektu ....................................................................348
Klauzula requires...........................................................................................................348
Rejestrowanie komponentw ........................................................................................349
Korzystanie z pakietw wewntrz programu.......................................................................349
Wejcie do pakietu w czasie dziaania programu ................................................................353
Tworzenie obiektu wspdzielonego ...................................................................................354
Wywoywanie procedur z biblioteki w Kyliksie ...........................................................357
Dynamiczne adowanie obiektw wspdzielonych............................................................358

/ 

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

 %  3#1 &%


Waciwoci .........................................................................................................................406
Deklarowanie waciwoci ............................................................................................406
Ogldanie waciwoci w inspektorze obiektw ...........................................................409
Wicej o waciwociach .....................................................................................................410
Budowanie komponentw od podstaw ................................................................................421
Komponent zegara ...............................................................................................................423
Poznanie TElfClock.......................................................................................................429
Metoda Paint zegara ......................................................................................................430
Komponent TElfColorClock .........................................................................................431
Tworzenie fantazyjnego zegara .....................................................................................432

10

Kylix. Vademecum profesjonalisty

Tworzenie ikon dla komponentw ......................................................................................436


Tools API: edytory waciwoci i komponentw ................................................................437
Kod fazy projektowej i kod fazy wykonawczej ............................................................442
Tools API w Kyliksie ....................................................................................................442
Tools API i Wine...........................................................................................................443
Tools API i interfejsy ....................................................................................................443
Edytory waciwoci......................................................................................................444
Wicej na temat rejestrowania komponentw i ich edytorw.......................................449
Edytory komponentw ..................................................................................................451
Kilka sw na temat pielgnacji komponentw.............................................................452
Szablony komponentw.......................................................................................................453

  4(#5"# &


Najwaniejsze obiekty moduu QGraphics.pas ...................................................................455
TCanvas ...............................................................................................................................456
Bezporednie wykorzystywanie funkcji biblioteki Qt.........................................................457
Zmiana ukadu wsprzdnych......................................................................................460
Kolory ..................................................................................................................................462
Pdzle...................................................................................................................................463
Pira .....................................................................................................................................467
Czcionki ...............................................................................................................................472
Rysowanie figur geometrycznych .......................................................................................474
Zastosowanie zbir Mandelbrota....................................................................................478
Naciganie gumki ......................................................................................................487
Zachowywanie obrazu...................................................................................................489
Definiowanie zdarze i obsuga zdarzenia OnPaint ......................................................491
LoadResource odczyt sceny pocztkowej ................................................................492
Zastosowanie labirynt pseudo-3D ..................................................................................493
Architektura wiata pseudo-3D .....................................................................................494
Tworzenie elementw graficznych................................................................................496
Powierzchnie i buforowanie dublujce..........................................................................497
Podstawowy kod maszynerii .........................................................................................498
Implementowanie interfejsw .......................................................................................520
ISimpleSurface projektowanie wymiennego zaplecza .............................................523
Rysowanie cian segmentw we waciwej lokalizacji.................................................525

    
 !   
 "
   # $#!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

   "6# &


Sposoby wykonywania aplikacji w Linuksie.......................................................................547
Obsuga wtkw w Kyliksie ................................................................................................549
Dostp do pamici w wtkach .......................................................................................551
Bdy synchronizacji i bezpieczestwo wtku ..............................................................551
Metoda Synchronize obiektu wtku ..............................................................................552
Sekcje krytyczne............................................................................................................553
Synchronizator Multi-Read Exclusive-Write ................................................................554
Mechanizmy blokowania...............................................................................................554
Ukoczenie i przerwanie pracy wtku...........................................................................555
Debugowanie wielowtkowych aplikacji......................................................................556
Kilka ostatnich sw na temat wtkw ..........................................................................557
Kontrola procesw w Linuksie i komunikacja midzyprocesowa ......................................557
Tworzenie nowych procesw ........................................................................................558
Sygnalizowanie procesw .............................................................................................560

#  !  "$


 &  "7-,. *
Architektura DataCLX.........................................................................................................563
Dostp do danych.................................................................................................................563
czenie si z baz danych............................................................................................564
Odbieranie danych.........................................................................................................565
Wizualne kontrolki danych ..................................................................................................566
Wywietlanie danych za pomoc wizualnych kontrolek danych ..................................566
Typowy przepyw danych....................................................................................................571
Interaktywna manipulacja danymi.................................................................................571
Publikowanie danych.....................................................................................................572
Konfigurowanie serwera......................................................................................................573
cze do InterBase ........................................................................................................574
cze do MySQL...........................................................................................................575
cze do DB2 ................................................................................................................575
cze do Oracle .............................................................................................................576

   #"



TSQLConnection .................................................................................................................577
Waciwoci komponentu TSQLConnection ................................................................579
Metody TSQLConnection .............................................................................................580
Zdarzenia TSQLConnection..........................................................................................581
TSQLDataSet.......................................................................................................................583
TSQLQuery .........................................................................................................................584
TSQLStoredProc..................................................................................................................584
TSQLTable ..........................................................................................................................584
TClientDataSet.....................................................................................................................585
Waciwoci TClientDataSet.........................................................................................586
Metody TClientDataSet.................................................................................................588
TDataSetProvider.................................................................................................................592
TSQLClientDataSet .............................................................................................................593
TSQLMonitor ......................................................................................................................593
Przykady zwykego uycia zestaww danych ....................................................................595
Kwerendy.......................................................................................................................595
Pola wizane ..................................................................................................................595
Kwerendy parametryzowane .........................................................................................597
Zwizki master-detail ....................................................................................................597

12

Kylix. Vademecum profesjonalisty

Dostosowywanie arkusza detali.....................................................................................598


Pola kalkulowane...........................................................................................................599
Lokalne przeszukiwanie przyrostowe ...........................................................................600
Lokalne filtrowanie........................................................................................................602
Zakadki .........................................................................................................................602
Uywanie procedur zapisanych w bazie danych ...........................................................605
Tymczasowe klucze po stronie klienta..........................................................................607
Pola agregowane............................................................................................................608

 *  "
*
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

   2 "$# $ *&


Opis aplikacji .......................................................................................................................647
Definiowanie bazy danych...................................................................................................647
Tabele ............................................................................................................................648
Indeksy...........................................................................................................................651

Spis treci

13

Ograniczenia danych .....................................................................................................652


Generatory .....................................................................................................................652
Procedury przechowywane w bazie danych..................................................................653
Wyzwalacze...................................................................................................................655
Podstawowy projekt.............................................................................................................657
Modu danych ................................................................................................................657
Graficzny interfejs uytkownika..........................................................................................661
Prezentowanie danych ...................................................................................................661
Edycja danych................................................................................................................662
Rozszerzanie funkcjonalnoci .......................................................................................663
Interfejs WWW....................................................................................................................665
Formatowanie ................................................................................................................665
Rozmieszczenie danych.................................................................................................669
Nawigowanie .................................................................................................................672

 0  " $# $'"


*
Wstp ...................................................................................................................................675
Zapeniaj baz danymi .........................................................................................................676
Monitoruj komunikacj SQL ...............................................................................................676
Unikaj trzymania transakcji otwartych przez dugi okres czasu..........................................677
Nie parametryzuj zapyta zawierajcych sowo like...........................................................677
Unikaj kluczy podstawowych i kluczy obcych....................................................................678
Uywaj procedur skadowanych w bazie.............................................................................679
Bd wyzwolony ..............................................................................................................680
Bd wymagajcy ................................................................................................................680
Parametryzuj i przetwarzaj zapytania w celu zmaksymalizowania wydajnoci..................681
Unikaj pobierania wszystkiego ............................................................................................681
Zasady Roba o zczeniach zewntrznych lewostronnych ..................................................681
Zaprojektuj odpowiednio baz danych..........................................................................682
Uyj skorelowanych podzapyta...................................................................................683
Uyj procedur przechowywanych w bazie danych .......................................................683
Uyj sprze zewntrznych lewostronnych.................................................................684
Buforuj tabele powiza w duych bazach danych z wieloma uytkownikami..................684
Uywaj sprytnych powiza ................................................................................................685
Wycz metadane .................................................................................................................685
Potrzebujesz szybkoci? Wycz opcj synchronicznego zapisu ........................................686
Indeksowanie bazy danych ..................................................................................................686
Selektywno .................................................................................................................686
Ostronie z kluczami obcymi ........................................................................................687
Indeksy wielokolumnowe..............................................................................................687
Porzdek w indeksie ......................................................................................................687
Indeksuj oszczdnie.......................................................................................................687
Wskazwki dotyczce InterBase .........................................................................................687
Nie uywaj duych typw varchar ................................................................................687
W swojej kocowej aplikacji uywaj zawsze zdalnego poczenia ..............................688
Uywaj stron o wielkoci 2 kB lub 4 kB .......................................................................688
Plany indeksw..............................................................................................................688
Okrel bufor podrczny bazy danych przy pomocy Gfix..............................................694
Uruchamiaj InterBase na maszynach jednoprocesorowych ..........................................694

14

Kylix. Vademecum profesjonalisty

#

%%%$"

 /  # $


 */
Aplikacje internetowe ..........................................................................................................697
Aplikacje CGI................................................................................................................698
Formularze.....................................................................................................................698
Serwer WWW Apache.........................................................................................................699
Kylix i CGI ....................................................................................................................700
Konfiguracja dla CGI ....................................................................................................703
Konfiguracja dla DSO ...................................................................................................704

%  # $ %


Modu aplikacji ....................................................................................................................707
Nowa aplikacja internetowa.................................................................................................708
Komponenty WebBroker .....................................................................................................709
TWebDispatcher............................................................................................................709
TWebModule.................................................................................................................711
TWebResponse..............................................................................................................713
TWebRequest ................................................................................................................713
Prezentowanie danych .........................................................................................................715
Symulowanie zapytania GET ........................................................................................717
Generowanie stron ...............................................................................................................718
TPageProducer...............................................................................................................718
HTMLDoc kontra HTMLFile .......................................................................................721
TDataSetPageProducer..................................................................................................722
Generowanie tabel ...............................................................................................................730
TDataSetTableProducer.................................................................................................731
Poprawianie wygldu strony .........................................................................................736
Zwizek Master-Detail ..................................................................................................737

  31 &


Nowa wersja WebApp42 .....................................................................................................741
Producer i ProducerContent...........................................................................................742
dbExpress.............................................................................................................................742
TDataSetTableProducer.......................................................................................................744
TSQLQueryTableProducer............................................................................................745
PrepareSQLQueryTableProducer..................................................................................748
Zarzdzanie informacj o stanie ..........................................................................................750
Rozszerzone URL..........................................................................................................751
Mechanizm Cookies ......................................................................................................755
Ukryte pola ....................................................................................................................757
Zaawansowane wytwarzanie stron ......................................................................................759
Obrazki.................................................................................................................................764
Strategie midzyplatformowej uniwersalnoci kodu ...........................................................772

 & !  ''"


8# 

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.

  


IDE Kyliksa moe by dostosowane do Twoich potrzeb. Moesz na nowo rozplanowywa,
modyfikowa, dodawa i usuwa oraz generalnie rekonfigurowa paski narzdzi tak, aby
odpowiaday Twojemu stylowi programowania.
Najbardziej oczywist cech IDE jest to, i pozwala przeciga i upuszcza wizualne
obiekty (takie jak pola edycji czy listy wyboru) wprost na formularz. Obiekty te mona
potem modyfikowa i dowolnie ukada, tworzc tym samym potny interfejs dla swojej
aplikacji.
Sam edytor obsuguje wiele rnych ukadw klawiszy; moesz ponadto zmienia ustawienia kolorw a take rozmiar i rodzaj czcionki. Konfiguracji mona take podda
mnstwo innych parametrw edytora, wcznie z ustawieniami tabulacji, gruboci ramek,
trybem wstawiania, wyrnianiem skadni i wieloma innymi cechami, zbyt licznymi, by
je tu przytacza.

32

Cz I  Poznanie Delphi i Linuksa

Pracujc z edytorem moesz otrzyma natychmiastow pomoc kontekstow na temat


metod, ktrych uywasz. Przydatne informacje mog pochodzi z samego systemu pomocy lub z narzdzia o nazwie Code Insight, ktre pokazuje parametry dla wywoywanej
metody lub list metod dostpnych dla konkretnego obiektu. Code Insight mona wykorzysta nie tylko w stosunku do kodu CLX API, lecz take dla tego, ktry jest wanie pisany.
Nawet system menu Kyliksa moe by rozszerzony. Moliwe jest dodanie do menu nowych
pozycji, ktre pozwalaj uruchamia inne aplikacje. Na przykad jak przekonasz si
jeszcze w tym rozdziale mona w atwy sposb tak skonfigurowa IDE, eby rdo,
nad ktrym pracujesz, otwierane byo w emacs lub jakim innym edytorze.
W tym rozdziale przedstawiono wszystkie wymienione dotychczas funkcje IDE. Z dalszej
czci ksiki dowiesz si wicej na temat cech IDE; niektre z nich, bardziej zaawansowane, zostan omwione znacznie dokadniej. W tym rozdziale na przykad omwi
pokrtce, jak przeciga komponenty na formularz. Jednak dla penego zrozumienia
komponentw i ich relacji z IDE trzeba bdzie pozna znacznie wicej (niekiedy bardzo
zoonych) szczegw, w zwizku z czym wikszo Czci II, zatytuowanej CLX,
przeznacz na nauczenie Ci tego, jak budowa wasne komponenty.
Cae IDE moe zosta rozszerzone przez uycie szeregu obiektw nazwanych Tools API.
Te procedury pozwalaj waciwie na dodanie nowych funkcji do IDE i na znaczce
poszerzenie ju istniejcych. Tools API omwi w rozdziale 8. Pakiety i kod
wspdzielony.

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

Rozdzia 1.  Programowanie wizualne

33

rde, w znajdowaniu metod i parametrw, ktrych potrzebujesz; bdziesz mg rwnie


przekona si, e zamienia on pisanie kodu w stosunkowo przyjemny i intuicyjny proces.
Po omwieniu wszystkich waniejszych tematw zajm si jeszcze pokrtce scharakteryzowaniem niektrych z mniej istotnych, lecz dodajcych mocy cech IDE kreatorw,
ramek i wywoa zewntrznych narzdzi; wspomn take o systemie pomocy.
Cho nie wszystkie funkcje IDE s oczywiste dla pocztkujcych, adna z nich nie jest
szczeglnie trudna do zrozumienia. Z tego wzgldu uporanie si ze wszystkimi zawartymi w tym rozdziale informacjami nie powinno by szczeglnie wielkim wyzwaniem.
Ja ze swej strony przez cay czas bd stara si dawa rady uyteczne dla programistw
Javy, VB i Visual C++, ktrzy mogliby by zainteresowani wyprbowaniem nowej technologii. Poza tym bd take pamita o tych uytkownikach edytora emacs (czy vi), ktrzy
chcieliby zapuci si na to stosunkowo nowe i prawdopodobnie nieco podejrzane z ich
punktu widzenia terytorium; postaram si zamieci tak wiele kierowanych do nich wskazwek, ile to tylko moliwe. Mam nadziej, e wszyscy nowi uytkownicy Kyliksa polubi to potne i niezwykle uyteczne, a zarazem nie sprawiajce wielkich kopotw
w obsudze narzdzie.
Ten rozdzia jest tematycznie bardzo zbliony do rozdziau 5., zatytuowanego Edytor
i debugger. Razem przedstawiaj one cae IDE Kyliksa. W poczeniu z pozostaymi
rozdziaami z czci I Poznanie Delphi i Linuksa pozwalaj natomiast pozna
funkcjonowanie Object Pascala.



  


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

Cz I  Poznanie Delphi i Linuksa

W kolejnych partiach tej ksiki bd stara si przedstawi Ci kady z tych skadnikw,


omawiajc je wszystkie moliwie najbardziej szczegowo. Jednake moe si zdarzy,
e jeszcze zanim nadejdzie czas na pene wytumaczenie jakiego zagadnienia, bd bez
uprzedniego przygotowania nawizywa do niektrych z nich. W takich przypadkach
moesz spojrze wanie na rysunek 1.1, aby zobaczy, ktr cz IDE omawiam. Oczywicie, wkrtce potem otrzymasz take wszystkie niezbdne do penego zrozumienia problemu informacje.



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

Rozdzia 1.  Programowanie wizualne

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

Cz I  Poznanie Delphi i Linuksa

wpisz nazw swojego katalogu domowego, np.  


. Kliknij Macros, przewi
list i wybierz $EDNAME. To makro przekae do programu pen ciek pliku bdcego na wierzchu w edytorze. Kliknij OK w oknie dialogowym Tools Property, a nastpnie przycisk Close w oknie Tools Option. Na rysunku 1.4 pokazano, jak powinno
wyglda poprawnie uzupenione okno dla standardowej instalacji Red Hata.

Okno dialogowe
Tool Properties

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.

Rozdzia 1.  Programowanie wizualne

37

Do paska narzdziowego mona take dodawa poszczeglne elementy. Kliknij na pasku


prawym przyciskiem myszy. Wybierz pozycj Customize (Dostosuj), znajdujc si na
samym dole wywietlonego menu kontekstowego. W efekcie pojawi si okno dialogowe
Customize. Bdzie ono otwarte na zakadce Toolbars, z ktrej moesz wybra interesujce Ci paski narzdzi (moesz take ukry te, ktrych nie bdziesz uywa). Przenie
si teraz do zakadki Commands, klikajc na niej. Jak wida na rysunku 1.5, jest ona
podzielona na dwie czci; po lewej stronie znajduj si kategorie komend, za po prawej
same komendy. Gdy klikniesz jak kategori, np. Debug, po prawej stronie pojawi si
rne komendy nalece do wybranej kategorii. Teraz moesz klikn dowoln z ikon
komend i przecign j na pasek. Dla wyprbowania tego przecignij w ten sposb
ikon Breakpoints z kategorii Debug; w efekcie ikona ta pojawi si na pasku narzdzi.
Rysunki 1.5 i 1.6 ilustruj to, o czym bya tu mowa.

Zakadka Commands
w oknie Customize

 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

Cz I  Poznanie Delphi i Linuksa

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

na ksztat oszukiwania. Wydaje mi si, e co jest nie tak ze sprowadzaniem


skomplikowanych zada do tak prostych czynnoci. Prawdziwym celem
programistw jest znalezienie jak najlepszego sposobu wykonania danego
zadania. Wiadomo, e wikszo zdrowych ludzi, majc do czasu, potrafiaby
przej drog z San Francisco do Nowego Jorku. Jednake w wikszoci
przypadkw szczeglnie wtedy, gdy dotyczy to biznesu przelot samolotem
okazuje si taszy, bezpieczniejszy i bardziej wskazany, gdy chodzi o przemierzanie
kontynentu. Podobnie programowanie wizualne dostarcza oszczdnych i wydajnych
sposobw tworzenia interfejsu dla wikszoci aplikacji. Nie ulega wtpliwoci,
e kady moe stworzy ten sam interfejs piszc kod w edytorze Kyliksa,
ale atwiejszym, prostszym i zwykle bezpieczniejszym sposobem jest zbudowanie
go przy uyciu narzdzi wizualnych.
 Zarzut drugi: Syszaem, e wizualne komponenty s due i nieporczne,

a ponadto nie mog by wczone bezporednio do pliku wykonywalnego.


Zarzut ten jest uzasadniony, jeli chodzi o niektre narzdzia wizualne, lecz nie
stosuje si do Kyliksa. Dziki dziedziczeniu, komponenty zawieraj bardzo niewielk
porcj dodatkowego kodu w Object Pascalu, ktry pozwala nimi manipulowa
w czasie tworzenia aplikacji. w kod nie jest rozwleky. Niektre z wizualnych
komponentw mog by nieporczne, lecz te, ktre wchodz w skad Kyliksa,
nie s wiksze (pod wzgldem rozmiaru), ni jest to konieczne. Co wicej,
mona je w zalenoci od potrzeb wcza bezporednio do aplikacji.
Ta cz kodu, ktry sprawia, e komponent jest tym, czym jest, napisana jest
dokadnie w Object Pascalu. Z tego powodu kod ten moe by wczony
bezporednio do programu w taki sam sposb, w jaki moe by wczony kady inny
obiekt (niektre czci komponentw nie s napisane w Object Pascalu, lecz zamiast
tego s czci opartej na C/C++ biblioteki Qt. Ten temat poruszony zosta w drugiej
czci tej ksiki, traktujcej o CLX). Jeli mam by szczery, powinienem
wspomnie o tym, e caa biblioteka CLX jest do dua, tak jak due s MFC, Qt,
GTK i inne biblioteki oparte na OOP. Na poziomie komponentw kod potrzebny
do stworzenia kontrolki nie jest jednak szczeglnie duy.
 Zarzut trzeci: Kady moe programowa wizualnie. Jestem prawdziwym

programist i chc wykonywa prac wspmiern do moich umiejtnoci


(poza tym, co z moj gwarancj pracy, jeli programowanie staje si niczym
wicej ni przeciganiem mysz rnych elementw?). Jeli naprawd jeste dobrym
programist, strat czasu bdzie dla Ciebie uprawianie nucego i powtarzalnego
programowania, jakie stanowi serce i dusz wikszoci prac nad tworzeniem
interfejsu. Narzdzia do programowania wizualnego pozwalaj szybko upora si
z nudnymi czynnociami, tak by mg skoncentrowa si na bardziej interesujcych
i ambitnych zadaniach. Po drugie, programowanie wizualne stwarza w rzeczywistoci
miejsca pracy na polu pisania komponentw interfejsu. Do opracowania dobrego
komponentu potrzeba programisty z wielkimi umiejtnociami w kodowaniu,

Rozdzia 1.  Programowanie wizualne

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

Cz I  Poznanie Delphi i Linuksa




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.

 Paleta komponentw otwarta na zakadce Standard



Projektant formularzy
z umieszczonymi
rnymi
komponentami


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.

Rozdzia 1.  Programowanie wizualne

41


Okno Palette
Properties umoliwia
zmian wygldu
palety komponentw

Moesz klikn lewym przyciskiem na tekcie w oknie Pages (zakadki) i przecign go


na now pozycj. Przejd dla przykadu na sam d listy, znajd pozycj znajdujc si
tutaj na ostatnim miejscu i przecignij j na sam gr. Gdy zamkniesz okno, zobaczysz,
e ostatnia staa si pierwsz, a pierwsza no c nie ostatni, lecz drug.
Dalsze zgbianie okna Palette Properties ujawnia moliwo rearanacji komponentw,
usuwania ich z listy oraz ukrywania. Do wspomnianego okna mona dosta si rwnie
poprzez menu Component, pod pozycj Configure Palette. Dodatkowe moliwoci konfigurowania palety uzyskamy przez proste kliknicie prawym przyciskiem myszy na samej
palecie komponentw (pamitaj, eby podczas korzystania z IDE prbowa klika prawym
przyciskiem myszy po prostu na wszystkim dookoa).



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

Cz I  Poznanie Delphi i Linuksa


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

Rozdzia 1.  Programowanie wizualne

43

w projektancie formularzy. Moesz w trakcie projektowania nim manipulowa. W czasie


wykonywania Twj projekt bdzie wywietla interfejs, ktry stworzye w narzdziu
projektanta formularzy.

"



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

Zauwa, e moesz rwnie przej nieco wyej, a do waciwoci Caption (podpis)


i zmieni tekst pojawiajcy si na przycisku. Zwr rwnie uwag na fakt, i z utworzonym komponentem zwizanych jest wiele innych waciwoci. Moesz wybra dowoln z nich i nacisn F1, aby uzyska pomoc na jej temat patrz rysunek 1.14.
Kliknij przycisk, ktry umiecie w formularzu. Teraz przytrzymaj klawisz Ctrl i wcinij
kilkakrotnie klawisze kursora na klawiaturze. Zobaczysz, e przycisk przesuwa si w gr
i w d, w lewo i w prawo, za kadym razem po jednym pikselu. Zdejmij palec z klawisza
Ctrl i zamiast niego wcinij klawisz Shift. Wciskaj teraz jedn ze strzaek; odkryjesz, e
mona zwiksza i zmniejsza szeroko i wysoko komponentu po jednym pikselu.
S to mae drobiazgi, ktre podczas tworzenia formularza mog okaza si bezcenne.
Gdy klikniesz umieszczony w formularzu komponent prawym przyciskiem myszy, w wywietlonym w efekcie menu podrcznym znajdziesz opcje rozmieszczenia komponentw,
takie jak Align (uoenie), Size (rozmiar), Scale (skalowanie) i Align to Grid (dopasowanie

44

Cz I  Poznanie Delphi i Linuksa


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.

Rozdzia 1.  Programowanie wizualne

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

Moesz rwnie filtrowa zdarzenia. Umie przycisk w formularzu, a nastpnie zmie


element aktywny na narzdzie inspektora obiektw. Upewnij si, czy przycisk w formularzu jest wybrany i czy jest widoczny w inspektorze. Kliknij prawym przyciskiem myszy

46

Cz I  Poznanie Delphi i Linuksa

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    :


Ta dyrektywa informuje kompilator o tym, e cz definicji dla formularza z tego moduu


znajduje si w pliku xfm. T lini kodu znajdziemy we wszystkich moduach zawierajcych bezporednich potomkw 
, natomiast te rda, ktre nie zawieraj formularzy,
zwykle jej nie potrzebuj.




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.

Normalnie nie ma potrzeby edytowania kodu w plikach xfm; robi si to w wyjtkowych


sytuacjach. Standardowo ich zawarto kontroluje si poprzez dokonywanie zmian w projektancie formularzy lub w inspektorze obiektw. A jednak kod ten moe by edytowany
i czasami okazuje si to przydatne.
Pliki xfm mog mie zarwno posta binarn, jak i tekstow, zalenie od ustawienia w menu
Tools, Environment, Preferences, Form Designer, New Form As Text (ten sam efekt moesz
uzyska lokalnie, klikajc formularz prawym przyciskiem myszy i wybierajc Text xfm).
Aby zobaczy rdo formularza, moesz otworzy tekstowy plik xfm w edytorze, ale
moesz take w czasie jego projektowania klikn na nim prawym przyciskiem myszy
i wybra z menu View As Text.
Istnieje take program uytkowy wywoywany z linii polece, nazwany  
,
ktry dokonuje konwersji z wersji tekstowej na binarn i vice versa. Aby go uruchomi,
wpisz po prostu polecenie podobne do nastpujcego:
  

Zanim uyjesz tego polecenia, upewnij si, czy masz dobrze zdefiniowan ciek
dostpu; niektre dystrybucje Linuksa wyposaone s w programy o identycznej nazwie.

Rozdzia 1.  Programowanie wizualne

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
 (

Zmie teraz waciwo )   tak, eby zamiast  * znalazo si +(! 


!!,

 !  ! !  !  !  


!  (! -!  ! ! ! #
.!/
! . Kliknij prawym przyciskiem myszy i wybierz z menu View As Form.
Teraz zmie rozmiary przycisku i obejrzyj rezultaty swojej rcznie wykonanej pracy.
Moesz dalej poeksperymentowa podczas przegldania formularza w formie tekstowej,
zmieniajc  ,  i pozostae wasnoci.
Teraz przejd do jakiego edytora tekstowego. Jeli chcesz, moesz uy edytora Kyliksa
lub wybra inny jak KWrite lub KEdit ktry dzieliby schowek z Kyliksem. W tym
edytorze napisz co nastpuje:
  "
 !"0
 %!0
&'()!*+
,'-)!"+
.%' !
/1( 23 45 6 35'78-(95'45 )9 98 '7'-(95'4: 5' 9;;
&'' & (5: )/(!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

Cz I  Poznanie Delphi i Linuksa

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.

Rozdzia 1.  Programowanie wizualne

49

Jeli poprawnie wykonae zadanie, przyciski nie bd chowane (wykonujc t akcj


moesz odkry, e podwjnym klikniciem na polu logicznym odwracasz jego ustawienie,
tzn. z wartoci  zmieniasz je na 
, a z 
 na ). Obejrzyj program ButtonAnchor, aby zobaczy, jak program powinien si zachowywa, jeli te wartoci zostay
poprawnie ustawione.
Ci, dla ktrych praca w Object Pascalu jest czym zupenie nowym, mog by
zainteresowani faktem, e stae 
 i  pisane s wielk liter, podczas gdy
dla pozostaych staych uywa si maych liter. Jest to rozwizanie inne ni przyjte
w jzyku C, w ktrym w nazwach staych wystpuj tylko wielkie litery, oraz w Javie,
w ktrej uywa si tylko maych liter. Co wicej, 
 i  s wartociami
wbudowanymi w kompilator, wic nie s nigdy deklarowane w adnym z plikw
rdowych Pascala. Oczywicie Pascal nie jest jzykiem, ktry rozrnia wielko
liter; nie ma dla niego znaczenia, czy napiszesz , (, (/01, czy (0.
Dobrze jest jednak zgodnie z konwencj zaczyna wszystkie nazwy zmiennych
i wikszo nazw typw wielk liter. Wyjtkiem od tej zasady s typy wyliczeniowe,
ktrych elementy zaczynaj si maymi literami:
<'- != '58 >' 8 <8  58 ? 58 @8 A('8
> 58 . 8 5)B

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

Cz I  Poznanie Delphi i Linuksa

 &
# 
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

Rozdzia 1.  Programowanie wizualne

51

Teraz uruchom opracowany przez Ciebie program i nacinij przycisk. Pojawi si okno
dialogowe, wywietlajce tekst, ktry podae metodzie 1 %.

    


Jeli dokadnie ledzie tre poprzedniego podrozdziau i utworzysz domylne zdarzenie
dla formularza, do Twojego programu zostanie wstawione zdarzenie 
)
 :
% (    .=C ( BD
-'
 (D

Jeli po uruchomieniu programu wrcisz do edytora, eby zobaczy rdo, odkryjesz,


e nagwek dla zdarzenia 
)
  znikn. Gdzie si podzia?
Metody generowane przez IDE, ktre nie zawieraj kodu, s automatycznie usuwane,
gdy zapisujesz rdo lub uruchamiasz program. Mwic cilej, zasada ta jest prawdziwa
dla wszystkich procedur obsugi zdarze (ang. event handlers) napisanych w standardowy
sposb, bez wzgldu na to, czy zostay wygenerowane przez IDE.
A co moesz zapyta oznacza standardowy sposb dla obsugi zdarzenia? Aby
znale poprawn odpowied na to pytanie, warto przyjrze si na wydruku 1.1 caemu
rdu moduu, ktry stworzylimy.
  Kod rdowy prostego moduu z dwiema procedurami obsugi zdarze
 'E 'D
'  
55
C95E'589%58.5558FG%)' 58F.  58F  58F@' -58
FC(.5D
5
@' (!/&5956'H 7  95165 86:8/I
/6 % 59'2:'H H956:' 9/D
9%
  ! 55=  B
  D
% ( .' 6=C ( BD
% (  .=C ( BD
%'
>'( ' 5

%'
>' ( ' 5

 (D

    D

52

Cz I  Poznanie Delphi i Linuksa

' %  '




% (   .' 6=C ( BD


-'
C) :55-=@' (BD
 (D
% (    .=C ( BD
-'
 (D
 (
'  
55
&' ( :5855-58C95E'58
.5558G%)' 58.  58
  58@' -58C(.58
A.5D
5
@' (!/J % 5()' -5'6( 8/I
/%)  8( % (:85) '-) ' -/D
9%
  ! 55=  B
  D
% ( .' 6=C ( BD
% (  .=C ( BD
%'
>'( ' 5

%'
>' ( ' 5

 (D

    D
' %  '
@

% (   .' 6=C ( BD


-'
C) :55-=@' (BD
 (D
% (    .=C ( BD
-'
 (D
 (

Rozdzia 1.  Programowanie wizualne

53

W nastpnych kilku sekcjach znajdziesz szczegowe opisy rnych elementw tego


pliku rdowego. W szczeglnoci skoncentrujemy si na rnicy pomidzy interfejsem ( 
() a implementacj (   ).


!
 '  
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

Sekcja druga zaczyna si sowem  


( i koczy dokadnie przed sowem 4
   :
'  
55
C95E'589%58.5558FG%)' 58F.  58
F  58F@' -58FC(.5D
5
@' (!/&5956'H 7  95165 86:8/I
/6 % 59'2:'H H956:' 9/D
9%
  ! 55=  B
  D
% ( .' 6=C ( BD
% (  .=C ( BD
%'
>'( ' 5

%'
>' ( ' 5

 (D

    D

Rzecz jasna, ta cz kodu nazywana jest interfejsem programu. Pod ni znajduje si cz


implementacji. Rozciga si ona od pocztku sowa     a do koca rda,
ktry zawsze oznaczony jest sowem kluczowym , po ktrym nastpuje kropka.
W sekcji interfejsu zawarte s deklaracje dla moduu, jednak bez waciwego kodu. Sekcja
ta przypomina nieco plik nagwkowy dla programu w C lub C++, z t tylko rnic, e
jest zintegrowana z implementacj w jednym pliku rdowym. A zatem, w Pascalu
wybrano drog poredniczc pomidzy Jav a C/C++. Inaczej ni w C/C++, cay kod
danego moduu znajduje si w pojedynczym pliku. Inaczej ni w Javie, cz deklaracyjna
obiektu jest wyranie odseparowana od jego implementacji.
Sekcja interfejsu skada si z trzech czci:
 Pole  tutaj znajdziesz list innych moduw, od ktrych ten jest zaleny.
Jest to ekwiwalent dyrektywy 5 w C++ i 
w Javie. Cho nie jest

54

Cz I  Poznanie Delphi i Linuksa

to nigdzie wyranie zadeklarowane, wszystkie moduy Pascala uywaj moduu


1, . Borland dostarcza kompletne rda do tego moduu.
 Sekcja   tu moesz zadeklarowa stae. Jeli zadeklarujesz sta bez

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

Jeli sprbujesz zmieni sta, ktr zadeklarowaem jako $  w metodzie


 *), kompilator zgosi bd. Nie stanie si tak natomiast w przypadku
zmiany wartoci %,6
.
 Sekcja , w tym miejscu definiujesz typy danych, ktrych bdziesz uywa
w swoim programie. W tym przypadku modu definiuje typ nazwany 
*,
ktry pochodzi od obiektu 
. Ten ostatni jest czci CLX. Obiekt 

jest w stanie utworzy instancj formularza. 
* jest Twoj odmian tego
szczeglnego obiektu. W naszym przypadku 
* wykorzystuje obiekt
podstawowy 
, dodajc do kontrolk przycisku oraz dwie metody obie

zostan omwione bardziej szczegowo nieco dalej w tym samym podrozdziale.


 Sekcja 
tutaj deklarujesz wszystkie zmienne globalne, ktre chcesz doda

do swojego programu. Zmienne te bd miay zasig globalny w caym programie.


Jak wszyscy dowiadczeni programici wiedz, zmienna globalna zwykle oceniana
jest le. W zwizku z tym, dla implementacji moduu na og nie powiniene dodawa
niczego do sekcji 
, chyba e jeste absolutnie pewien tego, co chcesz zrobi.
Kada z sekcji, ktra pojawia si w interfejsie, moe rwnie pojawi si w implementacji. W rzeczywistoci wszystkie sekcje, z wyjtkiem pola , mog pojawi si nawet
wewntrz pojedynczej metody. Miejsce dla deklaracji powiniene wybra zgodnie z zasigiem, jaki chcesz nada swojej zmiennej. Jeli chcesz, aby bya ona globalna, umie j
w interfejsie moduu. Jeli chcesz, by bya dostpna dla caego moduu, ale nie dla programu, umie j na pocztku czci implementacyjnej. Jeli chcesz, by typ, staa lub
zmienna byy widoczne tylko dla pojedynczej metody, umie je w tej metodzie, jak
w nastpujcym fragmencie kodu:
% ( D
5
C!/ 5HHK  ) :/D
9%
9J9!9L0+M ? -D

9J99J9D
'? -D
-'
C) :55-=CBD
 '!0 +(
9J9L'M!'D
NN. ( '()
 (D

Rozdzia 1.  Programowanie wizualne

55



'  

W sekcji definiowania typw, gdzie zadeklarowany zosta obiekt 


, znajdziesz nastpujc lini kodu:
% ( .' 6=C ( BD

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 ( B   D
.  ! 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

Cz I  Poznanie Delphi i Linuksa

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 ( B   D

6 (, jest deklaracj metody z nastpujcym podpisem:


% (   .' 6=C ( BD

Pomijajc fraz (!   z koca deklaracji 6 (, , deklarowaby wskanik do


procedury, zamiast do metody. Procedura oczywicie nie jest czci obiektu. Ta deklaracja na przykad jest wskanikiem kierujcym do procedury, nie metody:
9< '9A !% (=C ( BD

A tu mamy implementacj procedury tego typu:


% ( .' 6=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

Oto jak wygldaaby deklaracja dla 6 (, w C++:


9%( '(OO5 =OO  5< '(9A B=C95  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 
.

Rozdzia 1.  Programowanie wizualne

57

(
 
 )*
 ' 
+ ,

Jak zapewne pamitasz, caa ta dyskusja zacza si w momencie, gdy zauwaylimy,
e znikna metoda 
)
 :
% (    .=C ( BD
-'
 (D

Jak ju wiesz, metoda ta ma swoj deklaracj w czci interfejsu i swoj implementacj


w czci implementacyjnej Twojego kodu. Chcc j rcznie usun, musiaby wymaza
kod w dwch miejscach. W zwykym edytorze tekstowym nie stanowi to adnego problemu, poniewa prawdopodobnie nie wstawiby kodu, gdyby nie mia takiego zamiaru.
Jednak w rodowisku programowania wizualnego, takim jak Kylix, mona po prostu
klika sobie tu i tam; w takim przypadku zanim si zorientujesz, Twj modu bdzie
wypeniony procedurami obsugi zdarze, ktrych niekoniecznie potrzebowae. Aby jako
temu zapobiec, w Kyliksie wprowadzona zostaa zasada, na mocy ktrej kada procedura
obsugi zdarzenia, ktra nie zawiera kodu, powinna by cakowicie usuwana w momencie
zapisu lub uruchomienia. Nie dotyczy to wszystkich metod tylko obsugi zdarze.
Jeli Kylix usunie co, czego nie chciae usun, odtworzenie tego nie bdzie trudne.
Wracasz po prostu do inspektora obiektw, na zakadce Events odnajdujesz stosown
pozycj i tworzysz na nowo kod.
Z drugiej strony, jeli kod obsugi jakiego zdarzenia nagle zacz sprawia wraenie
martwego, moesz po prostu usun kod, ktry dodae do metody i wcisn Save jak
wida, metoda znikna.
Jeli nie chcesz implementowa metody od razu, ale nie chcesz te, by znikna, moesz
po prostu doda do niej komentarz:
% (    .=C ( BD
-'
NN 
 (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:


Gwny plik programu, czasami nazywany take plikiem projektu Delphi



Modu



Plik wczany (ang. include file)

58

Cz I  Poznanie Delphi i Linuksa

   


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
 (

Rozdzia 1.  Programowanie wizualne

59

  Modu nalecy do programu SimpleUnit


 '9E 'D
'  
% (@ C )' -D
' %  '
% (@ C )' -D
-'
&' =/P5 % 1 'H'5 % 1(59;&)'  /BD
 (D
 (

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

Cz I  Poznanie Delphi i Linuksa

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

Rozdzia 1.  Programowanie wizualne

61

' %  '


55
 '08 'QD
 (

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!9L0M E '"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

Cz I  Poznanie Delphi i Linuksa

' %  '


 (

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 %,/

,, podczas gdy  * wykorzystuje 7 9,.


Jeli kiedykolwiek napotkasz tego typu problem, bdziesz mg go rozwiza albo poprzez poczenie obu plikw w jeden, albo utworzenie trzeciego. W niektrych przypadkach atwiej jest po prostu zczy dwa pliki w jeden. W innych prociej bdzie przenie
niektre elementy z  * do  9 i vice versa. Jeszcze w innych, najlepszym rozwizaniem bdzie utworzenie trzeciego moduu i umieszczenie w nim odpowiednich deklaracji
z pozostaych dwu. To, ktre rozwizanie uznasz za najlepsze, zaley przede wszystkim
od Twoich upodoba, a take od samych okrelonych przypadkw.
Problem bdnego koa odwoa nie nka programistw C/C++. Trzeba zatem uzna,
e w tym jednym przypadku, jzyk C/C++ ma przewag nad Object Pascalem. Warto
jednak zauway, e tego typu problemy powstaj, gdy program jest le zorganizowany.
Np. konstrukcja moduw przedstawionych na wydrukach 1.5 i 1.6 jest wyranie
przypadkowa, wrcz nonsensowna. Jeli poprawnie konstruujesz swoje programy,
tego typu problemy nie powinny czsto powstawa. Ujmujc rzecz z drugiej strony;
gdy napotkasz tego typu bd, powiniene zastanowi si, czy nie jest on po prostu
sposobem, w jaki kompilator prbuje poinformowa Ci o tym, e powiniene jeszcze
raz przemyle konstrukcj swojego programu, poniewa ma ona saby punkt.
Po napisaniu tego wszystkiego, przyznam teraz, e w niektrych bardzo rzadkich
przypadkach konstruowanie moduw wzajemnie si odwoujcych ma sens; wwczas
omawiany bd moe by irytujcy. Niemniej jednak, jeli dostaniesz tego typu bd,
musisz zaimplementowa jedno z wspomnianych wyej rozwiza.

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,

Rozdzia 1.  Programowanie wizualne

63

a take do automatycznego wymazywania pustych procedur obsugi zdarze podczas


zapisywania kodu. Wykorzystuje j rwnie narzdzie o nazwie Code Insight, omwione w rozdziale 5.
Jak ju zapewne zauwaye, aplikacje w Kyliksie kompiluj si w bardzo krtkim czasie.
Mae projekty zdaj si kompilowa natychmiast, a te wielkie w zaledwie kilka sekund.
Taki stan rzeczy ma dwie przyczyny:
 Object Pascal jest dosy prostym jzykiem. Unikano w nim elementw skadniowych

o skomplikowanym i wielorakim znaczeniu, takich jak przeciony operator1


czy wielokrotne dziedziczenie. W rezultacie kod, ktry piszesz, moe by nie
tylko bez trudu zrozumiany przez uytkownika, lecz take nie sprawia kopotu
kompilatorowi podczas przetwarzania. Czasy kompilacji programw s naprawd
bardzo krtkie.

 Dziki temu, e Object Pascal uywa swojego wasnego formatu binarnego,

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

Cz I  Poznanie Delphi i Linuksa


Zoona forma
z wieloma
powierzchniami
kontrolka
rozdzielacza
(ang. splitter control)
pozwala na zmian
rozmiarw kadej z nich

Aby stworzy taki formularz, zrb co nastpuje:




Upu na formularzu panel. Ustaw jego waciwo / na 0( .



Zmie zakadk na Additional i umie kontrolk 1 


na prawo od panelu.
Ustaw jego szeroko ( ) na *:, tak eby uytkownik mg go atwo chwyci
podczas dziaania programu.



W pustej przestrzeni po prawej stronie umie drugi panel i ustaw jego waciwo
/ na ) .



W grnej czci drugiego panelu umie trzeci, z waciwoci / ustawion


na  .



Upu drugi rozdzielacz na drugim panelu. Ustaw jego waciwo /


na  , a wysoko ( ) na *:.



Na grze drugiego panelu, ponad drugim rozdzielaczem, umie czwarty panel.


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

Moesz uy tego podstawowego wzorca do rnych aplikacji, takich jak ta w programie


$, ktry znajdziesz w katalogu Chap01 w rdach dostarczonych razem z t
ksik. Program ten pokazany jest na rysunku 1.21; omwiony zostanie w nastpnej
sekcji, zatytuowanej Program PanelDesign.

Rozdzia 1.  Programowanie wizualne

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  '5 D
? -? -D
  D
% (  C) :=C ( BD
% ( '5 .' 6=C ( BD
%'
 '5C' - '5D
 ' GC< C' -D
% (>5 '55= % '5C' - '5DC< ? -BD

66

Cz I  Poznanie Delphi i Linuksa

>'( ' 5

%'
>' ( ' 5

 (D

    D
' %  '
55
 . ( D


% (    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
 '   GC< =BC' -D

 '5< ? -D
-'
 '5< ! '5 ? ? (ID
5!? "C>(0= '5< 8"BD
 (D
% (   '5 .' 6=C ( BD

>' < 5' -D
-'
>' < !GC@'=BI/5%/I-C< I/ %/D
''A'55=>' < B)
? ->'  ( '=>' < BD
' '5 ? ? (R '5.  )
 ! '5C' -5L '5 ? ? (MD
 (D
% (  >5 '55= % '5C' - '5BD

'? -D
C8&)  ' 5' -D
<:>  D
-'
&)  ' !//D
 '!0 "( NNC%:(  % '5C' -5L'IM(-
 % '5J%% (=//BDNN' ' 5193S

Rozdzia 1.  Programowanie wizualne

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:95 6 23 0
E '23    :9% 
>9%'5- :H2 ': 2 'J'- : 23.' 

  Plik directions.txt, w ktrym znajduj si komentarze na temat kadego kroku


potrzebnego do zbudowania w Kyliksie multipanelowej aplikacji
>  (5'4 6H( C ((LM
&H2 ': 23J'- % 65'4:% 5 ''59 :' 8
6 7556 953% 1 956'L"M

68

Cz I  Poznanie Delphi i Linuksa

V %  C%' (5'4 6H( 


J(('' %96 %  :LQM
@:'  :7 '59 ':H2 ': 2 ' '6  6'
 (' 515:' '=J'- B   '9
=&'()','-)B@ 92 1: 2 '1:H2 ': 2 '
J'- 5 8 5( 6H( '9 8 -
)  98(-  (9'6 :3 5' 9(9 '
:H2 ': 23&'()L$M
E%5 1 (-'% 8%: '5'487 ('
5'4  %5 42 '  % %:
5 ' 8-(' '5 56 %  85(
'5  P2'5:%  '5 :'H92 -
6 %  > 8 '476 9H 9- %  %5 13
% -  5
E5:' ':H2 ': 2 'J'- 6 %   .' 
% : (87:9%H '  H( 54%  '5 
5: '  '6 ' (4( 9 = (' B& 59 %9%(6
'6  (4( 9 5  
> : '8% '4879 '2 '3 % % :H2 ':
5 '  
> 5:' ':H2 ': 2 'J'-    8 :9
%  ' H95%(5: -  (' 869:9
%9%(6 '5   8%  
<'% 5'49 8:6'5% 5% %5  '
5:'5'46  6 (' E '231% % 5
6 %  ' 1 9 93 '6  (4( 9 
621 : 23:H2 ': 2 'J'-  (' 
'( 5 5 :1 - :95 6 238 75 '2 '3-
( 6H( ': '5 8:69 5 '79 95
? :8% '4 9 89 '2 '3- ( 6H( '
:%5%5 ' % > "<'% :879
% ( 5%5  '( 96H 6 %  :> '> Q
E5::H2 ': 23J'- % 879 '2 '3- :
:H2 ':9  '5 <'3 5%1 4  '
 '5 :'3 6 %  

Interfejs programu $ posiada po lewej stronie list wyboru do przechowywania


pojedynczych linii tekstu. Na dole, po prawej stronie, znajduje si kontrolka % , ktra
przechowuje wiele linii tekstu. Na grze wida kontrolk +, ktra pozwala programicie w prosty sposb wywietli uytkownikowi obrazek.
Lista wyboru zawiera plik instructions.txt, ktry wylicza kolejne etapy potrzebne do stworzenia multipanelowego programu. Kontrolka  (obraz) pokazuje obrazki przedstawiajce, co uytkownik ma zrobi w kadym kroku. Kontrolka  dodaje komentarz do kadego kroku i przedstawia szczegy, ktre mog si przyda nowym w rodowisku Kylix.

Rozdzia 1.  Programowanie wizualne

69

Program pozwala uytkownikowi klika pojedyncze linie tekstu w licie. Po kadym


klikniciu, moesz zobaczy towarzyszcy rysunek w kontrolce  i komentarz
w kontrolce  .
Teraz, gdy rozumiesz, o czym jest program, dowiedz si, jak to wszystko zostao razem
zebrane. Mam nadziej, e przekonasz si, i Kylix bardzo upraszcza tworzenie tego typu
stosunkowo skomplikowanych programw. Nie bd objania co zrobi, eby
stworzy taki interfejs, poniewa program robi to sam. W zamian poka Ci kod potrzebny
do tego, by program zachowywa si waciwie w czasie dziaania.


      
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

Cz I  Poznanie Delphi i Linuksa

Oto jak tworzy si instancj obiektu 1


0 :
 '5!C' - '5.D

A oto kod, ktry najpierw tworzy obiekt 1


0 , potem wczytuje do niego plik
descriptions.txt i w kocu przekazuje list obiektw nastpnej procedurze:
 % '5!C' - '5.D
 % '5 ( '=/(5 '%' 5/BD
>5 '55= % '5BD

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 .

         


Obiekt 0  ' posiada zdarzenie nazwane 3), ktre wywoywane jest za kadym
razem, gdy uytkownik kliknie list. Implementacja tego zdarzenia w naszym programie,
razem z pomocnicz metod ; 16, wyglda nastpujco:
 '   GC< =BC' -D

 '5< ? -D
-'
 '5< ! '5 ? ? (ID
5!? "C>(0= '5< 8"BD
 (D
% (   '5 .' 6=C ( BD

>' < 5' -D
-'
>' < !GC@'=BI/5%/I-C< I/ %/D
''A'55=>' < B)
? ->'  ( '=>' < BD
' '5 ? ? (R '5.  )
 ! '5C' -5L '5 ? ? (MD
 (D

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  '5 D

Rozdzia 1.  Programowanie wizualne

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

Nastpnie wywouj metod + 91


:, ktra zapewnia, e wynik zwrcony przez funkcj bdzie mia dwa znaki, nie tylko jeden. Bdziemy chcieli otrzyma :*, a nie tylko *,
jeli uytkownik klikn np. pierwsz pozycj z listy:
5!? "C>(0= '5< 8"BD

      


+ 91
: mona znale w module 0)  '#. Modu ten nie jest dostarczony razem

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

Mona tu dostrzec dwie istotne rnice w sposobie wykonywania takich rzeczy


pomidzy Object Pascalem a Jav i C++. Po pierwsze istotne jest to, czy zwracana
zmienna jest deklarowana przez Ciebie, czy przez kompilator. Po drugie, w Pascalu
uycie instrukcji
 
 jest ukryte, podczas gdy w C i w Javie jest ono jasno okrelone.
Moim zdaniem, obie techniki s intuicyjne i proste w uyciu.
+ 91
: wywouje Pascalow procedur  1
, ktra jest odpowiednikiem funkcji

 ( w C/C++. W swoich pierwszych dwu parametrach pobiera ona acuch, za jako

trzeci parametr przyjmuje tablic wartoci:

72

Cz I  Poznanie Delphi i Linuksa

% ( C=
C55' -DNN& 23:  %% (4
 5  5' -DNNXK  ) 5( 9 ' 6 '  1 9 '
 5J-59  5BDNN& 2 '(  '5  ':HK  )

acuch formatu zawiera te same sekwencje sterujce, ktre uywane s w funkcji 


 (.
Do wartoci, ktre moesz przekaza, nale: < (liczba cakowita), < (reprezentacja dziesitna), < (zmiennoprzecinkowe, w postaci naukowej), <( (jak wczeniej, lecz w prostszej postaci), < (odpowiednik < lub <(), < (pienidze), < (liczba), < (wskanik), <
(acuch znakw), <' (heksadecymalnie). Wicej szczegw znajdziesz w podrcznej
pomocy Kyliksa, pod hasem 
 !1
.
Parametr /
 zawiera tablic argumentw. Rozwa np. ten fragment kodu:
% (   .' 6=C ( BD

C8 %5' -D
-'
C!/Y'/D
 %!/Y ' C:'HK  )W58 (5W%8(H- 23:9 5'W(
 6:/D
 C=C8 %8LC8ZC8  -)=CBMBD
A('!CD
 (D

Mona tutaj zobaczy, e przez parametr /


 zostay przekazane trzy wartoci. Pierwsz
jest acuch, drug adres tego acucha, a trzeci jego dugo. Po wywoaniu procedury,
1
 wyglda nastpujco: =!1!8 
!>?!=8-!!
!::*9@:!  !> AB! , !@!8C .

W C/C++ adres zmiennej pobierasz za pomoc symbolu D, w Pascalu za uywasz


symbolu E. W C/C++ wyznaczasz warto szesnastkow poprzez :', jak w :';
w Pascalu uywasz do tego symbolu , np. . Zachowanie tych symboli jest
w obydwu jzykach identyczne, rni si jedynie same symbole.

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.

Rozdzia 1.  Programowanie wizualne

73

Istnieje jeszcze drugi sposb na przetumaczenie w Object Pascalu liczby cakowitej na acuch:

C5' -D
'? -D
-'
'!"D
C!?  C='BD
 (D

W bardzo duym stopniu intuicyjn funkcj +  1


bd w tej ksice wykorzystywa jeszcze
nie raz. Towarzyszy jej funkcja 1
 + , ktra dziaa w taki oto sposb:

C5' -D
'? -D
-'
C!/"/D
'!C ? =CBD
 (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.

!    


Na tym etapie powiniene rozumie ju pierwsze dwie linie metody 0  '*):
>' < !GC@'=BI/5%/IGC< I/ %/D
''A'55=>' < B)
? ->'  ( '=>' < BD

acuch 6 zawiera sowo F F 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

Wszystkie funkcje wywoywane przez ; 1 


$
s wbudowanymi funkcjami Pascala.

1
H:I zwraca pen ciek z nazw aktualnie uruchomionego programu. '
 4
  wyciga z tego jedynie ciek. Jeli np. 
1
H:I jest ustawione na  



$$, to '
   wyrzuci z tego nazw pliku wykonywalnego i zwrci wynik  


$.
Dziki +
 $ 
z pewnoci otrzymamy wynik  



$, a nie  


$ lub  


74

Cz I  Poznanie Delphi i Linuksa



$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.


Po skomponowaniu poprawnej cieki do pliku z bitmap, kod wywouje wbudowan


funkcj ' , by upewni si, e plik step03.bmp rzeczywicie znajduje si w katalogu, w ktrym program jest wykonywany. Upewniwszy si co do tego, wywouje
+*# 
#0 
H6IK, aby wczyta plik do pamici i wywietli go
uytkownikowi.

!   


Jak zapewne pamitasz, kod przedstawiony nieco wczeniej w tym rozdziale przedstawia
jak przetworzy plik instructions.txt i umieci go w obiekcie 1
0 nazwanym
0 . Nastpujcy kod pobiera zawarto jednego z elementw 1
0 i wywietla
w kontrolce % :
' '5 ? ? (R '5.  )
 ! '5C' -5L '5 ? ? (MD

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 L3 L, L1,L, i L$!M N ,L, to 0 #1
O:P zwrci L3 L,
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.

You might also like