線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:962
推到 Plurk!
推到 Facebook!

按下X的回應@@?

答題得分者是:ccchen
stonys
初階會員


發表:64
回覆:111
積分:38
註冊:2002-09-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-09 18:07:35 IP:61.59.xxx.xxx 未訂閱
又來麻煩大家了... 小弟我最近在所寫的程式發現一個問題... 就是當我程式執行時會執行一段迴圈 迴圈內容還頗大的... 這時候會發現在下關閉按鈕無法正常關閉 我已經在迴圈中加入 application.ProcessMessages; 也看過版上之前的文章... 可是不曉得當按下視窗右上方那個X的時候會回傳什麼數值... 該怎麼攔截... 請大家幫忙......
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-10-09 22:27:32 IP:203.217.xxx.xxx 未訂閱
可是不曉得當按下視窗右上方那個X的時候會回傳什麼數值 該怎麼攔截... onClose, onCloseQuery兩個event 均會被呼叫. 故可如下 1. 宣告一參數
  ...
  public
    endLoop:Boolean;
    { Public declarations }
  end;
2. loop中檢查此參數
  endLoop:=False;
  for i:=0 to 30000 do begin
    if endLoop then break;
    ...
    application.ProcessMessages;
  end;
3. 在onClose中尋問user是否結束
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if MessageDlg('Exit now?',mtConfirmation,[mbYes, mbNo],0) = mrYes then begin
     CanClose:=True;
     EndLoop:=True;
  end
  else
    CanClose:=False;
end;
stonys
初階會員


發表:64
回覆:111
積分:38
註冊:2002-09-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-10-10 10:29:39 IP:61.59.xxx.xxx 未訂閱
感謝您的回答... 我按照您所說的方法下去做... 可是還是會idel在那邊...無法即使關閉耶... 可以麻煩您檢視一下下面這段原始碼嗎? procedure Dirs(path:string); var pathdir:string;//專輯資料夾 f:tSearchrec; file://搜索暫存變數 begin if findfirst(path '*.mp3',faAnyFile,f)=0 then file://找尋資料夾中是否有MP3檔 begin pathdir:=Copy(path,1,Length(path)-1) ; file://若有則紀錄檔案目錄 pathdir:=extractfilename(pathdir); form1.Memo2.Lines.add(path); // 將子目錄列在Memo2上 findclose(f); end; if FindFirst(path '*.*',$0000001F,f)=0 then // 若有找到目錄名稱 begin repeat application.ProcessMessages; if (trim(f.name)<>'.') and (trim(f.name)<>'..') then // 找到正式的目錄名稱後再呼叫自身函數 Dirs(path f.name '\'); // 將下一層的子目錄名稱傳入自身函數中(問題簡化) until findnext(f)<>0; // 找下一個目錄名稱 FindClose(f); // 關掉FindFirst end; end; 當我執行這段的時候...就無法關閉程式了.... 至於其他功能都可以使用 謝謝您的回答
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-10-11 10:20:46 IP:61.219.xxx.xxx 未訂閱
我測試了一下應該沒有問題
procedure aDirs(path:string);
var
  pathdir:string;//專輯資料夾
  f:tSearchrec; //搜索暫存變數
begin
  application.ProcessMessages;
  if endLoop =True then exit;
  if findfirst(path '*.pas',faAnyFile,f)=0 then begin
    pathdir:=Copy(path,1,Length(path)-1) ; //若有則紀錄檔案目錄
    pathdir:=extractfilename(pathdir);
    form1.Memo2.Lines.add(path); // 將子目錄列在Memo2上
    findclose(f);
  end;      if FindFirst(path '*.*',$0000001F,f)=0 then begin//仍會含所有檔 
    repeat
      if (trim(f.name)<>'.') and (trim(f.name)<>'..') then 
        if f.attr=faDirectory then //仍須確定是目錄
          aDirs(path f.name '\'); // 將下一層的子目錄名稱傳入自身函數中(問題簡化)
    until findnext(f)<>0; // 找下一個目錄名稱
    FindClose(f); // 關掉FindFirst
  end;
end;
stonys
初階會員


發表:64
回覆:111
積分:38
註冊:2002-09-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-10-11 11:56:21 IP:61.59.xxx.xxx 未訂閱
哇賽... 行家一出手,便知有沒有... 問題解決了... 謝謝版大的幫忙^^... 看了一下~~~~原來是我的application.message放錯位置了... 真是搞笑... 還得麻煩版大^^"
系統時間:2024-06-24 19:37:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!