Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Tasten global "abfangen" (https://www.delphipraxis.net/212849-tasten-global-abfangen.html)

d.adams 12. Apr 2023 18:48

Tasten global "abfangen"
 
Hallo,

ich muss eine Anwendung etwas bedienerfreundlicher gestalten - die Erschaffer haben sich leider nicht immer an den Guide gehalten. Das System bietet diverse Shortcuts an die aus jedem Formular funktionieren sollten.

Ich würde nun gerne Tastenkürzel oder F-Tasten abfragen (abfangen) und zwar so, dass ich nicht in jedes Formular muss. Bspw. ruft die Taste F8 immer ein bestimmtes Formular auf. Dies wird in jedem Formular "OnKeyPress" behandelt. Das würde ich gerne einmalig und zentral behandeln. Geht das und wenn ja wie?

Gruß
Heiko

himitsu 12. Apr 2023 20:44

AW: Tasten global "abfangen"
 
In den OnKeyPress/OnKeyDown aller Forms eine globale Funktion aufrufen, welche die übergreifende Behandlung ausführt.

Dafür kann man seine Forms auch ableiten/vererben und das Verhalten ins virtual KeyDown/KeyPress des gemeinsamen Vorfahren einbauen.

oder TApplicationEvents.OnMesssage

d.adams 13. Apr 2023 04:04

AW: Tasten global "abfangen"
 
Zitat:

Zitat von himitsu (Beitrag 1520953)
In den OnKeyPress/OnKeyDown aller Forms eine globale Funktion aufrufen, welche die übergreifende Behandlung ausführt.

Dafür kann man seine Forms auch ableiten/vererben und das Verhalten ins virtual KeyDown/KeyPress des gemeinsamen Vorfahren einbauen.

oder TApplicationEvents.OnMesssage

TApplicationEvents.OnMesssage....

nie von gelesen. Wie nutzt man das?

freimatz 13. Apr 2023 06:02

AW: Tasten global "abfangen"
 
https://www.google.com/search?client...nts.OnMesssage
SCNR

d.adams 21. Apr 2023 16:26

AW: Tasten global "abfangen"
 
danke

himitsu 21. Apr 2023 17:32

AW: Tasten global "abfangen"
 
Und da dann MSDN-Library durchsuchenWM_KEYUP, WM_KEYDOWN usw.

TApplicationEvents.On... ist die praktischere Variante des alten Application.On...

KodeZwerg 6. Jul 2023 09:07

AW: Tasten global "abfangen"
 
Nichts gegen die vorigen Vorschläge, dennoch zeig ich mal wie man es nur einmal behandeln könnte, dazu musst Du die .dpr datei modifizieren.
Delphi-Quellcode:
program Project12;

uses
  Winapi.Windows,
  Winapi.MMSystem,
  Vcl.Forms,
  Unit12 in 'Unit12.pas' {Form12},
  Unit13 in 'Unit13.pas' {Form13};

{$R *.res}

// hotkey behandlung
procedure HotkeyTimer(TimerID, Msg: Uint; dwUser, dw1, dw2: DWord); pascal;
begin
  if ((GetKeyState(VK_F8) and (1 shl 31)) <> 0) then // VK_F8 wird in diesem Beispiel genutzt um ein Formular anzuzeigen
    Form13.Show;
end;

var
  HID: Integer;
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm12, Form12);
  Application.CreateForm(TForm13, Form13);
  // hotkey installieren
  HID := TimeSetEvent(10, 0, @HotkeyTimer, 0, TIME_PERIODIC);
  Application.Run;
  // hotkey entfernen
  TimeKillEvent(HID);
end.

himitsu 6. Jul 2023 09:34

AW: Tasten global "abfangen"
 
Zitat:

Zitat von timeSetEvent
Note This function is obsolete. New applications should use CreateTimerQueueTimer to create a timer-queue timer.

:freak:

PS: Ein MultimediaTimer, der in einem eigenen Thread läuft.

KodeZwerg 6. Jul 2023 11:03

AW: Tasten global "abfangen"
 
Zitat:

Zitat von himitsu (Beitrag 1524238)
Zitat:

Zitat von timeSetEvent
Note This function is obsolete. New applications should use CreateTimerQueueTimer to create a timer-queue timer.

:freak:

Ach, wäre es nicht schön wenn die bei Emba das auch in den Headern einem mitteilen könnten :angel:
Ich hatte es nicht auf aktualität geprüft, weiß nur das es seit Jahren gut läuft :lol:

himitsu 6. Jul 2023 12:06

AW: Tasten global "abfangen"
 
Per se wäre es möglich.

Delphi-Referenz durchsuchendeprecated


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 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