Autor Beitrag
mats
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Sa 15.12.18 19:39 
Hallo,

ich möchte gern ein paar pdf-Dateien vom Server holen und in einem Fenster anzeigen lassen:
1. Versuch mit WebBrowser1.Navigate('File'); hat funktioniert, aber, beim zweiten Aufruf derselben Datei wird rechts im Fenster das komplette Acrobat Reader Menü angezeigt. Nicht gut.

2. Versuch mit AcroPDF.src... Das gleiche Problem, beim zweiten Aufruf mit Menü. Und wenn ich den Zoomfaktor einstelle, bekomme ich eine Ausnahme (ScreenShot), ebenso bei AcroPDF1.setShowToolbar(FALSE).

Woran liegt das? Die pdf-Dateien sollen legliglich, ohne Speichermöglichkeit, aber mit einstellbarem Zoom angezeigt werden. Kein editieren oder irgendwas. Kann es was mit dem ActivX zu tun haben?

Eigentlich wäre mir eine Komponente die nichts mit Adobe zu tun hat und auf 'fast' allen Windowsmaschinen läuft am liebsten. Nur weiß ich nicht was für diesen Fall am besten wäre.

Danke im voraus

mats
Einloggen, um Attachments anzusehen!
Tankard
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 168
Erhaltene Danke: 29



BeitragVerfasst: Sa 15.12.18 20:42 
Hallo,

ich nehme immer github.com/ahausladen/PdfiumLib

Gruß
Tankard
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2132
Erhaltene Danke: 391

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: So 16.12.18 00:03 
Guten Abend mats,

laut den pdf_open_parameter von Adobe lässt sich die Leiste mit #toolbar=0 abstellen, daher versuche folgendes:

ausblenden Delphi-Quelltext
1:
WebBrowser1.Navigate('http://www.Page.pdf#toolbar=0');					

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
mats Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: So 16.12.18 17:15 
Hi,

der Tipp mit '#toolbar=0' funktioniert, aber, z.B. Fenster1 (es gibt nur 1) wird aufgerufen mit File1.pdf, alles Ok. Drückt man zwischendurch die ESC-Taste wenn der WebBrowser den Focus hat erscheint wieder das Menü. Geht das abzustellen?

mats

p.s. den Tipp mit github konnte ich noch nicht probieren.
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2132
Erhaltene Danke: 391

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: So 16.12.18 20:05 
Da der TWebBrowser über keine Key-Ereignisse verfügt, könntest du die Tasteneingabe mittels der Nachricht WM_KEYDOWN über die WndProc() Methode des TWebBrowser abfragen und im gegebenen Fall (.WPARAM = VK_ESCAPE), diesem '#0' zuweisen.
Damit sollte die ESC-Taste "ausgehebelt" sein.
Wenn auch das nicht hilft, könnte man noch über einen globalen Keyboard-Hook nachdenken, wo man dasselbe Prinzip anwendet.
Oder man versucht ähnliches mit dem TEmbeddedWB, anstelle von TWebBrowser.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
mats Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Di 18.12.18 18:56 
Hallo,

danke für den Tipp. Könnte ich das nicht auch über OnKeyPress machen? Wenn ESC -> #27 gdrückt dann ins Leere laufen lassen?
Und gibt es da ein Beispiel (theoretischer Aufbau) direkt für Delphi von globalen Keyboard-Hook's? Denn es würde sich bestimmt gut machen, und ich müsste nicht in jeder Form eine Procedure OnKeyPress anlegen.

mats
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2132
Erhaltene Danke: 391

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 18.12.18 20:38 
OnKeyPress ist ein Ereignis, wo WM_KEYDOWN und WM_KEYUP nacheiander gefeuert werden.
Ob du nun OnKeyDown oder OnKeyPress nutzt, macht hierbei keinen Unterschied.

Genau, die gedrückte (ESC-) Taste ins Leere laufen lassen, sprich, der Taste den Zahlenwert "0" zuweisen, bzw. den nullterminierenden String, "#0".

Im verlinkten Beitrag ist ein Beispiel gegeben (wenn auch in C++), indem es recht gut erklärt wird.
Benötigt werden hierfür:
- SetWindowsHookEx() ... Hook aktivieren
- UnHookWindowsHookEx() ... Hook deaktivieren
- KeyboardHookProc() ... Hook für Tastatur ausführen

Da ich nicht weiss, in welcher Unit diese Funktionen bereits gegeben sind, wird es wahrscheinlich darauf hinauslaufen, dass du sie selbstständig deklarieren musst.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)

Für diesen Beitrag haben gedankt: mats
mats Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36



BeitragVerfasst: Mi 19.12.18 12:29 
Hi,

danke nochmals an alle für die Tipps. Da hab ich erst mal genug zu tun.


mats
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2132
Erhaltene Danke: 391

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 28.12.18 17:34 
So könnte es aussehen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
type
  TForm1 = class(TForm)
    procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    FHHook: HHOOK;
  end;

var
  Form1: TForm1;

implementation

function KeyboardProc(code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  result := CallNextHookEx(Form1.FHHook, code, wParam, lParam);
  if wParam = VK_ESCAPE then
    result := HC_NOREMOVE;
end;

procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  UnhookWindowsHookEx(FHHook);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FHHook := SetWindowsHookEx(WH_KEYBOARD, @KeyboardProc, HInstance, GetCurrentThreadId);
end;

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)