这个版本的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. Python采用struct处理二进制

    有时需要使用python二进制数据,实例,件.socket操作时.这时候.能够使用python的struct模块来完毕.能够用 struct来处理c语言中的结构体. struct模块中最重要的三个函数 ...

  2. RGB值得计算公式

    三原色分别为:红(Red).绿(Green).蓝(Blue). 颜色值=(Red)+(Green*256)+(Blue*256*256) //由三原色值合成颜色整数值 function ColorFr ...

  3. linux tesseract识别名片

    用tesseract识别名片,无任何训练 数字,字母识别的准确率比较高,没有错误,规范的汉字识别的还可以,比如名片背面,正面的就错误比较多了: 没有任何训练,识别的还算可以了:我们主要要的电话和QQ ...

  4. Cython 的学习

    开发效率极高的 Python 一直因执行效率过低为人所诟病,Cython 由此诞生,特性介于 Python 和 C 语言之间. Cython 学习 1. Cython 是什么? 它是一个用来快速生成 ...

  5. PLC中ST语言的几种程序流程控制语句

    ST语言是IEC61131-3中规定的5中标准语言之一,目前常用见品牌的PLC都支持这种语言(施耐德,AB可以直接选择创建该类型的程序段或者功能块,西门子的略微麻烦一点),ST语言的一个好处是移植性好 ...

  6. 使用Toast进行用户提醒(转)

    Toast是Android提供的一个轻量级的用户提醒控件,使用也很简单,就相当一个极简的dialog!!!下面将向您介绍一些Toast的详细用法: 1.普遍使用的方法: Context context ...

  7. Delphi 获取外部程序句柄与发送消息

    --记录下来备以后用 [打开外部程序.消息.句柄],技术有限,希望不要误人子弟了. 源码unit Unit1; interface uses Windows, Messages, SysUtils, ...

  8. Matlab Tricks(十七)—— 使用 Latex

    >> set(text, 'Interpreter') 'none' 'tex' 'latex' % Matlab将返回'Interpreter'(解释器,对 text 文本的解释)所包含 ...

  9. WPF Windows背景透明其中的文字保持不透明

    原文:WPF Windows背景透明其中的文字保持不透明 版权声明:本文为博主原创,未经允许不得转载.交流.源码资料加群:161154103 https://blog.csdn.net/mpegfou ...

  10. 算法(algorithm)、模型(model)与框架(framework)

    模型对应的数学公式,公式中往往有待学习得到的参数,因此在进行训练或者学习时,首先初始化这部分参数(0 或标准正太分布): 学习之前的初始化:initial model: 学习完成之后的模型:final ...