398 lines
16 KiB
C#
398 lines
16 KiB
C#
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.ComponentModel;
|
|||
|
|
using System.Drawing;
|
|||
|
|
using System.Data;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Windows.Forms;
|
|||
|
|
using ryPrint.Mod;
|
|||
|
|
using ryPrint;
|
|||
|
|
|
|||
|
|
namespace RyPrint.Mod
|
|||
|
|
{
|
|||
|
|
public partial class PrintModEdit : UserControl
|
|||
|
|
{
|
|||
|
|
public PrintModEdit()
|
|||
|
|
{
|
|||
|
|
InitializeComponent();
|
|||
|
|
}
|
|||
|
|
public bool IsDataChanged = false;
|
|||
|
|
#region 添加控件函数
|
|||
|
|
public myLabel AddControl(string name, ClsProperty.En_Type _type)
|
|||
|
|
{
|
|||
|
|
if (GetControl(name) != null)
|
|||
|
|
{
|
|||
|
|
MessageBox.Show("该项已经存在", "提醒", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return AddControl(name, Enum.GetName(typeof(ClsProperty.En_Type), _type), _type, "", "");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
public myLabel AddControl(string name, string title, ClsProperty.En_Type sType, string format, string value)
|
|||
|
|
{
|
|||
|
|
return AddControl(name, title, sType, format, value, "");
|
|||
|
|
}
|
|||
|
|
public myLabel AddControl(string name, string title, ClsProperty.En_Type sType, string format, string value, string DataSource)
|
|||
|
|
{
|
|||
|
|
IsDataChanged = true;
|
|||
|
|
myLabel ct = new myLabel()
|
|||
|
|
{
|
|||
|
|
Size = new Size(100, 25),
|
|||
|
|
BackColor = Color.Transparent,
|
|||
|
|
Text = title,
|
|||
|
|
Name = name,
|
|||
|
|
Parent = picPreview,
|
|||
|
|
Cursor = Cursors.Arrow,
|
|||
|
|
Font = new Font("黑体", 10, FontStyle.Regular)
|
|||
|
|
};
|
|||
|
|
//ct.MouseDown += new MouseEventHandler(ct_MouseDown);
|
|||
|
|
ct.KeyUp += Ct_KeyUp;
|
|||
|
|
ct.KeyDown += new KeyEventHandler(Ct_KeyDown);
|
|||
|
|
//ct.MouseMove += new MouseEventHandler(ct_MouseMove);
|
|||
|
|
//ct.MouseUp += new MouseEventHandler(ct_MouseUp);
|
|||
|
|
ct.SizeChanged += new EventHandler(Ct_SizeChanged);
|
|||
|
|
ct.Click += new EventHandler(Ct_Click);
|
|||
|
|
//ct.sType = sType;
|
|||
|
|
//ct.title = title;
|
|||
|
|
//ct.format = format;
|
|||
|
|
//ct.value = value;
|
|||
|
|
ct.Property.DataSource = DataSource;
|
|||
|
|
ct.Property.Type = sType;
|
|||
|
|
ct.Property.Title = title;
|
|||
|
|
ct.Property.CustomFormat = format;
|
|||
|
|
ct.Property.Value = value;
|
|||
|
|
ct.Property.FontSize = ct.Font.Size;
|
|||
|
|
ct.Property.Size = new SizeF(RySet.Pixeltomm(ct.Size.Width), RySet.Pixeltomm(ct.Size.Height));
|
|||
|
|
ct.Property.Postion = new PointF(RySet.Pixeltomm(ct.Location.X), RySet.Pixeltomm(ct.Location.Y));
|
|||
|
|
new DragControl.MoveControl(ct);
|
|||
|
|
picPreview.Controls.Add(ct);
|
|||
|
|
return ct;
|
|||
|
|
}
|
|||
|
|
private void Ct_KeyUp(object sender, KeyEventArgs e)
|
|||
|
|
{
|
|||
|
|
//if (e.KeyCode == Keys.Up)
|
|||
|
|
//{
|
|||
|
|
// isDataChanged = true;
|
|||
|
|
// myLabel ct = (myLabel)sender;
|
|||
|
|
// ct.Top--;
|
|||
|
|
//}
|
|||
|
|
//else if (e.KeyCode == Keys.Down)
|
|||
|
|
//{
|
|||
|
|
// isDataChanged = true;
|
|||
|
|
// myLabel ct = (myLabel)sender;
|
|||
|
|
// ct.Top++;
|
|||
|
|
//}
|
|||
|
|
//else if (e.KeyCode == Keys.Left)
|
|||
|
|
//{
|
|||
|
|
// isDataChanged = true;
|
|||
|
|
// myLabel ct = (myLabel)sender;
|
|||
|
|
// ct.Left--;
|
|||
|
|
//}
|
|||
|
|
//else if (e.KeyCode == Keys.Right)
|
|||
|
|
//{
|
|||
|
|
// isDataChanged = true;
|
|||
|
|
// myLabel ct = (myLabel)sender;
|
|||
|
|
// ct.Left++;
|
|||
|
|
//}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Ct_SizeChanged(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
IsDataChanged = true;
|
|||
|
|
myLabel ct = (myLabel)sender;
|
|||
|
|
LoadProperty(ct);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Ct_KeyDown(object sender, KeyEventArgs e)
|
|||
|
|
{
|
|||
|
|
if (e.KeyCode == Keys.Delete)
|
|||
|
|
{
|
|||
|
|
IsDataChanged = true;
|
|||
|
|
myLabel ct = (myLabel)sender;
|
|||
|
|
picPreview.Controls.Remove(ct);
|
|||
|
|
propertyGrid1.SelectedObject = null;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
private myLabel GetControl(string name)
|
|||
|
|
{
|
|||
|
|
foreach (Control ct in picPreview.Controls)
|
|||
|
|
{
|
|||
|
|
if (ct.Name == name)
|
|||
|
|
{
|
|||
|
|
if (ct is myLabel)
|
|||
|
|
{
|
|||
|
|
return (myLabel)ct;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
private void LoadProperty(myLabel ct)
|
|||
|
|
{
|
|||
|
|
propertyGrid1.SelectedObject = ct.Property;
|
|||
|
|
}
|
|||
|
|
private void Ct_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
myLabel ct = (myLabel)sender;
|
|||
|
|
LoadProperty(ct);
|
|||
|
|
}
|
|||
|
|
#region 控件拖放
|
|||
|
|
//private Point position;
|
|||
|
|
|
|||
|
|
private void PicPreview_DragEnter(object sender, DragEventArgs e)
|
|||
|
|
{
|
|||
|
|
//当Button被拖拽到WinForm上时候,鼠标效果出现
|
|||
|
|
if ((e.Data.GetDataPresent(typeof(TextBox))) || (e.Data.GetDataPresent(typeof(myLabel))))
|
|||
|
|
{
|
|||
|
|
e.Effect = DragDropEffects.Move;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
/// <summary>
|
|||
|
|
/// 重设控件位置
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public string ResetLocationControl()
|
|||
|
|
{
|
|||
|
|
ryCommon.Storage tStor = new ryCommon.Storage();
|
|||
|
|
foreach (Control ct1 in picPreview.Controls)
|
|||
|
|
{
|
|||
|
|
switch(ct1)
|
|||
|
|
{
|
|||
|
|
case myLabel ct:
|
|||
|
|
ct.Size = new Size(RySet.MMtopixel(ct.Property.Size.Width), RySet.MMtopixel(ct.Property.Size.Height));
|
|||
|
|
ct.Location = new Point(RySet.MMtopixel(ct.Property.Postion.X), RySet.MMtopixel(ct.Property.Postion.Y));
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return tStor.GetXMLText();
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取或设置配置信息
|
|||
|
|
/// </summary>
|
|||
|
|
public string Config
|
|||
|
|
{
|
|||
|
|
get {return SaveControl(); }
|
|||
|
|
set { LoadControl(value); }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 保存布局配置信息到字符串
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public string SaveControl()
|
|||
|
|
{
|
|||
|
|
ryCommon.Storage tStor = new ryCommon.Storage();
|
|||
|
|
foreach (Control ct1 in picPreview.Controls)
|
|||
|
|
{
|
|||
|
|
switch (ct1)
|
|||
|
|
{
|
|||
|
|
case myLabel ct:
|
|||
|
|
tStor.AddNode2("Name", ct.Name);
|
|||
|
|
tStor.SetAttrValue("Title", ct.Property.Title);
|
|||
|
|
tStor.SetAttrValue("Width", RySet.Pixeltomm(ct.Size.Width));
|
|||
|
|
tStor.SetAttrValue("Height", RySet.Pixeltomm(ct.Size.Height));
|
|||
|
|
tStor.SetAttrValue("FontSize", ct.Font.Size);
|
|||
|
|
tStor.SetAttrValue("Left", RySet.Pixeltomm(ct.Location.X));
|
|||
|
|
tStor.SetAttrValue("Top", RySet.Pixeltomm(ct.Location.Y));
|
|||
|
|
//tStor.SetAttrValue("Left", ct.Location.X>picExpress.Image.Width?0:ct.Location.X);
|
|||
|
|
//tStor.SetAttrValue("Top", ct.Location.Y>picExpress.Image.Height?0:ct.Location.Y);
|
|||
|
|
tStor.SetAttrValue("Multiline", ct.Property.Multiline);
|
|||
|
|
tStor.SetAttrValue("align", ct.AlignStr);
|
|||
|
|
tStor.SetAttrValue("format", ct.Property.CustomFormat);
|
|||
|
|
tStor.SetAttrValue("value", ct.Property.Value);
|
|||
|
|
tStor.SetAttrValue("sType", (int)ct.Property.Type);
|
|||
|
|
tStor.SetAttrValue("LineSpace", ct.Property.LineSpace);
|
|||
|
|
tStor.SetAttrValue("PageCount", ct.Property.PageCount);
|
|||
|
|
tStor.SetAttrValue("DataSource", ct.Property.DataSource);
|
|||
|
|
tStor.SetAttrValue("NoPrint", ct.Property.NoPrint);
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
ryCommon.Storage tStor_set = new ryCommon.Storage();
|
|||
|
|
tStor_set.SelectNode2("id", "set");
|
|||
|
|
tStor_set.SetAttrValue("Width",numWidth.Value);
|
|||
|
|
tStor_set.SetAttrValue("Height", numHeight.Value);
|
|||
|
|
tStor_set.SetAttrValue("PreviewPicPath",txtPicPath.Text);
|
|||
|
|
tStor_set.SelectNode2("id", "print_xml");
|
|||
|
|
tStor_set.SetAttrValue("Value", tStor.GetXMLText());
|
|||
|
|
return tStor_set.GetXMLText();
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 保存配置到文件
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="path">要保存的路径</param>
|
|||
|
|
public void SaveToFile(string path)
|
|||
|
|
{
|
|||
|
|
if(!System.IO.Directory.Exists(System.IO.Path.GetDirectoryName(path)))
|
|||
|
|
{
|
|||
|
|
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(path));
|
|||
|
|
}
|
|||
|
|
System.IO.File.WriteAllText(path, SaveControl(), Encoding.UTF8);
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 从xml文本中加载配置
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="xml"></param>
|
|||
|
|
public void LoadControl(string xml)
|
|||
|
|
{
|
|||
|
|
ryCommon.Storage tStor_set = new ryCommon.Storage(xml);
|
|||
|
|
tStor_set.SelectNode2("id", "set");
|
|||
|
|
numWidth.Value = tStor_set.GetAttrValue("Width",0);
|
|||
|
|
numHeight.Value = tStor_set.GetAttrValue("Height", 0);
|
|||
|
|
txtPicPath.Text = tStor_set.GetAttrValue("PreviewPicPath", "");
|
|||
|
|
tStor_set.SelectNode2("id","print_xml");
|
|||
|
|
ryCommon.Storage tStor = new ryCommon.Storage(tStor_set.GetAttrValue("Value"));
|
|||
|
|
System.Xml.XmlNodeList list = tStor.GetList();
|
|||
|
|
for (int i = 0; i < list.Count; i++)
|
|||
|
|
{
|
|||
|
|
tStor.SelectNode3(list[i]);
|
|||
|
|
myLabel ct = new myLabel()
|
|||
|
|
{
|
|||
|
|
Font = new Font("黑体", tStor.GetAttrValueByInt("FontSize", 10), FontStyle.Regular),
|
|||
|
|
Size = new Size(RySet.MMtopixel(tStor.GetAttrValue("Width", 50f)), RySet.MMtopixel(tStor.GetAttrValue("Height", 10f)))
|
|||
|
|
};
|
|||
|
|
ct.Property.Multiline = tStor.GetAttrValueByBool("Multiline", false);
|
|||
|
|
if (ct.Size.Height == 0) { ct.Height = 21; }
|
|||
|
|
if (ct.Size.Width == 0) { ct.Width = 100; }
|
|||
|
|
ct.Property.Size = new SizeF((float)tStor.GetAttrValue("Width", 50f), (float)tStor.GetAttrValue("Height", 10f));
|
|||
|
|
ct.Location = new Point(RySet.MMtopixel(tStor.GetAttrValue("Left", 0f)), RySet.MMtopixel(tStor.GetAttrValue("Top", 0f)));
|
|||
|
|
ct.Property.Postion = new PointF((float)tStor.GetAttrValue("Left", 0f), (float)tStor.GetAttrValue("Top", 0f));
|
|||
|
|
if (ct.Location.Y < 0) { ct.Top = 0; }
|
|||
|
|
if (ct.Location.X < 0) { ct.Left = 0; }
|
|||
|
|
//ct.Size = new Size(tStor.GetAttrValue("Width", 50), tStor.GetAttrValue("Height", 10));
|
|||
|
|
//if (ct.Size.Height == 0) { ct.Height = 21; }
|
|||
|
|
//if (ct.Size.Width == 0) { ct.Width = 100; }
|
|||
|
|
//ct.Property.Size = new SizeF((float)pixelTomm_Width(tStor.GetAttrValue("Width", 50)), (float)pixelTomm_Height(tStor.GetAttrValue("Height", 10)));
|
|||
|
|
////ct.Location = new Point((int)pixelTomm_Width(tStor.GetAttrValue("Left", 0)), (int)pixelTomm_Height(tStor.GetAttrValue("Top", 0)));
|
|||
|
|
//ct.Property.Postion = new PointF((float)pixelTomm_Width(tStor.GetAttrValue("Left", 0)), (float)pixelTomm_Height(tStor.GetAttrValue("Top", 0)));
|
|||
|
|
//ct.Size = new Size(tStor.GetAttrValue("Width", 50),tStor.GetAttrValue("Height", 10));
|
|||
|
|
//ct.Location = new Point(tStor.GetAttrValue("Left", 0),tStor.GetAttrValue("Top", 0));
|
|||
|
|
//
|
|||
|
|
ClsProperty.En_Type _type = ClsProperty.En_Type.自定义;
|
|||
|
|
try
|
|||
|
|
{
|
|||
|
|
_type = (ClsProperty.En_Type)tStor.GetAttrValue("sType", 0);
|
|||
|
|
}
|
|||
|
|
catch { }
|
|||
|
|
ct.Property.Type = _type;
|
|||
|
|
ct.Property.Title = tStor.GetAttrValue("Title");
|
|||
|
|
ct.Property.LineSpace = tStor.GetAttrValue("LineSpace", 0d);
|
|||
|
|
ct.Property.PageCount = tStor.GetAttrValue("PageCount", 0);
|
|||
|
|
ct.Name = tStor.GetAttrValue("Name");
|
|||
|
|
ct.Parent = picPreview;
|
|||
|
|
//ct.ReadOnly = true;
|
|||
|
|
ct.BackColor = Color.Transparent;
|
|||
|
|
ct.Cursor = Cursors.Arrow;
|
|||
|
|
ct.SetAlign(tStor.GetAttrValue("align"));
|
|||
|
|
ct.Property.Value = tStor.GetAttrValue("value");
|
|||
|
|
ct.Property.CustomFormat = tStor.GetAttrValue("format");
|
|||
|
|
ct.Property.DataSource = tStor.GetAttrValue("DataSource");
|
|||
|
|
ct.Property.NoPrint = tStor.GetAttrValue("NoPrint", false);
|
|||
|
|
ct.Property.Type = _type;
|
|||
|
|
ct.Refresh();
|
|||
|
|
//ct.MouseDown += new MouseEventHandler(ct_MouseDown);
|
|||
|
|
//ct.MouseMove += new MouseEventHandler(ct_MouseMove);
|
|||
|
|
//ct.MouseUp += new MouseEventHandler(ct_MouseUp);
|
|||
|
|
new DragControl.MoveControl(ct);
|
|||
|
|
ct.Click += new EventHandler(Ct_Click);
|
|||
|
|
ct.KeyUp += Ct_KeyUp;
|
|||
|
|
ct.KeyDown += new KeyEventHandler(Ct_KeyDown);
|
|||
|
|
ct.SizeChanged += new EventHandler(Ct_SizeChanged);
|
|||
|
|
picPreview.Controls.Add(ct);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 从文件中加载配置。
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="path"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public int LoadFromFile(string path)
|
|||
|
|
{
|
|||
|
|
if(System.IO.File.Exists(path))
|
|||
|
|
{
|
|||
|
|
LoadControl(System.IO.File.ReadAllText(path, ryCommon.TxtFileEncoder.GetEncoding(path)));
|
|||
|
|
return 1;
|
|||
|
|
}
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
private void PropertyGrid1_PropertyValueChanged(object s, PropertyValueChangedEventArgs e)
|
|||
|
|
{
|
|||
|
|
IsDataChanged = true;
|
|||
|
|
ClsProperty item = (ClsProperty)propertyGrid1.SelectedObject;
|
|||
|
|
myLabel ct = GetControl(item.Name);
|
|||
|
|
if (ct != null)
|
|||
|
|
{
|
|||
|
|
ct.Property = item;
|
|||
|
|
ct.Refresh();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void BtnBrowser_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
if (openFileDialog1.ShowDialog() == DialogResult.OK)
|
|||
|
|
{
|
|||
|
|
txtPicPath.Text = openFileDialog1.FileName.Replace(Application.StartupPath, "<app>");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
private void txtPicPath_TextChanged(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
string picPath = RySet.GetTruePath(txtPicPath.Text);
|
|||
|
|
if (System.IO.File.Exists(picPath))
|
|||
|
|
{
|
|||
|
|
Image image = Image.FromFile(picPath);
|
|||
|
|
picPreview.Image = image;
|
|||
|
|
numWidth.Value = Convert.ToDecimal(RySet.InchesTomm(image.Width / Convert.ToDecimal(image.HorizontalResolution)));
|
|||
|
|
numHeight.Value = Convert.ToDecimal(RySet.InchesTomm(image.Height / Convert.ToDecimal(image.VerticalResolution)));
|
|||
|
|
picPreview.Width = RySet.MMtopixel((float)numWidth.Value);
|
|||
|
|
picPreview.Height = RySet.MMtopixel((float)numHeight.Value);
|
|||
|
|
ResetLocationControl();
|
|||
|
|
//picExpress.
|
|||
|
|
}
|
|||
|
|
else { picPreview.Image = null; }
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取新的控件名
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
private string GetNewName()
|
|||
|
|
{
|
|||
|
|
int i = 1;
|
|||
|
|
while (true)
|
|||
|
|
{
|
|||
|
|
if (GetControl("custom" + i.ToString()) == null)
|
|||
|
|
{
|
|||
|
|
return "custom" + i.ToString();
|
|||
|
|
}
|
|||
|
|
i++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
private void 添加自定义ToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
string name = GetNewName();
|
|||
|
|
AddControl(name, "自定义" + name.Replace("custom", ""), ClsProperty.En_Type.自定义, "", "");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void 添加数据库字段ToolStripMenuItem_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
string name = GetNewName();
|
|||
|
|
AddControl(name, "数据字段" + name.Replace("custom", ""), ClsProperty.En_Type.数据字段, "", "");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void BtnAddLabel_Click(object sender, EventArgs e)
|
|||
|
|
{
|
|||
|
|
Button ct = (Button)sender;
|
|||
|
|
Point p = new Point(0, ct.Height);
|
|||
|
|
contextMenuStrip1.Show(ct, p);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|