View previous topic :: View next topic |
Author |
Message |
salexn75
Joined: 23 Dec 2008 Posts: 4
|
Posted: Wed Dec 24, 2008 9:26 am Post subject: Возмо& |
|
|
Добрый день. Скачал триальную версию и возникли вопросы:
1. Есть модуль данных в проекте. Можно ли как то из дизайнера достучаться до DataSet на этом модуле?
2. Можно ли сделать свой обработчик Propery Editor? Так например для своего компонента некоторые данные для PropertyEditor известны только в ран-тайм. Использовали LMD Designer, там возможно было такое выкручивать |
|
Back to top |
|
|
econtrol Site Admin
Joined: 09 Jun 2006 Posts: 202
|
Posted: Fri Dec 26, 2008 8:35 am Post subject: |
|
|
Добрый день,
1. Да можно. Дизайнер не что иное как собственная реализация принципов заложенных в дизайнере Delphi IDE. Редактируемый объект - комонент, и все дочерние компоненты доступны через свойство Components[].
Например послезагрузки компонета (модуля данных или формы) из файла (dfm)
Code: | var DM: TDataModule;
Tbl: TTable;
begin
DM := TDataModule.Create(Application);
zReadCmpFromFile(FileName, DM);
zFormDesigner1.Target := DM;
zFormDesigner1.Active := True;
// Находим таблицу
Tbl := TTable(DM.FindComponent('Mytable'));
// Например, открываем радактор комоненты TTable (редактор полей)
if Assigned(Tbl) then
zFormDesigner1.Edit(Tbl);
end; |
2. Да все необходимые design-time объекты поддерживаются,
а именно:
1. Редакторы свойств (наследники TPropertyEditor)
2. Редакторы комонентов (наследники TComponentEditor)
3. Модули (наследники TCustomModule, непример редакто Quick Report)
4. Поля (TFields)
5. Действия (TAction)
Для добавления этих объектов к приложению нужно также, как в Delphi IDE регистрировать классы этизх обхектов, используя:
1. RegisterPropertyEditor
2. RegisterComponentEditor
3. RegisterCustomModule
4. RegisterFields
5. RegisterActions
Для регистрации компонент:
RegisterComponents
RegisterNoIcon
При сборке приложения с Runtime Packages:
1. Если классы находятся в основном EXE - вызвать процедуру регистрации вручную, напрмер, в конструкторе главной формы
2. Если классы реализованы в отдельном пакете (BPL) - добавить в один из модулей этой BPL процедуру Register, в которой производить регистрацию объектов и комонентов. Это точно также, как производится регистрация в Delphi IDE. В этом случае регистрация компонентов и объектов design-time будет производиться при загрузке BPL используя DsnLoadPackage(BplFile: string).
При сборке без Runtime Packages:
Рузультирующее приложение EXE не использует BPL (по крайней мере не использует DesignIDE##.bpl). В этом случае регистрация производится вручную, напрмер, в конструкторе главной формы.
Таким образом, тот функционал, который доступен в Delphi IDE элементарно переносится в приложение с использованием "EControl Form Designer Pro".
Пример регистрации всех объектов Design-time библиотеки DevExpress ExpressQuantumGrid:
Code: | cxGridReg.Register;
cxGridPopupMenuReg.Register; |
Михаил. |
|
Back to top |
|
|
salexn75
Joined: 23 Dec 2008 Posts: 4
|
Posted: Fri Dec 26, 2008 10:27 am Post subject: |
|
|
Спасибо, но наверное я не корректно сформулировал вопрос. Я создаю форму в дизайнере, и мне необходимо в качестве Lookup DataSource(DataSet) указать компонент, который лежит на модуле данных, который есть в проекте. Возможно ли это? |
|
Back to top |
|
|
econtrol Site Admin
Joined: 09 Jun 2006 Posts: 202
|
Posted: Fri Dec 26, 2008 10:37 am Post subject: |
|
|
Please, post you message again in English.
I can not read it (I think you may see that your message is not displayed correctly).
Michael. |
|
Back to top |
|
|
salexn75
Joined: 23 Dec 2008 Posts: 4
|
Posted: Fri Dec 26, 2008 10:52 am Post subject: |
|
|
I created form in EControl designer and i want to link Lookup DataSource. Problem is DataSource placed on DataModule and Object Inspector don't have access to this DataModule. Can i do it?
P.S. Sorry for my English |
|
Back to top |
|
|
econtrol Site Admin
Joined: 09 Jun 2006 Posts: 202
|
Posted: Fri Dec 26, 2008 12:03 pm Post subject: |
|
|
Yes, it is possible using TDesignerEvents.OnGetGlobalComponents event, for example:
Code: | // Set global Components List
function TForm1.DesignerEvents1GetGlobalComponents(Root: TComponent;
const List: TList): Boolean;
begin
Result := True;
List.Add(DataModule1);
end; |
In this case in object inspector there will be possible to define references like 'DataModule1.DSbiolife'.
See main demo as example. All db controls on the form references data sources from data module.
Michael. |
|
Back to top |
|
|
salexn75
Joined: 23 Dec 2008 Posts: 4
|
Posted: Sat Dec 27, 2008 10:28 am Post subject: |
|
|
Thanks!
Great!!! |
|
Back to top |
|
|
|