Добрый день. Есть листбокс:
LIST,AT(244,68,100,12),USE(?Del),DROP(2),FROM('Удалять!Не удалять')
Требуется получить текущий выбранный текст. Подскажите с помощью какой проперти это можно сделать?
С уважением, Ставич Олег
Укрсиббанк г.Харьков
oldstav@ukrsibbank.com
(Добавление)
Просто надо задействовать Use-переменную
Del String(10)
LIST,AT(244,68,100,12),USE(Del),DROP(2),FROM('Удалять!Не удалять')
If Del='Удалять'
....
---------------------------------------
C уважением,
Юрий Философов,
Главный программист
Корпорация "Диполь", Саратов
E-mail yufil@tacis-dipol.ru (служ)
yufil@mail.ru (дом)
ICQ#75924439
Hi,
PROP:Selected
[...] It also identifies the currently highlighted entry in a LIST or COMBO control (usually coded as PROP:Selected for this purpose).
WBR, Nick Tsigouro. MailTo:Nick@arsis.ru
Написал: ClaList(2)
Текст из ListBox
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
на С4 такой проперти нет , так что пришлось воспользоваться советом Юрия.
C уважением, Ставич Олег
Ну тогда
CHOICE( [control] )
CHOICE Returns a user selection number.
control A field equate label of a LIST, COMBO, SHEET, or OPTION control.
The CHOICE procedure returns the sequence number of a selected item in an OPTION structure, SHEET structure, LIST box, or COMBO control
WBR, Nick Tsigouro. MailTo:Nick@arsis.ru
Блин, ну читайте вопрос, требовалось получить ТЕКСТ, а не номер.
CHOICE(?List) возвращает НОМЕР.
С уважением, Ставич Олег
Result = !
CHOOSE(CHOICE(?List)=1, !
SUB(?list{prop:from},1,INSTRING('!',?list{prop:from},1,1)-1), !
SUB(?list{prop:from},INSTRING('!',?list{prop:from},1,1)+1,LEN(?list{prop:fro
m})))
Andrew Myalin
andrew@arsis.ru
http://mavcla.arsis.ru (MAV Direct ODBC)
IRC: IRC.RINET.RU:6669, Channel #Clarion, AndrewM
ICQ: 10659412
Yahoo group: clarion@yahoogroups.com
Ну это типа вместо
?List{PROP:что-то}
Муторно и не удобно. Я пока обошелся USE-переменной.
С уважением, Ставич Олег
интеренсо, а как ? просто у меня есть схожие мес та, я решаю через выбор номера и по нему получаю текст.
--
Best regards,
Курко Максим mailto:ClaList@enigmasoft.com.ua
ICQ: <164766643>
Во первых номер отдельно, текст отдельно. Номер используется как параметр для вызова, ну скажем, определенной процедуры. Текст же нужен для того, что
бы записать в лог, в каком режиме эта процедура вызывается. В лог просто пишется с экрана:
WriteLog(?Promp1{Prop:text} & ' ' & Тут_текст_из_ListBox1)
WriteLog(?Promp2{Prop:text} & ' ' & Тут_текст_из_ListBox2)
...
WriteLog(?PrompN{Prop:text} & ' ' & Тут_текст_из_ListBoxN)
Просто раньше вместо List был Combo (без Use-переменной), и для него хватало
Prop:ScreenText:
WriteLog(?Promp1{Prop:text} & ' ' & ?Combo1{Prop:ScreenText})
сейчас же я полностью отказался от использования Combo. И был несколько расстроен, что старая конструкция перестала работать. Но спасибо Юре, подсказал простое решение проблемы. Скажем так, наличие лишней переменной, меня нисколько не смущает. Хотя конечно хотелось бы обойтись без нее, при этом оставив простоту текста программы.
С уважением, Ставич Олег
А делов-то всего переменную завести.
Михаил
(Добавление)
--
Best regards,
Курко Максим
Хм, это по моему даст номер, а не текст...
OldStav
tempvar1 = 'Удалять'
tempvar2 = 'Не удалять'
tempvar0 = clip(tempvar1)&'!'&clip(tempvar2)
LIST,AT(244,68,100,12),USE(?Del),DROP(2),FROM(tempvar0)
needtext = choose(choice(?del),tempvar1,tempvar2)
изврат, конечно... ))
--
Best regards,
Курко Максим
Конечно изврат, если учесть что таких контролов порядка 10
С уважением, Ставич Олег
ну, тогда действительно можно использовать метод, который предложил Andrew Myalin, с небольшой поправкой :
--
Best regards,
Курко Максим
я так понимаю имеется в виду 10 контролов с двумя значениями в каждом, изврата в мною предложенном варианте не вижу и для 10 контролов код по размеру не шибко пухнет:
чего тут сложного и смайликовского, не вижу.
ЗЫ
PROP:ScreenText не работает в данном контексе
PROP:Selected вернёт то же, что и CHOICE(?List)
переменные плодить применительно к данной задаче, я смысла не вижу немного расширив код (одЫн раз и в одном месте) и он будет универсальный для любого количества позиций в PROP:From
Andrew Myalin
В принципе можно действительно написать функцию, которая будет возвращать текст из List. Только вообщем случае код ее будет не таким простым, как для двух значений.
С уважением, Ставич Олег
почему, тот код, который предложил я будет работать для любого кол-ва значений... loop, он и в африке loop
--
Best regards,
Курко Максим
А если у меня листбоксы типа ('Удалять!#1!Не удалять!#0')?
Дуга Михаил <mikeduglas@intercare.ru>
Andrew Myalin
Manual (FROM (set listbox data source)):
If a string constant is specified as the source, the individual data elements must be delimited by a vertical bar (!) character. To include a vertical bar as part of one data element, place two adjacent vertical bars in the string (!!), and only one will be displayed.
Надо ещё случай сдвоенных полосок учесть
Михаил
Так и prop:selected тоже даст номер. Если всенепременно хочется текст и всенепременно именно из контрола, то только объявлять переменную, как сказал Юра.
PS. В данном конкретном случае имхо лучше CHECK. Или RADIO.
WBR, Nick Tsigouro
Можно еще попробовать ?Del{PROP:ScreenText}
Удачи!
__________________________________
Владимир Якимченко (ICQ: 16993194)
С уважением,
Сергей zap277@softhome.net
Что бы в лог записать.
С уважением, Ставич Олег
(Добавление)
Andrew Myalin
Написал: ClaList(2)
C уважением, Ставич Олег
Ну тогда
CHOICE( [control] )
CHOICE Returns a user selection number.
control A field equate label of a LIST, COMBO, SHEET, or OPTION control.
The CHOICE procedure returns the sequence number of a selected item in an OPTION structure, SHEET structure, LIST box, or COMBO control
WBR, Nick Tsigouro. MailTo:Nick@arsis.ru
Блин, ну читайте вопрос, требовалось получить ТЕКСТ, а не номер.
CHOICE(?List) возвращает НОМЕР.
С уважением, Ставич Олег
Result = !
CHOOSE(CHOICE(?List)=1, !
SUB(?list{prop:from},1,INSTRING('!',?list{prop:from},1,1)-1), !
SUB(?list{prop:from},INSTRING('!',?list{prop:from},1,1)+1,LEN(?list{prop:fro
m})))
Andrew Myalin
andrew@arsis.ru
http://mavcla.arsis.ru (MAV Direct ODBC)
IRC: IRC.RINET.RU:6669, Channel #Clarion, AndrewM
ICQ: 10659412
Yahoo group: clarion@yahoogroups.com
Ну это типа вместо
?List{PROP:что-то}
Муторно и не удобно. Я пока обошелся USE-переменной.
С уважением, Ставич Олег
интеренсо, а как ? просто у меня есть схожие мес та, я решаю через выбор номера и по нему получаю текст.
--
Best regards,
Курко Максим mailto:ClaList@enigmasoft.com.ua
ICQ: <164766643>
Во первых номер отдельно, текст отдельно. Номер используется как параметр для вызова, ну скажем, определенной процедуры. Текст же нужен для того, что
бы записать в лог, в каком режиме эта процедура вызывается. В лог просто пишется с экрана:
WriteLog(?Promp1{Prop:text} & ' ' & Тут_текст_из_ListBox1)
WriteLog(?Promp2{Prop:text} & ' ' & Тут_текст_из_ListBox2)
...
WriteLog(?PrompN{Prop:text} & ' ' & Тут_текст_из_ListBoxN)
Просто раньше вместо List был Combo (без Use-переменной), и для него хватало
Prop:ScreenText:
WriteLog(?Promp1{Prop:text} & ' ' & ?Combo1{Prop:ScreenText})
сейчас же я полностью отказался от использования Combo. И был несколько расстроен, что старая конструкция перестала работать. Но спасибо Юре, подсказал простое решение проблемы. Скажем так, наличие лишней переменной, меня нисколько не смущает. Хотя конечно хотелось бы обойтись без нее, при этом оставив простоту текста программы.
С уважением, Ставич Олег
Вот это вот последнее m}))) сильно похоже на издевательский смайлик.Result = !
CHOOSE(CHOICE(?List)=1, !
SUB(?list{prop:from},1,INSTRING('!',?list{prop:from},1,1)-1), !
SUB(?list{prop:from},INSTRING('!',?list{prop:from},1,1)+1,LEN(?list{prop:fro
m})))
А делов-то всего переменную завести.
Михаил
(Добавление)
choice(?Del)LIST,AT(244,68,100,12),USE(?Del),DROP(2),FROM('Удалять!Не удалять')
--
Best regards,
Курко Максим
Хм, это по моему даст номер, а не текст...
OldStav
согласен, можно попробовать так :choice(?Del)
tempvar1 = 'Удалять'
tempvar2 = 'Не удалять'
tempvar0 = clip(tempvar1)&'!'&clip(tempvar2)
LIST,AT(244,68,100,12),USE(?Del),DROP(2),FROM(tempvar0)
needtext = choose(choice(?del),tempvar1,tempvar2)
изврат, конечно... ))
--
Best regards,
Курко Максим
Конечно изврат, если учесть что таких контролов порядка 10
С уважением, Ставич Олег
ну, тогда действительно можно использовать метод, который предложил Andrew Myalin, с небольшой поправкой :
Код: Выделить всё
numstep = choice(?del); start = 1; finish = 1
loop numstep times
finish = instringt('!',?list{prop:from},1,start)
if ~finish then err = 1; break .
start = finish + 1
end
result = sub(?list{prop:from},start-1,finish-start+1)
Best regards,
Курко Максим
я так понимаю имеется в виду 10 контролов с двумя значениями в каждом, изврата в мною предложенном варианте не вижу и для 10 контролов код по размеру не шибко пухнет:
Код: Выделить всё
GetListText FUNCTION(SIGNED Control)
CODE
RETURN CHOOSE(CHOICE(Control)=1,!
SUB(Control{prop:from},1,INSTRING('!',Control{prop:from},1,1)-1),!
SUB(Control{prop:from},INSTRING('!',Control{prop:from},1,1)+1,LEN(Control{pr
op:from})))
ЗЫ
PROP:ScreenText не работает в данном контексе
PROP:Selected вернёт то же, что и CHOICE(?List)
переменные плодить применительно к данной задаче, я смысла не вижу немного расширив код (одЫн раз и в одном месте) и он будет универсальный для любого количества позиций в PROP:From
Andrew Myalin
Это где я сказал, что в контроле 2 значения? Значений могет быть сколько угодно. 2 я привел в примере для простоты.я так понимаю имеется в виду 10 контролов с двумя значениями в каждом,
А сможешь, вот так же в одну строку обобщить для произвольного числа значений?чего тут сложного и смайликовского, не вижу.
Угу, не работает. Из-за чего и проблема.PROP:ScreenText не работает в данном контексе
Так и есть.PROP:Selected вернёт то же, что и CHOICE(?List)
В принципе можно действительно написать функцию, которая будет возвращать текст из List. Только вообщем случае код ее будет не таким простым, как для двух значений.
С уважением, Ставич Олег
почему, тот код, который предложил я будет работать для любого кол-ва значений... loop, он и в африке loop
--
Best regards,
Курко Максим
А если у меня листбоксы типа ('Удалять!#1!Не удалять!#0')?
Дуга Михаил <mikeduglas@intercare.ru>
мы читаем или как?А если у меня листбоксы типа ('Удалять!#1!Не удалять!#0')?
немного расширив код (одЫн раз и в одном месте) и он будет универсальный для любого количества позиций в PROP:From
Код: Выделить всё
GetListText PROCEDURE (SIGNED Control) ! Declare Procedure
loc_Start LONG
loc_End LONG
loc_i LONG
CODE
loc_Start = 1
loc_End = 0
LOOP loc_i = 1 TO CHOICE(Control)
loc_Start = loc_End + 1
loc_End = INSTRING('!',Control{PROP:From},1,loc_Start)
END
RETURN
SUB(Control{PROP:From},loc_Start,CHOOSE(loc_End=0,LEN(Control{PROP:From}) -
loc_Start + 1,loc_End-loc_Start))
Manual (FROM (set listbox data source)):
If a string constant is specified as the source, the individual data elements must be delimited by a vertical bar (!) character. To include a vertical bar as part of one data element, place two adjacent vertical bars in the string (!!), and only one will be displayed.
Надо ещё случай сдвоенных полосок учесть
Михаил
Так и prop:selected тоже даст номер. Если всенепременно хочется текст и всенепременно именно из контрола, то только объявлять переменную, как сказал Юра.
PS. В данном конкретном случае имхо лучше CHECK. Или RADIO.
WBR, Nick Tsigouro
Можно еще попробовать ?Del{PROP:ScreenText}
Удачи!
__________________________________
Владимир Якимченко (ICQ: 16993194)
- если бы этот текст был введен юзером, то понятно, что нужен именно он... а в данном случае зачем ?Хм, это по моему даст номер, а не текст...
С уважением,
Сергей zap277@softhome.net
Что бы в лог записать.
С уважением, Ставич Олег
(Добавление)
ну может быть, хотя форматом ?List рулю то же я и никогда пока что не было случая когда требовались вот такие символы для отображенияНадо ещё случай сдвоенных полосок учесть
Andrew Myalin
Написал: ClaList(2)