TToolBar = class; TToolButton = class; TToolButtonActionLink = class(ComCtrls.TToolButtonActionLink) protected end; TToolButtonActionLinkClass = class of TToolButtonActionLink; TToolButton = class(ComCtrls.TToolButton) private FAllowAllUp: Boolean; FAutoSize: Boolean; FDown: Boolean; FGrouped: Boolean; FImageIndex: TImageIndex; FIndeterminate: Boolean; FMarked: Boolean; FMenuItem: TMenuItem; FDropdownMenu: TPopupMenu; FWrap: Boolean; FStyle: TToolButtonStyle; FUpdateCount: Integer; function GetButtonState: Byte; function GetIndex: Integer; function IsCheckedStored: Boolean; function IsImageIndexStored: Boolean; function IsWidthStored: Boolean; procedure SetButtonState(State: Byte); procedure SetDown(Value: Boolean); procedure SetDropdownMenu(Value: TPopupMenu); procedure SetGrouped(Value: Boolean); procedure SetImageIndex(Value: TImageIndex); procedure SetIndeterminate(Value: Boolean); procedure SetMarked(Value: Boolean); procedure SetMenuItem(Value: TMenuItem); procedure SetStyle(Value: TToolButtonStyle); procedure SetWrap(Value: Boolean); procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED; procedure CMHitTest(var Message: TCMHitTest); message CM_HITTEST; procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED; procedure CMVisibleChanged(var Message: TMessage); message CM_VISIBLECHANGED; protected FToolBar: TToolBar; procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override; procedure AssignTo(Dest: TPersistent); override; procedure BeginUpdate; virtual; procedure EndUpdate; virtual; function GetActionLinkClass: TControlActionLinkClass; override; procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure Notification(AComponent: TComponent; Operation: TOperation); override; procedure Paint; override; procedure RefreshControl; virtual; procedure SetAutoSize(Value: Boolean); override; procedure SetToolBar(AToolBar: TToolBar); procedure UpdateControl; virtual; procedure ValidateContainer(AComponent: TComponent); override; public constructor Create(AOwner: TComponent); override; function CheckMenuDropdown: Boolean; dynamic; procedure Click; override; procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override; property Index: Integer read GetIndex; published property Action; property AllowAllUp: Boolean read FAllowAllUp write FAllowAllUp default False; property AutoSize: Boolean read FAutoSize write SetAutoSize default False; property Caption; property Down: Boolean read FDown write SetDown stored IsCheckedStored default False; property DragCursor; property DragKind; property DragMode; property DropdownMenu: TPopupMenu read FDropdownMenu write SetDropdownMenu; property Enabled; property Grouped: Boolean read FGrouped write SetGrouped default False; property Height stored False; property ImageIndex: TImageIndex read FImageIndex write SetImageIndex stored IsImageIndexStored default -1; property Indeterminate: Boolean read FIndeterminate write SetIndeterminate default False; property Marked: Boolean read FMarked write SetMarked default False; property MenuItem: TMenuItem read FMenuItem write SetMenuItem; property ParentShowHint; property PopupMenu; property Wrap: Boolean read FWrap write SetWrap default False; property ShowHint; property Style: TToolButtonStyle read FStyle write SetStyle default tbsButton; property Visible; property Width stored IsWidthStored; property OnClick; property OnContextPopup; property OnDragDrop; property OnDragOver; property OnEndDock; property OnEndDrag; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnStartDock; property OnStartDrag; end; TTBCustomDrawFlags = set of (tbNoEdges, tbHiliteHotTrack, tbNoOffset, tbNoMark, tbNoEtchedEffect); TTBCustomDrawEvent = procedure(Sender: TToolBar; const ARect: TRect; var DefaultDraw: Boolean) of object; TTBCustomDrawBtnEvent = procedure(Sender: TToolBar; Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean) of object; TTBAdvancedCustomDrawEvent = procedure(Sender: TToolBar; const ARect: TRect; Stage: TCustomDrawStage; var DefaultDraw: Boolean) of object; TTBAdvancedCustomDrawBtnEvent = procedure(Sender: TToolBar; Button: TToolButton; State: TCustomDrawState; Stage: TCustomDrawStage; var Flags: TTBCustomDrawFlags; var DefaultDraw: Boolean) of object; TTBCustomizeQueryEvent = procedure(Sender: TToolbar; Index: Integer; var Allow: Boolean) of object; TTBNewButtonEvent = procedure(Sender: TToolbar; Index: Integer; var Button: TToolButton) of object; TTBButtonEvent = procedure(Sender: TToolbar; Button: TToolButton) of object; TToolBar = class(TToolWindow) private FButtonWidth: Integer; FButtonHeight: Integer; FButtons: TList; FCaption: string; FCanvas: TCanvas; FCanvasChanged: Boolean; FCustomizable: Boolean; FCustomizing: Boolean; FShowCaptions: Boolean; FList: Boolean; FFlat: Boolean; FTransparent: Boolean; FWrapable: Boolean; FImages: TCustomImageList; FImageChangeLink: TChangeLink; FDisabledImages: TCustomImageList; FDisabledImageChangeLink: TChangeLink; FHotImages: TCustomImageList; FHotImageChangeLink: TChangeLink; FIndent: Integer; FNewStyle: Boolean; FNullBitmap: TBitmap; FOldHandle: HBitmap; FRestoring: Boolean; FUpdateCount: Integer; FHeightMargin: Integer; FSeparators: Integer; FOnAdvancedCustomDraw: TTBAdvancedCustomDrawEvent; FOnAdvancedCustomDrawButton: TTBAdvancedCustomDrawBtnEvent; FOnCustomDraw: TTBCustomDrawEvent; FOnCustomDrawButton: TTBCustomDrawBtnEvent; FOnCustomizeCanDelete: TTBCustomizeQueryEvent; FOnCustomizeCanInsert: TTBCustomizeQueryEvent; FOnCustomizeNewButton: TTBNewButtonEvent; FOnCustomized: TNotifyEvent; FOnCustomizeDelete: TTBButtonEvent; FOnCustomizeAdded: TTBButtonEvent; FOnCustomizing: TNotifyEvent; FOnCustomizeReset: TNotifyEvent; { Toolbar menu support } FCaptureChangeCancels: Boolean; FInMenuLoop: Boolean; FTempMenu: TPopupMenu; FButtonMenu: TMenuItem; FMenuButton: TToolButton; FMenuResult: Boolean; FMenuDropped: Boolean; FMenu: TMainMenu; FCustomizeKeyName: string; FCustomizeValueName: string; FOurFont: Integer; FStockFont: Integer; function ButtonIndex(OldIndex, ALeft, ATop: Integer): Integer; procedure CanvasChanged(Sender: TObject); function DoGetButton(NMToolbar: PNMToolbar): Boolean; procedure LoadImages(AImages: TCustomImageList); function GetButton(Index: Integer): TToolButton; function GetButtonCount: Integer; procedure GetButtonSize(var AWidth, AHeight: Integer); function GetRowCount: Integer; procedure SetList(Value: Boolean); procedure SetShowCaptions(Value: Boolean); procedure SetFlat(Value: Boolean); procedure SetTransparent(Value: Boolean); procedure SetWrapable(Value: Boolean); procedure InsertButton(Control: TControl); procedure RemoveButton(Control: TControl); function RefreshButton(Index: Integer): Boolean; procedure UpdateButton(Index: Integer); procedure UpdateButtons; procedure UpdateButtonState(Index: Integer); procedure UpdateButtonStates; function UpdateItem(Message, FromIndex, ToIndex: Integer): Boolean; function UpdateItem2(Message, FromIndex, ToIndex: Integer): Boolean; procedure ClearTempMenu; procedure CreateButtons(NewWidth, NewHeight: Integer); procedure SetButtonWidth(Value: Integer); procedure SetButtonHeight(Value: Integer); procedure UpdateImages; procedure ImageListChange(Sender: TObject); procedure SetImageList(Value: HImageList); procedure SetImages(Value: TCustomImageList); procedure DisabledImageListChange(Sender: TObject); procedure SetDisabledImageList(Value: HImageList); procedure SetDisabledImages(Value: TCustomImageList); procedure HotImageListChange(Sender: TObject); procedure SetHotImageList(Value: HImageList); procedure SetHotImages(Value: TCustomImageList); procedure SetIndent(Value: Integer); procedure SetMenu(const Value: TMainMenu); procedure AdjustControl(Control: TControl); procedure RecreateButtons; procedure RecreateButtonsFromToolbar; procedure BeginUpdate; procedure EndUpdate; procedure ResizeButtons; procedure SaveButtons(Save: Boolean); function InternalButtonCount: Integer; function ReorderButton(OldIndex, ALeft, ATop: Integer): Integer; procedure WMCaptureChanged(var Message: TMessage); message WM_CAPTURECHANGED; procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND; procedure WMGetDlgCode(var Message: TMessage); message WM_GETDLGCODE; procedure WMGetText(var Message: TWMGetText); message WM_GETTEXT; procedure WMGetTextLength(var Message: TWMGetTextLength); message WM_GETTEXTLENGTH; procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN; procedure WMNotifyFormat(var Message: TMessage); message WM_NOTIFYFORMAT; procedure WMSetText(var Message: TWMSetText); message WM_SETTEXT; procedure WMSize(var Message: TWMSize); message WM_SIZE; procedure WMSysChar(var Message: TWMSysChar); message WM_SYSCHAR; procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND; procedure WMWindowPosChanged(var Message: TWMWindowPosChanged); message WM_WINDOWPOSCHANGED; procedure WMWindowPosChanging(var Message: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING; procedure CMColorChanged(var Message: TMessage); message CM_COLORCHANGED; procedure CMControlChange(var Message: TCMControlChange); message CM_CONTROLCHANGE; procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR; procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED; procedure CMFontChanged(var Message); message CM_FONTCHANGED; procedure CMParentColorChanged(var Message: TMessage); message CM_PARENTCOLORCHANGED; procedure CNChar(var Message: TWMChar); message CN_CHAR; procedure CNSysKeyDown(var Message: TWMSysKeyDown); message CN_SYSKEYDOWN; procedure CMSysFontChanged(var Message: TMessage); message CM_SYSFONTCHANGED; procedure CNDropDownClosed(var Message: TMessage); message CN_DROPDOWNCLOSED; procedure CNNotify(var Message: TWMNotify); message CN_NOTIFY; procedure SetCustomizable(const Value: Boolean); protected procedure AlignControls(AControl: TControl; var Rect: TRect); override; function CanAutoSize(var NewWidth, NewHeight: Integer): Boolean; override; procedure CancelMenu; dynamic; procedure ChangeScale(M, D: Integer); override; function CheckMenuDropdown(Button: TToolButton): Boolean; dynamic; procedure ClickButton(Button: TToolButton); dynamic; procedure CreateParams(var Params: TCreateParams); override; procedure CreateWnd; override; function CustomDraw(const ARect: TRect; Stage: TCustomDrawStage): Boolean; virtual; function CustomDrawButton(Button: TToolButton; State: TCustomDrawState; Stage: TCustomDrawStage; var Flags: TTBCustomDrawFlags): Boolean; virtual; function DoQueryInsert(Index: Integer): Boolean; virtual; function DoQueryDelete(Index: Integer): Boolean; virtual; function FindButtonFromAccel(Accel: Word): TToolButton; procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override; procedure InitMenu(Button: TToolButton); dynamic; function IsCustomDrawn(Target: TCustomDrawTarget; Stage: TCustomDrawStage): Boolean; virtual; procedure Loaded; override; procedure Notification(AComponent: TComponent; Operation: TOperation); override; procedure RepositionButton(Index: Integer); procedure RepositionButtons(Index: Integer); procedure WndProc(var Message: TMessage); override; function WrapButtons(var NewWidth, NewHeight: Integer): Boolean; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure FlipChildren(AllLevels: Boolean); override; function TrackMenu(Button: TToolButton): Boolean; dynamic; property ButtonCount: Integer read GetButtonCount; property Buttons[Index: Integer]: TToolButton read GetButton; property Canvas: TCanvas read FCanvas; property CustomizeKeyName: string read FCustomizeKeyName write FCustomizeKeyName; property CustomizeValueName: string read FCustomizeValueName write FCustomizeValueName; property RowCount: Integer read GetRowCount; published property Align default alTop; property Anchors; property AutoSize; property BorderWidth; property ButtonHeight: Integer read FButtonHeight write SetButtonHeight default 22; property ButtonWidth: Integer read FButtonWidth write SetButtonWidth default 23; property Caption; property Color; property Constraints; property Ctl3D; property Customizable: Boolean read FCustomizable write SetCustomizable default False; property DisabledImages: TCustomImageList read FDisabledImages write SetDisabledImages; property DockSite; property DragCursor; property DragKind; property DragMode; property EdgeBorders default [ebTop]; property EdgeInner; property EdgeOuter; property Enabled; property Flat: Boolean read FFlat write SetFlat default False; property Font; property Height default 32; property HotImages: TCustomImageList read FHotImages write SetHotImages; property Images: TCustomImageList read FImages write SetImages; property Indent: Integer read FIndent write SetIndent default 0; property List: Boolean read FList write SetList default False; property Menu: TMainMenu read FMenu write SetMenu; property ParentColor; property ParentFont; property ParentShowHint; property PopupMenu; property ShowCaptions: Boolean read FShowCaptions write SetShowCaptions default False; property ShowHint; property TabOrder; property TabStop; property Transparent: Boolean read FTransparent write SetTransparent default False; property Visible; property Wrapable: Boolean read FWrapable write SetWrapable default True; property OnAdvancedCustomDraw: TTBAdvancedCustomDrawEvent read FOnAdvancedCustomDraw write FOnAdvancedCustomDraw; property OnAdvancedCustomDrawButton: TTBAdvancedCustomDrawBtnEvent read FOnAdvancedCustomDrawButton write FOnAdvancedCustomDrawButton; property OnClick; property OnContextPopup; property OnCustomDraw: TTBCustomDrawEvent read FOnCustomDraw write FOnCustomDraw; property OnCustomDrawButton: TTBCustomDrawBtnEvent read FOnCustomDrawButton write FOnCustomDrawButton; property OnCustomizeAdded: TTBButtonEvent read FOnCustomizeAdded write FOnCustomizeAdded; property OnCustomizeCanInsert: TTBCustomizeQueryEvent read FOnCustomizeCanInsert write FOnCustomizeCanInsert; property OnCustomizeCanDelete: TTBCustomizeQueryEvent read FOnCustomizeCanDelete write FOnCustomizeCanDelete; property OnCustomized: TNotifyEvent read FOnCustomized write FOnCustomized; property OnCustomizeDelete: TTBButtonEvent read FOnCustomizeDelete write FOnCustomizeDelete; property OnCustomizing: TNotifyEvent read FOnCustomizing write FOnCustomizing; property OnCustomizeNewButton: TTBNewButtonEvent read FOnCustomizeNewButton write FOnCustomizeNewButton; property OnCustomizeReset: TNotifyEvent read FOnCustomizeReset write FOnCustomizeReset; property OnDblClick; property OnDockDrop; property OnDockOver; property OnDragDrop; property OnDragOver; property OnEndDock; property OnEndDrag; property OnEnter; property OnExit; property OnGetSiteInfo; property OnMouseDown; property OnMouseMove; property OnMouseUp; property OnResize; property OnStartDock; property OnStartDrag; property OnUnDock; end; TXPMenu = class(XPMenu.TXPMenu) private FActive: boolean; FForm: TForm; FFont: TFont; FColor: TColor; FIconBackColor: TColor; FMenuBarColor: TColor; FCheckedColor: TColor; FSeparatorColor: TColor; FSelectBorderColor: TColor; FSelectColor: TColor; FDisabledColor: TColor; FSelectFontColor: TColor; FIconWidth: integer; FDrawSelect: boolean; FUseSystemColors: boolean; FFColor, FFIconBackColor, FFSelectColor, FFSelectBorderColor, FFSelectFontColor, FCheckedAreaColor, FCheckedAreaSelectColor, FFCheckedColor, FFMenuBarColor, FFDisabledColor, FFSeparatorColor, FMenuBorderColor, FMenuShadowColor: TColor; Is16Bit: boolean; FOverrideOwnerDraw: boolean; {FRefreshOnChange: boolean;} FGradient: boolean; ImgLstHandle: HWND; ImgLstIndex: integer; FFlatMenu: boolean; procedure SetActive(const Value: boolean); procedure SetForm(const Value: TForm); procedure SetFont(const Value: TFont); procedure SetColor(const Value: TColor); procedure SetIconBackColor(const Value: TColor); procedure SetMenuBarColor(const Value: TColor); procedure SetCheckedColor(const Value: TColor); procedure SetDisabledColor(const Value: TColor); procedure SetSelectColor(const Value: TColor); procedure SetSelectBorderColor(const Value: TColor); procedure SetSeparatorColor(const Value: TColor); procedure SetSelectFontColor(const Value: TColor); procedure SetIconWidth(const Value: integer); procedure SetDrawSelect(const Value: boolean); procedure SetUseSystemColors(const Value: boolean); procedure SetOverrideOwnerDraw(const Value: boolean); {procedure SetRefreshOnChange(const Value: boolean);} procedure SetGradient(const Value: boolean); procedure SetFlatMenu(const Value: boolean); protected procedure InitMenueItems(Enable: boolean); procedure DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); procedure MenueDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean); procedure ActivateMenuItem(MenuItem: TMenuItem); procedure SetGlobalColor(ACanvas: TCanvas); procedure DrawTopMenuItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; IsRightToLeft: boolean); procedure DrawCheckedItem(FMenuItem: TMenuItem; Selected, HasImgLstBitmap: boolean; ACanvas: TCanvas; CheckedRect: TRect); procedure DrawTheText(txt, ShortCuttext: string; ACanvas: TCanvas; TextRect: TRect; Selected, Enabled, Default, TopMenu, IsRightToLeft: boolean; TextFormat: integer); procedure DrawIcon(Sender: TObject; ACanvas: TCanvas; B: TBitmap; IconRect: Trect; Hot, Selected, Enabled, Checked, FTopMenu, IsRightToLeft: boolean); procedure DrawArrow(ACanvas: TCanvas; X, Y: integer); procedure MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer); {procedure MenuChange(Sender: TObject; Source: TMenuItem; Rebuild: Boolean);} function GetImageExtent(MenuItem: TMenuItem): TPoint; procedure ToolBarDrawButton(Sender: TToolBar; Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean); function TopMenuFontColor(ACanvas: TCanvas; Color: TColor): TColor; procedure DrawGradient(ACanvas: TCanvas; ARect: TRect; IsRightToLeft: boolean); procedure DrawWindowBorder(hWnd: HWND; IsRightToLeft: boolean); procedure Notification(AComponent: TComponent; Operation: TOperation); override; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; property Form: TForm read FForm write SetForm; published property Font: TFont read FFont write SetFont; property Color: TColor read FColor write SetColor; property IconBackColor: TColor read FIconBackColor write SetIconBackColor; property MenuBarColor: TColor read FMenuBarColor write SetMenuBarColor; property SelectColor: TColor read FSelectColor write SetSelectColor; property SelectBorderColor: TColor read FSelectBorderColor write SetSelectBorderColor; property SelectFontColor: TColor read FSelectFontColor write SetSelectFontColor; property DisabledColor: TColor read FDisabledColor write SetDisabledColor; property SeparatorColor: TColor read FSeparatorColor write SetSeparatorColor; property CheckedColor: TColor read FCheckedColor write SetCheckedColor; property IconWidth: integer read FIconWidth write SetIconWidth; property DrawSelect: boolean read FDrawSelect write SetDrawSelect; property UseSystemColors: boolean read FUseSystemColors write SetUseSystemColors; property OverrideOwnerDraw: boolean read FOverrideOwnerDraw write SetOverrideOwnerDraw; {property RefreshOnChange: boolean read FRefreshOnChange write SetRefreshOnChange} property Gradient: boolean read FGradient write SetGradient; property FlatMenu: boolean read FFlatMenu write SetFlatMenu; property Active: boolean read FActive write SetActive; end;