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

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

Возможно ли вставить чужое окно (по HWND) в форму ?


Сергей Чурсин ©   (2002-04-08 11:10:00) 

Возможно ли вставить чужое окно (по HWND) в форму ?
То есть аналогично Form2.Parent:=Form1.Panel1, только вместо
Form2 - чужое окно (через какие-нибудь апимшные функции заменить радителя у него, что-ли) ?


Fantasist   (2002-04-08 20:00:00) [1]

Понятно, что можно. В winAPI хоть на десктоп можешь повесить контрол.

> Вижу уже, что calc.exe остается после закрытия формы-parenta...
> Как-бы с этим расправиться?

Попробуй, прежде чем закрыть свою форму, послать WM_DESTROY или WM_CLOSE окну калькулятора. Дело в том, что он выполняется в отдельном процессе, а главная форма, кажись, глушит только свои контролы через функции VCL.


Сергей Чурсин   (2002-04-08 12:32:00) [2]

Вижу уже, что calc.exe остается после закрытия формы-parenta...
Как-бы с этим расправиться?


Сергей Чурсин   (2002-04-08 12:23:00) [3]

2REA
А почему неверный ? Грозит чем-либо ?






Сергей Чурсин   (2002-04-08 12:22:00) [4]

Можно...

procedure TForm1.Button1Click(Sender: TObject);
var H : HWND;
begin
Shellexecute(Form1.Panel1.Handle,"open","calc.exe","","",SW_SHOW);
H := FindWindow (nil, "Calculator");
If H <> 0 then begin
Windows.SetParent(H, Form1.Panel1.Handle);
if (Win32MajorVersion >= 5) and (Win32Platform = VER_PLATFORM_WIN32_NT) then
Perform(WM_CHANGEUISTATE, MakeWParam(UIS_INITIALIZE, UISF_HIDEACCEL or UISF_HIDEFOCUS), 0);
end;
end;

Только как-бы еще извернуться, чтобы FindWindow срабатывало гарантировано после ShellExecute - а то ShellExecute не успевает.
И все работает на второй click...


REA   (2002-04-08 12:18:00) [5]

Имхо это неверный подход. Сделать наверно можно, покопавшись в API, но зачем?


Сергей Чурсин   (2002-04-08 12:05:00) [6]

только Form.Parent:=HWND;
Не, ну так же работать не будет - parent имеет тип TWinControl...
И property HWND у ТWinControl - read only.
Речь скорее о том, что бы заставить апишное окно (с HWND) каким-то образом считать parentom (есть же такое понятие и для API) нашу форму... Вот только как ?


Song   (2002-04-08 11:12:00) [7]

Чисто гепатетически должно, только Form.Parent:=HWND;


Наверх

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