FireMonkey
文章平均质量分 59
pcplayer
这个作者很懒,什么都没留下…
展开
-
FireMonkey 做界面的一个小技巧
小技巧就是,要让一个东西随鼠标指过去颜色变深,鼠标离开颜色变回正常,以获得对鼠标的响应,可以给那个东西上面罩一个 TRectangle,设置其透明度让它半透明。然后在鼠标事件里面,设置这个 TRectangle 的 Visible 属性来改变它显示或者不显示。原创 2022-09-10 00:56:59 · 609 阅读 · 0 评论 -
Delphi FireMonkey TMemo 修改背景颜色和边框颜色
修改 TMemo 的背景颜色和边框颜色,有两种办法(如果还有其它办法,我现在不知道)。办法一:设计期对它的 style 进行修改编辑。大概意思就是改它的 style 里面的图片或者其它什么鬼。办法二:运行期用代码实现。原创 2022-09-08 05:11:41 · 863 阅读 · 0 评论 -
Skia4Dephi 的 Demo 程序界面架构分析
虽然 Skia4Delphi 的 Demo 程序中,运行在 Windows 上的 VCL 程序以及可以运行在手机上的 FMX 程序,都采用了相同的类似手机 APP 的层叠界面的设计模式,但最实用的还是手机 APP,因为屏幕太小,不可能一屏里面还划分几个区域,只能是一层一层的界面叠加。因此,这样的设计模式,在做手机 APP 的时候非常值得学习。实际上它的 FMX 的 Demo 程序的框架,可以直接用于我们自己开发的手机 APP。......原创 2022-08-29 21:41:05 · 5203 阅读 · 1 评论 -
Delphi 开发跨平台 Android / iOS 程序的多语言
使用 Delphi 的 FireMonkey 框架,开发跨平台的程序,可以做到一个源码,编译成 Windows, Mac OS, Android, iOS,甚至是 Linux 上面运行的程序。简单说,就是可以开发 Android 和 iOS 的 APP,同时代码不修改也可以运行在 Windows 上和 Mac OS 上面。如果你发布的 APP 需要给各国用户使用,需要考虑多语言的支持。我之前有博客文章写过如何实现多语言支持:假期有时间写代码:FireMonkey 之多语言(TLang)问题简原创 2022-04-16 03:23:24 · 2985 阅读 · 0 评论 -
FireMonkey 的菜单条的汉化,以及多语言
TEdit 和 TMemo 在界面上,运行期,鼠标右键点下去,会出来一个弹出式下拉菜单,里面的内容是:CutCopyPasteDeleteSelectAll都是文本操作的常用功能。问题是,它是英文的。有人问,改成中文怎么办。有人回答,直找到FMX.Consts.pas 去修改里面的常量定义。这个办法我没测试过,但多半有效。问题是,这样直接修改 Delphi 的源代码也点简单粗暴,而且也不支持多语言。假设你做的程序,需要支持多语言怎么办?FMX 本身支持多语言。TLabel, TB.原创 2022-03-24 17:33:05 · 798 阅读 · 0 评论 -
FireMonkey ListView 设计期添加按钮及其 OnClick 事件
FireMonkey 的 ListView 在设计期可以定制一个 Item 上有多个 TEXT,IMAGE 和 Button。如何做,本博客前面有文章讲到。请见这里:FireMonkey ListView 绑定数据显示多个图片_pcplayer的博客-CSDN博客那么,如果添加的是一个按钮,如何知道用户点了这个按钮?在设计期添加的按钮,其属性面板上,只有 Property 而没有 Event,没有 OnClick 可以选择。看了半天 ListView 的源代码没找到办法。上网一搜,有了办法:原创 2022-03-06 23:05:38 · 677 阅读 · 0 评论 -
iOS 开发之证书问题
折腾开发环境,一大堆问题。证书问题,记录一下。在开发者后台网站上,创建 iOS 开发证书。然后在 MAC 系统里面下载证书文件,双击,把证书添加到【钥匙串】里面。问题来了,居然显示从苹果官网下载的证书一串红色字符串【不能接受】。似乎这个证书有问题。此时,如果用 Delphi 连接过去(MAC 上需要启动 Delphi 的 PAServer),Delphj 无法获取到证书。Delphi 的提示是:可能证书无效或者需要删除重复的证书。请教了高人,才发现问题是系统里原本带的一个通用开发者证书【Ap原创 2022-02-13 01:24:31 · 1311 阅读 · 0 评论 -
Delphi 10.4.2 社区版开发的 APP 在 Google play 发布成功
这个 APP 在 Google Play 的地址:蓝牙食品温度计APP地址点这里简单说明1. Google Play 的发布,目前有一些新的要求。按照网上搜索出来的资料去做。没什么问题。这里对我来说有两个要求是需要特别投入一点工作的:1.1. 目前发布,必须是 AAB 文件而不是 APK 文件;1.2. 目前发布,必须是 Android API level 30,但 Delphi 10.4.2 只支持到 29;我前面有文章提到如何做。2. 需要写一份隐私政策文件。发布后,等了原创 2021-12-31 11:59:36 · 864 阅读 · 0 评论 -
FireMonkey 跨平台框架下的图片缩放和 JPEG 编码
在 VCL 底下,把一个 Bitmap 变成 JPEG,是采用将 TBitmap 的内容赋值给 TJpegImage 的方式。在 FireMonkey 底下该怎么做?看到论坛有人提问,上网查了一下资料,自己写代码测试了一下。以下代码测试通过:uses FMX.Surfaces;procedure TForm1.Button1Click(Sender: TObject);var Bmp: TBitmap; Src, Trg: TRectF; NewWidth, NewHeigh原创 2021-12-24 09:51:48 · 555 阅读 · 0 评论 -
Delphi 10.4.2 CE 社区版支持 Android API-30,之二
前情回顾话说直接修改程序项目的AndroidManifest.template.xml,将 API-level 从通配符改为写死的 30 后,可以编译发布出 AAB 文件,而且这个 AAB 文件上传到 Google play 它没提示 API-level 是 29 不合格,算是通过了。但是,如果选择程序项目的 Configuration 为Development,手机插上电脑,重新编译发布安装到手机上,安装失败,错误提示:INSTALL_PARSE_FAILED_NO_CERTIFICATES。...原创 2021-11-25 19:33:31 · 10698 阅读 · 0 评论 -
Delphi 10.4.2 CE 社区版支持 Android API-30,之一
Delphi 10.4.2 社区版,安装后,最高支持到安卓10,API-29。但是,现在如果想发布到 Google play,需要:1. 必须是 APP bundle 文件,也就是 AAB 文件,而不能是 APK;2. 必须是最低支持 API-30;上网搜索各种说法,最终还是自己解决。Delphi 盒子论坛的 "emailx45"提供了很多思路和帮助。记录一下,如果有人遇到相似问题,可以看这里。一. 如何编译 AAB:一开始查到的网页是 Marco Cantu 的博客文章,说的是原创 2021-11-22 02:29:57 · 3906 阅读 · 0 评论 -
FireMonkey ListView 绑定数据显示多个图片
概述采用 Delphi 的 FireMonkey 框架,可以开发运行在 WINDOWS, Android, iOS 和 MacOS 上面的代码。其中一个比较常用的界面显示控件是 TListView。如果数据是多条,来自数据库,或者来自多个对象的对象列表(TObjectList),采用 Delphi 的数据绑定功能(LiveBindings)可以让 ListView 显示来自数据的内容。需求:ListView 显示的多条内容,每一条,可以有一个图片,有段文字,等等。Delphi 提供了几种固定原创 2021-10-18 20:07:09 · 1219 阅读 · 0 评论 -
FireMonkey TListView 使用 LiveBindings 绑定 TObjectList
前言:Delphi FireMonkey 的 LiveBindings 可以用来直接绑定界面元素和一个对象的属性,这样就可以把对象的值显示到界面上。常见的是将数据库 DataSet 的数据显示到界面上。如果数据是一组对象,放到一个 TObjectList 里面,该如何做?以下操作在 Delphi 10.4 社区版上测试通过。正文开始:1. 有一个对象:TMyDev = class private FDevID: string; FDevName: string;原创 2021-10-15 20:59:51 · 453 阅读 · 0 评论 -
Delphi FireMonkey 振动手机
参考链接:How to vibrate iOS and Android phones using FireMonkey and XE8 (embarcadero.com)实测以下代码在 D10.4 社区版,OPPO 手机上运行成功。前提:安卓系统,需要设置工程文件里面的用户权限:需要 Vibrate 权限,在 Project - Options - UserPermissions 里面,找到 Vibrate ,勾选。以下是全部测试代码:unit Unit1;interface原创 2021-10-13 18:28:31 · 222 阅读 · 0 评论 -
蓝牙的一个 bug
Delphi 10.4.2 社区版。TBluetoothLE 控件,启动蓝牙设备扫描后,有两个事件:1. OnDiscoverLEDevice;发现一个设备也触发,因此会不停地触发。2. OnEndDiscoverDevices;扫描结束触发。什么是扫描结束呢?因为启动扫描是:BluetoothLE1.DiscoverDevices(ScanningTime);所以,应该就是ScanningTime 这个时间到了。可以理解为扫描动作的超时值。但是,在 WINDOWS 底下,这.原创 2021-09-24 22:13:29 · 490 阅读 · 0 评论 -
FireMonkey 多平台下 TIniFile 读 ini 文件要注意
简述:如果要多平台兼容,这个 ini 文件必须是 UTF8 编码,否则如果这个 ini 文件里面有中文,安卓下会乱套。问题:TIniFile 在 WINDOWS 平台下,封装的是 WINDOWS 提供的接口。在 System.IniFiles 里面有注释:TIniFile - Encapsulates the Windows INI file interface (Get/SetPrivateProfileXXX functions)经过测试,TIniFile 在 WINDOWS 环境下只能原创 2021-09-12 12:40:34 · 399 阅读 · 0 评论 -
Delphi 10.4 社区版的动画有 BUG
做了个简单的小程序,主要功能有蓝牙。放了一个 TCircle 在上面,给它增加了一个 TColorAnimation 用于接收到蓝牙数据的时候,变化颜色闪烁,作为接收到数据的提示。在 WIDNDOWS 底下运行正常;在 Android 32 底下运行正常;在 Android 64 底下运行,过几分钟就会出现异常提示:raised exception class Segmentation fault (11).,然后程序就崩溃了。以为是蓝牙部分导致的问题,彻底把蓝牙部分的代码屏蔽掉,问题依旧存原创 2021-09-11 22:49:26 · 365 阅读 · 0 评论 -
FireMonkey 使用剪贴板
我想在安卓里面使用剪贴板,把当前程序的内容复制到剪贴板上。查了一下资料,应该这样做:uses FMX.Platform, FMX.Clipboard;{$R *.fmx}procedure TForm1.Button1Click(Sender: TObject);var ClipboardService: IFMXExtendedClipboardService;begin if TPlatformServices.Current.SupportsPlatformService原创 2021-08-30 21:13:25 · 251 阅读 · 0 评论 -
Delphi 10.4 社区版安卓下蓝牙的一个问题
蓝牙控件有这么一个方法:varACharacteristic: TBluetoothGattCharacteristic;ACharacteristic := BluetoothLE1.GetCharacteristic(AService, My_Characteristic_ID);但是,这个方法可能会返回 nil,不是这个ACharacteristic 不存在,而是一个 bug。这个 bug 在 Delphi 10.3.3 社区版就存在,10.4 还在。在执行上述方法获得一个...原创 2021-08-30 00:42:09 · 528 阅读 · 0 评论 -
Delphi 10.4 社区版的 WebBrowser 在安卓下的问题
之前我写过一篇文章:Delphi APP 里面使用 HTML5 来做帮助文档,移植WebBroker进Android APP在这篇文章里面,我提到把 HTML 的内容放进 SQLite 数据库,打包进 APP,然后使用 WebBrowser 通过内置的 Indy HTTP Server 访问数据库来显示 APP 发布给用户的帮助文档或者其它任意文档。后来,为了不要在 APP 内部内置一个 Web Server,我试着程序启动后,将打包在 SQLite 数据库里面的 HTML, CSS, 以及页面中用原创 2021-08-29 01:31:43 · 866 阅读 · 0 评论 -
Delphi FireMonkey 的动画以及多线程
网上看到有人抱怨说在 FireMonkey 框架下做了动画,然后当使用 Indy 做网络访问的时候,因为 Indy 的阻塞,导致动画停止了。他已经把 Indy 访问网络的代码放进线程了,还是让动画停止。抱怨在 FireMonkey 框架下 TThread 有问题不好用。我就在 Delphi 10.3.3 底下写了个测试程序,测试了一下。发现一切正常。测试程序里面有三种动画:1. Delphi 提供的TFloatAnimation 来让一个 TArc 旋转起来。这个无需写代码,设置几个属性就可..原创 2021-01-22 18:06:57 · 920 阅读 · 3 评论 -
FireMonkey 做的发光按钮的例子代码
线条图,按上去会发光,这样的按钮,用 FireMonkey 的控件来做,基本上没有什么代码。在 Windows / Android /iOS 上都可以用。我做了一个例子,源代码上传到这里:发光按钮例子代码...原创 2020-04-06 22:35:09 · 5633 阅读 · 0 评论 -
LiveBindings 绑定对象里面的图片字段,对象要平台中立
问题来源:假设我有一个数据对象 TnUser = class里面需要存储图片。因为 Delphi 的 VCL 和 FMX 对图片的处理,引用的单元不同,为了让这个 TnUser 更单纯,平台中立,它只能存储图片的二进制数据,而不是 TBitmap 或者 TJpeg 这样的对象。因此,我在这里直接用一个 TMemroyStream 来存储图片的数据。问题来了,我在 View...原创 2020-02-13 03:37:13 · 2220 阅读 · 0 评论 -
继承一个界面控件,给它增加功能,但继承的类仍然用父类的名字
这个标题看起来有点不好理解。问题和解决方法来自这里:https://blog.grijjy.com/2018/01/26/mvvm-starter-kit-part-3-of-3/问题简述:0. 传统做法:继承一个控件,取一个新的名字,然后把它安装到 IDE 里面,需要用的时候,从控件托盘里把这个新做的控件找出来,拖到界面上。1. FireMonkey 的控件,它的 Style 利...原创 2020-02-05 01:01:42 · 2672 阅读 · 1 评论 -
FireMonkey 底下用自己定义 Style 的方式,给按钮 Button 以颜色
FireMonkey 里面有 Style 的支持。通常的用法是做一整套的 Style 然后给一个程序用。官方提供了不少的各种配色的 Style 设计,程序可以直接拿来用。通过使用 Style 来达到换肤的目的。但自己设计整套的 Style 比较麻烦。有时候只是想给一个按钮设置一个不同的颜色,而按钮是没有 Color 这样的属性可以用来设置颜色的。这时候,可以利用 FireMonkey 提供的 ...原创 2020-01-09 21:06:16 · 2036 阅读 · 0 评论 -
FireMonkey 的网格 Grid 的用法(1)
学习一下在 FireMonkey 里面怎么用格子来实现一些界面效果。比如,类似 Delphi IDE 的属性面板那种格子。一边学习一边写 Blog 作为记录。从最简单的玩法开始。创建一个 FireMonkey 的工程,保存一下。只需要一个 Form。拖一个 TLayout 过来,设置 Align 为 Top;拖一个 TGrid 到这个 Layout 里面,设置 Align 为 Left...原创 2020-01-04 20:39:11 · 1766 阅读 · 0 评论 -
安卓APP的http访问权限
安卓下,默认只允许 https 的访问,不允许 http 的访问。用 Delphi 写一个安卓 APP,用 TIdHTTP 去访问一个 WEB 服务器,不行。网上查了一下,发现需要这样做:在 APP 的工程目录下,有一个 XML 文件,“AndroidManifest.template.xml”,用文本 编辑器打开它:在<application android:persiste...原创 2019-09-24 19:04:58 · 64426 阅读 · 12 评论 -
FMX APP SpeedButton 图标的颜色 - 界面设计
做手机 APP 的话,按钮最好是用 TSpeedButton。最常见的用法就是一个界面最顶上左边那个向左的箭头按钮 -- 退出这个界面。默认的办法是设置这个 TSpeedButton 的 StyleLookup,里面有很多默认的图标,包括向左的箭头。然后,这个 APP 在安卓下,就是安卓的默认图标;在 iOS 下,就是 iOS 的默认图标。在 Windows 下,它显示 Windows 的...原创 2018-08-02 12:14:42 · 1354 阅读 · 0 评论 -
手机APP打开一个安卓系统支持的文件,比如 PDF
在某个 Q 群里有人问如何在安卓里打开 PDF 文件。俺随手搜索了一下,马上获得答案:https://stackoverflow.com/questions/28699574/delphi-open-pdf-from-ios-android-local-storage?rq=1实际上的代码就是这样几行:procedure btnPdfClick(Sender: TObject);var f...原创 2018-06-29 09:56:22 · 2524 阅读 · 0 评论 -
FireMonkey ListBox 的几个事件:拖动,点击,长按
Mobile 手机APP,采用 FireMonkey 的 ListBox 的话,大概会需要以下功能:1. 响应用户手指点击某个条目,然后做某事;2. 响应用户长按,做其它事;针对需求1,这里,不能用 ListBox.OnClick 事件来响应单击。因为用户拖动 ListBox 的时候,也会触发这个事件。这里应该采用 ListBox.OnItemClick 事件。针对需求2,首先设置 ListBox...原创 2018-06-05 23:20:18 · 1522 阅读 · 0 评论 -
Delphi MediaPlayer Android 的问题
Delphi 10.2 FireMonkey 下,TMediaPlayer 目前支持 Windows, iOS, Android 好像还支持 MAC OS。在 iOS 底下表现正常。在 Android 下面,界面上放一个 Button,在 OnClick 里面执行以下代码:MediaPlayer1.FileName := 'MyVideo.mp4';MediaPlayer1.Play;点击按钮,执...原创 2018-04-06 02:40:39 · 2409 阅读 · 0 评论 -
Delphi MediaPlayer Android 的问题 之二
这几天都在折腾 Delphi FireMonkey MediaPlayer 在安卓下的问题。查源代码,这个 MediaPlayer 也是封装了安卓的 MediaPlayer,播放界面使用了安卓的 View 。人生就是打怪过关。这里好多关,最后还是过不了:1. 上一篇文章里提到的,第一次播放后,关闭 MediaPlayer,然后给它设置新的视频文件名,然后播放,却播放不起来的问题。通过使用 Time...原创 2018-04-11 20:24:45 · 2235 阅读 · 0 评论 -
自己写的APP如何禁掉安卓锁屏
我要写一个 APP 是播放视频的。播放视频的时候,手机过一会自动锁屏。这个是手机本身的设置。如何在我的程序中禁止掉这个?经过搜索,安卓下有办法了。请见:安卓下如何用 WakeLock上述 StackOverflow 问题解答里面,给出了一个单元:Android.JNI.PowerManager.pas,我搜了一下 Delphi 提供的源代码,一堆 Android.JNI.xx 但没有这个文件。我自...原创 2018-03-12 18:44:38 · 1741 阅读 · 0 评论 -
APP 横屏和竖屏
普通情况下,APP 随着用户拿手机是横向还是竖向,自动翻转 -- 当然,这个也需要用户设置手机的屏幕是否跟随手机的物理方向而翻转。但如果我们的APP,在某种情况下,必须以竖屏方式显示,在某种情况下,必须以横屏方式显示,不管用户是否把手机横过来放。该怎么办?网上搜了一堆东西出来。安卓的资料比较多一点,iOS 的就很少了。最终解决了这个问题。大概代码如下:uses {$IFDEF IOS}iOSapi...原创 2018-03-16 18:05:38 · 5935 阅读 · 2 评论 -
关于多语言:如何获取当前系统语言
uses FMX.Platform; function TForm2.GetCurrentLan: string;var LocServ: IFMXLocaleService;begin //读取当前语言,测试通过。 if TPlatformServices.Current.SupportsPlatformService(IFMXLocaleService, IInterface(LocSe...原创 2018-03-16 10:38:52 · 2555 阅读 · 0 评论 -
关于 Delphi 的字符串
以前在 Delphi 底下针对 Windows 编程,习惯了对字符串的使用。那时候的字符串是从序号 1 开始的,而不是0.现在 Delphi 支持多平台,情况有变。1. VCL 模式下(当然只支持 Windows),字符串和以前一样。仍然是从 1 开始;之前的字符串的函数比如 Copy,Pos 等等仍然可以使用。2. 在 FireMonkey 模式下,不管编译的目标平台是不是 Windows,字符...原创 2018-02-22 01:22:42 · 622 阅读 · 0 评论 -
Delphi BLE 的一个 bug
这个莫名其妙的 bug 浪费了我 N 多个小时,为了搞清楚原因俺熬夜到1点。这个BUG是这样的:BluetoothLE1 第一个操作是 DiscoverDevice,扫描发现周围的蓝牙设备。扫描后,BluetoothLE1 内部有一个扫描到的设备对象列表;第二个操作是针对某个设备,执行对该设备提供哪些服务进行一个扫描发现操作:DiscoverServices。执行完成后,Bluet原创 2018-02-04 17:51:26 · 1289 阅读 · 0 评论 -
FireMonkey 做 APP 的界面设计方法研究
下载安装了 Delphi 社区版 10.3 ,从它的 GetIt 下载了一个 Demo 程序。程序的名字叫做 ProfileForm。界面非常漂亮,有点惊艳的感觉。赶紧仔细研究一下它是怎么做出来的。先看图:首先,这个 APP 是在一个 Frame 里面去做界面设计和控件的摆放。然后在主 Form 里面,放入这个 Frame。在主 Form 里放一个 TStyleBook 名为 JetSty...原创 2018-12-06 13:01:21 · 4062 阅读 · 9 评论 -
用 Delphi 开发 APP 时程序参数的设置修改以及保存方法
做一个程序,总会有一些参数,是需要在运行时,让用户去选择设置的。用户设置完成后,需要保存,这样下次程序启动后,工作参数就是上次用户设置的参数。传统的 Windows 底下,最常用的方式,是采用 ini 文件来保存参数。然后通过读写 TIniFile 来获取参数,或者将参数写入 ini 文件。不过用 ini 文件,采用 TIniFile 来打开 ini 文件,程序员需要写很多读写 TIniFil...原创 2018-12-20 00:55:13 · 1791 阅读 · 0 评论 -
Delphi 安卓 APP 动态权限申请
高版本的安卓,需要 APP 运行时动态申请权限。以前时在开发时,在 DELPHI IDE 提供的权限设置窗口里面去设置好权限,编译发布就可以了。Delphi 10.3 开始支持目前最新版本的安卓,除了在权限设置窗口里面做好设置,还需要用代码动态申请权限。例子代码请看这里:安卓动态申请权限的官方文章这里头的例子代码,亲测有效。放一个 TSwitch 上去,拨动开关,触发代码,Andr...原创 2018-12-27 19:39:03 · 2335 阅读 · 0 评论