
Delphi
文章平均质量分 76
tht2009
这个作者很懒,什么都没留下…
展开
-
技巧笔记:Algin属性设置顺序问题
程序界面设计中都会使用到控件的Align属性,有时一个容器中需要设置相同Align属性的多个控件,但每次依次设置Align的属性,却发现其实际顺序并不是自己想要的。这里面其实有个技巧:1,对于Align=Top,我们需要确保控件在设置Align前,其Y坐标值大于之前的控件;2,对于Align=Left,我们需要确保控件在设置Align前,其X坐标值大于之前的控件;3,对于Ali原创 2017-06-14 19:19:42 · 954 阅读 · 0 评论 -
Delphi汇编基础
The registers are set with values before entering the function or procedure. How these are set depends on how the function or procedure was defined. There are two possibilities.Stand alone, or e转载 2016-08-15 10:40:33 · 1009 阅读 · 0 评论 -
Delphi编译器属性(特别修饰符)
delphi中常量参数就像一个本地常量,或者说只读变量。常量参数与值参数类似,除了不能在过程或函数体内给常量参数赋值,并且不能将常量参数传给另一个var类型参数。(但是,如果你常量参数传递的是一个对象引用,你还是可以修改这个对象的属性的)使用const使得编译器能够为结构体和字符串类型的参数优化代码。而且它也提供了一种保护,防止无意中传递了一个参数引用到其他过程。常量参数可能以值方式或引用原创 2016-01-05 21:54:20 · 1755 阅读 · 0 评论 -
扩展IDE——为翻译OC头文件增加编写模板OCImport
扩展IDE——为翻译OC头文件增加编写模板OCImport原创 2016-06-25 23:56:00 · 1746 阅读 · 0 评论 -
Delphi快捷键
Delphi 快捷键(基于万一博客增加修改)分类快捷键解释备注组件设计类Escape选择当前组件容器 Shift + Click选择多个组件;选择窗体 Tab选择下一个组件 Shift + Tab选择原创 2016-03-28 15:28:55 · 853 阅读 · 0 评论 -
窗口的子类化与超类化
窗口的子类化与超类化——子类化是窗口实例级别的,超类化是在窗口类(WNDCLASS)级别的1. 子类化 理论:子类化是这样一种技术,它允许一个应用程序截获发往另一个窗口的消息。一个应用程序通过截获属于另一个窗口的消息,从而实现增加、监视或者修改那个窗口的缺省行为。子类化是用来改变或者扩展一个已存在的窗口的行为、而不用重新开发的有效途径。想要获得那些预定义控件窗口类(按钮控件、编转载 2016-04-07 21:39:25 · 1126 阅读 · 0 评论 -
IP编辑控件
最近需要用一个IP输入控件,网上找了几个,都不符合效果,有些还有一些奇怪的Bug。后来发现原来系统已经提供了IP地址编辑控件,只是系统提供的控件不能设置只读效果。网上找了下资料,封装了一下,自己迂回一下实现了只读效果。unit ueIPEdit;interfaceuses System.SysUtils, System.Classes, Vcl.Controls, Winapi.W原创 2016-02-02 15:02:39 · 1666 阅读 · 4 评论 -
Firemonkey扩展增强:iOS 实现程序运行时更改锁定显示方向(LockOrientations)
1、为不同的form指定不同的支持方向。2、动态(运行时)强制更改显示方向。原创 2015-12-09 22:21:39 · 2887 阅读 · 1 评论 -
Delphi货币类型转中文大写金额
在Delphi中,为了实现货币数值运算中的严格精度要求,内部把货币类型数据当作一个放大10000倍的64位整数来处理。这样根据64位整数的范围,可以得出货币类型Currency的范围是 [-922337203685477.5807; 922337203685477.5807]。货币类型一个最常见的应用场景是金额大写转换,网上都是一些先将货币转字符串后再对字符串处理的代码,而且有些方法在有些情况原创 2017-06-15 15:03:30 · 2519 阅读 · 0 评论 -
Firemonkey扩展增强:自定义Cursor
在VCL中很容易通过Screen.Cursors加载自定义cursor,但在FMX中,cursor是通过IFMXCursorService管理的,只支持系统默认的cursor。如果要加载自定义的cursor,我们需要替换平台默认实现的IFMXCursorService。Windows平台源码如下:unit uWinCursorService;interfaceuses FMX.Pl原创 2015-11-11 19:58:03 · 1769 阅读 · 0 评论 -
FMX调用JAR里的JAVA类Init方法
本文背景:Delphi XE10.3RIO由于FMX的JNIBridge将init作为默认的JAVA对象构造函数名,JAR中如果有方法名为init的类方法,FMX都会映射为构成函数,造成调用失败。这一问题需要官方修改Androidapi.JNIBridge单元的MethodIDFor方法逻辑,这里给出一个临时的Fix方法。unit TU2Helper.Android;interfa...原创 2019-02-11 15:14:24 · 807 阅读 · 0 评论 -
Delphi内存对齐
本文环境Delphi XE 10.2 我们知道在Delphi中,全局变量存储在应用程序数据段中,其生命周期直至整个应用进程终止;局部变量存储在应用程序栈中,其生命周期直至当前声明的函数方法返回;以GetMem,New等方法动态申请的内存由堆分配,其生命周期直至以FreeMem或Dispose方法销毁;长字符串(Long string), 宽字符串(wide string), 动态数组(dynam...原创 2018-06-01 16:23:50 · 1093 阅读 · 0 评论 -
Firemonkey扩展增强:iOS/Android使用贝塞尔曲线绘制签名(笔迹)
Firemonkey扩展增强:iOS/Android使用贝塞尔曲线绘制签名(笔迹)原创 2017-09-21 16:56:04 · 1917 阅读 · 9 评论 -
Firemonkey扩展增强:Android 浏览器支持Input file标签上传功能
Delphi XE10.2 Tokyo Firemonkey自带的浏览器TWebbrower控件在Android平台上只是简单继承封装了Android系统本身的WebView组件。Android WebView 由于安全等原因本身并没有实现input标签的选择文件功能,而是预留了一个setWebChromeClient方法来设置替换默认的Chrome处理器。原创 2017-08-07 12:43:42 · 2159 阅读 · 1 评论 -
Firemonkey扩展增强:Android 浏览器执行JavaScript获取结果及JavaScript调用本地方法
本文写作背景:delphi XE10.1Firemonkey自带的TWebBrower对于JavaScript的交互支持一直不是很好,仅仅提供了一个本地执行JavaScript的方法EvaluateJavaScript,而且该方法不提供JS执行的返回结果。在安卓平台上,EvaluateJavaScript是通过WebView的loadUrl('javascript:' + JavaScri原创 2017-01-06 13:56:57 · 4945 阅读 · 1 评论 -
Firemonkey扩展增强: iOS 运行时更改锁定显示方向(增强版)
之前在这里介绍过Firemonkey如何在运行时更改和锁定iOS设备的显示方向。这里给出一个改良优化的版本,增加考虑原先支持显示方向以减少不必要的重绘。原创 2016-03-12 18:27:22 · 1163 阅读 · 0 评论 -
Firemonkey扩展增强: iOS 访问钥匙串Keychain
项目中需要区分iOS设备,但是苹果已经封了获取UDID和MAC的API,目前可行的方案是在钥匙串Keychain中存储自己产生的唯一标识,如GUID。关于iOS的唯一标识技术解决方案比较参见:这里苹果官方钥匙串开发指导参见Keychain Services Programming Guide。Firemonkey目前并没有为我们封装好Security.framework,看了苹果官方的...原创 2016-03-12 17:48:45 · 2372 阅读 · 4 评论 -
FindChildControl与FindComponent
前两天编码遇到了要使用FindChildControl方法获取指定名称的TSpeedButton按钮,结果折腾了半天就是没得结果(基础不扎实,呵呵),于是赶紧搜索了下,补习关于这两个方法的用法。 TWinControl类的FindChildControl方法在FWinControls中查找返回指定名称的可视且有窗体的组件(继承自TWinControl类)。该方法可以确定当前控件是否原创 2011-11-11 16:31:44 · 10697 阅读 · 0 评论 -
delphi与变长参数——开放数组(2)
上接delphi与变长参数——开放数组(1) 当过程或函数使用数组参数时,不能在声明参数时包含索引说明符。也就是说,声明定义下面函数将产生编译错误。procedure Sort(A:array[1..10] of Integer);//语法错误 但使用下面这种方法是有效的。但在大多数情况下,开放数组参数是更好的办法。type TDigits=array原创 2011-11-30 22:06:02 · 3254 阅读 · 0 评论 -
项目总结(二)——改进的延时函数Delay
解决上一节中延时函数占CPU使用率(达50%)的第二种方法是利用消息机制,通过API函数MsgWaitForMultipleObjects等待消息或超时的到来,从而避免使用循环检测使CPU占用率过高。完整的改进版Delay函数代码如下: procedure Delay(dwMilliseconds:DWORD);var endTick: DWORD; Event: THan原创 2011-08-14 10:46:14 · 3051 阅读 · 0 评论 -
项目总结(一)——延时函数Delay
暑假花了一个多月的时间,和另一个同学合作完成了《实用英语语音教程》一书的配套辅助学习系统的开发,以下是我完成这一项目后的一些总结,记录实际项目编程中的一些知识。 项目实际需求介绍(1)题目:听录音,标出被朗读的单词。(2)说明:每小题有四个选项,随机朗读其中的两项,一个界面放5小题,播放完自动显示下5题内容。如下图所示: (3)要求:播放每题的两个选项(单词)之间,每小原创 2011-08-14 10:27:51 · 8296 阅读 · 1 评论 -
项目总结(三)——复制文件时显示进度对话框
实际需求介绍: 由于本系统将采用光盘随书分发,故写了个光盘运行菜单程序,使用户可以选择安装和快捷浏览部分文件。本来这个菜单程序功能也没什么,很容易实现。谁知最后客户突然要求加个菜单项来拷贝音频文件,这就麻烦了,音频文件有600MB,使用CopyFile函数肯定不行,这么大肯定需要一些时间,这么长时间总不能不给点提示让用户干等吧!而我又是一个很懒的人,不想自己去实现进度显示功能,很想原创 2011-09-06 16:14:49 · 7295 阅读 · 0 评论 -
Delphi 的接口机制——接口操作的编译器实现过程(2)
接口对象的内存空间 假设我们定义了如下两个接口 IIntfA 和 IIntfB,其中 ProcA 和 ProcB 将实现为静态方法,而 VirtA 和 VirtB 将以虚方法实现:IIntfA = interface procedure ProcA; procedure VirtA; end; IIntfB = interface原创 2011-09-11 21:07:02 · 1306 阅读 · 0 评论 -
Delphi 的接口机制——接口操作的编译器实现过程(1)
学习COM编程技术也快有半个月了,这期间看了很多资料和别人的程序源码,也尝试了用delphi、C++、C#编写COM程序,个人感觉Delphi是最好上手的。C++的模版生成的代码太过复杂繁琐,大量使用编译宏替代函数代码,让初学者知其然而不知其所以然;C#封装过度,COM编程注定是要与操作系统频繁打交道的,需要调用大量API函数和使用大量系统预定义的常量与类型(结构体),这些在C#中都需手工声明,不原创 2011-09-11 20:32:00 · 2139 阅读 · 0 评论 -
关于表格控件的OnDrawCell事件
前段时间写一个程序多次用到了表格控件显示数据。一般我们用表格控件来显示字符串和相关对象能使操作简单化。在窗体中添加一个TStringGrid对象,可完成文本数据的表格化。TStringGrid组件提供了许多可控制网格外观的属性,以及利用表格的结构响应用户操作的事件和方法。TStringGrid具有关联对象与网格中的每个字符串的作用,这些对象为用户封装了字符串表示的信息或行为。 由于要将指原创 2011-04-13 21:56:00 · 4228 阅读 · 0 评论 -
delphi与变长参数——开放数组(1)
与C/C++不同,Delphi中是通过可变类型(TVarRec)的开放数组来指定变长参数的。其实这里已经不能称“变长参数”了,因为实际上只传递了一个参数,只是该参数是由多个基础类型数据构成的一个开放数组。Delphi使用开放数组来容纳不定数目的参数,使用可变类型(TVarRec)表示各种类型数据,因此二者的结合可以达到C/C++中变长参数的功能。 TVarRec是一个记录类型,该记原创 2011-11-30 15:48:29 · 8345 阅读 · 0 评论 -
ListView列宽自适应
使用TListView列表显示内容,如果列内容过长,就会显示成‘XXX…’形式,此时如果双击列标题,列宽将变为自适应。用代码设置如下:1、设置ListView.Column[0].Width := -1;//列宽根据列内容自适应,此时保证列内容都可见。2、设置ListView.Column[0].Width := -2;//列宽根据列标题自适应,此时保证列标题可见。原创 2013-04-01 21:00:51 · 13938 阅读 · 7 评论 -
Firemonkey使用iOS的第三方静态库(Link Binary With Libraries)
最近需要从内存流中直接播放音频,想到了使用第三方音频播放库bass。在windows上可以很方便的使用相应动态库(具体参考万一的博客),但在iOS上却没有相应的使用介绍,准确的说是没有用于Firemonkey上的示例。在它官方论坛找到一个用于OSX的Demo,通过分析和测试,研究出了Firemonkey在iOS开发上使用第三方静态库的流程和方法。下面以在Delphi XE10上使用bass的静态库...原创 2015-12-05 14:24:14 · 10096 阅读 · 1 评论 -
TWebBrowser控件使用指定IE版本显示网页
好记性不如烂笔头,转自QQ群。procedure IEEmulator(VerCode: Integer);var RegObj: TRegistry;begin RegObj := TRegistry.Create; try RegObj.RootKey := HKEY_CURRENT_USER; RegObj.Access := KEY_ALL_ACCESS转载 2015-11-20 10:37:34 · 4769 阅读 · 0 评论 -
IOS开发之免费证书+不越狱真机调试
本文转自:http://www.cnblogs.com/weii/p/4688299.html苹果发布Xcode7后, 开放了普通的AppleID也能真机调试,非$99 或 $299, 只要能上AppStore下载应用的AppleID就行了。关于Mac系统及Xcode的安装如果不会请参照原文描述,这里只介绍利用Xcode7和普通AppID生成免费证书、Profile。文中测试环境是转载 2015-09-20 17:50:01 · 31778 阅读 · 1 评论 -
delphi android Toast
功能:Android Toast提示消息框原创 2014-11-23 20:05:09 · 4071 阅读 · 0 评论 -
保存网页为图片——滚动截取IE(WebBrowse)
对IE进行编程一直觉得是相当可怕的事情,里面的接口、函数、事件之多,解释之乱,需要了解的方方面面知识之博,让我仿佛看到了微软就是造物主,因为它已成功制造了这样的混沌,弄就了宇宙的初始状态…… 近来做个项目,要截取网页,试了获取mht,开始倒是成功了,但不知装了什么软件后,就再也无法保存成mht了,查了一堆资料,修复了一轮,又可以部份保存成功,如此不稳定肯定不能应用,放弃!不得不赞的是,网转载 2014-10-02 16:12:38 · 5328 阅读 · 0 评论 -
根据端口查找占用进程——API方法
使用API方式获取端口占用进程ID……原创 2014-10-25 22:42:57 · 8686 阅读 · 0 评论 -
delphi与变长参数——可变类型开放数组(3)
上接delphi与变长参数——开放数组(2)。 可变类型的开放数组 现在回到文章开头提到的可变类型的开放数组,可变类型的开放数组允许向单个过程或函数传递不同类型表达式的数组。要定义含有变体开放数组参数的方法,需要指定“array of const”或“array of TVarRec”作为参数类型。【注1】//定义含有变体开放数组参数的方法proc原创 2011-12-01 12:58:47 · 3375 阅读 · 0 评论