Пример #1
0
 internal static void SendMessage(RichTextBox rtb,
                                  UInt32 msg,
                                  int wParam,
                                  ref PARAFORMAT pf)
 {
     SendMessage(new HandleRef(rtb, rtb.Handle),
                 msg, (IntPtr)wParam, ref pf);
 }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
		private static extern int SendMessage( HandleRef hWnd,
			int msg,
			int wParam,
			ref PARAFORMAT lp );
Пример #6
0
        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;
        }
Пример #7
0
 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;
 }
Пример #8
0
 private static extern void RichTextBox_ParaFormat(out PARAFORMAT value);
Пример #9
0
 internal static void SendMessage(RichTextBox rtb,
     UInt32 msg,
     int wParam,
     ref PARAFORMAT pf)
 {
     SendMessage(new HandleRef(rtb, rtb.Handle),
         msg, (IntPtr)wParam, ref pf);
 }
Пример #10
0
        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);
Пример #13
0
 private static extern int SendMessage(IntPtr hWnd, int msg, int wParam, ref PARAFORMAT fmt);
Пример #14
0
 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;
            }
        }
Пример #16
0
 internal static extern IntPtr SendMessage(HandleRef hWnd,
                                           UInt32 msg,
                                           IntPtr wParam,
                                           ref PARAFORMAT lp);
Пример #17
0
        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);
 }
Пример #22
0
        //----------------------------
        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;
        }
Пример #23
0
 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;
 }
Пример #24
0
 internal static extern IntPtr SendMessage(HandleRef hWnd,
     UInt32 msg,
     IntPtr wParam,
     ref PARAFORMAT lp);
Пример #25
0
 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;
 }
Пример #26
0
 private static extern int SendMessage(HandleRef hWnd,
                                       int msg,
                                       int wParam,
                                       ref PARAFORMAT lp);
Пример #27
0
 private static extern IntPtr SendMessage(HandleRef hWnd, int msg, int wParam, [In, Out, MarshalAs(UnmanagedType.LPStruct)] PARAFORMAT lParam);