Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Abfrage von Tastaturereignissen (https://www.delphipraxis.net/7229-abfrage-von-tastaturereignissen.html)

Tyrael Y. 6. Aug 2003 11:07


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

Chewie 6. Aug 2003 11:19

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

Tyrael Y. 6. Aug 2003 11:31

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?

Chewie 6. Aug 2003 11:39

Re: Abfrage von Tastaturereignissen
 
Ctrl-Shift-U:
Delphi-Quellcode:
if (ssCtrl in Shift) and (ssShift in Shift) and (Key=71) then
vielleicht geht das auch (nicht getestet):
Delphi-Quellcode:
if ([ssCtrl,ssShift] in Shift) and (Key=71) then
Shift-U:
Delphi-Quellcode:
if (ssShift in Shift) and (Key=71) then

Dannyboy 6. Aug 2003 11:49

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 ?

Tyrael Y. 6. Aug 2003 12:03

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

Dannyboy 6. Aug 2003 13:46

Re: Abfrage von Tastaturereignissen
 
Delphi-Quellcode:
// 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;
Hinweis:

Für die virtual keys gibt es in der Unit Windows Konstanten,
wie z.b.
Delphi-Quellcode:
VK_SHIFT
für die Shift-Taste, etc.
Für Buchstaben nimmst Du am besten
Delphi-Quellcode:
ord('U')
für 'U'.
Achtung, immer GROSSE Buchstaben verwenden.

Habe hier auf der Arbeit keinen Compiler, aber so müsste das stimmen.

Tyrael Y. 6. Aug 2003 14:20

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:

Luckie 6. Aug 2003 14:21

Re: Abfrage von Tastaturereignissen
 
Mein Delphi kennt das Schlüsselwort failed nicht. :roll:

Tyrael Y. 6. Aug 2003 15:12

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 ?

Luckie 6. Aug 2003 15:13

Re: Abfrage von Tastaturereignissen
 
Zitat:

Zitat von Tyrael Y.
... ich wollte es gerade auch testen und mein Delphi kennt failed auch nicht ..... :cry:

.. ich benutze Delphi 5 Pro...
..welche Version benutzt du ?

Steht im Profil. da könntest du deine auch eintragen.

Dannyboy 6. Aug 2003 15:28

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:

Tyrael Y. 6. Aug 2003 16:12

Re: Abfrage von Tastaturereignissen
 
...@Luckie
...habe ich umgehend gemacht, :nerd:

negaH 6. Aug 2003 16:57

Re: Abfrage von Tastaturereignissen
 
Zitat:

Delphi-Quellcode:
if (ssCtrl in Shift) and (ssShift in Shift) and (Key=71) then

Mit Mengen arbeitet man so:
Delphi-Quellcode:
if (Shift * [ssCtrl, ssShift] = [ssCtrl,ssShift]) and (Key=71) then
falls man auch Alt+Strg+Shift+U zulassen will.
Will man nur Strg+Shift, ohne Alt,Maustasten usw., dann ist es so richtig:
Delphi-Quellcode:
if (Shift = [ssCtrl,ssShift]) and (Key=71) then
Gruß Hagen

Assarbad 6. Aug 2003 19:36

Re: Abfrage von Tastaturereignissen
 
Warum registrierst du dir keinen Hotkey?

Hier im Forum suchenRegisterHotKey
RegisterHotKeyRegisterHotKey
[df]RegisterHotKey[/df]
Bei Google suchenRegisterHotKey

Tyrael Y. 7. Aug 2003 07:56

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:

Luckie 7. Aug 2003 11:25

Re: Abfrage von Tastaturereignissen
 
Kann man nicht kucken, welches Frame "aktiv" ist? Habe aber von Frames keine Ahnung.

Tyrael Y. 7. Aug 2003 11:41

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:

negaH 7. Aug 2003 11:50

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 !!

Tyrael Y. 7. Aug 2003 11:57

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