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

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

17.12.2025, 18:53. Показов 1608. Ответов 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
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
17.12.2025, 23:04
Цитата Сообщение от frolandr Посмотреть сообщение
Как на c++ написать?
Не знаю.



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

Вот это почитай пока.
0
1 / 1 / 0
Регистрация: 18.03.2014
Сообщений: 95
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
33450 / 21550 / 8248
Регистрация: 22.10.2011
Сообщений: 37,002
Записей в блоге: 12
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
1 / 1 / 0
Регистрация: 18.03.2014
Сообщений: 95
18.12.2025, 16:37  [ТС]
volvo,
Огромное спасибо, работает!


Другое дело, что в исходном коде из исходника каркаса плагина нужно заменить Msg.lParam на Msg.LParam.
Еще почему то ругается на строку Windows.GetClientRect( ParentWindow, R ); хотя #include <windows.h> подключен.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33450 / 21550 / 8248
Регистрация: 22.10.2011
Сообщений: 37,002
Записей в блоге: 12
18.12.2025, 17:45
Цитата Сообщение от frolandr Посмотреть сообщение
почему то ругается на строку Windows.GetClientRect
Достаточно написать:
C++
1
::GetClientRect(ParentWindow, &R); // Я вообще всё, что из Windows.h пишу с ::
, Windows.GetClientRect - это опять из Дельфи...
1
1 / 1 / 0
Регистрация: 18.03.2014
Сообщений: 95
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
Ответ Создать тему
Новые блоги и статьи
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2. Задача: контроль уникальности строк в. . .
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
Своя Интернет-Компания
iceja 18.06.2026
Я программист с экономическим образованием, пишу свой проект, это SaaS для бизнесов. Мне нужен co-founder с высшим экономическим образованием, и/ или инвестор. Сейчас проект в интенсивной разработке,. . .
24 Мат модель здравосохранения: функциональные требования к строительству пищеблока
anaschu 18.06.2026
СРесурсами1: финансовый SD-контур, калькулятор функциональных требований пищеблока Сегодня разделили затраты в агенте Экономика по образцу модели НАСОСЫ, добавили расчёт ROI и построили первый. . .
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов • Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp • Смежный проект:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru