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

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

Отображение события в инспекторе объектов [D6, Win2k]


Stanislav_SM ©   (2004-12-30 20:11:00) 

Ув. мастера, помогите пожалуйста. Я создал фрейм. Для него описал событие (в published), но когда я его помещаю на основную форму, то в инспекторе объектов его нет. Что не так.


type
 TSelectRecEvent = procedure(ID: Integer) of object;

 TGrItemsFrame = class(TFrame)
   Panel1: TPanel;
   StatusBar1: TStatusBar;
   DBGridEh1: TDBGridEh;
   DBTreeFilter1: TDBTreeFilter;
   Button1: TButton;
   procedure DBGridEh1DblClick(Sender: TObject);
 private
   FOnSelectRec: TSelectRecEvent;
   procedure DoSelectRec(ID: Integer);
 published
   property OnSelectRec: TSelectRecEvent read FOnSelectRec write FOnSelectRec;

 end;

implementation
uses DMUnit;
{$R *.dfm}

procedure TGrItemsFrame.DoSelectRec(ID: Integer);
begin
 if Assigned(FOnSelectRec) then FOnSelectRec(ID);
end;

procedure TGrItemsFrame.DBGridEh1DblClick(Sender: TObject);
var ID:integer;
begin
if not DM.Items.Active then exit;
if not DM.Items.RecordCount>0 then exit;
ID:=DM.Items.FieldByName('I_ID').AsInteger;
DoSelectRec(ID);
end;

end.


Stanislav_SM   (2005-01-10 21:37:00) [1]

Спасибо за совет


prosoft   (2004-12-31 10:15:00) [2]

См. ответ здесь
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1104132825&n=12


Юрий Зотов   (2004-12-31 00:00:00) [3]

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

Но тут возникнут 2 новые проблемы. Во-первых, какой именно класс CustomModule надо регистрировать именно для фрейма и как к этому классу достучаться - об этом, похоже, известно только самому Borland'у. Во-вторых, если даже этот CustomModule и удастся зарегистрировать, то на наследниках Вашего фрейма исчезнут все компоненты, лежащие на предке (откроете DFM - увидите причину в первом же слове). В общем, с этой задачкой придется поковыряться немало (и далеко не факт, что ее вообще удастся решить), а готового решения тут, похоже, нет.

Есть простой (но не всегда приемлемый) способ - зарегистрировать фрейм в палитре, как компонент. По идее, тогда и события должны появиться, и лежащие компоненты не должны исчезнуть - но фрейм уже перестанет быть собственно фреймом.


Наверх

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