Форум: "Основная";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];
Внизназначение обработчика внутри класса Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.05 c