C3031
2026-01-30 0ab0fde3216783ee2694d8d4bfbb94237e25a4bb
LB_VisionControl/UserHSmartWindowControl.cs
@@ -1,8 +1,12 @@
using HalconDotNet;
using Sunny.UI.Win32;
using System.Diagnostics;
using System.Windows.Forms;
namespace LB_VisionControl
{
    public delegate void Control_MouseDown(object sender, MouseEventArgs e);
    public delegate void Control_MouseDoubleClick(object sender, MouseEventArgs e);
    public partial class UserHSmartWindowControl : UserControl
    {
        public UserHSmartWindowControl()
@@ -18,7 +22,22 @@
            // 设置默认字体为 20号 mono字体加粗
            set_display_font(this.hWindowControl.HalconWindow, 20, "mono", "true", "false");
        }
        public event Control_MouseDown event_MouseDown;
        public event Control_MouseDoubleClick event_MouseDoubleClick;
        private void event_mouseDown(object sender, MouseEventArgs e)
        {
            if (event_MouseDown != null)
            {
                event_MouseDown(sender, e);
            }
        }
        private void event_mouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (event_MouseDoubleClick != null)
            {
                event_MouseDoubleClick(sender, e);
            }
        }
        private void UserHSmartWindowControl_Load(object sender, EventArgs e)
        {
            // 启用双缓冲减少闪烁
@@ -32,11 +51,11 @@
        /// </summary>
        public bool bAutoSize = true;
        private HImage _hImage = null;
        private HObject _hImage = null;
        /// <summary>
        /// 显示图片(异步)
        /// </summary>
        public HImage hImage
        public HObject hImage
        {
            get
            {
@@ -273,10 +292,10 @@
        /// <param name="ho_image"></param>
        /// <param name="hWindow"></param>
        /// <param name="autoSize"></param>
        public async void ShowHoImageAsync(HImage ho_image, HWindow hWindow, bool autoSize = true)
        public async void ShowHoImageAsync(HObject ho_image, HWindow hWindow, bool autoSize = true)
        {
            if (ho_image == null || !ho_image.IsInitialized())
                hWindow.ClearWindow();
                HOperatorSet.ClearWindow(hWindow);
            else
                await ShowImageAsync(hWindow, ho_image, autoSize);
        }
@@ -286,10 +305,10 @@
        /// </summary>
        /// <param name="ho_image"></param>
        /// <param name="autoSize"></param>
        public void ShowHoImage(HImage ho_image, bool autoSize = true)
        public void ShowHoImage(HObject ho_image, bool autoSize = true)
        {
            _hImage = ho_image;
            hWindowControl.HalconWindow.ClearWindow();
            HOperatorSet.ClearWindow(hWindowControl.HalconWindow);
            if (ho_image == null)
                return;
@@ -343,7 +362,7 @@
            return;
        }
        private async Task<bool> ShowImageAsync(HWindow hWindow, HImage ho_image, bool autoSize = true)
        private async Task<bool> ShowImageAsync(HWindow hWindow, HObject ho_image, bool autoSize = true)
        {
            return await Task.Run(() =>
            {
@@ -351,7 +370,7 @@
                {
                    try
                    {
                        hWindow.ClearWindow();
                        HOperatorSet.ClearWindow(hWindow);
                    }
                    catch { return false; }
                    return true;
@@ -359,11 +378,11 @@
                try
                {
                    hWindow.ClearWindow();
                    HOperatorSet.ClearWindow(hWindow);
                    if (autoSize)
                    {
                        ho_image.GetImageSize(out HTuple imgWidth, out HTuple imgHeight);
                        HOperatorSet.GetImageSize(ho_image, out HTuple imgWidth, out HTuple imgHeight);
                        if (imgWidth.Length > 0)
                        {
                            hWindow.GetWindowExtents(out int winRow, out int winCol, out int winWidth, out int winHeight);
@@ -395,7 +414,7 @@
                        }
                    }
                    hWindow.DispObj(ho_image);
                    HOperatorSet.DispObj(ho_image, hWindow);
                }
                catch { return false; }
                return true;
@@ -421,7 +440,7 @@
            try
            {
                if (ho_object != null && ho_object.IsInitialized())
                    this.hWindowControl.HalconWindow.DispObj(ho_object);
                    HOperatorSet.DispObj(ho_object, this.hWindowControl.HalconWindow);
            }
            catch { }
        }
@@ -433,7 +452,7 @@
                if (ho_object != null && ho_object.IsInitialized())
                {
                    SetColor(color);
                    this.hWindowControl.HalconWindow.DispObj(ho_object);
                    HOperatorSet.DispObj(ho_object, this.hWindowControl.HalconWindow);
                }
            }
            catch { }
@@ -447,7 +466,7 @@
                {
                    string color = result ? "green" : "red";
                    SetColor(color);
                    this.hWindowControl.HalconWindow.DispObj(ho_object);
                    HOperatorSet.DispObj(ho_object, this.hWindowControl.HalconWindow);
                }
            }
            catch { }
@@ -488,7 +507,7 @@
                if (this.color != color)
                {
                    this.hWindowControl.HalconWindow.SetColor( color);
                    HOperatorSet.SetColor(this.hWindowControl.HalconWindow, color);
                    this.color = color;
                }
            }
@@ -968,6 +987,8 @@
                    default:
                        break;
                }
                MouseEventArgs mouseEventArgs = new MouseEventArgs(e.Button, e.Clicks, (int)e.X, (int)e.Y, e.Delta);
                event_mouseDown(sender, mouseEventArgs);
            }
            catch { }
        }
@@ -1170,5 +1191,11 @@
        {
            ShowHoImage(hImage);
        }
        private void hWindowControl_HMouseDoubleClick(object sender, HMouseEventArgs e)
        {
            MouseEventArgs mouseEventArgs = new MouseEventArgs(e.Button, e.Clicks, (int)e.X, (int)e.Y, e.Delta);
            event_mouseDoubleClick(sender, mouseEventArgs);
        }
    }
}