⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compwizardfile.pas

📁 源代码
💻 PAS
字号:
unit CompWizardFile;

{
  Inno Setup
  Copyright (C) 1997-2004 Jordan Russell
  Portions by Martijn Laan
  For conditions of distribution and use, see LICENSE.TXT.

  Compiler Script Wizard File form

  $jrsoftware: issrc/Projects/CompWizardFile.pas,v 1.9 2004/06/26 04:36:08 jr Exp $
}

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  UIStateForm, StdCtrls, ExtCtrls, NewStaticText;

type

  PWizardFile = ^TWizardFile;
  TWizardFile = record
    Source: String;
    RecurseSubdirs: Boolean;
    DestRootDir: String;
    DestRootDirIsConstant: Boolean;
    DestSubDir: String;
  end;

  TWizardFileForm = class(TUIStateForm)
    OKButton: TButton;
    CancelButton: TButton;
    GroupBox2: TGroupBox;
    DestRootDirComboBox: TComboBox;
    DestRootDirEdit: TEdit;
    DestRootDirLabel: TNewStaticText;
    DestSubDirEdit: TEdit;
    SubDirLabel: TNewStaticText;
    RequiredLabel1: TNewStaticText;
    RequiredLabel2: TNewStaticText;
    GroupBox1: TGroupBox;
    SourceLabel: TNewStaticText;
    SourceEdit: TEdit;
    RecurseSubdirsCheck: TCheckBox;
    procedure OKButtonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure DestRootDirComboBoxChange(Sender: TObject);
  private
    FAllowAppDestRootDir: Boolean;
    FWizardFile: PWizardFile;
    procedure SetWizardFile(WizardFile: PWizardFile);
    procedure UpdateDestRootDirEdit;
  public
    property AllowAppDestRootDir: Boolean write FAllowAppDestRootDir;
    property WizardFile: PWizardFile write SetWizardFile;
  end;

implementation

uses
  CompMsgs, CmnFunc, CmnFunc2, CompForm;

{$R *.DFM}

type
  TConstant = record
    Constant, Description: String;
  end;

const
  DestRootDirs: array[0..8] of TConstant =
  (
    ( Constant: '{app}'; Description: 'Application directory'),
    ( Constant: '{pf}'; Description: 'Program Files directory'),
    ( Constant: '{cf}'; Description: 'Common Files directory'),
    ( Constant: '{win}'; Description: 'Windows directory'),
    ( Constant: '{sys}'; Description: 'Windows system directory'),
    ( Constant: '{src}'; Description: 'Setup source directory'),
    ( Constant: '{sd}'; Description: 'System drive root directory'),
    ( Constant: '{commonstartup}'; Description: 'Common Startup folder'),
    ( Constant: '{userstartup}'; Description: 'User Startup folder')
  );

procedure TWizardFileForm.SetWizardFile(WizardFile: PWizardFile);
var
  I: Integer;
begin
  FWizardFile := WizardFile;

  SourceEdit.Text := WizardFile.Source;
  RecurseSubdirsCheck.Checked := WizardFile.RecurseSubdirs;
  if WizardFile.DestRootDirIsConstant then begin
    for I := Low(DestRootDirs) to High(DestRootDirs) do begin
      if DestRootDirs[I].Constant = WizardFile.DestRootDir then begin
        DestRootDirComboBox.ItemIndex := I;
        Break;
      end;
    end;
  end else begin
    DestRootDirComboBox.ItemIndex := DestRootDirComboBox.Items.Count-1;
    DestRootDirEdit.Text := WizardFile.DestRootDir;
  end;
  DestSubDirEdit.Text := WizardFile.DestSubDir;

  UpdateDestRootDirEdit;
end;

{ --- }

procedure TWizardFileForm.FormCreate(Sender: TObject);
var
  I: Integer;
begin
  InitFormFont(Self);

  for I := Low(DestRootDirs) to High(DestRootDirs) do
    DestRootDirComboBox.Items.Add(DestRootDirs[I].Description);
  DestRootDirComboBox.Items.Add('(Custom)');
  DestRootDirComboBox.ItemIndex := 0;
end;

{ --- }

procedure TWizardFileForm.UpdateDestRootDirEdit;
begin
  if DestRootDirComboBox.ItemIndex = DestRootDirComboBox.Items.Count-1 then begin
    DestRootDirEdit.Enabled := True;
    DestRootDirEdit.Color := clWindow;
  end else begin
    DestRootDirEdit.Enabled := False;
    DestRootDirEdit.Color := clBtnFace;
  end;
end;

{ --- }

procedure TWizardFileForm.DestRootDirComboBoxChange(Sender: TObject);
begin
  UpdateDestRootDirEdit;
  if DestRootDirEdit.Enabled then
    ActiveControl := DestRootDirEdit;
end;

procedure TWizardFileForm.OKButtonClick(Sender: TObject);
var
  DestRootDirIndex: Integer;
begin
  ModalResult := mrNone;

  DestRootDirIndex := DestRootDirComboBox.ItemIndex;

  if (DestRootDirIndex = DestRootDirComboBox.Items.Count-1) and (DestRootDirEdit.Text = '') then begin
    MsgBox(SWizardFileDestRootDirError, '',  mbError, MB_OK);
    ActiveControl := DestRootDirEdit;
  end else if (DestRootDirs[DestRootDirIndex].Constant = '{app}') and not FAllowAppDestRootDir then begin
    MsgBox(SWizardFileAppDestRootDirError, '',  mbError, MB_OK);
    ActiveControl := DestRootDirComboBox;
  end else
    ModalResult := mrOk;

  if ModalResult = mrOk then begin
    FWizardFile.RecurseSubdirs := RecurseSubdirsCheck.Checked;
    if DestRootDirIndex = DestRootDirComboBox.Items.Count-1 then begin
      FWizardFile.DestRootDir := DestRootDirEdit.Text;
      FWizardFile.DestRootDirIsConstant := False;
    end else begin
      FWizardFile.DestRootDir := DestRootDirs[DestRootDirIndex].Constant;
      FWizardFile.DestRootDirIsConstant := True;
    end;
    FWizardFile.DestSubDir := DestSubDirEdit.Text;
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -