Extern. Anwendung in Panel integrieren // SetParent

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Real
Beiträge: 5
Registriert: Mo 7. Dez 2009, 18:50

Extern. Anwendung in Panel integrieren // SetParent

Beitrag von Real »

Hallo,
ich hänge wieder an einem Problem fest und beiße mir die Zähne dran aus.
Ich möchte den Internet Explorer/Firefox in meinem PGM integrieren (dies hat den Sinn da die IPProHtmlPanel einfach noch nicht weit genug entwickelt sind (etwa für Java, Plugins, etc..)

Ich starte also den Internetexplorer mit folgendem Code:

Code: Alles auswählen

var InternetExplorerHandle : THandle;
begin
 
    AProcess := TProcess.Create(nil);
    AProcess.CommandLine := 'iexplore.exe';
    //AProcess.Options := AProcess.Options + [poWaitOnExit];
    AProcess.Execute;
    InternetExplorerHandle := AProcess.ProcessHandle;
    AProcess.Free;
Wenn ich bis hier keinen Fehler gemacht habe startet der Explorer nun,
ich möchte diesen jetzt auf ein Panel legen..
Soweit wie ich auch suche komme ich immer nur auf SetParent('InternetExplorerHandle","PanelHandle")
SetParent bekommt unter Lazarus aber nur eine Funktion?!
Wie bekomme ich die Anwendung auf mein Panel?

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: Extern. Anwendung in Panel integrieren // SetParent

Beitrag von creed steiger »

Leicht OT
Du kannst dir vielleicht mal die zwei Sachen ansehen:

http://wiki.lazarus.freepascal.org/GeckoPort" onclick="window.open(this.href);return false;
http://wiki.lazarus.freepascal.org/THtmlPort" onclick="window.open(this.href);return false;

Real
Beiträge: 5
Registriert: Mo 7. Dez 2009, 18:50

Re: Extern. Anwendung in Panel integrieren // SetParent

Beitrag von Real »

Folgendes Problem:

Wenn ich Lazarus neu kompiliere (für die Installation von HTMLPort),
erhalte ich folgenden Fehler:

Code: Alles auswählen

Kann die Datei "" nicht finden
Im Nachrichtenfenster erscheint folgendes:
Error: Unable to open file "ide"

Was ist zu tuhen?

ulhau
Beiträge: 65
Registriert: Sa 27. Okt 2007, 13:27
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Seebergen

Re: Extern. Anwendung in Panel integrieren // SetParent

Beitrag von ulhau »

Hallo Real!

Ein Tip im http://www.swissdelphicenter.ch/de/ sucht das jeweilige Fensterhandle http://www.swissdelphicenter.ch/de/showcode.php?id=327 mit der Function FindWindowByTitle.

Das könnte dann etwa so aussehen:

Code: Alles auswählen

procedure TForm1.Button3Click(Sender: TObject);
 
function FindWindowByTitle(WindowTitle: string): Hwnd;
var
  NextHandle: Hwnd;
  NextTitle: array[0..260] of char;
begin
   // Get the first window
   NextHandle := GetWindow(Application.Mainform.Handle, GW_HWNDFIRST);
   while NextHandle > 0 do
   begin
     // retrieve its text
     GetWindowText(NextHandle, NextTitle, 255);
     if Pos(WindowTitle, StrPas(NextTitle)) <> 0 then
     begin
       Result := NextHandle;
       Exit;
     end
     else
     // Get the next window
     NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
   end;
   Result := 0;
end;
 
begin
  aWnd := FindWindowByTitle('Mozilla Firefox');
  if aWnd <> 0 then
    begin
      Windows.SetParent(awnd,Panel2.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,Panel1.Width,Panel1.Height);
      SetWindowPlacement(awnd,@WPM);
    end;
end;
Mit SetWindowPlacement können noch einige Einstellungen gesetzt werden. Wichtig ist, das der Fenstertitel stimmt. Ein leerer Firefox hat den Fenstertitel Mozilla Firefox und ist somit vorhersehbar. Es ist aber eben Windowsspezifisch.

Tschüssss!

Antworten