Импорт проекта из Delphi в Lazarus

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

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

Ответить
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Импорт проекта из Delphi в Lazarus

Сообщение Nik »

Столкнулся с необходимостью перевести проект из Delphi в Lazarus. Первые попытки импорта при помощи мастера успехом не увенчались: часть форм не конвертируется. При этом никаких ошибок не возникает ("Конвертация и проверка форм DFM" показывает, что конвертация успешна, но lfm файл не появляется).
Собственно, никаких особо экзотичных компонентов на формах нет: несколько StringGrid, TreeView, Memo, Button, PageControl, GroupBox'ы, ActionList. В "Лазаре" аналоги всего есть (даже все свойства и методы, которые я реально использую, - на месте).

Вопрос просто: в чём может быть затык? В инете найти внятной информации по конвертации проектов не удалось (разве что насчёт PageContol на одном сайте написано, что, мол, его надо перед конвертацией заменить на TabControl и фреймы; вот только даже формы без PageControl конвертируются через одну).
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

какую версию Лазаря используешь?
Конвертер активно улучшается в trunk-е.

Nik писал(а):В инете найти внятной информации по конвертации проектов не удалось (разве что насчёт PageContol на одном сайте написано, что, мол, его надо перед конвертацией заменить на TabControl и фреймы; вот только даже формы без PageControl конвертируются через одну).

http://lazarus-dev.blogspot.com/2010/04 ... erter.html
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

Использовал последний Daily Snapshots (Lazarus-0.9.29-25811-fpc-2.4.1-20100601-win32).
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

Nik писал(а):Использовал последний Daily Snapshots (Lazarus-0.9.29-25811-fpc-2.4.1-20100601-win32).

можно и по фотографиям попробовать лечить...
но как насчёт поделиться неконвертируемым delphi проектом?!

если он закрытый и исходники выдавать нельзя, попробуй собрать "липовый" проект, т.е. тупо убрав весь код (implementation) из оригинального проекта.
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

"Липа" - во вложении. Все формы на месте, юниты вычищены от кода (проект делается для заказчика, так что код отдать не могу; да и с конвертацией кода нет никаких проблем - компилируется с минимальными изменениями).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

тех модулей, которые у тебя не ковертируются, нет в uses секции .dpr файла! (добавь их туда!)

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

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
Откуда: Киров
Контактная информация:

Сообщение Nik »

скалогрыз писал(а):тех модулей, которые у тебя не ковертируются, нет в uses секции .dpr файла! (добавь их туда!)

Спасибо! Действительно, удалось конвертировать проект, добавив все модули в DPR. После прочистки форм от лишних свойств проект скомпилировался в Lazarus :) Сейчас допиливаю код - "Лазарь" несколько иначе работает с компонентами (в частности с Grig'ом).


за одним можешь пожаловаться на конвертацию 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, и как это можно исправить с наименьшими жертвами (логику работы программы менять не хочется, а упомянутые преобразования там используются довольно часто)?
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

На 64-разрядных ОС CategorTree.Selected.Data (типа Pointer) будет такой же разрядности как Int64, а Integer останется 32-разрядным. В результате если в Data окажется число за пределами диапазона Integer, в указанном коде произойдёт переполнение. Если в Data вы всегда пишете значения типа Integer, т.е.

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

CategorTree.Selected.Data := Pointer(Ind);
то всё должно работать.
Аватара пользователя
Nik
энтузиаст
Сообщения: 573
Зарегистрирован: 03.02.2006 23:08:09
Откуда: Киров
Контактная информация:

Сообщение Nik »

Спасибо за разъяснения. В Data всегда пишется Integer (по логике там в большинстве случаев даже ShortInt достаточно).
Ответить