Длина текстового поля
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Игорь Столяров
- Ветеран движения
- Сообщения: 8037
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Длина текстового поля
Привет всем !
Вроде бы простой вопрос ... Есть текстовое поле.
Нужно отображать кол-во набранных в нем символов, т.е. что-то вроде Loc:CurrentSize = Len(Clip(Loc:Text))
И все бы ничего, но хочется это делать при вводе текста, а не по факту завершения ввода в поле.
Т.е. нажал юзер клавишу - значение увеличилось и т.д.
Что-то я попробовал зайти с разных сторон и нифига не получается.
Такой "наворот" в приложении на Clarion вообще возможен ?
Вроде бы простой вопрос ... Есть текстовое поле.
Нужно отображать кол-во набранных в нем символов, т.е. что-то вроде Loc:CurrentSize = Len(Clip(Loc:Text))
И все бы ничего, но хочется это делать при вводе текста, а не по факту завершения ввода в поле.
Т.е. нажал юзер клавишу - значение увеличилось и т.д.
Что-то я попробовал зайти с разных сторон и нифига не получается.
Такой "наворот" в приложении на Clarion вообще возможен ?
Make Clarion Great Again ! 
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Re: Длина текстового поля
Если по тупому то вот так можно
Код: Выделить всё
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)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
- Игорь Столяров
- Ветеран движения
- Сообщения: 8037
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Re: Длина текстового поля
Спасибо ! Все прекрасно работает.
Самое забавное, что я этот вариант (опрос и обновление по таймеру) пробовал, не хватило ума поставить UPDATE перед расчетом текущей длины текстовой строки ....
Еще раз спасибо за помощь !
Самое забавное, что я этот вариант (опрос и обновление по таймеру) пробовал, не хватило ума поставить UPDATE перед расчетом текущей длины текстовой строки ....

Make Clarion Great Again ! 
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Re: Длина текстового поля
Не лучший вариант. Не помню точно, но может быть можно с атрибутом IMM побаловаться. Может народ что подскажет.Игорь Столяров писал(а):Спасибо ! Все прекрасно работает.
Самое забавное, что я этот вариант (опрос и обновление по таймеру) пробовал, не хватило ума поставить UPDATE перед расчетом текущей длины текстовой строки ....Еще раз спасибо за помощь !
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Re: Длина текстового поля
Лучше ртф подключить , работает вполне нормально (ну может кроме запихивания в блоб) , зато можно и ворд использовать .
-
- ✯ Ветеран ✯
- Сообщения: 5163
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Длина текстового поля
Ставим на текстовое поле атрибут IMM. Для события NewSelection этого поля пишем:
update(?LOC:TempString)
LOC:Len = len(clip(LOC:TempString))
display(?LOC:Len)
Как-то так. Все работает.
update(?LOC:TempString)
LOC:Len = len(clip(LOC:TempString))
display(?LOC:Len)
Как-то так. Все работает.
We are hard at work… for you. 

- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Re: Длина текстового поля
Помнится мне что в свойствах текстового поля нет атрибута IMMkreator писал(а):Ставим на текстовое поле атрибут IMM.

Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
-
- ✯ Ветеран ✯
- Сообщения: 5163
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Длина текстового поля
Sorry. Атрибут IMM только в ENTRY (в стандартных шаблонах). Мой вариант не подходит. Кстати, не понятно, что мешает сделать этот атрибут в TEXT?
We are hard at work… for you. 

-
- Посетитель
- Сообщения: 49
- Зарегистрирован: 30 Декабрь 2005, 0:06
Re: Длина текстового поля
1. Можно использовать сабклассинг.
2. Вместо update можно воспользоваться prop:ScreenText
2. Вместо update можно воспользоваться prop:ScreenText
- Игорь Столяров
- Ветеран движения
- Сообщения: 8037
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 28 раз
- Поблагодарили: 96 раз
Re: Длина текстового поля
В общем-то понятно, что "проблема" сводится к тому, что в момент работы с котролом
не всегда удается получить gjkyjt управление им и значения его парметров, пока контрол не потерял фокус.
То же самое и ListBox .... Как я уже писал - решение в первом ответе, меня полностью устраивает ...
не всегда удается получить gjkyjt управление им и значения его парметров, пока контрол не потерял фокус.
То же самое и ListBox .... Как я уже писал - решение в первом ответе, меня полностью устраивает ...

Make Clarion Great Again ! 
-
- Ветеран
- Сообщения: 311
- Зарегистрирован: 08 Июль 2005, 22:04
Re: Длина текстового поля
Не знаю,как для других, но для меня этот вопрос не праздный, воюю с ним много лет.
В добром старом ДОС-кларионе был явный контрол Computed. Просто пишешь формулу
для вычилений и результат сразу отображается в поле computed без смены фокуса.
А винде это исчезло, в доке есть намеки и упоминания(делать через формулу) но явного примера
нет. Хотя если есть поле ввода с выбором из конечного списка, то через словарь мы имеем
отображение в форме виде радио-кнопок. Я всегда при этом рядом добавляю еще просто
строку руками со ссылкой на это поле - при этом выбранное значение отображается
сразу без смены фокуса(так что поже в клаше что-то есть). Вариант Админа конечно хорош, но уж больно муторно.
А хотелось бы что-то попроще. Ну и конечно же, при смене фокуса для поля все отбражается верно
и проблем нет, а хотелось бы без смены фокуса.
В добром старом ДОС-кларионе был явный контрол Computed. Просто пишешь формулу
для вычилений и результат сразу отображается в поле computed без смены фокуса.
А винде это исчезло, в доке есть намеки и упоминания(делать через формулу) но явного примера
нет. Хотя если есть поле ввода с выбором из конечного списка, то через словарь мы имеем
отображение в форме виде радио-кнопок. Я всегда при этом рядом добавляю еще просто
строку руками со ссылкой на это поле - при этом выбранное значение отображается
сразу без смены фокуса(так что поже в клаше что-то есть). Вариант Админа конечно хорош, но уж больно муторно.
А хотелось бы что-то попроще. Ну и конечно же, при смене фокуса для поля все отбражается верно
и проблем нет, а хотелось бы без смены фокуса.
- WadimZapara
- Активист
- Сообщения: 181
- Зарегистрирован: 11 Июнь 2008, 12:11
- Откуда: Тамбов
Re: Длина текстового поля
Господа, а разве не работает следующее:
Начало_Выделения = ?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
Начало_Выделения = ?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
Компьютер имеет то преимущество перед мозгом, что им пользуются...
-
- ✯ Ветеран ✯
- Сообщения: 5163
- Зарегистрирован: 28 Май 2009, 15:54
- Откуда: Москва
- Благодарил (а): 11 раз
- Поблагодарили: 26 раз
Re: Длина текстового поля
Для текстового поля нет события NewSelection (во всяком случае в стандартных шаблонах). Поэтому и проблема.
We are hard at work… for you. 

- WadimZapara
- Активист
- Сообщения: 181
- Зарегистрирован: 11 Июнь 2008, 12:11
- Откуда: Тамбов
Re: Длина текстового поля
Шаблоны-шаблоны...
При чём здесь шаблоны?
А попробовать СЛАБО?
вставить пару строк в EMBEDS для обработки любого события этого поля (например EVENT:Selected)- в конец
OF EVENT:Selected
OF EVENT:NewSelection
! и всё что нужно
OF EVENT:Accepted
P.S. Если будешь ориентироваться только на шаблоны - ничего толкового не напишешь
(думаю - не только - моё мнение)

При чём здесь шаблоны?
А попробовать СЛАБО?

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