'commit'
This commit is contained in:
@@ -18,6 +18,10 @@ namespace WordAddIn
|
||||
private NumericUpDown numSize;
|
||||
private CheckBox chkBold;
|
||||
private ComboBox cmbAlign;
|
||||
private Button btnColor; // 颜色选择按钮
|
||||
private Panel pnlColorPreview; // 颜色预览面板
|
||||
private int _selectedColor = 0; // 存储选中的颜色值 (Word WdColor)
|
||||
|
||||
private bool _showAlign;
|
||||
|
||||
/// <summary>
|
||||
@@ -70,6 +74,17 @@ namespace WordAddIn
|
||||
this.Controls.Add(numSize);
|
||||
this.Controls.Add(chkBold);
|
||||
|
||||
// 颜色选择
|
||||
Label lblColor = new Label { Text = "颜色:", Location = new Point(180, 67), AutoSize = true };
|
||||
btnColor = new Button { Text = "选择...", Location = new Point(220, 63), Width = 60, Height = 25 };
|
||||
pnlColorPreview = new Panel { Location = new Point(290, 65), Width = 20, Height = 20, BorderStyle = BorderStyle.FixedSingle, BackColor = Color.Black };
|
||||
|
||||
btnColor.Click += BtnColor_Click;
|
||||
|
||||
this.Controls.Add(lblColor);
|
||||
this.Controls.Add(btnColor);
|
||||
this.Controls.Add(pnlColorPreview);
|
||||
|
||||
// 对齐方式 (可选)
|
||||
if (_showAlign)
|
||||
{
|
||||
@@ -83,6 +98,35 @@ namespace WordAddIn
|
||||
}
|
||||
}
|
||||
|
||||
private void BtnColor_Click(object sender, EventArgs e)
|
||||
{
|
||||
using (ColorDialog colorDialog = new ColorDialog())
|
||||
{
|
||||
// Set initial color based on current selection
|
||||
colorDialog.Color = pnlColorPreview.BackColor;
|
||||
|
||||
if (colorDialog.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
pnlColorPreview.BackColor = colorDialog.Color;
|
||||
|
||||
// Convert .NET Color to Word WdColor (int)
|
||||
// Word stores colors as BGR (0xBBGGRR) in lower 24 bits
|
||||
// But .NET Color.ToArgb() returns ARGB (0xAARRGGBB)
|
||||
// WdColor is weird.
|
||||
// wdColorBlack = 0
|
||||
// wdColorRed = 255 (0x0000FF)
|
||||
// It seems to be standard RGB or BGR integer value.
|
||||
// Let's use ColorTranslator or manual conversion.
|
||||
// Word Interop usually expects BGR int for some properties, or standard OLE color.
|
||||
// Actually, WdColor enum has values like wdColorRed = 0xFF.
|
||||
// The safest way is to cast the RGB value.
|
||||
// However, ColorTranslator.ToOle(c) returns BGR, which is what Office usually expects.
|
||||
|
||||
_selectedColor = ColorTranslator.ToOle(colorDialog.Color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将 TextStyle 对象应用到界面控件。
|
||||
/// </summary>
|
||||
@@ -98,6 +142,17 @@ namespace WordAddIn
|
||||
|
||||
numSize.Value = (decimal)style.FontSize;
|
||||
chkBold.Checked = style.IsBold;
|
||||
|
||||
_selectedColor = style.Color;
|
||||
// Convert OLE Color back to .NET Color for preview
|
||||
try
|
||||
{
|
||||
pnlColorPreview.BackColor = ColorTranslator.FromOle(_selectedColor);
|
||||
}
|
||||
catch
|
||||
{
|
||||
pnlColorPreview.BackColor = Color.Black;
|
||||
}
|
||||
|
||||
if (_showAlign && cmbAlign != null)
|
||||
{
|
||||
@@ -116,6 +171,8 @@ namespace WordAddIn
|
||||
style.FontName = cmbFont.Text;
|
||||
style.FontSize = (float)numSize.Value;
|
||||
style.IsBold = chkBold.Checked;
|
||||
style.Color = _selectedColor;
|
||||
|
||||
if (_showAlign && cmbAlign != null)
|
||||
{
|
||||
style.Alignment = cmbAlign.SelectedIndex;
|
||||
|
||||
Reference in New Issue
Block a user