powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Вопрос по передаче структуры
18 сообщений из 18, страница 1 из 1
Вопрос по передаче структуры
    #32718387
f45f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Открываю окно через OpenWithParm

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
slim_parm w     // структура

w.window_x 		=  100 
w.window_y 		=  100 
w.window_height =  1000 
w.window_width  =  1000 
OpenWithParm(w_r_slim1,w)

Далее в open-евенте открытого окна
Код: plaintext
1.
2.
3.
4.
5.
6.
slim_parm1 w    //точно такая же структура
w = Message.PowerObjectParm

this.x = w.window_x
this.y = w.window_x
this.width = w.window_width
this.height = w.window_height

Выдает ошибку
Cannot assign object of type slim_parm to variable of type slim_parm at line in open event
...
Рейтинг: 0 / 0
Вопрос по передаче структуры
    #32718433
Leonid_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не воспроизводится
...
Рейтинг: 0 / 0
Вопрос по передаче структуры
    #32718434
Leonid_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл: PB 7.0.3 build 10312
...
Рейтинг: 0 / 0
Вопрос по передаче структуры
    #32718457
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
//
slim_parm w
//
slim_parm1 w

pomoemu raznie strukturi )
...
Рейтинг: 0 / 0
Вопрос по передаче структуры
    #32718461
gz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
gz
Гость
Видимо, структуры создаются внутри окна.
Создайте структуру, как объект PowerBuilder - он появится в библиотеке и будет доступен как глобальная переменная всем окнам
...
Рейтинг: 0 / 0
Вопрос по передаче структуры
    #32718477
f45f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gzВидимо, структуры создаются внутри окна.
Создайте структуру, как объект PowerBuilder - он появится в библиотеке и будет доступен как глобальная переменная всем окнам

Да структуры действительно внутри окна, но их поля идентичны.
Если мне создавать глобальную структуру, то зачем тогда мне передавать ее как параметр?, я ведь и так смогу к ней обратиться.
...
Рейтинг: 0 / 0
Вопрос по передаче структуры
    #32718497
gz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
gz
Гость
Глобально создается объект "структура", а он без данных.
Вы обязаны в обоих окнах определить переменные, тип которых соответствует
данной структуре. Только тогда под структуры выделяется память и Вы можете с ними оперировать.
...
Рейтинг: 0 / 0
Вопрос по передаче структуры
    #32718513
rcryo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз структуры по имени разные, то независимо от содержимого PB будет ругаться
Рекомендую передавать ссылки на объекты.
В простых случаях через строку

Успехов!
...
Рейтинг: 0 / 0
Вопрос по передаче структуры
    #32718522
f45f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял. да, так работает.
Но даже когда в предыдущем случае в отладчике я смотрел Message.PowerObjectParm , то там содержались нужные мне данные. Неужели их нельзя вытянуть?
Спасибо.
...
Рейтинг: 0 / 0
Вопрос по передаче структуры
    #32718581
gz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
gz
Гость
По всей видимости, структура, определенная внутри окна, работает только в данном окне. А название, тип и количество переменных не должно играть никакой роли.
...
Рейтинг: 0 / 0
Вопрос по передаче структуры
    #32718700
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 f45f
зачем создаешь 2 стуктуры с одинаковыми полями ?
...
Рейтинг: 0 / 0
Вопрос по передаче структуры
    #32718764
f45f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zuzuзачем создаешь 2 стуктуры с одинаковыми полями ?

Вопрос не в двух структурах.
Вопрос в Message.PowerObjectParm
в открытом окне PowerObjectParm содержит то, что нужно, т.е.
1. передаваемую структуру (Message.PowerObjectParm)
2. class definitiom

Вопрос, можно ли вытянуть нужные мне значения хоть в структуру, хоть в переменные, без использования глобальной структуры?Или может это противоречит ООП?

С глобальной структурой все без проблем,
т.е. если w экземпляр глобальной структуры, то
Код: plaintext
w = Message.PowerObjectParm
работает.
...
Рейтинг: 0 / 0
Вопрос по передаче структуры
    #32718812
gz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
gz
Гость
Из Help ясно, что структуру, определенную в окне, использовать вне окна "не моги, не моги"

No access to object-level structures outside the object You cannot make object-level structures accessible outside the object because object-level structures are implicitly private.

