Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - OnKeyDown im Hintergrund
dYnAm1c - Di 21.06.11 19:39
Titel: OnKeyDown im Hintergrund
Hi,
bin im moment dabei für ein Spiel eine kleine Hilfe zu basteln (mit Timern und Buttons fürs richtige Timing im Spiel).
Ich wollte jetzt, damit man nicht immer aus dem Spiel gehen muss, Tasten einbauen die man drückt und im Programm den entsprechenden Knopf drücken.
Das ganze klappt ja leider nich so ganz mit den Prozeduren wie OnKeyDown, da dafür ja immer die jeweilige Komponente ausgewählt sein muss. Ich suche also was damit ich In-Game eine Taste drücken kann die dann in meinem Programm z.B. eine Prozedur ausführt.
MfG
Moderiert von
Gausi: Topic aus Windows API verschoben am Di 21.06.2011 um 20:32
Gausi - Di 21.06.11 20:32
Schau dir mal die Eigenschaft KeyPreview der Form an. Wenn die auf True steht, kommen die Tastendrücke zuerst auf der Form an. Das dürfte dein Problem lösen. :D
dYnAm1c - Di 21.06.11 23:01
Das hilft mir nur Teilweise, jetzt kann ich zwar die Taste drücken egal was gerade makiert ist, jedoch geht das auch nur wenn ich auch gerade mein Programm ausgewählt habe, ich möchte aber das die Buttons immer eine Funktion haben auch wenn mein Programm gerade nicht im Vordergrund/nicht ausgewählt ist.
MfG
dYnAm1c - Mi 22.06.11 20:50
/push
Webo - Mi 22.06.11 22:27
Wenn deine Anwendung nicht mehr im Vordergrund ist, kann sie gar nicht wissen, welche Taste grade auf ihr gedrückt wird, da sie ja von anderen Anwendungen verdeckt wird.
Deshalb werfe ich mal den Begriff "Hook" in den Raum :D
Gausi - Mi 22.06.11 22:29
Und ich "Hotkeys". :D
dYnAm1c - Mi 22.06.11 23:14
Webo hat folgendes geschrieben : |
Wenn deine Anwendung nicht mehr im Vordergrund ist, kann sie gar nicht wissen, welche Taste grade auf ihr gedrückt wird, da sie ja von anderen Anwendungen verdeckt wird.
Deshalb werfe ich mal den Begriff "Hook" in den Raum :D |
Bei Hooks war ich auch schon, allerdings finde ich dazu weder Tutorials noch Ansatzpunkte speziell für Delphi. Dazu
kommt das der Hook warscheinlich in DX9 sein muss, was das ganze nochmal eingrenzt.
MfG
Gausi - Do 23.06.11 10:07
Der Hook muss im System installiert werden, mit DX9 hat das nichts zu tun. Bei den Tutorials gibt es hier was dazu, iirc funktioniert der ohne Probleme, wird aber natürlich vo so ziemlich jedem Virenscanner erkannt und angemeckert - aus gutem Grund.
So wie ich das verstehe, benötigst du aber nicht unbedingt alle Tasten, sondern nur einige Tastenkombinationen, um bestimmte Aktionen auszuführen. Dafür wären Hotkeys deutlich besser geeignet. Such einfach mal nach RegisterHotkey, das ist einfacher zu implementieren und schonender für das System. ;-)
dYnAm1c - So 26.06.11 03:35
So ich hab das ganze mit registerHotkey nun geschafft zu realisieren, nun wär noch eine (kleine?!) praktische
Frage da: Kann ich damit wirklich nur Kombinationen wie z.B.: [Strg + H] realisieren? Ich habs mit nur einer Taste versucht und bekam die Fehlermeldung "Not enough actual parameters".
MfG
jaenicke - So 26.06.11 08:04
Damit dir jemand helfen kann, musst du schon zeigen wie der Code aussieht, bei dem der Fehler auftritt. ;-)
Ich vermute aber du hast aus Versehen den dritten Parameter gelöscht statt den Modifier nur als 0 zu übergeben.
dYnAm1c - So 26.06.11 15:20
Hi,
im moment sieht das bei mir so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| registerHotKey(handle, 1, MOD_CONTROL, VK_NUMPAD7); registerHotKey(handle, 2, MOD_CONTROL, VK_NUMPAD8); registerHotKey(handle, 3, MOD_CONTROL, VK_NUMPAD4); registerHotKey(handle, 4, MOD_CONTROL, VK_NUMPAD5); registerHotKey(handle, 5, MOD_CONTROL, VK_NUMPAD1); registerHotKey(handle, 6, MOD_CONTROL, VK_NUMPAD2); |
und ich schätze du meinst das dann so? :
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| registerHotKey(handle, 1, VK_NUMPAD7, 0); registerHotKey(handle, 2, VK_NUMPAD8, 0); registerHotKey(handle, 3, VK_NUMPAD4, 0); registerHotKey(handle, 4, VK_NUMPAD5, 0); registerHotKey(handle, 5, VK_NUMPAD1, 0); registerHotKey(handle, 6, VK_NUMPAD2. 0); |
jaenicke - So 26.06.11 16:22
Warum vertauschst du plötzlich die Parameter? Der Tastencode ist und bleibt an letzter Stelle und der Modifizierer (hier eben 0) davor...
dYnAm1c - So 26.06.11 17:17
Ja das hab ich auch schon bemerkt nur habs vergessen hier wieder zu ändern, Thema hat sich damit erledigt danke :) .
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!