Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Delphi 7, TRichView i Unicode support, preko UDP protokola

[es] :: Pascal / Delphi / Kylix :: Delphi 7, TRichView i Unicode support, preko UDP protokola

[ Pregleda: 1639 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Delphi 7, TRichView i Unicode support, preko UDP protokola22.06.2011. u 17:14 - pre 156 meseci
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]
Prikačeni fajlovi
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: Delphi 7, TRichView i Unicode support, preko UDP protokola22.06.2011. u 20:33 - pre 156 meseci
> 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 ?

Proveri da li ti uredno primiš unicode string posle dekodiranja iz UTF8, ako da onda ta funkcija koja dodaje string nije dobra ili ne koristiš unicode font (Arial npr.)
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Delphi 7, TRichView i Unicode support, preko UDP protokola22.06.2011. u 21:14 - pre 156 meseci
Primanje unicode stringova radi OK, dok mi slanje predstavlja problem. Nikako ne uspevam da posaljem unicode string ka serveru, stari klijent koji ima podrsku za unicode ne uspeva da ga procita, tj izbacuje ????? umesto stringa, iz cega sledi da negde imam gresku u mom korisnik-unosi-unicode-tekst-u-editboxu > pritiska-enter > program-salje-taj-string-serveru, a to sve moze da se svede na ovu liniju:

GUDPClient.Send('||127.0.0.1 ' + UTF8Encode(ACommand));

gde je ACommand u stvari TTntEdit.Text, tipa WideString.

[Ovu poruku je menjao reiser dana 22.06.2011. u 22:35 GMT+1]

Skontao sam da ovo radi:

GUDPClient.Send(ACommand, TIdTextEncoding.UTF8)

Medjutim, kada ovako saljem, funkcija mi doda slash ispred stringa, tj posalje ga kao "/ACommand" ??? Jel moze nekako bez toga.

[Ovu poruku je menjao reiser dana 22.06.2011. u 23:00 GMT+1]
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Delphi 7, TRichView i Unicode support, preko UDP protokola22.06.2011. u 22:26 - pre 156 meseci
Resio ! GUDPClient.Send('||127.0.0.1 ' + ACommand, TIdTextEncoding.UTF8)
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Delphi 7, TRichView i Unicode support, preko UDP protokola

[ Pregleda: 1639 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.