DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: jaytang
今日帖子: 35
在线用户: 6
导航: 论坛 -> 文档资料 斑竹:liumazi,ruralboy  
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2014/4/15 15:03:30
标题:
Pascal系开发工具跨平台曙光已现 浏览:4948
加入我的收藏
楼主: 一、概述
    Delphi(FireMonkey)目前已经较好地在Windows/MacOS/Android/IOS几个主流OS平台实现了“一次设计、多次编译”的原生跨平台构想。
    FreePascal(Lazarus等)目前也已经很好地实现了Windows/MacOS/Linux等几大平台的跨平台。
    近日咱完成了对QuickBurro中间件应用开发包的升级改进,较全面地对以上两个Pascal系开发工具进行了跨平台测试,既实现了中间件开发包的跨平台改造,又对以上两大工具的跨平台能力有了直接的认识与感受。窃以为大势浩荡、潜力汹涌、深受鼓舞,现贴一点测试内容,意在抛砖引玉、互为激励。

      Android          IOS
          |          |
          +-------+------+
          |
          Delphi(FireMonkey)
          |
          +-------+------+
          |          |
       Windows         MacOS
          |          |
          +-------+------+
          |
          Lazarus(FPC)
          |
          Linux


二、Delphi/FireMonkey测试代码
    编写了一个简单的Delphi/FireMonkey代码,来测试一下Delphi/FireMonkey工具的跨平台能力:(只贴一下主单元代码)

unit main;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Rtti,
  MBAccessor, MBConnection, FMX.Grid, FMX.Layouts, FMX.StdCtrls, FMX.Edit,
  MBParcel, MBTable, Entity_Lease, Entity_LeaseDetail, FMX.Objects;

