ShiftState und "=="
-
HalliHallo !
Ich möchte ganz gerne einen ShiftState (Classes::TShiftState) mittels Vergleichsoperator auf ssShift, ssAlt, ssCtrl, ssLeft usw... abprüfen.
Leider teilt mir der Compiler mit, dass der Vergleichsoperator im Typ 'TShiftState' für Argumente des Typs 'Classes__1' nicht implementiert ist.
Wie soll ich denn dann den ShiftState abprüfen?Danke!
Grüße,
TS++
-
Na, überleg doch mal. Man kann ja auch Shift und Strg zusammen gedrückt halten. Was sollte denn dann ShiftState sein? ssShift oder ssCtrl? Schau mal genau in der Hilfe, was TShiftState eigentlich ist. Bei mir steht da:
enum Classes__1 { ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble }; typedef Set<Classes__1, ssShift, ssDouble> TShiftState;
Classes__1 ist ein Enumerationstyp. Wenn du schreibst
Classes__1 MyShift;
dann kann MySift nur Werte von ssShift bis ssDouble annehmen. Hier kannst du schreiben:
if(MyShift == ssLeft) // mach was
Aber was ist nun TShiftState? Das steht bei der Typdeklaration: Set. Und das heißt übersetzt Menge. Aha, und das in den eckigen Klammern bedeutet: TShiftState ist ein Mengentyp, der nur Elemente aus Classes__1 enthalten kann, und zwar alle von ssShift bis ssDouble. Das sind natürlich alle, die es gibt. Schau dir mal in der Hilfe alle Methoden der Klasse Set an. Da wirst du z.B. die Methode Contains() finden. Und was heißt das übersetzt? Genau: "Enthält". Und genau das möchtest du ja wissen - ob deine TShiftState-Instanz z.B. ssShift enthält. Also, dann mal los.
-
Und nächstes Mal einfach die Suchfunktion benutzen, hier gibt's haufenweise Beispiele zur Auswertung von TShiftState. Nicht zu vergessen der obligatorische Verweis auf die FAQ.