On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
администратор




Пост N: 5760
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.06.16 21:20. Заголовок: [?] Простой вопрос


Есть главное окно программы , в нем живут несколько CHILD окон (не MDI).
В процедуре ON INTERACTIVECLOSE главного окна есть блок кода , если он вернет
TRUE тогда закроется главное окно и программа завершится.
А вот если блок кода вернул FALSE , то как вернуть фокус ввода на окно на котором
был фокус ввода до нажатия крестика главного окна ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 151 , стр: 1 2 3 4 5 6 7 8 All [только новые]


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




Пост N: 1008
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.06.16 22:04. Заголовок: Dima пишет: как верн..


Dima пишет:
 цитата:
как вернуть фокус ввода на окно на котором был фокус ввода до нажатия крестика главного окна


Можно так:
DEFINE WINDOW Form_Main ...
@ 0, 0 LABEL Buf WIDTH 2 HEIGHT 2 VALUE '' INVISIBLE // Buf.Cargo рабочий контрол для Cargo использования
В контрлах др. окон на GOTFOCUS делаем
Form_Main.Buf.Cargo := {_HMG_ThisFormName, _HMG_ThisControlName }
В процедуре ON INTERACTIVECLOSE главного окна при отказе от выхода
If ! empty(Form_Main.Buf.Cargo)
DoMethod(Form_Main.Buf.Cargo[1], "SetFocus") или
DoMethod(Form_Main.Buf.Cargo[1], Form_Main.Buf.Cargo[2], "SetFocus")
EndIf


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5761
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.06.16 22:18. Заголовок: Попробую , спасибо !..


Попробую , спасибо !

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




Пост N: 1009
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.06.16 22:38. Заголовок: PS Для TBrowse надо ..


PS
Для TBrowse надо делать: Form_Main.Buf.Cargo := { oBrw:cParentWnd, oBrw:cControlName }

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5762
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.06.16 09:29. Заголовок: SergKis пишет: Form..


SergKis пишет:

 цитата:
Form_Main.Buf.Cargo := {_HMG_ThisFormName, _HMG_ThisControlName }
В процедуре ON INTERACTIVECLOSE главного окна при отказе от выхода
If ! empty(Form_Main.Buf.Cargo)
DoMethod(Form_Main.Buf.Cargo[1], "SetFocus") или
DoMethod(Form_Main.Buf.Cargo[1], Form_Main.Buf.Cargo[2], "SetFocus")
EndIf


Сергей такие конструкции не всегда компилятся к сожалению.
Поэтому сделал так.
Завел Public Mcargo:=""
В ON GOTFOCUS дочерних окно добавил Mcargo:=_HMG_ThisFormName
В процедуре ON INTERACTIVECLOSE главного окна при отказе от выхода
If !empty(Mcargo)
IF IswindowDefined(&mCargo)
DoMethod(mCargo, "SetFocus")
Endif
endif


Еще вопрос.
Как закрыть все CHILD окна главного окна (не MDI) ?

ЗЫ
Что то типа _MdiChildCloseAll() но для обычных окон


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




Пост N: 1010
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.06.16 10:14. Заголовок: Dima пишет:такие кон..


Dima пишет:
 цитата:
такие конструкции не всегда компилятся


Используй вместо псевдо ООП команды
SetProperty(cForm, cControl, "Cargo", uValue)
GetProperty(cForm, cControl, "Cargo")
DoMethod(cForm,...)

 цитата:
Как закрыть все CHILD окна главного окна


Смотри оглавление по функциям h_window.prg, там есть
ReleaseAllWindows ()
_ReleaseWindow ( FormName )
... т.е. можно делать
 
For i := 1 To Len(_HMG_aFormNames)
If _HMG_aFormType[ i ] != "A" // не main окно
If _IsWindowDefined (_HMG_aFormNames[ i ])
_ReleaseWindow ( _HMG_aFormNames[ i ] )
EndIf
EndIf
Next

