对于取鼠标当前位置!详情请进! (100分)

  • 主题发起人 主题发起人 coolmy
  • 开始时间 开始时间
C

coolmy

Unregistered / Unconfirmed
GUEST, unregistred user!
var r:integer;
  linep:Tpoint;
begin
r:=7
// LineP.x:=Mouse.CursorPos.x;
// LineP.y:=Mouse.CursorPos.y;
Windows.GetCursorPOs(LineP);
// LineP:=Image1.ScreenToClient(LineP);
// showmessage(format('x=%d y=%d',[LineP.x,LineP.y]));
// x:=Linep.X-image1.Left;
// y:=Linep.y-image1.Top; // ClientToScreen(LineP);
Image1.Canvas.Ellipse(LineP.X-R,LineP.Y-R,LineP.X+R,LineP.Y+R);
Panel2.Left:=LineP.X;
Panel2.Top:=LineP.Y;
end;
我在image1中画圆与panel2左上点所处位置不一样,也就是说:我想在image1中鼠标双击
处画圆,可画的圆与鼠标位置相差太远。这不应该再扯到坐标转换吧。有劳各位。
 
我在别人机器上执行此文件时,画圆还与鼠标挺近的。奇怪。怎么解决。
 
你取的位置是相对的,我试了一下:Form1.FormStyle=fsNone;Form1.Align=alClient
procedure TForm1.FormDblClick(Sender: TObject);
var
r:integer;
linep:Tpoint;
begin
r:=7;
GetCursorPos(LineP);
Canvas.Ellipse(LineP.X-R,LineP.Y-R,LineP.X+R,LineP.Y+R);
end;
具体的你再仔细分析一下吧
 
procedure TForm1.Image1DblClick(Sender: TObject);
var
r:integer;
LineP:TPoint;
begin
r:=7;
Windows.GetCursorPOs(LineP);
LineP:=ScreenToClient(LineP);
Canvas.Ellipse(LineP.X-R,LineP.Y-R,LineP.X+R,LineP.Y+R);
end;
 
下面的例程说明代表各部分坐标的含义
procedure TForm1.MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
//Client:表示鼠标所在控件的客户区的左上角的坐标
ClientEdit.Text:=inttostr((Sender as TControl).ClientOrigin.X)+' , '+inttostr((Sender as TControl).ClientOrigin.Y);

//X,Y:表示鼠标在所在控件上的坐标
PointEdit.Text:=inttostr(X)+' , '+inttostr(Y);

//Client+Pooint:表示鼠标在屏幕窗口上的坐标
AddEdit.Text:=inttostr(ClientOrigin.X+X)+' , '+inttostr(ClientOrigin.Y+Y);

//在鼠标点击的地方弹出弹出菜单
PopupMenu1.Popup((Sender as TControl).ClientOrigin.X+X,
(Sender as TControl).ClientOrigin.Y+Y);

//PopupMenu(X,Y):弹出菜单的左上角的坐标
PopupEdit.Text:=inttostr(PopupMenu1.PopupPoint.X)
+' , '+inttostr(PopupMenu1.PopupPoint.Y);

//MousePoint:表示鼠标在屏幕上的坐标
MouseEdit.Text:=inttostr(Mouse.CursorPos.X)+' , '+inttostr(Mouse.CursorPos.Y);

end;
 
To:yue_shan and :joioy
在Image1DblClick中画得圆不知跑到哪儿去了,根本就看不见。或者看见了,但若有其它窗体在上显示一下后,就显示没了。
procedure TForm1.Image1DblClick(Sender: TObject);
var
r:integer;
LineP:TPoint;
begin
r:=7;
Windows.GetCursorPOs(LineP);
LineP:=ScreenToClient(LineP);
Canvas.Ellipse(LineP.X-R,LineP.Y-R,LineP.X+R,LineP.Y+R);
end;

 
其实,这与Image1.stretch有关,当设为True时,就变成我上面的情况。

接受答案,分分。
 
后退
顶部