プログラムを終了するには?


よっす  2006-04-28 21:20:36  No: 21236

お世話になります。

プログラム中で、
for や、  while といった処理を行った場合に
システムの終了(xマーク)を押したときに
終了する方法を教えてください。

現状にて考えている方法ですが

<<準備編>>
ループ内の適当な場所に  Application.ProcessMessages を
記述して、クローズイベントが発生するようにする。

<<クローズイベント処理1>>
グローバルでフラグ(ExitFlag: Boolean)を持ち
ループの先頭でフラグがTrueであればループを抜けるようにする

<<クローズイベント処理2>>
haltを使って強制終了する

処理1はそれぞれのループにて処理を追加する必要があるので
処理がややこしくなりそう

処理2は簡単ですが、強制だけに、問題があるようなきがします。

処理2に近くて問題なくアプリケーションの終了ができる方法が
あれば教えてください。


むく  2006-04-28 22:33:05  No: 21237

自分は良く  Application.Terminate  を使います。


よっす  2006-04-28 23:34:39  No: 21238

むくさんおせわになります。

Application.Terminateを行った後は
Destroyイベントの処理は行ってくれるのでしょうか?

OnCreate で TstringListや、TBitmap をCreate して、
OnDestroy で これらを free しています。
問題ないのでしょうか?


deldel  2006-04-28 23:39:03  No: 21239

OnDestroy や、OnClose などでブレークポイントを設定すると
どうなるか分かると思います。

個人的には安全を考えて<<1>>ですね。


メルル  2006-04-29 00:06:13  No: 21240

>処理1はそれぞれのループにて処理を追加する必要があるので
>処理がややこしくなりそう

これの見直し・・なんてのはどうなんでしょう?
クラスにしてしまうと、同類の処理であれば、インスタンスを
複数作るにしても、そのクラスひとつだけに終了処理を書くだけで
済みそうに思います。違うパターンの処理があるなら派生させる・・。
そこそこの規模のものはOOPが良さそうに思います。
小規模のスパゲッティで管理可能かどうかの見極めが最初の考慮対象の
ような・・・。

前提条件が提示されてないないので、とんちんかんな
コメントになりがち・・・。
自分なら、そう言う設計方針で行きたい・・パターンです。

どの程度、それがあるのか提示がないと・・。
分岐点は10を越えたらそうしたくなりそうですが、それ以内だと
あれこれ考えるより、フラグ式にするほうが早くて確実そうに思いますが・・。


むく  2006-04-29 00:22:25  No: 21241

Application.TerminateではDestroyなどはされないのかな??
多分そう思います。

自分は、initialization  and finalization  を使うのであまりきにしてません
でした。問題ありかも。。。


えーと  2006-04-29 02:40:23  No: 21242

Application.MainForm.Close; が一番無難です。

ループ中であれば、フラグ制御は必須です。


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

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






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