MessageDlg問題 |
尚未結案
|
iecs
一般會員 發表:21 回覆:10 積分:6 註冊:2003-02-22 發送簡訊給我 |
小弟有個問題想請問各位先進,尚請各位幫小弟解答一下。
問題是:
我在一個Button的onClick事件中,寫了一個
if MessageDlg('確定刪除資料嗎?',mtConfirmation,[mbYes,mbNo],0,mbNo) = mrYes then
begin
......
end;
但當我按了Yes鈕後,並沒有執行begin...end中的敘述。
可是當我把 mrYes 改為 3(我用Label1.caption的方法去接MessageDlg的傳回值得知,使用者按下Yes鈕,系統會傳回3),程式就正常。
為何會有如此的結果呢??
謝謝!!
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
if MessageDlg('確定刪除資料嗎?',mtConfirmation,[mbYes,mbNo],0[red]上面紅色是多的參數, 應該是誤打吧. 至於 mrYes 是 6, 而不是你說的 3, 可以由 Controls unit 得到 mrYes = idYes, 再由 Windows unit 得到 IDYES = 6. 所以會發生問題應該是其他地方有問題才對, 不是這一段程式碼!! 否則你可以試一下新開一個專案, 寫一個 button click 來檢驗一下: procedure TForm1.Button1Click(Sender: TObject); begin if MessageDlg('確定刪除資料嗎?',mtConfirmation,[mbYes,mbNo],0) = mrYes then begin showmessage('mrYes'); end; |
iecs
一般會員 發表:21 回覆:10 積分:6 註冊:2003-02-22 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
這樣看起來你是使用了 QDialogs unit, 弟追了程式碼一下, 發現定義 mbYes 和 mrYes 的地方都各有兩個. 就 mb 系的 TMsgDlgButtons 比較沒有關係, 你的問題在於回傳 mr 系的資料則是在 Controls 和 QControls 都有定義. 一旦你使用了 QDialogs 的 MessageDlg 的話(就是你用的多了一個 default 選項的那組), 則 mr 的定義是在 QControls 中, 其值確實是 3 沒錯. 兩個定義 MessageDlg 的函數如下: Dialogs:
function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Word; QDialogs:
function MessageDlg(const Msg: WideString; DlgType: TMsgDlgType; Buttons:
TMsgDlgButtons; HelpCtx: Longint; DefaultBtn: TMsgDlgBtn = mbNone; Bitmap: TBitmap = nil): Integer; overload; 如此一來就會發生你的問題, 解決之道有兩種, 其一為只使用標準的 MessageDlg也就是不要 uses QDialogs, 然後你的 MessageDlg 也不要多那一個 Default 選項參數, 如此一來你的 mrYes 就是 6. 若一定要用的話, 其二解決之道就是要解決定義式不相容的衝突, 將 QDialogs unit 放在該 form pas 檔的 uses 段最前面, 如下:
uses QDialogs, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;這樣就會使用 QDialogs, QControls 的 mrYes 的定義了 (也就是 3)!! |
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
引言: 如此一來就會發生你的問題, 解決之道有兩種, 其一為只使用標準的 MessageDlg也就是不要 uses QDialogs, 然後你的 MessageDlg 也不要多那一個 Default 選項參數, 如此一來你的 mrYes 就是 6. 若一定要用的話, 其二解決之道就是要解決定義式不相容的衝突, 將 QDialogs unit 放在該 form pas 檔的 uses 段最前面, 如下:不對喔,在 uses 中的套用順序是放後面的優先喔 也可以加上 unit 名稱強制指定,如:QDialogs.mrYes 加油喔,喵~uses QDialogs, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;這樣就會使用 QDialogs, QControls 的 mrYes 的定義了 (也就是 3)!!
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
iecs
一般會員 發表:21 回覆:10 積分:6 註冊:2003-02-22 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |