这个版本的delphi对ShowMessage进行了重新实现,更好的适应移动跨平台,即在移动平台下是异步执行的,而在Windows及os X下是同步执行的,如果自己控制是否异步显示对话框,也可以通过TDialogServiceAsync(异步对话框)及TDialogServiceSync(同步对话框)来显示对话框,如果使用这个两个类,需要手工uses对应的单元。当然了,最简捷的方法还是ShowMessage.下面我直接上了代码并对三种使用方法做了注释,分享之。
 
unit Unit2;
 
interface
 
uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
  FMX.Controls.Presentation, FMX.StdCtrls, FireDAC.Stan.Intf,
  FireDAC.Stan.Option, FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS,
  FireDAC.Phys.Intf, FireDAC.DApt.Intf, Data.DB, FireDAC.Comp.DataSet,
  FireDAC.Comp.Client, System.Rtti, FMX.Grid.Style, Data.Bind.EngExt,
  Fmx.Bind.DBEngExt, Fmx.Bind.Grid, System.Bindings.Outputs, Fmx.Bind.Editors,
  Data.Bind.Components, Data.Bind.Grid, Data.Bind.DBScope, FMX.ScrollBox,
  FMX.Grid,FMX.DialogService.Async;
 
//  FMX.Grid,FMX.DialogService.Async实现异步对话框的单元,需要手工加入.
 
 
type
  TForm2 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure ShowMessageDialogCallBack(Sender: TObject; const AResult: TModalResult);
  end;
 
var    //
  Form2: TForm2;
 
implementation
 
{$R *.fmx}
 
procedure TForm2.Button1Click(Sender: TObject);
begin
//在移动平台下异步执行,在windows,osx上同步执行,查看源码,会发现具体实现中判断了是否是android
//与ios,是的话,通过TDialogServiceAsnyc这个类来显示异步对话框
  ShowMessage('Hello world.');
//如果要在Windows及os X上也异步显示对话框,则需要直接用TDialogServiceAsnyc来显示
//  TDialogServiceAsync.ShowMessage('Hello world async.');
end;
 
procedure TForm2.Button2Click(Sender: TObject);
begin
//直接显示异步对话框,并通过匿名函数实现回调,当用户点击确定按钮时,执行该匿名函数
//在所有平台下测试的结果,都是异步执行的,换句话说,在Windows及osX上也不是模态显示。
  TDialogServiceAsync.ShowMessage('Hello world',
  procedure (const AResule:TModalResult)
  begin
    ShowMessage('Click ok');
  end
  );
end;
 
procedure TForm2.Button3Click(Sender: TObject);
begin
//通过回调事先写好的事件函数,来异步显示对话框,即当用户按下确定按钮时,执行
//ShowMessageDialogCallBack.
//在所有平台下测试的结果,都是异步执行的,换句话说,在Windows及osX上也不是模态显示。
  TDialogServiceAsync.ShowMessage('Test',ShowMessageDialogCallBack,nil);
end;
 
procedure TForm2.ShowMessageDialogCallBack(Sender: TObject;
  const AResult: TModalResult);
begin
  showMessage('Call Back.');
end;
 
end.
 
后记,进一步看了MessageDialog的实现,基本同TDialogServiceAsync.ShowMessage,只不过,可以指定显示几个按钮,象Yes,No,Cancel等,官方内部实现的代码,看起来很啰嗦,一点都不好看。试着调用这个方法,写起来也不爽,同时在IOS模拟器,osX,Windows下运行,按钮都是英文的,没找到哪里个性成中文,这就不完美了,总不能让中文app显示出一个带Yes No的对话框吧,不论不类的。
 
怎么办呢?难怪当我说Showmessage这个实现完美的时候,高老师说不完美,还真是如此,如果想完美,还是用高师的通用界面好了!
 
再后记:
找到解决方法,把fmx.consts复制到项目下,修改其中的信息为汉字即可。
 
http://blog.sina.com.cn/s/blog_44fa172f0102w23d.html

