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