gpt4 book ai didi

android - 如何确认删除Delphi FMX And​​roid中的记录

转载 作者:行者123 更新时间:2023-11-30 01:23:31 25 4
gpt4 key购买 nike

通常在使用 TDataset 后代作为数据存储(例如 TClientDataset)的 Delphi VCL 应用程序中,在 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;

Except,那是行不通的! messagedlg 将引起用户的注意,但事件处理程序代码将继续并允许删除记录。

解决方案是什么?

最佳答案

因为 FMX for Android 目前不支持模态窗口和消息框,你应该使用某种“dog-nail”解决方案

临时解决方案 #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。在组合框中项目将存储所有选项,如"is"、“否”、“也许明天”。 ComboBox 关闭 OnClosePopup 事件后,您将获得用户选择的值(value)。

enter image description here

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;

关于android - 如何确认删除Delphi FMX And​​roid中的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36750581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com