Что изменилось в 0.9.26? Где мои тексты???

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

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

Аватара пользователя
Troublemaker
постоялец
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток
Контактная информация:

Что изменилось в 0.9.26? Где мои тексты???

Сообщение Troublemaker »

0.9.26/win релиз. Кодировка исходника - 1251. В exe-шнике все нужные тексты видны нормально. Но:

Вот так выглядит проект, собранный в 0.9.24:
lazarus-24-form.jpg


А вот так выглядит он же (исходник не менялся) в 0.9.26:
lazarus-26-form.jpg


Вопрос: почему похерились тексты, которые меняются в рантайме? (тултипы, названия радиокнопок, заголовок окна и т.п.)

Весь в расстройстве...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение Brainenjii »

Надо перевести их в UTF8, вроде ж уже обсуждалось ^_^
Аватара пользователя
Troublemaker
постоялец
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток
Контактная информация:

Сообщение Troublemaker »

Brainenjii писал(а):Надо перевести их в UTF8, вроде ж уже обсуждалось ^_^

Пробовал... эту фишку я увидел. Но тогда начинаются другие грабли. Например, есть у меня такое:

Код: Выделить всё

var a:string
...
a:='** что-то там'
...
a[1]:='Б' //заменяю первый символ в строке

И при компиляции ругается: хочу, мол, char, а мне дают ConstantString, то бишь, widechar. Это значит надо будет по всем исходникам менять объявления переменных и подобные присваивания. Проще сразу головой об стену. Или каким-то образом заблокировать перевод "вшитых" текстов в utf. Это возможно? Или плюнуть на 26 и продолжать в 24?
yantux
постоялец
Сообщения: 133
Зарегистрирован: 29.10.2007 15:02:33
Откуда: Санкт-Петербург
Контактная информация:

Сообщение yantux »

Brainenjii писал(а):Надо перевести их в UTF8, вроде ж уже обсуждалось ^_^


viewtopic.php?f=5&t=3629&p=26686&hilit=UTF8#p26686

С функцией CP1251ToUtf8() у меня ни как не хочет компилится.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Troublemaker писал(а):
Brainenjii писал(а):Надо перевести их в UTF8, вроде ж уже обсуждалось ^_^

Пробовал... эту фишку я увидел. Но тогда начинаются другие грабли. Например, есть у меня такое:

Код: Выделить всё

var a:string
...
a:='** что-то там'
...
a[1]:='Б' //заменяю первый символ в строке

И при компиляции ругается: хочу, мол, char, а мне дают ConstantString, то бишь, widechar. Это значит надо будет по всем исходникам менять объявления переменных и подобные присваивания. Проще сразу головой об стену. Или каким-то образом заблокировать перевод "вшитых" текстов в utf. Это возможно? Или плюнуть на 26 и продолжать в 24?


в модуле LCLProc есть функции для работы в UTF-8
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

Troublemaker писал(а):Это значит надо будет по всем исходникам менять объявления переменных и подобные присваивания. Проще сразу головой об стену. Или каким-то образом заблокировать перевод "вшитых" текстов в utf. Это возможно? Или плюнуть на 26 и продолжать в 24?

Насколько я знаю, "отключить" utf-8 в 0.9.26 невозможно, поэтому варианта только 3 (по убыванию трудоемкости):
1) переписать код с использованием функций из LCLProc, и таким образом ввести в приложение полную поддержку Unicode;
2) оставить исходный код в cp1251, вести обработку текста как раньше в cp1251, а при взаимодействии с LCL-контролами перекодировать текст в utf-8;
3) остаться на 0.9.24.
Аватара пользователя
Troublemaker
постоялец
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток
Контактная информация:

Сообщение Troublemaker »

Odyssey писал(а):оставить исходный код в cp1251, вести обработку текста как раньше в cp1251, а при взаимодействии с LCL-контролами перекодировать текст в utf-8;

