![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Chat
Doplhin1 © (2005-08-16 20:42:00)Привет Всем !
Пишу чат для сетки
Вопрос я хочу чтобы когда приходит собщение создавать форму
которое будет показывать сообщение
но когда в компоненте TTcpServer в евенте OnGetThread я пытаюсь создать форму начинаются проблемы
аналогично с использованием Indy в компоненте TIdHTTPServer
в евенте OnCommandGet при создании формы начинаются проблемы
Doplhin1 (2005-08-22 21:49:00) [1]Тоже идея :)
Digitman (2005-08-22 18:12:00) [2]
> Doplhin1 (19.08.05 20:21) [5]
и незачем было весь этот огород городить с созданием трэда..
достаточно в теле IdHTTPServer1CommandGet послать (Send/PostMessage) окну формы fm_main какое-либо заранее предопределенное тобой сообщение, в обработчике которого как раз и можно создать форму Tfm_pers
Doplhin1 (2005-08-19 20:21:00) [3]решение простое даже очень
надо обьявить что то вроде
TClientDataThread = class(TThread)
private
public
ListBuffer :TStringList;
TargetList :TStrings;
Form : Tfm_pers_mess;
IdUser : string;
AMessage : string;
procedure synchAddDataToControl;
constructor Create(CreateSuspended: Boolean);
procedure Execute; override;
procedure Terminate;
end;
procedure TClientDataThread.Execute;
begin
Synchronize(synchAddDataToControl);
end;
procedure TClientDataThread.Terminate;
begin
ListBuffer.Free;
inherited;
end;
constructor TClientDataThread.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
FreeOnTerminate := true;
ListBuffer := TStringList.Create;
end;
procedure TClientDataThread.synchAddDataToControl;
var
frm : Tfm_pers_mess; // вот форма которая будет создаваться
flag : boolean;
mrc : TMessageRecord;
intIdUser : Integer;
i: Integer;
begin
frm := Tfm_pers_mess.Create(fm_main);
frm.AddText(AMessage,fm_main.lv_usr_invisible.Items[intIdUser].SubItems[0], clRed);
PlaySound(Pchar(Str_snd_message), 0, SND_FILENAME + SND_NOWAIT + SND_ASYNC);
FlashWindow(frm.Handle,true);
frm.Show;
end;
а в евенте
procedure Tfm_main.IdHTTPServer1CommandGet(AThread: TIdPeerThread;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
Var response,scriptName:string;
IdUser : integer;
i : integer;
s: string;
DataThread: TClientDataThread;
begin
// AThread.Start;
scriptName:=StringReplace(ARequestInfo.Document,'/','',[rfReplaceAll]);
try
response:='BAD';
if scriptName='message' then
begin //
response:=str_responce_ok;
DataThread:= TClientDataThread.Create(true);
DataThread.IdUser := ARequestInfo.RemoteIP;
DataThread.AMessage := ARequestInfo.Params.Values['text'];
DataThread.Resume;
end;
except
on e: Exception do showMessage(e.Message);
//log.AddNewRecord(e.Message,'Exception',true,true);
end;
AResponseInfo.ContentText:=response;//+ARequestInfo.Params.Text;
///------
end;
Digitman (2005-08-17 12:41:00) [4]
> в компоненте TTcpServer в евенте OnGetThread я пытаюсь создать
> форму
в обработчике этого события от тебя требуется создать трэд, а не форму !
читать умеешь ?
GetThread = Получить трэд !!
Alexander Panov (2005-08-17 02:20:00) [5]Я так чат писал, всё работало хорошо, тока за место формы звук был...
У меня с TClientSocket и TServerSocket тоже работало, но таких серьезных проблем не возникало.
Yegorchic (2005-08-17 00:57:00) [6]Лучше используй IdUDPServer/IdUDPClient.
Я так чат писал, всё работало хорошо, тока за место формы звук был...
Alexander Panov (2005-08-16 22:23:00) [7]Наверное серьезные проблеммы начинаются?