📄 mxoutlookbarpro.pas
字号:
Procedure SetButtonStyle( AValue: TmxButtonStyle );
Procedure SetButtonView( AValue: TmxButtonView );
Procedure SetAutoSize( AValue: Boolean );
Procedure SetColor( AValue: TColor );
Procedure SetFont( AValue: TFont );
Procedure SetHighlightFont( AValue: TFont );
Procedure SetHeight( AValue: Word );
Procedure SetWidth( AValue: Word );
Procedure SetOptions( AValue: TmxButtonOptions );
Procedure SetWordWrap( AValue: Boolean );
Procedure SetAlignment( AValue: TAlignment );
Procedure SetBiDiMode( AValue: TBiDiMode ); Virtual;
Procedure SetShowAccelChar( AValue: Boolean );
Procedure SetParentBiDiMode( AValue: Boolean ); Virtual;
Procedure SetButtonKind( AValue: TmxButtonKind );
Procedure SetMargin( AValue: Integer );
Procedure SetCheckState( AValue: TCheckBoxState );
Procedure SetChecked( AValue: Boolean );
Function GetButtonImageList: TCustomImageList;
Function GetSettings: TmxBarSettings;
Function GetStyle: TmxButtonStyle;
Function GetView: TmxButtonView;
Procedure CalculateButtonRect( Var ButtonRect: TRect; Var ImageRect: TRect; Var FocusRect: TRect; Var LabelRect: TRect );
Function CalculateImagePositon( ButtonRect: TRect ): TRect;
Function CalculateSmallImagePositon( ButtonRect: TRect ): TRect;
Function GetFont( FocusEnabled: Boolean ): TFont;
Function IsBiDiModeStored: Boolean;
Procedure DoClick; Virtual;
Function GetHeaderIndex: Integer;
Function GetHeader: TmxHeader;
Function IsTheFirstButton: Boolean;
Function IsTheLastButton: Boolean;
Protected
Property ActionLink: TControlActionLink Read FActionLink Write FActionLink;
Function GetDisplayName: String; Override;
Procedure SetDisplayName( Const AValue: String ); Override;
Procedure ActionChange( Sender: TObject; CheckDefaults: Boolean ); Virtual;
Function GetActionLinkClass: TControlActionLinkClass; Virtual;
Procedure DrawCaption( ACanvas: TCanvas; Pushed: Boolean; Underline: Boolean ); Virtual;
Procedure DrawCheckStyle( ACanvas: TCanvas ); Virtual;
Procedure DrawFocusRect( ACanvas: TCanvas; Var ARect: TRect; AButtonState: TmxButtonState ); Virtual;
Procedure DrawXPFocusRect( ACanvas: TCanvas; Var ARect: TRect; AButtonState: TmxButtonState ); Virtual;
Procedure DrawImageRect( ACanvas: TCanvas; Var ARect: TRect; Pushed: Boolean ); Virtual;
Procedure DrawXPImageRect( ACanvas: TCanvas; Var ARect: TRect; Pushed: Boolean ); Virtual;
Procedure Draw( DrawBitmap: TBitmap; Var ARect: TRect; MaxBottom: Integer; Calcsize: Boolean ); Virtual;
Procedure DoBeforeDrawButton( ACanvas: TCanvas; Var AButtonRect: TRect; Var AFocusRect: TRect; Var AImageRect: TRect; Var ALabelRect: TRect ); Virtual;
Procedure DoDrawButton( ACanvas: TCanvas; AView: TmxButtonView; AState: TmxButtonState; AImageRect: TRect; ALabelRect: TRect ); Virtual;
Procedure DoAfterDrawButton( ACanvas: TCanvas; AImageRect: TRect; ALabelRect: TRect ); Virtual;
Public
Property HitStatus: TmxHitPosition Read FDragDropHitStatus;
Property IsFirstButton: Boolean Read IsTheFirstButton;
Property IsLastButton: Boolean Read IsTheLastButton;
Property HeaderIndex: Integer Read GetHeaderIndex;
Property ButtonRect: TRect Read FButtonRect;
Property LabelRect: TRect Read FLabelRect;
{$WARNINGS OFF}
Property Data: Pointer Read FData Write SetData;
{$WARNINGS ON}
Function UseRightToLeftReading: Boolean;
Function DrawTextBiDiModeFlags( Flags: Longint ): Longint;
Function UseRightToLeftAlignment: Boolean;
Function DrawTextBiDiModeFlagsReadingOnly: Longint;
Constructor Create( ACollection: TCollection ); Override;
Destructor Destroy; Override;
Procedure Assign( Source: TPersistent ); Override;
Procedure AssignTo( Destination: TPersistent ); Override;
Procedure Alert;
Procedure StopAlert;
Published
Property Action: TBasicAction Read GetAction Write SetAction;
Property AutoSize: Boolean Read FAutoSize Write SetAutoSize;
Property Alignment: TAlignment Read FAlignment Write SetAlignment Default taCenter;
Property AllowGrayed: Boolean Read FAllowGrayed Write FAllowGrayed;
Property ButtonIndex: Integer Read GetButtonIndex Write SetButtonIndex;
Property ButtonKind: TmxButtonKind Read FButtonKind Write SetButtonKind Default bkButton;
Property ButtonStyle: TmxButtonStyle Read FButtonStyle Write SetButtonStyle;
Property ButtonView: TmxButtonView Read FButtonView Write SetButtonView;
Property BiDiMode: TBiDiMode Read FBiDiMode Write SetBiDiMode Stored IsBiDiModeStored;
Property Checked: Boolean Read FChecked Write SetChecked;
Property Caption: String Read FCaption Write SetCaption;
Property Color: TColor Read FColor Write SetColor;
Property Cursor: TCursor Read FCursor Write FCursor Default crDefault;
Property CheckState: TCheckBoxState Read FCheckState Write SetCheckState;
Property Enabled: Boolean Read FEnabled Write SetEnabled;
Property Font: TFont Read FFont Write SetFont;
Property HighlightFont: TFont Read FHighlightFont Write SetHighlightFont;
Property HelpContext: THelpContext Read FHelpContext Write SetHelpContext;
Property Height: Word Read FHeight Write SetHeight Default 20;
Property Hint: String Read FHint Write SetHint;
Property ImageIndex: TImageIndex Read FImageIndex Write SetImageIndex;
Property Margin: Integer Read FMargin Write SetMargin Default 4;
Property Name: String Read GetDisplayName Write SetDisplayName;
Property PopupMenu: TPopupMenu Read FPopupMenu Write FPopupMenu;
Property ShowAccelChar: Boolean Read FShowAccelChar Write SetShowAccelChar Default True;
Property ParentBiDiMode: Boolean Read FParentBiDiMode Write SetParentBiDiMode Default True;
Property Tag: Longint Read FTag Write FTag Default 0;
Property Transparent: Boolean Read FTransparent Write SetTransparent;
Property Options: TmxButtonOptions Read FOptions Write SetOptions;
Property UserString: String Read FUserString Write FUserString;
Property Visible: Boolean Read FVisible Write SetVisible;
Property Width: Word Read FWidth Write SetWidth Default 20;
Property WordWrap: Boolean Read FWordWrap Write SetWordWrap Default False;
Property OnClick: TNotifyEvent Read FOnClick Write FOnClick;
Property OnBeforeDrawButton: TmxEventBeforeDrawCommandButton Read FOnBeforeDrawButton Write FOnBeforeDrawButton;
Property OnDrawButton: TmxEventDrawCommandButton Read FOnDrawButton Write FOnDrawButton;
Property OnAfterDrawButton: TmxEventAfterDrawCommandButton Read FOnAfterDrawButton Write FOnAfterDrawButton;
End;
// ************************************************************************
// ************************************************************************
// ************************************************************************
TmxButtons = Class( TCollection )
Private
FOwner: TmxHeader;
FOutlookBarPro: TmxOutlookBarPro;
Function GetButtonItem( Index: Integer ): TmxButton;
Procedure SetButtonItem( Index: Integer; AValue: TmxButton );
Protected
Function GetAttrCount: Integer; Override;
Function GetAttr( Index: Integer ): String; Override;
Function GetItemAttr( Index, ItemIndex: Integer ): String; Override;
Procedure SetItemName( Item: TCollectionItem ); Override;
Procedure Update( Item: TCollectionItem ); Override;
Function GetOwner: TPersistent; Override;
Public
Constructor Create( AOutlookBarPro: TmxOutlookBarPro; AHeader: TmxHeader; ItemClass: TCollectionItemClass );
Function Add: TmxButton;
Property OutlookBarPro: TmxOutlookBarPro Read FOutlookBarPro;
Property Header: TmxHeader Read FOwner;
Property Buttons[ Index: Integer ]: TmxButton Read GetButtonItem Write SetButtonItem; Default;
End;
// ************************************************************************
// ************************************************************************
// ************************************************************************
TmxOutlookBarPro = Class( TCustomControl )
Private
FAcceptedObject: Boolean;
FLoaded: Boolean;
FStopAlerting: Boolean;
FAlertColor: TColor;
FAlertedButton: TmxButton;
FDropMarkColor: TColor;
FLastDropMode: TmxDropMode;
FDraggedButton: TmxButton;
FDragThreshold: Integer;
FDragStartPos: TPoint;
FDragManager: TmxDragDropManager;
FDragStates: TmxOutlookBarStates;
FLastVCLDragTarget: TmxButton;
FCurrentTargetButton: TmxButton;
FCurrentTargetHeader: TmxHeader;
FAutoScrollDelay: Cardinal;
FAutoButtonScrollDelay: Cardinal;
FAutoChangeDelay: Cardinal;
FAlertInterval: Cardinal;
FOnDragAllowed: TmxEventDragAllowed;
FOnDragOver: TmxEventDragOver;
FOnDragEnter: TmxEventDragEnter;
FOnDragDrop: TmxEventDragDrop;
FEachHeaderSelection: Boolean;
FOffset: Integer;
FScrollDown: Boolean;
FScrollUpRect: TRect;
FScrollUpState: TmxButtonState;
FScrollDownRect: TRect;
FScrollDownState: TmxButtonState;
FButtonScrollUpRect: TRect;
FButtonScrollUpState: TmxButtonState;
FButtonScrollDownRect: TRect;
FButtonScrollDownState: TmxButtonState;
FSavedHeaderIndex: Integer;
FActiveHeader: TmxHeader;
FBackground: TmxBackground;
FBevelInner: TPanelBevel;
FBevelOuter: TPanelBevel;
FBevelWidth: TBevelWidth;
FBorder: TmxBorder;
FBorderStyle: TBorderStyle;
FCommonStyle: Boolean;
FCloseButton: TmxCloseButton;
FExplorerMethod: TmxExplorerMethod;
FFlat: Boolean;
FHeaders: TmxHeaders;
FHeaderImages: TmxHeaderImages;
FMouseInHeader: TmxHeader;
FMouseInHeaderBody: TmxHeader;
FMouseInButton: TmxButton;
FProcessing: Boolean;
FPainting: Boolean;
FReCalcHeaderPositions: Boolean;
FHeaderScrollType: TmxHeaderScrollType;
FHeaderScrollValue: Byte;
FHeaderScrollAcceleration: Byte;
FSequence: Longint;
FSettings: TmxBarSettings;
FScrollChange: Word;
FOptions: TmxBarOptions;
FUpdating: Boolean;
FUpdateCounter: Integer;
FUpdatedHeaderIndex: Integer;
FVersion: Integer;
FViewStyle: TmxViewStyle;
FReadyToPaint: Boolean;
FScrollView: TmxScrollView;
FScrollBoxSize: Word;
FPreSet: TmxPreSet;
FOnContextPopup: TContextPopupEvent;
FOnEditorContextPopup: TContextPopupEvent;
FOnChange: TmxEventHeaderChange;
FOnCanChange: TmxEventCanChangeHeader;
FOnChangeViewStyle: TmxEventChangeViewStyle;
FOnDrawHeaderButtons: TmxEventDrawHeaderButtons;
FOnAfterDrawHeaderButtons: TmxEventDrawHeaderButtons;
FOnHide: TNotifyEvent;
FOnShow: TNotifyEvent;
FOnDrawCloseButton: TmxEventDrawButton;
FOnAfterChangeStyle: TmxEventAfterChangeStyle;
Procedure WMTimer( Var Message: TWMTimer ); Message WM_TIMER;
Procedure WMLButtonDown( Var Message: TWMLButtonDown ); Message WM_LBUTTONDOWN;
Procedure WMLButtonUp( Var Message: TWMLButtonUp ); Message WM_LBUTTONUP;
Procedure WMNCDestroy( Var Message: TWMNCDestroy ); Message WM_NCDESTROY;
Procedure WMSize( Var Message: TWMSize ); Message WM_SIZE;
Procedure CMDesignHitTest( Var Msg: TCMDesignHitTest ); Message CM_DESIGNHITTEST;
Procedure WMSetFocus( Var Message: TWMSetFocus ); Message WM_SETFOCUS;
Procedure WMKillFocus( Var Message: TWMSetFocus ); Message WM_KILLFOCUS;
Procedure CMBorderChanged( Var Message: TMessage ); Message CM_BORDERCHANGED;
Procedure CMCtl3DChanged( Var Message: TMessage ); Message CM_CTL3DCHANGED;
Procedure CMSysColorChange( Var Message: TMessage ); Message CM_SYSCOLORCHANGE;
Procedure CMColorChanged( Var Message: TMessage ); Message CM_COLORCHANGED;
Procedure CMEnabledChanged( Var Message: TMessage ); Message CM_ENABLEDCHANGED;
Procedure CMFontChanged( Var Msg: TMessage ); Message CM_FONTCHANGED;
Procedure CMTextChanged( Var Msg: TMessage ); Message CM_TEXTCHANGED;
Procedure CMVisibleChanged( Var Message: TMessage ); Message CM_VISIBLECHANGED;
Procedure CMDialogChar( Var Message: TCMDialogChar ); Message cm_DialogChar;
Procedure CNNotify( Var Message: TWMNotify ); Message CN_NOTIFY;
Procedure CMHintShow( Var Message: TMessage ); Message CM_HINTSHOW;
Procedure CMDrag( Var Message: TCMDrag ); Message CM_DRAG;
Procedure CMMouseWheel( Var Message: TCMMouseWheel ); Message CM_MOUSEWHEEL;
Procedure WMContextMenu( Var Message: TWMContextMenu ); Message WM_CONTEXTMENU;
Procedure SetBorderStyle( AValue: TBorderStyle );
Procedure SetBevelInner( AValue: TPanelBevel );
Procedure SetBevelOuter( AValue: TPanelBevel );
Procedure SetBevelWidth( AValue: TBevelWidth );
Procedure SetScrollView( AValue: TmxScrollView );
Function GetHeaderCount: Integer;
Function GetVisibleHeaderCount: Integer;
Function GetEnabledHeaderCount: Integer;
Procedure SetCommonStyle( AValue: Boolean );
Procedure SetViewStyle( AValue: TmxViewStyle );
Procedure SetFlat( AValue: Boolean );
Procedure SetHeaderScrollType( AValue: TmxHeaderScrollType );
Procedure SetHeaderScrollValue( AValue: Byte );
Procedure SetHeaderScrollAcceleration( AValue: Byte );
Procedure SetVersion( AValue: String );
Function GetVersion: String;
Function GetNextVisibleIndex( ActiveIndex: Integer ): Integer;
Function GetActiveHeaderIndex: Integer;
Procedure CheckImages( AImages: TmxButtonImages; AComponent: TComponent; Operation: TOperation );
Procedure CheckHeaderImages( AImages: TmxHeaderImages; AComponent: TComponent; Operation: TOperation );
Procedure PropertyChanged( Sender: TObject );
Procedure ReadAlign( Reader: TReader );
Procedure WriteAlign( Writer: TWriter );
Procedure ReadIndex( Reader: TReader );
Procedure WriteIndex( Writer: TWriter );
Function GetOnDrawCloseHeader: TmxEventDrawHeader;
Procedure SetOnDrawCloseHeader( AValue: TmxEventDrawHeader );
Function GetOnAfterDrawCloseHeader: TmxEventDrawHeader;
Procedure SetOnAfterDrawCloseHeader( AValue: TmxEventDrawHeader );
Function GetOnClose: TNotifyEvent;
Procedure SetOnClose( AValue: TNotifyEvent );
Procedure SetExplorerMethod( AValue: TmxExplorerMethod );
Procedure SetHeaders( AValue: TmxHeaders );
Function GetHeaders: TmxHeaders;
Function GetHeader( Index: Integer ): TmxHeader;
Procedure SetOptions( AValue: TmxBarOptions );
Procedure SetScrollChange( AValue: Word );
Procedure DoScrollUp;
Procedure DoScrollDown;
Procedure SetActiveHeader( ANewHeader: TmxHeader );
Procedure SetScrollBoxSize( AValue: Word );
Procedure SetBorderWidth( AValue: TBorderWidth );
Function GetBorderWidth: TBorderWidth;
Procedure SetPreSet( AValue: TmxPreSet );
Procedure SetEachHeaderSelection( AValue: Boolean );
Function ProcessOLEData( Source: TmxOutlookBarPro; DataObject: IDataObject; TargetButton: TmxButton; HitMode: TmxHitPosition; Var Effect: Integer ): Boolean;
Procedure SetAlertedButton( AButton: TmxButton );
Procedure SetAlertInterval( AValue: Cardinal );
Function GetDragging: Boolean;
Function DoDragEnter( Const DataObject: IDataObject; KeyState: Integer; Pt: TPoint; Var Effect: Integer ): HResult; Virtual;
Function DoDragOver( Source: TObject; KeyState: Integer; DragState: TDragState; Pt: TPoint; Var Effect: Integer ): HResult; Virtual;
Function DoDragDrop( Const DataObject: IDataObject; KeyState: Integer; Pt: TPoint; Var Effect: Integer ): HResult; Virtual;
Procedure DoDragging( P: TPoint );
Procedure DoDragLeave; Virtual;
Function SuggestDropEffect( Source: TObject; Shift: TShiftState; Pt: TPoint; AllowedEffects: Integer ): Integer; Virtual;
Function GetHitTestInfoAt( X, Y: Integer; Var HitInfo: TmxHitPosition ): TmxButton;
Procedure StopTimer( ID: Integer );
Function InvalidateButton( Button: TmxButton ): TRect; Virtual;
Procedure FinishButtonHeader( Stream: TStream; StartPos, EndPos: Integer );
Procedure WriteButton( Stream: TStream; AButton: TmxButton ); Virtual;
Procedure WriteButtonToStream( Stream: TStream; AButton: TmxButton );
Function GetButtonAt( X, Y: Integer ): TmxButton;
Function GetHeaderAt( X, Y: Integer ): TmxHeader;
Function GetButtonExactlyAt( X, Y: Integer
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -