Lazarus 0.9.26 - безумие с русскими буквами.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Lazarus 0.9.26 - безумие с русскими буквами.

Сообщение yantux » 15.10.2008 16:13:07

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() у меня ни как не хочет компилится.
yantux
постоялец
 
Сообщения: 133
Зарегистрирован: 29.10.2007 16:02:33
Откуда: Санкт-Петербург

Re: Lazarus 0.9.26 - безумие с русскими буквами.

Сообщение Mr.Smart » 15.10.2008 16:45:13

Конвертируй исходники в UTF-8 и компили...
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Lazarus 0.9.26 - безумие с русскими буквами.

Сообщение yantux » 15.10.2008 16:46:52

Mr.Smart писал(а):Конвертируй исходники в UTF-8 и компили...


Как конвертить исходники?

Добавлено спустя 3 минуты 31 секунду:
Разобрался.

Добавлено спустя 59 секунд:
В текстовом файле правая кнопка мыши: "параметры файла/кодировка/utf8".

Добавлено спустя 18 секунд:
Прошу добавить в faq.
yantux
постоялец
 
Сообщения: 133
Зарегистрирован: 29.10.2007 16:02:33
Откуда: Санкт-Петербург

Re: Lazarus 0.9.26 - безумие с русскими буквами.

Сообщение Attid » 15.10.2008 17:52:12

в новостях на сайте про 9,26 есть

UTF-8 кодировка LCL на всех платформах. В комплекте идет документация, инструменты, функции для преобразования старого кода


Добавлено спустя 56 секунд:
yantux писал(а):Прошу добавить в faq.

в форуме верхняя тема есть FAQ туда могут все добавлять.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Lazarus 0.9.26 - безумие с русскими буквами.

Сообщение sobee » 15.10.2008 23:48:48

Attid писал(а):в новостях на сайте про 9,26 есть
UTF-8 кодировка LCL на всех платформах. В комплекте идет документация, инструменты, функции для преобразования старого кода


Как добраться до этих документации, инструментов и функций?
sobee
новенький
 
Сообщения: 84
Зарегистрирован: 05.02.2008 00:23:46
Откуда: Снежинск, Челябинская обл.

Re: Lazarus 0.9.26 - безумие с русскими буквами.

Сообщение VAshot » 22.10.2008 07:57:33

Напишу сюда.
Компонент (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
постоялец
 
Сообщения: 128
Зарегистрирован: 01.11.2007 12:31:21
Откуда: Пермь

Re: Lazarus 0.9.26 - безумие с русскими буквами.

Сообщение kosteek » 22.10.2008 08:54:19

VAshot попробуй посмотреть что показывает Length(St)? в 2 раза больше?
Тогда попробуй такое TextOut(DC,X, Y, @St[1],Length(UTF8toANSI(St)));
kosteek
постоялец
 
Сообщения: 203
Зарегистрирован: 24.07.2008 14:57:09
Откуда: Украина, г.Славянск

Re: Lazarus 0.9.26 - безумие с русскими буквами.

Сообщение VAshot » 22.10.2008 15:01:24

kosteek Так работает.
А смысл какой выводить так, а не через Canvas.TextOut? (Я далёк от тонкостей прикладного).
Аватара пользователя
VAshot
постоялец
 
Сообщения: 128
Зарегистрирован: 01.11.2007 12:31:21
Откуда: Пермь

Re: Lazarus 0.9.26 - безумие с русскими буквами.

Сообщение Mr.Smart » 22.10.2008 15:06:16

VAshot писал(а):kosteek Так работает.
А смысл какой выводить так, а не через Canvas.TextOut? (Я далёк от тонкостей прикладного).

Конвертируй строку в Ansi и выводи!
Код: Выделить всё
...
  Canvas.TextOut(x,y,UTF8ToAnsi(str));
...
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Lazarus 0.9.26 - безумие с русскими буквами.

Сообщение kosteek » 22.10.2008 15:59:03

Возможно я не понял вопрос, но ты вроде спросил за метод
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.

З.Ы. Пусть опытные объяснят точнее.
kosteek
постоялец
 
Сообщения: 203
Зарегистрирован: 24.07.2008 14:57:09
Откуда: Украина, г.Славянск

Re: Lazarus 0.9.26 - безумие с русскими буквами.

Сообщение Mr.Smart » 22.10.2008 16:56:28

В модуле LCLProc есть функции по работе с UTF-8 строками.
пользуй функцию UTF8Length вместо Length
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Lazarus 0.9.26 - безумие с русскими буквами.

Сообщение VAshot » 23.10.2008 12:05:47

Mr.Smart писал(а):Конвертируй строку в Ansi и выводи!
Код: Выделить всё
...
  Canvas.TextOut(x,y,UTF8ToAnsi(str));
...

Тут (Canvas.TextOut) как раз и не надо конвертить.

Беда была с подсчетом длины, это всё ясно.
Я спросил почему вместо Canvas.TextOut(x,y,str); используется TextOut(DC,X, Y, @St[1],Length(St));.
Не совсем по теме, конечно, вопрос.
Аватара пользователя
VAshot
постоялец
 
Сообщения: 128
Зарегистрирован: 01.11.2007 12:31:21
Откуда: Пермь


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 42

Рейтинг@Mail.ru