AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tasten global "abfangen"

Ein Thema von d.adams · begonnen am 12. Apr 2023 · letzter Beitrag vom 6. Jul 2023
Antwort Antwort
d.adams

Registriert seit: 2. Apr 2023
22 Beiträge
 
#1

Tasten global "abfangen"

  Alt 12. Apr 2023, 18:48
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.294 Beiträge
 
Delphi 12 Athens
 
#2

AW: Tasten global "abfangen"

  Alt 12. Apr 2023, 20:44
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
d.adams

Registriert seit: 2. Apr 2023
22 Beiträge
 
#3

AW: Tasten global "abfangen"

  Alt 13. Apr 2023, 04:04
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?
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.388 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Tasten global "abfangen"

  Alt 13. Apr 2023, 06:02
https://www.google.com/search?client...nts.OnMesssage
SCNR
  Mit Zitat antworten Zitat
d.adams

Registriert seit: 2. Apr 2023
22 Beiträge
 
#5

AW: Tasten global "abfangen"

  Alt 21. Apr 2023, 16:26
danke
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.294 Beiträge
 
Delphi 12 Athens
 
#6

AW: Tasten global "abfangen"

  Alt 21. Apr 2023, 17:32
Und da dann MSDN-Library durchsuchenWM_KEYUP, WM_KEYDOWN usw.

TApplicationEvents.On... ist die praktischere Variante des alten Application.On...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Alt 6. Jul 2023, 02:43     Erstellt von photosulky
Dieser Beitrag wurde von TBx gelöscht. - Grund: Verdacht auf SPAM und den damit verbundenen verschwenderischen Umgang von wertvollen Bits und Bytes
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Tasten global "abfangen"

  Alt 6. Jul 2023, 09:07
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.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:58 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