⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wwcheckbox.pas

📁 InfoPower_Studio 2007 v5.0.1.3 banben
💻 PAS
📖 第 1 页 / 共 5 页
字号:
{
//
// 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 + -