時間入力の制限をかけるには?

解決


えみ  2004-11-09 03:05:13  No: 11664

先程「時間の計算方法は?」で質問したえみです。
「解決」としてしまいましたが、もう1点聞きたいことがありますので、
新規スレッドを立てます。

時間の計算方法は出来たのですが、今度は入力制限について教えてください。
入力する時に「__:__」というように「時間:分」のフォーマットでしか
入力出来ないようにしようと思います。
MaskEditに使用して、EditMaskプロパティで「ShortTime」を選択しました。
(ShortTimeはマスクファイルでus.demを読み込んで選択しました)
これで入力は出来るようになりました。

そこで、MaskEditからフォーカスが外れた時に入力値チェックを行おうと思います。
OnExitイベントに以下の処理を追加しました。

var
  StartTime : TTime;
begin
  try
    if MaskEdit1.Text <> '  :  ' then
      StartTime := StrToTime(MaskEdit1.Text);
  except
    ShowMessage(MaskEdit1.Text + 'はエラーです');
    MaskEdit1.SetFocus;
    Exit;
  end;
end;

このようにすると、例えば「27:00」と入力するとエラーメッセージが表示されます。
そして入力値を全て削除すると、フォーカスが外れた時に
「入力値が不正です。エスケープキーで変更を取り消せます」の
メッセージが表示されてしまいました。
仕方なく正しい値「22:00」を入力するとエラーも表示されなくなります。
この状態で再度入力値を削除すると、エスケープキーのエラーが表示されてしまいます。

このエスケープキーのエラーが出ないようにするにはどうしたらいいですか?
教えてください。


HOta  2004-11-09 16:36:24  No: 11665

えみさん、こんにちは。

おかしいですね。これで動きます。
空白時のエラーは当方では出ません。
EditMaskのOnExitに設定しました。


えみ  2004-11-09 18:54:16  No: 11666

おはようございます。

もう1度試してみましたが、やはりエラーとなってしまいます。
私の手順を以下に記述しますので、同じか確認していただけますか?

EditMaskのOnExitイベントに追加すると
procedure TForm1.MaskEdit1Exit(Sender: TObject);
という関数が作成されるので、投稿したロジックを追加しました。

実行直後に何も入力せずにMaskEdit1からフォーカスが外れた場合はエラーは出ません。
次に「27:00」と入力すると「27:00はエラーです」とメッセージが表示されます。
OKボタンをクリックして、Deleteキーで入力した文字を全て削除して、
MaskEdit1からフォーカスが外れるとエスケープキーのエラーが表示されます。

ちなみに、EditMaskプロパティをShortTimeに設定した時に
「文字列に保存」にチェックが設定されています。
これは関係しそうですか?

もし私と手順が違うようでしたら、手順を教えてください。
よろしくお願いします。


HOta  2004-11-09 19:20:41  No: 11667

えみさん、こんにちは。

EditMaskを'90:00;1;_'にするとエラーになるようです。
'99:99;1;_'にしてみて下さい。


えみ  2004-11-09 19:54:27  No: 11668

EditMaskを変更したらエラーが出なくなりました!
本当にありがとうございました!

また何かあった時はよろしくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加