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

组件的事件有关问题

2012-02-28 
组件的事件问题unitUnit1interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,F

组件的事件问题
unit   Unit1;

interface

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

type
    TForm1   =   class(TForm)
        Button1:   TButton;
        procedure   Button1Click(Sender:   TObject);
    private
        procedure   ClientRead   (Sender:   TObject;   Socket:   TCustomWinSocket);
    public
        {   Public   declarations   }
    end;

var
    Form1:   TForm1;

implementation

{$R   *.dfm}

var
    ServerSocket1:   TServerSocket;

procedure   TForm1.Button1Click(Sender:   TObject);
begin
    ServerSocket1.OnClientRead   :=   ClientRead;
end;

procedure   TForm1.ClientRead(Sender:   TObject;   Socket:   TCustomWinSocket);
begin

end;

end.
上面的代码是可行的,而且没有错误的
\\-------------------------------------
下面的代码是不可行的,而且有错误,但我不清楚为什么会出错

library   ClientDll;

uses
    SysUtils,
    Classes,
    ScktComp,
    Command   in   'Command.pas ';

{$R   *.res}

var
    ServerSocket1:   TServerSocket;

procedure   ClientRead   (Sender:   TObject;   Socket:   TCustomWinSocket);
var
    S:   string;
begin
    S   :=   Socket.ReceiveText;
end;

procedure   StartTcpServer;
begin
    ServerSocket1   :=   TServerSocket.Create(nil);
    with   ServerSocket1   do
    begin
        Port   :=   503;
        ServerType   :=   stThreadBlocking;
        OnClientRead   :=   ClientRead;
        Active   :=   True;
    end;
end;

procedure   CloseTcpServer;
begin
    with   ServerSocket1   do
    begin
        Active   :=   False;
        Free;
    end;
end;

begin

end.
\\--------------------------

上面的二段代码同样是OnClientRead   :=   ClientRead;但下面的一个就有问题,是错误的。我不知道是那里出了问题,是不是DLL里面不能这样写。

[解决办法]
非成员函数也用过,这样转一下吧,新建一个Unit

unit Unit1;

interface

uses
ScktComp;

type
TProcess=class
public
class procedure ClientRead (Sender: TObject; Socket: TCustomWinSocket);
end;

implementation

{ TProcess }

class procedure TProcess.ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
S: string;
begin
S := Socket.ReceiveText;
end;

end.

然后到Dll library中改

OnClientRead := TProcess.ClientRead; //TProcess不用创建,ClientRead只是一个类方法

热点排行