ActiveX und Funktionstasten

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

ActiveX und Funktionstasten

Beitrag von Jan »

Wie ja inzwischen allgemein bekannt ist 8) steuere ich meine Programme über Funktionstasten, die auf Buttons gelegt sind. Also sind bestimmte Funktionen sowohl mit Klick auf den Button als auch über Auslösen der F2-F12-Tasten möglich.

Nun habe ich aber ein Problem: Ich lade als ActiveX den Adobe-Reader mit einer festgelegten Datei. Über mehrere Funktionstasten kann man den Dialog schließen oder die Anzeige der Seiten in dem Adobe Reader ändern (Zoom, 1 oder 2 Seiten, etc.). Aber hier funktioniert all das nur per Klick auf die Buttons. Die Funktionstasten sind deaktiviert. Ich vermute mal, daß daß der Reader die "klaut".

Hat jemand eine Ahnung, wie ich einem ActiveX-Element beibringen kann, das nicht zu tun?

Jan
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: ActiveX und Funktionstasten

Beitrag von AUGE_OHR »

hi,

von welcher Version PDF Reader reden wir ?

ich kann z.Z. das Alaska Demo mit meiner Version 6.x und der CLSID
"{CA8A9780-280D-11CF-A24D-444553540000}" nicht starten weil wohl
diese Kombination (jetzt nicht mehr) passt. Es könnte nach dem Upgrade
auf v8.x und "zurück" passiert sein das deshalb bei mir das Demo gar
nicht mehr mit der v331 funktioniert.
Jan hat geschrieben: Aber hier funktioniert all das nur per Klick auf die Buttons.
em ... äh ... wo/welche Buttons vom "wehm" ?
Jan hat geschrieben: Die Funktionstasten sind deaktiviert. Ich vermute mal, daß daß der Reader die "klaut".

Hat jemand eine Ahnung, wie ich einem ActiveX-Element beibringen kann, das nicht zu tun?
mit den Funktionstasten meisten du sicherlich die in deinen Xbase++
Application ?! ... wie sind die den mit dem aktiveX "verknüpft" ?

Bei den Buttons gehe ich mal von der Adobe "Toolbar" aus die du meinst ?
Wenn ja, dann liegt doch "hinter" jedem von den Buttons eine der 25
Methoden die es gibt (bei v6.x).

Bei dem "Zoom" Button müsste es die Methode :setZoom sein und die
Methode :setShowToolbar könnte dazu dienen die Toolbar ganz
verschwinden zu lassen.

Was es jedoch wohl nicht gibt sind Events wie :keypress oder so, ergo
gehe ich davon aus das er weder welche "sendet" noch "empfangen" kann.

Ich habe es übrigens "aufgegeben" den Reader in ein eigenen XbpDialog
einzuarbeiten den irgendwie sind die v5,v6,v7,v8 wohl unterschiedlich und
ab irgendeiner Version konnte man, so glaube ich, die Toolbar nicht mehr
abschalten.
Also nutze ich nun ganz trivial

Code: Alles auswählen

RunShell( "/C START EXPLORER.EXE DEMO.PDF" ) 
weil das mit jeder Version zurecht kommt und der User die Optik ja dann
auch schon kennt.
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Beitrag von Jan »

Hallo Jimmy,
von welcher Version PDF Reader reden wir ?
Version 8.
em ... äh ... wo/welche Buttons vom "wehm" ?
Die Buttons meines Programmes. Kennst Du doch ... 8) Abgesehen davon: Die Buttons selber funktionieren ja, nur die Funktionstasten nicht.
mit den Funktionstasten meisten du sicherlich die in deinen Xbase++ Application ?!
Klar. Alle anderen interessieren mich nicht.

Die Methoden vom Reader habe ich. Ich habe die komplette Dloku dadrüber runtergeladen. und dann einige dieser Funktionen auf "meine" Buttons und Funtkoinstasten gelegt. Nicht, weil ich die vom Reader nicht mag. Sondern damit das durch das gesamte Projekt immer einheitlich funktioniert.
Also nutze ich nun ganz trivial Code:
RunShell( "/C START EXPLORER.EXE DEMO.PDF" )
weil das mit jeder Version zurecht kommt und der User die Optik ja dann
auch schon kennt.
Genau das möchte ich nicht. Der Reader soll eine meiner Tabpages belegen. Und nicht als externes Fenster laufen.

Jan
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Beitrag von AUGE_OHR »