type
  TForm1 = class(TForm)
    Header: TToolBar;
    Button2: TButton;
    Button4: TButton;
    StyleBook1: TStyleBook;
    MBConn: TMBConnection;
    MBA: TMBAccessor;
    Panel1: TPanel;
    Panel2: TPanel;
    DetailGrid: TStringGrid;
    StringColumn6: TStringColumn;
    StringColumn7: TStringColumn;
    StringColumn8: TStringColumn;
    StringColumn9: TStringColumn;
    Line1: TLine;
    Footer: TToolBar;
    Grid: TStringGrid;
    StringColumn1: TStringColumn;
    StringColumn2: TStringColumn;
    StringColumn3: TStringColumn;
    StringColumn4: TStringColumn;
    Button1: TButton;
    Button5: TButton;
    Button3: TButton;
    Button6: TButton;
    procedure ShowLeaseList;
    procedure ShowDetailList;
    procedure Button2Click(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure GridSelChanged(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    LeaseList: TLeaseList;
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

uses EditLease;

//
// 退出...
procedure TForm1.Button6Click(Sender: TObject);
begin
  if messagedlg('是否确认退出本测试程序?', TMsgDlgType.mtConfirmation, mbYesNo,0)<>mrYes then
     exit;
   mbconn.disconnect;
   halt;
end;

//
// 表格列宽自适应...
procedure TForm1.FormResize(Sender: TObject);
begin
   StringColumn1.Width:=86/384*Form1.ClientWidth;
   StringColumn2.Width:=138/384*Form1.ClientWidth;
   StringColumn3.Width:=85/384*Form1.ClientWidth;
   StringColumn4.Width:=72/384*Form1.ClientWidth;
   StringColumn6.Width:=86/384*Form1.ClientWidth;
   StringColumn7.Width:=138/384*Form1.ClientWidth;
   StringColumn8.Width:=85/384*Form1.ClientWidth;
   StringColumn9.Width:=72/384*Form1.ClientWidth;
end;

//
// 选不同的单据,显示不同的明细...
procedure TForm1.GridSelChanged(Sender: TObject);
begin
   ShowDetailList;
end;

//
// 显示业务单据列表的过程...
procedure TForm1.ShowLeaseList;
var
   i: integer;
   Lease: TLease;
begin
   DetailGrid.RowCount:=0;
   if assigned(LeaseList) then
      FreeAndNil(LeaseList);
   LeaseList:=TLeaseList.ReadFromDB(Mba,'','LeaseId Desc');
   if LeaseList=nil then
      begin
         Grid.RowCount:=0;
         ShowMessage('从服务器读取租赁业务单列表失败!');
         exit;
      end;
   Grid.BeginUpdate;
   Grid.RowCount:=LeaseList.Count;
   for i := 0 to LeaseList.Count-1 do
      begin
         Lease:=TLease(LeaseList.Items[i]);
         Grid.Cells[0,i]:=Lease.f_LeaseId;
         Grid.Cells[1,i]:=Lease.f_CustomerName;
         Grid.Cells[2,i]:=Lease.f_CreateDate;
         Grid.Cells[3,i]:=Lease.f_CreaterName;
      end;
   Grid.EndUpdate;
   if Grid.RowCount>0 then
      ShowDetailList;
end;

//
// 显示租赁明细记录...
procedure TForm1.ShowDetailList;
var
   Lease: TLease;
   i: integer;
   Detail: TLeaseDetail;
begin
   if Grid.Selected<0 then
      exit;
   Lease:=TLease(LeaseList.Items[Grid.Selected]);
   Lease.LoadAppertains(Mba);
   if Lease.f_LeaseDetail_List=nil then
      exit;
   DetailGrid.BeginUpdate;
   DetailGrid.RowCount:=Lease.f_LeaseDetail_List.Count;
   for i := 0 to Lease.f_LeaseDetail_List.Count-1 do
      begin
         Detail:=TLeaseDetail(Lease.f_LeaseDetail_List.Items[i]);
         DetailGrid.Cells[0,i]:=Detail.f_BuildingId;
         DetailGrid.Cells[1,i]:=Detail.f_BuildingName;
         DetailGrid.Cells[2,i]:=Detail.f_BeginDate;
         DetailGrid.Cells[3,i]:=Detail.f_EndDate;
      end;
   DetailGrid.EndUpdate;
end;

//
// 连接/断开服务器...
procedure TForm1.Button2Click(Sender: TObject);
begin
   if Button2.Text='连接' then
      begin
         if mbconn.connect then
          begin
          Button2.Text:='断开';
          ShowLeaseList;
          end
         else
          ShowMessage('连接应用服务器失败!');
      end
   else
      begin
         mbconn.disconnect;
         Grid.RowCount:=0;
         DetailGrid.RowCount:=0;
         Button2.Text:='连接';
      end;
end;

//
// 新建租赁业务单...
procedure TForm1.Button1Click(Sender: TObject);
begin
   Form2.mode:=1;
   Form2.show;
end;

//
// 修改所选租赁业务单...
procedure TForm1.Button5Click(Sender: TObject);
begin
   if grid.Selected<0 then
      exit;
   Form2.mode:=2;
   Form2.LeaseId:=grid.Cells[0,grid.Selected];
   Form2.show;
end;

end.


三、来看Delphi/FireMonkey各平台的运行效果

3.1. Windows平台
此帖子包含附件:
JPEG 图像
大小:62.1K
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2014/4/15 15:03:56
1楼: 3.2. Android下
此帖子包含附件:
JPEG 图像
大小:46.0K
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2014/4/15 15:04:22
2楼: 3.3. MacOS环境下
此帖子包含附件:
JPEG 图像
大小:68.8K
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2014/4/15 15:04:51
3楼: 3.4. IOS下
此帖子包含附件:
JPEG 图像
大小:60.1K
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2014/4/15 15:06:51
4楼: 四、Lazarus/FPC工具测试代码
    这里只贴一下登录窗口的代码:

unit Login;

{$mode objfpc}{$H+}

interface

uses
   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
   StdCtrls, LCLType, LazParcel;

type

   { TLoginForm }

   TLoginForm = class(TForm)
      Bevel1: TBevel;
      Button1: TButton;
      Button2: TButton;
      Button3: TButton;
      Edit1: TEdit;
      Edit2: TEdit;
      Image1: TImage;
      Label1: TLabel;
      Label2: TLabel;
      Label3: TLabel;
      procedure Button1Click(Sender: TObject);
      procedure Button2Click(Sender: TObject);
      procedure Button3Click(Sender: TObject);
      procedure FormCreate(Sender: TObject);
   private
      { private declarations }
   public
      { public declarations }
   end;

var
   LoginForm: TLoginForm;

implementation

uses main,config;

{$R *.lfm}

{ TLoginForm }

//
// 退出...
procedure TLoginForm.Button3Click(Sender: TObject);
begin
   Close;
end;

//
// 初始化...
procedure TLoginForm.FormCreate(Sender: TObject);
begin
    edit1.Text:='';
    edit2.text:='';
end;

//
// 连接服务器...
procedure TLoginForm.Button1Click(Sender: TObject);
begin
   mainform.LazConn.Host:=mainform.s_ServerIpAddress;
   mainform.LazConn.Port:=mainform.s_ServerPort;
   if not mainform.LazConn.Connect then
      begin
        application.MessageBox('对不起,连接服务器失败,请重设通信参数后再试!','操作提示',mb_ok+mb_iconinformation);
        exit;
      end;
   hide;
   mainform.WindowState:=wsMaximized;
   mainform.timer1.enabled:=true;
   mainform.show;
end;

//
// 配置参数...
procedure TLoginForm.Button2Click(Sender: TObject);
var
   Parcel: TLazParcel;
begin
   configform.Edit1.Text:=mainform.s_ServerIpAddress;
   configform.Edit2.Text:=inttostr(mainform.s_ServerPort);
   configform.ShowModal;
   if configform.execute then
      begin
        mainform.s_ServerIpAddress:=configform.ip;
        mainform.s_ServerPort:=configform.port;
        Parcel:=TLazParcel.Create;
        Parcel.PutstringGoods('ServerIpAddress',configform.ip);
        Parcel.PutIntegerGoods('ServerPort',configform.port);
        Parcel.SaveToFile(mainform.s_defaultdir+extractfilename(application.exename)+'.par');
        FreeAndNil(Parcel);
      end;
end;

end.


五、看一下Lazsrus/FPC的跨平台效果

5.1. Windows下
此帖子包含附件:
PNG 图像
大小:165.5K
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2014/4/15 15:07:27
5楼: 5.2. Linux平台下
此帖子包含附件:
PNG 图像
大小:187.9K
----------------------------------------------
樵夫的大马甲
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2014/4/15 15:07:58
6楼: 5.3. MacOS平台下
此帖子包含附件:
PNG 图像
大小:208.8K
----------------------------------------------
樵夫的大马甲
作者:
男 yuto (yuto) ▲▲▲▲▲ -
普通会员
2014/4/15 15:10:28
7楼: 楼主真厉害!佩服,佩服,学习中。
----------------------------------------------
-
作者:
男 jopher3 (樵夫的马六甲) ▲▲▲▲▲ -
普通会员
2014/4/15 15:10:38
7楼: 六、结论

    通过以上摸索、实践,说实在的,咱深受鼓舞,自认为Pascal系开发工具经过几年的低估之后,已经找到了很好的发展方向,可谓曙光初现。 希望大家都能从中受益。
----------------------------------------------
樵夫的大马甲
作者:
男 zhuzh_yuy (华) ★☆☆☆☆ -
普通会员
2014/4/15 15:23:36
8楼: 好贴,看了后深受鼓舞,楼主所言极是,本人深有同感,实践会证明emb的方向是对的,咱们深爱的delphi又见曙光了,delphi万岁,希望emb接下来继续完善,扫除Bug.同时楼主的产品也是很牛B的,楼主可谓是所有delphier中的佼佼者,向楼主学习致敬!
----------------------------------------------
-
作者:
男 bdl1 (bdl1) ▲▲▲▲▲ -
普通会员
2014/4/15 15:38:36
9楼: 怎么不见有人来喷?
----------------------------------------------
-我的博客
作者:
男 lixe999 (lixe) ★☆☆☆☆ -
普通会员
2014/4/15 15:39:59
10楼: web上也可以就好了
----------------------------------------------
-
作者:
男 olddelphier (oldDelphier) ▲▲▲▲△ -
普通会员
2014/4/15 18:11:27
11楼: 方向是对的
就是emb 太着急加新功能 搞的稳定性不是很好
对推广有不良影响
----------------------------------------------
-
作者:
男 vga (vga) ★☆☆☆☆ -
盒子活跃会员
2014/4/15 20:42:19
12楼: 楼主厉害!
----------------------------------------------
-
作者:
男 hu_d_c (大力) ▲▲▲▲▲ -
普通会员
2014/4/18 14:46:23
13楼: 我从群里跑过来定楼主的。。。
----------------------------------------------
-
作者:
男 zrygo (大飞) ▲▲▲▲▲ -
普通会员
2014/4/18 17:21:15
14楼: 能看到Delphi发第二春就好
----------------------------------------------
-
作者:
男 fausten (fausten) ★☆☆☆☆ -
盒子活跃会员
2014/4/18 19:34:33
15楼: 开发平台先离开.net才能看到春天的到来
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行179.6875毫秒 RSS