Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Вниз

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


Сергей Чурсин   (2002-04-08 11:10) [0]

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



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

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



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

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



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

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



Сергей Чурсин   (2002-04-08 12:22) [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...



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

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







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

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



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

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

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

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




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.02 c
1-69849           Drug                  2002-04-08 00:48  2002.04.22  
File not found DsgnIntf.dcu


14-69975          Van                   2002-03-11 11:40  2002.04.22  
как определить- закончена перекачка файла или нет?


1-69918           ymin                  2002-04-09 11:28  2002.04.22  
А как сделать, чтобы Button была выделена и при нажатии Enter


3-69684           Grafichsoft           2002-03-29 14:29  2002.04.22  
Как получить доступ к базам .tps программы отчетсности в ПФР?


1-69915           inko                  2002-04-09 17:55  2002.04.22  
Backup файла.