<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[TU2的专栏]]></title><description><![CDATA[开源：https://gitee.com/245806497]]></description><link>https://blog.csdn.net/tht2009</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; tht2009]]></copyright><item><title><![CDATA[FMX调用JAR里的JAVA类Init方法]]></title><link>https://blog.csdn.net/tht2009/article/details/85062696</link><guid>https://blog.csdn.net/tht2009/article/details/85062696</guid><author>tht2009</author><pubDate>Mon, 11 Feb 2019 15:14:24 +0800</pubDate><description><![CDATA[本文背景：Delphi XE10.3RIO

由于FMX的JNIBridge将init作为默认的JAVA对象构造函数名，JAR中如果有方法名为init的类方法，FMX都会映射为构成函数，造成调用失败。这一问题需要官方修改Androidapi.JNIBridge单元的MethodIDFor方法逻辑，这里给出一个临时的Fix方法。


unit TU2Helper.Android;

interfa...]]></description><category></category></item><item><title><![CDATA[Delphi内存对齐]]></title><link>https://blog.csdn.net/tht2009/article/details/80533519</link><guid>https://blog.csdn.net/tht2009/article/details/80533519</guid><author>tht2009</author><pubDate>Fri, 01 Jun 2018 16:23:50 +0800</pubDate><description><![CDATA[本文环境Delphi XE 10.2  我们知道在Delphi中，全局变量存储在应用程序数据段中，其生命周期直至整个应用进程终止；局部变量存储在应用程序栈中，其生命周期直至当前声明的函数方法返回；以GetMem，New等方法动态申请的内存由堆分配，其生命周期直至以FreeMem或Dispose方法销毁；长字符串（Long string）, 宽字符串（wide string）, 动态数组（dynam...]]></description><category></category></item><item><title><![CDATA[Firemonkey扩展增强：iOS/Android使用贝塞尔曲线绘制签名(笔迹)]]></title><link>https://blog.csdn.net/tht2009/article/details/78054164</link><guid>https://blog.csdn.net/tht2009/article/details/78054164</guid><author>tht2009</author><pubDate>Thu, 21 Sep 2017 16:56:04 +0800</pubDate><description><![CDATA[Firemonkey扩展增强：iOS/Android使用贝塞尔曲线绘制签名(笔迹)]]></description><category></category></item><item><title><![CDATA[Firemonkey扩展增强：Android 浏览器支持Input file标签上传功能]]></title><link>https://blog.csdn.net/tht2009/article/details/76801223</link><guid>https://blog.csdn.net/tht2009/article/details/76801223</guid><author>tht2009</author><pubDate>Mon, 07 Aug 2017 12:43:42 +0800</pubDate><description><![CDATA[Delphi XE10.2 Tokyo Firemonkey自带的浏览器TWebbrower控件在Android平台上只是简单继承封装了Android系统本身的WebView组件。Android WebView 由于安全等原因本身并没有实现input标签的选择文件功能，而是预留了一个setWebChromeClient方法来设置替换默认的Chrome处理器。]]></description><category></category></item><item><title><![CDATA[Delphi货币类型转中文大写金额]]></title><link>https://blog.csdn.net/tht2009/article/details/73287225</link><guid>https://blog.csdn.net/tht2009/article/details/73287225</guid><author>tht2009</author><pubDate>Thu, 15 Jun 2017 15:03:30 +0800</pubDate><description><![CDATA[在Delphi中，为了实现货币数值运算中的严格精度要求，内部把货币类型数据当作一个放大10000倍的64位整数来处理。这样根据64位整数的范围，可以得出货币类型Currency的范围是 [-922337203685477.5807; 922337203685477.5807]。
货币类型一个最常见的应用场景是金额大写转换，网上都是一些先将货币转字符串后再对字符串处理的代码，而且有些方法在有些情况]]></description><category></category></item><item><title><![CDATA[技巧笔记：Algin属性设置顺序问题]]></title><link>https://blog.csdn.net/tht2009/article/details/73251311</link><guid>https://blog.csdn.net/tht2009/article/details/73251311</guid><author>tht2009</author><pubDate>Wed, 14 Jun 2017 19:19:42 +0800</pubDate><description><![CDATA[程序界面设计中都会使用到控件的Align属性，有时一个容器中需要设置相同Align属性的多个控件，但每次依次设置Align的属性，却发现其实际顺序并不是自己想要的。
这里面其实有个技巧：
1，对于Align=Top，我们需要确保控件在设置Align前，其Y坐标值大于之前的控件；
2，对于Align=Left，我们需要确保控件在设置Align前，其X坐标值大于之前的控件；

