|
1 / 1 / 2
Регистрация: 16.04.2014
Сообщений: 19
|
|||||||||||
.NET 4.x Свой VScrollBar для TextBox26.05.2015, 14:58. Показов 1972. Ответов 0
Метки нет (Все метки)
Добрый день!
Требуется TextBox с вертикальным скроллбаром нестандартного вида. Начал создавать свою библиотеку компонентов, сам VScrollBar требуемого вида и функционала сделал, TextBox использую стандартный. Теперь требуется связать их между собой. Скроллинг TextBox'а посредством своего скроллбара сделал без проблем используя сообщение EM_LINESCROLL:
С горем пополам кое-как справился с навигацией по тексту обычными стрелочками вверх/вниз/влево/вправо. Для этого искал номер строки, на которой стоит курсор
Вопрос: 1. Можно ли как-то определить номер строки, на которой расположен курсор, но с отсчетом не от самой первой строки текста, а от первой отображаемой в TextBox'е строки? 2. Есть ли какое-нибудь сообщение, отправляемое в случае скролла компонента? Я бы его ловил, и решил этим вообще все свои проблемы "обратного" скрола. 3. Сейчас я обрабатываю события нажатия навигационных клавиш через PreviewKeyDown, что по понятным причинам неправильно. Есть ли событие, которое происходит после действия, назначенного клавише, но при этом до ее отпускания? Ведь пользователь может зажать PageDown и удерживать его, и мне необходимо будет "поймать" каждое действие, которое произойдет. 3.1. Может опять же есть какое-нибудь сообщение, на базе которого я могу создать свое событие? 4. Может быть есть более элегантный выход? Добавлено через 21 час 41 минуту Сам себе отвечаю, может пригодится кому... Для реализации функционала "обратного" скролинга необходимо иметь возможность получить текущее значение скрола компонента. Сперва я хотел использовать для этого функцию GetScrollPos из user32.dll, но оказалось, что она выдает значение стандартного скрола (который появляется справа от компонента, если текста много). Если этот стандартный скрол скрыт (а он скрыт, я же свой пристроил), то GetScrollPos всегда будет выдавать 0. Другой выход - получить значение скрола прямо из текстового поля, используя сообщение EM_GETSCROLLPOS. Но TextBox не обрабатывает это сообщение, поэтому единственным выходом оказалось использовать RichTextBox. Но и тут геморрой не закончился. Во-первых, мне нужно работать с Plain-текстом, поэтому пришлось отлавливать нажатия CTRL+X, CTRL+C, CTRL+V и редактировать содержимое буфера, выбрасывая оттуда RTF-форматирование. Во-вторых, мне по-прежнему требовалось обрабатывать PageUp/PageDown именно после произведенных ими действий. Эту проблему я решил написав обертку на компонент RichTextBox, где переопределил WndProc и на сообщения WM_VSCROLL, WM_MOUSEWHEEL, WM_KEYDOWN создал новое событие, которое отвечало всем моим требованиям. Вот как-то так... 2 дня ушло на казалось бы простую задачу...
0
|
|||||||||||
| 26.05.2015, 14:58 | |
|
Ответы с готовыми решениями:
0
Как сделать свой обработчик события для нескольких TextBox как связать vScrollBar и textbox? Свой компонент от ListBox. Не могу задать свой тип для Items |
| 26.05.2015, 14:58 | |
|
Помогаю со студенческими работами здесь
1
Как сделать свой стиль выделения в TextBox HSrollBar и VScrollBar Привязка VScrollBar'a к TreeView
Как связать Chekedlistbox и VScrollBar? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|