Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обновление ячеек таблицы, Прорисовка StringGrida вручную 
V
    Опции темы
Volfs
Дата 2.2.2012, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 31.7.2009

Репутация: нет
Всего: нет



Добрый день!

Делаю объединение ячеек StringGrid в ручном режиме, рисую в обработчике DrawCells
Алгоритм объединения работает нормально
Но есть следующая проблема, когда прокручиваю таблицу вниз обновляются (заново прорисовываются) не все ячейки, а только заново появляющиеся, поэтому объединенные ячейки  прорисовываются не правильно.

Как обновить либо все видимые ячейки в соответствие с заложенным в обработчик DrawCells  алгоритмом, либо заданное количество ячеек.

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  stringgrid.jpg 37,97 Kb
PM MAIL WWW   Вверх
Volfs
Дата 3.2.2012, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 31.7.2009

Репутация: нет
Всего: нет



есть еще один вариант, для формирования внешнего вида стринг грида, сначало формировать матрицу с описанием каждой ячейки, а обработчиком событий ДравЦеллс только читать эту матрицу и в соответствие с ней рисовать ячейки
PM MAIL WWW   Вверх
sawfish
Дата 3.2.2012, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



Если прорисовывание выполняется неправильно, значит какое-то условие выполняется (или не выполняется) для этого. Проверьте условия объединения/прорисовки.
PM MAIL   Вверх
Volfs
Дата 3.2.2012, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 31.7.2009

Репутация: нет
Всего: нет



Цитата(sawfish @  3.2.2012,  09:34 Найти цитируемый пост)
Проверьте условия объединения/прорисовки. 


Условия все должны быть верны.
В приложение несколько вкладок, и если перейти на другую вкладку и вернуться обратно то все прорисовывается верно, либо если прокручивать таблицу не по одной строчке, а сразу по несколько (перетаскивая ползунок прокрутки), то все верно.

По этому мне кажется, что заново прорисовываются только ячейки, которые становятся видимыми.
PM MAIL WWW   Вверх
sawfish
Дата 3.2.2012, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



Цитата

Условия все должны быть верны.

С этим никто не спорит.
Вообще, этой функцией все ячейки прорисовываются, но показываются (видны) не все. Но результат-то не тот, который ожидается. Поэтому напрашивается вывод, что какое-то условие там в коде стоит. Больше ниче не могу предположить... Ну или код показывайте.
PM MAIL   Вверх
Volfs
Дата 4.2.2012, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 31.7.2009

Репутация: нет
Всего: нет



Цитата(sawfish @  3.2.2012,  12:52 Найти цитируемый пост)
С этим никто не спорит.


Просмотрел еще раз, написал код по другому, тот же результат.
Есть функция, она прописывает в каждую ячейку фиксированной колонки номера, вот таким образом: 
1
1
1
2
2
2
3
3
3

в соответствие с этими номерами объединяю ячейки, вот код объединения ячеек 7 строки
Код

    if (ACol == 6)
        if (StringGrid->Cells[0][ARow] == StringGrid->Cells[0][ARow -1]) // объединяем порядковые номера
                {
                 if (StringGrid->Cells[0][ARow] == StringGrid->Cells[0][ARow -2])
                            {
                            Rect.top = 24*(ARow + 1 - SoilMoisture->TopRow) + ARow + 13 - SoilMoisture->TopRow;
                            SGCanvas->Brush->Color = clRed;
                            }

                }


Когда начинаю прокрутку таблицы то ячейки то все прорисовывается только нижняя ячейка: http://hostingkartinok.com/show-image.php?...d4dd70af2e993b0

Если вызвать свойство стринг грида Repaint(), то все не прорисованные ячейки рисуются нормально:
http://hostingkartinok.com/show-image.php?...8e4cd1ec4034818
PM MAIL WWW   Вверх
sawfish
Дата 7.2.2012, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



Что такое SoilMoisture?
У вас на тех же строках нет прорисовки с первого скриншота, где есть прорисовка со второго скриншота?
И в каком месте вы Repaint() вызваете? Она же все равно руководствуется тем, что в OnDrawCell записано...
PM MAIL   Вверх
sawfish
Дата 12.2.2012, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



Что-нибудь в итоге получилось?
PM MAIL   Вверх
Volfs
Дата 12.2.2012, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 31.7.2009

Репутация: нет
Всего: нет



sawfish, добавил Repaint() в обработчик OnDrawCell при каждой прокрутке (сдвиге ячеек) это исправило прорисовку ячеек, но до нормального объединения еще еще далеко, допустим при щелчке в ячейку которая находиться под растянутой ячейкой можно поставить курсор...

Решил сделать таблицу из GridPanel.



PM MAIL WWW   Вверх
sawfish
Дата 12.2.2012, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



Даааа, "давно не брал я шашку в руки"...
У меня же на событие OnTopLeftChanged прописан вызов Repaint()  smile 
PM MAIL   Вверх
Volfs
Дата 13.2.2012, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 31.7.2009

Репутация: нет
Всего: нет



Цитата(sawfish @  12.2.2012,  18:40 Найти цитируемый пост)
У меня же на событие OnTopLeftChanged прописан вызов Repaint() 


Бывает  smile  хе, я ведь я целился в этот смаил  smile сильно я промазал)))))

СтрингГрид то рисуется исходя из логики обработчика в дравцел, но при прокрутке перерисовывается не весь, а только новые ячейки, а старые просто сдвигаются вверх.

Это сообщение отредактировал(а) Volfs - 13.2.2012, 20:07
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0901 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.