![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отображение события в инспекторе объектов [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 - увидите причину в первом же слове). В общем, с этой задачкой придется поковыряться немало (и далеко не факт, что ее вообще удастся решить), а готового решения тут, похоже, нет.
Есть простой (но не всегда приемлемый) способ - зарегистрировать фрейм в палитре, как компонент. По идее, тогда и события должны появиться, и лежащие компоненты не должны исчезнуть - но фрейм уже перестанет быть собственно фреймом.