Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1141038241
DesertAlex
2006-02-27 14:04
2006.03.19
try не работает...


6-1134067685
dDan
2005-12-08 21:48
2006.03.19
Ошибка 302 и как с ней бороться (Indy)


5-1127730027
DimaBr
2005-09-26 14:20
2006.03.19
Пункт меню редактора компонента 2


5-1127279900
OlegM
2005-09-21 09:18
2006.03.19
Перебор компонетнов на форме и установка свойств для них


2-1141654657
SMAC
2006-03-06 17:17
2006.03.19
IntTo...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский