Exemple #1
0
        private void copy_selection(bool unicode)
        {
            try
            {
                var selection_len = (int)(TextViewControl.SelectionEnd - TextViewControl.SelectionStart);

                if (selection_len <= 0)
                {
                    return;
                }

                var char_buffer  = IntPtr.Zero;
                var chars_filled = 0;
                var eof          = false;

                try
                {
                    text_provider.GetCharParagraph
                        (TextViewControl.SelectionStart,
                        selection_len,
                        false,
                        out char_buffer,
                        out chars_filled,
                        out eof);

                    var sel_string = string.Empty;
                    sel_string = Marshal.PtrToStringUni(char_buffer, chars_filled);
                    if (unicode)
                    {
                        Clipboard.SetText(sel_string, TextDataFormat.UnicodeText);
                    }
                    else
                    {
                        Clipboard.SetText(sel_string, TextDataFormat.Text);
                    }
                }
                finally
                {
                    if (char_buffer != IntPtr.Zero)
                    {
                        //Marshal.FreeHGlobal(char_buffer);
                        //буфер не надо освобождать
                    }
                }
            }
            catch (Exception ex)
            {
                Messages.ShowException(ex);
            }
        }