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

Приведение типов

20.05.2016, 14:54. Показов 1097. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят, здравствуйте. Срочный вопрос. Заранее очень благодарен за помощь.

У меня есть свой класс в c++ builder:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Hamal : public TComponent{
    public:
    __fastcall Hamal(TComponent* Owner) :  TComponent(Owner){
    }
        __fastcall Hamal(TForm* form) : TComponent(form){
               box = new TPaintBox(form);
        box->SetParentComponent(form);
               box->Left = 0;
        box->Top = 0;
        box->Width = 100;
        box->Height = 100;
        red = 0;green=0;blue=0;
        red2=255;green2=255;blue2=255;
        color = (TColor) RGB(red,green,blue); //Тень
        color2 = (TColor) RGB(red2,green2,blue2); // Белый прямоугольник
        rec = Rect(10,10,box->Width, box->Height);
        rec2 = Rect(0,0,box->Width-10,box->Height-10);
        box->Tag = 1;
        }
    void create(){
        
   }
    TPaintBox* box;
    TColor color, color2; //Для первого и второго прямоугольника
    int red, red2, green,green2, blue, blue2;
    TRect rec2;// = Rect(10,10, width, height);
    TRect rec; // = Rect(0,0,width-10,height-10);
    int id;
    void draw(TCanvas* Canvas){
        box->Canvas->Brush->Color = color;
        box->Canvas->Rectangle(rec);
        box->Canvas->Brush->Color = color2;
        box->Canvas->Rectangle(rec2);
    }
};
Дальше я создаю объект данного класса :
C++
1
Hamal* ham = new Hamal(Form1);
И присваиваю обработчики:
C++
1
2
3
4
5
hamal->box->OnMouseDown = &mouseDown;
void __fastcall Form1::mouseDown(TObject *Sender, TMouseButton Button,
          TShiftState Shift, int X, int Y){
    Hamal* ham =  dynamic_cast<Hamal*>(Sender); //Пытаюсь получить доступ к компоненту, вызвавшему событие
}
Я вроде понял, что на самом деле нужно делать так:
C++
1
TPaintBox* ham = dynamic_cast<TPaintBox>(Sender);
Но проблема в том, что мне нужно получить доступ к некоторым элементам моего собственного класса. Но как мне это сделать?
P.S. ham всегда остаётся NULL;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.05.2016, 14:54
Ответы с готовыми решениями:

Приведение типов!
Вот есть код! Я на 70% уверен что ошибка в соответствии типов! потому что при разных значениях sizeof(речь идет от разных типах), я получаю...

Приведение типов из AnsiString в HMODULE
Необходимо считать из Edit4-&gt;Text значение дескриптора в HMODULE moduleHandle;. По сути это 16-тиричное число, но moduleHandle =...

Приведение типов?
Подскажите, пожалуйста что происходит. Не понимаю почему такой код работает. .h class Km { private: static const...

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
20.05.2016, 16:38
Цитата Сообщение от napster3 Посмотреть сообщение
ham всегда остаётся NULL;
Потому что
C++
1
TPaintBox* ham = dynamic_cast<TPaintBox*>(Sender);
, приводить надо к указателю, а не к самому классу.

Цитата Сообщение от napster3 Посмотреть сообщение
мне нужно получить доступ к некоторым элементам моего собственного класса
Храни в box->Tag не бесполезную единицу, а полезную ссылку на экземпляр класса, которому принадлежит этот box:
C++
1
        box->Tag = (int)this; // в конструкторе
, и потом преобразуй этот Tag назад в указатель на Hamal:
C++
1
2
TPaintBox* pb = dynamic_cast<TPaintBox*>(Sender);
Hamal* ham = reinterpret_cast<Hamal*>(pb->Tag);
3
1 / 1 / 0
Регистрация: 27.08.2015
Сообщений: 25
20.05.2016, 21:24  [ТС]
Спасибо
Также подумал о том, чтобы просто унаследовать класс TPaintBox. Пока всё получается вроде

Добавлено через 1 минуту
Спасибо
Также подумал о том, чтобы просто унаследовать класс TPaintBox. Пока всё получается вроде
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.05.2016, 21:24
Помогаю со студенческими работами здесь

Приведение типов
Добрый вечер! Реализовываю явное и не явное приведение типов. Есть два класса, сепаративных, A и B. Реализацию явного преобразования...

Приведение типов
Делаю программу, которая кроме всего прочего должна отсортировать массив. Использую для этого qsort. Вот что получилось: ...

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

Приведение типов
Доброго времени суток. Пусть имеются две структуры struct Student { string FirstName; string LastName; int year;

Приведение типов
Доброго времени суток. Есть вопрос. Допустим: class Base { ..... } class Derived:public Base{ .... }


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru