|
0 / 0 / 0
Регистрация: 19.09.2014
Сообщений: 32
|
|
Динамическое создание и удаление объектов VCL27.09.2014, 19:28. Показов 10142. Ответов 33
Метки нет (Все метки)
Не получается сделать программу на C++ Bilder
Разработать приложение, которое динамически создает и удаляет объекты VCL. На форме размещены 3 компонента TGroupBox. Под каждым компонентом TGroupBox размещен компонент TCheckBox. Внизу формы размещены кнопки «Добавить» и «Удалить». По нажатию на кнопку «Добавить» в выбранных TGroupBox на свободном месте создать объект на основе TPanel и размещенных внутри ее компонентов TLabel и TEdit. В Label записать номер TGroupBox, а в TEdit – координаты созданного компонента – X и Y. При нажатии на кнопку «Удалить» – удалить все компоненты с выбранных TGroupBox. Количество компонентов не ограничено.
0
|
|
| 27.09.2014, 19:28 | |
|
Ответы с готовыми решениями:
33
Динамическое создание VCL-объектов из dll VCL удаление динамически созданых объектов с формы
|
|
Модератор
|
||||||
| 27.09.2014, 22:33 | ||||||
|
Ну вот тебе пример...
На форме размещен 1 компонент GroupBox1. Внизу формы размещены кнопки «Добавить» и «Удалить». По нажатию на кнопку «Добавить» в GroupBox1 в случайном месте создается объект на основе TPanel и внутри ее компоненты TLabel и TEdit. В Label записано имя TGroupBox, а в TEdit – координаты созданного компонента – X и Y. При нажатии на кнопку «Удалить» – удаляются все компоненты на GroupBox1
0
|
||||||
|
0 / 0 / 0
Регистрация: 19.09.2014
Сообщений: 32
|
|
| 28.09.2014, 02:59 [ТС] | |
|
Не понятно как сделать количество компонентов не ограничено, выбивает ошибку
0
|
|
|
|
|
| 28.09.2014, 11:23 | |
|
D1973, за исключением стилистики есть одна существенная ошибка - ты применяешь delete к классу, базовому для TPanel. По условию принципа ООП мы знать не знаем о реализации деструкторов в иерархии TControl => TPanel. Поэтому, если деструктор родительского класса не виртуальный, то деструктор TPanel вызван не будет. Нужно кастовать именно к указателю на панель для удаления.
А на брюзжание Авазарта не обращай внимания, полтора десятка тыщ постов сами собой не появляются. ![]() andrei1994, какую ошибку-то? Здесь телепатов не водится.
1
|
|
|
0 / 0 / 0
Регистрация: 19.09.2014
Сообщений: 32
|
|
| 28.09.2014, 12:28 [ТС] | |
|
Код от D1973 работает спасибо, только я не понимаю может чуть условие "Количество компонентов не ограничено" это как? нажимаешь на кпопку добавить и они создаются не ограничено количество раз или как?
0
|
|
|
0 / 0 / 0
Регистрация: 19.09.2014
Сообщений: 32
|
|
| 28.09.2014, 13:35 [ТС] | |
|
Я точно не понимаю как это должно выглядеть в программе, объясни мне где должны они создаваться не ограничено , я прогу отладил просто может я что не учел, объясни я проверю так ли, если косяк скину код
0
|
|
|
|
|
| 28.09.2014, 13:43 | |
|
Приведенный код уже соответствует заданию по части неограниченности количества. Не хватает только размещения новых панелек на свободном месте. Сделай Left и Top панелей хотя бы рандомно, так же, как задается расположение лейблов.
0
|
|
|
0 / 0 / 0
Регистрация: 19.09.2014
Сообщений: 32
|
|
| 28.09.2014, 14:38 [ТС] | |
|
Можешь написать код как в соответствии с заданием ,чтобы на свободном месте создавалась панель с лабелем и едитом , а то я недавно начал изучать плохо ориентируюсь , как все сдвигать пропорционально
0
|
|
|
|
|||||||||
| 28.09.2014, 14:58 | |||||||||
|
Добавлено через 4 минуты Тут
1. Мы ничего не знаем о GroupBox1, он объявлен локально в предыдущем методе. 2. "Проскок" в цикле: удаляя C, он автоматически удаляется из контейнера GroupBox1->Controls[], другие компоненты в нем смещаются. P.S: Упражняйтесь дальше.
0
|
|||||||||
|
Модератор
|
|||
| 28.09.2014, 15:23 | |||
|
2. Вот тут, конечно, немного не так надо было, на это мне уже уважаемый BRcr указал, но, если честно, то я имел в виду только то, что создается 1 панель, а на ней - другие контролы (Лэйбл и Эдит). "Грохнув" панель мы тем самым очищаем контейнер GroupBox, т.е. никакого смещения компонентов не происходит Добавлено через 41 секунду
0
|
|||
|
0 / 0 / 0
Регистрация: 19.09.2014
Сообщений: 32
|
|
| 28.09.2014, 15:29 [ТС] | |
|
как сделать чтобы на свободном месте создавалась панель? а не поверх предыдущей
0
|
|
|
Модератор
|
||
| 28.09.2014, 15:45 | ||
|
2. Еще раз повторюсь: я привел пример, что в контейнере GroupBox будет ОДНА панель. (Про условие ТС "Количество компонентов не ограничено" я помнил, но предоставил ему подумать, как это будет выглядеть), поэтому удаляя Панель внутри ГрупБокса, тем самым я очищал его полностью. Вроде бы я так и написал, что создал ПРИМЕР, а не выполнил за ТС задание. Цитата... "Ну вот тебе пример... На форме размещен 1 компонент GroupBox1. Внизу формы размещены кнопки «Добавить» и «Удалить». По нажатию на кнопку «Добавить» в GroupBox1 в случайном месте создается объект (не объектЫ) на основе TPanel и внутри ее компоненты TLabel и TEdit. В Label записано имя TGroupBox, а в TEdit – координаты созданного компонента – X и Y. При нажатии на кнопку «Удалить» – удаляются все компоненты на GroupBox1"
0
|
||
|
0 / 0 / 0
Регистрация: 19.09.2014
Сообщений: 32
|
||||||
| 28.09.2014, 17:11 [ТС] | ||||||
|
как сделать чтобы создавалось на свободном месте панель с едитом и лабелем, что-то у меня нефига не получается
0
|
||||||
|
|
|||||||||||||||
| 28.09.2014, 17:21 | |||||||||||||||
![]() Лучше руководствоваться соображениями практичности. Правда, если уж ими руководствоваться до конца, то никаких кастов не нужно будет, но это уже из другой оперы... ![]() Подразумевал я всего-навсего излишества: глобальные переменные и объявление в теле цикла. И, кстати, Avazart совершенно правильно заметил некорректность цикла очистки:
Не совсем, чтобы на свободном, правда, - так, на случайном. Хочешь четко по заданию - размещай панельки одну рядом с другой, как клетки шахматной доски.
0
|
|||||||||||||||
| 28.09.2014, 17:21 | |
|
Помогаю со студенческими работами здесь
20
Динамическое создание объектов Динамическое создание объектов Динамическое создание объектов класса Динамическое создание и удаление компонентов. HELP::Создание->удаление динамических объектов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[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
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|