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

Форум для изучающих FPC и их учителей.

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

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

Сообщение Winni » 01.10.2009 01:06:32

Здравствуйте !

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

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

Сообщение Vadim » 01.10.2009 10:25:49

Winni
А Вы возьмите и просто, не напрягаясь, конвертируйте текст программы в UTF-8, который по умолчанию в Lazarus'е. ;)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение Winni » 01.10.2009 20:53:23

Спасибо !

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

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

Сообщение Максим » 02.10.2009 00:18:58

Winni
Вроде из Delphi 7 у меня DFM нормально втягивался. Какая у вас версия Lazarus? Как втягиваете?

Файлы .pas можно не перекодировать в UTF-8, оставив их в CP1251, но при этом надо следить за присвоениями в коде свойствам типа Caption значений с кириллицей и преобразовывать их в UTF-8 с помощью функций AnsiToUTF8. Поищите на форуме, тема обсуждалась.
Аватара пользователя
Максим
энтузиаст
 
Сообщения: 597
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

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

Сообщение LevelZero » 02.10.2009 09:19:30

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


я бы сделал так
Вложения
utf.JPG
Аватара пользователя
LevelZero
новенький
 
Сообщения: 19
Зарегистрирован: 27.02.2007 12:52:36

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

Сообщение v-t-l » 02.10.2009 13:50:58

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
v-t-l
энтузиаст
 
Сообщения: 728
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

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

Сообщение Winni » 02.10.2009 19:13:01

Здравствуйте !

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 ?
Аватара пользователя
Winni
новенький
 
Сообщения: 10
Зарегистрирован: 20.09.2009 19:04:34
Откуда: Краснодар

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

Сообщение sobee » 02.10.2009 21:04:24

Мне с переводом старых проектов в UTF-8 помог Notepad++ http://sourceforge.net/projects/notepad-plus/ там много разных кодировок и поддержка синтаксиса языков программирования.
sobee
новенький
 
Сообщения: 84
Зарегистрирован: 05.02.2008 00:23:46
Откуда: Снежинск, Челябинская обл.

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

Сообщение Максим » 02.10.2009 23:49:30

Winni
Что ж у вас всё сложно так, а? :mrgreen:

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

Перекодировать файлы .pas можно средствами самого Lazarus. Для этого надо открыть файл, щёлкнуть правой кнопкой мыши в редакторе и в открывшемся меню выбрать "Параметры файла" -> "Кодировка"
Аватара пользователя
Максим
энтузиаст
 
Сообщения: 597
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

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

Сообщение ViTality » 03.10.2009 00:31:34

а разве выполнить "Сервис \ Преобразовать проект Delphi в проект Lazarus" не достаточно?
ViTality
постоялец
 
Сообщения: 308
Зарегистрирован: 05.10.2007 15:12:02

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

Сообщение Максим » 03.10.2009 00:46:27

ViTality
Могу наврать, так как давно уже не пользовался этим, но, по-моему, нет, не достаточно.
Аватара пользователя
Максим
энтузиаст
 
Сообщения: 597
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

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

Сообщение Winni » 03.10.2009 01:20:24

Здравствуйте !

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

sobee: Спасибо.
Аватара пользователя
Winni
новенький
 
Сообщения: 10
Зарегистрирован: 20.09.2009 19:04:34
Откуда: Краснодар

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

Сообщение Максим » 03.10.2009 01:30:31

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

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

Сообщение Vadim » 03.10.2009 05:46:46

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 не будет.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение sts » 17.02.2010 15:15:49

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


Вернуться в Обучение Free Pascal

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

Сейчас этот форум просматривают: MailRu[bot], Yandex [Bot] и гости: 4

Рейтинг@Mail.ru