часто делаю так, при создании окна документа, закрываю (release) все окна справочников с запоминанием состояния где были в rowse\tbrowse\... и при вызове справочника повторно востанавливаю окно как было или с новым подводом в нем на нужную запись

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5763
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.06.16 10:24. Заголовок: SergKis пишет: _Rel..


SergKis пишет:

 цитата:
_ReleaseWindow ( FormName )


Спасибо за наводку.
Сразу вышел на нужный пример C:\MiniGUI\SAMPLES\BASIC\MULTI_INSTANCE\

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




Пост N: 1011
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.06.16 11:30. Заголовок: Dima пишет:Завел Pub..


Dima пишет:
 цитата:
Завел Public Mcargo:=""


В такой схеме тебе самому надо следить за очисткой переменной, тогда лучше Private под каждое окно, но с Label по мне изящнее, можно использовать и псевдо ооп и ф-ии и следить за освобождением не надо, Release само все сделает
Для доступа к карго исп. _SetGetUserData( cForm, cControl [, uValue] )

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5764
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.06.16 12:28. Заголовок: SergKis Ты прав , я..


SergKis
Ты прав , я это не учел.
....подумал и проверил
В ON GOTFOCUS дочерних окон живет Mcargo:=_HMG_ThisFormName поэтому получив фокус
ввода на таком из окон я имею имя окна в Mcargo поэтому в ON INTERACTIVECLOSE главного при отказе
от закрытия я всегда верну фокус ввода на окно на котором был , вот так (ниже). Разве нет ?
 
If !empty(Mcargo)
IF IswindowDefined(&mCargo)
DoMethod(mCargo, "SetFocus")
Endif
endif
endif



А если окна нет (закрыли например) то для этого там проверка в виде IF IswindowDefined(&mCargo)

SergKis пишет:

 цитата:
но с Label по мне изящнее


Label не использую и хотел было Cargo к окну прикрутить а у него и нет такой фичи.

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




Пост N: 1012
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.06.16 13:11. Заголовок: Dima пишет:хотел был..


Dima пишет:
 цитата:
хотел было Cargo к окну прикрутить а у него и нет такой фичи


В своей версии мы сделали в ch
#xtranslate _HMG_aFormMiscData1 => _HMG_SYSDATA\[_HMG_SYSDATA_SIZE+1\]
#xtranslate _HMG_aFormMiscData2 => _HMG_SYSDATA\[_HMG_SYSDATA_SIZE+2\]
в h_init.prg
PUBLIC _HMG_SYSDATA [ _HMG_SYSDATA_SIZE + 2 ]

во все prg создание окон добавили (по аналогии с контролом)
_HMG_aFormMiscData1 [ i ] := { NIL, NIL, NIL } // для своих целей по окну
_HMG_aFormMiscData2 [ i ] := "" // для Cargo

в h_evente.prg на WM_DESTROY добавили
_HMG_aFormMiscData1 [ i ] := { NIL, NIL, NIL }
_HMG_aFormMiscData2 [ i ] := ""

для окон _HMG_aFormMiscData2 [ i ] исп. как Cargo окна

Если не менять lib, то Label с одинаковым именем на всех окнах - тоже решает все вопросы, для прилепливания к окну различных данных общего назначения. Не забываем, что все контролы имеют cargo - туда тоже можно совать инфу для спец. использования, например в колонку TsBrowse (cargo) можно записывать цвета, используемые этой колонкой при отображении от разных условий в колонке и добывать их в блоках кода цветов на колонку

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5765
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.06.16 13:46. Заголовок: SergKis пишет: В св..


SergKis пишет:

 цитата:
В своей версии мы сделали в ch
#xtranslate _HMG_aFormMiscData1 => _HMG_SYSDATA\[_HMG_SYSDATA_SIZE+1\]
#xtranslate _HMG_aFormMiscData2 => _HMG_SYSDATA\[_HMG_SYSDATA_SIZE+2\]
в h_init.prg


