Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.18;
Скачать: CL | DM;

Вниз

Иероглифы в TMemo и TEdit   Найти похожие ветки 

 
w666w   (2007-01-28 13:24) [0]

Помогите разобраться как настроить мемо на поддержку уникода (чтобы иероглифы можно было вставлять и они нормально отображались)? Перебрать все кодировки в настройках шрифта и шрифт Arial Unicode MS выбирал. Ничего не помогает.

Заранее спасибо за помощь!


 
Плохиш ©   (2007-01-28 13:36) [1]

VCL не поддерживает юникод. Используй библиотеку TNT.


 
Anatoly Podgoretsky ©   (2007-01-28 13:44) [2]

Ни TMemo, ни TEdit не поддерживают Юникод.


 
_SuN_   (2007-01-28 21:05) [3]

//под юникод константы посмотри

function StringToPWide(sStr: string; var iNewSize: integer): PWideChar;
var pw    : PWideChar;
   iSize : integer;
begin
iSize:=Length(sStr)+1;
iNewSize:=iSize*2;
getmem(pw,iNewSize);
MultiByteToWideChar(CP_ACP,0,PChar(sStr),iSize,pw,iNewSize);
Result:=pw;
end;

function StrToUTF8(Value: String): String;
var buffer : pwidechar;
   BufLen : integer;
   lpBuf  : Pointer;
begin
BufLen:=Length(Value)*2+4;
GetMem(lpBuf,BufLen);
FillChar(lpBuf^,BufLen,0);
buffer:=StringToPWide(value,buflen);
WideCharToMultiByte(CP_UTF8,0,buffer,-1,lpBuf,BufLen,nil,nil);
FreeMem(buffer,BufLen);
Result:=PChar(lpBuf);
FreeMem(lpBuf,BufLen);
end;

function PWideToString(pw : PWideChar) : string;
var p    : PChar;
   iLen : integer;
begin
iLen := lstrlenw( pw ) + 1;
GetMem( p, iLen );
WideCharToMultiByte( CP_ACP, 0, pw, iLen, p, iLen * 2, nil, nil );
Result := p;
FreeMem( p, iLen );
end;

function UTF8ToStr(Value: String): String;
var buf : pwidechar;
   len : LongWord;
begin
len:=length(Value)+4;
GetMem(buf,len);
FillChar(buf^,len, 0);
MultiByteToWideChar(CP_UTF8,0,@Value[1],len-4,buf,len);
Result:=PWideToString(buf);
FreeMem(buf,len);
end;

function UTF8ToStrSmart(Value: String): String;
var Digit : String;
   i     : Word;
   HByte : Byte;
   Len   : Byte;
begin
Result:="";
Len:=0;
if (Value="")
   then Exit;
for i:=1 to length(Value)
    do begin
        if (Len>0)
           then begin
                 Digit:=Digit+Value[i];
                 Dec(Len);
                 if (Len=0)
                    then Result:=Result+UTF8ToStr(Digit);
                end
           else begin
                 HByte:=Ord(Value[i]);
                 if (HByte in [$00..$7f])
                     then Result:=Result+Value[i]
                     else begin
                           if ((HByte and $FC)=$FC)
                              then Len:=6
                              else if ((HByte and $F8)=$F8)
                                      then Len:=5
                                      else if ((HByte and $F0)=$F0)
                                               then Len := 4
                                               else if ((HByte and $E0)=$E0)
                                                       then Len := 3
                                                       else if ((HByte and $C0)=$C0)
                                                               then Len := 2
                                                               else begin
                                                                     Result:=Result+Value[i];
                                                                     Continue;
                                                                    end;
                          Dec(Len);
                          Digit:=Value[i];
                         end;
                end;
       end;
end;



Страницы: 1 вся ветка

Текущий архив: 2007.02.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.045 c
15-1170147470
Gorec
2007-01-30 11:57
2007.02.18
advapi32.dll


2-1170309500
Gydvin
2007-02-01 08:58
2007.02.18
WideChar to Word


15-1169799693
AntonSimenko
2007-01-26 11:21
2007.02.18
SimpleXML.pas


15-1170157396
Janniy
2007-01-30 14:43
2007.02.18
Вакансия программист Delphi+ MsSQL + ASP.NET


3-1164260869
ValexWeb
2006-11-23 08:47
2007.02.18
Как с помощью компоненты TABLE узнать номер текущей отображаемой