Импорт проекта из Delphi в Lazarus
Модератор: Модераторы
- Nik
- энтузиаст
- Сообщения: 573
- Зарегистрирован: 03.02.2006 23:08:09
- Откуда: Киров
- Контактная информация:
Импорт проекта из Delphi в Lazarus
Столкнулся с необходимостью перевести проект из Delphi в Lazarus. Первые попытки импорта при помощи мастера успехом не увенчались: часть форм не конвертируется. При этом никаких ошибок не возникает ("Конвертация и проверка форм DFM" показывает, что конвертация успешна, но lfm файл не появляется).
Собственно, никаких особо экзотичных компонентов на формах нет: несколько StringGrid, TreeView, Memo, Button, PageControl, GroupBox'ы, ActionList. В "Лазаре" аналоги всего есть (даже все свойства и методы, которые я реально использую, - на месте).
Вопрос просто: в чём может быть затык? В инете найти внятной информации по конвертации проектов не удалось (разве что насчёт PageContol на одном сайте написано, что, мол, его надо перед конвертацией заменить на TabControl и фреймы; вот только даже формы без PageControl конвертируются через одну).
Собственно, никаких особо экзотичных компонентов на формах нет: несколько StringGrid, TreeView, Memo, Button, PageControl, GroupBox'ы, ActionList. В "Лазаре" аналоги всего есть (даже все свойства и методы, которые я реально использую, - на месте).
Вопрос просто: в чём может быть затык? В инете найти внятной информации по конвертации проектов не удалось (разве что насчёт PageContol на одном сайте написано, что, мол, его надо перед конвертацией заменить на TabControl и фреймы; вот только даже формы без PageControl конвертируются через одну).
какую версию Лазаря используешь?
Конвертер активно улучшается в trunk-е.
http://lazarus-dev.blogspot.com/2010/04 ... erter.html
Конвертер активно улучшается в trunk-е.
Nik писал(а):В инете найти внятной информации по конвертации проектов не удалось (разве что насчёт PageContol на одном сайте написано, что, мол, его надо перед конвертацией заменить на TabControl и фреймы; вот только даже формы без PageControl конвертируются через одну).
http://lazarus-dev.blogspot.com/2010/04 ... erter.html
Nik писал(а):Использовал последний Daily Snapshots (Lazarus-0.9.29-25811-fpc-2.4.1-20100601-win32).
можно и по фотографиям попробовать лечить...
но как насчёт поделиться неконвертируемым delphi проектом?!
если он закрытый и исходники выдавать нельзя, попробуй собрать "липовый" проект, т.е. тупо убрав весь код (implementation) из оригинального проекта.
- Nik
- энтузиаст
- Сообщения: 573
- Зарегистрирован: 03.02.2006 23:08:09
- Откуда: Киров
- Контактная информация:
"Липа" - во вложении. Все формы на месте, юниты вычищены от кода (проект делается для заказчика, так что код отдать не могу; да и с конвертацией кода нет никаких проблем - компилируется с минимальными изменениями).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
тех модулей, которые у тебя не ковертируются, нет в uses секции .dpr файла! (добавь их туда!)
Странная баго-фича. Хотя, вполне объяснимая. Можешь добавить в bug-report (bugs.freepascal.org):
Subj: Delphi to Lazarus converter
Description: Used and **available** units and forms are not converted by delphi converter, because not used by the .dpr (though used by other forms and units)
за одним можешь пожаловаться на конвертацию Unicode.
кстати, эти модули ты можешь сконвертировать отдельно от проекта: Tools->Convert Delphi Unit to ... - .dfm так же автоматически преобразовывается.
Код: Выделить всё
uses
Forms,
Splash in 'Splash.pas',
delitem in 'delitem.pas' {DelForm},
basket in 'basket.pas' {BasketForm},
delitem2 in 'delitem2.pas' {Del2Form},
delitem3 in 'delitem3.pas' {Del3Form},
CatEdit in 'CatEdit.pas' {CatEditForm}
// дописать тут:
agent in 'agent.pas', {agent}
трали-вали in 'трали-вали.pas' {трали-вали}
;
Странная баго-фича. Хотя, вполне объяснимая. Можешь добавить в bug-report (bugs.freepascal.org):
Subj: Delphi to Lazarus converter
Description: Used and **available** units and forms are not converted by delphi converter, because not used by the .dpr (though used by other forms and units)
за одним можешь пожаловаться на конвертацию Unicode.
кстати, эти модули ты можешь сконвертировать отдельно от проекта: Tools->Convert Delphi Unit to ... - .dfm так же автоматически преобразовывается.
- Nik
- энтузиаст
- Сообщения: 573
- Зарегистрирован: 03.02.2006 23:08:09
- Откуда: Киров
- Контактная информация:
скалогрыз писал(а):тех модулей, которые у тебя не ковертируются, нет в uses секции .dpr файла! (добавь их туда!)
Спасибо! Действительно, удалось конвертировать проект, добавив все модули в DPR. После прочистки форм от лишних свойств проект скомпилировался в Lazarus
за одним можешь пожаловаться на конвертацию Unicode.
С этим проблем особых не было, как ни странно - ручками сменил кодировку в Notepad++
Добавлено спустя 25 минут:
При сборке проекта компилятор выдаёт целую кучу Hint'ов и парочку Warning'ов со следующим сообщением:
main.pas(1906,15) Hint: Conversion between ordinals and pointers is not portable
Почти все они связаны с кодом, отвечающим за выдёргивание данных из узла TreeView. Например, так:
Ind:=Integer(CategorTree.Selected.Data)
Как я понимаю, такой код не портабелен? Насколько это критично, если в будущем проект планируется переносить на Linux, и как это можно исправить с наименьшими жертвами (логику работы программы менять не хочется, а упомянутые преобразования там используются довольно часто)?
На 64-разрядных ОС CategorTree.Selected.Data (типа Pointer) будет такой же разрядности как Int64, а Integer останется 32-разрядным. В результате если в Data окажется число за пределами диапазона Integer, в указанном коде произойдёт переполнение. Если в Data вы всегда пишете значения типа Integer, т.е. то всё должно работать.
Код: Выделить всё
CategorTree.Selected.Data := Pointer(Ind);