Форум: "WinAPI";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];
ВнизУв. мастера. Как найти хендлы всех контролов на форме? Найти похожие ветки
← →
Avers_SM (2005-12-01 14:44) [0]Ув. мастера. Как найти хендлы всех контролов на форме? Пытаюсь искать FindWindowEx, но нахожу только то, что непосредственно принадлежит главной форме. А что лежит на панелях (TPanel) и иже с ними - не получается.
procedure GetFormControls(hApp: HWND);
var
i: Word;
h: HWND;
Nm:Array[0..255] of Char;
Cs: Array[0..255] of Char;
Begin
if not IsWindow(hApp) then Exit;
for i := 0 to 10 do
begin
h := FindWindowEx(hApp, h, nil, nil);
if IsWindow(h) then
begin
GetWindowText(hEdit,Nm,255);
GetClassName(hEdit,Cs,255);
Form1.Memo1.Lines.Add(String(Nm)+"/"+String(Cs));
end;
end;
end;
← →
ANB © (2005-12-01 14:53) [1]EnumChildWindows
← →
AversFm (2005-12-01 15:17) [2]А можно пример ее использования? А не могу разобраться LPARAM.
BOOL CALLBACK EnumChildProc(
HWND hwnd, // handle to child window
LPARAM lParam // application-defined value
);
← →
Leonid Troyanovsky © (2005-12-01 15:32) [3]
> AversFm (01.12.05 15:17) [2]
> А можно пример ее использования? А не могу разобраться LPARAM.
В LParam можно передать что-то полезное, например, список
для его заполнения.
Кста, функция для поиска всех контролов, как правило, рекурсивна.
Например, так с помощью FindWindowEx можно перечислить все Parent
для некоторого (вин)контрола.
procedure EnumParent(var h : HWND; Lines: TStrings);
var
buffer: array [0..255] of char;
s : string;
begin
if h = 0 then
Exit;
GetClassName(h, Buffer, SizeOf(buffer));
s := buffer;
GetWindowText(h, buffer, SizeOf(buffer));
Lines.Insert(0, Format(""%s", "%s"", [s, buffer]));
s:= "";
h := GetParent(h);
EnumParent(h, Lines);
end;
--
Regards, LVT.
← →
AversFm (2005-12-01 16:07) [4]Спасибо, буду разбираться дальше.
← →
ANB © (2005-12-01 17:43) [5]
> Leonid Troyanovsky © (01.12.05 15:32) [3]
EnumChildWindows - сама организует рекурсию. Очень удобно.
← →
Leonid Troyanovsky © (2005-12-01 18:16) [6]
> ANB © (01.12.05 17:43) [5]
> EnumChildWindows - сама организует рекурсию. Очень удобно.
Трудно сказать, насколько это удобней, бо нужно следить за изменением
Parent, т.к. порядок обхода контролов не гарантирован.
Но, с другой стороны, ECW предпочтительней FindWindowEx/GetWindow
бо справляется с изменением z-order во время перечисления.
--
Regards, LVT.
← →
psa247 © (2005-12-03 10:42) [7]А как получить хендлы наследников от TGraficControl (speedbutton"ы) ?
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.046 c