![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
назначение обработчика внутри класса [D7]
Ken © (2004-11-25 12:03:00)Уважаемые мастера, хочу всунуть в свой класс Сокет и описать все обработчики внутри класса! При етом необходимо, чтоб сокет снаружы класса вообще не был виден!
Пишу:
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; Ошибка: Несовместим указатель метода и процедура
Вопрос такой:
Как грамотно ето обьявить и в какой части кода описать ету процедуру, чтоб вне класса она вообще небыла видна?
Digitman (2004-11-25 12:49:00) [1]строковое представление этого адреса ты можешь получить вызовом MySocket.Socket.LocalAddress
далее, чтобы получить те самые "4 байта" из этого стр.представления, чеши макушку сам ... не так уж и сложно ...
Ken (2004-11-25 12:37:00) [2]Мастера, подскажите пожалуйста, как получить 4 байта, содержащие мой ip адресс?
Ken (2004-11-25 12:25:00) [3]
> Digitman
Понял. переписал и заработало уже как надо! Спасибо.
У меня еще такой вопрос:
Как получить 4 байта, содержащие мой ip?
Digitman (2004-11-25 12:19:00) [4]
> Ken (25.11.04 12:15) [4]
> Вписал pOnConnect : procedure(Sender: TObject;
> Socket: TCustomWinSocket) of object; и заработало.
не заработало, а компиляция безошибочно прошла
а работатьэто не будет, потому что у тебя это лишь указатель на метод, но не собственно метод, который еще декларировать и реализовать нужно
Digitman (2004-11-25 12:16:00) [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;
TUser (2004-11-25 12:15:00) [6]OnEvent: TNotifyEvent;
TNotifyEvent = procedure (Sender: TObject)of object;
Ken (2004-11-25 12:15:00) [7]Вписал pOnConnect : procedure(Sender: TObject;
Socket: TCustomWinSocket) of object; и заработало.
Ken (2004-11-25 12:13:00) [8]
> TUser
теперь ругаеться на Parametr list differ! Та же самая строка
TUser (2004-11-25 12:11:00) [9]procedure of object