Скроллирование в StringGrid

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Скроллирование в StringGrid

Сообщение Climber » 05.12.2008 15:28:23

У меня есть StringGrid, в котором, в свою очередь, есть следующая проблема.
Я в ячейки сетки встраиваю всякие чекбоксики и комбобоксики, а еще хочу, чтобы выглядели они красиво. У меня получается почти все, кроме одного. Когда в сетке столбцов столько, что все они не помещаются на экран, внизу появляется полоса прокрутки. Когда я мышью двигаю эту полосу, я не могу отловить никаких событий, связанных с изменениями координат ячеек. Единственное, что мне доступно - это OnTopLeftChanged, но оно происходит, только когда какая-либо ячейка прячется за левый край сетки (или появляется из-за него). А если ячейка сдвигается на половину своей ширины и полностью за границы экрана не уходит, мои внедренные компоненты стоят на своих местах и не двигаются. Может, кто-то знает, как можно более плавно отлавливать движения полосы прокрутки?
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Re: Скроллирование в StringGrid

Сообщение Maxizar » 21.03.2010 19:20:16

У меня была такая же проблема я вышел из ситуации таки вот образом ввел функцию VisibleComponentGrid(False);//функция принимает параметр, который и присваивает всем компоненатм помещенным над таблицей.
те VisibleComponentGrid(False); скрывает все.
Задачка: при отлове перемещения смены фокуса, прокрутки все ок работает. но багу поймал на том что при прокрутке (нажатием на кнопочки) все Ок. а вот при скролинге батоном увы все сьехало как у вас.. и отлов типа:
Код: Выделить всё
procedure StringGrid1TopLeftChanged(Sender: TObject);
begin
  //Произошла прокрутка в таблице
VisibleComponentGrid(False);//убираем все остальное для красоты
end;

НЕ ПОМОГЛА именно когда скролим батоном а не кнопками (вправо влево).
Вышел из ситуации так:
Код: Выделить всё
procedure StringGrid1DrawCell(Sender: TObject; aCol,
  aRow: Integer; aRect: TRect; aState: TGridDrawState);
var Pen:TPen;
begin
Нужна отрисовка, а что нам мешает ее и использовать :)
VisibleComponentGrid(False);//убираем все остальное для красоты
   //применяем наш цвет к ячейке :) 
   //рисуем все что душе угодно
end;
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

Re: Скроллирование в StringGrid

Сообщение Brainenjii » 22.03.2010 08:14:29

Можно ещё выставить в Options SmoothScrolling (или как-то так) в FALSE. Правда не уверен, что она для горизонтальной прокрутки сработает
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Скроллирование в StringGrid

Сообщение Climber » 22.03.2010 10:17:09

Cпасибо конечно за ответы, но я разобрался с этим еще тогда, в августе 2008-го :wink:
В том конкретном случае помогла обработка OnDrawCell. Еще DoubleBuffered хорошее свойство, установка его равным true помогает всякие мерцания победить.
Climber
постоялец
 
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 22

Рейтинг@Mail.ru