| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > StringGrid |
| Автор: nworm 14.4.2009, 20:46 |
| Что-то у меня никак не получается, сделать чтобы у StringGrid одновременно было две опции (Options): 1. goEditing 2. goRowSelect У меня получается, что если поставить goRowSelect=true, то ячейки больше не редактируются. |
| Автор: artsb 14.4.2009, 21:43 | ||
| goEditing оставьте, а строку руками закрашивайте. Добавлено через 8 минут и 35 секунд Вот пример:
Если у вас есть фиксированные строки/столбцы и они должны быть закрашены определённым цветом - делаете соответствующую проверку и закрашиваете их нужным цветом, либо вообще не закрашиваете. |
| Автор: nworm 14.4.2009, 22:43 |
| Да, спасибо, проходит. Только много строк так не выбрать. |
| Автор: Anikmar 15.4.2009, 08:34 |
ИМХО. Стандартный мультистрочный выбор с помощью Shift и Ctrl не удобен на больших списках. Утомительно. Лучше добавить колонку с CheckBox и отмечать строки при помощи галочек. Нагляднее, на мой взгляд. Естественно добавить 3 кнопки (или контекстным меню) - отметить все, убрать все, инверсировать выбор. |
| Автор: artsb 15.4.2009, 11:16 |
Тогда придётся изобретать велосипед... Попробуйте как Anikmar советует. Правда, с другой стороны, создавать сотню CheckBox'ов и не забыть потом их все удалить, тоже не очень весело. Да и как быть с индексами... Я делал так: Нарисовал две картинки наподобие CheckBox'а (только красивее). Нулевой столбец в StringGrid'e выделил под эти CheckBox'ы и хранил в его строках либо "1", либо "0" (в зависимости от состояния) и в зависимости от состояния рисовал ту или иную картинку. При клике по ячейке в нулевом столбце - изменял её значение. Ещё надо DefaultDrawing = false. Но теперь надо будет всё рисовать руками. Зато, в этом случае, в ячейках можно делать многострочный текст. |
| Автор: nworm 15.4.2009, 15:15 |
| Столбец с чекбоксами у меня сейчас есть (я переписал код из drkb на C++, всё нормально исчезает/появляется при изменении числа строк таблицы). Там только нет мультистрочного выбора с помощью Shift и Ctrl (типа MultiSelect в ListBox-e). Всё-таки с этим MultiSelect-ом удобнее (по сравнению с чекбоксами) выделять большие куски. Но, с другой стороны, если MultiSelect-ную опцию делать в StringGrid-е, то при любом редактировании ячейки все выбранные строки сбиваются. Вот интересно, можно ли как-нибудь комбинировать и мультиселект и редактирование? |
| Автор: artsb 15.4.2009, 18:13 | ||
Опять таки, goEditing оставьте, а выбранные строки строки закрашивайте руками. Например, можно создать ещё один столбец в самом конце (это якобы CheckBox'ы) и в OnCreate формы установить столбцу нулевую ширину и заполнить его нулями (т.е. отмеченных строк нет). Далее придумываете сочетание мышь+клавиатура при котором нужно отметить строку и в обработчике StringGrid'а OnMouseDown (ну или Up) делаете проверку и устанавливаете значение соответствующей строки в "1". Также придётся немного подправить функцию DrawCell: реализовать закраску выбранных строк определённым цветом. ЗЫ извиняюсь, что нет кода, а только логика, просто уже лень писать, тестировать и т.д. |
| Автор: nworm 15.4.2009, 20:18 |
| Вроде всё прояснилось. Теперь надо будет выбрать какой-нибудь вариант и реализовать. |
| Автор: artsb 15.4.2009, 23:24 |
| Маленький совет: не пробуйте реализовать выбранный вариант в основном проекте. Сделайте отдельный и там тестируйте. Просто может получиться так, что в основном проекте всплывут ошибки никак не связанные с решаемой в данный момент задачей, а вы будете ломать голову, почему не работает. Ну и собственно, удачи! |