Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi boolean ohne variable? (https://www.delphipraxis.net/36031-boolean-ohne-variable.html)

Pseudemys Nelsoni 14. Dez 2004 22:37

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;

paresy 14. Dez 2004 22:47

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 )

Chewie 14. Dez 2004 23:55

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.

Christian Seehase 15. Dez 2004 00:09

Re: boolean ohne variable?
 
Moin Mario,

Zitat:

Zitat von Pseudemys Nelsoni
irgendwie muss doch entschieden werden welcher variante teil benutzt wird

jein ;-)

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;

Pseudemys Nelsoni 15. Dez 2004 00:39

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

Christian Seehase 15. Dez 2004 00:52

Re: boolean ohne variable?
 
Moin Mario,

Zitat:

Zitat von Pseudemys Nelsoni
irgendwie seh ich im code nirgends wo das eine bedeutung haette

das war auch Sinn und Zweck der Zahlenwahl.
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:
type
  TcsMyType = record
    bRecordType : Byte;
    case Byte of
      $AA : (.....); // Aufteilung, wenn bRecordType = $AA ist
      $BB : (.....); // Aufteilung, wenn bRecordType = $BB ist
      // ...
  end;
Wenn Du nur zwei Varianten unterscheiden musst reicht boolean, bis zu 256 dann Byte usw.
Grösser schadet nicht.

Pseudemys Nelsoni 15. Dez 2004 01:23

Re: boolean ohne variable?
 
danke christian, dann ist mir das nun klar =)

glkgereon 15. Dez 2004 07:03

Re: boolean ohne variable?
 
nochmal ne frage...also so:

Delphi-Quellcode:
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;
ist das so korrekt?
mit kommentaren, ends und allem?

Hansa 15. Dez 2004 07:22

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:

Oxmyx 15. Dez 2004 15:13

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 23:09 Uhr.
Seite 2 von 4     12 34      

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