SaveDialog和MessageBox應用問題 |
尚未結案
|
e_snare
一般會員 發表:26 回覆:35 積分:12 註冊:2004-03-14 發送簡訊給我 |
以下程式碼,當檔案已存在就出現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 發送簡訊給我 |
引言: 以下程式碼,當檔案已存在就出現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 發送簡訊給我 |
|
e_snare
一般會員 發表:26 回覆:35 積分:12 註冊:2004-03-14 發送簡訊給我 |
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
|
e_snare
一般會員 發表:26 回覆:35 積分:12 註冊:2004-03-14 發送簡訊給我 |
這個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 發送簡訊給我 |
引言: 這個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 發送簡訊給我 |
m8815010提供的方法確實可行!
以m8815010的function我的問題出在TSaveDialog物件SaveDialog的Events中的OnCanClose是空的,應該要點選它為SaveDialog1CanClose,這樣就可以正常運作了!!再依照自己需求增加其它程式碼!!至於OnClose,我也有用到,我把它用在關閉程式上!!有需要的人可以查查HELP!! 還有就是SaveDialog1->Handle,這個用法我也有試一試,和m8815010所說的一樣!
而我是用GetActiveWindow(),雖然沒有用SaveDialog1->Handle,但也是可以鎖死的!!
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |