Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создание свойства Options у компонента 
V
    Опции темы
SerK
Дата 9.12.2009, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 31.3.2007

Репутация: нет
Всего: нет



Вопрос в следующем.

Как вставить свойство типа Option в свой компонент? Поясняю: помните в Object Inspector у некоторый компонентов есть узлы, где рисуется "+". При раскрытии таких узлов в них видны
различные типы: String, bool, int и т.д. Я попытался сделать тоже, но у меня выскакивает непонятная для меня ошибка:

Код

class TMyOptions
 {
 private:
    String FGradTop,FGradRigth;
 
 public:
         __property String GradTop= {read=FGradTop, write=FGradTop};
         __property String GradRigth= {read=FGradRigth, write=FGradRigth};
         
 };

class PACKAGE TCustContrGrad : public TCustomControl
{
 private:
    TMyOptions FMyOptions;
_published:
    __property TMyOptions MyOptions={read=FMyOptions,write=FMyOptions}; //ошибка
};


В предпоследней строке  находится ошибка:
not an allowed type - (не позволенный тип)

Что я делаю не так?


Это сообщение отредактировал(а) SerK - 9.12.2009, 02:15


--------------------
Пусть будет миру хорошо!
PM MAIL   Вверх
586
Дата 9.12.2009, 03:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



Попробуй написать так:
Код
class TMyOptions: public TObject
 {
 private:
    String FGradTop,FGradRigth;
 
 public:
         __property String GradTop= {read=FGradTop, write=FGradTop};
         __property String GradRigth= {read=FGradRigth, write=FGradRigth};
         
 };

class PACKAGE TCustContrGrad : public TCustomControl
{
 private:
    TMyOptions *FMyOptions;
__published:
    __property TMyOptions* MyOptions={read=FMyOptions,write=FMyOptions};
};


Это сообщение отредактировал(а) 586 - 9.12.2009, 03:56
PM   Вверх
SerK
Дата 9.12.2009, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 31.3.2007

Репутация: нет
Всего: нет



586,
к сожалению, результат тот же.
Кстати, если 
 __property TMyOptions* MyOptions={read=FMyOptions,write=FMyOptions};
ставлю в секцию public:, то в компонент компилируется, но MyOptions не видно в Object Inspector, а это не то, что надо.


--------------------
Пусть будет миру хорошо!
PM MAIL   Вверх
smoke_man
Дата 9.12.2009, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Сделай наследование у TMyOptions не от TObject, а от TCustomControl.


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
artsb
Дата 9.12.2009, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



SerK, загляни сюда. Может поможет...

Это сообщение отредактировал(а) artsb - 9.12.2009, 11:32


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
SerK
Дата 9.12.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 31.3.2007

Репутация: нет
Всего: нет



586,
прошу прощения, недосмотрел ваш код, он работает, но....
В Object Inspector появляется мое свойство MyOptions с "+", но оно пусто, т.е. оно не раскрывается, хотя "+" меняется на "-". Вот новый код:

Код

class DELPHICLASS TMyOptions; //без этого объявления не компилир.
class PACKAGE TCustContrGrad : public TCustomControl
{
 private:
    TMyOptions *FMyOptions;
__published:
    __property TMyOptions* MyOptions={read=FMyOptions,write=FMyOptions};
};

class TMyOptions: public TObject
 {
 private:
    String FGradTop,FGradRigth;
 
 __published: //я поменял private: секцию 
         __property String GradTop= {read=FGradTop, write=FGradTop};
         __property String GradRigth= {read=FGradRigth, write=FGradRigth};
         
 };


... "видет" Object Inspector моих свойств __property String GradTop и __property String GradRigth.

smoke_man,
поменял на TCustomControl, - узел MyOptions меняется на enum (выпадющий список, но и он пуст).


artsb,
спасибо, толковый пример.

Это сообщение отредактировал(а) SerK - 9.12.2009, 14:42


--------------------
Пусть будет миру хорошо!
PM MAIL   Вверх
SerK
Дата 17.12.2009, 04:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 31.3.2007

Репутация: нет
Всего: нет



Прописал в конструкторе компонента

 MyOptions=new TMyOptions;
 
и все заработало.


--------------------
Пусть будет миру хорошо!
PM MAIL   Вверх
XPyCT
  Дата 18.2.2019, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 24.8.2007
Где: Moldova

Репутация: 10
Всего: 10



Привет всем!
Я прошу прощение за поднятие данной некто/темы, так как не хотел создавать отдельную.

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

я понимаю что это связано с созданием каждый раз нового экземпляра класса 
В общем ребята помогите плз мосГ сломан окончательно =)
привожу проблемный код:
Код

//header's
class TPrintSettings: public TObject
{
   private:
    int m_n1;
    int m_n2;

    void __fastcall SetM1(int n);
    int __fastcall GetM1();
    void __fastcall SetM2(int n);
    int __fastcall GetM2();
 public:
       TPrintSettings();
__published:
    __property int  cgLeft= {read=GetM1, write=SetM1,nodefault};
    __property int  cgTop= {read=GetM2, write=SetM2,nodefault};
};

class PACKAGE TCoolTable : public TStringGrid
{
private:
  TPrintSettings *pPrintSettings;
__published:
   __property  TPrintSettings *PrintSettings = {read=pPrintSettings, write=pPrintSettings, nodefault};
};


Код

//cpp's
TPrintSettings::TPrintSettings(){
}
void __fastcall TPrintSettings::SetM1(int n)
{
    m_n1 = n;
}
int __fastcall TPrintSettings::GetM1()
{
    return m_n1;
}
void __fastcall TPrintSettings::SetM2(int n)
{
    m_n2 = n;
}
int __fastcall TPrintSettings::GetM2()
{
    return m_n2;
}

__fastcall TCoolTable::TCoolTable(TComponent* Owner): TStringGrid(Owner)
{
     pPrintSettings =  new TPrintSettings();
}

PM MAIL Skype   Вверх
XPyCT
Дата 19.2.2019, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 24.8.2007
Где: Moldova

Репутация: 10
Всего: 10



Парни Хелп! Неужели никто не знает?
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1778 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.