Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C++ Builder > Обновление ячеек таблицы |
Автор: Volfs 2.2.2012, 19:00 |
Добрый день! Делаю объединение ячеек StringGrid в ручном режиме, рисую в обработчике DrawCells Алгоритм объединения работает нормально Но есть следующая проблема, когда прокручиваю таблицу вниз обновляются (заново прорисовываются) не все ячейки, а только заново появляющиеся, поэтому объединенные ячейки прорисовываются не правильно. Как обновить либо все видимые ячейки в соответствие с заложенным в обработчик DrawCells алгоритмом, либо заданное количество ячеек. |
Автор: Volfs 3.2.2012, 07:22 |
есть еще один вариант, для формирования внешнего вида стринг грида, сначало формировать матрицу с описанием каждой ячейки, а обработчиком событий ДравЦеллс только читать эту матрицу и в соответствие с ней рисовать ячейки |
Автор: sawfish 3.2.2012, 09:34 |
Если прорисовывание выполняется неправильно, значит какое-то условие выполняется (или не выполняется) для этого. Проверьте условия объединения/прорисовки. |
Автор: Volfs 3.2.2012, 10:25 |
Условия все должны быть верны. В приложение несколько вкладок, и если перейти на другую вкладку и вернуться обратно то все прорисовывается верно, либо если прокручивать таблицу не по одной строчке, а сразу по несколько (перетаскивая ползунок прокрутки), то все верно. По этому мне кажется, что заново прорисовываются только ячейки, которые становятся видимыми. |
Автор: sawfish 3.2.2012, 12:52 | ||
С этим никто не спорит. Вообще, этой функцией все ячейки прорисовываются, но показываются (видны) не все. Но результат-то не тот, который ожидается. Поэтому напрашивается вывод, что какое-то условие там в коде стоит. Больше ниче не могу предположить... Ну или код показывайте. |
Автор: Volfs 4.2.2012, 13:59 | ||
Просмотрел еще раз, написал код по другому, тот же результат. Есть функция, она прописывает в каждую ячейку фиксированной колонки номера, вот таким образом: 1 1 1 2 2 2 3 3 3 в соответствие с этими номерами объединяю ячейки, вот код объединения ячеек 7 строки
Когда начинаю прокрутку таблицы то ячейки то все прорисовывается только нижняя ячейка: http://hostingkartinok.com/show-image.php?id=d4d4ebbd465dbe9a8d4dd70af2e993b0 Если вызвать свойство стринг грида Repaint(), то все не прорисованные ячейки рисуются нормально: http://hostingkartinok.com/show-image.php?id=5cb572be5863826ee8e4cd1ec4034818 |
Автор: sawfish 7.2.2012, 14:18 |
Что такое SoilMoisture? У вас на тех же строках нет прорисовки с первого скриншота, где есть прорисовка со второго скриншота? И в каком месте вы Repaint() вызваете? Она же все равно руководствуется тем, что в OnDrawCell записано... |
Автор: sawfish 12.2.2012, 16:19 |
Что-нибудь в итоге получилось? |
Автор: Volfs 12.2.2012, 18:23 |
sawfish, добавил Repaint() в обработчик OnDrawCell при каждой прокрутке (сдвиге ячеек) это исправило прорисовку ячеек, но до нормального объединения еще еще далеко, допустим при щелчке в ячейку которая находиться под растянутой ячейкой можно поставить курсор... Решил сделать таблицу из GridPanel. |
Автор: sawfish 12.2.2012, 18:40 |
Даааа, "давно не брал я шашку в руки"... У меня же на событие OnTopLeftChanged прописан вызов Repaint() ![]() |
Автор: Volfs 13.2.2012, 10:16 |
Бывает ![]() ![]() СтрингГрид то рисуется исходя из логики обработчика в дравцел, но при прокрутке перерисовывается не весь, а только новые ячейки, а старые просто сдвигаются вверх. |