Форум: "Основная";
Текущий архив: 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.038 c