−トップへ−

例外処理( try )

 ここでいう例外とは,エラーのことです。通常エラーが起きるとソフト自体が止まってしまいますが,エラーが起こりそうなところに例外処理を行えば,ソフトが止まることなく作動し続けます。
 その書式は,以下の2通りがあります。

  try
    (処理);
  except
    (例外発生時に実行する処理);
  end;
  
  try
    (処理);
  finally
    (例外の有無に関係なく実行する処理);
  end;

 私は「 try 〜 finally 〜 end;」の文は必要ないと考えてしまいます。例外の有無に関係なく実行する処理なら,「 try 〜 end;」の後に記述すれば済むことです。そんなこともあり,私が今まで使ったのは「 try 〜 expect 〜 end;」の文だけです。

 エラーが発生する場面として思いつくのが,エディットコンポーネントに入力された数字を整数変換するときです。このときエディットコンポーネントに数字以外の文字が入力されている場合,エラーが起きてしまうので,この「 try 」を使ってエラーが起きないようにしてみます。
 用意するものはエディットコンポーネント1個だけです。フォームにエディットコンポーネントを貼り付けたら,イベントの中から「 OnChange」を呼び出してください。このイベントはエディットコンポーネントの文字列が変化したときに発生するイベントです。

procedure TForm1.Edit1Change ( Sender: TObject ) ;
  var
    str : string ; //@
begin
  try
    strtoint ( edit1 . text ) ; //A
  except
    str := edit1 . Text ; //B
    delete ( str , length ( str ) , 1 ) ; //C
    edit1 . text := str ; //D
    edit1 . SelStart := length ( str ) ; //E
  end ;
end;

 上記の説明をします。
@……expect の中で,「 delete 」を使っていますが,この中で「 edit1.text」と記述すると,実行時にエラーが起こるので,文字型変数を宣言しています。
A……ここで型変換を行います。ここでは型変換が正常に行われるかどうかだけ確認するので,これだけ記述します。
B……edit1.text の文字列を str に代入します。
C……ここで使っている「 delete 」は文字列から文字を削除するときに使います。具体的には,
   delete ( 元の文字列 , 削除を開始する位置 , 削除する文字数 )
 です。また,「 length ( ) 」は( )の中の文字列の長さを求める関数です。
D……削除した文字列を edit1.text に戻します。
E……「 edit1.selstart 」はカーソルの場所を指定しています。これでカーソルを文字列の最後に移動させることができます。
 このファイルを掲載します。よければご覧ください。
→ダウンロード

−トップへ−