![]() |
Tastenkombinationen ohne, das Fenster im Focus ist
Ich möchte das, wenn man z.B. mal <Strg> + <1-6> drückt, dass auf der Form etwas ausgeführt werden soll, aber die Form ist nicht umbedingt im Focus, bzw. ein anderes Programm (Spiel) ist gerade "aktiv".
Gibts trotzdem eine Möglichkeit das zu machen? |
Re: Tastenkombinationen ohne, das Fenster im Focus ist
|
Re: Tastenkombinationen ohne, das Fenster im Focus ist
Okay.. Guck ich mir mal an.
Ist es auch egal, ob auf der Form gerade ein Edit makiert ist und das KeyDown auf der Form ist? |
Re: Tastenkombinationen ohne, das Fenster im Focus ist
Hooks ... sind viel zu overpowered dafuer. Guck mal lieber hier im Forum nach HotKeys.
|
Re: Tastenkombinationen ohne, das Fenster im Focus ist
Also ich habe das jetzt so umgesetzt, funzt aber net:
(PS: Hotkeys)
Delphi-Quellcode:
Das ist nach
[...]
type TWMHotkey = record Msg: Cardinal; idHotKey: Word; Modifiers: Integer; VirtKey: Integer; end; const ID = $FF; type TForm1 = class(TForm) [...] private [...] procedure WMHotKey(var Msg: TWMHotKey); Message WM_HOTKEY; [...] procedure TForm1.WMHotKey(Var Msg: TWMHotkey); begin case Msg.IdHotKey of ID : Showmessage('test'); ID + 1 : Showmessage('test2'); end; inherited; end; procedure TForm1.GoClick(Sender: TObject); var i : Integer; ok: longbool; begin [...] for i := 0 to 8 do begin ok := RegisterHotKey(Form1.Handle, ID + i, MOD_control, Ord(i)); if not ok then Showmessage('Tastenkombination <Strg> + <' + IntToStr(i) + '> nicht möglich zu setzen!'); end; end; [...] end. ![]() Ich bekomme weder eine Nachricht, dass es nicht gesetzt werden konnte, noch dass die Tasten gedrückt wurden. Ich möchte die Tastenkombination: <Strg> + <0 (bis) 8> |
Re: Tastenkombinationen ohne, das Fenster im Focus ist
Moin Fabian,
nimm mal nicht ord(i) sondern ord(i+48 ). Ausserdem solltest Du das dann in das FormCreate-Ereignis einbauen, und im FormDestroy auch die zugehörigen UnregisterHotkey ausführen. [EDIT] Nachtrag: +48, da die Zeichen 0 bis 8 die Codes 48 bis 56 haben, und nicht 0 bis 8 [/EDIT] |
Re: Tastenkombinationen ohne, das Fenster im Focus ist
- Okay... Dann baue ich es in OnCreate und werde aber eine andere Bedingung setzten bei der Abfrage
- Ord gibt doch den ASCII-Wert eines Chars wieder oder? Also entweder ohne Ord und dann i + 48 oder i in ein Char umwandeln und dann mit Ord ermitteln? - Unregister ist engebaut danke ;) [edit]Eine Frage: Da ich mit <strg> + <0 (bis) 6> den ItemIndex (-1 bis 5) bestimme, wollte ich eigentlich ID - 1 machen, aber das geht irgendwie nicht.
Delphi-Quellcode:
[/edit]
procedure TForm1.WMHotKey(Var Msg: TWMHotkey);
begin if not Go.Visible then case Msg.IdHotKey of ID..ID + 6 : Wertung.ItemIndex := ID - 1; ID + 7 : NextClick(Next); ID + 8 : PrevClick(Prev); end; inherited; end; |
Re: Tastenkombinationen ohne, das Fenster im Focus ist
Moin Fabian,
Zitat:
Ich vermute mal bei Wertung handelt es sich um eine ComboBox. ID fängt bei $FF an, so dass, wenn wir es mal ohne Vorzeichen ansehen, ID-1 = $FE = 254 ist. Du müsstest also wohl $FF abziehen, nicht 1. |
Re: Tastenkombinationen ohne, das Fenster im Focus ist
Zitat:
Zitat:
Zitat:
[edit] Schade:
Delphi-Quellcode:
Ergibt immer (!) null :([/edit]
ID - $FF
|
Re: Tastenkombinationen ohne, das Fenster im Focus ist
Es gäbe noch die Möglichkeit mit GetAsyncKeyState.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 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