Помощь с TEdit
Модератор: Модераторы
Помощь с TEdit
Всем привет. Использую Lazarus 0.9.28 под виндами. Имеется TEdit, в который пользователь вводит некую длинную строку. Строка в него не помещается, чтобы увидеть ее части необходимо перемещать курсор. Есть ли какой-нибудь способ получить не всю строку, а только ту ее часть, которую сейчас видно в эдите?
нет.
Скалогрыз, и функциями winapi нельзя? Печально 
Есть решение "через костыли".
Обычно длинная строка обрезается спереди, а последний отображаемый символ находится у правой границы бокса.
Поэтому:
Можно попробовать рассчитать количество символов, отрисовываемых в конце строки. Метод TextWidth, в цикле.
Берешь один символ с конца, считаешь длину, сравниваешь с шириной Edit'а, затем два и т.д.
Главное не забыть ассоциировать шрифт Edit'а с той канвой, для которой будешь считать ширину текста.
Обычно длинная строка обрезается спереди, а последний отображаемый символ находится у правой границы бокса.
Поэтому:
Можно попробовать рассчитать количество символов, отрисовываемых в конце строки. Метод TextWidth, в цикле.
Берешь один символ с конца, считаешь длину, сравниваешь с шириной Edit'а, затем два и т.д.
Главное не забыть ассоциировать шрифт Edit'а с той канвой, для которой будешь считать ширину текста.
Сделать скриншот и запустить распознавание текста :-D
А если серьёзно, то на WinAPI можно поюзать сообщение EM_GETFIRSTVISIBLELINE:
Дополнение
Ха! Можно ещё проще, через EM_CHARFROMPOS: с (0;0) получаем индекс первого видимого символа, с (clientWidth;clientHeight) - индекс последнего, и берём подстроку от и до.
А если серьёзно, то на WinAPI можно поюзать сообщение EM_GETFIRSTVISIBLELINE:
и затем по TextWidth выяснить, сколько ещё символов попадает в клиентскую область.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.
Дополнение
Ха! Можно ещё проще, через EM_CHARFROMPOS: с (0;0) получаем индекс первого видимого символа, с (clientWidth;clientHeight) - индекс последнего, и берём подстроку от и до.
