Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Родительское окно [WinXP]


kblc ©   (2008-02-18 11:22:00) 

Уважаемые мастера, помогите мне пожалуйста решить проблему:
Пишу компонент, наследник от 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-19 10:01:00) [1]

kblc ©   (18.02.08 17:20) [3]

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


kblc   (2008-02-18 17:20:00) [2]

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

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


kblc   (2008-02-18 12:26:00) [3]

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

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


Игорь Шевченко   (2008-02-18 12:17:00) [4]


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


GetParentForm,
ValidParentForm


Наверх

Титульная страница Поиск, карта сайта Написать письмо