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

Вниз

Сервер и форма   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.049 c
1-1140024999
Volf_555
2006-02-15 20:36
2006.03.19
Как произвести левый клик мышью при возникновении контекста?


2-1141064094
Michael5
2006-02-27 21:14
2006.03.19
Вопрос по System tray.После выхода из программы ярлык не исчезает


2-1141170188
kizam
2006-03-01 02:43
2006.03.19
VK_A не пашет


6-1133119368
asd
2005-11-27 22:22
2006.03.19
Edit и web страничка?


2-1141244051
redlord
2006-03-01 23:14
2006.03.19
грамматное решение