Главная страница
    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.46 MB
Время: 0.013 c
1-1131656188
Silver...
2005-11-10 23:56
2005.12.18
Динамически создать Action в TActionList-e


14-1133020939
Cerberus
2005-11-26 19:02
2005.12.18
Подскажите текстовый редактор.


8-1121256964
webpauk
2005-07-13 16:16
2005.12.18
Рисование


14-1133078119
ArtemESC
2005-11-27 10:55
2005.12.18
Обработчик прерываний


2-1133247340
taraban
2005-11-29 09:55
2005.12.18
поможите люди





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский