Главная страница
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.01 c
2-1225878144
demon
2008-11-05 12:42
2008.12.14
Как убрать заголовок формы?


15-1223466254
KSergey
2008-10-08 15:44
2008.12.14
Расскажите мне про Windows-домен


2-1225959856
Hmelmoi
2008-11-06 11:24
2008.12.14
Помогите решить задачу


2-1225983644
barbaroska
2008-11-06 18:00
2008.12.14
Помогите с алгоритмом


15-1223345401
Slider007
2008-10-07 06:10
2008.12.14
С днем рождения ! 7 октября 2008 вторник