... но я не могу показать ни одну полосу прокрутки.
Ну, горизонтальной полосы прокрутки нет. Существует свойство ColWidth
, которое управляет количеством изображений, рисуемых в одном ряду, в зависимости от ширины элемента управления. Вы можете обновить ColWidth
в обработчике событий OnResize
из-за настроек привязки, например.
Вертикальная полоса прокрутки появляется автоматически, когда не все изображения (включая интервал) помещаются в клиенте. Изображения нарисованы на TPaintBox
, а размер этой коробки для рисования обновляется, как только меняется число изображений:
procedure TImageGrid.RearrangeImages;
begin
...
FPainter.Height := Max(ClientHeight,
FRowCount * (FRowHeight + FImageSpacing) - FImageSpacing);
Компонент наследуется от TScrollingWinControl
, поэтому полоса прокрутки должна соответственно измениться. Если нет, то Билл найдет обходной путь, который прокомментирован:
VertScrollBar.Range := FRowCount * (FRowHeight + FImageSpacing) - FImageSpacing;
Я понимаю, что это, очевидно, также работает, но мне действительно интересно, почему диапазон полосы прокрутки должен быть изменен вручную. Здесь, в D7, у меня нет проблем со скрытой вертикальной полосой прокрутки.
... Я также не могу понять, как динамически управлять отображаемыми изображениями. ...
Самый простой способ заполнить компонент - присвоить свойству Folder
путь с изображениями. Будут загружены только изображения с форматами файлов в свойстве FileFormats
. Чтобы указать изображения вручную (например, для объединения нескольких папок), используйте свойство FileNames
. Когда установлено свойство Folder
, свойство FileNames
соответствующим образом обновляется, но эти имена файлов не сохраняются в DFM. Когда вы изменяете имена файлов (например, удаляете одно из папки), свойство Folder
очищается, а компонент использует вместо него свойство FileNames
.
... Или как обновить сетку на основе событий клавиатуры. ...
В настоящее время реализованы только нажатия клавиш «Вверх», «Вниз», «PageUp», «PageDown», «Home» и «End», которые прокручивают элемент управления. Какие еще ключевые действия вы хотите? Это зритель.
Вот скриншот неправильной картинки. Я не могу заставить миниатюры выглядеть как скриншот из рассматриваемого компонента. ... Если миниатюры были нарисованы в том же XY, что и каноны, нарисованные в первом проходе, они выглядели бы намного лучше.
При загрузке изображений рисуется временный прямоугольник размером ColWidth
* RowHeight
. Все изображения растягиваются в пределах этого размера, поэтому отрегулируйте соотношение этих свойств, чтобы расстояние было одинаковым везде. Обратите внимание, что вы также можете влиять на внешний вид с помощью свойств ImageHorzAlign
и ImageVertAlign
.
Обновление:
Компонент, на который вы ссылаетесь, был недавно полностью переписан, а некоторые из приведенных выше ответов устарели.
Теперь у него есть свойство Propertional
, которое по умолчанию равно True
, но когда установлено False
, оно будет растягивать большие пальцы до любого размера ячейки, который вы установили, независимо от размеров исходного изображения. Маленькие изображения могут оставаться узкими, если только вы не установите новое свойство Stretch
в True
.
Теперь он различает RowHeight
и CellHeight
и ColWidth
и CellWidth
. Разница между ними составляет CellSpacing
.
Компонент больше не спускается с TScrollingWinControl
, а с TCustomControl
и добавляется только вертикальная полоса прокрутки.