DELPHI FIVE EDITTEXTの入力制限

解決


LUKU  2010-01-01 15:19:03  No: 36612  IP: 192.*.*.*

テキストエディタの入力制限をしたいのですが、MAXLENGTH関数以外を使ってどのようにすればいいのでしょうか?(VERSION DELPHI5)

編集 削除
igy  2010-01-01 15:52:21  No: 36613  IP: 192.*.*.*

TEditであれば、OnKeyPressイベントはいかがですか?

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
    if not (Key in ['a'..'e']) then
        Key := #0;
end;

編集 削除
LUKU  2010-01-01 18:40:35  No: 36614  IP: 192.*.*.*

すみません、説明不足でした。私がお伺いしたかったのは、入力文字数の制限です。たとえば、このテキストエディタに対しては、10文字までなど入力でき、それ以上はタイプしても表示されないということです。ちなみに、入力の型も制御できるでしょうか(このテキストエディタには数値のみなど)?

よろしくお願いいたします。

編集 削除
igy  2010-01-01 19:42:01  No: 36615  IP: 192.*.*.*

>このテキストエディタ

テキストエディタというのは、TEditのことですか?

TEditでしたら、先ほどのOnKeyPressイベントで
そのTEditの文字数を数え、入力文字数に達していた場合、
 Key := #0;
にするというのは、いかがですか?

編集 削除
LUKU  2010-01-01 20:33:30  No: 36616  IP: 192.*.*.*

igyさん、迅速な返答ありがどうございます。はい、TEditとのことです。TEditともじをカウントする方法ですが、maxlengthを使用すればよいでしょうか?つまり、書き方としては、

begin 
 if maxlength(ID.Text) > 10
  then
   key :=#0;
 end;

になるのでしょうか?
また、先ほどお伺いした、TEditの入力型を制限する方法はプロパティなどの設定でかのうでしょうか?keypressで数字だけしか受け付けないにすれば、できると考えているのですが。。

よろしくお願いします。

編集 削除
igy  2010-01-01 20:47:12  No: 36617  IP: 192.*.*.*

>はい、TEditとのことです。

バイト数でよいならば、OnKeyPressイベントを使わずに
MaxLength プロパティに指定すればよいかと思います。

>keypressで数字だけしか受け付けない

試していませんが、

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
    if not (Key in ['0'..'9']) then
        Key := #0;
end;

はいかがですか?

編集 削除
igy  2010-01-01 20:54:08  No: 36618  IP: 192.*.*.*

>もじをカウントする方法ですが、maxlengthを使用すればよいでしょうか?

全角文字を含まれないのであれば、Length関数でよいかと思います。

編集 削除
LUKU  2010-01-01 22:21:34  No: 36619  IP: 192.*.*.*

ありがとうございます。最後に、全角の場合の文字カウントに関してお伺いしたいのですが、テキストフィールドがAddress.Textで10文字で制御したい場合、
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
    if Maxlength(WideString(Address.Text)) > 10 then
        Key := #0;
end;

または、
    if MbPos(Address.Test) > 10 then
        key := #0
end;

で大丈夫でしょうか?

編集 削除
igy  2010-01-01 23:03:20  No: 36620  IP: 192.*.*.*

>で大丈夫でしょうか?

Maxlength
MbPos
は、知らないのですが、(API?それともDelphiに標準搭載している関数?)

コンパイルしてみて、動作確認した場合、どうなります?

編集 削除
LUKU  2010-01-07 22:44:45  No: 36621  IP: 192.*.*.*

解決しました。ありがとうございました。

編集 削除