Delphi XE7 手机开发学习笔记之三-继续一些listbox的简单设置

首先这两天学习曲线还是陡峭,碰到一些问题,主要是项目设置上的。因为在两台电脑间切换开发的关系,本来用github什么没有问题,但不知道哪里出了问题,项目管理发生了混乱,不管是android还是ios应用,都不能正常编译。

基于项目向导生成的项目文件包含全部从win32、win64、android和iphone平台。并且会设置正确的项目配置,在Project-Options中可以看到。我的问题在于,在某次项目提交github的时候,出现了问题,在打开项目时候,只有了win32平台,然后通过手工添加的android和iphone平台,就不太对了,暂时没有找到具体原因,我重新按照标准流程建立项目,发现没有问题。

因为Delphi XE7这次比较厉害,是真编译,so文件啊,o文件啊,还有手机app自己需要的各类配置文件,的确一大堆。凡是就是有利有弊了。

另外,在iphone真机调试的时候,也出现了帮助文件中没有的错误代码,不过实际上app已经传输到了手机,就是不能自动启动。

我重新建立了一个项目,功能如下:

  1. 简单的tabitem,简单的listbox,选择图片后打开手机的相册选择
  2. 选择好的图片会显示在预先设置好的image上

xe7_m_listview_image_1  xe7_m_listview_image_2  xe7_m_listview_image_3

选择本地相册通过XE7的一个标准action,就很容易做到了,TakePhotoFromLibraryAction。

整个功能只有两行代码,下面是调用选择本地相册的代码:

procedure TForm2.ListBoxItem1Click(Sender: TObject);
begin
  TakePhotoFromLibraryAction1.ExecuteTarget(Sender);
end;

然后是用户选中后,在listbox中显示选中的图片:

procedure TForm2.TakePhotoFromLibraryAction1DidFinishTaking(Image: TBitmap);
begin
  Image1.MultiResBitmap.Items[0].Bitmap.Assign(image);
end;

需要说明的是:

  1. 因为不同手机,特别是ipone有一般屏幕和视网膜屏幕的区分,所以图片都要考虑适应不同的分辨率,Delphi通过image这个改良过的图片控件可以根据不同分辨率。主要是通过属性MultiResBitmap以及子属性Scale。对于iphone来说,Scale就是1或者2,或许iphone 6和iphone 6plus可以让Scale有更多的取值。对于android来说,分辨率实在太多,按照Delphi的帮助来说,可以设置Scale的值为1.33、1.5之类。如果一个图片在Scale=1的时候分辨率是90*90,那么Scale=2的时候,就要是180*180的,这样保证在不同设备上的效果。
  2. 另外就是用到了一个布局的空间,GridLayout,通过设置其中item的高度和宽度,可以做到一个类似表格的布局,然后可视控件放在表格中的时候,会按照设定的item尺寸自己适应,再通过根据需要调节这些可视控件的Margin等,来控制疏密和布局。这个方法很像web设计中的方式,还是很方便的。

虽然碰到了一些小问题,但是总的来说,几天可以达到这样的进度,在我比较忙碌的工作生活中,还是比较满意的。到目前为止,基本还是在熟悉listbox以及相关的很多用法。firemoney和原来的vcl有一个非常大的区别就是,控件可以随意放在其他控件上面,成为root和sub的关系,这对布局来说非常方便灵活,使得很多创意容易实现。

之后将继续研究listbox的用法,包括和数据、数据库的绑定等。

Delphi XE7 手机开发学习笔记之二-listbox模仿ios wifi设置

在智能手机里用的最多的界面形式就是列表显示了,通称tableview。在delphi中,实现tableview有listbox和listview两种方式。先从listbox开始学习。listbox或者说tableview的试用细节非常多,也的确很有用,智能手机虽然分辨率很高,但是屏幕小,所以在呈现信息方面要方便显示方便切换。

我们来复刻一下ios设备中的wifi设置,我觉得这是一个比较好的学习开发的方法,直接开始做真正应用肯定不行,做一些不痛不痒的例子也浪费时间,所以学习现成的应用样式比较好。如同产品最难的是需求,复刻功能的话,需求已经基本ok了,业务逻辑不用多考虑了,只要考虑怎么实现就行。

就基本逻辑是如下图显示一个简单的设置tableview,其中“无线局域网”这里可以点击,到wifi具体设置界面,标题是“无线局域网”。

ios_wifi_1  ios_wifi_2

 

Continue reading

Delphi XE7 手机开发学习笔记之一-第一次Hello

之前说过,Delphi XE7是做的比较成熟的产品了,更像是一个Delphi XE6的update2版本,目前看来比较稳定,对于Firemoney框架的不断完善使得手机跨平台开发方便许多。

一年前,XE5出来的时候,也做了一点学习笔记,不过没有坚持下去,一方面自己的问题,一方面当时还是碰到不少技术上的问题无法解决,因此感觉做完整应用有些困难。

或许这次可以坚持,版权所有,可以转载,不得用于商业用途。如果真的可以写个几十篇,我就自己用在商业用途了,经济还是物质的基础。

国内Delphi手机开发的资料不多,并且大多数以android举例,当然android的确机器比较便宜,不过使用iphone的人的购买力要强很多,所以如果从商业应用角度考虑,还是不能忽视iphone市场,特别是XE7本来就是跨平台开发的,如果只做android,还不如用java算了。

作为一个中等发烧友,我准备了iphone、android的各类手机和pad,来体验一下跨平台的魅力。只有跨平台,才是真正的节约生产力。

前言到此为止。

第一篇学习笔记,从一个小小的Hello程序开始,还是向Hello World致敬。

新建一个项目。

当然是 Multi-Device Application,XE7中很牛的技术,到后面就知道了。选择 Tabbed,这种界面样式是手机中最常用的,有几个选项卡的方式,基本是一般应用的默认界面了,在tab中可以设计非常复杂和漂亮的界面,但是主体用tabbed界面是没问题的,用户也非常容易掌握。

project 名字修改为 hello,主程序pas文件修改为 uHello。这是我的习惯,个人按照自己喜欢的命名风格即可。

xe7_mobile_hello_1

Continue reading