A tulajdonos megértése Szülő a Delphi alkalmazásokban

Minden alkalommal, amikor egy panelt rátesz egy űrlapra és egy gombot ezen a panelen, "láthatatlan" kapcsolatot létesít. Az űrlap lesz a tulajdonos gombbal, és a panel beállítva lesz szülő.

Minden Delphi komponensnek tulajdonosa van. A Tulajdonos gondoskodik felszabadítása a tulajdonában lévő alkatrészek, amikor felszabadulnak.

Hasonló, de eltérő a Szülő tulajdonság azt az összetevőt jelöli, amely tartalmazza a "gyermek" összetevőt.

Szülő

A szülő arra a komponensre utal, amelyben egy másik komponens található, mint például a TForm, a TGroupBox vagy a TPanel. Ha az egyik kontroll (szülő) másokat is tartalmaz, akkor a tartalmazott vezérlőket a szülő gyermekfelügyelete.

A szülő határozza meg az összetevő megjelenítésének módját. Például a Bal és a Felső tulajdonságok mind a Szülőhöz viszonyítva.

A Szülő tulajdonság hozzárendelhető és megváltoztatható futási idő alatt.

Nem minden összetevő rendelkezik szülővel. Sok formának nincs szülője. Például a közvetlenül a Windows asztalon megjelenő űrlapok Szülő értéke nulla. Egy alkotóelem

instagram viewer
HasParent módszer visszaad egy logikai értéket, jelezve, hogy az összetevőhöz szülő van-e rendelve.

A Szülő tulajdonságot használjuk, hogy megszerezzük vagy beállítsuk a vezérlő szülőit. Például tegyen két panelt (Panel1, Panel2) egy űrlapra, és helyezze el az egyik gombot (Button1) az első panelen (Panel1). Ez a Button Parent tulajdonságát a Panel1 értékre állítja.

 Button1.Parent: = Panel2; 

Ha a fenti kódot a második panel OnClick eseményébe helyezi, amikor a Panel2-re kattint, akkor a „Panel” gomb „ugrása” elemről a Panel1 elemre vált: a Panel1 már nem a gomb szülője.

Ha futásidejű TButton-ot akar létrehozni, fontos, hogy ne felejtsünk el szülőket rendelni - a gombot tartalmazó vezérlőt. Ahhoz, hogy egy elem látható legyen, meg kell szülőnek kell lennie ahhoz, hogy megjelenítse önmagát.

ParentThis és ParentThat

Ha kiválaszt egy gombot a tervezéskor és megnézte az Object Inspector-t, akkor számos "szülő-tudatos" tulajdonságot észlel. Az ParentFontpéldául azt jelzi, hogy a Gomb feliratához használt betűtípus megegyezik-e a Gomb szülőjéhez használt betűkészlettel (az előző példában: Panel1). Ha a ParentFont igaz a panelen lévő összes gombra, akkor a panel Betűkészlet tulajdonságának félkövérre állítása esetén a Panelen lévő összes gomb felirata ezt a (félkövér) betűtípust használja.

Az ingatlan ellenőrzése

Az ugyanazon szülővel rendelkező összes elem elérhető a Controls annak a szülőnek a tulajdonát. Például a Vezérlők hozzászokhatnak ismételje meg az ablakon átnyúló vezérlés minden gyermekét.

A következő kódrész felhasználható az 1. panelen található összes alkatrész elrejtésére:

mert ii: = 0 nak nek Panel1.ControlCount - 1 csinál

 Panel1.Kontroll [ii] .Vizibilis: = hamis;


Trükkös trükkök

Az ablakos vezérlőknek három alapvető jellemzőjük van: képesek fogadni a bemeneti fókuszt, rendszer erőforrásokat használnak, és szülők lehetnek más vezérlőkhöz.

Például a Button elem egy ablakos vezérlés, és nem lehet szülő más komponenshez - nem helyezhet rá egy másik összetevőt. A helyzet az, hogy Delphi elrejti ezt a funkciót tőlünk. Példa erre a TStatusBar rejtett lehetősége, hogy rajta legyen néhány olyan összetevő, mint a TProgressBar.

