Mist, so ganz geht das aber noch nicht.
Wenn ich den Client 2mal öffne und dann gegenseitig mit jeweils unterschiedlichen Accounts anmelde und mir dann schreiben möchte, kommt es vor, das beim Absenden einer nachricht bei Client1 diese im aktuellen Nachrichtenfenster bei Client1 nicht angezeigt wird...
Genauso kann es sein, das wenn Client2 eine Nachricht an Client1 schreibt, Client1 diese nicht angezeigt bekommt, diese aber bei Client2 im aktuellen Nachrichtenfenster stehen hat.
Das "+2" musste ich bei dem Findcomponent einfügen, da sonst gar keine Nachricht im Fenster angezeigt wurde. Welche Anomalie ist dafür verantwortlich, bzw. wie kann ich das wieder loswerden?
Hier die entsprechenden Codes:
Code1 -> Wenn der Server eine Nachricht an den Client sendet (Format: rtext[0]= Art des ankommen strings (z.b. Neue Nachricht), rtext[1]= Name des Users, welcher einem Schrieb, rtext[2]= ist der Text, der geschrieben wurde.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| if (rtext[0]='newmsgs')then begin add:=true; for i:=0 to chatpage.PageCount-1 do begin if (chatpage.Pages[i].Caption=rtext[1])then begin i2:=i; add:=false; end; end; if (add=true)then begin tabSheet := TTabSheet.Create(nil); tabSheet.PageControl := chatpage; tabsheet.Caption:= rtext[1]; listbox:=tlistbox.Create(nil); listbox.Parent:=tabsheet; listbox.Align:=alclient; listbox.Name:='chat'+IntToStr(chatpage.PageCount+1); listbox.Items.Add('Du redest jetzt mit: '+tabsheet.Caption); listbox.Items.Add('----------------------------------------'); listbox.items.add('['+TimeToStr(Time)+'] Von '+rtext[1]+': '+rtext[2]); chatpage.ActivePage:=tabsheet; end else begin chatpage.ActivePageIndex:=i2; if chatpage.FindComponent('chat'+IntToStr(i2+2)) as Tlistbox<> nil then TListBox(chatpage.FindComponent('chat'+IntToStr(i2+2))).Items.Add('['+TimeToStr(Time)+'] Von '+rtext[1]+': '+rtext[2]); end; |
Code2 -> Wenn man einen User aus der Userlist anschreiben möchte (Es wird ein neuer Tabsheet geöffnet, worin man diesen User halt anschreiben kann:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| procedure TForm1.friendslistClick(Sender: TObject); var i,i2:integer; add:boolean; tabSheet : TTabSheet; listbox : Tlistbox; begin add:=true; for i:=0 to chatpage.PageCount-1 do begin if (chatpage.Pages[i].Caption=friendslist.Items.Strings[friendslist.itemindex])then begin i2:=i; add:=false; end; end; if (add=true)then begin tabSheet := TTabSheet.Create(nil); tabSheet.PageControl := chatpage; tabsheet.Caption:= friendslist.Items.Strings[friendslist.itemindex]; listbox:=tlistbox.Create(chatpage); listbox.Name:='chat'+IntToStr(chatpage.PageCount+1); listbox.Parent:=tabsheet; listbox.Align:=alclient; listbox.Items.Add('Du redest jetzt mit: '+tabsheet.Caption); listbox.Items.Add('----------------------------------------'); chatpage.ActivePage:=tabsheet; end else chatpage.ActivePageIndex:=i2; end; |
Code3 -> Wenn der Client eine Nachricht zum anderen user absendet
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.Button3Click(Sender: TObject); var tabSheet : TTabSheet; listbox : Tlistbox; begin try if (chatpage.ActivePageIndex>=0)AND (edit4.text>'')then begin sendit.Items.Add('login|'+edit1.text+'|'+edit2.Text+'|sendmsg|'+chatpage.Pages[chatpage.ActivePageIndex].caption+'|'+edit4.text); if chatpage.FindComponent('chat'+IntToStr(chatpage.ActivePageIndex+2)) as Tlistbox<> nil then Tlistbox(chatpage.FindComponent('chat'+IntToStr(chatpage.ActivePageIndex+2))).items.add('['+TimeToStr(Time)+'] Von Dir: '+edit4.text);
end; edit4.Text:=''; except end; end; |
Die try / except Sache hab ich drin, damit es nicht sofort Fehler wirft. Die Einrückung ist (noch) nicht so perfekt, werde ich aber noch nachholen. Wenn jemand noch den Client oder den Server braucht, diese sind hier angehängt:
dl.dropbox.com/u/563...lphi/chat_client.exe
dl.dropbox.com/u/563...lphi/chat_server.exe
Ich hoffe ihr habt eine Lösung parat, da ich an diesem Problem schon 2 Stunden verzweifel.
Mfg