2

私は最近InnoSetupに切り替えましたが、それは素晴らしいことです。何かに問題があることを除いて、ほとんどのことを機能させることができました。

基本的に、私は独自のヘッダーデザインを作成しようとしており、ページタイトル/ページの説明を透過的にしようとしていました。ただし、ページ変更時に重なり合っています。(写真を参照してください)。

http://img703.imageshack.us/img703/6180/88647320.png

コード:

procedure InheritBoundsRect(ASource, ATarget: TControl);
begin
  ATarget.Left := ASource.Left;
  ATarget.Top := ASource.Top;
  ATarget.Width := ASource.Width;
  ATarget.Height := ASource.Height;
end;

procedure CurPageChanged(CurPageID: Integer);
var
  TD: TLabel;
begin
    TD := TLabel.Create(WizardForm);
    TD.Parent := WizardForm.PageDescriptionLabel.Parent;
    TD.Caption := WizardForm.PageDescriptionLabel.Caption;
    TD.WordWrap := WizardForm.PageDescriptionLabel.WordWrap;
    TD.Transparent := True;
    InheritBoundsRect(WizardForm.PageDescriptionLabel, TD);
    TD.AutoSize := True;
end;

また、これが最善の方法であるかどうかさえわかりませんので、誰かが何か提案があれば、私はそれらを聞いてみたいです。

4

1 に答える 1

4

あなたが正しく指摘したように、あなたは何度もあなたのラベルを作成しています。具体的には、新しいページが表示されるたびに([次へ]または[戻る]ボタンが押されるたび)。ラベルを作成する必要があるのは1回だけです。理想的には、のようなウィザードフォームの初期化イベントで作成しますInitializeWizard。それを除いて、ページが変わるたびにラベルのキャプションを変更する必要があります。これに最適なのは、そのCurPageChangedイベントを使用する必要があることです。したがって、透明なページ説明ラベル(私が見逃したもの)を作成するには、次のようなスクリプトを使用できます。

[Code]
var
  DescLabel: TLabel;

procedure InheritBoundsRect(ASource, ATarget: TControl);
begin
  ATarget.Left := ASource.Left;
  ATarget.Top := ASource.Top;
  ATarget.Width := ASource.Width;
  ATarget.Height := ASource.Height;
end;

procedure InitializeWizard;
begin
  DescLabel := TLabel.Create(WizardForm);
  DescLabel.Parent := WizardForm.PageDescriptionLabel.Parent;  
  DescLabel.WordWrap := WizardForm.PageDescriptionLabel.WordWrap;
  DescLabel.AutoSize := WizardForm.PageDescriptionLabel.AutoSize;
  DescLabel.Transparent := True;
  InheritBoundsRect(WizardForm.PageDescriptionLabel, DescLabel);

  WizardForm.PageDescriptionLabel.Visible := False;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  DescLabel.Caption := WizardForm.PageDescriptionLabel.Caption;
end;
于 2013-01-21T12:12:34.473 に答える