- 博客(52)
- 资源 (17)
- 收藏
- 关注
原创 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
808
原创 Delphi内存对齐
本文环境Delphi XE 10.2 我们知道在Delphi中,全局变量存储在应用程序数据段中,其生命周期直至整个应用进程终止;局部变量存储在应用程序栈中,其生命周期直至当前声明的函数方法返回;以GetMem,New等方法动态申请的内存由堆分配,其生命周期直至以FreeMem或Dispose方法销毁;长字符串(Long string), 宽字符串(wide string), 动态数组(dynam...
2018-06-01 16:23:50
1096
原创 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
原创 Delphi货币类型转中文大写金额
在Delphi中,为了实现货币数值运算中的严格精度要求,内部把货币类型数据当作一个放大10000倍的64位整数来处理。这样根据64位整数的范围,可以得出货币类型Currency的范围是 [-922337203685477.5807; 922337203685477.5807]。货币类型一个最常见的应用场景是金额大写转换,网上都是一些先将货币转字符串后再对字符串处理的代码,而且有些方法在有些情况
2017-06-15 15:03:30
2519
原创 技巧笔记:Algin属性设置顺序问题
程序界面设计中都会使用到控件的Align属性,有时一个容器中需要设置相同Align属性的多个控件,但每次依次设置Align的属性,却发现其实际顺序并不是自己想要的。这里面其实有个技巧:1,对于Align=Top,我们需要确保控件在设置Align前,其Y坐标值大于之前的控件;2,对于Align=Left,我们需要确保控件在设置Align前,其X坐标值大于之前的控件;3,对于Ali
2017-06-14 19:19:42
955
原创 Firemonkey扩展增强:Android 浏览器执行JavaScript获取结果及JavaScript调用本地方法
本文写作背景:delphi XE10.1Firemonkey自带的TWebBrower对于JavaScript的交互支持一直不是很好,仅仅提供了一个本地执行JavaScript的方法EvaluateJavaScript,而且该方法不提供JS执行的返回结果。在安卓平台上,EvaluateJavaScript是通过WebView的loadUrl('javascript:' + JavaScri
2017-01-06 13:56:57
4945
11
转载 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
转载 内存对齐分配策略(含位域模式)
转自:http://www.cnblogs.com/ToDoToTry/archive/2011/09/05/2167694.html1:内存对齐定义: 现在使用的计算机中内存空间都是按照字节划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但是实际上计算机系统对于基本数据类型在内存中的存放位置都有限制,要求这些数据存储首地址是某个数K的倍数,这样各种
2016-08-04 11:58:41
2096
转载 窗口的子类化与超类化
窗口的子类化与超类化——子类化是窗口实例级别的,超类化是在窗口类(WNDCLASS)级别的1. 子类化 理论:子类化是这样一种技术,它允许一个应用程序截获发往另一个窗口的消息。一个应用程序通过截获属于另一个窗口的消息,从而实现增加、监视或者修改那个窗口的缺省行为。子类化是用来改变或者扩展一个已存在的窗口的行为、而不用重新开发的有效途径。想要获得那些预定义控件窗口类(按钮控件、编
2016-04-07 21:39:25
1126
原创 Delphi快捷键
Delphi 快捷键(基于万一博客增加修改)分类快捷键解释备注组件设计类Escape选择当前组件容器 Shift + Click选择多个组件;选择窗体 Tab选择下一个组件 Shift + Tab选择
2016-03-28 15:28:55
853
原创 Firemonkey扩展增强: iOS 运行时更改锁定显示方向(增强版)
之前在这里介绍过Firemonkey如何在运行时更改和锁定iOS设备的显示方向。这里给出一个改良优化的版本,增加考虑原先支持显示方向以减少不必要的重绘。
2016-03-12 18:27:22
1163
原创 Firemonkey扩展增强: iOS 访问钥匙串Keychain
项目中需要区分iOS设备,但是苹果已经封了获取UDID和MAC的API,目前可行的方案是在钥匙串Keychain中存储自己产生的唯一标识,如GUID。关于iOS的唯一标识技术解决方案比较参见:这里苹果官方钥匙串开发指导参见Keychain Services Programming Guide。Firemonkey目前并没有为我们封装好Security.framework,看了苹果官方的...
2016-03-12 17:48:45
2372
原创 IP编辑控件
最近需要用一个IP输入控件,网上找了几个,都不符合效果,有些还有一些奇怪的Bug。后来发现原来系统已经提供了IP地址编辑控件,只是系统提供的控件不能设置只读效果。网上找了下资料,封装了一下,自己迂回一下实现了只读效果。unit ueIPEdit;interfaceuses System.SysUtils, System.Classes, Vcl.Controls, Winapi.W
2016-02-02 15:02:39
1667
原创 Delphi编译器属性(特别修饰符)
delphi中常量参数就像一个本地常量,或者说只读变量。常量参数与值参数类似,除了不能在过程或函数体内给常量参数赋值,并且不能将常量参数传给另一个var类型参数。(但是,如果你常量参数传递的是一个对象引用,你还是可以修改这个对象的属性的)使用const使得编译器能够为结构体和字符串类型的参数优化代码。而且它也提供了一种保护,防止无意中传递了一个参数引用到其他过程。常量参数可能以值方式或引用
2016-01-05 21:54:20
1758
原创 Firemonkey扩展增强:iOS 实现程序运行时更改锁定显示方向(LockOrientations)
1、为不同的form指定不同的支持方向。2、动态(运行时)强制更改显示方向。
2015-12-09 22:21:39
2887
原创 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
原创 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
转载 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
31780
转载 Android SDK Manager国内更新代理
在Android SDK Manager Setting 窗口设置HTTP Proxy server和HTTP Proxy Port这个2个参数,分别设置为:HTTP Proxy server:mirrors.neusoft.edu.cnHTTP Proxy Por:80然后把下面的Force ..http://...sources to be fetched usin
2014-11-02 15:39:44
6399
转载 保存网页为图片——滚动截取IE(WebBrowse)
对IE进行编程一直觉得是相当可怕的事情,里面的接口、函数、事件之多,解释之乱,需要了解的方方面面知识之博,让我仿佛看到了微软就是造物主,因为它已成功制造了这样的混沌,弄就了宇宙的初始状态…… 近来做个项目,要截取网页,试了获取mht,开始倒是成功了,但不知装了什么软件后,就再也无法保存成mht了,查了一堆资料,修复了一轮,又可以部份保存成功,如此不稳定肯定不能应用,放弃!不得不赞的是,网
2014-10-02 16:12:38
5328
原创 将指定目录指定类型文件以指定分隔符组合文件名不换行输出到指定文件命令
for /f "delims=" %i in ('dir /b *.dcp')do (>>C:\Users\Administrator\Desktop\A.txt set /p="%~ni;"<nul)
2014-09-25 13:37:28
1182
原创 ListView列宽自适应
使用TListView列表显示内容,如果列内容过长,就会显示成‘XXX…’形式,此时如果双击列标题,列宽将变为自适应。用代码设置如下:1、设置ListView.Column[0].Width := -1;//列宽根据列内容自适应,此时保证列内容都可见。2、设置ListView.Column[0].Width := -2;//列宽根据列标题自适应,此时保证列标题可见。
2013-04-01 21:00:51
13943
7
翻译 About Data Alignment(关于数据对齐)
原文:http://msdn.microsoft.com/zh-cn/library/ms253949.aspx翻译:http://www.52rd.com/Blog/Detail_RD.Blog_imjacob_10489.html 很多CPU,如基于Alpha, IA-64, MIPS, 和SuperH 体系的,拒绝读取未对齐数据。当一个程序要求其中之一的
2011-12-04 16:37:01
1099
原创 delphi与变长参数——可变类型开放数组(3)
上接delphi与变长参数——开放数组(2)。 可变类型的开放数组 现在回到文章开头提到的可变类型的开放数组,可变类型的开放数组允许向单个过程或函数传递不同类型表达式的数组。要定义含有变体开放数组参数的方法,需要指定“array of const”或“array of TVarRec”作为参数类型。【注1】//定义含有变体开放数组参数的方法proc
2011-12-01 12:58:47
3375
原创 delphi与变长参数——开放数组(2)
上接delphi与变长参数——开放数组(1) 当过程或函数使用数组参数时,不能在声明参数时包含索引说明符。也就是说,声明定义下面函数将产生编译错误。procedure Sort(A:array[1..10] of Integer);//语法错误 但使用下面这种方法是有效的。但在大多数情况下,开放数组参数是更好的办法。type TDigits=array
2011-11-30 22:06:02
3254
原创 delphi与变长参数——开放数组(1)
与C/C++不同,Delphi中是通过可变类型(TVarRec)的开放数组来指定变长参数的。其实这里已经不能称“变长参数”了,因为实际上只传递了一个参数,只是该参数是由多个基础类型数据构成的一个开放数组。Delphi使用开放数组来容纳不定数目的参数,使用可变类型(TVarRec)表示各种类型数据,因此二者的结合可以达到C/C++中变长参数的功能。 TVarRec是一个记录类型,该记
2011-11-30 15:48:29
8346
原创 C/C++要点全掌握(六)——变长参数
上接C/C++要点全掌握(五)——mutable、volatile 14、变长参数 设计一个参数个数可变、参数类型不定的函数是可能的,最常见的例子是printf函数、scanf函数和高级语言的Format函数。在C/C++中,为了通知编译器函数的参数个数和类型可变(即是不定的、未知的),就必须以三个点结束该函数的声明。// printf函数的声明
2011-11-28 15:25:10
11467
原创 FindChildControl与FindComponent
前两天编码遇到了要使用FindChildControl方法获取指定名称的TSpeedButton按钮,结果折腾了半天就是没得结果(基础不扎实,呵呵),于是赶紧搜索了下,补习关于这两个方法的用法。 TWinControl类的FindChildControl方法在FWinControls中查找返回指定名称的可视且有窗体的组件(继承自TWinControl类)。该方法可以确定当前控件是否
2011-11-11 16:31:44
10697
原创 C/C++要点全掌握(五)——mutable、volatile
上接C/C++要点全掌握(四)。 13、mutable和volatile 很少遇到这两个关键字,学嵌入式估计知道后者,深入研究C++的估计知道前者。 (1)mutable 在C++中,mutable是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中,甚至结构体变量或者类对象为
2011-10-31 11:02:46
20928
原创 C/C++要点全掌握(四)——宏
上接C/C++要点全掌握(三)。 12、宏定义三要点 以下三点一般都没被重视,至少我之前就不知道,但这三点是非常重要的,只有满足这三个要求的宏才是无误的,否则有可能出现与宏的原义相左的情况。这里将其单独作为一节,凸显其重要性,在以后的编程中要严格按照这个形式来定义宏。 (1)表达式中参数变元都用括号括起来;(2)将表达式根据运算优先将各个子表达
2011-10-29 22:17:50
2566
原创 C#格式化字符串中转义大括号“{}”
今天,用C#写程序操作Excel,读取单元格内容根据所需格式生成字符串,使用String.Format(string format,object arg0)方法。以前只知“{0}”为索引占位符(即格式项),与参数列表中的第一个对象相对应,格式设置过程将每个格式项替换为对应对象的值的文本表示形式。但这次需将参数对象格式成一对大括号括起来的格式,即返回字符串“{对象arg0的文本表示形式}”。//
2011-10-28 20:32:17
6418
1
原创 N个正整数联接成最小整数
题目描述:设有n个正整数,将它们联接成一排,组成一个最小的多位整数。例如:n=2时,2个整数32,321连接成的最小整数为:32132,n=4时,4个整数55,31,312, 33 联接成的最小整数为:312313355分析:其实这题就是将这些整数以字符串方式排序,整数的第一位越小,其越靠前;若第一位相同则同理比较第二位。依次类推,直至能确定其顺序。当其中一个数是另一个
2011-10-15 21:24:49
2386
原创 C/C++要点全掌握(三)——const
上接:C/C++要点全掌握(二)。 11、const辨析 const 是一个“左结合”的修饰符,一般与左侧类型标识符结合声明只读变量(常量);指针修饰符(*)是一个“右结合”修饰符,一般与右侧变量名结合声明指针(在定义指针时可将”*p”看作一个整体,前面类型即为*p内容的数据类型),其优先级高于const与类型修饰符。如果const与类型修饰符(如int)二者直接相
2011-10-13 15:11:15
2477
原创 C/C++要点全掌握(二)——堆栈、指针
上接C/C++要点全掌握(一) 9、堆栈 栈(stack):为程序保存的一块内存区域,用来保存状态数据,其访问顺序是后进先出(LIFO)。例如:过程或函数的地址,参数,有时候还包括局部变量。 堆(heap):为程序保存的一块内存区域,用来保存那些在运行时才知道其存在与大小的数据;程序能够从堆中分配内存给这些元素;在用完之后,应该释放掉这些内存。堆中所
2011-10-10 10:21:24
5675
原创 C/C++要点全掌握(一)——基础概念
最近参加了几个公司到学校的招聘会,笔试时大多要求使用C/C++语言,而且有些笔试考到了语言的细节部分。说来汗颜,C/C++只在大一学习时使用了一年,之后一直在学习高级语言的组件开发,到现在C/C++语言的有些细节,部分已经忘记。在此将C/C++的基础要点重拾一遍,以便往后忘记之时查阅。 1、局部变量存储于堆栈上,堆栈是一个动态可变的存储区,所以局部变量是在声明它们的块入口处创建,出口处销毁
2011-10-09 15:52:49
2418
FixJavaInitDemo
2019-02-11
TU2WebviewDemo.zip
2017-08-07
Firemonkey在Android平台上增强浏览器与JavaScript的交互
2017-01-06
汇编项目模板Setup
2010-10-24
汇编模板库VS2008
2010-10-21
VS2008汇编模板库函数
2010-10-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人