?? rxctrls.pas
字號:
{*******************************************************}
{ }
{ Delphi VCL Extensions (RX) }
{ }
{ Copyright (c) 1995, 1996 AO ROSNO }
{ Copyright (c) 1997, 1998 Master-Bank }
{ }
{*******************************************************}
unit RXCtrls;
{$I RX.INC}
{$W-,T-}
interface
uses Windows, Registry, RTLConsts, Messages, Classes, Controls, Graphics, StdCtrls, ExtCtrls, Forms,
Buttons, Menus, RxTimer, RxConst, IniFiles, Placemnt;
type
TPositiveInt = 1..MaxInt;
{ TTextListBox }
TTextListBox = class(TCustomListBox)
private
FMaxWidth: Integer;
{$IFNDEF WIN32}
FTabWidth: Integer;
procedure SetTabWidth(Value: Integer);
{$ENDIF}
procedure ResetHorizontalExtent;
procedure SetHorizontalExtent;
function GetItemWidth(Index: Integer): Integer;
protected
{$IFNDEF WIN32}
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
{$ENDIF}
procedure WndProc(var Message: TMessage); override;
published
property Align;
property BorderStyle;
property Color;
property Ctl3D;
property DragCursor;
property DragMode;
property Enabled;
property ExtendedSelect;
property Font;
property IntegralHeight;
{$IFDEF RX_D4}
property Anchors;
property BiDiMode;
property Constraints;
property DragKind;
property ParentBiDiMode;
{$ENDIF}
{$IFDEF WIN32}
{$IFNDEF VER90}
property ImeMode;
property ImeName;
{$ENDIF}
{$ENDIF}
property ItemHeight;
property Items;
property MultiSelect;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property Sorted;
property TabOrder;
property TabStop;
{$IFDEF WIN32}
property TabWidth;
{$ELSE}
property TabWidth: Integer read FTabWidth write SetTabWidth default 0;
{$ENDIF}
property Visible;
property OnClick;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
{$IFDEF WIN32}
property OnStartDrag;
{$ENDIF}
{$IFDEF RX_D5}
property OnContextPopup;
{$ENDIF}
{$IFDEF RX_D4}
property OnMouseWheelDown;
property OnMouseWheelUp;
property OnEndDock;
property OnStartDock;
{$ENDIF}
end;
{ TRxCustomListBox }
TGetItemWidthEvent = procedure(Control: TWinControl; Index: Integer;
var Width: Integer) of object;
TRxCustomListBox = class(TWinControl)
private
FItems: TStrings;
FBorderStyle: TBorderStyle;
FCanvas: TCanvas;
FColumns: Integer;
FItemHeight: Integer;
FStyle: TListBoxStyle;
FIntegralHeight: Boolean;
FMultiSelect: Boolean;
FSorted: Boolean;
FExtendedSelect: Boolean;
FTabWidth: Integer;
FSaveItems: TStringList;
FSaveTopIndex: Integer;
FSaveItemIndex: Integer;
FAutoScroll: Boolean;
FGraySelection: Boolean;
FMaxItemWidth: Integer;
FOnDrawItem: TDrawItemEvent;
FOnMeasureItem: TMeasureItemEvent;
FOnGetItemWidth: TGetItemWidthEvent;
procedure ResetHorizontalExtent;
procedure SetHorizontalExtent;
function GetAutoScroll: Boolean;
function GetItemHeight: Integer; virtual;
function GetItemIndex: Integer;
function GetSelCount: Integer;
function GetSelected(Index: Integer): Boolean;
function GetTopIndex: Integer;
procedure SetAutoScroll(Value: Boolean);
procedure SetBorderStyle(Value: TBorderStyle);
procedure SetColumnWidth;
procedure SetColumns(Value: Integer);
procedure SetExtendedSelect(Value: Boolean);
procedure SetIntegralHeight(Value: Boolean);
procedure SetItemHeight(Value: Integer);
procedure SetItemIndex(Value: Integer);
procedure SetMultiSelect(Value: Boolean);
procedure SetSelected(Index: Integer; Value: Boolean);
procedure SetSorted(Value: Boolean);
procedure SetStyle(Value: TListBoxStyle);
procedure SetTabWidth(Value: Integer);
procedure SetTopIndex(Value: Integer);
procedure SetGraySelection(Value: Boolean);
procedure SetOnDrawItem(Value: TDrawItemEvent);
procedure SetOnGetItemWidth(Value: TGetItemWidthEvent);
procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
procedure WMSize(var Message: TWMSize); message WM_SIZE;
procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;
procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
procedure CNMeasureItem(var Message: TWMMeasureItem); message CN_MEASUREITEM;
procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN;
procedure WMNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;
procedure WMKillFocus(var Msg: TWMKillFocus); message WM_KILLFOCUS;
procedure WMSetFocus(var Msg: TWMSetFocus); message WM_SETFOCUS;
{$IFDEF WIN32}
procedure CMCtl3DChanged(var Message: TMessage); message CM_CTL3DCHANGED;
{$ENDIF}
protected
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
procedure DestroyWnd; override;
function CreateItemList: TStrings; virtual;
function GetItemWidth(Index: Integer): Integer; virtual;
procedure WndProc(var Message: TMessage); override;
procedure DragCanceled; override;
procedure DrawItem(Index: Integer; Rect: TRect;
State: TOwnerDrawState); virtual;
procedure MeasureItem(Index: Integer; var Height: Integer); virtual;
function GetItemData(Index: Integer): Longint; dynamic;
procedure SetItemData(Index: Integer; AData: LongInt); dynamic;
procedure SetItems(Value: TStrings); virtual;
procedure ResetContent; dynamic;
procedure DeleteString(Index: Integer); dynamic;
property AutoScroll: Boolean read GetAutoScroll write SetAutoScroll default False;
property BorderStyle: TBorderStyle read FBorderStyle write SetBorderStyle default bsSingle;
property Columns: Integer read FColumns write SetColumns default 0;
property ExtendedSelect: Boolean read FExtendedSelect write SetExtendedSelect default True;
property GraySelection: Boolean read FGraySelection write SetGraySelection default False;
property IntegralHeight: Boolean read FIntegralHeight write SetIntegralHeight default False;
property ItemHeight: Integer read GetItemHeight write SetItemHeight;
property MultiSelect: Boolean read FMultiSelect write SetMultiSelect default False;
property ParentColor default False;
property Sorted: Boolean read FSorted write SetSorted default False;
property Style: TListBoxStyle read FStyle write SetStyle default lbStandard;
property TabWidth: Integer read FTabWidth write SetTabWidth default 0;
property OnDrawItem: TDrawItemEvent read FOnDrawItem write SetOnDrawItem;
property OnMeasureItem: TMeasureItemEvent read FOnMeasureItem write FOnMeasureItem;
property OnGetItemWidth: TGetItemWidthEvent read FOnGetItemWidth write SetOnGetItemWidth;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Clear;
procedure DefaultDrawText(X, Y: Integer; const S: string);
function ItemAtPos(Pos: TPoint; Existing: Boolean): Integer;
function ItemRect(Index: Integer): TRect;
property Canvas: TCanvas read FCanvas;
property Items: TStrings read FItems write SetItems;
property ItemIndex: Integer read GetItemIndex write SetItemIndex;
property SelCount: Integer read GetSelCount;
property Selected[Index: Integer]: Boolean read GetSelected write SetSelected;
property TopIndex: Integer read GetTopIndex write SetTopIndex;
published
property TabStop default True;
end;
{ TRxCheckListBox }
TCheckKind = (ckCheckBoxes, ckRadioButtons, ckCheckMarks);
TChangeStateEvent = procedure (Sender: TObject; Index: Integer) of object;
TRxCheckListBox = class(TRxCustomListBox)
private
FAllowGrayed: Boolean;
FCheckKind: TCheckKind;
FSaveStates: TList;
FDrawBitmap: TBitmap;
FCheckWidth, FCheckHeight: Integer;
FReserved: Integer;
FInUpdateStates: Boolean;
FIniLink: TIniLink;
FOnClickCheck: TNotifyEvent;
FOnStateChange: TChangeStateEvent;
procedure ResetItemHeight;
function GetItemHeight: Integer; override;
procedure DrawCheck(R: TRect; AState: TCheckBoxState; Enabled: Boolean);
procedure SetCheckKind(Value: TCheckKind);
procedure SetChecked(Index: Integer; AChecked: Boolean);
function GetChecked(Index: Integer): Boolean;
procedure SetState(Index: Integer; AState: TCheckBoxState);
function GetState(Index: Integer): TCheckBoxState;
procedure SetItemEnabled(Index: Integer; Value: Boolean);
function GetItemEnabled(Index: Integer): Boolean;
function GetAllowGrayed: Boolean;
procedure ToggleClickCheck(Index: Integer);
procedure InvalidateCheck(Index: Integer);
procedure InvalidateItem(Index: Integer);
function CreateCheckObject(Index: Integer): TObject;
function FindCheckObject(Index: Integer): TObject;
function GetCheckObject(Index: Integer): TObject;
function IsCheckObject(Index: Integer): Boolean;
procedure ReadVersion(Reader: TReader);
procedure WriteVersion(Writer: TWriter);
procedure ReadCheckData(Reader: TReader);
procedure WriteCheckData(Writer: TWriter);
procedure InternalSaveStates(IniFile: TObject; const Section: string);
procedure InternalRestoreStates(IniFile: TObject; const Section: string);
function GetStorage: TFormPlacement;
procedure SetStorage(Value: TFormPlacement);
procedure IniSave(Sender: TObject);
procedure IniLoad(Sender: TObject);
procedure UpdateCheckStates;
function GetCheckedIndex: Integer;
procedure SetCheckedIndex(Value: Integer);
procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
procedure CMFontChanged(var Message: TMessage); message CM_FONTCHANGED;
protected
function CreateItemList: TStrings; override;
procedure DrawItem(Index: Integer; Rect: TRect;
State: TOwnerDrawState); override;
procedure DefineProperties(Filer: TFiler); override;
function GetItemWidth(Index: Integer): Integer; override;
function GetItemData(Index: Integer): LongInt; override;
procedure SetItemData(Index: Integer; AData: LongInt); override;
procedure KeyPress(var Key: Char); override;
procedure Loaded; override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
procedure ResetContent; override;
procedure DeleteString(Index: Integer); override;
procedure ClickCheck; dynamic;
procedure ChangeItemState(Index: Integer); dynamic;
procedure CreateParams(var Params: TCreateParams); override;
procedure CreateWnd; override;
procedure DestroyWnd; override;
procedure WMDestroy(var Msg: TWMDestroy); message WM_DESTROY;
function GetCheckWidth: Integer;
procedure SetItems(Value: TStrings); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
{$IFDEF WIN32}
procedure SaveStatesReg(IniFile: TRegIniFile);
procedure RestoreStatesReg(IniFile: TRegIniFile);
{$ENDIF WIN32}
procedure SaveStates(IniFile: TIniFile);
procedure RestoreStates(IniFile: TIniFile);
procedure ApplyState(AState: TCheckBoxState; EnabledOnly: Boolean);
property Checked[Index: Integer]: Boolean read GetChecked write SetChecked;
property State[Index: Integer]: TCheckBoxState read GetState write SetState;
property EnabledItem[Index: Integer]: Boolean read GetItemEnabled write SetItemEnabled;
published
property AllowGrayed: Boolean read GetAllowGrayed write FAllowGrayed default False;
property CheckKind: TCheckKind read FCheckKind write SetCheckKind default ckCheckBoxes;
property CheckedIndex: Integer read GetCheckedIndex write SetCheckedIndex default -1;
property IniStorage: TFormPlacement read GetStorage write SetStorage;
property Align;
property AutoScroll default True;
property BorderStyle;
property Color;
property Columns;
property Ctl3D;
property DragCursor;
property DragMode;
property Enabled;
property ExtendedSelect;
property Font;
property GraySelection;
{$IFDEF RX_D4}
property Anchors;
property BiDiMode;
property Constraints;
property DragKind;
property ParentBiDiMode;
{$ENDIF}
{$IFDEF WIN32}
{$IFNDEF VER90}
property ImeMode;
property ImeName;
{$ENDIF}
{$ENDIF}
property IntegralHeight;
property ItemHeight;
property Items stored False;
property MultiSelect;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ShowHint;
property Sorted;
property Style;
property TabOrder;
property TabWidth;
property Visible;
property OnStateChange: TChangeStateEvent read FOnStateChange write FOnStateChange;
property OnClickCheck: TNotifyEvent read FOnClickCheck write FOnClickCheck;
property OnClick;
property OnDblClick;
property OnDragDrop;
property OnDragOver;
property OnDrawItem;
property OnEndDrag;
property OnEnter;
property OnExit;
property OnGetItemWidth;
property OnKeyDown;
property OnKeyPress;
property OnKeyUp;
property OnMeasureItem;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
{$IFDEF WIN32}
property OnStartDrag;
{$ENDIF}
{$IFDEF RX_D5}
property OnContextPopup;
{$ENDIF}
{$IFDEF RX_D4}
property OnMouseWheelDown;
property OnMouseWheelUp;
property OnEndDock;
property OnStartDock;
{$ENDIF}
end;
const
clbDefaultState = cbUnchecked;
clbDefaultEnabled = True;
{ TRxCustomLabel }
type
TShadowPosition = (spLeftTop, spLeftBottom, spRightBottom, spRightTop);
{$IFNDEF RX_D3}
TTextLayout = (tlTop, tlCenter, tlBottom);
{$ENDIF}
TRxCustomLabel = class(TGraphicControl)
private
FFocusControl: TWinControl;
FAlignment: TAlignment;
FAutoSize: Boolean;
FLayout: TTextLayout;
FShadowColor: TColor;
FShadowSize: Byte;
FShadowPos: TShadowPosition;
FWordWrap: Boolean;
FShowAccelChar: Boolean;
FShowFocus: Boolean;
FFocused: Boolean;
FMouseInControl: Boolean;
FDragging: Boolean;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -