Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Harte nuss! Extrem typecasting schon in der deklaration :)
maximus - Di 11.02.03 23:54
Titel: Harte nuss! Extrem typecasting schon in der deklaration :)
Hallo.
Ich möchte einen typ erstellen, den ich auf multiplen ebenen ansprechen kann. zB:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| type TdmRGB = Packed record case Integer of 0 : (b,g,r,a : Byte); 1 : (Color32 : cardinal); end;
TdmC = TdmRGB as cardinal; // Hier liegt das problem, ich will, dass er TdmC als cardinal behandelt! |
...natürlich geht es nicht mit as! Aber man muss dem compiler doch verklickern können, dass er ein 32 bit grosses record als cardinal betrachtet? oder ist es hoffnungslos?
Quelltext
1: 2: 3: 4: 5: 6: 7:
| var col1: TdmC; var col2: TdmRGB; var alpha: byte; ... col1 := $FF45FF12; col2 := col1; alpha := col2.a; |
Wär halt geil :D (Das man das auch anders typecasten kann ist mir)
Ideen?
mfg mx
AXMD - Mi 12.02.03 00:20
Hi,
echt eine harte Nuss. Bist du dir sicher, dass das überhaupt möglich ist?
AXMD
DaRkFiRe - Mi 12.02.03 02:08
Könnte mir das nur über Speicherkopieren Vorstellen
Quelltext
1: 2: 3: 4: 5: 6: 7:
| var col1: TdmC; var col2: TdmRGB; var alpha: byte; ... col1 := $FF45FF12; CopyMemory(@col2,@col1,sizeof(col1)); //funzt nur, wenn sizeof(col1)<=sizeof(col2) -> andernfalls: umschreiben alpha := col2.a; |
maximus - Mi 12.02.03 02:13
Ich bin keinesfalls sicher :) Aber das bringt mich ja nicht davon ab zu fragen...delphi hält ja immernoch möglichkeiten und überraschungen für einen bereit.
Wenn ich schon im typ casten könnte, dann könnte ich mir das an tausend anderen stellen sparen.
maximus - Mi 12.02.03 02:27
@DarkFire: klar is des ne möglichkeit...aber dachte eher anne schöne saubere syntax lösung.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| var col1: cardinal; var col2: ^TdmRGB; var alpha: byte; ... col1 := $FF45FF12; col2 := @Col1; alpha := col2.a; ShowMessage(intToStr(alpha)); |
so funktioniert es wunderbar...aber eigentlich auch nicht was ich wollte! Ist wahrscheinlich die beste alternative zu meiner verrückten idee 8)
mfg
[/quote]
Brueggendiek - Mi 12.02.03 03:33
Titel: Re: Harte nuss! Extrem typecasting schon in der deklaration
Hallo Maximus!
Natürlich geht das! Du mußt nur eine Variable vom Typ TdmRGB deklarieren und kannst dann auf die Felder zugreifen. Die belegen den gleichen Platz im Speicher und sind deshalb voneinander abhängig.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type var dmRGB: TdmRGB; wert: Cardinal;
dmrgb.b:=127; dmrgb.g:=125; dmrgb.r:=0; dmrgb.a:=0;
wert := dmRGB.color32; |
Mit einer einfachen Zuweisung an dmRGB geht das nicht, es muß auch ein Element angegeben werden.
Gruß
Dietmar Brüggendiek
maximus - Mi 12.02.03 11:39
8) Is klar, deshalb hab ich den typ ja so erstellt! War wohl nur 'ne fixe idee von mir...äh dass element-frei machen zu wollen. Hätt ja sein können.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!