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

SaveDialog和MessageBox應用問題

尚未結案
e_snare
一般會員


發表:26
回覆:35
積分:12
註冊:2004-03-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-03 11:08:11 IP:203.67.xxx.xxx 未訂閱
以下程式碼,當檔案已存在就出現MessageBox, 按YES的話,就復蓋檔案!按NO就取消存檔! 問題是,當出現MessageBox時,SaveDialog->Execute()畫面是不在的, 如何像一般軟體,當MessageBox出現時,它是在SaveDialog->Execute()畫面上, 如果按NO,MessageBox不見,但依然是SaveDialog->Execute()畫面,使用者可以 再次輸入檔案或選者檔案,再次選擇YES或NO,如果都不選擇,按SaveDialog->Execute()畫面的取消就可以回到主畫面不做任何動作!! 就以下程式碼我試過用迴圈的方式,但不太適用,總之運作不良,不是我要的!! 不知大家都是怎麼做的?謝謝!! AnsiString FileName = ""; AnsiString Msg; if (SaveDialog->Execute()) { if (!FileExists(SaveDialog->FileName)) { DataToSave(); //資料處理,和存入檔案不用理它 SDIAppForm->Caption = ExtractFileName(SaveDialog->FileName) " - 計事本"; FileName = SaveDialog->FileName; } else { Msg = ""; Msg = SaveDialog->FileName; Msg = "\nalready exists.\n"; if(MessageBox(GetActiveWindow(),Msg.c_str(),"Save As - Warning",MB_YESNO MB_ICONQUESTION MB_DEFBUTTON2)==IDYES) { DataToSave(); SDIAppForm->Caption = ExtractFileName(SaveDialog->FileName) " - 計事本"; FileName = SaveDialog->FileName; } } }
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-04 13:55:23 IP:218.173.xxx.xxx 未訂閱
引言: 以下程式碼,當檔案已存在就出現MessageBox, 按YES的話,就復蓋檔案!按NO就取消存檔! 問題是,當出現MessageBox時,SaveDialog->Execute()畫面是不在的, 如何像一般軟體,當MessageBox出現時,它是在SaveDialog->Execute()畫面上, 如果按NO,MessageBox不見,但依然是SaveDialog->Execute()畫面,使用者可以 再次輸入檔案或選者檔案,再次選擇YES或NO,如果都不選擇,按SaveDialog->Execute()畫面的取消就可以回到主畫面不做任何動作!! 就以下程式碼我試過用迴圈的方式,但不太適用,總之運作不良,不是我要的!! 不知大家都是怎麼做的?謝謝!! ................
e_snare你好: 我想 class="code"> ~~~ TForm1 *Form1; AnsiString SaveFileName=""; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { if (SaveDialog1->Execute()) SaveFileName=SaveDialog1->FileName; } //--------------------------------------------------------------------------- void __fastcall TForm1::SaveDialog1CanClose(TObject *Sender, bool &CanClose) { if (FileExists(SaveDialog1->FileName)) { int MsgRlt=MessageBox(SaveDialog1->Handle,"檔案已存在,是否覆蓋?","MessageBox",MB_YESNO); if (MsgRlt==IDNO) CanClose=false; else if (MsgRlt==IDYES) SaveFileName=SaveDialog1->FileName; } } //--------------------------------------------------------------------------- 不過你的要求中有一個比較奇怪的--->,如果都不選擇,按SaveDialog->Execute()畫面的取消就可以回到主畫面不做任何動作!! 我測試了一下,一般軟體好像不是這樣吧一般軟體好像會鎖在">上面的範例是這種模式的)! 當然 >,首先在上面範例程式那行紅色的,> >,因為延用上面的程式再做下去有點難接!
e_snare
一般會員


發表:26
回覆:35
積分:12
註冊:2004-03-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-04 14:20:14 IP:203.67.xxx.xxx 未訂閱
不好意思,表達的不夠好, 我的意思就是如你所說的,像一般軟體,如出現MessageBox會鎖在"Yes"或"No"這個視窗,我的要求也就是到這裡而以啦!! ^_^ 我想你的方法可以解決我的疑問了,正在研究當中,謝謝囉!!
e_snare
一般會員


發表:26
回覆:35
積分:12
註冊:2004-03-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-05 22:10:35 IP:210.66.xxx.xxx 未訂閱
用不出來
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-05 23:12:53 IP:210.64.xxx.xxx 未訂閱
引言: 用不出來 < face="Verdana, Arial, Helvetica"> What's wrong? 應該是程式直接copy起來用就ok了呀?
e_snare
一般會員


發表:26
回覆:35
積分:12
註冊:2004-03-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-04-05 23:57:16 IP:210.66.xxx.xxx 未訂閱
這個MessageBox有出來,但和我之前一樣,MessageBox出來,Savedialog這個視窗就不見了!或許是我哪裡弄錯了! 對了,像如果直接用你的這個function void __fastcall TForm1::SaveDialog1CanClose(TObject *Sender, bool &CanClose) { if (FileExists(SaveDialog1->FileName)) { int MsgRlt=MessageBox(SaveDialog1->Handle,"檔案已存在,是否覆蓋?","MessageBox",MB_YESNO); if (MsgRlt==IDNO) CanClose=false; else if (MsgRlt==IDYES) SaveFileName=SaveDialog1->FileName; } } 我看不出是哪個動作會觸動這個function,還是該由哪個動作來觸動它, 可以告訴我嗎?還有Handle這幾個字要改嗎?還是就是Handle,因為 不太懂Handle的意思和用法,因為我加了SaveDialog1->Handle和沒加效果 一樣耶??我再用用看,有結論再上來和大家分享!!謝謝!
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-04-06 08:49:04 IP:61.63.xxx.xxx 未訂閱
引言: 這個MessageBox有出來,但和我之前一樣,MessageBox出來,Savedialog這個視窗就不見了!或許是我哪裡弄錯了! 對了,像如果直接用你的這個function void __fastcall TForm1::SaveDialog1CanClose(TObject *Sender, bool &CanClose) { if (FileExists(SaveDialog1->FileName)) { int MsgRlt=MessageBox(SaveDialog1->Handle,"檔案已存在,是否覆蓋?","MessageBox",MB_YESNO); if (MsgRlt==IDNO) CanClose=false; else if (MsgRlt==IDYES) SaveFileName=SaveDialog1->FileName; } } 我看不出是哪個動作會觸動這個function,還是該由哪個動作來觸動它, 可以告訴我嗎?還有Handle這幾個字要改嗎?還是就是Handle,因為 不太懂Handle的意思和用法,因為我加了SaveDialog1->Handle和沒加效果 一樣耶??我再用用看,有結論再上來和大家分享!!謝謝!
e_snare你好: 剛剛又試了一下,把程式對 >! < class="code">void __fastcall TForm1::SaveDialog1CanClose(TObject *Sender, bool &CanClose) 這個事件是TSaveDialog物件的內建事件哦,不是我自已寫的事件或function,e_snare你這邊有寫對嗎? SaveDialog1CanClose事件是,當你有選擇檔案名稱或是自已有輸入檔案名稱時,再按下SaveDialog的"儲存鍵"時觸發的!(注意只有此情況觸發) 事件觸發中時,SaveDialog是仍然存在的,等事件結束才會關閉!但事件內有一個bool &CanClose變數,若設為false時,事件結束後,SaveDialog是不會關閉的! 也就是說這個事件是可以讓你確定是否真的要關閉SaveDialog用 另外還有一個OnClose事件,功能不同,e_snare你自已查看吧! >> >! 嗯,就這樣,應該沒問題了, >!
e_snare
一般會員


發表:26
回覆:35
積分:12
註冊:2004-03-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-04-06 20:08:49 IP:210.66.xxx.xxx 未訂閱
m8815010提供的方法確實可行! 以m8815010的function我的問題出在TSaveDialog物件SaveDialog的Events中的OnCanClose是空的,應該要點選它為SaveDialog1CanClose,這樣就可以正常運作了!!再依照自己需求增加其它程式碼!!至於OnClose,我也有用到,我把它用在關閉程式上!!有需要的人可以查查HELP!!    還有就是SaveDialog1->Handle,這個用法我也有試一試,和m8815010所說的一樣! 而我是用GetActiveWindow(),雖然沒有用SaveDialog1->Handle,但也是可以鎖死的!!    
系統時間:2024-05-21 6:02:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!