Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.12;
Скачать: CL | DM;

Вниз

назначение обработчика внутри класса   Найти похожие ветки 

 
Ken   (2004-11-25 12:03) [0]

Уважаемые мастера, хочу всунуть в свой класс Сокет и описать все обработчики внутри класса! При етом необходимо, чтоб сокет снаружы класса вообще не был виден!

Пишу:

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

type
 TForm1 = class(TForm)
   ListBox1: TListBox;
   Button1: TButton;
   Button2: TButton;
   Button3: TButton;
   Edit1: TEdit;
   Button4: TButton;
   procedure Button4Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

type TMyClass = class
     private
     pOnConnect : procedure;
     ti : integer;
     MySocket : TClientSocket;

     public
     constructor Create;
     destructor Destroy;

end;

var
 Form1: TForm1;
 MyClass : TMyClass;

implementation

{$R *.dfm}

constructor TMyClass.Create;
begin
MySocket := TClientSocket.Create(nil);
MySocket.Host:="127.0.0.1";
MySocket.Port:=1234;
MySocket.OnConnect := pOnConnect;
inherited Create;
end;

destructor TMyClass.Destroy;
begin
MySocket.Close;
inherited Destroy;
end;


Компилятор ругаеться на MySocket.OnConnect := pOnConnect; Ошибка: Несовместим указатель метода и процедура

Вопрос такой:
Как грамотно ето обьявить и в какой части кода описать ету процедуру, чтоб вне класса она вообще небыла видна?


 
TUser ©   (2004-11-25 12:11) [1]

procedure of object


 
Ken   (2004-11-25 12:13) [2]


> TUser

теперь ругаеться на Parametr list differ! Та же самая строка


 
TUser ©   (2004-11-25 12:15) [3]

OnEvent: TNotifyEvent;

TNotifyEvent = procedure (Sender: TObject) of object;


 
Ken   (2004-11-25 12:15) [4]

Вписал pOnConnect : procedure(Sender: TObject;
     Socket: TCustomWinSocket) of object; и заработало.


 
Digitman ©   (2004-11-25 12:16) [5]

TMyClass = class
  private
    procedure DoConnect(Sender: TObject; Socket: TCustomWinSocket);
...
    MySocket : TClientSocket;

  public
    constructor Create;
    destructor Destroy; override;
end;

constructor TMyClass.Create;
begin
// inherited Create; //необязательно для прямого наследника TObject
MySocket := TClientSocket.Create(nil);
MySocket.Host:="127.0.0.1";
MySocket.Port:=1234;
MySocket.OnConnect := DoConnect;
end;


 
Digitman ©   (2004-11-25 12:19) [6]


> Ken   (25.11.04 12:15) [4]
> Вписал pOnConnect : procedure(Sender: TObject;
>      Socket: TCustomWinSocket) of object; и заработало.


не заработало, а компиляция безошибочно прошла
а работать это не будет, потому что у тебя это лишь указатель на метод, но не собственно метод, который еще декларировать и реализовать нужно


 
Ken   (2004-11-25 12:25) [7]


> Digitman

Понял. переписал и заработало уже как надо! Спасибо.

У меня еще такой вопрос:
Как получить 4 байта, содержащие мой ip?


 
Ken   (2004-11-25 12:37) [8]

Мастера, подскажите пожалуйста, как получить 4 байта, содержащие мой ip адресс?


 
Digitman ©   (2004-11-25 12:49) [9]

строковое представление этого адреса ты можешь получить вызовом MySocket.Socket.LocalAddress

далее, чтобы получить те самые "4 байта" из этого стр.представления, чеши макушку сам ... не так уж и сложно ...



Страницы: 1 вся ветка

Текущий архив: 2004.12.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
3-1100391381
Просто Джо
2004-11-14 03:16
2004.12.12
MySQL & dbExpress


1-1101586208
musicman
2004-11-27 23:10
2004.12.12
Перекодирование из ANSI в OEM русского текста


10-1071166334
epflorov
2003-12-11 21:12
2004.12.12
20 декабря сайту corbajeb 2 года :). Поздравляю.


14-1101018661
Gero
2004-11-21 09:31
2004.12.12
Про память


3-1100160717
S@lik
2004-11-11 11:11
2004.12.12
Фильтрация