diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs index 5d46b31..7979512 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Camera.cs @@ -828,7 +828,7 @@ namespace JoyD.Windows.CS.Toprie // 创建图像副本以避免线程安全问题 Image clonedImage = (Image)tempImage.Clone(); // 调用Setting窗口的方法更新实时温度图像 - Setting.Form.RealTimeImage = clonedImage; + Setting.Form.UpdateRealTimeImage(clonedImage); } if (lastImage != null) diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/README.md b/Windows/CS/Framework4.0/Toprie/Toprie/README.md index 1cbeb0d..4db0959 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/README.md +++ b/Windows/CS/Framework4.0/Toprie/Toprie/README.md @@ -27,6 +27,7 @@ 2. 再将InfoImage绘制到缓冲 3. 在就绪条件下,调用更新实时信息,并将DisplayImage绘制到缓冲 4. 最后一次性绘制到图像框的bitmap + 5. 同步更新检测配置窗口的实时图像属性 ### 更新实时信息 1. 以透明色清空DisplayImage diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Resources/DrawRegionIcon.svg b/Windows/CS/Framework4.0/Toprie/Toprie/Resources/DrawRegionIcon.svg new file mode 100644 index 0000000..8cac0e0 --- /dev/null +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Resources/DrawRegionIcon.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.Designer.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.Designer.cs index 910d393..6a3253f 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.Designer.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.Designer.cs @@ -28,47 +28,129 @@ /// private void InitializeComponent() { - this.groupBoxRealTimeTemperature = new System.Windows.Forms.GroupBox(); - this.pictureBoxTemperatureDisplay = new System.Windows.Forms.PictureBox(); - this.groupBoxRealTimeTemperature.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxTemperatureDisplay)).BeginInit(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Setting)); + this.splitContainer = new System.Windows.Forms.SplitContainer(); + this.groupBoxTempDisplay = new System.Windows.Forms.GroupBox(); + this.picBoxTemp = new System.Windows.Forms.PictureBox(); + this.toolStripContainer = new System.Windows.Forms.ToolStripContainer(); + this.toolStrip = new System.Windows.Forms.ToolStrip(); + this.btnDrawRegion = new System.Windows.Forms.ToolStripButton(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); + this.splitContainer.Panel1.SuspendLayout(); + this.splitContainer.Panel2.SuspendLayout(); + this.splitContainer.SuspendLayout(); + this.groupBoxTempDisplay.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.picBoxTemp)).BeginInit(); + this.toolStripContainer.ContentPanel.SuspendLayout(); + this.toolStripContainer.SuspendLayout(); + this.toolStrip.SuspendLayout(); this.SuspendLayout(); // - // groupBoxRealTimeTemperature + // splitContainer // - this.groupBoxRealTimeTemperature.Controls.Add(this.pictureBoxTemperatureDisplay); - this.groupBoxRealTimeTemperature.Location = new System.Drawing.Point(12, 12); - this.groupBoxRealTimeTemperature.Name = "groupBoxRealTimeTemperature"; - this.groupBoxRealTimeTemperature.Size = new System.Drawing.Size(353, 337); - this.groupBoxRealTimeTemperature.TabIndex = 0; - this.groupBoxRealTimeTemperature.TabStop = false; - this.groupBoxRealTimeTemperature.Text = "实时温度"; + this.splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer.Location = new System.Drawing.Point(0, 0); + this.splitContainer.Name = "splitContainer"; // - // pictureBoxTemperatureDisplay + // splitContainer.Panel1 // - this.pictureBoxTemperatureDisplay.Location = new System.Drawing.Point(6, 24); - this.pictureBoxTemperatureDisplay.Name = "pictureBoxTemperatureDisplay"; - this.pictureBoxTemperatureDisplay.Size = new System.Drawing.Size(341, 307); - this.pictureBoxTemperatureDisplay.TabIndex = 0; - this.pictureBoxTemperatureDisplay.TabStop = false; + this.splitContainer.Panel1.Controls.Add(this.groupBoxTempDisplay); + // + // splitContainer.Panel2 + // + this.splitContainer.Panel2.Controls.Add(this.toolStripContainer); + this.splitContainer.Size = new System.Drawing.Size(649, 450); + this.splitContainer.SplitterDistance = 471; + this.splitContainer.TabIndex = 1; + // + // groupBoxTempDisplay + // + this.groupBoxTempDisplay.Controls.Add(this.picBoxTemp); + this.groupBoxTempDisplay.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBoxTempDisplay.Location = new System.Drawing.Point(0, 0); + this.groupBoxTempDisplay.Name = "groupBoxTempDisplay"; + this.groupBoxTempDisplay.Size = new System.Drawing.Size(471, 450); + this.groupBoxTempDisplay.TabIndex = 1; + this.groupBoxTempDisplay.TabStop = false; + this.groupBoxTempDisplay.Text = "实时温度"; + // + // picBoxTemp + // + this.picBoxTemp.Dock = System.Windows.Forms.DockStyle.Fill; + this.picBoxTemp.Location = new System.Drawing.Point(3, 21); + this.picBoxTemp.Name = "picBoxTemp"; + this.picBoxTemp.Size = new System.Drawing.Size(465, 426); + this.picBoxTemp.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.picBoxTemp.TabIndex = 0; + this.picBoxTemp.TabStop = false; + // + // toolStripContainer + // + // + // toolStripContainer.ContentPanel + // + this.toolStripContainer.ContentPanel.Controls.Add(this.toolStrip); + this.toolStripContainer.ContentPanel.Size = new System.Drawing.Size(174, 425); + this.toolStripContainer.Dock = System.Windows.Forms.DockStyle.Fill; + this.toolStripContainer.Location = new System.Drawing.Point(0, 0); + this.toolStripContainer.Name = "toolStripContainer"; + this.toolStripContainer.Size = new System.Drawing.Size(174, 450); + this.toolStripContainer.TabIndex = 0; + this.toolStripContainer.Text = "toolStripContainer"; + // + // toolStrip + // + this.toolStrip.Dock = System.Windows.Forms.DockStyle.None; + this.toolStrip.ImageScalingSize = new System.Drawing.Size(20, 20); + this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.btnDrawRegion}); + this.toolStrip.Location = new System.Drawing.Point(0, 0); + this.toolStrip.Name = "toolStrip"; + this.toolStrip.Size = new System.Drawing.Size(75, 27); + this.toolStrip.TabIndex = 1; + this.toolStrip.Text = "toolStrip"; + // + // btnDrawRegion + // + this.btnDrawRegion.CheckOnClick = true; + this.btnDrawRegion.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.btnDrawRegion.ImageTransparentColor = System.Drawing.Color.Transparent; + this.btnDrawRegion.Name = "btnDrawRegion"; + this.btnDrawRegion.Size = new System.Drawing.Size(24, 24); + this.btnDrawRegion.Text = "画框"; + this.btnDrawRegion.ToolTipText = "绘制温度检测区域(点击开启/关闭)"; // // Setting // this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1191, 450); - this.Controls.Add(this.groupBoxRealTimeTemperature); + this.ClientSize = new System.Drawing.Size(649, 450); + this.Controls.Add(this.splitContainer); this.Name = "Setting"; this.Text = "检测配置"; - this.groupBoxRealTimeTemperature.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxTemperatureDisplay)).EndInit(); + this.splitContainer.Panel1.ResumeLayout(false); + this.splitContainer.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); + this.splitContainer.ResumeLayout(false); + this.groupBoxTempDisplay.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.picBoxTemp)).EndInit(); + this.toolStripContainer.ContentPanel.ResumeLayout(false); + this.toolStripContainer.ContentPanel.PerformLayout(); + this.toolStripContainer.ResumeLayout(false); + this.toolStripContainer.PerformLayout(); + this.toolStrip.ResumeLayout(false); + this.toolStrip.PerformLayout(); this.ResumeLayout(false); } #endregion - private System.Windows.Forms.GroupBox groupBoxRealTimeTemperature; - private System.Windows.Forms.PictureBox pictureBoxTemperatureDisplay; + private System.Windows.Forms.SplitContainer splitContainer; + private System.Windows.Forms.GroupBox groupBoxTempDisplay; + private System.Windows.Forms.PictureBox picBoxTemp; + private System.Windows.Forms.ToolStripContainer toolStripContainer; + private System.Windows.Forms.ToolStrip toolStrip; + private System.Windows.Forms.ToolStripButton btnDrawRegion; } } \ No newline at end of file diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs index 3d243c4..f7ae5be 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.cs @@ -3,6 +3,8 @@ using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; +using System.Drawing.Drawing2D; +using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; @@ -17,10 +19,22 @@ namespace JoyD.Windows.CS // 定时器字段 private Timer _timer; + // 绘制模式标志 + private bool _isDrawingMode = false; + + // 矩形绘制相关变量 + private Point _startPoint; + private Rectangle _currentRectangle = Rectangle.Empty; + private bool _isDrawing = false; + private List _drawnRectangles = new List(); + public Setting() { InitializeComponent(); + // 设置按钮图标 + SetButtonIcon(); + // 初始化定时器 _timer = new Timer { Interval = 1000 }; _timer.Tick += Timer_Tick; @@ -28,6 +42,170 @@ namespace JoyD.Windows.CS // 注册窗口事件 this.Shown += Setting_Shown; this.FormClosing += Setting_FormClosing; + + // 注册按钮点击事件 + btnDrawRegion.Click += BtnDrawRegion_Click; + } + + /// + /// 绘制区域按钮点击事件 + /// + private void BtnDrawRegion_Click(object sender, EventArgs e) + { + _isDrawingMode = btnDrawRegion.Checked; + + if (_isDrawingMode) + { + // 启用绘制模式 + picBoxTemp.MouseDown += PicBoxTemp_MouseDown; + picBoxTemp.MouseMove += PicBoxTemp_MouseMove; + picBoxTemp.MouseUp += PicBoxTemp_MouseUp; + picBoxTemp.Cursor = Cursors.Cross; + btnDrawRegion.ToolTipText = "绘制模式已启用,点击图片区域绘制矩形框(点击关闭)"; + } + else + { + // 禁用绘制模式 + picBoxTemp.MouseDown -= PicBoxTemp_MouseDown; + picBoxTemp.MouseMove -= PicBoxTemp_MouseMove; + picBoxTemp.MouseUp -= PicBoxTemp_MouseUp; + picBoxTemp.Cursor = Cursors.Default; + _currentRectangle = Rectangle.Empty; + btnDrawRegion.ToolTipText = "绘制温度检测区域(点击开启/关闭)"; + // 重绘以清除临时矩形 + picBoxTemp.Invalidate(); + } + } + + /// + /// 鼠标按下事件 - 开始绘制矩形 + /// + private void PicBoxTemp_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left && _isDrawingMode) + { + _startPoint = e.Location; + _isDrawing = true; + _currentRectangle = new Rectangle(e.X, e.Y, 0, 0); + } + } + + /// + /// 鼠标移动事件 - 更新矩形大小 + /// + private void PicBoxTemp_MouseMove(object sender, MouseEventArgs e) + { + if (_isDrawing && _isDrawingMode) + { + int width = e.X - _startPoint.X; + int height = e.Y - _startPoint.Y; + + _currentRectangle = new Rectangle( + width > 0 ? _startPoint.X : _startPoint.X + width, + height > 0 ? _startPoint.Y : _startPoint.Y + height, + Math.Abs(width), + Math.Abs(height)); + + picBoxTemp.Invalidate(); + } + } + + /// + /// 鼠标释放事件 - 完成矩形绘制 + /// + private void PicBoxTemp_MouseUp(object sender, MouseEventArgs e) + { + if (_isDrawing && _isDrawingMode && e.Button == MouseButtons.Left) + { + _isDrawing = false; + + // 确保矩形有一定大小才添加 + if (_currentRectangle.Width > 10 && _currentRectangle.Height > 10) + { + _drawnRectangles.Add(_currentRectangle); + // 可以在这里添加处理矩形区域的逻辑,如保存区域信息等 + + // 显示绘制完成的提示 + ToolStripStatusLabel statusLabel = new ToolStripStatusLabel(); + statusLabel.Text = string.Format("已添加检测区域: X={0}, Y={1}, 宽={2}, 高={3}", + _currentRectangle.X, _currentRectangle.Y, _currentRectangle.Width, _currentRectangle.Height); + // 如果有状态栏,可以添加到状态栏显示 + } + + _currentRectangle = Rectangle.Empty; + picBoxTemp.Invalidate(); + } + } + + /// + /// 绘制事件 - 显示矩形框 + /// + private void PicBoxTemp_Paint(object sender, PaintEventArgs e) + { + // 绘制所有已完成的矩形 + foreach (Rectangle rect in _drawnRectangles) + { + e.Graphics.DrawRectangle(new Pen(Color.Red, 2), rect); + } + + // 绘制当前正在绘制的矩形 + if (!_currentRectangle.IsEmpty) + { + using (Pen dashedPen = new Pen(Color.Blue, 2)) + { + dashedPen.DashPattern = new float[] { 5, 2 }; + e.Graphics.DrawRectangle(dashedPen, _currentRectangle); + } + } + } + + /// + /// 设置绘制区域按钮的图标 + /// + private void SetButtonIcon() + { + // 创建一个表示绘制区域的图标 + Bitmap icon = new Bitmap(24, 24); + using (Graphics g = Graphics.FromImage(icon)) + { + // 设置高质量绘图 + g.SmoothingMode = SmoothingMode.AntiAlias; + g.InterpolationMode = InterpolationMode.HighQualityBicubic; + + // 清除背景为透明 + g.Clear(Color.Transparent); + + // 绘制外矩形 + g.DrawRectangle(new Pen(Color.Black, 2), 3, 3, 18, 18); + + // 绘制虚线内矩形 + using (Pen dashedPen = new Pen(Color.Black, 1.5f)) + { + dashedPen.DashPattern = new float[] { 2, 1 }; + g.DrawRectangle(dashedPen, 5, 5, 14, 14); + } + + // 绘制四个角的控制点 + SolidBrush brush = new SolidBrush(Color.Black); + g.FillEllipse(brush, 6, 6, 3, 3); // 左上角 + g.FillEllipse(brush, 15, 6, 3, 3); // 右上角 + g.FillEllipse(brush, 6, 15, 3, 3); // 左下角 + g.FillEllipse(brush, 15, 15, 3, 3); // 右下角 + } + + // 设置按钮图标并设置透明色 + btnDrawRegion.Image = icon; + btnDrawRegion.ImageTransparentColor = Color.Transparent; + + // 启用双缓冲以减少闪烁 + typeof(PictureBox).InvokeMember("DoubleBuffered", + System.Reflection.BindingFlags.SetProperty | + System.Reflection.BindingFlags.Instance | + System.Reflection.BindingFlags.NonPublic, + null, picBoxTemp, new object[] { true }); + + // 注册Paint事件 + picBoxTemp.Paint += PicBoxTemp_Paint; } /// @@ -51,7 +229,6 @@ namespace JoyD.Windows.CS private void Setting_FormClosing(object sender, FormClosingEventArgs e) { _timer.Stop(); - mRealTimeImage?.Dispose(); } /// @@ -83,109 +260,117 @@ namespace JoyD.Windows.CS /// /// 更新PictureBox图像的辅助方法 + /// 此方法必须在UI线程上执行 /// private void UpdatePictureBoxImage() { - // 安全更新图像 - if (pictureBoxTemperatureDisplay != null && !pictureBoxTemperatureDisplay.IsDisposed) + } + + /// + /// 更新pictureBoxTemperatureDisplay的图像 + /// 此方法可以从任何线程调用 + /// + /// 要显示的新图像 + public void UpdateRealTimeImage(Image NewImage) + { + // 空值检查 + if (NewImage == null) { - try + Console.WriteLine("传入UpdateRealTimeImage的图像为空"); + return; + } + + // 检查是否处于设计模式或窗口不可见 + if (DesignMode || !this.Visible || this.IsDisposed || this.Disposing) + { + // 如果不满足条件,释放图像资源并返回 + NewImage.Dispose(); + return; + } + + try + { + // 线程安全检查 - 确保在UI线程上执行 + if (this.InvokeRequired) { - // 保存旧图像引用,以便设置新图像后释放 - Image oldImage = pictureBoxTemperatureDisplay.Image; - - // 检查mRealTimeImage是否有效 - 只设置有效的图像 - Image imageToSet = null; try { - // 验证图像是否有效(尝试访问图像属性,如果无效会抛出异常) - if (mRealTimeImage != null) + // 使用BeginInvoke在UI线程上更新图像 + this.BeginInvoke(new Action(() => { - // 尝试访问Width属性来验证图像是否有效 - var width = mRealTimeImage.Width; - // 如果没有抛出异常,则图像有效 - imageToSet = mRealTimeImage; - } + try + { + // 确保窗口未被释放 + if (!this.IsDisposed && !this.Disposing && picBoxTemp != null && !picBoxTemp.IsDisposed) + { + // 保存旧图像引用,以便在设置新图像后释放 + Image oldImage = picBoxTemp.Image; + + // 设置新图像 + picBoxTemp.Image = NewImage; + + // 释放旧图像资源 + if (oldImage != null && oldImage != NewImage) + { + oldImage.Dispose(); + } + } + else + { + // 如果控件已释放,确保释放图像资源 + NewImage.Dispose(); + } + } + catch (Exception ex) + { + Console.WriteLine($"更新设置窗口图像失败: {ex.Message}"); + // 确保在异常情况下释放图像资源 + try + { + NewImage.Dispose(); + } + catch {} + } + })); } - catch (Exception) + catch (ObjectDisposedException) { - // 图像无效,不设置它 - // 可以选择记录日志或创建一个默认的错误图像 + // 控件已释放,忽略并释放图像资源 + NewImage.Dispose(); } - - // 再次检查控件是否仍然有效,防止在验证过程中控件被释放 - if (pictureBoxTemperatureDisplay != null && !pictureBoxTemperatureDisplay.IsDisposed) - { - // 设置图像(如果有效) - try - { - pictureBoxTemperatureDisplay.Image = imageToSet; - } - catch (Exception ex) - { - // 捕获设置图像时可能发生的异常 - System.Diagnostics.Debug.WriteLine($"设置PictureBox图像失败: {ex.Message}"); - // 确保设置为null而不是无效图像 - pictureBoxTemperatureDisplay.Image = null; - } - } - - // 释放旧图像(如果不是当前设置的图像) - if (oldImage != null && oldImage != imageToSet) - { - try { oldImage.Dispose(); } catch { } - } - } - catch (Exception ex) - { - // 捕获所有其他异常,确保方法不会崩溃 - System.Diagnostics.Debug.WriteLine($"UpdatePictureBoxImage异常: {ex.Message}"); - } - } - } - private Image mRealTimeImage = null; - /// - /// 实时图像属性 - /// 作为后台变量,移除线程安全检查以提高性能 - /// 注意:调用方需确保在合适的线程上下文中访问 - /// - public Image RealTimeImage - { - get - { - return mRealTimeImage; - } - set - { - // 防止重复设置相同的图像 - if (mRealTimeImage == value) - return; - - // 检查是否在有效状态下操作 - if (this.IsDisposed || this.Disposing) - { - // 如果窗口已关闭或正在关闭,释放传入的图像 - value?.Dispose(); return; } - // 释放旧图像资源 - if (mRealTimeImage != null && mRealTimeImage != value) + // 在UI线程上直接更新图像 + if (!this.IsDisposed && !this.Disposing && picBoxTemp != null && !picBoxTemp.IsDisposed) { - try - { - mRealTimeImage.Dispose(); - } - catch (Exception ex) - { - // 记录异常但不中断流程 - System.Diagnostics.Debug.WriteLine($"释放旧图像资源失败: {ex.Message}"); - } + // 保存旧图像引用,以便在设置新图像后释放 + Image oldImage = picBoxTemp.Image; + + // 设置新图像 + picBoxTemp.Image = NewImage; + + // 释放旧图像资源 + if (oldImage != null && oldImage != NewImage) + { + oldImage.Dispose(); + } } - - // 只设置mRealTimeImage,不直接更新UI - // UI更新将由定时器的Timer_Tick事件处理 - mRealTimeImage = value; + else + { + // 如果控件已释放,确保释放图像资源 + NewImage.Dispose(); + } + } + catch (Exception ex) + { + Console.WriteLine($"处理实时图像更新时出错: {ex.Message}"); + // 确保在任何异常情况下都释放图像资源 + try + { + NewImage.Dispose(); + } + catch {} } } } diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.resx b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.resx index 1af7de1..68d6127 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Setting.resx +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Setting.resx @@ -117,4 +117,23 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK + YKyG2WBogqMYJQOtCEVRFBGdTBCJfRnkS4VaaWNT5sqx1BUxRXxDHYxAJLvkusEeBaPAB+5z4Jzn+t3X + /aLhnEfjo8m+dCoa+7/C3O2Hqe0zDC+8KG+cRZHZhdzaaWTVTCLDMIY0vfM04Nfh77/G/sEhwpEDbO3t + I7TxE8urEVy99fT/AL5gWDLrTB/hnF4XsW0khCu5ln8DmJliT2AXrcNBsU1gj/MH4nMeKwBrPktM28xM + cX79DFKrHHD5d9D26hvicx4pABt2lpg10zYzU0zr7+e3xXGcrkEB2O2TNec9nJFwB3alZn5jZorfeDZh + 6Q3g8s06BeCoKF4MRURoH1+BY2oNCbeb0TIclIYxOhzf8frTOuo7FxCbbVIAzpni0iceEc8vhzEwGkJD + lx83ymxifejdKjRNk/8PWnyIyTQqAJek0jqHwfEVscu31baIu8+90sTE4nY025dQ2/5FIPpnXlzKuK8A + HBUzHot52djqQ6HZhfR7IwK4mKpHtvEDMqvfCiQ6zaAAXM8x94aIWTNrLLG4kVUzgaTSPlzLtyJOZxbb + 1wtfyg4Q+AfA3aZlButjSfxGcUJBk4g5tuP3haQKRKXcUQDOmbvNTpPOJeFFjordZmbWTNvMTHFUcpUC + nOccAdABIDXXE1nzAAAAAElFTkSuQmCC + + \ No newline at end of file diff --git a/Windows/CS/Framework4.0/Toprie/Toprie/Toprie.csproj b/Windows/CS/Framework4.0/Toprie/Toprie/Toprie.csproj index b1c780d..800fcf0 100644 --- a/Windows/CS/Framework4.0/Toprie/Toprie/Toprie.csproj +++ b/Windows/CS/Framework4.0/Toprie/Toprie/Toprie.csproj @@ -72,6 +72,11 @@ + + True + True + Resources.resx + Form @@ -88,6 +93,10 @@ Camera.cs + + ResXFileCodeGenerator + Resources.Designer.cs + Setting.cs @@ -95,5 +104,8 @@ + + + \ No newline at end of file