3，对于Ali]]></description><category></category></item><item><title><![CDATA[Firemonkey扩展增强：Android 浏览器执行JavaScript获取结果及JavaScript调用本地方法]]></title><link>https://blog.csdn.net/tht2009/article/details/53996177</link><guid>https://blog.csdn.net/tht2009/article/details/53996177</guid><author>tht2009</author><pubDate>Fri, 06 Jan 2017 13:56:57 +0800</pubDate><description><![CDATA[本文写作背景：delphi XE10.1
Firemonkey自带的TWebBrower对于JavaScript的交互支持一直不是很好，仅仅提供了一个本地执行JavaScript的方法EvaluateJavaScript，而且该方法不提供JS执行的返回结果。
在安卓平台上，EvaluateJavaScript是通过WebView的loadUrl('javascript:' + JavaScri]]></description><category></category></item><item><title><![CDATA[Delphi汇编基础]]></title><link>https://blog.csdn.net/tht2009/article/details/52209056</link><guid>https://blog.csdn.net/tht2009/article/details/52209056</guid><author>tht2009</author><pubDate>Mon, 15 Aug 2016 10:40:33 +0800</pubDate><description><![CDATA[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]]></description><category></category></item><item><title><![CDATA[内存对齐分配策略(含位域模式)]]></title><link>https://blog.csdn.net/tht2009/article/details/52117988</link><guid>https://blog.csdn.net/tht2009/article/details/52117988</guid><author>tht2009</author><pubDate>Thu, 04 Aug 2016 11:58:41 +0800</pubDate><description><![CDATA[转自：http://www.cnblogs.com/ToDoToTry/archive/2011/09/05/2167694.html




１：内存对齐定义： 
    现在使用的计算机中内存空间都是按照字节划分的，从理论上讲似乎对任何类型的变量的访问可以从任何地址开始，但是实际上计算机系统对于基本数据类型在内存中的存放位置都有限制，要求这些数据存储首地址是某个数K的倍数，这样各种]]></description><category></category></item><item><title><![CDATA[扩展IDE——为翻译OC头文件增加编写模板OCImport]]></title><link>https://blog.csdn.net/tht2009/article/details/51760606</link><guid>https://blog.csdn.net/tht2009/article/details/51760606</guid><author>tht2009</author><pubDate>Sat, 25 Jun 2016 23:56:00 +0800</pubDate><description><![CDATA[扩展IDE——为翻译OC头文件增加编写模板OCImport]]></description><category></category></item><item><title><![CDATA[窗口的子类化与超类化]]></title><link>https://blog.csdn.net/tht2009/article/details/51089722</link><guid>https://blog.csdn.net/tht2009/article/details/51089722</guid><author>tht2009</author><pubDate>Thu, 07 Apr 2016 21:39:25 +0800</pubDate><description><![CDATA[窗口的子类化与超类化——子类化是窗口实例级别的，超类化是在窗口类（WNDCLASS）级别的



1. 子类化 
理论：子类化是这样一种技术，它允许一个应用程序截获发往另一个窗口的消息。一个应用程序通过截获属于另一个窗口的消息，从而实现增加、监视或者修改那个窗口的缺省行为。子类化是用来改变或者扩展一个已存在的窗口的行为、而不用重新开发的有效途径。想要获得那些预定义控件窗口类（按钮控件、编]]></description><category></category></item><item><title><![CDATA[Delphi快捷键]]></title><link>https://blog.csdn.net/tht2009/article/details/50998271</link><guid>https://blog.csdn.net/tht2009/article/details/50998271</guid><author>tht2009</author><pubDate>Mon, 28 Mar 2016 15:28:55 +0800</pubDate><description><![CDATA[Delphi 快捷键(基于万一博客增加修改)






分类

快捷键

解释

备注



组
件
设
计
类


Escape

选择当前组件容器

 



Shift + Click

选择多个组件；选择窗体

 



Tab

选择下一个组件

 



Shift + Tab

选择]]></description><category></category></item><item><title><![CDATA[Firemonkey扩展增强: iOS 运行时更改锁定显示方向(增强版)]]></title><link>https://blog.csdn.net/tht2009/article/details/50866744</link><guid>https://blog.csdn.net/tht2009/article/details/50866744</guid><author>tht2009</author><pubDate>Sat, 12 Mar 2016 18:27:22 +0800</pubDate><description><![CDATA[之前在这里介绍过Firemonkey如何在运行时更改和锁定iOS设备的显示方向。这里给出一个改良优化的版本，增加考虑原先支持显示方向以减少不必要的重绘。]]></description><category></category></item><item><title><![CDATA[Firemonkey扩展增强: iOS 访问钥匙串Keychain]]></title><link>https://blog.csdn.net/tht2009/article/details/50812203</link><guid>https://blog.csdn.net/tht2009/article/details/50812203</guid><author>tht2009</author><pubDate>Sat, 12 Mar 2016 17:48:45 +0800</pubDate><description><![CDATA[项目中需要区分iOS设备，但是苹果已经封了获取UDID和MAC的API，目前可行的方案是在钥匙串Keychain中存储自己产生的唯一标识，如GUID。

