Сетка с плавной прокруткой

Мне нужна сетка строк, которая может плавно прокручиваться, а не блокироваться в верхнем ряду/левом столбце. Когда вы прокручиваете TStringGrid, левый видимый столбец и верхняя видимая строка фиксируются вдоль верхнего/левого края. Мне нужна возможность для пользователя плавно прокручивать, не фиксируя эти края на месте.

Я бы не подумал, что это возможно изменить в VCL TStringGrid (или TCustomGrid в этом отношении), потому что он зависит от таких свойств, как TopRow, LeftCol, VisibleRowCount и т. д. Я почти уверен, что мне понадобится сторонний элемент управления , но я хотел бы использовать TStringGrid, если это возможно, потому что у меня уже есть много кода, обернутого вокруг него. Если мне понадобится сторонняя сетка, я надеюсь, что она работает достаточно точно, как TStringGrid.


person Jerry Dodge    schedule 17.08.2012    source источник
comment
Я понятия не имею, что вы просите здесь. Вы говорите о гориз. или вертикальная прокрутка? Что означает фиксация в нужном положении или фиксация этих краев на месте? Я широко использовал TStringGrid и понятия не имею, против какого поведения вы возражаете или что вы пытаетесь здесь спросить.   -  person Ken White    schedule 17.08.2012
comment
При прокрутке по вертикали или горизонтали она перемещается по одному столбцу/строке за раз.   -  person Jerry Dodge    schedule 17.08.2012
comment
Но именно так работают сетки, например те, что используются в Excel. Частичная строка данных в сетке бесполезна. Если вы не хотите такого поведения, вы используете неправильный элемент управления.   -  person Ken White    schedule 17.08.2012
comment
Сетка FMX имеет «анимированное» свойство, которое соответствует тому, что вы, кажется, ищете... однако это не VCL...   -  person az01    schedule 17.08.2012
comment
@KenWhite Это зависит от того, как вы собираетесь его использовать. Конечно, если он просто показывает текст, то первая строка бесполезна. Но как насчет столбца, ширина которого составляет 3/4 ширины элемента управления? Когда я прокручиваю, он прыгает ячейка за ячейкой, а не пиксель за пикселем, и широкая ячейка вызовет большой скачок.   -  person Jerry Dodge    schedule 17.08.2012


Ответы (2)


Короткий ответ: нет, вы не можете прокручивать TStringGrid по пикселям. Вы можете моделировать сетку, используя TScrollBox. Вы можете поместить сетку внутри TScrollBox, сделать сетку достаточно большой, чтобы вместить все строки и столбцы, и отключить ее полосы прокрутки, но некоторые вещи, такие как навигация с помощью клавиатуры, не будут работать.

Другой альтернативой является использование TVirtualTree в режиме сетки или TListView. У обоих есть эта пиксельная прокрутка, которую вы хотите.

person user1605688    schedule 17.08.2012
comment
Поместив сетку строк в поле прокрутки, вам потребуется 3 сетки строк; один для заголовков строк, один для заголовков столбцов и один для области данных. - person NGLN; 17.08.2012
comment
Почему бы не использовать и не изучить профессиональную сетку, такую ​​как devexpress devexpress.com/Products/VCL/ExQuantumGrid. - person Roland Bengtsson; 17.08.2012
comment
Я попробую TVirtualTree, но TListView слишком тяжелый (я не упоминал, что перешел с TListView на TStringGrid из-за производительности на сотнях тысяч предметов). ExQuantumGrid тоже выглядит обнадеживающим, достойным другого ответа. - person Jerry Dodge; 17.08.2012
comment
Если производительность является проблемой, и в свете вашего первоначального вопроса действительно стоит попробовать научиться использовать TVirtualTree. Это шанс в парадигме, но как только вы его получите, он окупится с лихвой. - person Argalatyr; 17.08.2012

Я искал нечто подобное. К сожалению, вы не можете сделать это с помощью кода Borland, но Lazarus может это сделать Прокрутка пикселя TStringGrid по пикселям
Вы можете заглянуть в их код.

person Z80    schedule 12.02.2013