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

Вниз

Присвоение OnClientRead обработчика   Найти похожие ветки 

 
shadowonline ©   (2005-03-10 11:01) [0]

Проблемма такая, создаю переменную типа TServerSocket, инициализирую ее и пытаюсь присвоить свойству OnClientRead в соответствие процедуру. На что Delphi 5 говорит что Incompatible types: method pointer and regular procedure.
То же самое на форме с сокетами происходит без проблемм.
Может чего то не хватает, помогите плиззззз!
Листинг:
ServerSocket:= TServerSocket.Create(nil);
With ServerSocket Do Begin
 Port:= 4747;
 ServerType:= stThreadBlocking;
 ThreadCacheSize:= 10;
 OnClientRead:= ServerSocketClientRead;//Error
 Active:= True;
End;


 
KSergey ©   (2005-03-10 11:13) [1]

http://www.delphikingdom.com/helloworld/runtime_comp.htm

здесь есть ответ на этот вопрос


 
shadowonline ©   (2005-03-10 11:38) [2]

Ссылка почему то не работает.
В каталоге сервера не найден запрошенный материал
/system/404.asp?404;http://www.delphikingdom.com:80/helloworld/runtime_comp.htm


 
ShadowOnline ©   (2005-03-10 12:42) [3]

Фишка в том что при создании сокета на форме и присвоение ему процедуры обработки описанной в разделе описания процедур формы, все работает.
Моя программа не содержит формы и присвоение события OnClientRead:= ServerSocketClientRead; дает ошибку.
Может процедуру нужно как то хитро описать?
Формы не подключаю чтобы exe-к был маленьким, или без формы тут не как?


 
REA   (2005-03-10 13:00) [4]

Формы ни при чем, но метод должен быть членом любого класса, а не просто процедурой.

Проще наверно унаследовать от custom версии сокета или сделать надстройку над TServerSocket или просто отдельный класс с функцией обработки, что особого смысла не имеет, но проблему тоже решит.


 
Digitman ©   (2005-03-10 13:27) [5]


> ShadowOnline ©   (10.03.05 12:42) [3]


разницу между регулярной процедурой (классический Паскаль) и процедурным методом класса (объектно-ориентированный Паскаль) осюсяешь ?

или что в лоб что по лбу - индифферентно ?


 
KSergey ©   (2005-03-10 13:37) [6]

> [2] shadowonline ©   (10.03.05 11:38)
> Ссылка почему то не работает.

Жаль, все же переколбасили оне сервер...
вот верная ссылка
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=342


 
shadowonline ©   (2005-03-10 15:44) [7]

Спасибо за помощь, все получилось.
Просто в первые с этим столкнулся. :-)))


 
shadowonline ©   (2005-03-10 16:40) [8]

Мда описалось все хорошо, вот только он почемуто из сокута всеравно не читает.
Есть такая структура:

While (GetMessage(Message, Handle, 0, 0)) Do Begin
//  WaitForSingleObject(WhEvent, 1000);
 TranslateMessage(Message);
 DispatchMessage(Message);
End;

По идее закоментированная строка должна довать задержку на секунду а затем цикл должен повторятся. А он почему то останавливается на GetMessage и чегото ждет. Возможно по этому сокет и нефунциклит, хотя к нему можно приконектится и послать в него текст.

Плохо я еще понимаю как этот миниатюрный код работает или должен работать, может в нем что то криво или руки у меня еще кривые.
За основу был взят следующий монимальный код:

program Project1;

uses
 windows, messages, sysutils;

{$R *.RES}

var
Instance: HWnd;
WindowClass: TWndClass;
Handle: HWnd;
msg: TMsg;

procedure DoExit;
begin
Halt;
end;

function WindowProc (Hwn,msg,wpr,lpr: longint): longint; stdcall;
begin
result:=defwindowproc(hwn,msg,wpr,lpr);
if msg=wm_destroy then
 DoExit;

if msg=wm_KeyDown then
 if wpr=VK_ESCAPE then
  DoExit;
end;

begin
instance :=GetModuleHandle(nil);

WindowClass.style:=CS_HRedraw or CS_VRedraw;
WindowClass.Lpfnwndproc:=@windowproc;
WindowClass.Hinstance:=Instance;
WindowClass.HbrBackground:= color_btnface;
WindowClass.LpszClassName:="DX";
WindowClass.Hcursor:=LoadCursor(0,IDC_ARROW);

RegisterClass(WindowClass);

Handle:=CreateWindowEx (0,"DX","",WS_POPUP, 5,5, 200, 200,0,0,instance, nil);
ShowWindow(Handle, SW_SHOW);
UpdateWindow (Handle);

while (GetMessage(msg, 0, 0, 0)) do
 begin
  translatemessage(msg);
  dispatchmessage (msg);
 end;
end.



 
Digitman ©   (2005-03-10 16:50) [9]


> почему то останавливается на GetMessage и чегото ждет


не "чегото", а сообщений трэду или его окнам


> За основу был взят следующий монимальный код


начерта он тебе сдался, этот код - ума не приложу ..

на чем ты решил сэкономить-то ? на якобы модуле Forms ? так ведь в Д5 этот  модуль все равно будет задействован, ибо он активно используется модулем scktcomp.pas


 
shadowonline ©   (2005-03-11 07:42) [10]

Руки я себе выпрямил, заработало.
А что использует - это точно. Обидно, легче просто на форме сделать. Минимизация проги не удалась.
Спасибо всем кто откликнулся!!!!!!!


 
shadowonline ©   (2005-03-11 07:42) [11]

Руки я себе выпрямил, заработало.
А что использует - это точно. Обидно, легче просто на форме сделать. Минимизация проги не удалась.
Спасибо всем кто откликнулся!!!!!!!


 
Digitman ©   (2005-03-11 08:38) [12]


> Обидно, легче просто на форме сделать


можно и без формы .. благо она в дан.случае - как телеге 5-е колесо .. и кно дополнительное тоже создавать не нужно - класс TClientSocket сам создаст нужное ему окно ... от тебя лишь требуется организовать цикл ожидания/выборки/диспетчеризации вин-сообщений, тот самый с GetMessage()



Страницы: 1 вся ветка

Текущий архив: 2005.03.27;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.038 c
1-1110900914
Руслана
2005-03-15 18:35
2005.03.27
Можно ли отловить такое событие...


3-1109487619
_Ruslan_
2005-02-27 10:00
2005.03.27
Глюк EhLib


1-1110529268
Гость
2005-03-11 11:21
2005.03.27
Кнопка close (x) в верхнем левом (правом) углу


1-1111045453
серж
2005-03-17 10:44
2005.03.27
передать параметры приложению


4-1108538439
Гость
2005-02-16 10:20
2005.03.27
Кэш