Не видно ее из другого окна, хоть убей.
...
Рейтинг: 0 / 0
Вопрос по передаче структуры
    #32719088
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВопрос в Message.PowerObjectParm
в открытом окне PowerObjectParm содержит то, что нужно, т.е.
1. передаваемую структуру (Message.PowerObjectParm)
2. class definitiom

Вопрос, можно ли вытянуть нужные мне значения хоть в структуру, хоть в переменные, без использования глобальной структуры?Или может это противоречит ООП?Вы понимаете разницу между типом данных и значением этого типа? Описывая структуру в соответствующем пэйтере, вы создаете новый тип данных, область видимости которого - все приложение.
Если вы описываете структуру в некотором объекте, то область видимости этого типа ограничена этим объектом.

В открытом окне Message.PowerObjectParm содержит не передаваемую структуру, а именно PowerObject. Если хотите, можете считать это указателем на область памяти, содержащую передаваемые данные.
Вот эта ваша строчка
Код: plaintext
w = Message.PowerObjectParm
требует выполнения неявного преобразования типов, по-моему, это очевидно.
...
Рейтинг: 0 / 0
Вопрос по передаче структуры
    #32719823
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gzИз Help ясно, что структуру, определенную в окне, использовать вне окна "не моги, не моги"

No access to object-level structures outside the object You cannot make object-level structures accessible outside the object because object-level structures are implicitly private.

Не видно ее из другого окна, хоть убей.

А у меня видно. Что я неправильно делаю ? :)
Код: plaintext
w_1`s_1 str
...
Рейтинг: 0 / 0
Вопрос по передаче структуры
    #32720852
gz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
gz
Гость
Anatoly MoskovskyА у меня видно. Что я неправильно делаю ? :)
Код: plaintext
w_1`s_1 str

Да... Пришло просветление. Увидел тоже. Себя уже убил.
Встречал такое в операторе CALL. Если можете, расскажите поподробнее об этой конструкции. Спасибо.
...
Рейтинг: 0 / 0
Вопрос по передаче структуры
    #32721065
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gz Anatoly MoskovskyА у меня видно. Что я неправильно делаю ? :)
Код: plaintext
w_1`s_1 str

Да... Пришло просветление. Увидел тоже. Себя уже убил.
Встречал такое в операторе CALL. Если можете, расскажите поподробнее об этой конструкции. Спасибо.

Это просто обращение к вложенному типу. По аналогии с C++:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
class Class1 {
public:
  class Class2 {
  };
};

Class1::Class2 var;
Основное применение, конечно, не структуры приватные из окошек тягать :))
Например, есть библиотека объектов, инкапсулирующих вызовы WinAPI (n_cst_kernel32, n_cst_user32 и т.д., сайт к сожалению уже недоступен, если кому-то надо, могу сюда запостить). Многим ф-ям WinAPI требуются структуры в качестве аргументов. Чтобы объект был независим от других объектов, все необходимые структуры объявляются как локальные, а пользователь на них ссылается через указанный мною синтаксис, например:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
n_cst_kernel32 k32
n_cst_kernel32`win32_find_dataa finddata

String ls_[]
long h
Long li_f =  0 , li_d =  0 
as_dirs[] = ls_[]
as_files[] = ls_[]

h = k32.FindFirstFile(as_root, finddata)
If h <=  0  Then Return - 1  
Do
   If finddata.cfilename = "." or finddata.cfilename = ".." Then Continue
   If of_GetBit(finddata.dwfileattributes,  4 ) =  1  Then
      li_d ++
      as_dirs[li_d] = finddata.cfilename
   Else
      li_f ++
      as_files[li_f] = finddata.cfilename
   End IF
Loop While k32.FindNextFile(h, finddata)
k32.FindClose(h)

Ну и помимо всего, все контролы в визуальных объектах также являются вложенными типами, например реальный тип кнопки cb_1 в окне w_1 такой:
Код: plaintext
w_1`cb_1
...
Рейтинг: 0 / 0
Вопрос по передаче структуры
    #32721126
gz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
gz
Гость
to Anatoly Moskovsky
Честно говоря, не ожидал столь подробного ответа. Спасибо за просвещение.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Вопрос по передаче структуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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