HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Komponensek eseményeinek kigyűjtése


Példaprogram letöltése

3745 bájt

A Delphi rendszerben található egységek sok ezer metódusa között találunk olyanokat is, melyekkel lekérdezhetjük, hogy egy adott alkalmazás komponenseinek milyen eseményére írtunk kezelőfüggvényeket. Ezek a metódusok az egyik ritkán használt unit-ban kaptak helyet. Cikkünkben bemutatjuk, mely metódusokról van szó, hogyan használhatók, és hogyan listázhatók ki a kezelt események.

A megoldáshoz a TypInfo unit metódusait használjuk fel. Ennek megfelelően az alkalmazás uses listájában hivatkoznunk kell erre az egységre is.
Az első metódus a GetPropList, melynek deklarációja a következő:
GetPropList
Function GetPropList(
TypeInfo : PTypeInfo; PropList : PPropList
) : Integer;
A metódussal lekérdezhetjük a megadott objektum valamennyi tagját reprezentáló mutatót, és egy listában eltároljuk.
Paraméterek
TypeInfo : PTypeInfo
A típus, melynek tagjaira kíváncsiak vagyunk. Jelen esetben ez a TForm objektum, valamint ennek komponensei.
PropList : PPropList
A lista, mely a mutatókat tárolja.
Visszatérési érték
A visszatérési érték a lekérdezett tagok száma.
Amennyiben rendelkezésre állnak a mutatók, akkor a GetMethodProp metódus alkalmas arra, hogy a megadott mutató által reprezentált tag adatait visszaadja. Ennek a metódusnak a következő a deklarációja:
A metódusnak két megvalósítása létezik, az első szerint az adott tagra vonatkozó információkat egy TPropInfo típusban adhatjuk át. Mi most a másik megvalósítást alkalmazzuk, miszerint a tag nevét adjuk meg a második paraméterben.
GetMethodProp
Function GetMethodProp(
Instance: TObject; const PropName: string
): TMethod;
Egy TMethod nevű típusban adja vissza az adott tag információit.
Paraméterek
Instance: TObject
Az objektum, melynek metódusára vagy property-jére kíváncsiak vagyunk.
const PropName: string
A tag neve.
Visszatérési érték
A kapott eredmény a következő deklarációjú rekordban tárolódik:
TMethod = packed record
  Code, Data: Pointer;
end;
Amennyiben a Code mutató nem NIL, akkor az adott eseményre deklaráltunk kezelőmetódust. Ezt használjuk fel a példában is.
A mellékelt példában 4 darab eseményt deklaráltunk a TForm és a TMemo komponensünk számára. Ezeket kérdezzük le.
Az első lépés, hogy GetPropList metódust meghívjuk a TForm objektummal, hogy az űrlap objektum-eseményeit lekérdezhessük.
y := GetPropList(Self, pl);
A kapott számot felhasználva egy ciklussal végigmegyünk a TPropList lista elemein, melyet a metódussal feltöltöttünk.
Mivel itt most csak az események érdekelnek minket, megvizsgáljuk, hogy az adott elem neve az „On” karakterlánccal kezdődik-e. Amennyiben nem, akkor nem vizsgáljuk az adott elemet.
for x := 0 to y - 1 do begin
  if Copy(pl[x].Name, 1, 2) <> 'On' then Continue;
Amennyiben igen, akkor a tag nevével meghívjuk a GetMethodProp metódust. Ha a TMethod rekord Code mezőjének értéke nem NIL, akkor a TMemo komponensben megjelenítjük az objektum nevét, és az adott tag nevét.
  if GetMethodProp(Self, pl[x].Name).Code <> nil then
    Memo1.Lines.Add(Self.Name + ' - ' + pl[x].Name);
Ezt követően végigmegyünk a TForm objektum komponensein, és sorban elvégezzük a fenti műveletet, csak a metódusoknak a komponensek objektumait adjuk át.
for z := 0 to Self.ComponentCount - 1 do begin
  y := GetPropList(Self.Components[z], pl);
  for x := 0 to y - 1 do begin
    if Copy(pl[x].Name, 1, 2) <> 'On' then Continue;
    if GetMethodProp(Self.Components[z], pl[x].Name).Code <> nil then
      Memo1.Lines.Add(Self.Components[z].Name + ' - ' + pl[x].Name);
    ...  
A listában megjelenik, hogy három eseményt a TForm, míg egy eseményt a TMemo komponenshez hoztunk létre.

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