![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Exploited |
|
|||
|
Unregistered |
Усем привет!
Как вывести ScrollBars в Memo1 только тогда, когда пользователь ввел текст, больше размера окна Memo1? Т.е нужно, чтобы ScrollBars не постоянно был виден, а только тогда, когда нужен. Добавить ScrollBars не проблема: Memo1.ScrollBars := ssVertical; А как отловить нужный мне момент? |
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
TMemo.onChange очевидно
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Exploited |
|
|||
|
Unregistered |
Да, понимаю, но как отследить, что пора показывать прокрутку?
|
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Видимо когда длина текущей строки становится больше клиентской области визуального компонента. Длину можно определить с помощью ф-ии TCanvas.TextWidth()
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Exploited |
|
|||
|
Unregistered |
А нелучше ли как-нибудь построчно это сделать? Прокрутка то у меня вертикальная.
|
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Если нужно отследить вертикальную прокрутку, то тогда ещё легче.
Нужно проверять когда кол-во строк превысит высоту в пикселях чем клиентская высота TMemo т.е. когда выполнится следующее условие Т.к. шрифт у TMemo одинаков везде, то With Memo1 Do IF Height>(Canvas.TextHeight(Lines[0])+2)*Lines.Count then ScrollBars:=ssNone else ScrollBars:=ssVertical; Также видимо этот обработчик придётся вызывать и с TMemo.onKeyUp также. Помучайте этот кусочек кода. -------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Exploited |
|
|||
|
Unregistered |
Отлично!
Спасибочки! |
|||
|
||||
| Exploited |
|
|||
|
Unregistered |
Код работает не плохо, но есть одно но: когда появляется прокрутка, курсор перескакивает в начало самой первой строки. Как от этого избавиться?
|
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Очевидно запоминать TMemo.StartPos, а потом его восстанавливать.
-------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Exploited |
|
|||
|
Unregistered |
У TMemo нет такого свойства StartPos, по крайней мере в Delphi3.
|
|||
|
||||
| Song |
|
|||
![]() Sysman.ru ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1095 Регистрация: 2.6.2002 Репутация: 2 Всего: 4 |
Да, конечно же я перепутал классы. Нужное нам свойство - это TMemo.SelStart а не StartPos
Чтобы искупить вину от ошибки и предотвратить Вас от дальнейших экспериментов пишу Вам финальный код:
Я дико извиняюсь, но у меня вопрос: а зачем Вам это понадобилось если TMemo сам делает появление скроллбаров или я что-то упустил в этой жизни ? -------------------- Прежде чем сказать "Невозможно", подумай, прав ли ты |
|||
|
||||
| Exploited |
|
|||
|
Unregistered |
Спасибо, всё работает!
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |