[ reiser @ 22.06.2011. 17:14 ] @
Dakle, pravim klijent koji se preko Indy UDP komponenti konektuje na server i moze da komunicira sa drugim klijentima odatle. Sada trebam da odradim unicode podrsku za to. 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; 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; 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; [Ovu poruku je menjao reiser dana 22.06.2011. u 18:37 GMT+1] |