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的用法,包括和数据、数据库的绑定等。

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

Leave a Reply

Your email address will not be published. Required fields are marked *