Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi wie kann man zwischen zwei SET´s unterscheiden (https://www.delphipraxis.net/107466-wie-kann-man-zwischen-zwei-set%B4s-unterscheiden.html)

bodycounter 28. Jan 2008 11:20


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:
Farbenliste1 = Set of (Rot, Blau, Grün);
Farbenliste2 = Set of (Rot, Gelb, Orange);
Nun versuche ich mit "If in then" das Set abzufragen.
Delphi-Quellcode:
function rot_test:boolean;
Var
   Farben : Farbenliste2;
begin  
   if Rot in Farben then result := true;
end;
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
Delphi-Quellcode:
if Farbenliste2.Rot in Farben then result := true;
probiert, aber das klappt nicht.
Hat jemand eine Idee, wie man es richtig schreibt?

mfg Stefan

mkinzler 28. Jan 2008 11:41

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];

DelphiKlaus 28. Jan 2008 11:55

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

sirius 28. Jan 2008 12:15

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:
Farbenliste1 = Set of (f1Rot, f1Blau, f1Grün);
Farbenliste2 = Set of (f2Rot, f2Gelb, f2Orange);
btw: :gruebel: Ich hätte sogar gedacht, dass der Compiler schon meckern würde bei der Deklaration von Farbenliste2.

Edit: Macht er auch
Zitat:

[Fehler] Unit1.pas(10): Bezeichner redefiniert: 'Rot'

peschai 28. Jan 2008 12:40

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

bodycounter 28. Jan 2008 13:23

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:
TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);
das sich in der Delphi eigenen Classes.pas befindet.
Dann hab ich noch eine 3. Anbieter Komponente installiert die folgendes SET in einer sgr_def.pas hat:
Delphi-Quellcode:
Tsp_ShiftKeys=set of (ssShift, ssAlt, ssCtrl);
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.
Delphi-Quellcode:
procedure Tform1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
   if ssShift in shift then irgentwas;
end;
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?

sirius 28. Jan 2008 13:26

Re: wie kann man zwischen zwei SET´s unterscheiden
 
Ich würde jetzt auf "classes.ssshift" tippen.

taaktaak 28. Jan 2008 13:28

Re: wie kann man zwischen zwei SET´s unterscheiden
 
Schiet, zu langsam...
Applaus!!! :cheer: :cheer: :cheer: :cheer: :cheer:

Christian Seehase 28. Jan 2008 13:35

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.

bodycounter 28. Jan 2008 13:45

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 02:00 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