diff --git a/Bin/Debug/CommonControls/.NET4/OnLineUpgradeConfig.exe b/Bin/Debug/CommonControls/.NET4/OnLineUpgradeConfig.exe
index 770e48e..1474057 100644
Binary files a/Bin/Debug/CommonControls/.NET4/OnLineUpgradeConfig.exe and b/Bin/Debug/CommonControls/.NET4/OnLineUpgradeConfig.exe differ
diff --git a/Bin/Debug/CommonControls/.NET4/RaUI.dll b/Bin/Debug/CommonControls/.NET4/RaUI.dll
index a688604..94d66d6 100644
Binary files a/Bin/Debug/CommonControls/.NET4/RaUI.dll and b/Bin/Debug/CommonControls/.NET4/RaUI.dll differ
diff --git a/Bin/Debug/CommonControls/.NET4/RaUI.xml b/Bin/Debug/CommonControls/.NET4/RaUI.xml
index e9e3ae2..56da64a 100644
--- a/Bin/Debug/CommonControls/.NET4/RaUI.xml
+++ b/Bin/Debug/CommonControls/.NET4/RaUI.xml
@@ -1251,11 +1251,16 @@
取消事件
+
+
+ 是否跳过相同文件,默认不跳过(根据文件大小和修改时间来判断)
+
+
大文件按流复制文件,支持自动创建目标文件夹。 true:复制成功 false:复制失败
- 原始文件路径
+ 原始文件路径
复制目标文件路径
携带的参数(可选)
@@ -2039,6 +2044,25 @@
目标文件夹
返回复制操作是否成功的标识,成功返回0,负数表示复制失败的文件数量。1表示源文件夹不存在
+
+
+ 复制或剪切文件列表到剪切板
+
+
+
+
+
+
+ 复制文件列表到剪切板
+
+
+
+
+
+ 剪切文件列表到剪切板
+
+
+
重命名一个文件为新名称,建议您使用更方便的Microsoft.VisualBasic.FileSystem.ReName();替换该方法
@@ -13834,6 +13858,11 @@
+
+
+ 是否将时间类型转为时间戳
+
+
输出多条件搜索。
@@ -13848,6 +13877,12 @@
+
+
+ 根据输入的内容,生成Json数据
+
+
+
获取插入SQL语句
@@ -15902,27 +15937,44 @@
-
- Shell
-
+
+ 获得桌面 Shell
+
+
+
+
+ 获得桌面 Shell
+
+
+
+
+ 获取路径
+
+
+
+
+ 获取显示名称
+
+
+
+
+ 根据 PIDL 获取显示名称
+
+
+
+
+ 获取特殊文件夹的路径
+
根据路径获取 IShellFolder 和 PIDL
-
+
-
+ 根据路径获取 IShellFolder
-
-
-
-
-
-
-
-
@@ -16736,6 +16788,14 @@
+
+
+
+
+
+
+
+
注册热键
@@ -18082,6 +18142,11 @@
版本
+
+
+ 版本类型
+
+
更新日期
@@ -20148,10 +20213,11 @@
鼠标移上时,显示提示
-
+
- 字体
+
+
@@ -20265,6 +20331,16 @@
值1
+
+
+ int值1
+
+
+
+
+ long值1
+
+
Tag
@@ -20897,6 +20973,52 @@
热键文本框
+
+
+ 清除按钮位置
+
+
+
+
+ 热键文本位置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -24633,6 +24755,11 @@
Chrome风格的多标签控件
+
+
+ 获取或设置调整控件的选项卡大小的方式。
+
+
@@ -30255,12 +30382,12 @@
- Automatically sets the size of the label by content size
+ 根据内容大小自动设置标签的大小
- Automatically sets the height of the label by content height (width is not effected).
+ 根据内容高度自动设置标签的高度(宽度不受影响)。
@@ -54175,7 +54302,7 @@
Bounds of the cell
The string to be drawn
- 笔刷
+
@@ -54198,6 +54325,37 @@
+
+
+ Draw the given text and optional image in the "normal" fashion
+
+ Graphics context to use for drawing
+ Bounds of the cell
+
+ The string to be drawn
+ 笔刷
+
+
+
+ Draw the given text and optional image in the "normal" fashion
+
+ Graphics context to use for drawing
+ Bounds of the cell
+
+ The string to be drawn
+
+
+
+
+
+
+ 这里的r
+
+
+
+
+
+
@@ -58222,6 +58380,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Wrapper over the control like TextBox.
@@ -70106,79 +70337,6 @@
A visual indicator is displayed in the number margin.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
A class for the Batch lexer.
diff --git a/Bin/Debug/CommonControls/.NET4/rycUpdate.exe b/Bin/Debug/CommonControls/.NET4/rycUpdate.exe
index 2c43f85..e8d2718 100644
Binary files a/Bin/Debug/CommonControls/.NET4/rycUpdate.exe and b/Bin/Debug/CommonControls/.NET4/rycUpdate.exe differ
diff --git a/Bin/Release/CommonControls/.NET4/RaUI.dll b/Bin/Release/CommonControls/.NET4/RaUI.dll
index 04abfac..e191e31 100644
Binary files a/Bin/Release/CommonControls/.NET4/RaUI.dll and b/Bin/Release/CommonControls/.NET4/RaUI.dll differ
diff --git a/Bin/Release/CommonControls/.NET4/RaUI.xml b/Bin/Release/CommonControls/.NET4/RaUI.xml
index 07c9e12..7197df0 100644
--- a/Bin/Release/CommonControls/.NET4/RaUI.xml
+++ b/Bin/Release/CommonControls/.NET4/RaUI.xml
@@ -1251,11 +1251,16 @@
取消事件
+
+
+ 是否跳过相同文件,默认不跳过(根据文件大小和修改时间来判断)
+
+
大文件按流复制文件,支持自动创建目标文件夹。 true:复制成功 false:复制失败
- 原始文件路径
+ 原始文件路径
复制目标文件路径
携带的参数(可选)
@@ -2039,6 +2044,25 @@
目标文件夹
返回复制操作是否成功的标识,成功返回0,负数表示复制失败的文件数量。1表示源文件夹不存在
+
+
+ 复制或剪切文件列表到剪切板
+
+
+
+
+
+
+ 复制文件列表到剪切板
+
+
+
+
+
+ 剪切文件列表到剪切板
+
+
+
重命名一个文件为新名称,建议您使用更方便的Microsoft.VisualBasic.FileSystem.ReName();替换该方法
@@ -13834,6 +13858,11 @@
+
+
+ 是否将时间类型转为时间戳
+
+
输出多条件搜索。
@@ -13848,6 +13877,12 @@
+
+
+ 根据输入的内容,生成Json数据
+
+
+
获取插入SQL语句
@@ -15902,27 +15937,44 @@
-
- Shell
-
+
+ 获得桌面 Shell
+
+
+
+
+ 获得桌面 Shell
+
+
+
+
+ 获取路径
+
+
+
+
+ 获取显示名称
+
+
+
+
+ 根据 PIDL 获取显示名称
+
+
+
+
+ 获取特殊文件夹的路径
+
根据路径获取 IShellFolder 和 PIDL
-
+
-
+ 根据路径获取 IShellFolder
-
-
-
-
-
-
-
-
@@ -16736,6 +16788,14 @@
+
+
+
+
+
+
+
+
注册热键
@@ -18082,6 +18142,11 @@
版本
+
+
+ 版本类型
+
+
更新日期
@@ -20148,10 +20213,11 @@
鼠标移上时,显示提示
-
+
- 字体
+
+
@@ -20265,6 +20331,16 @@
值1
+
+
+ int值1
+
+
+
+
+ long值1
+
+
Tag
@@ -20897,6 +20973,52 @@
热键文本框
+
+
+ 清除按钮位置
+
+
+
+
+ 热键文本位置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -24633,6 +24755,11 @@
Chrome风格的多标签控件
+
+
+ 获取或设置调整控件的选项卡大小的方式。
+
+
@@ -30255,12 +30382,12 @@
- Automatically sets the size of the label by content size
+ 根据内容大小自动设置标签的大小
- Automatically sets the height of the label by content height (width is not effected).
+ 根据内容高度自动设置标签的高度(宽度不受影响)。
@@ -54175,7 +54302,7 @@
Bounds of the cell
The string to be drawn
- 笔刷
+
@@ -54198,6 +54325,37 @@
+
+
+ Draw the given text and optional image in the "normal" fashion
+
+ Graphics context to use for drawing
+ Bounds of the cell
+
+ The string to be drawn
+ 笔刷
+
+
+
+ Draw the given text and optional image in the "normal" fashion
+
+ Graphics context to use for drawing
+ Bounds of the cell
+
+ The string to be drawn
+
+
+
+
+
+
+ 这里的r
+
+
+
+
+
+
@@ -58222,6 +58380,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Wrapper over the control like TextBox.
@@ -70094,79 +70325,6 @@
A visual indicator is displayed in the number margin.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
A class for the Batch lexer.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f7d5e4e..6b9e236 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,23 @@
-## :date:2025-06-27 星期五更新
+## :date:2025-08-16 星期六更新
+
+### rycUpdate V1.0.2506.0401
+- :lady_beetle:[修复]修复文件替换失败,不会失败提示的BUG。
+
+### RaUI V4.0.2508.1601
+- :cactus:[新增]ChromeTabControl控件支持设置SizeMode属性。
+- :cactus:[新增]HotkeyTextBox新增支持传入热键文本进行自动转换。
+- :cactus:[新增]ryQuickSQL类新增GetJsonData方法。
+- :cactus:[新增]ryQuickSQL类新增DateToTimeStamp属性,导出时自动将时间类型转为时间戳。
+- :cactus:[新增]自动更新模块新增支持版本类型,区分正式版和测试版。
+- :100:[改进]HotkeyTextBox控件渲染方式改成全画布渲染。
+- :100:[改进]TextBoxEx2开启多行模式后,空文本改成在第一行显示。
+- :lady_beetle:[修复]修复截图功能某些情况下会报错的BUG。
+- :lady_beetle:[修复]修复HotkeyValue类处理多功能键文本时转换错误的BUG。
+- :lady_beetle:[修复]修复RyComboBox控件在某些情况下边框会丢失的BUG。
+- :lady_beetle:[修复]修复Hosts类针对删除hosts规则处理出错的BUG。
+- :lady_beetle:[修复]修复当升级文件Url无法访问时,升级模块会无限期等待的BUG。
+
+## :date:2025-06-27 星期五更新
### RaUI V4.0.2506.2701
- :cactus:[新增]RediskCheck类新增支持对.NET3.5和.NET6-.NET9安装状态的判断。
diff --git a/Source/Itrycn_Project2/Config/Init.cs b/Source/Itrycn_Project2/Config/Init.cs
index 9971c34..7ea0e95 100644
--- a/Source/Itrycn_Project2/Config/Init.cs
+++ b/Source/Itrycn_Project2/Config/Init.cs
@@ -21,6 +21,7 @@ namespace Itrycn_Project2.Config
}
else
{
+ Public_Config.LoadSetting();
Application.Run(new FrmStart(args));
//Application.Run(new FrmTest2());
//Application.Run(new WindowsFormsApp2.Form1());
diff --git a/Source/Itrycn_Project2/Config/Public_Config.cs b/Source/Itrycn_Project2/Config/Public_Config.cs
index 18c128f..7a78f11 100644
--- a/Source/Itrycn_Project2/Config/Public_Config.cs
+++ b/Source/Itrycn_Project2/Config/Public_Config.cs
@@ -17,7 +17,7 @@ namespace Itrycn_Project2
public static void LoadSetting()
{
ryCommon.Storage Stor = new ryCommon.Storage();
- Stor.LoadFromFile(Soft_ConstInfo.UserDataFolder+"\\Setting.dat");
+ Stor.LoadFromFile(Soft_ConstInfo.UserDataFolder+"\\Setting.xml");
Stor.SelectNodeBySet();
HideByCloseBtn = Stor.GetAttrValue("HideByCloseBtn", false);
//low_count = Stor.GetAttrValue("LowCount", 10);
diff --git a/Source/Itrycn_Project2/FrmStart.Designer.cs b/Source/Itrycn_Project2/FrmStart.Designer.cs
index 19a654c..1a4b5e0 100644
--- a/Source/Itrycn_Project2/FrmStart.Designer.cs
+++ b/Source/Itrycn_Project2/FrmStart.Designer.cs
@@ -44,19 +44,18 @@
this.捐助ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.chromeTabControl1 = new ryControls.ChromeTabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
+ this.textBoxEx21 = new ryControls.TextBoxEx2();
+ this.buttonEx1 = new ryControls.ButtonEx();
+ this.hotkeyTextBox1 = new ryControls.HotkeyTextBox();
this.rySearch1 = new ryControls.rySearch();
this.doubleText1 = new ryControls.DoubleText();
this.ryComboBox1 = new ryControls.ComboBoxEx2();
- this.textBoxEx21 = new ryControls.TextBoxEx2();
this.textBoxEx1 = new ryControls.TextBoxEx();
- this.button3 = new System.Windows.Forms.Button();
this.richTextBox21 = new ryControls.Controls.RichTextBox2();
- this.button2 = new System.Windows.Forms.Button();
this.htmlPanel1 = new TheArtOfDev.HtmlRenderer.WinForms.HtmlPanel();
this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.TabLogs = new System.Windows.Forms.TabPage();
- this.button1 = new System.Windows.Forms.Button();
this.LvLogs = new BrightIdeasSoftware.ObjectListView();
this.OlvLogTime = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
this.OlvLogText = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
@@ -159,6 +158,7 @@
this.chromeTabControl1.Controls.Add(this.tabPage1);
this.chromeTabControl1.Controls.Add(this.TabLogs);
this.chromeTabControl1.Cursor = System.Windows.Forms.Cursors.Default;
+ this.chromeTabControl1.DrawTabBorder = true;
this.chromeTabControl1.ItemSize = new System.Drawing.Size(100, 25);
this.chromeTabControl1.Location = new System.Drawing.Point(1, 55);
this.chromeTabControl1.Name = "chromeTabControl1";
@@ -166,7 +166,6 @@
this.chromeTabControl1.ShowAddButton = false;
this.chromeTabControl1.ShowCloseButton = false;
this.chromeTabControl1.Size = new System.Drawing.Size(1005, 664);
- this.chromeTabControl1.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
this.chromeTabControl1.TabContextMenuStrip = null;
this.chromeTabControl1.TabIndex = 0;
this.chromeTabControl1.TabMaxWidth = 100;
@@ -174,14 +173,14 @@
// tabPage1
//
this.tabPage1.AutoScroll = true;
+ this.tabPage1.Controls.Add(this.textBoxEx21);
+ this.tabPage1.Controls.Add(this.buttonEx1);
+ this.tabPage1.Controls.Add(this.hotkeyTextBox1);
this.tabPage1.Controls.Add(this.rySearch1);
this.tabPage1.Controls.Add(this.doubleText1);
this.tabPage1.Controls.Add(this.ryComboBox1);
- this.tabPage1.Controls.Add(this.textBoxEx21);
this.tabPage1.Controls.Add(this.textBoxEx1);
- this.tabPage1.Controls.Add(this.button3);
this.tabPage1.Controls.Add(this.richTextBox21);
- this.tabPage1.Controls.Add(this.button2);
this.tabPage1.Controls.Add(this.htmlPanel1);
this.tabPage1.Controls.Add(this.pictureBox2);
this.tabPage1.Controls.Add(this.pictureBox1);
@@ -193,6 +192,52 @@
this.tabPage1.Text = "首页";
this.tabPage1.UseVisualStyleBackColor = true;
//
+ // textBoxEx21
+ //
+ this.textBoxEx21.BackColor = System.Drawing.Color.White;
+ this.textBoxEx21.EmptyText = "fggzgftgg ";
+ this.textBoxEx21.Location = new System.Drawing.Point(161, 30);
+ this.textBoxEx21.LongTime = 2000;
+ this.textBoxEx21.MaxLength = 999999999;
+ this.textBoxEx21.MaxUndoRedoSteps = 50;
+ this.textBoxEx21.Multiline = true;
+ this.textBoxEx21.Name = "textBoxEx21";
+ this.textBoxEx21.OnlyNumeric = false;
+ this.textBoxEx21.PasswordChar = '\0';
+ this.textBoxEx21.ReadOnly = false;
+ this.textBoxEx21.SelectedText = "";
+ this.textBoxEx21.SelectionLength = 0;
+ this.textBoxEx21.SelectionStart = 0;
+ this.textBoxEx21.Size = new System.Drawing.Size(339, 179);
+ this.textBoxEx21.TabIndex = 31;
+ this.textBoxEx21.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
+ this.textBoxEx21.ToolTip = "";
+ this.textBoxEx21.WordWrap = true;
+ //
+ // buttonEx1
+ //
+ this.buttonEx1.BackColor = System.Drawing.Color.Gray;
+ this.buttonEx1.BaseColor = System.Drawing.Color.FromArgb(((int)(((byte)(51)))), ((int)(((byte)(76)))), ((int)(((byte)(95)))));
+ this.buttonEx1.ImageTextSpace = 0;
+ this.buttonEx1.ImageWidth = 12;
+ this.buttonEx1.Location = new System.Drawing.Point(180, 153);
+ this.buttonEx1.Name = "buttonEx1";
+ this.buttonEx1.Size = new System.Drawing.Size(61, 27);
+ this.buttonEx1.TabIndex = 30;
+ this.buttonEx1.Text = "测试";
+ this.buttonEx1.UseVisualStyleBackColor = false;
+ //
+ // hotkeyTextBox1
+ //
+ this.hotkeyTextBox1.BackColor = System.Drawing.Color.White;
+ this.hotkeyTextBox1.HotKey = "0+0";
+ this.hotkeyTextBox1.Location = new System.Drawing.Point(161, 215);
+ this.hotkeyTextBox1.Name = "hotkeyTextBox1";
+ this.hotkeyTextBox1.Size = new System.Drawing.Size(220, 27);
+ this.hotkeyTextBox1.T_Key = System.Windows.Forms.Keys.None;
+ this.hotkeyTextBox1.T_Modifiers = 0;
+ this.hotkeyTextBox1.TabIndex = 29;
+ //
// rySearch1
//
this.rySearch1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(236)))), ((int)(((byte)(239)))), ((int)(((byte)(244)))));
@@ -209,7 +254,7 @@
this.doubleText1.Location = new System.Drawing.Point(141, 265);
this.doubleText1.Name = "doubleText1";
this.doubleText1.SelectName = "";
- this.doubleText1.Size = new System.Drawing.Size(240, 39);
+ this.doubleText1.Size = new System.Drawing.Size(240, 27);
this.doubleText1.TabIndex = 26;
//
// ryComboBox1
@@ -225,33 +270,11 @@
this.ryComboBox1.MaxPopupHeight = 0;
this.ryComboBox1.MaxPopupWidth = 0;
this.ryComboBox1.Name = "ryComboBox1";
+ this.ryComboBox1.SelectedIndex = -1;
+ this.ryComboBox1.SelectedItem = null;
this.ryComboBox1.Size = new System.Drawing.Size(238, 36);
this.ryComboBox1.TabIndex = 25;
- //
- // textBoxEx21
- //
- this.textBoxEx21.BackColor = System.Drawing.Color.White;
- this.textBoxEx21.EmptyText = "ddd对对对";
- this.textBoxEx21.Location = new System.Drawing.Point(149, 170);
- this.textBoxEx21.LongTime = 2000;
- this.textBoxEx21.MaxLength = 999999999;
- this.textBoxEx21.MaxUndoRedoSteps = 50;
- this.textBoxEx21.Multiline = false;
- this.textBoxEx21.Name = "textBoxEx21";
- this.textBoxEx21.OnlyNumeric = false;
- this.textBoxEx21.PasswordChar = '\0';
- this.textBoxEx21.ReadOnly = false;
- this.textBoxEx21.SelectedText = "";
- this.textBoxEx21.SelectionLength = 0;
- this.textBoxEx21.SelectionStart = 0;
- this.textBoxEx21.Size = new System.Drawing.Size(233, 33);
- this.textBoxEx21.TabIndex = 24;
- this.textBoxEx21.Text = "textBoxEx21";
- this.textBoxEx21.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
- this.textBoxEx21.ToolTip = "";
- this.textBoxEx21.WordWrap = true;
- this.textBoxEx21.LongTimeNoChanged += new System.EventHandler(this.textBoxEx21_LongTimeNoChanged);
- this.textBoxEx21.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBoxEx21_KeyDown);
+ this.ryComboBox1.ToolTipText = "";
//
// textBoxEx1
//
@@ -264,19 +287,8 @@
this.textBoxEx1.Size = new System.Drawing.Size(202, 21);
this.textBoxEx1.TabIndex = 23;
//
- // button3
- //
- this.button3.Location = new System.Drawing.Point(254, 105);
- this.button3.Name = "button3";
- this.button3.Size = new System.Drawing.Size(143, 37);
- this.button3.TabIndex = 22;
- this.button3.Text = "button3";
- this.button3.UseVisualStyleBackColor = true;
- this.button3.Click += new System.EventHandler(this.button3_Click);
- //
// richTextBox21
//
- this.richTextBox21.DetectUrls = false;
this.richTextBox21.EmptyText = "";
this.richTextBox21.Font = new System.Drawing.Font("Courier New", 10F);
this.richTextBox21.Location = new System.Drawing.Point(417, 26);
@@ -288,18 +300,6 @@
"赢得道具和奖励,培养她的感情,解锁不同的结局。这款游戏将带给你与怪兽公主共度时光的乐趣与刺激。";
this.richTextBox21.WordWrap = true;
//
- // button2
- //
- this.button2.Location = new System.Drawing.Point(854, 46);
- this.button2.MaximumSize = new System.Drawing.Size(143, 37);
- this.button2.MinimumSize = new System.Drawing.Size(143, 37);
- this.button2.Name = "button2";
- this.button2.Size = new System.Drawing.Size(143, 37);
- this.button2.TabIndex = 20;
- this.button2.Text = "button2";
- this.button2.UseVisualStyleBackColor = true;
- this.button2.Click += new System.EventHandler(this.button2_Click);
- //
// htmlPanel1
//
this.htmlPanel1.AutoScroll = true;
@@ -331,7 +331,6 @@
//
// TabLogs
//
- this.TabLogs.Controls.Add(this.button1);
this.TabLogs.Controls.Add(this.LvLogs);
this.TabLogs.Location = new System.Drawing.Point(1, 29);
this.TabLogs.Name = "TabLogs";
@@ -341,16 +340,6 @@
this.TabLogs.Text = "日志";
this.TabLogs.UseVisualStyleBackColor = true;
//
- // button1
- //
- this.button1.Location = new System.Drawing.Point(275, 64);
- this.button1.Name = "button1";
- this.button1.Size = new System.Drawing.Size(125, 29);
- this.button1.TabIndex = 15;
- this.button1.Text = "button1";
- this.button1.UseVisualStyleBackColor = true;
- this.button1.Click += new System.EventHandler(this.Button1_Click);
- //
// LvLogs
//
this.LvLogs.AllColumns.Add(this.OlvLogTime);
@@ -431,17 +420,16 @@
private BrightIdeasSoftware.ObjectListView LvLogs;
private BrightIdeasSoftware.OLVColumn OlvLogTime;
private BrightIdeasSoftware.OLVColumn OlvLogText;
- private System.Windows.Forms.Button button1;
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.PictureBox pictureBox2;
private TheArtOfDev.HtmlRenderer.WinForms.HtmlPanel htmlPanel1;
private ryControls.Controls.RichTextBox2 richTextBox21;
- private System.Windows.Forms.Button button3;
private ryControls.TextBoxEx textBoxEx1;
- private ryControls.TextBoxEx2 textBoxEx21;
private ryControls.ComboBoxEx2 ryComboBox1;
- private System.Windows.Forms.Button button2;
private ryControls.DoubleText doubleText1;
private ryControls.rySearch rySearch1;
+ private ryControls.HotkeyTextBox hotkeyTextBox1;
+ private ryControls.ButtonEx buttonEx1;
+ private ryControls.TextBoxEx2 textBoxEx21;
}
}
\ No newline at end of file
diff --git a/Source/Itrycn_Project2/FrmStart.cs b/Source/Itrycn_Project2/FrmStart.cs
index 0903594..8481d2e 100644
--- a/Source/Itrycn_Project2/FrmStart.cs
+++ b/Source/Itrycn_Project2/FrmStart.cs
@@ -16,7 +16,6 @@ using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
-using static System.Net.Mime.MediaTypeNames;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace Itrycn_Project2
@@ -161,6 +160,7 @@ namespace Itrycn_Project2
}
LvLogs.InsertObjects(0, new LogInfo[] { new LogInfo() { LogTime = DateTime.Now, LogText = log,LogTag=tag, Color = color } });
OlvLogTime.Text = "时间(" + LvLogs.GetItemCount() + ")";
+ TabLogs.Text = "日志(" + LvLogs.GetItemCount() + ")"; ;
}));
}
catch { }
@@ -265,11 +265,13 @@ namespace Itrycn_Project2
private void FrmStart_Load(object sender, EventArgs e)
{
- ryComboBox1.SelectedIndex=0;
+ //SaveBase64ImageAsFile("data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAA8AAD/4QMraHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjMtYzAxMSA2Ni4xNDU2NjEsIDIwMTIvMDIvMDYtMTQ6NTY6MjcgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDUzYgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjM4MjUzRUI0MTYxQzExRUVCMEZBRjAxODQ2NjA5Q0YxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjM4MjUzRUI1MTYxQzExRUVCMEZBRjAxODQ2NjA5Q0YxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MzgyNTNFQjIxNjFDMTFFRUIwRkFGMDE4NDY2MDlDRjEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MzgyNTNFQjMxNjFDMTFFRUIwRkFGMDE4NDY2MDlDRjEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7/7gAOQWRvYmUAZMAAAAAB/9sAhAAGBAQEBQQGBQUGCQYFBgkLCAYG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", Application.StartupPath + "\\1111.jpg");
+ //hotkeyTextBox1.LoadHotKey("Ctrl+Shift+A");
+ //ryComboBox1.SelectedIndex=0;
//var process = Process.GetProcessesByName("bds");
//System.Net.ServicePointManager.DefaultConnectionLimit = 50;
- QuickWeb web = new QuickWeb();
- var http = web.UrlEncode("猫咪——安安");
+ //QuickWeb web = new QuickWeb();
+ //var http = web.UrlEncode("猫咪——安安");
//web.Referer = "http://k73dx12.tengapk.com/android/dreamhouse.mod.apk";
//var kk = web.GetSize("http://42.248.92.71:2080/k73dx12.tengapk.com/android/dreamhouse.mod.apk?wsiphost=ipdbme&wsrid_tag=66b17fe7_PS-HYN-01IIQ27_63791-5797-s1t1722908647649&ip_type=0");
//IDbInterface db = new MySqlDataProvider();
@@ -278,13 +280,13 @@ namespace Itrycn_Project2
//var size= web.GetSize("https://oss-admin.blazingcats.com/Product/Package/100_llfz_101_llfzgw_1656930048.apk");
//size = web.GetSize("https://oss-admin.blazingcats.com/Product/Package/100_llfz_101_llfzgw_1656930048.apk");
//textBox2.Text = web.Get("https://apkpure.com/cn/animation-throwdown-epic-ccg/com.kongregate.mobile.throwdown.google/download").Html;
- ryCommon.ApkOp apkOp = new ApkOp();
- apkOp.AAPT_Path = "E:\\My Datas\\My Codes\\毕方项目\\CSharp\\ryProcessManager\\Bin\\Debug\\SysDb\\Tools\\ApkLook\\aapt.exe";
- var kk = apkOp.Read_Apk("C:\\Users\\zilin\\Desktop\\Measure X.apk");
+ //ryCommon.ApkOp apkOp = new ApkOp();
+ //apkOp.AAPT_Path = "E:\\My Datas\\My Codes\\毕方项目\\CSharp\\ryProcessManager\\Bin\\Debug\\SysDb\\Tools\\ApkLook\\aapt.exe";
+ //var kk = apkOp.Read_Apk("C:\\Users\\zilin\\Desktop\\com.lhdn.apk");
// objectListView1.InsertObjects(0, new LogInfo[] { new LogInfo() });
//var en= ryCommon.TxtFileEncoder.GetEncoding(@"E:\My Datas\毕方项目\CSharp\ryProcessManager\Bin\Debug\SysDb\applist.lst");
- //var hosts = ryCommon.RyFiles.ReadAllText(@"E:\My Datas\毕方项目\CSharp\ryProcessManager\Bin\Debug\UserDb\Hosts.txt");
- //var result = ryCommon.Hosts.AddHosts(hosts);
+ var hosts = ryCommon.RyFiles.ReadAllText(@"E:\My Datas\My Codes\毕方项目\CSharp\ryProcessManager\Bin\Debug\UserDb\Hosts.txt");
+ var result = ryCommon.Hosts.AddHosts(hosts);
//var kk= ryCommon.ProcessExt.GetPath(24348);
//var img = RyImage.LoadPic(@"C:\Users\zilin\Desktop\1.jpg");
//var watermark =new Bitmap(RyImage.LoadPic(@"C:\Users\zilin\Desktop\water.png"));
@@ -356,78 +358,5 @@ namespace Itrycn_Project2
///
public Color Color { get; set; } = Color.Black;
}
-
- private void Button1_Click(object sender, EventArgs e)
- {
- LvLogs.ClearObjects();
- AddLog("测试测试");
- }
-
- private void textBox1_TextChanged(object sender, EventArgs e)
- {
- //var text = "";
- //try
- //{
- // HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
- // htmlDoc.LoadHtml(textBox2.Text);
- // HtmlNodeCollection anchors = htmlDoc.DocumentNode.SelectNodes(textBox1.Text);
- // if (anchors != null)
- // {
- // for (int i = 0; i < anchors.Count; i++)
- // {
- // if (text != "") { text += "
"; }
- // if (i % 2 == 0)
- // {
- // text += "" + System.Web.HttpUtility.HtmlEncode(anchors[i].OuterHtml) + "";
- // }
- // else
- // {
- // text += "" + System.Web.HttpUtility.HtmlEncode(anchors[i].OuterHtml) + "";
- // }
- // }
- // }
- //}
- //catch (Exception ex){
- // text = "" + System.Web.HttpUtility.HtmlEncode(ex.Message) + "";
- //}
- //htmlPanel1.Text = System.Web.HttpUtility.HtmlEncode(textBox1.Text);
- }
- ILayeredForm subForm = null;
- private void button2_Click(object sender, EventArgs e)
- {
- subForm = new FormTest();
- subForm.Layered(button2);
- subForm.Disposed += (a, b) =>
- {
- subForm = null;
- };
- subForm.Show();
- }
-
- private void button3_Click(object sender, EventArgs e)
- {
- Form form=(Form)Activator.CreateInstance(typeof(FrmTest2)); ;
- ShowInCenter(form, this);
- ryCommon.RyForm.BringToTop(form.Handle);
- ryCommon.RyForm.SetActiveWindow(form.Handle);
- try
- {
- if (!form.IsDisposed) form.Show();
- }
- catch { }
- }
-
- private void textBoxEx21_KeyDown(object sender, KeyEventArgs e)
- {
- if (e.KeyCode == Keys.Enter)
- {
- MessageBox.Show("111");
- }
- }
-
- private void textBoxEx21_LongTimeNoChanged(object sender, EventArgs e)
- {
- MessageBox.Show("222");
- }
}
}
diff --git a/Source/Itrycn_Project2/FrmStart.resx b/Source/Itrycn_Project2/FrmStart.resx
index 4beb845..98fac57 100644
--- a/Source/Itrycn_Project2/FrmStart.resx
+++ b/Source/Itrycn_Project2/FrmStart.resx
@@ -126,62 +126,8 @@
246, 17
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
- 54
+ 25
diff --git a/Source/OnLineUpgradeConfig/frmUpdateFile.Designer.cs b/Source/OnLineUpgradeConfig/frmUpdateFile.Designer.cs
index 4966916..7c8ffdc 100644
--- a/Source/OnLineUpgradeConfig/frmUpdateFile.Designer.cs
+++ b/Source/OnLineUpgradeConfig/frmUpdateFile.Designer.cs
@@ -35,7 +35,7 @@ namespace LiveUpdate
this.BtnOK = new System.Windows.Forms.Button();
this.tabControl1 = new System.Windows.Forms.TabControl();
this.tabPage1 = new System.Windows.Forms.TabPage();
- this.cmbNewVer = new ryControls.TextBoxEx2();
+ this.label10 = new System.Windows.Forms.Label();
this.checkBox2 = new System.Windows.Forms.CheckBox();
this.checkBox1 = new System.Windows.Forms.CheckBox();
this.linkLabel8 = new System.Windows.Forms.LinkLabel();
@@ -49,37 +49,27 @@ namespace LiveUpdate
this.linkLabel1 = new System.Windows.Forms.LinkLabel();
this.label12 = new System.Windows.Forms.Label();
this.BtnOneKeyUpdate = new System.Windows.Forms.Button();
- this.txtDbUpdateDes = new ryControls.TextBoxEx2();
- this.txtUpdateDes = new ryControls.TextBoxEx2();
this.label8 = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
- this.cmbDbUpdateUrl = new ryControls.RyComboBox();
this.label6 = new System.Windows.Forms.Label();
- this.cmbProcUpdateUrl = new ryControls.RyComboBox();
this.label5 = new System.Windows.Forms.Label();
this.dtNewDataDate = new System.Windows.Forms.DateTimePicker();
this.label4 = new System.Windows.Forms.Label();
this.dtNewProcDate = new System.Windows.Forms.DateTimePicker();
this.label3 = new System.Windows.Forms.Label();
- this.cmbNewDbVer = new ryControls.RyComboBox();
this.label2 = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.tabPage2 = new System.Windows.Forms.TabPage();
- this.txtDelFileList = new ryControls.Controls.RichTextBox2();
- this.txtKillProcList = new ryControls.Controls.RichTextBox2();
this.btnSelectUser = new System.Windows.Forms.Button();
this.label16 = new System.Windows.Forms.Label();
this.label15 = new System.Windows.Forms.Label();
this.label14 = new System.Windows.Forms.Label();
this.label11 = new System.Windows.Forms.Label();
this.label9 = new System.Windows.Forms.Label();
- this.txtMainProcPram = new ryControls.TextBoxEx2();
- this.txtMainProcName = new ryControls.TextBoxEx2();
- this.txtUserList = new ryControls.RyComboBox();
this.tabPage3 = new System.Windows.Forms.TabPage();
+ this.BtnDefUpdateLog = new System.Windows.Forms.Button();
this.BtnPasteFromMD = new System.Windows.Forms.Button();
this.ChkUseHtml = new System.Windows.Forms.CheckBox();
- this.TxtUpdateDes_Html = new ryControls.Controls.RichTextBox2();
this.tabPage4 = new System.Windows.Forms.TabPage();
this.LblState = new System.Windows.Forms.Label();
this.BtnCopyToNormal = new System.Windows.Forms.Button();
@@ -89,6 +79,19 @@ namespace LiveUpdate
this.BtnUsersView = new System.Windows.Forms.Button();
this.LvUpdateFiles = new BrightIdeasSoftware.ObjectListView();
this.OlvFileName = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
+ this.CbbVersionType = new ryControls.RyComboBox();
+ this.cmbNewVer = new ryControls.TextBoxEx2();
+ this.txtDbUpdateDes = new ryControls.TextBoxEx2();
+ this.txtUpdateDes = new ryControls.TextBoxEx2();
+ this.cmbDbUpdateUrl = new ryControls.RyComboBox();
+ this.cmbProcUpdateUrl = new ryControls.RyComboBox();
+ this.cmbNewDbVer = new ryControls.RyComboBox();
+ this.txtDelFileList = new ryControls.Controls.RichTextBox2();
+ this.txtKillProcList = new ryControls.Controls.RichTextBox2();
+ this.txtMainProcPram = new ryControls.TextBoxEx2();
+ this.txtMainProcName = new ryControls.TextBoxEx2();
+ this.txtUserList = new ryControls.RyComboBox();
+ this.TxtUpdateDes_Html = new ryControls.Controls.RichTextBox2();
this.tabControl1.SuspendLayout();
this.tabPage1.SuspendLayout();
this.tabPage2.SuspendLayout();
@@ -137,6 +140,8 @@ namespace LiveUpdate
// tabPage1
//
this.tabPage1.BackColor = System.Drawing.Color.White;
+ this.tabPage1.Controls.Add(this.CbbVersionType);
+ this.tabPage1.Controls.Add(this.label10);
this.tabPage1.Controls.Add(this.cmbNewVer);
this.tabPage1.Controls.Add(this.checkBox2);
this.tabPage1.Controls.Add(this.checkBox1);
@@ -173,29 +178,14 @@ namespace LiveUpdate
this.tabPage1.TabIndex = 0;
this.tabPage1.Text = "基本设置";
//
- // cmbNewVer
+ // label10
//
- this.cmbNewVer.BackColor = System.Drawing.Color.White;
- this.cmbNewVer.EmptyText = "";
- this.cmbNewVer.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- this.cmbNewVer.Location = new System.Drawing.Point(9, 23);
- this.cmbNewVer.LongTime = 2000;
- this.cmbNewVer.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
- this.cmbNewVer.MaxLength = 999999999;
- this.cmbNewVer.MaxUndoRedoSteps = 50;
- this.cmbNewVer.Multiline = false;
- this.cmbNewVer.Name = "cmbNewVer";
- this.cmbNewVer.OnlyNumeric = false;
- this.cmbNewVer.PasswordChar = '\0';
- this.cmbNewVer.ReadOnly = false;
- this.cmbNewVer.SelectedText = "";
- this.cmbNewVer.SelectionLength = 0;
- this.cmbNewVer.SelectionStart = 0;
- this.cmbNewVer.Size = new System.Drawing.Size(223, 31);
- this.cmbNewVer.TabIndex = 47;
- this.cmbNewVer.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
- this.cmbNewVer.ToolTip = "";
- this.cmbNewVer.WordWrap = true;
+ this.label10.AutoSize = true;
+ this.label10.Location = new System.Drawing.Point(317, 8);
+ this.label10.Name = "label10";
+ this.label10.Size = new System.Drawing.Size(53, 12);
+ this.label10.TabIndex = 48;
+ this.label10.Text = "版本类型";
//
// checkBox2
//
@@ -353,56 +343,6 @@ namespace LiveUpdate
this.BtnOneKeyUpdate.UseVisualStyleBackColor = true;
this.BtnOneKeyUpdate.Click += new System.EventHandler(this.BtnOneKeyUpdate_Click);
//
- // txtDbUpdateDes
- //
- this.txtDbUpdateDes.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.txtDbUpdateDes.BackColor = System.Drawing.Color.White;
- this.txtDbUpdateDes.EmptyText = "";
- this.txtDbUpdateDes.Enabled = false;
- this.txtDbUpdateDes.Location = new System.Drawing.Point(10, 380);
- this.txtDbUpdateDes.LongTime = 2000;
- this.txtDbUpdateDes.MaxLength = 999999999;
- this.txtDbUpdateDes.MaxUndoRedoSteps = 50;
- this.txtDbUpdateDes.Multiline = true;
- this.txtDbUpdateDes.Name = "txtDbUpdateDes";
- this.txtDbUpdateDes.OnlyNumeric = false;
- this.txtDbUpdateDes.PasswordChar = '\0';
- this.txtDbUpdateDes.ReadOnly = false;
- this.txtDbUpdateDes.SelectedText = "";
- this.txtDbUpdateDes.SelectionLength = 0;
- this.txtDbUpdateDes.SelectionStart = 0;
- this.txtDbUpdateDes.Size = new System.Drawing.Size(657, 133);
- this.txtDbUpdateDes.TabIndex = 31;
- this.txtDbUpdateDes.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
- this.txtDbUpdateDes.ToolTip = "";
- this.txtDbUpdateDes.WordWrap = true;
- //
- // txtUpdateDes
- //
- this.txtUpdateDes.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.txtUpdateDes.BackColor = System.Drawing.Color.White;
- this.txtUpdateDes.EmptyText = "";
- this.txtUpdateDes.Location = new System.Drawing.Point(10, 195);
- this.txtUpdateDes.LongTime = 2000;
- this.txtUpdateDes.MaxLength = 999999999;
- this.txtUpdateDes.MaxUndoRedoSteps = 50;
- this.txtUpdateDes.Multiline = true;
- this.txtUpdateDes.Name = "txtUpdateDes";
- this.txtUpdateDes.OnlyNumeric = false;
- this.txtUpdateDes.PasswordChar = '\0';
- this.txtUpdateDes.ReadOnly = false;
- this.txtUpdateDes.SelectedText = "";
- this.txtUpdateDes.SelectionLength = 0;
- this.txtUpdateDes.SelectionStart = 0;
- this.txtUpdateDes.Size = new System.Drawing.Size(657, 164);
- this.txtUpdateDes.TabIndex = 30;
- this.txtUpdateDes.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
- this.txtUpdateDes.ToolTip = "";
- this.txtUpdateDes.WordWrap = true;
- //
// label8
//
this.label8.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
@@ -422,20 +362,6 @@ namespace LiveUpdate
this.label7.TabIndex = 28;
this.label7.Text = "软件更新描述:";
//
- // cmbDbUpdateUrl
- //
- this.cmbDbUpdateUrl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.cmbDbUpdateUrl.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
- this.cmbDbUpdateUrl.Enabled = false;
- this.cmbDbUpdateUrl.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.cmbDbUpdateUrl.FormattingEnabled = true;
- this.cmbDbUpdateUrl.Location = new System.Drawing.Point(9, 155);
- this.cmbDbUpdateUrl.MaxUndoRedoSteps = 50;
- this.cmbDbUpdateUrl.Name = "cmbDbUpdateUrl";
- this.cmbDbUpdateUrl.Size = new System.Drawing.Size(658, 22);
- this.cmbDbUpdateUrl.TabIndex = 27;
- //
// label6
//
this.label6.AutoSize = true;
@@ -445,19 +371,6 @@ namespace LiveUpdate
this.label6.TabIndex = 26;
this.label6.Text = "数据库更新地址:";
//
- // cmbProcUpdateUrl
- //
- this.cmbProcUpdateUrl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.cmbProcUpdateUrl.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
- this.cmbProcUpdateUrl.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.cmbProcUpdateUrl.FormattingEnabled = true;
- this.cmbProcUpdateUrl.Location = new System.Drawing.Point(9, 117);
- this.cmbProcUpdateUrl.MaxUndoRedoSteps = 50;
- this.cmbProcUpdateUrl.Name = "cmbProcUpdateUrl";
- this.cmbProcUpdateUrl.Size = new System.Drawing.Size(658, 22);
- this.cmbProcUpdateUrl.TabIndex = 25;
- //
// label5
//
this.label5.AutoSize = true;
@@ -473,7 +386,7 @@ namespace LiveUpdate
this.dtNewDataDate.Enabled = false;
this.dtNewDataDate.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.dtNewDataDate.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
- this.dtNewDataDate.Location = new System.Drawing.Point(326, 72);
+ this.dtNewDataDate.Location = new System.Drawing.Point(447, 71);
this.dtNewDataDate.Name = "dtNewDataDate";
this.dtNewDataDate.Size = new System.Drawing.Size(201, 26);
this.dtNewDataDate.TabIndex = 23;
@@ -481,7 +394,7 @@ namespace LiveUpdate
// label4
//
this.label4.AutoSize = true;
- this.label4.Location = new System.Drawing.Point(324, 57);
+ this.label4.Location = new System.Drawing.Point(445, 56);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(95, 12);
this.label4.TabIndex = 22;
@@ -509,23 +422,10 @@ namespace LiveUpdate
this.label3.TabIndex = 20;
this.label3.Text = "最新软件日期:";
//
- // cmbNewDbVer
- //
- this.cmbNewDbVer.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
- this.cmbNewDbVer.Enabled = false;
- this.cmbNewDbVer.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.cmbNewDbVer.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- this.cmbNewDbVer.FormattingEnabled = true;
- this.cmbNewDbVer.Location = new System.Drawing.Point(326, 25);
- this.cmbNewDbVer.MaxUndoRedoSteps = 50;
- this.cmbNewDbVer.Name = "cmbNewDbVer";
- this.cmbNewDbVer.Size = new System.Drawing.Size(122, 27);
- this.cmbNewDbVer.TabIndex = 19;
- //
// label2
//
this.label2.AutoSize = true;
- this.label2.Location = new System.Drawing.Point(324, 8);
+ this.label2.Location = new System.Drawing.Point(445, 7);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(95, 12);
this.label2.TabIndex = 18;
@@ -563,35 +463,6 @@ namespace LiveUpdate
this.tabPage2.TabIndex = 1;
this.tabPage2.Text = "升级前后";
//
- // txtDelFileList
- //
- this.txtDelFileList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.txtDelFileList.EmptyText = "";
- this.txtDelFileList.Font = new System.Drawing.Font("Courier New", 10F);
- this.txtDelFileList.Location = new System.Drawing.Point(10, 198);
- this.txtDelFileList.Name = "txtDelFileList";
- this.txtDelFileList.OnlyInputText = false;
- this.txtDelFileList.Size = new System.Drawing.Size(660, 233);
- this.txtDelFileList.TabIndex = 37;
- this.txtDelFileList.Text = "";
- this.txtDelFileList.WordWrap = true;
- //
- // txtKillProcList
- //
- this.txtKillProcList.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.txtKillProcList.EmptyText = "";
- this.txtKillProcList.Font = new System.Drawing.Font("Courier New", 10F);
- this.txtKillProcList.Location = new System.Drawing.Point(10, 22);
- this.txtKillProcList.Name = "txtKillProcList";
- this.txtKillProcList.OnlyInputText = false;
- this.txtKillProcList.Size = new System.Drawing.Size(660, 158);
- this.txtKillProcList.TabIndex = 36;
- this.txtKillProcList.Text = "";
- this.txtKillProcList.WordWrap = true;
- //
// btnSelectUser
//
this.btnSelectUser.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
@@ -651,73 +522,13 @@ namespace LiveUpdate
this.label9.AutoSize = true;
this.label9.Location = new System.Drawing.Point(8, 7);
this.label9.Name = "label9";
- this.label9.Size = new System.Drawing.Size(149, 12);
+ this.label9.Size = new System.Drawing.Size(467, 12);
this.label9.TabIndex = 0;
- this.label9.Text = "升级前需要结束的进程列表";
- //
- // txtMainProcPram
- //
- this.txtMainProcPram.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
- this.txtMainProcPram.BackColor = System.Drawing.Color.White;
- this.txtMainProcPram.EmptyText = "";
- this.txtMainProcPram.Location = new System.Drawing.Point(577, 450);
- this.txtMainProcPram.LongTime = 2000;
- this.txtMainProcPram.MaxLength = 999999999;
- this.txtMainProcPram.MaxUndoRedoSteps = 50;
- this.txtMainProcPram.Multiline = false;
- this.txtMainProcPram.Name = "txtMainProcPram";
- this.txtMainProcPram.OnlyNumeric = false;
- this.txtMainProcPram.PasswordChar = '\0';
- this.txtMainProcPram.ReadOnly = false;
- this.txtMainProcPram.SelectedText = "";
- this.txtMainProcPram.SelectionLength = 0;
- this.txtMainProcPram.SelectionStart = 0;
- this.txtMainProcPram.Size = new System.Drawing.Size(92, 21);
- this.txtMainProcPram.TabIndex = 9;
- this.txtMainProcPram.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
- this.txtMainProcPram.ToolTip = "";
- this.txtMainProcPram.WordWrap = true;
- //
- // txtMainProcName
- //
- this.txtMainProcName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.txtMainProcName.BackColor = System.Drawing.Color.White;
- this.txtMainProcName.EmptyText = "";
- this.txtMainProcName.Location = new System.Drawing.Point(10, 450);
- this.txtMainProcName.LongTime = 2000;
- this.txtMainProcName.MaxLength = 999999999;
- this.txtMainProcName.MaxUndoRedoSteps = 50;
- this.txtMainProcName.Multiline = false;
- this.txtMainProcName.Name = "txtMainProcName";
- this.txtMainProcName.OnlyNumeric = false;
- this.txtMainProcName.PasswordChar = '\0';
- this.txtMainProcName.ReadOnly = false;
- this.txtMainProcName.SelectedText = "";
- this.txtMainProcName.SelectionLength = 0;
- this.txtMainProcName.SelectionStart = 0;
- this.txtMainProcName.Size = new System.Drawing.Size(561, 21);
- this.txtMainProcName.TabIndex = 3;
- this.txtMainProcName.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
- this.txtMainProcName.ToolTip = "";
- this.txtMainProcName.WordWrap = true;
- //
- // txtUserList
- //
- this.txtUserList.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.txtUserList.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
- this.txtUserList.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
- this.txtUserList.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- this.txtUserList.FormattingEnabled = true;
- this.txtUserList.Location = new System.Drawing.Point(9, 489);
- this.txtUserList.MaxUndoRedoSteps = 50;
- this.txtUserList.Name = "txtUserList";
- this.txtUserList.Size = new System.Drawing.Size(599, 24);
- this.txtUserList.TabIndex = 10;
+ this.label9.Text = "升级前需要结束的进程列表(默认情况下,填不填写都会结束升级程序所在目录下的进程)";
//
// tabPage3
//
+ this.tabPage3.Controls.Add(this.BtnDefUpdateLog);
this.tabPage3.Controls.Add(this.BtnPasteFromMD);
this.tabPage3.Controls.Add(this.ChkUseHtml);
this.tabPage3.Controls.Add(this.TxtUpdateDes_Html);
@@ -729,6 +540,17 @@ namespace LiveUpdate
this.tabPage3.Text = "更新日志源码";
this.tabPage3.UseVisualStyleBackColor = true;
//
+ // BtnDefUpdateLog
+ //
+ this.BtnDefUpdateLog.Location = new System.Drawing.Point(217, 3);
+ this.BtnDefUpdateLog.Name = "BtnDefUpdateLog";
+ this.BtnDefUpdateLog.Size = new System.Drawing.Size(76, 30);
+ this.BtnDefUpdateLog.TabIndex = 36;
+ this.BtnDefUpdateLog.Text = "默认日志";
+ this.toolTip1.SetToolTip(this.BtnDefUpdateLog, "只更新版本号和日期");
+ this.BtnDefUpdateLog.UseVisualStyleBackColor = true;
+ this.BtnDefUpdateLog.Click += new System.EventHandler(this.BtnDefUpdateLog_Click);
+ //
// BtnPasteFromMD
//
this.BtnPasteFromMD.Location = new System.Drawing.Point(135, 3);
@@ -750,21 +572,6 @@ namespace LiveUpdate
this.ChkUseHtml.Text = "采用Html更新日志";
this.ChkUseHtml.UseVisualStyleBackColor = true;
//
- // TxtUpdateDes_Html
- //
- this.TxtUpdateDes_Html.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.TxtUpdateDes_Html.EmptyText = "";
- this.TxtUpdateDes_Html.Font = new System.Drawing.Font("Courier New", 10F);
- this.TxtUpdateDes_Html.Location = new System.Drawing.Point(9, 35);
- this.TxtUpdateDes_Html.Name = "TxtUpdateDes_Html";
- this.TxtUpdateDes_Html.OnlyInputText = false;
- this.TxtUpdateDes_Html.Size = new System.Drawing.Size(660, 481);
- this.TxtUpdateDes_Html.TabIndex = 33;
- this.TxtUpdateDes_Html.Text = "";
- this.TxtUpdateDes_Html.WordWrap = true;
- //
// tabPage4
//
this.tabPage4.Controls.Add(this.LblState);
@@ -862,6 +669,243 @@ namespace LiveUpdate
this.OlvFileName.Text = "文件名";
this.OlvFileName.Width = 150;
//
+ // CbbVersionType
+ //
+ this.CbbVersionType.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
+ this.CbbVersionType.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.CbbVersionType.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.CbbVersionType.FormattingEnabled = true;
+ this.CbbVersionType.Items.AddRange(new object[] {
+ "正式版",
+ "测试版",
+ "内测版",
+ "公测版"});
+ this.CbbVersionType.Location = new System.Drawing.Point(319, 24);
+ this.CbbVersionType.MaxUndoRedoSteps = 50;
+ this.CbbVersionType.Name = "CbbVersionType";
+ this.CbbVersionType.Size = new System.Drawing.Size(122, 27);
+ this.CbbVersionType.TabIndex = 49;
+ //
+ // cmbNewVer
+ //
+ this.cmbNewVer.BackColor = System.Drawing.Color.White;
+ this.cmbNewVer.EmptyText = "";
+ this.cmbNewVer.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.cmbNewVer.Location = new System.Drawing.Point(9, 23);
+ this.cmbNewVer.LongTime = 2000;
+ this.cmbNewVer.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
+ this.cmbNewVer.MaxLength = 999999999;
+ this.cmbNewVer.MaxUndoRedoSteps = 50;
+ this.cmbNewVer.Multiline = false;
+ this.cmbNewVer.Name = "cmbNewVer";
+ this.cmbNewVer.OnlyNumeric = false;
+ this.cmbNewVer.PasswordChar = '\0';
+ this.cmbNewVer.ReadOnly = false;
+ this.cmbNewVer.SelectedText = "";
+ this.cmbNewVer.SelectionLength = 0;
+ this.cmbNewVer.SelectionStart = 0;
+ this.cmbNewVer.Size = new System.Drawing.Size(223, 31);
+ this.cmbNewVer.TabIndex = 47;
+ this.cmbNewVer.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
+ this.cmbNewVer.ToolTip = "";
+ this.cmbNewVer.WordWrap = true;
+ //
+ // txtDbUpdateDes
+ //
+ this.txtDbUpdateDes.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtDbUpdateDes.BackColor = System.Drawing.Color.White;
+ this.txtDbUpdateDes.EmptyText = "";
+ this.txtDbUpdateDes.Enabled = false;
+ this.txtDbUpdateDes.Location = new System.Drawing.Point(10, 380);
+ this.txtDbUpdateDes.LongTime = 2000;
+ this.txtDbUpdateDes.MaxLength = 999999999;
+ this.txtDbUpdateDes.MaxUndoRedoSteps = 50;
+ this.txtDbUpdateDes.Multiline = true;
+ this.txtDbUpdateDes.Name = "txtDbUpdateDes";
+ this.txtDbUpdateDes.OnlyNumeric = false;
+ this.txtDbUpdateDes.PasswordChar = '\0';
+ this.txtDbUpdateDes.ReadOnly = false;
+ this.txtDbUpdateDes.SelectedText = "";
+ this.txtDbUpdateDes.SelectionLength = 0;
+ this.txtDbUpdateDes.SelectionStart = 0;
+ this.txtDbUpdateDes.Size = new System.Drawing.Size(657, 133);
+ this.txtDbUpdateDes.TabIndex = 31;
+ this.txtDbUpdateDes.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
+ this.txtDbUpdateDes.ToolTip = "";
+ this.txtDbUpdateDes.WordWrap = true;
+ //
+ // txtUpdateDes
+ //
+ this.txtUpdateDes.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtUpdateDes.BackColor = System.Drawing.Color.White;
+ this.txtUpdateDes.EmptyText = "";
+ this.txtUpdateDes.Location = new System.Drawing.Point(10, 195);
+ this.txtUpdateDes.LongTime = 2000;
+ this.txtUpdateDes.MaxLength = 999999999;
+ this.txtUpdateDes.MaxUndoRedoSteps = 50;
+ this.txtUpdateDes.Multiline = true;
+ this.txtUpdateDes.Name = "txtUpdateDes";
+ this.txtUpdateDes.OnlyNumeric = false;
+ this.txtUpdateDes.PasswordChar = '\0';
+ this.txtUpdateDes.ReadOnly = false;
+ this.txtUpdateDes.SelectedText = "";
+ this.txtUpdateDes.SelectionLength = 0;
+ this.txtUpdateDes.SelectionStart = 0;
+ this.txtUpdateDes.Size = new System.Drawing.Size(657, 164);
+ this.txtUpdateDes.TabIndex = 30;
+ this.txtUpdateDes.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
+ this.txtUpdateDes.ToolTip = "";
+ this.txtUpdateDes.WordWrap = true;
+ //
+ // cmbDbUpdateUrl
+ //
+ this.cmbDbUpdateUrl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.cmbDbUpdateUrl.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
+ this.cmbDbUpdateUrl.Enabled = false;
+ this.cmbDbUpdateUrl.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.cmbDbUpdateUrl.FormattingEnabled = true;
+ this.cmbDbUpdateUrl.Location = new System.Drawing.Point(9, 155);
+ this.cmbDbUpdateUrl.MaxUndoRedoSteps = 50;
+ this.cmbDbUpdateUrl.Name = "cmbDbUpdateUrl";
+ this.cmbDbUpdateUrl.Size = new System.Drawing.Size(658, 22);
+ this.cmbDbUpdateUrl.TabIndex = 27;
+ //
+ // cmbProcUpdateUrl
+ //
+ this.cmbProcUpdateUrl.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.cmbProcUpdateUrl.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
+ this.cmbProcUpdateUrl.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.cmbProcUpdateUrl.FormattingEnabled = true;
+ this.cmbProcUpdateUrl.Location = new System.Drawing.Point(9, 117);
+ this.cmbProcUpdateUrl.MaxUndoRedoSteps = 50;
+ this.cmbProcUpdateUrl.Name = "cmbProcUpdateUrl";
+ this.cmbProcUpdateUrl.Size = new System.Drawing.Size(658, 22);
+ this.cmbProcUpdateUrl.TabIndex = 25;
+ //
+ // cmbNewDbVer
+ //
+ this.cmbNewDbVer.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
+ this.cmbNewDbVer.Enabled = false;
+ this.cmbNewDbVer.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.cmbNewDbVer.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.cmbNewDbVer.FormattingEnabled = true;
+ this.cmbNewDbVer.Location = new System.Drawing.Point(447, 24);
+ this.cmbNewDbVer.MaxUndoRedoSteps = 50;
+ this.cmbNewDbVer.Name = "cmbNewDbVer";
+ this.cmbNewDbVer.Size = new System.Drawing.Size(122, 27);
+ this.cmbNewDbVer.TabIndex = 19;
+ //
+ // txtDelFileList
+ //
+ this.txtDelFileList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtDelFileList.EmptyText = "";
+ this.txtDelFileList.Font = new System.Drawing.Font("Courier New", 10F);
+ this.txtDelFileList.Location = new System.Drawing.Point(10, 198);
+ this.txtDelFileList.Name = "txtDelFileList";
+ this.txtDelFileList.OnlyInputText = false;
+ this.txtDelFileList.Size = new System.Drawing.Size(660, 233);
+ this.txtDelFileList.TabIndex = 37;
+ this.txtDelFileList.Text = "";
+ this.txtDelFileList.WordWrap = true;
+ //
+ // txtKillProcList
+ //
+ this.txtKillProcList.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtKillProcList.EmptyText = "";
+ this.txtKillProcList.Font = new System.Drawing.Font("Courier New", 10F);
+ this.txtKillProcList.Location = new System.Drawing.Point(10, 25);
+ this.txtKillProcList.Name = "txtKillProcList";
+ this.txtKillProcList.OnlyInputText = false;
+ this.txtKillProcList.Size = new System.Drawing.Size(660, 155);
+ this.txtKillProcList.TabIndex = 36;
+ this.txtKillProcList.Text = "";
+ this.txtKillProcList.WordWrap = true;
+ //
+ // txtMainProcPram
+ //
+ this.txtMainProcPram.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtMainProcPram.BackColor = System.Drawing.Color.White;
+ this.txtMainProcPram.EmptyText = "";
+ this.txtMainProcPram.Location = new System.Drawing.Point(577, 450);
+ this.txtMainProcPram.LongTime = 2000;
+ this.txtMainProcPram.MaxLength = 999999999;
+ this.txtMainProcPram.MaxUndoRedoSteps = 50;
+ this.txtMainProcPram.Multiline = false;
+ this.txtMainProcPram.Name = "txtMainProcPram";
+ this.txtMainProcPram.OnlyNumeric = false;
+ this.txtMainProcPram.PasswordChar = '\0';
+ this.txtMainProcPram.ReadOnly = false;
+ this.txtMainProcPram.SelectedText = "";
+ this.txtMainProcPram.SelectionLength = 0;
+ this.txtMainProcPram.SelectionStart = 0;
+ this.txtMainProcPram.Size = new System.Drawing.Size(92, 21);
+ this.txtMainProcPram.TabIndex = 9;
+ this.txtMainProcPram.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
+ this.txtMainProcPram.ToolTip = "";
+ this.txtMainProcPram.WordWrap = true;
+ //
+ // txtMainProcName
+ //
+ this.txtMainProcName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtMainProcName.BackColor = System.Drawing.Color.White;
+ this.txtMainProcName.EmptyText = "";
+ this.txtMainProcName.Location = new System.Drawing.Point(10, 450);
+ this.txtMainProcName.LongTime = 2000;
+ this.txtMainProcName.MaxLength = 999999999;
+ this.txtMainProcName.MaxUndoRedoSteps = 50;
+ this.txtMainProcName.Multiline = false;
+ this.txtMainProcName.Name = "txtMainProcName";
+ this.txtMainProcName.OnlyNumeric = false;
+ this.txtMainProcName.PasswordChar = '\0';
+ this.txtMainProcName.ReadOnly = false;
+ this.txtMainProcName.SelectedText = "";
+ this.txtMainProcName.SelectionLength = 0;
+ this.txtMainProcName.SelectionStart = 0;
+ this.txtMainProcName.Size = new System.Drawing.Size(561, 21);
+ this.txtMainProcName.TabIndex = 3;
+ this.txtMainProcName.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
+ this.txtMainProcName.ToolTip = "";
+ this.txtMainProcName.WordWrap = true;
+ //
+ // txtUserList
+ //
+ this.txtUserList.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.txtUserList.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
+ this.txtUserList.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.txtUserList.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.txtUserList.Font = new System.Drawing.Font("Courier New", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.txtUserList.FormattingEnabled = true;
+ this.txtUserList.Location = new System.Drawing.Point(9, 489);
+ this.txtUserList.MaxUndoRedoSteps = 50;
+ this.txtUserList.Name = "txtUserList";
+ this.txtUserList.Size = new System.Drawing.Size(599, 24);
+ this.txtUserList.TabIndex = 10;
+ //
+ // TxtUpdateDes_Html
+ //
+ this.TxtUpdateDes_Html.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.TxtUpdateDes_Html.EmptyText = "";
+ this.TxtUpdateDes_Html.Font = new System.Drawing.Font("Courier New", 10F);
+ this.TxtUpdateDes_Html.Location = new System.Drawing.Point(9, 35);
+ this.TxtUpdateDes_Html.Name = "TxtUpdateDes_Html";
+ this.TxtUpdateDes_Html.OnlyInputText = false;
+ this.TxtUpdateDes_Html.Size = new System.Drawing.Size(660, 481);
+ this.TxtUpdateDes_Html.TabIndex = 33;
+ this.TxtUpdateDes_Html.Text = "";
+ this.TxtUpdateDes_Html.WordWrap = true;
+ //
// frmUpdateFile
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
@@ -953,5 +997,8 @@ namespace LiveUpdate
private ryControls.Controls.RichTextBox2 txtDelFileList;
private ryControls.TextBoxEx2 cmbNewVer;
private System.Windows.Forms.Button BtnPasteFromMD;
+ private ryControls.RyComboBox CbbVersionType;
+ private System.Windows.Forms.Label label10;
+ private System.Windows.Forms.Button BtnDefUpdateLog;
}
}
\ No newline at end of file
diff --git a/Source/OnLineUpgradeConfig/frmUpdateFile.cs b/Source/OnLineUpgradeConfig/frmUpdateFile.cs
index 1a62b2d..4520489 100644
--- a/Source/OnLineUpgradeConfig/frmUpdateFile.cs
+++ b/Source/OnLineUpgradeConfig/frmUpdateFile.cs
@@ -18,6 +18,7 @@ using WinAPI;
using RyWeb;
using System.IO.Compression;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
+using System.Diagnostics;
namespace LiveUpdate
{
@@ -96,6 +97,7 @@ namespace LiveUpdate
var updatelogs_folder = UpdateFilesDir + "\\WebUpdateLogs";
Json json= new Json(RyFiles.ReadAllText(filePath));
cmbNewVer.Text = json.GetJsonValue("SoftVer", "");
+ CbbVersionType.Text = json.GetJsonValue("VersionType", "");
cmbNewDbVer.Text = json.GetJsonValue("DbVer", "");
cmbProcUpdateUrl.Text = json.GetJsonValue("FileUpdateUrl", "");
dtNewProcDate.Value = ConvertDateTime(json.GetJsonValue("SoftDate", ""), DateTime.Now);
@@ -184,6 +186,7 @@ namespace LiveUpdate
JObject json = new JObject
{
["SoftVer"] = cmbNewVer.Text,
+ ["VersionType"] = CbbVersionType.Text,
["DbVer"] = cmbNewDbVer.Text,
["FileUpdateUrl"] = ProcUpdateUrl,
["DbUpdateUrl"] = cmbDbUpdateUrl.Text,
@@ -236,7 +239,7 @@ namespace LiveUpdate
{
case DialogResult.Yes:
QuickWeb web = new QuickWeb();
- web.Post("http://gs2.3h3.com:1881/process", "a=send&touser=" +web.UrlEncode(user.UserList.Replace(",",";")) + "&type="+ ryMessageConst.MsType.MustUpdate +
+ web.Post("http://gs2.dangyou.com:1881/process", "a=send&touser=" +web.UrlEncode(user.UserList.Replace(",",";")) + "&type="+ ryMessageConst.MsType.MustUpdate +
"&msg=" + web.UrlEncode("http://192.168.1.191/OnlineUpgrade/" + System.IO.Path.GetFileName(update_fullpath)));
break;
}
@@ -594,5 +597,10 @@ namespace LiveUpdate
TxtUpdateDes_Html.SelectedText= txt.Trim();
}
}
+
+ private void BtnDefUpdateLog_Click(object sender, EventArgs e)
+ {
+ TxtUpdateDes_Html.Text ="[改进]一些功能改进。
\r\n[修复]修复了一些BUG。
";
+ }
}
}
diff --git a/Source/RaUI/Common/Extend/VarExtension.cs b/Source/RaUI/Common/Extend/VarExtension.cs
index e84de55..f84e2f3 100644
--- a/Source/RaUI/Common/Extend/VarExtension.cs
+++ b/Source/RaUI/Common/Extend/VarExtension.cs
@@ -161,6 +161,7 @@ namespace ryCommon
///
static public int IndexOfEx(this string input, string value)
{
+ if (input == null) { return -1; }
return input.IndexOf(value, StringComparison.OrdinalIgnoreCase);
}
///
diff --git a/Source/RaUI/Common/FileFuns/BigFileOp.cs b/Source/RaUI/Common/FileFuns/BigFileOp.cs
index d567799..18e4573 100644
--- a/Source/RaUI/Common/FileFuns/BigFileOp.cs
+++ b/Source/RaUI/Common/FileFuns/BigFileOp.cs
@@ -57,18 +57,22 @@ namespace ryCommon
///
public event CancelEventHandler OnCanel;
///
+ /// 是否跳过相同文件,默认不跳过(根据文件大小和修改时间来判断)
+ ///
+ public bool SkipSameFiles { get; set; } = false;
+ ///
/// 大文件按流复制文件,支持自动创建目标文件夹。 true:复制成功 false:复制失败
///
- /// 原始文件路径
+ /// 原始文件路径
/// 复制目标文件路径
/// 携带的参数(可选)
///
- public bool CopyBigFile(string soucrePath, string targetPath,object Tag=null)
+ public bool CopyBigFile(string sourcePath, string targetPath,object Tag=null)
{
if (OnCanelCopy != null)
{
CancelEventArgs e1 = new CancelEventArgs();
- OnCanelCopy?.Invoke(this, e1, soucrePath, targetPath);
+ OnCanelCopy?.Invoke(this, e1, sourcePath, targetPath);
if (e1.Cancel)
{
return true;
@@ -76,20 +80,33 @@ namespace ryCommon
}
try
{
- if (!System.IO.File.Exists(soucrePath))
+ if (!System.IO.File.Exists(sourcePath))
{
return false;
}
- if (System.IO.File.Exists(targetPath))
+ if (SkipSameFiles)
{
- if (RyFiles.DeleteFile(targetPath) != 0)
+ if (System.IO.File.Exists(targetPath))
{
- return false;
+ try
+ {
+ var target_info = new System.IO.FileInfo(targetPath);
+ var source_info = new System.IO.FileInfo(sourcePath);
+ if (target_info.Length == source_info.Length && target_info.LastWriteTimeUtc == source_info.LastWriteTimeUtc)
+ {
+ return true;
+ }
+ }
+ catch { }
+ if (RyFiles.DeleteFile(targetPath) != 0)
+ {
+ return false;
+ }
}
}
var TranSize = 1024 * 1024 * 2;//每次读取2M
//读取复制文件流
- using (FileStream fsRead = new FileStream(soucrePath, FileMode.Open, FileAccess.Read))
+ using (FileStream fsRead = new FileStream(sourcePath, FileMode.Open, FileAccess.Read))
{
RyFiles.CreateDirectory(System.IO.Path.GetDirectoryName(targetPath));
OnFileProgress?.Invoke(0, fsRead.Length, 0,0, Tag);
@@ -151,7 +168,7 @@ namespace ryCommon
return false;
}
}
- var from_dt = RyFiles.GetFileDate(soucrePath);
+ var from_dt = RyFiles.GetFileDate(sourcePath);
var file_dt = new sType.FileTime
{
LastWriteTime = from_dt.LastWriteTime,
diff --git a/Source/RaUI/Common/FileFuns/Hosts.cs b/Source/RaUI/Common/FileFuns/Hosts.cs
index 7c63c5c..582a7be 100644
--- a/Source/RaUI/Common/FileFuns/Hosts.cs
+++ b/Source/RaUI/Common/FileFuns/Hosts.cs
@@ -77,40 +77,54 @@ namespace ryCommon
bool isAdd = false;//是否有增加数据到hosts里
for (int i = 0; i < rule_list.Count; i++)
{
- if (rule_list[i].Comment.Length > 0) { continue; }
+ var rule_item = rule_list[i];
+ if (rule_item.Comment.Length > 0) { continue; }
bool HaveRecord = false;
for (int m = sys_list.Count - 1; m >= 0; m--) //去host文件里查找是否已含有该内容
{
if (sys_list[m].Comment.Length > 0) { continue; }
- if (rule_list[i].Domain.ToLower() == sys_list[m].Domain.ToLower())
+ if (rule_item.Domain.ToLower() == sys_list[m].Domain.ToLower())
{
- if (rule_list[i].IP.Length == 0 && rule_list[i].IsDel)
+ if (rule_item.IsDel)
{
- sys_list.RemoveAt(m);
- HaveRecord = true;
+ if (rule_item.IP.Length == 0) //如果ip为空,则删除所有包含该域名的项
+ {
+ sys_list.RemoveAt(m);
+ HaveRecord = true;
+ }
+ else if (rule_item.IP == sys_list[m].IP)
+ {
+ sys_list.RemoveAt(m);
+ HaveRecord = true;
+ }
}
else
{
if (rule_list[i].IP != sys_list[m].IP) //如果同样域名对应的ip不一样,则删除该项,然后再插入新的ip
{
sys_list.RemoveAt(m);
- HaveRecord = false;
}
- else
+ else if (rule_list[i].IP == sys_list[m].IP)
{
- if (rule_list[i].IsDel) //如果ip和网址一致,并且标注为删除,则删除
- {
- sys_list.RemoveAt(m);
- }
HaveRecord = true;
}
}
}
}
- if (!HaveRecord)
+ if (rule_list[i].IsDel)
{
- isAdd = true;
- sys_list.Add(rule_list[i]);
+ if (HaveRecord)
+ {
+ isAdd = true;
+ }
+ }
+ else
+ {
+ if (!HaveRecord)
+ {
+ isAdd = true;
+ sys_list.Add(rule_list[i]);
+ }
}
}
if (isAdd)
@@ -122,6 +136,7 @@ namespace ryCommon
sys_content = "";
for (int i = 0; i < sys_list.Count; i++)
{
+ if (sys_list[i].IsDel) { continue; }
if (sys_content.Length > 0) { sys_content += "\r\n"; }
if (sys_list[i].Comment.Length > 0)
{
diff --git a/Source/RaUI/Common/FileFuns/RyFiles.cs b/Source/RaUI/Common/FileFuns/RyFiles.cs
index b446731..c89d763 100644
--- a/Source/RaUI/Common/FileFuns/RyFiles.cs
+++ b/Source/RaUI/Common/FileFuns/RyFiles.cs
@@ -380,6 +380,36 @@ namespace ryCommon
{
return file_op.CopyFolder(fromDir, ToDir);
}
+ ///
+ /// 复制或剪切文件列表到剪切板
+ ///
+ ///
+ ///
+ public static void CopyOrCutFileToClipboard(string[] files,bool cut)
+ {
+ DataObject data = new DataObject(DataFormats.FileDrop, files);
+ MemoryStream memo = new MemoryStream(4);
+ memo = new MemoryStream(4); byte[] bytes = new byte[] { (byte)(cut ? 2 : 5), 0, 0, 0 };
+ memo.Write(bytes, 0, bytes.Length);
+ data.SetData("Preferred DropEffect", memo);
+ Clipboard.SetDataObject(data);
+ }
+ ///
+ /// 复制文件列表到剪切板
+ ///
+ ///
+ public static void CopyFileToClipboard(string[] files)
+ {
+ CopyOrCutFileToClipboard(files, false);
+ }
+ ///
+ /// 剪切文件列表到剪切板
+ ///
+ ///
+ public static void CutFileToClipboard(string[] files)
+ {
+ CopyOrCutFileToClipboard(files, true);
+ }
#endregion 【复制文件操作】
#region 【重命名文件】
diff --git a/Source/RaUI/Common/FileFuns/RyImage.cs b/Source/RaUI/Common/FileFuns/RyImage.cs
index 3640f43..fa15507 100644
--- a/Source/RaUI/Common/FileFuns/RyImage.cs
+++ b/Source/RaUI/Common/FileFuns/RyImage.cs
@@ -1053,13 +1053,13 @@ namespace ryCommon
{
//等宽,计算高
size.Width = i.Width;
- size.Height = (i.Width / scale).ToInt();
+ size.Height = Math.Truncate(i.Width / scale).ToInt();
}
else
{
//等高,计算宽
size.Height = i.Height;
- size.Width = (i.Height * scale).ToInt();
+ size.Width = Math.Truncate(i.Height * scale).ToInt();
}
//如果原图片和新图片的比例不同,先裁剪或填充后,再缩放
using (System.Drawing.Image cropOrFill = i.CropOrFill(size.Width, size.Height, background, interpolationMode))
diff --git a/Source/RaUI/Common/FileFuns/RySetting.cs b/Source/RaUI/Common/FileFuns/RySetting.cs
index 8192fe7..c39cf69 100644
--- a/Source/RaUI/Common/FileFuns/RySetting.cs
+++ b/Source/RaUI/Common/FileFuns/RySetting.cs
@@ -1,4 +1,5 @@
using ryCommon.Pram;
+using ryControls;
using System;
using System.Collections.Generic;
using System.Linq;
diff --git a/Source/RaUI/Common/MyDb/ryQuickSQL.cs b/Source/RaUI/Common/MyDb/ryQuickSQL.cs
index 8ada590..877fb3b 100644
--- a/Source/RaUI/Common/MyDb/ryQuickSQL.cs
+++ b/Source/RaUI/Common/MyDb/ryQuickSQL.cs
@@ -1,4 +1,6 @@
-using System;
+using Newtonsoft.Json.Linq;
+using ryCommon;
+using System;
using System.Collections.Generic;
using System.Xml.Linq;
using static ryCommon.RyRegedit;
@@ -254,7 +256,10 @@ namespace ryCommonDb
///
///
public List List_calcparam { get; set; } = new List();
-
+ ///
+ /// 是否将时间类型转为时间戳
+ ///
+ public bool DateToTimeStamp { get; set; } = true;
///
/// 输出多条件搜索。
///
@@ -333,6 +338,17 @@ namespace ryCommonDb
{
tmpSQL += true_false?"true":"false";
}
+ else if (item.value is DateTime dt)
+ {
+ if (DateToTimeStamp)
+ {
+ tmpSQL += dt.ToInt64();
+ }
+ else
+ {
+ tmpSQL += RyWeb.WebDecode.UrlEncode(dt.ToString("yyyy-MM-dd HH:mm:ss"), System.Text.Encoding.UTF8);
+ }
+ }
else
{
tmpSQL +=RyWeb.WebDecode.UrlEncode(item.value.ToString(), System.Text.Encoding.UTF8);
@@ -341,6 +357,55 @@ namespace ryCommonDb
return tmpSQL;
}
///
+ /// 根据输入的内容,生成Json数据
+ ///
+ ///
+ public JObject GetJsonData()
+ {
+ JObject jo = new JObject();
+ for (int i = 0; i < List.Count; i++)
+ {
+ SQLIitem item = List[i];
+ var name = item.Field.TrimStart('[').TrimEnd(']');
+ if (item.value is long int1)
+ {
+ jo[name] = int1;
+ }
+ else if (item.value is int @int)
+ {
+ jo[name] = @int;
+ }
+ else if (item.value is decimal dec)
+ {
+ jo[name] = dec;
+ }
+ else if (item.value is double dou)
+ {
+ jo[name] = dou;
+ }
+ else if (item.value is bool true_false)
+ {
+ jo[name] = true_false;
+ }
+ else if (item.value is DateTime dt)
+ {
+ if (DateToTimeStamp)
+ {
+ jo[name] = dt.ToInt64();
+ }
+ else
+ {
+ jo[name] = dt;
+ }
+ }
+ else
+ {
+ jo[name]= item.value.ToString();
+ }
+ }
+ return jo;
+ }
+ ///
/// 获取插入SQL语句
///
///
diff --git a/Source/RaUI/Common/Shell/API.cs b/Source/RaUI/Common/Shell/API.cs
index 108b5aa..8020474 100644
--- a/Source/RaUI/Common/Shell/API.cs
+++ b/Source/RaUI/Common/Shell/API.cs
@@ -1,14 +1,22 @@
+//lc_mtt
+//CSDNͣhttp://lemony.cnblogs.com
+//ҳhttp://www.3lsoft.com
+//ע˴ֹҵ;߷һݣлл
+//---------------- Դ磬Ҹ ----------------
+
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
-namespace WinShell {
+namespace WinShell
+{
///
///
///
- public class API {
- #region API ɤJ
+ public class API
+ {
+ #region API
///
///
///
@@ -104,17 +112,80 @@ namespace WinShell {
IntPtr hwnd,
IntPtr lptpm);
- #endregion
+ [DllImport("Shell32.Dll")]
+ private static extern bool SHGetSpecialFolderPath(
+ IntPtr hwndOwner,
+ StringBuilder lpszPath,
+ ShellSpecialFolders nFolder,
+ bool fCreate);
+ #endregion
///
- ///Shell
+ /// Shell
///
- public static IShellFolder GetDesktopFolder(/*out IntPtr ppshf*/) {
- IntPtr ppshf;
+ public static IShellFolder GetDesktopFolder()
+ {
+ return GetDesktopFolder(out _);
+ }
+ ///
+ /// Shell
+ ///
+ public static IShellFolder GetDesktopFolder(out IntPtr ppshf)
+ {
SHGetDesktopFolder(out ppshf);
Object obj = Marshal.GetObjectForIUnknown(ppshf);
return (IShellFolder)obj;
}
+
+ ///
+ /// ȡ·
+ ///
+ public static string GetPathByIShell(IShellFolder Root, IntPtr pidlSub)
+ {
+ IntPtr strr = Marshal.AllocCoTaskMem(MAX_PATH * 2 + 4);
+ Marshal.WriteInt32(strr, 0, 0);
+ StringBuilder buf = new StringBuilder(MAX_PATH);
+ Root.GetDisplayNameOf(pidlSub, SHGNO.FORADDRESSBAR | SHGNO.FORPARSING, strr);
+ API.StrRetToBuf(strr, pidlSub, buf, MAX_PATH);
+ Marshal.FreeCoTaskMem(strr);
+ return buf.ToString();
+ }
+
+ ///
+ /// ȡʾ
+ ///
+ public static string GetNameByIShell(IShellFolder Root, IntPtr pidlSub)
+ {
+ IntPtr strr = Marshal.AllocCoTaskMem(MAX_PATH * 2 + 4);
+ Marshal.WriteInt32(strr, 0, 0);
+ StringBuilder buf = new StringBuilder(MAX_PATH);
+ Root.GetDisplayNameOf(pidlSub, SHGNO.INFOLDER, strr);
+ API.StrRetToBuf(strr, pidlSub, buf, MAX_PATH);
+ Marshal.FreeCoTaskMem(strr);
+ return buf.ToString();
+ }
+
+ ///
+ /// PIDL ȡʾ
+ ///
+ public static string GetNameByPIDL(IntPtr pidl)
+ {
+ SHFILEINFO info = new SHFILEINFO();
+ API.SHGetFileInfo(pidl, 0, ref info, Marshal.SizeOf(typeof(SHFILEINFO)),
+ SHGFI.PIDL | SHGFI.DISPLAYNAME | SHGFI.TYPENAME);
+ return info.szDisplayName;
+ }
+
+ ///
+ /// ȡļе·
+ ///
+ public static string GetSpecialFolderPath(IntPtr hwnd, ShellSpecialFolders nFolder)
+ {
+ StringBuilder sb = new StringBuilder(MAX_PATH);
+ SHGetSpecialFolderPath(hwnd, sb, nFolder, false);
+ return sb.ToString();
+ }
+
///
/// ·ȡ IShellFolder PIDL
///
@@ -126,30 +197,14 @@ namespace WinShell {
desktop.BindToObject(Pidl, IntPtr.Zero, ref Guids.IID_IShellFolder, out IFolder);
return IFolder;
}
- ///
- ///
- ///
- ///
- ///
- ///
- public static string GetNameByIShell(IShellFolder Root, IntPtr pidlSub) {
- IntPtr strr = Marshal.AllocCoTaskMem(MAX_PATH * 2 + 4);
- Marshal.WriteInt32(strr, 0, 0);
- StringBuilder buf = new StringBuilder(MAX_PATH);
- Root.GetDisplayNameOf(pidlSub, SHGNO.INFOLDER, strr);
- API.StrRetToBuf(strr, pidlSub, buf, MAX_PATH);
- return buf.ToString();
- }
///
- ///
+ /// ·ȡ IShellFolder
///
- public static string GetNameByPIDL(IntPtr pidl) {
- SHFILEINFO info = new SHFILEINFO();
- API.SHGetFileInfo(pidl, 0, ref info, Marshal.SizeOf(typeof(SHFILEINFO)),
- SHGFI.PIDL | SHGFI.DISPLAYNAME | SHGFI.TYPENAME);
- return info.szDisplayName;
+ public static IShellFolder GetShellFolder(IShellFolder desktop, string path)
+ {
+ IntPtr Pidl;
+ return GetShellFolder(desktop, path, out Pidl);
}
-
}
}
diff --git a/Source/RaUI/Common/Shell/CShellFolder.cs b/Source/RaUI/Common/Shell/CShellFolder.cs
index 5a843e3..6f0d126 100644
--- a/Source/RaUI/Common/Shell/CShellFolder.cs
+++ b/Source/RaUI/Common/Shell/CShellFolder.cs
@@ -5,6 +5,7 @@ using System.Runtime.InteropServices;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
+using RaUI.UI.LayeredForm;
#pragma warning disable CS1591 // 缺少对公共可见类型或成员的 XML 注释
namespace WinShell {
@@ -172,11 +173,11 @@ namespace WinShell {
{
OnFetchFolder(this, name);
IShellFolder IParent = Root;
+ //桌面的真实路径的 PIDL
+ //Root.BindToObject(pidlSub, IntPtr.Zero, ref Guids.IID_IShellFolder, out IParent);
IntPtr PIDL = pidlSub;
//存放 PIDL 的数组
- IntPtr[] pidls = new IntPtr[1];
- pidls[0] = PIDL;
-
+ IntPtr[] pidls = [PIDL];
//得到 IContextMenu 接口
IntPtr iContextMenuPtr = IntPtr.Zero;
iContextMenuPtr = IParent.GetUIObjectOf(IntPtr.Zero, (uint)pidls.Length,
diff --git a/Source/RaUI/Common/Shell/Enums.cs b/Source/RaUI/Common/Shell/Enums.cs
index 084e476..a335eee 100644
--- a/Source/RaUI/Common/Shell/Enums.cs
+++ b/Source/RaUI/Common/Shell/Enums.cs
@@ -1,3 +1,9 @@
+//lc_mtt
+//CSDNͣhttp://lemony.cnblogs.com
+//ҳhttp://www.3lsoft.com
+//ע˴ֹҵ;߷һݣлл
+//---------------- Դ磬Ҹ ----------------
+
using System;
using System.Collections.Generic;
using System.Text;
@@ -208,4 +214,71 @@ namespace WinShell
LAYOUTRTL = 0x8000
}
+ [Flags()]
+ public enum ShellSpecialFolders
+ {
+ DESKTOP = 0x0000, //
+ INTERNET = 0x0001,
+ PROGRAMS = 0x0002, // Start Menu\Programs
+ CONTROLS = 0x0003, // My Computer\Control Panel
+ PRINTERS = 0x0004, // My Computer\Printers
+ PERSONAL = 0x0005, // My Documents
+ FAVORITES = 0x0006, // \Favorites
+ STARTUP = 0x0007, // Start Menu\Programs\Startup
+ RECENT = 0x0008, // \Recent
+ SENDTO = 0x0009, // \SendTo
+ BITBUCKET = 0x000a, // \Recycle Bin
+ STARTMENU = 0x000b, // \Start Menu
+ MYDOCUMENTS = 0x000c, // logical "My Documents" desktop icon
+ MYMUSIC = 0x000d, // "My Music" folder
+ MYVIDEO = 0x000e, // "My Videos" folder
+ DESKTOPDIRECTORY = 0x0010, // \Desktop
+ DRIVES = 0x0011, // My Computer
+ NETWORK = 0x0012, // Network Neighborhood (My Network Places)
+ NETHOOD = 0x0013, // \nethood
+ FONTS = 0x0014, // windows\fonts
+ TEMPLATES = 0x0015,
+ COMMON_STARTMENU = 0x0016, // All Users\Start Menu
+ COMMON_PROGRAMS = 0X0017, // All Users\Start Menu\Programs
+ COMMON_STARTUP = 0x0018, // All Users\Startup
+ COMMON_DESKTOPDIRECTORY = 0x0019, // All Users\Desktop
+ APPDATA = 0x001a, // \Application Data
+ PRINTHOOD = 0x001b, // \PrintHood
+ LOCAL_APPDATA = 0x001c, // \Local Settings\Applicaiton Data (non roaming)
+ ALTSTARTUP = 0x001d, // non localized startup
+ COMMON_ALTSTARTUP = 0x001e, // non localized common startup
+ COMMON_FAVORITES = 0x001f,
+ INTERNET_CACHE = 0x0020,
+ COOKIES = 0x0021,
+ HISTORY = 0x0022,
+ COMMON_APPDATA = 0x0023, // All Users\Application Data
+ WINDOWS = 0x0024, // GetWindowsDirectory()
+ SYSTEM = 0x0025, // GetSystemDirectory()
+ PROGRAM_FILES = 0x0026, // C:\Program Files
+ MYPICTURES = 0x0027, // C:\Program Files\My Pictures
+ PROFILE = 0x0028, // USERPROFILE
+ SYSTEMX86 = 0x0029, // x86 system directory on RISC
+ PROGRAM_FILESX86 = 0x002a, // x86 C:\Program Files on RISC
+ PROGRAM_FILES_COMMON = 0x002b, // C:\Program Files\Common
+ PROGRAM_FILES_COMMONX86 = 0x002c, // x86 Program Files\Common on RISC
+ COMMON_TEMPLATES = 0x002d, // All Users\Templates
+ COMMON_DOCUMENTS = 0x002e, // All Users\Documents
+ COMMON_ADMINTOOLS = 0x002f, // All Users\Start Menu\Programs\Administrative Tools
+ ADMINTOOLS = 0x0030, // \Start Menu\Programs\Administrative Tools
+ CONNECTIONS = 0x0031, // Network and Dial-up Connections
+ COMMON_MUSIC = 0x0035, // All Users\My Music
+ COMMON_PICTURES = 0x0036, // All Users\My Pictures
+ COMMON_VIDEO = 0x0037, // All Users\My Video
+ RESOURCES = 0x0038, // Resource Direcotry
+ RESOURCES_LOCALIZED = 0x0039, // Localized Resource Direcotry
+ COMMON_OLINKS = 0x003a, // Links to All Users OEM specific apps
+ CDBURN_AREA = 0x003b, // USERPROFILE\Local Settings\Application Data\Microsoft\CD Burning
+ COMPUTERSNEARME = 0x003d, // Computers Near Me (computered from Workgroup membership)
+ FLAG_CREATE = 0x8000, // combine with value to force folder creation in SHGetFolderPath()
+ FLAG_DONT_VERIFY = 0x4000, // combine with value to return an unverified folder path
+ FLAG_NO_ALIAS = 0x1000, // combine with value to insure non-alias versions of the pidl
+ FLAG_PER_USER_INIT = 0x0800, // combine with value to indicate per-user init (eg. upgrade)
+ FLAG_MASK = 0xFF00, // mask for all possible flag values
+ }
+
}
diff --git a/Source/RaUI/Common/SysFuns/ApkOp.cs b/Source/RaUI/Common/SysFuns/ApkOp.cs
index 7867ae3..6820688 100644
--- a/Source/RaUI/Common/SysFuns/ApkOp.cs
+++ b/Source/RaUI/Common/SysFuns/ApkOp.cs
@@ -165,6 +165,7 @@ namespace ryCommon
if(item == apk_icon) { list_icon.RemoveAt(i); }
}
}
+ list_icon.Insert(0, apk_icon);
if (list_icon.Count > 0) { apk_icon = list_icon[list_icon.Count - 1]; }
Random rd = new Random(Guid.NewGuid().GetHashCode());
string apkicon_savepath = Cache_Folder + "\\apkicon_" +rySafe.MD5Sha1.GetMD5(apk_file +"_"+ DateTime.Now.ToInt64()+"_"+ rd.Next(1,99999)) + ".png";
diff --git a/Source/RaUI/Common/SysFuns/HotkeyValue.cs b/Source/RaUI/Common/SysFuns/HotkeyValue.cs
index 92b7459..3ad6102 100644
--- a/Source/RaUI/Common/SysFuns/HotkeyValue.cs
+++ b/Source/RaUI/Common/SysFuns/HotkeyValue.cs
@@ -107,11 +107,11 @@ namespace SysFuns
Keys m_Modifiers = Modifiers;
if ((m_Modifiers & Keys.Alt) != 0)
{ m_key |= 1; }
- else if ((m_Modifiers & Keys.Control) != 0)
+ if ((m_Modifiers & Keys.Control) != 0)
{ m_key |= 2; }
- else if ((m_Modifiers & Keys.Shift) != 0)
+ if ((m_Modifiers & Keys.Shift) != 0)
{ m_key |= 4; }
- else if ((m_Modifiers & Keys.LWin) != 0)
+ if ((m_Modifiers & Keys.LWin) != 0)
{ m_key |= 8; }
this.Modifiers_Int = m_key;
}
@@ -136,6 +136,37 @@ namespace SysFuns
T_Modifiers = item[0].ToInt(0);
T_Key = (Keys)item[1].ToInt(0);
}
+ else if (item.Length <= 4)
+ {
+ var modifiers = "+";
+ for (int i = 0; i < item.Length - 1; i++)
+ {
+ modifiers += item[i] + "+";
+ }
+ var m_Modifiers = Keys.None;
+ if (modifiers.IndexOfEx("+ctrl+") >= 0)
+ {
+ m_Modifiers |= Keys.Control;
+ }
+ if (modifiers.IndexOfEx("+alt+") >= 0)
+ {
+ m_Modifiers |= Keys.Alt;
+ }
+ if (modifiers.IndexOfEx("+shift+") >= 0)
+ {
+ m_Modifiers |= Keys.Shift;
+ }
+ if (modifiers.IndexOfEx("+win+") >= 0)
+ {
+ m_Modifiers |= Keys.LWin;
+ }
+ var keyString = item[item.Length - 1];
+ if (Enum.TryParse(keyString, out Keys key))
+ {
+ LoadHotKey(m_Modifiers, key);
+ return;
+ }
+ }
}
catch
{
diff --git a/Source/RaUI/Common/SysFuns/WinHotReg.cs b/Source/RaUI/Common/SysFuns/WinHotReg.cs
index a389f9d..c316a3f 100644
--- a/Source/RaUI/Common/SysFuns/WinHotReg.cs
+++ b/Source/RaUI/Common/SysFuns/WinHotReg.cs
@@ -182,6 +182,17 @@ namespace SysFuns
return result;
}
///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public bool RegHotKey(int id, string hotkey)
+ {
+ HotkeyValue hotkeyValue =new HotkeyValue(hotkey);
+ return RegHotKey(id, hotkeyValue.Modifiers_Int, hotkeyValue.KeyCode);
+ }
+ ///
/// 注册热键
///
///
diff --git a/Source/RaUI/ExtendUI/_SCREEN_CAPTURE/ImageProcessBox.cs b/Source/RaUI/ExtendUI/_SCREEN_CAPTURE/ImageProcessBox.cs
index e0c88a7..b4569f6 100644
--- a/Source/RaUI/ExtendUI/_SCREEN_CAPTURE/ImageProcessBox.cs
+++ b/Source/RaUI/ExtendUI/_SCREEN_CAPTURE/ImageProcessBox.cs
@@ -427,14 +427,22 @@ namespace _SCREEN_CAPTURE
///
protected override void OnPaint(PaintEventArgs e) {
Graphics g = e.Graphics;
- if (this.baseImage != null) {
- g.DrawImage(m_bmpDark, 0, 0);
- g.DrawImage(this.baseImage, this.selectedRectangle, this.selectedRectangle, GraphicsUnit.Pixel);
+ try
+ {
+ if (this.baseImage != null)
+ {
+ if (!this.IsDisposed)
+ {
+ g.DrawImage(m_bmpDark, 0, 0);
+ g.DrawImage(this.baseImage, this.selectedRectangle, this.selectedRectangle, GraphicsUnit.Pixel);
+ }
+ }
+ this.DrawOperationBox(g);
+ if (this.baseImage != null && !isDrawed && !isMoving && m_bMouseEnter && isShowInfo)
+ DrawInfo(e.Graphics);
+ base.OnPaint(e);
}
- this.DrawOperationBox(g);
- if (this.baseImage != null && !isDrawed && !isMoving && m_bMouseEnter && isShowInfo)
- DrawInfo(e.Graphics);
- base.OnPaint(e);
+ catch { }
}
///
/// 绘制操作框
diff --git a/Source/RaUI/ExtendUI/myUpdate/LiveUpdate_EventArgs.cs b/Source/RaUI/ExtendUI/myUpdate/LiveUpdate_EventArgs.cs
index 000632d..24bed6d 100644
--- a/Source/RaUI/ExtendUI/myUpdate/LiveUpdate_EventArgs.cs
+++ b/Source/RaUI/ExtendUI/myUpdate/LiveUpdate_EventArgs.cs
@@ -24,6 +24,10 @@ namespace LiveUpdate
///
public string UpdateVer;//版本
///
+ /// 版本类型
+ ///
+ public string VersionType;//版本类型
+ ///
/// 更新日期
///
public string UpdateDate;//更新日期
diff --git a/Source/RaUI/ExtendUI/myUpdate/clsLiveUpdate.cs b/Source/RaUI/ExtendUI/myUpdate/clsLiveUpdate.cs
index 128ecad..f269a2b 100644
--- a/Source/RaUI/ExtendUI/myUpdate/clsLiveUpdate.cs
+++ b/Source/RaUI/ExtendUI/myUpdate/clsLiveUpdate.cs
@@ -295,12 +295,12 @@ namespace LiveUpdate
SoftUpdateDesUrl = jo.GetJsonValue("SoftUpdateDesUrl", "");
//数据库更新描述
DbUpdateDes = jo.GetJsonValue("DbUpdateDes", "");
-
+
//激发事件
OnReadComplete_T();
//更新标志,1表示软件更新,2表示数据库更新
int UpdateMarket = 0;//更新标志
- UpdateInfo myUpdate=new UpdateInfo();
+ UpdateInfo myUpdate = new UpdateInfo();
myUpdate.UpdateDate = "";
myUpdate.UpdateDes = "";
myUpdate.UpdateDes_Url = "";
@@ -308,17 +308,17 @@ namespace LiveUpdate
myUpdate.UpdateType = "";
myUpdate.UpdateUrl = "";
var m_UpdateUserList = jo.GetJsonValue("UpdateUserList", "");
- if(m_UpdateUserList.Length>0)
+ if (m_UpdateUserList.Length > 0)
{
m_UpdateUserList = "|" + m_UpdateUserList.Replace(";", "|") + "|";
}
if (RySoft.CompareVer(MySoftVer, MySoftRVer, SoftVer, ReVer) == 1)
{
- var ConfigUrl= jo.GetJsonValue("ConfigUrl", "");
- if(ConfigUrl.Length>0)
+ var ConfigUrl = jo.GetJsonValue("ConfigUrl", "");
+ if (ConfigUrl.Length > 0)
{
var http_config = web.Get(ConfigUrl);
- if(http_config.StatusCode== HttpStatusCode.OK)
+ if (http_config.StatusCode == HttpStatusCode.OK)
{
try
{
@@ -328,7 +328,7 @@ namespace LiveUpdate
//在下载升级包前首先要下载的内容
myUpdate.FirstDownList = jo_config.GetJsonValue("FirstDownList", "");
Storage storage = new Storage();
- storage.AddNode2("id","MainProcName");
+ storage.AddNode2("id", "MainProcName");
storage.SetAttrValue("Value", jo_config.GetJsonValue("MainProcName", ""));
storage.AddNode2("id", "MainProcPram");
storage.SetAttrValue("Value", jo_config.GetJsonValue("MainProcPram", ""));
@@ -345,6 +345,7 @@ namespace LiveUpdate
myUpdate.UpdateDate = SoftDate;
myUpdate.UpdateDes = SoftUpdateDes;
myUpdate.UpdateVer = SoftVersion;
+ myUpdate.VersionType = jo.GetJsonValue("VersionType", "");
myUpdate.UpdateType = "soft";
myUpdate.UpdateDes_Url = SoftUpdateDesUrl;
if (FileVerUpdateUrl.Length > 0)
@@ -404,7 +405,8 @@ namespace LiveUpdate
OnNoUpdate_T();
}
}
- catch {
+ catch
+ {
UpdateError.ErrorId = 2;
UpdateError.ErrorStr = "更新错误,读取远程文件失败";
OnHappenError_T(UpdateError);
@@ -412,6 +414,12 @@ namespace LiveUpdate
return;
}
}
+ else {
+ UpdateError.ErrorId = 3;
+ UpdateError.ErrorStr = "更新错误,读取远程文件失败2";
+ OnHappenError_T(UpdateError);
+ OnNoUpdate_T();
+ }
}
Thread threadDown;
///
diff --git a/Source/RaUI/ExtendUI/myUpdate/frmUpdate.cs b/Source/RaUI/ExtendUI/myUpdate/frmUpdate.cs
index 15764b4..bf2c6fd 100644
--- a/Source/RaUI/ExtendUI/myUpdate/frmUpdate.cs
+++ b/Source/RaUI/ExtendUI/myUpdate/frmUpdate.cs
@@ -92,7 +92,7 @@ namespace LiveUpdate
Capion = "发现更新的数据库,升级到最新版数据库,可以获取更全的显示内容。";
}
UpdateDate = ConvertDateStr(e.UpdateDate, "未知");
- UpdateVer = e.UpdateVer;
+ UpdateVer = e.UpdateVer+(e.VersionType.Length==0?"":" "+e.VersionType);
if (e.UpdateDes_Url != "" && e.UpdateDes_Url.IndexOf("http", StringComparison.OrdinalIgnoreCase) == 0)
{
extendedWebBrowser1.Visible = true;
diff --git a/Source/RaUI/Properties/AssemblyInfo.cs b/Source/RaUI/Properties/AssemblyInfo.cs
index 5263c98..df3674a 100644
--- a/Source/RaUI/Properties/AssemblyInfo.cs
+++ b/Source/RaUI/Properties/AssemblyInfo.cs
@@ -33,5 +33,5 @@ using System.Runtime.InteropServices;
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
//通过使用 "*",如下所示:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("4.0.2506.2701")]
-[assembly: AssemblyFileVersion("4.0.2506.2701")]
\ No newline at end of file
+[assembly: AssemblyVersion("4.0.2508.1601")]
+[assembly: AssemblyFileVersion("4.0.2508.1601")]
\ No newline at end of file
diff --git a/Source/RaUI/RaUIV4.csproj.user b/Source/RaUI/RaUIV4.csproj.user
index 9b86104..bcb94c6 100644
--- a/Source/RaUI/RaUIV4.csproj.user
+++ b/Source/RaUI/RaUIV4.csproj.user
@@ -1,6 +1,9 @@
-
+
ShowAllFiles
+
+ true
+
\ No newline at end of file
diff --git a/Source/RaUI/UI/Controls/ButtonEX.cs b/Source/RaUI/UI/Controls/ButtonEX.cs
index bc587fc..8b2c8b0 100644
--- a/Source/RaUI/UI/Controls/ButtonEX.cs
+++ b/Source/RaUI/UI/Controls/ButtonEX.cs
@@ -401,7 +401,9 @@ namespace ryControls
{
imageRect = Rectangle.Empty;
textRect = Rectangle.Empty;
- SizeF textSize = g.MeasureString(Text, Font);
+ var DD= GetTextFormatFlags(TextAlign, RightToLeft == RightToLeft.Yes);
+ SizeF textSize = TextRenderer.MeasureText(g, Text, Font, this.Size, DD);
+ //SizeF textSize =ControlPaint. g.MeasureString(Text, Font);
if (Image == null)
{
switch (TextAlign)
diff --git a/Source/RaUI/UI/Controls/ComboBox/ComboBoxEx2.cs b/Source/RaUI/UI/Controls/ComboBox/ComboBoxEx2.cs
index 7ed7a85..d400931 100644
--- a/Source/RaUI/UI/Controls/ComboBox/ComboBoxEx2.cs
+++ b/Source/RaUI/UI/Controls/ComboBox/ComboBoxEx2.cs
@@ -118,23 +118,15 @@ namespace ryControls
toolTip1.SetToolTip(BtnPopup, value);
}
}
- private Font _font = new Font("宋体",9);
///
- /// 字体
+ ///
///
- public override Font Font
+ ///
+ protected override void OnFontChanged(EventArgs e)
{
- get
- {
- return _font;
- }
-
- set
- {
- _font = value;
- txtSearch.Font = value;
- BtnPopup.Font = value;
- }
+ txtSearch.Font = base.Font;
+ BtnPopup.Font = base.Font;
+ base.OnFontChanged(e);
}
private bool _UseDefSkin = true;
///
@@ -335,7 +327,9 @@ namespace ryControls
}
txtSearch.Focus();
subForm = new FrmComboBoxPopup();
- if(MaxPopupWidth>0)
+ subForm.Font = this.Font;
+ //subForm.ListBox.
+ if (MaxPopupWidth>0)
{
subForm.Width= MaxPopupWidth;
}
@@ -568,6 +562,14 @@ namespace ryControls
///
public string ValueStr1 { get; set; } = "";
///
+ /// int值1
+ ///
+ public int ValueInt1 { get; set; } = 0;
+ ///
+ /// long值1
+ ///
+ public long ValueLong1 { get; set; } = 0;
+ ///
/// Tag
///
public object Tag { get; set; } =null;
diff --git a/Source/RaUI/UI/Controls/ComboBox/FrmComboBoxPopup.Designer.cs b/Source/RaUI/UI/Controls/ComboBox/FrmComboBoxPopup.Designer.cs
index 5711937..8f5f1fc 100644
--- a/Source/RaUI/UI/Controls/ComboBox/FrmComboBoxPopup.Designer.cs
+++ b/Source/RaUI/UI/Controls/ComboBox/FrmComboBoxPopup.Designer.cs
@@ -32,11 +32,14 @@
//
// FrmComboBoxPopup
//
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(464, 426);
+ this.ClientSize = new System.Drawing.Size(541, 497);
+ this.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.Name = "FrmComboBoxPopup";
this.ShowIcon = false;
+ this.Load += new System.EventHandler(this.FrmComboBoxPopup_Load);
this.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.FrmComboBoxPopup_PreviewKeyDown);
this.ResumeLayout(false);
diff --git a/Source/RaUI/UI/Controls/ComboBox/FrmComboBoxPopup.cs b/Source/RaUI/UI/Controls/ComboBox/FrmComboBoxPopup.cs
index 1106e4a..225dd53 100644
--- a/Source/RaUI/UI/Controls/ComboBox/FrmComboBoxPopup.cs
+++ b/Source/RaUI/UI/Controls/ComboBox/FrmComboBoxPopup.cs
@@ -36,7 +36,7 @@ namespace RaUI.UI.Controls.ComboBox
///
///
///
- internal ListBoxEx ListBox=new ListBoxEx();
+ public ListBoxEx ListBox=new();
///
///
///
@@ -45,6 +45,7 @@ namespace RaUI.UI.Controls.ComboBox
InitializeComponent();
//RyForm.SetChildStyle(this);
//this.Selectable = false;
+ ListBox.Font = this.Font;
ListBox.ItemHeight = 30;
ListBox.Parent = this;
ListBox.Dock = DockStyle.Fill;
@@ -117,5 +118,10 @@ namespace RaUI.UI.Controls.ComboBox
{
}
+
+ private void FrmComboBoxPopup_Load(object sender, EventArgs e)
+ {
+
+ }
}
}
diff --git a/Source/RaUI/UI/Controls/ComboBox/ryComboBox.cs b/Source/RaUI/UI/Controls/ComboBox/ryComboBox.cs
index 40fcd32..00034d0 100644
--- a/Source/RaUI/UI/Controls/ComboBox/ryComboBox.cs
+++ b/Source/RaUI/UI/Controls/ComboBox/ryComboBox.cs
@@ -5,6 +5,7 @@ using System.Drawing;
using System.Windows.Forms;
using ryControls;
using System.Globalization;
+using System.Drawing.Drawing2D;
namespace ryControls
{
@@ -16,10 +17,14 @@ namespace ryControls
{
private List mUndoList = new List();
private Stack mRedoStack = new Stack();
- private bool mIsUndo = false;
private UndoRedoInfo mLastInfo = new UndoRedoInfo("", 0);
- private System.ComponentModel.IContainer components;
private int mMaxUndoRedoSteps = 50;
+ //导入API函数
+ [System.Runtime.InteropServices.DllImport("user32.dll ")]
+ static extern IntPtr GetWindowDC(IntPtr hWnd);//返回hWnd参数所指定的窗口的设备环境。
+
+ [System.Runtime.InteropServices.DllImport("user32.dll ")]
+ static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC); //函数释放设备上下文环境(DC)
private class UndoRedoInfo
{
public UndoRedoInfo(string text, int cursorLoc)
@@ -67,7 +72,6 @@ namespace ryControls
{
if (!CanUndo)
return;
- mIsUndo = true;
mRedoStack.Push(new UndoRedoInfo(Text, SelectionStart));
UndoRedoInfo info = (UndoRedoInfo)mUndoList[0];
mUndoList.RemoveAt(0);
@@ -75,7 +79,6 @@ namespace ryControls
SelectionStart = info.CursorLocation;
//txtInfo.ScrollToCaret();
mLastInfo = info;
- mIsUndo = false;
}
///
/// 重复操作
@@ -84,14 +87,12 @@ namespace ryControls
{
if (!CanRedo)
return;
- mIsUndo = true;
mUndoList.Insert(0, new UndoRedoInfo(Text, SelectionStart));
LimitUndo();
UndoRedoInfo info = (UndoRedoInfo)mRedoStack.Pop();
Text = info.Text;
SelectionStart = info.CursorLocation;
//this.ScrollToCaret();
- mIsUndo = false;
}
private void LimitUndo()
{
@@ -109,36 +110,66 @@ namespace ryControls
base.DoubleBuffered = true;
base.FlatStyle = FlatStyle.Flat;
base.DrawMode = DrawMode.OwnerDrawFixed;
+
base.DrawItem += new DrawItemEventHandler(delegate (object sender, DrawItemEventArgs e)
{
- if (e.Index < 0)
+ if (e.Index < 0) { return; }
+ //鼠标选中在这个项上
+ if ((e.State & DrawItemState.Selected) != 0)
{
- return;
- }
- //StringFormat stringFormat = new StringFormat
- //{
- // LineAlignment = StringAlignment.Center
- //};
- e.DrawBackground();
- e.DrawFocusRectangle();
- if (base.Items[e.Index] is ComboPopupItem item)
- {
- var r = e.Bounds;
- if (item.Image != null)
- {
- int width = item.Image.Width * 20 / item.Image.Height;
- e.Graphics.DrawImage(item.Image, r.X + 2, r.Y + (r.Height - 20) / 2, width, 20);
- //e.Graphics.DrawImage(engine.Icon,e.Bounds.Location);
- r.Offset(width+2, 0);
- }
- e.Graphics.DrawString(item.Text, e.Font, new SolidBrush(e.ForeColor), r, StringFormat.GenericDefault);
+ //渐变画刷
+ LinearGradientBrush brush = new LinearGradientBrush(e.Bounds, Color.FromArgb(255, 251, 237),
+ Color.FromArgb(255, 236, 181), LinearGradientMode.Vertical);
+ //填充区域
+ Rectangle borderRect = new Rectangle(3, e.Bounds.Y, e.Bounds.Width - 5, e.Bounds.Height-2);
+
+ e.Graphics.FillRectangle(brush, borderRect);
+ //画边框
+ Pen pen = new Pen(Color.FromArgb(229, 195, 101));
+ e.Graphics.DrawRectangle(pen, borderRect);
}
else
{
- SizeF size = e.Graphics.MeasureString(base.Items[e.Index].ToString(), e.Font);
- float kk = e.Bounds.Y + (e.Bounds.Height - (int)size.Height);
- e.Graphics.DrawString(base.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds.X, kk);
+ SolidBrush brush = new SolidBrush(Color.FromArgb(255, 255, 255));
+ e.Graphics.FillRectangle(brush, e.Bounds);
}
+ Rectangle textRect = new Rectangle(3, e.Bounds.Y + 1, e.Bounds.Width-5, e.Bounds.Height - 2);
+ switch (this.Items[e.Index])
+ {
+ case clsCbbItem item:
+ Image img = item.Img;
+ //图片绘制的区域
+ Rectangle imgRect = new Rectangle(6, e.Bounds.Y + 3, 16, 16);
+ e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
+ e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
+ e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
+ e.Graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half;
+ e.Graphics.DrawImage(img, imgRect);
+ //文本内容显示区域
+ textRect = new Rectangle(imgRect.Right + 2, imgRect.Y, e.Bounds.Width - imgRect.Width, e.Bounds.Height - 2);
+ break;
+ case ComboPopupItem item2:
+ Image img2 = item2.Image;
+ //图片绘制的区域
+ Rectangle imgRect2 = new Rectangle(6, e.Bounds.Y + 3, 16, 16);
+ e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
+ e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
+ e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
+ e.Graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half;
+ e.Graphics.DrawImage(img2, imgRect2);
+ //文本内容显示区域
+ textRect = new Rectangle(imgRect2.Right + 2, imgRect2.Y, e.Bounds.Width - imgRect2.Width, e.Bounds.Height - 2);
+ break;
+ }
+ //获得项文本内容,绘制文本
+ string itemText = this.Items[e.Index].ToString();
+
+ //文本格式垂直居中
+ StringFormat strFormat = new StringFormat()
+ {
+ LineAlignment = StringAlignment.Center
+ };
+ e.Graphics.DrawString(itemText, new Font("微软雅黑", 11), Brushes.Black, textRect, strFormat);
});
}
@@ -148,17 +179,26 @@ namespace ryControls
/// 消息
protected override void WndProc(ref Message m)
{
+ base.WndProc(ref m);
if (m.Msg == 0xf || m.Msg == 0x133)
{
- ryControls.SkinHelp.ResetBorderColor(m, this, 1, Color.FromArgb(213, 216, 223));
- }
- base.WndProc(ref m);
- }
+ IntPtr hDC = GetWindowDC(m.HWnd);
+ if (hDC.ToInt32() == 0) //如果取设备上下文失败则返回
+ {
+ return;
+ }
- private void InitializeComponent()
- {
- this.SuspendLayout();
- this.ResumeLayout(false);
+ //建立Graphics对像
+ Graphics g = Graphics.FromHdc(hDC);
+ //画边框的
+ ControlPaint.DrawBorder(g, new Rectangle(0, 0, Width, Height), SkinHelp.DefalutBorderColor, ButtonBorderStyle.Solid);
+ //画坚线
+ //ControlPaint.DrawBorder(g, new Rectangle(Width - Height, 0, Height, Height), Color.Red, ButtonBorderStyle.Solid);
+ //g.DrawLine(new Pen(Brushes.Blue, 2), new PointF(this.Width - this.Height, 0), new PointF(this.Width - this.Height, this.Height));
+ //释放DC
+ ReleaseDC(m.HWnd, hDC);
+ return;
+ }
}
}
diff --git a/Source/RaUI/UI/Controls/Hotkey/HotkeyTextBox.Designer.cs b/Source/RaUI/UI/Controls/Hotkey/HotkeyTextBox.Designer.cs
index 9ac80db..1ef5114 100644
--- a/Source/RaUI/UI/Controls/Hotkey/HotkeyTextBox.Designer.cs
+++ b/Source/RaUI/UI/Controls/Hotkey/HotkeyTextBox.Designer.cs
@@ -28,46 +28,18 @@
///
private void InitializeComponent()
{
- this.BtnClear = new System.Windows.Forms.Button();
- this.TxtHotKey = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
- // BtnClear
+ // HotkeyTextBox
//
- this.BtnClear.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
- this.BtnClear.Location = new System.Drawing.Point(245, 0);
- this.BtnClear.Name = "BtnClear";
- this.BtnClear.Size = new System.Drawing.Size(43, 35);
- this.BtnClear.TabIndex = 1;
- this.BtnClear.Text = "X";
- this.BtnClear.UseVisualStyleBackColor = true;
- this.BtnClear.Click += new System.EventHandler(this.BtnClear_Click);
- //
- // TxtHotKey
- //
- this.TxtHotKey.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.TxtHotKey.BorderStyle = System.Windows.Forms.BorderStyle.None;
- this.TxtHotKey.Font = new System.Drawing.Font("宋体", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
- this.TxtHotKey.Location = new System.Drawing.Point(3, 8);
- this.TxtHotKey.Name = "TxtHotKey";
- this.TxtHotKey.Size = new System.Drawing.Size(236, 19);
- this.TxtHotKey.TabIndex = 2;
- //
- // ctlHotkey
- //
- this.Controls.Add(this.TxtHotKey);
- this.Controls.Add(this.BtnClear);
- this.Name = "ctlHotkey";
+ this.DoubleBuffered = true;
+ this.Name = "HotkeyTextBox";
this.Size = new System.Drawing.Size(288, 35);
this.Paint += new System.Windows.Forms.PaintEventHandler(this.CtlHotkey_Paint);
this.ResumeLayout(false);
- this.PerformLayout();
}
#endregion
- private System.Windows.Forms.Button BtnClear;
- private System.Windows.Forms.TextBox TxtHotKey;
}
}
diff --git a/Source/RaUI/UI/Controls/Hotkey/HotkeyTextBox.cs b/Source/RaUI/UI/Controls/Hotkey/HotkeyTextBox.cs
index c8df2ca..9abe59c 100644
--- a/Source/RaUI/UI/Controls/Hotkey/HotkeyTextBox.cs
+++ b/Source/RaUI/UI/Controls/Hotkey/HotkeyTextBox.cs
@@ -26,15 +26,160 @@ namespace ryControls
InitializeComponent();
//定义KeyPress事件
//base.KeyPress += delegate(object sender, KeyPressEventArgs e) { e.Handled = true; };
- TxtHotKey.ReadOnly = true;
- TxtHotKey.BackColor = Color.White;
- TxtHotKey.KeyDown += TxtHotKey_KeyDown;
- TxtHotKey.KeyUp += TxtHotKey_KeyUp;
- TxtHotKey.Top = (Height - TxtHotKey.Height) / 2;
//Application.AddMessageFilter(this);
base.BackColor = Color.White;
}
///
+ /// 清除按钮位置
+ ///
+ public Rectangle ClearBtnRect
+ {
+ get
+ {
+ return new Rectangle(this.Width - this.Height-1, 1, Height-1, Height-2);
+ }
+ }
+ ///
+ /// 热键文本位置
+ ///
+ public Rectangle HotKeyTextRect
+ {
+ get
+ {
+ return new Rectangle(0, 0, this.Width -this.Height-2, Height);
+ }
+ }
+ ///
+ ///
+ ///
+ ///
+ protected override void OnMouseDown(MouseEventArgs e)
+ {
+ if(ClearBtnRect.Contains(e.Location))
+ {
+ m_Modifiers = Keys.None;
+ m_Key = Keys.None;
+ UpdateText();
+ }
+ base.OnMouseDown(e);
+ }
+ private ControlState _controlState;//控件状态
+ internal ControlState ControlState //控件的状态
+ {
+ get { return _controlState; }
+ set
+ {
+ if (_controlState != value)
+ {
+ _controlState = value;
+ base.Invalidate();
+ }
+ }
+ }
+ private ControlState _ClearBtnState;//控件状态
+ internal ControlState ClearBtnState //控件的状态
+ {
+ get { return _ClearBtnState; }
+ set
+ {
+ if (_ClearBtnState != value)
+ {
+ _ClearBtnState = value;
+ base.Invalidate();
+ }
+ }
+ }
+ ///
+ ///
+ ///
+ ///
+ protected override void OnMouseUp(MouseEventArgs e)
+ {
+ base.OnMouseUp(e);
+ if (e.Button == MouseButtons.Left && e.Clicks == 1)
+ {
+ if (ClientRectangle.Contains(e.Location))//控件区域包含鼠标的位置
+ {
+ ControlState = ControlState.Hover;
+ }
+ else
+ {
+ ControlState = ControlState.Normal;
+ }
+ }
+ }
+ ///
+ ///
+ ///
+ ///
+ protected override void OnMouseLeave(EventArgs e)
+ {
+ ControlState = ControlState.Normal;
+ ClearBtnState= ControlState.Normal;
+ base.OnMouseLeave(e);
+ }
+ ///
+ ///
+ ///
+ ///
+ protected override void OnLostFocus(EventArgs e)
+ {
+ ControlState = ControlState.Normal;
+ ClearBtnState = ControlState.Normal;
+ base.OnLostFocus(e);
+ }
+ ///
+ ///
+ ///
+ ///
+ protected override void OnMouseMove(MouseEventArgs e)
+ {
+ if(ClearBtnRect.Contains(e.Location))
+ {
+ if (ClearBtnState != ControlState.Hover)
+ {
+ ClearBtnState = ControlState.Hover;
+ this.Invalidate();
+ }
+ }
+ else
+ {
+ if (ClearBtnState == ControlState.Hover)
+ {
+ ClearBtnState = ControlState.Normal;
+ this.Invalidate();
+ }
+ }
+ base.OnMouseMove(e);
+ }
+ ///
+ ///
+ ///
+ ///
+ protected override void OnPaint(PaintEventArgs e)
+ {
+ e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
+ e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
+ e.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
+ e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
+ StringFormat sf = new StringFormat();
+ sf.Trimming = StringTrimming.EllipsisCharacter;
+ sf.FormatFlags = StringFormatFlags.NoWrap;
+ sf.LineAlignment = StringAlignment.Center;
+ sf.Alignment = StringAlignment.Center;
+ Pen pen = new Pen(new SolidBrush(ClearBtnState== ControlState.Hover ? Color.FromArgb(43, 141, 225) : ForeColor), 1);
+ //var offset =this.Height/4;
+ //var btn_rect= ClearBtnRect;
+ e.Graphics.DrawPath(pen,MGdu.WinFormUI.MyGraphics.GraphicsPathHelper.CreateCloseFlagPath(ClearBtnRect));
+ //e.Graphics.DrawLine(pen, btn_rect.Left+ offset, btn_rect.Top+ offset, btn_rect.Right- offset, btn_rect.Bottom- offset);
+ //e.Graphics.DrawLine(pen, btn_rect.Right- offset, btn_rect.Top+ offset, btn_rect.Left+offset, btn_rect.Bottom- offset);
+ pen.Dispose();
+ //e.Graphics.DrawString("X", MouseInClearBtn?new Font(Font.FontFamily,Font.Size+2, FontStyle.Bold): Font, new SolidBrush(MouseInClearBtn?Color.Blue: ForeColor), ClearBtnRect, sf);
+ sf.Alignment = StringAlignment.Near;
+ e.Graphics.DrawString(" "+tmpText, Font,new SolidBrush(ForeColor), HotKeyTextRect, sf);
+ ControlPaint.DrawBorder(e.Graphics, this.ClientRectangle, ControlState== ControlState.Hover?Color.FromArgb(43, 141, 225) : SkinHelp.DefalutBorderColor, ButtonBorderStyle.Solid);
+ }
+ ///
///
///
~HotkeyTextBox()
@@ -61,19 +206,7 @@ namespace ryControls
///
protected override void OnSizeChanged(EventArgs e)
{
- TxtHotKey.Top = (Height - TxtHotKey.Height) / 2;
- TxtHotKey.Width = Width - BtnClear.Width - 2;
- BtnClear.Top = 0;
- BtnClear.Left = TxtHotKey.Left + TxtHotKey.Width;
- BtnClear.Height = Height;
- }
- private void TxtHotKey_KeyDown(object sender, KeyEventArgs e)
- {
- OnKeyDown(e);
- }
- private void TxtHotKey_KeyUp(object sender, KeyEventArgs e)
- {
- OnKeyUp(e);
+
}
//使文本属性失效掉
///
@@ -82,10 +215,11 @@ namespace ryControls
[Description("此属性无效")]
public new string Text
{
- get { return TxtHotKey.Text; }
+ get { return tmpText; }
set
{
LoadHotKey(value);
+ this.Invalidate();
}
}
///
@@ -109,6 +243,37 @@ namespace ryControls
T_Modifiers = item[0].ToInt(0);
T_Key = (Keys)item[1].ToInt(0);
}
+ else if(item.Length <=4)
+ {
+ var modifiers = "+";
+ for (int i = 0; i < item.Length-1; i++)
+ {
+ modifiers += item[i] + "+";
+ }
+ m_Modifiers = Keys.None;
+ if (modifiers.IndexOfEx("+ctrl+")>=0)
+ {
+ m_Modifiers |= Keys.Control;
+ }
+ if (modifiers.IndexOfEx("+alt+") >= 0)
+ {
+ m_Modifiers |= Keys.Alt;
+ }
+ if (modifiers.IndexOfEx("+shift+") >= 0)
+ {
+ m_Modifiers |= Keys.Shift;
+ }
+ if (modifiers.IndexOfEx("+win+") >= 0)
+ {
+ m_Modifiers |= Keys.LWin;
+ }
+ var keyString = item[item.Length - 1];
+ if (Enum.TryParse(keyString, out Keys key))
+ {
+ T_Key = key;
+ }
+ UpdateText();
+ }
}
catch
{
@@ -119,10 +284,8 @@ namespace ryControls
private void UpdateText()
{
HotkeyValue xvalue = new HotkeyValue(T_Modifiers, (int)T_Key);
- base.Text = xvalue.ToString();
- TxtHotKey.Text = base.Text;
- TxtHotKey.SelectionLength = 0;
- TxtHotKey.SelectionStart = 0;
+ tmpText = xvalue.ToString();
+ this.Invalidate();
}
///
/// 保存热键
@@ -221,11 +384,11 @@ namespace ryControls
}
m_Modifiers = value.Modifiers;
m_Key = value.KeyCode;
- base.Text = value.ToString();//赋值
- TxtHotKey.Text = base.Text;
+ Text = value.ToString();//赋值
e.Handled = true;
base.OnKeyDown(e);
}
+ private string tmpText = "";
//TextBox的KeyDown事件
///
/// KeyDown事件
@@ -236,7 +399,7 @@ namespace ryControls
if(m_Modifiers!=Keys.None && m_Key==Keys.None)
{
m_Modifiers = Keys.None;
- TxtHotKey.Text = "错误的热键";
+ tmpText = "错误的热键";
}
e.Handled = false;
base.OnKeyUp(e);
@@ -250,7 +413,17 @@ namespace ryControls
private void CtlHotkey_Paint(object sender, PaintEventArgs e)
{
- e.Graphics.DrawRectangle(new Pen(Color.FromArgb(213, 216, 223)), new Rectangle(0, 0, this.Width - 1, this.Height - 1));
+ //e.Graphics.DrawRectangle(new Pen(Color.FromArgb(213, 216, 223)), new Rectangle(0, 0, this.Width - 1, this.Height - 1));
+ }
+
+ private void BtnClear_KeyDown(object sender, KeyEventArgs e)
+ {
+ OnKeyDown(e);
+ }
+
+ private void BtnClear_KeyUp(object sender, KeyEventArgs e)
+ {
+ OnKeyUp(e);
}
}
}
diff --git a/Source/RaUI/UI/Controls/TextBoxEx2.cs b/Source/RaUI/UI/Controls/TextBoxEx2.cs
index ac84edb..45f5b0b 100644
--- a/Source/RaUI/UI/Controls/TextBoxEx2.cs
+++ b/Source/RaUI/UI/Controls/TextBoxEx2.cs
@@ -92,6 +92,10 @@ namespace ryControls
{
e.Graphics.Clear(this.BackColor);
}
+ else if(!base.Enabled)
+ {
+ e.Graphics.Clear(SystemColors.Control);
+ }
e.Graphics.DrawRectangle(new Pen(SkinHelp.DefalutBorderColor), new Rectangle(0, 0, this.Width - 1, this.Height - 1));
if(txtInfo.Text.Length==0 && !txtInfo.Visible)
{
@@ -99,10 +103,17 @@ namespace ryControls
Font font = this.Font; // 使用当前控件的字体。
Rectangle rect = this.ClientRectangle; // 在当前控件的客户区域绘制。
StringFormat stringFormat = new StringFormat();
- stringFormat.LineAlignment = StringAlignment.Center;
+ if (!Multiline)
+ {
+ stringFormat.LineAlignment = StringAlignment.Center;
+ }
+ else
+ {
+ rect.Offset(0, 6);
+ }
using (Graphics g = this.CreateGraphics())
{
- g.DrawString(" "+EmptyText, font, brush, rect, stringFormat);
+ g.DrawString(" " + EmptyText, font, brush, rect, stringFormat);
}
}
}
@@ -149,7 +160,7 @@ namespace ryControls
public bool Multiline
{
get { return txtInfo.Multiline; }
- set { txtInfo.Multiline = value; txtInfo.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; }
+ set { txtInfo.Multiline = value; txtInfo.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;this.Invalidate(); }
}
///
/// 是否在显示不下时换行
@@ -299,7 +310,6 @@ namespace ryControls
private void TextBoxEx2_FontChanged(object sender, EventArgs e)
{
txtInfo.Font = this.Font;
-
}
///
///
diff --git a/Source/RaUI/UI/HtmlRenderer/HtmlLabel.cs b/Source/RaUI/UI/HtmlRenderer/HtmlLabel.cs
index b8a37d9..6ee8fb5 100644
--- a/Source/RaUI/UI/HtmlRenderer/HtmlLabel.cs
+++ b/Source/RaUI/UI/HtmlRenderer/HtmlLabel.cs
@@ -301,13 +301,13 @@ namespace TheArtOfDev.HtmlRenderer.WinForms
}
///
- /// Automatically sets the size of the label by content size
+ /// ݴСԶñǩĴС
///
[Browsable(true)]
[DefaultValue(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
- [Description("Automatically sets the size of the label by content size.")]
+ [Description("ݴСԶñǩĴС ")]
public override bool AutoSize
{
get { return base.AutoSize; }
@@ -324,12 +324,12 @@ namespace TheArtOfDev.HtmlRenderer.WinForms
}
///
- /// Automatically sets the height of the label by content height (width is not effected).
+ /// ݸ߶Զñǩĸ߶ȣȲӰ죩
///
[Browsable(true)]
[DefaultValue(false)]
[Category("Layout")]
- [Description("Automatically sets the height of the label by content height (width is not effected)")]
+ [Description("ݸ߶Զñǩĸ߶ȣȲӰ죩")]
public virtual bool AutoSizeHeightOnly
{
get { return _autoSizeHight; }
diff --git a/Source/RaUI/UI/ObjectListView/Rendering/Renderers.cs b/Source/RaUI/UI/ObjectListView/Rendering/Renderers.cs
index 7f298cd..3c56ade 100644
--- a/Source/RaUI/UI/ObjectListView/Rendering/Renderers.cs
+++ b/Source/RaUI/UI/ObjectListView/Rendering/Renderers.cs
@@ -1,4 +1,4 @@
-/*
+/*
* Renderers - A collection of useful renderers that are used to owner draw a cell in an ObjectListView
*
* Author: Phillip Piper
@@ -907,19 +907,23 @@ namespace BrightIdeasSoftware {
{
if (String.IsNullOrEmpty(txt))
return Size.Empty;
-
- if (this.UseGdiTextRendering)
+ try
{
- Size proposedSize = new Size(width, Int32.MaxValue);
- return TextRenderer.MeasureText(g, txt, this.Font, proposedSize, NormalTextFormatFlags);
- }
-
- // Using GDI+ renderering
- using (StringFormat fmt = new StringFormat()) {
- fmt.Trimming = StringTrimming.EllipsisCharacter;
- SizeF sizeF = g.MeasureString(txt, this.Font, width, fmt);
- return new Size(1 + (int)sizeF.Width, 1 + (int)sizeF.Height);
+ if (this.UseGdiTextRendering)
+ {
+ Size proposedSize = new Size(width, Int32.MaxValue);
+ return TextRenderer.MeasureText(g, txt, this.Font, proposedSize, NormalTextFormatFlags);
+ }
+
+ // Using GDI+ renderering
+ using (StringFormat fmt = new StringFormat())
+ {
+ fmt.Trimming = StringTrimming.EllipsisCharacter;
+ SizeF sizeF = g.MeasureString(txt, this.Font, width, fmt);
+ return new Size(1 + (int)sizeF.Width, 1 + (int)sizeF.Height);
+ }
}
+ catch { return Size.Empty; }
}
///
@@ -1716,15 +1720,15 @@ namespace BrightIdeasSoftware {
/// Bounds of the cell
///
/// The string to be drawn
- /// ˢ
- public virtual int DrawText2(Graphics g, Rectangle r,int offset_x, String txt, Brush brush)
+ ///
+ public virtual int DrawText2(Graphics g, Rectangle r, int offset_x, String txt, Brush brush)
{
var txt_size = g.MeasureString(txt, Font).ToSize();
StringFormat sf = new StringFormat();
sf.Trimming = StringTrimming.EllipsisCharacter;
- sf.FormatFlags = StringFormatFlags.NoWrap;//Զ
- g.DrawString(txt, Font, brush,new RectangleF(r.Left+ offset_x, r.Top + 2 + (r.Height - txt_size.Height) / 2,r.Width- offset_x, r.Height),sf);
- return txt_size.Width+1;
+ sf.FormatFlags = StringFormatFlags.NoWrap;//<2F>Զ
+ g.DrawString(txt, Font, brush, new RectangleF(r.Left + offset_x, r.Top + 2 + (r.Height - txt_size.Height) / 2, r.Width - offset_x, r.Height), sf);
+ return txt_size.Width + 1;
}
///
/// Draw the given text and optional image in the "normal" fashion
@@ -1751,7 +1755,7 @@ namespace BrightIdeasSoftware {
{
var txt_size = g.MeasureString(txt, Font).ToSize();
var rect = new RectangleF(r.Left + offset_x, r.Top + 2 + (r.Height - txt_size.Height) / 2, r.Width - offset_x, r.Height);
- var rect_back = new RectangleF(r.Left + offset_x, r.Top + 2, txt_size.Width, r.Height-4);
+ var rect_back = new RectangleF(r.Left + offset_x, r.Top + 2, txt_size.Width, r.Height - 4);
g.FillRectangle(back_brush, rect_back);
StringFormat sf = new StringFormat();
sf.Trimming = StringTrimming.EllipsisCharacter;
@@ -1759,6 +1763,64 @@ namespace BrightIdeasSoftware {
return txt_size.Width + 1;
}
///
+ /// Draw the given text and optional image in the "normal" fashion
+ ///
+ /// Graphics context to use for drawing
+ /// Bounds of the cell
+ ///
+ /// The string to be drawn
+ /// 笔刷
+ public virtual int DrawText2(Graphics g, Rectangle r,int offset_x, String txt, Color forecolor)
+ {
+ try
+ {
+ StringFormat sf = new StringFormat();
+ sf.Trimming = StringTrimming.EllipsisCharacter;
+
+ sf.FormatFlags = StringFormatFlags.NoWrap;//自动换行
+ Size txt_size = TextRenderer.MeasureText(g, txt, Font, r.Size, TextFormatFlags.NoPadding | TextFormatFlags.PreserveGraphicsTranslateTransform);
+ TextRenderer.DrawText(g, txt, Font, new Rectangle(r.Left + offset_x, r.Top + 2 + (r.Height - txt_size.Height) / 2, r.Width - offset_x, r.Height), forecolor, TextFormatFlags.NoPadding | TextFormatFlags.PreserveGraphicsTranslateTransform);
+ //g.DrawString(txt, Font, br ush,new RectangleF(r.Left+ offset_x, r.Top + 2 + (r.Height - txt_size.Height) / 2,r.Width- offset_x, r.Height),sf);
+ return txt_size.Width;
+ }
+ catch { return 0; }
+ }
+ ///
+ /// Draw the given text and optional image in the "normal" fashion
+ ///
+ /// Graphics context to use for drawing
+ /// Bounds of the cell
+ ///
+ /// The string to be drawn
+ public virtual int DrawText3(Graphics g, Rectangle r, int offset_x, String txt)
+ {
+ return DrawText2(g, r, offset_x, txt, GetForegroundColor());
+ }
+ ///
+ ///
+ ///
+ ///
+ /// 这里的r
+ ///
+ ///
+ ///
+ ///
+ ///
+ public virtual int DrawTextAndBackColor2(Graphics g, Rectangle r, int offset_x, string txt, Color forecolor, Color backcolor)
+ {
+ try
+ {
+ var txt_size = TextRenderer.MeasureText(g, txt, Font, r.Size, TextFormatFlags.NoPadding | TextFormatFlags.PreserveGraphicsTranslateTransform);
+ var rect = new Rectangle(r.Left + offset_x, r.Top + 2 + (r.Height - txt_size.Height) / 2, r.Width - offset_x, r.Height);
+ var rect_back = new Rectangle(r.Left + offset_x, r.Top + 2, txt_size.Width, r.Height - 4);
+
+ g.FillRectangle(new SolidBrush(backcolor), rect_back);
+ TextRenderer.DrawText(g, txt, Font, rect, forecolor, TextFormatFlags.NoPadding | TextFormatFlags.PreserveGraphicsTranslateTransform);
+ return txt_size.Width;
+ }
+ catch { return 0; }
+ }
+ ///
///
///
///
@@ -1771,7 +1833,7 @@ namespace BrightIdeasSoftware {
{
var width_bit = bitmap.Width * bit_height / bitmap.Height;
g.DrawImage(bitmap, r.X+ offset_x, r.Y + (r.Height - bit_height) / 2, width_bit, bit_height);
- return width_bit + 1;
+ return width_bit ;
}
///
/// Print the given text in the given rectangle using only GDI routines
@@ -2887,10 +2949,10 @@ namespace BrightIdeasSoftware {
#region Configuration Properties
///
- /// ǷӦϵͳʽƣ
+ /// 此栏是否应以系统样式绘制?
///
[Category("ObjectListView"),
- Description("ǷӦϵͳʽ"),
+ Description("此栏是否应以系统样式绘制"),
DefaultValue(true)]
public bool UseStandardBar {
get { return useStandardBar; }
@@ -2900,10 +2962,10 @@ namespace BrightIdeasSoftware {
private bool useStandardBar = true;
///
- /// ǵĵԪ߿ʼƶصͼ
+ /// 将从我们的单元格边框开始绘制多少像素的条形图
///
[Category("ObjectListView"),
- Description("ǵĵԪ߿ʼƶصͼ"),
+ Description("将从我们的单元格边框开始绘制多少像素的条形图"),
DefaultValue(2)]
public int Padding {
get { return padding; }
@@ -2913,10 +2975,10 @@ namespace BrightIdeasSoftware {
private int padding = 2;
///
- ///ڻƽ֮ǰʹʲôɫؼڲ
+ ///在绘制进度条之前,将使用什么颜色填充控件内部?
///
[Category("ObjectListView"),
- Description("ͼڲɫ"),
+ Description("条形图内部的颜色"),
DefaultValue(typeof (Color), "AliceBlue")]
public Color BackgroundColor {
get { return backgroundColor; }
@@ -2926,10 +2988,10 @@ namespace BrightIdeasSoftware {
private Color backgroundColor = Color.AliceBlue;
///
- /// ߿ɫ
+ /// 进度条边框颜色
///
[Category("ObjectListView"),
- Description("߿ɫ"),
+ Description("进度条边框颜色"),
DefaultValue(typeof (Color), "Black")]
public Color FrameColor {
get { return frameColor; }
@@ -2939,10 +3001,10 @@ namespace BrightIdeasSoftware {
private Color frameColor = Color.Black;
///
- /// ı߿ؿ
+ /// 进度条的边框像素宽
///
[Category("ObjectListView"),
- Description("ı߿ؿ"),
+ Description("进度条的边框像素宽"),
DefaultValue(1.0f)]
public float FrameWidth {
get { return frameWidth; }
@@ -2952,11 +3014,11 @@ namespace BrightIdeasSoftware {
private float frameWidth = 1.0f;
///
- /// ġ䡱Ӧʲôɫ
+ /// 进度条的“填充”部分应该是什么颜色?
///
- /// GradientStartColorΪColor.Emptyʱʹôѡ
+ /// 仅当GradientStartColor为Color.Empty时才使用此选项
[Category("ObjectListView"),
- Description("ġ䡱Ӧʲôɫ"),
+ Description("进度条的“填充”部分应该是什么颜色?"),
DefaultValue(typeof (Color), "BlueViolet")]
public Color FillColor {
get { return fillColor; }
@@ -2965,11 +3027,11 @@ namespace BrightIdeasSoftware {
private Color fillColor = Color.BlueViolet;
///
- /// ǷʾıٷֱȽʾ
+ /// 进度条中是否显示文本百分比进度显示
///
///
[Category("ObjectListView"),
- Description("ǷʾıٷֱȽʾ"),
+ Description("进度条中是否显示文本百分比进度显示"),
DefaultValue(typeof(Boolean), "True")]
public bool ShowTextPercent
{
@@ -2979,10 +3041,10 @@ namespace BrightIdeasSoftware {
private bool showTextPercent = true;
///
- /// ʹýԴɫʼ
+ /// 使用渐变以此颜色开始填充进度条
///
[Category("ObjectListView"),
- Description("ʹýԴɫʼ"),
+ Description("使用渐变以此颜色开始填充进度条"),
DefaultValue(typeof (Color), "CornflowerBlue")]
public Color GradientStartColor {
get { return startColor; }
@@ -2992,10 +3054,10 @@ namespace BrightIdeasSoftware {
private Color startColor = Color.CornflowerBlue;
///
- /// ʹýԴɫβĽ
+ /// 使用渐变填充以此颜色结尾的进度条
///
[Category("ObjectListView"),
- Description("ʹýԴɫβĽ"),
+ Description("使用渐变填充以此颜色结尾的进度条"),
DefaultValue(typeof (Color), "DarkBlue")]
public Color GradientEndColor {
get { return endColor; }
@@ -3003,10 +3065,10 @@ namespace BrightIdeasSoftware {
}
private Color endColor = Color.DarkBlue;
///
- /// ʹýԴɫʼ佥
+ /// 使用渐变以此颜色开始填充渐满进度条
///
[Category("ObjectListView"),
- Description("ʹýԴɫʼ佥"),
+ Description("使用渐变以此颜色开始填充渐满进度条"),
DefaultValue(typeof(Color), "CornflowerBlue")]
public Color NearGradientStartColor
{
@@ -3017,10 +3079,10 @@ namespace BrightIdeasSoftware {
private Color near_startColor = Color.CornflowerBlue;
///
- /// ʹýԴɫβĽ
+ /// 使用渐变填充以此颜色结尾的渐满进度条
///
[Category("ObjectListView"),
- Description("ʹýԴɫβĽ"),
+ Description("使用渐变填充以此颜色结尾的渐满进度条"),
DefaultValue(typeof(Color), "DarkBlue")]
public Color NearGradientEndColor
{
@@ -3030,10 +3092,10 @@ namespace BrightIdeasSoftware {
private Color near_endColor = Color.DarkBlue;
///
- /// бö
+ /// 无论列变得多宽,进度条都不会比这个宽。
///
[Category("Behavior"),
- Description("Զ"),
+ Description("进度条永远不会比这个更宽"),
DefaultValue(100)]
public int MaximumWidth {
get { return maximumWidth; }
@@ -3043,10 +3105,10 @@ namespace BrightIdeasSoftware {
private int maximumWidth = 100;
///
- /// ۵Ԫжߣ
+ /// 无论单元格有多高,进度条都不会比这个高
///
[Category("Behavior"),
- Description("Զ"),
+ Description("进度条永远不会比这个高"),
DefaultValue(16)]
public int MaximumHeight {
get { return maximumHeight; }
@@ -3056,10 +3118,10 @@ namespace BrightIdeasSoftware {
private int maximumHeight = 16;
///
- /// ԤڵСֵСڴֵֵʾһ
+ /// 预期的最小数据值。小于此值的值将显示一个空条。
///
[Category("Behavior"),
- Description("ԤڵСֵСڴֵֵʾһ"),
+ Description("预期的最小数据值。小于此值的值将显示一个空条。"),
DefaultValue(0.0)]
public double MinimumValue {
get { return minimumValue; }
@@ -3068,10 +3130,10 @@ namespace BrightIdeasSoftware {
private double minimumValue = 0.0;
///
- /// ӽʱֵ,ڸֵʱʾͬɫСڵMinimumValueMaximumValueֵʾδøֵ
+ /// 接近满时的值,高于该值时,显示不同颜色,小于等于MinimumValue或大于MaximumValue值,则表示未设置该值
///
[Category("Behavior"),
- Description("ӽʱֵ,ڸֵʱʾͬɫСڵMinimumValueMaximumValueֵʾδøֵ"),
+ Description("接近满时的值,高于该值时,显示不同颜色,小于等于MinimumValue或大于MaximumValue值,则表示未设置该值"),
DefaultValue(0.0)]
public double NearFullValue
{
@@ -3081,10 +3143,10 @@ namespace BrightIdeasSoftware {
private double nearfullValue = 0.0;
///
- ///ΧֵڴֵֵһΡ
+ ///范围的最大值。大于此值的值将给出一个完整的条形。
///
[Category("Behavior"),
- Description("ΧֵڴֵֵһΡ"),
+ Description("范围的最大值。大于此值的值将给出一个完整的条形。"),
DefaultValue(100.0)]
public double MaximumValue {
get { return maximumValue; }
@@ -3674,10 +3736,10 @@ namespace BrightIdeasSoftware {
}
private int imageTextSpace = 4;
///
- ///
+ /// 顶部留白像素
///
[Category("ObjectListView"),
- Description(""),
+ Description("顶部留白像素"),
DefaultValue(4)]
public int TopSpace
{
@@ -3870,11 +3932,11 @@ namespace BrightIdeasSoftware {
private OLVColumn.ButtonSizingMode sizingMode = OLVColumn.ButtonSizingMode.CellBounds;
///
- /// ȡSizingModeΪFixedBoundsʱťĴС
+ /// 获取或设置SizingMode为FixedBounds时按钮的大小
///
/// If this is not set, the bounds of the cell will be used
[Category("ObjectListView"),
- Description("SizingModeΪFixedBoundsʱťĴС"),
+ Description("SizingMode为FixedBounds时按钮的大小"),
DefaultValue(null)]
public Size? ButtonSize
{
@@ -3884,10 +3946,10 @@ namespace BrightIdeasSoftware {
private Size? buttonSize;
///
- /// ȡSizingModeΪTextBoundsʱԪΧĶռ
+ /// 获取或设置SizingMode为TextBounds时单元格周围的额外空间
///
[Category("ObjectListView"),
- Description("SizingModeΪTextBoundsʱΧƵԪĶռ")]
+ Description("SizingMode为TextBounds时围绕单元格的额外空间")]
public Size? ButtonPadding
{
get { return this.buttonPadding; }
@@ -3928,50 +3990,50 @@ namespace BrightIdeasSoftware {
}
private int minButtonWidth = -1;
///
- ///ȡôаťɫ(аťĻ)
+ ///获取或设置此列按钮的字体颜色(如果有按钮的话)
///
[Category("ObjectListView"),
- Description("ȡôаťɫ(аťĻ)")]
+ Description("获取或设置此列按钮的字体颜色(如果有按钮的话)")]
public Color ButtonForeColor
{
get;
set;
} = Color.White;
///
- ///ȡôаťıɫ(аťĻ)
+ ///获取或设置此列按钮的背景颜色(如果有按钮的话)
///
[Category("ObjectListView"),
- Description("ȡôаťıɫ(аťĻ)")]
+ Description("获取或设置此列按钮的背景颜色(如果有按钮的话)")]
public Color ButtonBaseColor
{
get;
set;
} = Color.Green;
///
- ///ȡôаťı߿ɫ(аťĻ)
+ ///获取或设置此列按钮的边框颜色(如果有按钮的话)
///
[Category("ObjectListView"),
- Description("ȡôаťı߿ɫ(аťĻ)")]
+ Description("获取或设置此列按钮的边框颜色(如果有按钮的话)")]
public Color ButtonBorderColor
{
get;
set;
} = Color.Gray;
///
- ///ȡôаťڱ߿ɫ(аťĻ)
+ ///获取或设置此列按钮的内边框颜色(如果有按钮的话)
///
[Category("ObjectListView"),
- Description("ȡôаťڱ߿ɫ(аťĻ)")]
+ Description("获取或设置此列按钮的内边框颜色(如果有按钮的话)")]
public Color ButtonInnerBorderColor
{
get;
set;
} = Color.Gray;
///
- ///ȡôаťǷ߿(аťĻ)
+ ///获取或设置此列按钮是否画边框(如果有按钮的话)
///
[Category("ObjectListView"),
- Description("ȡôаťǷ߿(аťĻ)")]
+ Description("获取或设置此列按钮是否画边框(如果有按钮的话)")]
public bool ButtonDrawBorder
{
get;
diff --git a/Source/RaUI/UI/Rili/PaDateInput.cs b/Source/RaUI/UI/Rili/PaDateInput.cs
index 7185a99..b2bcd81 100644
--- a/Source/RaUI/UI/Rili/PaDateInput.cs
+++ b/Source/RaUI/UI/Rili/PaDateInput.cs
@@ -214,7 +214,6 @@ namespace RaUI.UI.Rili
this.Invalidate();
base.OnMouseDown(e);
}
- int index = 0;
///
///
///
diff --git a/Source/RaUI/UI/Scintilla.NET/Highlight/AutoComplete/ScintillaWrapper.cs b/Source/RaUI/UI/Scintilla.NET/Highlight/AutoComplete/ScintillaWrapper.cs
index 3a0fb24..ae5ced6 100644
--- a/Source/RaUI/UI/Scintilla.NET/Highlight/AutoComplete/ScintillaWrapper.cs
+++ b/Source/RaUI/UI/Scintilla.NET/Highlight/AutoComplete/ScintillaWrapper.cs
@@ -3,128 +3,131 @@ using System.Drawing;
using System.Windows.Forms;
using ScintillaNETV2;
using ScintillaNETV2.AutocompleteMenuNS;
-///
-///
-///
-public class ScintillaWrapper : ITextBoxWrapper
+namespace ScintillaNETV2.AutocompleteMenuNS
{
///
///
///
- public ScintillaNETV2.Scintilla target;
- ///
- ///
- ///
- ///
- public ScintillaWrapper(ScintillaNETV2.Scintilla trgt)
+ public class ScintillaWrapper : ITextBoxWrapper
{
- target = trgt;
-
- //Now add handler for the UpdateUI event.
- target.UpdateUI += (sender, args) =>
+ ///
+ ///
+ ///
+ public ScintillaNETV2.Scintilla target;
+ ///
+ ///
+ ///
+ ///
+ public ScintillaWrapper(ScintillaNETV2.Scintilla trgt)
{
- if (args?.Change == UpdateChange.HScroll || args?.Change == UpdateChange.VScroll)
+ target = trgt;
+
+ //Now add handler for the UpdateUI event.
+ target.UpdateUI += (sender, args) =>
{
- Scroll?.Invoke(sender, new ScrollEventArgs(ScrollEventType.LargeIncrement, 0));
- }
- };
- }
-
- ///
- ///
- ///
- public bool Readonly
- {
- get{ return target.ReadOnly; }
- }
- ///
- ///
- ///
- public string SelectedText
- {
- get { return target.SelectedText; }
- set
- {
- //Store the start of the selection.
- int start = target.SelectionStart;
-
- //Delete the current text between selections.
- target.DeleteRange(target.SelectionStart, (target.SelectionEnd - target.SelectionStart));
-
- //Add the text in the same postion.
- target.InsertText(start, value);
-
- //Clear selection and make sure the caret is at the end.
- target.SelectionStart = (start + value.Length);
- target.SelectionEnd = (start + value.Length);
+ if (args?.Change == UpdateChange.HScroll || args?.Change == UpdateChange.VScroll)
+ {
+ Scroll?.Invoke(sender, new ScrollEventArgs(ScrollEventType.LargeIncrement, 0));
+ }
+ };
}
- }
- ///
- ///
- ///
- public int SelectionLength
- {
- get { return (target.SelectionEnd - target.SelectionStart); }
- set { target.SelectionEnd = (target.SelectionStart + value); }
- }
- ///
- ///
- ///
- public int SelectionStart
- {
- get { return target.SelectionStart; }
- set { target.SelectionStart = value; }
- }
- ///
- ///
- ///
- public Control TargetControl
- {
- get { return target; }
- }
- ///
- ///
- ///
- public string Text
- {
- get { return target.Text; }
- }
- ///
- ///
- ///
- ///
- ///
- public Point GetPositionFromCharIndex(int pos)
- {
- return new Point(target.PointXFromPosition(pos), target.PointYFromPosition(pos));
- }
- ///
- ///
- ///
- public virtual event KeyEventHandler KeyDown
- {
- add { target.KeyDown += value; }
- remove { target.KeyDown -= value; }
+ ///
+ ///
+ ///
+ public bool Readonly
+ {
+ get { return target.ReadOnly; }
+ }
+ ///
+ ///
+ ///
+ public string SelectedText
+ {
+ get { return target.SelectedText; }
+ set
+ {
+ //Store the start of the selection.
+ int start = target.SelectionStart;
+
+ //Delete the current text between selections.
+ target.DeleteRange(target.SelectionStart, (target.SelectionEnd - target.SelectionStart));
+
+ //Add the text in the same postion.
+ target.InsertText(start, value);
+
+ //Clear selection and make sure the caret is at the end.
+ target.SelectionStart = (start + value.Length);
+ target.SelectionEnd = (start + value.Length);
+ }
+ }
+ ///
+ ///
+ ///
+ public int SelectionLength
+ {
+ get { return (target.SelectionEnd - target.SelectionStart); }
+ set { target.SelectionEnd = (target.SelectionStart + value); }
+ }
+ ///
+ ///
+ ///
+ public int SelectionStart
+ {
+ get { return target.SelectionStart; }
+ set { target.SelectionStart = value; }
+ }
+ ///
+ ///
+ ///
+ public Control TargetControl
+ {
+ get { return target; }
+ }
+ ///
+ ///
+ ///
+ public string Text
+ {
+ get { return target.Text; }
+ }
+ ///
+ ///
+ ///
+ ///
+ ///
+ public Point GetPositionFromCharIndex(int pos)
+ {
+ return new Point(target.PointXFromPosition(pos), target.PointYFromPosition(pos));
+ }
+
+ ///
+ ///
+ ///
+ public virtual event KeyEventHandler KeyDown
+ {
+ add { target.KeyDown += value; }
+ remove { target.KeyDown -= value; }
+ }
+ ///
+ ///
+ ///
+ public virtual event EventHandler LostFocus
+ {
+ add { target.LostFocus += value; }
+ remove { target.LostFocus -= value; }
+ }
+ ///
+ ///
+ ///
+ public virtual event MouseEventHandler MouseDown
+ {
+ add { target.MouseDown += value; }
+ remove { target.MouseDown -= value; }
+ }
+ ///
+ ///
+ ///
+ public event ScrollEventHandler Scroll;
}
- ///
- ///
- ///
- public virtual event EventHandler LostFocus
- {
- add { target.LostFocus += value; }
- remove { target.LostFocus -= value; }
- }
- ///
- ///
- ///
- public virtual event MouseEventHandler MouseDown
- {
- add { target.MouseDown += value; }
- remove { target.MouseDown -= value; }
- }
- ///
- ///
- ///
- public event ScrollEventHandler Scroll;
}
\ No newline at end of file
diff --git a/Source/RaUI/UI/Scintilla.NET/Highlight/HighlightEditor.cs b/Source/RaUI/UI/Scintilla.NET/Highlight/HighlightEditor.cs
index 57f2307..0df7f82 100644
--- a/Source/RaUI/UI/Scintilla.NET/Highlight/HighlightEditor.cs
+++ b/Source/RaUI/UI/Scintilla.NET/Highlight/HighlightEditor.cs
@@ -49,7 +49,7 @@ namespace ScintillaNETV2.Highlight
{
Scintilla = Editor
};
- AutoComplete.TargetControlWrapper = new ScintillaWrapper(Editor);
+ AutoComplete.TargetControlWrapper = new AutocompleteMenuNS.ScintillaWrapper(Editor);
Editor.DoubleClick += Editor_DoubleClick;
var ind_17= Editor.Indicators[17];
ind_17.ForeColor = Color.FromArgb(232, 232, 255);
diff --git a/Source/RaUI/UI/SuperTabControl/ChromeTabControl.cs b/Source/RaUI/UI/SuperTabControl/ChromeTabControl.cs
index 8248fa1..6c85220 100644
--- a/Source/RaUI/UI/SuperTabControl/ChromeTabControl.cs
+++ b/Source/RaUI/UI/SuperTabControl/ChromeTabControl.cs
@@ -511,8 +511,7 @@ namespace ryControls
ControlStyles.UserMouse, true);
tabCollection = new CustomTabPageCollection(this);
this.ItemSize = new Size(TabMaxWidth, 25);
- this.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
- //this.AllowDrop = true;
+ base.SizeMode = System.Windows.Forms.TabSizeMode.Fixed;
//从资源文件(嵌入到程序集)里读取图片
@@ -520,6 +519,15 @@ namespace ryControls
close_normalImage = Resources.tab_close_normal;
}
///
+ /// 获取或设置调整控件的选项卡大小的方式。
+ ///
+ [Description("获取或设置调整控件的选项卡大小的方式。"),DefaultValue(typeof(TabSizeMode), "Fixed")]
+ public new TabSizeMode SizeMode
+ {
+ get { return base.SizeMode; }
+ set { base.SizeMode = value; }
+ }
+ ///
///
///
~ChromeTabControl()
@@ -811,7 +819,19 @@ namespace ryControls
///
private int GetTabTotalWidth()
{
- return this.ItemSize.Width * this.TabCount;
+ if (this.SizeMode == System.Windows.Forms.TabSizeMode.Fixed)
+ {
+ return this.ItemSize.Width * this.TabCount;
+ }
+ else
+ {
+ var total_width = 0;
+ for (int i = 0; i < this.TabCount; i++)
+ {
+ total_width += GetTabRect(i).Width;
+ }
+ return total_width;
+ }
}
///
///
diff --git a/Source/RaUI/UI/TreeXML/ComboBoxEx.cs b/Source/RaUI/UI/TreeXML/ComboBoxEx.cs
index 89bb564..fd57c3f 100644
--- a/Source/RaUI/UI/TreeXML/ComboBoxEx.cs
+++ b/Source/RaUI/UI/TreeXML/ComboBoxEx.cs
@@ -29,6 +29,7 @@ namespace ryControls
//ItemHeight = 50;
DrawItem += OnDrawItem;
}
+
private void OnDrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index < 0) { return; }
@@ -66,6 +67,18 @@ namespace ryControls
//文本内容显示区域
textRect = new Rectangle(imgRect.Right + 2, imgRect.Y, e.Bounds.Width - imgRect.Width, e.Bounds.Height - 2);
break;
+ case ComboPopupItem item2:
+ Image img2 = item2.Image;
+ //图片绘制的区域
+ Rectangle imgRect2 = new Rectangle(6, e.Bounds.Y + 3, 16, 16);
+ e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
+ e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
+ e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
+ e.Graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half;
+ e.Graphics.DrawImage(img2, imgRect2);
+ //文本内容显示区域
+ textRect = new Rectangle(imgRect2.Right + 2, imgRect2.Y, e.Bounds.Width - imgRect2.Width, e.Bounds.Height - 2);
+ break;
}
//获得项文本内容,绘制文本
string itemText = this.Items[e.Index].ToString();
diff --git a/Source/SkinPreview/FrmTab2.Designer.cs b/Source/SkinPreview/FrmTab2.Designer.cs
index 240e7a4..6255155 100644
--- a/Source/SkinPreview/FrmTab2.Designer.cs
+++ b/Source/SkinPreview/FrmTab2.Designer.cs
@@ -28,6 +28,12 @@
///
private void InitializeComponent()
{
+ this.components = new System.ComponentModel.Container();
+ this.CbbOpState = new ryControls.RyComboBox();
+ this.htmlPanel1 = new TheArtOfDev.HtmlRenderer.WinForms.HtmlPanel();
+ this.ryComboBox1 = new ryControls.RyComboBox();
+ this.comboBoxEx2 = new ryControls.ComboBoxEx();
+ this.comboBoxEx21 = new ryControls.ComboBoxEx2();
this.ctlMyPage1 = new MyPage.ctlMyPage();
this.textBoxEx21 = new ryControls.TextBoxEx2();
this.numericUpDownEx1 = new ryControls.NumericUpDownEx();
@@ -37,9 +43,87 @@
((System.ComponentModel.ISupportInitialize)(this.numericUpDownEx1)).BeginInit();
this.SuspendLayout();
//
+ // CbbOpState
+ //
+ this.CbbOpState.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
+ this.CbbOpState.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.CbbOpState.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.CbbOpState.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
+ this.CbbOpState.FormattingEnabled = true;
+ this.CbbOpState.ItemHeight = 24;
+ this.CbbOpState.Items.AddRange(new object[] {
+ "全部流程",
+ "未完成流程",
+ "已完成流程"});
+ this.CbbOpState.Location = new System.Drawing.Point(392, 285);
+ this.CbbOpState.MaxUndoRedoSteps = 50;
+ this.CbbOpState.Name = "CbbOpState";
+ this.CbbOpState.Size = new System.Drawing.Size(121, 30);
+ this.CbbOpState.TabIndex = 43;
+ //
+ // htmlPanel1
+ //
+ this.htmlPanel1.AutoScroll = true;
+ this.htmlPanel1.AutoScrollMinSize = new System.Drawing.Size(309, 20);
+ this.htmlPanel1.BackColor = System.Drawing.SystemColors.Window;
+ this.htmlPanel1.BaseStylesheet = null;
+ this.htmlPanel1.Location = new System.Drawing.Point(117, 256);
+ this.htmlPanel1.Name = "htmlPanel1";
+ this.htmlPanel1.Size = new System.Drawing.Size(309, 71);
+ this.htmlPanel1.TabIndex = 16;
+ this.htmlPanel1.Text = "htmlPanel1";
+ //
+ // ryComboBox1
+ //
+ this.ryComboBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
+ this.ryComboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.ryComboBox1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.ryComboBox1.FormattingEnabled = true;
+ this.ryComboBox1.ItemHeight = 24;
+ this.ryComboBox1.Items.AddRange(new object[] {
+ "XXXCDS",
+ "ADDD"});
+ this.ryComboBox1.Location = new System.Drawing.Point(303, 205);
+ this.ryComboBox1.MaxUndoRedoSteps = 50;
+ this.ryComboBox1.Name = "ryComboBox1";
+ this.ryComboBox1.Size = new System.Drawing.Size(156, 30);
+ this.ryComboBox1.TabIndex = 15;
+ //
+ // comboBoxEx2
+ //
+ this.comboBoxEx2.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
+ this.comboBoxEx2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.comboBoxEx2.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.comboBoxEx2.FormattingEnabled = true;
+ this.comboBoxEx2.Items.AddRange(new object[] {
+ "ddd",
+ "大大方方"});
+ this.comboBoxEx2.Location = new System.Drawing.Point(27, 216);
+ this.comboBoxEx2.Name = "comboBoxEx2";
+ this.comboBoxEx2.Size = new System.Drawing.Size(203, 22);
+ this.comboBoxEx2.TabIndex = 14;
+ //
+ // comboBoxEx21
+ //
+ this.comboBoxEx21.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(236)))), ((int)(((byte)(239)))), ((int)(((byte)(244)))));
+ this.comboBoxEx21.ButtonRoundBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(236)))), ((int)(((byte)(239)))), ((int)(((byte)(244)))));
+ this.comboBoxEx21.EmptyText = "";
+ this.comboBoxEx21.Location = new System.Drawing.Point(48, 177);
+ this.comboBoxEx21.MaxPopupHeight = 0;
+ this.comboBoxEx21.MaxPopupWidth = 0;
+ this.comboBoxEx21.Name = "comboBoxEx21";
+ this.comboBoxEx21.SelectedIndex = -1;
+ this.comboBoxEx21.SelectedItem = null;
+ this.comboBoxEx21.Size = new System.Drawing.Size(168, 31);
+ this.comboBoxEx21.TabIndex = 13;
+ this.comboBoxEx21.ToolTipText = "";
+ //
// ctlMyPage1
//
+ this.ctlMyPage1.CountSQL = "";
+ this.ctlMyPage1.db = null;
this.ctlMyPage1.Location = new System.Drawing.Point(260, 140);
+ this.ctlMyPage1.Multithreading = false;
this.ctlMyPage1.Name = "ctlMyPage1";
this.ctlMyPage1.PageSize = 50;
this.ctlMyPage1.RecordCount = 0;
@@ -60,7 +144,9 @@
this.textBoxEx21.BackColor = System.Drawing.Color.White;
this.textBoxEx21.EmptyText = "";
this.textBoxEx21.Location = new System.Drawing.Point(260, 107);
+ this.textBoxEx21.LongTime = 2000;
this.textBoxEx21.MaxLength = 999999999;
+ this.textBoxEx21.MaxUndoRedoSteps = 50;
this.textBoxEx21.Multiline = false;
this.textBoxEx21.Name = "textBoxEx21";
this.textBoxEx21.OnlyNumeric = false;
@@ -125,6 +211,11 @@
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(700, 472);
+ this.Controls.Add(this.CbbOpState);
+ this.Controls.Add(this.htmlPanel1);
+ this.Controls.Add(this.ryComboBox1);
+ this.Controls.Add(this.comboBoxEx2);
+ this.Controls.Add(this.comboBoxEx21);
this.Controls.Add(this.ctlMyPage1);
this.Controls.Add(this.textBoxEx21);
this.Controls.Add(this.numericUpDownEx1);
@@ -146,5 +237,10 @@
private ryControls.PanelEx panelEx1;
private ryControls.ComboBoxEx comboBoxEx1;
private ryControls.DateTimePickerEX dateTimePickerEX1;
+ private ryControls.ComboBoxEx2 comboBoxEx21;
+ private ryControls.ComboBoxEx comboBoxEx2;
+ private ryControls.RyComboBox ryComboBox1;
+ private TheArtOfDev.HtmlRenderer.WinForms.HtmlPanel htmlPanel1;
+ private ryControls.RyComboBox CbbOpState;
}
}
\ No newline at end of file
diff --git a/Source/SkinPreview/FrmTab2.cs b/Source/SkinPreview/FrmTab2.cs
index b35f4f9..46151aa 100644
--- a/Source/SkinPreview/FrmTab2.cs
+++ b/Source/SkinPreview/FrmTab2.cs
@@ -15,6 +15,7 @@ namespace SkinPreview
public FrmTab2()
{
InitializeComponent();
+ //htmlPanel1.
}
}
}
diff --git a/Source/rycUpdate/BigFileOp.cs b/Source/rycUpdate/BigFileOp.cs
index 781d3b1..679d987 100644
--- a/Source/rycUpdate/BigFileOp.cs
+++ b/Source/rycUpdate/BigFileOp.cs
@@ -71,17 +71,33 @@ namespace ryCommon
///
/// 大文件按流复制文件,支持自动创建目标文件夹。 true:复制成功 false:复制失败
///
- /// 原始文件路径
+ /// 原始文件路径
/// 复制目标文件路径
/// 携带的参数(可选)
///
- public bool CopyBigFile(string soucrePath, string targetPath,object Tag=null)
+ public bool CopyBigFile(string sourcePath, string targetPath,object Tag=null)
{
try
{
+ if(SkipSameFiles)
+ {
+ if (System.IO.File.Exists(targetPath))
+ {
+ try
+ {
+ var target_info = new System.IO.FileInfo(targetPath);
+ var source_info = new System.IO.FileInfo(sourcePath);
+ if (target_info.Length == source_info.Length && target_info.LastWriteTimeUtc == source_info.LastWriteTimeUtc)
+ {
+ return true;
+ }
+ }
+ catch { }
+ }
+ }
var TranSize = 1024 * 1024 * 2;//每次读取2M
//读取复制文件流
- using (FileStream fsRead = new FileStream(soucrePath, FileMode.Open, FileAccess.Read))
+ using (FileStream fsRead = new FileStream(sourcePath, FileMode.Open, FileAccess.Read))
{
if (System.IO.File.Exists(targetPath))
{
@@ -149,6 +165,14 @@ namespace ryCommon
{
return false;
}
+ try
+ {
+ var source_info = new System.IO.FileInfo(sourcePath);
+ var target_info = new System.IO.FileInfo(targetPath);
+ target_info.LastWriteTime = source_info.LastWriteTime;
+ target_info.CreationTime = source_info.CreationTime;
+ }
+ catch{ }
}
return true;
}
@@ -217,6 +241,10 @@ namespace ryCommon
catch { }
}
}
+ ///
+ /// 是否跳过相同文件,默认不跳过(根据文件大小和修改时间来判断)
+ ///
+ public bool SkipSameFiles { get; set; } = false;
public readonly List ErrFilesList = new List();
///
/// 复制文件夹到目标文件夹,支持中途取消
@@ -234,7 +262,7 @@ namespace ryCommon
var error = 0;
Copy(fromDir, ToDir);
Count = _count;
- return error;
+ return -error;
int Copy(string From_Dir, string To_Dir)
{
var _fromDir = From_Dir.TrimEnd('\\');
@@ -270,14 +298,6 @@ namespace ryCommon
OnCanel?.Invoke(this, e1);
if (e1.Cancel) { break; }
}
- if (result > 0)
- {
- error++;
- }
- else if (result < 0)
- {
- error += -result;
- }
}
return -error;
}
diff --git a/Source/rycUpdate/Frmmain.cs b/Source/rycUpdate/Frmmain.cs
index 683d2a1..b889219 100644
--- a/Source/rycUpdate/Frmmain.cs
+++ b/Source/rycUpdate/Frmmain.cs
@@ -302,6 +302,7 @@ namespace rycUpdate
var UpdateZipPath = Application.StartupPath + "\\Update\\tmp.tmp";
var UnZipFolder = Application.StartupPath + "\\Update\\tmp";
BigFileOp bigFileOp = new BigFileOp();
+ bigFileOp.SkipSameFiles = false;
bigFileOp.OnFolderProgress += BigFileOp_OnFolderProgress;
//this.Invoke(new Action(() =>
//{
@@ -364,7 +365,27 @@ namespace rycUpdate
}
error_id = 1003;
error_msg = System.IO.Path.GetDirectoryName(UnZipFolder + "\\" + entry.FullName.Replace("/", "\\"));
- entry.ExtractToFile(UnZipFolder + "\\" + entry.FullName.Replace("/", "\\"), true);
+ var is_same = false;
+ try
+ {
+ if (bigFileOp.SkipSameFiles)
+ {
+ var topath = Application.StartupPath + "\\" + entry.FullName.Replace("/", "\\").Trim('\\');
+ if (System.IO.File.Exists(topath))
+ {
+ var info = new +.IO.FileInfo(topath);
+ if (info.Length == entry.Length && info.LastWriteTime == entry.LastWriteTime)
+ {
+ is_same = true;
+ }
+ }
+ }
+ }
+ catch { }
+ if (!is_same)
+ {
+ entry.ExtractToFile(UnZipFolder + "\\" + entry.FullName.Replace("/", "\\"), true);
+ }
this.Invoke(new Action(() =>
{
progressBar1.Value = i+1;
@@ -418,6 +439,7 @@ namespace rycUpdate
}
KillMultiProcess(list_proc);
EndProcessByFolder(Application.StartupPath);
+ Thread.Sleep(1000);
#endregion
ShowState("正在更新文件...");
this.Invoke(new Action(() =>