2011年12月12日 星期一

Delphi 泛型轉字串

最近在用泛型寫一些東西,痴心妄想需要以下功能

TTest
<T>.ToString; //不能編譯哦!
begin
Result := f.ToString;
end;

看了半天沒有很好的解決方案
唯一的方式只有這樣
TToString<T> = reference to function(const AValue: T): string;

procedure TForm2.Button1Click(Sender: TObject);
var
gen
: TGenContainer<Integer>;
begin
gen
:= TGenContainer<Integer>.Create(
function(const AValue: Integer): string
begin
Result := IntToStr(AValue);
end);
end;

也就是說必需在傳入一個函式。
這樣有點麻煩就是

2011年3月23日 星期三

Delphi TNotifyEvent用參數的問題

本來以為用若名函數可以搞定:
//以下方法不能編譯過
Button1.OnClick := procedure( sender : tobject ) begin
//...code
end;

結果不能通過。
後來找了好久才發現另外一個妙招,Delphi舊版的也可以用

procedure Click(Self : TObject; Sender: TObject);
var lv : TLvItem;
begin
lv := TLvItem(Self);
//.....code..
end;

function _CreateMenuItem(lv : TLvItem):TMenuItem;
var Meth: TMethod;
begin
Meth.Data := lv;
Meth.Code := @Click;
Result.OnClick := TNotifyEvent(Meth);
end;