Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.02.19;
Скачать: CL | DM;

Вниз

Ув. мастера. Как найти хендлы всех контролов на форме?   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2006.02.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.072 c
2-1138980752
Змей
2006-02-03 18:32
2006.02.19
движение Image


2-1139106124
quadronik
2006-02-05 05:22
2006.02.19
следим за значением DateTimePicker


15-1138632640
Arazel
2006-01-30 17:50
2006.02.19
Где можно скачать Примеры базы данных на DELPHI


2-1139060963
BaBayka007
2006-02-04 16:49
2006.02.19
Что-то я совсекм затупил......подскажите плиз....


2-1138685327
Аноним
2006-01-31 08:28
2006.02.19
удалить запись из ListBox