HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Mi történt a proxies.pas-sal?


Példaprogram letöltése

11120 bájt

A Delphi 5, de méginkább a Delphi 6 megjelenésével, a property editor-ok használatában nagy változás történt. Megváltoztak a unitok nevei, és használatuk módja is. Egy komponens forráskódjának részeit két csoportba sorolhatjuk: fejlesztési és futási idejű kódok. A kettő keveredése futási hibát eredményez. A hibát a linker program nem veszi észre, azonban alkalmazásunk még sem lesz futtatható, amikor azt le akarjuk fordítani. Ebben a cikkben ennek a hibának az eredetét és megoldását kutatjuk.

A mellékelt példaprogramok használata előtt, az egyes alkönyvtárakban található Package1.dpk állományok tartalmát telepítenie kell a Delphi alá. Ehhez nyissa meg Delphi-ből az adott állományt, majd válassza az Install opciót. Minden példaprogram használatához a saját könyvtárában található dpk állomány telepítése szükséges. Mielőtt telepítené az újabb dpk állományt, távolítsa el az előzőt.
(A Sample1 könyvtárban lévő példaprogram nem fog működni.)
A Borland cég úgy döntött, hogy a DsgnIntf.dcu állomány nem kerül bele a Delphi 5-be. A unit a property-editor-ok szerkesztési időben használható kódját tartalmazta. A Borland ezt a lépést azzal indokolta, hogy az új komponens varázsló létrehozza az új komponens vázának kódját, ami futási idejű, valamint elkészíti magát a Register eljárást is, amely viszont fejlesztési idejű kód.
A Delphi 6 megjelenésével a Borland egy újabb változtatást hajtott végre. A DsgnIntf.pas unit-ot átnevezték DesignIntf-re, valamint a property-editor-okat szétdarabolták különálló unit-okká: DesignEditors, DesignMenus, DesignWindows, stb. Ezeknek az állományoknak a tartalma csak fejlesztési időben használható.
Kétségtelen, hogy ezek a változtatások fordítási hibák formájában köszönnek vissza, akkor is ha egy régebbi Delphi verzióval készült kódot akarunk újra fordítani, vagy ha egy újat készítünk és a unitban keverjük a futási és fordítási idejű kódokat.
A Sample1 példában létrehoztunk egy komponenst. A TMemo osztályt kibővítettük egy FileName tulajdonsággal, amelynek ha beállítjuk az értékét, a komponens betölti a megadott állomány tartalmát. Ehhez elkészítettünk egy property-editor-t is, amely segítségével fejlesztési időben nyithatunk meg TXT állományokat. A megnyitott TXT állomány tartalma bekerül a Memo tartalmába.
A komponens és a komponens szerkesztő kódját ugyanabban a unit-ban helyeztük el. Létrehoztunk egy telepítő csomagot a komponenshez, Package1.dpk néven. Amikor lefordítjuk és telepítjük a csomagot, a Delphi semmilyen hibaüzenetet nem ad, mindent tökéletesnek talál.
Amikor azonban a komponenst fel akarjuk használni (mellékelt példaprogram), fejlesztési időben minden tökéletesen működik, de amikor futtatni akarjuk programunkat, a Delphi hiányolja a DsgnIntF.dcu-t.
Az alábbiakban ennek a problémának keressük a megoldását.
A problémát az okozza, hogy összekevertük a futási és a fejlesztési idejű kódokat. Ha ezeket elkülönítjük egymástól, akkor 99,99 %-ban biztos, hogy a problémát meg tudjuk oldani.
Nézzük meg, hogy mik tartoznak a futási és a fejlesztési idejű kódok közé.
Futási idejű kód
  • Maga a komponens
  • Olyan Form-ok, amelyekre a komponensnek futási időben szüksége van, és amelyeket használ.
Fejlesztési idejű kód
  • A regisztrációs kifejezések. Register eljárások.
  • Az összes property-editor.
  • Az összes component-editor.
  • Az összes Package állomány.
Kavarodást a komponens által használt Form-ok okozhatnak. Ha a Form futási időben áll rendelkezésre, akkor a futási idejű csomagba soroljuk, ha fejlesztési időben áll rendelkezésre, akkor a fejlesztési csomagba soroljuk. Nagyon gyakori tévedés, hogy maga a Form a szerkesztő, de nem az. A property-editor az, ami meghívja a Form-ot.
A problémára az a lehetséges megoldás, hogy elkülönítjük egymástól a futási és a fejlesztési idejű kódokat, és külön unit-okban helyezzük el azokat. Fontos megjegyezni, hogy maga a komponens és a hozzá tartozó szerkesztők különálló dolgok. A komponensnek nem kell ismernie a hozzá tartozó szerkesztőket.
A szétválasztást a legegyszerűbb úgy elvégeznünk, hogy a komponensek kódját elhelyezzük egy unit-ban, majd egy teljesen különálló unit-ba tesszük azokat a kódokat, amelyek használják a DesignIntF és DesignEditors állományokat.
Amikor létrehozzuk a komponenst telepítő Package állományt, a Delphi 6-os verziójától kezdődően még egy lépést meg kell tennünk. Amikor létrejön a Package állomány, a Requires feliraton kattintsunk az egér jobb gombjával. A megjelenő menüben válasszuk az Add menüpontot. Megnyílik egy újabb ablak, ahol lehetőségünk van állományokat tallózni. Keressük meg a Delphi Lib alkönyvtárában található DesignIDE.dcp állományt, majd adjuk hozzá a Package állományhoz.
A szétbontás eredményét a Sample2 példaprogram tartalmazza.
Mielőtt telepítené a Sample2 könyvtárban található Package1.dpk állományt, távolítsa el az előzőt. Ehhez válassza a Component – Install packages menüpontot. A Package1 elérési útja alapján került bejegyzésre. Válassza ki a listában, majd kattintson a Remove feliratú gombra.
A Sample2 példaprogram már hiba nélkül futtatható.

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 259. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |