Stò provando a divertirmi nel cercare di fare girare un programma esterno, tipo KompoZer in un pannello all'interno di una Form.
Sono in parte riuscito ma funziona male perchè se il programma esterno non è attivo non viene inserito nel pannello questo è il codice
procedure TForm1.Button5Click(Sender: TObject);
Var lsprocess : string;
lsCommandLine : string;
HFindWin : THandle;
Begin
lscommandline := '';
lsprocess := 'C:\Program Files (x86)\KompoZer\kompozer.exe';
shellExecute(Form1.Handle,'open',pchar(lsprocess),pchar(lscommandline),nil,sw_Hide);
HFindWin:=FindWindow(nil,'senza titolo - KompoZer');
Attach2Control(HFindWin, Panel2);
end;
procedure Attach2Control(aWnd: Hwnd; aControl: TWinControl);
var
WPM: WINDOWPLACEMENT;
begin
Windows.SetParent(aWnd, aControl.Handle);
SetWindowLong(aWnd, GWL_STYLE, GetWindowLong(aWnd, GWL_STYLE) and not WS_CAPTION);
WPM.Length := SizeOf(WPM);
GetWindowPlacement(aWnd, @WPM);
WPM.ShowCmd := SW_ShowMaximized;
WPM.rcNormalPosition := Classes.Rect(0, 0, aControl.Width, aControl.Height);
SetWindowPlacement(aWnd, @WPM);
end;
premendo il pulsante la prima volta lancia il programma, la seconda volta lancia il programma e lo inserisce nel pannello.
Vorrei inserire subito la prima volta il programma nel pannello, è possibile?