![]() |
|
![]() ![]() ![]() |
|
ColdDeath |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 3.8.2009 Репутация: нет Всего: нет |
Подскажите, пожалуйста, чем пользоваться если мне надо реализовать следующее:
Список из N строк, каждая из которых состоит из двух столбцов и кнопки TButton. Столбцы то нет проблемы сделать, а вот как привязать к списку кнопки. То есть: 1. Поле Поле Кнопка 2. Поле Поле Кнопка 3. Поле Поле Кнопка . . . N. Поле Поле Кнопка Логически сразу представляется 2 варианта: 1. Создавать динамически кнопку отдельно в зависимости от количества строк в компоненте списка (StringGrid, ListBox,...). (Но тут возникает проблема: что делать, если кнопки начнут вылезать за край формы? У списка то появится панель прокрутки, а у кнопок - нет). ИЛИ 2. Как-то инегрировать кнопку в компонент списка. |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Вопрос не в ту ветку.
Какой компилятор? Если Билдер - я такое делал в TStringGrid |
|||
|
||||
ColdDeath |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 3.8.2009 Репутация: нет Всего: нет |
Он самый. Ой... а расскажите плиз.... просто оч хочу такое реализовать. Заранее, огроменное спасибо ;) а по какому варианту делали - 1-ому или 2-ому?
![]() |
|||
|
||||
Anikmar |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Вообще-то я реализовывал несколько другую задачу - т.е. у меня был обычный грид, но при щелчке на ячейке в ней рядом с текстом появлялась кнопочка, нажав которую я получал нужное мне действие.
Пример привести несколько затрудняюсь - я делал навеску на грид, которая позволяла сохранять пропорции в ширинах столбцов при изменении формы, сортировать при щелчке на заголовке, некоторые столбцы оставляла фиксированными, а в некоторых позволяла осуществлять вышеуказанный выбор по кнопке. Все это в связке нескольких классов, я просто не уверен, что моими наработками можно легко воспользоваться - я же для себя это делал - нет ни документации ни инструкции - одни коментарии в кратце - при двойном щелчке отображал кнопку
В виду того, что кнопка мне была нужна только при щелчке на ячейке ее создавал в методе инициализации своего класса - когда ему передавал грид
В общем примерно так действовал. Рабочий код вам передать не представляется возможным - он тянет разные функции из моего проекта, так что замучаетесь разбираться и компилировать Для того, чтобы все нормально отображалосьт мне пришлось перехватить практически все события грида. |
||||
|
|||||
ColdDeath |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 3.8.2009 Репутация: нет Всего: нет |
оо ужос...как тяжело разобрацо O_o
а что такое OnExitSelectButton; SelectButtonClick; SelectButton->OnExit = OnExitSelectButton; SelectButton->OnClick = SelectButtonClick; и pvGrid? |
|||
|
||||
ColdDeath |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 3.8.2009 Репутация: нет Всего: нет |
В общем, я попробовал так сделать:
Но трабла та, что кнопки статичные, то есть никак не привязаны к списку. То есть - то же самое, что взять и руками их поставить, на скруллбар не реагируют. |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
Так вот я и предупреждал... OnExitSelectButton; - Это вызов моего обработчика события OnClick SelectButtonClick; - Это имя ообработчика OnClick для моей кнопочки SelectButton->OnExit = OnExitSelectButton; - Это я установил для кнопки свой обработчик выхода. Он нужен для того, чтобы кнопка сразу исчезла из виду как только покинули ячейку SelectButton->OnClick = SelectButtonClick; - Это я установил свой обработчик для кнопки и pvGrid? - Это собственно Грид, с которым я работаю. Все дело в том, что мне не понравилось писать собственные компоненты. Потому? что я работаю на разных машинах - дома две, на работе - тоже две, еще ноутбук, машина на даче, машина у родителей дома... Таскать проект на флешке - ноль вопросов, но если в одном из мест работы создал свой компонент его надо инсталировать везде, а потом куча проблем возникает, если его доработать надо и т.п. Поэтому я подошел к вопросу доработки нужных мне компонентов написанием своего оберточного класса, который является обычным классом С++ и его не надо инсталировать в среду - а можно таскать с собой как файл проекта. Поэтому я и боялся - что просто так пример выложить будет сложно. Суть моего подхода была следующая: Создал свой отдельный класс работы с гридом. параллельно мне понадобились служебные классы - колонки, списки объектов и т.п. Но суть остатется прежней: при некоторых событиях для ячейки грида я там рисую кнопку. События, которые я перехватывал - это вход в ячейку, нажатие клавиши на клавиатуре, покидание ячейки. Кнопку я создавал одну - так как при нажатии на нее я мог спокойно определить текущую ячейку грида. Да и на экране это смотрелось лучше - куча кнопок в столбец выглядело некрасиво, а вот при клике на ячейке появлялась моя кнопка. Обработчики я устанавливал динамически - так как мой грид я применял в куче форм, мне нужно было чтобы ширина колонок автоматически выравнивалась и т.п. В общем лучше подходить последовательно - Код, который показывал бы кнопку именно в текущей ячейке я привел. Если хотите кнопки в столбец появляется сложность: при изменении высоты сетки нужно динамически менять кол-во кнопок. Привязывать кнопку к каждой строке грида выглядит расточительно - на экране не больше 40 строк, а в таблице их могут быть сотни и тысячи - незачем создавать кнопку для каждой строки... Я выбрал вариант - клик на ячейке - появилась кнопка. |
|||
|
||||
ColdDeath |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 3.8.2009 Репутация: нет Всего: нет |
хм... а дело говорите
![]() ![]() |
|||
|
||||
ColdDeath |
|
||||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 3.8.2009 Репутация: нет Всего: нет |
Ладно. решил тоже по одной кнопке создавать. Но не могу понять как делать так, чтобы при нажатии в другую ячейку - кнопка из предыдущей ячейки стиралась.
А отлавливаете ячейку здесь, да?
Подскажите как удалять уже созданную кнопку при щелчке на другую ячейку, пожалуйста. Если кнопки создавать как TBitBtn* SelectButton = new TBitBtn(Grid->Parent); я пробовал сделать так: UsersList - это StringGrid
Но не работает всеравно удаление предыдущей созданой кнопки. Видимо удаляется только казатель на неё, а сама кнопка не убирается. В общем я запутался. Это сообщение отредактировал(а) ColdDeath - 7.11.2009, 11:18 |
||||
|
|||||
ColdDeath |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 3.8.2009 Репутация: нет Всего: нет |
Со стиранием я разобрался.. SelectButtom->Free();
Но почему же кнопка так и не понимает что для неё Parent - StringGrid. Или это не реально сделать? А то прокручиваю список, а кнопка так и не двигается... |
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 34 Всего: 59 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |