绘画32:带鼠标拖盘的锅,用鼠标轮缩放到鼠标光标

问题描述 投票:0回答:1
,并看到了其内置的滚动条,

.Scale

允许其中一些。至少要走得那么远是非常容易的。

Graphics32是这种事情的好工具吗?还有我可能会研究的其他(也许更简单)的工具吗?

任何人都有任何有关如何实施上述的指针或示例代码?

  • Graphics32提供了一个名为Timgview32的组件,该组件可以通过设置比例属性来缩小。这样做的适当方法是使用onMouseWheelup和-down事件。将TabStop设置为true以触发这些事件并将其设置为false。但是以这种方式缩放不符合您将鼠标光标放大操作集中的愿望。因此,重新定位和调整大小是一个更好的解决方案。此外,据我了解,图像始终在组件的左上角对齐,因此也必须通过重新定位组件来完成平移。 uses Windows, Classes, Controls, Forms, GR32_Image, GR32_Layers, Jpeg; type TForm1 = class(TForm) ImgView: TImgView32; procedure FormCreate(Sender: TObject); procedure ImgViewMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); procedure ImgViewMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer; Layer: TCustomLayer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private FDragging: Boolean; FFrom: TPoint; end; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin ImgView.Bitmap.LoadFromFile('D:\Pictures\Mona_Lisa.jpg'); ImgView.TabStop := True; ImgView.ScrollBars.Visibility := svHidden; ImgView.ScaleMode := smResize; end; procedure TForm1.ImgViewMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); const ZoomFactor: array[Boolean] of Single = (0.9, 1.1); var R: TRect; begin MousePos := ImgView.ScreenToClient(MousePos); with ImgView, MousePos do if PtInRect(ClientRect, MousePos) then begin R := BoundsRect; R.Left := Left + X - Round(ZoomFactor[WheelDelta > 0] * X); R.Top := Top + Y - Round(ZoomFactor[WheelDelta > 0] * Y); R.Right := R.Left + Round(ZoomFactor[WheelDelta > 0] * Width); R.Bottom := R.Top + Round(ZoomFactor[WheelDelta > 0] * Height); BoundsRect := R; Handled := True; end; end; procedure TForm1.ImgViewMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer; Layer: TCustomLayer); begin FDragging := True; ImgView.Enabled := False; { Temporarily, to get MouseMove to the parent } FFrom := Point(X, Y); end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if FDragging then ImgView.SetBounds(X - FFrom.X, Y - FFrom.Y, ImgView.Width, ImgView.Height); end; procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FDragging := False; ImgView.Enabled := True; ImgView.SetFocus; end;
  • eDIT:
  • 替代司法,而不是timgview32:
delphi zooming graphics32
1个回答
5
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.