也就是说如何象ACDSEE或Acrobat Reader一样拖动一个大于显示窗口的图片或PDF文件?
注:不是通过滚动条拖动,只要点击大于显示窗口的图片或PDF文件就可以在显示窗口内
任意拖动。各位高手救救我吧。
最好能给点代码,说说原理也。
注:不是通过滚动条拖动,只要点击大于显示窗口的图片或PDF文件就可以在显示窗口内
任意拖动。各位高手救救我吧。
最好能给点代码,说说原理也。
解决方案 »
- 如何使一个等待中的定时器得到信号?
- 字符串改变
- 这样的控件该怎么写?给vb.net调用的。
- 如何使用indy的tcpserver与tcpclient传输一个文件?
- 请各位推荐DELPHI学习网站和论坛
- 安装程序的制作。请问在安装我的主程序之前,如果要安装BDE引擎,怎么完成,用INSTALLSHIELD2000
- 关于textout()这个函数
- 十万火急!300分求视频捕获与传输!!
- 链接的是DCU文件,运行时却要PAS文件,是怎么回事啊,请高手指教
- 如何将一个二维数组作为函数function的参数传递,且二维数组的维数可变?
- 用ADO连Accsee的数据库,并设置数据库密码,应该在程序中怎么连接?
- 关于listView的疑难问题。高手请进。100分。
这里找不到答案吗?来这里试试看!
这里有问必答
http://systemer.51.net/cgi-bin/leoboard.cgi
希望你能在这里找到你满意的答案
=========================================
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg;type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
DownPt: Tpoint;
CurPosition: TPoint;
Picture: TPicture;
Bmp: TBitMap;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if ssLeft in Shift then
begin
Screen.Cursor := crHourGlass;
DownPt:= Point(X, Y);
end;
end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Screen.Cursor := crDefault;
end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ssLeft in Shift then
begin
if (abs(X-DownPt.X)>10)
or (abs(Y-DownPt.Y)>10) then
begin
Bmp.Width := Form1.Width;
Bmp.Height := Form1.Height;
Inc(CurPosition.X, X - DownPt.X);
Inc(CurPosition.Y, Y - DownPt.Y);
Bmp.Canvas.FillRect(Rect(0,0, Width, Height));
Bmp.Canvas.Draw(CurPosition.x, CurPosition.Y, Picture.Graphic);
Form1.Canvas.Draw(0, 0, Bmp);
DownPt := Point(X, Y);
end;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
CurPosition := Point(0,0);
Picture := TPicture.Create;
Bmp := TBitMap.Create;
Picture.LoadFromFile('d:\test.jpg');
Bmp.Canvas.Brush.Color := 0;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
bmp.free;
Picture.Free;
end;end.
鼠标的三个消息onmousedown,move,up,和formcreate的事件,双击就可以了。
运行起来无闪烁而且很平滑。