📄 scriptdlg.pas
字号:
I: Integer;
Edit: TEdit;
begin
for I := 0 to FEdits.Count-1 do begin
Edit := FEdits[I];
if not ValidateCustomDirEdit(Edit, True, True) then begin
if WizardForm.Visible then
Edit.SetFocus;
Continue := False;
Exit;
end;
end;
inherited;
end;
procedure TInputDirWizardPage.Initialize(const SubCaption: String;
const AppendDir: Boolean; const NewFolderName: String);
begin
FSubCaptionLabel := TNewStaticText.Create(Self);
with FSubCaptionLabel do begin
AutoSize := False;
Width := SurfaceWidth;
Height := WizardForm.ScalePixelsY(DefaultLabelHeight);
WordWrap := True;
Caption := SubCaption;
Parent := Surface;
end;
FY := WizardForm.AdjustLabelHeight(FSubCaptionLabel) + WizardForm.ScalePixelsY(DefaultBoxTop);
FAppendDir := AppendDir;
FNewFolderName := NewFolderName;
end;
function TInputDirWizardPage.Add(const APrompt: String): Integer;
var
ButtonWidth: Integer;
PromptLabel: TNewStaticText;
Edit: TEdit;
Button: TButton;
begin
ButtonWidth := WizardForm.CalculateButtonWidth([msgButtonWizardBrowse]);
if APrompt <> '' then begin
PromptLabel := TNewStaticText.Create(Self);
with PromptLabel do begin
AutoSize := False;
Top := FY;
Width := SurfaceWidth;
Height := WizardForm.ScalePixelsY(DefaultLabelHeight);
WordWrap := True;
Caption := APrompt;
end;
SetCtlParent(PromptLabel, Surface);
Inc(FY, WizardForm.AdjustLabelHeight(PromptLabel) + WizardForm.ScalePixelsY(16));
end else
PromptLabel := nil;
Edit := TEdit.Create(Self);
with Edit do begin
Top := FY;
Width := SurfaceWidth-ButtonWidth-WizardForm.ScalePixelsX(10);
end;
SetCtlParent(Edit, Surface);
Button := TButton.Create(Self);
with Button do begin
Left := SurfaceWidth-ButtonWidth;
Top := Edit.Top-1;
Width := ButtonWidth;
Height := WizardForm.NextButton.Height;
if FEdits.Count = 0 then
Caption := SetupMessages[msgButtonWizardBrowse]
else
{ Can't use the same accel key for secondary buttons... }
Caption := RemoveAccelChar(SetupMessages[msgButtonWizardBrowse]);
OnClick := ButtonClick;
end;
SetCtlParent(Button, Surface);
Inc(FY, WizardForm.ScalePixelsY(36));
FButtons.Add(Button);
FPromptLabels.Add(PromptLabel);
Result := FEdits.Add(Edit);
end;
function TInputDirWizardPage.GetButton(Index: Integer): TButton;
begin
Result := TButton(FButtons[Index]);
end;
function TInputDirWizardPage.GetEdit(Index: Integer): TEdit;
begin
Result := TEdit(FEdits[Index]);
end;
function TInputDirWizardPage.GetPromptLabel(Index: Integer): TNewStaticText;
begin
Result := TNewStaticText(FPromptLabels[Index]);
end;
function TInputDirWizardPage.GetValue(Index: Integer): String;
begin
Result := GetEdit(Index).Text;
end;
procedure TInputDirWizardPage.SetValue(Index: Integer; const Value: String);
begin
GetEdit(Index).Text := RemoveBackslashUnlessRoot(PathExpand(Value));
end;
{--- InputFile ---}
constructor TInputFileWizardPage.Create(AOwner: TComponent);
begin
inherited;
FButtons := TList.Create;
FEdits := TList.Create;
FInputFileDefaultExtensions := TStringList.Create;
FInputFileFilters := TStringList.Create;
FPromptLabels := TList.Create;
end;
destructor TInputFileWizardPage.Destroy;
begin
FPromptLabels.Free;
FInputFileFilters.Free;
FInputFileDefaultExtensions.Free;
FEdits.Free;
FButtons.Free;
inherited;
end;
procedure TInputFileWizardPage.ButtonClick(Sender: TObject);
var
I: Integer;
Edit: TEdit;
FileName: String;
begin
I := FButtons.IndexOf(Sender);
if I <> -1 then begin
Edit := TEdit(FEdits[I]);
FileName := Edit.Text;
if NewGetOpenFileName(RemoveAccelChar(SetupMessages[msgButtonWizardBrowse]),
FileName, PathExtractPath(FileName), FInputFileFilters[I],
FInputFileDefaultExtensions[I], Surface.Handle) then
Edit.Text := FileName;
end;
end;
procedure TInputFileWizardPage.Initialize(const SubCaption: String);
begin
FSubCaptionLabel := TNewStaticText.Create(Self);
with FSubCaptionLabel do begin
AutoSize := False;
Width := SurfaceWidth;
Height := WizardForm.ScalePixelsY(DefaultLabelHeight);
WordWrap := True;
Caption := SubCaption;
Parent := Surface;
end;
FY := WizardForm.AdjustLabelHeight(FSubCaptionLabel) + WizardForm.ScalePixelsY(DefaultBoxTop);
end;
function TInputFileWizardPage.Add(const APrompt, AFilter,
ADefaultExtension: String): Integer;
var
ButtonWidth: Integer;
PromptLabel: TNewStaticText;
Edit: TEdit;
Button: TButton;
begin
ButtonWidth := WizardForm.CalculateButtonWidth([msgButtonWizardBrowse]);
if APrompt <> '' then begin
PromptLabel := TNewStaticText.Create(Self);
with PromptLabel do begin
AutoSize := False;
Top := FY;
Width := SurfaceWidth;
Height := WizardForm.ScalePixelsY(DefaultLabelHeight);
WordWrap := True;
Caption := APrompt;
end;
SetCtlParent(PromptLabel, Surface);
Inc(FY, WizardForm.AdjustLabelHeight(PromptLabel) + WizardForm.ScalePixelsY(16));
end else
PromptLabel := nil;
Edit := TEdit.Create(Self);
with Edit do begin
Top := FY;
Width := SurfaceWidth-ButtonWidth-WizardForm.ScalePixelsX(10);
end;
SetCtlParent(Edit, Surface);
Button := TButton.Create(Self);
with Button do begin
Left := SurfaceWidth-ButtonWidth;
Top := Edit.Top-1;
Width := ButtonWidth;
Height := WizardForm.NextButton.Height;
if FButtons.Count = 0 then
Caption := SetupMessages[msgButtonWizardBrowse]
else
{ Can't use the same accel key for secondary buttons... }
Caption := RemoveAccelChar(SetupMessages[msgButtonWizardBrowse]);
OnClick := ButtonClick;
end;
SetCtlParent(Button, Surface);
Inc(FY, WizardForm.ScalePixelsY(36));
FInputFileFilters.Add(AFilter);
FInputFileDefaultExtensions.Add(ADefaultExtension);
FButtons.Add(Button);
FPromptLabels.Add(PromptLabel);
Result := FEdits.Add(Edit);
end;
function TInputFileWizardPage.GetButton(Index: Integer): TButton;
begin
Result := TButton(FButtons[Index]);
end;
function TInputFileWizardPage.GetEdit(Index: Integer): TEdit;
begin
Result := TEdit(FEdits[Index]);
end;
function TInputFileWizardPage.GetPromptLabel(Index: Integer): TNewStaticText;
begin
Result := TNewStaticText(FPromptLabels[Index]);
end;
function TInputFileWizardPage.GetValue(Index: Integer): String;
begin
Result := GetEdit(Index).Text;
end;
procedure TInputFileWizardPage.SetValue(Index: Integer; const Value: String);
begin
GetEdit(Index).Text := Value;
end;
{--- OutputMsg ---}
procedure TOutputMsgWizardPage.Initialize(const Msg: String);
begin
FMsgLabel := TNewStaticText.Create(Self);
with FMsgLabel do begin
AutoSize := False;
Width := SurfaceWidth;
Height := WizardForm.ScalePixelsY(DefaultLabelHeight);
WordWrap := True;
Caption := Msg;
Parent := Surface;
end;
WizardForm.AdjustLabelHeight(MsgLabel);
end;
{--- OutputMsgMemo ---}
procedure TOutputMsgMemoWizardPage.Initialize(const SubCaption, Msg: String);
var
Y: Integer;
begin
Y := 0;
if SubCaption <> '' then begin
FSubCaptionLabel := TNewStaticText.Create(Self);
with FSubCaptionLabel do begin
AutoSize := False;
Width := SurfaceWidth;
Height := WizardForm.ScalePixelsY(DefaultLabelHeight);
WordWrap := True;
Caption := SubCaption;
Parent := Surface;
end;
Inc(Y, WizardForm.ScalePixelsY(DefaultBoxTop) +
WizardForm.AdjustLabelHeight(FSubCaptionLabel));
end else
FSubCaptionLabel := nil;
FRichEditViewer := TRichEditViewer.Create(Self);
with FRichEditViewer do begin
Top := Y;
Width := SurfaceWidth;
Height := WizardForm.ScalePixelsY(DefaultBoxBottom) - Y;
ReadOnly := True;
ScrollBars := ssVertical;
WantReturns := False;
end;
SetCtlParent(FRichEditViewer, Surface);
with FRichEditViewer do begin
UseRichEdit := True;
RTFText := Msg;
end;
end;
{--- OutputProgress ---}
constructor TOutputProgressWizardPage.Create(AOwner: TComponent);
begin
inherited;
Style := Style + [psAlwaysSkip, psNoButtons];
end;
procedure TOutputProgressWizardPage.Initialize;
begin
FMsg1Label := TNewStaticText.Create(Self);
with FMsg1Label do begin
AutoSize := False;
ShowAccelChar := False;
Width := SurfaceWidth;
Height := WizardForm.StatusLabel.Height;
WordWrap := WizardForm.StatusLabel.WordWrap;
Parent := Surface;
end;
FMsg2Label := TNewStaticText.Create(Self);
with FMsg2Label do begin
AutoSize := False;
ShowAccelChar := False;
Top := WizardForm.ScalePixelsY(16);
Width := SurfaceWidth;
Height := WizardForm.FileNameLabel.Height;
end;
SetCtlParent(FMsg2Label, Surface);
FProgressBar := TNewProgressBar.Create(Self);
with FProgressBar do begin
Top := WizardForm.ScalePixelsY(42);
Width := SurfaceWidth;
Height := WizardForm.ScalePixelsY(21);
Visible := False;
end;
SetCtlParent(FProgressBar, Surface);
end;
procedure TOutputProgressWizardPage.Hide;
begin
if (WizardForm.CurPageID = ID) and (FSavePageID <> 0) then begin
WizardForm.SetCurPage(FSavePageID);
FSavePageID := 0;
end;
end;
procedure TOutputProgressWizardPage.ProcessMsgs;
{ Process messages to repaint and keep Windows from thinking the process is
hung. This is safe; due to the psNoButtons style the user shouldn't be able
to cancel or do anything else during this time. }
begin
if WizardForm.CurPageID = ID then
Application.ProcessMessages;
end;
procedure TOutputProgressWizardPage.SetProgress(const Position, Max: Longint);
begin
if Max > 0 then begin
FProgressBar.Max := Max;
FProgressBar.Position := Position;
FProgressBar.Visible := True;
end
else
FProgressBar.Visible := False;
ProcessMsgs;
end;
procedure TOutputProgressWizardPage.SetText(const Msg1, Msg2: String);
begin
FMsg1Label.Caption := Msg1;
FMsg2Label.Caption := MinimizePathName(Msg2, FMsg2Label.Font,
FMsg2Label.Width);
ProcessMsgs;
end;
procedure TOutputProgressWizardPage.Show;
begin
if WizardForm.CurPageID <> ID then begin
FSavePageID := WizardForm.CurPageID;
WizardForm.SetCurPage(ID);
ProcessMsgs;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -