怎样判断一个事件是否存在? ----今早不小心弄丢了100分,容后补分,说话算话! (0分)

  • 主题发起人 主题发起人 ylung
  • 开始时间 开始时间
Y

ylung

Unregistered / Unconfirmed
GUEST, unregistred user!
在Form1中
if Assigned(form2.spAppend) then
form1.Button1.OnClick:=form2.spAppend
else begin
form1.Button1.OnClick:=Nil
end

如果form2存在spAppend这个过程,就让Button1的OnClick连上它,否则就置空Button1的OnClick。
上述代码不能通过编译,请问怎么修改?
 
為什麼要這樣做,有點畫蛇添足的味道。這種事件是用戶按了form2.spAppend才加入的,根本表示不出動態的特性。
 
procedure button1.onclick(sender:tobject)
begin
case .. of
..:form2.spappend(sender);
..:form3.spappend(sender);
.........
end;
end;
 
To: springson
我还有Form3、Form4、Form5的 spAppend 事件要连接到这个按钮呢。
就是 用户感觉不到变化, 不同的form按的同一个按钮, 做的是不同的事。
To:joioy
我要在代码中将某些Form的 spAppend 事件连接到该 Button1。
你的列表形式我害怕,你可能不知道,我可能最讨厌 Case 了
要是 Delphi 有宏替换该多好!

在线等待,先谢各位大侠了。
 
if assigned(form2.spAppend) then
 
[:(]没分好可怜!

To:版主
今早本来是想反映 大富翁全文检索 这两天无法使用,不小心弄丢我100分!
能不能给我拣回来啊?-------要不又得到处灌水去懵别人的分了。[:)]
To:各位大侠
在线等待救急!!!!!
 
type
TMyProcedure=procedure (Sender:TObject) of object;
//
var
myproc:TMyProcedure;
begin
myproc:=form2.spAppend;
if Assigned(myproc) then
form1.Button1.OnClick:=myproc;
else
form1.Button1.OnClick:=Nil;
end;
 
如果spAppend方法不存在,那么Form2.spAppend语法就是错误的
如果Form2.spAppend存在,那么可以用hongxing_dl的方法,其中的TMyProcedure是早有声明的,为TNotifyEvent,但是如果Form2.spAppend都已经存在了,这种方法也是没有意义了
要实现楼主所说的目的,应该将spAppend写在Form2的published中,那么可以这样写:
Form1.Buton1.OnClick := Form2.MethodAddress('spAppend');
 
应该如此写:◎Form1.Buton1.OnClick := Form2.MethodAddress('spAppend');
或 ◎Form1.Buton1.OnClick := TForm2.MethodAddress('spAppend');
 
To:pihome
是,我总觉得 hongxing_dl 的方法不妥,正在迷糊,被你敲醒了。
To: pihome , baseyueliang
但是万一那个 spAppend 过程不存在, button1.onclik 会不会出错啊!

偶先测测 ... ... ...
 
var
ne : TNotifyEvent;
begin
@ne := nil;
@ne := TForm2.MethodAddress('spAppend');
if Assigned(@ne) then Form1.Buton1.OnClick := ne;
end;
 
To baseyueliang: 嗯,好像有道理,那能不能再简化成这样呢?[:)]
var
ne : TNotifyEvent;
begin
@ne := TForm2.MethodAddress('spAppend');
Form1.Buton1.OnClick := ne;
end;
 
试试便知,我想如果◎ne为非法地址就报错喽
 
var TmpEvent:TNotifyEvent;
begin
@TmpEvent := nil;
@TmpEvent:=MethodAddress('spAppend');
if Assigned(@TmpEvent) then
tbAppend.OnClick:=TmpEvent
else tbAppend.OnClick:=Nil;
end; //编译时出现以下提示:
[Warning] uChildWin.PAS(64): Variable 'TmpEvent' might not have been initialized
To: Baseyueliang, 感谢你继续指教。
 
RTTI 是什么东东?能解决我的问题吗?
有好几个人跟我说到它了,能不能详细一点?Tks.
 
你還是用標准的方法來,又快又好,別到進出了問題又不知是哪個地方出的。
 
急急,在线等了一天了,谁能解决我的问题啊?
谁解决了就给100分,今早弄丢了100分现在没有了,等我去灌水懵了分首先还债!

在Form1中
if Assigned(form2.spAppend) then
form1.Button1.OnClick:=form2.spAppend
else begin
form1.Button1.OnClick:=Nil
end

如果form2存在spAppend这个过程,就让Button1的OnClick连上它,否则就置空Button1的OnClick。
上述代码不能通过编译,请问怎么修改?
 
你的form2.spAppend必须是如此定义:
procedure spAppend (Sender:TObject)
begin
end;

你试一下
 
这就是本题的难处

我的 form.spAppend 过程 是否存在是不一定的。
存在时,点击按钮可以执行这个过程;不存在时点击按钮则应该没反应,但不出错。

该怎样给按钮的Onclick赋值呢?


 
后退
顶部