Версия: C6.3 9.053, ABC
Всем привет!
У меня такая проблема, имеется очередь, в ней присутствуют постоянные 2 поля, а количество оставшихся полей не известно, и определяется в ходи работы программы.
Вопрос: Необходимо в теле программы написать такой код, который формирует оставшиеся поля, и выводит их в ListBox'е.
Пробывал описать одно поле (FNew) через массив но не получилось...
TD QUEUE
FName1 STRING(20)
FName2 STRING(20)
FNew LONG,DIM(10)
END
Еще пробывал различные варианты, описанные в других темах, но или я не понял как они работают или просто не выходит.
Например:
col_num# = 10
loop i#=1 to col_num# ! первая колонка уже есть
?List1{proplist:fieldno, i#} = i# ! i# = номер поля в очереди from
?List1{proplist:header, i#} = 'Заголовок ' & i#
?List1{proplist:width, i#} = 50
?List1{proplist:picture , i#} = '@s30' ! например
?List1{proplist:locator , i#} = 0
?List1{proplist:rightborder , i#} = true
?List1{proplist:resize , i#} = true
?List1{proplist:scroll , i#} = true
end
?List1{proplist:lastonline , col_num#} = true
Если я правильно понял, то необходимо сначала здесь описать поля, но через массив не получается, может еще как...
Хотелось бы реализовать это стандартными средствами Clarion.
Заранее блогадарен за любую помощь.
Формирование колонок ListBox
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
-
- Ветеран
- Сообщения: 333
- Зарегистрирован: 21 Сентябрь 2005, 11:05
- Откуда: Нижний Новгород
- Контактная информация:
Стандартными средствами в RunTime сложно формировать очередь. Есть библиотека О. Руденко DynaLib, которая позволяет это делать(может и еще есть, я не знаю), но это за деньги.
Скорее всего тебе можно обойтись стандартными средствами.
Создаешь очередь
TD QUEUE
FName1 STRING(20)
FName2 STRING(20)
FNew1 LONG
FNew2 LONG
FNew3 LONG
FNew4 LONG
FNew5 LONG
FNew6 LONG
...
END
А в ?list{prop:format) нужно подставить сформированную строку, как ее формировать, читай доку по prop:format. Именно сформировать строку, например для данной очереди, если мы хотим отобразить FNew2 и FNew5 то что-то типа
'100L(2)|~FName1~@s20@#1#100L(2)|~FName2~@s20@#2#30R(2)|~FNew2~@n14@#4#30R(2)|~FNew5~@n14@#7#'
А массивы из очереди я не знаю как в LIST выводить, наверное как-нибудь через OVER поля.
Скорее всего тебе можно обойтись стандартными средствами.
Создаешь очередь
TD QUEUE
FName1 STRING(20)
FName2 STRING(20)
FNew1 LONG
FNew2 LONG
FNew3 LONG
FNew4 LONG
FNew5 LONG
FNew6 LONG
...
END
А в ?list{prop:format) нужно подставить сформированную строку, как ее формировать, читай доку по prop:format. Именно сформировать строку, например для данной очереди, если мы хотим отобразить FNew2 и FNew5 то что-то типа
'100L(2)|~FName1~@s20@#1#100L(2)|~FName2~@s20@#2#30R(2)|~FNew2~@n14@#4#30R(2)|~FNew5~@n14@#7#'
А массивы из очереди я не знаю как в LIST выводить, наверное как-нибудь через OVER поля.
TD QUEUE
FName1 STRING(20)
FName2 STRING(20)
FNew1 LONG
FNew2 LONG
FNew3 LONG
FNew4 LONG
FNew5 LONG
FNew6 LONG
...
END
Так, пробывал, отлично получается, но дело в том, что очень муторно создавать так... можно сказать проделывал эту операцую несколько раз, не очень вдохновляет, много времени на это эходит.
А про DynaLib слышал, но это наверное на крайней случай, если не смогу решить проблему стандартными средствами.
FName1 STRING(20)
FName2 STRING(20)
FNew1 LONG
FNew2 LONG
FNew3 LONG
FNew4 LONG
FNew5 LONG
FNew6 LONG
...
END
Так, пробывал, отлично получается, но дело в том, что очень муторно создавать так... можно сказать проделывал эту операцую несколько раз, не очень вдохновляет, много времени на это эходит.
А про DynaLib слышал, но это наверное на крайней случай, если не смогу решить проблему стандартными средствами.
-
- Ветеран
- Сообщения: 333
- Зарегистрирован: 21 Сентябрь 2005, 11:05
- Откуда: Нижний Новгород
- Контактная информация:
Не понял, а в чем проблема? Очередь разве не один раз создавать нужно? Тем более, что описать ее можно в Embed ручками, когда много полей, так проще.Evgen писал(а):Так, пробывал, отлично получается, но дело в том, что очень муторно создавать так... можно сказать проделывал эту операцую несколько раз, не очень вдохновляет, много времени на это эходит.
У меня до использования DynaLib такая схема работала, очередь порядка 200 полей. Заполнять ее удобно, используя оператор WHAT.
-
- Ветеран
- Сообщения: 333
- Зарегистрирован: 21 Сентябрь 2005, 11:05
- Откуда: Нижний Новгород
- Контактная информация:
Геморойно объявлять большую очередь в интерфейсе данных APP. В Embed же можно не только исполняемые операторы писать.Можно привести примерчик описания очереди в Embed с использованием WHAT, в Help'е почитал, вроде понятно но не очень...
В процедуре это Local Data, заходишь туда и:
TD QUEUE
FName1 STRING(20)
FName2 STRING(20)
FNew1 LONG
FNew2 LONG
FNew3 LONG
FNew4 LONG
FNew5 LONG
FNew6 LONG
...
END
А по WHAT:
MyAny ANY
code
loop i#=1 to 10
MyAny &= what(TD,5) ! FNew3
MyAny = i#
add(TD)
end