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