首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2013-01-02 
自定义事件传的参数出现乱码unit Unit1interfaceusesWindows, Messages, SysUtils, Variants, Classes, G

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

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?

热点排行