From 219cd35a6af85011914a841d6c8895e6f55e0c83 Mon Sep 17 00:00:00 2001 From: Nicola Pievani Date: Mon, 25 Aug 2025 10:01:18 +0200 Subject: [PATCH] Migliorata pagina configurazioni --- ...harpLibrary.csproj.AssemblyReference.cache | Bin 3968 -> 1047 bytes ...harpLibrary.csproj.CoreCompileInputs.cache | 2 +- ...SharpLibrary.csproj.GenerateResource.cache | Bin 320 -> 320 bytes ...harpLibrary.csproj.AssemblyReference.cache | Bin 4039 -> 1047 bytes ...SharpLibrary.csproj.GenerateResource.cache | Bin 320 -> 320 bytes CameraMng/FrmMain.designer.vb | 148 ++-- CameraMng/FrmMain.resx | 452 ++++++++---- CameraMng/FrmMain.vb | 135 ++-- CameraMng/My Project/AssemblyInfo.vb | 4 +- CameraMng/SetConfigForm.Designer.vb | 15 +- CameraMng/SetConfigForm.vb | 687 ++++++++++++------ CameraMng/bin/x64/Release/CameraMng.xml | 15 + CameraMng/clsCamera/clsCamera.vb | 2 +- .../CameraMng.vbproj.AssemblyReference.cache | Bin 7744 -> 4174 bytes .../CameraMng.vbproj.CoreCompileInputs.cache | 2 +- .../CameraMng.vbproj.GenerateResource.cache | Bin 1488 -> 1488 bytes .../DesignTimeResolveAssemblyReferences.cache | Bin 4717 -> 4717 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 2892 -> 3122 bytes CameraMng/obj/x64/Debug/FrmMain.resources | Bin 88960 -> 101230 bytes .../CameraMng.vbproj.AssemblyReference.cache | Bin 7843 -> 4178 bytes .../CameraMng.vbproj.CoreCompileInputs.cache | 2 +- .../CameraMng.vbproj.FileListAbsolute.txt | 1 + .../CameraMng.vbproj.GenerateResource.cache | Bin 1199 -> 1488 bytes CameraMng/obj/x64/Release/CameraMng.xml | 15 + CameraMng/obj/x64/Release/FrmMain.resources | Bin 96399 -> 101230 bytes CameraMng/obj/x64/Release/Resources.resources | Bin 62423 -> 66209 bytes 26 files changed, 976 insertions(+), 504 deletions(-) diff --git a/CSharpLibrary/obj/x64/Debug/CSharpLibrary.csproj.AssemblyReference.cache b/CSharpLibrary/obj/x64/Debug/CSharpLibrary.csproj.AssemblyReference.cache index c48813de03c9c967221fef74dfefab5ec5348c94..386888dd793ec3782eeda56639791f4559702a78 100644 GIT binary patch delta 55 zcmZpWpUyGifgc5cTj8l^{T+Tzbn9BxDt}LeN7|l{PmjR96KdqiW+$!m8`tuxmG@m!7%v zL%8uLxN`4L!RxMzT>E0}t`r|4*|FY^-@G^Tdax1%0h|oC;}23yB}oS(%1{lSe}D7( zMSO@8l*kht>?(!nm{C;mdzwh0#3YMH#rrrH@+=My_K*JGoo|I3ajFs_86AhGi~$s< z1Zz8=uYUe15A5q#!p)7%S8oIO;^FjYp)yRHXTx3ny#Om!d2mmc)^fq6d05sSltlf$ zh>zE|u6~sN6e!QkF+;&8bec<&QNcSQ{(5(Ex%#)iT_N@j;-{2#!l_rL(V)ih*dNDx zBqJ?EKhQO}BD!}?iv=YBt2e?8kEzND8$!RNz4_DDdq155STh|zl7uUgXay;&?|fna z5AqZxP3*wd4cI=JT!$4g+vSbv=-{l`RdU*IAdawBF|d< z)6ngCuJ z?;qwoqbY{PuA_v}i!#@h1CM0I9#ml@$jo9g6k(*AGB+#00AZvUapWd2@VXpuyhXvsP delta 15 XcmX@Wbbx6>AnW3V+du7`81@PPH+l!+ diff --git a/CSharpLibrary/obj/x64/Release/CSharpLibrary.csproj.AssemblyReference.cache b/CSharpLibrary/obj/x64/Release/CSharpLibrary.csproj.AssemblyReference.cache index 1a1d7c465d9fc4cc3eb407c66113eee049e7d4fe..386888dd793ec3782eeda56639791f4559702a78 100644 GIT binary patch delta 56 zcmX>uKb>PjDH8+3#C=th6_^?)N3pg~UdG-sc@Ia|WPY9opjh@~Jw7ph1_nm1G7~)m LJ!1o7LrVq#8T}9~ literal 4039 zcmd5fgc5cTj8g_IAKa_KEckdRf>3PBH`Ds665sICe^M%BidgjLqNVb^X*FFkYT zhj8OhaOK{gf_G~dT>E0}T1pO)*S6m7ym>S8+<~s=d2l+|4c|*Kl_c&DDMQtN`t8-r zXWkTD%|;&V1%(+fU{{<|LQYx5GH%*=ygVV*!w@8oZ9ZNGT! z!RHo&2$m|rxF&?#nl^xL5hdKw5!U?RBEM;(_6*;@&cl<K_j`%TVjd02*(`aRmN9}REPZCl?^gVqBS44NNXtAIKVEtPE z{s~nnVFTzH+N*zcxo;;^02_J6k0s%XL|Q@0D$Yka;9(l0q>&xiW)6116O?mF6$U8J zXoSsRZ<6P}aMtpJ4unJt`m`3xmGh;=%E37k%NTi5Q$HPjl2xjoB4-~cAB%)YlL)bwS-h|agw!(@=vTCjg;CWvAM=4KejD9xjC}H&6_&U?@ zNRrJ#AbWfqpWd1scPB=?002762Y3Jg delta 17 ZcmX@Wbbx6>AUnggtp@-9U78s20sup|2*>~c diff --git a/CameraMng/FrmMain.designer.vb b/CameraMng/FrmMain.designer.vb index 74805fd..e3d451c 100644 --- a/CameraMng/FrmMain.designer.vb +++ b/CameraMng/FrmMain.designer.vb @@ -30,54 +30,55 @@ Partial Class FrmMain Me.LbFocalLenght = New System.Windows.Forms.Label() Me.TimerZoom = New System.Windows.Forms.Timer(Me.components) Me.GBImgFromCam = New System.Windows.Forms.GroupBox() - Me.BtnDefAree = New System.Windows.Forms.Button() - Me.BtnCorrLens = New System.Windows.Forms.Button() - Me.BtnCorrCompleta = New System.Windows.Forms.Button() - Me.GBCorrected = New System.Windows.Forms.GroupBox() - Me.BtnSave = New System.Windows.Forms.Button() - Me.GBCalibration = New System.Windows.Forms.GroupBox() - Me.Label3 = New System.Windows.Forms.Label() - Me.Label2 = New System.Windows.Forms.Label() - Me.Label1 = New System.Windows.Forms.Label() - Me.lbYmm = New System.Windows.Forms.Label() - Me.lbXmm = New System.Windows.Forms.Label() - Me.PictureBox2 = New System.Windows.Forms.PictureBox() - Me.LbAltRif = New System.Windows.Forms.Label() - Me.LbAltCali = New System.Windows.Forms.Label() - Me.PictureBox1 = New System.Windows.Forms.PictureBox() - Me.BtnAbortCal = New System.Windows.Forms.Button() - Me.BtnSaveCal = New System.Windows.Forms.Button() - Me.ToolStrip1 = New System.Windows.Forms.ToolStrip() - Me.BtnLoad = New System.Windows.Forms.ToolStripButton() - Me.cmdZoomAll = New System.Windows.Forms.ToolStripButton() - Me.BtnZoom11 = New System.Windows.Forms.ToolStripButton() - Me.BtnZoomPan = New System.Windows.Forms.ToolStripButton() - Me.BtnCorrProsp = New System.Windows.Forms.ToolStripButton() - Me.BtnCfg = New System.Windows.Forms.ToolStripButton() - Me.BtnBackG = New System.Windows.Forms.ToolStripButton() - Me.BtnEdgeFinder = New System.Windows.Forms.ToolStripButton() - Me.BtnChangeThreshold = New System.Windows.Forms.ToolStripButton() - Me.BtnIncrTh = New System.Windows.Forms.ToolStripButton() - Me.lbThreshold = New System.Windows.Forms.ToolStripLabel() - Me.btnSearch = New System.Windows.Forms.ToolStripButton() - Me.RefreshCameras = New System.Windows.Forms.ToolStripButton() - Me.StatusStrip1 = New System.Windows.Forms.StatusStrip() - Me.TStatus = New System.Windows.Forms.ToolStripStatusLabel() - Me.ProgressBar = New System.Windows.Forms.ToolStripProgressBar() - Me.lbMousePosmm = New System.Windows.Forms.ToolStripStatusLabel() - Me.TimerMain = New System.Windows.Forms.Timer(Me.components) - Me.GBDefAree = New System.Windows.Forms.GroupBox() - Me.BtnVentosa = New System.Windows.Forms.Button() - Me.BtnExpT = New System.Windows.Forms.Button() - Me.BtnStone = New System.Windows.Forms.Button() - Me.BtnAbortDefAree = New System.Windows.Forms.Button() - Me.BtnSaveAree = New System.Windows.Forms.Button() - Me.ComboBoxCameras = New System.Windows.Forms.ComboBox() - Me.ComboBoxCameraCfg = New System.Windows.Forms.ComboBox() - Me.ImageControl1 = New ImageControl() - Me.Button1 = New System.Windows.Forms.Button() + Me.BtnDefAree = New System.Windows.Forms.Button() + Me.BtnCorrLens = New System.Windows.Forms.Button() + Me.BtnCorrCompleta = New System.Windows.Forms.Button() + Me.GBCorrected = New System.Windows.Forms.GroupBox() + Me.BtnSave = New System.Windows.Forms.Button() + Me.GBCalibration = New System.Windows.Forms.GroupBox() + Me.Label3 = New System.Windows.Forms.Label() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label1 = New System.Windows.Forms.Label() + Me.lbYmm = New System.Windows.Forms.Label() + Me.lbXmm = New System.Windows.Forms.Label() + Me.PictureBox2 = New System.Windows.Forms.PictureBox() + Me.LbAltRif = New System.Windows.Forms.Label() + Me.LbAltCali = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.BtnAbortCal = New System.Windows.Forms.Button() + Me.BtnSaveCal = New System.Windows.Forms.Button() + Me.ToolStrip1 = New System.Windows.Forms.ToolStrip() + Me.BtnLoad = New System.Windows.Forms.ToolStripButton() + Me.cmdZoomAll = New System.Windows.Forms.ToolStripButton() + Me.BtnZoom11 = New System.Windows.Forms.ToolStripButton() + Me.BtnZoomPan = New System.Windows.Forms.ToolStripButton() + Me.BtnCorrProsp = New System.Windows.Forms.ToolStripButton() + Me.BtnCfg = New System.Windows.Forms.ToolStripButton() + Me.BtnBackG = New System.Windows.Forms.ToolStripButton() + Me.BtnEdgeFinder = New System.Windows.Forms.ToolStripButton() + Me.BtnChangeThreshold = New System.Windows.Forms.ToolStripButton() + Me.BtnIncrTh = New System.Windows.Forms.ToolStripButton() + Me.lbThreshold = New System.Windows.Forms.ToolStripLabel() + Me.btnSearch = New System.Windows.Forms.ToolStripButton() + Me.RefreshCameras = New System.Windows.Forms.ToolStripButton() + Me.StatusStrip1 = New System.Windows.Forms.StatusStrip() + Me.TStatus = New System.Windows.Forms.ToolStripStatusLabel() + Me.ProgressBar = New System.Windows.Forms.ToolStripProgressBar() + Me.lbMousePosmm = New System.Windows.Forms.ToolStripStatusLabel() + Me.TimerMain = New System.Windows.Forms.Timer(Me.components) + Me.GBDefAree = New System.Windows.Forms.GroupBox() + Me.BtnVentosa = New System.Windows.Forms.Button() + Me.BtnExpT = New System.Windows.Forms.Button() + Me.BtnStone = New System.Windows.Forms.Button() + Me.BtnAbortDefAree = New System.Windows.Forms.Button() + Me.BtnSaveAree = New System.Windows.Forms.Button() + Me.ComboBoxCameras = New System.Windows.Forms.ComboBox() + Me.ComboBoxCameraCfg = New System.Windows.Forms.ComboBox() Me.BtnEnd = New System.Windows.Forms.Button() Me.BtnTakeFoto = New System.Windows.Forms.Button() + Me.BtnShowMsg = New System.Windows.Forms.Button() + Me.ImageList2 = New System.Windows.Forms.ImageList(Me.components) + Me.ImageControl1 = New ImageControl() Me.GBImgFromCam.SuspendLayout() Me.GBCorrected.SuspendLayout() Me.GBCalibration.SuspendLayout() @@ -414,6 +415,35 @@ Partial Class FrmMain resources.ApplyResources(Me.ComboBoxCameraCfg, "ComboBoxCameraCfg") Me.ComboBoxCameraCfg.Name = "ComboBoxCameraCfg" ' + 'BtnEnd + ' + Me.BtnEnd.Image = Global.My.Resources.Resources._exit + resources.ApplyResources(Me.BtnEnd, "BtnEnd") + Me.BtnEnd.Name = "BtnEnd" + Me.BtnEnd.UseVisualStyleBackColor = True + ' + 'BtnTakeFoto + ' + resources.ApplyResources(Me.BtnTakeFoto, "BtnTakeFoto") + Me.BtnTakeFoto.ImageList = Me.ImageList1 + Me.BtnTakeFoto.Name = "BtnTakeFoto" + Me.BtnTakeFoto.UseVisualStyleBackColor = True + ' + 'BtnShowMsg + ' + resources.ApplyResources(Me.BtnShowMsg, "BtnShowMsg") + Me.BtnShowMsg.ImageList = Me.ImageList2 + Me.BtnShowMsg.Name = "BtnShowMsg" + Me.BtnShowMsg.UseVisualStyleBackColor = True + ' + 'ImageList2 + ' + Me.ImageList2.ImageStream = CType(resources.GetObject("ImageList2.ImageStream"), System.Windows.Forms.ImageListStreamer) + Me.ImageList2.TransparentColor = System.Drawing.Color.Transparent + Me.ImageList2.Images.SetKeyName(0, "accept.png") + Me.ImageList2.Images.SetKeyName(1, "cross.png") + Me.ImageList2.Images.SetKeyName(2, "warning.png") + ' 'ImageControl1 ' resources.ApplyResources(Me.ImageControl1, "ImageControl1") @@ -431,31 +461,12 @@ Partial Class FrmMain Me.ImageControl1.ZoomFactor = 1.0R Me.ImageControl1.ZoomOnMouseWheel = True ' - 'Button1 - ' - resources.ApplyResources(Me.Button1, "Button1") - Me.Button1.Name = "Button1" - Me.Button1.UseVisualStyleBackColor = True - ' - 'BtnEnd - ' - Me.BtnEnd.Image = Global.My.Resources.Resources._exit - resources.ApplyResources(Me.BtnEnd, "BtnEnd") - Me.BtnEnd.Name = "BtnEnd" - Me.BtnEnd.UseVisualStyleBackColor = True - ' - 'BtnTakeFoto - ' - resources.ApplyResources(Me.BtnTakeFoto, "BtnTakeFoto") - Me.BtnTakeFoto.ImageList = Me.ImageList1 - Me.BtnTakeFoto.Name = "BtnTakeFoto" - Me.BtnTakeFoto.UseVisualStyleBackColor = True - ' 'FrmMain ' resources.ApplyResources(Me, "$this") Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.Controls.Add(Me.Button1) + Me.BackColor = System.Drawing.SystemColors.Control + Me.Controls.Add(Me.BtnShowMsg) Me.Controls.Add(Me.ComboBoxCameraCfg) Me.Controls.Add(Me.ComboBoxCameras) Me.Controls.Add(Me.GBDefAree) @@ -538,5 +549,6 @@ Partial Class FrmMain Friend WithEvents ComboBoxCameras As ComboBox Friend WithEvents ComboBoxCameraCfg As ComboBox Friend WithEvents RefreshCameras As ToolStripButton - Friend WithEvents Button1 As Button + Friend WithEvents BtnShowMsg As Button + Friend WithEvents ImageList2 As ImageList End Class diff --git a/CameraMng/FrmMain.resx b/CameraMng/FrmMain.resx index 1621497..b0afe68 100644 --- a/CameraMng/FrmMain.resx +++ b/CameraMng/FrmMain.resx @@ -128,7 +128,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAS - TwAAAk1TRnQBSQFMAgEBCQEAAUwBAgFMAQIBMgEAATIBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + TwAAAk1TRnQBSQFMAgEBCQEAAZwBAgGcAQIBMgEAATIBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwAByAMAAZYDAAEBAQABCAUAATABdRgAAYACAAGAAwACgAEAAYADAAGAAQABgAEAAoACAAPAAQABwAHc AcABAAHwAcoBpgEAATMFAAEzAQABMwEAATMBAAIzAgADFgEAAxwBAAMiAQADKQEAA1UBAANNAQADQgEA AzkBAAGAAXwB/wEAAlAB/wEAAZMBAAHWAQAB/wHsAcwBAAHGAdYB7wEAAdYC5wEAAZABqQGtAgAB/wEz @@ -478,10 +478,13 @@ - 109, 519 + 145, 639 + + + 4, 0, 4, 0 - 0, 13 + 0, 16 25 @@ -505,10 +508,13 @@ NoControl - 381, 13 + 508, 16 + + + 4, 0, 4, 0 - 0, 13 + 0, 16 31 @@ -532,10 +538,13 @@ NoControl - 10, 175 + 13, 215 + + + 4, 4, 4, 4 - 60, 50 + 80, 62 43 @@ -556,10 +565,13 @@ NoControl - 10, 109 + 13, 134 + + + 4, 4, 4, 4 - 60, 50 + 80, 62 42 @@ -580,10 +592,13 @@ NoControl - 10, 28 + 13, 34 + + + 4, 4, 4, 4 - 60, 50 + 80, 62 39 @@ -601,10 +616,16 @@ 2 - 500, 140 + 667, 172 + + + 4, 4, 4, 4 + + + 4, 4, 4, 4 - 80, 302 + 107, 372 44 @@ -690,10 +711,13 @@ NoControl - 14, 240 + 19, 295 + + + 4, 4, 4, 4 - 60, 50 + 80, 62 22 @@ -711,10 +735,16 @@ 0 - 598, 140 + 797, 172 + + + 4, 4, 4, 4 + + + 4, 4, 4, 4 - 80, 302 + 107, 372 45 @@ -738,10 +768,13 @@ NoControl - 27, 172 + 36, 212 + + + 4, 0, 4, 0 - 69, 13 + 88, 16 56 @@ -768,10 +801,13 @@ NoControl - 6, 218 + 8, 268 + + + 4, 0, 4, 0 - 14, 13 + 16, 16 55 @@ -798,10 +834,13 @@ NoControl - 6, 190 + 8, 234 + + + 4, 0, 4, 0 - 14, 13 + 15, 16 54 @@ -828,10 +867,13 @@ NoControl - 24, 217 + 32, 267 + + + 4, 0, 4, 0 - 76, 21 + 101, 26 53 @@ -855,10 +897,13 @@ NoControl - 24, 187 + 32, 230 + + + 4, 0, 4, 0 - 76, 21 + 101, 26 52 @@ -879,10 +924,13 @@ NoControl - 12, 100 + 16, 123 + + + 4, 4, 4, 4 - 65, 40 + 87, 49 51 @@ -906,10 +954,13 @@ NoControl - 12, 143 + 16, 176 + + + 4, 0, 4, 0 - 65, 21 + 87, 26 50 @@ -933,10 +984,13 @@ NoControl - 12, 53 + 16, 65 + + + 4, 0, 4, 0 - 65, 21 + 87, 26 49 @@ -957,10 +1011,13 @@ NoControl - 12, 23 + 16, 28 + + + 4, 4, 4, 4 - 65, 27 + 87, 33 48 @@ -981,10 +1038,13 @@ NoControl - 14, 266 + 19, 327 + + + 4, 4, 4, 4 - 60, 37 + 80, 46 24 @@ -1073,10 +1133,13 @@ NoControl - 12, 309 + 16, 380 + + + 4, 4, 4, 4 - 60, 50 + 80, 62 23 @@ -1094,10 +1157,16 @@ 10 - 684, 114 + 912, 140 + + + 4, 4, 4, 4 + + + 4, 4, 4, 4 - 108, 365 + 144, 449 46 @@ -1120,7 +1189,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABlSURBVDhPxZBRCsAwCEM9uufZJTdkWrpoaToKDbyvmodW + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAABlSURBVDhPxZBRCsAwCEM9uufZJTdkWrpoaToKDbyvmodW ZGdU9UZwZhgbrkJJWvmSjEsqOIFLMC54JVNBQRPgWgxJwCZKA4HdOsdKsUn+g6KARPG3wEiCVUlX/gpW SAJP/8ByOA85jMsZFmo5BQAAAABJRU5ErkJggg== @@ -1129,7 +1198,7 @@ Magenta - 24, 42 + 29, 42 Open picture @@ -1137,7 +1206,7 @@ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADjSURBVFhHxZTRDcIwDAU9Avv/MAojMBIoFQ+Vw2nslJiT + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAADjSURBVFhHxZTRDcIwDAU9Avv/MAojMBIoFQ+Vw2nslJiT nkQF9jupIWbzXMzsbmZXflGByh+vlEqwvFSiV14iMSpfKhEtXypBWFpOmQCLspmivXPBhdmk0YETs4s4 FzqY+9MuuCgK59rnoUT7gTf4K4FDiX25N5iFc/vdXxIs95KF88xbIlLekoXzXjaJ6BWbhfNeNoHoPZ+F 88zHOfAkBJ+jcK5bLigh+ByFc4fl4u8XUeOvV7GHFs3mNFyYzTLKinqUCvAvOsr0gTsiKrGkXIwklpaL @@ -1148,7 +1217,7 @@ Magenta - 24, 42 + 29, 42 Zoom All @@ -1156,7 +1225,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK YKyG2WBogqMYJQOtCEVRFBGdTBCJfRnkS4VaaWNT5sqx1BUxRXxDHYxAJLvkusEeBaPAB+5z4Jzn+t3X /aLhnEfjo8m+dCoa+7/C3O2Hqe0zDC+8KG+cRZHZhdzaaWTVTCLDMIY0vfM04Nfh77/G/sEhwpEDbO3t I7TxE8urEVy99fT/AL5gWDLrTB/hnF4XsW0khCu5ln8DmJliT2AXrcNBsU1gj/MH4nMeKwBrPktM28xM @@ -1172,7 +1241,7 @@ Magenta - 26, 42 + 32, 42 1:1 @@ -1181,7 +1250,7 @@ Magenta - 24, 42 + 29, 42 ToolStripButton1 @@ -1189,7 +1258,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK YKyG2WBogqMYJQOtCEVRFBGdTBCJfRnkS4VaaWNT5sqx1BUxRXxDHYxAJLvkusEeBaPAB+5z4Jzn+t3X /aLhnEfjo8m+dCoa+7/C3O2Hqe0zDC+8KG+cRZHZhdzaaWTVTCLDMIY0vfM04Nfh77/G/sEhwpEDbO3t I7TxE8urEVy99fT/AL5gWDLrTB/hnF4XsW0khCu5ln8DmJliT2AXrcNBsU1gj/MH4nMeKwBrPktM28xM @@ -1205,7 +1274,7 @@ Magenta - 70, 42 + 85, 42 Corr. Prosp @@ -1214,7 +1283,7 @@ Magenta - 24, 42 + 29, 42 Cfg @@ -1222,7 +1291,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK YKyG2WBogqMYJQOtCEVRFBGdTBCJfRnkS4VaaWNT5sqx1BUxRXxDHYxAJLvkusEeBaPAB+5z4Jzn+t3X /aLhnEfjo8m+dCoa+7/C3O2Hqe0zDC+8KG+cRZHZhdzaaWTVTCLDMIY0vfM04Nfh77/G/sEhwpEDbO3t I7TxE8urEVy99fT/AL5gWDLrTB/hnF4XsW0khCu5ln8DmJliT2AXrcNBsU1gj/MH4nMeKwBrPktM28xM @@ -1238,7 +1307,7 @@ Magenta - 72, 42 + 90, 42 Back Image @@ -1261,7 +1330,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK YKyG2WBogqMYJQOtCEVRFBGdTBCJfRnkS4VaaWNT5sqx1BUxRXxDHYxAJLvkusEeBaPAB+5z4Jzn+t3X /aLhnEfjo8m+dCoa+7/C3O2Hqe0zDC+8KG+cRZHZhdzaaWTVTCLDMIY0vfM04Nfh77/G/sEhwpEDbO3t I7TxE8urEVy99fT/AL5gWDLrTB/hnF4XsW0khCu5ln8DmJliT2AXrcNBsU1gj/MH4nMeKwBrPktM28xM @@ -1277,7 +1346,7 @@ Magenta - 30, 42 + 35, 42 Th- @@ -1285,7 +1354,7 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK YKyG2WBogqMYJQOtCEVRFBGdTBCJfRnkS4VaaWNT5sqx1BUxRXxDHYxAJLvkusEeBaPAB+5z4Jzn+t3X /aLhnEfjo8m+dCoa+7/C3O2Hqe0zDC+8KG+cRZHZhdzaaWTVTCLDMIY0vfM04Nfh77/G/sEhwpEDbO3t I7TxE8urEVy99fT/AL5gWDLrTB/hnF4XsW0khCu5ln8DmJliT2AXrcNBsU1gj/MH4nMeKwBrPktM28xM @@ -1301,7 +1370,7 @@ Magenta - 33, 42 + 39, 42 Th+ @@ -1328,7 +1397,7 @@ Magenta - 24, 42 + 29, 42 ToolStripButton1 @@ -1340,7 +1409,7 @@ 0, 0 - 795, 45 + 1060, 45 101 @@ -1364,7 +1433,7 @@ 479, 12 - 67, 17 + 86, 20 Not Started @@ -1373,19 +1442,22 @@ No - 150, 16 + 200, 18 - 30, 17 + 38, 20 X Y - 0, 550 + 0, 678 + + + 1, 0, 19, 0 - 795, 22 + 1060, 26 102 @@ -1412,10 +1484,13 @@ NoControl - 18, 111 + 24, 137 + + + 4, 4, 4, 4 - 60, 37 + 80, 46 29 @@ -1439,10 +1514,13 @@ NoControl - 18, 23 + 24, 28 + + + 4, 4, 4, 4 - 60, 37 + 80, 46 28 @@ -1466,10 +1544,13 @@ NoControl - 18, 66 + 24, 81 + + + 4, 4, 4, 4 - 60, 37 + 80, 46 27 @@ -1493,10 +1574,13 @@ NoControl - 16, 201 + 21, 247 + + + 4, 4, 4, 4 - 60, 37 + 80, 46 26 @@ -1585,10 +1669,13 @@ NoControl - 16, 251 + 21, 309 + + + 4, 4, 4, 4 - 60, 50 + 80, 62 25 @@ -1606,10 +1693,16 @@ 4 - 586, 48 + 781, 59 + + + 4, 4, 4, 4 + + + 4, 4, 4, 4 - 97, 317 + 129, 390 103 @@ -1627,13 +1720,13 @@ 3 - 465, 10 + 620, 12 - 2, 2, 2, 2 + 3, 2, 3, 2 - 129, 21 + 171, 24 1 @@ -1651,13 +1744,13 @@ 2 - 598, 11 + 797, 14 - 2, 2, 2, 2 + 3, 2, 3, 2 - 81, 21 + 107, 24 0 @@ -1674,68 +1767,17 @@ 1 - - Top, Bottom, Left, Right - - - 15, 70 - - - 4, 4, 4, 4 - - - 546, 554 - - - 35 - - - ImageControl1 - - - ImageControl, CameraMng, Version=2.7.7.1, Culture=neutral, PublicKeyToken=null - - - $this - - - 10 - - - NoControl - - - 693, 11 - - - 87, 23 - - - 104 - - - Configurazione - - - Button1 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - $this - - - 0 - NoControl - 724, 504 + 965, 620 + + + 4, 4, 4, 4 - 60, 50 + 80, 62 22 @@ -1759,10 +1801,13 @@ NoControl - 696, 58 + 928, 71 + + + 4, 4, 4, 4 - 60, 50 + 80, 62 4 @@ -1779,6 +1824,120 @@ 13 + + 0 + + + 585, 9 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAB+ + CwAAAk1TRnQBSQFMAgEBAwEAAUgBAAFIAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wQAAf8B8wHvAa4CSAGQ + AfcB8gH/BQAC/wHzAQcBbwFGAWgBjgGTAfIC/wIAAf8B9AzyAfMB/xIAAfQB9wFJAXEBdwOcAZcBSQHs + AfMDAAH/AfQBBwGOAWoFZAGOAfcB8wH/AQAB8wGSBxwFcwHtAfARAAH/AewBbAF8BsABfAFPAesB8wIA + Af8BkwGOAWoBZAdqAY4B8wH/AewBmQyaAXQB6xEAAe8BAgPAAuQEwAHkAU8B7AH/AQABBwEWAWoBaQFo + AUYCRwFqAW8BbgFqAUcBkwH/AW0BmQWaAXMB7AWaAXkB6hAAAf8BZgGcAsABnAFsAUkBnATAAXwBSQHy + AfQBbwFHAUYB7wEZAe0BRgEXAewBvAEHAW8BRwFvAfIB8AFzBZoBcwHsBJoBegFzAQcQAAEHAUkCwAF8 + AUkBbQHrAUgBnATAAZcB9wG8AhcBbwEHAf8B8gHtAW4B8AH/AfABbgIXAQcB/wH3AZkEmgGfAZkEmgF6 + Ae0B9BAAARIBdwHAAZwBSAHrAQcB8AHsAUgBnAPAAZwBEgHtAxcBTAEHAf8B8wHyAf8B8AHtAxcB7QEA + AfIBcwGgA5oB7QHqAaACmgF6Ae0BBwH/EQABnAHAAUkBbQHxARUBDwH0AewBSAF8AsABnAFJAeoEFwFM + AbwC/wHyAewBTAMXAW4BAAH/Ae8BeAOaAewBEwGfApoBegHsAfQRAAEOAZwBwAFOARMDbAEQAQcB7AFJ + AXwBwAGcAUkBbgRNAe0B8AL/AfMB7QFvA00BTAEAAf8B8wHtAaACmgHsARMBnwGaAaAB6wHwAf8RAAHr + AXcBwAF8AXEBTwLAAXEBFQHvAesBSQHkAXcBbQGSAuMBdAHtAfAB/wHwAbwB/wHyAZIBdQLjAZMCAAH/ + AQcBcwKaAewBEwGfAZoBHAHtAf8SAAHwAUkHwAFPARUBFAFIAeQBcQHvAfABdAHjAXMB8AH/AfAB7QFz + AQcB/wHxAUsB4wFSAbwDAAH0AewBmQGaAesBFAKfAewB8xMAAf8BQwGcB8ABdwFsAsABbAHzAf8BkwF1 + AW8BkgG8AXQBUgF1AXMBBwEcAUwBdQF0AfMEAAHwAe0BmgEcAe0BmgFzAQcVAAG8AUkBnAfAAeQBwAFs + AfcB/wEAAfABdAFTAnQBUgN1AXQBbwFTAZkBvAH/BAAB/wHvAZkCmgGZAe0B9BUAAf8B7wFJAZwGwAGc + AQIB7AH0AgAB/wG8AVIBdQdTAXkBBwH0Af8FAAHyAZICnwHtAbwB/xYAAf8BBwFmAQIBdwKcAXcBbAFm + Ae8B/wMAAv8B8AF0AXkEdQF6AXQBvAH2Af8GAAH/AfABkgHtAQcB/xkAAf8BvAHrAg4BEgEHAf8IAAH/ + AfABHAFzAVABHAHwAfQKAAT/FgABQgFNAT4HAAE+AwABKAMAAUADAAEQAwABAQEAAQEFAAGAFwAD/wEA + AeABBwHAAQMEAAHAAQMBgAEBBAABgAEBAYAFAAGAAQABgBkAAYAHAAGAAQEGAAGAAQEGAAHAAQMGAAHg + AQcGAAHwAQ8CAAGAAQABgAEAAfABDwIAAYABAQGAAQAB+AEPAgABwAEDAYABAQH4AR8CAAHwAQ8B8AEP + AfwBPwIACw== + + + + NoControl + + + 912, 14 + + + 24, 24 + + + 105 + + + BtnShowMsg + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + Top, Bottom, Left, Right + + + 20, 86 + + + 5, 5, 5, 5 + + + 727, 681 + + + 35 + + + ImageControl1 + + + ImageControl, CameraMng, Version=2.7.8.1, Culture=neutral, PublicKeyToken=null + + + $this + + + 10 + True @@ -1786,10 +1945,13 @@ 25 - 6, 13 + 8, 16 - 795, 572 + 1060, 704 + + + 4, 4, 4, 4 CenterScreen @@ -1917,6 +2079,12 @@ System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ImageList2 + + + System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + FrmMain diff --git a/CameraMng/FrmMain.vb b/CameraMng/FrmMain.vb index 6fb9f21..0c48b72 100644 --- a/CameraMng/FrmMain.vb +++ b/CameraMng/FrmMain.vb @@ -23,6 +23,7 @@ Public Class FrmMain DefVentosa End Enum + ' Inn sequenza in funzione della gravità dell'errore Private Enum ReadCfgResult OK WARNING @@ -42,6 +43,8 @@ Public Class FrmMain m_sDataRoot = GetIniValue("Data", "DataRoot", Application.StartupPath & "\DataRoot.ini") End Sub + Private sMsgErr As String = String.Empty + Private m_Image As System.Drawing.Image Private m_ZoomFactor As Double ' Permette di aggiornare la pagina principale del programma 'SetFormStatus()' @@ -85,7 +88,7 @@ Public Class FrmMain End If Else BtnTakeFoto.ImageIndex = 1 - TStatus.Text = "--" + TStatus.Text = " --- " End If BtnCfg.Visible = bExtended @@ -93,6 +96,8 @@ Public Class FrmMain BtnVentosa.Visible = VacuumCheckEnable btnSearch.Visible = VacuumCheckEnable + ComboBoxCameras.Visible = False + Select Case status Case en_status.NoImage GBCalibration.Visible = False @@ -194,11 +199,11 @@ Public Class FrmMain Dim sTextMsg As String = String.Format("L'identificativo della camera della configurazione corrente non è disponibile. " & "Verificare che sia accessa oppure che esista. ") MessageBox.Show(sTextMsg, "Avvertenza", MessageBoxButtons.OK, MessageBoxIcon.Warning) - ComboBoxCameras.SelectedIndex = 0 + ComboBoxCameras.SelectedIndex = -1 End If ' Attivo la If Not ModalitaNascosta Then - Camera.Connect(ComboBoxCameras.SelectedItem) + If ComboBoxCameras.SelectedIndex > -1 Then Camera.Connect(ComboBoxCameras.SelectedItem) Else Camera.Connect(CameraID) End If @@ -224,18 +229,22 @@ Public Class FrmMain End If Next If Not IsCfgValid Then + 'If Not ModalitaNascosta Then ' Non esiste una configurazione Dim sTextMsg As String = String.Format("Nessuna configurazione presenta una connessione alla camera valida. " & - "Nel file 'CamaeraMng.cgf' il campo 'CameraID' è vuoto o non assente. ") - MessageBox.Show(sTextMsg, "Avvertenza", MessageBoxButtons.OK, MessageBoxIcon.Warning) - ComboBoxCameraCfg.SelectedIndex = 0 - End If + "Nel file 'CamaeraMng.cgf' il campo 'CameraID' è vuoto o assente. ") + MessageBox.Show(sTextMsg, "Avvertenza", MessageBoxButtons.OK, MessageBoxIcon.Warning) + ComboBoxCameraCfg.SelectedIndex = 0 + 'End If + End If Else + 'If Not ModalitaNascosta Then ' Non esiste una configurazione Dim sTextMsg As String = String.Format("Nella cartella '{0}' non sono state trovate configurazioni valide. " & "(CameraMng, CameraMng1, CameraMng2..)", sDataRoot) - MessageBox.Show(sTextMsg, "Avvertenza", MessageBoxButtons.OK, MessageBoxIcon.Warning) - Return False + MessageBox.Show(sTextMsg, "Avvertenza", MessageBoxButtons.OK, MessageBoxIcon.Warning) + Return False + 'End If End If Return True End Function @@ -264,7 +273,6 @@ Public Class FrmMain ProgressBar.Maximum = 100 ProgressBar.Value = 0 - SetFormStatus() ' carico elenco camere attive è creo la connessione LoadCamerasList() @@ -274,11 +282,6 @@ Public Class FrmMain SpessLastra = ImageMng.ZCali FrmStart.Close() - 'If Camera.Connected And RichiestaFoto Then - ' Camera.TakeFoto() - ' RichiestaFoto = False - 'End If - If VacuumCheckEnable Then TimerMain.Enabled = True End If @@ -399,36 +402,37 @@ Public Class FrmMain Next End Sub - ' Costruisco il percorso del file letto da configurazione - Private Sub IsCorrectFilePathReadFromCfg(DirToReadCfg As String, ByRef sStringPath As String, ByRef sMsg As String) - Dim bOk As ReadCfgResult = ReadCfgResult.OK - + ' Costruisco il percorso del file letto da configurazione: restituisco l'esito dell'operazione (Nel riferimento restituisco la sintesi dell'operazione di lettura) + Private Function IsCorrectFilePathReadFromCfg(DirToReadCfg As String, ByRef sStringPath As String, ByRef sMsg As String, ByRef CfgResult As ReadCfgResult) As ReadCfgResult + Dim CurrCfgResult As ReadCfgResult = ReadCfgResult.OK sStringPath = sStringPath.Trim If Not sStringPath.StartsWith("\") And Not sStringPath.StartsWith(".\") Then ' Warning! il percorso potrebbe non essere relativo If sStringPath.Contains("CameraMng") Then ' Errore! il percorso contiene un riferimento alla cartella - bOk = ReadCfgResult.ERR0 + CurrCfgResult = ReadCfgResult.ERR0 Else - bOk = ReadCfgResult.WARNING + CurrCfgResult = ReadCfgResult.WARNING sStringPath = DirToReadCfg & "\" & sStringPath End If Else ' OK! il percorso è potenzialmente correto If sStringPath.Contains("\CameraMng") Then ' Errore! il percorso contiene un riferimento alla cartella - bOk = ReadCfgResult.ERR1 + CurrCfgResult = ReadCfgResult.ERR1 Else ' rimuovo il primo carattere se è il punto (".") If sStringPath.StartsWith(".") Then sStringPath.Remove(0, 1) ' Ok! il percorso è accettato - bOk = ReadCfgResult.OK + CurrCfgResult = ReadCfgResult.OK sStringPath = DirToReadCfg & sStringPath End If End If - CreateMsgTextErr(bOk, sStringPath, sMsg) - - End Sub + CreateMsgTextErr(CurrCfgResult, sStringPath, sMsg) + ' Valuto se il risultato restituito deve modificare il + CfgResult = SetIcoResultCfg(CfgResult, CurrCfgResult) + Return CurrCfgResult + End Function Private Sub CreateMsgTextErr(ReadCfg As ReadCfgResult, sStringPath As String, ByRef sMsg As String) Select Case ReadCfg @@ -441,6 +445,13 @@ Public Class FrmMain End Select End Sub + Private Function SetIcoResultCfg(ResultCfg As ReadCfgResult, CurrResultCfg As ReadCfgResult) As ReadCfgResult + If CurrResultCfg > ResultCfg Then + ResultCfg = CurrResultCfg + End If + Return ResultCfg + End Function + ' procedo alla lettura del file *.cfg Private Sub LeggiFileConfigurazione() @@ -462,7 +473,8 @@ Public Class FrmMain DirToReadCfg = DirToReadCfg & MainModule.IndexProc End If - Dim sMsgErr As String = String.Empty + Dim CfgResult As ReadCfgResult = ReadCfgResult.OK + sMsgErr = String.Empty ' Console.WriteLine("LETTURA CONFIGURAZIONE: " & MainModule.IndexProc & " -- " & DirToReadCfg) @@ -493,6 +505,7 @@ Public Class FrmMain VacDirModels = "" bExtended = False bBtnLoad = False + CameraID = "" reader = New StreamReader(NomeFileCfg) nfi.NumberDecimalSeparator = "." @@ -503,15 +516,15 @@ Public Class FrmMain TmpString = reader.ReadLine() If TmpString.StartsWith("FileCali=") Then FileLensCalib = Mid(TmpString, 10) - IsCorrectFilePathReadFromCfg(DirToReadCfg, FileLensCalib, sMsgErr) + IsCorrectFilePathReadFromCfg(DirToReadCfg, FileLensCalib, sMsgErr, CfgResult) ElseIf TmpString.StartsWith("LensCalibType=") Then LensCalibType = Convert.ToInt16(Mid(TmpString, 15)) ElseIf TmpString.StartsWith("FileCaliProsp=") Then FileCalibProsp = Mid(TmpString, 15) - IsCorrectFilePathReadFromCfg(DirToReadCfg, FileCalibProsp, sMsgErr) + IsCorrectFilePathReadFromCfg(DirToReadCfg, FileCalibProsp, sMsgErr, CfgResult) ElseIf TmpString.StartsWith("FileCaliRes=") Then FileCalibRes = Mid(TmpString, 13) - IsCorrectFilePathReadFromCfg(DirToReadCfg, FileCalibRes, sMsgErr) + IsCorrectFilePathReadFromCfg(DirToReadCfg, FileCalibRes, sMsgErr, CfgResult) ElseIf TmpString.StartsWith("Extended=") Then bExtended = CInt(TmpString.Substring(9)) > 0 'lascio vedere tutti i bottoni BtnCfg.Visible = bExtended @@ -521,10 +534,10 @@ Public Class FrmMain BtnLoad.Visible = bExtended ElseIf TmpString.StartsWith("SaveDir=") Then SaveDir = Mid(TmpString, 9) - IsCorrectFilePathReadFromCfg(DirToReadCfg, SaveDir, sMsgErr) + IsCorrectFilePathReadFromCfg(DirToReadCfg, SaveDir, sMsgErr, CfgResult) ElseIf TmpString.StartsWith("TmpDir=") Then DirTmp = Mid(TmpString, 8) - IsCorrectFilePathReadFromCfg(DirToReadCfg, DirTmp, sMsgErr) + IsCorrectFilePathReadFromCfg(DirToReadCfg, DirTmp, sMsgErr, CfgResult) ElseIf TmpString.StartsWith("MaxPxWidth=") Then TmpInt = Convert.ToInt16(Mid(TmpString, 12)) If TmpInt > 0 Then ImageMng.MaxPxWidthOutImage = TmpInt @@ -532,7 +545,7 @@ Public Class FrmMain _visione.ReduceImage = CInt(TmpString.Substring(11)) 'pyr_down nel riconoscimento bordi ElseIf TmpString.StartsWith("LogDir=") Then SaveLogDir = Mid(TmpString, 8) - IsCorrectFilePathReadFromCfg(DirToReadCfg, SaveLogDir, sMsgErr) + IsCorrectFilePathReadFromCfg(DirToReadCfg, SaveLogDir, sMsgErr, CfgResult) ElseIf TmpString.StartsWith("CameraID=") Then CameraID = Mid(TmpString, 10) CfgForm.LbCfgCameraID.Text = CameraID @@ -574,16 +587,16 @@ Public Class FrmMain VacuumCheckEnable = TmpInt > 0 ElseIf TmpString.StartsWith("VacFileStart=") Then VacFileStart = Mid(TmpString, Len("StartVacFile=") + 1) - IsCorrectFilePathReadFromCfg(DirToReadCfg, VacFileStart, sMsgErr) + IsCorrectFilePathReadFromCfg(DirToReadCfg, VacFileStart, sMsgErr, CfgResult) ElseIf TmpString.StartsWith("VacFilePos=") Then VacFilePos = Mid(TmpString, Len("VacFilePos=") + 1) - IsCorrectFilePathReadFromCfg(DirToReadCfg, VacFilePos, sMsgErr) + IsCorrectFilePathReadFromCfg(DirToReadCfg, VacFilePos, sMsgErr, CfgResult) ElseIf TmpString.StartsWith("VacFileEnd=") Then VacFileEnd = Mid(TmpString, Len("VacFileEnd=") + 1) - IsCorrectFilePathReadFromCfg(DirToReadCfg, VacFileEnd, sMsgErr) + IsCorrectFilePathReadFromCfg(DirToReadCfg, VacFileEnd, sMsgErr, CfgResult) ElseIf TmpString.StartsWith("VacDirModels=") Then VacDirModels = Mid(TmpString, Len("VacDirModels=") + 1) - IsCorrectFilePathReadFromCfg(DirToReadCfg, VacDirModels, sMsgErr) + IsCorrectFilePathReadFromCfg(DirToReadCfg, VacDirModels, sMsgErr, CfgResult) ElseIf TmpString.StartsWith("VacMinScore=") Then VacMinScore = Convert.ToDouble(Mid(TmpString, Len("VacMinScore=") + 1), nfi) ElseIf TmpString.StartsWith("VacTolmm=") Then @@ -593,10 +606,29 @@ Public Class FrmMain reader.Close() reader.Dispose() - If Not String.IsNullOrEmpty(sMsgErr) And Not ModalitaNascosta Then - MessageBox.Show(sMsgErr, NomeFileCfg, MessageBoxButtons.OK, MessageBoxIcon.Hand) + ' Gestione dell'icone del bottone per esito lettura configurazione + Dim nIndexIcoCfg As Integer = 0 + Select Case CfgResult + Case ReadCfgResult.OK + nIndexIcoCfg = 0 + Case ReadCfgResult.WARNING + nIndexIcoCfg = 2 + Case ReadCfgResult.ERR0, ReadCfgResult.ERR1 + nIndexIcoCfg = 1 + End Select + + If Not String.IsNullOrEmpty(sMsgErr) Then + If Not ModalitaNascosta Then + BtnShowMsg.ImageIndex = nIndexIcoCfg + BtnShowMsg.Visible = True + Else + Console.WriteLine("ERRORE LETTURA CONFIGURAZIONE: " & MainModule.IndexProc & " -- " & sMsgErr) + End If Else - Console.WriteLine("ERRORE LETTURA CONFIGURAZIONE: " & MainModule.IndexProc & " -- " & sMsgErr) + If Not ModalitaNascosta Then + BtnShowMsg.ImageIndex = nIndexIcoCfg + BtnShowMsg.Visible = False + End If End If Catch ex As Exception @@ -1148,14 +1180,18 @@ Public Class FrmMain #If WinXp Then strWinXP = " (WinXP)" #End If + Dim ver As String = My.Application.Info.Version.Major.ToString() & "." & + My.Application.Info.Version.Minor.ToString() & + (ChrW(97 - 1 + My.Application.Info.Version.Build)).ToString() & + My.Application.Info.Version.Revision.ToString() - Me.Text = "EgalTech Camera Manager" & strWinXP & " v" & System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString() + Me.Text = "EgalTech Camera Manager" & strWinXP & " v" & ver BtnLoad.Visible = bExtended ImageControl1.PanMode = True ' Carico la configurazione corrente Inizializza() - TStatus.Text = "Initialized" + ' TStatus.Text = "Initialized" If ModalitaNascosta Then Me.Visible = False ' Avvio su un nuvo processo la comunicazione con il programma OmagCUT @@ -1232,7 +1268,10 @@ Public Class FrmMain CfgForm.LbDeviceStatus.Text = If(Camera.Connected, "Connected", "Disconnected") ' assegnato solo dall'evento connessione, perciò lo ribadisco CfgForm.LbCameraID.Text = Camera.CameraID - CfgForm.ShowDialog() + ' CfgForm.ShowDialog() + + ' Nuova gestione della pagina delle configurazioni + SetConfigForm.ShowDialog() End Sub Private Sub BtnEnd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnEnd.Click @@ -1825,9 +1864,9 @@ Public Class FrmMain Private Sub ComboBoxCameras_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBoxCameras.SelectedIndexChanged If Not ModalitaNascosta Then - LeggiFileConfigurazione() - SetFormStatus() + ' LeggiFileConfigurazione() Camera.Connect(ComboBoxCameras.SelectedItem) + SetFormStatus() End If End Sub @@ -1847,6 +1886,7 @@ Public Class FrmMain sTextMsg &= ": " & CameraID & "' non è valido." End If MessageBox.Show(sTextMsg, "Avvertenza", MessageBoxButtons.OK, MessageBoxIcon.Error) + ComboBoxCameras.SelectedIndex = -1 End If End If ImageMng.m_fileCaliLensRead = False @@ -1860,8 +1900,9 @@ Public Class FrmMain LoadCamerasList() End Sub - Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click - SetConfigForm.ShowDialog() + Private Sub BtnShowMsg_Click(sender As Object, e As EventArgs) Handles BtnShowMsg.Click + Dim sTitle As String = "Esito lettura configurazione " & ComboBoxCameraCfg.SelectedItem + MessageBox.Show(sMsgErr, sTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) End Sub #End Region ' Events diff --git a/CameraMng/My Project/AssemblyInfo.vb b/CameraMng/My Project/AssemblyInfo.vb index fd841b5..ad11cb8 100644 --- a/CameraMng/My Project/AssemblyInfo.vb +++ b/CameraMng/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/CameraMng/SetConfigForm.Designer.vb b/CameraMng/SetConfigForm.Designer.vb index 6010a9d..daf9558 100644 --- a/CameraMng/SetConfigForm.Designer.vb +++ b/CameraMng/SetConfigForm.Designer.vb @@ -57,7 +57,7 @@ Partial Class SetConfigForm Me.DataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize Me.DataGridView1.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.Config, Me.ImageConfig, Me.ComboCamera, Me.ImageCamera, Me.SaveConfig, Me.ApplyConfig}) Me.DataGridView1.Location = New System.Drawing.Point(47, 31) - Me.DataGridView1.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4) + Me.DataGridView1.Margin = New System.Windows.Forms.Padding(4) Me.DataGridView1.Name = "DataGridView1" Me.DataGridView1.RowHeadersWidth = 51 Me.DataGridView1.Size = New System.Drawing.Size(788, 196) @@ -68,7 +68,7 @@ Partial Class SetConfigForm ' Me.PictureBox1.Image = Global.My.Resources.Resources.accept Me.PictureBox1.Location = New System.Drawing.Point(39, 59) - Me.PictureBox1.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4) + Me.PictureBox1.Margin = New System.Windows.Forms.Padding(4) Me.PictureBox1.Name = "PictureBox1" Me.PictureBox1.Size = New System.Drawing.Size(39, 33) Me.PictureBox1.TabIndex = 1 @@ -78,7 +78,7 @@ Partial Class SetConfigForm ' Me.PictureBox2.Image = Global.My.Resources.Resources.warning Me.PictureBox2.Location = New System.Drawing.Point(39, 102) - Me.PictureBox2.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4) + Me.PictureBox2.Margin = New System.Windows.Forms.Padding(4) Me.PictureBox2.Name = "PictureBox2" Me.PictureBox2.Size = New System.Drawing.Size(39, 33) Me.PictureBox2.TabIndex = 2 @@ -88,7 +88,7 @@ Partial Class SetConfigForm ' Me.PictureBox3.Image = Global.My.Resources.Resources.cross Me.PictureBox3.Location = New System.Drawing.Point(39, 153) - Me.PictureBox3.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4) + Me.PictureBox3.Margin = New System.Windows.Forms.Padding(4) Me.PictureBox3.Name = "PictureBox3" Me.PictureBox3.Size = New System.Drawing.Size(39, 32) Me.PictureBox3.TabIndex = 3 @@ -120,9 +120,9 @@ Partial Class SetConfigForm Me.GroupBox1.Controls.Add(Me.PictureBox2) Me.GroupBox1.Font = New System.Drawing.Font("Microsoft Sans Serif", 12.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.GroupBox1.Location = New System.Drawing.Point(47, 245) - Me.GroupBox1.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4) + Me.GroupBox1.Margin = New System.Windows.Forms.Padding(4) Me.GroupBox1.Name = "GroupBox1" - Me.GroupBox1.Padding = New System.Windows.Forms.Padding(4, 4, 4, 4) + Me.GroupBox1.Padding = New System.Windows.Forms.Padding(4) Me.GroupBox1.Size = New System.Drawing.Size(788, 209) Me.GroupBox1.TabIndex = 5 Me.GroupBox1.TabStop = False @@ -216,6 +216,7 @@ Partial Class SetConfigForm ' Me.ImageConfig.FillWeight = 53.93283! Me.ImageConfig.HeaderText = "Result Cfg" + Me.ImageConfig.Image = Global.My.Resources.Resources.warning Me.ImageConfig.MinimumWidth = 6 Me.ImageConfig.Name = "ImageConfig" ' @@ -255,7 +256,7 @@ Partial Class SetConfigForm Me.ClientSize = New System.Drawing.Size(884, 469) Me.Controls.Add(Me.GroupBox1) Me.Controls.Add(Me.DataGridView1) - Me.Margin = New System.Windows.Forms.Padding(4, 4, 4, 4) + Me.Margin = New System.Windows.Forms.Padding(4) Me.Name = "SetConfigForm" Me.Text = "SetConfigForm" CType(Me.DataGridView1, System.ComponentModel.ISupportInitialize).EndInit() diff --git a/CameraMng/SetConfigForm.vb b/CameraMng/SetConfigForm.vb index be7fefe..0499769 100644 --- a/CameraMng/SetConfigForm.vb +++ b/CameraMng/SetConfigForm.vb @@ -1,17 +1,48 @@ Imports System.Globalization Imports System.IO +Imports Emgu.CV.Flann Public Class SetConfigForm - Private CameraListCfg As New List(Of String) - Private myImage As Image + Private Const IdCamEmpty As String = " --- " - Private CurrIndexRow As Integer = 0 - Private CurrAppliedConfig As String = 0 - Private bIsSavedAll As Boolean = True - Private IDConfig As String = String.Empty - Private IDCamera As String = String.Empty - Private IndexCurrentRow As Integer = 0 + Private m_myImage As Image + + Private m_UpdatingDataSource As Boolean = False + + ' Indice della riga correntemente selezionata + Private m_nCurrIndexRow As Integer = 0 + ' Nome della configurazione corrente del programma + Private m_sCurrAppliedIdCfg As String = 0 + + Private Enum ICO + ERR_ = -1 + WARNING_ = 0 + OK_ = 2 + End Enum + + Private Enum COLUMN + ID_CFG = 0 + CFG_ICO = 1 + ID_CAM = 2 + CAM_ICO = 3 + SAVE_CMD = 4 + APPLY_CMD = 5 + End Enum + + ' Elementi che popolano la lista delle camere disponibili + Private Structure EbnableCamItem + ' Indica l'Id della camera + Public IdCam As String + ' Indica se l'Id è già stato assegnato ad una configurazione + Public IsEnable As Boolean + ' Indice se l'Id della camera è connessa + Public IsConnected As Boolean + ' Indica l'id della configurazione in cui è in uso + Public IdCfg As List(Of String) + End Structure + ' Lista degli Id REALMENTE disponibili + Private EnableCamList As New List(Of EbnableCamItem) Sub New() @@ -21,192 +52,177 @@ Public Class SetConfigForm ' Aggiungere le eventuali istruzioni di inizializzazione dopo la chiamata a InitializeComponent(). End Sub + ' OK: popolo la datagrid all'avvio del programma Private Sub LoadWindows() Handles Me.Load - PopolateDataGrid() + EnableCamList.Clear() + ' Preparo lisra EnableCamList + LoadListOfEnableCamItem() + ' Popola la DataGridView e al caricamento seleziono la riga del'IdCfg impostato + PopolateDataGrid(True) + ' recupero il nome della configurazione impostata + m_sCurrAppliedIdCfg = If(FrmMain.ComboBoxCameraCfg.SelectedItem.Equals("Default"), "0", FrmMain.ComboBoxCameraCfg.SelectedItem) + End Sub - CurrAppliedConfig = If(FrmMain.ComboBoxCameraCfg.SelectedItem.Equals("Default"), "0", FrmMain.ComboBoxCameraCfg.SelectedItem) +#Region "METODI GESTIONE COMBOBOX" + ' ------- INIZIO ------- gestione EnableCamList ---------------------------- - ' Deseleziona tutte le righe attualmente selezionate (opzionale ma consigliato) - DataGridView1.ClearSelection() - ' Verifica che la griglia non sia vuota - If DataGridView1.Rows.Count > 0 Then - ' Imposta la cella corrente alla prima cella della prima riga - DataGridView1.CurrentCell = DataGridView1.Rows(CurrAppliedConfig).Cells(0) - DataGridView1.Rows(CurrAppliedConfig).Selected = True + ' OK: Costruisco la lista EnableCamList sulla base delle configurazioni salvate + Private Sub LoadListOfEnableCamItem() + Dim DirToReadCfg As String = FrmMain.sDataRoot + + ' Assegnno di defualt una camera VUOTA + Dim NOCam As EbnableCamItem + NOCam.IdCam = IdCamEmpty + NOCam.IsEnable = True + NOCam.IsConnected = False + NOCam.IdCfg = New List(Of String) + EnableCamList.Add(NOCam) + ' Inizializzo la lista con le camere realmente disponibili (IsEnable=true) + For Each CameraItem As String In FrmMain.ComboBoxCameras.Items + Dim ItemCam As EbnableCamItem + ItemCam.IdCam = CameraItem + ItemCam.IsEnable = True + ItemCam.IsConnected = True + ItemCam.IdCfg = New List(Of String) + EnableCamList.Add(ItemCam) + Next + + ' Per ogni camera disponibile assegno l'ID della configuraione associata + For Each CfgItem As String In FrmMain.ComboBoxCameraCfg.Items + CfgItem = If(CfgItem = "Default", String.Empty, CfgItem) + Dim NomeFileCfg As String = DirToReadCfg & CfgItem & "\CameraMng.cfg" + ' Recupero l'Id della camera configurata nel file Cfg + Dim IDCameraFromCgf As String = ReadIdCameraFromCfg(NomeFileCfg) + ' Se esiste l'Id + If Not String.IsNullOrEmpty(IDCameraFromCgf) Then + + ' Verifico se l'Id della camera è connessa + Dim IndID As Integer = EnableCamList.FindIndex(Function(x) x.IdCam = IDCameraFromCgf) + If IndID < 0 Then + ' l'Id della camera non è nell'elenco delle camere connesse: lo aggiungo + Dim ItemCam As EbnableCamItem + ItemCam.IdCam = IDCameraFromCgf + ItemCam.IsEnable = False + ItemCam.IsConnected = False + ItemCam.IdCfg = New List(Of String)({CfgItem}) + EnableCamList.Add(ItemCam) + Else + ' Recupero l'oggetto associato alla camera corrente + Dim CurrCam As EbnableCamItem = EnableCamList(IndID) + ' l'Id della camera è connessa: aggiorno l'Id dalla configurazione + CurrCam.IsEnable = False + CurrCam.IdCfg.Add(CfgItem) + ' Riassegno alla lista (solo la lista IdCfg viene aggiornata veramente...) + EnableCamList(IndID) = CurrCam + End If + Else + ' l'Id della camera non esiste (recupero la prima camera), ma una configurazione si + Dim IndID As Integer = 0 + Dim CurrCam As EbnableCamItem = EnableCamList(IndID) + CurrCam.IdCfg.Add(CfgItem) + End If + Next + End Sub + + ' OK: Data la config e il nuvo IDCam mi occupo di aggiornare la lista EnableCamList (NON DataGridView) + Private Sub UpdateListOfEnableCamItem(CfgItem As String, NewIdCam As String) + ' Recupero la camera assegnata alla configurazione + Dim IndIDCam As Integer = GetCurrCamIndFromCfg(CfgItem) + If IndIDCam > EnableCamList.Count - 1 Then Return + Dim CurrCam As EbnableCamItem = EnableCamList(IndIDCam) + If IsNothing(CurrCam) Then Return + ' Verifico che sia presente in elenco + If CurrCam.IdCfg.FindIndex((Function(x) x = CfgItem)) < 0 Then Return + ' Rimuovo questo elemento dalla lista delle configurazioni (per rifereminto si aggiorna anche la lista) + CurrCam.IdCfg.Remove(CfgItem) + ' Se la camera non ha nessun assegnamento allora aggiorno lo stato + If CurrCam.IdCfg.Count < 1 Then + CurrCam.IsEnable = True + EnableCamList(IndIDCam) = CurrCam + End If + + IndIDCam = EnableCamList.FindIndex((Function(x) x.IdCam = NewIdCam)) + If IndIDCam > -1 Then + CurrCam = EnableCamList(IndIDCam) + ' verifico che non sia già inserito in elenco (se la grafica non fosse allineata...) + If CurrCam.IdCfg.FindIndex((Function(x) x = CfgItem)) < 0 Then + CurrCam.IdCfg.Add(CfgItem) + ' Aggiorno anche lo stato + If CurrCam.IdCam <> IdCamEmpty And CurrCam.IsEnable Then + CurrCam.IsEnable = False + EnableCamList(IndIDCam) = CurrCam + End If + End If End If End Sub - Private Sub PopolateDataGrid() + ' ------- FINE ------- gestione EnableCamList ---------------------------- + + ' OK: Carico gli elementi della tabella (n_CurrIndex: indice selezionato); bFirstRun: set la config applicata + Private Sub PopolateDataGrid(Optional bFirstRun As Boolean = False) + ' Ripulisco tutti i dati della datagrid DataGridView1.Rows.Clear() - CameraListCfg.Clear() - ComboCamera.Items.Clear() - Dim DirToReadCfg As String = FrmMain.sDataRoot - ' Popolo combobox con idcamera - For Each CameraItem As String In FrmMain.ComboBoxCameras.Items - ComboCamera.Items.Add(CameraItem) - Next - ' Popolo text con configurazione + + ' Per ogni configurazione genero una riga della datagrid For Each CfgItem As String In FrmMain.ComboBoxCameraCfg.Items - Dim NomeFileCfg As String = DirToReadCfg & If(CfgItem = "Default", String.Empty, CfgItem) & "\CameraMng.cfg" + CfgItem = If(CfgItem = "Default", String.Empty, CfgItem) + ' Creo una nuova riga della tabella Dim riga As New DataGridViewRow() ' Crea le celle corrispondenti alle colonne riga.CreateCells(DataGridView1) - riga.Cells(0).Value = CfgItem - Dim id As String = ReadIdCameraFromCfg(NomeFileCfg) - If Not String.IsNullOrEmpty(id) Then - ' Icone CFG - If CameraListCfg.IndexOf(id) < 0 Then - CameraListCfg.Add(id) - riga.Cells(1).Value = GetCurrIco(2) - Else - riga.Cells(1).Value = GetCurrIco(0) - End If - ' Icone CAMERA - If ComboCamera.Items.IndexOf(id) > -1 Then - riga.Cells(3).Value = GetCurrIco(2) - riga.Cells(2).Value = id - Else - riga.Cells(3).Value = GetCurrIco(0) - End If - Else - riga.Cells(1).Value = GetCurrIco(-1) - riga.Cells(3).Value = GetCurrIco(-1) - End If - riga.Cells(4).Value = "Save" - riga.Cells(5).Value = "Apply" + + ' Popolo text con configurazione: assegno Indice della configurazione + riga.Cells(COLUMN.ID_CFG).Value = CfgItem + + ' Aggiorno le icone (leggendo la lista EnableCamList) + RefreshIcoAndComboBox(riga) + + riga.Cells(COLUMN.SAVE_CMD).Value = "Save" + riga.Cells(COLUMN.APPLY_CMD).Value = "Apply" ' Aggiungi la riga completa al DataGridView DataGridView1.Rows.Add(riga) - If CfgItem = FrmMain.ComboBoxCameraCfg.SelectedItem Then - DataGridView1.ClearSelection() - ' Mantengo la selezione sulla riga corrente - DataGridView1.Rows(DataGridView1.Rows.Count - 1).Selected = True - ' Indico in grassetto il comando Apply - ' Mi assicuro che la cella sia del tipo corretto - If TypeOf riga.Cells(5) Is DataGridViewButtonCell Then - ' Ottiengo la cella specifica - Dim cellaBottone As DataGridViewButtonCell = CType(riga.Cells(5), DataGridViewButtonCell) - ' Recupero il font attuale della cella per non perdere le altre proprietà (come la dimensione) - Dim fontAttuale As Font = cellaBottone.Style.Font - ' Se non è stato impostato un font, usane uno di default per sicurezza - If fontAttuale Is Nothing Then - fontAttuale = Me.DataGridView1.Font ' Usa il font del DataGridView come base - End If - ' Assegno un NUOVO oggetto Font con lo stile Bold - cellaBottone.Style.Font = New Font(fontAttuale, FontStyle.Bold) - End If + ' Imposto la configurazione corrente come attiva + If bFirstRun And CfgItem = FrmMain.ComboBoxCameraCfg.SelectedItem Then + ' --> DataGridView1.ClearSelection() + ' Recupero l'indice della riga corrente che deve rimanere selezionata + Dim LastIndexRow As Integer = DataGridView1.Rows.Count - 1 + ' --> DataGridView1.Rows(DataGridView1.Rows.Count - 1).Selected = True + ' Imposto la selezione sulla riga corrente + SelectCurrIndexRow(LastIndexRow) + ' Indico in grassetto il comando Apply della configurazione corrente + SetStatusApplyFont(LastIndexRow, True) End If Next + + ' Seleziono la riga associata alla configurazione impostata + + End Sub + + ' OK: Assegna le nuove combobox per ogni configurazione + Private Sub UpdateDataGridView() + ' Aggiorno le lista degli ID camera per ogni riga della tabella + For IndexRow As Integer = 0 To DataGridView1.Rows.Count - 1 + ' recupero la riga corrente della tabella + Dim riga As DataGridViewRow = DataGridView1.Rows(IndexRow) + ' Aggiorno la lista della combobox e le icone + RefreshIcoAndComboBox(riga) + Next End Sub - Private Sub RefreshDataGrid(IndexRawDataGrid As Integer) - DataGridView1.ClearSelection() - - Dim CfgItem As String = DataGridView1.Rows(IndexRawDataGrid).Cells("Config").Value.ToString() - ' Aggiorno lo stato delle icone della lista - - Dim DirToReadCfg As String = FrmMain.sDataRoot - Dim NomeFileCfg As String = DirToReadCfg & If(CfgItem = "Default", String.Empty, CfgItem) & "\CameraMng.cfg" - ' Creo la nuova riga che sostituirà quella precedente - Dim riga As DataGridViewRow = DataGridView1.Rows(IndexRawDataGrid) - ' Crea le celle corrispondenti alle colonne - riga.Cells(0).Value = CfgItem - Dim id As String = ReadIdCameraFromCfg(NomeFileCfg) - If Not String.IsNullOrEmpty(id) Then - ' Icone CFG - If CameraListCfg.IndexOf(id) < 0 Then - riga.Cells(1).Value = GetCurrIco(2) - Else - riga.Cells(1).Value = GetCurrIco(0) + ' OK: Recupero l'INDICE (della lista EnableCmaList) della camera associata a CfgItem + Private Function GetCurrCamIndFromCfg(CfgItem As String) As Integer + Dim IndIDCam As Integer = 0 + For Ind As Integer = 0 To EnableCamList.Count - 1 + If EnableCamList(Ind).IdCfg.FindIndex((Function(y) y = CfgItem)) > -1 Then + IndIDCam = Ind + Exit For End If - ' Icone CAMERA - If ComboCamera.Items.IndexOf(id) > -1 Then - riga.Cells(3).Value = GetCurrIco(2) - riga.Cells(2).Value = id - Else - riga.Cells(3).Value = GetCurrIco(0) - End If - Else - riga.Cells(1).Value = GetCurrIco(-1) - riga.Cells(3).Value = GetCurrIco(-1) - End If - riga.Cells(4).Value = "Save" - riga.Cells(5).Value = "Apply" - - ' Sostituisco la riga corrente: rimuovo la precedente riga e ne inserisco una nuova - DataGridView1.Rows.RemoveAt(IndexRawDataGrid) - DataGridView1.Rows.Insert(IndexRawDataGrid, riga) - ' Mantengo la selezione sulla riga corrente - DataGridView1.CurrentCell = riga.Cells(0) - DataGridView1.Rows(IndexRawDataGrid).Selected = True - End Sub - - Private Sub RefreshSelectedItemCfg(IndexRawDataGrid As Integer) - ' 1. RIPRISTINA IL FONT DELLA RIGA PRECEDENTE - ' Controlla se c'era una riga precedente valida e se non è la stessa che stiamo per modificare - If CurrAppliedConfig > -1 AndAlso CurrAppliedConfig <> IndexRawDataGrid Then - ' Assicurati che l'indice sia ancora nel range del DataGridView - If CurrAppliedConfig < DataGridView1.Rows.Count Then - Dim lastRow As DataGridViewRow = DataGridView1.Rows(CurrAppliedConfig) - Dim lastCellButton As DataGridViewButtonCell = CType(lastRow.Cells(5), DataGridViewButtonCell) - Dim lastFont As Font = lastCellButton.Style.Font - ' Crea un nuovo font basato su quello esistente, ma con stile Regular - If lastFont IsNot Nothing Then - lastCellButton.Style.Font = New Font(lastFont, FontStyle.Regular) - End If - End If - End If - - DataGridView1.ClearSelection() - - ' 2. AGGIORNA I DATI DELLA RIGA ESISTENTE - Dim CfgItem As String = DataGridView1.Rows(IndexRawDataGrid).Cells("Config").Value.ToString() - ' Aggiorno lo stato delle icone della lista - Dim DirToReadCfg As String = FrmMain.sDataRoot - Dim NomeFileCfg As String = DirToReadCfg & If(CfgItem = "Default", String.Empty, CfgItem) & "\CameraMng.cfg" - ' Creo la nuova riga che sostituirà quella precedente - Dim riga As DataGridViewRow = DataGridView1.Rows(IndexRawDataGrid) - ' Crea le celle corrispondenti alle colonne - riga.Cells(0).Value = CfgItem - Dim id As String = ReadIdCameraFromCfg(NomeFileCfg) - If Not String.IsNullOrEmpty(id) Then - ' Icone CFG - If CameraListCfg.IndexOf(id) < 0 Then - riga.Cells(1).Value = GetCurrIco(2) - Else - riga.Cells(1).Value = GetCurrIco(0) - End If - ' Icone CAMERA - If ComboCamera.Items.IndexOf(id) > -1 Then - riga.Cells(3).Value = GetCurrIco(2) - riga.Cells(2).Value = id - Else - riga.Cells(3).Value = GetCurrIco(0) - End If - Else - riga.Cells(1).Value = GetCurrIco(-1) - riga.Cells(3).Value = GetCurrIco(-1) - End If - riga.Cells(4).Value = "Save" - riga.Cells(5).Value = "Apply" - - ' 3. APPLICA IL GRASSETTO ALLA RIGA CORRENTE - Dim currentCellButton As DataGridViewButtonCell = CType(riga.Cells(5), DataGridViewButtonCell) - Dim currentFont As Font = currentCellButton.Style.Font - If currentFont Is Nothing Then - currentFont = Me.DataGridView1.Font ' Usa il font del DataGridView come base - End If - ' Assegna un NUOVO oggetto Font con lo stile Bold - currentCellButton.Style.Font = New Font(currentFont, FontStyle.Bold) - - ' 4. AGGIORNA L'INDICE DA RICORDARE - CurrAppliedConfig = IndexRawDataGrid - - ' Mantengo la selezione sulla riga corrente - DataGridView1.CurrentCell = riga.Cells(0) - DataGridView1.Rows(IndexRawDataGrid).Selected = True - End Sub + Next + Return IndIDCam + End Function + ' OK: Lettura dell'IDCam dal file di configurazione Private Function ReadIdCameraFromCfg(NomeFileCfg As String) As String Dim IDCamera As String = String.Empty Dim reader As New StreamReader(NomeFileCfg) @@ -229,18 +245,20 @@ Public Class SetConfigForm Return IDCamera End Function + ' OK: Restituisce l'immagine associata all'Enum indicato Private Function GetCurrIco(Index As Integer) As Image Select Case Index - Case -1 - myImage = My.Resources.cross - Case 0 - myImage = My.Resources.warning + Case ICO.ERR_ + m_myImage = My.Resources.cross + Case ICO.WARNING_ + m_myImage = My.Resources.warning Case Else - myImage = My.Resources.accept + m_myImage = My.Resources.accept End Select - Return myImage + Return m_myImage End Function + ' OK: Salva l'IDCam nella configurazione corrente Public Sub SaveIDCamera(IDConfing As String, IDCamera As String) Dim NomeFileCfg, TmpString As String Dim NomeFileTempCfg, DirToReadCfg As String @@ -249,6 +267,7 @@ Public Class SetConfigForm Dim writer As StreamWriter Try + If IDConfing.Contains("Default") Then IDConfing = "" DirToReadCfg = FrmMain.sDataRoot & IDConfing NomeFileCfg = DirToReadCfg & "\CameraMng.cfg" NomeFileTempCfg = DirToReadCfg & "\CameraMngTmp.cfg" @@ -266,7 +285,7 @@ Public Class SetConfigForm writer.WriteLine(TmpString, CultureInfo.InvariantCulture) End If End While - writer.WriteLine("CameraID=" & IDCamera, CultureInfo.InvariantCulture) + writer.WriteLine("CameraID=" & If(IDCamera = IdCamEmpty, "", IDCamera), CultureInfo.InvariantCulture) FileClose(nf) writer.Close() File.Copy(NomeFileCfg, SaveFileCfg) @@ -282,105 +301,305 @@ Public Class SetConfigForm End Try End Sub + ' OK: Data la riga della DataGrid viene assegnato il font: bSet=True -> BOLD, bSet=False -> REGULAR + Private Sub SetStatusApplyFont(IndexRowDataGrid As Integer, bSet As Boolean) + If IndexRowDataGrid > -1 Then + Dim ApplyCellButton As DataGridViewButtonCell = CType(DataGridView1.Rows(IndexRowDataGrid).Cells(COLUMN.APPLY_CMD), DataGridViewButtonCell) + Dim CurrFont As Font = ApplyCellButton.Style.Font + ' Crea un nuovo font basato su quello esistente, ma con stile Regular + If IsNothing(CurrFont) Then CurrFont = Me.DataGridView1.Font + ApplyCellButton.Style.Font = New Font(CurrFont, If(bSet, FontStyle.Bold, FontStyle.Regular)) + End If + End Sub + + ' OK: Aggiorno la DataGrid per visualizzare la configurazione attiva + Private Function ApplyCurrCfg(CurrIdCfg As String, Optional bForce As Boolean = False) As Boolean + ' Se il nome della configurazione corrente è già attivo allora esco + If (m_sCurrAppliedIdCfg = CurrIdCfg And Not bForce) And String.IsNullOrEmpty(CurrIdCfg) Then Return False + + ' Recupero l'indice della DataGrid associato alla configurazione applicata: rimuovo il font BOLD + Dim IndAppliedIdCfg As Integer = -1 + For Index As Integer = 0 To DataGridView1.Rows.Count - 1 + If DataGridView1.Rows(Index).Cells(COLUMN.ID_CFG).Value = m_sCurrAppliedIdCfg Then + IndAppliedIdCfg = Index + Exit For + End If + Next + ' Ripristino il font Regular + SetStatusApplyFont(IndAppliedIdCfg, False) + + ' Recupero l'indice della DataGrid associato alla configurazione + Dim IndCurrIdCfg As Integer = -1 + For Index As Integer = 0 To DataGridView1.Rows.Count - 1 + If DataGridView1.Rows(Index).Cells(COLUMN.ID_CFG).Value = CurrIdCfg Then + IndCurrIdCfg = Index + Exit For + End If + Next + ' Applico il font Bold + SetStatusApplyFont(IndCurrIdCfg, True) + + ' Assegno come applicata cfg corrente + m_sCurrAppliedIdCfg = CurrIdCfg + + Return True + End Function + +#End Region ' Metodi gestione combobox + + ' OK: Aggiorna l'icone della riga corrente + Private Function RefreshIcoAndComboBox(ByRef riga As DataGridViewRow) As Boolean + 'Dim riga As DataGridViewRow = DataGridView1.Rows(IndexRow) + + Dim CfgItem As String = riga.Cells(COLUMN.ID_CFG).Value + ' Recupero la camera assegnata alla configurazione + Dim IndIDCam As Integer = GetCurrCamIndFromCfg(CfgItem) + If IndIDCam > EnableCamList.Count - 1 Then Return False + Dim CurrCam As EbnableCamItem = EnableCamList(IndIDCam) + If IsNothing(CurrCam) Then Return False + + ' Configurazione delle icone della pagina + If CurrCam.IdCam = IdCamEmpty Then + ' CFG ICO + riga.Cells(COLUMN.CFG_ICO).Value = GetCurrIco(ICO.ERR_) + ' CAM ICO + riga.Cells(COLUMN.CAM_ICO).Value = GetCurrIco(ICO.ERR_) + Else + ' CFG ICO + If CurrCam.IdCfg(0) = CfgItem Then + riga.Cells(COLUMN.CFG_ICO).Value = GetCurrIco(ICO.OK_) + Else + riga.Cells(COLUMN.CFG_ICO).Value = GetCurrIco(ICO.WARNING_) + End If + ' CAM ICO + If CurrCam.IsConnected Then + riga.Cells(COLUMN.CAM_ICO).Value = GetCurrIco(ICO.OK_) + Else + riga.Cells(COLUMN.CAM_ICO).Value = GetCurrIco(ICO.WARNING_) + End If + End If + + ' Creo la lista degli IdCam disponibili per la configurazione corrente + Dim CamList As New List(Of String) + ' Procedo alla creazione della lista delle camere libere + For Each CameraItem As EbnableCamItem In EnableCamList + If CameraItem.IsEnable Then + CamList.Add(CameraItem.IdCam) + End If + Next + ' Aggiungo la camera assegnata a questa configurazione + If CurrCam.IdCam <> IdCamEmpty Then CamList.Add(CurrCam.IdCam) + ' Se la camera non è in elenco tra le camere disponibili (Id già occupato) + If CamList.IndexOf(CurrCam.IdCam) < 0 Then + CamList.Add(CurrCam.IdCam) + End If + + If m_nCurrIndexRow = riga.Index Then + Dim Pippo As Boolean = True + End If + + + + ' Assegno la lista alla cella ComboBox + Dim comboBoxCell As DataGridViewComboBoxCell = TryCast(riga.Cells.Item(COLUMN.ID_CAM), DataGridViewComboBoxCell) + If Not IsNothing(comboBoxCell) Then + m_UpdatingDataSource = True + + ' Imposto l'ID della camera (sembra che questa assegnazione non generi nessun evento) + comboBoxCell.Value = CurrCam.IdCam + + ' verifice che le due liste siano uguali + Dim bAreSame As Boolean = False + If Not IsNothing(comboBoxCell.DataSource) Then + ' Ad ogni assegnazione della lista viene lanciato l'evento + bAreSame = True + If comboBoxCell.DataSource.Count <> CamList.Count Then + ' Hanno numero di elementi differenti: quindi sicuramente diverse + bAreSame = False + Else + ' Verifico che tutti gli elementi di una lista siano anche nell'altra + For Each Item As String In comboBoxCell.DataSource + If CamList.FindIndex(Function(x) x = Item) < 0 Then + bAreSame = False + Exit For + End If + Next + End If + End If + ' Se le liste sono diverse anche per contenuto allora ricarico + If Not bAreSame Then comboBoxCell.DataSource = CamList + + m_UpdatingDataSource = False + End If + + Return True + End Function + + ' Aggiorno la selezione della tabella e setto la riga corrente nella variabile m_nCurrIndexRow + Private Sub SelectCurrIndexRow(IndexRow As Integer) + ' Verifico che l'indice di riga sia valido + If IndexRow < 0 Or IndexRow > DataGridView1.RowCount Then Return + ' Se la selezione è la stessa riga che è in uso allora non aggiorno + If IndexRow = m_nCurrIndexRow Then Return + Me.Invalidate() + DataGridView1.ClearSelection() + DataGridView1.Rows(IndexRow).Selected = True + m_nCurrIndexRow = IndexRow + End Sub + +#Region "EVENTS" + + 'Private CMB As ComboBox + + ' Selezione ComboBox Private Sub DataGridView1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing + ' Seleziono la riga indicata + SelectCurrIndexRow(DataGridView1.CurrentCell.RowIndex) ' Controlla se la cella corrente è nella colonna della ComboBox e se il controllo è una ComboBox If DataGridView1.CurrentCell.ColumnIndex = DataGridView1.Columns("ComboCamera").Index AndAlso TypeOf e.Control Is ComboBox Then Dim comboBox As ComboBox = TryCast(e.Control, ComboBox) If comboBox IsNot Nothing Then - ' Rimuovi eventuali gestori eventi precedenti per evitare eventi duplicati - ' Questo è importante se l'utente modifica più volte la stessa cella + ' Salvo un riferimento alla combobox selezionata: viene cancellato il riferimento al termine della selezione + 'CMB = comboBox + ' Rimuovi i gestori precedenti per evitare agganci multipli RemoveHandler comboBox.SelectedIndexChanged, AddressOf DataGridViewComboBox_SelectedIndexChanged - ' Aggiungi il gestore eventi per l'evento SelectedIndexChanged della ComboBox + 'Aggiungo il gestore eventi per l'evento SelectedIndexChanged della ComboBox AddHandler comboBox.SelectedIndexChanged, AddressOf DataGridViewComboBox_SelectedIndexChanged End If End If End Sub - ' Questo è il gestore eventi che si attiverà quando l'utente seleziona un elemento nella ComboBox + ' Questo è il gestore eventi che si attiverà quando l'utente seleziona un elemento nella ComboBox -- Handles DataGridView1.EditingControlShowing Private Sub DataGridViewComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Dim comboBox As ComboBox = TryCast(sender, ComboBox) - If comboBox IsNot Nothing Then + 'Dim comboBox As ComboBox = CMB + + If Not IsNothing(comboBox) AndAlso Not IsNothing(comboBox.SelectedItem) Then + ' Nuovo valore Dim selectedValue As String = comboBox.SelectedItem.ToString() Dim currentRowIndex As Integer = DataGridView1.CurrentCell.RowIndex - + ' Precedente valore Dim IDCamera As String = If(Not IsNothing(DataGridView1.Rows(currentRowIndex).Cells("ComboCamera").Value), DataGridView1.Rows(currentRowIndex).Cells("ComboCamera").Value.ToString(), String.Empty) + ' Id della configurazione corrente + Dim IDCfg As String = DataGridView1.Rows(currentRowIndex).Cells("Config").Value.ToString() If IDCamera <> selectedValue Then - DataGridView1.Rows(currentRowIndex).Cells(4).Value = "Save*" + ' Aggiorno l'elenco EnableCamList + If Not m_UpdatingDataSource Then + UpdateListOfEnableCamItem(IDCfg, selectedValue) + Else + UpdateListOfEnableCamItem(IDCfg, IDCamera) + End If + ' Ricostruisco la DataGrid + UpdateDataGridView() + ' Aggiorno il valore del bottone + DataGridView1.Rows(currentRowIndex).Cells(COLUMN.SAVE_CMD).Value = "Save*" End If - End If End Sub - ' Tutti i click sulla datagrid passono da qui + ' Selezione del valore di una cella: gestione dei bottoni SAVE & APPLY Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick ' Controlla che il click non sia sull'intestazione della colonna If e.RowIndex < 0 Then Return - DataGridView1.Rows(e.RowIndex).Selected = True + + ' seleziona la riga indicata + SelectCurrIndexRow(e.RowIndex) If e.ColumnIndex < 0 Then Return - - IndexCurrentRow = e.RowIndex - IDConfig = DataGridView1.Rows(e.RowIndex).Cells("Config").Value.ToString() - IDCamera = If(Not IsNothing(DataGridView1.Rows(e.RowIndex).Cells("ComboCamera").Value), DataGridView1.Rows(e.RowIndex).Cells("ComboCamera").Value.ToString(), String.Empty) + ' recupero l'Id della configurazione e l'Id della camera + Dim sIDConfig As String = DataGridView1.Rows(m_nCurrIndexRow).Cells("Config").Value.ToString() + Dim sIDCamera As String = If(Not IsNothing(DataGridView1.Rows(m_nCurrIndexRow).Cells("ComboCamera").Value), DataGridView1.Rows(e.RowIndex).Cells("ComboCamera").Value.ToString(), String.Empty) ' Controlla se il click è avvenuto nella colonna dei bottoni (Usa il nome che hai dato alla colonna) If Me.DataGridView1.Columns(e.ColumnIndex).Name = "SaveConfig" Then - If Not String.IsNullOrEmpty(IDConfig) And Not String.IsNullOrEmpty(IDCamera) Then - SaveIDCamera(IDConfig, IDCamera) - DataGridView1.Rows(e.RowIndex).Cells(4).Value = "Save" - RefreshDataGrid(e.RowIndex) - bIsSavedAll = True - Else - MessageBox.Show("Non è possibile salvare l'ID di una camera non connessa.", "Avviso", MessageBoxButtons.OK, MessageBoxIcon.Asterisk) + If Not String.IsNullOrEmpty(sIDConfig) Then + SaveIDCamera(sIDConfig, sIDCamera) + DataGridView1.Rows(m_nCurrIndexRow).Cells(COLUMN.SAVE_CMD).Value = "Save" + '' Aggiorno l'elenco EnableCamList + 'UpdateListOfEnableCamItem(sIDConfig, sIDCamera) + '' Ricostruisco la DataGrid SENZA forzare la selezione della riga + 'PopolateDataGrid(False) + End If + ' Se la configurazione è applicata allora procedo ad aggiornare anche il programma + If m_sCurrAppliedIdCfg = sIDConfig Then + If Not ApplyCurrCfg(sIDConfig, True) Then Return + ' seleziona la riga indicata + SelectCurrIndexRow(e.RowIndex) + + ' Aggiorno la camera in uso nel programma + Dim IndCamera As Integer = FrmMain.ComboBoxCameras.Items.IndexOf(sIDCamera) + If IndCamera > -1 Then FrmMain.ComboBoxCameras.SelectedIndex = IndCamera + Dim IndCameraCfg As Integer = FrmMain.ComboBoxCameraCfg.Items.IndexOf(sIDConfig) + If IndCameraCfg > -1 Then FrmMain.ComboBoxCameraCfg.SelectedIndex = IndCameraCfg End If ElseIf Me.DataGridView1.Columns(e.ColumnIndex).Name = "ApplyConfig" Then - If Not (String.IsNullOrEmpty(IDConfig) And String.IsNullOrEmpty(IDCamera)) Then - ' verifico che non sia stato salvato l'id indicato - If DataGridView1.Rows(e.RowIndex).Cells(4).Value.ToString().Contains("*"c) Then + If Not String.IsNullOrEmpty(sIDConfig) And Not String.IsNullOrEmpty(sIDCamera) And sIDCamera <> IdCamEmpty Then + ' Verifico che non ci sia una modifica attiva + If DataGridView1.Rows(m_nCurrIndexRow).Cells(COLUMN.SAVE_CMD).Value.ToString().Contains("*"c) Then MessageBox.Show("Salvare la configurazione prima di applicarla.", "Informazione", MessageBoxButtons.OK, MessageBoxIcon.Asterisk) Return End If - Dim IndCamera As Integer = FrmMain.ComboBoxCameras.Items.IndexOf(IDCamera) - FrmMain.ComboBoxCameras.SelectedIndex = IndCamera - Dim IndCameraCfg As Integer = FrmMain.ComboBoxCameraCfg.Items.IndexOf(IDConfig) - FrmMain.ComboBoxCameraCfg.SelectedIndex = IndCameraCfg - RefreshSelectedItemCfg(e.RowIndex) + If Not ApplyCurrCfg(sIDConfig) Then Return + ' seleziona la riga indicata + SelectCurrIndexRow(e.RowIndex) + ' Aggiorno la camera in uso nel programma + Dim IndCamera As Integer = FrmMain.ComboBoxCameras.Items.IndexOf(sIDCamera) + If IndCamera > -1 Then FrmMain.ComboBoxCameras.SelectedIndex = IndCamera + Dim IndCameraCfg As Integer = FrmMain.ComboBoxCameraCfg.Items.IndexOf(sIDConfig) + If IndCameraCfg > -1 Then FrmMain.ComboBoxCameraCfg.SelectedIndex = IndCameraCfg + Else + MessageBox.Show("Non è possibile applicare una configurazione di una camera non connessa.", "Avviso", MessageBoxButtons.OK, MessageBoxIcon.Asterisk) End If + + ElseIf Me.DataGridView1.Columns(e.ColumnIndex).Name = "ComboCamera" Then + ' riconosco che è stata selezionata la combobox End If + End Sub + ' Chiusura della finestra Private Sub SetConfig_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing - ' 💡 FORZA LA FINE DELLA MODALITÀ DI MODIFICA + ' FORZA LA FINE DELLA MODALITÀ DI MODIFICA Me.Validate() Dim result As DialogResult + Dim ListOfIndexModifiedCfg As New List(Of Integer) + Dim bExit As Boolean = True For IndexRow As Integer = 0 To DataGridView1.Rows.Count - 1 - If DataGridView1.Rows(IndexRow).Cells(4).Value = "Save*" Then - ' Ci sono modifiche. Chiedi all'utente cosa fare. - If bIsSavedAll Then - result = MessageBox.Show("Salvare tutte le configurazioni modificate o no?", "Attenzione", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning) - End If - Select Case result - Case DialogResult.Yes - ' Salvataggio - If DataGridView1.Rows(IndexRow).Cells(0).Value = "Default" Then DataGridView1.Rows(IndexRow).Cells(0).Value = String.Empty - SaveIDCamera(DataGridView1.Rows(IndexRow).Cells(0).Value, DataGridView1.Rows(IndexRow).Cells(2).Value) - DataGridView1.Rows(IndexRow).Cells(4).Value = "Save" - RefreshDataGrid(IndexRow) - bIsSavedAll = False - Case DialogResult.No - ' La finestra si chiuderà normalmente. Non fare nulla. - bIsSavedAll = True - Return - Case DialogResult.Cancel - ' L'utente ha annullato l'operazione. Annulla la chiusura della finestra. - bIsSavedAll = True - e.Cancel = True - End Select + ' Verifico se ci sia nessuna modifica attiva + If DataGridView1.Rows(IndexRow).Cells(COLUMN.SAVE_CMD).Value = "Save*" Then + ListOfIndexModifiedCfg.Add(IndexRow) + bExit = False End If Next - bIsSavedAll = True + ' Se non ci sono modifiche allora esco subito + If bExit Then Return + + ' Costruisco il messaggio in funzione del numero di elementi presenti + Dim sMsg As String = "Vuoi salvare la modifica corrente?" + If ListOfIndexModifiedCfg.Count > 1 Then + sMsg = "Vuoi salvare le modifiche correnti?" + End If + + result = MessageBox.Show(sMsg, "Attenzione", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning) + Select Case result + Case DialogResult.Yes + ' Salvataggio + For Each IndexRow As Integer In ListOfIndexModifiedCfg + ' Salvataggio + SaveIDCamera(DataGridView1.Rows(IndexRow).Cells(COLUMN.ID_CFG).Value, DataGridView1.Rows(IndexRow).Cells(COLUMN.ID_CAM).Value) + Next + Case DialogResult.No + ' La finestra si chiuderà normalmente. Non fare nulla. + Return + Case DialogResult.Cancel + ' L'utente ha annullato l'operazione. Annulla la chiusura della finestra. + e.Cancel = True + End Select + ' Al termine la finestra viene chiusa End Sub +#End Region ' Events + End Class \ No newline at end of file diff --git a/CameraMng/bin/x64/Release/CameraMng.xml b/CameraMng/bin/x64/Release/CameraMng.xml index cc66e82..0df66bd 100644 --- a/CameraMng/bin/x64/Release/CameraMng.xml +++ b/CameraMng/bin/x64/Release/CameraMng.xml @@ -32,6 +32,11 @@ CameraMng Cerca una risorsa localizzata di tipo System.Drawing.Bitmap. + + + Cerca una risorsa localizzata di tipo System.Drawing.Bitmap. + + Cerca una risorsa localizzata di tipo System.Drawing.Bitmap. @@ -62,6 +67,11 @@ CameraMng Cerca una risorsa localizzata di tipo System.Drawing.Bitmap. + + + Cerca una risorsa localizzata di tipo System.Drawing.Bitmap. + + Cerca una risorsa localizzata di tipo System.Drawing.Bitmap. @@ -92,6 +102,11 @@ CameraMng Cerca una risorsa localizzata di tipo System.Drawing.Bitmap. + + + Cerca una risorsa localizzata di tipo System.Drawing.Bitmap. + + Cerca una risorsa localizzata di tipo System.Drawing.Bitmap. diff --git a/CameraMng/clsCamera/clsCamera.vb b/CameraMng/clsCamera/clsCamera.vb index bdb1162..4b478c4 100644 --- a/CameraMng/clsCamera/clsCamera.vb +++ b/CameraMng/clsCamera/clsCamera.vb @@ -137,7 +137,7 @@ Public Class clsCamera If _connected Then Disconnect() If bodyID = "" Then - Connect(0) + ' Connect(0) Return End If diff --git a/CameraMng/obj/x64/Debug/CameraMng.vbproj.AssemblyReference.cache b/CameraMng/obj/x64/Debug/CameraMng.vbproj.AssemblyReference.cache index b128c11ac83c47d565eb0daa2225b66a22d42803..4d7907545268b07b32803ce1a4c64d16efc99bd5 100644 GIT binary patch delta 331 zcmX?Lb522?jggOmfq~K4*(%00y~HK8EG9WIH?=4+H!&|UJ+)|}v>}_FKvvY2s}qAP z6ui?ib5gDJ_4S>t^dYMCQB-eS7Qr-mg{**tH4ft@b8|?GhUXXMr0AvOu1tlm`WE|scHEEL%^en31lwe(QLaWe@6`w?enBavPd zJoXUg;@z`?a|1@BSR@td$?MiH)mg#`ufPT9(J?Rw_k?Jv&{zW?UWv`Tp+VKG0< zl!ixILo2RMrz#bmKGIvZ4Io^`tgXzQ@_GX6@G$dBQ{k-i!+TJ>Bt4yL5Q}=g*Jk<- z@dIR=FvCab1^#E|0{;uy*jfla9|f>Yk?SK%+V}Yzs1zmBTr_+Vh@goT4lc{VVl>!v z8KzxIeB8veM=b2i?2?n6mjtup+$ompWX$~iY+r?R?1ksmtyt=WnkKdaN?1RvX_PAR zqvM+RQnsgpI{q&yKV+rDjx7L$8By<9B@*<_VVSVll`~&KtN6i2L diff --git a/CameraMng/obj/x64/Debug/CameraMng.vbproj.CoreCompileInputs.cache b/CameraMng/obj/x64/Debug/CameraMng.vbproj.CoreCompileInputs.cache index 7b86e50..9c799eb 100644 --- a/CameraMng/obj/x64/Debug/CameraMng.vbproj.CoreCompileInputs.cache +++ b/CameraMng/obj/x64/Debug/CameraMng.vbproj.CoreCompileInputs.cache @@ -1 +1 @@ -80ba11b124538c7d3079f30cd12468109ae550e631cf8c94dfc5efc15b795614 +69636ff66d10d465f87b29c6b3440534ee373b52aa51b9726c6ce7a90119bc6f diff --git a/CameraMng/obj/x64/Debug/CameraMng.vbproj.GenerateResource.cache b/CameraMng/obj/x64/Debug/CameraMng.vbproj.GenerateResource.cache index 393834d1393baf0c273b06ae09575296a2f237a9..e32462d2b9e15a2a4071e1b060cacb91409067c6 100644 GIT binary patch delta 73 zcmcb>eSv#|HakOv{Cz3*D-(?_vz4YzkvMvFGB=|ZC&N5Rk^lcLaWGC!V3ge)&8Wk| c%5*Bo{>tPYR#Seq4S(AsF5l%~WMlvV0KT*sFaQ7m delta 73 zcmcb>eSv#|Hv88Dx~n&AzdO@>XSn7u&R3x1zROofsg&$T7K=Pj+HkDx<~5HwC;Lb^=*IiMt$=-I-N3ckn%B F1^^K16ZQZA delta 49 zcmV-10M7sIB<&=SN(MFKH|s#pkx&=`2a|mc9g&7*0XMPia198bWd4xD%H0T)M*}3Y Hhz{ig1XC1~ diff --git a/CameraMng/obj/x64/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/CameraMng/obj/x64/Debug/DesignTimeResolveAssemblyReferencesInput.cache index 6847c441498884de7835a681668a71add265714d..b4a8dc8a7adb58bd4250e9bbf3df86f70de2d597 100644 GIT binary patch delta 424 zcmX>jwn<`wG^6?CKrSV*pw#00(xT+l;us^-_>#neRK0?{bSse5#3Ttu8#Fb}i8+}` zMTu3J`FW|6Co;-T{=ms4gfPN6EnP3G0IL0i1fvN^yD&mNwIZ_wq`(3sE{+fnE=Vmd z&M!*UOUf+(TRC|hqZliQXA4pZH#7Nvsy2M*iG2bm?HZurD3!w7Nl VCuWJs_AIQEi&>O6$FjU<0{~pij21WHes>kv|gIwv7A=hHuBLH2+K~O*UW%{;oLqT50!V>Hx!_KI9qe>jSxkg zIn6Q;l`o6n@9rZf)2uyfc21D?I^TKpA4Fv`@Qd-ItpET3 diff --git a/CameraMng/obj/x64/Debug/FrmMain.resources b/CameraMng/obj/x64/Debug/FrmMain.resources index ac6f34767365f907b18732a4afbc1446d5d12366..87d27ebb9c9cfb79415b0c1cf8eebd76de808d7f 100644 GIT binary patch delta 12436 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 nrtTIwm4&UTUfH@cI7$w#gW2 delta 8907 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 CXVo77 diff --git a/CameraMng/obj/x64/Release/CameraMng.vbproj.AssemblyReference.cache b/CameraMng/obj/x64/Release/CameraMng.vbproj.AssemblyReference.cache index 4be7836d18e178ddd238d04b09be0c6bde1235fb..83ea00193db8235e9695745b8e3fda94e95d0081 100644 GIT binary patch delta 61 zcmV-D0K)&HJ<=eMQU(Qy-d?oTu~@PKv+@Ik2$L@lhm(5|gp-jHij(9OfRmUPg_D{Y Tlao;!fs;lZegXghlMNo0IM*1k delta 1081 zcma)5&r2IY7|pj)srg|r4dRa;L=QzOOQDAzN)IJzs6{x2spbmxGrRH(leOus-AUq~Mwh;F#%^+N{@MaQH!F&rX zA~a{Amt0cO5iF)26(5*S`y}IG6rWWTD_XI7BL-H9 z?jTC_7uGR2RV(c~;G}xy*HP(f8l`64C8X1?VZY@UzBU@OZ5CuIjbeDXg(oPxYGY_6 zT(Xe5I#EUfwr57eZAKy_Ql}leUPL+rfBgZldmFS9MBR{bIUpFPOXZ$gh1YXfsG5?A zB(C>9_%~mp7{Hk`ipS+I4vedh&{U71Io#KOj&~WmcyOEDYh&JU56NHuileG0ad zfo=@Z@2St&rM)b7obYfHnN8WdV1js7`LqT({lK_>mAF1Aw!?|bgH90_yzO86-obA} Q;_Y_^NEZfCe=0w&07LgDV*mgE diff --git a/CameraMng/obj/x64/Release/CameraMng.vbproj.CoreCompileInputs.cache b/CameraMng/obj/x64/Release/CameraMng.vbproj.CoreCompileInputs.cache index c46f02b..dff123e 100644 --- a/CameraMng/obj/x64/Release/CameraMng.vbproj.CoreCompileInputs.cache +++ b/CameraMng/obj/x64/Release/CameraMng.vbproj.CoreCompileInputs.cache @@ -1 +1 @@ -6dfe2777d17f530c20a47946243d5514a0d9ccf3b3bc8a842d8aaf280d73ff42 +e63cd9d1bff65e57a3ee15db15da52f89e1cb74102fae0c75198f4c36fa0c215 diff --git a/CameraMng/obj/x64/Release/CameraMng.vbproj.FileListAbsolute.txt b/CameraMng/obj/x64/Release/CameraMng.vbproj.FileListAbsolute.txt index 1850f2b..e9d3ade 100644 --- a/CameraMng/obj/x64/Release/CameraMng.vbproj.FileListAbsolute.txt +++ b/CameraMng/obj/x64/Release/CameraMng.vbproj.FileListAbsolute.txt @@ -48,3 +48,4 @@ C:\EgtDev\cameramanager\CameraMng\obj\x64\Release\CameraMng.vbproj.Up2Date C:\EgtDev\cameramanager\CameraMng\obj\x64\Release\CameraMng.exe C:\EgtDev\cameramanager\CameraMng\obj\x64\Release\CameraMng.xml C:\EgtDev\cameramanager\CameraMng\obj\x64\Release\CameraMng.pdb +C:\EgtDev\cameramanager\CameraMng\obj\x64\Release\SetConfigForm.resources diff --git a/CameraMng/obj/x64/Release/CameraMng.vbproj.GenerateResource.cache b/CameraMng/obj/x64/Release/CameraMng.vbproj.GenerateResource.cache index 574d41c70781b390b8ab9bca9b622ee2d826e7dc..e32462d2b9e15a2a4071e1b060cacb91409067c6 100644 GIT binary patch delta 351 zcmZ3_d4Zdmjgf03GZQ0QY1$NtqgN+$Gd^b(XJBAZm~77^F`1u;bbc& z*~tb>v6DA4=}cb8EXh%pnpcuvoM<$8EtA1yPG$v0C9szJ%v_AhAQq32X?#gyL8@Ls zUb+@YfUhVutthoPBi_)^(7@buvKO;1L?ydRYMNtFYU<><%$k#hSR@6V6LT_?iV~|b z^Yc>ml5z_ap(e8e^(aj?VBwx@$0W%W1ToGfvk2$}SrJsz4MEm|UBsQ3oSa%v0^)qFgLBoJef(ay`GbqjgfOBGZP~ln?8s4iOG|>8K1KXGB7YGOrF3bF`1u@7Bm)Bg)`~cF diff --git a/CameraMng/obj/x64/Release/CameraMng.xml b/CameraMng/obj/x64/Release/CameraMng.xml index cc66e82..0df66bd 100644 --- a/CameraMng/obj/x64/Release/CameraMng.xml +++ b/CameraMng/obj/x64/Release/CameraMng.xml @@ -32,6 +32,11 @@ CameraMng Cerca una risorsa localizzata di tipo System.Drawing.Bitmap. + + + Cerca una risorsa localizzata di tipo System.Drawing.Bitmap. + + Cerca una risorsa localizzata di tipo System.Drawing.Bitmap. @@ -62,6 +67,11 @@ CameraMng Cerca una risorsa localizzata di tipo System.Drawing.Bitmap. + + + Cerca una risorsa localizzata di tipo System.Drawing.Bitmap. + + Cerca una risorsa localizzata di tipo System.Drawing.Bitmap. @@ -92,6 +102,11 @@ CameraMng Cerca una risorsa localizzata di tipo System.Drawing.Bitmap. + + + Cerca una risorsa localizzata di tipo System.Drawing.Bitmap. + + Cerca una risorsa localizzata di tipo System.Drawing.Bitmap. diff --git a/CameraMng/obj/x64/Release/FrmMain.resources b/CameraMng/obj/x64/Release/FrmMain.resources index 5f525f747905e70f3cb0a1b8f214904d21493163..87d27ebb9c9cfb79415b0c1cf8eebd76de808d7f 100644 GIT binary patch delta 9679 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 SHh$0eUwGTVX*J>to%lZ)ozUI@ delta 7869 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 GH0D3cq8=jv diff --git a/CameraMng/obj/x64/Release/Resources.resources b/CameraMng/obj/x64/Release/Resources.resources index b1cb95a4675b9d70002a82ec4160e572665c867b..5e90f6e28dafdd0a1d499476ff86b70ff8ce8728 100644 GIT binary patch delta 3561 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 delta 322 zcmZ43%5wcV^Mr+*A`A=+j6j?*S+GWQ;{Mk9<)_-Y6OYYO2=3Tos^WIa*8Xmtr*p-V zpxD}Z5y=r%k*)i(YYKomgn^nGfY=1cJ`Kb(f$Ur$UIAqP0n$1^ybg#xfjAH-76PPi z193NyEf2&XuosBW0r47U1_nMO22+N3hRL@Xm+NsQG2}B8F{A*=SM3Z8JP584!@?O1 z3>>Kp6%3gSB@FAAF)+wX{>UW5G*sp}>SG7B^5ZklY#EY14$Ccu1DzQU)SU+=a~aYZ*sn~Uz%0!qaC`DvW<@5+N0TowE3+uQWMG)Q h(Pr-EDJ-wrH!qrSRBrR*EpGCYb-vndcDos^2>`LYSdjn#