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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM