我想写一个类似与木马server端的程序,程序要尽量的小
所以我没有使用窗口,就一个Project文件
但是如何在里面使用我需要的网络控件呢?如:TServerSocket等
控件加入以后如何加入其事前呢?
还有,如何让程序不退出,一直运行着?
大家能不能帮我举个例子呀?谢谢了
小弟初学Delphi,希望多多指教!

解决方案 »

  1.   

    你在有窗体的form中,把事件写好。然后把这个事件拷贝到你的无窗体的project中,然后直接把过程名赋给相应的事件就可以了!
      

  2.   

    呵呵,即使没有窗体,你的程序也不会小到那里去的,因为有Forms这个单元在。
    除非你写纯控制台的程序,不要Application。
    而控件也是类,你平时怎么用类的,控件也是一样的,要创建,要赋值。
      

  3.   

    类似如下处理:  private
        ClientSocket:TClientSocket;
        procedure ClientSocketConnecting(Sender: TObject; Socket: TCustomWinSocket);
        procedure ClientSocketConnect(Sender: TObject;  Socket: TCustomWinSocket);
        procedure ClientSocketDisconnect(Sender: TObject;  Socket: TCustomWinSocket);
        procedure ClientSocketError(Sender: TObject;  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;  var ErrorCode: Integer);
        procedure ClientSocketRead(Sender: TObject;  Socket: TCustomWinSocket);
        procedure ClientSocketWrite(Sender: TObject;  Socket: TCustomWinSocket);..................
        ClientSocket:=TClientSocket.Create(AOwner);
        ClientSocket.Port:=Port;
        ClientSocket.Host:=Ip;
        ClientSocket.ClientType:=ctNonBlocking;
        ClientSocket.OnConnecting:=ClientSocketConnecting;
        ClientSocket.OnConnect:=ClientSocketConnect;
        ClientSocket.OnDisconnect:=ClientSocketDisconnect;
        ClientSocket.OnError:=ClientSocketError;
        ClientSocket.OnRead:=ClientSocketRead;
        ClientSocket.OnWrite:=ClientSocketWrite;
      

  4.   

    好象我的想法不能实现,不知道是哪里出了问题……
    编译的时候说:[Error] Project1.dpr(17): Incompatible types: 'TNotifyEvent' and 'Pointer'
    我想可能是不能直接A.OnTimer:=AB;的问题;
    我也不知道这样写对不对,但大家应该看懂了我的意思了吧?
    ==========================================
    program Project1;uses
      extctrls,Dialogs;
    {$R *.res}var
      A:Ttimer;
    procedure AB(Sender: TObject);
    begin
       showmessage('aaa');
    end;begin
       A.Create(nil);
       A.OnTimer:=AB;
       A.Interval:=1000;
       A.Enabled:=true;
    end.
    =====================================
      

  5.   

    放到一个类里面。
    private
        A:Timer;
        procedure AB(Sender:TObject);
    .......................
        constructor Create(AOwner: TComponent);overload;constructor TYourClass.Create(AOwner: TComponent);
    begin
        inherited Create;
    .............
        A.OnTimer:=AB;
    end;
      

  6.   

    procedure AB(Sender: TObject);
    begin
       showmessage('aaa');
    end;
    是一个普通的过程,参数头没有一个Self指针。
    而事件指定要求的是一个类的方法类型,即方法的第一个参数是一个Self,即对象指针。你应该写类,用面向对象的方法来写。
      

  7.   

    我又重新改了一下。。但是还是不行。。
    程序运行到
        A.OnTimer:=AB;
        A.Interval:=1000;
        A.Enabled:=true;
    的时候就回出错~~
    =========================================
    program Project1;uses
       Classes, Dialogs,extctrls;type
      B = class
      private
        A:TTimer;
        procedure AB(Sender:TObject);
        constructor Create(AOwner: TComponent);overload;
        { Private declarations }
      public
        { Public declarations }
      end;
    {$R *.res}
    procedure B.AB(Sender:TObject);
    begin
      showmessage('aaa');
    end;constructor B.Create(AOwner: TComponent);
    begin
        inherited Create;
        A.OnTimer:=AB;
        A.Interval:=1000;
        A.Enabled:=true;
    end;
    begin
      B.Create(nil);
    end.
    ===================================
      

  8.   

    你的A没有Create就赋值了,当然要出错。
    对象和实例的用法A,B你都错了。var
       BTemp:B;constructor B.Create(AOwner: TComponent);
    begin
        inherited Create;
        A:=TTimer.Create(AOwner);
        A.OnTimer:=AB;
        A.Interval:=1000;
        A.Enabled:=true;
    end;begin
        BTemp:=B.Create(nil);
    end;
      

  9.   

    A:=TTimer.Create(AOwner);
    这里还是会出错
      

  10.   

    哦,可以了。。是我有个地方写错了,谢谢咯
    但是另外一个问题又出现了
    为什么我的A.OnTimer事件不会被触发?
    程序运行一下就结束了?怎么能让程序一直运行着,可以响应A.OnTimer这个事件呀?
    ==================
    program Project1;uses
       Classes, Dialogs,extctrls;type
      B = class
      private
        A:TTimer;
        procedure AB(Sender:TObject);
        constructor Create(AOwner: TComponent);overload;
        { Private declarations }
      public
        { Public declarations }
      end;
    {$R *.res}var
       BTemp:B;
       ST:integer;
    procedure B.AB(Sender:TObject);
    begin
      showmessage('aaa');
    end;constructor B.Create(AOwner: TComponent);
    begin
        inherited Create;
        A:=TTimer.Create(AOwner);
        A.OnTimer:=AB;
        A.Interval:=1000;
        A.Enabled:=true;
    end;
    begin
      ST:=0;
      Btemp:=B.Create(nil);
    end.
    ==============
      

  11.   

    循环就行了。begin
      ST:=0;
      Btemp:=B.Create(nil);
      while true do
      begin
        TApplication.Create(nil).ProcessMessages;
    。。
      end;
      

  12.   

    可不可以不用Forms单元呀?因为我想让程序小一点。
      

  13.   

    当你需要去assign一个事件的时候,这个事件的定义必须包含在一个class中,用直接的procedure是不行的,除非你转换成地址.为什么非要用form呢?就像一个console程序就好了,保证有一个循环就好了,为避免循环占用CPU资源,可以用waitforsingleobject或多线程来实现.......
      

  14.   

    可不可以具体讲讲?小第初学感激不近。。
    如果不用forms的话就不能用TApplication了