From 46431fb658701489f8d5de4475b02df728c51f36 Mon Sep 17 00:00:00 2001
From: chunxiaqiu <1057644574@qq.com>
Date: 星期三, 18 三月 2026 15:48:26 +0800
Subject: [PATCH] 新增:读码器功能模块,集成华睿读码器并初步实现读码功能
---
LB_SmartVision/Forms/Pages/ProcessPage/AllProcessesPage.cs | 150 +++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 130 insertions(+), 20 deletions(-)
diff --git a/LB_SmartVision/Forms/Pages/ProcessPage/AllProcessesPage.cs b/LB_SmartVision/Forms/Pages/ProcessPage/AllProcessesPage.cs
index 01ab907..74e7fc7 100644
--- a/LB_SmartVision/Forms/Pages/ProcessPage/AllProcessesPage.cs
+++ b/LB_SmartVision/Forms/Pages/ProcessPage/AllProcessesPage.cs
@@ -9,7 +9,12 @@
public partial class AllProcessesPage : TabPage
{
public ObservableConcurrentDictionary<string, ProcessControl> dicProcessControls = new ObservableConcurrentDictionary<string, ProcessControl>();
-
+ // 淇濆瓨鎺т欢鍘熷甯冨眬锛堝昂瀵�+浣嶇疆锛夛紝鐢ㄤ簬鎭㈠鐭╅樀甯冨眬
+ private Dictionary<string, (Size Size, Point Location)> _originalControlLayouts = new Dictionary<string, (Size, Point)>();
+ // 鏍囪鏄惁澶勪簬鍏ㄥ睆鐘舵��
+ private bool _isFullScreen = false;
+ // 璁板綍褰撳墠鍏ㄥ睆鐨勬帶浠舵爣棰�
+ private string _fullScreenControlTitle = string.Empty;
/// <summary>
/// 瀹炰緥鍖栨祦绋嬬晫闈�
/// </summary>
@@ -49,8 +54,16 @@
{
if (dicProcessControls.ContainsKey(title))
{
+ // 绉婚櫎鍓嶅厛瑙g粦浜嬩欢锛岄伩鍏嶅唴瀛樻硠婕�
+ var control = dicProcessControls[title];
+ control.event_MouseDoubleClick -= ProcessControl_DoubleClick;
+
this.controlsPanel.Controls.Remove(dicProcessControls[title]);
dicProcessControls.TryRemove(title, out _);
+
+ // 绉婚櫎鍘熷甯冨眬璁板綍
+ if (_originalControlLayouts.ContainsKey(title))
+ _originalControlLayouts.Remove(title);
}
}
}
@@ -61,45 +74,142 @@
if (GlobalVar.dicProcesses.ContainsKey(layout.ProcessName))
enableLayout++;
}
-
+ //鎬昏鏁帮紝鍚戜笅鍙栨暣
+ int matrixRows = (int)Math.Floor(Math.Sqrt(enableLayout));
+ if (enableLayout == 0 || matrixRows == 0)
+ {
+ _originalControlLayouts.Clear();
+ _isFullScreen = false;
+ _fullScreenControlTitle = string.Empty;
+ // 鏃犲惎鐢ㄥ竷灞�鏃剁洿鎺ヨ繑鍥烇紝閬垮厤闄ら浂閿欒
+ return;
+ }
+ //鎬诲垪鏁帮紝鍚戜笂鍙栨暣
+ int matrixColumns = (int)Math.Ceiling((double)enableLayout / matrixRows);
int index = 0;
+ // 璁$畻姣忎釜ProcessControl鐨勫昂瀵革紙鎸夎鍒楀潎鍒嗛潰鏉垮ぇ灏忥級
+ int controlWidth = this.controlsPanel.Width / matrixColumns;
+ int controlHeight = this.controlsPanel.Height / matrixRows;
+ // 姣忔閲嶆瀯甯冨眬鏃舵竻绌哄師濮嬭褰�
+ _originalControlLayouts.Clear();
for (int i = 0; i < GlobalVar.dicLayout.Count; i++)
{
string name = GlobalVar.dicLayout[i].ProcessName;
string title = GlobalVar.dicLayout[i].Title;
+
if (GlobalVar.dicProcesses.ContainsKey(name))
{
+ // 璁$畻褰撳墠鎺т欢鐨勮鍒楃储寮�
+ int colIndex = index % matrixColumns; // 鍒楃储寮曪紙0,1,0,1...锛�
+ int rowIndex = index / matrixColumns; // 琛岀储寮曪紙0,0,1,1...锛�
+ // 璁$畻鍘熷浣嶇疆鍜屽昂瀵革紙鐭╅樀甯冨眬锛�
+ Size originalSize = new Size(controlWidth, controlHeight);
+ Point originalLocation = new Point(colIndex * controlWidth, rowIndex * controlHeight);
+ ProcessControl processControl;
if (dicProcessControls.ContainsKey(title))
{
- ProcessControl processControl = dicProcessControls[title];
- processControl.Size
- = new Size(this.controlsPanel.Size.Width / enableLayout
- , this.controlsPanel.Size.Height);
- processControl.Location
- = new Point(processControl.Size.Width * index, 0);
-
- if (GlobalVar.dicProcesses[name].GetImage(GlobalVar.dicLayout[i], out _, out HObject RecordImage))
- dicProcessControls[title].ShowHoImage(RecordImage);
+ // 澶嶇敤宸叉湁鎺т欢锛屾洿鏂板昂瀵稿拰浣嶇疆
+ processControl = dicProcessControls[title];
+ processControl.Size = originalSize;
+ processControl.Location = originalLocation;
+ processControl.Visible = true;
+ // 瑙g粦鏃т簨浠讹紝閬垮厤閲嶅缁戝畾
+ processControl.event_MouseDoubleClick -= ProcessControl_DoubleClick;
}
else
{
- ProcessControl processControl = new ProcessControl(GlobalVar.dicLayout[i]);
- processControl.Size
- = new Size(this.controlsPanel.Size.Width / enableLayout
- , this.controlsPanel.Size.Height);
- processControl.Location
- = new Point(processControl.Size.Width * index, 0);
+ // 鏂板缓鎺т欢锛屾寜鐭╅樀甯冨眬璧嬪�煎昂瀵稿拰浣嶇疆
+ processControl = new ProcessControl(GlobalVar.dicLayout[i]);
+ processControl.Size = originalSize;
+ processControl.Location = originalLocation;
processControl.SetTitle(title);
+ // 娣诲姞鍒板瓧鍏稿拰闈㈡澘
dicProcessControls.TryAdd(title, processControl);
this.controlsPanel.Controls.Add(processControl);
- if (GlobalVar.dicProcesses[name].GetImage(GlobalVar.dicLayout[i], out _, out HObject RecordImage))
- dicProcessControls[title].ShowHoImage(RecordImage);
}
- index++;
+
+ // 缁戝畾鍙屽嚮浜嬩欢锛堝乏閿級鍜岄紶鏍囨寜涓嬩簨浠讹紙鍙抽敭鍙屽嚮锛�
+ processControl.event_MouseDoubleClick += ProcessControl_DoubleClick;
+
+ // 淇濆瓨鍘熷甯冨眬锛堢煩闃电姸鎬侊級
+ _originalControlLayouts[title] = (originalSize, originalLocation);
+
+ // 鏇存柊鍥剧墖
+ if (GlobalVar.dicProcesses[name].GetImage(GlobalVar.dicLayout[i], out _, out HObject recordImage))
+ dicProcessControls[title].ShowHoImage(recordImage);
+
+ index++; // 浠呭惎鐢ㄧ殑甯冨眬绱㈠紩閫掑
+ }
+ }
+ // 濡傛灉褰撳墠鏄叏灞忕姸鎬侊紝鎭㈠鐭╅樀甯冨眬鍚庨噸缃姸鎬�
+ if (_isFullScreen)
+ {
+ _isFullScreen = false;
+ _fullScreenControlTitle = string.Empty;
+ }
+ }
+ #region 鍙屽嚮浜嬩欢澶勭悊锛堝叏灞�/鎭㈠甯冨眬锛�
+ /// <summary>
+ /// 宸﹂敭鍙屽嚮浜嬩欢锛氬叏灞忔樉绀哄綋鍓峆rocessControl
+ /// </summary>
+ private void ProcessControl_DoubleClick(object sender, EventArgs e)
+ {
+ if (_isFullScreen)
+ {
+ RestoreMatrixLayout();
+ return;
+ }
+
+ var targetControl = sender as ProcessControl;
+ if (targetControl == null || string.IsNullOrEmpty(targetControl.Title)) return;
+
+ // 璁板綍鍏ㄥ睆鐨勬帶浠舵爣棰�
+ _fullScreenControlTitle = targetControl.Title;
+ _isFullScreen = true;
+
+ // 闅愯棌鎵�鏈夊叾浠朠rocessControl锛屼粎鏄剧ず鐩爣鎺т欢
+ foreach (var kvp in dicProcessControls)
+ {
+ if (kvp.Key != _fullScreenControlTitle)
+ {
+ kvp.Value.Visible = false;
+ }
+ else
+ {
+ // 鐩爣鎺т欢璁句负闈㈡澘澶у皬锛屼綅缃�(0,0)锛堝叏灞忥級
+ kvp.Value.Size = this.controlsPanel.Size;
+ kvp.Value.Location = new Point(0, 0);
+ kvp.Value.BringToFront(); // 纭繚鍦ㄦ渶涓婂眰
}
}
}
+
+ /// <summary>
+ /// 鎭㈠鐭╅樀甯冨眬锛堝鐢↖nitVisionUI鐨勬牳蹇冮�昏緫锛岄伩鍏嶄唬鐮侀噸澶嶏級
+ /// </summary>
+ private void RestoreMatrixLayout()
+ {
+ // 1. 閲嶇疆鍏ㄥ睆鐘舵��
+ _isFullScreen = false;
+ _fullScreenControlTitle = string.Empty;
+
+ // 2. 鎭㈠鎵�鏈夋帶浠剁殑鍘熷灏哄銆佷綅缃拰鍙鎬�
+ foreach (var kvp in dicProcessControls)
+ {
+ string title = kvp.Key;
+ var control = kvp.Value;
+
+ // 3. 浠庡師濮嬪竷灞�瀛楀吀涓仮澶嶅昂瀵稿拰浣嶇疆
+ if (_originalControlLayouts.TryGetValue(title, out var originalLayout))
+ {
+ control.Size = originalLayout.Size;
+ control.Location = originalLayout.Location;
+ }
+ control.Visible = true; // 鏄剧ず鎺т欢
+ }
+ }
+ #endregion
}
}
--
Gitblit v1.9.3