visszahívások

funkció EnumWindowsProc (Hw: HWnd; lp: lParam): Boole; stdcall; EnumWindows () függvény használatára a példát a tervezet hívás- Back.dpr, kódja, amely látható példa 6.9.

Listing 6.9. MainForm.pas - példa visszahívási

Ablakok, üzenetek, SysUtils, osztályok, grafika, vezérlők,

Forms, Dialogs, StdCtrls, ComCtrls;

WindowName, // ablak neve

WindowClass: String; // osztály neve az ablak

Megadott = osztály (TForm) lbWinInfo: TListBox; btnGetWinInfo: TButton; hdWinInfo: THeaderControl;

eljárás btnGetWinInfoClick (Sender: TObject);

eljárás FormDestroy (Sender: TObject);

eljárás lbWinInfoDrawItem (Kontroll: TWinControl;

Index: Integer; Téglalap: TRect; Állam: TOwnerDrawState);

THeaderControl; Szakasz: THeaderSection);

funkció EnumWindowsProc (Hw: HWnd;

AMainForm: Megadott): Boole; stdcall;

regisztrálja az aktív ablakok a rendszerben.>

WinName, CName: array [0..144] char;

befejezetlen Windows rendszerleíró.>

Eredmény: = True; GetWindowText (Hw, WinName, 144); // A szöveg az aktuális ablak

GetClassName (Hw, CName, 144); // Az ablak nevét osztály

tele értékei ablakok és osztály neveket. majd

ez az objektum ki a tömb objektumok ListBox1 lista.

Később ezek az értékek jelennek meg a listában.>

A WindowInfo do kezdődik

eljárás TMainForm.btnGetWinInfoClick (Sender: TObject);

Azt kérte, hogy minden ablak.>

eljárás TMainForm.FormDestroy (Sender: TObject);

i: = 0 lbWinInfo.Items.Count - 1 do

eljárás TMainForm.lbWinInfoDrawItem (Kontroll: TWinControl;

Index: Integer; Téglalap: TRect; Állam: TOwnerDrawState);

Index szám alatt. kimeneti pozíciójának minden sorban meghatározzuk

A TWindowInfo (lbWinInfo.Items.Objects [Index]) nem kezdődik

Hossz (WindowName), téglalap, dt_Left vagy dt_VCenter);

HeaderControl1 hogy meghatározza a kimeneti helyzet a következő

Rect.Left: = Rect.Left + hdWinInfo.Sections [0] .Width;

Hossz (WindowClass), téglalap, dt_Left vagy dt_VCenter);

eljárás TMainForm.hdWinInfoSectionResize (HeaderControl: THeaderControl; szakasz: THeaderSection);

lbWinInfo.Invalidate; // Újrarajzolás a ListBox1.

Ebben az alkalmazásban EnumWindows () függvényt, így a nevét az összes felső szintű ablakok, és a nevét az osztályokat, majd helyezzük egy nem szabványos felhívni objektumok listáját a fő formája. A fő formája használja ezt a nem szabványos felhívni lista ablak megjelenítéséhez nevét és az ablak osztály külön oszlopban. De mielőtt megérteni, hogyan hozhat létre egyéni listákat az oszlopok, úgy a módszerek használatával a visszahívás funkciót.

használata visszahívás

Listing 6.9 definícióját mutatja EnumWindowsProc () eljárás, amelyben az első paraméter az ablak fogantyúja. A második paraméter AUC adatok összekapcsolásával, amely lehetővé teszi, hogy továbbítja bármilyen értéket, amelynek mérete megegyezik a mérete az egész adattípus a felhasználó által meghatározott.

Emlékezzünk, hogy az eseménykezelő OnDestroy fő formája kell szabadítani minden esetben TWindowInfo osztályban.

Az alkalmazás futtatása, és a gombra kattintva formájában láthatjuk a padlón

chennuyu minden ablak információkat a lista formájában.

Bemutatás egyedi listáját

Nevei ablakok és az osztály nevét minden felső szintű ablak jelenik meg külön oszlopban az objektum neve lbWinInfo. Ez - egy példánya TListBox, ahol a stílus tulajdonság értéke lbOwnerDraw. Ha ezt a stílust TListBox.OnDrawItem esemény akkor generálódik, ha egy komponens TListBox req Dimo ​​megjeleníti a következő adatok elem. A teljes felelősség a térképészeti adatokat rendelve a programozó, amely lehetővé teszi számára, hogy kiválassza a módot.