Экранный текст контрола, заданного как List

Clarion, Clarion 7

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
kreator
Ветеран
Сообщения: 2961
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Экранный текст контрола, заданного как List

Сообщение kreator » 26 Октябрь 2018, 11:59

С10. Есть контрол, заданный вот так:

Код: Выделить всё

LIST,AT(133,117,357,10),USE(LOC:Display),GRID(COLOR:Gainsboro),DROP(10),FORMAT('200L(2)_M*@s50@'), |
                FROM('Внутренние вопросы производства|#1|Проблемы с технологической/кон' & |
                'структорской документацией|#2|Проблемы с инструментом,СТО|#3|Вопросы к' & |
                ' участку комплектации|#4|Проблемы по качеству (со сторонними организац' & |
                'иями)|#5|Проблемы по качеству (КнАФ)|#6'),#ORDINAL(11)
Нужно узнать название выбранного пользователем пункта. Как? prop:ScreenText, prop:Text не идёт. Парсить prop:From?
We are hard at work… for you. :)

gopstop2007
Ветеран
Сообщения: 1136
Зарегистрирован: 25 Март 2009, 21:55

Экранный текст контрола, заданного как List

Сообщение gopstop2007 » 26 Октябрь 2018, 12:03

а просто CHOICE(?LOC:Display) не проходит?
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3711
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Экранный текст контрола, заданного как List

Сообщение Игорь Столяров » 26 Октябрь 2018, 12:32

gopstop2007 писал(а):
26 Октябрь 2018, 12:03
а просто CHOICE(?LOC:Display) не проходит?
Неа. Choice() вернёт номер выбранной записи в LIST. Если нужно именно вот так, то можно задать каждую строку одинаковой
длины (дополнить пробелами) и тогда без проблем вырезать нужный кусок. Что-то вроде:

Код: Выделить всё

   Sub(?Loc:Display{Prop:From},(40 + 2) * (Choice(?Loc:Display) - 1) + 1,40)
«V» значит Вендетта !

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2102
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Экранный текст контрола, заданного как List

Сообщение Дед Пахом » 26 Октябрь 2018, 12:56

Можно выкинуть из FROM номера между пунктами(|#1, |#2), а Loc:Display объявить как STRING(100), тогда в ней и будет название.
С уважением, ДП

kreator
Ветеран
Сообщения: 2961
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Экранный текст контрола, заданного как List

Сообщение kreator » 26 Октябрь 2018, 15:09

А ещё лучше этот список заполнять из базы, из какого-нибудь справочника. Попробую пока тупой поиск в prop:From. Это надо срочно. Хотя должно быть хотя бы недокументированное решение.
We are hard at work… for you. :)

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3711
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Экранный текст контрола, заданного как List

Сообщение Игорь Столяров » 26 Октябрь 2018, 15:38

kreator писал(а):
26 Октябрь 2018, 15:09
лучше этот список заполнять из базы, из какого-нибудь справочника
Так а в чём проблема ? Это кстати, намного проще. По запросу из БД формируете QUEUE и подсовываете её в Ваш контрол.
И получаете любое значение по GET(QUEUE,Choice(?Loc:Display)) для выбранной строки … ;)
«V» значит Вендетта !

gopstop2007
Ветеран
Сообщения: 1136
Зарегистрирован: 25 Март 2009, 21:55

Экранный текст контрола, заданного как List

Сообщение gopstop2007 » 26 Октябрь 2018, 15:42

kreator писал(а):
26 Октябрь 2018, 11:59
С10. Есть контрол, заданный вот так:

Код: Выделить всё

LIST,AT(133,117,357,10),USE(LOC:Display),GRID(COLOR:Gainsboro),DROP(10)
а чего сразу combo не взяли?

Код: Выделить всё

COMBO(@s20),AT(85,65,153,12),USE(l_vidoplati),VSCROLL,DROP(2,153),FLAT,FROM('Приход ден' & |
            'ег|#Приход|Расход денег|#Расход'),REQ,SKIP,#ORDINAL(12)
Результат всегда в l_vidoplati
“Есть всего 2 типа языков: те, на которые все жалуются и те, которыми никто не пользуется.” — Бьерн Страуструп

kreator
Ветеран
Сообщения: 2961
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Экранный текст контрола, заданного как List

Сообщение kreator » 26 Октябрь 2018, 16:11

Игорь Столяров писал(а):
26 Октябрь 2018, 15:38
kreator писал(а): ↑
26 Октябрь 2018, 15:09
лучше этот список заполнять из базы, из какого-нибудь справочника

Так а в чём проблема ? Это кстати, намного проще. По запросу из БД формируете QUEUE и подсовываете её в Ваш контрол.
И получаете любое значение по GET(QUEUE,Choice(?Loc:Display)) для выбранной строки … ;)
Наша специфика. Чтобы провести изменения в БД нужны согласования и т.д. :D Согласен, дурдом.
gopstop2007 писал(а):
26 Октябрь 2018, 15:42
а чего сразу combo не взяли?
Я что-то давно отвык от строковых переменных в таком контексте. Реально нужно только значение. Практически всегда этого достаточно. А это я пытаюсь костыль подставить, поскольку времени нет. Как уже сам понимаю - временный. Буду делать справочник.
We are hard at work… for you. :)

