Не могу активировать методы Mousedown и Mouseup

  • Автор темы Maycal
  • Дата начала
Статус
Закрыто для дальнейших ответов.
M

Maycal

#1
Доброе время суток уважаемые программисты. В данный момент я по самоучителю изучаю C++ и застрял на создание круглой кнопки.
Проблема заключается в том, что я не могу вызвать методы MouseDown и MouseUp.
Цель программы такова: после нажатия на круглую кнопку контур эллипса становиться более жирным, вследствии чего создаеться впечетление о нажатой кнопки. Чтобы вызвать метод "ожирнения" контурной линии я использую методы MouseDown и MouseUp. Обявления в заголовочном файле выглядят следующим образом:
protected:
virtual void __fastcall MouseDown(TMouseButton Button,
Classes::TShiftState Shift, int X, int Y);
virtual void __fastcall MouseUp(TMouseButton Button,
Classes::TShiftState Shift, int X, int Y);


а сами методы выглядит так:

void __fastcall TOButton::MouseDown(TMouseButton Button,
Classes::TShiftState Shift, int X, int Y)
{
TCustomControl::MouseDown (Button, Shift, X, Y);
if (Button == mbLeft)
{
Pressed = true;
Paint ();
}
}
//---------------------------------------
void __fastcall TOButton::MouseUp(TMouseButton Button,
Classes::TShiftState Shift, int X, int Y)
{
TCustomControl::MouseUp (Button, Shift, X, Y);
Pressed = false;
Paint ();
}
//-----------------------------------------

Но как только пытаюсь запустить проект, выдаеться сообщение об ощибке:
[C++ Error] OButton.h(19): E2113 Virtual function '_fastcall TOButton::MouseDown(TMouseButton,TShiftState,int,int)' conflicts with base class 'TControl'
[C++ Error] OButton.h(21): E2113 Virtual function '_fastcall TOButton::MouseUp(TMouseButton,TShiftState,int,int)' conflicts with base class 'TControl'


Родительским классом использую TCustomControl. Я с 8 часов утра пытаюсь понять в чем дело и безрезультатно! Люди, помогите пожалуйста, буду очень благодарен!!! Заранее спасибо.
 
P

Pasha

#2
Для: Maycal
Замени в объявлении слово virtual на DYNAMIC.
 
P

Pasha

#4
Для: Maycal
Another extension allows dynamic functions in classes derived from TObject. A dynamic function is similar to a virtual function. The difference is that a dynamic function occupies space in the virtual table only in classes that define the function. A virtual function occupies space in every derived class, regardless of whether that class defines the virtual function. Dynamic functions make for smaller executables--but at the expense of execution speed--since the virtual tables of all derived classes are searched each time a dynamic function is called. The __declspec keyword has been expanded to take the dynamic parameter, as follows:
void __declspec(dynamic) MyFunction();
Скорее всего в TControl твои функции объявлены как dynamic, и сделать из них обычные виртуальные уже нельзя.
 
Статус
Закрыто для дальнейших ответов.