Ovako primam podatke sa servera:
Code:
procedure TGProxy.UDPServerUDPRead(AThread: TIdUDPListenerThread; AData: TIdBytes; ABinding: TIdSocketHandle);
var
GLine : WideString;
Command, Params : WideString;
begin
GLine := UTF8Decode(BytesToString(AData));
If Length(GLine) > 0 Then
Begin
....
End;
end;
procedure TGProxy.UDPServerUDPRead(AThread: TIdUDPListenerThread; AData: TIdBytes; ABinding: TIdSocketHandle);
var
GLine : WideString;
Command, Params : WideString;
begin
GLine := UTF8Decode(BytesToString(AData));
If Length(GLine) > 0 Then
Begin
....
End;
end;
A ovako ih saljem:
Code:
procedure TGProxy.Send(const ACommand : WideString);
begin
If ComponentModuleWindow.GUDPClient.Active Then
ComponentModuleWindow.GUDPClient.Send('||127.0.0.1 ' + UTF8Encode(ACommand));
end;
procedure TGProxy.Send(const ACommand : WideString);
begin
If ComponentModuleWindow.GUDPClient.Active Then
ComponentModuleWindow.GUDPClient.Send('||127.0.0.1 ' + UTF8Encode(ACommand));
end;
E sada. Sve to sto posaljem i primim ja treba da dodam u TRichView, komponentu slicnu RichEditu, koja podrzava Unicode. Vec postoji funkcionalan klijent koji je napisan ranije, i koji podrzava unicode. Kada iz njega posaljem recimo test cirilicni string mom klijentu, moj klijent prikaze uredno to u richviewu. Medjutim, kada pokusam da posaljem unicode string iz mog klijenta ka serveru, stari klijent prikaze taj moj string kao ??????. I kada pokusam da dodam taj string u RichView sa TRichView.AddTextNLW() metodom, doda umesto tog cirilicnog stringa neki bezvezni tekst sa apostrofima. Svuda koristim WideString. Any ideas ?
Kao editbox koristim TTntEdit.
Evo sta se desava kada koristim .Add() i .AddTextNLW() metode:

Ovo chatujem sam sa sobom :) Svaka neparna linija se direktno dodaje iz klijenta u richview, a svaka parna se prima sa servera, tj klijent je posalje na server i onda je primi sa servera i ispise.
Kada koristim .Add() onda se tekst lepo ispise, ali primljeni tekst sa servera ne, a kad koristim AddToTextNLW(), tekst se ne ispisuje lepo, kao ni primljeni tekst sa servera. Takodje, kada saljem unicode stringove iz starog klijenta, .Add() ih ispisuje kao ?????, dok ih AddTextNLW() ispisuje kako treba.
[Ovu poruku je menjao reiser dana 22.06.2011. u 18:36 GMT+1]
Funkcija koja dodaje liniju u richview:
Code:
function TMainWindow.AddLineToChatTab(const AChatTab : TTabSheet; const ANick, ALine : WideString; const AStyle : Integer) : Boolean;
var
ChatBox : TRichView;
scroll : TspSkinScrollBar;
begin
result := FALSE;
If Assigned(AChatTab) Then
Begin
ChatBox := GetChatTabChatBox(AChatTab);
If Assigned(ChatBox) Then
Begin
ChatBox.AddNL('', 0, 0);
ChatBox.Add(TimeToStr(Time) + ' ', 1);
If ANick <> '' Then
Begin
ChatBox.Add(Format('%s', [ANick]), 3);
ChatBox.Add(' : ', 4);
End;
ChatBox.AddTextNLW(ALine, AStyle, 0, 0, FALSE);
scroll := GetChatTabScrollBar(AChatTab);
If Assigned(scroll) Then
Begin
scroll.Max := ChatBox.VScrollMax;
scroll.Position := ChatBox.VScrollPos;
End;
If ChatBox.VScrollPos < ChatBox.VScrollMax Then
ChatBox.Format
else
ChatBox.FormatTail;
result := TRUE;
End;
End;
end;
function TMainWindow.AddLineToChatTab(const AChatTab : TTabSheet; const ANick, ALine : WideString; const AStyle : Integer) : Boolean;
var
ChatBox : TRichView;
scroll : TspSkinScrollBar;
begin
result := FALSE;
If Assigned(AChatTab) Then
Begin
ChatBox := GetChatTabChatBox(AChatTab);
If Assigned(ChatBox) Then
Begin
ChatBox.AddNL('', 0, 0);
ChatBox.Add(TimeToStr(Time) + ' ', 1);
If ANick <> '' Then
Begin
ChatBox.Add(Format('%s', [ANick]), 3);
ChatBox.Add(' : ', 4);
End;
ChatBox.AddTextNLW(ALine, AStyle, 0, 0, FALSE);
scroll := GetChatTabScrollBar(AChatTab);
If Assigned(scroll) Then
Begin
scroll.Max := ChatBox.VScrollMax;
scroll.Position := ChatBox.VScrollPos;
End;
If ChatBox.VScrollPos < ChatBox.VScrollMax Then
ChatBox.Format
else
ChatBox.FormatTail;
result := TRUE;
End;
End;
end;
[Ovu poruku je menjao reiser dana 22.06.2011. u 18:37 GMT+1]