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);
|
||
}
|
||
}
|
||
}
|