Помощь с TEdit

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Помощь с TEdit

Сообщение Keeper » 08.06.2010 14:45:58

Всем привет. Использую Lazarus 0.9.28 под виндами. Имеется TEdit, в который пользователь вводит некую длинную строку. Строка в него не помещается, чтобы увидеть ее части необходимо перемещать курсор. Есть ли какой-нибудь способ получить не всю строку, а только ту ее часть, которую сейчас видно в эдите?
Keeper
новенький
 
Сообщения: 22
Зарегистрирован: 05.08.2009 13:11:06
Откуда: Ярославль

Re: Помощь с TEdit

Сообщение скалогрыз » 08.06.2010 14:47:27

нет.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Помощь с TEdit

Сообщение Keeper » 08.06.2010 15:43:07

Скалогрыз, и функциями winapi нельзя? Печально :(
Keeper
новенький
 
Сообщения: 22
Зарегистрирован: 05.08.2009 13:11:06
Откуда: Ярославль

Re: Помощь с TEdit

Сообщение Timid » 08.06.2010 15:59:36

Есть решение "через костыли".
Обычно длинная строка обрезается спереди, а последний отображаемый символ находится у правой границы бокса.
Поэтому:
Можно попробовать рассчитать количество символов, отрисовываемых в конце строки. Метод TextWidth, в цикле.
Берешь один символ с конца, считаешь длину, сравниваешь с шириной Edit'а, затем два и т.д.
Главное не забыть ассоциировать шрифт Edit'а с той канвой, для которой будешь считать ширину текста.
Timid
постоялец
 
Сообщения: 290
Зарегистрирован: 21.11.2007 21:33:15

Re: Помощь с TEdit

Сообщение and » 10.06.2010 21:25:43

Сделать скриншот и запустить распознавание текста :-D

А если серьёзно, то на WinAPI можно поюзать сообщение EM_GETFIRSTVISIBLELINE:
EM_GETFIRSTVISIBLELINE
wParam = 0; // not used; must be zero
lParam = 0; // not used; must be zero
Parameters
This message has no parameters.
Return Values
The return value is the zero-based index of the uppermost visible line in a multiline edit control. For single-line edit controls, the return value is the zero-based index of the first visible character.
и затем по TextWidth выяснить, сколько ещё символов попадает в клиентскую область.


Дополнение

Ха! Можно ещё проще, через EM_CHARFROMPOS: с (0;0) получаем индекс первого видимого символа, с (clientWidth;clientHeight) - индекс последнего, и берём подстроку от и до.
Аватара пользователя
and
постоялец
 
Сообщения: 124
Зарегистрирован: 16.09.2009 17:11:01
Откуда: г. Гомель, Беларусь


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 37

Рейтинг@Mail.ru