📄 dbctrlseh.pas
字号:
{ 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;
FModified := False;
end else if FModified then
begin
if (Field <> nil) and Assigned(FOnUpdateData) then FOnUpdateData(Self);
FModified := False;
end;
end;
procedure TFieldDataLinkEh.UpdateDataIndepended;
var
OldDataIndepended: Boolean;
begin
if FDataIndepended <> ((DataSource = nil) and (FieldName = '')) then
begin
OldDataIndepended := FDataIndepended;
FDataIndepended := (DataSource = nil) and (FieldName = '');
DataIndependentValue := Null;
//if {FDataIndepended and} Assigned(OnRecordChange) then OnActiveChange(Self);
LayoutChanged;
if not OldDataIndepended and FDataIndepended then
RecordChanged(nil);
end;
end;
procedure TFieldDataLinkEh.ActiveChanged;
begin
UpdateField;
if Assigned(FOnActiveChange) then FOnActiveChange(Self);
end;
procedure TFieldDataLinkEh.EditingChanged;
begin
SetEditing(inherited Editing and CanModify);
end;
function TFieldDataLinkEh.FieldFound(Value: TField): Boolean;
var i: Integer;
begin
Result := False;
for i := 0 to Length(FFields) - 1 do
if FFields[i] = Value then
begin
Result := True;
Exit;
end;
end;
{$IFDEF CIL}
procedure TFieldDataLinkEh.FocusControl(const Field: TField);
begin
if (Field <> nil) and FieldFound(Field) and (FControl is TWinControl) then
if TWinControl(FControl).CanFocus then
begin
TWinControl(FControl).SetFocus;
end;
end;
{$ELSE}
procedure TFieldDataLinkEh.FocusControl(Field: TFieldRef);
begin
if (Field^ <> nil) and FieldFound(Field^) and (FControl is TWinControl) then
if TWinControl(FControl).CanFocus then
begin
Field^ := nil;
TWinControl(FControl).SetFocus;
end;
end;
{$ENDIF}
function TFieldDataLinkEh.GetField: TField;
begin
if Length(FFields) = 0
then Result := nil
else Result := FFields[0];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -