2016-12-01 11 views
5

Keyal列の関数の特定のパラメータを含むTValueListEditor型のオブジェクトと、関数をテストするための適切な値列の入力があります。パラメータが必要なデータのタイプに応じて、値の入力に編集マスクを追加しました。例えば、パラメータNum1の型はint型なので、入力は数字だけでなければなりませんが、あらかじめ正確な桁数がわからないので、固定長の文字なしでEditMaskを指定する方法はありますか?Delphiで文字の長さが固定されていない編集マスク

float型の値が必要な場合は、以下のコードを参照してください。ポイントが必要ですが、その正確な位置にポイントをあらかじめ定義したくありません。

if parser.sParams.Values[parser.sParams.Names[i]]='float' then 
    begin 
    lstValParamValues.ItemProps[parser.sParams.Names[i]].EditMask:='#########.#'; 
    end 

多分、私はEditMaskにregexのようなものを実装する必要がありますか?または、値の入力の検証を実装する別の方法がありますか? TItemProp.EditMask documentationパー

+0

フィールド参照のタイプに基づいて、エディットマスクを変更するOnGetEditMaskを使用します。http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html /delphivclwin32/ValEdit_TValueListEditor_OnGetEditMask.html –

答えて

5

:EditMaskプロパティを使用して

検証は文字ごとで行われます。

固定幅マスクのみ使用できます。つまり、小数点の位置と、受け入れる先と後ろの桁数を指定する必要があります。

ではなく​​イベントを使用することを検討してください:フォーカスが値リストエディタに離れたセル間を移動したとき

に発生します。

OnValidateイベントハンドラを記述して、フォーカスが離れる前にユーザーがセルに入力した編集を検証します。 OnValidateは、アプリケーションにを提供できる対応するTItemPropオブジェクトのEditMaskプロパティより多くの検証を提供する機会を与えます。

OnValidateは、ユーザーがフォーカスを失いつつあるセルの値を編集した場合にのみ発生します。 OnValidateイベントハンドラは、ユーザーが指定した値を確認し、受け入れられない場合は例外を発生させます。

例えば

uses 
    SysConsts; 

procedure TMyForm.lstValParamValuesValidate(Sender: TObject; ACol, ARow: Integer; const KeyName: String; const KeyValue: String); 
var 
    ValueType: string; 
    sIgnored: Single; 
    dIgnored: Double; 
begin 
    if KeyValue = '' then Exit; 

    ValueType := parser.sParams.Values[KeyName]; 

    if ValueType = 'int' then 
    StrToInt(KeyValue) 

    else if ValueType = 'float' then 
    begin 
    if not TryStrToFloat(KeyValue, sIgnored) then 
     raise EConvertError.CreateFmt(SInvalidFloat, [KeyValue]); 
    end 

    else if ValueType = 'double' then 
    begin 
    if not TryStrToFloat(KeyValue, dIgnored) then 
     raise EConvertError.CreateFmt(SInvalidFloat, [KeyValue]); 
    end 

    // etc... 
end; 
関連する問題