Главная страница
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.035 c
10-1115290907
Santyago
2005-05-05 15:01
2006.03.19
Как в Excel документе можно определить конец файла


1-1139781777
FBuilder
2006-02-13 01:02
2006.03.19
Посылка строк


2-1141547139
Layner
2006-03-05 11:25
2006.03.19
Подскажите, почему не могу "достучаться" до TADOConn из TDBGrid?


1-1140030805
Vovanchik
2006-02-15 22:13
2006.03.19
Программное сжатие картинки...


1-1139816713
BanderLog
2006-02-13 10:45
2006.03.19
Отображение длительных процессов