colori Delphi (TColor
) sono XXBBGGRR
quando non da una tavolozza o un colore speciale.
Vedere this article per ulteriori dettagli sul formato (e altri casi speciali). The article indicato da Christian.K contiene anche alcuni dettagli sui casi speciali.
Colori standard
da convertire in un colore standard si dovrebbe usare qualcosa di simile a:
var color = Color.FromArgb(0xFF, c & 0xFF, (c >> 8) & 0xFF, (c >> 16) & 0xFF);
Per convertire in esadecimale,:
string ColorToHex(Color color)
{
return string.Format("#{0:X2}{1:X2}{2:X2}",
color.R, color.G, color.B);
}
Colori di sistema
Per il sistema colori (valori negativi nel tuo database), sono semplicemente i Windows Consta nts mascherati da 0x80000000
.
Grazie a David Heffernan per le informazioni.
codice di esempio
Color DelphiColorToColor(uint delphiColor)
{
switch((delphiColor >> 24) & 0xFF)
{
case 0x01: // Indexed
case 0xFF: // Error
return Color.Transparent;
case 0x80: // System
return Color.FromKnownColor((KnownColor)(delphiColor & 0xFFFFFF));
default:
var r = (int)(delphiColor & 0xFF);
var g = (int)((delphiColor >> 8) & 0xFF);
var b = (int)((delphiColor >> 16) & 0xFF);
return Color.FromArgb(r, g, b);
}
}
void Main()
{
unchecked
{
Console.WriteLine(DelphiColorToColor((uint)(-2147483646)));
Console.WriteLine(DelphiColorToColor(
(uint)KnownColor.ActiveCaption | 0x80000000
));
Console.WriteLine(DelphiColorToColor(0x00FF8000));
}
}
fonte
2011-11-29 17:14:52
Il modo migliore per convertire un colore di sistema RGB è quello di fare come la VCL fa. Chiama ['GetSysColor()'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms724371 (v = vs.85).aspx) passando 'c e 0x000000FF'. In altre parole, questi non sono definiti VCL, sono * sistemi * definiti. –
@David, nel tuo commento hai fornito la risposta esatta, non la postesti come risposta? –
@PA. Il commento è solo una piccola parte della risposta. Spero che VirtualBlackFox includa il suggerimento in questa risposta e sia quindi in grado di rimuovere la lista piuttosto lunga e noiosa. –