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

Динамическая идентификация класса

22.05.2018, 18:13. Показов 1470. Ответов 4

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Пишу на C++ Builder XE.

Можно ли как-то динамически идентифицировать форму, описанную в классе ?
Есть несколько форм (классов) TForm1, TForm2, TForm3 , ..., TFormN. И я знаю их имена (следовательно я знаю имя класса и имя объекта этого класса), но только в виде текста.

В dynamic_cast требуется указать тип, но он каждый раз разный (классы-то по-разному называются). Возник вопрос, что можно сделать с текстовым названием класса.

Есть какой-то механизм динамической идентификация формы ?

Спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.05.2018, 18:13
Ответы с готовыми решениями:

как устроена динамическая идентификация типов
Здрасте! Меня интересует, как компилируемая программа может проводить RTTI , если во время компиляции типы данных еще не известны.

Как отсортирвоать контейнер, если его тип определяется по ходу выполнения программы? (динамическая идентификация типов)
собсно #include <windows.h> #include <stdio.h> #include <vector> #include <list> #include <algorithm> #include <cxxabi.h> ...

Идентификация класса и возвращение значения
Предположим, у меня есть класс "родитель" и множество классов "наследников". Предположим, что по условию задачи мне нужно обработать...

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33399 / 21509 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
22.05.2018, 18:16
C++
1
if(frm->ClassNameIs("TForm1")) ...
Это имеется в виду?
0
7 / 5 / 2
Регистрация: 25.05.2013
Сообщений: 112
22.05.2018, 18:26  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Это имеется в виду?
Нет.
Требуется с формы MainForm открывать другие формы, например TForm1, TForm2, TForm3 , ..., TFormN.
Какая форма будет открыта зависит от некоторых условий. Но суть в том, что открывать их нужно с одной и той же кнопки на MainForm.

Первое, что пришло в голову это:
C++
1
dynamic_cast <TForm *>(FindComponent(FormName))->Show()
, где FormName - имя формы.

И этот код даже компиллится, но при выполнении - Access Violation.

Нужно динамически, зная имя формы, запустить её.

Спасибо!
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33399 / 21509 / 8236
Регистрация: 22.10.2011
Сообщений: 36,907
Записей в блоге: 12
22.05.2018, 18:33
Нормально все работает, никакого AV нет:
C++
1
    dynamic_cast<TForm*>(Application->FindComponent(FormName))->Show();
, естественно, если форма уже создана к моменту попытки вызова (если в настройках проекта эту форму не убрали из списка Auto-create forms, например)
1
7 / 5 / 2
Регистрация: 25.05.2013
Сообщений: 112
25.05.2018, 00:19  [ТС]
Благодарю!
Я не учёл, что ищу компоненты в текущем классе, откуда произвожу вызов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.05.2018, 00:19
Помогаю со студенческими работами здесь

Динамическая компиляция класса
Имею вот такой метод, который в рантайме должен компилировать исходник java. public static void compile(final File file, final...

Динамическая загрузка java-класса
Привет, брат ! Пытаюсь загрузить java - класс. Пишу под виндой. Получаю exception 'ClassNotFound'. Вот кусок кода: ...

Динамическая память и конструктор класса
Подскажите, почему Marshroute *objects2 = new Marshroute(for_loop); компилятор ругается на (for_loop), если я хочу запустить конструктор не...

Динамическая матрица как член класса
Доброго времени суток, не так давно отзывчивые люди научили меня тому, что я хочу старая тема Путём ручное выделения памяти под нужный...

Динамическая обработка событий массива объектов класса ImageButton
Всем доброго времени суток. Объявляю массив объектов ImageButton del = new ImageButton; В цикле создаю кнопки del = new...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru