Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> подсветка невыделенного текста в RichTextBox 
:(
    Опции темы
asdf
Дата 31.5.2005, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 27.8.2004
Где: Кишинёвъ

Репутация: нет
Всего: 11



как сделать?
--------------------
... 
PM MAIL   Вверх
mr.DUDA
Дата 1.6.2005, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Можно вот так, но сильно мерцает...
Код

        bool _inHandler = false;
        private void richTextBox1_SelectionChanged(object sender, System.EventArgs e)
        {
            return;
            if(_inHandler) return;

            _inHandler = true;

            int prevStart = this.richTextBox1.SelectionStart;
            int prevLen = this.richTextBox1.SelectionLength;
            if(prevStart > 0)
            {
                this.richTextBox1.Select(0, prevStart);
                this.richTextBox1.SelectionColor = Color.Red;
            }
            if(prevLen > 0)
            {
                this.richTextBox1.Select(prevStart, prevLen);
                this.richTextBox1.SelectionColor = Color.Black;
            }
            if(prevStart + prevLen > 0)
            {
                this.richTextBox1.Select(prevStart+prevLen, this.richTextBox1.TextLength-prevStart-prevLen);
                this.richTextBox1.SelectionColor = Color.Red;
            }
            this.richTextBox1.Select(prevStart, prevLen);

            _inHandler = false;
        }




--------------------
user posted image
PM MAIL WWW   Вверх
asdf
Дата 1.6.2005, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 27.8.2004
Где: Кишинёвъ

Репутация: нет
Всего: 11



спасибо за ответ.
я не совсем точно выразился, что мне надо...
точнее - изменение атрибутов фрагментов текста RichTextBox без мерцания...
--------------------
... 
PM MAIL   Вверх
mr.DUDA
Дата 1.6.2005, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



А, ну тогда ясно.
Делаешь richTextBox1.Select (start, len) и меняешь свойство SelectionXXXX (где XXXX - Color и т.п.)


--------------------
user posted image
PM MAIL WWW   Вверх
Gazon
Дата 2.6.2005, 02:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 9.1.2005

Репутация: 3
Всего: 8



Цитата(mr @ 1.6.2005, 19:05)
А, ну тогда ясно.
Делаешь richTextBox1.Select (start, len) и меняешь свойство SelectionXXXX (где XXXX - Color и т.п.)

Так тоже будет мерцать и даже очень(цветом выделения).

http://www.codeproject.com/vb/net/realtimesyntaxcoloring.asp

Но он сделан так, что RichTextBox не мерцает, но мерцают все остальные окна. smile

Потом я увидел этот проект:
http://www.bousoft.com/codes/net/ch_rich_clr.zip

У него отсутствует мерцание, но реализация самой подсветки сильно нуждается в доработке(как и в первом проекте).

Потом я увидел этот проект:
http://www.c-sharpcorner.com/Code/2003/Jun...yntaxEditor.asp
И он мне показался ниболее грамотным.
Правда и в нем надо кое чего переделать(доделать).


еще посмотри это:
http://www.c-sharpcorner.com/Code/2003/Jun...chTextBoxP1.asp
http://www.c-sharpcorner.com/Code/2003/Jun...chTextBoxP2.asp

А вот здесь есть еще более грамотные проекты, без тормозов(сколько бы строк в RichTextBox не было), но они без исходников:
http://www.windowsforms.net/ControlGallery...=12&tabindex=10

Это сообщение отредактировал(а) Gazon - 2.6.2005, 02:44
--------------------
Чем больше узнаешь, тем больше не знаешь, но до истины всегда можно добраться.
PM MAIL   Вверх
mr.DUDA
Дата 2.6.2005, 07:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(Gazon @ 2.6.2005, 02:40)
Потом я увидел этот проект:
http://www.c-sharpcorner.com/Code/2003/Jun...yntaxEditor.asp
И он мне показался ниболее грамотным.
Правда и в нем надо кое чего переделать(доделать).

Там приведено настолько простое и оригинальное решение проблемы с мерцанием RichEdit, что я не удержусь и приведу его здесь smile

Сначала - цитата с сайта:
Цитата
In order to reduce the flicker of the RichTextBox, we simply subclass the RichTextBox class with our own called FlickerFreeRichEditTextBox. Then we override the WndProc method in this class to give us control over when the WM_PAINT message is passed into the class.  The entire subclass of the rich text box control is shown below


Исходный текст контрола, позволяющего "временно выключать" перерисовку RichEdit-а:
Код
using System;
using System.Windows.Forms;

namespace ColorSyntaxEditor
{
    public class FlickerFreeRichEditTextBox : RichTextBox
    {
        const short WM_PAINT = 0x00f;
        
        public FlickerFreeRichEditTextBox()
        {
        }

        public static bool _Paint = true;

        protected override void WndProc(ref Message m)
        {
            if(m.Msg == WM_PAINT)
            {
                if(_Paint)
                    base.WndProc(ref m);
                else
                    m.Result = IntPtr.Zero;
            }
            else
                base.WndProc(ref m);
        }
    }
}


комментарии авторов:
Цитата
To use the control above, simply change the static _Paint variable to false when we select and color the text and turn it back to true when we are done. Walla!  The flicker disappears.


Как всегда, всё гениальное - просто.


--------------------
user posted image
PM MAIL WWW   Вверх
Gazon
Дата 2.6.2005, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 9.1.2005

Репутация: 3
Всего: 8



Вообще, главное, это не избавиться от мерцания, избавиться от него легко. А гавное, чтобы не было тормозов. Но в проектах с исходниками тормоза есть везде, просто дте-то больше, где-то меньше.

Цитата
Там приведено настолько простое и оригинальное решение проблемы с мерцанием RichEdit

Согласен.

Наверное лучше всего будет не выделять текст, а потом подсвечивать, а напрямую вставлять RTF данные.
--------------------
Чем больше узнаешь, тем больше не знаешь, но до истины всегда можно добраться.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0843 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.