读书人

自定义事件传的参数出现乱码,该如何解

发布时间: 2013-01-02 13:08:44 作者: rapoo

自定义事件传的参数出现乱码

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TMyClass = class
private
FGetStrProc:TGetStrProc;
public
property GetStrProc:TGetStrProc read FGetStrProc write FGetStrProc;
procedure OnGetStrProc;
end;

TForm1 = class(TForm)
btn1: TButton;
procedure FormCreate(Sender: TObject);
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
MyObject:TMyClass;

implementation

{$R *.dfm}

{ TMyClass }

procedure TMyClass.OnGetStrProc;
begin
if Assigned(FGetStrProc) then FGetStrProc('Hello, World');
end;

procedure ReceiveMsg(const S: string);
begin
ShowMessage(s); //此处得到的是乱码
end;

procedure TForm1.FormCreate(Sender: TObject);
var
TmpEvent:TGetStrProc;
begin
MyObject := TMyClass.Create;
TMethod(TmpEvent).Code := @ReceiveMsg;
TMethod(TmpEvent).Data := MyObject;
MyObject.GetStrProc := TmpEvent;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
MyObject.OnGetStrProc;
end;

end.


ReceiveMsg收不到正确的字符,不知道是什么原因.
[解决办法]
自己动手解决了
[解决办法]
引用:
TMethod(TmpEvent).Code := @ReceiveMsg;
TMethod(TmpEvent).Data := MyObject;
MyObject.GetStrProc := TmpEvent;

删掉:
TMethod(TmpEvent).Code := @ReceiveMsg;
TMethod(TmpEvent).Data := MyObject;
有最后一句就足够了
[解决办法]
引用:
已解决,代码改成:
Delphi(Pascal) code
procedure ReceiveMsg1(Address:Integer;const S: string);
begin
ShowMessage(s); //此处得到的正确的值
end;

如果有参数,第一个参数必须是Data.

是不是要处理Sender?

读书人网 >.NET

热点推荐