Форум: "Сети";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];
ВнизChat Найти похожие ветки
← →
Doplhin1 (2005-08-16 20:42) [0]Привет Всем !
Пишу чат для сетки
Вопрос я хочу чтобы когда приходит собщение создавать форму
которое будет показывать сообщение
но когда в компоненте TTcpServer в евенте OnGetThread я пытаюсь создать форму начинаются проблемы
аналогично с использованием Indy в компоненте TIdHTTPServer
в евенте OnCommandGet при создании формы начинаются проблемы
← →
Alexander Panov © (2005-08-16 22:23) [1]Наверное серьезные проблеммы начинаются?
← →
Yegorchic © (2005-08-17 00:57) [2]Лучше используй IdUDPServer/IdUDPClient.
Я так чат писал, всё работало хорошо, тока за место формы звук был...
← →
Alexander Panov © (2005-08-17 02:20) [3]Я так чат писал, всё работало хорошо, тока за место формы звук был...
У меня с TClientSocket и TServerSocket тоже работало, но таких серьезных проблем не возникало.
← →
Digitman © (2005-08-17 12:41) [4]
> в компоненте TTcpServer в евенте OnGetThread я пытаюсь создать
> форму
в обработчике этого события от тебя требуется создать трэд, а не форму !
читать умеешь ?
GetThread = Получить трэд !!
← →
Doplhin1 (2005-08-19 20:21) [5]решение простое даже очень
надо обьявить что то вроде
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-22 18:12) [6]
> Doplhin1 (19.08.05 20:21) [5]
и незачем было весь этот огород городить с созданием трэда..
достаточно в теле IdHTTPServer1CommandGet послать (Send/PostMessage) окну формы fm_main какое-либо заранее предопределенное тобой сообщение, в обработчике которого как раз и можно создать форму Tfm_pers
← →
Doplhin1 (2005-08-22 21:49) [7]Тоже идея :)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c