Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#32

Re: Erklärung von record (Delphihilfe unverständlich :))

  Alt 2. Nov 2006, 12:55
Spätestens seit BDS 2006 kann man in Records auch Methoden verwenden.

Zitat von 3_of_8:
Beispiel:
Delphi-Quellcode:
type
  TARGB=record
  case Integer of
  0: (Value: Integer);
  1: (A, R, G, B: Byte);
  end;

//...
myARGB.Value:=$000000FF;
//...ist das gleiche wie...
myARGB.R:=255;
Nee. Nicht ganz (aber das weisst Du selber). Die Zeile
myARGB.Value:=$000000FF; verändert alle vier Bytes (A=255 und R,G,B = 0), während
myARGB.R:=255; Nur das eine Byte (Das zweite von rechts ) verändert.

Ein 'Record' ist imho ein Überbleibsel aus den Anfängen der strukturierten Programmierung. Um alle Bits eines Bytes (in Standardpascal) anzusprechen, blieb nur dieses Konstrukt (AND/OR auf Byte-Ebene ging nicht, einer der Gründe warum es dann mal 'Turbopascal 1.0' gab):
Delphi-Quellcode:
Type
  TNibble = 0..15;
  TBitsNibblesAndByte = Packed Record
    Case Integer Of
     0 : (TheByte : 0..255);
     1 : (TheNibbles : Array [0..1] Of TNibble);
     2 : (The Bits : Array [0..7] Of Boolean);
  End;
Das 'packed' veranlasst(e) den Compiler, das Record so dicht wie möglich zu packen. Da ein Boolean genau ein Bit benötigt, ein Nibble (0..15) genau 5 bits, kann man so bei einem Byte sowohl auf die Nibbles (halbe Bytes) als auch auf die einzelnen Bits zugreifen. Leider klappt das mit dem Packed heute nicht mehr.

Bei der Programmierung von Treibern (ja ja, ging früher, unter Win32 nicht mehr so leicht) sind häufig die Statusinformationen in den einzelnen Bits eines Statusbytes/Wortes kodiert. Durch die Deklaration eines geeigneten 'Packed Records' konnte man dann sehr elegant auf die einzelnen Informationen zugreifen. Heute verwendet man Masken und AND bzw. OR

Soweit ich weiss (bin aber C-Laie), dürfte das heute in C auch noch gehen, das weiss ich aber nicht.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat