expertcad/SRC/Main/ToolBarType.pas
2025-05-12 10:07:51 +03:00

482 lines
22 KiB
ObjectPascal

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;