Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.30;
Скачать: CL | DM;

Вниз

Как обуздать TDataModule ?   Найти похожие ветки 

 
DevilDevil   (2007-12-06 01:24) [0]

Вопрос Датамодулей меня интересует давно.

Сегодня попробовал... он почему то начал грузить свойства Color, Font, PopupMenu и много других... :(((((((((((

Попробовал ещё раз... теперь вообще ничего кроме своих TDataModule-евских ничего не грузит.

Привожу код... в Инспектор Объектов должно добавиться событие OnSomeEvent, но не добавляется.


//--------------------------
program DataModuleTest;
uses
 SysUtils,
 Unit1 in "Unit1.pas" {SomeModule: TDataModule},
 Unit2 in "Unit2.pas";

begin
 RunMyApplication;
end.
//--------------------------
unit Unit1;

interface
uses
 SysUtils, Classes, Unit2, ExtCtrls;

type
 TSomeModule = class(TMyType)
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 SomeModule: TSomeModule;

procedure RunMyApplication;

implementation

{$R *.dfm}

procedure RunMyApplication;
begin
 SomeModule := TSomeModule.Create(nil);
 SomeModule.Free;
end;
//--------------------------
unit Unit2;

interface
uses
 SysUtils, Classes;

type
 TMyType = class (TDataModule)
 private
   FOnSomeEvent: TNotifyEvent;
 public
 published
   property OnSomeEvent: TNotifyEvent read FOnSomeEvent write FOnSomeEvent;
 end;

implementation

end.
//--------------------------


Для того чтобы у себя создать подобное приложение, сначала создайте ConsoleApplication, потом TDataModule.

Очень буду благодарен за помощь!


 
DevilDevil   (2007-12-06 01:29) [1]

хммм... закрыл Delphi, открыл снова проект...
получил огромную кучу свойств и событий... очень интересно!


 
Юрий Зотов ©   (2007-12-06 05:08) [2]

> в Инспектор Объектов должно добавиться событие OnSomeEvent, но не
> добавляется.

И не должно. Нет регистрации TMyType.


 
icWasya ©   (2007-12-06 12:20) [3]

В файле проекта должно быть указано, что TMyType тоже данамодуль
Unit2 in "Unit2.pas" {TMyType: TDataModule};


 
DevilDevil ©   (2007-12-06 19:12) [4]

> Юрий Зотов ©   (06.12.07 05:08) [2]

Спасибо. Как зарегистрировать TMyType?
P.S. не хотелось бы, чтобы мой Датамодуль появлялся на палитре компонентов.

> icWasya ©   (06.12.07 12:20) [3]
Вызывает у меня сомнения... подобный комментарный метод.


 
Юрий Зотов ©   (2007-12-06 19:36) [5]

> DevilDevil ©   (06.12.07 19:12) [4]

1. Если просто нужен просто модуль данных, то ничего регистрировать не надо. Жмем File-New-DataModule и наслаждаемся жизнью. Причем без всяких выкрутасов в коде (совершенно, кстати, непонятных и на фиг не нужных), а также и без всяких чудес типа "начал грузить Color, Font, PopupMenu".

2. Регистрация модуля данных нужна только тогда, когда Вы хотите иметь модуль данных с нестандартными свойствами в Инспекторе Объектов. Регистрируется он не как обычный компонент (кстати, где это Вы нашли модуль данных в палитре?), для этого есть специальная процедура, которую надо вызывать в процедуре register пакета. Для форм эта процедура называется RegisterCustomModule, а как для модулей данных -  честно говоря, не помню, давно с этим разбирался и уже подзабыл.


 
DevilDevil ©   (2007-12-06 20:05) [6]

> Юрий Зотов ©   (06.12.07 19:36) [5]

Большое спасибо, буду пробовать.


 
DevilDevil ©   (2007-12-07 14:16) [7]

Мда... немного продвинулся...

Создал пакет.
Создал юнит с описанием класса-модуля данных
Добавил паблишед Integer-свойство
В процедуре Register вызываю RegisterCustomModule(TMyType, TCustomModule)
uses DesignEditors, DesignIntf;
компилятор стал ругаться на raise и Proxies
добавил в пакет модуль designide.dcp
покате скомпилировался

Создаю новое приложение
наследую модуль данных от моего класса
компилятор ругается на raise и Proxies

что делать?


 
DrPass ©   (2007-12-07 15:48) [8]


> Для форм эта процедура называется RegisterCustomModule,
> а как для модулей данных

Она же и для модулей данных

> Создаю новое приложение
> наследую модуль данных от моего класса
> компилятор ругается на raise и Proxies

Сделать так, чтобы процедура Register находилась в модуле пакета, который инсталлируется в Delphi, и не попадает в приложение


 
DevilDevil ©   (2007-12-07 16:15) [9]

> DrPass ©   (07.12.07 15:48) [8]

> Сделать так, чтобы процедура Register находилась в модуле
> пакета, который инсталлируется в Delphi, и не попадает в приложение</>

я если честно, не понимаю этой формулировки.
прописать в файле *.dpk ?
или создать ещё один *.pas ?


 
DevilDevil ©   (2007-12-07 16:16) [10]

напутал с тегами, извиняюсь.


 
DevilDevil ©   (2007-12-07 16:42) [11]

Мне хотелось бы, чтобы это модуль данных и ряд других компонентов содержался в одном пакете.

Ну и чтобы их можно было использовать ))


 
DevilDevil ©   (2007-12-07 16:57) [12]

Всё, разобрался.

Всем большое спасибо за помощь!



Страницы: 1 вся ветка

Текущий архив: 2007.12.30;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
2-1196847194
Dilmo
2007-12-05 12:33
2007.12.30
Программно открыть заданную папку


2-1196868657
vegarulez
2007-12-05 18:30
2007.12.30
Вопрос - Как узнать что TPanel.BringtoFront=True?


15-1196459406
homm_
2007-12-01 00:50
2007.12.30
Диафильмы


15-1196325054
de.
2007-11-29 11:30
2007.12.30
Нужны иконки


2-1196976105
Свой
2007-12-07 00:21
2007.12.30
TQuery ответ и регистр букв