AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tastatureingaben an ein Control weitergeben

Ein Thema von MasterEvil · begonnen am 21. Jul 2005 · letzter Beitrag vom 21. Jul 2005
Antwort Antwort
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#1

Tastatureingaben an ein Control weitergeben

  Alt 21. Jul 2005, 11:39
Hi leutz,

hab ein kleines Problem.
Und zwar fange ich zwangsweise Tastatureingaben von einem ActiveX Control ab, ich ich zum navigieren brauche.
Navigieren tut bei mir eine Art Panel mit Buttons drauf, die sonst alle Tastatureingaben abfängt (nur halt nicht vom ActiveX Control, da dieses die Eingaben verschluckt).

So, nun möchte ich gerne die Tastatureingaben, die ich abgefangen habe, an mein Navigationspanel schicken.
Ist das möglich?
Und wie? Zur Not mach ichs auch gerne über die WinAPI wenn mir einer sagt wie.

Es wäre sehr schwierig für mich das Verhalten des Panels nochmal doppelt zu machen.
Da das Panel dynamisch aufgebaut ist und sich leicht etwas ändert.

Ich hoffe jemand hat eine Idee.

Danke schonmal,
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Tastatureingaben an ein Control weitergeben

  Alt 21. Jul 2005, 11:41
Wie fängst du die Tastureingaben denn überhaupt ab?
Volker
  Mit Zitat antworten Zitat
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Tastatureingaben an ein Control weitergeben

  Alt 21. Jul 2005, 11:42
Mit einer extra dll und nem Tastatur Hook.
Krieg also nur den Tastencode und will den weiterreichen.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Tastatureingaben an ein Control weitergeben

  Alt 21. Jul 2005, 11:45
Wenn du die DLL selbst geschrieben hast, dann kannst du das ja ggf. dort abfangen.

Ansonsten kannst du natürlich einfach das folgende machen:
1. Hook ausschalten
2. WM_KEYDOWN/WM_KEYUP an das Fensterhandle des Controls schicken
3. Hook wieder einschalten

Kann natürlich sein, dass du dann eine Benutzereingabe verpasst.
Volker
  Mit Zitat antworten Zitat
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Tastatureingaben an ein Control weitergeben

  Alt 21. Jul 2005, 11:52
das problem ist, dass das Fensterhandle beim ActiveX Control das selbe ist wie beim Form (eigentlich ja auch logisch).
Es ist nur so, dass das ActiveX Control, solang es den Focus hat, alle Eingaben verschluckt und es nicht zum eigentlichen Form kommt (wie auch immer das passiert). Sprich: ich müsste nach jeder Eingabe den Fokus vom Control nehmen, mir den Kram nochmal schicken und dann den Fokus wieder aufs Control tun, damit alle wieder so ist wie vorher.
Das geht aber wiederrum auch nicht, da ich damit die Logik des Panels kaputt machen würde, da dieses den Fokus eventuell ebenfalls verschiebt und ich ihn dann wieder zurück schieben würde.

Sehr kompliziert ^^

Und Hook kann ich nicht bei jeder eingabe Deinstallieren und wieder Installieren, das is zuviel Ressourcen verschwendung.
Vorallem da unser Programm auch auf sehr alten Rechnern noch laufen muss.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Tastatureingaben an ein Control weitergeben

  Alt 21. Jul 2005, 12:28
Kannst du das ActiveX-Control in ein TPanel packen (oder ein anderes TWinControl). Dann nimmt es ggf. das Fensterhandle von diesem Fenster.

Alternativ:

Kannst du den Hook nicht mit einem Flag versehen, ob er aktiv ist oder nicht (einfache Abfrage in der DLL).

Dann kannst du im Hauptprogramm das machen:

1. HookActive := false;
2. SendMessage(ActiveXControl.Handle, WM_KEYDOWN/WM_KEYUP, ..., ...);
3. HookActive := true;
Volker
  Mit Zitat antworten Zitat
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Tastatureingaben an ein Control weitergeben

  Alt 21. Jul 2005, 12:56
Das mit dem senden ans handle von dem Navigationspanel klappt so sehr gut:
PostMessage(Panel.Handle,WM_KEYDOWN,VK_ESCAPE,0);
Klappt wunderbar bei allen Tasten nur bei den Pfeiltasten nicht ... ich dreh noch durch

Jetzt weiss ich nicht wohin die verschwinden.

Meine dll schickt ja alle tastatureingaben eh weiter dahin wo sie eigentlich hin sollen.
Deswegen seh ich jetzt grad das Problem nicht mehr.
Ich verarbeite ja nur die weiter wo der aktive Focus auf dem ActiveX Control liegt, den Rest verwerf ich wieder.
Deswegen sollte jetzt auch nichts doppelt passieren oder etwas fehlen.
Es klappt ja auch alles, nur Vk_Left, Right, Up und Down werden irgendwie nicht verarbeitet, wenn ich sie so schicke ^^

Deine Idee mit dem panel wäre schön, nur wie krieg ich den das aktive Handle in der dll raus?
Mit GetActiveWindow haben ActiveX Control und Form das selbe Handle.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Tastatureingaben an ein Control weitergeben

  Alt 21. Jul 2005, 13:21
Also noch mal langsam...

Zitat:
Meine dll schickt ja alle tastatureingaben eh weiter dahin wo sie eigentlich hin sollen.
Du hast in deiner DLL einen Code wie diesen:
Delphi-Quellcode:
function KeyboardHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  if nCode = HC_ACTION then
    SendMessage(<MeinEigenesFensterHandle>, <MeineEigeneFensterMeldung>, wParam, lParam);

  Result := CallNextHookEx(HookHandle, nCode, wParam, lParam);
end;
... und dein Hauptformular reagiert auf <MeineEigeneFensterMeldung>, oder wie machst du es?

Dann verstehe ich nicht, wieso du die noch einmal an das Active-X Control schicken willst?
Volker
  Mit Zitat antworten Zitat
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Tastatureingaben an ein Control weitergeben

  Alt 21. Jul 2005, 13:52
oh da hast du mich wohl falsch verstanden

Ich wills nicht noch einmal an das ActiveX Control schicken, sondern ich will die Tastatureingaben die gemacht werden solang das ActiveX Control den Fokus hat an ein anderes Control schicken, welches die Tastatureingaben zur Navigation braucht.
Das ActiveX Control schluckt ja blöderweise alle Tastatureingaben wenn es den Fokus hat und es hat auch kein Ereignis welches ich benutzen könnte.

Also lasse ich einen Hook diese Befehle abfangen (ja, der sieht so ähnlich aus wie dein Beispiel) und schicke sie an mein Formular weiter (und auch weiter an das ActiveX Control).
Das Formular gibt diese jetzt mit SendMessage weiter an mein Navigationspanel (die Pfeiltasten gehen mit SendMessage, nur mit PostMessage nicht, warum auch immer).

Und ich hab es jetzt auch scheinbar tatsächlich alles so hinbekommen wie ich es wollte.
Ich werd jetzt noch ne Weile rumtesten und verfeinern, aber ich denke das es alles klappt.

Vielen dank erstmal.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 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