Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PowerBuilder Новый топик    Ответить
 MDI c ресайзом окон  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 311
добрый день всезанующий алл
я не гуру в РВ, но пишу на нем некоторый код.
под рукой имею РВ 9.0
если нужно еще на что-то посматреть, скажите на что и где это увидеть, я отвечу.

имею следующую проблему:
у меня MDI приложение. в нем я открываю окно, максимизирую его по всей области MDI, но при вызове дочерней формы из нее, на событие добавление или правки - мое родительское окно возвращается в размерах, как до максимизирования. в чем может дело? как это можно лечить? чтобы родительские окна оставались заполненными в MDI приложении, либо сохраняли размер приданный им пользователем, будь то просто ресайзбл ???

огромное спасибо!
16 мар 12, 10:56    [12258498]     Ответить | Цитировать Сообщить модератору
 Re: MDI c ресайзом окон  [new]
PaulJB
Member

Откуда: Киев
Сообщений: 737
Каким образом (методом) вызывается дочерняя форма?
16 мар 12, 11:31    [12258750]     Ответить | Цитировать Сообщить модератору
 Re: MDI c ресайзом окон  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 311
я даже не знаю как ответить на этот вопрос
на конструкторе у dw
this.inv_parmlinkage.of_setdetailwindow("w_card","s")


кнопка от u_cb_add


u_cb_add имет событие clicked

integer li_returnresult
if isValid(idw_parent) then
idw_parent.Post Event pfc_addrow()
else
of_parentinvalid()
end if

не очень силет в наследованиях в РВ. но нужно разобраться.
16 мар 12, 15:55    [12261432]     Ответить | Цитировать Сообщить модератору
 Re: MDI c ресайзом окон  [new]
PaulJB
Member

Откуда: Киев
Сообщений: 737
О, это PFC.
Рекомендую отладчиком найти что то типа open(<имя_вашего_окна>) или opensheet(<имя_вашего_окна>) и рассказать нам.
От метода вызова (открытия) зависит поведение.
16 мар 12, 18:43    [12262913]     Ответить | Цитировать Сообщить модератору
 Re: MDI c ресайзом окон  [new]
Andrew Nagorny
Member

Откуда: СПб
Сообщений: 116
Окно скорее всего открывается в режиме Нормал. Поэтому Максимайз снимается. Нужно перед открытием окна определять в каком режиме родительское окно. И после открытия дочернего восстанавливать режим.
19 мар 12, 10:09    [12271661]     Ответить | Цитировать Сообщить модератору
 Re: MDI c ресайзом окон  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 311
w_sheet lw_sheet
w_master lw_master
IF this.is_detailwindowtype = "s" THEN
window lw_immediate_parent
window lw_mdi_frame
this.idw_requestor.of_GetParentWindow( lw_immediate_parent )
lw_mdi_frame = lw_immediate_parent.ParentWindow()
OpenSheetWithParm (lw_sheet, this, this.is_detailwindowname, lw_mdi_frame, 0, original!)
ELSEIF this.is_detailwindowtype = "w" THEN
this.of_refreshdwparms()
OpenWithParm (lw_master, this, this.is_detailwindowname)
END IF
RETURN 1

вышел вот на это
что-то еще конкретное посмотреть?
19 мар 12, 12:13    [12272617]     Ответить | Цитировать Сообщить модератору
 Re: MDI c ресайзом окон  [new]
PaulJB
Member

Откуда: Киев
Сообщений: 737
Вот оно: original!
Andrew Nagorny выше описал как обойти. Просто он original! назвал Нормал, что в принципе, ничего не меняет.
20 мар 12, 12:08    [12279900]     Ответить | Цитировать Сообщить модератору
 Re: MDI c ресайзом окон  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 311
windowstate aws_windowstate
w_sheet lw_sheet
w_master lw_master
IF this.is_detailwindowtype = "s" THEN
window lw_immediate_parent
window lw_mdi_frame
this.idw_requestor.of_GetParentWindow( lw_immediate_parent )
lw_mdi_frame = lw_immediate_parent.ParentWindow()

aws_windowstate = lw_immediate_parent.ParentWindow().WindowState

OpenSheetWithParm (lw_sheet, this, this.is_detailwindowname, lw_mdi_frame, 0, Original!)

lw_immediate_parent.ParentWindow().WindowState = aws_windowstate

ELSEIF this.is_detailwindowtype = "w" THEN
this.of_refreshdwparms()
OpenWithParm (lw_master, this, this.is_detailwindowname)
END IF
RETURN 1

в момент исполнения aws_windowstate = Maximized!
однако родительскому фрейму состояние не присваевается. т.е. оно не расширяется.
что я не так делаю?
20 мар 12, 16:03    [12282307]     Ответить | Цитировать Сообщить модератору
 Re: MDI c ресайзом окон  [new]
spas2001
Member

Откуда: Тамбов--->Москва-->Тамбов-->Москва-->Тамбов
Сообщений: 2010
Попробуйте pfc_open
Message.StringParm = "w_card"
of_SendMessage("pfc_Open")
20 мар 12, 17:37    [12283171]     Ответить | Цитировать Сообщить модератору
 Re: MDI c ресайзом окон  [new]
Andrew Nagorny
Member

Откуда: СПб
Сообщений: 116
Восстанавливать нужно состояние не парент окна, а приводить состояние открытого окна к бывшему состоянию парент окна.

OpenSheetWithParm (lw_sheet, this, this.is_detailwindowname, lw_mdi_frame, 0, Original!)
переделать>>>>>
OpenSheetWithParm (lw_sheet, lstr_params , this.is_detailwindowname, lw_mdi_frame, 0, Original!)

где lstr_params = структура с 2-мя полями (создайте отдельно)
1) содержит this
2) содержит aws_windowstate

В pfc_postopen нового открытого окна напишите скрипт

lstr_params = Message.PowerObjectParm

this.WindowState = lstr_params.ws_windowstate
....

если не сработает, то выражение this.WindowState = lstr_params.ws_windowstate выведите в функцию окна и вызывайте ее через POST в pfc_postopen.
21 мар 12, 09:27    [12285585]     Ответить | Цитировать Сообщить модератору
 Re: MDI c ресайзом окон  [new]
spas2001
Member

Откуда: Тамбов--->Москва-->Тамбов-->Москва-->Тамбов
Сообщений: 2010
Вы наверное из Альфы?
21 мар 12, 20:53    [12291357]     Ответить | Цитировать Сообщить модератору
 Re: MDI c ресайзом окон  [new]
Andrew Nagorny
Member

Откуда: СПб
Сообщений: 116
Если Вы меня спрашиваете - то нет.)
22 мар 12, 10:28    [12293123]     Ответить | Цитировать Сообщить модератору
 Re: MDI c ресайзом окон  [new]
spas2001
Member

Откуда: Тамбов--->Москва-->Тамбов-->Москва-->Тамбов
Сообщений: 2010
Нет, я у топикстартера интересуюсь, больно уж куски кода знакомые, у нас вряд ли, значит в Альфе:)
22 мар 12, 18:40    [12297749]     Ответить | Цитировать Сообщить модератору
Все форумы / PowerBuilder Ответить