Обратни повиквания
функция 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 Димо покаже следващия елемент на данните. Цялата отговорност за картографските данни се възлага на програмист, който му позволява да изберете начина на подаване.