0 / 0 / 0
Регистрация: 19.09.2014
Сообщений: 32
|
|
1 | |
Динамическое создание и удаление объектов VCL27.09.2014, 19:28. Показов 9329. Ответов 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 удаление динамически созданых объектов с формы Создание собственного VCL компонента. Динамическое изменение количества колонок в зависимости от размера объекта Динамическое создание объектов |
Модератор
|
||||||
27.09.2014, 22:33 | 3 | |||||
Ну вот тебе пример...
На форме размещен 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 [ТС] | 5 |
Не понятно как сделать количество компонентов не ограничено, выбивает ошибку
0
|
28.09.2014, 11:23 | 7 |
D1973, за исключением стилистики есть одна существенная ошибка - ты применяешь delete к классу, базовому для TPanel. По условию принципа ООП мы знать не знаем о реализации деструкторов в иерархии TControl => TPanel. Поэтому, если деструктор родительского класса не виртуальный, то деструктор TPanel вызван не будет. Нужно кастовать именно к указателю на панель для удаления.
А на брюзжание Авазарта не обращай внимания, полтора десятка тыщ постов сами собой не появляются. andrei1994, какую ошибку-то? Здесь телепатов не водится.
1
|
0 / 0 / 0
Регистрация: 19.09.2014
Сообщений: 32
|
|
28.09.2014, 12:28 [ТС] | 8 |
Код от D1973 работает спасибо, только я не понимаю может чуть условие "Количество компонентов не ограничено" это как? нажимаешь на кпопку добавить и они создаются не ограничено количество раз или как?
0
|
0 / 0 / 0
Регистрация: 19.09.2014
Сообщений: 32
|
|
28.09.2014, 13:35 [ТС] | 10 |
Я точно не понимаю как это должно выглядеть в программе, объясни мне где должны они создаваться не ограничено , я прогу отладил просто может я что не учел, объясни я проверю так ли, если косяк скину код
0
|
28.09.2014, 13:43 | 11 |
Приведенный код уже соответствует заданию по части неограниченности количества. Не хватает только размещения новых панелек на свободном месте. Сделай Left и Top панелей хотя бы рандомно, так же, как задается расположение лейблов.
0
|
0 / 0 / 0
Регистрация: 19.09.2014
Сообщений: 32
|
|
28.09.2014, 14:38 [ТС] | 12 |
Можешь написать код как в соответствии с заданием ,чтобы на свободном месте создавалась панель с лабелем и едитом , а то я недавно начал изучать плохо ориентируюсь , как все сдвигать пропорционально
0
|
28.09.2014, 14:58 | 14 | |||||
Как и опыт)
Про динамическую индитификацию тоже вероятно не знаем. Если бы до ка бы ... Виртуальный деструктор тоже одно из условий ООП, если предполагается возможность наследования. Добавлено через 4 минуты Тут
1. Мы ничего не знаем о GroupBox1, он объявлен локально в предыдущем методе. 2. "Проскок" в цикле: удаляя C, он автоматически удаляется из контейнера GroupBox1->Controls[], другие компоненты в нем смещаются. P.S: Упражняйтесь дальше.
0
|
Модератор
|
|
28.09.2014, 15:23 | 15 |
1. GroupBox1 создается (по условию задачи) в DesignTime, соответственно он определен в *.h файле. В том методе (Button1Click), на который Вы указываете, я не создаю GroupBox1, я просто присвоил переменной G типа TGroupBox значение GroupBox1 (т.к. привел пример только для одного GroupBox, а по условию ТС их должно быть 3, переменная была введена именно для возможности работать с несколькими GroupBox-ами)
2. Вот тут, конечно, немного не так надо было, на это мне уже уважаемый BRcr указал, но, если честно, то я имел в виду только то, что создается 1 панель, а на ней - другие контролы (Лэйбл и Эдит). "Грохнув" панель мы тем самым очищаем контейнер GroupBox, т.е. никакого смещения компонентов не происходит Добавлено через 41 секунду Стараюсь...
0
|
0 / 0 / 0
Регистрация: 19.09.2014
Сообщений: 32
|
|
28.09.2014, 15:29 [ТС] | 17 |
как сделать чтобы на свободном месте создавалась панель? а не поверх предыдущей
0
|
Модератор
|
|
28.09.2014, 15:45 | 18 |
1. Я понял так, что все это великолепие создается именно в процессе проектирования, а уже потом на каждый из GroupBox-ов мы динамически добавляем компоненты TPanel, а на них ... (и т.д.)
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 [ТС] | 19 | |||||
как сделать чтобы создавалось на свободном месте панель с едитом и лабелем, что-то у меня нефига не получается
0
|
28.09.2014, 17:21 | 20 | ||||||||||
Ну и что? Единолично заставишь весь белый свет следовать этому условию?
Лучше руководствоваться соображениями практичности. Правда, если уж ими руководствоваться до конца, то никаких кастов не нужно будет, но это уже из другой оперы... Про такого монстра транслитерации, как "индитификация" я точно ничего не знаю. Пост Гуру у нас UI занимает почти безраздельно. Я себя больше дошколенком чувствую. Подразумевал я всего-навсего излишества: глобальные переменные и объявление в теле цикла. И, кстати, Avazart совершенно правильно заметил некорректность цикла очистки:
Не совсем, чтобы на свободном, правда, - так, на случайном. Хочешь четко по заданию - размещай панельки одну рядом с другой, как клетки шахматной доски.
0
|
28.09.2014, 17:21 | |
28.09.2014, 17:21 | |
Помогаю со студенческими работами здесь
20
Динамическое создание объектов Динамическое создание объектов класса Динамическое создание и удаление компонентов. HELP::Создание->удаление динамических объектов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |