Inno setup 如何在inno设置中为TNewStaticText中的文本添加不同的颜色

Inno setup 如何在inno设置中为TNewStaticText中的文本添加不同的颜色,inno-setup,Inno Setup,我有一个变量TNewStaticText数据类型,我想为文本设置不同的颜色,例如 如果变量包含“祝您愉快”之类的文本 “Have”应显示为红色 “a尼斯”应以蓝色显示 “day”应显示为黑色您可能需要尝试以下方法: procedure FormButtonOnClick(Sender: TObject); var Form: TSetupForm; OKButton, CancelButton: TNewButton; begin Form := CreateCustomF

我有一个变量TNewStaticText数据类型,我想为文本设置不同的颜色,例如 如果变量包含“祝您愉快”之类的文本

“Have”应显示为红色 “a尼斯”应以蓝色显示
“day”应显示为黑色

您可能需要尝试以下方法:

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; 

此示例是从.htm“>http://read.pudn.com/downloads115/sourcecode/windows/system/488914/Examples/CodeClasses.iss_.htm

Font-color您可以使用
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;
[设置]
AppName=我的程序
AppVersion=1.5
DefaultDirName={pf}\My程序
[守则]
类型
tcolorray=TColor的数组;
过程CreateColoredText(const-ATexts:TArrayOfString;const-AColors:tcolorray;
AParent:TWinControl;ALeft,Top:Integer);
变量
I:整数;
LeftPos:整数;
开始
如果GetArrayLength(ATexts)为GetArrayLength(AColors),则
RaiseException('数组参数不一致');
LeftPos:=ALeft;
对于I:=0到GetArrayLength(ATexts)-1 do
开始
使用TNewStaticText.Create(AParent)do
开始
父母:=公寓;
左:=左位置;
顶部:=顶部;
字体.颜色:=A颜色[I];
标题:=ATexts[I];
LeftPos:=左+宽;
结束;
结束;
结束;
程序初始化;
开始
CreateColoredText(['Have','Ance','day!'],[clRed,clBlue,clBlack],
WizardForm,8,WizardForm.NextButton.Top);
结束;

据我所知,单个字符串是不可能的。在这种情况下,您应该创建两个TNewStaticText字符串,并且可以为每个字符串设置不同的颜色(例如,
您的TNewStaticText.Font.color:=clRed;
)。不久前,TLama为IS创建了HTML版本的文本输入-但在此版本的IS中存在许可证文本问题,我不知道它是否最终得到了修复。我的答案是您可以找到答案的方向。否决投票并不好that@real_yggdrasil,我不是一个悲观的选民,但你的回答与这个问题完全无关。它展示了如何创建一个带有两个按钮的自定义表单。如果答案是你发布的链接,这也是一种错误的方式。你应该始终将链接内容的重要部分放入帖子本身。我认为这不是这个问题的正确答案。请检查。将我的标志视为“不是答案”“是有争议的,这实际上并没有回答如何改变控制颜色或有多种颜色的问题。