![]() |
wie kann man zwischen zwei SET´s unterscheiden
Hallo liebe Delphi User.
Ich habe ein Problem das ich nicht lösen konnte, ich hoffe einer von euch hat ne Idee. Ich habe zwei SET´s mit teilweise gleichen Inhalt. Hier im Beispiel die Farbe Rot.
Delphi-Quellcode:
Nun versuche ich mit "If in then" das Set abzufragen.
Farbenliste1 = Set of (Rot, Blau, Grün);
Farbenliste2 = Set of (Rot, Gelb, Orange);
Delphi-Quellcode:
Ich dachte das sollte klappen, weil ja die Variable Farben aus dem Set Farbenliste2 abgeleitet ist. Nun scheint der Compiler aber das Rot aus der Farbenliste1 zu nehmen und wirst mir einen "[Error] E2089 Invalid typecast" aus. Ist ja irgentwie auch richtig, weil das Rot aus Farbenliste1 nichts mit dem Rot aus der Farbenliste2 zu tun hat. Aber wie kann ich nun auf das Rot aus der Farbenliste2 prüfen? Hab es mit
function rot_test:boolean;
Var Farben : Farbenliste2; begin if Rot in Farben then result := true; end;
Delphi-Quellcode:
probiert, aber das klappt nicht.
if Farbenliste2.Rot in Farben then result := true;
Hat jemand eine Idee, wie man es richtig schreibt? mfg Stefan |
Re: wie kann man zwischen zwei SET´s unterscheiden
Delphi-Quellcode:
type
TFarben = Set of (Rot, Blau, Gruen, Orange); Const Farbenliste1: TFarben = [ Rot, Blau, Gruen]; Farbenliste2: TFarben = [ Rot, Blau, Orange]; |
Re: wie kann man zwischen zwei SET´s unterscheiden
Hallo,
ist das wirklich die Lösung? Im ersten Beitrag ist Farbenliste1 eine Menge, die die Farben rot, blau und grün aufnehmen kann. Im zweiten Beitrag eine Menge, die diese Farben immer enthält. Oder versteh ich da was nicht? Klaus |
Re: wie kann man zwischen zwei SET´s unterscheiden
Du stellst deinem Rot, Blau und Grün noch ein zwei Buchstaben voran, welche sich auf die Farbeliste beziehen,
also:
Delphi-Quellcode:
btw: :gruebel: Ich hätte sogar gedacht, dass der Compiler schon meckern würde bei der Deklaration von Farbenliste2.
Farbenliste1 = Set of (f1Rot, f1Blau, f1Grün);
Farbenliste2 = Set of (f2Rot, f2Gelb, f2Orange); Edit: Macht er auch Zitat:
|
Re: wie kann man zwischen zwei SET´s unterscheiden
Hallo
Das folgenden wird bereits vom compiler als Fehler zurückgewiesen, da "Rot" redefiniert wird
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
type Farbenliste1 = Set of (Rot, Blau, Grün); Farbenliste2 = Set of (Rot, Gelb, Orange); //-> hier bereits compiler fehlermeldung! Var Farben : Farbenliste2; begin ... |
Re: wie kann man zwischen zwei SET´s unterscheiden
Hallo, danke schon mal für die Antworten.
Aber, so ist das immer wenn man pseudo Beispiel macht. Nartürlich sind die zwei SET´s nicht in der gleichen Unit difiniert. Im echten Problem handelt es sich bei mir um das
Delphi-Quellcode:
das sich in der Delphi eigenen Classes.pas befindet.
TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);
Dann hab ich noch eine 3. Anbieter Komponente installiert die folgendes SET in einer sgr_def.pas hat:
Delphi-Quellcode:
Wie ihr seht ist ssShift, ssAlt, ssCtrl doppelt vergeben. Nun will ich einfach nur beim KeyUp Event prüfen ob die Shift Taste gedrückt war.
Tsp_ShiftKeys=set of (ssShift, ssAlt, ssCtrl);
Delphi-Quellcode:
Dabei kommt halt die Compiler Meldung [Error] E2008 Incompatible types, ist ja auch klar weil er ssShift aus der sgr_def.pas nimmt und für shift das aus der classes. Den Code aus der classes und der sgr_def will ich nartürlich nicht ändern. Irgentwelche vorschläge wie ich den compiler sagen kann, das er das ssShift aus der classes benutz?
procedure Tform1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if ssShift in shift then irgentwas; end; |
Re: wie kann man zwischen zwei SET´s unterscheiden
Ich würde jetzt auf "classes.ssshift" tippen.
|
Re: wie kann man zwischen zwei SET´s unterscheiden
Schiet, zu langsam...
Applaus!!! :cheer: :cheer: :cheer: :cheer: :cheer: |
Re: wie kann man zwischen zwei SET´s unterscheiden
Ein weitere Möglichkeit wäre wohl die Reihenfolge zu vertauschen, in der die beiden Units eingebunden werden.
|
Re: wie kann man zwischen zwei SET´s unterscheiden
DANKE!
Der Tipp mit "classes.ssshift" ist genau richtig. :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 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