インプレースエディタの最大テキスト長を制限するにはどうすればよいですかTDBGrid
? (Delphi Berlin)TDBGridのインプレイスエディタの最大テキスト長を制限する
データ型はフロートです。
インプレースエディタの最大テキスト長を制限するにはどうすればよいですかTDBGrid
? (Delphi Berlin)TDBGridのインプレイスエディタの最大テキスト長を制限する
データ型はフロートです。
TDBGrid
でのインプレースエディタがGetEditMask
は、次のように実装されている
procedure TInplaceEdit.UpdateContents;
begin
Text := '';
EditMask := Grid.GetEditMask(Grid.Col, Grid.Row);
Text := Grid.GetEditText(Grid.Col, Grid.Row);
MaxLength := Grid.GetEditLimit;
end;
呼び出すことによって、その内容を更新します。このような
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から継承して何もオーバーライドする必要はありません。行動は、フィールドベースで制御することができます。
あなたはアプローチ1のためSelectedField
コードに応じて、インプレースエディタのためのMaxLengthを返すようにGetEditLimit
をオーバーライドし、独自のTDBGrid
子孫はこのようになります作成します。
// Opening of dataset
...
DataSet.FieldByName('FloatField').EditMask := '00.00';
これを小数点のセパレータの前後に2桁の数字が必要です。マスクの詳細については、TEditMask
を参照してください。
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が示唆のように、あなたはその後、インターポーザクラスとしてこのクラスを使用することができます。アプローチ2については
。これを行うには、そのグリッドを使用するユニットにTDBGrid = class(TMyDBGrid);
を追加します。 TMyDBGrid
を同じユニットに使用すると宣言した場合は、型参照を明示的にTMyDBGrid = class(Vcl.DBGrids.TDBGrid)
にしてください。
インプレイスエディタの最大テキスト長を尋ねる場合は、基礎となるフィールドのサイズに依存します。 – Victoria
回答ありがとうございますが、私のデータはFloatで、この方法はうまくいきません。 –
なぜFloatはあなたのqに言及しませんでしたか? – MartynA