type
TRetureValueEvent = procedure of (Sender: TObject; var sValue: String);type
TSeek = class(TButton)
private
FOnReturnValue: TReturnValueEvent; // 事件
protected
procedure ReturnValue(Sender: TObject; var sValue: String); dynamic; // 函数声明
public published
property OnReturnValue: TRetuanValueEvent read FOnReturnValue write ReturnValue; // 事件属性
end;procedure register;implementationprocedure register;
begin
RegisterComponents('MyCon', [TSeek]);
end;{ TSeek }procedure TSeek.Click;
var
sValue: string;
begin
inherited;
...
ReturnValue(Self, 'Good');
end;procedure TSeek.ReturnValue(Sender: TObject; var sValue: string);
begin
if Assigned(FOnReturnValue) then FOnReturnValue(Self);
end;编译错误:
[Error] SeekUtils.pas(15): 'OBJECT' expected but '(' found
[Error] SeekUtils.pas(15): ';' expected but ')' found
[Error] SeekUtils.pas(23): Undeclared identifier: 'TReturnValueEvent'
[Error] SeekUtils.pas(41): Undeclared identifier: 'TRetuanValueEvent'
[Error] SeekUtils.pas(41): Dynamic method or message handler not allowed here
[Error] SeekUtils.pas(109): Constant object cannot be passed as var parameter
TRetureValueEvent = procedure of (Sender: TObject; var sValue: String);type
TSeek = class(TButton)
private
FOnReturnValue: TReturnValueEvent; // 事件
protected
procedure ReturnValue(Sender: TObject; var sValue: String); dynamic; // 函数声明
public published
property OnReturnValue: TRetuanValueEvent read FOnReturnValue write ReturnValue; // 事件属性
end;procedure register;implementationprocedure register;
begin
RegisterComponents('MyCon', [TSeek]);
end;{ TSeek }procedure TSeek.Click;
var
sValue: string;
begin
inherited;
...
ReturnValue(Self, 'Good');
end;procedure TSeek.ReturnValue(Sender: TObject; var sValue: string);
begin
if Assigned(FOnReturnValue) then FOnReturnValue(Self);
end;编译错误:
[Error] SeekUtils.pas(15): 'OBJECT' expected but '(' found
[Error] SeekUtils.pas(15): ';' expected but ')' found
[Error] SeekUtils.pas(23): Undeclared identifier: 'TReturnValueEvent'
[Error] SeekUtils.pas(41): Undeclared identifier: 'TRetuanValueEvent'
[Error] SeekUtils.pas(41): Dynamic method or message handler not allowed here
[Error] SeekUtils.pas(109): Constant object cannot be passed as var parameter
但问题还是同样出错在这:
TRetureValueEvent = procedure of (Sender: TObject; var sValue: String);
2.返回值是返回来的,必须是变量。
你这样肯定是错的 ReturnValue(self,'good') // 'good'是常量
你需要这样定义:
s: string;
s := 'good';
ReturnValue(self,s); // 在函数里你可以对s修改并重新赋值
... // 现在对s操作,已经发生了变化
TRetureValueEvent = procedure of (Sender: TObject; var sValue: String); <----- 事件类型必须是类方法, 不能是普通过程. 所以必须定义成:
TXXXEvent = procedure (xxx...) of object;...procedure TSeek.Click;
var
sValue: string;
begin
inherited;
...
ReturnValue(Self, 'Good'); <------ var 参数不能传常量, 所以传'Good'编译通不过
end;procedure TSeek.ReturnValue(Sender: TObject; var sValue: string);
begin
if Assigned(FOnReturnValue) then FOnReturnValue(Self); <---- 调用FOnReturnValue传的参数比定义的少
end;建议楼主先找本delphi语法方面的基础书看看