频道分类

Delphi 中使用Dialog API

作者:admin 来源: 日期:2019/10/29 16:08:48 人气: 标签:

 
Delphi / C ++ Builder 10.1 Belrin的新功能之一是“简化对话框API”。

使用的函数是InputQuery。

TDialogService.InputQuery关数
TDialogService.InputQuery函数显示一个带有输入字段的对话框。

procedure TForm1.ButtonInputDialogClick(Sender: TObject);
begin
  TDialogService.InputQuery(
    'Input String',
    ['Enter Your Name'],
    ['Your Name'],
    procedure(const AResult: TModalResult; const AValues: array of string)
    begin
      Memo1.Lines.Add('Your Name = ' + AValues[0]);
    end);
  Memo1.Lines.Add('ButtonInputDialogClick');
end;
执行上述代码
后,在Windows和OSX上显示对话框后,将输出“ ButtonInputDialogClick”。

取决于操作系统,此功能的行为似乎有所不同。

THE处理中
视窗同期
OSX同期
安卓系统异步的
的iOS异步的
此外,TDialogService.InputQuery,你可以有多个输入字段。

procedure TForm1.ButtonInputDialogClick(Sender: TObject);
begin
  TDialogService.InputQuery(
    'Input String',
    ['Enter Your First Name', 'Enter Your Family Name'],
    ['First Name', 'Family Name'],
    procedure(const AResult: TModalResult; const AValues: array of string)
    begin
      Memo1.Lines.Add('First Name = ' + AValues[0]);
      Memo1.Lines.Add('Family Name = ' + AValues[1]);
    end);
  Memo1.Lines.Add('Button1Click');
end;
在iOS上,此代码导致运行时错误。
看来您不能有多个输入字段。
它适用于Windows,OSX和Android。

THE多个领域
视窗
OSX
安卓系统
的iOS×
IFMXDialogServiceSync.InputQuerySync关数
IFMXDialogServiceSync.InputQuerySync函数将被阻止,直到关闭对话框。

procedure TForm1.ButtonIFMXDialogServiceSyncClick(Sender: TObject);
var
  Service: IFMXDialogServiceSync;
  AValues: array of string;
begin
  AValues := ['Your Name'];
  if TPlatformServices.Current.SupportsPlatformService(IFMXDialogServiceSync, IInterface(Service)) then
  begin
    if Service.InputQuerySync('Input String', ['Enter Your Name'], AValues) then
    begin
      Memo1.Lines.Add('Your Name = ' + AValues[0]);
    end;
  end;
  Memo1.Lines.Add('ButtonIFMXDialogServiceSyncClick');
end;
在Windows,OSX和iOS上,显示对话框后输出“ ButtonIFMXDialogServiceSyncClick”。
在Android上,不显示对话框,仅输出“ ButtonIFMXDialogServiceSyncClick”。

THE函授
视窗
OSX
安卓系统×
的iOS
此功能在iOS上也不支持多个字段。

IFMXDialogServiceAsync.InputQueryAsync关数
IFMXDialogServiceSync.InputQueryAsync函数将继续处理,而无需等待对话框关闭。

procedure TForm1.ButtonIFMXDialogServiceAsyncClick(Sender: TObject);
var
  Service: IFMXDialogServiceAsync;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXDialogServiceAsync, IInterface(Service)) then
  begin
    Service.InputQueryAsync('Input String', ['Enter Your Name'], ['Your Name'],
      procedure(const AResult: TModalResult; const AValues: array of string)
      begin
        Memo1.Lines.Add('Your Name = ' + AValues[0]);
      end);
  end;
  Memo1.Lines.Add('ButtonIFMXDialogServiceAsyncClick');
end;
在Windows,OSX,Android和iOS上,在输出“ ButtonIFMXDialogServiceAsyncClick”之后显示一个对话框。