Autor Beitrag
Camputa
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 20



BeitragVerfasst: Sa 08.05.04 14:14 
Moin,

wie ihr merkt werde ich langsam mal wieder ein bissle aktiver im Delphi-Forum :), mag daran liegen das ich mir meine 15 Punkte in Informatik wieder sichern muss...

So ich habe folgende Überlegung:

ich hab viele Felder, jedes Feld hat ein Bild, wenn das bild gesetz wird bekommt das Feld über den Tag einen wert zugewiesen....
Dieser WErt entspricht einem Status mitdem man abfragen kann, welches Bild das Feld hat...
soweit die theorie, nun zur Praxis:

Ich habe mir folgende Überlegung gemacht:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
es gibt folgende verschiedene "Flags":
0: ohne
1: Strich oben
2:          rechts
4:          unten
8:          links
16: kreuz rot
32: kreuz blau

mit den werten ist eine deutliche zuweisung von allen Statusen möglich:
strich oben und rechts wäre dann z.b. 1 + 2 ALSO 3 usw..

nun fehlt mir scheinbar der kopf um zu überlegen wie ich dieses konzept nu durchsetze...
ich muss abfragen könne in der richtung ist das flag mit dem wert 4 (unten) gesetzt...

jemand ideen?? - wer die zahlen nicht versteht sollte mal ans Binärsystem denken :)

Gruß
Camputa

_________________
Rechtschreibfehler sind beabsichtig, und dienen der Unterhaltung.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 08.05.04 14:39 
Mach eine Or Verknüpfung. Und abfragen tust du sie. in dem du mit "and" das abzufragende Bit maskierst.
ausblenden Delphi-Quelltext
1:
2:
if (3 and 1) = 1 then 
// Flag 1 gesetzt.
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: Sa 08.05.04 15:03 
Hi.

Das is ja schön und gut aber zu deiner schwammigen frage kann dir nur difuse tips geben und nix konkretes!

Also was dein konzept für die status-flags angeht, so könnte man mit es delphi viel eleganter, mit enun-typen und sets (mengen) lösen.

Ein Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
Type
  TStatusEnum = (seOben, seRechts, seUnten, seLinks, seKreuzRot, seKreuzBlau );

  // Sets sind nix anderes als bit-flags, wo jedes bit einem element des enum-typs zugeordnet sind  
  TStatusFlags = set of TStatusEnum;

var status:TStatusFlags ;

// flags setzen
status := [seRechts, seKreuzBlau];
...
include(Status, seUnten);
...
Status := stauts - [seUnten];

// Abfrage
if seRechts in Status then DrawLine(seRechts);
//etc.


Sets sind ideal um bit-flags elegant zu kapseln. zB. status := status + [seRechts, seUnten] ist nix anderes als status := status AND 0x01100000 etc. alle arten von bit-operation sind mit sets möglich, einfach mal in die OH linsen :D ...das bit wird intern immer an der stelle gesetz, wie es das enum-element anzeigt! zB. integer(seUnten); sollte 2 ergeben dh. bit 2 wird gesetzt (Null.basierter.index).


Vielleicht hilft dir das ja!?

_________________
mfg.
mâximôv
Camputa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 20



BeitragVerfasst: Sa 08.05.04 15:20 
das könnte mir wirklich helfen....

sag ma kann ich das irgendwie im tag speichern, oder muss ich dafür nen extra array machen?

_________________
Rechtschreibfehler sind beabsichtig, und dienen der Unterhaltung.
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: Sa 08.05.04 15:48 
Camputa hat folgendes geschrieben:
das könnte mir wirklich helfen....

sag ma kann ich das irgendwie im tag speichern, oder muss ich dafür nen extra array machen?


Du kannst es mit nem kleinen dirty trick casten:
ausblenden Delphi-Quelltext
1:
  xyz.tag := pByte(@status)^;					


Allerdings, wenn du die enums noch erwieterst, dann musst du statt pByte -> pWord oder pCardinal nehmen, jenachdem wie lang die bit folge ist -> 8, 16, 32 !

_________________
mfg.
mâximôv
Camputa Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 20



BeitragVerfasst: Sa 08.05.04 21:49 
danke

das delphi forum funktioniert doch immer wieder :)

_________________
Rechtschreibfehler sind beabsichtig, und dienen der Unterhaltung.