Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi EmbeddedWB für Seattle (https://www.delphipraxis.net/187096-embeddedwb-fuer-seattle.html)

ScharfeMietze 27. Okt 2015 21:25

EmbeddedWB für Seattle
 
mein
EmbeddedWB für Xe7 das bisher wunderbar funktionierte wirft mir nach der Instalation einen Ieframe.dll fehler aus (Zugriffsverletzung). Wenn ich nur versuche in der IDE ein Fenster zu schließen, das den EmbeddedWB browser erhält und schmeißt auch beim speichern fehler. Das erstellt programm selbst lässt sich starten und funktioniert wunschgemäß. Es geht nur um Radstudio selbst.
Auch stürzt beim Beenden Seattle ab. Testweise auch auf einem anderen PC instaliert, gleiches Ergebnis.

Ich hoffe es hat jemand einen EmbeddedWB für Seattle der den fehler nicht produziert.
Gruß
SM

forchersepp 28. Okt 2015 20:09

AW: EmbeddedWB für Seattle
 
leider genau das gleiche problem...

Bambini 29. Okt 2015 09:49

AW: EmbeddedWB für Seattle
 
In Delphi Seattle gab es einen gravierenden Bug fix.
Eine Anleitung für den EmbeddedWB ist dort angegeben:
https://marc.durdin.net/2012/07/unde...-olectrls-pas/

ScharfeMietze 29. Okt 2015 22:21

AW: EmbeddedWB für Seattle
 
THX für den Link!
Ich poste hier die Änderungen.
Ich kann auf den ersten Blick feststellen, das das Absturzchaos endete.
Ausführliche Tests waren noch nicht möglich. Bisher ist alles wie es soll.
Gruß
SM

Delphi-Quellcode:
procedure TEmbeddedWB.SetUserAgentInt;
var
  Control: IOleControl;
begin
  if FUserAgent <> FUserAgentInt then
  begin
    RestoreUserAgentReg;
  if DefaultInterface.QueryInterface(IOleControl, Control) = 0 then
  with (Application as IOleControl) do
    begin
      FUserAgentInt := FUserAgent;
      Control.OnAmbientPropertyChange(DISPID_AMBIENT_USERAGENT);
      //_Release;  gelöscht Seattle fix
    end;
  end;
end;

procedure TCustomEmbeddedWB.SetDesignMode(const Value: Boolean);
var
  Control: IOleControl;
begin
  FDesignMode := Value;
  if DefaultInterface.QueryInterface(IOleControl, Control) = 0 then
    with (Application as IOleControl) do
    begin
      OnAmbientPropertyChange(DISPID_AMBIENT_USERMODE);
      //_Release;  gelöscht Seattle fix
    end;
end;

procedure TCustomEmbeddedWB.SetDownloadOptions(const Value: TDownloadControlOptions);
begin
  FDownloadControlOptions := Value;
  UpdateDownloadControlValues;
  with (Application as IOleControl) do
  begin
    OnAmbientPropertyChange(DISPID_AMBIENT_DLCONTROL);
    //_Release;  gelöscht Seattle fix
  end;
end;

procedure TCustomEmbeddedWB.SetUserInterfaceOptions(const Value: TUserInterfaceOptions);
begin
  FUserInterfaceOptions := Value;
  UpdateUserInterfaceValues;
  with (Application as IOleControl) do
  begin
    OnAmbientPropertyChange(DISPID_AMBIENT_DLCONTROL);
    //_Release;  gelöscht Seattle fix
  end;
end;

function GetBmpFromBrowser(Document: IDispatch; Handle: THandle; Width, Height: Integer; FileName: string): Boolean;
var
  ViewObject: IViewObject;
  sourceDrawRect: TRect;
  ScreenImg: Graphics.TBitmap;
begin
  Result := False;
  if DocumentLoaded(Document) then
  try
    Document.QueryInterface(IViewObject, ViewObject);
    if Assigned(ViewObject) then
    try
      ScreenImg := TBitmap.Create;
      ScreenImg.Height := Height;
      ScreenImg.Width := Width;
      sourceDrawRect := Rect(0, 0, ScreenImg.Width, ScreenImg.Height);
      ViewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, Handle,
        ScreenImg.Canvas.Handle, @sourceDrawRect, nil, nil, 0);
      ScreenImg.SaveToFile(FileName);
      Result := True;
    finally
//      ViewObject._Release; gelöscht Seattle fix
    end;
  except
    Result := False;
  end;
end;

function InvokeCMD(Document: IDispatch; InvokeIE: Boolean; Value1, Value2: Integer; var vaIn, vaOut: OleVariant): HRESULT;
var
  CmdTarget: IOleCommandTarget;
  PtrGUID: PGUID;
begin
 //  New(PtrGUID);
  Result := S_FALSE;
  if InvokeIE then
  begin
    New(PtrGUID);
    PtrGUID^ := CLSID_WebBrowser;
  end
  else
    PtrGuid := PGUID(nil);
  if DocumentLoaded(Document) then
  try
    Document.QueryInterface(IOleCommandTarget, CmdTarget);
    if CmdTarget <> nil then
    Result := CmdTarget.Exec(PtrGuid, Value1, Value2, vaIn, vaOut); // hinzugefügt Seattle fix
//    try
//      Result := CmdTarget.Exec(PtrGuid, Value1, Value2, vaIn, vaOut);
//    finally
//      CmdTarget._Release;
//    end;
  except
  end;
  Dispose(PtrGUID);
end;

Bernhard Geyer 29. Okt 2015 22:43

AW: EmbeddedWB für Seattle
 
Zitat:

Zitat von Bambini (Beitrag 1320090)
In Delphi Seattle gab es einen gravierenden Bug fix.
Eine Anleitung für den EmbeddedWB ist dort angegeben:
https://marc.durdin.net/2012/07/unde...-olectrls-pas/

Ich glaub ich muss da auch mal ein paar Codezeilen für Seatle "Aus-$IFDEFEN" ...


Meine Vermutung war hier das eine IE-interne Zirkuläre Referenz aufgebaut würde.
Aber wenn der Fix so einfach ist kann man den evtl. gleich in den VCL-Units (hab eh ein D6-Fix-Pfad mit allen gefixten Units) einbauen und die Workaround komplett ausbauen.
Mal schauen was besser "aussieht" ...

cacofony 17. Feb 2016 04:45

AW: EmbeddedWB für Seattle
 
An updated repository with these changes plus an IDE crash fix.
https://github.com/littleearth/Delphi-EmbeddedWB


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz