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

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

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

Ответить
Climber
постоялец
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

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

Сообщение Climber »

У меня есть StringGrid, в котором, в свою очередь, есть следующая проблема.
Я в ячейки сетки встраиваю всякие чекбоксики и комбобоксики, а еще хочу, чтобы выглядели они красиво. У меня получается почти все, кроме одного. Когда в сетке столбцов столько, что все они не помещаются на экран, внизу появляется полоса прокрутки. Когда я мышью двигаю эту полосу, я не могу отловить никаких событий, связанных с изменениями координат ячеек. Единственное, что мне доступно - это OnTopLeftChanged, но оно происходит, только когда какая-либо ячейка прячется за левый край сетки (или появляется из-за него). А если ячейка сдвигается на половину своей ширины и полностью за границы экрана не уходит, мои внедренные компоненты стоят на своих местах и не двигаются. Может, кто-то знает, как можно более плавно отлавливать движения полосы прокрутки?
Maxizar
постоялец
Сообщения: 385
Зарегистрирован: 20.03.2010 18:48:14

Сообщение Maxizar »

У меня была такая же проблема я вышел из ситуации таки вот образом ввел функцию 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;
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение Brainenjii »

Можно ещё выставить в Options SmoothScrolling (или как-то так) в FALSE. Правда не уверен, что она для горизонтальной прокрутки сработает
Climber
постоялец
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Сообщение Climber »

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