重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

var
h:real;
begin

h:=StrToFloat(edit1.Text); <---ここでエラーがで出る(数字以外の文字が入るとエラー)


その後演算処理

今はStrToFloatDefでしのいでしますが、エラーが起きない代わりにその後の演算処理まで進んでしまい変な値が出てしまいます。
やはり、エラーを拾い、メッセージを出して演算を止める必要があるのですが。。。。

わかる方(Try文)教えて下さい。お願いいたします。

A 回答 (4件)

10回に一回くらいメッセージが出るとなると、ちょっとお手上げです。


やはり、実行環境に何か原因があるような気がします。


確認しておくべきことは、

数値に変換できない文字のとき、例外が発生していないのか、それとも、例外が発生しているのにメッセージが表示されないのか。

例外が発生しているのにメッセージが表示されないとしたら、
例外処理の中だけメッセージボックスが表示されないなのか、通常の処理の中でもメッセージボックスが表示されないのか。

の2点でしょう。



もし、例外が発生しているのに例外処理の中だけメッセージボックスが表示されないというのなら、
例外処理の中では、エラーフラグを立てておき、例外処理を抜けてからエラーフラグを判定してメッセージボックスを表示するという方法ではどうですか。
    • good
    • 0
この回答へのお礼

フラッグを立ててみてわかりました。
On e:ConvertError doのあとは一行だけのときはBebin,End;を使ってはいけないのです。
お陰さまでわかりました、長い間お付き合いありがとうございました。

お礼日時:2011/07/13 19:17

>二番目のやり方ですが例外を拾わなくなりました。

。。。(T_T)。

二番目のStrToFloatDefを使う方法は、エラーにはならないので例外は発生しません。
数字に変換できない文字のとき、-1.0E100を代入し、それを判断して処理を分岐させる方法です。



exeファイルでメッセージボックスが出ないのは、もしかしたらDelphi XEの実行環境のせいかもしれません。
メッセージボックスの表示先が実行マシンのモニターになっていないとか・・・

メッセージボックスではなく、別の方法、例えば、エラーファイルを作成するなどして確認してみてはどうですか。

この回答への補足

二番目の方法はなんとか解決できました。

一つづつ解決します。
「メッセージボックスの表示先が実行マシンのモニターになっていない」はどうやって確かめるのですか?

それにおかしいのは、10回に一回くらいはメッセージが出るのですよ。。。

(長い間のお付き合いありがとうございます。)

補足日時:2011/07/13 16:56
    • good
    • 0

>作成されたexeファイルではなかなかメッセージボックスが出てくれません



もしかしたら、別のエラーが発生しているかもしれません。

on EConvertError do
ではなくて、
on Exception do
にしてみてください。

on E:Exception do
ShowMessage(E.Massage);
とすれば、エラーの内容が表示されます。



もしどうしてもダメなら、StrToFloatDefを使う方法で、
edit1.Textに絶対に入力されることがない値を利用して、

h:=StrToFloatDef(edit1.Text,-1.0E100);
if h<-1.0E99 then
begin
// エラー処理
Exit;
end;

というような方法もあります。

この回答への補足

一番目のやり方は変わりませんでした。相変わらずEConvertErrorを出しております。exeからはメッセージが出ません。
またメッセージ(e.Message)の内容は「’’は浮動小数点数ではありません」です。

二番目のやり方ですが例外を拾わなくなりました。。。。(T_T)。

補足日時:2011/07/13 10:21
    • good
    • 0

一番簡単な使い方は、



try
・・・・・
h:=StrToFloat(edit1.Text);
・・・・・
except
// エラー処理
・・・・・
end;


tryからexceptまでの間にエラーが発生すると、exceptの次の行に制御が移ります。

この回答への補足

レスありがとうございます。

try
h:=StrToFloat(edit1.Text);
・・・・・
except


on EConvertError do // 変換の失敗による例外
begin

ShowMessage('文字が含まれています');
end;
end;
にて、Delphiではエラー再現時メッセージがでるのですが、作成されたexeファイルではなかなかメッセージボックスが出てくれません、どこか、コーディングが変でしょうか?

補足日時:2011/07/12 21:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!