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

Вниз

[?]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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
14-1133005560
Хинт
2005-11-26 14:46
2005.12.18
P-Cad и K155


2-1133438246
Vis74
2005-12-01 14:57
2005.12.18
Создание резервной копии приложения - ( *.exe.bak)


2-1132662738
JTAG
2005-11-22 15:32
2005.12.18
Ув. Доны подскажите понадобилось считать параметры командной


2-1133718967
Developerr
2005-12-04 20:56
2005.12.18
Форму в нижний правый угол


3-1130736135
chsv
2005-10-31 08:22
2005.12.18
Не выполняется удаление из Access через ADO