![]() |
Re: boolean ohne variable?
@paresy, das verstehe ich nicht, irgendwie muss doch entschieden werden welcher variante teil benutzt wird, in den beispiel, siehe ersten post, wann ist da true und wann false?
@dizzy, danke das erklärt das fehlende end; |
Re: boolean ohne variable?
benutz mal das auto completion feature von delphi... dann zeigt er dir folgende möglichkeiten an:
Header : record //true teil Value : DWORD; Junk: array[0..1023] of Char; //false teil Str : array[0..1023] of Char; d.h. -> du hast die wahl für welchen teil du dich entscheidest. du kannst auch beiden teilen was zuweisen, jedoch überschneiden sich die sachen dann im speicher was wahrscheinlich nicht sinn und zweck erfüllt... vllt jedoch auch mal nützlich sein kann ( hab nur grad keine idee ) |
Re: boolean ohne variable?
Angewandt wird das ganze z.B. bei Ip-Adressen: Dort gibt es die Möglichkeit, eine 32Bit-Zahl zu setzen oder aber 4 8Bit-Zahlen. Da die 4x8 Bit den gleichen Speicherbereich adressieren wie die 1x32 Bit, spielt das keine Rolle.
|
Re: boolean ohne variable?
Moin Mario,
Zitat:
Das entscheidest Du, indem Du das entsprechende Feld angibst. Vielleicht wird es mit einem Beispiel deutlicher:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
type TcsMyVariant1 = record case boolean of true : (dwDWORD : DWORD); false : (bByte0 : Byte; bByte1 : Byte; bByte2 : Byte; bByte3 : Byte;) end; TcsMyVariant2 = record case byte of 8 : (dwDWORD : DWORD); 37 : (bByte0 : Byte; bByte1 : Byte; bByte2 : Byte; bByte3 : Byte;) end; var mvWork1 : TcsMyVariant1; mvWork2 : TcsMyVariant2; begin mvWork1.dwDWORD := $FFEEDDCC; ShowMessage(IntToHex(mvWork1.bByte3,2)+#13#10+ IntToHex(mvWork1.bByte2,2)+#13#10+ IntToHex(mvWork1.bByte1,2)+#13#10+ IntToHex(mvWork1.bByte0,2)); mvWork2.bByte0 := $CC; mvWork2.bByte1 := $DD; mvWork2.bByte2 := $EE; mvWork2.bByte3 := $FF; ShowMessage(IntToHex(mvWork2.dwDWORD,8)); end; |
Re: boolean ohne variable?
moin christian,
danke für dein beispiel :] was ich aber nun nicht verstehe ist "8" bzw "37" bei deinem 2ten rekord, irgendwie seh ich im code nirgends wo das eine bedeutung haette |
Re: boolean ohne variable?
Moin Mario,
Zitat:
Sie haben keine Bedeutung. Solange Du für jede Variante einen Wert angibst, der zum Wertebereich des Ordinaltyps im Case angibst, kannst Du Werte nehmen, wie Du gerade willst. Unter Umständen können die Werte auch der Dokumentation dienen, z.B.
Delphi-Quellcode:
Wenn Du nur zwei Varianten unterscheiden musst reicht boolean, bis zu 256 dann Byte usw.
type
TcsMyType = record bRecordType : Byte; case Byte of $AA : (.....); // Aufteilung, wenn bRecordType = $AA ist $BB : (.....); // Aufteilung, wenn bRecordType = $BB ist // ... end; Grösser schadet nicht. |
Re: boolean ohne variable?
danke christian, dann ist mir das nun klar =)
|
Re: boolean ohne variable?
nochmal ne frage...also so:
Delphi-Quellcode:
ist das so korrekt?
type
TTest = record Variable:Typ; case Typ of //bezieht sich auf die zuletzt genannte Variable des Typs 'Typ' Wert1: (a:Typa, b:Typb);//Fall 1 Wert2: (x:Typx, y:Typy);//Fall 2 end; mit kommentaren, ends und allem? |
Re: boolean ohne variable?
Ich empfehle, dieses Thema nicht zu vertiefen. :mrgreen:
Warum ? 1. wie man sieht, führen Varianten für ziemliche Verwirrung. :shock: 2. sie bringen keinen Vorteil. 3. Aus Sicht einer Datenbank ist es völliger Unsinn, es geht nämlich auch, einen Typ anzulegen, der in Abhängigkeit eines Wertes 1 Byte oder 10000 belegt. In diesem Falle müßten dann 10000 Byte belegt werden bei jedem Datensatz. Deshalb : Finger weg ! :warn: |
Re: boolean ohne variable?
Natürlich hat es einen Vorteil. Stell dir mal einen mathematischen Vektor vor. In manchen Fällen willst du, dass die Komponenten x, y und z sind. In anderen Fällen willst du x1, x2 und x3. In anderen vielleicht dann u, v, w. So kannst du alle Varianten in einem Vektortyp unterbringen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:56 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