MouseMove的X,Y是针对谁的呀??????!!!!!

lzhcsdn4 2003-11-20 03:37:41
我希望实现的是;
一个窗体之中有一个picturebox控件,一个按钮控件,在按钮控件按下去的时候能在picturebox控件上打一个点,然后在鼠标移动到该点上的时候会显示“welcome”
代码如下:
在按钮控件的click事件之中加入的代码为:
pic.Scale(0,100)-(100,0)'pic为我的picturebox控件的名字
pic.DrawWidth=4'为了显示的大一点,以免找不到打出的点
pic.ForeColor=vbRed
pic.PSet(50,50)
在picturebox控件的mousemove事件的代码为:
if X=50 and Y=50 then
pic.ToolTipText="welcome"
end if
结果在运行的时候可以在picturebox控件的中心打出一个点来,但是鼠标移动到点上面的时候并没有显示"welcome"
我怀疑是坐标系的定义问题,可能这里的mousemove事件的X,Y参数是针对窗体的坐标系而言的,不知道是否真的是这样呢?如果真的是这样的话,我的这个问题怎样解决才好呢?
望得到大家的帮助,谢谢!
...全文
291 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
demo001 2003-11-20
  • 打赏
  • 举报
回复
第二个问题

Label1.Caption = "tt" + Chr(13) + "tt"
kmzs 2003-11-20
  • 打赏
  • 举报
回复
针对鼠标的吧
lzhcsdn4 2003-11-20
  • 打赏
  • 举报
回复
对了,实在是不好意思,现在又出现一个新的问题:怎样在label的名字()即caption属性之中加入换行回车字符呀?比如我要显示横坐标,又要显示纵坐标,并且是分两行显示,我应该如何填写caption属性呢???!!!!
lzhcsdn4 2003-11-20
  • 打赏
  • 举报
回复
AresChen(AresChen) 你好,又看到了你的回信了呀,西西,网上的好心人真多呀。谢谢大家。
lzhcsdn4 2003-11-20
  • 打赏
  • 举报
回复
谢谢大家的帮助,我已经试出来了,方法是:
用shwen(shwen)提供的比较方法。用CBASE(开拓者)提供的加入label控件的代码。只是 AresChen(AresChen) 告诉我的单位的问题我现在还是有一点不明白,有一点可惜呀。
谢谢大家了。
AresChen 2003-11-20
  • 打赏
  • 举报
回复
我还真没有这样做过,一般的时候我都是直接将PictureBox的单位设置为Twips,这样比较起来就方便多了。
至于Label的问题~~~首先要求是Label是在PictureBox上,这样的话Label的Top和Left属性就是相对于PictureBox这个容器的了,比如:
sub pic_MouseMove(...)
if X=.. and Y=.. then
with Label
.Top=X
.Left=Y
.Visiable=True
end with
endif
end sub
就是这么简单,没有任何难的地方。
但实际上你的需求是有很多可以扩展的地方,比如,如果提示的信息(即Label中显示的信息)里面包含了多行、甚至图片的怎么办?如果鼠标的位置移动到了PictureBox的边缘,Label会被PictureBox挡住的时候怎么办?如果希望达到像Windows下标准的Tooltip那样,希望它悬停一会的时候才出现,等几秒在自动隐藏掉怎么办。
等你解决了Label的问题后,实际其他问题只要肯琢磨就都好办了。
lzhcsdn4 2003-11-20
  • 打赏
  • 举报
回复
谢谢大家的帮助,可是我针对AresChen(AresChen)的帮助还是有一些不明白:
1。我也大概的了解VB之中的单位默认的是Twips。现在我定义了一个范围是scale(0,4000)-(5000,0)并且把该图片框的height改为4000,width改为5000,因此现在就是一个Twip对应一个点了,可是还是不能显示呀?
2。我知道怎样显示或者隐藏一个label控件,但是我不知道如何让我显示出来的label控件显示在我的鼠标的当前位置呀???/我应该怎样做呢?
望能得到大家的继续帮助,谢谢!
shwen 2003-11-20
  • 打赏
  • 举报
回复
问题的根本不在 X,Y 坐标不对,而是你进行比较的方法不对
X=50 and Y = 50 这个条件是永远无法满足的,因为 X 可能会取 49.**** 但可能永远没有机会正好等于50,你必须把条件改为
If Abs(x -50) + Abs(Y-50) < 5 then ' 例如是5,PictureBox够大的话,再取小点也可以
CBASE 2003-11-20
  • 打赏
  • 举报
回复
应该改为:
pic.currentx=50
pic.currenty=50
pic.print "welcome"
或:
加一个label控件:
Private Sub Pic_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If X = 50 And Y =50 Then
Label1.Left = X
Label1.Top = Y
Label1.Visible = True
Label1.Caption = "welcome"
Else
Label1.Visible = False
End If

End Sub
newyouyou 2003-11-20
  • 打赏
  • 举报
回复
同意楼上的
lwm1977 2003-11-20
  • 打赏
  • 举报
回复
我认为是:
整个屏幕
AresChen 2003-11-20
  • 打赏
  • 举报
回复
控件中MouseMove事件下的X、Y都是针对控件本身的,你程序出错是因为坐标的单位不对,缺省的情况下,VB使用的是Twips这个单位,15个Twips相当于一个点,即Pixels。
你可以采用PictureBox中ScaleX、ScaleY等去进行转换,详细的方法可以参考MSDN中相关的帮助。
另外,就算你的单位正确了,恐怕也无法得到正确的结果。因为控件的Tooltip属性不是即时更改的,你的程序能够产生的样子是,但鼠标第一次移动到这个点上之后,可能什么都出现不了,但当你移出在移进来等会,就会出现了。想要到到你需要的效果,最好是在PictureBox上放一个Label,平时让Label的Visiable为False,当需要的时候设置Visiable为True,并随着鼠标移动。

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