Аватара пользователя
RaFaeL
Ветеран
Сообщения: 755
Зарегистрирован: 24 Март 2009, 17:59
Откуда: НН
Контактная информация:

Экранный текст контрола, заданного как List

Сообщение RaFaeL » 26 Октябрь 2018, 20:29

Руками в коде очередь из двух полей заполни и всё. Затем по choice значение получишь

Yufil
Ветеран движения
Сообщения: 1035
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

Экранный текст контрола, заданного как List

Сообщение Yufil » 29 Октябрь 2018, 16:53

1. Есть функция Contents( ?list ), покажет выбранное значение - независимо, есть ли Use-переменная.

2. А дальше примерно так:
Topic# = Instring( ?List{Prop:From}, '|#' & Contents(?List) & '|', 1, 1) ! Найдём вхождение выбранного значения
IF Topic# = 0
Return( Contents(?List) )
ELSE
! Здесь ищем символ '|' , предшествующий Topic# и выбираем подстроку. Где-то так...
END

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2102
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Экранный текст контрола, заданного как List

Сообщение Дед Пахом » 02 Ноябрь 2018, 12:22

Мало кто знает, что в версии 10.11975 появились очень мощные пользовательские свойства:
FEATURE: Implemented user-defined properties:
A user-defined property allows you to associate a string value with any entity's standard properties
for example: built-in variables (SYSTEM, PRINTER, TARGET), WINDOWs, REPORTs,
controls, bands, etc. The syntax of user-defined properties is the
same as for standard properties but string (constant or expression)
is used to identify the property rather than property number:

[target $] object {property-name [, index]}

The name of the user-defined property is case insensitive. It cannot be equal to the name of any
standard PROP:* property with or without "PROP:" prefix.
The name also can't begin with Numeric digits.

For OLE controls names of user-defined properties cannot
be equal to any of the OLE/OCX's properties.

If the index is missing or equal to 0, it is treated as 1.

Examples:

SYSTEM {'User-Name'} = 'Frank Sinatra' !Set the name of the current user
MESSAGE('the user is: ' & SYSTEM{'User-Name'}) !displays the text 'Frank Sinatra'
Можно сделать так:

Код: Выделить всё

  
  !- после OPEN(Window)
  ?LOC:Display{'Item-Name', 1} = 'Внутренние вопросы производства'
  ?LOC:Display{'Item-Name', 2} = 'Проблемы с технологической/конструкторской документацией'
  ?LOC:Display{'Item-Name', 3} = 'Проблемы с инструментом,СТО'
  ?LOC:Display{'Item-Name', 4} = 'Внутренние вопросы производства'
  ?LOC:Display{'Item-Name', 5} = 'Проблемы по качеству (со сторонними организациями)'
  ?LOC:Display{'Item-Name', 6} = 'Проблемы по качеству (КнАФ)'
  ........
  !- по Event:Accepted
  var:DisplayText = ?LOC:Display{'Item-Name', LOC:Display}
С уважением, ДП

kreator
Ветеран
Сообщения: 2961
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Экранный текст контрола, заданного как List

Сообщение kreator » 02 Ноябрь 2018, 15:14

Дед Пахом писал(а):
02 Ноябрь 2018, 12:22
Мало кто знает, что в версии 10.11975 появились очень мощные пользовательские свойства:
Вообще, это то, что я искал. Хотя я уже ушёл. Но вот у меня не удалось в моём данном случае отобразить в листе присвоенные итемы. Даже дал display(). Но присвоенные значения храняться где-то. Явный просмотр свойства даёт правильный результат. Или это просто дополнительная фича, никак не связанная с prop:From?
We are hard at work… for you. :)

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2102
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

Экранный текст контрола, заданного как List

Сообщение Дед Пахом » 02 Ноябрь 2018, 15:22

kreator писал(а):
02 Ноябрь 2018, 15:14
Или это просто дополнительная фича, никак не связанная с prop:From?
Причём тут prop:From вообще? Перечитайте цитату.
С уважением, ДП

kreator
Ветеран
Сообщения: 2961
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Экранный текст контрола, заданного как List

Сообщение kreator » 02 Ноябрь 2018, 15:47

Yufil писал(а):
29 Октябрь 2018, 16:53
1. Есть функция Contents( ?list ), покажет выбранное значение - независимо, есть ли Use-переменная.
В моём случае выдаёт цифру, значение. Видимо, чудес не бывает.
Дед Пахом писал(а):
02 Ноябрь 2018, 15:22
kreator писал(а):
02 Ноябрь 2018, 15:14
Или это просто дополнительная фича, никак не связанная с prop:From?
Причём тут prop:From вообще? Перечитайте цитату.
Да, не причём. Это определённые пользователем свойства. В моём случае работает как надо. Но вообще специфичная фича. Надо еще придумать где бы она пригодилась.
We are hard at work… for you. :)

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 3711
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

Экранный текст контрола, заданного как List

Сообщение Игорь Столяров » 02 Ноябрь 2018, 16:07

kreator писал(а):
02 Ноябрь 2018, 15:47
Надо еще придумать где бы она пригодилась.
На мой вгляд, эти проперти - бесполезный технологический прибамбас.
В контексте использования для нумерованных массивов строк - проще объявить группу со строками-константами.
И по номеру поля в группе получать значения. Т.е. получается, что-то вроде ITEMIZE, но только для символьных строк … :)
«V» значит Вендетта !

Ответить