Autor Beitrag
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Di 04.03.03 19:55 
Hallo!

Ich habe mal wieder ein kleines Problem: Ich würde gerne einzelne Optionen in einer Integer-Variablen speichern, so wie zum Beispiel der 2. Parameter Attr der Funktion FindFirst. Ich weiss net so recht wie ich es erklären soll, deshalb nenne ich jetzt ein Beispiel: In einer Garage dürfen 3 Autotypen stehen: Audi, BMW, Ford. Wie muss ich jetzt die Integerwerte für diese 3 Konstanten wählen, damit ich nachher überprüfen kann, welche Autos in der Garage stehen:
ausblenden Quelltext
1:
2:
3:
4:
5:
  aAudi = x;
  aBMW = y;
  aFord = z;
  
  if (AUTOS and aAudi) > 0 ....
Ich hoffe ich habt mich verstanden, ich wusste nicht wirklich wie ich es erklären sollte. Für den Titel ist mir auch nix besseres eingefallen, sorry deshalb...

Gruß wulfskin!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Di 04.03.03 20:12 
Hallo

meisnt du sowas?
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TForm1.Button1Click(Sender: TObject);
type Tauto = (BMW,Audi,Ford);
Var auto:TAuto;
begin
  auto:=BMW;
  if auto=BMW then
    begin
      beep;
    end;
end;

oder für mehrere Möglichkeiten

procedure TForm1.Button2Click(Sender: TObject);
type Tauto = set of (BMW,Audi,Ford);
Var auto : Tauto;
begin
  auto:=[BMW,Ford];
  if Bmw in auto then
    begin
      beep;
    end;
end;



Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
mars
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: Di 04.03.03 20:19 
Ich bin mir auch nicht sicher, ob ich dich verstanden habe..Meinst du vielleicht, dass man mit einer Zahl alleine mehrere Boolean-Werte miteinander darstellen kann? Das würde folgendermassen gelöst:
BMW: 1
Audi: 2
Ford: 4
...: 2^x

Beispiel: (BMW and FORD) = 5

Hoffe ich habe dich richtig verstanden...
wulfskin Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Di 04.03.03 20:37 
Danke Mars!
Genau das meinte ich! Mal schauen ob es bei mir klappt..!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Di 04.03.03 21:35 
IMHO arbeiten sets intern genauso.

Wenn dein problem ist, es als integer haben zu wollen, kannst auch...

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
type Tauto = set of (BMW,Audi,Ford); 
Var auto:TAuto;  
      i : integer;
begin 
  auto:= [BMW,Ford];
  i := word(auto);
  showMessage(intToStr(i));
end;


...kannst dann sogar aus dem werten den enum-namen als string ableiten:

ausblenden Quelltext
1:
2:
3:
uses typInfo;
...
s := GetEnumName(TypeInfo(TAuto), i);

Sets haben halt besseren service :wink:

mfg mx.
mars
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: Mi 05.03.03 12:27 
Hab ich das jetzt richtig verstanden: Elemente in Sets haben eine Reihenfolge? Das würde sich doch mit ihrer Definition widersprechen...
Genau weil sie keine Reihenfolge haben, kann man doch auch nicht mehrere gleiche Objekte einfügen...
Oder habe ich da etwas absolut missverstanden?
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Mi 05.03.03 15:02 
Zitat:
Oder habe ich da etwas absolut missverstanden?

Ja...aber nur das mit der Reihenfolge! Sets haben keine Reihenfolge...ich denke jedes Flag (wert) hat ein bit, das anzeigt, ob es sich im set befindet oder nicht! So gesehen haben die bits ne reihenfolge, aber das liegt in der natur der sache :wink:

Wie kommst du jetzt eigentlich drauf?
mars
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: Mi 05.03.03 22:39 
Ich hab nur letzthin mit Sets gearbeitet bis mir am Schluss eingefallen ist, dass eine Reihenfolge der Elemente nicht schlecht wäre :wink:
Ich musste dann auf eine TObjectList umsteigen...
maximus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: Do 06.03.03 11:11 
Zitat:
Ich musste dann auf eine TObjectList umsteigen...

Das versteh ich jetzt wieder nicht...was haben sets mit objekten zu tun?


PS: Mir ist dort oben ein kleiner fehler unterlaufen...Ich kann den Enum-namen natürlich nur aus nem EnumTyp-wert ableiten und nicht aus nem set:
ausblenden Quelltext
1:
2:
3:
4:
5:
uses typInfo; 
... 
typ TAuto = (AUDI, BMW, VW);
...
s := GetEnumName(TypeInfo(TAuto),Word(BMW));
mars
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: Do 06.03.03 12:35 
maximus hat folgendes geschrieben:

Das versteh ich jetzt wieder nicht...was haben sets mit objekten zu tun?


Nicht viel, deshalb bin ich ja auch umgestiegen... :D