From eda17eddf88e6108cadbf8dcef5c2195c1a7b708 Mon Sep 17 00:00:00 2001
From: C3204 <zhengyabo@lanpucloud.cn>
Date: 星期三, 01 四月 2026 10:55:05 +0800
Subject: [PATCH] 提交VS生成临时文件

---
 LB_VisionProcesses/BarcodeReaders/BarcodeReaderForm.cs |  305 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 305 insertions(+), 0 deletions(-)

diff --git a/LB_VisionProcesses/BarcodeReaders/BarcodeReaderForm.cs b/LB_VisionProcesses/BarcodeReaders/BarcodeReaderForm.cs
new file mode 100644
index 0000000..911612c
--- /dev/null
+++ b/LB_VisionProcesses/BarcodeReaders/BarcodeReaderForm.cs
@@ -0,0 +1,305 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Windows.Forms;
+using LB_VisionProcesses.BarcodeReaders;
+
+namespace LB_VisionProcesses.BarcodeReaders
+{
+    /// <summary>
+    /// 璇荤爜鍣ㄩ厤缃笌娴嬭瘯绐椾綋
+    /// </summary>
+    public partial class BarcodeReaderForm : Form
+    {
+        private IBarcodeReader _reader;
+        private string _currentSN;
+        private LB_VisionProcesses.Processes.BarcodeReaderProcess _process;
+        private string _processPath;
+
+        public BarcodeReaderForm()
+        {
+            InitializeComponent();
+        }
+
+        public BarcodeReaderForm(IBarcodeReader reader)
+        {
+            InitializeComponent();
+            _reader = reader;
+            _reader.BarcodeRead += Reader_BarcodeRead;
+            _currentSN = _reader.IsConnected ? "璁惧宸插湪绾�" : "";
+
+            // 鍚屾 UI 鐘舵��
+            cmbBrand.Text = _reader.Brand.ToString();
+            cmbSN.Text = _reader.IsConnected ? "鍦ㄧ嚎璁惧" : "";
+        }
+
+        public BarcodeReaderForm(LB_VisionProcesses.Processes.BarcodeReaderProcess process, string processPath)
+        {
+            InitializeComponent();
+            _process = process;
+            _processPath = processPath;
+
+            // 鍔犺浇娴佺▼鍙傛暟鍒� UI
+            if (_process.Params.Inputs.ContainsKey("璁惧鍝佺墝"))
+                cmbBrand.Text = _process.Params.Inputs["璁惧鍝佺墝"].ToString();
+            if (_process.Params.Inputs.ContainsKey("璁惧SN"))
+                cmbSN.Text = _process.Params.Inputs["璁惧SN"].ToString();
+            if (_process.Params.Inputs.ContainsKey("瑙﹀彂妯″紡"))
+                radSoftTrigger.Checked = _process.Params.Inputs["瑙﹀彂妯″紡"].ToString() == "杞Е鍙�";
+            if (_process.Params.Inputs.ContainsKey("瓒呮椂鏃堕棿"))
+                txtTimeout.Text = _process.Params.Inputs["瓒呮椂鏃堕棿"].ToString();
+        }
+
+        private void BarcodeReaderForm_Load(object sender, EventArgs e)
+        {
+            // 鍒濆鍖栧搧鐗屽垪琛�
+            cmbBrand.Items.Clear();
+            foreach (var brand in Enum.GetValues(typeof(BarcodeReaderBrand)))
+            {
+                if ((BarcodeReaderBrand)brand != BarcodeReaderBrand.Unsupported)
+                {
+                    cmbBrand.Items.Add(brand);
+                }
+            }
+
+            if (cmbBrand.Items.Count > 0)
+                cmbBrand.SelectedIndex = 0;
+
+            UpdateUIStatus();
+        }
+
+        private void btnRefresh_Click(object sender, EventArgs e)
+        {
+            try
+            {
+                if (cmbBrand.SelectedItem == null) return;
+
+                var brand = (BarcodeReaderBrand)cmbBrand.SelectedItem;
+                using (var tempReader = BarcodeReaderFactory.CreateReader(brand))
+                {
+                    var devices = tempReader.GetDeviceList();
+                    cmbSN.Items.Clear();
+                    if (devices != null && devices.Count > 0)
+                    {
+                        cmbSN.Items.AddRange(devices.ToArray());
+                        cmbSN.SelectedIndex = 0;
+                    }
+                }
+                lblStatus.Text = $"璁惧鍒楄〃宸插埛鏂帮紝鎵惧埌 {cmbSN.Items.Count} 涓澶�";
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show($"鍒锋柊璁惧鍒楄〃澶辫触: {ex.Message}", "閿欒", MessageBoxButtons.OK, MessageBoxIcon.Error);
+            }
+        }
+
+        private void btnOpen_Click(object sender, EventArgs e)
+        {
+            try
+            {
+                if (cmbSN.SelectedItem == null && string.IsNullOrEmpty(cmbSN.Text))
+                {
+                    MessageBox.Show("璇烽�夋嫨鎴栬緭鍏ヨ澶囧簭鍒楀彿");
+                    return;
+                }
+
+                _currentSN = cmbSN.Text;
+                var brand = (BarcodeReaderBrand)cmbBrand.SelectedItem;
+
+                if (_reader != null)
+                {
+                    _reader.BarcodeRead -= Reader_BarcodeRead;
+                    _reader.Dispose();
+                }
+
+                _reader = BarcodeReaderFactory.CreateReader(brand);
+                _reader.BarcodeRead += Reader_BarcodeRead;
+
+                if (_reader.Open(_currentSN))
+                {
+                    lblStatus.Text = $"璁惧 {_currentSN} 宸叉墦寮�";
+                    UpdateUIStatus();
+                }
+                else
+                {
+                    MessageBox.Show("璁惧鎵撳紑澶辫触锛岃妫�鏌ヨ繛鎺ユ垨鍗犵敤鐘舵��");
+                }
+            }
+            catch (Exception ex)
+            {
+                MessageBox.Show($"鎵撳紑璁惧寮傚父: {ex.Message}");
+            }
+        }
+
+        private void btnClose_Click(object sender, EventArgs e)
+        {
+            if (_reader != null)
+            {
+                _reader.Close();
+                lblStatus.Text = "璁惧宸插叧闂�";
+                UpdateUIStatus();
+            }
+        }
+
+        private void btnStart_Click(object sender, EventArgs e)
+        {
+            if (_reader != null && _reader.IsConnected)
+            {
+                // 璁剧疆瑙﹀彂妯″紡锛堟牴鎹� UI 閫夋嫨锛�
+                _reader.SetTriggerMode(radSoftTrigger.Checked);
+                
+                if (_reader.StartGrabbing())
+                {
+                    lblStatus.Text = "閲囬泦宸插紑濮�";
+                    UpdateUIStatus();
+                }
+            }
+        }
+
+        private void btnStop_Click(object sender, EventArgs e)
+        {
+            if (_reader != null && _reader.IsGrabbing)
+            {
+                if (_reader.StopGrabbing())
+                {
+                    lblStatus.Text = "閲囬泦宸插仠姝�";
+                    UpdateUIStatus();
+                }
+            }
+        }
+
+        private void btnSoftTrigger_Click(object sender, EventArgs e)
+        {
+            if (_reader != null && _reader.IsGrabbing)
+            {
+                _reader.SoftTrigger();
+                lblStatus.Text = "宸叉墽琛岃蒋瑙﹀彂";
+            }
+            else
+            {
+                lblStatus.Text = "璇峰厛寮�濮嬮噰闆嗗啀鎵ц瑙﹀彂";
+            }
+        }
+
+        private void radTrigger_CheckedChanged(object sender, EventArgs e)
+        {
+            if (_reader != null && _reader.IsConnected)
+            {
+                _reader.SetTriggerMode(radSoftTrigger.Checked);
+                lblStatus.Text = radSoftTrigger.Checked ? "宸插垏鎹㈣嚦杞Е鍙戞ā寮�" : "宸插垏鎹㈣嚦纭Е鍙�/鑷姩妯″紡";
+            }
+        }
+
+        private void Reader_BarcodeRead(object sender, BarcodeEventArgs e)
+        {
+            // 寮傛鏇存柊 UI
+            if (this.InvokeRequired)
+            {
+                this.BeginInvoke(new Action<object, BarcodeEventArgs>(Reader_BarcodeRead), sender, e);
+                return;
+            }
+
+            try
+            {
+                // 鏇存柊缁撴灉鍒楄〃
+                lstBarcodes.Items.Clear();
+                if (e.BarcodeInfos != null && e.BarcodeInfos.Count > 0)
+                {
+                    foreach (var info in e.BarcodeInfos)
+                    {
+                        lstBarcodes.Items.Add($"{DateTime.Now:HH:mm:ss} - {info.Text}");
+                    }
+                }
+                else
+                {
+                    lstBarcodes.Items.Add($"{DateTime.Now:HH:mm:ss} - 鏈鍒版潯鐮�");
+                }
+
+                // 鏇存柊棰勮鍥惧儚骞剁粯鍒舵爣娉�
+                if (e.Image != null)
+                {
+                    // 鍒涘缓鏂颁綅鍥剧敤浜庣粯鍥撅紝涓嶇洿鎺ヤ慨鏀� SDK 浼犲叆鐨勫師鍥�
+                    Bitmap drawImg = new Bitmap(e.Image);
+                    using (Graphics g = Graphics.FromImage(drawImg))
+                    {
+                        // 璁剧疆缁樺浘璐ㄩ噺
+                        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
+                        
+                        using (Pen pen = new Pen(Color.LimeGreen, 3))
+                        using (SolidBrush brush = new SolidBrush(Color.LimeGreen))
+                        using (Font font = new Font("Arial", 16, FontStyle.Bold))
+                        {
+                            foreach (var info in e.BarcodeInfos)
+                            {
+                                if (info.Points != null && info.Points.Length >= 4)
+                                {
+                                    // 缁樺埗鍥涜竟褰㈡
+                                    g.DrawPolygon(pen, info.Points);
+
+                                    // 鍦ㄧ涓�涓偣涓婃柟缁樺埗鏉$爜鍐呭
+                                    // 璁$畻缁樺埗鏂囨湰鐨勪綅缃紙绋嶅井鍋忕Щ涓�鐐归槻姝㈣鐩栬竟妗嗭級
+                                    Point textPos = info.Points[0];
+                                    textPos.Y -= 25;
+                                    g.DrawString(info.Text, font, brush, textPos);
+                                }
+                            }
+                        }
+                    }
+
+                    // 閲婃斁鏃у浘鍍忥紝闃叉鍐呭瓨娉勬紡
+                    var oldImg = picPreview.Image;
+                    picPreview.Image = drawImg;
+                    oldImg?.Dispose();
+                }
+            }
+            catch (Exception ex)
+            {
+                // 闈欓粯澶勭悊 UI 鏇存柊寮傚父
+                Console.WriteLine($"UI鏇存柊寮傚父: {ex.Message}");
+            }
+        }
+
+        private void UpdateUIStatus()
+        {
+            bool isConnected = _reader?.IsConnected ?? false;
+            bool isGrabbing = _reader?.IsGrabbing ?? false;
+
+            btnOpen.Enabled = !isConnected;
+            btnClose.Enabled = isConnected;
+            cmbBrand.Enabled = !isConnected;
+            cmbSN.Enabled = !isConnected;
+            btnRefresh.Enabled = !isConnected;
+
+            btnStart.Enabled = isConnected && !isGrabbing;
+            btnStop.Enabled = isGrabbing;
+            btnSoftTrigger.Enabled = isGrabbing && radSoftTrigger.Checked;
+            
+            grpParams.Enabled = isConnected;
+        }
+
+        private void BarcodeReaderForm_FormClosing(object sender, FormClosingEventArgs e)
+        {
+            // 鍏抽棴鍓嶄繚瀛樺弬鏁板埌娴佺▼
+            if (_process != null)
+            {
+                _process.Params.Inputs["璁惧鍝佺墝"] = cmbBrand.Text;
+                _process.Params.Inputs["璁惧SN"] = cmbSN.Text;
+                _process.Params.Inputs["瑙﹀彂妯″紡"] = radSoftTrigger.Checked ? "杞Е鍙�" : "纭Е鍙�";
+                if (int.TryParse(txtTimeout.Text, out int timeout))
+                    _process.Params.Inputs["瓒呮椂鏃堕棿"] = timeout;
+
+                _process.Save(_processPath);
+            }
+
+            if (_reader != null)
+            {
+                if (_reader.IsGrabbing) _reader.StopGrabbing();
+                _reader.Close();
+                _reader.BarcodeRead -= Reader_BarcodeRead;
+                _reader.Dispose();
+                _reader = null;
+            }
+        }
+    }
+}

--
Gitblit v1.9.3