On-line: гостей 2. Всего: 2 [подробнее..]
АвторСообщение
постоянный участник


Пост N: 734
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 03.12.17 18:40. Заголовок: Многоокон, получить результат


Имеется несколько окон данных Win1, Win2, Win3.. , в которых обрабатываются, редактируются данные и много окон справочников WinSpr1, WinSpr2,WinSpr3,WinSpr4 ... , через которые открываются справочники. Из любого окна данных Win... вы можете вызвать любой (по ситуации) справочник WinSpr.. Т.е находясь в окне WinSpr не известно из какого окна справочник вызван. При закрытии окна справочника необходимо вернуть данные из справочника в окно Данных или не вернуть (решает оператор) а уже в окне данных Win выполнить присвоение.
Кто как это делает ? В Делфи для этого есть у каждого окна переменная Result (.t. или .f.)

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 4 [только новые]


постоянный участник




Пост N: 1657
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.12.17 20:27. Заголовок: Vlad04 пишет Т.е нах..


Vlad04 пишет
 цитата:
Т.е находясь в окне WinSpr не известно из какого окна справочник вызван.


Зачем окну WinSpr знать откуда был вызов ? Ему достаточно знать, сделали выбор (кнопка\Enter\...) или отказались.

 цитата:
В Делфи для этого есть у каждого окна переменная Result (.t. или .f.)


У себя использую (короче писать)
 
LOCAL aRet := {}
...
:UserKeys(VK_RETURN, {|obr | AAdd( aRet, (obr:cAlias)->( mGet(cFld1) ) ), ;
AAdd( aRet, (obr:cAlias)->( mGet(cFld2) ) ), ;
_PushKey(VK_ESCAPE) })
...
END WINDOW

ACTIVATE WINDOW &cWnd

RETURN aRet

т.е. по кнопке или Enter заполняется aRet нужными данными из записи.
В окне где был вызов спр. обработка
! empty(aRet) - выбор был, раскидываем данные aRet куда надо



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 735
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 04.12.17 08:50. Заголовок: SergKis ок Я похо..



SergKis
ок
Я похоже делал, но RETURN aRet стояло NIL, и данные получал через переменные , а не возврат функции.
Отсюда нестабильность

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1658
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 04.12.17 15:25. Заголовок: Vlad04 пишет Я похож..


Vlad04 пишет
 цитата:
Я похоже делал, но RETURN aRet стояло NIL, и данные получал через переменные


Если, все же, есть потребность получить данные именно через окно, то возможен вариант
 
FUNC MySpr(...)
// через окно родительское (откуда вызов справочника)
LOCAL hParent := iif( _HMG_BeginWindowMDIActive, GetActiveMdiHandle(), GetActiveWindow() )
LOCAL nParent := AScan( _HMG_aFormHandles, hParent )
LOCAL cParent := _HMG_aFormNames [ nParent ]
// или через MAIN окно
LOCAL cParent := _HMG_aFormNames [ _HMG_MainIndex ]

_WindowCargo( cParent, NIL ) // можно тут или выше до MySpr(...)

:UserKeys(VK_RETURN, {|obr| _WindowCargo( cParent, { (obr:cAlias)->( mGet(cFld1) ), ;
(obr:cAlias)->( mGet(cFld2) ) } ), ;
_PushKey(VK_ESCAPE) })
...
RETURN NIL

// тогда на окне вызова справочника
ThisWindow.Cargo := NIL
MySpr(...) // справочник
If ! empty( ThisWindow.Cargo ) // выбор
...
EndIf

// или через MAIN окно
cMain := _HMG_aFormNames [ _HMG_MainIndex ]
_WindowCargo( cMain, NIL )
MySpr(...) // справочник
If ! empty( _WindowCargo( cMain ) // выбор
...
EndIf

PS.
Вместо _WindowCargo(...) можно использовать _ControlCargo( ControlName, FormName, xValue )
или This.ControlName.Cargo ..., но суть та же.



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 739
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 07.12.17 12:09. Заголовок: ок Спасибо Пока ост..


ок
Спасибо
Пока остановился на следующем варианте, как мне кажется, самом простом.
В функции , которая формирует окно справочников объявил

 цитата:

Proc CreaTBrows(....)
Private Result:=.f.
...

Return Result



Поставил в функции по вашем примеру возврат Return Result.
На форме (на кнопках), на горячих клавишах выбора поставил присвоение по ситуации
...ACTION (Result:=.t.,ThisWindow.Release ) или
...ACTION (Result:=.f.,ThisWindow.Release )

В родительском окне, из которого вызываю окно справочника
написал, к примеру

 цитата:

if CreaTBrows(....)
EditLudi.&(ControlName).Value:=FAM->FAM
...
endif




Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 21
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет