Форум: "Начинающим";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
Вниз[?]TClientSocket & TServerSocket Найти похожие ветки
← →
Юрий Ж. (2005-12-01 02:35) [0]Какк их использовать в run-time (назначение процедур на OnConnect и так далее)???
Заранее большое спасибо!
← →
Васяня (2005-12-01 05:56) [1]Так же как и остальные компоненты создаваемые в ран-тайме...
← →
Юрий Ж. (2005-12-01 23:05) [2]Ха-ха-ха!!!
А конкретно???
← →
kami © (2005-12-02 01:01) [3]Юрий Ж. (01.12.05 23:05) [2]
А конкретно???
А задать конкретный вопрос ?
Что конкретно нужно, что конкретно не получается? Бо сабж слишком расплывчатый, можно рассказывать очень долго, и так и не подобраться к необходимой информации. Посему краткий и исчерпывающий ответ на конкретный вопрос [0] был дан в Васяня [1]
← →
Юрий Ж. (2005-12-02 02:27) [4]Ну например:
procedure OnConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
...
end;
......
Result:=TClientSocket.Create(nil);
Result.OnConnect:=OnConnect; // << Ошибка здесь!
Выдается ошибка:
[Error] Unit2.pas(105): E2009 Incompatible types: "method pointer and regular procedure"
В чем дело и как это обойти???
← →
Digitman © (2005-12-02 08:25) [5]
> В чем дело
именно в том, о чем тебе и пишет компилятор
с-во OnConnect имеет тип процедурный метод объекта, а ты пытаешься назначить этому св-ву значение совершенно иного типа, а именно регулярную процедуру
в любом классе объяви и реализуй метод OnConnect с соотв.параметрами, после чего строка
Result.OnConnect:=Объект_того_самого_класса.OnConnect;
будет успешно скомпилирована
← →
sniknik © (2005-12-02 08:33) [6]пытаешся указателю на метод присвоить процедуру, даже если это удастся, работать не будет (типы разные) о чем и сообшение.
метод это структура с собственно процедурой (of object) и ссылкой на хозяина метода, значит чтобы "обойти" ошибку надо либо составить и присвоить эту самую структуру с использованием твоей процедуры либо описать процедуру внутри обьекта.
проще всего второе. попросту надо позаботится чтобы в описании присутствовало
procedure TForm1.OnConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
...
end;
например. также у формы тоже прописать заголовок.
можно еще поменять сам принцип, и не пользоваться "пользовательскими" методами, а описать наследника от TClientSocket и перекрыть "оригинал" события. пользоваться естественно уже наследником.
TMyClientSocket = class(TClientSocket)
protected
procedure Event(Socket: TCustomWinSocket; SocketEvent: TSocketEvent); override;
end;
procedure TMyClientSocket.Event(Socket: TCustomWinSocket; SocketEvent: TSocketEvent);
begin
... //отбирай тут свое и обрабатывай
end;
Result:= TMyClientSocket.Create(nil);
//Result.OnConnect:=OnConnect; // << этого уже не надо!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c