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

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

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

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

Сообщение Герасим » 28.12.2007 14:22:10

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

Я конечно могу FileCtrl.pas компилятору подкинуть, но какие последствия это шага будут трудно предсказать.
Герасим
новенький
 
Сообщения: 14
Зарегистрирован: 28.12.2007 13:29:18

Сообщение alexs » 28.12.2007 15:15:59

даже в дельфине это устаревший компонет, оставленный для совместимости с D1. Лучше отказаться от него. Как вариант, конечно, можно написать аналог :-)
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Герасим » 28.12.2007 16:16:40

на что его можно променять ?
Герасим
новенький
 
Сообщения: 14
Зарегистрирован: 28.12.2007 13:29:18

Сообщение alexs » 28.12.2007 16:41:38

а в чём сложность?
ListBox + FindFirst + FindeNext + FindClose - и всех то проблем
да и виде компоненты оформить это не очень долго
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Vlad04 » 09.01.2008 18:52:42

На панели Dialogs есть компоненты TSaveDialog, TOpenDialog, TSelectDirectoryDialog, с комощью которых можно можно решить большинство насущных вопросов.
Аватара пользователя
Vlad04
новенький
 
Сообщения: 78
Зарегистрирован: 11.12.2007 21:11:19
Откуда: Караганда. Казахстан

Сообщение Герасим » 11.01.2008 13:03:38

Спасибо, с 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

Ну и? Что скажете?
ИМХО он икону приложения пытался грузить, да не нашёл.
Герасим
новенький
 
Сообщения: 14
Зарегистрирован: 28.12.2007 13:29:18

Сообщение Bupyc » 11.01.2008 13:34:11

По ходу дела в *.lpr в uses убран модуль Interfaces. Из-за этого и валится.
Bupyc
постоялец
 
Сообщения: 137
Зарегистрирован: 29.08.2007 18:22:42

Сообщение Герасим » 11.01.2008 13:39:52

Добавил Interfaces, даже 10 секунд приложение поработало, теперь я знаю как выглядит прога скомпиленная Lazarusом!
Буду разбираться дальше.
Герасим
новенький
 
Сообщения: 14
Зарегистрирован: 28.12.2007 13:29:18

Сообщение Bupyc » 11.01.2008 13:49:23

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


В программе, видимо, какой то thread или обработчик таймера валится.
Bupyc
постоялец
 
Сообщения: 137
Зарегистрирован: 29.08.2007 18:22:42

Сообщение tria » 11.01.2008 14:35:54

Я бы еще проверял обработчики событий.
Они в Лазаре работают не так, как в Делфи. Поищи, где-то с пол-года год назад кто-то здесь рассказывал разницу.
На практике может случится такая вещь, что форма уже не существует а ее обработчик вызывается и соответсвенно, вылетает.
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Сообщение Герасим » 11.01.2008 14:41:54

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

Сообщение Герасим » 11.01.2008 15:32:02

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

Сообщение Герасим » 11.01.2008 16:20:30

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 совпадали
Герасим
новенький
 
Сообщения: 14
Зарегистрирован: 28.12.2007 13:29:18


Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 121

Рейтинг@Mail.ru