Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   TWebBrowser-Control und Einstellmöglichkeiten (https://www.delphipraxis.net/188580-twebbrowser-control-und-einstellmoeglichkeiten.html)

Bernhard Geyer 17. Mär 2016 11:35

TWebBrowser-Control und Einstellmöglichkeiten
 
Ich habe hier das Problem das sich der IE über TWebbrowser-Gesteuert etwas anders verhälte als der "normale" IE.
Die Einstellung über den Registry-Key FEATURE_BROWSER_EMULATION ist schon gesetzt so das hier kein Emulierter IE7 mehr läuft.

Ich habe hier zwei Probleme:

1, Eine HTML-Anwendung läuft gut Touch-Bedienbar im normalen IE. Embedded habe ich das Problem das pinch zoom Events nicht so verarbeitet werden wie gedacht. Die Anwendung erlaubt das normalerweise nur in definierten Bereichen. im TWebbrowser zoome ich aber die gesamte Anwendung (Was nicht gewünscht ist).
In der Übergabe der Browser-Features stehen die Properties navigator.mspointer und navigator.pointer auf false. Im "richten" IE auf True

2, Die Anwendung startet zu klein gezoomt auf High-DPI-Devices (hier SurfacePro4 mit 200%/196dpi).
Ich sehe als unterschied das im "richtigen" IE der Browser nur als Info ein Logische DPI-Größe hat (also 3000 Pixel "* 196 dpi" = 1500 Logische Pixel) und im TWebBrowser der IE die richtige DPI-Zahl sieht.

Wie könnte man den TWebbrowser so einstellen das er sich hier auch wie ein "richtiger" IE verhält?

baumina 17. Mär 2016 13:37

AW: TWebBrowser-Control und Einstellmöglichkeiten
 
Keine Ahnung, ob ich deine Frage richtig verstehe, aber auch ich habe mich einige Stunden mit dem Zoomen im TWebBrowser beschäftigt. Ich habe eine Trackbar mit der der Benutzer den Zoom verändern kann. Hier paar Codeauschnitte:

Delphi-Quellcode:
procedure TfDokAnzeige.trackZoomChange(Sender: TObject);
var
  ZoomFac : OLEVariant;

const
  OLECMDID_OPTICAL_ZOOM = 63;

begin
  timer1.Enabled := False;
  lbZoom.Caption := 'Zoom ' + IntToStr(trackZoom.Position) + '%';
  try
    If trackZoom.Position = WebBrowser1.OleObject.Document.ParentWindow.Screen.deviceXDPI * 100 / WebBrowser1.OleObject.Document.ParentWindow.Screen.logicalXDPI then
    begin
      panZoom.Visible := True;
      timer1.Enabled := True;
      Exit;
    end;
  except
  end;

  try
    ZoomFac := trackZoom.Position;
    WebBrowser1.ExecWB(OLECMDID_OPTICAL_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, ZoomFac);
    panZoom.Visible := True;
    timer1.Enabled := True;
  except
    panZoom.Visible := False;
  end;
end;

procedure TfDokAnzeige.WebBrowser1DocumentComplete(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  trackZoomChange(trackZoom);
end;

procedure TfDokAnzeige.Timer1Timer(Sender: TObject);
begin
  try
    trackZoom.Position := WebBrowser1.OleObject.Document.ParentWindow.Screen.deviceXDPI * 100 / WebBrowser1.OleObject.Document.ParentWindow.Screen.logicalXDPI;
  except
  end;
end;

Memnarch 17. Mär 2016 14:02

AW: TWebBrowser-Control und Einstellmöglichkeiten
 
Das ist ein richtiger IE. Eventuell ist nur das HTML-Dokument ungünstig?
Du musst im HTMLHeader spezifizieren, für welchen IE (9, 10, 11,..., Aktuellster) die Seite designt ist. ANsonsten verfällt der in nen Quirkmodus(IE7 iirc). Es kann sein, dass der Standalone IE den Quirkmodus unter bestimmten umständen unterdrückt.

Bernhard Geyer 17. Mär 2016 14:52

AW: TWebBrowser-Control und Einstellmöglichkeiten
 
Zitat:

Zitat von Memnarch (Beitrag 1333177)
Das ist ein richtiger IE. Eventuell ist nur das HTML-Dokument ungünstig?
Du musst im HTMLHeader spezifizieren, für welchen IE (9, 10, 11,..., Aktuellster) die Seite designt ist. ANsonsten verfällt der in nen Quirkmodus(IE7 iirc). Es kann sein, dass der Standalone IE den Quirkmodus unter bestimmten umständen unterdrückt.

Über Registry-Key soll der IE 11 als IE11 laufen.
Und der Doctype wäre in diesem Fall <!DOCTYPE html>

Memnarch 17. Mär 2016 15:00

AW: TWebBrowser-Control und Einstellmöglichkeiten
 
A) Von dem RegistryKey lässt man tunlichst die Finger. Globals rumgehacke ist immer müll.
B) An den anfang des Heads braucht es folgende Metainfos:
Code:
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>
</head>
EDGE bedeutet hierbei "Höchste verfügbare". Wenns konsistent sein muss kann man sich auch eine spezifische version raussuchen.

Optional sind auch folgende nicht verkehrt:
Code:
<meta charset="utf-8"/>

Bernhard Geyer 18. Mär 2016 15:39

AW: TWebBrowser-Control und Einstellmöglichkeiten
 
(Haupt-)PRoblem gelöst.

Der TWebbrowser läuft in einem Legacy-Modus in denen er meint keine Touch-Events zu können er sie aber doch ausführt.
Mit dem Registry-Key

https://msdn.microsoft.com/en-us/lib...x#legacy_input

kann man das für die eigene Anwendung deaktivieren.

Schwubs verhält sich der IE11 im TWebBrowser wirklich wie ein IE11 und nicht wie eine undefinierbare Mischung aus IE7 und IE11.

romber 29. Mai 2018 12:50

AW: TWebBrowser-Control und Einstellmöglichkeiten
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1333305)
(Haupt-)PRoblem gelöst.

Ist zwar schon etwas länger her.. Konnten Sie aber auch das zweite Problem mit der High DPI lösen?

Stehe gerade vor dem gleichen Problem. Ich muss eine Google Maps Karte im TWebBrowser anzeigen. Im IE wird die Karte und die Steuerungsobjekte richtig skaliert für High DPI, im TWebBrowser gar nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:57 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