使用StringToColor我想分配一些顏色標記 - :我的形式(TNewStaticText財產顏色TColor;讀寫)。在Inno Setup的
我有我的顏色存儲爲'$ RRGGBB'(字符串),我想使用Delphi函數StringToColor()將其轉換爲TColor,但如果我在腳本中使用此函數,Inno安裝程序會顯示錯誤。 如何告訴Inno Setup使用此功能或如何將字符串轉換爲Inno中的TColor以使用此屬性?
使用StringToColor我想分配一些顏色標記 - :我的形式(TNewStaticText財產顏色TColor;讀寫)。在Inno Setup的
我有我的顏色存儲爲'$ RRGGBB'(字符串),我想使用Delphi函數StringToColor()將其轉換爲TColor,但如果我在腳本中使用此函數,Inno安裝程序會顯示錯誤。 如何告訴Inno Setup使用此功能或如何將字符串轉換爲Inno中的TColor以使用此屬性?
Sertac Akyuz的做法是好的,但我解決了這個數寫這個問題後幾分鐘,不好意思:) 這是我的功能 - 還有一點處理:
function StringToColor(Color: String): TColor;
var
RR, GG, BB: String;
Dec: Integer;
begin
{ Change string Color from $RRGGBB to $BBGGRR and then convert to TColor }
if((Length(Color) <> 7) or (Color[1] <> '$')) then
Result := $000000
else
begin
RR := Color[2] + Color[3];
GG := Color[4] + Color[5];
BB := Color[6] + Color[7];
Dec := StrToInt('$' + BB + GG + RR);
Result := TColor(Dec);
end;
end;
的全魔確實功能StrToInt()其轉換字符串到整數 - 但如果你的字符串前加「$」這將字符串爲十六進制數,它會自動轉換爲十進制數。結果是從該編號創建的整數TColor。
如安德烈亞斯他的問題發表評論時提及,有沒有內置的功能。您可以通過精心設計你自己的,例如:
function StringToRGB(ColorStr: string): Integer;
var
r, g, b: Integer;
begin
r := StrToInt(Copy(ColorStr, 1, 3));
g := StrToInt('$' + Copy(ColorStr, 4, 2));
b := StrToInt('$' + Copy(ColorStr, 6, 2));
Result := (r or (g shl 8) or (b shl 16));
end;
如果你已經保存像是$BBGGRR
你的顏色,你可以簡單地將其轉換
StrToInt(ColorStr);
完美!但你的函數返回一個整數,我想要TColor,所以我需要簡單的演員。 – Slappy
@Slappy - 我認爲你不需要演員。這是TColor是如何在[帕斯卡腳本](http://code.remobjects.com/p/pascalscript/source/tree/HEAD/Source/uPSC_graphics.pas#L205)暴露:'cl.addTypeS( 'TColor', 'integer');' –
@Andreas Rejbrand:
當我下載的Inno的來源,我注意到在源功能StringToColor()。這裏是Compiler.pas的片段:
type
TColor = $7FFFFFFF-1..$7FFFFFFF;
const
clScrollBar = TColor(COLOR_SCROLLBAR or $80000000);
clBackground = TColor(COLOR_BACKGROUND or $80000000);
clActiveCaption = TColor(COLOR_ACTIVECAPTION or $80000000);
clInactiveCaption = TColor(COLOR_INACTIVECAPTION or $80000000);
clMenu = TColor(COLOR_MENU or $80000000);
clWindow = TColor(COLOR_WINDOW or $80000000);
clWindowFrame = TColor(COLOR_WINDOWFRAME or $80000000);
clMenuText = TColor(COLOR_MENUTEXT or $80000000);
clWindowText = TColor(COLOR_WINDOWTEXT or $80000000);
clCaptionText = TColor(COLOR_CAPTIONTEXT or $80000000);
clActiveBorder = TColor(COLOR_ACTIVEBORDER or $80000000);
clInactiveBorder = TColor(COLOR_INACTIVEBORDER or $80000000);
clAppWorkSpace = TColor(COLOR_APPWORKSPACE or $80000000);
clHighlight = TColor(COLOR_HIGHLIGHT or $80000000);
clHighlightText = TColor(COLOR_HIGHLIGHTTEXT or $80000000);
clBtnFace = TColor(COLOR_BTNFACE or $80000000);
clBtnShadow = TColor(COLOR_BTNSHADOW or $80000000);
clGrayText = TColor(COLOR_GRAYTEXT or $80000000);
clBtnText = TColor(COLOR_BTNTEXT or $80000000);
clInactiveCaptionText = TColor(COLOR_INACTIVECAPTIONTEXT or $80000000);
clBtnHighlight = TColor(COLOR_BTNHIGHLIGHT or $80000000);
cl3DDkShadow = TColor(COLOR_3DDKSHADOW or $80000000);
cl3DLight = TColor(COLOR_3DLIGHT or $80000000);
clInfoText = TColor(COLOR_INFOTEXT or $80000000);
clInfoBk = TColor(COLOR_INFOBK or $80000000);
clBlack = TColor($000000);
clMaroon = TColor($000080);
clGreen = TColor($008000);
clOlive = TColor($008080);
clNavy = TColor($800000);
clPurple = TColor($800080);
clTeal = TColor($808000);
clGray = TColor($808080);
clSilver = TColor($C0C0C0);
clRed = TColor($0000FF);
clLime = TColor($00FF00);
clYellow = TColor($00FFFF);
clBlue = TColor($FF0000);
clFuchsia = TColor($FF00FF);
clAqua = TColor($FFFF00);
clLtGray = TColor($C0C0C0);
clDkGray = TColor($808080);
clWhite = TColor($FFFFFF);
clNone = TColor($1FFFFFFF);
clDefault = TColor($20000000);
type
TColorEntry = record
Value: TColor;
Name: string;
end;
const
Colors: array[0..41] of TColorEntry = (
(Value: clBlack; Name: 'clBlack'),
(Value: clMaroon; Name: 'clMaroon'),
(Value: clGreen; Name: 'clGreen'),
(Value: clOlive; Name: 'clOlive'),
(Value: clNavy; Name: 'clNavy'),
(Value: clPurple; Name: 'clPurple'),
(Value: clTeal; Name: 'clTeal'),
(Value: clGray; Name: 'clGray'),
(Value: clSilver; Name: 'clSilver'),
(Value: clRed; Name: 'clRed'),
(Value: clLime; Name: 'clLime'),
(Value: clYellow; Name: 'clYellow'),
(Value: clBlue; Name: 'clBlue'),
(Value: clFuchsia; Name: 'clFuchsia'),
(Value: clAqua; Name: 'clAqua'),
(Value: clWhite; Name: 'clWhite'),
(Value: clScrollBar; Name: 'clScrollBar'),
(Value: clBackground; Name: 'clBackground'),
(Value: clActiveCaption; Name: 'clActiveCaption'),
(Value: clInactiveCaption; Name: 'clInactiveCaption'),
(Value: clMenu; Name: 'clMenu'),
(Value: clWindow; Name: 'clWindow'),
(Value: clWindowFrame; Name: 'clWindowFrame'),
(Value: clMenuText; Name: 'clMenuText'),
(Value: clWindowText; Name: 'clWindowText'),
(Value: clCaptionText; Name: 'clCaptionText'),
(Value: clActiveBorder; Name: 'clActiveBorder'),
(Value: clInactiveBorder; Name: 'clInactiveBorder'),
(Value: clAppWorkSpace; Name: 'clAppWorkSpace'),
(Value: clHighlight; Name: 'clHighlight'),
(Value: clHighlightText; Name: 'clHighlightText'),
(Value: clBtnFace; Name: 'clBtnFace'),
(Value: clBtnShadow; Name: 'clBtnShadow'),
(Value: clGrayText; Name: 'clGrayText'),
(Value: clBtnText; Name: 'clBtnText'),
(Value: clInactiveCaptionText; Name: 'clInactiveCaptionText'),
(Value: clBtnHighlight; Name: 'clBtnHighlight'),
(Value: cl3DDkShadow; Name: 'cl3DDkShadow'),
(Value: cl3DLight; Name: 'cl3DLight'),
(Value: clInfoText; Name: 'clInfoText'),
(Value: clInfoBk; Name: 'clInfoBk'),
(Value: clNone; Name: 'clNone'));
function IdentToColor(const Ident: string; var Color: Longint): Boolean;
var
I: Integer;
begin
for I := Low(Colors) to High(Colors) do
if CompareText(Colors[I].Name, Ident) = 0 then
begin
Result := True;
Color := Longint(Colors[I].Value);
Exit;
end;
Result := False;
end;
function StringToColor(const S: string): TColor;
begin
if not IdentToColor(S, Longint(Result)) then
Result := TColor(StrToInt(S));
end;
正如你所看到的Inno有它自己的實現StringToColor()的其也可以通過名稱[喜歡IdentToColor(「clBlack」)]解析顏色。
我希望一些快速黑客如何使用此功能,從腳本,但似乎這功能沒有拉到公共接口(ScriptFunc_R.pas或ScriptFunc_C.pas)。
請通過編輯您的問題來添加您的問題的信息,並通過評論添加評論回答。更重要的是,不要引用盡可能多的版權材料。它是開源的事實並不意味着它沒有版權。 –
@Slappy:有趣。但是,它可能只適用於Inno Setup內部使用,不是公開的Pascal腳本功能的一部分。 –
Pascal腳本在Inno Setup的,其中有*不*做與德爾福(只要你現在關心),不會有一個叫做「StringToColor」功能。這是一個完整的函數列表:http://www.jrsoftware.org/ishelp/topic_scriptfunctions.htm。當然,你不希望功能僅僅存在[因爲你想要它們存在](http://blogs.msdn.com/b/oldnewthing/archive/2012/09/27/10353605.aspx)? –