![]() |
AcroPdf rechtsklick verhindern
Hallo zusammen,
ich habe ein Problem. Ich habe ein Form mit der ActiveX Komponente AcroPDF. Da der Benutzer nichts machen soll auser lesen und scrollen habe ich alle Leisten erfolgreich ausgeblendet. Nur den Rechtsklick kann ich nicht verhindern. Ich habe es bisher mit ApplicationEvents versucht:
Delphi-Quellcode:
Aber es funktioniert so nicht - des Beep wird nicht bei einem Rechtsklick ausgeführt.
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean); begin if (Msg.Message = WM_RBUTTONDOWN) or (Msg.Message = WM_RBUTTONDBLCLK) then begin beep; Handled :=IsChild(AcroPDF1.Handle, Msg.hwnd); end; end; Habt ihr da 'ne Idee???? |
AW: AcroPdf rechtsklick verhindern
eigentlich handelt es sich um eine fremde Anwendung, die bei Dir gedockt dargestellt wird.
Es ist die Frage ob Du an das "Windowproc" der darstellenden Komponente herankommst, oder ob Du Dich relativ in die MouseEvents hooken musst. Hier bin ich aber absolut nicht firm. |
AW: AcroPdf rechtsklick verhindern
Ich denke auch, dass es über einen Moushook gehen könnte. Aber da verstehe ich leider auch nix davon.
Hat jemand den Quellcode für eine Hook dll, die einen Rechtsklick der Mouse verhindert (nicht weiterleitet)? |
AW: AcroPdf rechtsklick verhindern
Wie wäre es, wenn du einfach eine transparente Komponente über das PDF-Dingens legst, alles Mausereignisse abfängst und nur die Gewollten an das PDF-Teil weiterleitest?
Man könnte auch das PDF auf ein Bitmap zeichnen lassen und zeigt Dieses dann an. |
AW: AcroPdf rechtsklick verhindern
Über ein AcroPDF kann mann leider nichts legen - Images und Co treten immer dahinter zurück.
Wie mann eine PDF auf ein Bitmap legt, weis ich nicht. Dann funktioniert das scrollen aber auch nicht mehr. |
AW: AcroPdf rechtsklick verhindern
Zitat:
Wäre toll, wenn du das nochmal genauer erklären könntest. |
AW: AcroPdf rechtsklick verhindern
Also Quelltext für Mousehooks findest Du über Googel zuhauf. Könnte aber sein, das Du einen globalen Mousehook benötigst. Und der geht nur mit einer DLL.
|
AW: AcroPdf rechtsklick verhindern
Wieso denn global? Er braucht es doch nur für seine Anwendung oder?
|
AW: AcroPdf rechtsklick verhindern
Zitat:
Wie schon erwähnt, ist das eine externe Anwendung (man schaue gerne mal in den Taskmanager) welche ihre Form "nur" bei seiner Anwendung eingebettet hat. Die ganze Messagebehandlung dieser Form verbleibt aber dennoch in der anderen Anwendung. |
AW: AcroPdf rechtsklick verhindern
Zitat:
Sieht man auch daran: AcroRd32.dll 24 MB AcroRd32.exe 1,5 MB Jetzt reicht es bei einem Amoklaufenden Acrobat nur noch die Exe abzuschießen und nicht noch nach Arcobat-Exe's im Taskmanager zu suchen :-) |
AW: AcroPdf rechtsklick verhindern
Zitat:
|
AW: AcroPdf rechtsklick verhindern
Das kommt drauf an, z.B. das Acrobat-Plugin im FF scheint dennoch die EXE zu sein.
Eine PDF dort aufgemacht, sind sofort zwei AcroRd32.exe zu finden. PS: Wenn die DLL ein Out-Of-Process-Server wäre, dann würde die Aussage dennoch stimmen. :angle2: |
AW: AcroPdf rechtsklick verhindern
Zitat:
Bei Adobe zerschießt ein Versionsupdate ohne vorherige Deinstallation regelmäßig die Installation. |
AW: AcroPdf rechtsklick verhindern
Zitat:
|
AW: AcroPdf rechtsklick verhindern
Keine Ahnung. Mein Reader X meint er wäre aktuell. Aber soweit ich mich erinnere, hatte ich hier den X direkt installiert. (vor paar Monaten alles neu draufgemacht)
Wobei der im Browser eh nervt, wenn er sich mal wieder die Mausereignisse (z.B. Scrollen) grabscht, obwohl er eigentlich auf dem inaktiven Tab nur rumgammeln sollte. Zitat:
|
AW: AcroPdf rechtsklick verhindern
@himitsu: Schade, dass du auf meine Frage nicht eingegangen bist.
|
AW: AcroPdf rechtsklick verhindern
Dafür müßte ich wissen, wie man die Beiden einbindet, um den Unterschied zu kennen. :stupid:
Ich seh halt nur öfters, daß einige Programme irgendwie die EXE nutzen. Ich könnte ja mal nachsehn, was bei unserem Programm eingebunden wird (EXE oder DLL) ... daß wie weiß ich noch in etwa, wo das stand. |
AW: AcroPdf rechtsklick verhindern
o.k.
ich habs mit einem Moushook gelöst. Sobald die PDF aufgerufen wird starte ich den Hook und nach dem Schließen beende ich ihn wieder. Funktioniert ganz gut. Dies könnte evt. auch für andere Anwendungen brauchbar sein, wenn ich sicher(und Systhemweit) den Rechtsklick verhindern will. Der Quelltext der Dll ist einfacher als gedacht:
Delphi-Quellcode:
library MouseHook;
uses Windows, Messages; {$J+} const Hook: HHook = 0; {$J-} {$R *.res} function HookProc(nCode: Integer; MsgID: WParam; Data: LParam): LResult; stdcall; begin if (MsgID = WM_RBUTTONDOWN) or (MsgID = WM_RBUTTONUP) then begin //tue nichts end else begin Result := CallNextHookEx(Hook,nCode,MsgID,Data); end; end; procedure HookMouse; stdcall; begin if Hook = 0 then Hook:=SetWindowsHookEx(WH_MOUSE,@HookProc,HInstance,0); end; procedure UnHookMouse; stdcall; begin UnhookWindowsHookEx(Hook); Hook:=0; end; exports HookMouse, UnHookMouse; begin end. |
AW: AcroPdf rechtsklick verhindern
Kann es sein, dass du damit alle rechts Klicks in allen Anwendungen verhinderst? Ich hoffe du sagst das den Benutzern, wenn das der Fall ist. Denn ich glaube, ich würde irre werden, bis ich herausfinde, dass es an deinem Programm liegt. Und dann würdest du von mir eine ziemlich böse E-Mail bekommen. ;)
|
AW: AcroPdf rechtsklick verhindern
Danke für den Hinweis.Das siehst du genau richtig!
Aber das ist ja gerade der Sinn der Sache. Meine Anwendung ist eine, die vom Benutzer nicht verlassen werden kann(darf). Sie läuft auf öffentlichen Terminals. Darum will ich ja den Rechtsklick verhindern, da sonst der böse Benutzer des Kontextmenü aufrufen und blödes Zeug anstellen darf! |
AW: AcroPdf rechtsklick verhindern
Kennst du die Kontextmenütaste?
Wozu die Maus verschwenden, wenn man eine Tastatur hat. :roll: |
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 ![]() 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:
Und für das Blättern der PDF hält man einfach den Scrollbalken der AcroPDF frei vom TransparentPanel:
AcroPDF1.setZoom(percent: Single);
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; |
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 ![]() Ü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???? |
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; |
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). |
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: ![]() |
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. |
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 18:01 Uhr. |
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