![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
САБЖ.
У меня на панели создаётся динамически объект Scrollbar, но в определённые момент мне нужно его удалить. А чтобы удалить нужно обратится к идентификатору скролбара. |
|||
|
||||
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
ну... это... можешь добавить в класс формы указатель на свой ScrollBar... при создании ScrollBar'а с помощью операции new инициализировать этот указатель адресом, который new возвратит... а когда надо удалить - применяешь к указателю этому операцию delete
-------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
| Zero |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
А это как, ведь у меня scrollbar создаётся при нажатии на одну кнопку, а нужно чтобы удалялся на другую кнопку
я пока с адресами не очень хорошо... А создаётся он у меня, когда я нажимаю на кнопку, при этом вызывается функция член, из моего класса, вот пример:
При повторном нажатии на другую кнопку, надо чтобы этот скрол удалился, а потом из этой процедуры он снова содался... Хорошобы, если такое возможно, определить его как глобальную переменную, а потом пере началом кода вставить типа такого:
Это сообщение отредактировал(а) Zero - 16.10.2005, 09:47 |
||||||||
|
|||||||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
Дак обьяви эти указатели или глобальными или статическими -------------------- Жизнь - печальная штука. |
|||
|
||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
что ты подразумеваешь, под словом "эти" Добавлено @ 09:51 Т.е. глобальными было бы ни плохо, только вот как... функцию New чтоли как глобальную объявить, т.е. её использовать в начале проги??? |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
Ну если я тебя правельно понял проблема вот в чем:
1.Нажымая на первую кнопку ты создаешь динамичеси нкии обьекты(с помощью указателей) 2.Нажимая на вторую кнопку ты должен удалить эти обьекты ,но "вторая" кнопка не видет указатели первой кнопки=>Если я правельно понял ,то лечение так выглядит: 1.Обьявляешь класс содержащий статические указатели.И в каждой функции обьявляешь по обьекту этого класса.Соответственно будешь работать с одними и теме же указателями в разных ф-циях. ЗЫ Все это в теории. -------------------- Жизнь - печальная штука. |
|||
|
||||
| BreakPointMAN |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
мдас...
во-первых, это... определись, что тебе нужно-то: ScrollBar или ScrollBox (это два совершенно разных компонента; первый находится на закладке Standard, второй на закладке Additional в палитре компонентов)... а то у тебя упоминания и о том, и о том в твоих постах встречаются... но, судя по коду, речь идет именно о ScrollBox, поэтому исхожу из этого... вот, Zero, смотри... допустим, у тебя есть форма Form1, на которую ты кинул две кнопки Button1 и Button2 (первую для создания, вторую для удаления ScrollBox'а). На этой же форме у тебя есть панель Panel1, где ты хочешь этот самый ScrollBox разместить... если ты создаешь ScrollBox в обработчике нажатия на кнопку Button1 таким же образом, как приведено в посте #3:
то смотри, что получается... указатель SCrollBox у тебя объявляется как локальный. То есть, когда функция-обработчик у тебя доработает до конца, указатель этот будет потерян. Что вполне естественно - область действия и видимости локальных переменных (коей является и указатель) - от начала объявления до конца блока, а блоком в данном случае является тело функции. Так что тебе нужно что-то предпринять, чтобы не потерять адрес объекта типа TScrollBox. Здесь возможны несколько вариантов... Я бы сделал так... В .h-файле, в модуле, где у тебя описан класс формы TForm1 (например, Unit1.h), внести в секцию private , скажем, такое объявление:
Это определит указатель ScrollBox как поле класса твоей формы TForm1. Поскольку поля класса доступны всем его методам (а обработчики нажатий кнопок на форме - это методы класса TForm1), то указатель ScrollBox будет виден и в случае нажатия на кнопку Button1, и в случае нажатия на кнопку Button2. В обработчике Button1Click ты напишешь что-то вроде:
а в обработчике Button2Click что-то вроде этого:
Вот и все... если тебе нужно манипулировать с указателем ScrollBox из функций, которые НЕ являются методами класса формы TForm1, то ты можешь: 1) объявить указатель ScrollBox как глобальный; 2) объявить указатель ScrollBox в секции public твоей формы, а работать с ним через явное указание, какой он форме принадлежит, например:
ну, что-то вроде этого... Это сообщение отредактировал(а) BreakPointMAN - 16.10.2005, 12:16 -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
||||||||||
|
|||||||||||
| Zero |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
Я вкурсе, но как глобальный его неполучается объявить.
Я даже в Открытую секцию занёс, и не помогает...
То что будет виден, то это понятно, но вопрос в том, почему метод Free, ни каких действий не делает??? Вот, я прикрепил сюда архив, посмотри пожалуйста... И что там не так.... Присоединённый файл ( Кол-во скачиваний: 2 )
Test.zip 22,87 Kb |
||||||||||
|
|||||||||||
| BreakPointMAN |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
Ну е-мое!
Итак, разбор полетов... Во-первых, присмотрись повнимательней к имени указателя своего! В одном случае он написан как SCrollBox, в другом случае он написан как ScrollBox. Не забывай, что язык C++ чувствителен к регистру!.. Во-вторых, даже если ты исправишь регистр, то у тебя все равно не будет это работать так, как надо... почему? Потому что, если ты объявил указатель как глобальный или как член класса, НЕ НАДО его еще раз определять в функциях, в которых ты его собираешься использовать. Поскольку таким образом ты определишь ДРУГОЙ указатель, локальный... ты будешь обращаться к нему, а не к глобальному/указателю-члену класса. Область видимости для того указателя кончится в момент объявления локального. Из функции Button1Click убери "TScrollBox *" - и будет тебе счастье!..
===>
PS: а как ты потом к своим CheckBox'ам обращаться будешь? Можно, конечно, массив указателей завести... PPS: кстати, а чем тебя CheckListBox (вкладка Additional) не устроил? Это сообщение отредактировал(а) BreakPointMAN - 16.10.2005, 15:03 -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
||||
|
|||||
| Zero |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
О, точно спасибо!!!
Какие указатели, Ватсон, тут всё намного проще...
Кстати, в том прикреплённом файле, помоему я обращение устанавливал...
|
||||||||||
|
|||||||||||
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
если у тебя обращение осуществляется внутри обработчика (типа OnClick) - то да, проще... Sender есть, на фиг чего еще надо... а как ты поступишь в том случае, если тебе не из какого-либо обработчика надо обратиться, а из своей какой-то функции, например, проверить, Checked ли какой-то CheckBox?.. -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
Дык они у меня все в моём классе сохранены в векторе... При нажатии на Чекбокс, он сразу туда записывается...(всмысле в вектор класса) Это сообщение отредактировал(а) Zero - 18.10.2005, 10:02 |
|||
|
||||
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
ну смотри-смотри... -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |