Главная страница
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.034 c
9-1091815630
Антон
2004-08-06 22:07
2004.12.12
[GLScene]: TMemoryStream


3-1100246373
a_tereshin
2004-11-12 10:59
2004.12.12
Как получить список доступных алиасов


1-1101744749
Сор
2004-11-29 19:12
2004.12.12
TextFile


3-1100521248
SAndre
2004-11-15 15:20
2004.12.12
SQLOLE Как получить наименование столбцов запроса ?


9-1092296171
Юра
2004-08-12 11:36
2004.12.12
Помогите!