Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите как правильно работать с библиотеками BPL


Страницы:   1 2

Павел Калугин ©   (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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо