Lazarus 0.9.26 - безумие с русскими буквами.
Модератор: Модераторы
-
yantux
- постоялец
- Сообщения: 133
- Зарегистрирован: 29.10.2007 15:02:33
- Откуда: Санкт-Петербург
- Контактная информация:
Lazarus 0.9.26 - безумие с русскими буквами.
0.9.26 Win32 (не qt)
В общем на 0.9.24 с кодировкой не было проблем.
На 0.9.26 не отображаются русские буквы, которые пробиты в исходнике. Английские отображаются корректно.
Не отображаются - т.е. за место букв пустота.
Поискал в форуме на тему кодировок - не понял как решить проблему.
Вот у нас есть русский текст паскалевском файле. Он не отображается. Что нужно сделать, чтобы русский отображался как в 0.9.24?
Добавлено спустя 7 минут 8 секунд:
viewtopic.php?f=5&t=3629&p=26686&hilit=UTF8#p26686
С функцией CP1251ToUtf8() у меня ни как не хочет компилится.
В общем на 0.9.24 с кодировкой не было проблем.
На 0.9.26 не отображаются русские буквы, которые пробиты в исходнике. Английские отображаются корректно.
Не отображаются - т.е. за место букв пустота.
Поискал в форуме на тему кодировок - не понял как решить проблему.
Вот у нас есть русский текст паскалевском файле. Он не отображается. Что нужно сделать, чтобы русский отображался как в 0.9.24?
Добавлено спустя 7 минут 8 секунд:
viewtopic.php?f=5&t=3629&p=26686&hilit=UTF8#p26686
С функцией CP1251ToUtf8() у меня ни как не хочет компилится.
Конвертируй исходники в UTF-8 и компили...
-
yantux
- постоялец
- Сообщения: 133
- Зарегистрирован: 29.10.2007 15:02:33
- Откуда: Санкт-Петербург
- Контактная информация:
Mr.Smart писал(а):Конвертируй исходники в UTF-8 и компили...
Как конвертить исходники?
Добавлено спустя 3 минуты 31 секунду:
Разобрался.
Добавлено спустя 59 секунд:
В текстовом файле правая кнопка мыши: "параметры файла/кодировка/utf8".
Добавлено спустя 18 секунд:
Прошу добавить в faq.
- Attid
- долгожитель
- Сообщения: 2589
- Зарегистрирован: 27.10.2006 17:29:15
- Откуда: 44°32′23.63″N 41°2′25.2″E
- Контактная информация:
в новостях на сайте про 9,26 есть
Добавлено спустя 56 секунд:
в форуме верхняя тема есть FAQ туда могут все добавлять.
UTF-8 кодировка LCL на всех платформах. В комплекте идет документация, инструменты, функции для преобразования старого кода
Добавлено спустя 56 секунд:
yantux писал(а):Прошу добавить в faq.
в форуме верхняя тема есть FAQ туда могут все добавлять.
-
sobee
- новенький
- Сообщения: 84
- Зарегистрирован: 04.02.2008 23:23:46
- Откуда: Снежинск, Челябинская обл.
Attid писал(а):в новостях на сайте про 9,26 естьUTF-8 кодировка LCL на всех платформах. В комплекте идет документация, инструменты, функции для преобразования старого кода
Как добраться до этих документации, инструментов и функций?
Напишу сюда.
Компонент (TAGraph)
Загвоздка вот в этом:
Ранее всё работало (русский в названии осей), но сейчас выводит русский + "хвост".
Вообщем указанная замена помогает. Но это недоработка TAGraph или метода TextOut(DC,X, Y, @St[1],Length(St));?
Компонент (TAGraph)
Код: Выделить всё
procedure RotateLabel(Canvas: TCanvas; x,y:Integer; Const St:String; RotDegree:Integer);
var OldFont,
NewFont: HFONT;
LogRec: TLOGFONT;
DC : HDC;
begin
with Canvas do begin
Brush.Style := bsClear;
GetObject(Font.Handle, SizeOf(LogRec), @LogRec);
LogRec.lfEscapement := RotDegree*10;
LogRec.lfOrientation := 0;
LogRec.lfOutPrecision := OUT_TT_ONLY_PRECIS;
NewFont := CreateFontIndirect(LogRec);
DC:=Handle;
end;
OldFont := SelectObject(DC,NewFont);
// TextOut(DC,X, Y, @St[1],Length(St)); //VAshot -
Canvas.TextOut(X,Y,St); //VAshot +
DeleteObject(SelectObject(DC,OldFont));
end;
Загвоздка вот в этом:
Код: Выделить всё
// TextOut(DC,X, Y, @St[1],Length(St)); //VAshot -
Canvas.TextOut(X,Y,St); //VAshot +
Ранее всё работало (русский в названии осей), но сейчас выводит русский + "хвост".
Вообщем указанная замена помогает. Но это недоработка TAGraph или метода TextOut(DC,X, Y, @St[1],Length(St));?
VAshot попробуй посмотреть что показывает Length(St)? в 2 раза больше?
Тогда попробуй такое TextOut(DC,X, Y, @St[1],Length(UTF8toANSI(St)));
Тогда попробуй такое TextOut(DC,X, Y, @St[1],Length(UTF8toANSI(St)));
kosteek Так работает.
А смысл какой выводить так, а не через Canvas.TextOut? (Я далёк от тонкостей прикладного).
А смысл какой выводить так, а не через Canvas.TextOut? (Я далёк от тонкостей прикладного).
VAshot писал(а):kosteek Так работает.
А смысл какой выводить так, а не через Canvas.TextOut? (Я далёк от тонкостей прикладного).
Конвертируй строку в Ansi и выводи!
Код: Выделить всё
...
Canvas.TextOut(x,y,UTF8ToAnsi(str));
...
Возможно я не понял вопрос, но ты вроде спросил за метод
Из моего наблюдения Length подсчитывает AnsiString.
З.Ы. Пусть опытные объяснят точнее.
VAshot писал(а):[/code]
Загвоздка вот в этом:Код: Выделить всё
// TextOut(DC,X, Y, @St[1],Length(St)); //VAshot -
Canvas.TextOut(X,Y,St); //VAshot +
Ранее всё работало (русский в названии осей), но сейчас выводит русский + "хвост".
Вообщем указанная замена помогает. Но это недоработка TAGraph или метода TextOut(DC,X, Y, @St[1],Length(St));?
Из моего наблюдения Length подсчитывает AnsiString.
З.Ы. Пусть опытные объяснят точнее.
В модуле LCLProc есть функции по работе с UTF-8 строками.
пользуй функцию UTF8Length вместо Length
пользуй функцию UTF8Length вместо Length
Mr.Smart писал(а):Конвертируй строку в Ansi и выводи!Код: Выделить всё
...
Canvas.TextOut(x,y,UTF8ToAnsi(str));
...
Тут (Canvas.TextOut) как раз и не надо конвертить.
Беда была с подсчетом длины, это всё ясно.
Я спросил почему вместо Canvas.TextOut(x,y,str); используется TextOut(DC,X, Y, @St[1],Length(St));.
Не совсем по теме, конечно, вопрос.
