ダイアログの正しい閉じ方、停止の仕方は?

解決


武田  2005-05-11 10:18:32  No: 14738

ダイアログの正しい閉じ方、停止の仕方は?

●Form1(メインフォーム)に
ファイル検索開始ボタンを置き、手続き FileSearch でファイル検索し表示させます。
procedure SearchFile;
  ・・・
  if  (FindFirst(Path + '\*.*', faAnyFile, SearchRec) = 0) then
  ・・・
      repeat
        Application.ProcessMessages;
    ・・・
      until (FindNext(SearchRec) <> 0);

Form2表示窓閉じ&中止ボタンを置き、手続き  SearchStopでForm2を閉じます。
procedure SearchStop(Sender: TObject);
begin
  Form2.Close;←←←????
end;

●Form2ダイアログはForm2.Show;でデータ表示用の非常駐のForm2を表示させています。
(ShowModalでは、メインフォームから操作できないから)

Form2にListViewだけを貼り付けています。
このリストビューに検索データを表示させています。

質問1は、Form2を正しく閉じるには  Closeでいいのでしょうか?
質問2は、検索中に(ListViewに表示中)に途中中止するにはどうしたらいいか解りません。
      Application.ProcessMessages;をつけるのではと考えたのですが。
      「Access violation at address 004907BD in module 'FindFile2.exe'. Read of address 0000022C.」というエラーが出ます。

以上、毎度愚問ですがご指導いただきたいです。m(__)m


通りすがり  2005-05-11 12:28:04  No: 14739

>質問1
Closeで構わないと思いますが、FindFirst使ってる途中で閉じたりするときは、ちゃんとFindClose()が発行されるようにしてやって下さい。

>質問2
Application.ProcessMessages;を何に使っているんですか。多分、ListViewへの表示用ということでもあるのでしょうが、、、
例えば、Privateとかで、
    SearchFlg : Boolean;
とでもしておき、中止が押されたイベントで、
    SearchFlg := false;
とかにしておき、
    Application.ProcessMessages;
    if (not SearchFlg) then
    begin
        //検索を抜け出す処理なりなんなりを書く
    end;
とでもすればいいのでは?


武田  2005-05-11 20:07:43  No: 14740

通りすがりさん、いつも教えて頂いてありがとうございます。
質問1の件は安心しました。
少しずつ勉強していると、使ったメモリーやインスタンスを解放してやると書いてあるのでForm2、リストビューの解放がこれでいいのかなと心配になったものですから。
質問2は、高速?で検索と表示処理中になると処理が終わるまで、他のクリックなど受け付けなかったものですから、Application.ProcessMessages;を使う例があったものですから付けてみました。しかし使い方が解りませんでした。
早速試してみます。ありがとうございました。m(__)m


通りすがり  2005-05-11 22:22:55  No: 14741

忘れてました。
ListViewを使っているんですよね?
TListItemのDataプロパティを使ってポインタをイヂっている場合、ListViewのOnDeletionにちょっと必要です。

それと、このForm2ってのも、自動作成の対象に入っているのであればCloseで構いませんが、そうではなく、
 var
   F : TForm2;
begin
  F := TForm2.Create(Self);
  F.ShowModal;
end;
なんてしてる場合は、Form2のOnCloseでAction := caFree;
とかってしなけりゃならなかったり


武田  2005-05-13 19:57:51  No: 14742

通りすがりさん、わざわざのフォローありがとうございました。
お礼が遅くなりました。
「ウィンドウの終わり方」なんて愚問かもしれませんが意外と探し回っても解説したHPが見つかりませんでした。
今回、Action := caFree;というキーワードを教えて頂いて、これを元に探し回ったら、
http://delphi.sakura.vg/lesson22.html
http://kakinotane.s7.xrea.com/delphi/d2/d035.html
http://www.geocities.co.jp/SiliconValley-Bay/3828/a13.html
などためになるHPを探せました。
ありがとうございます。m(__)m


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

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






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