Вниз
Скачать: CL | DM;

Родительское окно   Найти похожие ветки 

← →
kblc ©   (2008-02-18 11:22) [0]

Уважаемые мастера, помогите мне пожалуйста решить проблему:
Пишу компонент, наследник от TScrollBox"a ... и для определённой задачи мне нужен хэндл главной формы получить...
делаю это так:


 function CanUp(const Style: Integer): BOOLEAN;
 begin
   Result :=
           (Style or WS_CHILD = Style) or
           (Style or WS_CLIPCHILDREN = Style);
 end;

 function GetTopParent(const AHandle: Cardinal): Cardinal;
 var
   FCanUp: BOOLEAN;
   buff : PChar;
 begin
   Result := AHandle;
   buff := AllocMem(MAX_PATH);
   repeat
     GetClassName (Result, buff, MAX_PATH);
     //RealGetWindowClass(Result,buff,MAX_PATH);
     FCanUp := CanUp(GetWindowLong(Result, GWL_STYLE));
     if FCanUp then
     begin
       //Result := GetParent(Result);
       Result := GetWindowLong(Result,GWL_HWNDPARENT);
     end;
   until (Result = 0) or (not FCanUp);
   FreeMem(buff,MAX_PATH);
 end;


где параметр AHandle - хэндл текущего скролл бокса.
Но возникла проблема.
На главной фаорме PageControl, у него TabSheet1, на TabSheet"e расположен Frame... а у фрейма есть мой ScrollBox.

С помощью этой функции у меня получается прыжки такие:
1) TFrame
2) TApplication
и всё... почему-то функция пропускает и TabSheet и PageControl и TForm .... почему?


← →
Игорь Шевченко ©   (2008-02-18 12:17) [1]


>  и для определённой задачи мне нужен хэндл главной формы
> получить...


GetParentForm,
ValidParentForm


← →
kblc ©   (2008-02-18 12:26) [2]

Я бы сам так сделал с удовольствием. Но так нельзя сделать в моём случае!!!
Реализовать нужно это при помощи API. Так как компонент будет использоваться в определённых условиях (не обязательно тех, о которых я писал).

Например: та же ситуация, только вместо фрейма форма, которая лежит на tabsheet. Но эта не просто форма, а форма из DLL, для которой указан лишь ParentWindow, и поймать больше ничего нельзя.


← →
kblc ©   (2008-02-18 17:20) [3]

Уважаемые мастера, обратите внимание, что мне нужно это сделать именно с помощью WinAPI. Другие способы реализации никак не подходят.

Заранее спасибо!


← →
Игорь Шевченко ©   (2008-02-19 10:01) [4]

kblc ©   (18.02.08 17:20) [3]

Посмотри как это сделано в VCL, скопируй.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.008 c
15-1223909818
Валера
2008-10-13 18:56
2008.12.14
Реестр.


2-1225664989
Wind
2008-11-03 01:29
2008.12.14
Загрузчики Flash Video


4-1202161064
GanibalLector
2008-02-05 00:37
2008.12.14
RAS, TAPI или WinApi


15-1223818673
Eraser
2008-10-12 17:37
2008.12.14
Как обойти баг в Delphi XML Documentation?


3-1210699405
zerohold
2008-05-13 21:23
2008.12.14
Временные файлы при выполнении SQL запроса




   Наверх