Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.14;
Скачать: 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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.014 c
15-1223885552
Zlodey
2008-10-13 12:12
2008.12.14
Помогите с формулировкой


15-1223657194
DillerXX
2008-10-10 20:46
2008.12.14
Предлагаю линчевать


2-1225439961
abhtr
2008-10-31 10:59
2008.12.14
Режим редактирования ячейки DBGrid-a


4-1202232215
Dmitry S
2008-02-05 20:23
2008.12.14
"Прибить" повторный запуск моей проги.


1-1204398745
Igit
2008-03-01 22:12
2008.12.14
Delphi и FLASH