Image1中的图有N个点,这些点的坐标已知,当鼠标在Image1中移动时,在OnMouseMove中判断鼠标是否在这N个点上,如果在显示Image2,Image2的Letf,Top设为当前点的坐标,否则Image2隐藏。
程序这样没有问题。
但是当Image1放大、缩小时(这时Image2也按照Image1的比例同时放大、缩小),N各点的坐标也同时放大、缩小,这时鼠标移动到这N各点上显示Image2时,就能感觉到鼠标停顿,Image2闪烁,CPU占用率大幅上升,如果设置Form的DoubleBuffered为True,那么Image2不闪烁,但鼠标停顿更加厉害,CPU占用率也更高,有没有解决的方法?其中Image1,Image2的图片都是程序中Canvas手工画的,如果换为已存在的图片,那么停顿会减轻,但仍能感觉出停顿,闪烁。
程序这样没有问题。
但是当Image1放大、缩小时(这时Image2也按照Image1的比例同时放大、缩小),N各点的坐标也同时放大、缩小,这时鼠标移动到这N各点上显示Image2时,就能感觉到鼠标停顿,Image2闪烁,CPU占用率大幅上升,如果设置Form的DoubleBuffered为True,那么Image2不闪烁,但鼠标停顿更加厉害,CPU占用率也更高,有没有解决的方法?其中Image1,Image2的图片都是程序中Canvas手工画的,如果换为已存在的图片,那么停顿会减轻,但仍能感觉出停顿,闪烁。
解决方案 »
- delphi编程中用了paradox数据库,然后编完后生成的可运行文件在别的机子上不能运行,因为没把数据库弄过去,该怎么解决,谢谢了!!!
- 如何在遍历数据的时候,表格控件的SCROLLBAR不改变位置???(垂直滚动条)
- [***倾情巨献***]一个界面漂亮,好用的表格控件,首次公开源码
- Timage问题
- 逻辑运算问题
- dbExpree控件TSQLStoredProc怎么用?有经验的来看看(在线)
- WebBrowser的问题
- 怎样添加数据表的列?
- 地摊上的D版Delphi6简体中文版是不是真的中文版?
- 如何将webbrowser页面的内容保存为HTML文件?
- 庆祝湖南省晋中高级职称不考外语,散分!
- 熟悉李维的分布式多层应用系统篇的高手或者Socketconnect请进!
Image2,Image3的AutoSize=false,Stretch=trueunit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, Menus, StdCtrls;type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
N11: TMenuItem;
N21: TMenuItem;
N41: TMenuItem;
Line1: TMenuItem;
Image2: TImage;
Load1: TMenuItem;
Image3: TImage;
Label1: TLabel;
Label2: TLabel;
procedure FormShow(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N21Click(Sender: TObject);
procedure N41Click(Sender: TObject);
procedure Load1Click(Sender: TObject);
procedure Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Line1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
TMyPix=Class
PixX:integer;
PixY:integer;
end;
var
Form1: TForm1;
MPixArr: array of TMyPix;
i:integer;
B:integer;
MInfo:TMyPix;implementationuses Unit2;{$R *.dfm}procedure TForm1.FormShow(Sender: TObject);
begin
image2.Width :=663;
image2.Height :=458;
Image3.Canvas.MoveTo(1,1);
Image3.Canvas.Pen.Color :=clBlue;
Image3.Canvas.LineTo(1,16);
Image3.Canvas.LineTo(16,16);
Image3.Canvas.LineTo(16,1);
Image3.Canvas.LineTo(1,1);
Image3.Visible:=false;
B:=1;
end;procedure TForm1.N11Click(Sender: TObject);
begin
image2.Width :=663;
image2.Height :=458;
image3.Width :=17;
image3.Height :=17;
B:=1;
end;procedure TForm1.N21Click(Sender: TObject);
begin
image2.Width :=1326;
image2.Height :=916;
image3.Width :=33;
image3.Height :=33;
B:=2;
end;procedure TForm1.N41Click(Sender: TObject);
begin
image2.Width :=1989;
image2.Height :=1374;
image3.Width :=49;
image3.Height :=49;
B:=3;
end;
procedure TForm1.Load1Click(Sender: TObject);
begin i:=25;
SetLength(MPixArr,i);
MInfo := TMyPix.Create;
MInfo.PixX :=30;
MInfo.PixY :=30;
MPixArr[0]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=130;
MInfo.PixY :=130;
MPixArr[1]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=230;
MInfo.PixY :=230;
MPixArr[2]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=330;
MInfo.PixY :=330;
MPixArr[3]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=430;
MInfo.PixY :=430;
MPixArr[4]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=30;
MInfo.PixY :=130;
MPixArr[5]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=30;
MInfo.PixY :=230;
MPixArr[6]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=30;
MInfo.PixY :=330;
MPixArr[7]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=30;
MInfo.PixY :=430;
MPixArr[8]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=130;
MInfo.PixY :=30;
MPixArr[9]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=230;
MInfo.PixY :=30;
MPixArr[10]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=330;
MInfo.PixY :=30;
MPixArr[11]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=430;
MInfo.PixY :=30;
MPixArr[12]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=130;
MInfo.PixY :=230;
MPixArr[13]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=130;
MInfo.PixY :=330;
MPixArr[14]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=130;
MInfo.PixY :=430;
MPixArr[15]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=230;
MInfo.PixY :=130;
MPixArr[16]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=330;
MInfo.PixY :=130;
MPixArr[17]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=430;
MInfo.PixY :=130;
MPixArr[18]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=230;
MInfo.PixY :=330;
MPixArr[19]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=230;
MInfo.PixY :=430;
MPixArr[20]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=330;
MInfo.PixY :=230;
MPixArr[21]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=430;
MInfo.PixY :=230;
MPixArr[22]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=330;
MInfo.PixY :=430;
MPixArr[23]:=MInfo;
MInfo := TMyPix.Create;
MInfo.PixX :=430;
MInfo.PixY :=330;
MPixArr[24]:=MInfo;
{MInfo := TMyPix.Create;
MInfo.PixX :=530;
MInfo.PixY :=530;
MPixArr[5]:=MInfo;
Image2.Canvas.MoveTo(100,100);
Image2.Canvas.LineTo(100,300);
Image2.Canvas.LineTo(300,300);
Image2.Canvas.MoveTo(300,300-15);
Image2.Canvas.LineTo(300,300-15+40);
Image2.Canvas.LineTo(300+36,300-15+40);
Image2.Canvas.LineTo(300+36,300-15);
Image2.Canvas.LineTo(300,300-15); Image2.Canvas.TextOut(310,300-12,'256');
Image2.Canvas.TextOut(310,300,'423');
Image2.Canvas.TextOut(310,300+12,'789'); Image2.Canvas.MoveTo(28,28);
Image2.Canvas.LineTo(28,32);
Image2.Canvas.LineTo(32,32);
Image2.Canvas.LineTo(32,28);
Image2.Canvas.LineTo(28,28); Image2.Canvas.MoveTo(128,128);
Image2.Canvas.LineTo(128,132);
Image2.Canvas.LineTo(132,132);
Image2.Canvas.LineTo(132,128);
Image2.Canvas.LineTo(128,128); Image2.Canvas.MoveTo(228,228);
Image2.Canvas.LineTo(228,232);
Image2.Canvas.LineTo(232,232);
Image2.Canvas.LineTo(232,228);
Image2.Canvas.LineTo(228,228); Image2.Canvas.MoveTo(328,328);
Image2.Canvas.LineTo(328,332);
Image2.Canvas.LineTo(332,332);
Image2.Canvas.LineTo(332,328);
Image2.Canvas.LineTo(328,328); Image2.Canvas.MoveTo(428,428);
Image2.Canvas.LineTo(428,432);
Image2.Canvas.LineTo(432,432);
Image2.Canvas.LineTo(432,428);
Image2.Canvas.LineTo(428,428);
Image2.Canvas.MoveTo(28,128);
Image2.Canvas.LineTo(28,132);
Image2.Canvas.LineTo(32,132);
Image2.Canvas.LineTo(32,128);
Image2.Canvas.LineTo(28,128); Image2.Canvas.MoveTo(28,228);
Image2.Canvas.LineTo(28,232);
Image2.Canvas.LineTo(32,232);
Image2.Canvas.LineTo(32,228);
Image2.Canvas.LineTo(28,228); Image2.Canvas.MoveTo(28,328);
Image2.Canvas.LineTo(28,332);
Image2.Canvas.LineTo(32,332);
Image2.Canvas.LineTo(32,328);
Image2.Canvas.LineTo(28,328); Image2.Canvas.MoveTo(28,428);
Image2.Canvas.LineTo(28,432);
Image2.Canvas.LineTo(32,432);
Image2.Canvas.LineTo(32,428);
Image2.Canvas.LineTo(28,428); Image2.Canvas.MoveTo(128,28);
Image2.Canvas.LineTo(128,32);
Image2.Canvas.LineTo(132,32);
Image2.Canvas.LineTo(132,28);
Image2.Canvas.LineTo(128,28); Image2.Canvas.MoveTo(228,28);
Image2.Canvas.LineTo(228,32);
Image2.Canvas.LineTo(232,32);
Image2.Canvas.LineTo(232,28);
Image2.Canvas.LineTo(228,28); Image2.Canvas.MoveTo(328,28);
Image2.Canvas.LineTo(328,32);
Image2.Canvas.LineTo(332,32);
Image2.Canvas.LineTo(332,28);
Image2.Canvas.LineTo(328,28); Image2.Canvas.MoveTo(428,28);
Image2.Canvas.LineTo(428,32);
Image2.Canvas.LineTo(432,32);
Image2.Canvas.LineTo(432,28);
Image2.Canvas.LineTo(428,28); Image2.Canvas.MoveTo(128,228);
Image2.Canvas.LineTo(128,232);
Image2.Canvas.LineTo(132,232);
Image2.Canvas.LineTo(132,228);
Image2.Canvas.LineTo(128,228); Image2.Canvas.MoveTo(128,328);
Image2.Canvas.LineTo(128,332);
Image2.Canvas.LineTo(132,332);
Image2.Canvas.LineTo(132,328);
Image2.Canvas.LineTo(128,328); Image2.Canvas.MoveTo(128,428);
Image2.Canvas.LineTo(128,432);
Image2.Canvas.LineTo(132,432);
Image2.Canvas.LineTo(132,428);
Image2.Canvas.LineTo(128,428); Image2.Canvas.MoveTo(228,128);
Image2.Canvas.LineTo(228,132);
Image2.Canvas.LineTo(232,132);
Image2.Canvas.LineTo(232,128);
Image2.Canvas.LineTo(228,128); Image2.Canvas.MoveTo(328,128);
Image2.Canvas.LineTo(328,132);
Image2.Canvas.LineTo(332,132);
Image2.Canvas.LineTo(332,128);
Image2.Canvas.LineTo(328,128); Image2.Canvas.MoveTo(428,128);
Image2.Canvas.LineTo(428,132);
Image2.Canvas.LineTo(432,132);
Image2.Canvas.LineTo(432,128);
Image2.Canvas.LineTo(428,128); Image2.Canvas.MoveTo(228,328);
Image2.Canvas.LineTo(228,332);
Image2.Canvas.LineTo(232,332);
Image2.Canvas.LineTo(232,328);
Image2.Canvas.LineTo(228,328); Image2.Canvas.MoveTo(228,428);
Image2.Canvas.LineTo(228,432);
Image2.Canvas.LineTo(232,432);
Image2.Canvas.LineTo(232,428);
Image2.Canvas.LineTo(228,428); Image2.Canvas.MoveTo(328,228);
Image2.Canvas.LineTo(328,232);
Image2.Canvas.LineTo(332,232);
Image2.Canvas.LineTo(332,228);
Image2.Canvas.LineTo(328,228); Image2.Canvas.MoveTo(428,228);
Image2.Canvas.LineTo(428,232);
Image2.Canvas.LineTo(432,232);
Image2.Canvas.LineTo(432,228);
Image2.Canvas.LineTo(428,228); Image2.Canvas.MoveTo(328,428);
Image2.Canvas.LineTo(328,432);
Image2.Canvas.LineTo(332,432);
Image2.Canvas.LineTo(332,428);
Image2.Canvas.LineTo(328,428); Image2.Canvas.MoveTo(428,328);
Image2.Canvas.LineTo(428,332);
Image2.Canvas.LineTo(432,332);
Image2.Canvas.LineTo(432,328);
Image2.Canvas.LineTo(428,328);
end;procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
j:integer;
begin
//Label2.Caption :=IntToStr(x) + ',' + IntToStr(y);
//Form2.Label2.Caption :=IntToStr(X) + ',' + IntToStr(Y);
Image3.Visible:=false;
Form2.Label1.Caption :='';
for j:=0 to i-1 do
begin
//if ((X-MPixArr[j].PixX*B<=10) and (X-MPixArr[j].PixX*B >=-10)) and
// ((Y-MPixArr[j].PixY*B<=10) and (Y-MPixArr[j].PixY*B >=-10)) then
if ((X-MPixArr[j].PixX*B<=10) and (X-MPixArr[j].PixX*B >=-10)) then
if ((Y-MPixArr[j].PixY*B<=10) and (Y-MPixArr[j].PixY*B >=-10)) then
begin
image3.Left :=MPixArr[j].PixX*B-9*B+Image2.Left;
image3.Top :=MPixArr[j].PixY*B-9*B+Image2.Top;
image3.Visible :=true;
Form2.Label1.Caption :='当前点的位置:' + IntToStr(MPixArr[j].PixX) + ',' + IntToStr(MPixArr[j].PixY );
Break;
end;
end;end;procedure TForm1.Line1Click(Sender: TObject);
begin
Form2.Show;
end;end.