powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как при открытии окна передать в качестве параметра
6 сообщений из 6, страница 1 из 1
Как при открытии окна передать в качестве параметра
    #32373931
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
массив структур.
Возможно ли такое?
...
Рейтинг: 0 / 0
Как при открытии окна передать в качестве параметра
    #32373964
PBuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй через message.powerobjectparm
...
Рейтинг: 0 / 0
Как при открытии окна передать в качестве параметра
    #32373970
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в качестве ObjectParm будет структура содержащая массив структур
...
Рейтинг: 0 / 0
Как при открытии окна передать в качестве параметра
    #32373980
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ermak!
Благоволите, пожалуйста, примерчик!
...
Рейтинг: 0 / 0
Как при открытии окна передать в качестве параметра
    #32375168
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторБлаговолите, пожалуйста, примерчик!

Хорошо, давайте разберемся.
Мы не можем в качестве параметра в окно передать массив. Что бы это обойти необходимо определить структуру в качестве элемента которой может быть массив.

Допустим такую
Код: plaintext
1.
2.
3.
4.
5.
$PBExportHeader$str_arg.srs
$PBExportComments$ Массив аргументов
global type str_arg from structure
any		arg[]
end type


Предположим нам необходимо передать в окно массив таких структур.
Тогда нам необходимо определить стркуктуру элементом которой будт
какая-нибудь структура.

Допустим это будет выше приведенная структура str_arg
Код: plaintext
1.
2.
3.
4.
5.
$PBExportHeader$str_array_of_arg.srs
$PBExportComments$Собственно массив структур str_arg суть многомерный массив
global type str_array_of_arg from structure
str_arg		item[]
end type

Когда Вы определяете структуру, то Вы видите DW с двумя полями:
- Type
- Variable Name
Поле Type - это выподающий список. Но это поле редактируемое . Если в нём отсутствует Необходимый тип переменной, то Вы можите ввести свой - пользовательский тип вручную.

После этого осталость заполнить все наши структуры данными
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
//Var
 str_arg           lstr_arg       //Структура, которая является эл. массива
 str_array_of_arg  lstr_array     //Структура содержащая в себе массив структур
//endVar

//Заполинть lstr_arg
lstr_arg.arg[ 1 ] =  "1 "
lstr_arg.arg[ 2 ] =  "2 "
lstr_array.item[ 1 ] = lstr_arg

//Заполинть lstr_arg
lstr_arg.arg[ 1 ] =  "3 "
lstr_arg.arg[ 2 ] =  "4 "
lstr_array.item[ 2 ] = lstr_arg
//Открыть окно и передать в него массив структур
openWithParm(w_test2, lstr_array)


В вызываемом окне в событии open() принимаем переданный массив структур
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
//Var
 str_arg           lstr_arg       //Структура, которая является эл. массива
 str_array_of_arg  lstr_array     //Структура содержащая в себе массив структур
 Integer           li_arrCount       //Количество структур
 Integer           li_argCount    //Количество аргументов в текущей структуре
 Integer           i, j           //Переменные цикла
 String            ls_retVal      //Переменная результата
//endVar
TRY
    if not isValid(message.PowerObjectParm) then
        messageBox( "Ошибка параметра" , "параметр не был передан в окно" )
        Return
    end if	
    //Получить переданный параметр
    lstr_array = message.PowerObjectParm
    //Получить размерность массива структур
    li_ArrCount = UpperBound(lstr_array.Item)
    //Поочередно выбираем структуру из массива
    for i =  1  to li_ArrCount
        //Выбрать очередную структуру
        lstr_arg = lstr_array.Item[i]
        //Получить размерность массива аргументов в структуре
        li_argCount = upperBound(lstr_arg.arg)
        //поочередно выбираем аргументы из структуры
        for j =  1  to li_argCount
	ls_retVal = String(lstr_arg.arg[j])
	messageBox( "Результат" , ls_retVal)
        next	
    next	
CATCH (Throwable t)
    messageBox( "Ошибка выборки параметров" , t.text)	
END TRY	

Вот, я проверил, у меня работает PB 9.0.1 Build 7066
Удачи!
...
Рейтинг: 0 / 0
Как при открытии окна передать в качестве параметра
    #32375219
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное спасибо за подробный ответ!
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как при открытии окна передать в качестве параметра
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]