Tulajdonjog

Először vegye figyelembe, hogy az űrlap az összes rajta található alkotóelem (a formatervezési időben az űrlapon elhelyezett) általános tulajdonosa. Ez azt jelenti, hogy amikor egy űrlap megsemmisül, az űrlap összes alkotóeleme is megsemmisül. Például, ha van egynél több űrlappal rendelkező alkalmazás, amikor űrlabjektumra hívjuk a Free vagy a Release módszert, akkor mi nem kell aggódnia, hogy kifejezetten felszabadítja az összes űrlapon lévő objektumot, mert az űrlap minden formája a tulajdonosa alkatrészek.

Minden alkotóelemnek, amelyet tervezünk vagy futási időn belül létrehozunk, egy másik alkatrésznek kell lennie. Az összetevő tulajdonosát - a tulajdonos tulajdonságának értékét - egy paraméter határozza meg, amelyet az összetevő létrehozásakor átadnak a konstruktor létrehozásakor. A Tulajdonos újbóli hozzárendelésének egyetlen módja az InsertComponent / RemoveComponent módszerek használata a futási idő alatt. Alapértelmezés szerint az űrlap az összes alkotóelem tulajdonosa, és viszont az alkalmazás tulajdonában van.

Amikor a kulcsszót használjuk Maga mint a Létrehozás módszer paramétere - az általunk létrehozott objektum azon osztály tulajdonában van, amelyben a módszer szerepel - amely általában Delphi forma.

Ha viszont egy másik összetevőt (nem az űrlapot) teszünk az összetevő tulajdonosává, akkor azt az összetevőt tesszük felelőssé az objektum megsemmisítéséért, amikor az megsemmisül.

Mint minden más Delphi komponens, Egyedi TFindFile komponens létrehozható, használható és megsemmisíthető futási időben. Létrehozás, használat és ingyen a TFindFile összetevő futás közben használhatja a következő kódrészletet:

felhasználások FindFile;

...
var FFile: TFindFile;

eljárás TForm1.InitializeData;

kezdődik // forma ("Self") az összetevő tulajdonosa // nincs szülő, mivel ez // egy láthatatlan összetevő.

 FFile: = TFindFile. Létrehozás (Ön);

 ...

vég;

Megjegyzés: Mivel a FFile egy tulajdonosnál jön létre (1. forma), nem kell tennünk semmit az összetevő felszabadításához - az a tulajdonos megsemmisítésekor felszabadul.

Alkatrészek Tulajdonságok

Az összes olyan alkotóelem, amely ugyanazzal a Tulajdonosgal rendelkezik, elérhető a Alkatrészek tulajdonsága ennek a Tulajdonosnak. A következő eljárással törölhetők az összes űrlapon található Szerkesztés összetevő:

eljárás ClearEdits (AForm: TForm);

var

 ii: egész szám;

kezdődik

mert ii: = 0 nak nek Egy űrlapot. ComponentCount-1 csinál

ha (Egy űrlapot. Komponensek [II] jelentése tSzerkesztés) azután TEdit (AForm. Alkatrészek [ii]). Szöveg: = '';

vég; 

„Árva”

Egyes vezérlők (például az ActiveX vezérlők) nem a VCL ablakokban találhatók, nem pedig a szülő vezérlőkben. Ezeknél a vezérlőknél a Szülő értéke: nulla és a ParentWindow tulajdonság meghatározza a nem VCL szülő ablakot. A ParentWindow beállítása úgy mozgatja a vezérlőt, hogy az a meghatározott ablakban legyen. A ParentWindow automatikusan beállítódik, amikor vezérlőt hoz létre a CreateParented eljárás.

Az igazság az, hogy a legtöbb esetben nem kell törődnie a szülőkkel és a tulajdonosokkal, hanem amikor az OOP és alkatrészek fejlesztése vagy ha egy lépéssel előre szeretné lépni a Delphinek, a cikkben szereplő állítások segítenek abban, hogy gyorsabban megtegye ezt a lépést.

instagram story viewer