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

相关推荐

  • 求教Wincc导出数据问题

    求教Wincc导出数据问题 按钮动作调用了VBS脚本,用来往access里写入数据。之前已建立access文件以及数据表格,但是按下按钮数据并没有写入。请教下是不是程序哪…

    SIMATIC WinCC 2019年6月11日
  • WINCC7.0在VISTA环境下连接SQLSERVER数据库

    目前非要把在XP下完成的项目移到VISTA下面用,原来用的好好的,连接数据库都没问题: strConnectionString ="Driver={S…

    SIMATIC WinCC 2019年6月11日
  • Wincc报警控件的列宽怎么改啊?

    Wincc报警控件的列宽怎么改啊?属性里怎么找不到? 最佳答案 鼠标左键双击报警控件——–选择消息块选项卡—————类型——-选择——…

    SIMATIC WinCC 2019年6月11日
  • 时钟问题

    我想在画面上用一个区域显示时间,和电脑时间同步,请问怎么设计,我在WINNCC上找了好久都没有找到怎么弄时间的,请帮帮忙 最佳答案 如果是6.0版本WINCC DIGIT…

    SIMATIC WinCC 2019年6月11日
  • MCGS组态

    如何让MCGS组态里的实时曲线,历史曲线和数据报表在不链接PLC的情况下自己动起来, 最佳答案 第一你问错地方了,第二你这个自建内部数据 ,然后写脚本模拟 提问者对于答案…

    SIMATIC WinCC 2021年7月5日
  • 用WINCC监控S7-200

    要实现用WINCC监控一台S7-200,在WINCC软件中应该如何操作?     例如:如果用WINCC监控S7-300,会在WI…

    SIMATIC WinCC 2019年6月11日
  • 动态对象

    WINCC中做个管道,要实现动态: 我的思路:定义内部变量MOVE, 全局动作: static int MOVE=190;&nbs…

    SIMATIC WinCC 2019年6月11日
  • wincc调用step7变量

    将Symbols中的变量传到wincc,Operato Control and Monitoring选项卡中的对勾打不上,提示Connot …

    SIMATIC WinCC 2019年6月11日
  • WinCC消音

    对于WinCC警报的声音单独做一个按钮,只是用来静音的,怎么做?报警发声是用horn控件做的。 最佳答案 做1个按钮,属性-事件-鼠标动作-动作-常数:0 –变量:@H…

    SIMATIC WinCC 2017年7月30日
  • 现场复制过来的正版wincc做的项目,用破解版wincc打不开

    现场复制过来的正版wincc做的项目wincc7.4,用破解版wincc7.4打不开项目,有这样的限制吗?正版复制过来破解版打不开吗?一打这个项目卡那里不动了,直到提示关闭 最佳答…

    SIMATIC WinCC 2021年7月5日