📄 rm_ctrls.pas
字号:
unit RM_Ctrls;
interface
{$I RM.inc}
{$R RM_common.res}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls, Commctrl, Menus, Mask, Buttons, RM_Common
{$IFDEF USE_TB2K}
, TB2Item, TB2ExtItems, TB2Dock, TB2Toolbar, TB2ToolWindow, TB2Common
{$IFDEF USE_TB2K_TBX}
, TBX, TBXExtItems
{$ENDIF}
{$ELSE}
{$IFDEF USE_INTERNALTB97}
, RM_TB97Ctls, RM_TB97Tlbr, RM_TB97, RM_TB97Tlwn
{$ELSE}
, TB97Ctls, TB97Tlbr, TB97, TB97Tlwn
{$ENDIF}
{$ENDIF}
{$IFNDEF USE_INTERNAL_JVCL}
,JvOfficeColorButton
{$ENDIF}
{$IFDEF COMPILER5_UP}, ImgList{$ENDIF}
{$IFDEF COMPILER6_UP}, Variants{$ENDIF};
const
MaxColorButtonNumber = 40;
type
{ TRMDockableToolbar }
TRMDockableToolbar = class(TToolBar)
private
function GetRightMostControlPos: Integer;
protected
procedure AlignControls(AControl: TControl; var ARect: TRect); override;
function DoUnDock(NewTarget: TWinControl; Client: TControl): Boolean; override;
procedure DoDock(NewDockSite: TWinControl; var ARect: TRect); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure AddControl(aControl: TControl);
procedure BeginUpdate;
procedure EndUpdate;
published
end;
TRMToolbarSeparator = class(TToolButton)
private
public
constructor Create(AOwner: TComponent); override;
end;
TRMSubMenuItem = class;
{TRMDock}
{$IFDEF USE_TB2k}
{$IFDEF USE_TB2K_TBX}
TRMDock = TTBDock;
{$ELSE}
TRMDock = TTBDock;
{$ENDIF}
{$ELSE}
TRMDock = class(TDock97);
{$ENDIF}
{TRMToolbar}
{$IFDEF USE_TB2k}
{$IFDEF USE_TB2K_TBX}
TRMToolbar = class(TTBXToolbar)
{$ELSE}
TRMToolbar = class(TTBToolbar)
{$ENDIF}
private
function GetDockedto: TRMDock;
procedure SetDockedto(Value: TRMDock);
public
ParentForm: TForm;
property Dockedto: TRMDock read GetDockedto write SetDockedto;
end;
{$ELSE}
TRMToolbar = class(TToolbar97)
public
ParentForm: TForm;
end;
{$ENDIF}
{TRMToolbarSep}
{$IFDEF USE_TB2k}
{$IFDEF USE_TB2K_TBX}
TRMToolbarSep = class(TTBXSeparatorItem)
{$ELSE}
TRMToolbarSep = class(TTBSeparatorItem)
{$ENDIF}
{$ELSE}
TRMToolbarSep = class(TToolbarSep97)
{$ENDIF}
private
procedure SetAddTo(Value: TRMToolbar);
public
property AddTo: TRMToolbar write SetAddTo;
end;
{TRMEdit}
{$IFDEF USE_TB2K}
{$IFDEF USE_TB2K_TBX}
TRMEdit = class(TTBXEditItem)
{$ELSE}
TRMEdit = class(TTBEditItem)
{$ENDIF}
{$ELSE}
TRMEdit = class(TEdit97)
{$ENDIF}
private
procedure SetAddTo(Value: TRMToolbar);
public
property AddTo: TRMToolbar write SetAddTo;
end;
{TRMMenuBar}
{$IFDEF USE_TB2K}
TRMMenuBar = TRMToolbar;
{$ELSE}
TRMMenuBar = class(TMainMenu)
public
Dockedto: TRMDock;
MenuBar: Boolean;
procedure BeginUpdate;
procedure EndUpdate;
end;
{$ENDIF}
{TRMPopupMenu}
{$IFDEF USE_TB2k}
{$IFDEF USE_TB2K_TBX}
TRMPopupMenu = TTBXPopupMenu;
{$ELSE}
TRMPopupMenu = TTBPopupMenu;
{$ENDIF}
{$ELSE}
TRMPopupMenu = TPopupMenu;
{$ENDIF}
{TRMCustomMenuItem}
{$IFDEF USE_TB2K}
{$IFDEF USE_TB2K_TBX}
TRMCustomMenuItem = class(TTBXItem)
{$ELSE}
TRMCustomMenuItem = class(TTBItem)
{$ENDIF}
private
function GetRadioItem: boolean;
procedure SetRadioItem(Value: boolean);
procedure SetAddTo(Value: TRMToolbar);
public
property RadioItem: boolean read GetRadioItem write SetRadioItem;
property AddTo: TRMToolbar write SetAddTo;
{$ELSE}
TRMCustomMenuItem = class(TMenuItem)
private
function GetImages: TCustomImageList;
procedure SetImages(Value: TCustomImageList);
public
property Images: TCustomImageList read GetImages write SetImages;
{$ENDIF}
public
procedure AddToMenu(Value: TRMMenuBar); overload;
procedure AddToMenu(Value: TRMCustomMenuItem); overload;
procedure AddToMenu(Value: TRMSubMenuItem); overload;
procedure AddToMenu(Value: TRMPopupMenu); overload;
end;
TRMMenuItem = class(TRMCustomMenuItem);
{TRMSubMenuItem}
{$IFDEF USE_TB2K}
{$IFDEF USE_TB2K_TBX}
TRMSubMenuItem = class(TTBXSubmenuItem)
{$ELSE}
TRMSubMenuItem = class(TTBSubmenuItem)
{$ENDIF}
private
procedure SetAddTo(Value: TRMToolbar);
public
procedure AddToMenu(Value: TRMMenuBar); overload;
procedure AddToMenu(Value: TRMCustomMenuItem); overload;
procedure AddToMenu(Value: TRMSubMenuItem); overload;
procedure AddToMenu(Value: TRMPopupMenu); overload;
property AddTo: TRMToolbar write SetAddTo;
end;
{$ELSE}
TRMSubMenuItem = class(TRMMenuItem);
{$ENDIF}
{TRMSeparatorMenuItem}
{$IFDEF USE_TB2K}
{$IFDEF USE_TB2K_TBX}
TRMSeparatorMenuItem = class(TTBXSeparatorItem)
{$ELSE}
TRMSeparatorMenuItem = class(TTBSeparatorItem)
{$ENDIF}
public
procedure AddToMenu(Value: TRMMenuBar); overload;
procedure AddToMenu(Value: TRMCustomMenuItem); overload;
procedure AddToMenu(Value: TRMSubMenuItem); overload;
procedure AddToMenu(Value: TRMPopupMenu); overload;
end;
{$ELSE}
TRMSeparatorMenuItem = class(TRMMenuItem)
private
public
constructor Create(AOwner: TComponent); override;
end;
{$ENDIF}
{$IFDEF USE_TB2k}
{$IFDEF USE_TB2K_TBX}
TRMToolbarButton = class(TTBXItem)
{$ELSE}
TRMToolbarButton = class(TTBItem)
{$ENDIF}
private
function GetDown: Boolean;
procedure SetDown(Value: Boolean);
function GetAllowAllUp: Boolean;
procedure SetAllowAllUp(Value: Boolean);
procedure SetAddTo(Value: TRMToolBar);
public
property AddTo: TRMToolBar write SetAddTo;
property AllowAllUp: Boolean read GetAllowAllup write SetAllowAllup;
property Down: Boolean read GetDown write SetDown;
end;
{$ELSE}
TRMToolbarButton = class(TToolbarButton97)
private
procedure SetAddTo(Value: TRMToolBar);
public
property AddTo: TRMToolBar write SetAddTo;
end;
{$ENDIF}
TComboState97 = set of (csButtonPressed, csMouseCaptured);
{ TRMCustomComboBox97 }
TRMCustomComboBox97 = class(TCustomComboBox)
private
FFlat: Boolean;
FOldColor: TColor;
FOldParentColor: Boolean;
FButtonWidth: Integer;
FEditState: TComboState97;
FMouseInControl: Boolean;
procedure SetFlat(const Value: Boolean);
procedure DrawButtonBorder(DC: HDC);
procedure DrawControlBorder(DC: HDC);
procedure DrawBorders;
function NeedDraw3DBorder: Boolean;
procedure CMEnter(var Message: TCMEnter); message CM_ENTER;
procedure CMExit(var Message: TCMExit); message CM_EXIT;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
procedure CMEnabledChanged(var Msg: TMessage); message CM_ENABLEDCHANGED;
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
protected
procedure TrackButtonPressed(X, Y: Integer);
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 CMMouseWheel(var Message: TCMMouseWheel); message CM_MOUSEWHEEL;
property Flat: Boolean read FFlat write SetFlat default True;
public
constructor Create(AOwner: TComponent); override;
end;
{ TRMComboBox97 }
TRMComboBox97 = class(TRMCustomComboBox97)
published
property Style; // Debe ser siempre la primera
property Flat;
property Color;
property Ctl3D;
property DragCursor;
property DragMode;
property DropDownCount;
property Enabled;
property Font;
property ItemHeight;
property Items;
property MaxLength;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property Sorted;
property TabOrder;
property TabStop;
property Text;
property Visible;
property OnChange;
property OnClick;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnDrawItem;
property OnDropDown;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMeasureItem;
property OnStartDrag;
end;
TRMSpinButtonState = (rmsbNotDown, rmsbTopDown, rmsbBottomDown);
{ TRMSpinButton }
TRMSpinButton = class(TGraphicControl)
private
FDown: TRMSpinButtonState;
FUpBitmap: TBitmap;
FDownBitmap: TBitmap;
FDragging: Boolean;
FInvalidate: Boolean;
FTopDownBtn: TBitmap;
FBottomDownBtn: TBitmap;
FRepeatTimer: TTimer;
FNotDownBtn: TBitmap;
FLastDown: TRMSpinButtonState;
FFocusControl: TWinControl;
FOnTopClick: TNotifyEvent;
FOnBottomClick: TNotifyEvent;
procedure TopClick;
procedure BottomClick;
procedure GlyphChanged(Sender: TObject);
procedure SetDown(Value: TRMSpinButtonState);
procedure DrawAllBitmap;
procedure DrawBitmap(ABitmap: TBitmap; ADownState: TRMSpinButtonState);
procedure TimerExpired(Sender: TObject);
procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
protected
procedure Paint; 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;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property Down: TRMSpinButtonState read FDown write SetDown default rmsbNotDown;
published
end;
{TRMSpinEdit}
TRMValueType = (rmvtInteger, rmvtFloat);
TRMSpinEdit = class(TCustomEdit)
private
FAlignment: TAlignment;
FMinValue: Extended;
FMaxValue: Extended;
FIncrement: Extended;
FDecimal: Byte;
FChanging: Boolean;
FEditorEnabled: Boolean;
FValueType: TRMValueType;
FButton: TRMSpinButton;
FBtnWindow: TWinControl;
FArrowKeys: Boolean;
FOnTopClick: TNotifyEvent;
FOnBottomClick: TNotifyEvent;
FUpDown: TCustomUpDown;
procedure UpDownClick(Sender: TObject; Button: TUDBtnType);
function GetMinHeight: Integer;
procedure GetTextHeight(var SysHeight, Height: Integer);
function GetValue: Extended;
function CheckValue(NewValue: Extended): Extended;
function GetAsInteger: Longint;
function IsIncrementStored: Boolean;
function IsValueStored: Boolean;
procedure SetArrowKeys(Value: Boolean);
procedure SetAsInteger(NewValue: Longint);
procedure SetValue(NewValue: Extended);
procedure SetValueType(NewType: TRMValueType);
procedure SetDecimal(NewValue: Byte);
function GetButtonWidth: Integer;
procedure RecreateButton;
procedure ResizeButton;
procedure SetEditRect;
procedure SetAlignment(Value: TAlignment);
procedure WMSize(var Message: TWMSize); message WM_SIZE;
procedure CMEnter(var Message: TMessage); message CM_ENTER;
procedure CMExit(var Message: TCMExit); message CM_EXIT;
procedure WMPaste(var Message: TWMPaste); message WM_PASTE;
procedure WMCut(var Message: TWMCut); message WM_CUT;
procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED;
procedure CMEnabledChanged(var Message: TMessage); message CM_ENABLEDCHANGED;
procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
{$IFDEF COMPILER4_UP}
procedure CMBiDiModeChanged(var Message: TMessage); message CM_BIDIMODECHANGED;
{$ENDIF}
protected
procedure Change; override;
function IsValidChar(Key: Char): Boolean; virtual;
procedure UpClick(Sender: TObject); virtual;
procedure DownClick(Sender: TObject); virtual;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure KeyPress(var Key: Char); override;
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property AsInteger: Longint read GetAsInteger write SetAsInteger default 0;
property Text;
published
property Alignment: TAlignment read FAlignment write SetAlignment default taLeftJustify;
property ArrowKeys: Boolean read FArrowKeys write SetArrowKeys default True;
property Decimal: Byte read FDecimal write SetDecimal default 2;
property EditorEnabled: Boolean read FEditorEnabled write FEditorEnabled default True;
property Increment: Extended read FIncrement write FIncrement stored IsIncrementStored;
property MaxValue: Extended read FMaxValue write FMaxValue;
property MinValue: Extended read FMinValue write FMinValue;
property ValueType: TRMValueType read FValueType write SetValueType;
property Value: Extended read GetValue write SetValue stored IsValueStored;
property AutoSelect;
property AutoSize;
property BorderStyle;
property Color;
property Ctl3D;
property DragCursor;
property DragMode;
property Enabled;
property Font;
property MaxLength;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ReadOnly;
property ShowHint;
property TabOrder;
property TabStop;
property Visible;
property OnBottomClick: TNotifyEvent read FOnBottomClick write FOnBottomClick;
property OnTopClick: TNotifyEvent read FOnTopClick write FOnTopClick;
property OnChange;
property OnClick;
property OnDblClick;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
end;
{ TRMPopupWindow }
TRMPopupWindow = class(TForm)
private
FSave: HWND;
FForm: TCustomForm;
FCaller: TControl;
FWidth: Integer;
FOnClose: TNotifyEvent;
FOnPopup: TNotifyEvent;
procedure DoClosePopupWindow;
procedure WMKILLFOCUS(var message: TWMKILLFOCUS); message WM_KILLFOCUS;
procedure PopupWindow(ACaller: TControl);
protected
procedure DestroyWnd; override;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -