我正在尝试找到一个专门用于显示图像的网格.它也需要具有良好的性能,并且最好具有某种缩略图缓存.图像需要从文件加载,如果图像也可以动态分配,那将是很好的.它不应该在标准网格的列/行记录列表上工作,而是单个项目列表,每个项目代表一个图像.应该有一个属性可以同时为所有列和行定义列宽和行高,而不是一次定义一个.最终目标是列出具有用户选项的所有图像,以控制显示图像的大小.它将用作产品展示,因此需要某种自定义绘图功能,如OnDrawItem事件.这可能会在此列表中显示多达50,000个图像,因此TListView无法正常工作,因为它非常重要.
它需要使用Delphi 2010,XE2,最好是7.
以下是如何在下面显示8张图像的3个示例.我并不是说每个图像的大小不同,但大小完全相同.没有2列可以具有不同的宽度,并且与行相同.

我在Delphi中制作看起来像Paint的东西.我找到了如何制作缩放功能:
procedure SetCanvasZoomFactor(Canvas: TCanvas; AZoomFactor: Integer);
var
i: Integer;
begin
if AZoomFactor = 100 then
SetMapMode(Canvas.Handle, MM_TEXT)
else
begin
SetMapMode(Canvas.Handle, MM_ISOTROPIC);
SetWindowExtEx(Canvas.Handle, AZoomFactor, AZoomFactor, nil);
SetViewportExtEx(Canvas.Handle, 100, 100, nil);
end;
end;
procedure TMainForm.btnZoomPlusClick(Sender: TObject);
var
bitmap: TBitmap;
begin
bitmap := TBitmap.Create;
if(zoomVal < 1000) then
zoomVal:=zoomVal+zoomConst; //zoomVal = 100 by default; zoomConst = 150;
try
bitmap.Assign(MainForm.imgMain.Picture.Bitmap);
SetCanvasZoomFactor(bitmap.Canvas, zoomVal);
Canvas.Draw(MainForm.imgMain.Left,MainForm.imgMain.Top, bitmap);
finally
bitmap.Free
end;
end;
Run Code Online (Sandbox Code Playgroud)
但是,问题是 - 它仅缩放图像的左上区域.
缩放前的示例:
放大后:

我希望能够在缩放后移动所有图片区域.我该怎么做?
我正在尝试在TChromeTabs中实现标签的流畅运动.我可以在这里看到缓动公式,但我不是数学家,也不知道如何将其转换为代码.到目前为止,我的尝试让我无处可去.
是否有可用的Easing功能的Delphi实现?
我创建了一个自定义滚动框派生自TScrollbox,它的工作方式相同,只是当它在滚动条的客户区域中拖动时会滚动.
我现在的问题是,当我的CustomScrollbox中的按钮或面板上有鼠标时,我无法拖动滚动.
MouseDown,MouseUp,MouseMove覆盖不会触发,因为它会悬停在不同的控件中.
当我开始拖动时,如何跟踪MouseDown,MouseUp,MouseMove并阻止按钮/面板事件触发(在我的CustomScrollbox内)?
这是我平滑的CustomScrollbox的视频