📄 toolctrlseh.pas
字号:
{*******************************************************}
{ }
{ EhLib v4.2 }
{ Tool controls }
{ (Build 4.2.05) }
{ }
{ Copyright (c) 2001-2006 by Dmitry V. Bolshakov }
{ }
{*******************************************************}
{$I EhLib.Inc}
{$IFDEF EH_LIB_VCL}
unit ToolCtrlsEh {$IFDEF CIL} platform {$ENDIF};
{$ELSE}
unit QToolCtrlsEh;
{$ENDIF}
interface
{$IFDEF EH_LIB_VCL}
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
{$IFDEF EH_LIB_5} Contnrs, ActnList, {$ENDIF}
{$IFDEF EH_LIB_6} Variants, {$ENDIF}
{$IFDEF CIL}
EhLibVCLNET,
{$ELSE}
EhLibVCL,
{$ENDIF}
StdCtrls, Mask, Db, DBCtrls, Buttons, ExtCtrls, Menus, ComCtrls, CommCtrl,
Imglist;
{$ELSE}
uses
QGraphics, QControls, QForms, QDialogs, Variants, QStdCtrls, QMask,
QDBCtrls, QButtons, QExtCtrls, QMenus, QComCtrls, QImglist,
Db, SysUtils, Classes;
{$ENDIF}
const
CM_IGNOREEDITDOWN = WM_USER + 102;
type
TLocateTextOptionEh = (ltoCaseInsensitiveEh, ltoAllFieldsEh, ltoMatchFormatEh,
ltoIgnoteCurrentPosEh, ltoStopOnEscape);
TLocateTextOptionsEh = set of TLocateTextOptionEh;
TLocateTextDirectionEh = (ltdUpEh, ltdDownEh, ltdAllEh);
TLocateTextMatchingEh = (ltmAnyPartEh, ltmWholeEh, ltmFromBegingEh);
TLocateTextTreeFindRangeEh = (lttInAllNodesEh, lttInExpandedNodesEh,
lttInCurrentLevelEh, lttInCurrentNodeEh);
IMemTableDataFieldValueListEh = interface
['{28F8194C-5FF3-42C4-87A6-8B3E06210FA6}']
function GetValues: TStrings;
end;
IMemTableEh = interface
['{A8C3C87A-E556-4BDB-B8A7-5B33497D1624}']
// property TreeViewMode: Boolean read GetTreeViewMode write SetTreeViewMode;
function FetchRecords(Count: Integer): Integer;
function GetInstantReadCurRowNum: Integer;
function GetTreeNodeExpanded(RowNum: Integer): Boolean; overload;
function GetTreeNodeExpanded: Boolean; overload;
function GetTreeNodeHasChields: Boolean;
function GetTreeNodeLevel: Integer;
function GetPrevVisibleTreeNodeLevel: Integer;
function GetNextVisibleTreeNodeLevel: Integer;
function GetRecObject: TObject;
function InstantReadIndexOfBookmark(Bookmark: TBookmarkStr): Integer;
function InstantReadRowCount: Integer;
function MemTableIsTreeList: Boolean;
function ParentHasNextSibling(ParenLevel: Integer): Boolean;
function SetToRec(Rec: TObject): Boolean;
function SetTreeNodeExpanded(RowNum: Integer; Value: Boolean): Integer;
function GetFieldValueList(FieldName: String): IMemTableDataFieldValueListEh;
function MoveRecords(BookmarkList: TStrings; ToRecNo: Longint; TreeLevel: Integer; CheckOnly: Boolean): Boolean;
procedure InstantReadEnter(RowNum: Integer);
procedure InstantReadLeave;
property InstantReadCurRowNum: Integer read GetInstantReadCurRowNum;
// property TreeNodeCollapsed: Boolean read GetTreeNodeCollapsed write SetTreeNodeCollapsed;
end;
IComboEditEh = interface
['{B64255B5-386A-4524-8BC7-7F49DDB410F4}']
procedure CloseUp(Accept: Boolean);
end;
TFieldsArrEh = array of TField;
{ Standard events }
TButtonClickEventEh = procedure(Sender: TObject; var Handled: Boolean) of object;
TButtonDownEventEh = procedure(Sender: TObject; TopButton: Boolean;
var AutoRepeat: Boolean; var Handled: Boolean) of object;
TCloseUpEventEh = procedure(Sender: TObject; Accept: Boolean) of object;
TAcceptEventEh = procedure(Sender: TObject; var Accept: Boolean) of object;
TNotInListEventEh = procedure(Sender: TObject; NewText: String;
var RecheckInList: Boolean) of object;
TUpdateDataEventEh = procedure(Sender: TObject; var Handled: Boolean) of object;
{ TBMListEh }
TBMListEh = class
private
FCache: TBookmarkStr;
FCacheFind: Boolean;
FCacheIndex: Integer;
FLinkActive:boolean;
function GetCount: Integer;
function GetCurrentRowSelected: Boolean;
function GetItem(Index: Integer): TBookmarkStr;
protected
FList: TStringList;
function Compare(const Item1, Item2: TBookmarkStr): Integer;
function CurrentRow: TBookmarkStr;
function GetDataSet:TDataSet; virtual; abstract;
procedure Invalidate; virtual;
procedure LinkActive(Value: Boolean);
procedure RaiseBMListError(const S: string); virtual;
procedure SetCurrentRowSelected(Value: Boolean); virtual;
procedure StringsChanged(Sender: TObject); virtual;
procedure UpdateState; virtual;
public
constructor Create;
destructor Destroy; override;
function Find(const Item: TBookmarkStr; var Index: Integer): Boolean;
function IndexOf(const Item: TBookmarkStr): Integer;
function Refresh: Boolean;
procedure Clear; virtual;
procedure Delete;
procedure SelectAll;
property Count: Integer read GetCount;
property CurrentRowSelected: Boolean read GetCurrentRowSelected write SetCurrentRowSelected;
property DataSet:TDataSet read GetDataSet;
property Items[Index: Integer]: TBookmarkStr read GetItem; default;
end;
{ TEditButtonControlEh }
TEditButtonStyleEh = (ebsDropDownEh, ebsEllipsisEh, ebsGlyphEh, ebsUpDownEh,
ebsPlusEh, ebsMinusEh);
TEditButtonControlEh = class(TSpeedButton)
private
FActive: Boolean;
FAlwaysDown: Boolean;
FButtonNum: Integer;
FNoDoClick: Boolean;
FOnDown: TButtonDownEventEh;
FStyle: TEditButtonStyleEh;
FTimer: TTimer;
function GetTimer: TTimer;
procedure ResetTimer(Interval: Cardinal);
procedure SetActive(const Value: Boolean);
procedure SetAlwaysDown(const Value: Boolean);
procedure SetStyle(const Value: TEditButtonStyleEh);
procedure TimerEvent(Sender: TObject);
procedure UpdateDownButtonNum(X, Y: Integer);
protected
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 Paint; override;
property Timer: TTimer read GetTimer;
public
procedure Click; override;
procedure EditButtonDown(TopButton: Boolean; var AutoRepeat: Boolean);
procedure SetState(NewState: TButtonState; IsActive: Boolean; ButtonNum: Integer);
procedure SetWidthNoNotify(AWidth: Integer);
property Active: Boolean read FActive write SetActive;
property AlwaysDown: Boolean read FAlwaysDown write SetAlwaysDown;
property Style: TEditButtonStyleEh read FStyle write SetStyle default ebsDropDownEh;
property OnDown: TButtonDownEventEh read FOnDown write FOnDown;
end;
TSpeedButtonEh = class(TEditButtonControlEh)
published
property Active;
property Style;
end;
TEditButtonControlLineRec = record
ButtonLine: TShape;
EditButtonControl: TEditButtonControlEh;
end;
TEditButtonControlList = array of TEditButtonControlLineRec;
TEditButtonEh = class;
TEditButtonActionLinkEh = class(TActionLink)
protected
FClient: TEditButtonEh;
procedure AssignClient(AClient: TObject); override;
function IsEnabledLinked: Boolean; override;
function IsHintLinked: Boolean; override;
function IsShortCutLinked: Boolean; override;
function IsVisibleLinked: Boolean; override;
procedure SetEnabled(Value: Boolean); override;
procedure SetHint(const Value: string); override;
procedure SetShortCut(Value: TShortCut); override;
procedure SetVisible(Value: Boolean); override;
end;
TEditButtonActionLinkEhClass = class of TEditButtonActionLinkEh;
{ TEditButtonEh }
TEditButtonEh = class(TCollectionItem)
private
FActionLink: TEditButtonActionLinkEh;
FDropdownMenu: TPopupMenu;
FEditControl: TWinControl;
FEnabled: Boolean;
FGlyph: TBitmap;
FHint: String;
FNumGlyphs: Integer;
FOnButtonClick: TButtonClickEventEh;
FOnButtonDown: TButtonDownEventEh;
FOnChanged: TNotifyEvent;
FShortCut: TShortCut;
FStyle: TEditButtonStyleEh;
FVisible: Boolean;
FWidth: Integer;
function GetAction: TBasicAction;
function GetGlyph: TBitmap;
function IsEnabledStored: Boolean;
function IsHintStored: Boolean;
function IsShortCutStored: Boolean;
function IsVisibleStored: Boolean;
procedure DoActionChange(Sender: TObject);
procedure SetAction(const Value: TBasicAction);
procedure SetEnabled(const Value: Boolean);
procedure SetGlyph(const Value: TBitmap);
procedure SetHint(const Value: String);
procedure SetNumGlyphs(Value: Integer);
procedure SetStyle(const Value: TEditButtonStyleEh);
procedure SetVisible(const Value: Boolean);
procedure SetWidth(const Value: Integer);
protected
function CreateEditButtonControl: TEditButtonControlEh; virtual;
procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); dynamic;
procedure Changed; overload;
property ActionLink: TEditButtonActionLinkEh read FActionLink write FActionLink;
public
constructor Create(Collection: TCollection); overload; override;
constructor Create(EditControl: TWinControl); reintroduce; overload;
destructor Destroy; override;
function GetActionLinkClass: TEditButtonActionLinkEhClass; dynamic;
procedure Assign(Source: TPersistent); override;
procedure Click(Sender: TObject; var Handled: Boolean); virtual;
procedure InitiateAction; virtual;
property OnChanged: TNotifyEvent read FOnChanged write FOnChanged;
published
property Action: TBasicAction read GetAction write SetAction;
property DropdownMenu: TPopupMenu read FDropdownMenu write FDropdownMenu;
property Enabled: Boolean read FEnabled write SetEnabled stored IsEnabledStored default True;
property Glyph: TBitmap read GetGlyph write SetGlyph;
property Hint: String read FHint write SetHint stored IsHintStored;
property NumGlyphs: Integer read FNumGlyphs write SetNumGlyphs default 1;
property ShortCut: TShortCut read FShortCut write FShortCut stored IsShortCutStored default scNone;
//property ShortCut: TShortCut read FShortCut write FShortCut default 32808; //Menus.ShortCut(VK_DOWN, [ssAlt]);
property Style: TEditButtonStyleEh read FStyle write SetStyle default ebsDropDownEh;
property Visible: Boolean read FVisible write SetVisible stored IsVisibleStored default False;
property Width: Integer read FWidth write SetWidth default 0;
property OnClick: TButtonClickEventEh read FOnButtonClick write FOnButtonClick;
property OnDown: TButtonDownEventEh read FOnButtonDown write FOnButtonDown;
end;
TEditButtonEhClass = class of TEditButtonEh;
{ TDropDownEditButtonEh }
TDropDownEditButtonEh = class(TEditButtonEh)
public
constructor Create(Collection: TCollection); overload; override;
constructor Create(EditControl: TWinControl); overload;
published
property ShortCut default 32808; //Menus.ShortCut(VK_DOWN, [ssAlt]);
end;
{ TVisibleEditButtonEh }
TVisibleEditButtonEh = class(TEditButtonEh)
public
constructor Create(Collection: TCollection); overload; override;
constructor Create(EditControl: TWinControl); overload;
published
property ShortCut default 32808; //Menus.ShortCut(VK_DOWN, [ssAlt]);
property Visible default True;
end;
{ TEditButtonsEh }
TEditButtonsEh = class(TCollection)
private
FOnChanged: TNotifyEvent;
function GetEditButton(Index: Integer): TEditButtonEh;
procedure SetEditButton(Index: Integer; Value: TEditButtonEh);
protected
FOwner: TPersistent;
function GetOwner: TPersistent; override;
procedure Update(Item: TCollectionItem); override;
public
constructor Create(Owner: TPersistent; EditButtonClass: TEditButtonEhClass);
function Add: TEditButtonEh;
property Items[Index: Integer]: TEditButtonEh read GetEditButton write SetEditButton; default;
property OnChanged: TNotifyEvent read FOnChanged write FOnChanged;
end;
{ TSpecRowEh }
TSpecRowEh = class(TPersistent)
private
FCellsStrings: TStrings;
FCellsText: String;
FColor: TColor;
FFont: TFont;
FOnChanged: TNotifyEvent;
FOwner: TPersistent;
FSelected: Boolean;
FShortCut: TShortCut;
FShowIfNotInKeyList: Boolean;
FUpdateCount: Integer;
FValue: Variant;
FVisible: Boolean;
function GetCellText(Index: Integer): String;
function GetColor: TColor;
function GetFont: TFont;
function IsColorStored: Boolean;
function IsFontStored: Boolean;
function IsValueStored: Boolean;
procedure FontChanged(Sender: TObject);
procedure SetCellsText(const Value: String);
procedure SetColor(const Value: TColor);
procedure SetFont(const Value: TFont);
procedure SetShowIfNotInKeyList(const Value: Boolean);
procedure SetValue(const Value: Variant);
procedure SetVisible(const Value: Boolean);
protected
FColorAssigned: Boolean;
FFontAssigned: Boolean;
function GetOwner: TPersistent; override;
procedure Changed;
public
constructor Create(Owner: TPersistent);
destructor Destroy; override;
function DefaultColor: TColor;
function DefaultFont: TFont;
function LocateKey(KeyValue: Variant): Boolean;
procedure Assign(Source: TPersistent); override;
procedure BeginUpdate;
procedure EndUpdate;
property CellText[Index: Integer]: String read GetCellText;
property Selected: Boolean read FSelected write FSelected;
property UpdateCount: Integer read FUpdateCount;
property OnChanged: TNotifyEvent read FOnChanged write FOnChanged;
published
property CellsText: String read FCellsText write SetCellsText;
property Color: TColor read GetColor write SetColor stored IsColorStored;
property Font: TFont read GetFont write SetFont stored IsFontStored;
property ShortCut: TShortCut read FShortCut write FShortCut default 32814; //Menus.ShortCut(VK_DOWN, [ssAlt]);
property ShowIfNotInKeyList: Boolean read FShowIfNotInKeyList write SetShowIfNotInKeyList default True;
property Value: Variant read FValue write SetValue stored IsValueStored;
property Visible: Boolean read FVisible write SetVisible default False;
end;
{ TSizeGripEh }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -