internal static void SendMessage(RichTextBox rtb, UInt32 msg, int wParam, ref PARAFORMAT pf) { SendMessage(new HandleRef(rtb, rtb.Handle), msg, (IntPtr)wParam, ref pf); }
public static void SetDefaultParaFormat(this RichTextBox rtb, PARAFORMAT value) { PARAFORMAT pf = value; pf.cbSize = Marshal.SizeOf(pf); // Set the alignment. NativeMethods.SendMessage(rtb, NativeMethods.EM_SETPARAFORMAT, NativeMethods.SCF_ALL, ref pf); }
public static PARAFORMAT GetDefaultParaFormat(this RichTextBox rtb) { PARAFORMAT pf = new PARAFORMAT(); pf.cbSize = Marshal.SizeOf(pf); // Get the alignment. NativeMethods.SendMessage(rtb, NativeMethods.EM_GETPARAFORMAT, NativeMethods.SCF_ALL, ref pf); return(pf); }
public static void SetLineSpacing(this RichTextBox rtb, int space) { PARAFORMAT fmt = new PARAFORMAT(); fmt.cbSize = Marshal.SizeOf(fmt); fmt.dwMask = 0x100; fmt.dyLineSpacing = space; fmt.bLineSpacingRule = 4; rtb.SelectAll(); SendMessage(new HandleRef(rtb, rtb.Handle), 1095, 1, ref fmt ); rtb.Select(0, 0); }
private static extern int SendMessage( HandleRef hWnd, int msg, int wParam, ref PARAFORMAT lp );
private static PARAFORMAT HandleTextAndWhitespace(RichTextBox rtb, PARAFORMAT pf, CHARFORMAT cf, string strData) { bool bNewParagraph = (strData.IndexOf("\r\n", 0) >= 0) || (strData.IndexOf("\n", 0) >= 0); if (strData.Length > 0) { // now, add text to control int nStartCache = rtb.SelectionStart; rtb.SelectedText = strData; rtb.Select(nStartCache, strData.Length); // apply format rtb.SetParaFormat(pf); rtb.SetCharFormat(cf); } // reposition to final rtb.Select(rtb.TextLength + 1, 0); // new paragraph requires to reset alignment if (bNewParagraph) { pf.dwMask = PFM.ALIGNMENT | PFM.NUMBERING; pf.wAlignment = PFA.LEFT; pf.wNumbering = 0; } return pf; }
private static PARAFORMAT HandleParagraphElement(XmlReader reader, PARAFORMAT pf, Stack<PARAFORMAT> spf) { spf.Push(pf); while (reader.MoveToNextAttribute()) { pf = HandleParagraphAlignmentElement(pf, reader.Name, reader.Value); } reader.MoveToElement(); return pf; }
private static extern void RichTextBox_ParaFormat(out PARAFORMAT value);
public static void SetParaFormat(this RichTextBox rtb, PARAFORMAT value) { PARAFORMAT pf = value; pf.cbSize = Marshal.SizeOf(pf); // Set the alignment. NativeMethods.SendMessage(rtb, NativeMethods.EM_SETPARAFORMAT, NativeMethods.SCF_SELECTION, ref pf); }
private static void ProcessXmlElement(RichTextBox rtb, Stack<CHARFORMAT> scf, Stack<PARAFORMAT> spf, ref CHARFORMAT cf, ref PARAFORMAT pf, ref int hyperlinkStart, ref string hyperlink, XmlReader reader) { switch (reader.Name.ToLower()) { case "b": cf.dwMask |= CFM.WEIGHT | CFM.BOLD; cf.dwEffects |= CFE.BOLD; cf.wWeight = FW.BOLD; break; case "i": cf.dwMask |= CFM.ITALIC; cf.dwEffects |= CFE.ITALIC; break; case "u": cf.dwMask |= CFM.UNDERLINE | CFM.UNDERLINETYPE; cf.dwEffects |= CFE.UNDERLINE; cf.bUnderlineType = CFU.UNDERLINE; break; case "s": cf.dwMask |= CFM.STRIKEOUT; cf.dwEffects |= CFE.STRIKEOUT; break; case "sup": cf.dwMask |= CFM.SUPERSCRIPT; cf.dwEffects |= CFE.SUPERSCRIPT; break; case "sub": cf.dwMask |= CFM.SUBSCRIPT; cf.dwEffects |= CFE.SUBSCRIPT; break; case "a": hyperlinkStart = rtb.TextLength; hyperlink = null; while (reader.MoveToNextAttribute()) { switch (reader.Name.ToLower()) { case "href": hyperlink = reader.Value; break; } } reader.MoveToElement(); break; case "p": spf.Push(pf); while (reader.MoveToNextAttribute()) { switch (reader.Name.ToLower()) { case "align": if (reader.Value == "left") { pf.dwMask |= PFM.ALIGNMENT; pf.wAlignment = PFA.LEFT; } else if (reader.Value == "right") { pf.dwMask |= PFM.ALIGNMENT; pf.wAlignment = PFA.RIGHT; } else if (reader.Value == "center") { pf.dwMask |= PFM.ALIGNMENT; pf.wAlignment = PFA.CENTER; } break; } } reader.MoveToElement(); break; case "li": spf.Push(pf); if (pf.wNumbering != PFN.BULLET) { pf.dwMask |= PFM.NUMBERING; pf.wNumbering = PFN.BULLET; } break; case "font": scf.Push(cf); string strFont = cf.szFaceName; int crFont = cf.crTextColor; int yHeight = cf.yHeight; while (reader.MoveToNextAttribute()) { switch (reader.Name.ToLower()) { case "face": cf.dwMask |= CFM.FACE; strFont = reader.Value; break; case "size": cf.dwMask |= CFM.SIZE; yHeight = int.Parse(reader.Value); yHeight *= (20 * 5); break; case "color": cf.dwMask |= CFM.COLOR; string text = reader.Value; if (text.StartsWith("#")) { string strCr = text.Substring(1); int nCr = Convert.ToInt32(strCr, 16); Color color = Color.FromArgb(nCr); crFont = GetCOLORREF(color); } else if (!int.TryParse(text, out crFont)) { Color color = Color.FromName(text); crFont = GetCOLORREF(color); } break; } } reader.MoveToElement(); cf.szFaceName = strFont; cf.crTextColor = crFont; cf.yHeight = yHeight; cf.dwEffects &= ~CFE.AUTOCOLOR; break; } }
internal static extern int SendMessage(HandleRef hWnd, int msg, IntPtr wParam, ref PARAFORMAT lp);
private static extern int SendMessage(IntPtr hWnd, int msg, int wParam, ref PARAFORMAT fmt);
private static extern IntPtr SendMessage(HandleRef hWnd, int msg, int wParam, ref PARAFORMAT lParam);
private static void ProcessXmlEndElement(RichTextBox rtb, Stack<CHARFORMAT> scf, Stack<PARAFORMAT> spf, List<KeyValuePair<int, int>> links, ref CHARFORMAT cf, ref PARAFORMAT pf, ref int hyperlinkStart, string hyperlink, XmlReader reader) { switch (reader.Name) { case "b": cf.dwEffects &= ~CFE.BOLD; cf.wWeight = FW.NORMAL; break; case "i": cf.dwEffects &= ~CFE.ITALIC; break; case "u": cf.dwEffects &= ~CFE.UNDERLINE; break; case "s": cf.dwEffects &= ~CFE.STRIKEOUT; break; case "sup": cf.dwEffects &= ~CFE.SUPERSCRIPT; break; case "sub": cf.dwEffects &= ~CFE.SUBSCRIPT; break; case "a": int length = rtb.TextLength - hyperlinkStart; if (hyperlink != null) { rtb.Select(hyperlinkStart, length); if (hyperlink != rtb.SelectedText) { string rtfText = rtb.SelectedRtf; int idx = rtfText.LastIndexOf('}'); if (idx != -1) { string head = rtfText.Substring(0, idx); string tail = rtfText.Substring(idx); rtb.SelectedRtf = head + @"\v #" + hyperlink + @"\v0" + tail; length = rtb.TextLength - hyperlinkStart; } } // reposition to final rtb.Select(rtb.TextLength + 1, 0); } links.Add(new KeyValuePair<int, int>(hyperlinkStart, length)); hyperlinkStart = -1; break; case "p": pf = spf.Pop(); break; case "li": pf = spf.Pop(); break; case "font": cf = scf.Pop(); break; } }
internal static extern IntPtr SendMessage(HandleRef hWnd, UInt32 msg, IntPtr wParam, ref PARAFORMAT lp);
public static void SetXHTMLText(this RichTextBox rtb, string xhtmlText) { rtb.Clear(); Stack <CHARFORMAT> scf = new Stack <CHARFORMAT>(); Stack <PARAFORMAT> spf = new Stack <PARAFORMAT>(); List <KeyValuePair <int, int> > links = new List <KeyValuePair <int, int> >(); CHARFORMAT cf = rtb.GetDefaultCharFormat(); // to apply character formatting PARAFORMAT pf = rtb.GetDefaultParaFormat(); // to apply paragraph formatting rtb.HideSelection = true; int oldMask = rtb.BeginUpdate(); int hyperlinkStart = -1; string hyperlink = null; XmlReaderSettings settings = new XmlReaderSettings(); settings.ConformanceLevel = ConformanceLevel.Fragment; try { using (XmlReader reader = XmlReader.Create(new StringReader(xhtmlText), settings)) { while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: switch (reader.Name.ToLower()) { case "b": cf.dwMask |= CFM.WEIGHT | CFM.BOLD; cf.dwEffects |= CFE.BOLD; cf.wWeight = FW.BOLD; break; case "i": cf.dwMask |= CFM.ITALIC; cf.dwEffects |= CFE.ITALIC; break; case "u": cf.dwMask |= CFM.UNDERLINE | CFM.UNDERLINETYPE; cf.dwEffects |= CFE.UNDERLINE; cf.bUnderlineType = CFU.UNDERLINE; break; case "s": cf.dwMask |= CFM.STRIKEOUT; cf.dwEffects |= CFE.STRIKEOUT; break; case "sup": cf.dwMask |= CFM.SUPERSCRIPT; cf.dwEffects |= CFE.SUPERSCRIPT; break; case "sub": cf.dwMask |= CFM.SUBSCRIPT; cf.dwEffects |= CFE.SUBSCRIPT; break; case "a": hyperlinkStart = rtb.TextLength; hyperlink = null; while (reader.MoveToNextAttribute()) { switch (reader.Name.ToLower()) { case "href": hyperlink = reader.Value; break; } } reader.MoveToElement(); break; case "p": spf.Push(pf); while (reader.MoveToNextAttribute()) { switch (reader.Name.ToLower()) { case "align": if (reader.Value == "left") { pf.dwMask |= PFM.ALIGNMENT; pf.wAlignment = PFA.LEFT; } else if (reader.Value == "right") { pf.dwMask |= PFM.ALIGNMENT; pf.wAlignment = PFA.RIGHT; } else if (reader.Value == "center") { pf.dwMask |= PFM.ALIGNMENT; pf.wAlignment = PFA.CENTER; } break; } } reader.MoveToElement(); break; case "li": spf.Push(pf); if (pf.wNumbering != PFN.BULLET) { pf.dwMask |= PFM.NUMBERING; pf.wNumbering = PFN.BULLET; } break; case "font": scf.Push(cf); string strFont = cf.szFaceName; int crFont = cf.crTextColor; int yHeight = cf.yHeight; while (reader.MoveToNextAttribute()) { switch (reader.Name.ToLower()) { case "face": cf.dwMask |= CFM.FACE; strFont = reader.Value; break; case "size": cf.dwMask |= CFM.SIZE; yHeight = int.Parse(reader.Value); yHeight *= (20 * 5); break; case "color": cf.dwMask |= CFM.COLOR; string text = reader.Value; if (text.StartsWith("#")) { string strCr = text.Substring(1); int nCr = Convert.ToInt32(strCr, 16); Color color = Color.FromArgb(nCr); crFont = GetCOLORREF(color); } else if (!int.TryParse(text, out crFont)) { Color color = Color.FromName(text); crFont = GetCOLORREF(color); } break; } } reader.MoveToElement(); cf.szFaceName = strFont; cf.crTextColor = crFont; cf.yHeight = yHeight; cf.dwEffects &= ~CFE.AUTOCOLOR; break; } break; case XmlNodeType.EndElement: switch (reader.Name) { case "b": cf.dwEffects &= ~CFE.BOLD; cf.wWeight = FW.NORMAL; break; case "i": cf.dwEffects &= ~CFE.ITALIC; break; case "u": cf.dwEffects &= ~CFE.UNDERLINE; break; case "s": cf.dwEffects &= ~CFE.STRIKEOUT; break; case "sup": cf.dwEffects &= ~CFE.SUPERSCRIPT; break; case "sub": cf.dwEffects &= ~CFE.SUBSCRIPT; break; case "a": int length = rtb.TextLength - hyperlinkStart; if (hyperlink != null) { rtb.Select(hyperlinkStart, length); if (hyperlink != rtb.SelectedText) { string rtfText = rtb.SelectedRtf; int idx = rtfText.LastIndexOf('}'); if (idx != -1) { string head = rtfText.Substring(0, idx); string tail = rtfText.Substring(idx); rtb.SelectedRtf = head + @"\v #" + hyperlink + @"\v0" + tail; length = rtb.TextLength - hyperlinkStart; } } // reposition to final rtb.Select(rtb.TextLength + 1, 0); } links.Add(new KeyValuePair <int, int>(hyperlinkStart, length)); hyperlinkStart = -1; break; case "p": pf = spf.Pop(); break; case "li": pf = spf.Pop(); break; case "font": cf = scf.Pop(); break; } break; case XmlNodeType.Text: case XmlNodeType.Whitespace: case XmlNodeType.SignificantWhitespace: string strData = reader.Value; bool bNewParagraph = (strData.IndexOf("\r\n", 0) >= 0) || (strData.IndexOf("\n", 0) >= 0); if (strData.Length > 0) { // now, add text to control int nStartCache = rtb.SelectionStart; rtb.SelectedText = strData; rtb.Select(nStartCache, strData.Length); // apply format rtb.SetParaFormat(pf); rtb.SetCharFormat(cf); } // reposition to final rtb.Select(rtb.TextLength + 1, 0); // new paragraph requires to reset alignment if (bNewParagraph) { pf.dwMask = PFM.ALIGNMENT | PFM.NUMBERING; pf.wAlignment = PFA.LEFT; pf.wNumbering = 0; } break; case XmlNodeType.XmlDeclaration: case XmlNodeType.ProcessingInstruction: break; case XmlNodeType.Comment: break; default: break; } } } } catch (System.Xml.XmlException ex) { Debug.WriteLine(ex.Message); } rtb.HideSelection = false; // apply links style CHARFORMAT ncf = new CHARFORMAT(CFM.LINK, CFE.LINK); foreach (var pair in links) { rtb.Select(pair.Key, pair.Value); rtb.SetCharFormat(ncf); } // reposition to final rtb.Select(rtb.TextLength + 1, 0); rtb.EndUpdate(oldMask); }
private static PARAFORMAT GetDefaultParaFormat(HandleRef handleRef) { PARAFORMAT pf = new PARAFORMAT(); pf.cbSize = Marshal.SizeOf(pf); // Get the alignment. NativeMethods.SendMessage(handleRef, NativeMethods.EM_GETPARAFORMAT, (IntPtr)NativeMethods.SCF_ALL, ref pf); return pf; }
private static bool ProcessSignificantWhitespace(RichTextBox rtb, ref CHARFORMAT cf, ref PARAFORMAT pf, string strData) { bool bNewParagraph = (strData.IndexOf("\r\n", 0) >= 0) || (strData.IndexOf("\n", 0) >= 0); if (strData.Length > 0) { // now, add text to control int nStartCache = rtb.SelectionStart; rtb.SelectedText = strData; rtb.Select(nStartCache, strData.Length); // apply format rtb.SetParaFormat(pf); rtb.SetCharFormat(cf); } // reposition to final rtb.Select(rtb.TextLength + 1, 0); return bNewParagraph; }
private static void SetDefaultParaFormat(HandleRef handleRef, PARAFORMAT value) { Debug.Assert(value.cbSize == Marshal.SizeOf(value)); // Set the alignment. NativeMethods.SendMessage(handleRef, NativeMethods.EM_SETPARAFORMAT, (IntPtr)NativeMethods.SCF_ALL, ref value); }
public static void SetDefaultParaFormat(this RichTextBox rtb, PARAFORMAT value) { var handleRef = new HandleRef(rtb, rtb.Handle); SetDefaultParaFormat(handleRef, value); }
//---------------------------- public static PARAFORMAT GetParaFormat(this RichTextBox rtb) { PARAFORMAT pf = new PARAFORMAT(); pf.cbSize = Marshal.SizeOf(pf); // Get the alignment. NativeMethods.SendMessage(rtb, NativeMethods.EM_GETPARAFORMAT, NativeMethods.SCF_SELECTION, ref pf); return pf; }
private static PARAFORMAT HandleListItem(PARAFORMAT pf, Stack<PARAFORMAT> spf) { spf.Push(pf); if (pf.wNumbering != PFN.BULLET) { pf.dwMask |= PFM.NUMBERING; pf.wNumbering = PFN.BULLET; } return pf; }
private static PARAFORMAT HandleParagraphAlignmentElement(PARAFORMAT pf, string currentName, string currentValue) { if (currentName.ToLower() == "align") { if (currentValue == "left") { pf.dwMask |= PFM.ALIGNMENT; pf.wAlignment = PFA.LEFT; } else if (currentValue == "right") { pf.dwMask |= PFM.ALIGNMENT; pf.wAlignment = PFA.RIGHT; } else if (currentValue == "center") { pf.dwMask |= PFM.ALIGNMENT; pf.wAlignment = PFA.CENTER; } } return pf; }
private static extern int SendMessage(HandleRef hWnd, int msg, int wParam, ref PARAFORMAT lp);
private static extern IntPtr SendMessage(HandleRef hWnd, int msg, int wParam, [In, Out, MarshalAs(UnmanagedType.LPStruct)] PARAFORMAT lParam);