帮我看看代码(20分)

  • 主题发起人 主题发起人 出现派
  • 开始时间 开始时间

出现派

Unregistered / Unconfirmed
GUEST, unregistred user!

我的源码是这样的:
procedure Addbuttons(pnl1:Tpanel;btnidex:integer;Buttoncaptions:string;buttonname:string);

begin
with Tspeedbutton.Create(pnl1) do
begin
caption:=buttoncaptions;
name:=buttonname;
parent:=pnl1;
height:=23;
width:=102;
top:=height*btnidex +23;
flat:=true;
left:=2;
OnClick :=buttonclick; 编译 这一句提示有错。。。。怎么解决
end;
end;

procedure buttonclick(btnname:string;exepath:string;sender:Tobject);
begin
if TSpeedButton(sender).Name=btnname then
begin
...
end;
end;
 
procedure Addbuttons(pnl1:Tpanel;btnidex:integer;Buttoncaptions:string;buttonname:string);

begin
with Tspeedbutton.Create(pnl1) do
begin
caption:=buttoncaptions;
name:=buttonname;
parent:=pnl1;
height:=23;
width:=102;
top:=height*btnidex +23;
flat:=true;
left:=2;
OnClick :=buttonclick; 编译 这一句提示有错。。。。怎么解决
end;
end;

procedure buttonclick(sender : Tobject);
begin
if TSpeedButton(sender).Name=btnname then
begin
...
end;
end;
 
OnClick与
buttonclick(btnname:string;exepath:string;sender:Tobject);
的参数不一样;
onClick(Sender:TOjbect);是这样的.
 
procedure buttonclick(btnname:string;exepath:string;sender:Tobject);错的
procedure buttonclick(Sender:TOjbect);//只能这样写
WangHL说的没错
 
procedure buttonclick(sender : Tobject);
begin
//我的事件
end;
我每次这样都不行不知为啥,我都写为
procedure 窗体类.buttonclick(sender : Tobject);//才行
如下
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure ll(Sender: TObject);//我的事件
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.ll(Sender: TObject);
begin
showmessage('我的事件');
end;

procedure TForm1.Button1Click(Sender: TObject);
var aa:Tbutton;
begin
aa:=tbutton.Create(self);
aa.Parent:=form1;
aa.OnClick:=ll;
aa.Show;
end;

end.

 
去掉这两个参数也不行,还有就是我需要其中一个参数作为按钮的名字从而判断是按的哪一个,因为我要添加多个按钮
 
把你的错误编译信息贴出来看看。[:D]
 
你在窗体类中定义这个事件试试。我都这样作的。
 
错误信息:[Error] Unit1.pas(48): Undeclared identifier: 'buttonclick'
 
哈哈!刚好我知道.
这个事件必须在form里面有说明才行的.你是不是直接输的过程啊?
type
TForm1 = class(TForm)
...
...
procedure buttonclick(btnname:string;exepath:string;sender:Tobject);//加上这句就可以了.试试.
我今天也遇到这个问题.弄了很久.应该是这样错吧.哈哈结整这个贴吧.
 
luckj
怎么定义,具体说说看
 
这样就OK了
procedure ButtonOnClick(Sender: TObject);
begin
ShowMessage('asdfaf');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
@Button1.OnClick := @ButtonOnClick;
end;
 
判断是按的哪一个按钮,
可以在创建按钮时给按钮Tag属性编号

在ButtonOnClick中判断TButton(Sender).tag就可知道按的是哪个了
 
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure ll(Sender: TObject);//我的事件!!!!我是写在这里的(formclass)。后再申明。我原先也象你这样
koy0755他也是这意思。你明白吗?
from1=class(tfrom)
......//申说你的事件如: procedure ll(Sender: TObject);......
.......
//定义它
procedure TForm1.ll(Sender: TObject);
begin
showmessage('我的事件');
end;

 
OnClick :=buttonclick(Sender);
这样也可以吧?
 
app2001老大来了,我们小的要闪。[:D]
 
type
tmyonclick = procedure (sender : TObject; btnname:string; exepath:string) of TObject;
TMybutton = class(Tspeedbutton)
private
fmyonclick ; Tmyonclick;
public
Fbtnname:string;
Fexepath:string
procedure click;override;
property onMyclick TMyonclick read fmyonclick write fmyonclick;
end;
implementation

procedure TMYButton.click;override;
begin
inherited;
if assigned(fmyonclick) then fmyonclick(self, Fbtnname, Fexepath);
end;

end.
//以上自定义一个新类

procedure Addbuttons(pnl1:Tpanel;btnidex:integer;Buttoncaptions:string;buttonname:string);

begin
with TMYbutton.Create(pnl1) do //这里改为建立自定义类的对象
begin
caption:=buttoncaptions;
name:=buttonname;
parent:=pnl1;
height:=23;
width:=102;
top:=height*btnidex +23;
flat:=true;
left:=2;
OnmyClick :=buttonclick; 编译 这一句提示有错。。。。怎么解决
end;
end;

procedure buttonclick(btnname:string;exepath:string;sender:Tobject);
begin
if TSpeedButton(sender).Name=btnname then
begin
...
end;
end;

 
想OnClick 这样的事件(其实也就是属性)都有特定的参数,不能够
随便改动,你写的那个自定义的函数明显违背了这一原则。
 
多人接受答案了。
 
后退
顶部