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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как программно проскроллировать RichTextBox ? 
:(
    Опции темы
mr.DUDA
Дата 25.3.2005, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Сабж.

Нужен программный скроллинг содержимого RichTextBox-а.
Пробовал код ниже, но он только двигает скроллбар внутри RichTextBox, сам же текст в боксе не скроллируется. Может, кто-то знает, как решить данную проблему ?

Код
[DllImport("user32.dll")]
private static extern Int32 SetScrollPos(IntPtr handle, int bar, int pos, bool redraw);

public static void ScrollRichEdit(RichTextBox box, int pos)
{
      SetScrollPos(box.Handle, 1, pos, true);
}



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


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


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

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



Оказывается, решение существует (как ни странно)... После получасовых исследований System.Windows.Forms.dll и mscorlib.dll с пом. Reflector-а, родился следующий код. Может быть, кому-то пригодится хоть какая-то его часть, или наведёт на решение подобной проблемы. Короче, вот код, скроллирующий RichEdit:
Код

        [StructLayout(LayoutKind.Sequential)]
        public class POINT
        {
            public int x;
            public int y;
            public POINT(int x, int y) {this.x=x; this.y=y;}
        }

        const UInt16 EM_SETSCROLLPOS = 1246;

        [DllImport("user32.dll", CharSet=CharSet.Auto)]
        public static extern IntPtr SendMessage(HandleRef hWnd, int msg, int wParam, POINT lParam);

        public static void ScrollRichEdit(RichTextBox box, int posH, int posV)
        {
            Point pt = new Point(posH, posV);
            SendMessage(new HandleRef(box, box.Handle), EM_SETSCROLLPOS, 0, new POINT(posH, posV));
        }


Добавлено @ 14:28
P.S. кривизна рук разработчиков M$ здесь касается двух вещей:

1) чтобы скроллировать TextEdit / RichEdit, приходится посылать "нестандартное" сообщение EM_SETSCROLLPOS (кстати, такое же поведение у RichEdit'а и в MFC)
2) чтобы вызвать платформенно-зависимый метод SendMessage, приходится извращаться сами видите каким способом: описывать WinAPI-структуру и т.п. Хорошо ещё что не пришлось делать unsafe-код.


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


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: 2
Всего: 93



Мда...
Это пока что самый главный недостаток .NET -- невозможно обойтись без native вызовов smile


--------------------
Да. Именно так.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




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


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

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