我的程序实现以下功能:在一个dialog类型的form中,加入一张面积大于form大小的图片,这样为了看全图片,就要对图片在form中进行拖动,以下就是我的程序:现在的问题是,图片在拖动过程中,闪烁的很厉害,请问有什么方法可以解决。
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, jpeg, StdCtrls;type
TForm1 = class(TForm)
Panel1: TPanel;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
fx,fy:integer;
fz:integer;
implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
var
str: string;
begin
str:= ExtractFileDir(application.ExeName)+'\map_super.jpg';
image1.Picture.LoadFromFile(str);
panel1.Height:=image1.Picture.Height;
panel1.Width:=image1.Picture.Width;
panel1.Left:=0;
panel1.Top:=0;end;procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
fx:=X;
fy:=Y;
fz:=1;
image1.Cursor:=crCross;
form1.Caption:='横:'+inttostr(X)+' 纵:'+inttostr(Y);
end;procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
fz:=2;
{
if Button= mbLeft then
begin
panel1.Left:=panel1.Left+X-fx;
panel1.Top:=panel1.Top+Y-fy;
if panel1.Left>0 then
begin
panel1.Left:=0;
end
else
begin
if ((panel1.Left+panel1.Width) < form1.Width) then
begin
panel1.Left:=form1.Width - panel1.Width;
end;
end;
//*****************************************
if panel1.top>0 then
begin
panel1.top:=0;
end
else
begin
if ((panel1.top+panel1.Height) < form1.Height) then
begin
panel1.top:=form1.Height - panel1.Height;
end;
end;
end;
}
end;procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
lx:integer;
ty:integer;
begin
image1.Cursor:=crCross;
if fz=1 then
begin
lx:=panel1.Left+X-fx;
if lx>=0 then
begin
panel1.Left:=0;
end
else
begin
if lx <=(form1.Width - panel1.Width) then
begin
panel1.Left:=form1.Width - panel1.Width;
end
else
begin
panel1.Left:=lx;
end;
end;
//*****************************************
ty:=panel1.Top+Y-fy;
if ty>=0 then
begin
panel1.top:=0;
end
else
begin
if ty <=(form1.Height - panel1.Height) then
begin
panel1.top:=form1.Height - panel1.Height;
end
else
begin
panel1.top:=ty;
end;
end;
form1.Caption:='------:'+inttostr(X)+' ||||||||:'+inttostr(Y);
end;
end;end.
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, jpeg, StdCtrls;type
TForm1 = class(TForm)
Panel1: TPanel;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
fx,fy:integer;
fz:integer;
implementation{$R *.DFM}procedure TForm1.FormCreate(Sender: TObject);
var
str: string;
begin
str:= ExtractFileDir(application.ExeName)+'\map_super.jpg';
image1.Picture.LoadFromFile(str);
panel1.Height:=image1.Picture.Height;
panel1.Width:=image1.Picture.Width;
panel1.Left:=0;
panel1.Top:=0;end;procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
fx:=X;
fy:=Y;
fz:=1;
image1.Cursor:=crCross;
form1.Caption:='横:'+inttostr(X)+' 纵:'+inttostr(Y);
end;procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
fz:=2;
{
if Button= mbLeft then
begin
panel1.Left:=panel1.Left+X-fx;
panel1.Top:=panel1.Top+Y-fy;
if panel1.Left>0 then
begin
panel1.Left:=0;
end
else
begin
if ((panel1.Left+panel1.Width) < form1.Width) then
begin
panel1.Left:=form1.Width - panel1.Width;
end;
end;
//*****************************************
if panel1.top>0 then
begin
panel1.top:=0;
end
else
begin
if ((panel1.top+panel1.Height) < form1.Height) then
begin
panel1.top:=form1.Height - panel1.Height;
end;
end;
end;
}
end;procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
lx:integer;
ty:integer;
begin
image1.Cursor:=crCross;
if fz=1 then
begin
lx:=panel1.Left+X-fx;
if lx>=0 then
begin
panel1.Left:=0;
end
else
begin
if lx <=(form1.Width - panel1.Width) then
begin
panel1.Left:=form1.Width - panel1.Width;
end
else
begin
panel1.Left:=lx;
end;
end;
//*****************************************
ty:=panel1.Top+Y-fy;
if ty>=0 then
begin
panel1.top:=0;
end
else
begin
if ty <=(form1.Height - panel1.Height) then
begin
panel1.top:=form1.Height - panel1.Height;
end
else
begin
panel1.top:=ty;
end;
end;
form1.Caption:='------:'+inttostr(X)+' ||||||||:'+inttostr(Y);
end;
end;end.
解决方案 »
- 请大虾帮小弟注释下DBGrid导入Excel的代码,特别是关于变量和关于变量的语句(新手,刚接触)
- 乞求关于dxTreeList的统计问题,分不够再加!!!!
- 非常着急的问题,大家快帮忙!!!!!!!!!!
- DLL_PROCESS_DETACH的问题
- 为何我的消息无法解发其处理过程
- 全年温度
- 如何在listview的第一行插入数据
- ADOConnection 连接异常问题?
- 求:谁有立方体旋转的程序?需要源代码!谢谢,万分焦急!!!谢谢,100分送!!!
- 请问如何将一个单元里的组件在另一个单元内重用?
- 请问如何在程序里判断机器是否连接在INTERNET上??
- 关于与(and)的问题5点前在线等待!
帮你 顶一下 啊