📄 wwcheckbox.pas
字号:
{
//
// Components : TwwCheckbox
//
// Copyright (c) 2001 by Woll2Woll Software
// 8/25/01 - Check grid's rowselect for expand button coloring in grid
// 10/10/01 - Use Leftcol instead of 0 in case indicator column is not visible
// 10/15/01 - Don't set row if datalink.dataset is nil. Fixes problem when closing expanded grid with frames.
// 3/30/2002 - In some cases we only wish to check for rowselect so focusrect will still show. Also preserved canvas color when
// focusrect being drawn.
// 5/29/2002 - If Databound and not active then use NullAndBlankState.
// 6/10/02 - Add new event OnCheckVisibleButton to allow
// expand button to be hidden progmatically without calculated field
// 6/14/02 - Add new property FCenterTextVertically - Developer
// can now disable this automatic centering mechnanism
// 6/29/02 - FCenterTextVertically default is wrong in constructor
// 6/24/04 - Support RightToLeft
// 6/29/04 - Toggle inherited moved after setting datalink so state is accurate when event is fired
}
unit wwcheckbox;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, wwframe, dbctrls, db, wwcommon, imglist, wwradiobutton, grids,
wwdbgrid, wwintl;
{$i wwIfDef.pas}
{$C PRELOAD}
type
TwwCustomCheckBox = class(TCustomCheckBox)
private
FCanvas: TControlCanvas;
FFrame: TwwEditFrame;
FIndents: TwwWinButtonIndents;
FAlwaysTransparent: boolean;
FValueChecked: string;
FValueUnchecked: string;
FDisplayValueChecked: string;
FDisplayValueUnchecked: string;
FShowFocusRect: boolean;
FShowBoxAroundGlyph: boolean;
FDynamicCaption: boolean;
FImages: TCustomImageList;
FWordWrap: boolean;
FPaintBitmap: TBitmap;
FPaintCanvas: TCanvas;
// UseTempCanvas: Boolean;
SpaceKeyPressed: boolean;
FModified: Boolean;
// PaintCopyState: TCheckBoxState;
FOnMouseEnter: TNotifyEvent;
FOnMouseLeave: TNotifyEvent;
FShowAsButton: boolean;
FNullAndBlankState: TCheckBoxState;
FShowText: boolean;
FCenterTextVertically: boolean;
FDisableThemes: boolean;
FController: TwwController;
FTextAlignment: TLeftRight;
procedure SetController(Value: TwwController);
function isTransparentEffective: boolean;
procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
procedure DrawItem(const DrawItemStruct: TDrawItemStruct); virtual;
procedure WMLButtonUp(var Message: TWMLButtonUp); message WM_LBUTTONUP;
procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
procedure WMKillFocus(var Message: TWMKillFocus); message WM_KILLFOCUS;
procedure BMSetCheck(var Message: TMessage); message BM_SETCHECK;
procedure WMNCPaint(var Message: TMessage); message WM_NCPAINT;
procedure WMMouseMove(var Message: TWMMouseMove); message WM_MOUSEMOVE;
procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
procedure CNKeyDown(var Message: TWMKeyDown); message CN_KEYDOWN;
procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
procedure EMGetModify(var Message: TMessage); message EM_GETMODIFY;
procedure SetValueChecked(const Value: string);
procedure SetValueUnchecked(const Value: string);
function GetDisplayValueChecked: string;
function GetDisplayValueUnchecked: string;
procedure SetDisplayValueChecked(const Value: string);
procedure SetDisplayValueUnchecked(const Value: string);
procedure ComputeTextRect(var DrawRect: TRect);
function GetModified: Boolean;
procedure SetModified(Value: Boolean);
procedure SetColor(Value: TColor);
Function GetColor: TColor;
function IsColorStored: Boolean;
protected
Function GetDisplayText: string; virtual;
Function GetExtraIndentX: integer; virtual;
Function IsMouseInControl(CheckAreaOnly: boolean=False): boolean; virtual;
function FillBackground: boolean; virtual;
function GetFieldState: TCheckBoxState; virtual;
procedure KeyUp(var Key: Word; Shift: TShiftState); override;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure CreateWnd; override;
procedure CreateParams(var Params: TCreateParams); override;
procedure Paint; virtual;
procedure PaintBorder;
procedure DataChange(Sender: TObject); virtual;
Function GetCanvas: TCanvas; virtual;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
{ Protected declarations }
procedure DoMouseEnter; virtual;
procedure DoMouseLeave; virtual;
function GetImageList: TImageList; virtual;
function HideExpand: boolean; virtual;
function GetField: TField; virtual;
function GetAlignment: TAlignment; virtual;
function GetDrawFlags: integer; virtual; // 8/13/02 - Don't display prefix when using TwwExpandButton
public
destructor Destroy; override;
constructor Create(AOwner: TComponent); override;
procedure ComputeGlyphRect(var DrawRect: TRect); virtual;
property Canvas: TCanvas read GetCanvas;
property Images: TCustomImageList read FImages write FImages;
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
property Modified: Boolean read GetModified write SetModified;
public
property Controller : TwwController read FController write SetController;
property DisableThemes : boolean read FDisableThemes write FDisableThemes;
property TextAlignment: TLeftRight read FTextAlignment write FTextAlignment default taLeftJustify;
property AlwaysTransparent: boolean read FAlwaysTransparent write FAlwaysTransparent;
property Frame: TwwEditFrame read FFrame write FFrame;
property Indents: TwwWinButtonIndents read FIndents write FIndents;
property DynamicCaption: boolean read FDynamicCaption write FDynamicCaption default False;
property ValueChecked: string read FValueChecked write SetValueChecked;
property ValueUnchecked: string read FValueUnchecked write SetValueUnchecked;
property DisplayValueChecked: string read GetDisplayValueChecked write SetDisplayValueChecked;
property DisplayValueUnchecked: string read GetDisplayValueUnchecked write SetDisplayValueUnchecked;
property ShowFocusRect: boolean read FShowFocusRect write FShowFocusRect default true;
property WordWrap: boolean read FWordWrap write FWordWrap default False;
property NullAndBlankState: TCheckBoxState read FNullAndBlankState write FNullAndBlankState;
property ShowText: boolean read FShowText write FShowText default True;
property ShowAsButton: boolean read FShowAsButton write FShowAsButton default False;
property ShowBoxAroundGlyph: boolean read FShowBoxAroundGlyph write FShowBoxAroundGlyph default False;
property CenterTextVertically: boolean read FCenterTextVertically write FCenterTextVertically default True;
property Action;
property Alignment;
property AllowGrayed;
property Anchors;
property BiDiMode;
property Caption;
property Checked;
// No clWindow default for this control as it makes clWindow ignored
property Color: TColor read GetColor write SetColor stored IsColorStored;
// property Color;
property Constraints;
property Ctl3D;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property Font;
property ParentBiDiMode;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property State;
property TabOrder;
property TabStop;
property Visible;
property OnClick;
property OnContextPopup;
property OnDragDrop;
property OnDragOver;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnStartDock;
property OnStartDrag;
end;
{ TDBCheckBox }
TwwDBCustomCheckBox = class(TwwCustomCheckBox)
private
FDataLink: TFieldDataLink;
function GetDataField: string;
function GetDataSource: TDataSource;
function GetReadOnly: Boolean;
procedure SetDataField(const Value: string);
procedure SetDataSource(Value: TDataSource);
procedure SetReadOnly(Value: Boolean);
procedure UpdateData(Sender: TObject);
function ValueMatch(const ValueList, Value: string): Boolean;
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
procedure CMExit(var Message: TCMExit); message CM_EXIT;
procedure CMGetDataLink(var Message: TMessage); message CM_GETDATALINK;
procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
protected
Function IsDataBound: boolean;
procedure DataChange(Sender: TObject); override;
procedure Toggle; override;
procedure KeyPress(var Key: Char); override;
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
procedure WndProc(var Message: TMessage); override;
function GetField: TField; override;
function GetFieldState: TCheckBoxState; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function ExecuteAction(Action: TBasicAction): Boolean; override;
function UpdateAction(Action: TBasicAction): Boolean; override;
function UseRightToLeftAlignment: Boolean; override;
property Field: TField read GetField;
// published
// property AlwaysTransparent: boolean read FAlwaysTransparent write FAlwaysTransparent;
// property Frame: TwwEditFrame read FFrame write FFrame;
// property DynamicCaption: boolean read FDynamicCaption write FDynamicCaption default False;
// property ValueChecked: string read FValueChecked write SetValueChecked;
// property ValueUnchecked: string read FValueUnchecked write SetValueUnchecked;
// property DisplayValueChecked: string read FDisplayValueChecked write SetDisplayValueChecked;
// property DisplayValueUnchecked: string read FDisplayValueUnchecked write SetDisplayValueUnchecked;
// property ShowFocusRect: boolean read FShowFocusRect write FShowFocusRect default true;
// property NullAndBlankState: TCheckBoxState read FNullAndBlankState write FNullAndBlankState;
property Action;
property Alignment;
property AllowGrayed;
property Anchors;
property BiDiMode;
property Caption;
property Checked;
// property Color;
property Constraints;
property Ctl3D;
property DataField: string read GetDataField write SetDataField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property Font;
property Images;
property ParentBiDiMode;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property State;
property TabOrder;
property TabStop;
property Visible;
property OnClick;
property OnContextPopup;
property OnDragDrop;
property OnDragOver;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnMouseEnter;
property OnMouseLeave;
property OnStartDock;
property OnStartDrag;
property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False;
end;
TwwCheckBox = class(TwwDBCustomCheckBox)
published
property Controller;
property DisableThemes;
property AlwaysTransparent;
property Frame;
property DynamicCaption;
property ValueChecked;
property ValueUnchecked;
property DisplayValueChecked;
property DisplayValueUnchecked;
property ShowFocusRect;
property NullAndBlankState;
property Indents;
property Action;
property Alignment;
property AllowGrayed;
property Anchors;
property BiDiMode;
property Caption;
property Checked;
property Color;
property Constraints;
property CenterTextVertically;
property Ctl3D;
property DataField;
property DataSource;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property Font;
property Images;
property ParentBiDiMode;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property ShowText;
property State;
property TabOrder;
property TabStop;
property Visible;
property OnClick;
property OnContextPopup;
property OnDragDrop;
property OnDragOver;
property OnEndDock;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnMouseEnter;
property OnMouseLeave;
property OnStartDock;
property OnStartDrag;
property ReadOnly;
end;
TwwExpandGridIndents=class(TPersistent)
private
FWinControl: TWinControl;
FIndentX: integer;
FIndentY: integer;
// procedure SetIndentX(Value: integer);
// procedure SetIndentY(Value: integer);
public
constructor Create(AOwner: TComponent);
// Procedure Assign(Source: TPersistent); override;
published
property X: integer read FIndentX write FIndentX default 0;
property Y: integer read FIndentY write FIndentY default 0;
end;
// TwwExpandAutoShrink = (easDisabled, easTerminalGrid, easAllGrids);
TwwExpandButton = class;
TwwCheckVisibleButton = procedure (
Sender: TwwExpandButton;
DataSet: TDataSet;
var AShowExpand: boolean) of object;
TwwExpandButton = class(TwwDBCustomCheckBox)
private
FButtonAlignment: TAlignment;
FGrid: TWinControl;
FExpandImages: TImageList;
FAutoShrink: boolean; //TwwExpandAutoShrink;
// FExpanded: boolean;
FOnBeforeExpand: TNotifyEvent;
FOnBeforeCollapse: TNotifyEvent;
FOnAfterExpand: TNotifyEvent;
FOnAfterCollapse: TNotifyEvent;
FAutoHideExpand: boolean;
InClickEvent: boolean;
FGridIndents: TwwExpandGridIndents;
FOnCheckVisibleButton: TwwCheckVisibleButton;
BeforeExpandHeightOfParentGrid, BeforeExpandRowHeight: integer;
procedure BMSetCheck(var Message: TMessage); message BM_SETCHECK;
procedure CMExit(var Message: TCMExit); message CM_EXIT;
procedure CMShowingChanged(var Message: TMessage); message CM_SHOWINGCHANGED;
procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
procedure WMKillFocus(var Message: TWMKillFocus); message WM_KILLFOCUS;
procedure WMLButtonUp(var Message: TWMLButtonUp); message WM_LBUTTONUP;
procedure SetGrid(value: TWinControl);
procedure SetExpanded(val: boolean);
function GetExpanded: boolean;
protected
OriginalHeight: integer;
procedure WndProc(var Message: TMessage); override;
function GetAlignment: TAlignment; override;
Function GetDisplayText: string; override;
Function GetExtraIndentX: integer; override;
function GetImageList: TImageList; override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
procedure Toggle; override;
procedure DataChange(Sender: TObject); override;
function GetFieldState: TCheckBoxState; override;
function FillBackground: boolean; override;
procedure DoBeforeExpand; virtual;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -