Graphic Delphi

Title: Converting HTML Color Names and HTML Color Codes to TColor
Question: This are two very simple, yet useful functions for you, if you are doing a lot of web stuff. There are quite a few defined HTML color names, that these two functions understand and will convert into TColor values and vice versa.
Answer:
Copy the following code and save as unit HTMLColorConversions.
This unit publishes two functions.
Color2HTML will translate a Delphi Color value into the HTML representation. If it finds a matching color name, this will be used, otherwise the Hex code will be returned.
HTML2Color will translate an HTML representation color representation into a Delphi TColor value. It will try to find a match W3C color code name.
The color codes are taken from the W3C home page, should be, hopefully, correct and interpreted by most modern browsers.
The Code
========
unit HTMLColorConversions;
interface
uses
Graphics;
// function to turn a Delphi TColor to HTML Hex Code
function Color2HTML(Color: TColor): String; safecall;
// function to turn an HTML Color (Hex or Name) to a Delphi TColor
function HTML2Color(const HTML: String): Integer; safecall;
implementation
uses
SysUtils;
type
RColor = record
Name: String;
Value: Integer;
end;
const
// the following list shows 140 basic html color names and their corresponding
// HTML hex-values
ColorTable: array[0..140] of RColor = (
(Name: 'aliceblue'; Value: $F0F8FF),
(Name: 'antiquewhite'; Value: $FAEBD7),
(Name: 'aqua'; Value: $00FFFF),
(Name: 'aquamarine'; Value: $7FFFD4),
(Name: 'azure'; Value: $F0FFFF),
(Name: 'beige'; Value: $F5F5DC),
(Name: 'bisque'; Value: $FFE4C4),
(Name: 'black'; Value: $000000),
(Name: 'blanchedalmond'; Value: $FFFFCD),
(Name: 'blue'; Value: $0000FF),
(Name: 'blueviolet'; Value: $8A2BE2),
(Name: 'brown'; Value: $A52A2A),
(Name: 'burlywood'; Value: $DEB887),
(Name: 'cadetblue'; Value: $5F9EA0),
(Name: 'chartreuse'; Value: $7FFF00),
(Name: 'chocolate'; Value: $D2691E),
(Name: 'coral'; Value: $FF7F50),
(Name: 'cornflowerblue'; Value: $6495ED),
(Name: 'cornsilk'; Value: $FFF8DC),
(Name: 'crimson'; Value: $DC143C),
(Name: 'cyan'; Value: $00FFFF),
(Name: 'darkblue'; Value: $00008B),
(Name: 'darkcyan'; Value: $008B8B),
(Name: 'darkgoldenrod'; Value: $B8860B),
(Name: 'darkgray'; Value: $A9A9A9),
(Name: 'darkgreen'; Value: $006400),
(Name: 'darkkhaki'; Value: $BDB76B),
(Name: 'darkmagenta'; Value: $8B008B),
(Name: 'darkolivegreen'; Value: $556B2F),
(Name: 'darkorange'; Value: $FF8C00),
(Name: 'darkorchid'; Value: $9932CC),
(Name: 'darkred'; Value: $8B0000),
(Name: 'darksalmon'; Value: $E9967A),
(Name: 'darkseagreen'; Value: $8FBC8F),
(Name: 'darkslateblue'; Value: $483D8B),
(Name: 'darkslategray'; Value: $2F4F4F),
(Name: 'darkturquoise'; Value: $00CED1),
(Name: 'darkviolet'; Value: $9400D3),
(Name: 'deeppink'; Value: $FF1493),
(Name: 'deepskyblue'; Value: $00BFFF),
(Name: 'dimgray'; Value: $696969),
(Name: 'dodgerblue'; Value: $1E90FF),
(Name: 'firebrick'; Value: $B22222),
(Name: 'floralwhite'; Value: $FFFAF0),
(Name: 'forestgreen'; Value: $228B22),
(Name: 'fuchsia'; Value: $FF00FF),
(Name: 'gainsboro'; Value: $DCDCDC),
(Name: 'ghostwhite'; Value: $F8F8FF),
(Name: 'gold'; Value: $FFD700),
(Name: 'goldenrod'; Value: $DAA520),
(Name: 'gray'; Value: $808080),
(Name: 'green'; Value: $008000),
(Name: 'greenyellow'; Value: $ADFF2F),
(Name: 'honeydew'; Value: $F0FFF0),
(Name: 'hotpink'; Value: $FF69B4),
(Name: 'indianred'; Value: $CD5C5C),
(Name: 'indigo'; Value: $4B0082),
(Name: 'ivory'; Value: $FFF0F0),
(Name: 'khaki'; Value: $F0E68C),
(Name: 'lavender'; Value: $E6E6FA),
(Name: 'lavenderblush'; Value: $FFF0F5),
(Name: 'lawngreen'; Value: $7CFC00),
(Name: 'lemonchiffon'; Value: $FFFACD),
(Name: 'lightblue'; Value: $ADD8E6),
(Name: 'lightcoral'; Value: $F08080),
(Name: 'lightcyan'; Value: $E0FFFF),
(Name: 'lightgoldenrodyellow'; Value: $FAFAD2),
(Name: 'lightgreen'; Value: $90EE90),
(Name: 'lightgrey'; Value: $D3D3D3),
(Name: 'lightpink'; Value: $FFB6C1),
(Name: 'lightsalmon'; Value: $FFA07A),
(Name: 'lightseagreen'; Value: $20B2AA),
(Name: 'lightskyblue'; Value: $87CEFA),
(Name: 'lightslategray'; Value: $778899),
(Name: 'lightsteelblue'; Value: $B0C4DE),
(Name: 'lightyellow'; Value: $FFFFE0),
(Name: 'lime'; Value: $00FF00),
(Name: 'limegreen'; Value: $32CD32),
(Name: 'linen'; Value: $FAF0E6),
(Name: 'magenta'; Value: $FF00FF),
(Name: 'maroon'; Value: $800000),
(Name: 'mediumaquamarine'; Value: $66CDAA),
(Name: 'mediumblue'; Value: $0000CD),
(Name: 'mediumorchid'; Value: $BA55D3),
(Name: 'mediumpurple'; Value: $9370DB),
(Name: 'mediumseagreen'; Value: $3CB371),
(Name: 'mediumpurple'; Value: $9370DB),
(Name: 'mediumslateblue'; Value: $7B68EE),
(Name: 'mediumspringgreen'; Value: $00FA9A),
(Name: 'mediumturquoise'; Value: $48D1CC),
(Name: 'mediumvioletred'; Value: $C71585),
(Name: 'midnightblue'; Value: $191970),
(Name: 'mintcream'; Value: $F5FFFA),
(Name: 'mistyrose'; Value: $FFE4E1),
(Name: 'moccasin'; Value: $FFE4B5),
(Name: 'navajowhite'; Value: $FFDEAD),
(Name: 'navy'; Value: $000080),
(Name: 'oldlace'; Value: $FDF5E6),
(Name: 'olive'; Value: $808000),
(Name: 'olivedrab'; Value: $6B8E23),
(Name: 'orange'; Value: $FFA500),
(Name: 'orangered'; Value: $FF4500),
(Name: 'orchid'; Value: $DA70D6),
(Name: 'palegoldenrod'; Value: $EEE8AA),
(Name: 'palegreen'; Value: $98FB98),
(Name: 'paleturquoise'; Value: $AFEEEE),
(Name: 'palevioletred'; Value: $DB7093),
(Name: 'papayawhip'; Value: $FFEFD5),
(Name: 'peachpuff'; Value: $FFDBBD),
(Name: 'peru'; Value: $CD853F),
(Name: 'pink'; Value: $FFC0CB),
(Name: 'plum'; Value: $DDA0DD),
(Name: 'powderblue'; Value: $B0E0E6),
(Name: 'purple'; Value: $800080),
(Name: 'red'; Value: $FF0000),
(Name: 'rosybrown'; Value: $BC8F8F),
(Name: 'royalblue'; Value: $4169E1),
(Name: 'saddlebrown'; Value: $8B4513),
(Name: 'salmon'; Value: $FA8072),
(Name: 'sandybrown'; Value: $F4A460),
(Name: 'seagreen'; Value: $2E8B57),
(Name: 'seashell'; Value: $FFF5EE),
(Name: 'sienna'; Value: $A0522D),
(Name: 'silver'; Value: $C0C0C0),
(Name: 'skyblue'; Value: $87CEEB),
(Name: 'slateblue'; Value: $6A5ACD),
(Name: 'slategray'; Value: $708090),
(Name: 'snow'; Value: $FFFAFA),
(Name: 'springgreen'; Value: $00FF7F),
(Name: 'steelblue'; Value: $4682B4),
(Name: 'tan'; Value: $D2B48C),
(Name: 'teal'; Value: $008080),
(Name: 'thistle'; Value: $D8BFD8),
(Name: 'tomato'; Value: $FD6347),
(Name: 'turquoise'; Value: $40E0D0),
(Name: 'violet'; Value: $EE82EE),
(Name: 'wheat'; Value: $F5DEB3),
(Name: 'white'; Value: $FFFFFF),
(Name: 'whitesmoke'; Value: $F5F5F5),
(Name: 'yellow'; Value: $FFFF00),
(Name: 'yellowgreen'; Value: $9ACD32)
);
function Color2HTML(Color: TColor): String;
var
I: Integer;
function Swap(Color: TColor): TColor;
begin
Result :=
Color and $FF0000 shr 16 +
Color and $00FF00 +
Color and $0000FF shl 16;
end;
begin
try
Result := '';
for I := Low(ColorTable) to High(ColorTable) do
if ColorTable[I].Value = Swap(Color) then
begin
Result := ColorTable[I].Name;
Break;
end;
// try to find match in table
// convert RGB color to HTML color string
if Result = '' then
Result := '#' +
IntToHex(Byte(Color), 2) +
IntToHex(Byte(Color shr 8), 2) +
IntToHex(Byte(Color shr 16), 2);
except
Result := '#000000';
end;
end;
function TranslateColorName(Name: String): Integer;
var
I: Integer;
begin
Result := 0;
for I := Low(ColorTable) to High(ColorTable) do
// find matching color name
if ColorTable[I].Name = Name then
begin
// return RGB colors
Result :=
Byte(ColorTable[I].Value shr 16) +
Byte(ColorTable[I].Value shr 8) shl 8 +
Byte(ColorTable[I].Value) shl 16;
Break;
end;
end;
function HTML2Color(const HTML: String): Integer;
var
Offset: Integer;
begin
try
// check for leading '#'
if Copy(HTML, 1, 1) = '#' then
Offset := 1
else
Offset := 0;
// convert hexa-decimal values to RGB
Result :=
Integer(StrToInt('$' + Copy(HTML, Offset + 1, 2))) +
Integer(StrToInt('$' + Copy(HTML, Offset + 3, 2))) shl 8 +
Integer(StrToInt('$' + Copy(HTML, Offset + 5, 2))) shl 16;
except
// try for color names
Result := TranslateColorName(LowerCase(HTML));
end;
end;
end.
Content Ace