![]() |
Nicht aktive Form auf Tastendruck reagieren lassen
Hallo,
ich versuche gerade, ein Programm zu schreiben, das es möglich macht, die Maus mit der Tastatur zu bedienen - die Steuerung des Cursors mit den Pfeiltasten, den Klick mit Enter usw. Ich habe dazu die Eigenschaften OnKeyDown und On KeyPress meiner HauptUnit genutzt. Logischerweise funktioniert das aber nur solange die Form auch aktiviert ist. Da ich das Ganze nutzen will um den Computer zu steuern und nicht dieses Programm, stellt das der Funktionstüchtigkeit ein Bein. Meine Frage ist also: Wie schaffe ich, dass das Programm auf eine Taste Reagiert ohne die OnKeyDown-, bzw. OnKeyPresseigenschaften zu nutzen (und dass das auch passiert, wenn es nicht aktiviert ist) - oder aber: Wie schaffe ich, dass das Fenster dauerhaft aktiviert bleibt? Treuergebenst, Samufi |
Re: Nicht aktive Form auf Tastendruck reagieren lassen
Unter Windows XP gibt es das doch schon.
Systemsteuerung -> Eingabehilfen -> Tabsheet "Maus" Tastaturmaus aktivieren Es gibt auch genügend Freewaretools die ebenfalls über die Tastatur die Maus steuern... |
Re: Nicht aktive Form auf Tastendruck reagieren lassen
Ansonsten (und wenn es nur zum Üben ist) könntest Du einen HotKey registrieren, wobei sich da die Pfeiltasten ohne Zusatztaste wohl eher nicht so gut eignen.
|
Re: Nicht aktive Form auf Tastendruck reagieren lassen
Das war mir schon im Prinzip klar. Mir geht es nicht um das Produkt, sondern den Weg dorthin. Das Wissen kann man dann ja auch anderswo anwenden. Die Maussteuerung ist bloß ein Testobjekt, das mal (abgesehen davon, dass es sie schon gibt) nicht ganz sinnlos schien.
Vom Schreiben von HotKeys habe ich überhaupt keine Ahnung... Eine Zusatztaste wäre kein Problem. Wie mache ich denn sowas? (Is jetzt vielleicht ein bisschen im Urschleim, die Frage) |
Re: Nicht aktive Form auf Tastendruck reagieren lassen
Beispielunit mit einem Memo auf der Form (HotKey ist STRG-Pfeiltaste runter):
Delphi-Quellcode:
[edit] Das funktioniert natürlich nur, wenn der Hotkey nicht bereits anderweitig registriert ist, siehe MSDN. [/edit]
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private-Deklarationen } procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} const MY_HOTKEY = WM_APP + 100; procedure TForm1.FormCreate(Sender: TObject); begin RegisterHotKey(Handle,MY_HOTKEY,MOD_CONTROL,VK_DOWN); end; procedure TForm1.FormDestroy(Sender: TObject); begin UnregisterHotKey(Handle,MY_HOTKEY); end; procedure TForm1.WMHotKey(var Msg: TWMHotKey); begin if Msg.HotKey = MY_HOTKEY then Memo1.Lines.Add('Hotkey empfangen'); Msg.Result := 1; end; end. |
Re: Nicht aktive Form auf Tastendruck reagieren lassen
Vielen Dank! Zum Verständnis: Was bedeutet "WM_APP + 100; "?
|
Re: Nicht aktive Form auf Tastendruck reagieren lassen
Du kannst ja selbst Messages deklarieren. Diese sollten aber oberhalb von WM_USER oder WM_APP (beides vordefinierte Konstanten) liegen.
Das war Quatsch, die Konstante ist ja nicht für die Message, sondern die ID gedacht :oops: |
Re: Nicht aktive Form auf Tastendruck reagieren lassen
Tut mir leid, ich verstehe leider nicht so ganz. Meine Kenntnisse liegen leider noch sehr weit an der Oberfläche...
Der HotKey wird also beschrieben durch eine Zahl? (hab ich das jetzt richtig verstanden?) Warum weise ich Msg.Result noch den Wert 1 zu? Ich habe das jetzt so ziemlich eins zu eins übernommen, es passiert aber nichts... Woran kann das liegen? |
Re: Nicht aktive Form auf Tastendruck reagieren lassen
Hast Du die Ereignisse auch im OI zugewiesen? Ansonsten erweitere das FormCreate mal etwas:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin if not RegisterHotKey(Handle,MY_HOTKEY,MOD_CONTROL,VK_DOWN) then ShowMessage(Format('RegisterHotKey ist fehlgeschlagen.%sMeldung:%s', [sLineBreak,SysErrorMessage(GetLastError)])); end; |
Re: Nicht aktive Form auf Tastendruck reagieren lassen
OnCreate und OnDestroy habe ich zugewiesen. Bei der HotKey-Prozedur weiß ich nicht, wo ich sie eintragen sollte. Ich habe die Änderung übernommen, es kommt aber keine Fehlermeldung - das Registrieren des HotKeys muss also fehlerfrei funktionieren...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:57 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