using CCWin.SkinControl;
using ClosedXML.Excel;
using DocumentFormat.OpenXml.EMMA;
using DocumentFormat.OpenXml.Office2010.ExcelAc;
using DocumentFormat.OpenXml.Office2019.Excel.RichData;
using DocumentFormat.OpenXml.Office2021.DocumentTasks;
using GeBoShi.SysCtrl;
using GeBoShi.UI;
using GeBoShi.UI.DataQuery;
using GeBoShi.UI.InageShow;
using GeBoShi.UI.Load;
using GeBoShi.UI.Product;
using GeBoShi.UI.SysSet;
using HalconDotNet;
using HZH_Controls;
using HZH_Controls.Controls;
using HZH_Controls.Forms;
using ImageToolKits;
using MaiMuControl;
using MaiMuControl.Device;
using MaiMuControl.Device.CamDev;
using Models;
using Newtonsoft.Json.Linq;
using OpenCvSharp;
using OpenCvSharp.Extensions;
using PG_Detect;
using Service;
using SqlSugar;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.IO.Ports;
using System.Linq;
using System.Linq.Expressions;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls.WebParts;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
namespace GeBoShi
{
public partial class Main : Form
{
[DllImport("user32.dll ", EntryPoint = "SetParent")]
private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); //将外部窗体嵌入程序
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpszClass, string lpszWindow); //按照窗体类名或窗体标题查找窗体
object AddTextLock = new object();
bool backgroundWorkerDo;
private Stopwatch RunStartTime = new Stopwatch();
///
/// 显示颜色现在对应30色,确保label在30个以内
///
Color[] ChartColor = new Color[30] { Color.Red, Color.Blue, Color.Green, Color.YellowGreen, Color.Orange,
Color.Peru, Color.DarkRed,Color.GreenYellow, Color.Pink , Color.Brown,
Color.CadetBlue, Color.OrangeRed, Color.Cyan, Color.Lime, Color.Magenta, Color.Tan, Color.Sienna,
Color.DarkGray, Color.SaddleBrown, Color.DarkBlue, Color.Firebrick,Color.Gainsboro,Color.Honeydew,Color.Khaki,Color.Lavender,
Color.LightGoldenrodYellow,Color.Navy, Color.Khaki, Color.IndianRed,Color.Lavender};
Process process = null;
IntPtr appWin;
public Main()
{
InitializeComponent();
UIStyle.SetUIStyle(this);
this.uiTitel1.FatherForm = this;
//this.uiTitel1.UserMenuStrip = this.menuStrip1;
this.uiTitel1.ShowContrlBox(true, true, true);
this.uiTitel1.ShowMenu();
this.DoubleBuffered = true;//设置本窗体
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲
SysMgr.Instance.MainRuning += main_running;
SysMgr.Instance.AutoRuning += auto_runing;
#region 缺陷列表dataGridView设置
skinDataGridView1.AllowUserToAddRows = skinDataGridView1.AllowUserToDeleteRows = false;//用户添加删除行
skinDataGridView1.AllowUserToResizeRows = false;//用户调整行大小 //显示行号与列宽度自动调整
skinDataGridView1.RowHeadersVisible = true;
skinDataGridView1.RowHeadersWidth = 50;
//dataGridView1.ColumnHeadersHeightSizeMode = dataGridView2.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
skinDataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;//数据量过百绑定太变
skinDataGridView1.RowTemplate.Height = 30;
//skinDataGridView1.RowPostPaint += (sender, e) =>//序号列头
//{
// showRowNum_onDataGrid_RowPostPaint(this.skinDataGridView1, sender, e);
//};
for (int i = 0; i < skinDataGridView1.Columns.Count; i++)//禁止点击列头排序
skinDataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
this.skinDataGridView1.CellClick += skinDataGridView1_CellClick; ;
#endregion
#region 标准列表dataGridView设置
dataGridView2.AutoGenerateColumns = false;//自动创建列
dataGridView2.AllowUserToAddRows = dataGridView1.AllowUserToDeleteRows = false;//用户添加删除行
//dataGridView2.AllowUserToResizeRows = true;//用户调整行大小
// //dataGridView1.AllowUserToResizeColumns = false;//用户调整列大小
// //显示行号与列宽度自动调整
//dataGridView2.RowHeadersVisible = true;
//dataGridView2.RowHeadersWidth = 62;
//dataGridView2.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;//数据量过百绑定太变
//dataGridView2.RowPostPaint += (sender, e) =>//序号列头
//{
// SysMgr.showRowNum_onDataGrid_RowPostPaint(this.dataGridView2, sender, e);
//};
//dataGridView2.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
panel_jcbz.Visible = false;
panel_jcbz.Location = new System.Drawing.Point(0, 0);
panel_jcbz.Dock = DockStyle.Fill;
#endregion
//设置图标大小
this.lineChartDefect.Size = new System.Drawing.Size(600, 800);
this.lineChartFaceWidth.Size = new System.Drawing.Size(1000, 300);
#region 数据查询dataGridView设置
uiDataGridView1.AutoGenerateColumns = false;//自动创建列
uiDataGridView1.AllowUserToAddRows = uiDataGridView1.AllowUserToDeleteRows = false;//用户添加删除行
uiDataGridView1.AllowUserToResizeRows = true;//用户调整行大小
uiDataGridView1.AllowUserToResizeColumns = false;//用户调整列大小
uiDataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;//只可选中整行,不是单元格
//显示行号与列宽度自动调整
uiDataGridView1.RowHeadersVisible = true;
uiDataGridView1.RowHeadersWidth = 30;
uiDataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;//数据量过百绑定太变
uiDataGridView1.RowPostPaint += (sender, e) =>//序号列头
{
SysMgr.showRowNum_onDataGrid_RowPostPaint(this.uiDataGridView1, sender, e);
};
uiDataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
//for (int i = 0; i < dataGridView1.Columns.Count; i++)//禁止点击列头排序
// uiDataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable;
//行列交叉处标题
//if (uiDataGridView1.RowHeadersVisible) uiDataGridView1.TopLeftHeaderCell.Value = "SPH/CYL";
//事件
this.uiDataGridView1.DataBindingComplete += this.uiDataGridView1_DataBindingComplete;//bing data时发生,可修改单元格内容
//this.uiDataGridView1.SelectIndexChange += uiDataGridView1_SelectIndexChange;//选择行时发行
//this.uiDataGridView1.CellClick += UiDataGridView1_CellClick;
#endregion
//this.lblDefectLen.Top = toolStrip1.Top + 10;
//this.lblDefectLen.Left = toolStrip1.Width - 300;
//this.lblDefectSpeed.Top = toolStrip1.Top + 10 + lblDefectLen.Height + 5;
//this.lblDefectSpeed.Left = toolStrip1.Width - 300;
this.lbFK.Text = "当前幅宽:";
this.skinTabControl1.SelectedIndex = 0;
}
#region 初始化
///
/// 初始化
///
///
private bool InitSystem()
{
//进入初始化,初始化失败则中断
InitFrm initFrm = new InitFrm();
initFrm.ShowDialog();
if (initFrm.DialogResult == DialogResult.OK)
{
//初始化成功
}
else
{
initFrm.Dispose();
return false;
}
initFrm.Dispose();
return true;
}
#endregion
#region 界面刷新
private void showRowNum_onDataGrid_RowPostPaint(DataGridView dgv, object sender, DataGridViewRowPostPaintEventArgs e)
{
Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, dgv.RowHeadersWidth - 4, e.RowBounds.Height);
TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), dgv.RowHeadersDefaultCellStyle.Font, rectangle, dgv.RowHeadersDefaultCellStyle.ForeColor, TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
}
private void ResetUI(bool clearSN)
{
//保持产品名称和料号
//txtProductName.Text = txtProductCode.Text = txtProductSN.Text = "";
if (clearSN)
cbPdtSN.Text = "";
//this.lstLog.Items.Clear();
this.tsbtnImpStop.Enabled = false;
this.tsbtnStart.Enabled = true;
this.tsbtnStop.Enabled = false;
this.cbPdtSN.Enabled = true;
this.cbPdtColor.Enabled = true;
this.numPdtLength.Enabled = true;
this.pictureBox1.Image = null;
pictureBox1.Refresh();
tslabelTime.Text = "实时测试队列";
skinDataGridView1.DataSource = null;
this.skinDataGridView1.Rows.Clear();
ResetChart();
lblDefectLen.Text = $"检测长度: 0 米";
lblDefectSpeed.Text = $"检测速度: 0 米/分钟";
ucSwitch1.Checked = SysMgr.Instance.GetDefectPause();
ucSwitch2.Checked = SysMgr.Instance.GetDefectDB();
this.Refresh();
}
void ResetChart()
{
chart1.Series.Clear();
chart1.Series.Add("SELECT");
chart1.Series["SELECT"].ChartType = SeriesChartType.Point;
chart1.Series["SELECT"].MarkerSize = 25;
chart1.Series["SELECT"].MarkerColor = Color.Black;
chart1.Series["SELECT"].MarkerStyle = MarkerStyle.Star6;
//chart1.Series["SELECT"].Enabled = false;
chart1.ChartAreas[0].AxisX.Title = "宽度(cm)";
chart1.ChartAreas[0].AxisY.Title = "长度(m)";
chart3.Series.Clear();
chart3.Series.Add("面宽");
chart3.ChartAreas[0].AxisX.Title = "长度(m)";
chart3.ChartAreas[0].AxisY.Title = "宽度(cm)";
chart3.Series["面宽"].ChartType = SeriesChartType.Line;
chart3.Series["面宽"].MarkerSize = 5;
chart3.Series["面宽"].MarkerColor = Color.Blue;
chart3.Series["面宽"].MarkerStyle = MarkerStyle.Circle;
}
#endregion
#region 权限判断
private void UserRightCheck()
{
//this.tsmPdtMgr.Enabled = SysMgr.Instance.UserMgr.RightControl(MaiMuControl.SysStatusMgr.UserMgr.UserRightEnum.Product);
//this.tsmSysDataFind.Visible = SysMgr.Instance.UserMgr.RightControl(MaiMuControl.SysStatusMgr.UserMgr.UserRightEnum.Statistics);
//this.tsmUserList.Enabled = SysMgr.Instance.UserMgr.RightControl(MaiMuControl.SysStatusMgr.UserMgr.UserRightEnum.User);
//this.tsmUserRight.Enabled = SysMgr.Instance.UserMgr.RightControl(MaiMuControl.SysStatusMgr.UserMgr.UserRightEnum.Role);
//if (this.tsmUserList.Enabled == false && this.tsmUserRight.Enabled == false)
// this.tsmSysUserMgr.Visible = false;
//else
// this.tsmSysUserMgr.Visible = true;
//this.tsmDebug.Enabled = SysMgr.Instance.UserMgr.RightControl(MaiMuControl.SysStatusMgr.UserMgr.UserRightEnum.Debug);
//this.tsmSysSet.Enabled = SysMgr.Instance.UserMgr.RightControl(MaiMuControl.SysStatusMgr.UserMgr.UserRightEnum.ParamsSetting);
//if (this.tsmDebug.Enabled == false && this.tsmSysSet.Enabled == false)
// this.stmSysSet.Visible = false;
//else
// this.stmSysSet.Visible = true;
}
#endregion
#region 运行判断
///
/// 系统是否在运行
///
///
private bool SystemIsRun()
{
//if (SysMgr.Instance.IsRuning)
//{
// FrmDialog.ShowDialog(this, "设备正在运行中!", "警告", false);
// //MessageBox.Show("设备正在运行中!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
// return false;
//}
return true;
}
#endregion
#region 界面事件
private void Main_Load(object sender, EventArgs e)
{
//登入
if (SysMgr.Instance.LoginSystem())
{
//登入成功
if (InitSystem())
{
this.Cursor = Cursors.WaitCursor;
//this.WindowState = FormWindowState.Normal;
this.Top = 0;
this.Left = 0;
this.Width = SystemInformation.WorkingArea.Width;
this.Height = SystemInformation.WorkingArea.Height;
//this.WindowState = FormWindowState.Maximized;
//this.splitContainer1.SplitterDistance = this.Width / 3;
ResetUI(true);
this.Show();
this.tsslLoginInfo.Text = $"操作员:{SysMgr.Instance.UserMgr.LoginUser.Code}({SysMgr.Instance.UserMgr.LoginUser.Name})";
this.statusStrip1.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.HorizontalStackWithOverflow;
this.tsslLoginTime.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
this.tsslLoginInfo.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right;
this.tsState.Text = "";
//更新数据库格式
Service.InitDB.initDB(ConfMgr.Instance.DBConStr);
//权限判断
UserRightCheck();
//开启后台
//timer1.Enabled = true;
backgroundWorkerDo = true;
backgroundWorker1.RunWorkerAsync();
//s_BackWorker = true;
//backgroundWorker.RunWorkerAsync();
//开启云端连接
//SysMgr.Instance.InitCloudConnect();
//开启产品服务
//SysMgr.Instance.InitPdtService();
//开启处理事件反馈
SysMgr.Instance.InitDefectEvent();
//加载产品料号
SysMgr.Instance.LoadProductCodeList();
//加载产品选择
LoadPdtList(SysMgr.Instance.ProductCodeList);
this.Cursor = Cursors.Default;
//初次加载缺陷标准列表
InitDefectListDataView();
//激活OnPageChanged事件
pageCtrl1.OnPageChanged += new EventHandler(pagerControl1_OnPageChanged);
//加载串口
GetComPort();
//运行前检测磁盘空间
SysMgr.CheckDisk(this);
}
else
{
Application.Exit();
}
}
else
{
Application.Exit();
}
}
private void Main_FormClosing(object sender, FormClosingEventArgs e)
{
if (SystemIsRun())
{
DialogResult dr = DialogResult.Cancel;
if (SysMgr.Instance.IsInit)
{
dr = FrmDialog.ShowDialog(this, "确定要退出当前系统?", "警告", true);
}
else
dr = DialogResult.OK;
if (dr == DialogResult.Cancel)
{
e.Cancel = true;
}
else
{
backgroundWorkerDo = false;
//Thread.Sleep(300);
Thread.Sleep(300);
if (SysMgr.Instance.IsInit)
SysMgr.Instance.Close();
//SysMgr.Instance.MainRuning -= main_running;
}
}
else
e.Cancel = true;
}
private void Main_SizeChanged(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Maximized)
{
this.WindowState = FormWindowState.Normal;
this.Top = 0;
this.Left = 0;
this.Width = SystemInformation.WorkingArea.Width;
this.Height = SystemInformation.WorkingArea.Height;
}
}
#endregion
#region 菜单
#region 用户
#endregion
#region 系统设置
private void MainFrm_Paint(object sender, PaintEventArgs e)
{
}
#endregion
#endregion
#region 检测管理
private string[] pdtlistData;
private void LoadPdtList(List list)
{
this.cbPdtType.Items.Clear();
while (true)
{
bool bk = true;
for (int i = 0; i < list.Count; i++)
{
if (list[i] == null || string.IsNullOrEmpty(list[i]))
{
list.Remove(list[i]);
bk = false;
}
}
if (bk)
{
break;
}
}
this.pdtlistData = list.ToArray();
cbPdtType.Items.AddRange(pdtlistData);//比使用DataSource速度要快一些
this.cbPdtType.Text = "";
cbPdtType.Focus();
cbPdtType.SelectAll();
}
private void tsmPdtMgr_Click(object sender, EventArgs e)
{
if (SystemIsRun())
{
ProductListFrm frm = new ProductListFrm();
frm.ShowDialog();
//加载产品料号
SysMgr.Instance.LoadProductCodeList();
//加载产品选择
LoadPdtList(SysMgr.Instance.ProductCodeList);
}
}
#endregion
#region 显示图像和消息
///
/// 异步输出日志
///
/// 模板标识
/// 内容
///
private void AddTextEvent(string tag, string msg, WarningEnum level = WarningEnum.Normal, bool Show = true)
{
lock (AddTextLock)
{
if (tag != null && tag != "")
tag = $" - [{tag}]";
var now = DateTime.Now;
msg = now.ToString("HH:mm:ss fff") + tag + " - " + msg;
syslog.Text = msg;
syslog.ForeColor = level == WarningEnum.Normal ? Color.White : level == WarningEnum.Low ? Color.Yellow : Color.Red;
}
}
private void main_running(object sender, MainEventArgs e)
{
ShowMessage(e);
}
private delegate void ShowMessageDelegate(MainEventArgs e);
private void ShowMessage(MainEventArgs e)
{
if (InvokeRequired)
{
ShowMessageDelegate smd = new ShowMessageDelegate(ShowMessage);
this.BeginInvoke(smd, e);
}
else
{
AddTextEvent(e.Tag, e.Message, e.Warning, e.show);
}
}
///
/// 自动运行流程显示
///
///
///
private void auto_runing(object sender, RunEventArgs e)
{
ShowUIEvent(e);
}
private delegate void ShowUIEventDelegate(RunEventArgs e);
Bitmap bmp0;
Bitmap bmp1;
Bitmap bmp2;
private void ReDrawDefectPoints(List