[英]How to confirm delete of a record in Delphi FMX Android
通常,在將TDataset后代用作數據存儲的Delphi VCL應用程序中(例如TClientDataset),在Dataset1BeforeDelete處理程序中,我們會執行以下操作:
procedure TClientModule1.MyCDSBeforeDelete(DataSet: TDataSet);
begin
if MessageDlg('Delete?', mtCOnfirmation, [mbyes, mbNo], 0) <> mrYes then
SysUtils.Abort
end;
現在,在旨在運行於Android上的FMX應用程序中,它變為:
procedure TClientModule1.MyCDSBeforeDelete(DataSet: TDataSet);
MessageDlg('Delete?'
,
TMsgDlgType.mtWarning, [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], 0,
procedure(const AResult: TModalResult)
begin
if AResult <> mrYes then
Abort;
end
);
end;
除了 ,那是行不通的! messagedlg將引起用戶的注意,但是事件處理程序代碼將繼續並允許刪除記錄。
有什么解決方案?
因為FMX for Android當前不支持模式窗口和消息框,所以您應該使用某種“狗釘”解決方案
臨時解決方案#1,。
以主要形式或應打開“模態”窗口的形式編寫如下代碼:
procedure TForm1.btnSelectClick(Sender: TObject);
begin
if fmSelect = nil then
begin
Application.CreateForm(TfmSelect, fmSelect);
fmSelect.Callback := Yahoo;
end;
fmSelect.Show;
end;
procedure TForm1.Yahoo(ASelectedItem: String);
begin
ShowMessage(ASelectedItem);
end;
在fmSelect
應該是您的消息和帶有選項的按鈕(例如“是”,“否”,“可能是”,“不是今天”)。
在fmSelect
形式中,您應該聲明PUBLIC變量Callback: TCallback;
用戶按下某個按鈕后,應調用此函數並關閉表格:
procedure TfmSelect.btnSelectClick(Sender: TObject);
begin
if Assigned(Callback) then
Callback('user press button XXX');
Close;
end;
TCallback只是返回String類型的常規函數(您可以將其更改為Integer)。
TCallback = procedure (ASelected: String) of object;
臨時解決方案#2
首先模擬,但使用隱藏的TComboBox。 組合框中的項目將存儲所有選項,例如“是”,“否”,“也許明天”。 一旦ComboBox關閉了OnClosePopup
事件,您將獲得用戶選擇的價值。
所以你的情況是
private
procedure FCloseDialogProc(const AResult: TModalResult);
procedure TForm1.Button1Click(Sender: TObject);
begin
MessageDlg('Want something', TMsgDlgType.mtWarning, [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], 0, FCloseDialogProc);
end;
procedure TForm1.FCloseDialogProc(const AResult: TModalResult);
begin
Label1.Text := IntToStr(AResult);
// -1 -- click outside
// 6 -- yes
// 7 -- no
end;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.