ユーザーに日付の入力を求めて、それが有効でない日付のときはエラーを回避するため現在の日付を返すようにしています。
var S:string;
D:TDate;
S:=inputbox('','日付を ****/**/** の書式で入力してください','');
if S='' then exit;
D:=StrtoDatedef(S,Date);
ユーザーが有効でない日付を入力したとき、再入力を求めたいのですが、
入力された日付が有効か否かを検証するにはどうすればいいのですか?
まず、「/」で区切って(ansipos+LeftStr/RightStr)
それぞれをStrToIntDef(デフォルトは-1)で数値にし、
範囲内かどうかを調べる
間違えました
デフォルトで指定した日付が返ってきたら入力した値は無効です
まず、適当な日付と比較し、
同じでなければ、
StrToIntDef(入力した値,さきほどの日付)
として、
さきほどの値なら再入力を求めて下さい
わざわざ'/'で切らなくても、try...exceptでできるかと。
function StrToDateValidate(const S: String; var D: TDate): Boolean;
begin
try
D := StrToDate(S);
Result := True;
except
Result := False;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
S:string;
D:TDate;
IsDate: Boolean;
begin
IsDate := False;
while not IsDate do
begin
S:=inputbox('','日付を ****/**/** の書式で入力してください','');
if S='' then exit;
IsDate := StrToDateValidate(S, D);
end;
ShowMessage(DateToStr(D));
end;
よくわかりました。
ありがとうございました。
ツイート | ![]() |