![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите как правильно работать с библиотеками BPL
Павел Калугин © (2012-11-13 14:45:00)Что надо:
Есть приложение содержащее довольно большое количество списочных форм и еще болщее количество "редакторов"
Соответственно есть желание разнести формы по библиотекам, чтобы при модификации отдельно взятого окна не надо было пересобирать всю балалайку
Как хочу реализовать
Формы по тематике группируются в библиотеки. Например все формы касающиеся отображения/редактирования данных лиц закладываем в partners.bpl
Приложению сообщаем для какого "условного типа" какую форму поднимать в виде "Наименование библиотеки", "Наименование класса формы''
Соответственно при выборе пункта меню "Список лиц" по данным вида Partners.BPL, TFmPartnersList надо подгрузить библиотеку и открыть соответствующую форму.
Теперь вопросы чайника
Как правильно провешивать в такой организации ссылки на такие базовые вещи как модуль данных, конект к БД общие наборыы данных и т.д.?Как поместить в библиотеку несколько форм?
Как при этом обходится с наследованием? Держать библиотеку с базовыми классами форм и ссылатся на неё при создании библиотек с наследниками?
Как по наименованию библиотеки и класса открыть форму?
Павел Калугин (2012-11-14 09:55:00) [21]Герман, мне б про это наследование понять....
А почему, зачем - задачки иногда просто-так решать надо. Для удовольствия. Ну и эта. Чтоб потом можно было менторским тоном произнести: ну я же говорил, вот тут в 17-й строке накосячил, так что перестаешь изобретать и пишешь по ТЗ. Иногда, увы, так надо...
Германн (2012-11-14 02:25:00) [22]
> а че это ты вдруг в кодинг врезался?
Жисть заставляет, имхо.
Чем сейчас могут "старики" превзойти молодых? Только тем, что старики могут в короткие сроки освоить несколько "смежных" областей.
Павел Калугин (2012-11-14 01:38:00) [23]Ошибку понял.
Дядь Юр, ну одно другому не мешает. Надо же на кошках идейки опробовать иногда :)
Теперь остался непонятным второй вопрос.
Что мне делать если нужна форма, которую надо унаследовать от формы лежащей в другой библиотеке.
В BaseClass я помещаю класс формы
TModalDataList = class(TfModalDialogForm)
PFilter: TPanel;
BitBtn3: TBitBtn;
SpList: TADOStoredProc;
dgList: TDBGrid;
dsList: TDataSource;
pmList: TPopupMenu;
private
{ Private declarations }
public
{ Public declarations }
procedure IsShowButtons(IsShow : boolean);
end;
В другой библиотеке мне надо создать от этой формы наследника,
Как мне к библиотеке пускай Partners подключать вот эту библиотеку с базовыми классами? чтоб получить, к примеру, вот такое
type
TfmPartnersList = class(TModalDataList)
est1: TMenuItem;
procedure est1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Юрий Зотов (2012-11-14 01:01:00) [24]Паш, а че это ты вдруг в кодинг врезался? Ты же аналитик, вроде как?
Юрий Зотов (2012-11-14 00:56:00) [25]Переменная LibClass должна быть ссылкой на класс, а не ссылкой на экземпляркласса.
var
LibClass: TDataModuleClass; // В uses добавить CtlPanel
MyDataModule: TDataModule
...
LibClass:=TDataModuleClass(GetClass('TdmMain'));
MyDataModule := LibClass.Create(self);
Павел Калугин (2012-11-14 00:25:00) [26]Почитал. Непонимание таки осталось
Создал проект библиотеки package
В библиотеке модуль
unit fDm;
interface
uses
System.SysUtils, System.Classes, Data.DBXMSSQL, Data.Win.ADODB, Data.DB,
Data.SqlExpr;
type
TdmMain = class(TDataModule)
adcMain: TADOConnection;
private
{ Private declarations }
public
Procedure ConnectDb;
Procedure DisConnectDb;
{ Public declarations }
end;
var
dmMain: TdmMain;
implementation
{%CLASSGROUP 'System.Classes.TPersistent'}
{$R *.dfm}
{ TdmMain }
procedure TdmMain.ConnectDb;
begin
adcMain.Connected:=True;
end;
procedure TdmMain.DisConnectDb;
begin
adcMain.Connected:=False;
end;
initialization
if not Assigned(GetClass('TdmMain')) then RegisterClass(TdmMain);
finalization
if Assigned(GetClass('TdmMain')) then UnRegisterClass(TdmMain);
end.
В приложении вызов
procedure TfmMain.FormCreate(Sender: TObject);
var
LibClass: TDataModule;
LibHandle: HMODULE;
begin
LibPath :=ExtractFilePath(Application.ExeName)+'Lib\';
// Showmessage( LibPath);
LibHandle:=LoadPackage (LibPath+'BaseClass.bpl');
LibClass:=TDataModule(GetClass('TdmMain'));
if LibClass= nil
then raise Exception.create('Ошибка при создании компонента.'#10 + 'Класс TdmMain не зарегистрирован');
LibClass.Create(self);
end;
на LibClass.Create(self) получаю AV ПОчему?
Павел Калугин (2012-11-13 18:48:00) [27]Спасибо!
Игорь Шевченко (2012-11-13 18:45:00) [28]http://delphikingdom.com/asp/viewitem.asp?catalogid=274
http://delphikingdom.com/asp/viewitem.asp?catalogid=468