DrawText problem z kodowaniem.

DrawText problem z kodowaniem.
N0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

Witam w delphi probuje wyswietlic tekst za pomoca drawtext:

DrawText(btmp.Canvas.Handle, Pchar( 'Cilvēki ir mājās'), Length(pages[CurrentPage].Layers[J].text), Rec, DT_END_ELLIPSIS or DT_NOPREFIX or DT_WORDBREAK or DT_EDITCONTROL);

jednak nie dostaje pełnego napisu ( napis jest bez specjalnych znakow ). Probowalem uzywac funkcji drawtextW, kodowac utf8 i dekodować ale nic nie dało. Wie ktoś wtf? ( napis jest w języku łotewskim )

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gorlice
0

To może zależeć od kompilatora spróbuj takie wersje w starszych wersjach może DrawTextW i PWideChar('Cilvēki ir mājās') w nowszych DrawText i PWideChar('Cilvēki ir mājās'). Jak nie pomoże napisz dokładnie jakiego kompilatora używasz.

abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
0

a z jakiej racji uważasz, że powinien być cały jeśli mówisz systemowi, że ma obciąć to co się nie mieści w przekazanym Rec i na końcu walnąć trzy kropki - DT_END_ELLIPSIS

N0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

@abrakadeber
NIe, zle mnie zrozumiales, on tekstu nie obcina, wycina tylko znaki specjalne, a przy pewnych konfiguracjach wpisywal znaki "?" zamiast specjalnych takich jak "ā"

@kAzek
Niestety nie działa w ten sposób, moj kompilator to free pascal, srodowisko Lazarus IDE.

Dzieki za odpowiedzi.

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gorlice
0

Tak u mnie działa. Oczywiście dla testu ja pisze po formie:

Kopiuj
var
  r: TRect;
begin
   r:= Form1.ClientRect;
   DrawTextW(Form1.Canvas.Handle, PWideChar(UTF8Decode('Cilvēki ir mājās')), -1, r, DT_CENTER);
end;
N0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

@kAzek
Dziwne, ze u mnie to nie trybi. W czym to kompilujesz?

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gorlice
0

Kompilator: Free Pascal 2.6.0 IDE: Lazarus 0.9.30.4
Sprawdziłem w trybie Free Pascal {$mode objfpc} i Delphi {$mode delphi} w obydwu ładnie działa:
user image

abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
0

zacznijmy od tego @ni0bi co to jest btmp bo podejrzewam, że bitmapa, a jak tak to jaką jej czcionkę ustawiasz btmp.Canvas.Font.Name i czy masz świadomość, że ta czcionka to musi być taka, która ma znaki unicode?

N0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 4
0

Dziekuje za pomoc. Rozwiązanie okazało się banalne. Przez przypadek wcześniej zapisałem Unit1 jako plik ANSI. Oczywiscie rozwiazanie polegalo na otwarciu go w notatniku i zapisanie jako UTF-8. Dzieki bardzo.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.