using AIMS.Infrastructure.CA; using AIMSExtension; using DCSoft.Writer; using DCSoft.Writer.Controls; using DCSoft.Writer.Dom; using DocumentManagement.UI; using HelperDB; using System; using System.CodeDom.Compiler; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; using System.Xml.Linq; namespace DocumentManagement { public class EventCodeCompiler { public CompilerResults cr; public Type type; private ElementEventTemplate eet; public bool IsLoad = false; private XTextInputFieldElement SelElement; private string SelElementName; private string SelElementValue; public EventCodeCompiler(ref WriterControl myEditControl, string strMouseClickEvent, string strContentChangedEvent) { eet = new ElementEventTemplate(); eet.MouseClick += new ElementMouseEventHandler(eetChk_MouseClick); eet.MouseDblClick += Eet_MouseDblClick; eet.KeyUp += Eet_KeyUp; eet.ContentChanged += new ContentChangedEventHandler(eet_ContentChanged); myEditControl.GlobalEventTemplate_Element = eet; eet.ContentChanging += Eet_ContentChanging; } private void Eet_ContentChanging(object eventSender, ContentChangingEventArgs args) { if (eventSender is XTextInputFieldElement xife) { var txtAll = args.InsertingElements.Select(c => c.Text).ToList(); var txt = string.Concat(txtAll); if (txtAll.Any(c=>c.Contains("�"))) { var clip = Clipboard.GetText().Trim(); xife.Text = clip; args.Cancel = true; return; args.InsertingElements.Clear(); args.InsertingElements.Add(new XTextStringElement() { Text = clip }); } byte[] originalBytes = Encoding.UTF8.GetBytes(txt); // 这里使用 UTF8 是假设或猜测 string decodedString = Encoding.GetEncoding("GB2312").GetString(originalBytes); // 用其他编码尝试解码 byte[] originalBytes2 = Encoding.GetEncoding("GB2312").GetBytes(txt); // 这里使用 UTF8 是假设或猜测 string decodedString2 = Encoding.UTF8.GetString(originalBytes2); // 用其他编码尝试解码 } } private void Eet_KeyUp(object eventSender, ElementKeyEventArgs args) { // 判断 Ctrl 键是否被按下 if ((Control.ModifierKeys & Keys.Control) == Keys.Control) { // 判断 V 键是否被按下 if (args.KeyCode == Keys.V) { // Ctrl+V 被按下,执行相应的操作 MessageBox.Show("Ctrl+V was pressed!"); } } if (args.KeyCode == Keys.V && args.Control == true) { if ((eventSender as XTextDocument).CurrentInputField != null) { var element = (eventSender as XTextDocument).CurrentInputField; if (element != null) { var etxt = element.Text; element.Text = element.Text.Replace("\r", "").Replace("\n", ""); } } } else { } } public CompilerErrorCollection Errors { get { return cr.Errors; } } void eet_ContentChanged(object eventSender, ContentChangedEventArgs args) { if (IsLoad) { if (args.Element is XTextInputFieldElement) { var element = args.Element as XTextInputFieldElement; if (SelElementName != null && SelElementName == element.Name && SelElementValue == element.Text) return; SelElement = element; SelElementName = element.Name; SelElementValue = element.Text; DocumentExtension.SetCocumentValueText(element.WriterControl.Document.FileName, element.WriterControl.Document, element); } else 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) { eet.MouseDblClick -= Eet_MouseDblClick; if (IsLoad) 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 { DocumentExtension.SetCocumentValueText2(element.WriterControl.Document.FileName, element.WriterControl.Document, element); } } 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 == null ? "麻醉医生" : (eventSender as XTextImageElement).Alt; DialogResult dialogResult = personDoc.ShowDialog(); if (dialogResult == DialogResult.OK) if (personDoc.SelectPersonData > 0) { int PersonId = personDoc.SelectPersonData; DataTable Person = GetPerson(PersonId); if (Person != null && Person.Rows.Count > 0) { string Id = Person.Rows[0][3].ToString(); string Name = Person.Rows[0][0].ToString(); string Contact = Person.Rows[0][1].ToString(); string SignatureStr = Person.Rows[0][2].ToString(); if (SignatureStr == null || SignatureStr == "") SignatureStr = new SignManage().GetSignStr(args.WriterControl.SaveDocumentToString("txt"), args.WriterControl.Document.FileName, Id, Name, Contact); if (SignatureStr != null && SignatureStr != "") { 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(); } } 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用于定位赋值图片 } } eet.MouseDblClick += Eet_MouseDblClick; } public DataTable GetPerson(int SelectPersonData) { DataTable Person = new DataTable(); string sql = "select Name,SignatureIndex,SignatureStr,id from Person where id=" + SelectPersonData; Person = DBHelper.GetDataTable(sql); return Person; } } }