Текущие вопросы портирования большой проект D5->Lazarus

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

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

Ответить
Герасим
новенький
Сообщения: 14
Зарегистрирован: 28.12.2007 12:29:18

Текущие вопросы портирования большой проект D5->Lazarus

Сообщение Герасим »

TDirectoryListBox где брать?
в delhi он FileCtrl.pas, в FileCtrl.pp такого нет, да и вообще сделал поиск по директории Lazarus, нашёл ссылки на TDirectoryListBox в примерах, но они они явно ссылаются на дельфовый FileCtrl.pas.

Я конечно могу FileCtrl.pas компилятору подкинуть, но какие последствия это шага будут трудно предсказать.
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

даже в дельфине это устаревший компонет, оставленный для совместимости с D1. Лучше отказаться от него. Как вариант, конечно, можно написать аналог :-)
Герасим
новенький
Сообщения: 14
Зарегистрирован: 28.12.2007 12:29:18

Сообщение Герасим »

на что его можно променять ?
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

а в чём сложность?
ListBox + FindFirst + FindeNext + FindClose - и всех то проблем
да и виде компоненты оформить это не очень долго
Аватара пользователя
Vlad04
новенький
Сообщения: 80
Зарегистрирован: 11.12.2007 20:11:19
Откуда: Караганда. Казахстан

Сообщение Vlad04 »

На панели Dialogs есть компоненты TSaveDialog, TOpenDialog, TSelectDirectoryDialog, с комощью которых можно можно решить большинство насущных вопросов.
Герасим
новенький
Сообщения: 14
Зарегистрирован: 28.12.2007 12:29:18

Сообщение Герасим »

Спасибо, с TDirectoryListBox разобрался.
Свом компоненты уствновил (ну правдо ещё с Excel вопросы будут но пока закоментарил)
После долгого шаманста, подстановки юнитов "Windows, lcltype" в каждый модуль, правки путей в fpc.cfg, рихтовки форм и восстанавления картинок на кнопках...мой проект собрался!
Барабанная дробь... пуск... fuck!!!
сразу вылетел в Application.Initialize по except SIGSEGV:

Вот что пишет при вылете, в образовавшемся текстовом окошке:
ToDo: TBitMap.LoadFromResourceName
ERROR: No widgetset object. Plz check if the unit "interfaces" was added to the programs uses clause.
[FORMS.PP] ExceptionOccurred
Sender=Exception
Exception=No widgetset object. Plz check if the unit "interfaces" was added to the programs uses clause.
Stack trace:
$0041568B
TApplication.HandleException No widgetset object. Plz check if the unit "interfaces" was added to the programs uses clause.
Stack trace:
$0041568B

Ну и? Что скажете?
ИМХО он икону приложения пытался грузить, да не нашёл.
Bupyc
постоялец
Сообщения: 137
Зарегистрирован: 29.08.2007 18:22:42

Сообщение Bupyc »

По ходу дела в *.lpr в uses убран модуль Interfaces. Из-за этого и валится.
Герасим
новенький
Сообщения: 14
Зарегистрирован: 28.12.2007 12:29:18

Сообщение Герасим »

Добавил Interfaces, даже 10 секунд приложение поработало, теперь я знаю как выглядит прога скомпиленная Lazarusом!
Буду разбираться дальше.
Bupyc
постоялец
Сообщения: 137
Зарегистрирован: 29.08.2007 18:22:42

Сообщение Bupyc »

Герасим писал(а):10 секунд приложение поработало


В программе, видимо, какой то thread или обработчик таймера валится.
tria
постоялец
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10
Контактная информация:

Сообщение tria »

Я бы еще проверял обработчики событий.
Они в Лазаре работают не так, как в Делфи. Поищи, где-то с пол-года год назад кто-то здесь рассказывал разницу.
На практике может случится такая вещь, что форма уже не существует а ее обработчик вызывается и соответсвенно, вылетает.
Герасим
новенький
Сообщения: 14
Зарегистрирован: 28.12.2007 12:29:18

Сообщение Герасим »

Да, там несколько потоков запускается одновременно с пуском программы (остальые добавляются юзером по мере необходимост), и на 5-ти формах работает по 2-3 таймера...
теперь придётся в 2,5М исходников копаться, вспоминать что и почему писал.
В дебажно окне он мне всё на TBitmap ссылается при пуске, может одна из проблем, в том, что он ресурсы не видит?
Герасим
новенький
Сообщения: 14
Зарегистрирован: 28.12.2007 12:29:18

Сообщение Герасим »

Я использую EConvertError в своей программе (проверка формата чилел), и соответственно спец.крыжиком в настройках компилятора Делфи запретил программе "падать" при поялении этого экцепшина (Debugger Options->Language Exceptions убрал крыжик Stop on Delphi Exceptions), как заставить Лазаря не реагировть на программные исключения?
Герасим
новенький
Сообщения: 14
Зарегистрирован: 28.12.2007 12:29:18

Сообщение Герасим »

C EConvertError разобрался, его можно добавить в список, что и сделал "Окружение->Настройки отладчика"

Теперь вылезла проблема с DLL, при загрузке прога проверяет доступные плагины (DLL) извлекает из них Icon и Caption главных окон (потом создаёт на панели кнопки с этими иконками и в Hint кнопок добавляет Caption плагинов) Естественно в Delphi всё работает и уже 2-й год ;-)
И так, код:
type
TPluginCreateForm = procedure (var _CommList:TCommList;
var _Application:TApplication;
var _BaseProperty: TBaseProperty;
var ViewPanel: TTablePanel01);stdcall;
TPluginGetMainIcon = function (var MainIcon:Graphics.TBitMap):shortstring;stdcall;

type
PPluginInfo = ^TPluginInfo;
TPluginInfo = record
DLLName: string;
LibHandle: HModule;
PluginCreateForm: TPluginCreateForm;
PluginGetMainIcon: TPluginGetMainIcon;
PanelButton: TSpeedButton;//в плугине кроме картинки должен хранится хинт для кнопки
end;

var
p:PPluginInfo;
...
begin
...//ищу DLL создаю список плагинов
...//теперь по одному их извлекаю чтоб добыть их них инфу (иконку и описание)
p:=FPluginsList[i];//p cуществует, и с ним проблем быть не может
....
BitMap:=Graphics.TBitMap.Create;
_Hint:=p.PluginGetMainIcon(BitMap); \\тут падает! PluginGetMainIcon находится в DLL

в DLL (естественно работает не один год)
function PluginGetMainIcon(var MainIcon:TBitMap):shortstring;stdcall;
begin
try
MainIcon.LoadFromResourceName(hinstance,'MAINBMP');
except
MainIcon.ReleaseHandle;//освобождаем картинку
end;
PluginGetMainIcon:='Настройка синхронизации';
end;

ИМХО DLL тоже нужно Лазарем скомпилить, чтобы типы TBitMap совпадали
Ответить