📄 jvwizard.pas
字号:
{ YW - Wizard Page Header class }
TJvWizardPageHeader = class(TJvWizardPageObject)
private
FHeight: Integer;
FParentFont: Boolean;
FTitle: TJvWizardPageTitle;
FSubtitle: TJvWizardPageTitle;
FImageIndex: Integer;
FImageOffset: Integer;
FImageAlignment: TJvWizardImageLeftRight;
FShowDivider: Boolean;
procedure SetHeight(Value: Integer);
procedure SetImageIndex(Value: Integer);
procedure SetImageOffset(Value: Integer);
procedure SetImageAlignment(Value: TJvWizardImageLeftRight);
procedure SetParentFont(Value: Boolean);
procedure SetShowDivider(Value: Boolean);
procedure AdjustTitleFont;
procedure SetSubtitle(const Value: TJvWizardPageTitle);
procedure SetTitle(const Value: TJvWizardPageTitle);
protected
procedure VisibleChanged; override;
procedure Initialize; override;
{ YW - the return value of ARect is the area where the title should be
painted on. The result of GetImageRect is the image area. }
function GetImageRect(const AImages: TCustomImageList;
var ARect: TRect): TRect; virtual;
public
constructor Create; override;
destructor Destroy; override;
procedure PaintTo(ACanvas: TCanvas; var ARect: TRect); override;
published
property ImageIndex: Integer read FImageIndex write SetImageIndex default -1;
property ImageOffset: Integer read FImageOffset write SetImageOffset default 0;
property ImageAlignment: TJvWizardImageLeftRight read FImageAlignment write SetImageAlignment default iaRight;
property Height: Integer read FHeight write SetHeight default 70;
property ParentFont: Boolean read FParentFont write SetParentFont default True;
property Title: TJvWizardPageTitle read FTitle write SetTitle;
property Subtitle: TJvWizardPageTitle read FSubtitle write SetSubtitle;
property ShowDivider: Boolean read FShowDivider write SetShowDivider default True;
property Color default clWindow;
property Visible;
end;
{ YW - Welcome Page's watermark class }
TJvWizardWaterMark = class(TJvWizardPageObject)
private
FAlign: TJvWizardLeftRight;
FWidth: Integer;
FBorderWidth: Integer;
FImage: TJvWizardImage;
procedure SetWidth(Value: Integer);
procedure SetBorderWidth(Value: Integer);
procedure SetAlign(Value: TJvWizardLeftRight);
procedure ImageChanged(Sender: TObject);
protected
procedure VisibleChanged; override;
public
constructor Create; override;
destructor Destroy; override;
procedure PaintTo(ACanvas: TCanvas; var ARect: TRect); override;
published
property Align: TJvWizardLeftRight read FAlign write SetAlign default alLeft;
property BorderWidth: Integer read FBorderWidth write SetBorderWidth default 1;
property Image: TJvWizardImage read FImage write FImage;
property Width: Integer read FWidth write SetWidth default 164;
{$IFDEF VCL}
property Color default clActiveCaption;
{$ENDIF VCL}
{$IFDEF VisualCLX}
property Color default clActiveHighlight;
{$ENDIF VisualCLX}
property Visible;
end;
{ YW - Wizard Page Panel class used by Wizard Custom Page }
TJvWizardPagePanel = class(TJvWizardPageObject)
private
FBorderWidth: Word;
procedure SetBorderWidth(Value: Word);
public
constructor Create; override;
procedure PaintTo(ACanvas: TCanvas; var ARect: TRect); override;
published
property BorderWidth: Word read FBorderWidth write SetBorderWidth default 7;
property Color default clBtnFace;
property Visible default False;
end;
TJvWizardPageClickEvent = procedure(Sender: TObject; var Stop: Boolean) of object;
TJvWizardPaintPageEvent = procedure(Sender: TObject; ACanvas: TCanvas;
var ARect: TRect) of object;
TJvWizardChangePageEvent = procedure(Sender: TObject;
const FromPage: TJvWizardCustomPage) of object;
TJvWizardChangingPageEvent = procedure(Sender: TObject;
var ToPage: TJvWizardCustomPage) of object;
{ YW - Wizard Custom Page }
TJvWizardCustomPage = class(TCustomControl)
private
FWizard: TJvWizard;
FHeader: TJvWizardPageHeader;
FPanel: TJvWizardPagePanel;
FImage: TJvWizardImage;
FEnabledButtons: TJvWizardButtonSet;
FVisibleButtons: TJvWizardButtonSet;
FDrawing: Boolean;
FEnableJumpToPage: Boolean; // Nonn
FOnPaintPage: TJvWizardPaintPageEvent;
FOnEnterPage: TJvWizardChangePageEvent;
FOnPage: TNotifyEvent;
FOnExitPage: TJvWizardChangePageEvent;
FOnStartButtonClick: TJvWizardPageClickEvent;
FOnLastButtonClick: TJvWizardPageClickEvent;
FOnNextButtonClick: TJvWizardPageClickEvent;
FOnBackButtonClick: TJvWizardPageClickEvent;
FOnCancelButtonClick: TJvWizardPageClickEvent;
FOnFinishButtonClick: TJvWizardPageClickEvent;
FOnHelpButtonClick: TJvWizardPageClickEvent;
function GetPageIndex: Integer;
procedure SetPageIndex(const Value: Integer);
procedure SetWizard(AWizard: TJvWizard);
procedure SetEnabledButtons(Value: TJvWizardButtonSet);
procedure SetVisibleButtons(Value: TJvWizardButtonSet);
procedure ImageChanged(Sender: TObject);
{$IFDEF VCL}
// (ahuser) Do not convert to JvExVCL: This package is USEJVCL'ed
procedure WMEraseBkgnd(var Msg: TWMEraseBkgnd); message WM_ERASEBKGND;
procedure CMFontChanged(var Msg: TMessage); message CM_FONTCHANGED;
procedure CMTextChanged(var Msg: TMessage); message CM_TEXTCHANGED;
procedure CMEnabledChanged(var Msg: TMessage); message CM_ENABLEDCHANGED;
{$ENDIF VCL}
function GetSubtitle: TJvWizardPageTitle;
function GetTitle: TJvWizardPageTitle;
procedure SetSubtitle(const Value: TJvWizardPageTitle);
procedure SetTitle(const Value: TJvWizardPageTitle);
protected
{$IFDEF VisualCLX}
procedure FontChanged; override;
procedure TextChanged; override;
procedure EnabledChanged; override;
{$ENDIF VisualCLX}
{$IFDEF VCL}
procedure CreateParams(var Params: TCreateParams); override;
{$ENDIF VCL}
procedure ReadState(Reader: TReader); override;
procedure AdjustClientRect(var Rect: TRect); override;
procedure Paint; override;
{ YW - DrawPage is called by paint method. all the derived page controls
should call this method to paint itsself rather than the overrided
paint method. }
procedure DrawPage(ACanvas: TCanvas; var ARect: TRect); virtual;
{ YW - called before the page shows up. Page: From page }
procedure Enter(const FromPage: TJvWizardCustomPage); virtual;
{ YW - called after the page shows up. }
procedure Done; virtual;
{ YW - called just before the page is hidden. Page: To page }
procedure Exit(const ToPage: TJvWizardCustomPage); virtual;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure EnableButton(AButton: TJvWizardButtonKind; AEnabled: Boolean); virtual;
property Wizard: TJvWizard read FWizard write SetWizard;
property PageIndex: Integer read GetPageIndex write SetPageIndex stored False;
published
property Header: TJvWizardPageHeader read FHeader write FHeader;
property Subtitle: TJvWizardPageTitle read GetSubtitle write SetSubtitle stored False;
property Title: TJvWizardPageTitle read GetTitle write SetTitle stored False;
property Image: TJvWizardImage read FImage write FImage;
property Panel: TJvWizardPagePanel read FPanel write FPanel;
property EnabledButtons: TJvWizardButtonSet read FEnabledButtons write SetEnabledButtons default bkAllButtons;
property VisibleButtons: TJvWizardButtonSet read FVisibleButtons write SetVisibleButtons default [bkBack, bkNext, bkCancel];
property EnableJumpToPage: Boolean read FEnableJumpToPage write FEnableJumpToPage default True; // Nonn
property Color default clBtnFace;
property Caption;
property Enabled;
property Font;
property Left stored False;
property Height stored False;
property PopupMenu;
property ShowHint;
property Top stored False;
property Width stored False;
property OnEnterPage: TJvWizardChangePageEvent read FOnEnterPage write FOnEnterPage;
property OnPage: TNotifyEvent read FOnPage write FOnPage;
property OnExitPage: TJvWizardChangePageEvent read FOnExitPage write FOnExitPage;
property OnPaintPage: TJvWizardPaintPageEvent read FOnPaintPage write FOnPaintPage;
property OnStartButtonClick: TJvWizardPageClickEvent read FOnStartButtonClick write FOnStartButtonClick;
property OnLastButtonClick: TJvWizardPageClickEvent read FOnLastButtonClick write FOnLastButtonClick;
property OnNextButtonClick: TJvWizardPageClickEvent read FOnNextButtonClick write FOnNextButtonClick;
property OnBackButtonClick: TJvWizardPageClickEvent read FOnBackButtonClick write FOnBackButtonClick;
property OnCancelButtonClick: TJvWizardPageClickEvent read FOnCancelButtonClick write FOnCancelButtonClick;
property OnFinishButtonClick: TJvWizardPageClickEvent read FOnFinishButtonClick write FOnFinishButtonClick;
property OnHelpButtonClick: TJvWizardPageClickEvent read FOnHelpButtonClick write FOnHelpButtonClick;
end;
{ YW - Wizard Welcome Page }
TJvWizardWelcomePage = class(TJvWizardCustomPage)
private
FWaterMark: TJvWizardWaterMark;
protected
procedure AdjustClientRect(var Rect: TRect); override;
procedure DrawPage(ACanvas: TCanvas; var ARect: TRect); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Color default clWindow;
property WaterMark: TJvWizardWaterMark read FWaterMark write FWaterMark;
end;
{ YW - Wizard Interior Page }
TJvWizardInteriorPage = class(TJvWizardCustomPage)
protected
procedure DrawPage(ACanvas: TCanvas; var ARect: TRect); override;
end;
TJvWizardSelectPageEvent = procedure(Sender: TObject;
FromPage: TJvWizardCustomPage; var ToPage: TJvWizardCustomPage) of object;
{ YW - JvWizard Page List }
TJvWizardPageList = class(TList)
private
FWizard: TJvWizard;
function GetItems(Index: Integer): TJvWizardCustomPage;
protected
procedure Notify(Ptr: Pointer; Action: TListNotification); override;
property Wizard: TJvWizard read FWizard write FWizard;
public
destructor Destroy; override;
property Items[Index: Integer]: TJvWizardCustomPage read GetItems; default;
end;
{ YW - JvWizard Control }
{$IFDEF USEJVCL}
TJvWizard = class(TJvCustomControl)
{$ELSE}
TJvWizard = class(TCustomControl)
{$ENDIF USEJVCL}
private
FPages: TJvWizardPageList;
FActivePage: TJvWizardCustomPage;
FRouteMap: TJvWizardRouteMapControl;
FNavigateButtons: array[TJvWizardButtonKind] of TJvWizardNavigateButton;
FButtonBarHeight: Integer;
FShowDivider: Boolean;
FOnSelectNextPage: TJvWizardSelectPageEvent;
FOnSelectPriorPage: TJvWizardSelectPageEvent;
FOnSelectFirstPage: TJvWizardSelectPageEvent;
FOnSelectLastPage: TJvWizardSelectPageEvent;
FOnActivePageChanged: TNotifyEvent;
FOnActivePageChanging: TJvWizardChangingPageEvent;
FHeaderImages: TCustomImageList;
FImageChangeLink: TChangeLink;
FAutoHideButtonBar: Boolean;
FDefaultButtons: Boolean;
{$IFNDEF USEJVCL}
FAboutInfo: TJvWizardAboutInfoForm; // Add by Steve Forbes
{$ENDIF !USEJVCL}
procedure SetShowDivider(Value: Boolean);
function GetShowRouteMap: Boolean;
procedure SetShowRouteMap(Value: Boolean);
procedure SetButtonBarHeight(Value: Integer);
procedure SetActivePage(Page: TJvWizardCustomPage);
procedure SetHeaderImages(Value: TCustomImageList);
function GetButtonClick(Index: Integer): TNotifyEvent;
procedure SetButtonClick(Index: Integer; const Value: TNotifyEvent);
procedure ImageListChange(Sender: TObject);
procedure CreateNavigateButtons;
procedure DestroyNavigateButtons;
procedure ChangeActivePage(Page: TJvWizardCustomPage);
function GetActivePageIndex: Integer;
procedure SetActivePageIndex(Value: Integer);
function GetPageCount: Integer;
procedure RepositionButtons;
procedure UpdateButtonsStatus;
{$IFDEF VCL}
procedure WMEraseBkgnd(var Msg: TWMEraseBkgnd); message WM_ERASEBKGND;
procedure WMGetDlgCode(var Msg: TWMGetDlgCode); message WM_GETDLGCODE;
procedure CMDesignHitTest(var Msg: TCMDesignHitTest); message CM_DESIGNHITTEST;
{$ENDIF VCL}
function FindNextEnabledPage(PageIndex: Integer; const Step: Integer = 1;
CheckDisable: Boolean = True): TJvWizardCustomPage;
procedure SetAutoHideButtonBar(const Value: Boolean);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -