HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Elemek felvételének és törlésének tiltása szerkesztési időben a TCollection osztályból származó property-knél


Példaprogram letöltése

15402 bájt

Egy komponens fejlesztésénél gyakran előfordul, hogy egy-egy property-t a TCollection (vagy TOwnedCollection) osztályból származtatunk. Ez nagyon jól használható a legtöbb esetben, néha az ebbe felvehető elemek számát korlátozni kellene. Gondoljunk például egy olyan komponensre, amely mondjuk 20 db Check Box komponenst tartalmaz. A CheckBox komponensek tulajdonságait egy TCollection-ból származó property-ben lehetne módosítani. Ez megoldható, de ebben az esetben gondoskodni kell arról is, hogy a CheckBox-okhoz tartozó elemeket ne lehessen törölni, és újat se lehessen felvenni. Ebben a példában megmutatjuk, hogy ezt hogyan is lehet megoldani.
A mellékelt példaprogram megnyitása előtt a FixedCollectionItems.pas-ban lévő komponenst, majd a FixedItemsPropertyEditor.dpk-t telepítenie kell a Delphi alá.

A mellékelt példában egy egyszerű komponenst készítünk, melynek van egy Items property-je. Ezen a property-n keresztül 5 db TFixCollectionItem típusú objektumot érünk el úgy, hogy szerkesztési időben ezeket nem lehet törölni, illetve újat sem lehet létrehozni. Ha csak egyszerűen telepítjük a komponenst, akkor ezt a feladatot nem hajtottuk végre, nyugodtan törölhetjük a meglévő objektumokat (amiket a komponens konstruktorában hoztunk létre), és újakat is létrehozhatunk. Nyilvánvaló, hogy a megoldás egy új property szerkesztőben van. Az eredeti property editor a ColnEdit unit-ban található, alapesetben minden TCollection-ból származó property-hez ez van hozzárendelve.
Hozzunk létre egy új unit-ot, és a uses részben hivatkozzunk a DsgnIntf, ColnEdit unit-okra, és a komponensünk unit-jára (a példában FixedCollectionItems.pas).
Deklaráljunk egy új osztályt a TCollectionProperty-ből származtatva. A public részben a GetColOptions függvényt írjuk felül. A deklaráció valahogy így néz ki:
  TFixedItemsProperty = class(TCollectionProperty)
  public
    function GetColOptions: TColOptions; override;
  end;
A függvény mindössze egy egyszerű sorból áll:
  Result:=[];
Az eredeti visszatérési értékhez képest az alábbi elemeket vettük ki:
  • coAdd: új elem hozzáadása;
  • coDelete: elem törlése;
  • coMove: elem mozgatása;
Készítsünk egy Register eljárást is, amiben a property szerkesztőnket hozzárendeljük a komponens megfelelő property-jéhez. Ez a RegisterPropertyEditor eljárással történik meg:
  RegisterPropertyEditor(TypeInfo(TFixCollectionItems), TFixedCollectionItems, 'Items',
      TFixedItemsProperty);
Ezután hozzunk létre egy designtime package-t, fordítsuk le, és telepítsük. Ezután a komponensünk property-jében az elemek felvételének, törlésének és mozgatásának lehetősége megszűnt. A mozgatást viszont nem tudjuk teljes egészében letiltani, csupán az eszköztáron található gombokat, mivel az egér húzással az elemek pozíciója megváltoztatható.



Cikksorozat

#IDKategóriaCikk címeSorozat
1166DelphiOsztály hierarchia lekérdezése1. rész
1180DelphiOsztály hierarchia lekérdezése2. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2001 évkönyv 526. 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 |