repeatループ中の強制終了ボタンでエラー回避は?

解決


武田  2005-12-17 05:02:51  No: 19291

皆様にはいつもお世話になっております。
repeat・・untilループ処理中、画面右上のform Closeボタン?で終了するとエラーになるのを回避する方法を教えていただけないでしょうか。
概略は下記のような処理をしています。環境はWinXPpro  Delphi6  Personalです。
ここで使っているコンポーネントは、IEDownload、StringGrid、StringList(urlのtableとして使う)です。
インターネットのホームページをダウンロードして保存するプログラムです。

最初のurlをDLしてurlをStringGridに登録する。

repeat
  StringGridから順番にhtmlへのリンクを取り出す。
  urlに基づいてDLしてあるhtmlファイルをDoc.LoadFromFile(ファイル名)でロードする。
  取り出したhtmlファイルを解析する。
  文中にリンクがあったらIEDownload関数でリンクチェックしてOKなら
  DL命令IEDownload(Sender.url、保存先ファイル名)で保存しておく。、
  urlはStringGridに次々に追加する。
  (このようにしてStringGridの行数は取得したリンクをある分だけ追加するので増大していく。)

until ダウンロード済み件数+Not Found数>=StringGrid行数(リンク登録件数)

このようにループにより最初のページにリンクされたページより次の階層までDLする。

この様なループでDL処理している最中に画面右上のForm Closeボタン?をクリックするとエラーになる。
たとえば
「モジュール 'プログラム名.exe' のアドレス 004B0EA0 でアドレス 00000021 に対する読み込み違反がおきました。」
終了処理は.Form1.FormClose()でデータの保存などしているだけです。

具体的なコードは長くなるため抽象的な記述になりましたが、よろしくお願いいたします。m(_ _)m


  2005-12-17 06:16:53  No: 19292

そういうときは、
FormCloseQueryイベントで終了の可否を決めること

終了前に特殊な前準備
処理を入れることも可能


武田  2005-12-17 21:00:57  No: 19293

お名前が判りませんが、早速のご指導有り難うございました。
FormCloseQueryイベントの使い方が、今判りました。
少しずつ簡単なプログラムが書けるようになって・・、なんと終わり方で大苦戦です。すっきりしました。今後ともよろしくお願いします。m(_ _)m


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

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






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