Страница 1 из 1

Русификация при конвертировании Delphi7 -> Lazarus

СообщениеДобавлено: 01.10.2009 01:06:32
Winni
Здравствуйте !

При конвертировании Делфи7-проекта в Лазарус не могу справится с кириллицей. Если все заменяю латинскими буквами, то конвертируется нормально ( эти мои усилия описал на win-ni.ru/uceb/FPC/preobr.php). Была надежда сохранить кириллицу хотя бы в строковых константах модулей - применяя директиву компилятора {$CODEPAGE ...} , но нигде не нашел списка допустимых кодовых страниц. В мануале написано, что это должно быть в модуле charset. Однако у меня теперь есть текст charset.pp - там ничего такого нет. Неплохо бы сохранить русский язык и в свойствах объектов (например, .Caption). Помогите, пожалуйста, люди опытные, кто чем может... :-(

Re: Русификация при конвертировании Delphi7 -> Lazarus

СообщениеДобавлено: 01.10.2009 10:25:49
Vadim
Winni
А Вы возьмите и просто, не напрягаясь, конвертируйте текст программы в UTF-8, который по умолчанию в Lazarus'е. ;)

Re: Русификация при конвертировании Delphi7 -> Lazarus

СообщениеДобавлено: 01.10.2009 20:53:23
Winni
Спасибо !

Однако у меня Delphi7, он не поддерживает юникод. Или типа я не врубился... Можно ли какой-то программой перекодировать *.pas в UTF-8 ? Я у себя вроде не нашел (The Bat!, FireFox, MS Word ). А в *.dfm вообще русский текст изображается вроде:
Caption = ' '#1042#1099#1095#1080#1089#1083#1103#1077#1084' Ln(2) ' Может быть - написать прогу, в модуле charset есть какие-то функции, похоже - преобразуют, но не разбирался (напрягаться вредно, конечно). Не подскажете ли ссылку ?

Re: Русификация при конвертировании Delphi7 -> Lazarus

СообщениеДобавлено: 02.10.2009 00:18:58
Максим
Winni
Вроде из Delphi 7 у меня DFM нормально втягивался. Какая у вас версия Lazarus? Как втягиваете?

Файлы .pas можно не перекодировать в UTF-8, оставив их в CP1251, но при этом надо следить за присвоениями в коде свойствам типа Caption значений с кириллицей и преобразовывать их в UTF-8 с помощью функций AnsiToUTF8. Поищите на форуме, тема обсуждалась.

Re: Русификация при конвертировании Delphi7 -> Lazarus

СообщениеДобавлено: 02.10.2009 09:19:30
LevelZero
Winni писал(а): ...
... Можно ли какой-то программой перекодировать *.pas в UTF-8 ? Я у себя вроде не нашел (The Bat!, FireFox, MS Word ).
...


я бы сделал так

Re: Русификация при конвертировании Delphi7 -> Lazarus

СообщениеДобавлено: 02.10.2009 13:50:58
v-t-l
LevelZero писал(а):я бы сделал так

Код: Выделить всё
program ansi2utf8;
var
  f1, f2: Text;
  s: string;
begin
  AssignFile(f1, ParamStr(1));
  Reset(f1);
  AssignFile(f2, ParamStr(2));
  Rewrite(f2);
  while not EOF(f1) do
  begin
    ReadLn(f1, s);
    WriteLn(f2, AnsiToUtf8(s));
  end;
end.

а я бы сделал так. :D

Re: Русификация при конвертировании Delphi7 -> Lazarus

СообщениеДобавлено: 02.10.2009 19:13:01
Winni
Здравствуйте !

for ii:=1 to 10 do "Спасибо !"
1. Максиму: спасибо! Преобразование проекта Делфи7 -> Lazarus:

* Заменить в Делфи-проекте кириллицу латиницей или перекодировать в UTF-8 (Этот вопрос отложен )
* Копируйте в отдельную папку файлы .dpr, *.pas, *.dfm (остальные не нужны).
* Переименуйте .dpr файл в *.lpr.
* Сделайте необходимые изменения в .dpr файле (который теперь .lpr) (используйте любой текстовый редактор,
например Блокнот):
1. Добавьте {$mode delphi}{$H+} или (предпочтительнее:) {$mode objfpc}{H+} директивы компилятора
(поставьте это второй строкой)
2. Добавьте 'Interfaces' в предложение uses
3. Удалите {$R *.res}. Сохраните этот файл
* Запустите Лазарус, закройте проекты и файлы (если есть открытые, т е в меню Файл щелкните пункты Закрыть
и Закрыть все файлы редактора. В итоге они должны быть недоступны (серые такие))
* В меню выберите: Меню-Проект-Создать проект из файла
* В окошке "Выберите исходник..." откройте Ваш .lpr-файл. На вопрос "Сохранить изменения?" - Нет
* В окошке "Создать новый проект" выберите "Приложение", щелкните кнопку "Создать"
* Сохраните всё (или кнопкой "Сохранить всё" или меню-файл-сохранить всё или Shift-Ctrl-S). Это
обязательно, иначе следующий пункт не работает.
* Преобразуйте модули. Для каждого модуля:
o Меню-Инструменты-Преобразовать модуль Делфи в Лазарус
o Когда текст файла .pas появится в окне редактора - добавить Buttons в предложение uses
o Правый щелчок в окне редактора, выбрать: Open .lfm
o В тексте .lfm удалить строку OldCreateOrder = False
o Перейти в окне редактора на закладку где файл модуля (.pas)
o Меню-Проект-Добавить файл редактора к проекту. Подтвердить (Да)
* Собрать проект (Ctrl-F9 или Меню-Запуск-Сборка)
* Запустить проект (F9 или Меню-Запуск-Запуск)
* Можно уменьшить размер исполняемого (.exe) файла - как описано здесь.

( Это я подробно описал на своем сайте: http://win-ni.ru/uceb/FPC/preobr.php. Взято из
http://wiki.lazarus.freepascal.org/Code ... sion_Guide, немного уточнил.)
Свойства объектов (.Caption и т п) установлены в инспекторе. Удалось избавиться от сохранения их в виде '
'#1042#1099#1095#1080#1089#1083#1103#1077#1084' Ln(2) '. Вероятно, это было связано с моей привычкой
устанавливать Font.CharSet = RUSSIAN_CHARSET (на случай ненастроенной Windows). Перешел на Font.CharSet =
DEFAULT_CHARSET (для всех установленных на форме компонентов) и получил русский текст :-)). Теперь можно
перкодировать *.dfm в UTF-8.

