Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
ВнизСервер и форма Найти похожие ветки
← →
Purgen (2006-03-02 22:23) [0]Добрый вечер!!!
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) создать эту форму???
← →
Джо © (2006-03-02 22:50) [1]> Спрашивается можно ли вообще в обработчике OnExecute сервера
> IdTCPServer (от Indy) создать эту форму???
Не желательно :0) OnExecute выполняется НЕ в основном потоке, синхронизация с основным потоком в нем НЕ производится.
← →
Purgen (2006-03-02 23:04) [2]А как тодыть мне осуществить задуманное???
← →
Джо © (2006-03-02 23:37) [3]> [2] Purgen (02.03.06 23:04)
> А как тодыть мне осуществить задуманное???
Да как-нибудь извратиться :)
Например, в OnExecute создавать и запускать специальный поток (наследник TThread), задача которого — в собственном методе создавать форму, причем метод этот вызывать из Synchronize.
---
Встречный вопрос: а при чем здесь конференция "WinAPI"?
← →
Eraser © (2006-03-03 01:59) [4]
> Джо © (02.03.06 22:50) [1]
в 9 версии в TIdPeerThread присутствует метод Synchronize :-)
а вот в 10 от потоков, якобы, ушли ... там надо извращаться )
← →
Джо © (2006-03-03 02:31) [5]> [4] Eraser © (03.03.06 01:59)
> в 9 версии в TIdPeerThread присутствует метод Synchronize
> :-)
> а вот в 10 от потоков, якобы, ушли ... там надо извращаться
> )
Не в курсе был насчет этого, спасибо.
---
2 Purgen
А, вообще-то, можно и так: посылать из OnExecute заранее известное сообщение (SendMessage) свой форме (на которой находится TCPServer), а в обработчике этого сообщения уже и выполнять создание другой формы. Но лучше все-таки синхронизировать в доп. потоке, кажется. И разберись с тем, что сказал [4] Eraser, согласуй это со своей версией Indy.
← →
Purgen (2006-03-03 08:13) [6]Спасибо...Че нить-то придумаем...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.013 c