Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Hotkey, aber nicht global (https://www.delphipraxis.net/67327-hotkey-aber-nicht-global.html)

edmu 13. Apr 2006 07:31


Hotkey, aber nicht global
 
hallo,

ich habe folgenden code geschrieben:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  if not RegisterHotkey(Handle, vk_F5, 0, vk_F5)
    then ShowMessage(SysErrorMessage(GetLastError));
end;

procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  if Msg.HotKey = vk_F5 then showmessage('test f5');
end;
die taste funktioniert auch, aber auch dann, wenn ich ein anderes programm im vordergrund habe.
kann man den tastendruck nur dann abfragen, wenn das eigene programm aktiv ist?

Corpsman 13. Apr 2006 07:47

Re: Hotkey, aber nicht global
 
Hi,

Was auf jedenfall gehen müste wenn du ein TMainmenu in deine Form einbaust und da nen Shortcut mit F5 setzen tust. Dieser ist dann in der Tat nur in deinem Project "Global".

DevilsCamp 13. Apr 2006 08:03

Re: Hotkey, aber nicht global
 
Wenn Du nur eine Form benutzt und nicht extra ein Menü-Eintrag erstellen willst, dann kannst du KeyPreview auf TRUE stellen und dann in OnKeyDown, OnKeyPress und/oder OnKeyUp auf F5 reagieren.



Wenn mehrere Forms benutzt werden sollen, dann müsste eben auf allen KeyPreview auf TRUE stehen ;)

Corpsman 13. Apr 2006 08:22

Re: Hotkey, aber nicht global
 
@devilsCamp
Ich habe das mal gemacht.

Wollte auf #37 also die Cursor Links Taste Reagieren.

auf meiner Form habe ich mehrere TButton und TCheckbox gesetzt.

und es hat leider nicht geklappt.

DevilsCamp 13. Apr 2006 08:32

Re: Hotkey, aber nicht global
 
Wo hast du darauf reagiert?
In OnKeyPress?

So viel ich weiß, wird bei den Cursor-Tasten nur OnKeyDown und OnKeyUp ausgelöst.

Und da musst du mit den virtuellen Tastencodes arbeiten

Corpsman 13. Apr 2006 11:12

Re: Hotkey, aber nicht global
 
Ich habe es nu mal so gemacht.

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
showmessage(inttostr(key));
end;
Aber das tut bei den Cursor Tasten leider nicht.

Die Property KeyPrieview ist ntürlich auf Tru gesetzt.

DevilsCamp 13. Apr 2006 11:35

Re: Hotkey, aber nicht global
 
Dann versuch mal folgendes:

Delphi-Quellcode:
// Allgemeine Behandlungsroutine einer Komponente
procedure TForm1.TastenDruckKeyDown(Sender: TObject);
begin
  Form1KeyDown(Sender);

  // Restlicher Code, der gemacht werden soll
end;

// KeyDown des Forms
procedure TForm1.Form1KeyDown(Sender: TObject);
begin
  // Was halt zu machen ist
end;

Ist zwar sicher nicht die beste Art, aber immo die schnellste Lösung, die mir so kurz vor meinem Osterurlaub einfällt ;)

Corpsman 13. Apr 2006 11:45

Re: Hotkey, aber nicht global
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das Geht Leider auch nicht, mal abgesehen von den Falschen übergabeparametern.

Damit wir was haben das sich besser ansehn kann habe ich es mal Gecoded und mit angehängt.

Die Shomessage sollte halt auch bei den Pfeiltasten kommen.

DevilsCamp 13. Apr 2006 11:59

Re: Hotkey, aber nicht global
 
Zitat:

Zitat von Corpsman
Das Geht Leider auch nicht, mal abgesehen von den Falschen übergabeparametern.

Kann ja mal passieren, wenn man nicht gerade vor seinem eigenen Rechner sitzt.


Interessanterweise funktioniert das bei "normalen" Tasten schon. Bei den Cursor-Tasten allerdings nicht.

Werde mal schauen, ob ich da was zurecht basteln kann. Allerdings kann das etwas dauern...

Corpsman 13. Apr 2006 12:13

Re: Hotkey, aber nicht global
 
Thx,

Es ist ja net wirklich eilig, habe bisher halt asdw genommen, nur gibt es leider ne ganze Menge User die das net blicken. Deswegen wären die Pfeiltasten halt besser.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 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 by Thomas Breitkreuz