procedure TMainForm.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
  //...
end;如果我要在DOS里面写这个事件,应该怎样写?

解决方案 »

  1.   

    DOS?事件?行吗?我估计不行吧!
      

  2.   

    不是的   我现在写的程序是控制台程序,也就是用DELPHI写的DOS程序没有Forms单元(没有窗口),你们说怎么拖控件写代码呀?而我要写的代码,正好是TServerSocket类型里面的一个事件,就是下面的这个事件,procedure TMainForm.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
    begin
      //...
    end;我在DOS下怎么写这个事件呀?
      

  3.   

    动态创建对象,动态置事件通过TMethod我的Blog有的http://blog.csdn.net/ly_liuyang/http://lysoft.7u7.net
      

  4.   

    TMethod 是个东东....?   我在研究你的代码.  还能跟我细说一上吗?>谢了!
      

  5.   

    program xxxx;uses ......;type
     TApplication=class
     private
      ServerSocket1:TServerSocket;
     protected
      procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
     public
      procedure Entry;
     end;
    implementation
    TApplication
      procedure TApplication.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
      begin
      end;
      procedure TApplication.Entry;
      begin
        ServerSocket1:=TServerSocket.Create(nil);
        ServerSocket1.OnClientRead:=Serversocket1Clientread;
        //这里写你的控制台程序入口代码,
        //....
      end;
    begin
     with TApplication.Create do
     begin
      try
        Entry
      finally
        Free;
      end;
     end;
    end;
      

  6.   

    你的代码我编译的时候不能通过。   implementation有错误。你把你的代码编译一下。。如果没有错误再发到我的贴上
      

  7.   

    ly_liuyang(Liu Yang) 兄弟:program Test;uses
      Windows,
      SysUtils,
      ExtCtrls,
      Classes,
      Winsock,
      ScktComp,
      Forms;var
      timer1:TTimer; Method:TMethod;var
      TServerSocket1: TServerSocket;procedure Timer1Timer(Sender: TObject);
    begin
      MessageBox(0, 'aa', 'bb', 0);
    end;procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
    begin
      //
    end;begin
      TServerSocket1 := TServerSocket.Create(nil);
      Method.Data := nil;
      Method.Code := @ServerSocket1ClientRead;
      TServerSocket1.OnClientRead := TNotifyEvent(Method);//不行通过   timer1:=TTimer.Create(nil);
       timer1.Interval:=3000;
       Method.Data := nil;
       Method.Code := @Timer1Timer;
       timer1.OnTimer:= TNotifyEvent(Method);
       while True do Application.ProcessMessages;
    end.
    我按照你的改写的。。可是里面有一行不能过!你看看。。
      

  8.   

    当然!
    OnClientRead与TNotifyEvent不兼容的
    我的例子就不会活学活用??
    强制类型转换为OnClientRead即可P.S.ClientSocket这类组件都是淘汰的,现在都用Indy的http://lysoft.7u7.net
      

  9.   

    我就是不会转换才问的。不好意思!我在indy里面没有发现跟Clientsocket一样的控件!
      

  10.   

    晕~不是看名字,看本质的!
    ClientSocket是什么组件?TCP组件,所以用IdTCPClient代替。当然使用方法完全不一样的,Indy内建Thread支持的还是自己去研究吧~http://lysoft.7u7.net
      

  11.   

    ServerSocket1 := TServerSocket.Create(nil);跟 ServerSocket1.Create(nil);是不是一样的,也就是说是不是等效的!
      

  12.   

    不是。
    TServerSocket.Create(nil);
    先分配TServerSocket大小的内存并调用Create(nil)

    ServerSocket1.Create(nil);
    只调用Create
      

  13.   

    program test;{$APPTYPE CONSOLE}uses
      SysUtils, Winsock, ScktComp, Dialogs;type
      TApplication = class
      private
        ServerSocket1: TServerSocket;
      protected
        procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
      public
        procedure Entry;
      end;  MyCallBack = function(S: string): string; //定义一个回调函数procedure TApplication.Entry;
    begin
      ServerSocket1 := TServerSocket.Create(nil);
      ServerSocket1.Port := 728;
      ServerSocket1.Active := True;
      ServerSocket1.OnClientRead := ServerSocket1ClientRead;
    end;procedure TApplication.ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    var
      S: string;
    begin
      S := Socket.ReceiveText;
      if S = 'a' then
        Writeln('Ok');
      //Socket.SendText('接收信息成功!');
    end;begin
      with TApplication.Create do
      begin
        try
          Entry
        finally
          //Free;
        end;
      end;
      Writeln('...');
      Readln;
    end.
      

  14.   

    以上的代码帮我看一下...   他在DOS下面不接收消息....  我应该怎么办?