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:
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
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:
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:
if ( Shift + [ssCtrl, ssAlt] = Shift ) and ( Key = 's' ) then
MfG
/EDIT:
Zitat von
Lannes:
versuch es mal damit:
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.