Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];

Вниз

Присвоение 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.051 c
14-1110363553
R.D.I.
2005-03-09 13:19
2005.03.27
Сайт kladovka.com.ru приостановил работу?


14-1110270172
AlterEgo of WondeRu
2005-03-08 11:22
2005.03.27
Замятин "МЫ"


14-1110203727
Ломброзо
2005-03-07 16:55
2005.03.27
По просьбам трудящихся!


3-1109836998
neat
2005-03-03 11:03
2005.03.27
Отследить изменение поля таблицы в DBGrid


8-1101898843
X-Disa
2004-12-01 14:00
2005.03.27
Вращение битмапа





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский