Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
6 / 6 / 3
Регистрация: 06.02.2013
Сообщений: 71
1

Сделать свой VCL-компонент

25.07.2013, 00:02. Показов 1595. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
- Здравствуйте Завсегдатаи! Хочу попросить Вашего совета в одном вопросе.
Конструирую свой VCL-компонент (TmyListBox) на основе VCL-компонента TListBox.
Все нормально, но в новом компоненте мне нужны обработчик двойного щелчка мышью
(DblClick) и обработчик перерисовки (Paint). Вот с этим ничего и не выходит ...
Делаю это так:
1) В заголовочный файл моего VCL-компонента "myListBox.h" добавляю:
C++
1
2
3
4
5
protected:
  // .........
  virtual void __fastcall   DblClick(TObject *Sender);
  // перегрузка базового метода Отрисовки.
  virtual void __fastcall   Paint( void );
2) В файл реализации моего VCL-компонента "myListBox.cpp" добавляю:
C++
1
2
3
4
5
6
7
8
9
10
11
// .........
void __fastcall     TmyListBox::DblClick(TObject *Sender)
{
  // .........
}
 
// .........
void __fastcall     TmyListBox::Paint( void )
{
  // .........
}
Но, как показывает отладчик, ни один из этих методов не работает!
Метод Paint, по идее, при нормальной работе должен вызываться постоянно. Но в
него отладчик не заходит вообще. Точно так-же, при двойном щелчке на поле
моего myListBox не срабатывает обработчик DblClick.
- Компилятор дает одно предупреждение:
W8022 '_fastcall TmyListBox::DblClick(TObject *)' hides virtual function
'_fastcall TControl::DblClick()'
которое означает, что мой обработчик перекрывает одноименный виртуальный
обработчик базового класса.
Подскажите пожалуйста в чем здесь дело? Что я делаю не правильно?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2013, 00:02
Ответы с готовыми решениями:

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

Свой компонент в tool palette
Подскажите как засунуть свой компонент, основанный на TFrame, в палитру где кнопки, мемо и прочее.....

как создать свой компонент
Имеется код, в котором, на основе стандартных компонентов, создан свой, к примеру статусбар с...

Перетаскивание файлов на свой компонент
Создаю свой компонент. Как в нем реализовать перетаскивание файлов на него. Проблема в том что...

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
25.07.2013, 00:13 2
Цитата Сообщение от Okonenko Stanis Посмотреть сообщение
Что я делаю не правильно?
Забываешь о том, что DblClick описан в базовом классе вот так:
C++
1
DYNAMIC void __fastcall DblClick(void);
. Замечаешь разницу в списке параметров? И подумай теперь, что ты сделал на самом деле.
1
6 / 6 / 3
Регистрация: 06.02.2013
Сообщений: 71
27.07.2013, 14:06  [ТС] 3
- Прошу прощения за исчезновение. Проблемы с инетом.
- Спасибо UI ! Формат обработчика DblClick я не забыл, а просто НЕ ЗНАЛ.
Я ранее создавал TListBox динамически:
C++
1
2
3
  TListBox*  ListBox1 = new  TListBox( this );
  ListBox1->Parent = this;
  ListBox1->OnDblClick = OnDblClick;
где определял обработчик двойного щелчка:
C++
1
2
// .........
void __fastcall     OnDblClick(TObject* Sender);
Вот я и думал, что в базовом классе TListBox этот обработчик имеет
такую сигнатуру, только еще виртуальный.
- Сделал по Вашему совету так:
1) В заголовочный файл моего VCL-компонента "myListBox.h" добавляю:
C++
1
2
3
protected:
    // .........
    DYNAMIC void __fastcall     DblClick( void );
2) В файл реализации моего VCL-компонента "myListBox.cpp" добавляю:
C++
1
2
3
4
5
// .........
void __fastcall     TmyListBox::DblClick( void )
{
    // .........
}
- Все работает! Спасибо!

Добавлено через 3 минуты
- Да, UI, огромное спасибо за ссылки на документацию embarcadero! Теперь буду
знать, где смотреть все эти свойства и методы! Еще раз огромное спасибо!
0
27.07.2013, 14:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2013, 14:06
Помогаю со студенческими работами здесь

Создать свой компонент в c++builder6 (на основе TStringGrid)?
Построить класс - потомок класса TStringGrid, объект которого при нажатии клавиши F11 выводит в...

Как вставить свойство типа Option в свой компонент?
Здравствуйте! Вопрос в следующем. Как вставить свойство типа Option в свой компонент? Поясняю:...

При сбросе флажка "Link with runtime packages" приложение не находит созданный свой компонент
Сделал свой компонент, оттестировал в режиме "Link with runtime packages", все работает. Пытаюсь...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru