Автор | Сообщение |
|
| постоянный участник
|
Пост N: 734
Зарегистрирован: 13.10.05
|
|
Отправлено: 03.12.17 18:40. Заголовок: Многоокон, получить результат
Имеется несколько окон данных Win1, Win2, Win3.. , в которых обрабатываются, редактируются данные и много окон справочников WinSpr1, WinSpr2,WinSpr3,WinSpr4 ... , через которые открываются справочники. Из любого окна данных Win... вы можете вызвать любой (по ситуации) справочник WinSpr.. Т.е находясь в окне WinSpr не известно из какого окна справочник вызван. При закрытии окна справочника необходимо вернуть данные из справочника в окно Данных или не вернуть (решает оператор) а уже в окне данных Win выполнить присвоение. Кто как это делает ? В Делфи для этого есть у каждого окна переменная Result (.t. или .f.)
|
|
|
Новых ответов нет
[см. все]
|
|
|
| постоянный участник
|
Пост 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 куда надо
|
|
|
|
| постоянный участник
|
Пост N: 735
Зарегистрирован: 13.10.05
|
|
Отправлено: 04.12.17 08:50. Заголовок: SergKis ок Я похо..
SergKis ок Я похоже делал, но RETURN aRet стояло NIL, и данные получал через переменные , а не возврат функции. Отсюда нестабильность
|
|
|
|
| постоянный участник
|
Пост 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 ..., но суть та же.
|
|
|
|
| постоянный участник
|
Пост 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 |
|
|
|
|
|