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

📄 kxedit.pas

📁 Korea, a data table control 韩国数据表控件 必备
💻 PAS
📖 第 1 页 / 共 3 页
字号:
  end;
  inherited;
end;

function TKXCustomEdit.AsInteger : Longint;
begin
  Result := Trunc(FValue);
end;

function TKXCustomEdit.AsString  : string;
begin
  if FEditType = ETString then Result := Text
  else Result := FloatToStr(FValue);
end;

function TKXCustomEdit.AsFloat   : Extended;
begin
  Result := FValue;
end;

function TKXCustomEdit.AsCurrency: Currency;
begin
  Result := FValue;
end;

{2000.2.眠啊}
//家箭痢 磊府荐
procedure TKXCustomEdit.SetKeyPos(var Value : integer);
begin
  FKeyPos := Value;
end;

//例荤, 例惑, 馆棵覆
procedure TKXCustomEdit.SetKeyOption(var Value : integer);
begin
  FKeyOption := Value;
end;

procedure TKXCustomEdit.SetLabelCtl(Value : TLabel);
begin
  FLabelCtl := Value;
end;

procedure TKXCustomEdit.SetLabelCtltype(Value : TLabelColorType);
begin
  FLabelCtlType := Value;
end;

procedure TKXCustomEdit.SetLabelFColor(Value : TColor);
begin
  FLabelFColor := Value;
end;

procedure TKXCustomEdit.SetLabelEColor(Value : TColor);
begin
  FLabelEColor := Value;
end;

procedure TKXCustomEdit.SetFocusCtl(Value : Boolean);
Begin
  FFocusCtl := Value;
End;

procedure TKXCustomEdit.SetFocusprior(Value : TWincontrol);
Begin
  FFocusprior := Value;
  inherited;
End;

procedure TKXCustomEdit.SetFocusNext(Value : TWincontrol);
Begin
  FFocusNext := Value;
  inherited;
End;

//****************************************************************//
procedure ResetMaxLength(DBEdit: TKXDBEdit);
var
  F: TField;
begin
  with DBEdit do
  if (MaxLength > 0) and Assigned(DataSource) and Assigned(DataSource.DataSet) then
  begin
    F := DataSource.DataSet.FindField(DataField);
    if Assigned(F) and (F.DataType = ftString) and (F.Size = MaxLength) then
      MaxLength := 0;
  end;
end;

constructor TKXDBEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  inherited ReadOnly := True;
  ControlStyle := ControlStyle + [csReplicatable];
  FDataLink := TKXFieldDataLink.Create;
  FDataLink.Control := Self;
  FDataLink.OnDataChange := DataChange;
  FDataLink.OnEditingChange := EditingChange;
  FDataLink.OnUpdateData := UpdateData;
end;

destructor TKXDBEdit.Destroy;
begin
  FDataLink.Free;
  FDataLink := nil;
  inherited Destroy;
end;

procedure TKXDBEdit.Loaded;
begin
  inherited Loaded;
  ResetMaxLength(Self);
  if (csDesigning in ComponentState) then DataChange(Self);
end;

procedure TKXDBEdit.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if (Operation = opRemove) and (FDataLink <> nil) and
    (AComponent = DataSource) then DataSource := nil;
end;

procedure TKXDBEdit.KeyDown(var Key: Word; Shift: TShiftState);
begin
  if (Key = VK_DELETE) or ((Key = VK_INSERT) and (ssShift in Shift)) then
    FDataLink.Edit;
  inherited KeyDown(Key, Shift);
end;

