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