|
2 / 2 / 0
Регистрация: 09.09.2015
Сообщений: 22
|
|
TMemo и Scrollbar. Как сделать выделение i строки?01.11.2015, 23:24. Показов 3329. Ответов 8
Метки нет (Все метки)
Всем привет!
С этой проблемой я бъюсь уже очень долго и решить ее не могу. Под TMemo в идеальном случае я понимаю все компоненты, имеющие Scrollbar(TStringGrid, TRichEdit итд). Проблема заключается в следующем: я создал TMemo поместил в него текст, закрыл программу и сохранил все настройки последнего состояния. Когда я открыл программу заного, соответственно загрузил в него текст(настройки шрифта и прочее). Перед закрытием программы я читал текст. Текста было много и я листал его с помощью Scrollbar`а. Я могу узнать положение каретки, номер строки и прочие параметры, но как мне выставить 150 строку текста в мемо в качестве начальной строки? Другими словами как мне выставить ползунок Scrollbar на 80% или Scrollbar->Position=115? Причем выставить так, чтобы первая отрисованная строка мемо начиналась с середины текста. Единственное что я нашел это - Memo1->ScrollBy(DeltaX,DeltaY). Но эту дельту нужно подбирать, причем дельта относится к канве, но не к строке. ( Если я проведу команду Memo1->ScrollBy(0,10), то я получу желаемый результат( будет отрисована 2 строка текста в качестве первой отрисованной), но если я поставлю дельту 210, то я не получу 21 строку, а получу, например, 20. Подборка коэффициэнта вызывает много вопросов, потому что потом я захочу поменять текст и все съедет. Если совсем коротко, то как выполнить такую команду: Memo1->First_Draw_Item(Line)_Number=i?
0
|
|
| 01.11.2015, 23:24 | |
|
Ответы с готовыми решениями:
8
TMemo: выделение выбранной строки цветом
Прокрутка ScrollBar в TMemo по таймеру в Android приложении |
|
2 / 2 / 0
Регистрация: 09.09.2015
Сообщений: 22
|
|
| 02.11.2015, 23:18 [ТС] | |
|
Заработало!!
Только осталась небольшая проблема. Сообщение EM_SCROLLCARET сбрасывает меня не в начало, а в конец текста. Я сделал цикл for (unsigned i = 0; i < 1000; i++)Memo1->Lines->Add(i); и после отправки двух сообщений (i=15) окно показывает последнюю пятерку( 995;996;997;998;999). Если не посылать сообщение EM_SCROLLCARET, то все нормально, но понятно, что без каретки пролистывание строк будет суммироваться. Спасибо за ответ, подскажите плз, как выставить каретку в начало через SendMessage. И еще вопрос. Возможно ли получить указатель TScrollbar из компонента?
0
|
|
|
2 / 2 / 0
Регистрация: 09.09.2015
Сообщений: 22
|
|
| 04.11.2015, 02:01 [ТС] | |
|
Memo1->SelStart = 0; не работает. Я пробовал и CaretPos и Cursor и другие свойства. Единственное, что меняет индекс первой отрисовываемой строки это функция ScrollBy. Еще я пробовал делать Clear() и рисовать все заного, но это ужасно.
Указатель на TScrollbar нужен чтобы задавать шаг прогрутки и допл. настройки (SmallChange, Min, Max). Главная цель уменьшить количество действий с TMemo. Когда я читаю текст или занимаюсь редактированием, то кнопками на скроле(вверх и вниз на строку) я почти не пользуюсь, листаю сразу по слайдеру. Если перевести SmallChange с единицы на собственную величину, например, на 15% от всего, то большие тексты я смогу пролистывать быстрее и попадать, например, в середину документа сразу без прицеливания. Еще можно использовать клавишу ScrollDown как пролистывание всех видимых строк (те в мемо нарисовано с 0 по 20 строк, я нажал один раз ScrollDown и мемо нарисовал строки с 20 по 40). Я рассматривал вариант где можно создать дополнительный скрол и через него все подкрутить. Но такое решение вызывает у меня проектировочную печаль.
0
|
|
|
Супер-модератор
|
||
| 04.11.2015, 09:42 | ||
0
|
||
|
Практикантроп
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
|
||
| 04.11.2015, 09:52 | ||
0
|
||
|
2 / 2 / 0
Регистрация: 09.09.2015
Сообщений: 22
|
||
| 04.11.2015, 13:16 [ТС] | ||
|
Да, все работает.
Я понял Memo1->SelStart = 0; SendMessage(Memo1->Handle, EM_LINESCROLL, 0, i); Сейчас я написал Memo1->SelStart = 0; SendMessage(Memo1->Handle, EM_SCROLLCARET, 0, 0); SendMessage(Memo1->Handle, EM_LINESCROLL, 0, i); И все заработало. Спасибо за ответ, теперь все супер ))))
1
|
||
| 04.11.2015, 13:16 | |
|
Помогаю со студенческими работами здесь
9
DataGrid как сделать выделение всей строки [WPF] Как сделать выделение строки цветом в listBox? Выделение текста в TMemo Как сделать скроллинг в TMemo?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|