📄 dbctrlseh.pas
字号:
procedure SetDataField(const Value: string);
procedure SetDataSource(Value: TDataSource);
procedure SetFlat(const Value: Boolean);
procedure SetReadOnly(Value: Boolean);
procedure SetState(const Value: TCheckBoxState);
procedure SetValueCheck(const Value: string);
procedure SetValueUncheck(const Value: string);
procedure WMCancelMode(var Message: TWMCancelMode); message WM_CANCELMODE;
procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND;
procedure WMKillFocus(var Message: TWMKillFocus); message WM_KILLFOCUS;
procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
procedure WMSize(var Message: TWMSize); message WM_SIZE;
protected
FDataPosting: Boolean;
FToggleKeyDown: Boolean;
procedure Paint; virtual;
procedure PaintWindow(DC: HDC); override;
property Canvas: TCanvas read FCanvas;
function DataIndepended: Boolean; virtual;
// function GetActionLinkClass: TControlActionLinkClass; override;
function GetChecked: Boolean; override;//virtual;
function PostDataEvent: Boolean;
// procedure ActionChange(Sender: TObject; CheckDefaults: Boolean); override;
procedure Click; override;
procedure CreateWnd; override;
procedure DrawCaptionRect(ARect: TRect; AFocused, AMouseAboveControl, ADown: Boolean); virtual;
procedure DrawCheckBoxRect(ARect: TRect; AState: TCheckBoxState; AFocused, AMouseAboveControl, ADown: Boolean); virtual;
procedure DrawState(AState: TCheckBoxState; AFocused, AMouseAboveControl, ADown: Boolean); virtual;
procedure InternalSetState(Value: TCheckBoxState); virtual;
procedure InternalUpdatePostData; virtual;
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
procedure KeyPress(var Key: Char); override;
procedure KeyUp(var Key: Word; Shift: TShiftState); override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
// procedure Paint; override;
procedure SetChecked(Value: Boolean); override;//virtual;
procedure Toggle; virtual;
procedure WndProc(var Message: TMessage); override;
property ClicksDisabled: Boolean read FClicksDisabled write FClicksDisabled;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
function ExecuteAction(Action: TBasicAction): Boolean; override;
function GetControlsAlignment: TAlignment; override;
function UpdateAction(Action: TBasicAction): Boolean; override;
function UseRightToLeftAlignment: Boolean; override;
procedure UpdateData; virtual;
property Alignment: TLeftRight read FAlignment write SetAlignment default taRightJustify;
property AllowGrayed: Boolean read FAllowGrayed write FAllowGrayed default False;
property AlwaysShowBorder: Boolean read FAlwaysShowBorder write SetAlwaysShowBorder default False;
property Checked;//: Boolean read GetChecked write SetChecked stored IsCheckedStored default False;
property DataField: string read GetDataField write SetDataField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
property Field: TField read GetField;
property Flat: Boolean read FFlat write SetFlat default False;
property Modified: Boolean read GetModified;
property ReadOnly: Boolean read GetReadOnly write SetReadOnly default False;
property State: TCheckBoxState read FState write SetState stored IsStateStored;
property ValueChecked: String read FValueCheck write SetValueCheck;
property ValueUnchecked: String read FValueUncheck write SetValueUncheck;
property TabStop default True;
end;
{ TDBCheckBoxEh }
TDBCheckBoxEh = class(TCustomDBCheckBoxEh)
published
property Action;
property Alignment;
property AllowGrayed;
property AlwaysShowBorder;
property Anchors;
property BiDiMode;
property Caption;
property Checked;
property Color;
property Constraints;
property Ctl3D;
property DataField;
property DataSource;
property DragCursor;
property DragKind;
property DragMode;
property Enabled;
property Flat;
property Font;
property ParentBiDiMode;
property ParentColor;
property ParentCtl3D;
property ParentFont;
property ParentShowHint;
property PopupMenu;
property ReadOnly;
property ShowHint;
property State;
property TabOrder;
property TabStop;
property ValueChecked;
property ValueUnchecked;
property Visible;
property OnClick;
{$IFDEF EH_LIB_5}
property OnContextPopup;
{$ENDIF}
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;
implementation
{$IFDEF EH_LIB_VCL}
uses Commctrl, Clipbrd, DbConsts,
{$IFDEF EH_LIB_6} Types, MaskUtils, DateUtils, {$ENDIF}
{$IFDEF EH_LIB_7} Themes, UxTheme, {$ENDIF}
Dialogs, CalculatorEh;
{$ELSE}
uses QClipbrd, QDbConsts, QDialogs, QCalculatorEh, Types, MaskUtils;
{$ENDIF}
type
TWinControlCracker = class(TWinControl) end;
{$IFNDEF EH_LIB_6}
function DupeString(const AText: string; ACount: Integer): string;
var
P: PChar;
C: Integer;
begin
C := Length(AText);
SetLength(Result, C * ACount);
P := Pointer(Result);
if P = nil then Exit;
while ACount > 0 do
begin
Move(Pointer(AText)^, P^, C);
Inc(P, C);
Dec(ACount);
end;
end;
{$ENDIF}
function VarToStr(const V: Variant): string;
begin
Result := '';
if VarIsArray(V) then Exit;
try
Result := {$IFDEF EH_LIB_6}Variants.{$ELSE}System.{$ENDIF}VarToStr(V);
except
end;
end;
//const
// InitRepeatPause:Integer = 500; { pause before first repeat timer (ms) }
// RepeatPause:Integer = 100; { pause before next repeat timers (ms) }
{ TEditImageEh }
constructor TEditImageEh.Create(EditControl: TWinControl);
begin
inherited Create;
FEditControl := EditControl;
FUseImageHeight := True;
FImageIndex := -1;
end;
destructor TEditImageEh.Destroy;
begin
inherited Destroy;
end;
procedure TEditImageEh.Assign(Source: TPersistent);
begin
if Source is TEditImageEh then
begin
Images := TEditImageEh(Source).Images;
ImageIndex := TEditImageEh(Source).ImageIndex;
Visible := TEditImageEh(Source).Visible;
Width := TEditImageEh(Source).Width;
end else
inherited Assign(Source);
end;
procedure TEditImageEh.SetImageIndex(const Value: Integer);
begin
if FImageIndex <> Value then
begin
FImageIndex := Value;
if FEditControl <> nil then FEditControl.Invalidate;
end;
end;
procedure TEditImageEh.SetImages(const Value: TCustomImageList);
begin
if FImages <> Value then
begin
FImages := Value;
if FEditControl <> nil then
begin
FEditControl.Perform(CM_EDITIMAGECHANGEDEH, ObjectToIntPtr(Self), 0);
if Value <> nil then Value.FreeNotification(FEditControl);
end;
end;
end;
procedure TEditImageEh.SetVisible(const Value: Boolean);
begin
if FVisible <> Value then
begin
FVisible := Value;
if FEditControl <> nil then FEditControl.Perform(CM_EDITIMAGECHANGEDEH, ObjectToIntPtr(Self), 0);
end;
end;
procedure TEditImageEh.SetWidth(const Value: Integer);
begin
if FWidth <> Value then
begin
FWidth := Value;
if FEditControl <> nil then FEditControl.Perform(CM_EDITIMAGECHANGEDEH, ObjectToIntPtr(Self), 0);
end;
end;
procedure TEditImageEh.SetUseImageHeight(const Value: Boolean);
begin
if FUseImageHeight <> Value then
begin
FUseImageHeight := Value;
if FEditControl <> nil then FEditControl.Perform(CM_EDITIMAGECHANGEDEH, ObjectToIntPtr(Self), 0);
end;
end;
{ TFieldDataLinkEh }
constructor TFieldDataLinkEh.Create;
begin
inherited Create;
VisualControl := True;
FDataIndepended := True;
DataIndependentValue := Null;
end;
function TFieldDataLinkEh.Edit: Boolean;
begin
if DataIndepended then
begin
if not Editing and not ReadOnly then
begin
FEditing := True;
FModified := False;
if Assigned(OnEditingChange) then OnEditingChange(Self);
end;
end else if CanModify then
inherited Edit;
Result := FEditing;
end;
function TFieldDataLinkEh.GetActive: Boolean;
begin
if DataIndepended then Result := True
else Result := inherited Active and (Field <> nil);
end;
function TFieldDataLinkEh.GetDataSetActive: Boolean;
begin
Result := (DataSource <> nil) and (DataSource.DataSet <> nil) and DataSource.DataSet.Active;
end;
function TFieldDataLinkEh.GetCanModify: Boolean;
begin
// Result := inherited CanModify or DataIndepended;
Result := ((Field <> nil) and Field.CanModify) or DataIndepended;
end;
function TFieldDataLinkEh.GetDataSource: TDataSource;
begin
Result := inherited DataSource;
end;
procedure TFieldDataLinkEh.Modified;
begin
FModified := True;
end;
procedure TFieldDataLinkEh.RecordChanged(Field: TField);
begin
if (Field = nil) or FieldFound(Field) then
begin
if Assigned(FOnDataChange) then FOnDataChange(Self);
FModified := False;
end;
end;
procedure TFieldDataLinkEh.SetDataSource(const Value: TDataSource);
begin
if Value <> inherited DataSource then
begin
inherited DataSource := Value;
UpdateDataIndepended;
end;
end;
procedure TFieldDataLinkEh.SetFieldName(const Value: string);
begin
if FFieldName <> Value then
begin
FFieldName := Value;
UpdateField;
UpdateDataIndepended;
end;
end;
procedure TFieldDataLinkEh.SetText(Text: String);
begin
if DataIndepended then
begin
DataIndependentValue := Text;
RecordChanged(nil);
end else if (Field is TMemoField) then {if Field <> nil then}
Field.AsString := Text
else
Field.Text := Text;
end;
procedure TFieldDataLinkEh.SetValue(Value: Variant);
var i: Integer;
begin
if DataIndepended then
begin
DataIndependentValue := Value;
RecordChanged(nil);
end else {if Field <> nil then} if FieldsCount > 1 then
begin
if VarEquals(Value, Null)
then for i := 0 to FieldsCount - 1 do Fields[i].AsVariant := Null
else for i := 0 to FieldsCount - 1 do Fields[i].AsVariant := Value[i]
end else if Field <> nil then
Field.AsVariant := Value;
end;
procedure TFieldDataLinkEh.UpdateData;
begin
if DataIndepended then
begin
if FModified then
if Assigned(OnUpdateData) then OnUpdateData(Self);
FEditing := False;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -