7月 102016
 

  Java、Php等语言中都有成熟的框架来解析Json数据,可以让我们使用很少的代码就把格式化好的json数据转换成程序可识别的对象或者属性,同时delphi中也有这样的组件来实现此功能,即IsuperObject。如果还没有这个组件的请在网上搜索下载或者在下面留言处留下你的邮箱向本人索取。

  下面先说一下ISuperObject中几个常用的函数

  • function SO(const s: SOString = ‘{}’): ISuperObject; overload; 此函数传入json数据字符串,并返回一个ISuperObject对象,这一般是我们解析json时使用的第一个函数,如jObj := SO(jsonstr)。
  • property O[const path: SOString]: ISuperObject read GetO write PutO; default; 如:jobj.O[‘username’],此函数被一个ISuperObject对象调用,方括号内的字符串为json中的字段名称,返回一个ISuperObject对象。
  • property S[const path: SOString]: SOString read GetS write PutS; 此函数被一个ISuperObject对象调用,和O[‘username’]不同的是,它返回的是一个SoString,即一个字符串,使用方法 str := jObj.S[‘username’]; 同理的还有其他几个类似的函数,如I[‘age’]返回整数,B[‘isenable’]返回布尔型,A[‘users’]返回一个TSuperArray数组
  • AsString, AsBoolean, AsInteger,AsArray,ISuperObject的函数,用来把ISuperObject转换成相应的数据类型。

  下面我们看一个演示代码,json数据如下

  Delphi版本2010,代码如下:

点击下载源代码

11月 122015
 

  在Delphi中使用的颜色值(TColor),同步到安卓后颜色不对了,因为没使用#FFFFFF这种16进制使用颜色,所以只能自己想办法转换了,经过研究下面的java代码转换成功:

  因为Java中的byte是有符号的,范围是-127-128,所以要使用& 0xff转换为0-255之间的值。

2月 102015
 

uses RichEdit;

1. 设置RichEdit的行间距,代码如下

2. 为RichEdit设置行号,代码如下:

3. 根据鼠标位置定位光标的方法。

当RichEdit为可用状态时,是不用代码控制此操作的,TRichEdit本身就可以定位光标。但是当RichEdit开始不可用时,则此方法就可能用到了。本例中RichEdit1开始时是不可用的,当在ApplicationEvents1中接收到RichEdit1被双击时则设置RichEdit1的Enable := true;并且定位光标。

4. 使Richedit中的链接可以点击

 

 

1月 062015
 

  在Delphi开发中,如果我们想让一个窗口始终置顶显示,则我们只需要把窗口FormStyle属性设置为fsStayOnTop就可以了,但是如果这个窗口不是主窗口,而是子窗口,那就有些麻烦了,设置FormStyle为fsStayOnTop后也无效。解决办法就是在子窗口中重载CreateParams函数,并将WndParent设置为0即可,具体代码如下:

 Delphi如何使子窗口显示在任务栏中

 

 Posted by on 2015-01-06
12月 312014
 

方法一:

  定时调用GetForegroundWindow获取最前端的窗口句柄,然后判断该窗口宽度高度是否等于屏幕的宽度高度。代码如下,大家参考:

  这种方法真是弱啊弱,看看第二种方法吧

方法二:

  第二种方法是通过SHAppBarMessage函数给系统发送一个监听消息,用于监听一些关于AppBar的信息,该消息的第二个参数里有一个属性是用于指定回调消息的,程序中定义一个消息码用于监听。当传回的消息的wParam是ABN_FULLSCREENAPP 时判断lParam为真假来判断是进入全屏还是退出全屏。

 

8月 082014
 

在子窗口中重载CreateParams函数,并将WndParent设置为0即可,具体代码如下:

当我们把Params.WndParent设置为0时,Delphi在调用CreateWindowEx创建该窗口时,会将hWndParent 参数设置为相同的值(此处为0),为0则意味着要创建的窗口的所有者为桌面。此值不能在运行期通过Windows ApI改变,可能是因为窗口的拥有者不能在运行期改变的原因。

一些有用的链接

CreateWindowEx function

MFC子窗口和父窗口(SetParent,SetOwner)

7月 162014
 

在TRichEdit的Scrollbars属性为ssNone时,RichEdit中的内容超出边框大小时,翻动鼠标上下滚轮时,内容是不会自动滚动的。需要写代码实现此功能,主要是在RichEdit1MouseWheelUp和RichEdit1MouseWheelDown中发送消息实现,具体代码如下:

 

7月 122014
 

在PAYPAL帐户中添加自己的香港招行“香港一卡通”,需要填写以下信息:

(1)Name on account(帐户名称):收款人名字,英文、中文?

(2) Bank Name(银行名称):填写“CHINA MERCHANTS BANK HONG KONG BRANCH”;

(3) Account Type(帐户类型):选择“Checking(支票收款)”;

(4) Bank Code(银行代码):238,又叫CHATS CODE;

(5) Branch Location(分行地址):21F,12 HARCOURT ROAD CENTRAL

(6) Branch Code(分行代码):填写“860”这三位固定代码(即卡号中间的那三位);

(7) Account Number(帐户号码):填写你自己卡号的最后7位数字(即860之后的7位);

(7) Re-Enter Account Number(重复帐户号码):再次输入上面输入的7位收款帐号。

附截图:

paypal添加招商银行香港一卡通

其他信息:

1、招商銀行香港分行SWIFT CODE: CMBCHKHH

2、招商银行卡BIN号

信用卡:431988、356889、439225、439226、439227、518710、518718、622575、622576、622578、479229、479228、552534、552587、622581、622582、622577、521302、628362、356890、370285、370287、370289
借记卡:8位卡、955550、622580、622588、622609、621286、468203、512425、410062、524011、621483、621485、621486、621299

7月 092014
 

  对于一些非多文档类的程序,我们只想让用户打开一个程序的实例,当用户再次点击图标的时候只需将原来运行的程序界面打开即可。那么如何实现这种功能呢?首先,要实现进程的单实例运行,我们可以用互斥对象实现,互斥对象即在系统层上只能创建一个这样标识的对象,当第二个此标识的互斥对象创建时将会返回一个已存在的标志。

  单实例运行实现后,我们还要通过消息实现打开前面已经打开的窗口,我们可以用EnumWindows函数来遍例所有窗口以找到已打开窗口的句柄,并通过ShowWindow函数或者自定义消息来激活那个窗口。具体的代码如下: