我有一個TNewStaticText數據類型的變量,我想爲文本設置不同的顏色,例如 如果變量包含文本,如「祝您有美好的一天「如何爲inno設置中的TNewStaticText中的文本添加不同的顏色
‘都’應顯示爲紅色 ‘一個漂亮的’應顯示爲藍色 ‘天’應顯示在黑色
我有一個TNewStaticText數據類型的變量,我想爲文本設置不同的顏色,例如 如果變量包含文本,如「祝您有美好的一天「如何爲inno設置中的TNewStaticText中的文本添加不同的顏色
‘都’應顯示爲紅色 ‘一個漂亮的’應顯示爲藍色 ‘天’應顯示在黑色
字體顏色,您可以用Font.Color
改變財產,但它是爲整個控制的文本。爲了您的目標,您需要創建三個控件。這裏有一個例子:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
[Code]
procedure InitializeWizard;
var
TopPos: Integer;
LeftPos: Integer;
StaticText: TNewStaticText;
begin
TopPos := WizardForm.NextButton.Top;
LeftPos := 8;
StaticText := TNewStaticText.Create(WizardForm);
StaticText.Parent := WizardForm;
StaticText.Left := LeftPos;
StaticText.Top := TopPos;
StaticText.Font.Color := clRed;
StaticText.Caption := 'Have ';
LeftPos := StaticText.Left + StaticText.Width;
StaticText := TNewStaticText.Create(WizardForm);
StaticText.Parent := WizardForm;
StaticText.Left := LeftPos;
StaticText.Top := TopPos;
StaticText.Font.Color := clBlue;
StaticText.Caption := 'a nice ';
LeftPos := StaticText.Left + StaticText.Width;
StaticText := TNewStaticText.Create(WizardForm);
StaticText.Parent := WizardForm;
StaticText.Left := LeftPos;
StaticText.Top := TopPos;
StaticText.Font.Color := clBlack;
StaticText.Caption := 'day!';
end;
或者使你的代碼更加靈活,你可以像如下包裝這個過程的函數:
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
[Code]
type
TColorArray = array of TColor;
procedure CreateColoredText(const ATexts: TArrayOfString; const AColors: TColorArray;
AParent: TWinControl; ALeft, ATop: Integer);
var
I: Integer;
LeftPos: Integer;
begin
if GetArrayLength(ATexts) <> GetArrayLength(AColors) then
RaiseException('Inconsistent array parameters.');
LeftPos := ALeft;
for I := 0 to GetArrayLength(ATexts) - 1 do
begin
with TNewStaticText.Create(AParent) do
begin
Parent := AParent;
Left := LeftPos;
Top := ATop;
Font.Color := AColors[I];
Caption := ATexts[I];
LeftPos := Left + Width;
end;
end;
end;
procedure InitializeWizard;
begin
CreateColoredText(['Have ', 'a nice ', 'day!'], [clRed, clBlue, clBlack],
WizardForm, 8, WizardForm.NextButton.Top);
end;
你可能想嘗試這樣的:
procedure FormButtonOnClick(Sender: TObject);
var
Form: TSetupForm;
OKButton, CancelButton: TNewButton;
begin
Form := CreateCustomForm();
try
Form.ClientWidth := ScaleX(256);
Form.ClientHeight := ScaleY(256);
Form.Caption := 'TSetupForm';
Form.CenterInsideControl(WizardForm, False);
OKButton := TNewButton.Create(Form);
OKButton.Parent := Form;
OKButton.Width := ScaleX(75);
OKButton.Height := ScaleY(23);
OKButton.Left := Form.ClientWidth - ScaleX(75 + 6 + 75 + 10);
OKButton.Top := Form.ClientHeight - ScaleY(23 + 10);
OKButton.Caption := 'OK';
OKButton.ModalResult := mrOk;
CancelButton := TNewButton.Create(Form);
CancelButton.Parent := Form;
CancelButton.Width := ScaleX(75);
CancelButton.Height := ScaleY(23);
CancelButton.Left := Form.ClientWidth - ScaleX(75 + 10);
CancelButton.Top := Form.ClientHeight - ScaleY(23 + 10);
CancelButton.Caption := 'Cancel';
CancelButton.ModalResult := mrCancel;
CancelButton.Cancel := True;
Form.ActiveControl := OKButton;
if Form.ShowModal() = mrOk then
MsgBox('You clicked OK.', mbInformation, MB_OK);
finally
Form.Free();
end;
end;
這個例子是從熱媒「> http://read.pudn.com/downloads115/sourcecode/windows/system/488914/Examples/CodeClasses.iss_.htm複製
據我知道這對一個字符串是不可能的。在這種情況下,您應該創建2個TNewStaticText字符串,並且您可以爲每個字符串設置不同的顏色(例如'YourTNewStaticTextName.Font.Color:= clRed;')。前一段時間,TLama爲IS創建了HTML版本的文本輸入 - 但是在這個IS版本中有一個License文本問題,我不知道它是否最終得到修復。 – RobeN
我的回答是你可以找到答案的方向。它不好,downvote, –
@real_yggdrasil,我不是downvoter,但你的答案是完全無關的這個問題。它顯示瞭如何使用兩個按鈕創建自定義窗體。如果答案是你發佈的鏈接,那也是一個錯誤的方法。您應該始終將鏈接內容的主要部分放入帖子本身。 – TLama