Чувствую, так и придется сделать, а заодно переопределить кучу string-ов. И забыть про использование отладчика, поскольку он не умеет показывать выражения типа utft8toSys(string) :(
Аватара пользователя
NXP
постоялец
Сообщения: 187
Зарегистрирован: 02.01.2008 15:11:56
Откуда: Воронеж
Контактная информация:

Сообщение NXP »

Перевод на UTF-8 это очень хорошая идея.
Теперь не будет проблем при переходе с Win машины на Linux и обратно.
Спасибо разработчикам за этот подарок. Давно надо было это сделать! :D
Да и с СУБД теперь проще будет :D

ps Opera на всех платформах использует KIO-8, и ничего :)
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Спасибо разработчикам за этот подарок.

Присоединяюсь!
Аватара пользователя
Troublemaker
постоялец
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток
Контактная информация:

Сообщение Troublemaker »

NXP писал(а):Перевод на UTF-8 это очень хорошая идея.

Возможно. Но как быть с сотнями кило исходников, где используется посимвольная выборка из строк? Всё переписывать, менять все структуры данных?
Сейчас внимательно изучаю http://wiki.lazarus.freepascal.org/LCL_Unicode_Support#Instructions_for_users, и как-то грустно становится
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

Troublemaker писал(а):Возможно. Но как быть с сотнями кило исходников, где используется посимвольная выборка из строк? Всё переписывать, менять все структуры данных?


ну если сразу сделал грамотно и все делается в вынесеных процедурах то поменять только в одном месте.
если нет то как раз время для рефакторинга =) его как раз полезно через некоторое время делать =)

я подобные процеруры переделал сначало на то что на входе перекодирует в 1251 и дальше по старому алгоритму и обратно в ЮТФ, и за день все проекты перевел.

постепенно буду на LCLProc переводить где будет сказываться быстродействие либо будут всплывать ошибки\переделки.
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

Troublemaker писал(а):И забыть про использование отладчика, поскольку он не умеет показывать выражения типа utft8toSys(string) :(

Здесь поможет консоль, достаточно создать маленький отладочный модуль с функцией типа Utf8DbgOut(const aMessage: string) которая будет перекодировать строку из utf-8 (а под windows еще и делать CharToOEM) и выводить сообщение в консоль. При желании можно элементарно переключиться на ведение лог-файла отладки. При создании релиза этот модуль убирается из uses, и забытые отладочные вызовы подсвечиваются как ошибки, что помогает от них избавиться.
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

Troublemaker писал(а):Возможно. Но как быть с сотнями кило исходников, где используется посимвольная выборка из строк? Всё переписывать, менять все структуры данных?

Это можно вылечить заменой string на widestring. Дешево и сердито.
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

Mr.Smart писал(а):
Спасибо разработчикам за этот подарок.

Присоединяюсь!
+1
Аватара пользователя
Troublemaker
постоялец
Сообщения: 292
Зарегистрирован: 16.04.2008 13:00:44
Откуда: Биробиджан, Дальний Восток
Контактная информация:

Сообщение Troublemaker »

Odyssey писал(а):достаточно создать маленький отладочный модуль

ТОгда возникает сильное сомнение в необходимости окна Debugger Watches, раз единственное, что оно может показывать, это изменения глобальных переменных :(

Я не знаю, какую переменную или результат какой функции мне понадобится посмотреть в тот или иной момент отладки. А делать полный дамп всех переменных после каждой команды, это как-то некрасиво :)

B4rr4cuda писал(а):заменой string на widestring. Дешево и сердито.

Я уже думал об этом. Но это приведет к удвоению всех выходных данных (у меня используются StringList-ы в .ini-формате, по ряду причин всевозможные встроенные БД не подходят, формат обсуждению и изменению не подлежит) и необходимости писать конвертер. Хотя здесь тоже не совсем понятно - как именно работает strings.LoadFromFile, в какой кодировке идет чтение запись.
Ответить