【发布时间】:2013-10-19 17:50:11
【问题描述】:
我在 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;
但是,问题是 - 它只缩放图像的左上角区域。
示例 缩放前: 缩放后:
我希望能够在所有图片区域中移动,即使在缩放之后也是如此。我该怎么做?
【问题讨论】:
-
这里是
animated zoom selector,这里是如何制作animated panning。 -
@TLama 神圣的德尔福,没有我想象的那么容易!好吧,如果没有其他方法可以进行这样的缩放,我将使用这样的解决方案
-
不必那么复杂。那里使用了流畅的动画。使用这样的控件看起来和感觉都很好,但是如果您不需要动画,请等待更简单的解决方案 ;-)
-
@TLama 好吧,是的,实际上我不需要流畅的动画或类似的东西。至少现在。但是感谢您的链接!
标签: delphi canvas delphi-7 zooming mousemove