![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как назначить обработчик события сокету [D5, WinXP]
TButton © (2004-04-14 12:49:00)В продолжение предыдущей темы (закрыта). В порядке тренировки пишу прогу.
program Project1;
{$APPTYPE CONSOLE}
USES
SysUtils,
scktcomp;
procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
end;
VAR
gate: TServerSocket;
BEGIN
gate:=TServerSocket.Create(nil);
Writeln('Socket created.');
gate.Port:=7000;
gate.OnClientConnect:=ClientConnect;
Writeln('Socket initialized.');
gate.Open;
Writeln('Socket opened.');
gate.Free;
Writeln('Socket destroyed.');
Write('Press Enter'); Readln;
END.
компиляю. компилятор показывает на выделеную строку и говорит "[Error] Project1.dpr(17): Incompatible types: method pointer and regular procedure" я понимаю что как-то неправильно задекларировал процедуру, а как сделать это правильно никак не пойму.
TButton (2004-04-14 20:34:00) [1]<оффтопик>
ладно. на сегодн все, и думаю все на долго. с утра провайдер проснется, сладко потянется и хладнокровно щелкнет моим рубильником ~ на месяц лишив меня радости общения с вами. а ведь еще столько нужно узнать... но здоровье дороже.
</оффтопик>
Verg (2004-04-14 20:29:00) [2]
> TButton © (14.04.04 20:26) [20]
Спроси в WinAPI - 4-ый кабинет направо.
А в полчетвертого утра я даже прогноз погоды плохо понимаю....
TButton (2004-04-14 20:26:00) [3]re 19
вообще-то вместо длинной ссылки можно было сказать "посмотри в хелпе". в хелпе я посмотрел, но то ли язык подзабыл, то ли потому что уже пол четвертого утра и очень хочется спать, ничего не понял. надеялся от вас, сэр, услышать немного русских слов которые в общих чертах осветили бы суть проблемы.
Verg (2004-04-14 20:23:00) [4]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/messagesandmessagequeuesreference/messagesandmessagequeuesfunctions/getmessage.asp
TButton (2004-04-14 20:09:00) [5]Удалено модератором
Примечание: Оффтоп...
Verg (2004-04-14 20:06:00) [6]Удалено модератором
Примечание: Оффтоп...
TButton (2004-04-14 20:06:00) [7]re 13
большое спасибо, сэр. кажется я начинаю вникать. не могли бы вы на последок коротенько объяснить что возвращает GetMessage?
TButton (2004-04-14 19:58:00) [8]Удалено модератором
Примечание: Оффтоп...
Verg (2004-04-14 19:51:00) [9]Удалено модератором
Примечание: Оффтоп...
Verg (2004-04-14 19:48:00) [10]var Msg : TMsg;
while GetMessage(Msg, 0,0,0) do
DispatchMessage(Msg);
TButton (2004-04-14 19:16:00) [11]Удалено модератором
Примечание: Оффтоп...
Fay (2004-04-14 19:10:00) [12]Удалено модератором
Примечание: Оффтоп...
TButton (2004-04-14 19:08:00) [13]re 8
нет, конечно не тайна
в Form1:TForm1
объявляется procedure ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
это процедура назначается для обработки события onConnect компонента ServerSocket1:TServerSocket
у формы получается ее назначить, у меня нет, пытался узнать как она это делает... но она прячет этот момент, только в DFMке есть строчка onClientConnect = ServerSocket1ClientConnect
re 9
у меня тоже возникла эта мыль. а вы не подскажете как именно это сделать, поскольку я раньше подобным не занимался.
Verg (2004-04-14 18:48:00) [14]
> TButton © (14.04.04 18:42) [7]
Стопудово надо организовать цикл выборки-диспетчеризации сообщений.
VMcL (2004-04-14 18:46:00) [15]>>TButton © (14.04.04 18:42) [7]
Что именно не получается, можно поинтересоваться? Или это военная тайна? Где клиент, что он делает?
TButton (2004-04-14 18:42:00) [16]извините, всеравно не помогает =(
интересно, почему у формы получается, а у меня нет... 100% что-то не так делаю...
TButton (2004-04-14 18:37:00) [17]пардон, запамятовал. сию минуту поправим-с =)
VMcL (2004-04-14 18:18:00) [18]>>TButton © (14.04.04 18:16) [4]
Еще раз внимательно см. [3]. Не находишь разницы с [4]?
TButton (2004-04-14 18:16:00) [19]re 1
ваш метод помог избавиться лишб от приставаний компилятора. Обработчик при коннекте не запускается, хотя коннект осуществляется.
re 2, 3
извините, но ваш метод дал те же результаты. или я что-то не так делаю
program Project1;
{$APPTYPE CONSOLE}
USES
SysUtils,
scktcomp;
VAR
gate: TServerSocket;
b: boolean;
onConnect: TMethod;
procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
Socket.SendText('Acepted.'+#13#10);
Writeln(Socket.RemoteAddress, Socket.LocalAddress);
b:=true;
end;
BEGIN
onConnect.Code:=@ClientConnect;
onConnect.Data:=nil;
gate:=TServerSocket.Create(nil);
Writeln('Socket created.');
gate.Port:=7000;
gate.OnClientConnect:=TSocketNotifyEvent(onConnect);
Writeln('Socket initialized.');
gate.Open;
Writeln('Socket opened.');
// main loop
b:=false;
repeat
until b;
// end
gate.Free;
Writeln('Socket destroyed.');
Write('Press Enter'); Readln;
END.
VMcL (2004-04-14 13:27:00) [20]Ой, забыл, ещё нужно процедуру по-другому определить:
procedure ClientConnect(Dummy: Pointer; Sender: TObject; Socket: TCustomWinSocket);