![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сервер и форма
Purgen © (2006-03-02 22:23:00)Добрый вечер!!!
procedure TForm1.TCPServerExecute(AThread: TIdPeerThread);
var
str:SArray;
cd:TCopyDataStruct;
index,i:integer;
tempform:TForm2;
begin
split(str,AThread.Connection.ReadLn(),'|');
index:=-1;
tempform:=TForm2.Create(nil);
for i:=0 to 255 do
if connectlist[i]<>nil then
if connectlist[i].ip=str[0] then
index:=i;
if index<0 then begin
tempform.Show;
end
else begin
cd.lpData:=PChar(str[1]+'|'+str[2]+'|'+str[3]);
cd.cbData:=length(str[1]+'|'+str[2]+'|'+str[3])+1;
sendmessage(connectlist[index].handle,WM_COPYDATA,0,LParam(@cd));
SetActiveWindow(connectlist[index].handle);
end;
end;
Это "кусок" сетевого чата:
короче при получении сообщения должна создаться форма для разговора (Класс TForm2). Почему-то именно в ЭТОМ обработчике событий она не создается. Появляются очертания окошка и все виснет...Если просто кнопку сделать, в обработчике onClick то тоже самое будет превосходно выполнятся!!! Спрашивается можно ли вообще в обработчике OnExecute сервера IdTCPServer (от Indy) создать эту форму???
Purgen (2006-03-03 08:13:00) [1]Спасибо...Че нить-то придумаем...
Джо (2006-03-03 02:31:00) [2]> [4] Eraser © (03.03.06 01:59)
> в 9 версии в TIdPeerThread присутствует метод Synchronize
> :-)
> а вот в 10 от потоков, якобы, ушли ... там надо извращаться
> )
Не в курсе был насчет этого, спасибо.
---
2 Purgen
А, вообще-то, можно и так: посылать из OnExecute заранее известное сообщение (SendMessage) свой форме (на которой находится TCPServer), а в обработчике этого сообщения уже и выполнять создание другой формы. Но лучше все-таки синхронизировать в доп. потоке, кажется. И разберись с тем, что сказал [4] Eraser, согласуй это со своей версией Indy.
Eraser (2006-03-03 01:59:00) [3]
> Джо © (02.03.06 22:50) [1]
в 9 версии в TIdPeerThread присутствует метод Synchronize :-)
а вот в 10 от потоков, якобы, ушли ... там надо извращаться )
Джо (2006-03-02 23:37:00) [4]> [2] Purgen (02.03.06 23:04)
> А как тодыть мне осуществить задуманное???
Да как-нибудь извратиться :)
Например, в OnExecute создавать и запускать специальный поток (наследник TThread), задача которого — в собственном методе создавать форму, причем метод этот вызывать из Synchronize.
---
Встречный вопрос: а при чем здесь конференция "WinAPI"?
Purgen (2006-03-02 23:04:00) [5]А как тодыть мне осуществить задуманное???
Джо (2006-03-02 22:50:00) [6]> Спрашивается можно ли вообще в обработчике OnExecute сервера
> IdTCPServer (от Indy) создать эту форму???
Не желательно :0) OnExecute выполняется НЕ в основном потоке, синхронизация с основным потоком в нем НЕ производится.