窗体鼠标交互生成菜单,移动鼠标作出相应的提示,并且可以进入相应事件。(一般可以应用到成品效果展示,或实战项目检测失败时,需做出人机交互选择时可应用,相对于按键交互,可以优化UI布局)
实现效果
UI布局
菜单交互事件
private void uiButton2_Click(object sender, EventArgs e)
{showWorkMsg(listView1, "测试开始", Color.DarkBlue);HW.ClearWindow();FitImage(HIMage, hWC);//加载参数LoadParam();//窗体设置HW.SetLineWidth(5);HW.SetColor("black");HW.SetDraw("margin");HW.DispObj(ho_LabelRegions);//设置字体大小并加载菜单栏文字Form1.SetDisplayFont(HW, tbx_FountSize.Text, "true");Form1.DisMsg(HW, hv_Labels, ImgOrWindow.image, hv_TestRowOffest + hv_LabelRow1, (hv_LabelColumn1 + hv_LabelColumn2) / 2 + hv_TestColOffest, "lime green", "false");//初始化一些参数HTuple hv_Exception = new HTuple(), hv_Highlighted = new HTuple(), hv_MButtonOut = new HTuple();HTuple hv_AutoCounterOut = new HTuple(), hv_HighlightedOut = new HTuple();HTuple hv_Now = new HTuple(), hv_MaxCounter = new HTuple();HObject ho_LabelHighlighted = null;HOperatorSet.GenEmptyObj(out ho_LabelHighlighted);HTuple hv_TestResult = new HTuple();//相应事件返回消息hv_TestResult.Dispose();hv_TestResult = "";while ((int)(hv_ItemSelected.TupleNot()) != 0){Application.DoEvents();//获取鼠标位置try{hv_MRow.Dispose(); hv_MColumn.Dispose(); hv_MButton.Dispose();HOperatorSet.GetMposition(HW, out hv_MRow, out hv_MColumn,out hv_MButton);}catch (HalconException HDevExpDefaultException1){HDevExpDefaultException1.ToHTuple(out hv_Exception);hv_MButton.Dispose();hv_MButton = 0;}//突出显示鼠标位置下的标签hv_Highlighted.Dispose();hv_Highlighted = (((((((new HTuple(0)).TupleConcat((((((hv_MRow - hv_LabelRow1) / hv_LabelHeight)).TupleFloor())).TupleInt()))).TupleMax())).TupleConcat((new HTuple(hv_Labels.TupleLength())) - 1))).TupleMin();//忽略非交互模式下的鼠标输入if ((int)(hv_Interactive.TupleNot()) != 0){hv_MButton.Dispose();hv_MButton = 0;hv_Highlighted.Dispose();hv_Highlighted = new HTuple(hv_AutoCounter);//在非交互模式下,此过程用于在Timeout中指定的给定时间后切换到下一个演示部分。//这是通过点击相应的菜单项来完成的。hv_MButtonOut.Dispose();hv_MButtonOut = new HTuple(hv_MButton);hv_AutoCounterOut.Dispose();hv_AutoCounterOut = new HTuple(hv_AutoCounter);hv_HighlightedOut.Dispose();hv_HighlightedOut = new HTuple(hv_Highlighted);hv_Now.Dispose();HOperatorSet.CountSeconds(out hv_Now);if ((int)(new HTuple(((hv_Now - hv_TimeSinceLastInteraction)).TupleGreater(hv_Timeout))) != 0){//超时后自动启动demohv_MaxCounter.Dispose();using (HDevDisposeHelper dh = new HDevDisposeHelper()){hv_MaxCounter = (new HTuple(hv_Labels.TupleLength())) - 1;}if ((int)(new HTuple(hv_AutoCounterOut.TupleGreater(hv_MaxCounter))) != 0){//退出hv_MButtonOut.Dispose();hv_MButtonOut = 4;}else{//切换到下一个演示部分hv_HighlightedOut.Dispose();hv_HighlightedOut = new HTuple(hv_AutoCounter);hv_AutoCounterOut.Dispose();using (HDevDisposeHelper dh = new HDevDisposeHelper()){hv_AutoCounterOut = hv_AutoCounter + 1;}hv_MButtonOut.Dispose();hv_MButtonOut = 1;}}}//在非交互模式下完成所有演示时停止if ((int)(new HTuple(hv_Highlighted.TupleEqual(new HTuple(hv_Labels.TupleLength())))) != 0){break;}//如果当前选择已更改,则更新菜单图形if ((int)(new HTuple(hv_Highlighted.TupleNotEqual(hv_LastSelection))) != 0){//显示菜单标签并突出显示当前选定的项目HW.SetColor("black");HW.SetDraw("margin");HW.DispObj(ho_LabelRegions);ho_LabelHighlighted.Dispose();HOperatorSet.SelectObj(ho_LabelRegions, out ho_LabelHighlighted,hv_Highlighted + 1);HW.SetColor("#00B900");HW.DispObj(ho_LabelHighlighted);hv_LastSelection.Dispose();hv_LastSelection = new HTuple(hv_Highlighted);}//评估鼠标按钮if ((int)(new HTuple(hv_MButton.TupleEqual(4))) != 0){//右击:退出程序break;}else if ((int)(new HTuple(((hv_MButton % 2)).TupleEqual(1))) != 0){//左键点击:根据当前选择选择演示部分switch (hv_Highlighted.I){case 0:Application.DoEvents();FitImage(HIMage, hWC);hv_TestResult.Dispose();hv_TestResult = "选择测试1 赋值111111";Form1.DisMsg(HW, hv_TestResult, ImgOrWindow.image, 100, 100, "red", "false");showWorkMsg(listView1, hv_TestResult, Color.DarkBlue);HOperatorSet.WaitSeconds(1);break;case 1:Application.DoEvents();FitImage(HIMage, hWC);hv_TestResult.Dispose();hv_TestResult = "选择测试2 赋值222222";Form1.DisMsg(HW, hv_TestResult, ImgOrWindow.image, 100, 100, "red", "false");showWorkMsg(listView1, hv_TestResult, Color.DarkBlue);HOperatorSet.WaitSeconds(1);break;case 2:Application.DoEvents();FitImage(HIMage, hWC);hv_TestResult.Dispose();hv_TestResult = "选择测试3 赋值333333";Form1.DisMsg(HW, hv_TestResult, ImgOrWindow.image, 100, 100, "red", "false");showWorkMsg(listView1, hv_TestResult, Color.DarkBlue);HOperatorSet.WaitSeconds(1);break;case 3:Application.DoEvents();FitImage(HIMage, hWC);hv_TestResult.Dispose();hv_TestResult = "选择测试4 赋值444444";Form1.DisMsg(HW, hv_TestResult, ImgOrWindow.image, 100, 100, "red", "false");showWorkMsg(listView1, hv_TestResult, Color.DarkBlue);HOperatorSet.WaitSeconds(1);break;case 4:Application.DoEvents();FitImage(HIMage, hWC);hv_TestResult.Dispose();hv_TestResult = "选择测试5 赋值555555";Form1.DisMsg(HW, hv_TestResult, ImgOrWindow.image, 100, 100, "red", "false");showWorkMsg(listView1, hv_TestResult, Color.DarkBlue);HOperatorSet.WaitSeconds(1);break;}//演示后重新绘制菜单HW.ClearWindow();FitImage(HIMage, hWC);HW.SetColor("black");HW.SetDraw("margin");HW.DispObj(ho_LabelRegions);Form1.DisMsg(HW, hv_Labels, ImgOrWindow.image, hv_TestRowOffest + hv_LabelRow1, (hv_LabelColumn1 + hv_LabelColumn2) / 2 + hv_TestColOffest, "lime green", "false");hv_LastSelection.Dispose();hv_LastSelection = -1;hv_TimeSinceLastInteraction.Dispose();HOperatorSet.CountSeconds(out hv_TimeSinceLastInteraction);}}
}
switch (***)
{
case ***
}
这里可以调用方法,绘制ROI,赋值等等