Страница 1 из 2
Длина текстового поля
Добавлено: 19 Сентябрь 2009, 11:55
Игорь Столяров
Привет всем !
Вроде бы простой вопрос ... Есть текстовое поле.
Нужно отображать кол-во набранных в нем символов, т.е. что-то вроде Loc:CurrentSize = Len(Clip(Loc:Text))
И все бы ничего, но хочется это делать при вводе текста, а не по факту завершения ввода в поле.
Т.е. нажал юзер клавишу - значение увеличилось и т.д.
Что-то я попробовал зайти с разных сторон и нифига не получается.
Такой "наворот" в приложении на Clarion вообще возможен ?
Re: Длина текстового поля
Добавлено: 21 Сентябрь 2009, 2:21
Admin
Если по тупому то вот так можно
Код: Выделить всё
PROGRAM
MAP
END
str11 string(200)
Window WINDOW('Caption'),AT(,,168,115),FONT('MS Sans Serif',8,,FONT:regular),IMM,TIMER(10),GRAY,DOUBLE
TEXT,AT(54,23,60,48),USE(str11),BOXED
PROMPT('Prompt 1'),AT(54,78),USE(?Prompt1)
END
CODE
OPEN(Window)
ACCEPT
CASE EVENT()
OF EVENT:Timer
UPDATE
?Prompt1{PROP:Text} = LEN(CLIP(str11))
END
END
CLOSE(Window)
Re: Длина текстового поля
Добавлено: 21 Сентябрь 2009, 9:31
Игорь Столяров
Спасибо ! Все прекрасно работает.
Самое забавное, что я этот вариант (опрос и обновление по таймеру) пробовал, не хватило ума поставить UPDATE перед расчетом текущей длины текстовой строки ....

Еще раз спасибо за помощь !
Re: Длина текстового поля
Добавлено: 21 Сентябрь 2009, 14:31
Admin
Игорь Столяров писал(а):Спасибо ! Все прекрасно работает.
Самое забавное, что я этот вариант (опрос и обновление по таймеру) пробовал, не хватило ума поставить UPDATE перед расчетом текущей длины текстовой строки ....

Еще раз спасибо за помощь !
Не лучший вариант. Не помню точно, но может быть можно с атрибутом IMM побаловаться. Может народ что подскажет.
Re: Длина текстового поля
Добавлено: 21 Сентябрь 2009, 16:56
BOB
Лучше ртф подключить , работает вполне нормально (ну может кроме запихивания в блоб) , зато можно и ворд использовать .
Re: Длина текстового поля
Добавлено: 21 Сентябрь 2009, 20:07
kreator
Ставим на текстовое поле атрибут IMM. Для события NewSelection этого поля пишем:
update(?LOC:TempString)
LOC:Len = len(clip(LOC:TempString))
display(?LOC:Len)
Как-то так. Все работает.
Re: Длина текстового поля
Добавлено: 22 Сентябрь 2009, 0:47
Admin
kreator писал(а):Ставим на текстовое поле атрибут IMM.
Помнится мне что в свойствах текстового поля нет атрибута IMM

Re: Длина текстового поля
Добавлено: 22 Сентябрь 2009, 10:08
Дед Пахом
В ШВС есть!
Re: Длина текстового поля
Добавлено: 22 Сентябрь 2009, 16:16
kreator
Sorry. Атрибут IMM только в ENTRY (в стандартных шаблонах). Мой вариант не подходит. Кстати, не понятно, что мешает сделать этот атрибут в TEXT?
Re: Длина текстового поля
Добавлено: 23 Сентябрь 2009, 1:07
Igor Vesnin
1. Можно использовать сабклассинг.
2. Вместо update можно воспользоваться prop:ScreenText
Re: Длина текстового поля
Добавлено: 23 Сентябрь 2009, 10:44
Игорь Столяров
В общем-то понятно, что "проблема" сводится к тому, что в момент работы с котролом
не всегда удается получить gjkyjt управление им и значения его парметров, пока контрол не потерял фокус.
То же самое и ListBox .... Как я уже писал - решение в первом ответе, меня полностью устраивает ...

Re: Длина текстового поля
Добавлено: 25 Сентябрь 2009, 10:35
lsgsoftware
Не знаю,как для других, но для меня этот вопрос не праздный, воюю с ним много лет.
В добром старом ДОС-кларионе был явный контрол Computed. Просто пишешь формулу
для вычилений и результат сразу отображается в поле computed без смены фокуса.
А винде это исчезло, в доке есть намеки и упоминания(делать через формулу) но явного примера
нет. Хотя если есть поле ввода с выбором из конечного списка, то через словарь мы имеем
отображение в форме виде радио-кнопок. Я всегда при этом рядом добавляю еще просто
строку руками со ссылкой на это поле - при этом выбранное значение отображается
сразу без смены фокуса(так что поже в клаше что-то есть). Вариант Админа конечно хорош, но уж больно муторно.
А хотелось бы что-то попроще. Ну и конечно же, при смене фокуса для поля все отбражается верно
и проблем нет, а хотелось бы без смены фокуса.
Re: Длина текстового поля
Добавлено: 12 Октябрь 2009, 0:37
WadimZapara
Господа, а разве не работает следующее:
Начало_Выделения = ?TextBox{PROP:SelStart}
Конец_Выделения = ?TextBox{PROP:SelEnd}
Длина = Len(?TextBox{PROP:ScreenText})
---
вычислять для FIELD() = ?TextBox по
EVENT:NewSelection, (при необходимости - EVENT:DRAG, EVENT:DROP, EVENT:ACCEPTED, EVENT:PreAlertKey, для окна - EVENT:LoseFocus)
не помню, почему именно так - но у меня работает сохранение текущей позиции для последующей вставки и прочего:
OF EVENT:NewSelection
If Focus() = ?TextBox Then
t0 = ?TextBox{PROP:SelStart}
t1 = ?TextBox{PROP:SelEnd}
End
Re: Длина текстового поля
Добавлено: 13 Октябрь 2009, 20:43
kreator
Для текстового поля нет события NewSelection (во всяком случае в стандартных шаблонах). Поэтому и проблема.
Re: Длина текстового поля
Добавлено: 18 Октябрь 2009, 23:54
WadimZapara
Шаблоны-шаблоны...
При чём здесь шаблоны?
А попробовать СЛАБО?

вставить пару строк в EMBEDS для обработки любого события этого поля (например EVENT:Selected)- в конец
OF EVENT:Selected
OF EVENT:NewSelection
! и всё что нужно
OF EVENT:Accepted
P.S. Если будешь ориентироваться только на шаблоны - ничего толкового не напишешь
(думаю - не только - моё мнение)