关于iOS的唯一标识技术解决方案比较参见：这里

苹果官方钥匙串开发指导参见Keychain Services Programming Guide。

Firemonkey目前并没有为我们封装好Security.framework，看了苹果官方的...]]></description><category></category></item><item><title><![CDATA[IP编辑控件]]></title><link>https://blog.csdn.net/tht2009/article/details/50623816</link><guid>https://blog.csdn.net/tht2009/article/details/50623816</guid><author>tht2009</author><pubDate>Tue, 02 Feb 2016 15:02:39 +0800</pubDate><description><![CDATA[最近需要用一个IP输入控件，网上找了几个，都不符合效果，有些还有一些奇怪的Bug。后来发现原来系统已经提供了IP地址编辑控件，只是系统提供的控件不能设置只读效果。网上找了下资料，封装了一下，自己迂回一下实现了只读效果。
unit ueIPEdit;

interface

uses
  System.SysUtils, System.Classes, Vcl.Controls, Winapi.W]]></description><category></category></item><item><title><![CDATA[Delphi编译器属性（特别修饰符）]]></title><link>https://blog.csdn.net/tht2009/article/details/50465324</link><guid>https://blog.csdn.net/tht2009/article/details/50465324</guid><author>tht2009</author><pubDate>Tue, 05 Jan 2016 21:54:20 +0800</pubDate><description><![CDATA[delphi中常量参数就像一个本地常量，或者说只读变量。常量参数与值参数类似，除了不能在过程或函数体内给常量参数赋值，并且不能将常量参数传给另一个var类型参数。（但是，如果你常量参数传递的是一个对象引用，你还是可以修改这个对象的属性的）
使用const使得编译器能够为结构体和字符串类型的参数优化代码。而且它也提供了一种保护，防止无意中传递了一个参数引用到其他过程。
常量参数可能以值方式或引用]]></description><category></category></item><item><title><![CDATA[Firemonkey扩展增强：iOS 实现程序运行时更改锁定显示方向（LockOrientations）]]></title><link>https://blog.csdn.net/tht2009/article/details/50241143</link><guid>https://blog.csdn.net/tht2009/article/details/50241143</guid><author>tht2009</author><pubDate>Wed, 09 Dec 2015 22:21:39 +0800</pubDate><description><![CDATA[1、为不同的form指定不同的支持方向。
2、动态（运行时）强制更改显示方向。]]></description><category></category></item><item><title><![CDATA[Firemonkey使用iOS的第三方静态库（Link Binary With Libraries）]]></title><link>https://blog.csdn.net/tht2009/article/details/50183721</link><guid>https://blog.csdn.net/tht2009/article/details/50183721</guid><author>tht2009</author><pubDate>Sat, 05 Dec 2015 14:24:14 +0800</pubDate><description><![CDATA[最近需要从内存流中直接播放音频，想到了使用第三方音频播放库bass。在windows上可以很方便的使用相应动态库（具体参考万一的博客），但在iOS上却没有相应的使用介绍，准确的说是没有用于Firemonkey上的示例。在它官方论坛找到一个用于OSX的Demo，通过分析和测试，研究出了Firemonkey在iOS开发上使用第三方静态库的流程和方法。下面以在Delphi XE10上使用bass的静态库...]]></description><category></category></item><item><title><![CDATA[TWebBrowser控件使用指定IE版本显示网页]]></title><link>https://blog.csdn.net/tht2009/article/details/49943991</link><guid>https://blog.csdn.net/tht2009/article/details/49943991</guid><author>tht2009</author><pubDate>Fri, 20 Nov 2015 10:37:34 +0800</pubDate><description><![CDATA[好记性不如烂笔头，转自QQ群。
procedure IEEmulator(VerCode: Integer);
var
  RegObj: TRegistry;
begin
  RegObj := TRegistry.Create;
  try
    RegObj.RootKey := HKEY_CURRENT_USER;
    RegObj.Access := KEY_ALL_ACCESS]]></description><category></category></item><item><title><![CDATA[Firemonkey扩展增强：自定义Cursor]]></title><link>https://blog.csdn.net/tht2009/article/details/49785605</link><guid>https://blog.csdn.net/tht2009/article/details/49785605</guid><author>tht2009</author><pubDate>Wed, 11 Nov 2015 19:58:03 +0800</pubDate><description><![CDATA[在VCL中很容易通过Screen.Cursors加载自定义cursor，但在FMX中，cursor是通过IFMXCursorService管理的，只支持系统默认的cursor。如果要加载自定义的cursor，我们需要替换平台默认实现的IFMXCursorService。
Windows平台源码如下：
unit uWinCursorService;

interface

uses FMX.Pl]]></description><category></category></item></channel></rss>