2015-12-09 50 views
1

不確定我在做什麼錯,但我正在使用Delphi XE8組合一個android應用程序。調用按鈕點擊消息對話框(mrYes)

在某個消息對話框出現並且用戶選擇「是」時,我希望它調用已經在應用程序中的按鈕OnClick事件。

按鈕在按下時加載相機。

我做這個思路是正確的,但它不工作:

if MessageDlg ('Do you wish to continue?', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo],0) = mrYes then 
    begin 
    TakeImageClick(self); 
    end; 

逐步執行代碼我沒有得到任何錯誤,但它只是完全跳過按鈕點擊事件。

該按鈕是一個TSpeedButton。

任何幫助將不勝感激。 謝謝,

+1

FWIW,你真的不應該直接調用事件處理程序。您應該將事件處理程序中的代碼放到可以從此代碼調用的私有方法和事件處理程序中。 –

+1

或者至少調用控件的['Click()'](http://docwiki.embarcadero.com/Libraries/en/FMX.Controls.TControl.Click)方法,讓它觸發'OnClick'事件處理程序。 –

回答

1

請閱讀Embarcadero的文檔。

FMX.Dialogs.MessageDlg

如果給的MessageDlg呼叫不包括ACloseDialogProc參數,呼叫阻塞在所有平臺上;也就是說,直到對話框關閉,MessageDlg纔會返回。 Android不支持這些阻止調用,如果您提供ACloseDialogProc參數,則只能在Android上使用MessageDlg。

此功能在XE7加入:

Dialog Box Methods Support Anonymous Methods to Handle Their Closing

在XE6,調用對話框的方法(的InputBox,InputQuery,的MessageDlg,ShowMessage)總是阻止。調用這些方法之後的任何代碼都不會執行,直到對話框關閉。 Android不允許阻止對話框,所以你不能在Android上使用這些方法。

在XE7上,InputBox,InputQuery和MessageDlg支持一個新的可選參數,。包含這個新參數的調用在所有平臺上均可運行,包括Android在內的。這個新的可選參數允許您提供在對話框關閉時調用的匿名方法。 當您使用這個新參數調用這些方法時,您的呼叫在桌面平臺中被阻止,在移動平臺中被阻塞。如果需要在對話框關閉後執行代碼,請使用此新參數確保您的應用程序在所有支持的平臺上按預期工作。

如果你打電話的InputBox,InputQuery,或的MessageDlg,你不上你的電話提供了一個匿名方法,這些方法的行爲,因爲他們曾經在XE6表現:呼叫阻塞所有平臺,包括iOS和的Android不受支持。

例如:

MessageDlg('Do you wish to continue?', TMsgDlgType.mtConfirmation, [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], 0, 
    procedure(const AResult: TModalResult) 
    begin 
    if AResult = mrYes then 
     TakeImageClick(Self); 
    end 
); 
相關問題