お世話になります。
プログラム中で、
for や、 while といった処理を行った場合に
システムの終了(xマーク)を押したときに
終了する方法を教えてください。
現状にて考えている方法ですが
<<準備編>>
ループ内の適当な場所に Application.ProcessMessages を
記述して、クローズイベントが発生するようにする。
<<クローズイベント処理1>>
グローバルでフラグ(ExitFlag: Boolean)を持ち
ループの先頭でフラグがTrueであればループを抜けるようにする
<<クローズイベント処理2>>
haltを使って強制終了する
処理1はそれぞれのループにて処理を追加する必要があるので
処理がややこしくなりそう
処理2は簡単ですが、強制だけに、問題があるようなきがします。
処理2に近くて問題なくアプリケーションの終了ができる方法が
あれば教えてください。
自分は良く Application.Terminate を使います。
むくさんおせわになります。
Application.Terminateを行った後は
Destroyイベントの処理は行ってくれるのでしょうか?
OnCreate で TstringListや、TBitmap をCreate して、
OnDestroy で これらを free しています。
問題ないのでしょうか?
OnDestroy や、OnClose などでブレークポイントを設定すると
どうなるか分かると思います。
個人的には安全を考えて<<1>>ですね。
>処理1はそれぞれのループにて処理を追加する必要があるので
>処理がややこしくなりそう
これの見直し・・なんてのはどうなんでしょう?
クラスにしてしまうと、同類の処理であれば、インスタンスを
複数作るにしても、そのクラスひとつだけに終了処理を書くだけで
済みそうに思います。違うパターンの処理があるなら派生させる・・。
そこそこの規模のものはOOPが良さそうに思います。
小規模のスパゲッティで管理可能かどうかの見極めが最初の考慮対象の
ような・・・。
前提条件が提示されてないないので、とんちんかんな
コメントになりがち・・・。
自分なら、そう言う設計方針で行きたい・・パターンです。
どの程度、それがあるのか提示がないと・・。
分岐点は10を越えたらそうしたくなりそうですが、それ以内だと
あれこれ考えるより、フラグ式にするほうが早くて確実そうに思いますが・・。
Application.TerminateではDestroyなどはされないのかな??
多分そう思います。
自分は、initialization and finalization を使うのであまりきにしてません
でした。問題ありかも。。。
Application.MainForm.Close; が一番無難です。
ループ中であれば、フラグ制御は必須です。
ツイート | ![]() |