274 lines
11 KiB
C#
274 lines
11 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.CodeDom.Compiler;
|
|
using Microsoft.CSharp;
|
|
using System.Reflection;
|
|
using DCSoft.Writer.Controls;
|
|
using DCSoft.Writer;
|
|
using DCSoft.Writer.Dom;
|
|
using System.Windows.Forms;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Xml;
|
|
using HelperDB;
|
|
using AxNsoOfficeLib;
|
|
using System.Drawing;
|
|
using DocumentManagement.UI;
|
|
using System.Xml.Linq;
|
|
|
|
namespace DocumentManagement
|
|
{
|
|
public class EventCodeCompiler
|
|
{
|
|
public CompilerResults cr;
|
|
|
|
public Type type;
|
|
|
|
private ElementEventTemplate eet;
|
|
|
|
//string strMouseClickEvent = string.Empty;
|
|
|
|
//string strContentChangedEvent = string.Empty;
|
|
|
|
public EventCodeCompiler(ref WriterControl myEditControl, string strMouseClickEvent, string strContentChangedEvent)
|
|
{
|
|
eet = new ElementEventTemplate();
|
|
eet.MouseClick += new ElementMouseEventHandler(eetChk_MouseClick);
|
|
eet.MouseDblClick += Eet_MouseDblClick;
|
|
eet.ContentChanged += new ContentChangedEventHandler(eet_ContentChanged);
|
|
myEditControl.GlobalEventTemplate_Element = eet;
|
|
|
|
var providerOptions = new Dictionary<string, string>();
|
|
providerOptions.Add("CompilerVersion", "v4.0");
|
|
CodeDomProvider cdp = new CSharpCodeProvider(providerOptions);
|
|
CompilerParameters cp = new CompilerParameters();
|
|
cp.GenerateExecutable = false;
|
|
cp.GenerateInMemory = true;
|
|
cp.ReferencedAssemblies.Add("mscorlib.dll");
|
|
cp.ReferencedAssemblies.Add("System.dll");
|
|
cp.ReferencedAssemblies.Add("System.Core.dll");
|
|
cp.ReferencedAssemblies.Add("DCSoft.Writer.dll");
|
|
cp.ReferencedAssemblies.Add("System.Data.Linq.dll");
|
|
cp.ReferencedAssemblies.Add("System.Xml.Linq.dll");
|
|
cp.ReferencedAssemblies.Add("System.Windows.Forms.dll");
|
|
string source = @"
|
|
namespace DocumentManagement
|
|
{
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using DCSoft.Writer;
|
|
using DCSoft.Writer.Dom;
|
|
using System.Windows.Forms;
|
|
using System.Reflection;
|
|
public class BindEvents
|
|
{
|
|
private static XTextDocument doc;
|
|
private static XTextContainerElement container;
|
|
public BindEvents(DCSoft.Writer.Controls.WriterControl myEditControl)
|
|
{
|
|
doc = myEditControl.Document;
|
|
container = myEditControl.Document;
|
|
|
|
}
|
|
public static void MouseClickEvent(XTextElement element){
|
|
|
|
" + strMouseClickEvent + @"
|
|
}
|
|
|
|
public static void ContentChangedEvent(XTextElement element)
|
|
{
|
|
" + strContentChangedEvent + @"
|
|
}
|
|
|
|
private static void SetValueById(string Id, string type, object value)
|
|
{
|
|
var element = doc.GetElementsById(Id).FirstElement;
|
|
if (element != null)
|
|
{
|
|
var pChecked = element.GetType().GetProperty(type);
|
|
pChecked.SetValue(element, value, null);
|
|
element.EditorRefreshView();
|
|
}
|
|
}
|
|
|
|
private static void SetValueByName(string name, string type,object value)
|
|
{
|
|
var element = doc.GetElementsByName(name).FirstElement;
|
|
if (element != null)
|
|
{
|
|
var pChecked = element.GetType().GetProperty(type);
|
|
pChecked.SetValue(element, value, null);
|
|
element.EditorRefreshView();
|
|
}
|
|
}
|
|
|
|
private static bool GetCheckedValueByName(string name)
|
|
{
|
|
bool? result = null;
|
|
var element = doc.GetElementsByName(name).FirstElement;
|
|
if (element != null)
|
|
{
|
|
var pChecked = element.GetType().GetProperty(""Checked"");
|
|
result = Convert.ToBoolean(pChecked.GetValue(element, null));
|
|
}
|
|
return result.Value;
|
|
}
|
|
}
|
|
}
|
|
";
|
|
cr = cdp.CompileAssemblyFromSource(cp, source);
|
|
if (cr.Errors.HasErrors)
|
|
{
|
|
MessageBox.Show("加载元素事件失败!");
|
|
}
|
|
else
|
|
{
|
|
Assembly a = cr.CompiledAssembly;
|
|
type = a.GetTypes().Where(x => x.IsClass).FirstOrDefault();
|
|
Type[] types = new Type[1];
|
|
types[0] = typeof(WriterControl);
|
|
ConstructorInfo ci = type.GetConstructor(types);
|
|
if (ci != null)
|
|
{
|
|
object obj = ci.Invoke(new object[] { myEditControl });
|
|
}
|
|
}
|
|
}
|
|
|
|
public CompilerErrorCollection Errors { get { return cr.Errors; } }
|
|
|
|
void eet_ContentChanged(object eventSender, ContentChangedEventArgs args)
|
|
{
|
|
if (args.Element is XTextInputFieldElement)
|
|
{
|
|
//var element = args.Element as XTextInputFieldElement;
|
|
try
|
|
{
|
|
Object rslt = type.InvokeMember(
|
|
"ContentChangedEvent",
|
|
BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static,
|
|
null,
|
|
null, // for static class
|
|
new object[] { args.Element });
|
|
}
|
|
catch (Exception exp)
|
|
{
|
|
MessageBox.Show(exp.StackTrace + ":" + exp.Message);
|
|
}
|
|
}
|
|
if (eventSender is XTextRadioBoxElement)
|
|
{
|
|
var element = args.Element as XTextRadioBoxElement;
|
|
DocumentExtension.SetCocumentValue(element.WriterControl.Document.FileName, element.WriterControl.Document);
|
|
}
|
|
}
|
|
|
|
void eetChk_MouseClick(object eventSender, ElementMouseEventArgs args)
|
|
{
|
|
if (args.Element is XTextCheckBoxElement || args.Element is XTextRadioBoxElement)
|
|
{
|
|
try
|
|
{
|
|
Object rslt = type.InvokeMember(
|
|
"MouseClickEvent",
|
|
BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static,
|
|
null,
|
|
null, // for static class
|
|
new object[] { args.Element });
|
|
}
|
|
catch (Exception exp)
|
|
{
|
|
MessageBox.Show(exp.StackTrace + ":" + exp.Message);
|
|
}
|
|
//var doc = myEditControl.Document;
|
|
//var element = args.Element;
|
|
|
|
}
|
|
}
|
|
|
|
private void Eet_MouseDblClick(object eventSender, ElementMouseEventArgs args)
|
|
{
|
|
if (args.Element is XTextInputFieldElement)
|
|
{
|
|
var element = args.Element as XTextInputFieldElement;
|
|
if (element != null && element.Name == "Pacs")
|
|
{
|
|
var patientId = element.WriterControl.Document.Fields.ToArray().Where(x => x is XTextInputFieldElement
|
|
&& (x as XTextInputFieldElement).ID == "KB20180604104209620").FirstOrDefault();
|
|
ShowPacsText showPacsText = new ShowPacsText();
|
|
showPacsText.element = element;
|
|
showPacsText.PatientNo = patientId.Text;
|
|
showPacsText.ShowDialog();
|
|
//element.WriterControl.Parent as ucDocument.
|
|
}
|
|
}
|
|
else if (eventSender is XTextImageElement)
|
|
{
|
|
if ((eventSender as XTextImageElement).Alt == "双击选择图片")
|
|
{
|
|
OpenFileDialog openFileDialogEmpImage = new OpenFileDialog();
|
|
openFileDialogEmpImage.Filter = "*.bmp|*.bmp|*.png|*.png|*.jpg|*.jpg|*.tiff|*.tiff";//图片格式
|
|
if (openFileDialogEmpImage.ShowDialog() == DialogResult.OK)
|
|
{
|
|
try
|
|
{
|
|
string empUpLoadPictureRealPos = openFileDialogEmpImage.FileName;//实际的文件路径+文件名
|
|
String[] empImageData = empUpLoadPictureRealPos.Split('.');
|
|
//empImageData[1]:是上传的图片的后缀名
|
|
string empUpLoadPictureFormat = empImageData[1];
|
|
//赋值图片
|
|
(eventSender as XTextImageElement).Image = new DCSoft.Drawing.XImageValue(Image.FromFile(empUpLoadPictureRealPos));
|
|
(eventSender as XTextImageElement).Title = empImageData[0];
|
|
(eventSender as XTextImageElement).EditorRefreshView();
|
|
}
|
|
catch
|
|
{
|
|
MessageBox.Show("您选择的图片不能被读取或文件类型不对!", "错误信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
frmSelectPersonDoc personDoc = new frmSelectPersonDoc();
|
|
personDoc.PersonType = (eventSender as XTextImageElement).Alt == "" ? "麻醉医生" : (eventSender as XTextImageElement).Alt;
|
|
personDoc.ShowDialog();
|
|
if (personDoc.SelectPersonData > 0)
|
|
{
|
|
int PersonId = personDoc.SelectPersonData;
|
|
string SignatureStr = GetSignatureStr(PersonId);
|
|
DCSoft.Drawing.XImageValue img = new DCSoft.Drawing.XImageValue();
|
|
img.ImageDataBase64String = SignatureStr;
|
|
(eventSender as XTextImageElement).Image = img;
|
|
(eventSender as XTextImageElement).Alt = "麻醉医生";
|
|
(eventSender as XTextImageElement).Title = PersonId.ToString();
|
|
(eventSender as XTextImageElement).EditorRefreshView();
|
|
}
|
|
else
|
|
{
|
|
//清空图片
|
|
(eventSender as XTextImageElement).Image = null;
|
|
(eventSender as XTextImageElement).Alt = "麻醉医生";
|
|
(eventSender as XTextImageElement).Title = "";
|
|
(eventSender as XTextImageElement).EditorRefreshView();
|
|
}
|
|
|
|
//属性赋值判断
|
|
// (eventSender as XTextImageElement).Image.Value==null 判断是否有图片 是否签名
|
|
// (eventSender as XTextImageElement).Alt =="签名" 改为已签名或签名ID
|
|
// (eventSender as XTextImageElement).Title =="标题" 存储对应ca人员介质
|
|
// (eventSender as XTextImageElement).ID =="image3" 标识Id用于定位赋值图片
|
|
}
|
|
}
|
|
}
|
|
public string GetSignatureStr(int SelectPersonData)
|
|
{
|
|
string SignatureStr = "";
|
|
string sql = "select SignatureStr from Person where id=" + SelectPersonData;
|
|
SignatureStr = DBHelper.ExecuteScalar(sql).ToString();
|
|
return SignatureStr;
|
|
}
|
|
}
|
|
}
|