XX.
FEJEZET
Fejezet c me
I. rész . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 A Form egy ablak (és egy ActiveX) . . . . . . . . . . . . .5 Elsõ formunk elkészítése . . . . . . . . . . . . . . . . . . . . . .5 Cím beállítása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 A form elmentése . . . . . . . . . . . . . . . . . . . . . . . . . . .8 Komponensek használata . . . . . . . . . . . . . . . . . . . . .8 Tulajdonságok megváltoztatása . . . . . . . . . . . . . . . . .9 Reagálás az eseményekre . . . . . . . . . . . . . . . . . . . . .12 A program fordítása és futtatása . . . . . . . . . . . . . . . .16 Tulajdonságok futásidejû megváltoztatása . . . . . . . .18 Kód hozzáadása a programhoz . . . . . . . . . . . . . . . .20 Egy kétirányú eszköz . . . . . . . . . . . . . . . . . . . . . . . .22 A forráskód . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22 A form szöveges leírása . . . . . . . . . . . . . . . . . . . . . .24 A projekt-állomány . . . . . . . . . . . . . . . . . . . . . . . . .27 ActiveForm készítése . . . . . . . . . . . . . . . . . . . . . . . .28 Komponens-sablonok használata . . . . . . . . . . . . . .29 ActiveX könyvtár és ActiveForm . . . . . . . . . . . . . . .29 A HTML oldal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 Hogyan tovább?
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
A Delphi-környezet jellemzõi . . . . . . . . . . . . . . . .37 A Delphi különbözõ verziói . . . . . . . . . . . . . . . . . . .37 Segítség kérése . . . . . . . . . . . . . . . . . . . . . . . . . . . .38 Delphi menük és parancsok . . . . . . . . . . . . . . . . . .40 A File menü . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40 Az Edit menü . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42 Komponensek másolása és beillesztése . . . . . . . . . . . . . . . .42 További szerkesztõ parancsok . . . . . . . . . . . . . . . . . . . . . .45
A Search menü . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45 A View menü . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48 A Project menü . . . . . . . . . . . . . . . . . . . . . . . . . . . .49 A Run menü . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50 A Component menü . . . . . . . . . . . . . . . . . . . . . . . . .51 Komponens sablonok . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
A Database menü . . . . . . . . . . . . . . . . . . . . . . . . . . .51 A Tools menü . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
3
4
XX.
FEJEZET
Fejezet c me
A Help menü . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53 A Delphi eszköztára . . . . . . . . . . . . . . . . . . . . . . . . .53 A lokális menük . . . . . . . . . . . . . . . . . . . . . . . . . . . .54 A Form Designer használata . . . . . . . . . . . . . . . . . .54 A komponenspaletta . . . . . . . . . . . . . . . . . . . . . . . .57 Az Object Inspector . . . . . . . . . . . . . . . . . . . . . . . . .58 Az Alignment paletta . . . . . . . . . . . . . . . . . . . . . . . .59 Programkód írása a szerkesztõben . . . . . . . . . . . . . .60 A szerkesztõ könyvjelzõinek használata . . . . . . . . .60 A Delphi 3 Code Insight szolgáltatásai . . . . . . . . . . .62 Kódkiegészítés . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62 Kódsablonok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63 Kódparaméter . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64 Projektek menedzselése . . . . . . . . . . . . . . . . . . . . . .65 A Project Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65 Projektopciók beállítása . . . . . . . . . . . . . . . . . . . . . . . . . .66 Egy projekt lefordítása . . . . . . . . . . . . . . . . . . . . . . . . . . .67
Egy lefordított program vizsgálata . . . . . . . . . . . . . .68 A beépített hibakeresõ . . . . . . . . . . . . . . . . . . . . . . . . . . . .68 Az Object Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
Egyéb Delphi eszközök . . . . . . . . . . . . . . . . . . . . . .69 A rendszer fájljai . . . . . . . . . . . . . . . . . . . . . . . . . . .70 Hogyan tovább?
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
Az Object Repository és a Delphi varázslók . . . . .79 Az Object Repository . . . . . . . . . . . . . . . . . . . . . . .79 A New oldal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81 Az ActiveX oldal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82 Az aktuális projekt oldal . . . . . . . . . . . . . . . . . . . . . . . .83 A Forms oldal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83 A Dialogs oldal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84 A Data Modules oldal . . . . . . . . . . . . . . . . . . . . . . . . . . . .85 A Projects oldal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
Delphi varázslók . . . . . . . . . . . . . . . . . . . . . . . . . . .86 Az Adatbázis Form varázsló (Database Form Wizard) . . .87 Az Alkalmazás varázsló (Application Wizard) . . . . . . . . .89 A Párbeszédablak varázsló (Dialog Wizard) . . . . . . . . . . .91
Az Object Repository testreszabása . . . . . . . . . . . . .92 Új alkalmazás sablon felvétele
. . . . . . . . . . . . . . . . . . . . .92
Az üres projekt sablon . . . . . . . . . . . . . . . . . . . . . . .94
XX.
FEJEZET
Fejezet c me
Új form sablonok hozzáadása . . . . . . . . . . . . . . . . .94 Az Object Repository opciói . . . . . . . . . . . . . . . . . . . . . . . .95
Új varázsló DLL-ek telepítése . . . . . . . . . . . . . . . . . .96 Hogyan tovább?
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97
A Pascal nyelv . . . . . . . . . . . . . . . . . . . . . . . . . . .101 Típusok, változók és konstansok . . . . . . . . . . . . .101
Változók . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101 Konstansok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103 String erõforrás (resource string) konstansok . . . . . . . . . .104 Delphi adattípusok . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104 Sorszámozott típusok (ordinal types) . . . . . . . . . . . . . . . .105 A Range példaprogram . . . . . . . . . . . . . . . . . . . . . . . . . .106 Sorszámozott típusokon használható eljárások és rutinok 108 Valós típusok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109 Dátum és idõ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110 Különleges Windows-típusok . . . . . . . . . . . . . . . . . . . . . .114 Ablakkezelõk (handle) . . . . . . . . . . . . . . . . . . . . . . . . . .115 Típusmegfeleltetés (casting) és típuskonverzió . . . . . . . . .116 A Variant típus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118 Variant típusok a Delphiben . . . . . . . . . . . . . . . . . . . . .120 A Variant lassú! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .121 Felhasználó által meghatározott adattípusok . . . . . . . . .122 A részintervallum típusok (subrange types) . . . . . . . . . . .124 Felsorolt típusok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .125 Halmaz típusok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .127 Tömb típusok (array types) . . . . . . . . . . . . . . . . . . . . . . .129 A rekord adattípus . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131 A mutató típus (pointer) . . . . . . . . . . . . . . . . . . . . . . . . .133 Állománytípusok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .135
Stringek a Delphiben . . . . . . . . . . . . . . . . . . . . . . .136 A hagyományos Pascal stringek . . . . . . . . . . . . . . . . . . .136 A Delphi hosszú stringjei . . . . . . . . . . . . . . . . . . . . . . . .136 StrRef: Példa a dinamikus string allokálásra . . . . . . . . . .138 C-stílusú karaktertömbök . . . . . . . . . . . . . . . . . . . . . . . .140 String átalakítások . . . . . . . . . . . . . . . . . . . . . . . . . . . . .141 Stringátalakítási nehézségek . . . . . . . . . . . . . . . . . . . . . .142 Stringek formázása . . . . . . . . . . . . . . . . . . . . . . . . . . . .144
Programozási stílus
. . . . . . . . . . . . . . . . . . . . . . . .146
Megjegyzések . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .147 A NAGY- és kisbetûk használata . . . . . . . . . . . . . . . . . . .148 Közök (white space) . . . . . . . . . . . . . . . . . . . . . . . . . . . .148 A szép külalak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149
5
6
XX.
FEJEZET
Fejezet c me A szintaktikai elemek kiemelése . . . . . . . . . . . . . . . . . . .150 Kódsablonok használata . . . . . . . . . . . . . . . . . . . . . . . .151
Nyelvi kifejezések
. . . . . . . . . . . . . . . . . . . . . . . . .152
Kifejezések és operátorok . . . . . . . . . . . . . . . . . . . . . . . .152 Operátorok és a precedencia szabály . . . . . . . . . . . . . . .153 Unáris (egyoperandusú) operátorok (legmagasabb prioritás) 153 Multiplikatív és bitenkénti operátorok . . . . . . . . . . . . .153 Additív operátorok . . . . . . . . . . . . . . . . . . . . . . . . . . . .153 Relációs és összehasonlító operátorok (legalacsonyabb prioritás) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .154 Halmaz operátorok . . . . . . . . . . . . . . . . . . . . . . . . . . . .154 Egyszerû és összetett kifejezések . . . . . . . . . . . . . . . . . . . .154
Elágazások . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156 Az if utasítás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156 A Case utasítás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .158
Ciklusok a Pascalban . . . . . . . . . . . . . . . . . . . . . . .158 A for ciklus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .158 A while és a repeat utasítások . . . . . . . . . . . . . . . . . . . . .159 A with utasítás . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .162
Eljárások és függvények . . . . . . . . . . . . . . . . . . . . .165
Cím szerinti paraméterátadás . . . . . . . . . . . . . . . . . . . . .166 Konstans paraméterek . . . . . . . . . . . . . . . . . . . . . . . . . .167 Nyitott tömb paraméterek . . . . . . . . . . . . . . . . . . . . . . . .167 Változtatható típusú nyitott tömb paraméterek . . . . . . . .168
A Delphi alprogram-hívási lehetõségei
. . . . . . . . .171
Mi is az a metódus? . . . . . . . . . . . . . . . . . . . . . . . . . . . .172 Elõdeklarációk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .172 Külsõ deklarációk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .174 Eljárás-típusok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175 Windows callback függvények . . . . . . . . . . . . . . . . . . . .178 Hogyan tovább? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180
Az Object Pascal, mint objektumorientált nyelv 183 Osztályok és objektumok . . . . . . . . . . . . . . . . . . . .183 A Delphi objektum-hivatkozási modellje . . . . . . . . . . . . .186 A TDate osztály felhasználása Delphiben . . . . . . . . . . . .188 Konstruktor készítése . . . . . . . . . . . . . . . . . . . . . . . . . . .190 Objektumok a memóriában . . . . . . . . . . . . . . . . . . . . . .192
Az osztályok és az információ-rejtés
. . . . . . . . . . .194
Private, protected, public . . . . . . . . . . . . . . . . . . . . . . . .195 Public és published . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196
XX.
FEJEZET
Fejezet c me
Osztályok és egységek . . . . . . . . . . . . . . . . . . . . . .197
Osztály interfész . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201 Egységek és érvényesség . . . . . . . . . . . . . . . . . . . . . . . . . .202 Egységek és érvényességi körök . . . . . . . . . . . . . . . . . . . .203 Változások elrejtése . . . . . . . . . . . . . . . . . . . . . . . . . . . .204 Egység a TDate osztály számára . . . . . . . . . . . . . . . . . . .206 Egységek és programok . . . . . . . . . . . . . . . . . . . . . . . . . .210 Öröklés meglévõ típusokból . . . . . . . . . . . . . . . . . . . . . . .211 Öröklés és típus kompatibilitás . . . . . . . . . . . . . . . . . . . .215 Késõi kötés és polimorfizmus . . . . . . . . . . . . . . . . . . . . . .218 Metódusok felülírása és újradefiniálása . . . . . . . . . . . . .221 Virtuális és dinamikus metódusok . . . . . . . . . . . . . . . . . .222 Üzenetkezelõk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .223 Absztrakt metódusok . . . . . . . . . . . . . . . . . . . . . . . . . . .224
Futási idejû típus információ . . . . . . . . . . . . . . . . .228 Kivételkezelés . . . . . . . . . . . . . . . . . . . . . . . . . . . .230 Az at kulcsszó . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .232 Példa kivételek használatára . . . . . . . . . . . . . . . . . . . . .232 Kivételek és a verem . . . . . . . . . . . . . . . . . . . . . . . . . . . .236 A finally blokk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .237 Hogyan tovább? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .241
Haladó szintû Object Pascal . . . . . . . . . . . . . . . .245 A Self kulcsszó . . . . . . . . . . . . . . . . . . . . . . . . . . . .245 Komponensek dinamikus létrehozása . . . . . . . . . .246 Osztálymetódusok és adatok . . . . . . . . . . . . . . . . .248 Egy osztály objektum-számlálóval . . . . . . . . . . . . .249 Metódus-mutatók . . . . . . . . . . . . . . . . . . . . . . . . . .253 A számlálós példa fejlesztése . . . . . . . . . . . . . . . . .255 Objektumok egyszeri megsemmisítése . . . . . . . . .257 Osztályreferenciák . . . . . . . . . . . . . . . . . . . . . . . . .259 Objektumok létrehozása futási idõ alatt osztályhivatkozások használatával . . . . . . . . . . . . .261 Interfész és többszörös öröklõdés . . . . . . . . . . . . .263 Interfész deklarálása . . . . . . . . . . . . . . . . . . . . . . . . . . .264 Interfész használata paraméterként . . . . . . . . . . . . . . . .267 Egy második interfész írása . . . . . . . . . . . . . . . . . . . . . .268 Mindkét interfész implementációja . . . . . . . . . . . . . . . . .270
Tulajdonságok és események definiálása . . . . . . . .273 Tulajdonságok hozzáadása a TDate osztályhoz
Események a Delphiben
. . . . . . .276
. . . . . . . . . . . . . . . . . . . .281
7
8
XX.
FEJEZET
Fejezet c me Az események tulajdonságok . . . . . . . . . . . . . . . . . . . . .281 Egy esemény hozzáadása a TDate osztályhoz . . . . . . . . .282 Egy TDate komponens készítése . . . . . . . . . . . . . . . . . . . .284 Hogyan tovább? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .286
A Vizuális Komponenskönyvtár (Visual Component Library) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .289 A TObject osztály . . . . . . . . . . . . . . . . . . . . . . . . . .289 Az osztályinformáció megjelenítése . . . . . . . . . . . . . . . . .292
A VCL hierarchiája . . . . . . . . . . . . . . . . . . . . . . . . .293 A komponensek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .295 Az objektumok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296 A kivételek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .300 A VCL osztályok használata . . . . . . . . . . . . . . . . . . . . . .302
Az általános VCL tulajdonságok . . . . . . . . . . . . . . .302 A Name (Név) tulajdonság . . . . . . . . . . . . . . . . . . . . . . .305 Komponensek méretére és helyzetére vonatkozó tulajdonságok 308 Aktivizálási és láthatósági tulajdonságok . . . . . . . . . . . .308 A testreszabható Tag tulajdonság . . . . . . . . . . . . . . . . . .309 A felhasználói interfész: színek és fontok . . . . . . . . . . . .310
Általános VCL metódusok . . . . . . . . . . . . . . . . . . .312 Az általános VCL események . . . . . . . . . . . . . . . . .315 A Delphi kollekcióinak használata . . . . . . . . . . . . .316 Objektum- és adatlisták használata
. . . . . . . . . . . . . . . .318
A VCL forráskód tanulmányozása . . . . . . . . . . . . . .320 Hogyan tovább?
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321
II. rész . . . . . . . . . . . . . . . . . . . . . . . . . . . .323 Alapvetõ komponensek . . . . . . . . . . . . . . . . . . .327 A Windows saját komponensei . . . . . . . . . . . . . . .327 Gombra kattintás . . . . . . . . . . . . . . . . . . . . . . . . . .328 A Buttons (gombok) példa
. . . . . . . . . . . . . . . . . . . . . . .329
Kattintás az egérrel . . . . . . . . . . . . . . . . . . . . . . . . .333 Színes szövegek a formon . . . . . . . . . . . . . . . . . . .334 A LabelCo példa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .334 A standard szín párbeszédablak . . . . . . . . . . . . . . . . . . .337
Elemek áthúzása komponensek között . . . . . . . . .338 A Dragging példa kódja . . . . . . . . . . . . . . . . . . . . . . . . .340
Felhasználói input fogadása . . . . . . . . . . . . . . . . . .341 A bemeneti fókusz kezelése . . . . . . . . . . . . . . . . . . . . . . .342
XX.
FEJEZET
Fejezet c me Egy általános OnEnter eseménykezelõ . . . . . . . . . . . . . . .346 Számok bevitele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .347
Kifinomult beviteli sémák . . . . . . . . . . . . . . . . . . .352 Egy egyszerû szerkesztõ készítése . . . . . . . . . . . . .354 A Font párbeszédablak . . . . . . . . . . . . . . . . . . . . . . . . . .354 Egy komolyabb szerkesztõ készítése . . . . . . . . . . . . . . . . .355
Választások
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .357
A rádiógombok csoportosítása . . . . . . . . . . . . . . . . . . . . .358 A Phrases1 példa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .359
Egy lista sok választási lehetõséggel . . . . . . . . . . . .363 A Phrases2 példa formja . . . . . . . . . . . . . . . . . . . . . . . . .363 Listapanelek kezelése . . . . . . . . . . . . . . . . . . . . . . . . . . .365 A kiválasztott string eltávolítása a másik listapanelbõl . . .366
Többszörös kiválasztás engedélyezése . . . . . . . . . .370
A Phrases példa harmadik változata . . . . . . . . . . . . . . . .372 A jelölõnégyzet-lista (CheckListBox) komponens használata 375
Sok lista, kevés hely . . . . . . . . . . . . . . . . . . . . . . . .377 Egy adott határon belüli érték kiválasztása . . . . . . .379 A Scroll Color példa . . . . . . . . . . . . . . . . . . . . . . . . . . . .379 Hogyan tovább? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .382
Menük készítése és kezelése . . . . . . . . . . . . . . . .385 A fõmenü felépítése . . . . . . . . . . . . . . . . . . . . . . . .385
A menüpontok különbözõ szerepei . . . . . . . . . . . . . . . . .386 Menü készítése a Menü Tervezõvel . . . . . . . . . . . . . . . . .387 A menü általános felépítése . . . . . . . . . . . . . . . . . . . . . .388 Gyorsbillentyûk, forróbillentyûk . . . . . . . . . . . . . . . . . . .388 Elõre definiált menüsablonok használata . . . . . . . . . . . .389
Menüparancsok feldolgozása . . . . . . . . . . . . . . . . .390 A Menü Tervezõ által generált kód . . . . . . . . . . . . . . . . .391 A MenuOne példa forrása . . . . . . . . . . . . . . . . . . . . . . .393
Menük módosítása futásidõben . . . . . . . . . . . . . . .395
Menüpontok változtatása futásidõben . . . . . . . . . . . . . . .395 Menüpontok kikapcsolása és legördülõ menük elrejtése . .397 Rádió menüpontok használata . . . . . . . . . . . . . . . . . . . .399 Menüpontok készítése dinamikusan . . . . . . . . . . . . . . . .400 Menük és menüpontok létrehozása dinamikusan . . . . .405 Rövid és hosszú menük . . . . . . . . . . . . . . . . . . . . . . . . . .405
Grafikus menüpontok . . . . . . . . . . . . . . . . . . . . . .407 A pipa módosítása . . . . . . . . . . . . . . . . . . . . . . . . . . . . .407 Kép menüpontok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .411 Tulajdonos által rajzolt menüpontok . . . . . . . . . . . . . . .415
9
10
XX.
FEJEZET
Fejezet c me
A rendszermenü testreszabása . . . . . . . . . . . . . . . .419 Teljes menü készítése . . . . . . . . . . . . . . . . . . . . . . .422 A Fájl menü . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .423 Rövid kiértékelés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .425 A Bekezdés menü . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .429 A Betûtípus menü . . . . . . . . . . . . . . . . . . . . . . . . . . . . .430 A Beállítások menü . . . . . . . . . . . . . . . . . . . . . . . . . . . .433
Elõugró menük
. . . . . . . . . . . . . . . . . . . . . . . . . . .434
Automatikus helyi menü . . . . . . . . . . . . . . . . . . . . . . . . .435 Elõugró menü módosítása aktiváláskor . . . . . . . . . . . . . .436 Elõugró menük kezelése programból . . . . . . . . . . . . . . . .437 Hogyan tovább? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .439
A formok mélyebb megismerése . . . . . . . . . . . .443 Formok és ablakok . . . . . . . . . . . . . . . . . . . . . . . .443 Átlapolt, felbukkanó és gyermekablakok . . . . . . . . . . . . .445 Az alkalmazás is ablak . . . . . . . . . . . . . . . . . . . . . . . . .446
Form-stílusok beállítása . . . . . . . . . . . . . . . . . . . . .447 Legfelül maradó form készítése . . . . . . . . . . . . . . . . . . . .448 A villanás kiküszöbölése . . . . . . . . . . . . . . . . . . . . . . . . .449
Keretstílus
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .451
A keretstílus hatása . . . . . . . . . . . . . . . . . . . . . . . . . . . .452 A Borders példa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .453 A keret ikonjai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .454 További ablakstílusok használata . . . . . . . . . . . . . . . . . .456 A formok manuális méretezése . . . . . . . . . . . . . . . . . . . .457 Formok automatikus méretezése . . . . . . . . . . . . . . . . . . .460 Méretezés és fontok . . . . . . . . . . . . . . . . . . . . . . . . . . .461
A form helyzetének és méretének állítása . . . . . . .461 A form kis- és teljes méretûvé alakítása . . . . . . . . . . . . . .463 A form és kliensterületének mérete . . . . . . . . . . . . . . . . .465 A formok maximális és minimális mérete . . . . . . . . . . . .466
Formok készítése automatikusan . . . . . . . . . . . . . .468 A form bezárása
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .469
A billentyûzet-események figyelése . . . . . . . . . . . .472 Egéresemények figyelése . . . . . . . . . . . . . . . . . . . .475 Az egér gombjai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .475 A Windows használata egér nélkül . . . . . . . . . . . . . . . . .476 Az egéresemények paraméterei . . . . . . . . . . . . . . . . . . . .476 Kattintás és rajzolás: a Shapes1 példa . . . . . . . . . . . . . . .477
Rajzolás a formra . . . . . . . . . . . . . . . . . . . . . . . . . .479 A rajzeszközök . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .480
XX.
FEJEZET
Fejezet c me Alakzatok rajzolása . . . . . . . . . . . . . . . . . . . . . . . . . . . .481
Rajzolás és festés a Windows-ban
. . . . . . . . . . . . .484
Egy egyszerû alakzat festése . . . . . . . . . . . . . . . . . . . . . .485 Több alakzat festése . . . . . . . . . . . . . . . . . . . . . . . . . . . .487
A Delphi kimeneti komponensei . . . . . . . . . . . . . .491 Hogyan tovább?
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .491
Egy autó a gombon
. . . . . . . . . . . . . . . . . . . . . . . . . . . .497
Grafikus komponensek . . . . . . . . . . . . . . . . . . .495 A felhasználói felület grafikus fejlesztése . . . . . . . .495 Bitmap a gombon . . . . . . . . . . . . . . . . . . . . . . . . .496 Változó kép a gombon . . . . . . . . . . . . . . . . . . . . . .502 A kétállású gomb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .502 Több kép egy bitmapben . . . . . . . . . . . . . . . . . . . . . . . . .504 A forgó földgömb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .506 Bitmap lista, erõforrások használata, és a rajztábla . . . .508
Az Animáció kontrol . . . . . . . . . . . . . . . . . . . . . . .514 Kép megjelenítõ . . . . . . . . . . . . . . . . . . . . . . . . . . .517 Rajzolás a bittérképbe . . . . . . . . . . . . . . . . . . . . . .520 Alakzatok rajzolása . . . . . . . . . . . . . . . . . . . . . . . . . . . .521
Grafikus listák
. . . . . . . . . . . . . . . . . . . . . . . . . . . .524
Színek listájának kirajzolása . . . . . . . . . . . . . . . . . . . . .524 A könyv rövid áttekintése . . . . . . . . . . . . . . . . . . . . . . . .528 A fejezetek struktúrája . . . . . . . . . . . . . . . . . . . . . . . . . .532 Az Outline csomópontjai . . . . . . . . . . . . . . . . . . . . . . . .536 Egy grafikus lista . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .539
Grafikus rácsok . . . . . . . . . . . . . . . . . . . . . . . . . . .542 A font rács . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .544 Aknák a rácsban . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .548 Színek választása . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .553
A TeeChart használata . . . . . . . . . . . . . . . . . . . . . .554 Az elsõ példa készítése . . . . . . . . . . . . . . . . . . . . . . . . . .556 Adatok hozzáadása a grafikonhoz . . . . . . . . . . . . . . . . .558 Sorozatok dinamikus létrehozása . . . . . . . . . . . . . . . . . .560
A DátumIdõ kiválasztó kontrol . . . . . . . . . . . . . . .562 Hogyan tovább?
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .564
Eszköztár, CoolBar, státuszsor . . . . . . . . . . . . . .567 Kontrolok csoportosítása paneleken . . . . . . . . . . .567 Eszközsor készítése panelbõl . . . . . . . . . . . . . . . . .568 Az elsõ eszköztár . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .569 Eszköztár gombok ki és bekapcsolása . . . . . . . . . . . . . . .572
11
12
XX.
FEJEZET
Fejezet c me Tippek hozzáadása az eszköztárhoz . . . . . . . . . . . . . . . .574
Tippek a formokon . . . . . . . . . . . . . . . . . . . . . . . .576 Tippek testre szabása . . . . . . . . . . . . . . . . . . . . . . . . . . .576 Több tipp egy kontrolhoz . . . . . . . . . . . . . . . . . . . . . . . .578
Szolgáltatások az eszköztáron . . . . . . . . . . . . . . . .580 Combo box eszköztáron . . . . . . . . . . . . . . . . . . . . . . . . .580 Mozgatható eszköztár . . . . . . . . . . . . . . . . . . . . . . . . . . .582
A Windows 95-ös Toolbar (Eszköztár) kontrol . . . .586 Egy remek eszköztár . . . . . . . . . . . . . . . . . . . . . . .590 Státuszsor készítése . . . . . . . . . . . . . . . . . . . . . . . .593
Menü tippek a státuszsoron . . . . . . . . . . . . . . . . . . . . . .594 Speed Button tippek a státuszsoron . . . . . . . . . . . . . . . . .596 Hogyan tovább? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .597
Több form és párbeszédablak . . . . . . . . . . . . . .601 Párbeszédablakok vagy formok? . . . . . . . . . . . . . .601 Második form hozzáadása a programunkhoz . . . . .602 Modális és nem modális formok . . . . . . . . . . . . . .605 Két form, két menü . . . . . . . . . . . . . . . . . . . . . . . . . . . .607 Form menük egybeolvasztása . . . . . . . . . . . . . . . . . . . . .608
Párbeszédablakok készítése . . . . . . . . . . . . . . . . . .611 Modális párbeszédablakok . . . . . . . . . . . . . . . . . . . . . . .611 Párbeszédablak bezárása . . . . . . . . . . . . . . . . . . . . . . . .614 Nem modális párbeszédablak . . . . . . . . . . . . . . . . . . . . .615
Elõre definiált párbeszédablakok használata . . . . .620
Általános Windows párbeszédablakok . . . . . . . . . . . . . . .620 Az Open Dialog komponens . . . . . . . . . . . . . . . . . . . .620 A Font Dialog komponens . . . . . . . . . . . . . . . . . . . . . .622 A Color Dialog komponens . . . . . . . . . . . . . . . . . . . . .624 A Find Dialog és Replace Dialog komponensek . . . . . .624 Üzenetablakok sokasága . . . . . . . . . . . . . . . . . . . . . . . . .626
Bõvíthetõ párbeszédablakok . . . . . . . . . . . . . . . . .630 Névjegy készítése . . . . . . . . . . . . . . . . . . . . . . . . . .633
A rendszer Névjegyének használata . . . . . . . . . . . . . . . .633 Saját rejtett képernyõ készítése . . . . . . . . . . . . . . . . . . . .634 Nyitóképernyõ készítése . . . . . . . . . . . . . . . . . . . . . . . . . .637
Vizuális form öröklés . . . . . . . . . . . . . . . . . . . . . . .642 Öröklés alapformból . . . . . . . . . . . . . . . . . . . . . . . . . . . .643
Polimorf formok . . . . . . . . . . . . . . . . . . . . . . . . . . .646 Hogyan tovább?
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .650
Görgetés, többlapos formok . . . . . . . . . . . . . . . .655
XX.
FEJEZET
Fejezet c me
Amikor a formok túl nagyok . . . . . . . . . . . . . . . . .655 A form görgetése . . . . . . . . . . . . . . . . . . . . . . . . . .656 A görgetést tesztelõ példa . . . . . . . . . . . . . . . . . . . . . . . .657 Automatikus görgetés . . . . . . . . . . . . . . . . . . . . . . . . . . .660 Kép görgetése . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .660 Görgetés és form koordináták . . . . . . . . . . . . . . . . . . . . .662
Jegyzettömbök készítése a Delphivel . . . . . . . . . . .664 PageControl és TabSheet komponensek . . . . . . . . . . . . . .665 Notebook TabSet-tel . . . . . . . . . . . . . . . . . . . . . . . . . . . .670 Jegyzettömb oldalának megváltoztatása . . . . . . . . . . . . .674 Füllel rendelkezõ jegyzettömbök . . . . . . . . . . . . . . . . . . .677
Jegyzettömb fülek nélkül és fülek jegyzettömb nélkül 678
Megjelenítés egy jegyzettömbben . . . . . . . . . . . . . . . . . . .679
Egy képkezelõ program
. . . . . . . . . . . . . . . . . . . .680
Képnézegetõ fülekkel . . . . . . . . . . . . . . . . . . . . . . . . . . . .683 Egy többoldalas eszköztár . . . . . . . . . . . . . . . . . . . . . . . .684
Formfelosztási technikák . . . . . . . . . . . . . . . . . . . .686 Elválasztás Splitterrel . . . . . . . . . . . . . . . . . . . . . . . . . . .686 Vízszintes elválasztás . . . . . . . . . . . . . . . . . . . . . . . . . . .689
Alternatív elválasztó komponensek . . . . . . . . . . . .690 Elválasztás fejléccel . . . . . . . . . . . . . . . . . . . . . . . . . . . .691 Elválasztás panelekkel . . . . . . . . . . . . . . . . . . . . . . . . . .694 Elválasztó vonal rajzolása . . . . . . . . . . . . . . . . . . . . . . .697
Közvetlen egérkezelés a formban
. . . . . . . . . . . . .701
Húzás egérrel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .701 A húzás kódja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .702 Hogyan tovább? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .703
MDI alkalmazások készítése . . . . . . . . . . . . . . . .707 MDI a Windowsban: technikai áttekintés . . . . . . . .707 Keret és gyermekablakok a Delphiben . . . . . . . . .710 Az elsõ MDI demo Delphiben . . . . . . . . . . . . . . . . . . . . .710 Egy teljes Window menü felépítése . . . . . . . . . . . . . . . . . .713 Egy gyermekablak létrehozása . . . . . . . . . . . . . . . . . . . .715
MDI alkalmazások különbözõ gyermekablakokkal 717 Egy pattogó alak hozzáadása . . . . . . . . . . . . . . . . . . . . .718 Az új gyermekform menüje . . . . . . . . . . . . . . . . . . . . . .719 A fõform átalakítása . . . . . . . . . . . . . . . . . . . . . . . . . . .720
Az MDI gyors elsajátítása . . . . . . . . . . . . . . . . . . . .722 Hogyan tovább?
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .724
13
14
XX.
FEJEZET
Fejezet c me
Adatbázis-kezelõ alkalmazások készítése . . . . . .727 Adatok, fájlok, adatbázisok, és táblák . . . . . . . . . .727 Mi is egy tábla? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .730 Mûveletek végzése az adatbázison . . . . . . . . . . . . . . . . .731
A Delphi adatbázis komponensei . . . . . . . . . . . . . .731 Táblák és lekérdezések . . . . . . . . . . . . . . . . . . . . . . . . . .733 Az adatkészlet állapota . . . . . . . . . . . . . . . . . . . . . . . . . .735 Más adatkezelõ komponensek . . . . . . . . . . . . . . . . . . . . .736 A Delphi adatfüggõ komponensei . . . . . . . . . . . . . . . . . .736
Adatbázis-kezelõ alkalmazások készítése manuálisan . 738 Egy adatbázis-kezelõ rács . . . . . . . . . . . . . . . . . . . . . . . .738 A rács testreszabása . . . . . . . . . . . . . . . . . . . . . . . . . . . .740 A tábla állapota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .741 DBEdit vezérlõk használata . . . . . . . . . . . . . . . . . . . . . .742 Lekérdezések használata . . . . . . . . . . . . . . . . . . . . . . . .744 Paraméterezett lekérdezések . . . . . . . . . . . . . . . . . . . . . .748 A Database Form varázsló használata . . . . . . . . . . . . . .750
Az adatmezõk elérése
. . . . . . . . . . . . . . . . . . . . . .751
A mezõosztályok hierarchiája . . . . . . . . . . . . . . . . . . . . .753 Számított mezõ készítése . . . . . . . . . . . . . . . . . . . . . . . . .757
Mezõk használata a tábla változtatásához
. . . . . . .762
Rekordok keresése a táblában . . . . . . . . . . . . . . . . . . . . .762 A keresõ metódusok . . . . . . . . . . . . . . . . . . . . . . . . . . . .764 Goto metódusok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .765 A Locate metódus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .766
Egy tábla oszlopának szummázása . . . . . . . . . . . . .766 A tábla egy oszlopának szerkesztése
. . . . . . . . . . . . . . . .769
Az adatbázis különbözõ tábláinak használata
. . . .770
Az adatbázis és a tábla kiválasztása futásidõben . . . . . .770 Egy táblaböngészõ program . . . . . . . . . . . . . . . . . . . . . .772 Egy mezõszerkesztõ program . . . . . . . . . . . . . . . . . . . . .775 A táblaböngészõ felhasználói felületének továbbfejlesztése 776
Tábla létrehozása . . . . . . . . . . . . . . . . . . . . . . . . . .778
Táblák dinamikus létrehozása . . . . . . . . . . . . . . . . . . . .779 A form és a kezdõ programrészlet . . . . . . . . . . . . . . . . . .781 Új tábla létrehozása . . . . . . . . . . . . . . . . . . . . . . . . . . . .782 Egy létezõ tábla kiválasztása a megfelelõ mezõk segítségével 784 Rekordok hozzáadása és törlése . . . . . . . . . . . . . . . . . . .787
Többrekordú rács használata . . . . . . . . . . . . . . . . .788 Rácspanelek mozgatása . . . . . . . . . . . . . . . . . . . . . . . . .789
XX.
FEJEZET
Fejezet c me
Kapcsolttáblás form készítése varázslóval
. . . . . . .791
A kapcsolttáblás szerkezet használata lekérdezésekben . .793 Választás kombinált lista segítségével . . . . . . . . . . . . . . .793 Keresés a rácsban . . . . . . . . . . . . . . . . . . . . . . . . . . . . .795 Mi következik? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .797
Haladó adatbázis-kezelés . . . . . . . . . . . . . . . . . .801 Kapcsolat létesítése SQL szerverrel . . . . . . . . . . . .801 Elsõ InterBase alkalmazásunk . . . . . . . . . . . . . . . . . . . .802 Kapcsolat távoli SQL szerverrel . . . . . . . . . . . . . . . . . . . .804 InterBase szerver eszközök . . . . . . . . . . . . . . . . . . . . . . .804
Meglévõ program átírása SQL szerverre . . . . . . . . .807
A tábla átmásolása . . . . . . . . . . . . . . . . . . . . . . . . . . . . .808 Az alkalmazás átírása . . . . . . . . . . . . . . . . . . . . . . . . . .810 A Visual Query Builder használata . . . . . . . . . . . . . . . . .811 Átírás vagy fejlesztés? . . . . . . . . . . . . . . . . . . . . . . . . . . .814
Tábla-összekapcsolások a Visual Query Builderrel 814 Egy háromtáblás összekapcsolás . . . . . . . . . . . . . . . . . . .815 Egy többtáblás kapcsolat . . . . . . . . . . . . . . . . . . . . . . . . .817
Adatmodulok . . . . . . . . . . . . . . . . . . . . . . . . . . . . .819 Egy adatmodul elkészítése . . . . . . . . . . . . . . . . . . . . . . . .820
Adatmodul több nézethez . . . . . . . . . . . . . . . . . . .821
Mezõtulajdonságok és kezdõértékek megadása . . . . . . . .823 Egyszerû táblaszûrés . . . . . . . . . . . . . . . . . . . . . . . . . . .825 Egyéni táblaszûrés . . . . . . . . . . . . . . . . . . . . . . . . . . . . .827 Egyéni szûrés és a kliens/szerver fejlesztés . . . . . . . . . . . .829
Az adatszótár . . . . . . . . . . . . . . . . . . . . . . . . . . . . .830 Az adatszótár és a mezõszerkesztõ (Fields Editor) . . . . . .831 Mibõl áll egy attribútumhalmaz? . . . . . . . . . . . . . . . . . .832 Az adatszótár használata . . . . . . . . . . . . . . . . . . . . . . . .833
Tranzakciókezelés . . . . . . . . . . . . . . . . . . . . . . . . .834 Egy egyszerû példa a tranzakciókezelésre . . . . . . . . . . . .835 Egyéni adatbázis-belépés . . . . . . . . . . . . . . . . . . . . . . . .837
Adatbázishibák kezelése Hogyan tovább?
. . . . . . . . . . . . . . . . . . . .839
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .843
15