Странно что Григорий не сделал этого , штука то нужная.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5766
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.06.16 15:12. Заголовок: Сергей еще вопрос . ..


Сергей еще вопрос .
В принципе я его решил по своему , но вдруг что подскажешь.
Есть ряд справочников с одинаковой структурой. Все выводил в окна у которых
левый верхний угол одинаков , поэтому при открытии следующего справочника
визуально было не понятно сколько же справочников в данный момент открыто.
Поэтому перед вызовом справочника проверяю открытые окна и найдя первое
подходящее дергаю от туда координаты левого верхнего угла.
В программе перед тем как создать окно делаю так:
 
a:=GetProperty("Form_0", "Row")+GetBorderHeight()+GetTitleHeight()+GetMenubarHeight()+5
b:=(GetProperty("Form_0", "Width")/2) -(WidthWindow_MyApl/4)

arw:=GetRowColExceptMain()
if !empty(arw)
a:=arw[1]+GetTitleHeight()
b:=arw[2]+GetTitleHeight()
endif

DEFINE WINDOW SPEC AT a , b WIDTH ..............


Фунция GetRowColExceptMain()
 
Func GetRowColExceptMain()

LOCAL i, nFormCount := LEN (_HMG_aFormHandles)
local amas:={}

FOR i := 1 TO nFormCount
IF _HMG_aFormType [ i ] <> "A"
IF _IsWindowDefined ( _HMG_aFormNames [ i ] )
if ! isiconic(GetFormHandle( _HMG_aFormNames [ i ] ))
aadd(amas,GetProperty(_HMG_aFormNames [ i ], "row"))
aadd(amas,GetProperty(_HMG_aFormNames [ i ], "col"))
Return amas

endif
ENDIF
ENDIF
NEXT

Return amas



Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5767
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.06.16 15:47. Заголовок: Dima пишет: Фунция ..


Dima пишет:

 цитата:
Фунция GetRowColExceptMain()


Переделал ее
 
Func GetRowColExceptMain()

LOCAL i, nFormCount := LEN (_HMG_aFormHandles)
local amas:={}
local ret:={}

FOR i := 1 TO nFormCount
IF _HMG_aFormType [ i ] <> "A" // не main окно
IF _IsWindowDefined ( _HMG_aFormNames [ i ] )
if !isiconic(GetFormHandle( _HMG_aFormNames [ i ] ))
aadd(amas,{GetProperty(_HMG_aFormNames [ i ], "row"),GetProperty(_HMG_aFormNames [ i ], "col")})
endif
ENDIF
ENDIF
NEXT
if len(amas)#0
aadd(ret,amas[len(amas)][1])
aadd(ret,amas[len(amas)][2])
endif

Return ret




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




Пост N: 1013
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.06.16 15:48. Заголовок: Dima Окна у себя на..


Dima
Окна у себя называю так;
wDok_... - документы
wSpr_... - справочники
wOtb_... - отбор\выборка\справка
wSet_... - установки\настройки
wPrn_... - для печатей
...
по 4 байтам орентируюсь, чтобы убить справочники при вызове документов (что бы не мешали)
тебе можно как в в Mdi сделать расположеие лесенкой справочников (смещая на высоту Title окна), организовав стек(и) для окон (можно справочники отдельно, док. тоже ...) и перебирать стеки и т.д.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5768
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.06.16 15:54. Заголовок: SergKis пишет: тебе..


SergKis пишет:

 цитата:
тебе можно как в в Mdi сделать расположеие лесенкой справочников (смещая на высоту Title окна)


Так и сделал , пока без стеков (красоту позже наводить буду )
SergKis пишет:

 цитата:
Окна у себя называю так


Спасибо за идею.

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5769
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.06.16 16:12. Заголовок: Как организовать ред..


Как организовать редактирование ячейки что бы (пока не знаю как контрол называется )
можно было вводить (выбирать) только (например): Кг , Граммы , Метры , Литры из некоего списка ?

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




Пост N: 1014
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.06.16 16:17. Заголовок: Если разговор о ячей..


