Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2008.12.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
15-1223422467
Real
2008-10-08 03:34
2008.12.14
TEmbeddedWB - ошибка установки


2-1225912955
juri79
2008-11-05 22:22
2008.12.14
Вылетает с ошибкой


2-1226072058
jonin
2008-11-07 18:34
2008.12.14
быки и коровы


15-1223446300
Дуб
2008-10-08 10:11
2008.12.14
IE 7 Apach и далее


15-1223541443
oleg_p
2008-10-09 12:37
2008.12.14
Помогите. Может кто с таким сталкивался.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский