Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 70

Переопределение OnChange в производном классе

17.12.2025, 18:53. Показов 1127. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создаю производный класс TMySpinEdit от TSpinEdit:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class TMySpinEdit : public TSpinEdit {
    private:
 
    protected:
    
    public:
        AnsiString VariableName;
        AnsiString RectangleName;
        AnsiString Name;
        AnsiString Var;
        void __fastcall onChange();                           //переопределяю OnChange
 
        TMySpinEdit() : TSpinEdit(Application) {};           
        //~TMySpinEdit();
};
Есть вопросы:
1.правильно ли переопределяю OnChange?
2.нужно ли добавлять override? если добавляю появляется ошибка?
3.почему не работает конструктор TNeoSpinEdit(), только так: TNeoSpinEdit() : TSpinEdit(Application) {};
4.нужен ли деструктор?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.12.2025, 18:53
Ответы с готовыми решениями:

Переопределение виртуальной функции в производном классе
Здравствуйте, я столкнулся с проблемой при переопределения виртуальной функции в производном...

базовый и производный класс, в базовом объявлена переменная "protected", она недоступна по имени в производном классе! template <class T> воду мутит!
Друзья! Вот код #include &lt;stdio.h&gt; template &lt;class T&gt; class otets { protected: int...

Ошибка при вызове виртуальной функции в производном классе
Здравствуйте, извините, если подобная тема появлялась, но либо у меня руки не от туда растут, либо...

25
Злостный нарушитель
 Аватар для Verevkin
10284 / 5708 / 1268
Регистрация: 12.03.2015
Сообщений: 26,438
17.12.2025, 23:04
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от frolandr Посмотреть сообщение
Как на c++ написать?
Не знаю.



Цитата Сообщение от frolandr Посмотреть сообщение
А вот это куда MESSAGE WM_NOTIFYPLUGINOBJECT;
А откуда ты всё это взял?
-------
Зачем ты это делаешь? Ответь.
Я спать пошёл. Ща кто-нить с Камчатки и Сахалина проснётся и сменит меня. Я больше не могу...

Вот это почитай пока.
0
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 70
18.12.2025, 01:08  [ТС]
volvo, большое спасибо за разъяснение и подсказки.
Вроде бы заработало. Создал одновременно два объекта, на обоих крутил значения, конфликтов нет.
Посмотрите пожалуйста код верный?

В unit3.h написал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class TMySpinEdit : public TSpinEdit {
    private:
 
    protected:
        DYNAMIC void __fastcall Change(void);
    public:
        AnsiString VariableName;
        AnsiString RectangleName;
        AnsiString Name;
        AnsiString Var;
 
        __fastcall virtual TMySpinEdit(Classes::TComponent* AOwner)
            : Vcl::Samples::Spin::TSpinEdit(AOwner)
        {
        }
};
В unit3.cpp :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Реализация
void __fastcall TMySpinEdit::Change() {
    nbSetVar(Var.c_str(), AnsiString(Value).c_str());
}
//-----
    
    
//Создаю
TMySpinEdit *Spinner = new TMySpinEdit(NULL);
Spinner->ParentWindow = RectangleHandle;                           
AnsiString SpinnerName = "Spinner" + AnsiString(Params[0]);        
Spinner->Name = SpinnerName;                                  
Spinner->RectangleName = AnsiString(Params[0]);
Spinner->Var = AnsiString(Params[1]);
 
//Это теперь не нужно
//TMethod Method;                                                      
//Method.Code = TMySpinEdit::Change;                                           
//Method.Data = Spinner;                                       
//Spinner->OnChange = (TNotifyEvent*)&Method;
И еще у меня вопрос, как мне добавить следующее событие в декларацию spinedit
Pascal
1
PROCEDURE WMNotifyPlugIn( VAR Msg : TMessage ); MESSAGE WM_NOTIFYPLUGINOBJECT;
Она на Делфи, как его перевести в c++?

Реализация уже есть на c++ такая:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const WM_NOTIFYPLUGINOBJECT  = WM_USER + 250;
 
void TNeoSpinEdit::WMNotifyPlugIn(TMessage Msg) {
    TRect R;
    switch(Msg.lParam) {
        case 1 : break;                                     //покинул страницу
        case 2 : break;                                     //вошел на страницу
        case 3 : break;                                     //выход из режима Run
        case 4 : {                                          //размер основного прямоугольного объекта был изменен, поэтому отрегулируйте управление вращением, чтобы оно соответствовало
          Windows.GetClientRect( ParentWindow, R );
          SetWindowPos(Handle, 0, 0, 0, R.Right - R.Left, R.Bottom - R.Top, SWP_SHOWWINDOW);
        }
        case 5 : if (Msg.wParam != 0) {                     //Управление рисованием на DC — используется командой PrintPage }
          PaintTo(Msg.wParam, 0, 0);
        case 6 : Msg.Result = 0;                            //Tab Stop - да, мы хотим его
        case 7 : Enabled = false;                           //Приемник Rectangle отключен
        case 8 : Enabled = true;                            //Приемник Rectangle включен
    }
}
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
18.12.2025, 10:13
Цитата Сообщение от frolandr Посмотреть сообщение
Она на Делфи, как его перевести в c++?
Вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const int WM_NOTIFYPLUGINOBJECT = WM_USER + 250;
 
    class TMySpinEdit : public Vcl::Samples::Spin::TSpinEdit
    {
    // ...
    private:
        MESSAGE void __fastcall WMNotifyPlugIn( TMessage &Message )
        {
            // ... тут код метода
        }
 
        BEGIN_MESSAGE_MAP
            MESSAGE_HANDLER(WM_NOTIFYPLUGINOBJECT, TMessage, WMNotifyPlugIn);
        END_MESSAGE_MAP(Vcl::Samples::Spin::TSpinEdit)
 
    public:
    // ...
};

Не по теме:

На полный путь ( Vcl::Samples::Spin:: ) не обращай внимания, я обычно пишу не потомков, а классы-перехватчики, это оттуда привычка :)

1
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 70
18.12.2025, 16:37  [ТС]
volvo,
Огромное спасибо, работает!


Другое дело, что в исходном коде из исходника каркаса плагина нужно заменить Msg.lParam на Msg.LParam.
Еще почему то ругается на строку Windows.GetClientRect( ParentWindow, R ); хотя #include <windows.h> подключен.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
18.12.2025, 17:45
Цитата Сообщение от frolandr Посмотреть сообщение
почему то ругается на строку Windows.GetClientRect
Достаточно написать:
C++
1
::GetClientRect(ParentWindow, &R); // Я вообще всё, что из Windows.h пишу с ::
, Windows.GetClientRect - это опять из Дельфи...
1
0 / 0 / 0
Регистрация: 18.03.2014
Сообщений: 70
18.12.2025, 18:05  [ТС]
volvo,
Снимаю шляпу все отлично работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.12.2025, 18:05
Помогаю со студенческими работами здесь

Создайте в производном классе метод, определяющий формулу, которая изображена на рисунке
Создайте в производном классе метод, определяющий:формулу(изображена на рисунке 1)

Конструктор в производном классе
Всем доброго времени суток! есть класс Строка (CStr) class CStr { protected: int length;...

Не могу перегрузить [] в производном классе
Не могу перегрузить оператор в производном классе class_arr.cpp #include &lt;iostream&gt; ...

Оператор вывода в производном классе
Как из производного класса вызвать перегруженный оператор вывода из базового класса? Я показал в...

Как сделать компоненты базового класса доступными в производном классе, но недоступными вне классов?
Как сделать компоненты базового класса доступными в производном классе, но недоступными вне классов?


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru