gpt4 book ai didi

delphi - 限制 TDBGrid 中就地编辑器的最大文本长度

转载 作者:行者123 更新时间:2023-12-03 15:46:06 26 4
gpt4 key购买 nike

如何限制 TDBGrid 中就地编辑器的最大文本长度? (德尔福柏林)

数据类型为浮点型。

最佳答案

TDBGrid 中的就地编辑器将通过调用更新其内容

procedure TInplaceEdit.UpdateContents;
begin
Text := '';
EditMask := Grid.GetEditMask(Grid.Col, Grid.Row);
Text := Grid.GetEditText(Grid.Col, Grid.Row);
MaxLength := Grid.GetEditLimit;
end;

其中 GetEditMask 的实现方式如下:

function TCustomDBGrid.GetEditMask(ACol, ARow: Longint): string;
begin
Result := '';
if FDatalink.Active then
with Columns[RawToDataColumn(ACol)] do
if Assigned(Field) then
Result := Field.EditMask;
end;

GetEditLimit如下所示:

function TCustomDBGrid.GetEditLimit: Integer;
begin
Result := 0;
if Assigned(SelectedField) and (SelectedField.DataType in [ftString, ftWideString]) then
Result := SelectedField.Size;
end;

我认为,您有多种方法可以实现所需的行为。

  • 使用TField EditMask您想要限制的字段的属性。这将由 Grid.GetEditMask 调用返回。无需继承 TDBGrid 并覆盖任何内容。可以按字段控制行为。

  • 创建您自己的 TDBGrid 后代,并覆盖 GetEditLimit根据 SelectedField

  • 返回就地编辑器的 MaxLength

方法 1 的代码可能如下所示:

// Opening of dataset
...
DataSet.FieldByName('FloatField').EditMask := '00.00';

此掩码将需要小数点分隔符之前和之后的两位数字。请参阅TEditMask了解有关口罩的更多信息。

对于方法 2:

uses
Data.DB,
Vcl.DBGrids;

type
TMyDBGrid = class(TDBGrid)
protected
function GetEditLimit: Integer; override;
end;

implementation

{ TMyDBGrid }

function TMyDBGrid.GetEditLimit: Integer;
begin
Result := inherited GetEditLimit;
if (Result = 0) and Assigned(SelectedField) and (SelectedField.DataType = ftFloat) then
Result := 5; // Whatever you decide
end;

就像kobik建议的那样,您可以使用此类作为插入器类。为此,请在要使用该网格的单元中添加 TDBGrid = class(TMyDBGrid);。如果您在要使用的同一单元中声明了 TMyDBGrid,请明确类型引用 TMyDBGrid = class(Vcl.DBGrids.TDBGrid)

关于delphi - 限制 TDBGrid 中就地编辑器的最大文本长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45584674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com