Если разговор о ячейке Tsb, то см. пример Tsb_config, колонка Operator, если др. контрол, то COMBOBOX смотри в примерах

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5770
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.06.16 16:31. Заголовок: SergKis пишет: Есл..


SergKis пишет:

 цитата:

Если разговор о ячейке Tsb, то см. пример Tsb_config, колонка Operator


Да оно

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5771
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.06.16 17:44. Заголовок: Идею понял , не поня..


Идею понял , не понятно как мышкой завершить ввод , выбрав нужное.
Пока ясно что нужно нажать Enter. А если клавы нет ?

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




Пост N: 1015
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.06.16 18:49. Заголовок: Dima пишет: не понят..


Dima пишет:
 цитата:
не понятно как мышкой завершить ввод , выбрав нужное


Как то не задумывался над этим.
В классе TComboBox есть блок кода bCloseUp при закрытии списка срабатывает, но в Metod Edit(...) TsBrowse есть только такое
 
oCol:oEdit := TComboBox():New( nRow+::aEditCellAdjust[1], nCol+::aEditCellAdjust[2], ;
bSETGET( uValue ), aGet, nWidth+::aEditCellAdjust[3], nHeight+::aEditCellAdjust[4], ;
Self, bChange, nClrFore, nClrBack, hFont, cMsg, ::cChildControl, cWnd )

// oCol:oEdit:bCloseUp := {|o| o:PostMsg( WM_KEYDOWN, VK_RETURN, 0 )} //1.54

oCol:oEdit:lAppend := ::lAppendMode

выделенное нужно, но как поставить такой блок кода на oCol:oEdit:bCloseUp не понятно

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




Пост N: 1016
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.06.16 19:41. Заголовок: SergKis пишет:как по..


SergKis пишет:
 цитата:
как поставить такой блок кода на oCol:oEdit:bCloseUp


может так подойдет (использовать в TsColumn при lComboBox := .T. переменную bAction - она для TBtnBox):
 
METHOD SetData( nColumn, bData, aList, bCloseUp ) CLASS TSBrowse

If Valtype( nColumn ) == "C"
nColumn := ::nColumn( nColumn ) // 21.07.2015
EndIf

If Valtype( nColumn ) != "N" .or. nColumn <= 0
Return Nil
EndIf

If aList != Nil

If ValType( aList[ 1 ] ) == "A"
::aColumns[ nColumn ]:aItems := aList[ 1 ]
::aColumns[ nColumn ]:aData := aList[ 2 ]
::aColumns[ nColumn ]:cDataType := ValType( aList[ 2, 1 ] )
Else
::aColumns[ nColumn ]:aItems := aList
EndIf

::aColumns[ nColumn ]:lComboBox := .T.
::aColumns[ nColumn ]:bAction := bCloseUp

EndIf

If bData != Nil

If Valtype( bData ) == "B"
::aColumns[ nColumn ]:bData := bData
Else
::aColumns[ nColumn ]:bData := { || (bData) }
EndIf

EndIf

Return Self

METHOD Edit( uVar, nCell, nKey, nKeyFlags, cPicture, bValid, nClrFore, ;
nClrBack ) CLASS TSBrowse
...
::cChildControl := GetUniqueName( "ComboBox" )

oCol:oEdit := TComboBox():New( nRow+::aEditCellAdjust[1], nCol+::aEditCellAdjust[2], ;
bSETGET( uValue ), aGet, nWidth+::aEditCellAdjust[3], nHeight+::aEditCellAdjust[4], ;
Self, bChange, nClrFore, nClrBack, hFont, cMsg, ::cChildControl, cWnd )

If oCol:lComboBox .and. ValType(oCol:bAction) == "B"
oCol:oEdit:bCloseUp := oCol:bAction
EndIf

// oCol:oEdit:bCloseUp := {|o| o:PostMsg( WM_KEYDOWN, VK_RETURN, 0 )} //1.54
oCol:oEdit:lAppend := ::lAppendMode
...


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

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