hi,
Jan hat geschrieben:
von welcher Version PDF Reader reden wir ?
Version 8.
dachte ich mir. Ich hatte Probleme mit der AcroIEFavClient.DLL der
immer als Trojaner gemeldet wurde (NU-AV)
Jan hat geschrieben: ... und dann einige dieser Funktionen auf "meine" Buttons und Funtkoinstasten gelegt. Nicht, weil ich die vom Reader nicht mag. Sondern damit das durch das gesamte Projekt immer einheitlich funktioniert.
hm ... und an die kommst du nur mit "click" ran und nicht wenn du die
Funktionstaste selbst betätigst ?
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Beitrag von AUGE_OHR »

moin,

so ich habe meinen mit v6.x wieder zum laufen gebracht.

Er hatte in der Registry sowas mit "kurzem" Namen stehen :
C:\PROGRA~1\ADOBE\ACROBA~1.0\READER\ACTIVEX\PDF.OCX
was er wohl nicht mag ...

Nun hab ich aber 2 "Probleme":

1.) Wenn der Acrobat Reader nicht schon vorher einmal geladen war
dauert es "ewig" bis er seine Plugins geladen hat.

2.) Auch wenn ich den Reader nun im Dialog habe, hat sich auch der v6.x
Reader "im Hintergrund" geöffnet was ich dann sehe wenn ich meine
Xbase++ Application minimiere. (oder paar mal F4 drücke ...)

noch etwas was mich "nervt" : oControl:SetShowToolBar( .F. ) sollte doch
wohl die Toolbar "ausschalten" was es aber nicht tut. Wenn man nun F8
drückt ...


so nun zu den Functionstasten : ja beim ersten mal muss ich den Button
anclicken und erst dann funktionieren die Functionstasten bis der Dialog
den Focus verliert ... das kenne ich doch irgendwie ...

das ActiveX hat ja seine eigene "interne Eventloop" die auf Tastendruck
wie z.B. F8 reagiert wenn er Focus hat. Somit bekommt der Xbase++
Dialog den Event gar nicht.

Nun kann man auf ein ActiveX auch ein :keyboard legen aber das hängt
nun auch wieder von den :controlFlags ab ob die es überhaupt zulassen.
ich bekomme nun 131473 für mein Sample zurück und auf den :keyboard
Slot scheint er gar nicht zu reagieren ...

...
intern sollte Xbase++ mit der Methode :keyDown()
wenn der Benutzer eine Taste drückt während das ActiveX-Steuerelement den Eingabefokus besitzt. Die Standardbehandlungsmethode :keyDown() transformiert den numerisch Wert in Parameter <nKey> in einen der in APPEVENT.CH definierten Xbase++-Tastencodes und löst das Xbase++-Ereignis xbeP_Keyboard aus. Das Ereignis wird mittels der Funktion PostAppEvent() in die Ereigniswarteschlange (Event Queue) des aktuellen Threads gestellt.
... und das scheint hier nicht zu funktionieren.

...
wenn ich mich recht erinnere war da doch was ab Version xxx ? Das man
die Toolbar (und Werbung) nicht mehr "extern" abschalten konnte war
doch erst ab Version xxx (ich weiss nicht mehr welche) und ich glaube
das es mit ein Grund war warum ich mich dann nicht mehr mit dem
ActiveX beschäftigen wollte ... und die v8.x will ja ständig "nach Hause
telefonieren"
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Beitrag von Jan »

Hallo Jimmy,

der Hinweis, daß ein ActiveX-Control einen eigenen Event-Loop hat, erklärt natürlich so einiges. Den würd ich gerne mal ausschalten oder wenigsten übersteuern können :?

Wenn Die der Adobe zu lahmarschig ist: Versuch mal den Foxit. Der ist richtig schnell. Hab ich bei mir auch schon mal eingebaut. Aber leider hat FoxitSoftware eine total besch... Lizenzpolitik. Sonst wäre ich längst darauf umgestiegen für mein Projekt.

Jan
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hi Jan,

ich habe das auch mal versucht die F-Tasten zu belegen. Das habe ich nicht hinbekommen. Könntest du mir mal bitte deinen Code zeigen, mit der das funktioniert ?
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Beitrag von Jan »

Rolf,

ich kann Dir das gerne heute Abend geben, wenn ich wieder zu Hause bin.

Aber: Du wirst da vermutlich einiges für Dich anpassen müssen. Ich arbeite nämlich mit Dialogen, die jeweils ihren "eigenen" Thread haben. Und damit habe ich die Funktionstastensteuerung in den Eventloop des jeweiligen Threads eingebaut. Das wirst Du dann ein wenig modifizieren müssen. Oder auch ein wenig mehr.

Ansonsten ist das garnicht so wild. Da ich kein Klassenmensch bin habe ich mir da entsprechende Funktionen für gebaut, damit kann ich in jedem Dialog (die haben alle oben die Funktionstastenleiste F2 - F12) mit wenigen Zeilen eine individuelle Belegung einbauen. Ohne immer alles doppelt und dreifach zu schreiben.

Jan
Antworten