Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi keydown Strg+ALt+s gedrückt? (https://www.delphipraxis.net/97901-keydown-strg-alt-s-gedrueckt.html)

gandime 18. Aug 2007 09:34


keydown Strg+ALt+s gedrückt?
 
Hi,
wie finde ich heraus ob Strg+ALt+s gedrückt ist, da
Delphi-Quellcode:
KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
ja nur Shift und Key mitliefert und somit würde mir noch Alt oder Strg fehlet jehnachdem welches als erstes gedrückt wurde.
Wie bekomme ich das hin?

mfg
ganidme

timog 18. Aug 2007 09:43

Re: keydown Strg+ALt+s gedrückt?
 
Hi,

vielleicht hilft Dir ja ein Blick in die Hilfe :-)

Delphi-Quellcode:
TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);
Viele Grüße

Timo

gandime 18. Aug 2007 09:48

Re: keydown Strg+ALt+s gedrückt?
 
nee tut es nicht da die Tasten ja gleichzeitig gedrückt werden und da TShiftState immer nur einen Wert haben kann geht das leider nicht:
Delphi-Quellcode:
if (Shift=[ssCtrl]) and (Shift=[ssAlt]) then

Lannes 18. Aug 2007 09:59

Re: keydown Strg+ALt+s gedrückt?
 
Hallo,

versuch es mal damit:
Delphi-Quellcode:
if Shift = [ssAlt, ssCtrl] then

Muetze1 18. Aug 2007 10:01

Re: keydown Strg+ALt+s gedrückt?
 
Zitat:

Zitat von gandime
nee tut es nicht da die Tasten ja gleichzeitig gedrückt werden und da TShiftState immer nur einen Wert haben kann geht das leider nicht:
Delphi-Quellcode:
if (Shift=[ssCtrl]) and (Shift=[ssAlt]) then

Das behauptest du. Schonmal gefragt warum du hier eckige Klammrn schreiben musst bei dem Vergleich aber z.B. bei
Delphi-Quellcode:
if Label1.Alignment = alTop then
nicht?

[] ist eine Mengenangabe und eine Menge (deutlich erkennbar an dem Set Of in der Deklaration) ist - wie der Name schon sagt - eine Menge und diese kann kein Element sowie auch mehrere Elemente enthalten. Ganz im Gegensatz zu einer Enumeration (wie z.B. TAlignment beim Label, erkennbar am nicht vorhandenen Set Of) welches nur ein Element enthalten kann.

Zu deiner Abfrage: Es gibt bei Mengen den Operator in mit dem du abfragen kannst ob ein bestimmtes Element in der Menge enthalten ist. von daher z.B. so:

Delphi-Quellcode:
if ( ssCtrl in Shift ) and ( ssAlt in Shift ) and ( Key = 's' ) then
Andere Möglichkeit: Wenn du der Menge die beiden Elemente ssAlt und ssShift hinzufügst und die sie danach immernoch den gleichen Inhalt hat, dann sind beide Elemente enthalten, sprich:

Delphi-Quellcode:
if ( Shift + [ssCtrl, ssAlt] = Shift ) and ( Key = 's' ) then
MfG

/EDIT:

Zitat:

Zitat von Lannes
versuch es mal damit:
Delphi-Quellcode:
if Shift = [ssAlt, ssCtrl] then

Damit würdest du prüfen ob in der Menge nur ssAlt und ssCtrl enthalten sind. Wenn dort vllt. eine Maustaste gedrückt ist (ssLeft) oder vllt. Shift (ssShift), dann würde die Abfrage fehlschlagen. Ein direkter Mengenvergleich geht genauso, aber damit sind dann auch alle anderen Möglichkeiten ausgeschlossen. Von daher musst du schauen, welches Verhalten du erreichen willst.

gandime 18. Aug 2007 10:02

Re: keydown Strg+ALt+s gedrückt?
 
geht ja doch so danke :-)

Lannes 18. Aug 2007 10:15

Re: keydown Strg+ALt+s gedrückt?
 
Hallo,

Zitat:

Zitat von Muetze1
Damit würdest du prüfen ob in der Menge nur ssAlt und ssCtrl enthalten sind. Wenn dort vllt. eine Maustaste gedrückt ist (ssLeft) oder vllt. Shift (ssShift), dann würde die Abfrage fehlschlagen. Ein direkter Mengenvergleich geht genauso, aber damit sind dann auch alle anderen Möglichkeiten ausgeschlossen.

das ist klar, für die Prüfung auf Strg+Alt+s ist es ausreichend, denn ich denke das z.B. bei Strg+Alt+Shift+s das Ergebnis False sein soll.
Zitat:

Zitat von Muetze1
Von daher musst du schauen, welches Verhalten du erreichen willst.

genau.

Muetze1 18. Aug 2007 10:24

Re: keydown Strg+ALt+s gedrückt?
 
... das war nicht auf dich bezogen sondern als Erklärung für gandime gedacht. Schliesslich sieht deine Lösung anders aus als das was ich beschrieben habe und da diese Lösung noch fehlte wollte ich sie gleich noch erklären und den Unterschied festmachen. Deine ist genauso wenig falsch wie schlecht wie andere Lösung und so sollte es auch nicht rüberkommen. Sorry.

Lannes 18. Aug 2007 11:42

Re: keydown Strg+ALt+s gedrückt?
 
Hallo,

ist nicht so rübergekommen :) ,
seh meinen Beitrag als zusätzliche Hinweis zu Deinen guten und ausführlichen Erläuterungen.


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