皆様にはいつもお世話になっております。
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
そういうときは、
FormCloseQueryイベントで終了の可否を決めること
終了前に特殊な前準備
処理を入れることも可能
お名前が判りませんが、早速のご指導有り難うございました。
FormCloseQueryイベントの使い方が、今判りました。
少しずつ簡単なプログラムが書けるようになって・・、なんと終わり方で大苦戦です。すっきりしました。今後ともよろしくお願いします。m(_ _)m
ツイート | ![]() |