2. To LevelZero: Спасибо! Действительно, забыл про AkelPad. И он действительно, преобразует нормально, хотя
ведет себя странно: преобразует и сохраняет даже когда не просишь, но к этому можно привыкнуть.

3. To v-t-l: Спасибо! Это должно работать, сейчас займусь... Работает, и я для себя причесал это так
(немного удобнее):
program win1251_UTF_8;
var
f1, f2: Text;
s: string;
begin
if paramcount<2 then
begin
writeln('Usage: win1251_UTF_8 infile outfile');
readln; halt(1);
end;
Assign(f1, ParamStr(1));
Reset(f1);
Assign(f2, ParamStr(2));
Rewrite(f2);
while not EOF(f1) do
begin
ReadLn(f1, s);
WriteLn(f2, AnsiToUtf8(s));
end;
Close(f1); Close(f2);
end.

4. Этой программой (win1251_UTF_8 - 15Кб после сжатия) пребразовал .pas .dfm. в UTF-8. После этого проект без
проблем конвертировался в Лазарус. Но теперь он показывает эти крякозябры (ешаем СѓСЂР) , характерные для
юникода. Переключение .Font.Charset в инспекторе объектов не помогают, хотя символы меняются. Похоже, что в
итоге мне и не нужен юникод, т к мой Windows все показывает в Win1251? Правда, блокнот показывает по-русски
(распознает кодировку?) преобразованные .dfm. Теперь я как ёжик в тумане... не знаю куда податься.

Добавлено спустя 1 час 20 минут 58 секунд:
Всё ясно. Эту панику я поднял из-за того, что пользовался установкой Font.CharSet = RUSSIAN_CHARSET для формы и компонентов, установленных на ней. Перешел (в среде Делфи7) на Font.CharSet = DEFAULT_CHARSET (для всех установленных на форме компонентов), сохранил, убедился (просмотром *.dfm ) что виден русский текст, а не
' '#1042#1099#1095#1080#1089#1083#1103#1077#1084' Ln(2) '. И после этого Делфи7-проект без проблем преобразуется в Лазарус (как описано: http://win-ni.ru/uceb/FPC/preobr.php() А преобразование в юникод, наверное, нужно для Unix ?

Re: Русификация при конвертировании Delphi7 -> Lazarus

СообщениеДобавлено: 02.10.2009 21:04:24
sobee
Мне с переводом старых проектов в UTF-8 помог Notepad++ http://sourceforge.net/projects/notepad-plus/ там много разных кодировок и поддержка синтаксиса языков программирования.

Re: Русификация при конвертировании Delphi7 -> Lazarus

СообщениеДобавлено: 02.10.2009 23:49:30
Максим
Winni
Что ж у вас всё сложно так, а? :mrgreen:

