• 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
  • 相关阅读:
    Linux系统调用
    Linux的中断 & 中断和异常的区别
    system v和posix的共享内存对比 & 共享内存位置
    epoll里面mmap释疑
    提高网络效率的总结
    推荐相关学习 & 典型算法、典型特征、典型推荐系统框架
    最大似然法理解
    调试多线程 & 查死锁的bug & gcore命令 & gdb对多线程的调试 & gcore & pstack & 调试常用命令
    内存屏障 & Memory barrier
    锁相关知识 & mutex怎么实现的 & spinlock怎么用的 & 怎样避免死锁 & 内核同步机制 & 读写锁
  • 原文地址:https://www.cnblogs.com/findumars/p/6307725.html
Copyright © 2020-2023  润新知