Главная / FAQ по Builder'у / 165 Как зарегистрировать новое...

165 Как зарегистрировать новое пользователское событие для наследника TForm так, чтобы оно было видно в Object Inspector ?


 Свои свойства в инспекторе появляются тогда, когда производится регистрация
этой формы следующим образом
       RegisterCustomModule(__classid(TMyForm),__classid(TCustomModule));
После этого, в инспекторах всех форм, производных от TMyForm  появятся
опубликованные свои свойства и события. Правда   реализация формы-предка
должна быть оформлена в рантайме пакет. Производные формы могут создаваться
либо автоматически специально написанным для этого эспертом, либо вручную
посредством вставки в проект заранее подготовленной формы с соответсвующей
правкой dfm, h и cpp файла. Отмечу определенную особенность: в dfm форма
должна выглядеть не как inherited(чего следовало бы ожидать), а как обычная
форма. Hапример, если у нас есть базовая форма

class PACKAGE TMyForm: public TForm
{
__published:    // IDE-managed Components
    TButton *Button1;
    TButton *Button2;
private:
    void __fastcall SetOnButton1Click(TNotifyEvent value);
    TNotifyEvent __fastcall GetOnButton1Click();
    void __fastcall SetOnButton2Click(TNotifyEvent value);
    TNotifyEvent __fastcall GetOnButton2Click();
public:     // User declarations
    __fastcall TMyForm(TComponent* Owner);
__published:
    __property TNotifyEvent OnButton1Click  = { read=GetOnButton1Click,
write=SetOnButton1Click };
    __property TNotifyEvent OnButton2Click  = { read=GetOnButton2Click,
write=SetOnButton2Click };
};
 
которая имеет dfm 

object MyForm: TMyForm
  Left = 315
  Top = 284
  Width = 445
  Height = 303
  Caption = 'MyForm'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 104
    Top = 224
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
  end
  object Button2: TButton
    Left = 256
    Top = 224
    Width = 75
    Height = 25
    Caption = 'Button2'
    TabOrder = 1
  end
end

То dfm производной должна выглядеть точно также, за исключением
object MyForm1: TMyForm1
  Left = 315
  Top = 284
  ... и т д
h-файл производной формы будет примерно таким:
#include "TMyForm.h"
//---------------------------------------------------------------------------
class TMyForm1: public TMyForm
{
__published:    // IDE-managed Components
    TButton *Button1;
    TButton *Button2;
private:    // User declarations
public:     // User declarations
        __fastcall TMyForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
Hу и т.д
В этом случае в инспекторе этой форме на вкладке Events появятся два
дополнительных события
OnButton1Click 
OnButton2Click   

Во избежании лишних споров, уточняю - это не общие рассуждения, а реально
действующий механизм, с которым я работаю  уже более года.

Что касается  форм, созданных стандартно через репозитарий и inherited, то
здесь, действительно, не удается заставить показать дополнительные
опубликованные свойства и события 
                                                           
 ---
 *Примечание сост.: http://bcdev.narod.ru/Articles/FMPropeties.htm

Вячеслав Ермолаев

Предыдущий вопрос   |  Список вопросов   |   Следующий вопрос

источник      На главную      by jenyok
Copyright © 2003 JTSOFT
Сайт управляется системой uCoz