Если у вас Lazarus версии 0.9.26 либо выше, в меню "Сервис" вы найдёте всё для автоматизированного перевода проекта Delphi в проект Lazarus. Если использовать этот функционал, не надо делать руками половину тех ужасов, которые вы описали. DFM с юникодовскими строками (вида '#1042#1099') тоже должны втягиваться корректно.

Перекодировать файлы .pas можно средствами самого Lazarus. Для этого надо открыть файл, щёлкнуть правой кнопкой мыши в редакторе и в открывшемся меню выбрать "Параметры файла" -> "Кодировка"

Re: Русификация при конвертировании Delphi7 -> Lazarus

СообщениеДобавлено: 03.10.2009 00:31:34
ViTality
а разве выполнить "Сервис \ Преобразовать проект Delphi в проект Lazarus" не достаточно?

Re: Русификация при конвертировании Delphi7 -> Lazarus

СообщениеДобавлено: 03.10.2009 00:46:27
Максим
ViTality
Могу наврать, так как давно уже не пользовался этим, но, по-моему, нет, не достаточно.

Re: Русификация при конвертировании Delphi7 -> Lazarus

СообщениеДобавлено: 03.10.2009 01:20:24
Winni
Здравствуйте !

Максим: Спасибо ! Посмотрел версию, оказалось 09.22 бета. Пора обновить, но у меня Инет через телефонный модем, кабель в доме только прокладывают, неизвестно, когда будет быстрый Интернет. Вообще-то думаю, что так подергаться не вредно, грамотность повышаю, время у меня есть (инвалид, сижу дома). В пределе нужно преобразовать довольно большой (для меня) мой проект - расчет плоских стержневых систем (это строительная механика). Там много потомков от TGraphicControl. Если кому-нибудь интересно (вряд ли, конечно), можно посмотреть описание и скачать документацию и демо здесь: win-ni.ru/MKE . И кроме того, иногда надеюсь , что путевые заметки про освоение FPC-Lazarus помогут начинающим.

sobee: Спасибо.

Re: Русификация при конвертировании Delphi7 -> Lazarus

СообщениеДобавлено: 03.10.2009 01:30:31
Максим
Обязательно скачайте новую версию (скоро должна выйти 0.9.28, дождитесь её). Было исправлено множество ошибок и добавлена куча возможностей, в том числе доработан импорт проектов Delphi. Там всего около 60 МБ. По модему при плохом качестве телефонной линии можно скачать часов за шесть (либо знакомых попросить).

Re: Русификация при конвертировании Delphi7 -> Lazarus

СообщениеДобавлено: 03.10.2009 05:46:46
Vadim
Winni
У меня тоже когда то стоял модемный интернет. :) И мне тоже было лень ждать, когда скачается готовый откомпилированый Лазарус. Поэтому я скачивал не откомпилированный, а только одни исходники:
ftp://ftp.freepascal.org/pub/lazarus/lazarus-0.9.29-21988-20091003-src.tar.bz2
(Даты исходников меняются каждый день, поэтому просто зайдите в каталог и выберите исходники с текущей датой.)
Тогда это было 10 МБ и скачивалось всего за 20 минут. По-моему ничего страшного, можно потерпеть. :) Сейчас это 15 МБ, наверное будет качаться 30 мин.
Скачали, распаковали, заходите в этот каталог в командной строке, набираете:
Код: Выделить всё
make bigide

Время компиляции завмсмт от скорости Вашего компьютера. У меня на Sempron'е 1800 с 512 МБ памяти компилируется 10 мин.
И всё, можно пользоваться. :)
Единственное только нужно предварительно каталог, где расположен Ваш FPC внести в системную переменную PATH:
Код: Выделить всё
SET PATH=d:\progs\fpc\bin\i386-win32

чтобы не прописывать полный путь до make и fpc при компиляции. И если в этой переменной содержится путь до каталога Delphi, то этот каталог поставить в самом конце переменной, т.к. в нём тоже есть make, но он собирать Lazarus не будет.

Re: Русификация при конвертировании Delphi7 -> Lazarus

СообщениеДобавлено: 17.02.2010 15:15:49
sts
олл, посоветуйте, перевел мелкий проект с Д6 на Лазарус, пара простеньких форм с едитами, так вот, когда пытаешься в них вбить текст по русски то лезут черные квадратики, на делфе с таким лет 10 назад сталкивался, забыл уж чем лечить, у шрифтов контролов стоит DEFAULT_CHARSET, при смене на RUSSIAN_CHARSET буквы появляются но какието кривые :)
происходит это на сервере вин2003 64бит, русский стоит и в других прогах не глючит
лазарус 0.9.28.2 бета
фпс 2.2.4
64бит, собственно ради этого и переводил.
хотелось бы чтоб работало нормально с DEFAULT_CHARSET