一个动态生成的控件,如何调用一个普通的过程作为该控件的某个事件呢?(200分悬赏)(200分)

  • 主题发起人 狮子王
  • 开始时间

狮子王

Unregistered / Unconfirmed
GUEST, unregistred user!
一个动态生成的控件,如何调用一个普通的过程作为该控件的某个事件呢?
我用的是动态生成TdxTreeList中的列,我需要某一列的onCustomerDrawCell事件,
我写了一个简单的过程,对应的就是该事件的过程!
但我该如何调用呢?
具体过程如下:
procedure CustomDrawCell(Sender: TObject;
ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean;
var AText: String; var AColor: TColor; AFont: TFont;
var AAlignment: TAlignment; var ADone: Boolean);
begin
AText := inttoStr(ANode + 1);
end;
 
xxx.onCustomerDrawCell := CustomDrawCell;

kaka[:D]

 
这样做是行不通的,因为该事件要求的参数太多了,不光只是一个(Sender:TObject)
 
一样的吧

只要你自定义的参数列表
原事件要求的事件处理器参数列表一样

就可以用啊
 
你这样是无解的,事件类型(参数等)不一样,不能赋值。
还是扩展一下吧,针对特定的事件写一个对象方法,例如

procedure CustomDrawCellA(Sender: TObject; ARect: TRect);
begin
CustomDrawCell(Sender, ARect........);
end;

这样可将事件和CustomDrawCellA对应。
 
哈哈,参见另一个问题:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1293853
 
对此问题很感兴趣,收藏!
 
To rustle:
如何自定义参数列表,举个例子好吗?
 
你可以在创建了TdxTreeList后,动态对此控件的onCustomerDrawCell赋以你定义的事件:
dxTreeList.onCustomerDrawCell := CustomDrawCell;
 
To zhengbo:
我知道动态赋事件是这么赋的,但有一点CustomDrawCell需要的一些参数,我该怎么给呢?
另一方面,TdxTreeList是已有的,并非动态生成,动态生成的是TdxTreeList里的Column
就是TdxTreeListColumn
赋值是dxTreeListColumn.OnCustomerDrawCell := CustomerDrawCell(...);
但CustomerDrawCell(...)中的参数该如何赋呢?又该赋什么呢?
 
TDxTreeListColum(ActiveControl)可以得到当前焦点的那个
 
你的过程要是一个类方法才行,最好定义在Private里,
再dxTreeListColumn.OnCustomerDrawCell := CustomerDrawCell;
就行了,不用传参数,如果你编译通不过的话,并且提示信息是参数不符的话一定是这个原因
 
To zm30:
请问您指的这个类是什么类,包含的是这个事件的功能吗?该如何做比较好呢?
 
你的Form就是一个类,你的自定义的CustomDrawCell过程放在Private里就行了
TForm1 = class(TForm)
private
procedure CustomDrawCell(Sender: TObject; ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
AColumn: TdxTreeListColumn; ASelected, AFocused, ANewItemRow: Boolean;
var AText: String; var AColor: TColor; AFont: TFont;
var AAlignment: TAlignment; var ADone: Boolean); //放在这里定义就可以了

public
{ Public declarations }
end;
 
我以前写控件的时候也想过,这参数怎么传的问题,,
后来我知道,既然是事件,就不管那一长串参数是怎么传,或者是该传什么,
只要你的事件已经绑到特定的过程,
所有的参数都由产生这个事件的对象给你填上了,
所以我自己要做的,就是在事件函数里处理这些参数就行了。
不知我的理解对不对?
:)
 
顶部