| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Как закрасить определенные ячейки StringGrid |
| Автор: BuShaRt 11.5.2010, 20:55 |
| Есть задача закрасить или хотя бы просто выделить жирным шрифтом определенные ячейки StringGrid. В сети я нашел множество невероятных способов на основе работы с событием ondrawcell, но не смог найти информации, как это можно организовать просто функцией, чтоб в итоге от меня требовалось только написать. Функция_Закрашивания_Ячейки (координата_строки, координата_колонки, цвет); |
| Автор: bems 12.5.2010, 03:49 |
| Используй ondrawcell. В чем невероятность способа? |
| Автор: ~FoX~ 12.5.2010, 08:51 | ||||
Выносить это за рамки DrawCell нету ни какого смысла
Но если очень хочится:
|
| Автор: BuShaRt 12.5.2010, 11:19 |
| Сразу уточню, что я могу ошибаться в своих суждениях, поэтому если мои аргументы будут не верными, убедительная просьба исправить меня. Я считаю, что все задачи должны выполняться четко, без лишних телодвижений. Конечно, есть вариант, что я плохо понимаю как работает ondrawcell, но меня терзают сомнения, что лишнего она делает порядочно много. ~FoX~ Оба варианта решены возможности гибкого динамического закрашивания n-ого кол-ва ячеек, в то время как обычную процедуру можно будет запустить из любого участка кода в цикле или с условиями. |
| Автор: BuShaRt 12.5.2010, 15:04 | ||
Вот, что у меня получилось сделать самому, но есть проблема - canvas ложиться только поверх краев (0,n) и (n,0) иначе он заходит под белые ячейки и его не видно. Как это можно исправить?
|
| Автор: BuShaRt 12.5.2010, 16:28 |
| Хм, что интересно - моя функция срабатывает коряво если ее запускать при событие DblClick, но если ее использовать через ondrawcell, то результат именно такой, какой нужен. Может кто-нибудь объяснить почему так. |
| Автор: bems 13.5.2010, 00:50 | ||
Потому что событие возникает, когда ячейка нуждается в перерисовке. А рисование по даблклику одноразовое - раз нарисовал, при соледующей же порче картинки (перекрытие другим окном, изменение размеров и тд) эта информация теряется. Твоя проблема в том, что ты не понимаешь, что грид не хранит картинку (окей, с DoubleBuffered картинка хранится, но буфер тебе недоступен). Нельзя просто "закрасить ячейку". Можно нарисовать её закрашенной, когда грид сообщает, что ему нужна нормальная нарисованная ячейка. |
| Автор: BuShaRt 13.5.2010, 21:57 |
Я все понял. Просто почему-то авторы популярных статей на эту тему, решили, что программистам не обязательно знать, почему именно ondrawcell. От сюда и пошло мое невежество. Добавлено через 2 минуты и 24 секунды А по поводу динамичности, я решил, что в таком случае надо просто завести глобальный массив и вписывать туда координаты необходимых точек, в итоге на базе этого массива циклом по ondrawcell красить ячейки. |