2014-02-13 51 views
1

我有一個TNewStaticText數據類型的變量,我想爲文本設置不同的顏色,例如 如果變量包含文本,如「祝您有美好的一天「如何爲inno設置中的TNewStaticText中的文本添加不同的顏色

‘都’應顯示爲紅色 ‘一個漂亮的’應顯示爲藍色 ‘天’應顯示在黑色

+0

據我知道這對一個字符串是不可能的。在這種情況下,您應該創建2個TNewStaticText字符串,並且您可以爲每個字符串設置不同的顏色(例如'YourTNewStaticTextName.Font.Color:= clRed;')。前一段時間,TLama爲IS創建了HTML版本的文本輸入 - 但是在這個IS版本中有一個License文本問題,我不知道它是否最終得到修復。 – RobeN

+0

我的回答是你可以找到答案的方向。它不好,downvote, –

+1

@real_yggdrasil,我不是downvoter,但你的答案是完全無關的這個問題。它顯示瞭如何使用兩個按鈕創建自定義窗體。如果答案是你發佈的鏈接,那也是一個錯誤的方法。您應該始終將鏈接內容的主要部分放入帖子本身。 – TLama

回答

3

字體顏色,您可以用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; 
-2

你可能想嘗試這樣的:

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複製

+1

我認爲這不是這個問題的正確答案。請查閱。 – RobeN

+0

將我的國旗視爲「不是答案」是有爭議的,但這實際上並不意味着如何更改控制顏色或具有多種顏色的問題。 – Deanna

相關問題