using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Volian.Base.Library; namespace ctlXMLEditLib { public partial class roRichTextBox : RichTextBox // C2022-003 Symbols in RO Editor. Customized RichTextBox for RO Editor. { public roRichTextBox() { InitializeComponent(); } private string _RtfPrefix; // contains Font table and styles (bold/underline/italics) for rtb from step style public string RtfPrefixForSymbols { get { //B2020-100 RHM Use SelectionFont rather than the font from the format file. StringBuilder selectedRtfSB = new StringBuilder(); AddFontTable(selectedRtfSB, FormatFont, true); _RtfPrefix = selectedRtfSB.ToString(); return _RtfPrefix + @"\f1\fs" + 10 * 2 + " "; } } public void InsertSymbol( int symbcode) { int position = this.SelectionStart; string sym = string.Format(symbcode < 256 ? "\'{0:X2}" : @"\u{0}", symbcode); this.SelectedRtf = RtfPrefixForSymbols + sym + @"}"; Select(position, -1); Select(position + 1, 0); } public void rchtxtBox_KeyDown(object sender,string RO_IDEN) // C2022-003 code used to prevent a symbol from being inserted into RO ID. { bool symFlg = false; roRichTextBox o = (roRichTextBox)sender; if (o.Name == RO_IDEN) { if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text)) { string clpBrd = Clipboard.GetText(); char[] chrAry = clpBrd.ToCharArray(); foreach (int chr in chrAry) { if (chr > 166) { symFlg = true; break; } else { symFlg = false; } } if (symFlg == true) { MessageBox.Show("Symbols are not allowed in the field. Clipbroad: '" + clpBrd + "'"); Clipboard.Clear(); } } } } private static void AddFontTable(StringBuilder selectedRtfSB, Font myFont, bool isFixed) { StringBuilder sbbeg = new StringBuilder(); StringBuilder sbend = new StringBuilder(); if (myFont.Bold) { sbbeg.Append(@"\b"); sbend.Append(@"\b0"); } if (myFont.Underline) { sbbeg.Append(@"\ul"); sbend.Insert(0, @"\ulnone"); } if (myFont.Italic) { sbbeg.Append(@"\i"); sbend.Insert(0, @"\i0"); } selectedRtfSB.Append(@"{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset2 " + myFont.FontFamily.Name + @";}"); if (!isFixed) selectedRtfSB.Append(@"{\f1\fnil\fcharset0 " + Volian.Base.Library.vlnFont.ProportionalSymbolFont + @";}}{\colortbl ;\red255\green0\blue0;\red0\green0\blue255;}"); // C2017-036 get best available proportional font for symbols - B2025-039 add Blue for Colored Replace Words else selectedRtfSB.Append(@"{\f1\fnil\fcharset0 FreeMono;}}{\colortbl ;\red255\green0\blue0;\red0\green0\blue255;}"); // FreeMono is now used for the edit screen only. VESymbFix and Consolas are used for printing selectedRtfSB.Append("\r\n"); // use styles to construct rtf commands to insert into next line (where \b, etc is) // B2015-134 Hanging Indent with Hard Returns was not being saved- removed \sl-240\slmult0 selectedRtfSB.Append(@"\viewkind4\uc1\pard" + sbbeg.ToString() + @"\fs" + Convert.ToInt32(myFont.SizeInPoints * 2).ToString() + @" "); } private Font _FormatFont; public Font FormatFont { get { if (_FormatFont == null) { Font formatFont; formatFont = Font; _FormatFont = formatFont; } // We found that the characters in the Letter Gothic font do not all use the same spacing. // Also, the character spacing is even more different between screen resolutions. // But the Letter Gothic font will print just fine. // We also found that the Letter Gothic Tall font works just fine on the screen, the only difference // is that the characters are a little bit taller. // So we decided to use the Letter Gothic Tall font for the screen display any time that Letter Gothic is used. if (_FormatFont.Name.ToUpper().Equals("LETTER GOTHIC")) _FormatFont = new Font("Letter Gothic Tall", _FormatFont.Size, _FormatFont.Style); return _FormatFont; } set { _FormatFont = value; } } } }