Давно интересно было, как узнать положение курсора в поле ввода? Как им управлять?
Аналогично про полосы прокрутки у списков.
Доступ к элементам компонента. |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Доступ к элементам компонента. |
TarasBer |
Сообщение
#1
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Давно интересно было, как узнать положение курсора в поле ввода? Как им управлять?
Аналогично про полосы прокрутки у списков. -------------------- |
volvo |
Сообщение
#2
|
Гость |
Цитата как узнать положение курсора в поле ввода? SelStart возвращает позицию курсора. Через него же можно и изменять...Цитата Аналогично про полосы прокрутки у списков. Это доступно через TopIndex (возвращает или изменяет индекс самого верхнего отображаемого в списке элемента). В ListBox точно присутствует. |
TarasBer |
Сообщение
#3
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Это доступно через TopIndex (возвращает или изменяет индекс самого верхнего отображаемого в списке элемента). В ListBox точно присутствует. А если не листбокс, а мемо? Или ещё что-то? Для каждого своё, общего решения нет? -------------------- |
volvo |
Сообщение
#4
|
Гость |
GetScrollPos или GetScrollInfo, чтобы получить текущую позицию прокручиваемого элемента, только что ты с ней потом делать будешь?
|
TarasBer |
Сообщение
#5
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
GetScrollPos или GetScrollInfo, чтобы получить текущую позицию прокручиваемого элемента, только что ты с ней потом делать будешь? Я её буду менять. Пока не получается - позиция меняется, но компонент об этом не знает. Сообщение отредактировано: TarasBer - -------------------- |
volvo |
Сообщение
#6
|
Гость |
После изменения тебе надо будет послать сообщение:
SendMessage({компонент}.Handle, WM_{...}SCROLL, MAKEWPARAM(SB_THUMBPOSITION, NewPos), 0);компоненту, чтобы он тоже об этом узнал... |
TarasBer |
Сообщение
#7
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
После изменения тебе надо будет послать сообщение: SendMessage({компонент}.Handle, WM_{...}SCROLL, MAKEWPARAM(SB_THUMBPOSITION, NewPos), 0);компоненту, чтобы он тоже об этом узнал... Я так понял, достаточно просто послать сообщение, без сетскроллпоса? -------------------- |
volvo |
Сообщение
#8
|
Гость |
Да, достаточно только сообщения.
|
TarasBer |
Сообщение
#9
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Спасибо, работает.
Однако логику зависимости положения полосы прокрутки и сдвига содержимого окна пока понять не могу, почему там всегда от 0 до 127, что оно делает, когда элементов больше, и так далее. Если задать 200 элементов, то зачастую положение возвращается одинаковое для двух соседних, в то время как видно, что это не так. Что-то компонент от меня скрывает. Сообщение отредактировано: TarasBer - -------------------- |
TarasBer |
Сообщение
#10
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
SetScrollRange тоже не помогает - ползунок просто стал доходить не до конца полосы, по-прежнему оставаясь на уровне 127.
-------------------- |
andriano |
Сообщение
#11
|
Гуру Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: 28 |
Откуда цифра 127?
Насколько я помню, в WinAPI по умолчанию устанавливается 100. Ну а изменение диапазона осуществляется точно так же, как и изменение позиции. |
TarasBer |
Сообщение
#12
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Откуда цифра 127? Насколько я помню, в WinAPI по умолчанию устанавливается 100. Не знаю, так получается. Цитата Ну а изменение диапазона осуществляется точно так же, как и изменение позиции. А именно? Какое сообщение надо послать компоненту? -------------------- |
volvo |
Сообщение
#13
|
Гость |
Цитата Однако логику зависимости положения полосы прокрутки и сдвига содержимого окна пока понять не могу, почему там всегда от 0 до 127 Пока ты не расскажешь, с каким компонентом работаешь - это все испорченный телефон, потому что TMemo, например, при попытке взять GetScrollPos возвращает позицию скроллбара в строках (и интервал тоже - в строках: если в Memo.Lines есть 17 строк, то Range - от 0 до 17, если 20 - то от 0 до 20). А вот TRichEdit ведет себя совершенно по-другому: для эксперимента положил на форму RichEdit1 с 5-ю строками, получил range 0 .. 78, при 15 строках range изменился на 0 .. 208, и так далее...Не пытайся сделать универсально, "чтобы работало с любым компонентом", работай с каждым компонентом, используя предназначенные ДЛЯ НЕГО методы. |
TarasBer |
Сообщение
#14
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Не пытайся сделать универсально, "чтобы работало с любым компонентом", работай с каждым компонентом, используя предназначенные ДЛЯ НЕГО методы. Ааа, вот так вот... А как же унификация? Конкретно сейчас мне нужен стринггрид. Потом может понадобиться мемо. -------------------- |
TarasBer |
Сообщение
#15
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Чёрт, я уже пожалел о стринггриде, все перерисовки делаются ТАК медленно, что хоть стреляйся.
-------------------- |
volvo |
Сообщение
#16
|
Гость |
SendMessage(StringGrid1.Handle, WM_SETREDRAW, 0, 0);должно ускорить работу с Гридом... В частности, Грид не будет обновляться после заполнения каждой ячейки, а будет обновлен только после заполнения ВСЕХ ячеек. Или ты о медленной прокрутке? Цитата А как же унификация? А нет унификации... И не предвидится. Каждый компонент используется для определенной задачи, и не надо все валить в одну кучу (я о попытках единообразно работать с разными по сути своей компонентами). Ты ж не будешь список файлов хранить в СтрингГриде, правда? А почему? Равно как и дерево директорий ты хранишь в TreeView, а не в Memo и не в StringGrid-е. Где унификация? StringGrid - так StringGrid везде тогда уже...Цитата я уже пожалел о стринггриде Ты бы задачу озвучил, глядишь и нашли бы более подходящий компонент. |
TarasBer |
Сообщение
#17
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Не знаю, вот такой код тормозит страшно (да, это не Дельфи, а ЦППБилдер, я не думаю, что данном случае это имеет значение):
всё, что на bt - кнопки, что на sg - таблица Таблица используется в не самом лучшем месте: http://tarasber.narod.ru/calc.PNG, да, просто такая организация мне показалась логичной. -------------------- |
volvo |
Сообщение
#18
|
Гость |
Ты делаешь работу вместо компилятора?
Вообще-то это делается ни разу не так (нет необходимости пересчитывать все вручную каждый раз). Один раз располагаешь StringGrid и кнопки как тебе нужно, и устанавливаешь нужные Anchor-ы (у СтрингГрида и у кнопок) в True, тогда как бы ты не изменил размеры формы, элементы с установленными Якорями будут располагаться на ней точно так же друг относительно друга, как и первоначально (что тебе и надо, не так ли?). Единственное, о чем тебе останется позаботиться - это чтобы изменялась ширина столбцов Грида при изменении ширины самого Грида. |
TarasBer |
Сообщение
#19
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Ты делаешь работу вместо компилятора? Недоверчивый я... Цитата Один раз располагаешь StringGrid и кнопки как тебе нужно, и устанавливаешь нужные Anchor-ы (у СтрингГрида и у кнопок) в True, тогда как бы ты не изменил размеры формы, элементы с установленными Якорями будут располагаться на ней точно так же друг относительно друга, как и первоначально (что тебе и надо, не так ли?). Единственное, о чем тебе останется позаботиться - это чтобы изменялась ширина столбцов Грида при изменении ширины самого Грида. Да, я это сделал, но я всё равно вижу, как, например, при развороте на весь экран, кнопки не спеша, одна за другой, переползают вниз. -------------------- |
Текстовая версия | 23.04.2024 13:16 |