Delphi
文章平均质量分 65
pcplayer
这个作者很懒,什么都没留下…
展开
-
Delphi 的 DataSetProvider.Options 里面的 poCascadeUpdates 修改嵌套表的主键
假设主表和从表的非主键字段的值在客户端同时被修改,提交后,会在服务器端的 DataSetProvider1.BeforeUpdateRecord 触发事件。可以在事件里面判断当前触发的是主表还是从表。因为程序员知道每个表的字段名称,因此可以针对当前触发事件的表的记录的每个字段,进行权限控制,或者值的修改,等等。也就是业务逻辑控制在服务器端,安全性更高。原创 2023-10-12 23:12:18 · 354 阅读 · 0 评论 -
把多层次的 XML 文档解析为 TreeView 显示
肉眼阅读 XML 比较累,需要去对付一堆的尖括号。用 Delphi 程序把它显示为一个 TreeView 的树结构,比较容易用眼睛去看。XML 文档是一个有多层树形节点的文档。因为节点数不确定,所以要跟踪每个节点,需要用到递归。以下是我的代码,基于 Delphi 10.4 没使用第三方控件。原创 2023-02-22 16:13:00 · 553 阅读 · 0 评论 -
基于 Delphi 的前后端分离:之二
前端套用网页模板,后端用 Delphi 开发,前后端彻底分离解耦。原创 2022-12-02 23:14:54 · 1731 阅读 · 2 评论 -
基于 Delphi 的前后端分离:之一
后端用 Delphi 来写服务器,输出数据给前端,前端用 JS 来从服务器获取数据,渲染页面。原创 2022-12-02 19:57:56 · 2312 阅读 · 0 评论 -
手机 APP 的卖货界面
网上买菜的微信小程序,其典型界面是左侧一个列表显示商品分类,右侧一个列表,显示商品明细。左侧列表要显示当前选中的是哪条分类记录(高亮这条记录)。右侧列表滑到底部后,往上再滑一次,自动切换到下一个分类,此时左侧列表的选中画面也同时要更新(高亮下一条记录)。原创 2022-09-20 08:44:26 · 548 阅读 · 0 评论 -
再谈 FireBird 的自增字段用 FireDAC 来处理
基于 MIDAS 的多层架构的数据库程序,客户端是 ClientDataSet,数据库服务器是 FireBird,服务器端采用 FireDAC 的数据库控件,如何处理数据库端的自增字段。之前我有博客文章介绍具体做法。这里更新一下另外一种做法,。原创 2022-09-17 01:58:52 · 820 阅读 · 0 评论 -
FireMonkey 做界面的一个小技巧
小技巧就是,要让一个东西随鼠标指过去颜色变深,鼠标离开颜色变回正常,以获得对鼠标的响应,可以给那个东西上面罩一个 TRectangle,设置其透明度让它半透明。然后在鼠标事件里面,设置这个 TRectangle 的 Visible 属性来改变它显示或者不显示。原创 2022-09-10 00:56:59 · 647 阅读 · 0 评论 -
Delphi FireMonkey TMemo 修改背景颜色和边框颜色
修改 TMemo 的背景颜色和边框颜色,有两种办法(如果还有其它办法,我现在不知道)。办法一:设计期对它的 style 进行修改编辑。大概意思就是改它的 style 里面的图片或者其它什么鬼。办法二:运行期用代码实现。原创 2022-09-08 05:11:41 · 907 阅读 · 0 评论 -
Delphi 的操作符重载 - Record 结构体
Delphi 的结构体类型的操作符重载,以及属性和事件。原创 2022-08-25 01:18:18 · 729 阅读 · 0 评论 -
多线程,主线程的概念以及在 Delphi 的新语法中的代码写法
用 Delphi 写代码的初学者,因为 Delphi 的 VCL 框架(或者新的 FireMonkey 框架),导致对线程没有概念。那么,究竟线程是个什么玩意?上述程序,就是从 main 的第一行开始,一行一行地执行。假设数据库服务器离得远,网络带宽小,select 获取的数据太多,可能第二行代码的执行时间就需要20秒。那么,它就要等 20 秒后,等第二行执行完毕,才会执行第三行。这就是所谓的【程序】,也就是一行一行往下执行。原创 2022-08-19 17:48:39 · 971 阅读 · 2 评论 -
EhLib 数据库记录的下拉选择
通过下拉选择,知道用户选择了数据库里面的哪条记录。仅仅是用来知道,而不是用来输入。有一个表,有很多记录。提供一个界面让用户从表里面选择一条记录。程序获取用户的选择结果。最简单的方法,给一个 DBGrid,用户将游标走到选择的记录(通过滚动和鼠标点击 DBGrid 里面的一条记录),然后程序读其对应的 DataSet。DBGrid 太占空间。最好是一个类似 Edit 的东西,然后有一个下拉按钮,点这个按钮,下来出来一个框,框里面有多条记录供用户选择。选择结果要显示到这个 Edit 里面。采用 EhLib 的控原创 2022-07-03 00:04:19 · 524 阅读 · 0 评论 -
类方法和类变量的使用
Delphi 语法,有类方法 class procedure 和 class function ;也有类变量 class var。可以用来干嘛?WebService 服务器端,多个 SoapDataModule 共用的方法,放到一个 DataModule 里面去。每次 SOAP 调用,需要在 SoapDataModule 实现接口方法里面,创建该 DataModule 的实例,调用其方法,然后释放。创建和释放的代码,总是重复。并且,没有对象缓冲池。当然,可以给这个 DataModule 实现一个基于接口释放原创 2022-07-02 17:19:22 · 545 阅读 · 0 评论 -
Delphi SOAP WebService 服务器端多个 SoapDataModule 实现相同的接口方法,接口继承
WebService 服务器端,为了方便代码管理,将不同的业务逻辑,分到不同的 TSoapDataModule 里面去。这样好对代码做模块化管理。多个 TSoapDataModule 可能需要实现相同的接口方法,每个 TSoapDataModule 模块对该方法的实现代码可能不同(因为业务不同);最简单可能性是每个模块要检查的客户端访问权限不同。那么,在客户端,因为是调用服务器端的不同接口的相同方法,如果给每个接口写一次方法调用,代码冗余。服务器端:服务器端的接口,默认(IDE 自动生成的代码)从 IApp原创 2022-07-02 16:27:20 · 527 阅读 · 0 评论 -
Delphi SOAP WebService 服务器端多个 SoapDataModule 要注意的问题
本人之前有篇博客文章,讲到在 Delphi 的 Soap WebService 程序服务器端,使用多个 TSoapDataModule 的方法。文章地址在这里:https://blog.csdn.net/pcplayer/article/details/110178123内置 IdHTTPServer 的独立的 WebService 服务器端,内部有多个 TSoapDataModule,服务器端运行时,在 Delphi IDE 里面,通过 TSoapConnection 连接服务器端,ClientDataS原创 2022-06-15 02:06:45 · 2506 阅读 · 0 评论 -
Skia4Delphi 在 Delphi 里面利用 Skia 画图
简介Skia 是一个 2D 库,画图性能非常好。是由 Google 开源出来的。在 Delphi 里面如何使用这个 2D 库,来利用它提供的一些好处?有一个开源的项目,Skia4Delphi 很好地解决了这个问题。它使得 Delphi 的 VCL 程序和 FMX 程序都能利用 Skia 库来画 2D 图。比如,可以用 Delphi 的程序来显示 WebP 这种格式的图,SVG 的图,等等。当然,Skia 还有很多 2D 图的算法。这个开源项目在:https://github.com/skia原创 2022-05-14 01:12:57 · 3488 阅读 · 0 评论 -
Python4Delphi 安装使用注意
摘要想要在 Delphi 程序里面使用 Python,在 Delphi 里面安装 Python4Delphi 这个控件,编译的 WINDOWS 程序可以调用 WINDOWS 里面安装的 Python。然后,WINDOWS 里面,Python 的安装需要注意。注意事项本文提到的 WINDOWS 是指 WIN 10.如果你在 WINDOWS 的命令行(cmd.exe)或者 Power Shell 窗口里面,输入 Python 命令,它会弹出 Windows App Store 让你安装 Pyth原创 2022-04-23 15:39:50 · 5382 阅读 · 0 评论 -
FireMonkey 的菜单条的汉化,以及多语言
TEdit 和 TMemo 在界面上,运行期,鼠标右键点下去,会出来一个弹出式下拉菜单,里面的内容是:CutCopyPasteDeleteSelectAll都是文本操作的常用功能。问题是,它是英文的。有人问,改成中文怎么办。有人回答,直找到FMX.Consts.pas 去修改里面的常量定义。这个办法我没测试过,但多半有效。问题是,这样直接修改 Delphi 的源代码也点简单粗暴,而且也不支持多语言。假设你做的程序,需要支持多语言怎么办?FMX 本身支持多语言。TLabel, TB.原创 2022-03-24 17:33:05 · 824 阅读 · 0 评论 -
FireMonkey ListView 设计期添加按钮及其 OnClick 事件
FireMonkey 的 ListView 在设计期可以定制一个 Item 上有多个 TEXT,IMAGE 和 Button。如何做,本博客前面有文章讲到。请见这里:FireMonkey ListView 绑定数据显示多个图片_pcplayer的博客-CSDN博客那么,如果添加的是一个按钮,如何知道用户点了这个按钮?在设计期添加的按钮,其属性面板上,只有 Property 而没有 Event,没有 OnClick 可以选择。看了半天 ListView 的源代码没找到办法。上网一搜,有了办法:原创 2022-03-06 23:05:38 · 697 阅读 · 0 评论 -
Delphi 开发 iOS APP 的文件发布的问题
Delphi 写 iOS APP 嵌入 SQLite 数据库到 APP 里面作为 APP 的本地数据库Delphi 10.4.2 社区版。开发环境配置好以后,在 Delphi 里面可以直接按 F9 把程序下载到 iPhone 上跑起来。但问题来了,我的程序用到了 SQLite,结果打开数据库出错。单步跟踪,发现情况是:FDConnection1.Open 执行正确,异常出在 FDQuery1.Open 上面。错误提示是 XX 表不存在。这个 XX 表就是 FDQuery1 里面的 sel原创 2022-02-17 01:47:54 · 2042 阅读 · 0 评论 -
iOS 开发之证书问题
折腾开发环境,一大堆问题。证书问题,记录一下。在开发者后台网站上,创建 iOS 开发证书。然后在 MAC 系统里面下载证书文件,双击,把证书添加到【钥匙串】里面。问题来了,居然显示从苹果官网下载的证书一串红色字符串【不能接受】。似乎这个证书有问题。此时,如果用 Delphi 连接过去(MAC 上需要启动 Delphi 的 PAServer),Delphj 无法获取到证书。Delphi 的提示是:可能证书无效或者需要删除重复的证书。请教了高人,才发现问题是系统里原本带的一个通用开发者证书【Ap原创 2022-02-13 01:24:31 · 1340 阅读 · 0 评论 -
再谈 Firebird / Interbase 自增字段和WebService MIDAS 框架下的 ClientDataSet
架构:1. 数据库服务器:FireBird;2. WebService 服务器端,采用 FireDAC 控件 + DataSetProvider;3. WebService 客户端,采用 ClientDataSet 绑定到服务器端的 DataSetProvider;4. 数据库表名:TEST,有2个字段:XUHAO, DESC;其中 XUHAO 是整数,我希望它是个顺序自增的字段,是主键,也是本文关注处理的对象。代码需求上述架构下,连接数据库的控件,采用 FireDAC 还是其它原创 2022-01-13 21:31:24 · 788 阅读 · 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 · 909 阅读 · 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 · 600 阅读 · 0 评论 -
关于 Firebird 数据库的备份
备份方式:1. 使用 Firebird 自己带的备份工具 gbak.exe;2.使用 Firebird 自己带的备份工具 nbackup.exe;3.使用 Firebird 自己带的备份工具 fbsvcmgr.exe;4. 在 Delphi 里面,使用 FireDAC 的控件:TFDFBNBackup 和 TFDFBNRestore 做备份和还原。各种方式的特性(本人亲自测试的结果)1.使用 Firebird 自己带的备份工具 gbak.exe:可以跨网络执行,将远...原创 2021-12-23 22:15:18 · 1495 阅读 · 0 评论 -
Firebird 备份工具 nbackup 的
nbackup介绍nbackup是Firebird 2.0新带来的备份工具。它提供了gbak—Firebird以前就有的备份工具—所没有的能力—但是并不取代后者。两个程序都有其长处和短处;他们在一定的将来将共存一段时间。nbackup功能—总体介绍使用nbackup,你可以进行两类不同的功能操作:1. 建立和恢复完整的和增量的备份操作。一个增量备份只包括自某一上次备份以后的变化。2. 锁定主数据库文件,然后你可以根据自己的选择使用复制工具或者备份工具来备份。在这种模式下,nbacku翻译 2021-12-23 11:42:36 · 303 阅读 · 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 · 10741 阅读 · 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 · 3979 阅读 · 0 评论 -
Delphi Getit 带来的一个图标工具
Delphi Getit 里面有不少好东西可以在线下载安装。刚刚发现了一个:在 Getit 的左侧选择 Tools,排第一个的是:Icon8;选中它,出来一个 Install 按钮,点击这个按钮,开始在线安装。安装完成后,启动 ICON8,原来它是一个独立运行的程序。这个程序里面有一大堆的图标,各种风格。还可以使用关键字搜索图标。比如想要一条鱼的图标,输入 Fish 就能搜出来一大堆鱼的形状的图标。并且,这些图标还可以选择颜色,以及输出的大小和图片文件格式。最后选择 Save As 就可以获得图原创 2021-11-21 19:26:28 · 598 阅读 · 0 评论 -
视频播放,DirectShow 以及 DsPack
看到 Delphi 盒子有人问视频处理的问题,这里针对此问题做一些原理上的解释。先说能做什么:1. 简单的,媒体播放器,播放本地视频文件;2. 捕获本地摄像头的视频,编码压缩,网络传输出去;网络接收视频数据,解码后显示;3. 把任意来源的视频数据,编码压缩后保存为录像文件;4. 对视频数据进行一些处理,比如,叠加字幕。5. 你能想象到的任何视频/音频处理,都能做。用 Delphi 做媒体处理,比如做一个播放器,或者做一个抓取视频,录像成文件的程序,最方便的是使用 DsPack原创 2021-11-12 23:18:49 · 3318 阅读 · 1 评论 -
基于 TEdgeBrowser 的富文本编辑器
很多年以前,基于 TWebBrowser 做了一个富文本编辑器,我也开源到 github 上了。地址:GitHub - pcplayer/IEditor: A VCL rich-editor based on Windows WebBrowser for Delphi.这个基于 TWebBrowser 的编辑器,主要是采用 MSHTML 的接口提供的功能来实现。TEdgeBrowser 不支持 MSHTML 了。所以改用 JavaScript 来实现,也可以使用更多的开源的 JavaScri原创 2021-11-09 11:05:35 · 759 阅读 · 0 评论 -
再谈 Delphi 的 LiveBindings 绑定界面元素和对象
前言:本博客前面有文章描述过如何将一个对象的属性和界面元素(比如,Label1)绑定。那篇文章写得有点复杂。这里简化一下操作过程的描述。Delphi 版本:Delphi 10.4 社区版。操作方法:1. 假设有一个类定义:TMyDev = class private FDevID: string; FDevName: string; FIsOnline: Integer; FIsSelected: Integer; public pr原创 2021-10-21 11:28:21 · 1112 阅读 · 0 评论 -
FireMonkey ListView 绑定数据显示多个图片
概述采用 Delphi 的 FireMonkey 框架,可以开发运行在 WINDOWS, Android, iOS 和 MacOS 上面的代码。其中一个比较常用的界面显示控件是 TListView。如果数据是多条,来自数据库,或者来自多个对象的对象列表(TObjectList),采用 Delphi 的数据绑定功能(LiveBindings)可以让 ListView 显示来自数据的内容。需求:ListView 显示的多条内容,每一条,可以有一个图片,有段文字,等等。Delphi 提供了几种固定原创 2021-10-18 20:07:09 · 1243 阅读 · 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 · 233 阅读 · 0 评论 -
蓝牙的一个 bug
Delphi 10.4.2 社区版。TBluetoothLE 控件,启动蓝牙设备扫描后,有两个事件:1. OnDiscoverLEDevice;发现一个设备也触发,因此会不停地触发。2. OnEndDiscoverDevices;扫描结束触发。什么是扫描结束呢?因为启动扫描是:BluetoothLE1.DiscoverDevices(ScanningTime);所以,应该就是ScanningTime 这个时间到了。可以理解为扫描动作的超时值。但是,在 WINDOWS 底下,这.原创 2021-09-24 22:13:29 · 518 阅读 · 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 · 422 阅读 · 0 评论 -
Delphi 10.4 社区版的动画有 BUG
做了个简单的小程序,主要功能有蓝牙。放了一个 TCircle 在上面,给它增加了一个 TColorAnimation 用于接收到蓝牙数据的时候,变化颜色闪烁,作为接收到数据的提示。在 WIDNDOWS 底下运行正常;在 Android 32 底下运行正常;在 Android 64 底下运行,过几分钟就会出现异常提示:raised exception class Segmentation fault (11).,然后程序就崩溃了。以为是蓝牙部分导致的问题,彻底把蓝牙部分的代码屏蔽掉,问题依旧存原创 2021-09-11 22:49:26 · 397 阅读 · 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 · 279 阅读 · 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 · 579 阅读 · 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 · 895 阅读 · 0 评论 -
使用 Indy WEB Server 支持 https
之前我在本站有博客文章,详细说明了,如何使用 OpenSSL 程序自己签发证书,用于基于 Indy 的 WebBroker 或者 WebService 程序,然后使用浏览器或者 Delphi 开发的 WebService 客户端去访问,是没问题的。但是,浏览器还是会提示,这个证书不可信。即便把这个证书,加入到客户端的 WINDOWS 的证书管理里面,也不行。(备注:网上有文章说,把证书导入到 WINDOWS 里面,浏览器的地址栏就变绿了,不会显示不可信的红色,但是我这里没有成功)。今天发现,我的 W原创 2021-08-23 18:48:07 · 732 阅读 · 0 评论