使用自定义图像网格

时间:2012-03-27 03:28:53

标签: image delphi grid delphi-xe2

我一直在寻找一个自定义图片网格,并发现a similar question在答案中有一个非常甜蜜的组件。

我下载了代码,经过一些小小的尝试,我设法让它在DXE2中编译。它看起来很酷,但我无法显示任何滚动条。我也无法弄清楚如何动态控制显示的图像。或者如何根据键盘事件更新网格。

另外,要使其编译,我必须删除GR32引用;我下载的库与DXE2有太多的不兼容性,我无法解决。

非常感谢任何帮助。这真的看起来像一个杀手组件。

Bill更新:

以下是不正确的缩略图绘制的屏幕截图。我无法将缩略图看作component in question的屏幕截图。

Thumbnail Painting of ImageGrid

如果缩略图被涂在与第一遍中绘制的相同的XY处,那么它们看起来会更好。对于发生了什么有任何想法?

1 个答案:

答案 0 :(得分:1)

  

...但我无法显示任何滚动条。

嗯,没有水平滚动条。有一个属性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属性。

  

...或者如何根据键盘事件更新网格。 ...

目前实施的唯一按键是Up,Down,PageUp,PageDown,Home和End,它们都滚动控件。您还希望采取哪些关键行动?这是一个观众。

  

以下是不正确的缩略图绘制的屏幕截图。我不能让缩略图看起来像有问题的组件的截图。 ...如果缩略图被绘制在与第一遍中绘制的相同的XY处,那么它们看起来会更好。

在加载图像时,会绘制一个大小为ColWidth * RowHeight的临时矩形。所有图像都在该尺寸范围内拉伸,因此请调整这些属性的比例,以使间距相等。请注意,您还可以使用ImageHorzAlignImageVertAlign属性来影响外观。

更新

您引用的组件最近已完全重写,上面的一些答案已过时。

现在它的Propertional属性默认为True,但设置为False时,它会将拇指拉伸到您设置的任何单元格大小,与原始图像无关大小。除非您将新的Stretch属性设置为True,否则小图片可能会保持较窄。

现在区分RowHeightCellHeight,以及ColWidthCellWidth。两者之间的差异是CellSpacing

组件不再从TScrollingWinControl下降,而是从TCustomControl下降,只添加垂直滚动条。

相关问题