中文:在很多时候会需要自定义Delphi的fmx.jar

比如在对接一些三方SDK的时候要和底层的FMXNativeActivity打交道,

或者发现了fmx.jar中的错误,又或者想要增加点功能。

下面我以10.3.3为例介绍一下如何操作

  1. Delphi提供了fmx.jar的所有源码,

在C:\Program Files (x86)\Embarcadero\Studio\20.0\source\rtl\androiddex\java\fmx这个目录中

一看到这些文件,玩过一点Android的同学可能已经知道了,这个目录其实是一个Eclipse的工程,

对,我们要用到Eclipse,因为我经常要用到封装jar,所以装了的,

我们打开它:

将fmx这个工程导入到eclipse中,步骤如下:

先在左边的工程管理视图中右键->Import,

点击Browse,选择工程根目录,

将fmx的目录路径拷到Root Directory框中,按一下回车

比如:C:\Program Files (x86)\Embarcadero\Studio\20.0\source\rtl\androiddex\java\fmx

中间表格会显示出来搜索到的工程

点击确定,左边的工程管理视图中会显示出来fmx的Android工程

src节点是工程的源码,可以展开来

  1. 好了,接下来我们就来尝试导出jar

我们要导出所有的代码到jar中,所以在src节点中右键->Export

选择”JAR file”

在这里选择你要生成的jar路径和文件名

  1. 第一次导出会报错,一般是因为引用的其他jar没有找到的关系,

它说我们classpath中的很多class files找不到,但其实这些源文件都是存在的,那就有可能是这些源文件所引用的其他包不存在,

我们来检查一下,先右键fmx工程,选择最底下的”Properties”,查看工程属性

在Java Build Path的Libraries中,有很多红色的叉叉,

表示发现该工程所引用的其他jar不存在,

比如android-support-v4.jar不在..\..\libs目录中,

com-google-android-gms.play-services-analytics-impl.16.0.8.jar不在..\libs\gms\目录,

其实这些jar都是delphi中自带的,随便打开一个将Android节点展开来都能看的到位,

它们在C:\Program Files (x86)\Embarcadero\Studio\20.0\Lib\android\debug目录中,

我们要在C:\Program Files (x86)\Embarcadero\Studio\20.0\source\rtl\androiddex下建一个libs目录,将这些jar放进去

再在libs里面建一个gms目录

将谷歌的其他jar放到gms里面

有些重复的包可以删除

处理好后,左边就没有红色的叉叉了

清一下工程

再导一次

导出成功

  1. 然后你就可以在eclipse中修改fmx中的java源码,自己打包成fmx.jar来使用啦!

使用的时候记得先将自带的fmx.jar禁用掉。

给列绑定设计面板

  1. 添加一个列,标题取为”操作”,
  2. 拖一个设计面板在表格上,取名为idpOperation

  1. 放一个按钮在设计面板idpOperation中,命名为btnDelRow

  1. 整列就会显示成该设计面板的样子的

 

自定义每行设计面板的显示,比如指定某行按钮不可用

  1. 双击ItemGrid.OnPrepareDrawItem事件,

  1. 让Caption为”张三”的项的按钮可用,其他的项不可用

  1. 运行效果如下:

 

 

 

给设计面板上的控件添加事件,比如删除所在行

  1. 为了让按钮响应点击事件,需要将HitTest设置为True,不然不会响应
  2. 双击按钮btnDelRow的OnClick事件,写如下代码:

//删除所在行

Self.SkinFMXItemGrid1.Prop.Items.Remove(SkinFMXItemGrid1.Prop.InteractiveItem);

  1. SkinFMXItemGrid1.Prop.InteractiveItem表示按钮所在行。
  2. 点击之后,该行就被删除了

统计区也是不太常用的功能,在表格最底部多出一行来显示统计数据

我们在会简单使用表格的基础上来操作

  1. 给表格添加一列,年收入,用于显示Item中的Detail属性

给列表项的Detail设置值,

设置Grid的FooterRowCount为1,表示显示统计区

表格底下会多出一行,现在还是灰色的

将”年收入”这一列的FooterValueType设置为fvtSum,表示显示总收入,该列所有单元格值的总和

效果如下:

 

 

 

相关的绘制参数如下:

  1. FooterRowBackColorMaterial:统计区的行背景色素材

BackColor:单元格背景色,不区分奇偶行的情况下使用

IsDiffOddAndEven:是否区分奇偶行

EvenBackColor:偶行的单元格背景色

OddBackColor:奇行的单元格背景色

IsDiffFixedCols:是否区分固定列和非固定列

FixedColsBackColor:固定列的单元格背景色

FixedColsEvenBackColor:固定列偶行的单元格背景色

FixedColsOddBackColor:固定列奇行的单元格背景色

 

因为默认是区分奇偶行的,目前只有一行,所以要改统计区的行背景色,就改这个OddBackColor。

 

 

再来介绍Column的FooterValueType有如下几种类型,

  1. fvtNone:不统计
  2. fvtAverage:平均值
  3. fvtCount:行数
  4. fvtSum:总和
  5. fvtStatic:手动指定的值,FooterValue

 

Column的FooterValueFormat是指定显示格式,

比如%.2f,表示保留两位小数,因为显示的时候,是调用Fomat函数来显示的单元格内容的

 

 

我们将”姓名”列设置如下,让它在统计区显示字符串”统计区:”

“性别”列设置如下,让它显示行数,也就是记录数:

“年收入”列设置如下,让它显示总和,并且保留两位小数:

年龄列设置如下,让它显示平均值:

效果如下:

固定列也是不太常用的功能,将左边指定个数的列固定起来,水平滑动时保持不动。

我们在会简单使用表格的基础上来操作

  1. 将表格的FixedCols设置为1,表示左边第一列保持固定

你会发现,固定列的表头颜色变了,单元格的颜色也变暗了许多

默认ItemGrid水平方向是不允许越界滚动的,所以我们要开启它,

运行看一下效果,将表格水平向右拖动,可以看到左边的列没有移动,

 

 

 

相关的绘制参数如下:

  1. FixedColumnHeaderBackColor:固定列的表头背景色

  1. RowBackColorMaterial:行背景色

BackColor:单元格背景色,不区分奇偶行的情况下使用

IsDiffOddAndEven:是否区分奇偶行

EvenBackColor:偶行的单元格背景色

OddBackColor:奇行的单元格背景色

IsDiffFixedCols:是否区分固定列和非固定列

FixedColsBackColor:固定列的单元格背景色

FixedColsEvenBackColor:固定列偶行的单元格背景色

FixedColsOddBackColor:固定列奇行的单元格背景色

将表格水平向左拖动,可以看到位左边的列也没有移动,