zoukankan      html  css  js  c++  java
  • Delphi berlin ShowMessage的改进与使用

    这个版本的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复制到项目下,修改其中的信息为汉字即可。
    Delphi <wbr>berlin <wbr>ShowMessage的改进与使用
     
    http://blog.sina.com.cn/s/blog_44fa172f0102w23d.html
  • 相关阅读:
    tgttg
    在OpenStack虚拟机实例中创建swap分区的一种方法
    产品:我想要的产品是网络存储+网络备份
    《哪来的天才?》读书笔记——天才源于练习,而且是针对性的练习
    一万小时理论的解读(神贴真开眼界:有意识的刻苦训练是必须的,要有精神动力,还必须有及时的反馈,对实力占优的活动比较有效;玩这样的活动是不行的)
    Cross-compiling Qt Embedded 5.5 for Raspberry Pi 2
    MSYS2的源配置
    关于iOS 5 Could not instantiate class named NSLayoutConstraint错误
    BAT线下战争:巨额投资或培养出自己最大对手(包括美团、58、饿了么在内的公司都在计划推出自己的支付工具和金融产品,腾讯只做2不做O)
    欢聚移动互联时代 在腾讯的夹缝中低调崛起
  • 原文地址:https://www.cnblogs.com/findumars/p/6307725.html
Copyright © 2011-2022 走看看