簡體   English   中英

如何在Delphi FMX And​​roid中確認刪除記錄

[英]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事件,您將獲得用戶選擇的價值。

在此處輸入圖片說明

3.看看在Embarcadero示例(來自XE8)中的某處如何完成的:

http://docwiki.embarcadero.com/RADStudio/XE8/en/Mobile_Tutorial:_Using_FireDAC_and_SQLite_%28iOS_and_Android%29

所以你的情況是

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM