Обратни повиквания

функция EnumWindowsProc (Hw: HWnd; LP: lParam): булева; stdcall; EnumWindows () използване функция пример е даден в проекта за повикване Back.dpr, код на който е показан в Пример 6.9.

Обявата 6.9. MainForm.pas - Пример обаждане

Windows, съобщения, SysUtils, Уроци, графики, контроли,

Форми, диалози, StdCtrls, ComCtrls;

WindowName, // име на прозорец

WindowClass: String; // име на класа на прозореца

TMainForm = клас (TForm) lbWinInfo: TListBox; btnGetWinInfo: TButton; hdWinInfo: THeaderControl;

процедура btnGetWinInfoClick (Sender: TObject);

процедура FormDestroy (Sender: TObject);

процедура lbWinInfoDrawItem (Контрол: TWinControl;

Индекс: Integer; Rect: TRect; Състояние: TOwnerDrawState);

THeaderControl; Секция: THeaderSection);

функция EnumWindowsProc (Hw: HWnd;

AMainForm: TMainForm): булева; stdcall;

регистрира активните прозорци в системата.>

WinName, CName: масив [0..144] на знак;

недовършени системния регистър на Windows.>

Резултат: = True; GetWindowText (Hw, WinName, 144); // Получаване на текста на текущия прозорец

GetClassName (Hw, CName, 144); // Получаване на името на класа на прозореца

изпълнен с ценности на прозорци и назовавам имена прозорец клас. след това

този обект се добавя към дългия списък с обекти списък ListBox1.

По-късно тези стойности са показани в списъка кутия.>

с WindowInfo направя започне

процедура TMainForm.btnGetWinInfoClick (Sender: TObject);

Той призова за всеки прозорец.>

процедура TMainForm.FormDestroy (Sender: TObject);

защото: = 0 до lbWinInfo.Items.Count - 1 направи

процедура TMainForm.lbWinInfoDrawItem (Контрол: TWinControl;

Индекс: Integer; Rect: TRect; Състояние: TOwnerDrawState);

Индексът под номера. изходна позиция на всеки ред се определят

с TWindowInfo (lbWinInfo.Items.Objects [индекс]) се започне

Дължина (WindowName), Rect, dt_Left или dt_VCenter);

HeaderControl1 да се определи изходната позиция на следващия

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

Дължина (WindowClass), Rect, dt_Left или dt_VCenter);

процедура TMainForm.hdWinInfoSectionResize (HeaderControl: THeaderControl; Секция: THeaderSection);

lbWinInfo.Invalidate; // пречертаване ListBox1.

В тази функция кандидатстване EnumWindows () се използва за получаване на имената на всички прозорци на най-високо ниво, както и имената на техните класове, а след това се поставя в нестандартна списък с равенство на обекти в основната форма. Основната форма използва този нестандартен списък равенство за показване на името на прозорец и името на класа на прозореца и отделни графи. Но преди да се разбере как да създавате собствени списъци с колоните, обърнете внимание на методите за използване на функцията за обратно повикване.

Използването на обаждане

Обявата 6.9 показва процедурата по дефиниция EnumWindowsProc (), в която първият параметър е дръжката на прозореца. Вторият параметър AUC свързване на данни, което позволява да се предава всяка стойност, размерът на което е еквивалентно на размера на типа число данни, определен от потребителя.

Спомнете си, че в събитието манипулатор OnDestroy основна форма трябва да бъде освободен от всички инстанции TWindowInfo клас.

Вие стартирате приложението, и кликнете върху бутона във формата, можете да видите на пода

chennuyu от всяка информация прозорец предоставя под формата на списък.

Показани персонализиран списък

Имена на прозорци и имената на класовете на всички прозорци на най-високо ниво са показани в отделна графа в обекта на име lbWinInfo. Това е - пример за TListBox, където Style Имотът е разположен до lbOwnerDraw. Ако изберете този стил TListBox.OnDrawItem събитие се генерира, когато компонент в TListBox Req Димо покаже следващия елемент на данните. Цялата отговорност за картографските данни се възлага на програмист, който му позволява да изберете начина на подаване.