AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Nicht aktive Form auf Tastendruck reagieren lassen
Thema durchsuchen
Ansicht
Themen-Optionen

Nicht aktive Form auf Tastendruck reagieren lassen

Ein Thema von Samufi · begonnen am 30. Apr 2010 · letzter Beitrag vom 22. Jun 2010
Antwort Antwort
Seite 1 von 2  1 2      
Samufi

Registriert seit: 27. Nov 2008
Ort: Güstrow
93 Beiträge
 
Turbo Delphi für Win32
 
#1

Nicht aktive Form auf Tastendruck reagieren lassen

  Alt 30. Apr 2010, 16:03
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Nicht aktive Form auf Tastendruck reagieren lassen

  Alt 30. Apr 2010, 16:16
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...
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#3

Re: Nicht aktive Form auf Tastendruck reagieren lassen

  Alt 30. Apr 2010, 16:22
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Samufi

Registriert seit: 27. Nov 2008
Ort: Güstrow
93 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Nicht aktive Form auf Tastendruck reagieren lassen

  Alt 30. Apr 2010, 16:24
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)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#5

Re: Nicht aktive Form auf Tastendruck reagieren lassen

  Alt 30. Apr 2010, 16:26
Beispielunit mit einem Memo auf der Form (HotKey ist STRG-Pfeiltaste runter):
Delphi-Quellcode:
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.
[edit] Das funktioniert natürlich nur, wenn der Hotkey nicht bereits anderweitig registriert ist, siehe MSDN. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Samufi

Registriert seit: 27. Nov 2008
Ort: Güstrow
93 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Nicht aktive Form auf Tastendruck reagieren lassen

  Alt 30. Apr 2010, 16:36
Vielen Dank! Zum Verständnis: Was bedeutet "WM_APP + 100; "?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#7

Re: Nicht aktive Form auf Tastendruck reagieren lassen

  Alt 30. Apr 2010, 16:41
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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Samufi

Registriert seit: 27. Nov 2008
Ort: Güstrow
93 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Nicht aktive Form auf Tastendruck reagieren lassen

  Alt 30. Apr 2010, 16:52
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?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

Re: Nicht aktive Form auf Tastendruck reagieren lassen

  Alt 30. Apr 2010, 16:57
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Samufi

Registriert seit: 27. Nov 2008
Ort: Güstrow
93 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Nicht aktive Form auf Tastendruck reagieren lassen

  Alt 30. Apr 2010, 17:06
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...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:23 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