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

MessageDlg問題

尚未結案
iecs
一般會員


發表:21
回覆:10
積分:6
註冊:2003-02-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-21 22:39:22 IP:218.162.xxx.xxx 未訂閱
小弟有個問題想請問各位先進,尚請各位幫小弟解答一下。 問題是: 我在一個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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-22 00:12:27 IP:61.62.xxx.xxx 未訂閱
if MessageDlg('確定刪除資料嗎?',mtConfirmation,[mbYes,mbNo],0[red],mbNo[/red) = mrYes then
  begin
    ......
  end;
上面紅色是多的參數, 應該是誤打吧. 至於 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-22 10:19:47 IP:218.162.xxx.xxx 未訂閱
小弟我寫了以下的程式片斷在 Button1的onClick事件中。 var i :integer; i := messagedlg('確定嗎?', mtConfirmation,[mbYes,mbNo],0,mbNo); //我由Delphi中的說明與範例知,最後一個參數mbNo指的是預設的Button label1.caption := inttostr(i); 我試了一下的結果: 按下Yes,真的傳回3 按下No,傳回4 真的好奇怪!!
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-22 10:54:51 IP:61.62.xxx.xxx 未訂閱
這樣看起來你是使用了 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-23 14:57:04 IP:61.57.xxx.xxx 未訂閱
引言: 如此一來就會發生你的問題, 解決之道有兩種, 其一為只使用標準的 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)!!
不對喔,在 uses 中的套用順序是放後面的優先喔 也可以加上 unit 名稱強制指定,如:QDialogs.mrYes 加油喔,喵~
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-23 16:30:12 IP:218.163.xxx.xxx 未訂閱
發表文章前請詳閱本區版規: 1.請註明資料庫系統及版本 2.若非資料(數據)庫相關問題, 將不預警加以移區並扣分
iecs
一般會員


發表:21
回覆:10
積分:6
註冊:2003-02-22

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-23 22:39:56 IP:218.170.xxx.xxx 未訂閱
放錯版了, 我在與各位先進進行私底下的討論!!
系統時間:2024-07-03 1:47:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!