Delphi berlin ShowMessage的改进与使用的更多相关文章

  1. [教学] Delphi Berlin 10.1 开发 Windows 10 平板 App 远程调试

    Delphi Berlin 10.1 开发 Windows 10 平板 App 远程调试安装步骤: 准备电脑: 一台开发电脑,安装 Delphi 开发环境 一台平板电脑,安装 PAServer,安装方 ...

  2. Delphi Berlin 10.1 for iOS 成生 info.plist 顺序改变了

    在 Delphi Seattle 10 update 1 版本(含之前版本),只要 Project > Build 会立即生成 info.plist 如果需要修改 info.plist 可以利用 ...

  3. delphi Berlin Could not load SSL library.

    delphi Berlin Could not load SSL library. TIdSSLIOHandlerSocketOpenSSL 解决办法:下载合适的版本文件libssl32.dll Id ...

  4. 13 Amazing Component Sets Driving Success In Delphi Berlin On Android And IOS

    There are quite a few Firemonkey component sets available for Delphi Berlin which can get you ahead ...

  5. Delphi Berlin 10.1.2 FMX用TMessageManager处理自定义消息

    看FMX代码,发现有两种消息处理的实现方式,一种是用TMessageManager来实现自定义的消息,另外一种象TEdit中的实现,直接声明消息方法.   早前,看过文章说TMessageManage ...

  6. Delphi Berlin 10.1 for 小米平板2 (Win 10) 电子罗盘测试

    Windows 10 下没有 Sensor.HeadingXSensor.HeadingYSensor.HeadingZ 需改用 Sensor.CompMagHeading

  7. Delphi Berlin 窗体代码分离风格 回到Delphi7传统风格

    回到Delphi7传统风格 Floating Form Designer You can now detach the form designer in both, VCL and FireMonke ...

  8. Delphi 10.1.2 berlin开发跨平台APP的几点经验

    1.ios不允许app有退出功能,所以不能调用Application.Terminate. 2.info.plist文件的自定义:info.plist文件是由info.plist.TemplateiO ...

  9. c++builder delphi 调用dll dll编写

    c++builder动态调用dll // 定义 typedef int __stdcall MyFunction (int x, char *str); ; String dllName = &quo ...

随机推荐

  1. Qt写入unicode编码格式的文本(用QChar写入BOM标记,并且列出所有Qt支持的字符集)

    1.文本流设置unicode小端模式 2.写入文本前两个字节FF FE 3.字符串转成unicode编码 QList<QByteArray> list = QTextCodec::avai ...

  2. Linux常用 bash

    学会Linux常用 bash命令 目录 基本操作1.1. 文件操作1.2. 文本操作1.3. 目录操作1.4. SSH, 系统信息 & 网络操作 基本 Shell 编程2.1. 变量2.2.  ...

  3. 打造开发React Native的Sublime

     之前一年多一直用Sublime Text做前端开发,最近做React开发,发现不太好用,就尝试其他编辑器.WebStorm和VS Code都用过,WebStorm基本不用装插件,可以直接用,但用习惯 ...

  4. IOS开源项目指标

    https://github.com/edagarli/open-ios-projects/blob/master/README.md 版权声明:本文博主原创文章,博客,未经同意不得转载.

  5. Java8初体验(二)Stream语法详解---符合人的思维模式,数据源--》stream-->干什么事(具体怎么做,就交给Stream)--》聚合

    Function.identity()是什么? // 将Stream转换成容器或Map Stream<String> stream = Stream.of("I", & ...

  6. CUDA页锁定内存(Pinned Memory)

    对CUDA架构而言,主机端的内存被分为两种,一种是可分页内存(pageable memroy)和页锁定内存(page-lock或 pinned).可分页内存是由操作系统API malloc()在主机上 ...

  7. MAT 专题

    http://smallnetvisitor.iteye.com/blog/1826434 运行user任务管理器查看到的pid号:

  8. 讨论2-sat建设和解决问题

    2-sat问题是一种常见的问题.给定若干个01变量,变量之间满足一些二元约束,求是否有解存在.若存在,给出可行解或依照字典序给出最优解. 以下给出与其相应的图论模型:给每一个变量i设立2个点,我的习惯 ...

  9. 通过浏览器调用Android要么iOS应用

    在做移动应用的单点登录时间,需要点击浏览器中启动链接APP和参数传递APP其中,用于处理相应的接口,现在,通过浏览器调用Android和iOS在应用过程中实现理清固化博客.为了查询. 一:通过浏览器调 ...

  10. Win32 键盘事件 - 击键消息、字符消息、插入符号(光标)

    注:以下内容为学习笔记,多数是从书本.资料中得来,只为加深印象,及日后参考.然而本人表达能力较差,写的不好.因非翻译.非转载,只好选原创,但多数乃摘抄,实为惭愧.但若能帮助一二访客,幸甚! 以下内容主 ...