procedure TKXDBEdit.KeyPress(var Key: Char);
begin
  inherited KeyPress(Key);
  if (Key in [#32..#255]) and (FDataLink.Field <> nil) and
    not FDataLink.Field.IsValidChar(Key) then
  begin
    MessageBeep(0);
    Key := #0;
  end;
  case Key of
    ^H, ^V, ^X, #32..#255:
      FDataLink.Edit;
    #27:
      begin
        FDataLink.Reset;
        SelectAll;
        Key := #0;
      end;
  end;
end;

function TKXDBEdit.EditCanModify: Boolean;
begin
  Result := FDataLink.Edit;
end;

procedure TKXDBEdit.Reset;
begin
  FDataLink.Reset;
  SelectAll;
end;

procedure TKXDBEdit.SetFocused(Value: Boolean);
begin
  if FFocused <> Value then
  begin
    FFocused := Value;
    if (Alignment <> taLeftJustify) and not IsMasked then Invalidate;
    FDataLink.Reset;
  end;
end;

procedure TKXDBEdit.Change;
begin
  FDataLink.Modified;
  inherited Change;
end;

function TKXDBEdit.GetDataSource: TDataSource;
begin
  Result := FDataLink.DataSource;
end;

procedure TKXDBEdit.SetDataSource(Value: TDataSource);
begin
  FDataLink.DataSource := Value;
  if Value <> nil then Value.FreeNotification(Self);
end;

function TKXDBEdit.GetDataField: string;
begin
  Result := FDataLink.FieldName;
end;

procedure TKXDBEdit.SetDataField(const Value: string);
begin
  if not (csDesigning in ComponentState) then
    ResetMaxLength(Self);
  FDataLink.FieldName := Value;
end;

procedure TKXDBEdit.SetEditType( Value : TEditTypes );
begin
  if FDataLink.Field <> nil then
    if not(FDataLink.Field.DataType in
        [ftSmallint,ftInteger,ftWord,ftFloat,ftCurrency]) then Value := ETString
    else if(FDataLink.Field.DataType in [ftSmallint,ftInteger,ftWord])and
       (Value in [ETFloat,ETFloatCurrency]) then Value := EditType;
  inherited;
end;

function TKXDBEdit.GetReadOnly: Boolean;
begin
  Result := FDataLink.ReadOnly;
end;

procedure TKXDBEdit.SetReadOnly(Value: Boolean);
begin
  FDataLink.ReadOnly := Value;
end;

function TKXDBEdit.GetField: TField;
begin
  Result := FDataLink.Field;
end;

procedure TKXDBEdit.DataChange(Sender: TObject);
begin
  if FDataLink.Field <> nil then
  begin
    if Alignment <> FDataLink.Field.Alignment then
    begin
      inherited EditText := '';
      Alignment := FDataLink.Field.Alignment;
    end;
    EditMask := FDataLink.Field.EditMask;
    if not(FDataLink.Field.DataType in
       [ftSmallint,ftInteger,ftWord,ftFloat,ftCurrency]) then EditType := ETString;
    if not (csDesigning in ComponentState) then
    begin
      if (FDataLink.Field.DataType = ftString) and (MaxLength = 0) then
        MaxLength := FDataLink.Field.Size;
    end;
    if FDataLink.CanModify and not IsMasked and (FEditType <> ETString) then
    begin
      ConvertValue(FDataLink.Field.Text);
      if FDataLink.Editing and FDataLink.FModified then
        Modified := True;
    end else begin
      inherited EditText := FDataLink.Field.DisplayText;
      if FDataLink.Editing and FDataLink.FModified then
        Modified := True;
    end;
  end else begin
    Alignment := taLeftJustify;
    EditMask := '';
    if csDesigning in ComponentState then inherited EditText := Name
    else inherited EditText := '';
  end;
end;

procedure TKXDBEdit.EditingChange(Sender: TObject);
begin
  inherited ReadOnly := not FDataLink.Editing;
end;

procedure TKXDBEdit.UpdateData(Sender: TObject);
begin
  ValidateEdit;
  FDataLink.Field.Text := AsString;
end;

procedure TKXDBEdit.WMPaste(var Message: TMessage);
begin
  FDataLink.Edit;
  inherited;
end;

procedure TKXDBEdit.WMCut(var Message: TMessage);
begin
  FDataLink.Edit;
  inherited;
end;

procedure TKXDBEdit.CMEnter(var Message: TCMEnter);
begin
  SetFocused(True);
  inherited;
  if SysLocale.FarEast and FDataLink.CanModify then
    inherited ReadOnly := False;
end;

procedure TKXDBEdit.CMExit(var Message: TCMExit);
begin
  try
    FDataLink.UpdateRecord;
  except
    SelectAll;
    SetFocus;
    raise;
  end;
  SetFocused(False);
  CheckCursor;
  DoExit;
end;

procedure TKXDBEdit.CMGetDataLink(var Message: TMessage);
begin
  Message.Result := Integer(FDataLink);
end;

procedure TKXDBEdit.SetEditText(const Value: string);
begin
  FDataLink.Edit;
  inherited EditText :=  Value;
end;

function TKXDBEdit.GetEditText: string;
begin
  Result := inherited EditText;
end;

procedure TKXDBEdit.SetText(const Value: string);
begin
  FDataLink.Edit;
  inherited Text :=  Value;
end;

function TKXDBEdit.GetText: string;
begin
  Result := inherited Text;
end;

procedure TKXFieldDataLink.SetEditing(Value: Boolean);
begin
  if FEditing <> Value then
  begin
    FEditing := Value;
    FModified := False;
    if Assigned(FOnEditingChange) then FOnEditingChange(Self);
  end;
end;

procedure TKXFieldDataLink.SetFieldName(const Value: string);
begin
  if FFieldName <> Value then
  begin
    FFieldName :=  Value;
    UpdateField;
  end;
end;

procedure TKXFieldDataLink.SetField(Value: TField);
begin
  if FField <> Value then
  begin
    FField := Value;
    EditingChanged;
    RecordChanged(nil);
  end;
end;

procedure TKXFieldDataLink.UpdateField;
begin
  SetField(nil);
  if Active and (FFieldName <> '') then
  begin
    if Assigned(FControl) then
      SetField(GetFieldProperty(DataSource.DataSet, FControl, FFieldName)) else
      SetField(DataSource.DataSet.FieldByName(FFieldName));
  end;
end;

function TKXFieldDataLink.Edit: Boolean;
begin
  if CanModify then inherited Edit;
  Result := FEditing;
end;

function TKXFieldDataLink.GetCanModify: Boolean;
begin
  Result := not ReadOnly and (Field <> nil) and Field.CanModify;
end;

procedure TKXFieldDataLink.Modified;
begin
  FModified := True;
end;

procedure TKXFieldDataLink.Reset;
begin
  RecordChanged(nil);
end;

procedure TKXFieldDataLink.ActiveChanged;
begin
  UpdateField;
  if Assigned(FOnActiveChange) then FOnActiveChange(Self);
end;

procedure TKXFieldDataLink.EditingChanged;
begin
  SetEditing(inherited Editing and CanModify);
end;

procedure TKXFieldDataLink.FocusControl(Field: TFieldRef);
begin
  if (Field^ <> nil) and (Field^ = FField) and (FControl is TWinControl) then
    if TWinControl(FControl).CanFocus then
    begin
      Field^ := nil;
      TWinControl(FControl).SetFocus;
    end;
end;

procedure TKXFieldDataLink.RecordChanged(Field: TField);
begin
  if (Field = nil) or (Field = FField) then
  begin
    if Assigned(FOnDataChange) then FOnDataChange(Self);
    FModified := False;
  end;
end;

procedure TKXFieldDataLink.LayoutChanged;
begin
  UpdateField;
end;

procedure TKXFieldDataLink.UpdateData;
begin
  if FModified then
  begin
    if (Field <> nil) and Assigned(FOnUpdateData) then FOnUpdateData(Self);
    FModified := False;
  end;
end;


end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -