📄 dialogs.pas
字号:
{*******************************************************}
{ }
{ Borland Delphi Visual Component Library }
{ }
{ Copyright (c) 1995-2001 Borland Software Corporation }
{ }
{*******************************************************}
unit Dialogs;
{$R-,T-,H+,X+}
interface
{$IFDEF LINUX}
uses WinUtils, Windows, Messages, SysUtils, CommDlg,
Printers, Classes, Graphics, Controls, Forms, StdCtrls;
{$ENDIF}
{$IFDEF MSWINDOWS}
uses Windows, Messages, SysUtils, CommDlg,
Printers, Classes, Graphics, Controls, Forms, StdCtrls;
{$ENDIF}
const
{ Maximum number of custom colors in color dialog }
MaxCustomColors = 16;
type
{ TCommonDialog }
TCommonDialog = class(TComponent)
private
FCtl3D: Boolean;
FDefWndProc: Pointer;
FHelpContext: THelpContext;
FHandle: HWnd;
FObjectInstance: Pointer;
FTemplate: PChar;
FOnClose: TNotifyEvent;
FOnShow: TNotifyEvent;
procedure WMDestroy(var Message: TWMDestroy); message WM_DESTROY;
procedure WMInitDialog(var Message: TWMInitDialog); message WM_INITDIALOG;
procedure WMNCDestroy(var Message: TWMNCDestroy); message WM_NCDESTROY;
procedure MainWndProc(var Message: TMessage);
protected
procedure DoClose; dynamic;
procedure DoShow; dynamic;
procedure WndProc(var Message: TMessage); virtual;
function MessageHook(var Msg: TMessage): Boolean; virtual;
function TaskModalDialog(DialogFunc: Pointer; var DialogData): Bool; virtual;
property Template: PChar read FTemplate write FTemplate;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function Execute: Boolean; virtual; abstract;
procedure DefaultHandler(var Message); override;
property Handle: HWnd read FHandle;
published
property Ctl3D: Boolean read FCtl3D write FCtl3D default True;
property HelpContext: THelpContext read FHelpContext write FHelpContext default 0;
property OnClose: TNotifyEvent read FOnClose write FOnClose;
property OnShow: TNotifyEvent read FOnShow write FOnShow;
end;
{ TOpenDialog }
TOpenOption = (ofReadOnly, ofOverwritePrompt, ofHideReadOnly,
ofNoChangeDir, ofShowHelp, ofNoValidate, ofAllowMultiSelect,
ofExtensionDifferent, ofPathMustExist, ofFileMustExist, ofCreatePrompt,
ofShareAware, ofNoReadOnlyReturn, ofNoTestFileCreate, ofNoNetworkButton,
ofNoLongNames, ofOldStyleDialog, ofNoDereferenceLinks, ofEnableIncludeNotify,
ofEnableSizing, ofDontAddToRecent, ofForceShowHidden);
TOpenOptions = set of TOpenOption;
TOpenOptionEx = (ofExNoPlacesBar);
TOpenOptionsEx = set of TOpenOptionEx;
TFileEditStyle = (fsEdit, fsComboBox);
TOFNotifyEx = type CommDlg.TOFNotifyEx;
{$NODEFINE TOFNotifyEx}
TIncludeItemEvent = procedure (const OFN: TOFNotifyEx; var Include: Boolean) of object;
TOpenDialog = class(TCommonDialog)
private
FHistoryList: TStrings;
FOptions: TOpenOptions;
FFilter: string;
FFilterIndex: Integer;
FCurrentFilterIndex: Integer;
FInitialDir: string;
FTitle: string;
FDefaultExt: string;
FFileName: TFileName;
FFiles: TStrings;
FFileEditStyle: TFileEditStyle;
FOnSelectionChange: TNotifyEvent;
FOnFolderChange: TNotifyEvent;
FOnTypeChange: TNotifyEvent;
FOnCanClose: TCloseQueryEvent;
FOnIncludeItem: TIncludeItemEvent;
FOptionsEx: TOpenOptionsEx;
function GetFileName: TFileName;
function GetFilterIndex: Integer;
procedure ReadFileEditStyle(Reader: TReader);
procedure SetHistoryList(Value: TStrings);
procedure SetInitialDir(const Value: string);
protected
function CanClose(var OpenFileName: TOpenFileName): Boolean;
function DoCanClose: Boolean; dynamic;
function DoExecute(Func: Pointer): Bool;
procedure DoSelectionChange; dynamic;
procedure DoFolderChange; dynamic;
procedure DoTypeChange; dynamic;
procedure DoIncludeItem(const OFN: TOFNotifyEx; var Include: Boolean); dynamic;
procedure DefineProperties(Filer: TFiler); override;
procedure GetFileNames(var OpenFileName: TOpenFileName);
function GetStaticRect: TRect; virtual;
procedure WndProc(var Message: TMessage); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function Execute: Boolean; override;
property FileEditStyle: TFileEditStyle read FFileEditStyle write FFileEditStyle;
property Files: TStrings read FFiles;
property HistoryList: TStrings read FHistoryList write SetHistoryList;
published
property DefaultExt: string read FDefaultExt write FDefaultExt;
property FileName: TFileName read GetFileName write FFileName;
property Filter: string read FFilter write FFilter;
property FilterIndex: Integer read GetFilterIndex write FFilterIndex default 1;
property InitialDir: string read FInitialDir write SetInitialDir;
property Options: TOpenOptions read FOptions write FOptions default [ofHideReadOnly, ofEnableSizing];
property OptionsEx: TOpenOptionsEx read FOptionsEx write FOptionsEx default [];
property Title: string read FTitle write FTitle;
property OnCanClose: TCloseQueryEvent read FOnCanClose write FOnCanClose;
property OnFolderChange: TNotifyEvent read FOnFolderChange write FOnFolderChange;
property OnSelectionChange: TNotifyEvent read FOnSelectionChange write FOnSelectionChange;
property OnTypeChange: TNotifyEvent read FOnTypeChange write FOnTypeChange;
property OnIncludeItem: TIncludeItemEvent read FOnIncludeItem write FOnIncludeItem;
end;
{ TSaveDialog }
TSaveDialog = class(TOpenDialog)
function Execute: Boolean; override;
end;
{ TColorDialog }
TColorDialogOption = (cdFullOpen, cdPreventFullOpen, cdShowHelp,
cdSolidColor, cdAnyColor);
TColorDialogOptions = set of TColorDialogOption;
TCustomColors = array[0..MaxCustomColors - 1] of Longint;
TColorDialog = class(TCommonDialog)
private
FColor: TColor;
FOptions: TColorDialogOptions;
FCustomColors: TStrings;
procedure SetCustomColors(Value: TStrings);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function Execute: Boolean; override;
published
property Color: TColor read FColor write FColor default clBlack;
property Ctl3D default True;
property CustomColors: TStrings read FCustomColors write SetCustomColors;
property Options: TColorDialogOptions read FOptions write FOptions default [];
end;
{ TFontDialog }
TFontDialogOption = (fdAnsiOnly, fdTrueTypeOnly, fdEffects,
fdFixedPitchOnly, fdForceFontExist, fdNoFaceSel, fdNoOEMFonts,
fdNoSimulations, fdNoSizeSel, fdNoStyleSel, fdNoVectorFonts,
fdShowHelp, fdWysiwyg, fdLimitSize, fdScalableOnly, fdApplyButton);
TFontDialogOptions = set of TFontDialogOption;
TFontDialogDevice = (fdScreen, fdPrinter, fdBoth);
TFDApplyEvent = procedure(Sender: TObject; Wnd: HWND) of object;
TFontDialog = class(TCommonDialog)
private
FFont: TFont;
FDevice: TFontDialogDevice;
FOptions: TFontDialogOptions;
FOnApply: TFDApplyEvent;
FMinFontSize: Integer;
FMaxFontSize: Integer;
FFontCharsetModified: Boolean;
FFontColorModified: Boolean;
procedure DoApply(Wnd: HWND);
procedure SetFont(Value: TFont);
procedure UpdateFromLogFont(const LogFont: TLogFont);
protected
procedure Apply(Wnd: HWND); dynamic;
procedure WndProc(var Message: TMessage); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function Execute: Boolean; override;
published
property Font: TFont read FFont write SetFont;
property Device: TFontDialogDevice read FDevice write FDevice default fdScreen;
property MinFontSize: Integer read FMinFontSize write FMinFontSize default 0;
property MaxFontSize: Integer read FMaxFontSize write FMaxFontSize default 0;
property Options: TFontDialogOptions read FOptions write FOptions default [fdEffects];
property OnApply: TFDApplyEvent read FOnApply write FOnApply;
end;
{ TPrinterSetupDialog }
TPrinterSetupDialog = class(TCommonDialog)
public
function Execute: Boolean; override;
end;
{ TPrintDialog }
TPrintRange = (prAllPages, prSelection, prPageNums);
TPrintDialogOption = (poPrintToFile, poPageNums, poSelection, poWarning,
poHelp, poDisablePrintToFile);
TPrintDialogOptions = set of TPrintDialogOption;
TPrintDialog = class(TCommonDialog)
private
FFromPage: Integer;
FToPage: Integer;
FCollate: Boolean;
FOptions: TPrintDialogOptions;
FPrintToFile: Boolean;
FPrintRange: TPrintRange;
FMinPage: Integer;
FMaxPage: Integer;
FCopies: Integer;
procedure SetNumCopies(Value: Integer);
public
function Execute: Boolean; override;
published
property Collate: Boolean read FCollate write FCollate default False;
property Copies: Integer read FCopies write SetNumCopies default 0;
property FromPage: Integer read FFromPage write FFromPage default 0;
property MinPage: Integer read FMinPage write FMinPage default 0;
property MaxPage: Integer read FMaxPage write FMaxPage default 0;
property Options: TPrintDialogOptions read FOptions write FOptions default [];
property PrintToFile: Boolean read FPrintToFile write FPrintToFile default False;
property PrintRange: TPrintRange read FPrintRange write FPrintRange default prAllPages;
property ToPage: Integer read FToPage write FToPage default 0;
end;
TPrinterOrientation = Printers.TPrinterOrientation; // required for Form Designer
TPageSetupDialogOption = (psoDefaultMinMargins, psoDisableMargins,
psoDisableOrientation, psoDisablePagePainting, psoDisablePaper, psoDisablePrinter,
psoMargins, psoMinMargins, psoShowHelp, psoWarning, psoNoNetworkButton);
TPageSetupDialogOptions = set of TPageSetupDialogOption;
TPrinterKind = (pkDotMatrix, pkHPPCL);
TPageType = (ptEnvelope, ptPaper);
TPageSetupBeforePaintEvent = procedure (Sender: TObject; const PaperSize: SmallInt;
const Orientation: TPrinterOrientation; const PageType: TPageType;
var DoneDrawing: Boolean) of object;
TPageMeasureUnits = (pmDefault, pmMillimeters, pmInches);
TPaintPageEvent = procedure(Sender: TObject; Canvas: TCanvas; PageRect: TRect;
var DoneDrawing: Boolean) of object;
{ TPageSetupDialog }
TPageSetupDialog = class(TCommonDialog)
private
FOptions: TPageSetupDialogOptions;
FMinMarginLeft: Integer;
FMinMarginTop: Integer;
FMinMarginRight: Integer;
FMinMarginBottom: Integer;
FMarginLeft: Integer;
FMarginTop: Integer;
FMarginRight: Integer;
FMarginBottom: Integer;
FPageWidth: Integer;
FPageHeight: Integer;
FPageSetupDlgRec: TPageSetupDlg;
FBeforePaint: TPageSetupBeforePaintEvent;
FUnits: TPageMeasureUnits;
FOnDrawRetAddress: TPaintPageEvent;
FOnDrawMinMargin: TPaintPageEvent;
FOnDrawEnvStamp: TPaintPageEvent;
FOnDrawFullPage: TPaintPageEvent;
FOnDrawGreekText: TPaintPageEvent;
FOnDrawMargin: TPaintPageEvent;
public
constructor Create(AOwner: TComponent); override;
function Execute: Boolean; override;
function GetDefaults: Boolean;
property PageSetupDlgRec: TPageSetupDlg read FPageSetupDlgRec;
published
property MinMarginLeft: Integer read FMinMarginLeft write FMinMarginLeft;
property MinMarginTop: Integer read FMinMarginTop write FMinMarginTop;
property MinMarginRight: Integer read FMinMarginRight write FMinMarginRight;
property MinMarginBottom: Integer read FMinMarginBottom write FMinMarginBottom;
property MarginLeft: Integer read FMarginLeft write FMarginLeft;
property MarginTop: Integer read FMarginTop write FMarginTop;
property MarginRight: Integer read FMarginRight write FMarginRight;
property MarginBottom: Integer read FMarginBottom write FMarginBottom;
property Options: TPageSetupDialogOptions read FOptions write FOptions
default [psoDefaultMinMargins];
property PageWidth: Integer read FPageWidth write FPageWidth;
property PageHeight: Integer read FPageHeight write FPageHeight;
property Units: TPageMeasureUnits read FUnits write FUnits default pmDefault;
property BeforePaint: TPageSetupBeforePaintEvent read FBeforePaint
write FBeforePaint;
property OnDrawFullPage: TPaintPageEvent read FOnDrawFullPage write FOnDrawFullPage;
property OnDrawMinMargin: TPaintPageEvent read FOnDrawMinMargin write FOnDrawMinMargin;
property OnDrawMargin: TPaintPageEvent read FOnDrawMargin write FOnDrawMargin;
property OnDrawGreekText: TPaintPageEvent read FOnDrawGreekText write FOnDrawGreekText;
property OnDrawEnvStamp: TPaintPageEvent read FOnDrawEnvStamp write FOnDrawEnvStamp;
property OnDrawRetAddress: TPaintPageEvent read FOnDrawRetAddress write FOnDrawRetAddress;
end;
{ TFindDialog }
TFindOption = (frDown, frFindNext, frHideMatchCase, frHideWholeWord,
frHideUpDown, frMatchCase, frDisableMatchCase, frDisableUpDown,
frDisableWholeWord, frReplace, frReplaceAll, frWholeWord, frShowHelp);
TFindOptions = set of TFindOption;
TFindReplaceFunc = function(var FindReplace: TFindReplace): HWnd stdcall;
TFindDialog = class(TCommonDialog)
private
FOptions: TFindOptions;
FPosition: TPoint;
FFindReplaceFunc: TFindReplaceFunc;
FRedirector: TWinControl;
FOnFind: TNotifyEvent;
FOnReplace: TNotifyEvent;
FFindHandle: HWnd;
FFindReplace: TFindReplace;
FFindText: array[0..255] of Char;
FReplaceText: array[0..255] of Char;
function GetFindText: string;
function GetLeft: Integer;
function GetPosition: TPoint;
function GetReplaceText: string;
function GetTop: Integer;
procedure SetFindText(const Value: string);
procedure SetLeft(Value: Integer);
procedure SetPosition(const Value: TPoint);
procedure SetReplaceText(const Value: string);
procedure SetTop(Value: Integer);
property ReplaceText: string read GetReplaceText write SetReplaceText;
property OnReplace: TNotifyEvent read FOnReplace write FOnReplace;
protected
function MessageHook(var Msg: TMessage): Boolean; override;
procedure Find; dynamic;
procedure Replace; dynamic;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure CloseDialog;
function Execute: Boolean; override;
property Left: Integer read GetLeft write SetLeft;
property Position: TPoint read GetPosition write SetPosition;
property Top: Integer read GetTop write SetTop;
published
property FindText: string read GetFindText write SetFindText;
property Options: TFindOptions read FOptions write FOptions default [frDown];
property OnFind: TNotifyEvent read FOnFind write FOnFind;
end;
{ TReplaceDialog }
TReplaceDialog = class(TFindDialog)
public
constructor Create(AOwner: TComponent); override;
published
property ReplaceText;
property OnReplace;
end;
{ Message dialog }
type
TMsgDlgType = (mtWarning, mtError, mtInformation, mtConfirmation, mtCustom);
TMsgDlgBtn = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore,
mbAll, mbNoToAll, mbYesToAll, mbHelp);
TMsgDlgButtons = set of TMsgDlgBtn;
const
mbYesNoCancel = [mbYes, mbNo, mbCancel];
mbYesAllNoAllCancel = [mbYes, mbYesToAll, mbNo, mbNoToAll, mbCancel];
mbOKCancel = [mbOK, mbCancel];
mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore];
mbAbortIgnore = [mbAbort, mbIgnore];
function CreateMessageDialog(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons): TForm;
function MessageDlg(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
function MessageDlgPos(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): Integer;
function MessageDlgPosHelp(const Msg: string; DlgType: TMsgDlgType;
Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer;
const HelpFileName: string): Integer;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -