Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi AcroPdf rechtsklick verhindern (https://www.delphipraxis.net/163947-acropdf-rechtsklick-verhindern.html)

himitsu 25. Okt 2011 16:53

AW: AcroPdf rechtsklick verhindern
 
Kennst du die Kontextmenütaste?
Wozu die Maus verschwenden, wenn man eine Tastatur hat. :roll:

ASM 25. Okt 2011 17:13

AW: AcroPdf rechtsklick verhindern
 
Wenn es nur darum geht, den Rechtsklick auf die AcroPDF im eigenen Programm zu verhindern, dann geht das doch (ohne das höchst zweifelhaft über einen globalen Mousehook erzwingen zu wollen) mit Hilfe eines tranparenten Panels, welches deckungsgleich über das AcroPDF gelegt ist und die Mausklicks abfängt. So etwas hat doch bereits himitsu vorgeschlagen.

Es gibt mehrere Komponenten transparenter Panels, mit denen das funktioniert, und zwar problemlos auch hinsichtlich von Grafiken in der PDF. Eine solche Komponente ist z.B. als Unit TransparentPanel veröffentlicht als eine der Antworten bei http://www.experts-exchange.com/Prog..._20950505.html.
Eine andere (Unit TransPanel.pas von Mik Tran) stammt noch aus der Steinzeit von Delphi (1998), arbeitet jedoch immer noch fehlerfrei mindestens unter Delphi 7, und sie ist mit Sicherheit irgendwo im Netz noch zu finden (notfalls im Webarchiv).

Einziger Nachteil ist, dass dann naturlich auch der Linksklick auf die AcroPDF nicht mehr funktioniert. Aber die davon abhängigen Aktionen sind leicht zu erreichen, indem man - wie z.B. für das Zoomen - auf der eigenen Form entsprechende Buttons installiert, die genau diese Aktionen mit Hilfe des Zugriffs auf die entsprechenden Funktionen der AcroPDF auslösen, also z.B. für das Zoomen:
Code:
 AcroPDF1.setZoom(percent: Single);
Und für das Blättern der PDF hält man einfach den Scrollbalken der AcroPDF frei vom TransparentPanel:
Code:
procedure TForm1.FormCreate(Sender: TObject);
var
  ScrollbarWidth: Integer;
begin
 ScrollbarWidth := GetSystemMetrics(SM_CXVSCROLL);
 with TransparentPanel1 do
  begin
    left := AcroPDF1.left;
    top := AcroPDF1.top;
    height := AcroPDF1.height;
    width := AcroPDF1.width - ScrollbarWidth;
  end;
end;

froschprinz 26. Okt 2011 16:59

AW: AcroPdf rechtsklick verhindern
 
Mein Programm ist auf TouchPanel installiert. Da hat mann keine Tastatur und kommt somit auch nicht an das Kontextmenü.

Der Tip mit dem transparenten Panel ist ganz gut, hat jedoch einen Nachteil: Eine AcroPDF lässt sich bequem mit dem Finger scrollen (ohne Scrollbalken). Einfach den Touchscreen berühren und Finger nach oben oder unten bewegen. Das geht dann leider auch nicht mehr.
Ich komme leider nicht an diese Unit heran, da ich nicht Mitglied von www.experts-exchange.com bin. Kann mir jemand diese Unit schicken?

Übrigens, kann mann überhaupt ein Panel über eine AcroPDF legen? Bei mir bleibt immer der AcroPDF im Vordergrund?

Warum habt ihr so eine Abneigung gegen einen Hook. Das würde ich gerne verstehen????

Bummi 26. Okt 2011 17:15

AW: AcroPdf rechtsklick verhindern
 
ich komme auch nicht dran, aber der Inhalt dürfte weitestgehend diesem Konstrukt entsprechen:
ich habe es mal mit TWebbrowser getestet, da ich den Acrobat derzeit nicht installiert habe, Du kannst es transparent abdecken, in diesem Fall funktioniert das transparente Panel sogar brauchbar, für den tagtägliche Einsatz ist es jedoch ungeeignet da es beim stapeln mit anderen VCL Komponenten zu Darstellungsfehlern kommt.

Delphi-Quellcode:
  TPanel=Class(ExtCtrls.TPanel)
    Procedure CreateParams( Var params: TCreateParams ); override;
    Procedure WMEraseBkGnd( Var msg: TWMEraseBkGnd );message WM_ERASEBKGND;
  End;


{ TPanel }

procedure TPanel.CreateParams(var params: TCreateParams);
begin
  inherited;
inherited CreateParams( params );
params.ExStyle := params.ExStyle or WS_EX_TRANSPARENT;
end;

procedure TPanel.WMEraseBkGnd(var msg: TWMEraseBkGnd);
begin
SetBkMode( msg.DC, TRANSPARENT );
msg.result := 1;
end;

ASM 27. Okt 2011 14:16

AW: AcroPdf rechtsklick verhindern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hatte nicht bedacht, dass auf die von mir genannte Unit TransparentPanel bei experts-exchange nicht frei zugegriffen werden kann. An sich ist der Code dieser Unit aber - bis auf das grundsätzliche Copyright - keinen anderen Restriktionen unterworfen worden. Trotzdem möchte ich ihn ungern hier öffentlich posten.

Stattdessen, falls trotz Bummis Beitrag noch Interesse besteht: Anbei mit Hilfe der ebenfalls erwähnten Komponente TTranspanel von Mik Tran (1998!) mein einfaches Beispiel zur Benutzung von AcroPDF gemäß meiner oben geposteten Beschreibung. Das ZIP-Archiv enthält Quellcode und kompiliertes Programm (kompiliert mit D7 bei 1280x1024 Auflösung, 96 dpi).

froschprinz 27. Okt 2011 20:04

AW: AcroPdf rechtsklick verhindern
 
Vielen Dank für Eure Anrworten Brummi und ASM.
Interessante Komponente die TransPanel. Habe es mal ausprobiert mit meiner Anwendung. Scheint zu funktionieren. Was mich etwas stutzig macht ist dass die ViewPDF.exe von ASM bei mir nicht läuft (unbekannter Fehler).
Auch deine ViewPDF.dpr bekomme ich nicht wirklich zum laufen, da mir z.B. die Komponente TrkBar fehlt.
Sind irgendwelche Probleme mit der TransPanel-Komponente bekannt?
Falls es Euch interessiert, woran ich arbeite: www.cabito.net

ASM 27. Okt 2011 23:06

AW: AcroPdf rechtsklick verhindern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Auch die Komponente TrkBar ist schon uralt (Freeware von Ray Konopka), aber funktioniert ebenso wie die Transpanel unter Delphi 7 immer noch problemlos. Ich reiche TrkBar hier als Anhang nach.

@froschprinz: Warum das kompilierte Programm bei Dir nicht läuft, ist mir rätselhaft. Ich habe es zwar wie alle meine Programme routinemäßig gegen Hacking gesichert und mit UPX gepackt, aber habe bisher damit noch nie Probleme bekommen, und alle laufen unter WinXP und Win7 auf mehreren Rechnern.

Mit Hilfe der Komponenten Transpanel und Trkbar sollte es Dir aber gelingen, mein Beispielprojekt auf Deinem Rechner neu zu kompilieren.

froschprinz 30. Okt 2011 07:54

AW: AcroPdf rechtsklick verhindern
 
Leider habe ich auch mit dem TrkBar deine ViewPDF nicht zum Laufen bekommen. Beim Öffnen der ViewPDF.dpr bringt Delphi erst dass die ViewPDF.res nicht gefunden wurde und dann Fehler beim Erzeugen von Formular :Unbekannter Fehler.
Kann es sein, dass die TrkBar Komponente nicht mit Windows7 zusammenarbeitet? Seit ich diese Komponente eingefügt habe, schließt Delphi auch manchmal nicht korrekt sondern bringt endlose Schutzverletzungen?

Aber zu meinem eigentlichen Problem (AcroPdf rechtsklick verhindern) bin ich eigentlich schon zufriedengestellt.
Ich habe 2 Optionen:
1. Wenn ich das Scrollen mittels Gestik am Touchscreen aufrechterhalten will, nehme ich den Hook (es sei den mir sagt jemand, warum ich das nicht machen sollte)
2. Wenn ich 1 nicht benötige, leistet der TransPanel gute Dienste.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 Uhr.
Seite 3 von 3     123   

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