cxnavigator.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,873 行 · 第 1/4 页
PAS
1,873 行
{********************************************************************}
{ }
{ Developer Express Visual Component Library }
{ ExpressEditors }
{ }
{ Copyright (c) 1998-2008 Developer Express Inc. }
{ ALL RIGHTS RESERVED }
{ }
{ The entire contents of this file is protected by U.S. and }
{ International Copyright Laws. Unauthorized reproduction, }
{ reverse-engineering, and distribution of all or any portion of }
{ the code contained in this file is strictly prohibited and may }
{ result in severe civil and criminal penalties and will be }
{ prosecuted to the maximum extent possible under the law. }
{ }
{ RESTRICTIONS }
{ }
{ THIS SOURCE CODE AND ALL RESULTING INTERMEDIATE FILES }
{ (DCU, OBJ, DLL, ETC.) ARE CONFIDENTIAL AND PROPRIETARY TRADE }
{ SECRETS OF DEVELOPER EXPRESS INC. THE REGISTERED DEVELOPER IS }
{ LICENSED TO DISTRIBUTE THE EXPRESSEDITORS AND ALL }
{ ACCOMPANYING VCL CONTROLS AS PART OF AN EXECUTABLE PROGRAM ONLY. }
{ }
{ THE SOURCE CODE CONTAINED WITHIN THIS FILE AND ALL RELATED }
{ FILES OR ANY PORTION OF ITS CONTENTS SHALL AT NO TIME BE }
{ COPIED, TRANSFERRED, SOLD, DISTRIBUTED, OR OTHERWISE MADE }
{ AVAILABLE TO OTHER INDIVIDUALS WITHOUT EXPRESS WRITTEN CONSENT }
{ AND PERMISSION FROM DEVELOPER EXPRESS INC. }
{ }
{ CONSULT THE END USER LICENSE AGREEMENT FOR INFORMATION ON }
{ ADDITIONAL RESTRICTIONS. }
{ }
{********************************************************************}
unit cxNavigator;
{$I cxVer.inc}
interface
uses
{$IFDEF DELPHI6}
Types,
{$ENDIF}
Messages, Windows, Classes, Controls, Forms, Graphics, ImgList,
StdCtrls, SysUtils, cxClasses, cxContainer, cxControls, cxFilter, cxGraphics,
cxLookAndFeels, cxLookAndFeelPainters, dxThemeManager;
const
NavigatorButtonCount = 16;
NBDI_FIRST = 0;
NBDI_PRIORPAGE = 1;
NBDI_PRIOR = 2;
NBDI_NEXT = 3;
NBDI_NEXTPAGE = 4;
NBDI_LAST = 5;
NBDI_INSERT = 6;
NBDI_APPEND = 7;
NBDI_DELETE = 8;
NBDI_EDIT = 9;
NBDI_POST = 10;
NBDI_CANCEL = 11;
NBDI_REFRESH = 12;
NBDI_SAVEBOOKMARK = 13;
NBDI_GOTOBOOKMARK = 14;
NBDI_FILTER = 15;
type
TcxCustomNavigatorButtons = class;
TcxNavigatorChangeType = (nctProperties, nctSize, nctLayout);
IcxNavigatorOwner = interface
['{504B7F43-8847-46C5-B84A-C24F8E5E61A6}']
procedure NavigatorChanged(AChangeType: TcxNavigatorChangeType);
function GetNavigatorBounds: TRect;
function GetNavigatorButtons: TcxCustomNavigatorButtons;
function GetNavigatorCanvas: TCanvas;
function GetNavigatorControl: TWinControl;
function GetNavigatorFocused: Boolean;
function GetNavigatorLookAndFeel: TcxLookAndFeel;
function GetNavigatorOwner: TComponent;
function GetNavigatorShowHint: Boolean;
function GetNavigatorTabStop: Boolean;
procedure NavigatorButtonsStateChanged;
procedure RefreshNavigator;
end;
TcxNavigatorButton = class(TPersistent)
private
FButtons: TcxCustomNavigatorButtons;
FDefaultIndex: Integer;
FDefaultVisible: Boolean;
FEnabled: Boolean;
FHint: string;
FImageIndex: TImageIndex;
FIsVisibleAssigned: Boolean;
FVisible: Boolean;
FOnClick: TNotifyEvent;
function GetInternalImageIndex: Integer;
function GetIternalImages: TCustomImageList;
procedure InternalSetVisible(Value: Boolean; AIsInternalSetting: Boolean = True);
function IsVisibleStored: Boolean;
procedure SetEnabled(const Value: Boolean);
procedure SetHint(const Value: string);
procedure SetImageIndex(Value: TImageIndex);
procedure SetOnClick(const Value: TNotifyEvent);
procedure SetVisible(const Value: Boolean);
protected
function GetOwner: TPersistent; override;
function GetInternalEnabled: Boolean;
function GetInternalHint: string;
function IsUserImageListUsed: Boolean;
procedure DoClick; dynamic;
procedure RestoreDefaultVisible(ACanBeVisible: Boolean);
function GetNavigator: IcxNavigatorOwner;
property DefaultIndex: Integer read FDefaultIndex write FDefaultIndex;
property InternalImageIndex: Integer read GetInternalImageIndex;
property InternalImages: TCustomImageList read GetIternalImages;
public
constructor Create(AButtons: TcxCustomNavigatorButtons;
ADefaultVisible: Boolean);
procedure Assign(Source: TPersistent); override;
procedure Click;
function GetImageSize: TSize;
property Buttons: TcxCustomNavigatorButtons read FButtons;
property Navigator: IcxNavigatorOwner read GetNavigator;
property OnClick: TNotifyEvent read FOnClick write SetOnClick;
published
property Enabled: Boolean read FEnabled write SetEnabled default True;
property Hint: string read FHint write SetHint;
property ImageIndex: TImageIndex read FImageIndex write SetImageIndex default -1;
property Visible: Boolean read FVisible write SetVisible stored IsVisibleStored;
end;
TcxCustomNavigator = class;
TcxNavigatorButtonClickEvent = procedure(Sender: TObject; AButtonIndex: Integer;
var ADone: Boolean) of object;
TcxCustomNavigatorButtons = class(TPersistent)
private
FNavigator: IcxNavigatorOwner;
FButtons: array [0 .. NavigatorButtonCount - 1] of TcxNavigatorButton;
FImages: TCustomImageList;
FImageChangeLink: TChangeLink;
FConfirmDelete: Boolean;
FOnButtonClick: TcxNavigatorButtonClickEvent;
function GetButton(Index: Integer): TcxNavigatorButton;
function GetButtonCount: Integer;
function GetDefaultImages: TCustomImageList;
procedure SetButton(Index: Integer; const Value: TcxNavigatorButton);
procedure SetConfirmDelete(const Value: Boolean);
procedure SetImages(const Value: TCustomImageList);
procedure SetOnButtonClick(const Value: TcxNavigatorButtonClickEvent);
procedure ImageListChange(Sender: TObject);
protected
function GetOwner: TPersistent; override;
procedure CreateButtons; virtual;
procedure DestroyButtons; virtual;
procedure DoButtonClick(ADefaultIndex: Integer); virtual;
function GetButtonEnabled(ADefaultIndex: Integer): Boolean; virtual;
function GetButtonHint(ADefaultIndex: Integer): string; virtual;
function GetButtonImageOffset: Integer; virtual;
function IsNavigatorEnabled: Boolean;
property ConfirmDelete: Boolean read FConfirmDelete write SetConfirmDelete default True;
property First: TcxNavigatorButton index NBDI_FIRST read GetButton write SetButton;
property PriorPage: TcxNavigatorButton index NBDI_PRIORPAGE read GetButton write SetButton;
property Prior: TcxNavigatorButton index NBDI_PRIOR read GetButton write SetButton;
property Next: TcxNavigatorButton index NBDI_NEXT read GetButton write SetButton;
property NextPage: TcxNavigatorButton index NBDI_NEXTPAGE read GetButton write SetButton;
property Last: TcxNavigatorButton index NBDI_LAST read GetButton write SetButton;
property Insert: TcxNavigatorButton index NBDI_INSERT read GetButton write SetButton;
property Append: TcxNavigatorButton index NBDI_APPEND read GetButton write SetButton;
property Delete: TcxNavigatorButton index NBDI_DELETE read GetButton write SetButton;
property Edit: TcxNavigatorButton index NBDI_EDIT read GetButton write SetButton;
property Post: TcxNavigatorButton index NBDI_POST read GetButton write SetButton;
property Cancel: TcxNavigatorButton index NBDI_CANCEL read GetButton write SetButton;
property Refresh: TcxNavigatorButton index NBDI_REFRESH read GetButton write SetButton;
property SaveBookmark: TcxNavigatorButton index NBDI_SAVEBOOKMARK read GetButton write SetButton;
property GotoBookmark: TcxNavigatorButton index NBDI_GOTOBOOKMARK read GetButton write SetButton;
property Filter: TcxNavigatorButton index NBDI_FILTER read GetButton write SetButton;
public
constructor Create(ANavigator: IcxNavigatorOwner); virtual;
destructor Destroy; override;
procedure Assign(Source: TPersistent); override;
procedure ClickButton(Index: Integer);
procedure ReleaseBookmark; virtual;
property ButtonCount: Integer read GetButtonCount;
property Buttons[Index: Integer]: TcxNavigatorButton read GetButton; default;
property DefaultImages: TCustomImageList read GetDefaultImages;
property Images: TCustomImageList read FImages write SetImages;
property Navigator: IcxNavigatorOwner read FNavigator;
published
property OnButtonClick: TcxNavigatorButtonClickEvent read FOnButtonClick
write SetOnButtonClick;
end;
TcxNavigatorButtonViewInfo = class
public
Button: TcxNavigatorButton;
Bounds: TRect;
Enabled: Boolean;
Hint: string;
end;
TcxNavigatorViewInfo = class
private
FButtonPressTimer: TcxTimer;
FButtons: TList;
FCanvas: TcxCanvas;
FFocusedButton: TcxNavigatorButton;
FHintTimer: TcxTimer;
FHintWindow: THintWindow;
FHintWindowShowing: Boolean;
FHotTrackButtonViewInfo: TcxNavigatorButtonViewInfo;
FIsDirty: Boolean;
FIsInplace: Boolean;
FIsSelected: Boolean;
FNavigator: IcxNavigatorOwner;
FPressedButtonViewInfo: TcxNavigatorButtonViewInfo;
function GetButton(Index: Integer): TcxNavigatorButtonViewInfo;
function GetButtonCount: Integer;
function GetFocusedButton: TcxNavigatorButtonViewInfo;
procedure SetFocusedButton(Value: TcxNavigatorButtonViewInfo);
function StopButtonPressTimerIfLeftMouseReleased: Boolean;
procedure DoButtonPressTimer(Sender: TObject);
procedure DoHintTimer(Sender: TObject);
procedure UpdateSelected;
protected
function GetButtonBorderExtent(APainter: TcxCustomLookAndFeelPainterClass;
AButtonIndex, AButtonCount: Integer): TRect;
function GetButtonState(AButton: TcxNavigatorButtonViewInfo): TcxButtonState;
function GetMiddleButtonBorderExtent(APainter: TcxCustomLookAndFeelPainterClass): TRect;
function GetMinButtonSize(AButtonIndex, AButtonCount: Integer;
AAutoHeight: Boolean = False): TSize;
function GetVisibleButtonCount: Integer;
procedure InvalidateButton(AButton: TcxNavigatorButtonViewInfo);
procedure PaintButton(AButtonIndex: Integer);
procedure HintActivate(AShow: Boolean);
property Canvas: TcxCanvas read FCanvas;
property FocusedButton: TcxNavigatorButtonViewInfo read GetFocusedButton
write SetFocusedButton;
property HotTrackButtonViewInfo: TcxNavigatorButtonViewInfo
read FHotTrackButtonViewInfo write FHotTrackButtonViewInfo;
property Navigator: IcxNavigatorOwner read FNavigator;
property PressedButtonViewInfo: TcxNavigatorButtonViewInfo
read FPressedButtonViewInfo write FPressedButtonViewInfo;
public
constructor Create(ANavigator: IcxNavigatorOwner;
AIsInplace: Boolean = True); virtual;
destructor Destroy; override;
procedure Calculate;
procedure CheckSize(var AWidth, AHeight: Integer;
ACheckMinHeight: Boolean = False);
procedure Clear;
procedure DoEnter;
procedure DoExit;
function GetButtonAt(const pt: TPoint): TcxNavigatorButton;
function GetButtonViewInfoAt(const pt: TPoint): TcxNavigatorButtonViewInfo;
function GetButtonViewInfoByButton(AButton: TcxNavigatorButton): TcxNavigatorButtonViewInfo;
procedure MakeIsDirty;
procedure MouseDown(X, Y: Integer);
procedure MouseMove(X, Y: Integer);
procedure MouseUp(X, Y: Integer);
procedure Paint;
procedure PressArrowKey(ALeftKey: Boolean);
procedure UpdateButtonsEnabled;
property ButtonCount: Integer read GetButtonCount;
property Buttons[Index: Integer]: TcxNavigatorButtonViewInfo read GetButton;
end;
TcxNavigatorViewInfoClass = class of TcxNavigatorViewInfo;
TcxCustomNavigator = class(TcxControl, IUnknown,
IcxNavigatorOwner, IcxMouseTrackingCaller, IdxSkinSupport)
private
FButtons: TcxCustomNavigatorButtons;
FButtonsEvents: TNotifyEvent;
FViewInfo: TcxNavigatorViewInfo;
procedure WMGetDlgCode(var Message: TWMGetDlgCode); message WM_GETDLGCODE;
procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
procedure CMHintShow(var Message: TCMHintShow); message CM_HINTSHOW;
protected
function CanFocusOnClick: Boolean; override;
function CanResize(var NewWidth, NewHeight: Integer): Boolean; override;
function CreateButtons: TcxCustomNavigatorButtons; virtual;
procedure DoEnter; override;
procedure DoExit; override;
procedure EnabledChanged; dynamic;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure LookAndFeelChanged(Sender: TcxLookAndFeel;
AChangedValues: TcxLookAndFeelValues); override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure MouseEnter(AControl: TControl); override;
procedure MouseLeave(AControl: TControl); override;
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure Paint; override;
//IcxMouseTrackingCaller
procedure IcxMouseTrackingCaller.MouseLeave = NavigatorMouseLeave;
procedure NavigatorMouseLeave;
// IcxNavigatorOwner
procedure NavigatorChanged(AChangeType: TcxNavigatorChangeType);
function GetNavigatorBounds: TRect;
function GetNavigatorButtons: TcxCustomNavigatorButtons;
function GetNavigatorCanvas: TCanvas;
function GetNavigatorControl: TWinControl;
function GetNavigatorFocused: Boolean;
function GetNavigatorLookAndFeel: TcxLookAndFeel;
function GetNavigatorOwner: TComponent;
function GetNavigatorShowHint: Boolean;
function GetNavigatorTabStop: Boolean;
function GetViewInfoClass: TcxNavigatorViewInfoClass; virtual;
procedure InitButtons; virtual;
procedure NavigatorButtonsStateChanged;
procedure RefreshNavigator;
procedure CreateWnd; override;
procedure WndProc(var Message: TMessage); override;
property CustomButtons: TcxCustomNavigatorButtons read FButtons;
property ViewInfo: TcxNavigatorViewInfo read FViewInfo;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure ClickButton(Index: Integer);
procedure RestoreButtons;
property LookAndFeel;
published
property TabStop default False;
property ButtonsEvents: TNotifyEvent read FButtonsEvents
write FButtonsEvents;
end;
TcxNavigatorControlNotifier = class
private
FList: TList;
public
constructor Create;
destructor Destroy; override;
procedure AddNavigator(ANavigator: IcxNavigatorOwner);
procedure RemoveNavigator(ANavigator: IcxNavigatorOwner);
procedure RefreshNavigatorButtons;
end;
IcxNavigator = interface
['{A15F80CA-DE56-47CB-B0EB-035D0BF90E9D}']
function CanAppend: Boolean;
function CanDelete: Boolean;
function CanEdit: Boolean;
function CanInsert: Boolean;
function IsActive: Boolean;
function IsBof: Boolean;
function IsBookmarkAvailable: Boolean;
function IsEditing: Boolean;
function IsEof: Boolean;
procedure ClearBookmark;
procedure DoAction(AButtonIndex: Integer);
function GetNotifier: TcxNavigatorControlNotifier;
function IsActionSupported(AButtonIndex: Integer): Boolean;
end;
TcxNavigatorControlButtonsGetControl = function: IcxNavigator of object;
TcxNavigatorControlButtons = class(TcxCustomNavigatorButtons)
private
FOnGetControl: TcxNavigatorControlButtonsGetControl;
function GetControl: IcxNavigator;
protected
procedure DoButtonClick(ADefaultIndex: Integer); override;
function GetButtonEnabled(ADefaultIndex: Integer): Boolean; override;
property Control: IcxNavigator read GetControl;
public
procedure ReleaseBookmark; override;
property OnGetControl: TcxNavigatorControlButtonsGetControl
read FOnGetControl write FOnGetControl;
published
property ConfirmDelete;
property Images;
property First;
property PriorPage;
property Prior;
property Next;
property NextPage;
property Last;
property Insert;
property Append;
property Delete;
property Edit;
property Post;
property Cancel;
property Refresh;
property SaveBookmark;
property GotoBookmark;
property Filter;
end;
TcxNavigatorControlButtonsClass = class of TcxNavigatorControlButtons;
TcxCustomNavigatorControl = class(TcxCustomNavigator)
private
FControl: TComponent;
function GetButtons: TcxNavigatorControlButtons;
function GetControl: IcxNavigator;
procedure SetButtons(Value: TcxNavigatorControlButtons);
procedure SetControl(Value: TComponent);
protected
function CreateButtons: TcxCustomNavigatorButtons; override;
function GetButtonsClass: TcxNavigatorControlButtonsClass; virtual;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure InitButtons; override;
property Buttons: TcxNavigatorControlButtons read GetButtons write SetButtons;
property Control: TComponent read FControl write SetControl;
public
destructor Destroy; override;
end;
TcxNavigator = class(TcxCustomNavigatorControl)
published
property Control;
property Buttons;
property LookAndFeel;
property Align;
property Anchors;
property Constraints;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property Ctl3D;
property ParentCtl3D;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property TabOrder;
property TabStop;
property Visible;
{$IFDEF DELPHI5}
property OnContextPopup;
{$ENDIF}
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnResize;
property OnStartDock;
property OnStartDrag;
end;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?