TEvents與字符字符串變量(200分)

  • 主题发起人 主题发起人 江林勝
  • 开始时间 开始时间

江林勝

Unregistered / Unconfirmed
GUEST, unregistred user!
如果一個字符串變量的結果正待好等于一個按鈕的單擊事件名,如何通過這個變量去調
用這個單擊事件.
 
if ... then button1.click
 
一个简单的例子, Form1 上放两个 Button(Button1, Button2):

procedure TForm1.Button1Click(Sender: TObject);
var
Event: TMethod;
EventSender: TObject;
begin
Event.Code := MethodAddress('Button2Click');
Event.Data := Self;
EventSender := FieldAddress('Button2')

if Assigned(Event.Code) and Assigned(EventSender) then
TNotifyEvent(Event)(EventSender)
//这里将调用 Button2Click
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage('Button2 Clicked!');
end;
 
type
TDoClick = Procedure(Sender: TObject) Of OBject;
ClickRec = Record
ClickStr : String[81];
DoClick : TDoClick;
End;

//定义100个事件
Var
_ClkRec : Packed Array [1..100] Of ClickRec;

procedure TForm1.FormShow(Sender: TObject);
begin
FillChar(_ClkRec,SizeOf(_ClkRec),0);

// 比如有55个ButtonClick事件
_ClkRec[1].ClickStr:='Button1Click';
_ClkRec[1].DoClick:=Button1Click;

_ClkRec[2].ClickStr:='Button2Click';
_ClkRec[2].DoClick:=Button2Click;
....

_ClkRec[55].ClickStr:='Button55Click';
_ClkRec[55].DoClick:=Button55Click;
end;

Procedure DoClickEv(ClkStr:String);
// 调用次过程,例如DoClickEv('Button2Click');将执行Button2Click事件!
Var
Tmct:word;
Begin
TmCt:=1;
While (_ClkRec[TmCt].ClickStr<>'') Do
Begin
If (_ClkRec[TmCt].ClickStr=ClkStr) Then
Begin
_ClkRec[TmCt].DoClick(Nil);
Exit;
End;
Inc(TmCt);
End;
End;


给分吧!哈哈哈!
 
for i := 0 to ComponentsCount-1 do
if (Components is TButton) and
(TButton(Components).Name + 'click'= Yourstr )and
assigned(TButton(Components).OnClick) then
begin
TButton(Components).OnClick(nil);
break;
end;
 
后退
顶部