Delphi

直线拟合(转贴)

  • function  FitLine(x,y: array of double;len: integervar k,b,c: double):boolean;

Delphi2009安装印象

下了一个3168的版本,虽然还是测试版,但是感觉很不错,速度很快,已经达到了RTM的水准。刚刚看了一下别人的用后体验,发现除了泛型外,还增加了指针加减法,这样就可以很方便的移植C,C++的程序了。写惯了C,不能用指针加减法,感觉特别不方便

如何为你的程序添加多语支持

有很多商业的程序可以用来添加多语支持,不过我觉得GNU GetText For Delphi比较简单好用。

下载一个GNU GetText For Delphi,安装后运行它的命令行工具dxgettext来提取用于翻译的字符串。

dxgettext -b c:\source\myprogram --delphi -r

上面命令执行后,会在myprogram目录下生成一个default.po文件。

然后执行msgmkignore来提取不需要翻译的字符串

msgmkignore default.po -o ignore.po

最后使用msgremove从翻译模板文件中删除不需要翻译的字符串。

msgremove default.po -i ignore.po -o output.po

之后,可以用免费的poEdit来翻译生成的output.po文件。

 

翻译完之后,执行msgfmt output.po -o default.mo将po文件编译为MO文件。

 

接口循环引用导致的内存泄漏

接口如果之间循环引用,引用计数总是无法归零,会产生内存泄漏,下面是一个简单的实例,基于GC的Java,不会产生类似的泄漏.
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm2 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

IChild=interface
['{ADA8F7F3-AA7D-4D57-8FA8-0FA501458981}']
procedure SetParent(AParent:IInterface);
procedure SetChild(AChild:IInterface);
end;

TChild=class(TInterfacedObject, IChild)

用Delphi编写通达信的选股插件

前两天坏人说起编写通达信的选股插件来,说起网上的例子是用VC写的,他已经把C忘得差不多,我正好最近几年都是在做C和VC的开发,所以就把VC的通达信插件例子改写成了Delphi。

附件里面就是我用Delphi改写的插件代码,因为我比较懒,而且Delphi的指针加法用起来比较麻烦,所以MA和Cross两个计算函数我翻译了一半,就懒得翻译,也没测试,不过插件接口部分的已经测试没有问题了,剩下的不是技术问题,而是数学问题了,有兴趣的人自己补完吧。

How to Hook WM_SETFOCUS Message

We should use WH_CALLWNDPROC type hook  , not WH_GETMESSAGE type hook

ControlStyle

控件的ControlStyle集合属性中可以设置为包含
csSetCaption
这个样式的意思是,但用户改变了控件的名字的时候,会自动的修改相应的控件的Caption属性为新的名字

Hook WM_SETFOCUS消息

注意,要想Hook焦点的消息的话,需要使用WH_CALLWNDPROC类型的钩子,而不是WH_GETMESSAGE类型的钩子

为任意控件添加阴影的效果

在Delphi的ShadowWnd单元中定义了一个TShadowWindow的类,这个类可以用来给人任意的可视化控件添加阴影效果,示意代码如下:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ShadowWnd;

type
TForm1 = class(TForm)
lbl1: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure lbl1Click(Sender: TObject);
private
{ Private declarations }
FShadow:TShadowWindow;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
FShadow := TShadowWindow.CreateShadow(lbl1, csRight);
FShadow.Control:=lbl1;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
FShadow.Free;
end;

procedure TForm1.lbl1Click(Sender: TObject);
begin
if FShadow.Visible then
FShadow.Hide
else
FShadow.Show;
end;

end.

Windows窗口样式的秘密

  1. CS_SAVEBITS这是一个比较有趣的窗口样式,按照MSDN的说法就是拥有这样的样式的窗口,windows会在显示窗口前保存窗口区域的位图,当窗口恢复显示时将保存的区域恢复,特别是这种恢复不会引起重绘,也就是说不会给被覆盖的窗口发WM_PAINT Message。这种窗口样式主要被用在弹出式窗口中,消除闪烁。
同步内容