InfoCity
InfoCity - виртуальный город компьютерной документации
Реклама на сайте







Размещение сквозной ссылки

 

Редактор компонента


Большинство проектов в C++Builder содержат разнообразные файлы модулей. Даже маленький проект может иметь несколько модулей. Код нашего редактора мы поместим в тот же модуль, что и компонент. Это понятно - там, где будет компонент, должен быть и редактор. Минимум методов редактора компонент, которые должны быть переопределены - ExecuteVerb(), GetVerb() и GetVerbCount(). После этого мы можем объявить наследника TComponentEditor. Добавим следующий код в файл заголовка компонента:

class TMyEditor : public TComponentEditor
{
private:
    void __fastcall ExecuteVerb(int Index);
    AnsiString __fastcall GetVerb(int Index);
    int __fastcall GetVerbCount(void);
protected:
public:
};
//---------------------------------------------------------------------------
class PACKAGE TExampleEditor : public TComponent
{
private:
protected:
public:
    void __fastcall Something(void);
    void __fastcall SomethingElse(void);
    __fastcall TExampleEditor(TComponent* Owner);
__published:
};
//---------------------------------------------------------------------------

GetVerbCount() возвращает количество членов (команд), которые появятся в контекстном меню. В нашем случае их будет два. GetVerb() возвращает строку, котрая появится в пункте меню, заданном параметром Index. И наконец, ExecuteVerb() вызывает метод, заданный параметром Index. Вы должно быть, заметили, что у класса TMyEditor нет конструктора. Там не нужно ничего инициализировать, так что дизайнер форм вызовет конструктор базового класса. Теперь давайте напишем методы нашего редактора компонент. Добавьте следующий код в главный файл модуля:

//---------------------------------------------------------------------------
int __fastcall TMyEditor::GetVerbCount(void)
{
return 2;
}
//---------------------------------------------------------------------------
AnsiString __fastcall TMyEditor::GetVerb(int Index)
{
AnsiString str;
switch(Index)
    {
    case 0: str = "&Something";  break;
    case 1: str = "Something&Else"; break;
    }
return str;
}

Обратите внимание, что в строку включен амперсанд(&). Это заставит соответствующую букву появиться подчеркнутой и работать как горячая клавиша для выбора соответствующего пункта меню. Не забудьте добавить троеточие (...) в конец строки, если соответствующий пункт меню вызывает диалог. Добавьте следующий код ниже в главный файл модуля:

//---------------------------------------------------------------------------
void __fastcall TMyEditor::ExecuteVerb(int Index)
{
switch(Index)
    {
    case 0:  ((TExampleEditor*)Component)->Something(); break;
    case 1:  ((TExampleEditor *)Component)->SomethingElse(); break;
    }
}

Позвольте прерваться на секунду и поговорить о классе TComponentEditor. TComponentEditor имеет только два свойства. Это ‘Component’ и ‘Designer’. Свойство ‘Component’ дает доступ к компоненту в дизайнере форм, который использует этот редактор компонент. Дизайнер форм создаст редактор для каждой копии класса компонента, когда она будет выбрана в дизайнере. Свойство Component будет содержать указатель на выбранный компонент. Component объявлено как (TComponent*), так что вы должны привести его к нужному производному типу для доступа к его методам. Если вы хотите изменять компонент или читать из него, используйте свойство Component.

Свойство ‘Designer’ обеспечивает доступ к объекту дизайнера форм из C++ Builder's IDE. Оно используется, чтобы считывать данные или изменять текущую форму или модуль. Дизайнер форм имеет методы, которые позволяют получить доступ к компонентам в текущем .CPP файле, другим компонентам, определенным во включенных файлах, создавать ил изменять методы в текущем .CPP файле и так далее. Вы можете найти детальное описание этих методов в файле помощи.

[Назад][Вперед]


Реклама на InfoCity

Яндекс цитирования



Финансы: форекс для тебя








1999-2009 © InfoCity.kiev.ua