Длина текстового поля

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8037
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Длина текстового поля

Сообщение Игорь Столяров »

Привет всем !

Вроде бы простой вопрос ... Есть текстовое поле.
Нужно отображать кол-во набранных в нем символов, т.е. что-то вроде Loc:CurrentSize = Len(Clip(Loc:Text))
И все бы ничего, но хочется это делать при вводе текста, а не по факту завершения ввода в поле.
Т.е. нажал юзер клавишу - значение увеличилось и т.д.
Что-то я попробовал зайти с разных сторон и нифига не получается.
Такой "наворот" в приложении на Clarion вообще возможен ?
Make Clarion Great Again ! 😎
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: Длина текстового поля

Сообщение 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)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8037
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Длина текстового поля

Сообщение Игорь Столяров »

Спасибо ! Все прекрасно работает.

Самое забавное, что я этот вариант (опрос и обновление по таймеру) пробовал, не хватило ума поставить UPDATE перед расчетом текущей длины текстовой строки .... :) Еще раз спасибо за помощь !
Make Clarion Great Again ! 😎
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: Длина текстового поля

Сообщение Admin »

Игорь Столяров писал(а):Спасибо ! Все прекрасно работает.

Самое забавное, что я этот вариант (опрос и обновление по таймеру) пробовал, не хватило ума поставить UPDATE перед расчетом текущей длины текстовой строки .... :) Еще раз спасибо за помощь !
Не лучший вариант. Не помню точно, но может быть можно с атрибутом IMM побаловаться. Может народ что подскажет.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
BOB
Ветеран
Сообщения: 336
Зарегистрирован: 17 Июль 2005, 5:43

Re: Длина текстового поля

Сообщение BOB »

Лучше ртф подключить , работает вполне нормально (ну может кроме запихивания в блоб) , зато можно и ворд использовать .
kreator
✯ Ветеран ✯
Сообщения: 5163
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Длина текстового поля

Сообщение kreator »

Ставим на текстовое поле атрибут IMM. Для события NewSelection этого поля пишем:
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: Длина текстового поля

Сообщение Admin »

kreator писал(а):Ставим на текстовое поле атрибут IMM.
Помнится мне что в свойствах текстового поля нет атрибута IMM :)
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3291
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Длина текстового поля

Сообщение Дед Пахом »

В ШВС есть!
С уважением, ДП
kreator
✯ Ветеран ✯
Сообщения: 5163
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Длина текстового поля

Сообщение kreator »

Sorry. Атрибут IMM только в ENTRY (в стандартных шаблонах). Мой вариант не подходит. Кстати, не понятно, что мешает сделать этот атрибут в TEXT?
We are hard at work… for you. :)
Igor Vesnin
Посетитель
Сообщения: 49
Зарегистрирован: 30 Декабрь 2005, 0:06

Re: Длина текстового поля

Сообщение Igor Vesnin »

1. Можно использовать сабклассинг.
2. Вместо update можно воспользоваться prop:ScreenText
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8037
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Длина текстового поля

Сообщение Игорь Столяров »

В общем-то понятно, что "проблема" сводится к тому, что в момент работы с котролом
не всегда удается получить gjkyjt управление им и значения его парметров, пока контрол не потерял фокус.
То же самое и ListBox .... Как я уже писал - решение в первом ответе, меня полностью устраивает ... :)
Make Clarion Great Again ! 😎
lsgsoftware
Ветеран
Сообщения: 311
Зарегистрирован: 08 Июль 2005, 22:04

Re: Длина текстового поля

Сообщение lsgsoftware »

Не знаю,как для других, но для меня этот вопрос не праздный, воюю с ним много лет.
В добром старом ДОС-кларионе был явный контрол Computed. Просто пишешь формулу
для вычилений и результат сразу отображается в поле computed без смены фокуса.
А винде это исчезло, в доке есть намеки и упоминания(делать через формулу) но явного примера
нет. Хотя если есть поле ввода с выбором из конечного списка, то через словарь мы имеем
отображение в форме виде радио-кнопок. Я всегда при этом рядом добавляю еще просто
строку руками со ссылкой на это поле - при этом выбранное значение отображается
сразу без смены фокуса(так что поже в клаше что-то есть). Вариант Админа конечно хорош, но уж больно муторно.
А хотелось бы что-то попроще. Ну и конечно же, при смене фокуса для поля все отбражается верно
и проблем нет, а хотелось бы без смены фокуса.
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Длина текстового поля

Сообщение 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
Компьютер имеет то преимущество перед мозгом, что им пользуются...
kreator
✯ Ветеран ✯
Сообщения: 5163
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Re: Длина текстового поля

Сообщение kreator »

Для текстового поля нет события NewSelection (во всяком случае в стандартных шаблонах). Поэтому и проблема.
We are hard at work… for you. :)
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Длина текстового поля

Сообщение WadimZapara »

Шаблоны-шаблоны... :x
При чём здесь шаблоны?
А попробовать СЛАБО? :wink: вставить пару строк в EMBEDS для обработки любого события этого поля (например EVENT:Selected)- в конец

OF EVENT:Selected

OF EVENT:NewSelection
! и всё что нужно

OF EVENT:Accepted


P.S. Если будешь ориентироваться только на шаблоны - ничего толкового не напишешь
(думаю - не только - моё мнение)
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Ответить