Delphi
文章平均质量分 57
看那山瞧那水
这个作者很懒,什么都没留下…
展开
-
修正TiKnob的指示箭头显示问题
iocom官方只支持到D7,但是可以运用于新版本,只测试过显示运用,没测试过OPC特性(这个在新版本运用中估计有问题)。是由于Canvas和IndicatorRect都有Left和Top属性引起的。在10.4中拖入一个TiKnob,发现“Indicator”没有显示出来,估计其它控件也有类似的问题,一般照此修改就可以。重新编译(不用重新安装),正常。TiKnob也发现BUG。原创 2023-11-09 18:05:38 · 278 阅读 · 0 评论 -
FMX的TListBox单选列表框
TListBox功能比较全,对于选择项,有“两种”模式,一种就是ListItem选中(界面上就是焦点和颜色变化),可以无,单选和多选。实际上,通过DefaultItemStyles.ItemStyle可以改变ListItem的许多样式,比如字体,颜色等等。需要一种类似TRadioBox的单选列表框。如果Item项是固定的,可以直接在TRectangle里放置TRadioBox来实现,界面还灵活。如果不考虑界面的CheckBox的方框,这样就可以了。但是如果Item项是动态的,用拼凑的实现就不灵活了。原创 2023-08-25 12:44:47 · 290 阅读 · 0 评论 -
DelphiMVCFrameWork 源码分析(三)
框架里的JWT Token 登录授权处理中间件比较简单,不支持验证码处理,签名方法也只支持一种HS(HS256,HS384,HS512),不支持RS(RS256, RS384, RS512),ES(ES256,ES384,ES512),PS(PS256,PS384,PS512)等,实际运用中还得扩充。中间件和控制器的一个主要区别是:中间件是单例模式(所有请求共用一个实例),控制器是每个请求一个实例,所以引擎在添加这二者时,中间件是添加实例,控制器是添加类型。可以看框架自带的中间件的代码,是如何实现的。原创 2023-05-13 16:03:24 · 948 阅读 · 0 评论 -
DelphiMVCFrameWork 源码分析(二)
DelphiMVCFrameWork框架的路由(Router)是通过Delphi的Attribute来实现的,作用于Controler类和方法。4、每个Controler包含一个或多个动作(Action),Action就是Controler的公开方法(public Method),同时伴随着RTTI Attribute(包含Router和其它参数)。year=2021?前面说过,在方法的MVCPath Attribute 中,参数是以"($XXXX)"标识的,所以通过正则表达式可以轻松获取参数名称列表。原创 2023-04-27 20:44:21 · 1149 阅读 · 0 评论 -
Delphi DataSnap 流程分析(二)
里分析的一样,只是到了最后,也就是方法TCustomWebDispatcher.DispatchAction(),接着进行后续处理。因而执行Dispatch := DSHTTPWebDispatcher1(TDSHTTPWebDispatcher类),这种方式只支持HTTP(普通HTTP和REST HTTP)通信,不支持TCP通信。可以看到DataSnap内部的处理还是依赖 DBX框架。这个方法比较啰嗦,要处理各种情况和格式。又到了DoCommand()方法了。客户端的方法调用处理比较繁杂。原创 2023-04-20 22:41:23 · 913 阅读 · 0 评论 -
Delphi DataSnap 流程分析(一)
好像和HTTP都没什么关系,和TDSServerTransport有关系,TCP的有个组件TDSTCPServerTransport,也看看它的继承关系。现在的方式2添加了HTTP支持,但是其实现方式不是直接通过WebModule来实现,而是转了个弯,通过桥接Indy的Http来实现。开始引入了Dispatch,到这里基本就明白了,后面的处理方式和一般的HTTP类似,只是简化了(DataSnap专用)。我们先来简要分析下方式2的流程,然后主要分析方式1的流程,方式3的流程类似方式1,就不做分析了。原创 2023-04-20 20:18:18 · 1521 阅读 · 0 评论 -
Delphi Web Server 流程分析
TIdCustomHTTPServer.DoExecute,这个方法是个复杂的处理,主要是循环处理各种HTTP 方法,解析请求头,判断请求类别,归类参数等等,然后调用DoCommandGet(子类通过此方法来具体处理),最后给客户端还回响应Response,直到连接断开。这里添加了ip6支持,然后设置IO句柄(用于https,加密,压缩等),然后是设置Scheduler(用于设置线程或纤程)。题外话:Delphi的WebBroker技术经过了多年的发展,随着大环境的发展和变化,其实现方式也不断扩展和进步。原创 2023-04-19 17:02:13 · 1264 阅读 · 0 评论 -
DelphiMVCFrameWork 源码分析(一)
正如框架名称,采用服务端的MVC架构,具体是采用了路由器(Router),控制器(Controler),中间件(Middleware)等结构,这样松耦合的结构,更有利于项目的开发和构建,也更有利用项目的扩展和维护。TMVCRenderer类里定义了各种各样的Render()方法,TMVCController是TMVCRenderer的子类,可以方便调用。对URL路由,URL参数等进行解析,找到当前执行的Controler及要执行的方法(Action)及参数等,嗯,我们可以在这里"截胡"。原创 2023-04-21 23:53:52 · 1108 阅读 · 0 评论 -
DELPHI设置Windows文件夹权限
Windows文件夹权限操作原创 2023-02-22 01:16:49 · 456 阅读 · 0 评论 -
delphi 验证码图片
参考网上的一些文章,写一个简单的自用验证码图片产生器。原创 2023-02-13 20:50:47 · 392 阅读 · 0 评论 -
扩展FMX下TGRID的TPopupColumn
FMX下的TGrid,通过扩展TPopupColumn显示枚举字段数据原创 2022-07-12 00:08:56 · 534 阅读 · 0 评论 -
(原创) Delphi中LiveBinding 绑定非数据库类数据的时候显示字段自定义名称(二)
DELPHI 10.4版本后,有关Bind的源代码修改了,原来的适用于10.3.3以前的方法不适用了,再来分析下10.4版本以后适用的方法。原创 2022-06-17 02:21:25 · 563 阅读 · 0 评论 -
(原创) Delphi中LiveBinding 绑定非数据库类数据的时候显示字段自定义名称(一)
DELPHI默认下,Grid控件通过TAdapterBindSource绑定到一个TObjectList<TObject>列表时,Grid的Header显示的是TObject的属性名称。不能像绑定数据集时显示自定义名称,我们来看看其是怎么实现的。Grid是如何绑定数据的,通过Grid的绑定类TLinkGridToDataSource,追踪到单元Data.Bind.Grid.pas。TCustomLinkGridToDataSource本身没什么相关的方法,其父类是TCustomLinkGri原创 2022-05-11 19:45:25 · 626 阅读 · 0 评论 -
Firemonkey Control的TabStop处理
Firemonkey Control TabStop原创 2022-03-11 00:00:39 · 402 阅读 · 0 评论 -
FireMonkey Control的Paint顺序
写FMX控件时,在追踪控件的绘制调用顺序的时候,研究FMX的源代码,老是看不出控件的Paint顺序,TControl的源代码里,只能追踪到源头PaintInternal(),并且PaintInternal()是不可覆盖的,然后代码里就没有看到哪里有调用PaintInternal()的地方(PaintTo(),ApplayEffect()等方法也调用了PaintInternal(),但是这个只是特别的应用Effect的调用,不是通用的调用),而且在TControl的下断点调试比较麻烦,会被其它的控件和FORM原创 2022-02-13 21:26:21 · 269 阅读 · 0 评论 -
VCL 窗体 Z-ORDER
现在基本都是在做FMX运用,最近一个项目本来也是用FMX来做,但是在做初步规划的时候发现,FMX比较麻烦,因为要和下位机通信,并且实时显示下位机送上来的数据(SOCKET通信,各种传感器的数据),波形图显示方面的控件,FMX下没找到好用的,VCL下倒是有IOCOM等工控控件可以用。决定还是用VCL来做,而且也只在WINDOWS下运用。搞习惯了FMX的界面布局,在VCL没有LAYOUT控件真感觉不方便啊。回到正题,在一个ShowModal窗体上再弹出ShowModal窗体,如果这个窗体不是需要满屏显示原创 2021-05-05 17:33:05 · 238 阅读 · 0 评论 -
Delphi DataSnap/Rest 的重定向处理
DataSnap 服务器如果需要特别的重定向请求,比如:如果客户端(不管是浏览器还是客户端App)通过特别的URL请求服务器,则可以在DataSnap的WebModule模块的Actions列表的DefaultAction(向导字段生成的)事件:procedure TWebModule1.WebModuleDefaultAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolea.原创 2021-04-22 11:31:51 · 590 阅读 · 0 评论 -
Delphi Android 下的定时对话框
一个很普通的定时对话框,比如自动更新的确认对话框,网上找了好久竟然没有,(Delphi Android下的, JAVA的一大堆,比如这个 https://github.com/MZCretin/AutoUpdateProject ,是国人写的,看着就不错,虽然看不懂)。安卓是一个很奇怪的系统,窗体都是异步的非模态的,这样实现阻塞对话框很麻烦。有人提过不要用TForm来实现对话框,用TFrame来实现,我感觉用TFrame来做也是很麻烦。看过一个高手写的DEMO,是自己“画”的,看着累。偶然看到一个帖原创 2021-04-15 23:08:24 · 429 阅读 · 0 评论 -
DSRestConnection的超时设置
DSRestConnection的超时设置新版本的delphi的DSRestConnection的属性HTTP是基于 THttpClient的,所以,超时设置就这样:DSRestConnection.Http.ConnectionTimeout := 5000还有个ReadTimeout,相当与THttpClient的的ResponseTimeout...原创 2021-03-29 20:49:15 · 240 阅读 · 0 评论 -
DataSnap的Session问题
DataSnap的Session问题DataSnap系统中,如果服务端重启或者某种原因错误,会引起客户端的Session超时错误。如果不处理,只能是客户端重启,这样不好。这里有一个帖子提到了:https://stackoverflow.com/questions/58989507/datasnap-session-has-expiredDatasnap session has expiredI've been using client server application using d转载 2021-03-29 20:11:04 · 463 阅读 · 0 评论 -
解决delphi客户端用TIDhttp POST 传参中文乱码问题(转)
用Tidhttp post方法向服务器传参,碰到中文乱码的问题。1、delphi传中文到Java是乱码。上代码:procedure TForm18.Button1Click(Sender: TObject);var userName : String ; userPwd : String ; Url: String ; Params : TStringLis...转载 2019-03-18 22:27:06 · 6687 阅读 · 0 评论 -
indy httpserver 接收URL包含中文参数乱码的问题
在测试TIdHttpServer的时候,发现浏览器提交的URL包含中文时会乱码,我用的是XE7 UPDATE1,INDY是10。procedure TForm1.idhtpsrv1CommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);原创 2016-07-06 23:53:37 · 4593 阅读 · 1 评论 -
访问受保护的属性
偶尔翻Marco Canto的书,看到这个小技巧,记下来,老是忘记这个小技巧。比如要访问TDBGrid的Col和Row属性,这两个属性是Protected,一般不能直接访问,可以这样加个套:type TFakeDBGrid = class(TDBGrid);然后:TFakeDBGrid(dbgrid1).Col; TFakeDBGrid(dbgrid1).Row;原创 2016-07-24 17:03:36 · 690 阅读 · 0 评论 -
关于线程的停止、挂起、退出(修改)
原来的实现:http://blog.csdn.net/jankercsdn/article/details/8874469 有许多不完善的地方,使用中进行了一些改动和完善,unit uHardWorkThread;interfaceuses Windows, Messages, Classes, SysUtils, SyncObjs;const WM_QUIT_HARD_T原创 2016-05-05 16:03:39 · 2439 阅读 · 0 评论 -
百度地图信息提示框的修改
一个小项目,百度地图的定制,电脑用的是触摸屏,支持手写输入,中文输入直接调用系统的虚拟键盘,手写输入是参考网上高手写的一个控件。百度的信息提示框里的搜索框里要输入查询地址,就是去哪里,到哪里那个地址输入框,要解决的问题是怎么把虚拟输入键盘的内容赋值到这个地址输入框,并要判断当前是哪个输入框。一般运用信息提示框是调用这个库“http://api.map.baidu.com/library/S原创 2015-04-30 12:08:55 · 9691 阅读 · 0 评论 -
raize控件的安装注意
重装电脑了,又要折腾DELPHI的安装了,目前用XE6,几个控件是必装的,DEV,RAIZE,TMS,FASTREPORT等。一般安装顺序是DEV,RAIZE,TMS,FASTREPORT,装完DEV后,启动DELPHI,正常,接着装RAIZE,启动,提示找不到BPL了,重装,填加路径等等,均不行,网上找原因,收藏里找相关记录,没找到,唉,折腾人。。。。。。。。原来安装也有碰到过这个问题,原创 2015-01-21 09:59:42 · 4492 阅读 · 0 评论 -
关于窗体透明的注意事项
窗体透明,控件不透明,简单有2种方法:1:OnCreate中原创 2014-11-19 09:45:32 · 481 阅读 · 0 评论 -
关于TVrScope的显示问题
项目里用到了TMS的工控控件TMS Instrumentation Workshop ,其中TVrScope简单波形显示控件的波形显示老是不理想,程序里怎么设置也不对,只好看控件源码了,创建显示点的函数procedureTVrScope.CreateGraph;调用了取显示值函数functionTVrScope.GetPlotValue(var S: string): Integer;func原创 2013-05-22 11:52:59 · 663 阅读 · 0 评论 -
关于线程的停止和挂起
在用线程的时候经常要启动和挂起,原来d7的时候可以用resume和suspend(但是,建议不要用这2个方法,因为这2个方法在操作系统层面会造成死锁),现在版本的TThread里已经把这2个方法声明为deprecated(我用的是xe2,具体不知道从哪个版本起)。原来在D7的时候要挂起线程,也没用suspend,也是自己实现。参考置顶帖(现在好象没了,只有推荐了,见 http://bbs.cs原创 2013-05-02 10:15:00 · 4148 阅读 · 0 评论 -
关于枚举电脑串口的一个小问题
一直在用Cport控件,也用了它带的一个枚举电脑串口的函数EnumComPorts(),原代码如下:procedure EnumComPorts(Ports: TStrings);var KeyHandle: HKEY; ErrCode, Index: Integer; ValueName, Data: string; ValueLen, DataLen, ValueTy原创 2013-04-25 10:51:56 · 984 阅读 · 0 评论 -
修正TiAnlogDisplay显示的问题
原来在DELPHI7下的程序移到XE2下,修修改改,总算行了。一直没注意这个TiAnlogDisplay控件,界面上用了好多这个控件,运行,显示为空,也不报错。看设计界面,也是空的,本来应当显示初始值的。用的是6.0.4 for xe2(网友自己改的),相同的源码在D7下没问题,这就奇怪了。再放个TiAnlogOuput控件(父类是TiCustomEdit),显示也没问题。这2个控件都继承自TiC原创 2013-02-25 13:43:22 · 668 阅读 · 1 评论 -
关于"ComponentDesigner.dcu"
今天又碰到了这个找不到"ComponentDesigner.dcu",源头是引用了dxsbar,它又引用了"Designwindows","Designwindows"引用了ComponentDesigner,但是delphi7默认不认识这个单元原来dev的组件是用低版本的,没这个问题,现在升级新版本,支持皮肤设计(估计的)原来的解决办法是去了这个'dssbar',不用皮肤网上找到了一个前原创 2012-09-19 10:52:41 · 1038 阅读 · 0 评论 -
关于常量参数
摘自肯图的书Constant parametersWhile it works as expected for most types, for class and dynamic array parameters, const doesn’t actually prevent thesource object or array from being modified:uses Sy转载 2012-08-10 11:07:48 · 700 阅读 · 0 评论 -
Delphi中强制IdHTTP使用HTTP1.1(转)
Delphi中强制IdHTTP使用HTTP1.1(转)标签:delphiwindows工具server2011-07-18 07:46952人阅读评论(0)收藏举报分类:Delphi IdHttp控件(29)前两天帮人写程序用IdHTTP控件往一网站发包如下:Delphi代码IdHTTP1.Request.Connection:='Keep-A...转载 2019-03-18 22:15:45 · 2216 阅读 · 0 评论 -
关于类构造器的注意点
DELPHI的类构造器class constructor 注意点。class constructor 的一般行为和initialization 行为一样,但有一点区别,就是不能在class constructor中注册自己,在initialization 中可以,见示例:unit Unit2;interfaceuses System.SysUtils, System.Cl...原创 2019-03-22 10:50:46 · 286 阅读 · 0 评论 -
Delphi中的观察者模式运用
delphi message原创 2017-10-30 15:31:17 · 1127 阅读 · 0 评论 -
FMX从TCustomXXX继承控件的子控件,无法同时显示的问题
这个问题,我在盒子发了,也没有满意的结果。(http://bbs.2ccc.com/topic.asp?topicid=535134)模仿FMX的标准TPanel控件(这个控件没有什么实现的代码),自己写了个Panel,可以实现改变颜色及Stroke等属性,就是增加这几个属性: //Appreance property Fill; pr原创 2017-07-31 01:49:33 · 793 阅读 · 0 评论 -
Window版本
http://blog.csdn.net/wjkaola123/article/details/51721348 GetVersionEx, 该方法在WIN8.1以后无效 参看: https://msdn.microsoft.com/en-us/library/ms724451.aspxmicrosoft提供的版本帮助https://msdn.micros转载 2017-08-12 13:56:05 · 493 阅读 · 0 评论 -
任意改变FMX的TPanel控件的颜色
FMX的控件的外观以Style为主,但是也有不方便的地方,比如要任意改变TPanel的颜色,只能写代码,摸索了几天,初步实现了unit FMX.JKPanelEx;interfaceuses System.SysUtils, System.Classes, System.Types, System.UITypes, FMX.Types, FMX.Controls, FMX.Ob原创 2017-07-17 02:00:35 · 3275 阅读 · 0 评论 -
FMX的Style中的Effects的注意问题
delphi中,当我们在IDE的窗体中添加控件时,会自动把相关单元加入uses的,所以一般不用考虑这个问题。但是,如果你在设计Style时,在Style里用了Effects(不是自带控件Style里的effects),程序运行时,会出现找不到你所修改的effect类的致命错误。这是因为uses缺少了FMX.Effects 和 FMX.Filter.Effects 这两个单元,但是delp原创 2017-07-15 19:42:45 · 1386 阅读 · 0 评论