Текущие вопросы портирования большой проект D5->Lazarus
Модератор: Модераторы
Текущие вопросы портирования большой проект D5->Lazarus
TDirectoryListBox где брать?
в delhi он FileCtrl.pas, в FileCtrl.pp такого нет, да и вообще сделал поиск по директории Lazarus, нашёл ссылки на TDirectoryListBox в примерах, но они они явно ссылаются на дельфовый FileCtrl.pas.
Я конечно могу FileCtrl.pas компилятору подкинуть, но какие последствия это шага будут трудно предсказать.
в delhi он FileCtrl.pas, в FileCtrl.pp такого нет, да и вообще сделал поиск по директории Lazarus, нашёл ссылки на TDirectoryListBox в примерах, но они они явно ссылаются на дельфовый FileCtrl.pas.
Я конечно могу FileCtrl.pas компилятору подкинуть, но какие последствия это шага будут трудно предсказать.
Спасибо, с 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
Ну и? Что скажете?
ИМХО он икону приложения пытался грузить, да не нашёл.
Свом компоненты уствновил (ну правдо ещё с 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
Ну и? Что скажете?
ИМХО он икону приложения пытался грузить, да не нашёл.
Да, там несколько потоков запускается одновременно с пуском программы (остальые добавляются юзером по мере необходимост), и на 5-ти формах работает по 2-3 таймера...
теперь придётся в 2,5М исходников копаться, вспоминать что и почему писал.
В дебажно окне он мне всё на TBitmap ссылается при пуске, может одна из проблем, в том, что он ресурсы не видит?
теперь придётся в 2,5М исходников копаться, вспоминать что и почему писал.
В дебажно окне он мне всё на TBitmap ссылается при пуске, может одна из проблем, в том, что он ресурсы не видит?
Я использую EConvertError в своей программе (проверка формата чилел), и соответственно спец.крыжиком в настройках компилятора Делфи запретил программе "падать" при поялении этого экцепшина (Debugger Options->Language Exceptions убрал крыжик Stop on Delphi Exceptions), как заставить Лазаря не реагировть на программные исключения?
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 совпадали
Теперь вылезла проблема с 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 совпадали
