Форум: "Начинающим";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
ВнизИероглифы в 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.038 c