hi all
i still don't understand this :
TColor =packed record
case integer of
0 : (R, G, B, A : Byte);
1 : (C : Cardinal);
end;
i mean 0 and 1 , whats the meaning of theme
hi all
i still don't understand this :
TColor =packed record
case integer of
0 : (R, G, B, A : Byte);
1 : (C : Cardinal);
end;
i mean 0 and 1 , whats the meaning of theme
You can use the case statement to map different types of variables in the same memory space.The types used must be equal size, ie. Cardinal = 4 bytes in this case.
Another exampleCode:MyColor.R := $FF; MyColor.G := $00; MyColor.B := $FF; MyColor.A := $00; // Is equal to MyColor.C := $00FF00FF;
Code:TVector = record case Integer of 0: (x, y, z: Single); 1: (v: array [0..2] of Single); end; MyVector.x := 5.75; MyVector.y := 1.75; MyVector.z := 0.00; // Is equal to MyVector.v[0] := 5.75; MyVector.v[1] := 1.75; MyVector.v[2] := 0.00;
Last edited by vgo; 02-10-2010 at 10:29 AM.
The 1 and 0 don't really mean anything. They just show that there are two different ways to access that piece of memory. During program execution, you can access either R, G, B and A or C to change the whole color at once.
Coders rule nr 1: Face ur bugz.. dont cage them with code, kill'em with ur cursor.
Yeah I found it funky that you can even stick functions and procedures into records as well.
Actually what I've never been able to figure out what 'packed' really does, or maybe I simply forgot. What is the purpose of this keyword and what does it do?
@WILL: Look here http://www.delphibasics.co.uk/RTL.asp?Name=Packed
This is called a variant record. It's similar to C++'s union, but it's not the same, so you can't confuse them and put them two in the same basket. Compare Wikipedia article about unions and variant records.
embedded case in a record is a very useful thing
Bookmarks