У меня есть StringGrid, в котором, в свою очередь, есть следующая проблема.
Я в ячейки сетки встраиваю всякие чекбоксики и комбобоксики, а еще хочу, чтобы выглядели они красиво. У меня получается почти все, кроме одного. Когда в сетке столбцов столько, что все они не помещаются на экран, внизу появляется полоса прокрутки. Когда я мышью двигаю эту полосу, я не могу отловить никаких событий, связанных с изменениями координат ячеек. Единственное, что мне доступно - это OnTopLeftChanged, но оно происходит, только когда какая-либо ячейка прячется за левый край сетки (или появляется из-за него). А если ячейка сдвигается на половину своей ширины и полностью за границы экрана не уходит, мои внедренные компоненты стоят на своих местах и не двигаются. Может, кто-то знает, как можно более плавно отлавливать движения полосы прокрутки?
Скроллирование в StringGrid
Модератор: Модераторы
У меня была такая же проблема я вышел из ситуации таки вот образом ввел функцию VisibleComponentGrid(False);//функция принимает параметр, который и присваивает всем компоненатм помещенным над таблицей.
те 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
Можно ещё выставить в Options SmoothScrolling (или как-то так) в FALSE. Правда не уверен, что она для горизонтальной прокрутки сработает
Cпасибо конечно за ответы, но я разобрался с этим еще тогда, в августе 2008-го
В том конкретном случае помогла обработка OnDrawCell. Еще DoubleBuffered хорошее свойство, установка его равным true помогает всякие мерцания победить.
В том конкретном случае помогла обработка OnDrawCell. Еще DoubleBuffered хорошее свойство, установка его равным true помогает всякие мерцания победить.
