VB判断鼠标位置

使用WINCC库中的阀门、电机等图标,单击他们弹出操作的对话框,现在的问题是弹出的对话框是在鼠标点击的位置附近出来,但是点击监控画面边缘的图标时发现,弹出的对话框超出了画面的边缘,还得用鼠标拖拽回来,(因为是改造项目,原制作者在PLC中的地址不规律,无法用结构变量,只能把阀门的操作对话框逐一制作出来,我使用VB程序加画面窗口做的,)程序如下:
Sub MouseDown(ByVal Item,  ByVal Button,  ByVal Shift,  ByVal x,  ByVal y) 
Dim PIC
Set PIC = ScreenItems("画面窗口1")''''''''''''''''选择画面窗口
ScreenItems.Item("画面窗口1").PICTURENAME="阀门号"
PIC.Visible = False
PIC.Left = item.Left+10
PIC.Top = item.Top
ScreenItems("画面窗口1").Visible = True
End Sub
我对VB不怎么懂,希望高手们能给在这个程序后加个判断鼠标点击位置的VB程序,使得弹出的对话框不会超出屏幕的边缘!这个比较急,希望高手们不另赐教,小弟在这里先谢过!

最佳答案

试试这个全局函数吧 希望对你有帮助
你只需修改DialogName参数

Sub ShowDialog(Byval DialogName,Byval x,Byval y) 
''''对话框显示位置自动调整函数函数
''''鼠标事件按左键事件中调用
''''DialogName为要显示对象的名称  x,y为鼠标点击的位置(鼠标左键事件中调用直接为X,Y)
''''例:Call ShowDialog("1号鼓风机放空气阀_Dialog",x,y) 
''''by:逐渐变晕
Dim PageWidth,PageHeight,DiaWidth,DiaHeight,PX,PY,Constval
Constval=30 ''''调整显示对话框距离鼠标点击点距离
PageWidth=HMIRuntime.Screens ("").Width 
PageHeight =HMIRuntime.Screens ("").Height
DiaWidth=ScreenItems(DialogName).Width
DiaHeight=ScreenItems(DialogName).Height
px=x+Constval
PY=y+Constval
If x+DiaWidth+Constval >=PageWidth  Then 
PX=x-Constval*2-DiaWidth
End If
If y+DiaHeight+Constval >=PageHeight Then 
PY=y-Constval*2-DiaHeight
End If
ScreenItems(DialogName).Left=PX
ScreenItems(DialogName).Top=PY
ScreenItems(DialogName).Visible = True
End Sub 

Sub  EndDialog(Byval DialogName)
Dim PageWidth
PageWidth=HMIRuntime.Screens ("").Width 
ScreenItems(DialogName).Left=ScreenItems(DialogName).Left+PageWidth
End Sub

提问者对于答案的评价:
xiexie

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc264396.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2019年6月11日 上午2:57
下一篇 2019年6月11日 上午2:57

相关推荐

  • wincc7.4连接S7-300PLC

    公司项目原来用的是WINCC7.0,最近电脑升级window10后就安装了WINCC7.4,项目是移植过去的,现在激活wincc里面变量都连接不上了.我通讯用的是电脑自带的网卡TC…

    SIMATIC WinCC 2021年7月5日
  • 请帮我详细解读下这段脚本

    Sub Datamanage(strSQL) Dim objConnection Dim strConnectionString,…

    SIMATIC WinCC 2019年6月11日
  • 离散报警 不能用 BOOL

    离散报警,触发变量里没有选项而且必须是 int型变量才能显示 。开关量报警是不是没法做报警  。不该数据类型的前提  B…

    2021年7月5日
  • WINCC动作C脚本读写问题

    把变量管理的变量读过来,做差值运算,在赋值给内部变量中的一个变量,运行wincc,变量值是0,值没有被写入,相问下那里错了 图片说明:    最佳答案 winc…

    2021年7月5日
  • wincc中文编程手册

    wincc  V6.2 中文编程手册 问题补充:中文 最佳答案 《WinCC V6.2 使用入门手册》连接:http://www.…

    SIMATIC WinCC 2018年12月14日
  • wincc 读取vb中的数据

    各位大咖,wincc 如何读取vb中的数据,详细一些哦。最好有案例,vb中编写了串口通信程序将现场仪表的数据采集上来,现在希望wincc直接读取vb中的数据,我看网上有些…

    SIMATIC WinCC 2018年1月1日
  • wincc7.5安装环境

    wincc7.5 sp1能否安装在win7系统上?项目7.5开发的,电脑是win7的,装了wincc7,4,把7.5版本画面复制到7.4版本项目下,打开后显示未知对象 最…

    2021年7月5日
  • 关于horn报警器的变量

    在wincc里的horn报警器组态了一个变量alarm,alarm为1时报警,0时没动作。我如何将报警信息记录下来,可以历史查询..只查询为1时的时间信息,也就是只查报警。 最佳答…

    SIMATIC WinCC 2019年6月11日
  • prosave?

    有个触摸屏TP270,现在用prosave将里面的程序备份出来,再恢复到一个新的TP270里面去,首先要做哪些工作呢?打开prosave,连接下面是不是要选serial(via&n…

    SIMATIC WinCC 2019年6月11日
  • WINCC 监控6台CPU224XP

    如题第一个CPU站控制1#设备信息,如查询某个温度;第二个CPU站控制2#设备信息;如查询某个温度;第三个CPU站控制3#设备信息;如查询某个温度;……第六个CPU站控制6…

    SIMATIC WinCC 2017年11月19日