我想利用可变类类型,以尽量减少此代码,它是从属性和事件:可变类创建
if ctype='T' then
begin
C:= TTimeEdit.Create(self);
(c as TTimeEdit).OnMouseUp:= Panel2MouseUp;
(c as TTimeEdit).OnMouseDown:= Panel2MouseDown;
(c as TTimeEdit).OnMouseMove:= Panel2MouseMove;
(c as TTimeEdit).PopupMenu:= PopupMenu1;
end;
if ctype='S' then
begin
C:= TTabSheet.Create(self);
(c as TTabSheet).OnMouseUp:= Panel2MouseUp;
(c as TTabSheet).OnMouseDown:= Panel2MouseDown;
(c as TTabSheet).OnMouseMove:= Panel2MouseMove;
(c as TTabSheet).PopupMenu:= PopupMenu1;
end;
看起来像这样:
VAR VARCLS:TCLASS;
BEGIN
if ctype='S' then
VARCLS:=TTabSheet;
if ctype='T' then
VARCLS:=TTimeEdit;
C:= VARCLS.Create(self);
(c as VARCLS).OnMouseUp:= Panel2MouseUp;
(c as VARCLS).OnMouseDown:= Panel2MouseDown;
(c as VARCLS).OnMouseMove:= Panel2MouseMove;
(c as VARCLS).PopupMenu:= PopupMenu1;
end;
确保代码要长得多比这个,但我用了一个样本!
使用RTTI来实现这个 –
我想要一只小马:-)你真的需要问一个实际的问题,而不是给出一个需求列表。你试过什么了?你从哪里被困住了? –
如果所有类都有一个共同的父类,并且来自该类的所有事件(就像您的情况一样),只需创建一个'程序AssignEvents(const AObject:TWinControl);'并在其中设置所需的事件。无需单独投射。对于FMX你可能需要TControl。只是一个样本。 – Marcodor