![]() |
Abfrage von Tastaturereignissen
Hi,
innerhalb meines Formulars soll der Benutzer STRG + G oder STRG+Shift+G drücken.... ich habe eine Abfrage in der ich prüfen möchte ob die erste oder die zweite Tastenkombinaton gedrckt wurde .... in OnKeyDown Frage ich.... if Shift = [ssShift] then begin if ((Shift = [ssCtrl]) and (Key = Ord('G')))then ActEditUserExecute(Sender); end; für STRG+SHIFT+G.... nur klappt das nicht..... wie kann ich rausfinden, ob CTRL+Shift gedrückt wurde ???? Danke euch schon mal.. Grüße Tyrael |
Re: Abfrage von Tastaturereignissen
Das kann so auch nicht gehen. Du fragst ab, ob Shift gleich ssShift ist, und dann ob es gleich ssCtrl ist. Beides kann aber nicht sein. Um herrauszufinden, ob beides gedrückt wurde, musst du den in-Operator verwenden:
Delphi-Quellcode:
if ssShift in Shift then
|
Re: Abfrage von Tastaturereignissen
und für Ctrl+Shift+U ???
.... if Shift in [ssCtrl, ssShift] and Key = 71 then ?? ...wenn ja, dann trifft diese bedingung doch auch für Ctrl+U und Shift+U zu..., oder? |
Re: Abfrage von Tastaturereignissen
Ctrl-Shift-U:
Delphi-Quellcode:
vielleicht geht das auch (nicht getestet):
if (ssCtrl in Shift) and (ssShift in Shift) and (Key=71) then
Delphi-Quellcode:
Shift-U:
if ([ssCtrl,ssShift] in Shift) and (Key=71) then
Delphi-Quellcode:
if (ssShift in Shift) and (Key=71) then
|
Re: Abfrage von Tastaturereignissen
Vielleicht geht das ja einfacher mit dem Windows-Ereignis GetAsyncKeyState.
Dieses wendet man auf alle 3 Tasten an und dann funst das. Kleines Beispiel gefällig ? |
Re: Abfrage von Tastaturereignissen
@chewie ... danke für das Beispiel..., so funktioniert es jetzt
@danny ...wäre nett ein kleines Besispiel, weil so sagt es mir jetzt erst mal nix... danke euch allen Tyrael |
Re: Abfrage von Tastaturereignissen
Delphi-Quellcode:
Hinweis:
// Funktion gibt True zurück, wenn Taste 'VK_KEY' gedrückt wurde.
Function MyKeyRead(VK_KEY : Integer) : Boolean; begin result:= failed(GetAsyncKeyState(VK_KEY)); end; // Funktion gibt True zurück, wenn alle 3 Tasten gedrückt wurden Function Read_3_Keys(Key1, Key2, Key3 : Integer) : Boolean; begin Result:= MyKeyRead(Key1) AND MyKeyRead(Key2) AND MyKeyRead(Key3); end; Für die virtual keys gibt es in der Unit Windows Konstanten, wie z.b.
Delphi-Quellcode:
für die Shift-Taste, etc.
VK_SHIFT
Für Buchstaben nimmst Du am besten
Delphi-Quellcode:
für 'U'.
ord('U')
Achtung, immer GROSSE Buchstaben verwenden. Habe hier auf der Arbeit keinen Compiler, aber so müsste das stimmen. |
Re: Abfrage von Tastaturereignissen
danke dir danny, es läuft mittlerweile auf die andere Art, wei es oben beschrieben ist, aber ich werde auch diese Variante mal testen....
vielen dank ... da mach ich doch mal einen Luftspru.. :bounce1: :hello: |
Re: Abfrage von Tastaturereignissen
Mein Delphi kennt das Schlüsselwort failed nicht. :roll:
|
Re: Abfrage von Tastaturereignissen
... ich wollte es gerade auch testen und mein Delphi kennt failed auch nicht ..... :cry:
.. ich benutze Delphi 5 Pro... ..welche Version benutzt du ? |
Re: Abfrage von Tastaturereignissen
Zitat:
|
Re: Abfrage von Tastaturereignissen
Oh sorry, das habe ich nicht gewusst. :shock:
Bin davon ausgegangen, dass die Funktionen aus dem 4er übernommen wurden. Ich schaue dann später mal, wie das mit dem Failed umgangen werden kann. Sind, glaube ich, sowieso bloß 2 Programmzeilen in der Funktion. :gruebel: |
Re: Abfrage von Tastaturereignissen
...@Luckie
...habe ich umgehend gemacht, :nerd: |
Re: Abfrage von Tastaturereignissen
Zitat:
Delphi-Quellcode:
falls man auch Alt+Strg+Shift+U zulassen will.
if (Shift * [ssCtrl, ssShift] = [ssCtrl,ssShift]) and (Key=71) then
Will man nur Strg+Shift, ohne Alt,Maustasten usw., dann ist es so richtig:
Delphi-Quellcode:
Gruß Hagen
if (Shift = [ssCtrl,ssShift]) and (Key=71) then
|
Re: Abfrage von Tastaturereignissen
Warum registrierst du dir keinen Hotkey?
![]() ![]() [df]RegisterHotKey[/df] ![]() |
Re: Abfrage von Tastaturereignissen
@assarbad.... ich kann mir keine Hotkeys reservieren, da ich mit mehreren Frames arbeite auf denenen z.B. STRG+SHIFT+U immer anders behandelt wird....
...je nach Frame, ruft STRG+SHIFT+U eine andere Prozedur bzw. Funktion auf.... :freak: |
Re: Abfrage von Tastaturereignissen
Kann man nicht kucken, welches Frame "aktiv" ist? Habe aber von Frames keine Ahnung.
|
Re: Abfrage von Tastaturereignissen
... mit dem Frame "Aktiv" ist so ne Sache...
... ein Formular besteht aus drei bis vier Frames... ..Aktivität könnte man, mit Frame.setfocus feststellen, aber ein Frame darf ruhig nicht den Focus haben aber die Tastenkombination muss trotzdem verfügbar sein... :roll: |
Re: Abfrage von Tastaturereignissen
Wenn das Frame nicht den Fokus hat, ist irgendwas anderes fokusiert, logisch. Also wird das Frame zu diesem Zeitpunkt auch nicht das STRG+SHIFT+U Event erhalten. In diesem Moment muß STRG+SHIFT+U als globales Event abgefangen werden und an den aktiven aber nicht fokusierten Frame weitergereicht werden. Somit trifft Luckie's/Asserbads Vorschlag meiner Meinung nach genau in's Schwarze.
Mit Screen.ActiveControl und iteration bis zum Parent-Frame kann man den aktiven, aber nicht fokusierten Frame, in Erfahrung bringen. Gruß Hagen PS: ürbigens nutzt ich ebenfalls keine Frames !! |
Re: Abfrage von Tastaturereignissen
...hm, grübel...
...ok ich werde, das mal nachher testen... ..in Moment muss ich erst mal etwas anderes implementieren,aber ich werde es auf jeden Fall noch testen und dann hier das Resultat posten....so jetzt mal wieder bissel .. :coder: ... ich danke euch allen für eure konstruktiven Vorschläge :D und schönen Gruß Tyrael |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:00 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