📄 jvwizard.pas
字号:
function GetWizardPages(Index: Integer): TJvWizardCustomPage;
procedure SetDefaultButtons(const Value: Boolean);
protected
procedure Loaded; override;
procedure AdjustClientRect(var Rect: TRect); override;
procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
procedure ShowControl(AControl: TControl); override;
procedure Paint; override;
procedure Resize; override;
procedure InsertPage(Page: TJvWizardCustomPage);
procedure RemovePage(Page: TJvWizardCustomPage);
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
function GetButtonControlClass(AKind: TJvWizardButtonKind): TJvWizardButtonControlClass; virtual;
procedure DoActivePageChanging(var ToPage: TJvWizardCustomPage); dynamic;
procedure DoActivePageChanged; dynamic;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure SelectPriorPage;
procedure SelectNextPage;
procedure SelectFirstPage;
procedure SelectLastPage;
function IsFirstPage(const APage: TJvWizardCustomPage;
CheckDisable: Boolean = True): Boolean;
function IsLastPage(const APage: TJvWizardCustomPage;
CheckDisable: Boolean = True): Boolean;
function FindNextPage(PageIndex: Integer; const Step: Integer = 1;
CheckDisable: Boolean = True): TJvWizardCustomPage;
function IsForward(const FromPage, ToPage: TJvWizardCustomPage): Boolean;
property ActivePageIndex: Integer read GetActivePageIndex write SetActivePageIndex;
property PageCount: Integer read GetPageCount;
property WizardPages[Index: Integer]: TJvWizardCustomPage read GetWizardPages;
published
property Pages: TJvWizardPageList read FPages;
{$IFNDEF USEJVCL}
// Add by Steve Forbes
property About: TJvWizardAboutInfoForm read FAboutInfo write FAboutInfo stored False;
{$ENDIF !USEJVCL}
property ActivePage: TJvWizardCustomPage read FActivePage write SetActivePage;
property AutoHideButtonBar: Boolean read FAutoHideButtonBar write SetAutoHideButtonBar default True;
property ButtonBarHeight: Integer read FButtonBarHeight write SetButtonBarHeight;
property ButtonStart: TJvWizardNavigateButton read FNavigateButtons[bkStart] write FNavigateButtons[bkStart];
property ButtonLast: TJvWizardNavigateButton read FNavigateButtons[bkLast] write FNavigateButtons[bkLast];
property ButtonBack: TJvWizardNavigateButton read FNavigateButtons[bkBack] write FNavigateButtons[bkBack];
property ButtonNext: TJvWizardNavigateButton read FNavigateButtons[bkNext] write FNavigateButtons[bkNext];
property ButtonFinish: TJvWizardNavigateButton read FNavigateButtons[bkFinish] write FNavigateButtons[bkFinish];
property ButtonCancel: TJvWizardNavigateButton read FNavigateButtons[bkCancel] write FNavigateButtons[bkCancel];
property ButtonHelp: TJvWizardNavigateButton read FNavigateButtons[bkHelp] write FNavigateButtons[bkHelp];
property DefaultButtons: Boolean read FDefaultButtons write SetDefaultButtons default True;
property ShowDivider: Boolean read FShowDivider write SetShowDivider default True;
property ShowRouteMap: Boolean read GetShowRouteMap write SetShowRouteMap;
property HeaderImages: TCustomImageList read FHeaderImages write SetHeaderImages;
property OnSelectFirstPage: TJvWizardSelectPageEvent read FOnSelectFirstPage write FOnSelectFirstPage;
property OnSelectLastPage: TJvWizardSelectPageEvent read FOnSelectLastPage write FOnSelectLastPage;
property OnSelectNextPage: TJvWizardSelectPageEvent read FOnSelectNextPage write FOnSelectNextPage;
property OnSelectPriorPage: TJvWizardSelectPageEvent read FOnSelectPriorPage write FOnSelectPriorPage;
// (ahuser) BCB cannot handle enum types as index.
property OnStartButtonClick: TNotifyEvent index Integer(bkStart) read GetButtonClick write SetButtonClick;
property OnLastButtonClick: TNotifyEvent index Integer(bkLast) read GetButtonClick write SetButtonClick;
property OnBackButtonClick: TNotifyEvent index Integer(bkBack) read GetButtonClick write SetButtonClick;
property OnNextButtonClick: TNotifyEvent index Integer(bkNext) read GetButtonClick write SetButtonClick;
property OnFinishButtonClick: TNotifyEvent index Integer(bkFinish) read GetButtonClick write SetButtonClick;
property OnCancelButtonClick: TNotifyEvent index Integer(bkCancel) read GetButtonClick write SetButtonClick;
property OnHelpButtonClick: TNotifyEvent index Integer(bkHelp) read GetButtonClick write SetButtonClick;
property OnActivePageChanged: TNotifyEvent read FOnActivePageChanged write FOnActivePageChanged;
property OnActivePageChanging: TJvWizardChangingPageEvent read FOnActivePageChanging write FOnActivePageChanging;
property Color;
property Font;
property Enabled;
property Visible;
end;
{$IFDEF USEJVCL}
{$IFDEF UNITVERSIONING}
const
UnitVersioning: TUnitVersionInfo = (
RCSfile: '$RCSfile: JvWizard.pas,v $';
Revision: '$Revision: 1.71 $';
Date: '$Date: 2005/03/09 14:57:32 $';
LogPath: 'JVCL\run'
);
{$ENDIF UNITVERSIONING}
{$ENDIF USEJVCL}
implementation
uses
{$IFDEF USEJVCL}
JvResources,
{$ENDIF USEJVCL}
Consts;
const
ciButtonWidth = 75;
ciButtonHeight = 25;
ciButtonBarHeight = 42;
ciButtonPlacement = (ciButtonBarHeight - ciButtonHeight) div 2;
{$IFNDEF USEJVCL}
resourcestring
RsBackButtonCaption = '< &Back';
RsNextButtonCaption = '&Next >';
RsFirstButtonCaption = 'To &Start Page';
RsLastButtonCaption = 'To &Last Page';
RsFinishButtonCaption = '&Finish';
RsWelcome = 'Welcome';
RsTitle = 'Title';
RsSubtitle = 'Subtitle';
RsEInvalidParentControl = 'The Parent should be TJvWizard or a descendant';
RsEInvalidWizardPage = 'The pages belong to another wizard';
{$ENDIF !USEJVCL}
type
// (ahuser) introduced for refactoring the WizardButtons
TJvWizardBaseButton = class(TJvWizardButtonControl)
protected
procedure ButtonClick(Page: TJvWizardCustomPage; var Stop: Boolean); virtual;
procedure SelectPage; virtual;
public
procedure Click; override;
end;
{ YW - First Button }
TJvWizardStartButton = class(TJvWizardBaseButton)
protected
procedure ButtonClick(Page: TJvWizardCustomPage; var Stop: Boolean); override;
procedure SelectPage; override;
public
constructor Create(AOwner: TComponent); override;
end;
{ YW - Last Button }
TJvWizardLastButton = class(TJvWizardBaseButton)
protected
procedure ButtonClick(Page: TJvWizardCustomPage; var Stop: Boolean); override;
procedure SelectPage; override;
public
constructor Create(AOwner: TComponent); override;
end;
{ YW - Back Button }
TJvWizardBackButton = class(TJvWizardBaseButton)
protected
procedure ButtonClick(Page: TJvWizardCustomPage; var Stop: Boolean); override;
procedure SelectPage; override;
public
constructor Create(AOwner: TComponent); override;
end;
{ YW - Next Button }
TJvWizardNextButton = class(TJvWizardBaseButton)
protected
procedure ButtonClick(Page: TJvWizardCustomPage; var Stop: Boolean); override;
procedure SelectPage; override;
public
constructor Create(AOwner: TComponent); override;
end;
{ YW - Finish Button }
TJvWizardFinishButton = class(TJvWizardBaseButton)
protected
procedure ButtonClick(Page: TJvWizardCustomPage; var Stop: Boolean); override;
public
constructor Create(AOwner: TComponent); override;
end;
{ YW - Cancel Button }
TJvWizardCancelButton = class(TJvWizardBaseButton)
protected
procedure ButtonClick(Page: TJvWizardCustomPage; var Stop: Boolean); override;
public
constructor Create(AOwner: TComponent); override;
end;
{ YW - Help Button }
TJvWizardHelpButton = class(TJvWizardBaseButton)
protected
procedure ButtonClick(Page: TJvWizardCustomPage; var Stop: Boolean); override;
public
constructor Create(AOwner: TComponent); override;
procedure Click; override;
end;
//=== { TJvWizardButtonControl } =============================================
constructor TJvWizardButtonControl.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if csDesigning in ComponentState then
begin
{$IFDEF COMPILER6_UP}
{ !!! YW - Add csClickEvents in order to fire the Click method
at design time. It does NOT need at run time, otherwise it cause
the OnClick event to be called twice. }
ControlStyle := ControlStyle + [csClickEvents];
{$ENDIF COMPILER6_UP}
ControlStyle := ControlStyle + [csNoDesignVisible];
end;
Kind := bkCustom;
Anchors := [akRight, akBottom];
end;
{$IFDEF VCL}
procedure TJvWizardButtonControl.CMDesignHitTest(var Msg: TCMDesignHitTest);
begin
inherited;
if Enabled then
Msg.Result := 1;
end;
{$ENDIF VCL}
{$IFDEF VCL}
procedure TJvWizardButtonControl.CMVisibleChanged(var Msg: TMessage);
begin
inherited;
if Assigned(FWizard) then
FWizard.RepositionButtons;
end;
{$ENDIF VCL}
{$IFDEF VisualCLX}
procedure TJvWizardButtonControl.VisibleChanged;
begin
inherited VisibleChanged;
if Assigned(FWizard) then
FWizard.RepositionButtons;
end;
{$ENDIF VisualCLX}
//=== { TJvWizardBaseButton } ================================================
procedure TJvWizardBaseButton.Click;
var
Stop: Boolean;
Page: TJvWizardCustomPage;
begin
if Assigned(FWizard) then
begin
if not (csDesigning in ComponentState) then
begin
Stop := False;
Page := FWizard.FActivePage;
if Assigned(Page) then
ButtonClick(Page, Stop);
if Stop then
Exit;
inherited Click;
end;
SelectPage;
end;
end;
procedure TJvWizardBaseButton.SelectPage;
begin
// default action: nothing
end;
procedure TJvWizardBaseButton.ButtonClick(Page: TJvWizardCustomPage; var Stop: Boolean);
begin
// do nothing (make Delphi 5 compiler happy)
end;
//=== { TJvWizardStartButton } ===============================================
constructor TJvWizardStartButton.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
Caption := RsFirstButtonCaption;
Visible := False;
Anchors := [akLeft, akBottom];
Width := ciButtonWidth + 10;
Alignment := alLeft;
end;
procedure TJvWizardStartButton.ButtonClick(Page: TJvWizardCustomPage; var Stop: Boolean);
begin
inherited ButtonClick(Page, Stop);
if Assigned(Page.FOnStartButtonClick) then
Page.FOnStartButtonClick(Page, Stop);
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -