Delphi
文章平均质量分 60
蝈蝈(GuoGuo)
这个作者很懒,什么都没留下…
展开
-
关于Delphi 10.4.2 TIdTCPServer 的多线程通信使用
至于多线程,官方文档就有说明,其实TIdTCPServer运行过程中,当客户端连接成功后默认就是基于TIdSchedulerOfThreadDefault调度分配线程模式,为每个客户端连接都分配单独的处理线程,由于Windows线程的限制,Indy 似乎还有一种特殊的模式TIdYarnOfThread来代替传统线程,至于TIdYarnOfThread这里不做研究,开始上代码。这里主要是做一些自定义类断开连接要处理的事情,这里就省略了。当我测试多个客户端连接时问题就来了,线程会一直锁死。原创 2024-09-22 15:08:23 · 207 阅读 · 0 评论 -
Delphi TDictionary字典类
ws2.range['E' + inttostr(k) + ':K' + inttostr(k)].value := VarArrayOf([temparr[0],temparr[5], temparr[1], temparr[2], '新刀具区', 0, temparr[4]]);上面的代码,把字典里的K,V用"@"符号拼接了起来,塞进一个TStringList类里.字典不可以排序,但是TStringList可以啊,只是在使用里,需要SPLIT一下元素才行。// 将字典的键(唯一元素)转换为数组并返回。原创 2024-09-14 19:46:08 · 487 阅读 · 0 评论 -
fdMemTable内存表进行SQL查询
fdLocalSql可以对fdMemTable内存表进行SQL查询(可以对多个fdMemTable内存表进行联表查询哦),fdLocalSql使用SQLITE引擎,而FIREDAC驱动SQLITE,连SQLITE驱动DLL都不需要附带的。2]可以设置多个内存表,FDMemTable1,FDMemTable2。原创 2024-08-27 09:40:21 · 792 阅读 · 0 评论 -
delphi fireDAC+SQLite 在多线程下笔记
实际测试,分别建立50个读和50个写线程,同时读写,Synchronous=off 的情况下,数据仍然是同步的,其他线程写的时候,读线程仍然可以立即得到最新的数据状态。仍然是接受sqlite的建议,在数据安全要求不太严的情况下,设置为off模式,网上有人测试,讲off比full模式,效率要高50倍以上。特别是主线程需要注意。开启 WAL后,在 Synchronous = Normal 下,速度仍然非常快,但是,会有一定概率,同一时间读写同一条数据时,读出来的是写入之前的数据。原创 2024-08-24 22:15:33 · 235 阅读 · 0 评论 -
Delphi线程同步(临界区、互斥、信号量)
顺便总结Application.ProcessMessages的作用:运行一个非常耗时的循环,那么在这个循环结束前,程序可能不会响应任何事件,按钮没有反应,程序设置无法绘制窗体,看上去就如同死了一样,这有时不是很方便,例如于终止循环的机会都没有了,又不想使用多线程时,这时你就可以在循环中加上这么一句,每次程序运行到这句时,程序就会让系统响应一下消息,从而使你有机会按按钮,窗体有机会绘制。它是在互斥的基础上建立的,但是信号量增加了资源计数的功能,预定数目的线程允许同时进入要同步的代码。这两个过程的声明如下。原创 2024-08-17 23:38:54 · 964 阅读 · 0 评论 -
TStopwatch属性及方法
IsRunning: Boolean - 获取或设置一个值,表示Stopwatch是否正在运行。Elapsed: TTimeSpan - 返回已执行代码的时间,以秒为单位,具有微秒精度。ElapsedMilliseconds: Double - 返回已执行代码的总毫秒数。在这个例子中,我们在窗体创建时开始计时,销毁时停止计时,并输出总执行时间(毫秒)。Reset: 无 - 重置Stopwatch,将Elapsed属性设置为0。Start: 无 - 开始计时。Stop: 无 - 停止计时。原创 2024-08-09 18:03:09 · 343 阅读 · 0 评论 -
IdSchedulerOfThreadPool用法和想法
其实用起来也还比较简单,主要是实现了维护一个线程池的功能,功能不是很强。TIdYarnOfThread(in IdSchedulerOfThread.pas) 需要强制转换的类,只有强制转换后才能访问到线程Thread对象,使用Synchronize来访问VCL控件。TIdTask(in IdTask.pas) 需要用户继承实现的类,实现参数的传入,及具体的run、BeforeRun、AfterRun功能代码。操作你会发现,线程池是用抛出异常来实现,因此你需要捕获异常来进行线程池满的处理。原创 2024-07-24 07:43:27 · 269 阅读 · 0 评论 -
Delphi - Indy TIdThreadComponent 线程研究
StopMode:这里分为Terminate和Suspend两种,Terminate为强行终止,Suspend为延缓、等待终止。为了优化用户体验,采用了Indy 自带的IdThreadComponent控件,完美的解决了此问题。Active:默认False,当需要令IdThreadComponent控件生效时,置为True;前几天在开发数据实时解析功能模块的时候,发现解析数据量巨大,特别耗时,程序一跑起来界面假死。TIdThreadComponent用的是观察者模式,所有这里的事件都是回调事件。原创 2024-07-24 07:27:19 · 357 阅读 · 0 评论 -
Delphi开发 Android 程序启动画面简单完美解决方案
3、制作一个真实的 Splash 启动画面的图片,如果是分辨率真按1080的话,就是1080×1920,如果是按470画的话,就是470×836。1、先创建一个470×320像素的空白图片,保存到工程的某个目录下,如 Images,假设我们命名为 Splash470x320.png(其它分辨率类似,实际在720p(荣耀 4x )/1080p( Mate8 )/2K(小米Note Pro)屏下调用的都是它,别的好象没有用,所以随意放几个空白图片好了)。3、方案还不够完善,需要较多的步骤;原创 2024-07-21 06:50:49 · 173 阅读 · 0 评论 -
Delphi 11.2 配置Android SDK 环境
这里如果配置64位就选 Android 64-bit,如果配置32位就选 Android 32-bit。有警告图标的就是有问题的项,需要手动更新一下,点击每一行后面的…,仿照选择对应的路径。点击 Select an SDK version–Add New…然后稍等一下让他更新一会,等待警告符号都消失以后点击 Finish。然后点击 Deployment–SDK Manager–Add…点击 Tools–Options…手动修改完以后点击 Next。打开 Delphi 11。原创 2024-07-20 20:56:22 · 447 阅读 · 0 评论 -
Flexcel学习笔记
Felxcel笔记原创 2024-07-10 09:30:17 · 376 阅读 · 0 评论 -
cxGrid合计忽略重复记录
/cxGrid1DBBandedTableView1->DataController->Summary->FooterSummaryItems->OnSummary 事件。//重新打开数据集前清空lstCust。//存放不同的客户编号记录。//创建lstCust对象。//记下之前未出现过的客户编号。//释放lstCust对象。//lstCust.Count就是不同的客户数。//只对colaCustNo列的合计进行处理。//合计Item的OnGetText 事件。原创 2024-06-15 10:27:50 · 547 阅读 · 0 评论 -
delphi清理程序占用的内存,真的有效果.
找了二天没有处理好是什么没有释放.直接调用该函数.发现系统占用内存减少了.再也不怕占用内存太多,导致程序异常了.//DELPHI清理释放内存小代码。原创 2024-06-05 08:13:30 · 298 阅读 · 0 评论 -
调用WINDOWS的TTS接口,将你的文字变成Wav文件
【代码】调用WINDOWS的TTS接口,将你的文字变成Wav文件。原创 2024-06-04 23:14:58 · 224 阅读 · 0 评论 -
通过lame_enc.dll实现将Wav转为mp3格式.wav要求是16bit
【代码】通过lame_enc.dll实现将Wav转为mp3格式.wav要求是16bit。原创 2024-06-04 22:38:10 · 849 阅读 · 0 评论 -
通过ffmpeg 将wav格式转为mp3格式.
通过ffmpeg实现将wav转为mp3格式.需要下载一个ffmpeg放到执行文件所在目录.是一个功能强大的多媒体处理工具,它支持大量的输入和输出格式,以及多种编解码器。由于其功能的多样性,ffmpeg的参数列表也非常丰富。以下是一些常用的ffmpeg。原创 2024-06-04 23:05:18 · 1020 阅读 · 0 评论 -
FireDAC与ADO读写数据的性能测试
数据库连接组件,支持三种连接方式:1.持久定义(有一个唯一名称和一个配置文件,可以由FDManager管理)3.临时定义(没有名称和配置文件,不能由FDManager管理,运行时将参数写入params属性)发现它完全可以同UNIDAC相媲美,但UNIDAC购买费用是几万美刀,而FIREDAC是免费的。fd读取数据用时2438毫秒,ado用时5590毫秒。fd读取数据用时1988毫秒,ado用时5548毫秒。fd读取数据用时363毫秒,ado用时783毫秒。fd读取数据用时10毫秒,ado用时553毫秒。原创 2024-05-23 07:10:04 · 657 阅读 · 0 评论 -
用TIDTcpClient发送以及接收信息
【代码】用TIDTcpClient发送以及接收信息。原创 2024-04-23 12:25:40 · 707 阅读 · 0 评论 -
Delphi Xe 10.3 钉钉SDK开发——审批流接口(获取表单ProcessCode)
Log.Debug(dk.GetProcessCode('ERP客户订单'),'debug');dk.Getappsecret := '你企业钉钉的Appsecret';dk.Getappid := '你企业钉钉的APPID';二、接口获取:今天的重点,不说了,直接上代码。ProcessCode后面就是了!中年大叔学Delphi。原创 2024-04-16 21:17:05 · 566 阅读 · 0 评论 -
Delphi TDictionary字典类
ws2.range['E' + inttostr(k) + ':K' + inttostr(k)].value := VarArrayOf([temparr[0],temparr[5], temparr[1], temparr[2], '新刀具区', 0, temparr[4]]);上面的代码,把字典里的K,V用"@"符号拼接了起来,塞进一个TStringList类里.字典不可以排序,但是TStringList可以啊,只是在使用里,需要SPLIT一下元素才行。Add:向字典中添加一个键和其对应的值。原创 2024-04-07 06:36:38 · 1159 阅读 · 0 评论 -
delphi 设置win10 dpi 缩放规则
假设现在有一个软件界面(宽为950像素,高为700像素),该软件在24寸、分辨率为1900*1400的显示器上显示正常,但放到高dpi显示器(同样是24寸,但分辨率为3800*2800)上显示效果会如何?比如一个32寸的显示,但分辨率只有1920*1440,而一个24寸的显示器,分辨率却达到3840*2160,很明显后面这个显示器的每英寸的像素点的个数多,显示的画面更加细腻。同样,在系统dpi缩放改变时,系统也不会将软件进行缩放拉伸,但软件会收到WM_DPICHAN。所以:高分辨率不等于高dpi。原创 2024-04-04 06:08:00 · 609 阅读 · 0 评论 -
delphi windows 程序DPI缩放设置
win10,win7系统里 程序经常变形,很可能是 windows 缩放比例大于100%,设置windows缩放比例比较麻烦,可以通过注册表设置程序的DPI缩放比例。原创 2024-04-04 06:06:38 · 398 阅读 · 0 评论 -
Flexcel笔记
1.引入:2.原创 2024-03-26 07:58:26 · 280 阅读 · 0 评论 -
TStopwatch属性及方法
在这个例子中,我们在窗体创建时开始计时,销毁时停止计时,并输出总执行时间(毫秒)。原创 2024-03-04 08:49:43 · 289 阅读 · 0 评论 -
delphi android打开pdf
另外,如果您需要更强大的PDF编辑和显示功能,可以考虑使用其他第三方组件,如SynPDF或VCL for PDF。在Delphi开发的Android应用程序中打开PDF文件,您可以使用第三方组件,如TeePDF、SynPDF或VCL for PDF等。另外,如果您希望在Android设备上直接打开PDF文件,而不需要在应用程序中显示,可以使用Intent来启动系统的PDF查看器。在这个示例中,我们创建一个Intent来启动系统的PDF查看器,并传递PDF文件的路径。首先,您需要下载并安装TeePDF组件。原创 2024-03-01 09:25:29 · 308 阅读 · 0 评论 -
Delphi XE2 新控件 布局Panel TGridPanel TFlowPanel
TGridLayou:表格,自动排列容器里的控件,控件大小相同可自定义大小,设定后全部控件大小相同且不变,x行y列,行数列列数根据控件大小变动。TFlowPanel的效果图,里边是panel,左侧是TCategoryButtons,搜索框是TButtonedEdit。堆栈Panel,一行只有一个控件(不能多列),或一列只有一个控件(不能多行)不需要些代码计算左边,自动水平居中 垂直居中 ,横向纵向居中!原创 2023-11-06 09:08:37 · 671 阅读 · 0 评论 -
delphi 使用TFlowPanel容器,实现对内含控件进行自动排版
还有一点需要注意的是,当改变tflowpanel的大小时,其中的控件不能自动重排。2,在其中添加一个tflowpanel,设置align为altop,autosize为true,autowrap为true。1,先添加一个Tscrollbox,设置其align为alclient。autosize默认为false,不用改动。然后往下找到Margins属性,进行设置.设置好后,复制粘贴这个TscGPEdit任意次,然后就可以看到效果了。1.TFlowPanel设置好合适的对齐,其他基本上不用怎么设置,默认即可。原创 2023-11-06 08:59:49 · 393 阅读 · 0 评论 -
delphi 实现Ribbon风格的窗体
设置dxRibbon的ApplicationButton.Menu属性为dxBarApplicationMenu,双击dxBarApplicationMenu控件的ItemLinks属性,在屏幕左上方会发现一个小窗口,这个窗体就是用来做ApplicationMenu的,向里面添加按钮和组即可。首先,Delphi本身并没有Ribbon风格的窗口可以直接拿来使用,而市面上很多类似于Ribbon的风格都是用截图法做出来的,那样做很麻烦,而且对于图片的控制要求非常高。接下来,继续设置控件的属性。原创 2023-04-14 15:26:51 · 802 阅读 · 0 评论 -
DevExpress VCL 动态加载皮肤换肤示例,支持Ribbion
对于Ribbion控件,经实际测试,要在换肤前将其ColorSchemeName设置为'UserSkin',加载皮肤后,再将其ColorSchemeName设置为皮肤的名称,否则可能看不到效果。本例使用了外部皮肤加载,将皮肤资源文件'AllSkins.skinres'进行动态加载,该文件包含DevExpress控件官方自带的所有皮肤,以减小可执行文件大小。原创 2023-03-04 21:35:40 · 967 阅读 · 0 评论 -
DevExpress皮肤引用的办法
二. 从Dev Express 项下选择dxSkinController控件,添加到工程,设置dxSkinController1的SkinName属性设为:UserSkin;Editor 对话框,从列表中,只选择: UserSkin这一项,取消Enable skin Support的勾,三. 代码:(对RES皮肤有效,在程序文件夹里需要先建一个叫Skin的文件夹)str:='Xmas2008Blue.skinres';点OK退出. (注意:此步骤需DEV40以上版本才有效)原创 2023-03-04 21:13:52 · 994 阅读 · 0 评论 -
Delphi XE 10.4.2 IDE 设置----【代码格式化】
使用IDE自带的代码格式化(CTRL+D),默认为80。经常一格式化变成很短的两行。原创 2023-02-19 08:23:13 · 458 阅读 · 0 评论 -
Delphi 10.4.2使用传统代码提示方案(auto complete)(转)
与以前的版本相比,在10.4.2中LSP为Delphi的错误洞察添加了许多新功能:编辑器现在为提示和警告以及错误显示彩色下划线,这意味着您可以在代码编辑器中看到潜在的重要问题,编辑器状态栏中当前文件的错误、警告和提示状态的摘要;以及几种突出显示问题代码的新方法,使查看有问题的代码更加容易。现在就改回了原来的代码提示方案,好消息是已经进入内测的10.4.2,重点还是增加与改进LSP的功能,坏消息是不确定能否达到实用状态,只能等发布后实际用下才能知道,不过从内测的说明中可以看到,真是增加与改进了不少功能。原创 2023-02-19 08:18:12 · 946 阅读 · 0 评论 -
Delphi10.4.1与CnWizards代码输入助手兼容问题
Delphi 10.4.1的Code insight manager默认使用Language Server Protocol,造成代码输入助手不能快速的进行语法提示,对于delphi自带的组件属性提示的比较慢,对三方组件基本上就失去了提示功能,这个问题,对于我们这些懒人,影响比较大。解决方法是,使用Classic Code Insight,并去除Tooltip symbol insight和Error insight,这样就恢复到以前的状态了,代码输入助手又可以快速响应了。原创 2023-02-19 08:13:01 · 322 阅读 · 0 评论 -
delphi 在代码中 添加 TO-DO 并且 管理
采用她可以让我们很清楚的了解以前完成了那些任务,还有哪些任务需要做,由谁负责完成,是不是比较紧急的任务等。今天来不及完成的,明天上班就可以很快的找到任务所在的位置。右键菜单【Filter】,只需要将不想显示该所有者的名字前的√取消,按OK返回,在显示列表中就仅仅显示你想要看的所有者的任务项。说明:在不同模块中的任务项显示的时候是不同的:粗体显示的为当前正在编辑模块中的任务项;已完成任务,在任务项前面的CheckBox中会显示√,同时任务项的文本会有一条删除线,没有显示的表示未完成。原创 2022-11-09 07:13:08 · 343 阅读 · 0 评论 -
delphi XE基于SSL的HTTPS服务器应用程序的认证文件(Certificate.cer、CACertificate1.cer、PrivateKey.key及OnGetPassword)的配置
SSL(Secure Sockets Layer安全套接层,属协议层),其继任者TLS传输层安全(Transport Layer Security:TLS:属协议层)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密提供协议(:协议:标准和规范)。原创 2022-09-18 07:34:23 · 830 阅读 · 0 评论 -
Delphi 2009:如何在Vista下的Windows服务和桌面应用程序之间进行通信?
使用Indy,您可以相对轻松地在应用程序之间创建TCP连接.特别是如果你只需要发送字符串消息.对于客户端(在您的情况下是桌面应用程序),它基本上是。IIRC只允许服务具有图形用户界面或具有网络访问权限,因此如果您的服务需要GUI(这应该避免,请参阅此。),这可能是一个问题.我不知道Windwos Vista及其后来如何处理这个问题.对于服务器(在您的情况下将是服务)原创 2022-09-08 07:14:43 · 475 阅读 · 0 评论 -
fdquery update
this->FDQuery1->CachedUpdates;this->FDQuery1->UpdateOptions->KeyFields;this->FDQuery1->UpdateOptions->UpdateTableName;this->FDQuery1->ResourceOptions->StoreItems;this->FDQuery1->ApplyUpdates()原创 2022-09-07 08:22:28 · 427 阅读 · 0 评论 -
Delphi 学习了解FireDac【缓存更新、记录的状态之UpdateStatus】
然后发现表格中并没有数据,接下来点击 cxGrid 中的 Customize ,然后在右边找到 Columns 可以手动添加点击右边的Add,或者直接检索表中字段点击右边的 Retrieve Fields ,这时候字段就有了。StatusBar1.Panels[0].Text := '无改动--' + FDQuery1.ChangeCount.ToString;这些东西设置完了就可以啦,然后会发现删除的没有显示出来,默认的是不显示的,我们再来添加两个Button,来让他们显示和恢复默认。原创 2022-09-07 08:19:38 · 1037 阅读 · 0 评论 -
FIREDAC FDConnection 连接池 连接串
一、FDConnection 连接池http://docs.embarcadero.com/products/rad_studio/firedac/frames.html?frmname=topic&frmfile=Defining_Connection.htmlhttp://docwiki.embarcadero.com/RADStudio/XE8/en/Defining_Connection_%28FireDAC%29http://docwiki.embarcadero.com.原创 2022-05-29 07:31:11 · 1855 阅读 · 0 评论 -
使用 TFDConnection 的 pooled 连接池
使用 TFDConnection 的 pooled 连接池从开始看到这个属性,就一直认为他可以提供一个连接池管理功能, 苦于文档资料太少, 甚至在帮助中对该属性的使用都没有任何介绍,如果你搜索百度,也会发现基本没资料。最后终于在其官方网站看到了其完整相关的英文资料,虽然没有正面介绍该属性,但却是要启用该属性的详细方法:Defining Connection (FireDAC)GeneralAconnection definitionis a set of parameters tha..原创 2022-05-29 07:20:57 · 477 阅读 · 0 评论