Автор | Сообщение |
|
| |
Пост N: 5760
Зарегистрирован: 17.05.05
|
|
Отправлено: 23.06.16 21:20. Заголовок: [?] Простой вопрос
Есть главное окно программы , в нем живут несколько CHILD окон (не MDI). В процедуре ON INTERACTIVECLOSE главного окна есть блок кода , если он вернет TRUE тогда закроется главное окно и программа завершится. А вот если блок кода вернул FALSE , то как вернуть фокус ввода на окно на котором был фокус ввода до нажатия крестика главного окна ?
|
|
|
Ответов - 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
|
|
|
|
| |
Пост N: 5761
Зарегистрирован: 17.05.05
|
|
Отправлено: 23.06.16 22:18. Заголовок: Попробую , спасибо !..
Попробую , спасибо !
|
|
|
|
| постоянный участник
|
Пост N: 1009
Зарегистрирован: 17.02.12
|
|
Отправлено: 23.06.16 22:38. Заголовок: PS Для TBrowse надо ..
PS Для TBrowse надо делать: Form_Main.Buf.Cargo := { oBrw:cParentWnd, oBrw:cControlName }
|
|
|
|
| |
Пост 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() но для обычных окон
|
|
|
|
| постоянный участник
|
Пост 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\... и при вызове справочника повторно востанавливаю окно как было или с новым подводом в нем на нужную запись
|
|
|
|
| |
Пост N: 5763
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.06.16 10:24. Заголовок: SergKis пишет: _Rel..
SergKis пишет: цитата: | _ReleaseWindow ( FormName ) |
| Спасибо за наводку. Сразу вышел на нужный пример C:\MiniGUI\SAMPLES\BASIC\MULTI_INSTANCE\
|
|
|
|
| постоянный участник
|
Пост N: 1011
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.06.16 11:30. Заголовок: Dima пишет:Завел Pub..
Dima пишет: В такой схеме тебе самому надо следить за очисткой переменной, тогда лучше Private под каждое окно, но с Label по мне изящнее, можно использовать и псевдо ооп и ф-ии и следить за освобождением не надо, Release само все сделает Для доступа к карго исп. _SetGetUserData( cForm, cControl [, uValue] )
|
|
|
|
| |
Пост 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 к окну прикрутить а у него и нет такой фичи.
|
|
|
|
| постоянный участник
|
Пост 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) можно записывать цвета, используемые этой колонкой при отображении от разных условий в колонке и добывать их в блоках кода цветов на колонку
|
|
|
|
| |
Пост 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 |
| Странно что Григорий не сделал этого , штука то нужная.
|
|
|
|
| |
Пост 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
|
|
|
|
|
| |
Пост 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
|
|
|
|
| постоянный участник
|
Пост N: 1013
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.06.16 15:48. Заголовок: Dima Окна у себя на..
Dima Окна у себя называю так; wDok_... - документы wSpr_... - справочники wOtb_... - отбор\выборка\справка wSet_... - установки\настройки wPrn_... - для печатей ... по 4 байтам орентируюсь, чтобы убить справочники при вызове документов (что бы не мешали) тебе можно как в в Mdi сделать расположеие лесенкой справочников (смещая на высоту Title окна), организовав стек(и) для окон (можно справочники отдельно, док. тоже ...) и перебирать стеки и т.д.
|
|
|
|
| |
Пост N: 5768
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.06.16 15:54. Заголовок: SergKis пишет: тебе..
SergKis пишет: цитата: | тебе можно как в в Mdi сделать расположеие лесенкой справочников (смещая на высоту Title окна) |
| Так и сделал , пока без стеков (красоту позже наводить буду ) SergKis пишет: Спасибо за идею.
|
|
|
|
| |
Пост N: 5769
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.06.16 16:12. Заголовок: Как организовать ред..
Как организовать редактирование ячейки что бы (пока не знаю как контрол называется ) можно было вводить (выбирать) только (например): Кг , Граммы , Метры , Литры из некоего списка ?
|
|
|
|
| постоянный участник
|
Пост N: 1014
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.06.16 16:17. Заголовок: Если разговор о ячей..
Если разговор о ячейке Tsb, то см. пример Tsb_config, колонка Operator, если др. контрол, то COMBOBOX смотри в примерах
|
|
|
|
| |
Пост N: 5770
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.06.16 16:31. Заголовок: SergKis пишет: Есл..
SergKis пишет: цитата: | Если разговор о ячейке Tsb, то см. пример Tsb_config, колонка Operator |
| Да оно
|
|
|
|
| |
Пост N: 5771
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.06.16 17:44. Заголовок: Идею понял , не поня..
Идею понял , не понятно как мышкой завершить ввод , выбрав нужное. Пока ясно что нужно нажать Enter. А если клавы нет ?
|
|
|
|
| постоянный участник
|
Пост 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 не понятно
|
|
|
|
| постоянный участник
|
Пост 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 ...
|
|
|
|
| |
Пост N: 5772
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.06.16 21:28. Заголовок: Попробую позже , спа..
Попробую позже , спасибо. В Tsbrowse поймал непонятку. Есть obrw:GetColumn("naim"):bPrevEdit := { |a, b, lLock| If( lLock := (obrw:cAlias)->(RLock()),; (obrw:cAlias)->(dbUnLock()), Msgstop("Запись заблокирована","Внимание")), lLock } Если нажимаю Enter или мышкой дважды и запись блокирована то вываливается сообщение что запись заблочена и далее не пускает. Что нормально. Стоит нажать пробел или любую буквенно-цифровую педаль то месага так же появляется но GET появляется. Что не так делаю ?
|
|
|
|
|
| постоянный участник
|
Пост N: 1017
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.06.16 22:00. Заголовок: Dima пишет:но GET по..
Dima пишет: срабатывает метод KeyChar, попробуй поставь в блок кода obrw:nUserKey := 255 до lLock у себя я ввел переменную в TsBrowse lNoKeyChar := .T. и отлючил по умолчанию
|
|
|
|
| постоянный участник
|
Пост N: 1018
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.06.16 22:10. Заголовок: Dima в bPrevEdit пе..
Dima в bPrevEdit передаются Eval( oCol:bPrevEdit, uValue, Self ) лучше использовать их в блоке кода а не public\private перемменную obrw obrw:GetColumn("naim"):bPrevEdit := { |a, b, lLock| If( lLock := (b:cAlias)->(RLock()),; (b:cAlias)->(dbUnLock()), Msgstop("Запись заблокирована","Внимание")), lLock }
|
|
|
|
| |
Пост N: 5773
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.06.16 22:15. Заголовок: SergKis Понял, попр..
SergKis Понял, попробую , отпишу.
|
|
|
|
| постоянный участник
|
Пост N: 1019
Зарегистрирован: 17.02.12
|
|
Отправлено: 24.06.16 22:47. Заголовок: SergKis пишет:постав..
SergKis пишет: цитата: | поставь в блок кода obrw:nUserKey := 255 |
| Не поможет, в методе KeyDown стоит ::oWnd:nLastKey := ::nLastKey := ::nUserKey := nKey надо использовать bUsersKey функцию и возвращать .F. uReturn := Eval( ::bUserKeys, nKey, nFlags, Self ) If uReturn != Nil .and. ValType( uReturn ) == "N" .and. uReturn < 200 // interpreted as a virtual key code to nKey := uReturn // change the original key pressed ElseIf uReturn != Nil .and. ValType( uReturn ) == "L" .and. ! uReturn ::nUserKey := 255 // want to inhibit the KeyDown and KeyChar Methods for key pressed Return 0 EndIf
|
|
|
|
| |
Пост N: 5774
Зарегистрирован: 17.05.05
|
|
Отправлено: 24.06.16 22:59. Заголовок: SergKis пишет: надо..
SergKis пишет: цитата: | надо использовать bUsersKey функцию и возвращать .F. |
| Чудеса )) Как примерно она должна выглядеть ? У меня так (может где и промахнулся) oBrw:bUserKeys := {|nKey,nFlg,oBrw| UserKeys(nKey, nFlg, oBrw) } STATIC FUNCTION UserKeys( nKey, nFlag, o ) Local nRec, oCell, cVal, nRow, uRet, cKey nFlag := Nil If nKey == VK_F1 ElseIf nKey == VK_INSERT if msgokCancel("Добавить новую запись ?","Внимание") Addrecs(o,"ID") endif uRet := .F. ElseIf nKey == VK_F3 ElseIf nKey == VK_F5 ElseIf nKey == VK_F6 ElseIf nKey == VK_F7 ElseIf nKey == VK_F8 ElseIf nKey == VK_F9 ElseIf nKey == VK_F11 ElseIf nKey == VK_F12 ElseIf nKey == VK_RETURN uRet := .F. ElseIf nKey == VK_F4 _PushKey(VK_SPACE) uRet := .f. ElseIf nKey >= 32 .and. nKey < 254 uRet := .f. EndIf Return uRet
|
|
|
|
| постоянный участник
|
Пост N: 1020
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.06.16 00:15. Заголовок: Dima коректировка п..
Dima коректировка по VK_RETURN ? пробни ElseIf nKey == VK_RETURN // uRet := .F. ElseIf nKey == VK_F4
|
|
|
|
| |
Пост N: 5775
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.06.16 09:11. Заголовок: SergKis Что то я по..
SergKis Что то я потерялся. Значит у меня так obrw:GetColumn("naim"):bPrevEdit := { |a, b, lLock| If( lLock := (b:cAlias)->(RLock()), ; (b:cAlias)->(dbUnLock()), Msgstop("Запись заблокирована","Внимание")), lLock } ..... obrw:nFireKey := VK_SPACE oBrw:bUserKeys := {|nKey,nFlg,oBr| UserKeys(nKey, nFlg, oBr) } STATIC FUNCTION UserKeys( nKey, nFlag, o ) *----------------------------------- Local uRet If nKey == VK_F1 ElseIf nKey == VK_INSERT if msgokCancel("Добавить новую запись ?","Внимание") Addrecs(o,"ID") endif uRet := .F. ElseIf nKey == VK_F3 ElseIf nKey == VK_F5 ElseIf nKey == VK_F6 ElseIf nKey == VK_F7 ElseIf nKey == VK_F8 ElseIf nKey == VK_F9 ElseIf nKey == VK_F11 ElseIf nKey == VK_F12 ElseIf nKey == VK_RETURN ElseIf nKey == VK_F4 _PushKey(VK_SPACE) uRet := .f. ElseIf nKey >= 32 .and. nKey < 254 EndIf Return uRet Если запись заблочена и я нажал ENTER , тогда вылезет Msgstop("Запись заблокирована","Внимание") и дальше в GET не пустит. Но если нажать пробел или буквенно цифровую педаль тогда тоже вылезает Msgstop("Запись заблокирована","Внимание") но в GET пускает и не пойму как это предотвратить.
|
|
|
|
| |
Пост N: 5776
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.06.16 09:30. Заголовок: Разобрался...
Разобрался.
|
|
|
|
| постоянный участник
|
Пост N: 4975
Зарегистрирован: 12.09.06
|
|
Отправлено: 25.06.16 13:57. Заголовок: Dima пишет: Разобра..
Dima пишет: Поделись !
|
|
|
|
| |
Пост N: 5778
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.06.16 14:03. Заголовок: Andrey пишет: Подел..
Andrey пишет: Чем ?
|
|
|
|
|
| |
Пост N: 5779
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.06.16 15:25. Заголовок: Каким образом в TSB ..
Каким образом в TSB в bUserKeys заблочить нажатие ENTER но что бы двойной клик мышки остался для входа в редактирование. Если блочу ENTER тогда блочится и двойной клик мыши , вероятно код у них одинаков. Хотел редактирование повесить только на VK_F4 и двойной клик мыши. С VK_F4 все понятно , делаю :nFireKey := VK_F4 и в bUserKeys при нажатии VK_F4 верну TRUE
|
|
|
|
| |
Пост N: 5780
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.06.16 16:41. Заголовок: SergKis Дошли руки ..
SergKis Дошли руки потестить твою функцию SetNoHole , вызываю ее после END TBROWSE FUNCTION SetNoHole( obr ) // убрать дырку LOCAL nI, nK, nHeight LOCAL nHole := obr:nHeight - obr:nHeightHead - obr:nHeightSuper - ; obr:nHeightFoot - obr:nHeightSpecHd - ; If( ! obr:lNoHScroll, 16, 0 ) nHole -= ( Int( nHole / obr:nHeightCell ) * obr:nHeightCell ) nHole -= 1 nHeight := nHole nI := If( obr:nHeightSuper > 0, 1, 0 ) + ; If( obr:nHeightHead > 0, 1, 0 ) + ; If( obr:nHeightSpecHd > 0, 1, 0 ) + ; If( obr:nHeightFoot > 0, 1, 0 ) If nI > 0 // есть заголовки If obr:nHeightSuper > 0 obr:nHeightSuper += nK nHole -= nK EndIf If obr:nHeightSpecHd > 0 obr:nHeightSpecHd += nK nHole -= nK EndIf If obr:nHeightFoot > 0 obr:nHeightFoot += nK nHole -= nK EndIf If obr:nHeightHead > 0 obr:nHeightHead += nHole EndIf Else // нет заголовков, можно уменьшить размер tsb на размер nHole SetProperty(obr:cParentWnd, obr:cControlName, "Height", ; GetProperty(obr:cParentWnd, obr:cControlName, "Height") - nHole) EndIf obr:Display() RETURN nHeight Там какой то косяк однако. Дырки да нет. Но стоит курсором доехать до нижней границы бровса и продолжать двигаться вниз то записи над курсором ломаются и в них дублируется одна и та же строка. При движении вверх , внизу бровса имеет место фантомная строка. Скрин когда едем вниз Когда едем вверх (яйцо постоянно живет в самом низу)
|
|
|
|
| постоянный участник
|
Пост N: 1021
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.06.16 16:45. Заголовок: Dima пишет:Если блоч..
Dima пишет: цитата: | Если блочу ENTER тогда блочится и двойной клик мыши , вероятно код у них одинаков |
| без правки не обойтись: METHOD LDblClick( nRowPix, nColPix, nKeyFlags ) CLASS TSBrowse ... If ( nClickRow == ::nRowPos .and. nClickRow > 0 ) .or. ( nClickRow == ::nRowPos .and. ! ::lDrawHeaders ) If ::lCellBrw .and. ::IsEditable( nCol ) ::nColSpecHd := 0 If ValType( Eval( ::aColumns[ nCol ]:bData ) ) == "L" .and. ; ::aColumns[ nCol ]:lCheckBox // virtual checkbox ::PostMsg( WM_CHAR, VK_SPACE, 0 ) ElseIf ::bLDblClick != Nil Eval( ::bLDblClick, uPar1, uPar2, nKeyFlags, Self ) Else ::PostMsg( WM_KEYDOWN, VK_RETURN, 0 ) EndIf Return 0
|
|
|
|
| постоянный участник
|
Пост N: 1022
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.06.16 16:51. Заголовок: Dima пишет:Дошли рук..
Dima пишет: цитата: | Дошли руки потестить твою функцию SetNoHole |
| текст надо взять из примера Tsb_Seek_2 (если происходит искажение отображения, играться надо параметром nDelta) : Скрытый текст
*----------------------------------- Function TBrw_NoHoles( oBrw, nDelta, lSet ) *----------------------------------- Local nI, nK, nHeight, nHole DEFAULT nDelta := 1, lSet := .T. nHole := oBrw:nHeight - oBrw:nHeightHead - oBrw:nHeightSuper - ; oBrw:nHeightFoot - oBrw:nHeightSpecHd - ; If( oBrw:lNoHScroll, 0, GetHScrollBarHeight() ) nHole -= ( Int( nHole / oBrw:nHeightCell ) * oBrw:nHeightCell ) nHole -= nDelta nHeight := nHole If lSet nI := If( oBrw:nHeightSuper > 0, 1, 0 ) + ; If( oBrw:nHeightHead > 0, 1, 0 ) + ; If( oBrw:nHeightSpecHd > 0, 1, 0 ) + ; If( oBrw:nHeightFoot > 0, 1, 0 ) If nI > 0 // есть заголовки nK := int( nHole / nI ) // на nI - заголовки разделим дырку If oBrw:nHeightFoot > 0 oBrw:nHeightFoot += nK nHole -= nK EndIf If oBrw:nHeightSuper > 0 oBrw:nHeightSuper += nK nHole -= nK EndIf If oBrw:nHeightSpecHd > 0 oBrw:nHeightSpecHd += nK nHole -= nK EndIf If oBrw:nHeightHead > 0 oBrw:nHeightHead += nHole EndIf Else // нет заголовков, можно уменьшить размер tsb на размер nHole SetProperty(oBrw:cParentWnd, oBrw:cControlName, "Height", ; GetProperty(oBrw:cParentWnd, oBrw:cControlName, "Height") - nHole) EndIf oBrw:Display() EndIf Return nHeight
| использовать для окна с NOSIZE, если resize tsb возможен, ф-ю не применять
|
|
|
|
| |
Пост N: 5781
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.06.16 17:05. Заголовок: SergKis пишет: текс..
SergKis пишет: цитата: | текст надо взять из примера Tsb_Seek_2 (если происходит искажение отображения, играться надо параметром nDelta) |
| Взял , проверил с таким вызовом TBrw_NoHoles( oBrw, , .t. ) и получил все те же проблемы. Вызвав так TBrw_NoHoles( oBrw, 0 , .t. ) , проблем нет , но есть дырка. Что то в ней не так....
|
|
|
|
| |
Пост N: 5782
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.06.16 17:09. Заголовок: Проверил пример Tsb_..
Проверил пример Tsb_Seek_2 , имею те же проблемы
|
|
|
|
| постоянный участник
|
Пост N: 1023
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.06.16 17:12. Заголовок: Dima поставь nDelta..
Dima поставь nDelta := 2 \ 3 к сожалению tsb очень чувствителен к изменению размеров высот его элементов, зависит от разрешения монтора, фонта у себя вынес значение nDelta в ini и бывает оставляю дырку в 1\2\3 пикселя
|
|
|
|
| постоянный участник
|
Пост N: 1024
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.06.16 17:18. Заголовок: Dima пишет:Проверил ..
Dima пишет: цитата: | Проверил пример Tsb_Seek_2 , имею те же проблемы |
| у меня на двух компах с 15' и 11' экраном все хорошо с примером, взят как есть
|
|
|
|
| |
Пост N: 5783
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.06.16 17:20. Заголовок: SergKis пишет: пост..
SergKis пишет: Это не выход , так как ты верно пишешь что разрешение может быть разное , фонты да и размеры самого бровса , не писать же в INI nDelta для каждого бровса , да юзера заклеймят меня )))
|
|
|
|
| постоянный участник
|
Пост N: 1025
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.06.16 17:30. Заголовок: Dima пишет: не писат..
Dima пишет: цитата: | не писать же в INI nDelta для каждого бровса |
| у меня один nDelta на всю прогу и менять пришлось только 1 раз (правда и фонт для всех tsb один на всю прогу) есть др. путь написать resize для tsb и использовать его меняя размеры окна таже можно уст. размеры tsb заранее просчитав (константы для элементов header, line, footer) все высоты tsb и получив общую высоту tsb и установить ее (например от количества строк в tsb)
|
|
|
|
|
| |
Пост N: 5784
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.06.16 17:34. Заголовок: SergKis пишет: таже..
SergKis пишет: цитата: | таже можно уст. размеры tsb заранее просчитав (константы для элементов header, line, footer) все высоты tsb и получив общую высоту tsb и установить ее (например от количества строк в tsb) |
| Понял.
|
|
|
|
| постоянный участник
|
Пост N: 1026
Зарегистрирован: 17.02.12
|
|
Отправлено: 25.06.16 17:35. Заголовок: Dima пишет:не писать..
Dima пишет: цитата: | не писать же в INI nDelta для каждого бровса |
| с др. стороны в ini сохраняются все размеры (устанавливает\раздвигает клиент) колонок для каждого бровсе, то добавить nDelta пустяковое дело
|
|
|
|
| |
Пост N: 5785
Зарегистрирован: 17.05.05
|
|
Отправлено: 25.06.16 17:45. Заголовок: SergKis Согласен...
SergKis Согласен.
|
|
|
|
| постоянный участник
|
Пост N: 1028
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.06.16 08:24. Заголовок: Dima Еще про tsb, &..
Dima Еще про tsb, "дырку" и HScroll. Высота HScroll в расчетах исп. 16, а в реальности при LargeFont 24 (Андрей проверял по моей просьбе), т.е. с HScroll высота tsb может быть изначально посчитана с ошибкой и nDelta - должна подбираться руками. Я отказался от использования HScroll, поставил lNoHScroll := .T. глобально в своей либе
|
|
|
|
| |
Пост N: 5786
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.06.16 09:12. Заголовок: SergKis пишет: пост..
SergKis пишет: цитата: | поставил lNoHScroll := .T. |
| Но тут был подводный камень если не ошибаюсь , после такой установки переставала срабатывать растяжка в :nAdjColumn
|
|
|
|
| постоянный участник
|
Пост N: 1029
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.06.16 09:28. Заголовок: Dima пишет: перестав..
Dima пишет: цитата: | переставала срабатывать растяжка в :nAdjColumn |
| Так она работает только на 1-м экране (если не ошибаюсь), так что толку от нее, на мой взгляд, не много, тем более пользователь сам уст. ширину колонок. В hwg сделано, на мой взгляд, лучше - последняя колонка растягивается на остаток ширины бровсе
|
|
|
|
| |
Пост N: 5787
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.06.16 09:33. Заголовок: SergKis пишет: В hw..
SergKis пишет: цитата: | В hwg сделано, на мой взгляд, лучше - последняя колонка растягивается на остаток ширины бровсе |
| Так и тут так же, только не последняя а та что указана в :nAdjColumn
|
|
|
|
| постоянный участник
|
Пост N: 1030
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.06.16 09:37. Заголовок: это только на первом..
это только на первом экране, после происходит искажение последней колонки (header,line,footer), в hwg нет искажения правой последней колонки
|
|
|
|
| |
Пост N: 5788
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.06.16 10:47. Заголовок: SergKis пишет: это ..
SergKis пишет: цитата: | это только на первом экране, после происходит искажение последней колонки |
| не замечал такого
|
|
|
|
| |
Пост N: 5789
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.06.16 11:08. Заголовок: А как поймать имя бр..
А как поймать имя бровса в форме .. Имя формы так ThisWindow а бровс ? ps я про альтернативный синтаксис
|
|
|
|
| постоянный участник
|
Пост N: 1031
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.06.16 11:36. Заголовок: Dima пишет:я про аль..
Dima пишет: цитата: | я про альтернативный синтаксис |
| Tsb мимо него проходит. Как объект tsb получать, см. Tsb_seek_2, Tsb_LoadFields
|
|
|
|
| постоянный участник
|
Пост N: 1032
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.06.16 11:42. Заголовок: Dima пишет:не замеча..
Dima пишет: На след. экранах (при прокрутке HScroll) на короткий остаток колонки впихивается широкая колонка, если в ней superheader, то совсем беда с отображением. По мне лучше делать "управляемый" скролинг - удалять часть колонок (группой) и вставлять группу других, благо это не сложно
|
|
|
|
| |
Пост N: 5790
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.06.16 11:44. Заголовок: Понял. Спасибо..
Понял. Спасибо
|
|
|
|
| |
Пост N: 5791
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.06.16 11:46. Заголовок: Имею xy+=getproperty..
Имею xy+=getproperty(ThisWindow.name,"Button_1","Width")+11 Как это переписать не используя getproperty ?
|
|
|
|
| постоянный участник
|
Пост N: 1033
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.06.16 12:12. Заголовок: Dima пишет:Как это п..
Dima пишет: цитата: | Как это переписать не используя getproperty ? |
| FormName.Button_1.Width GetWindowWidth(GetControlHandle("Button_1", _HMG_ThisFormName))
|
|
|
|
| постоянный участник
|
Пост N: 4978
Зарегистрирован: 12.09.06
|
|
Отправлено: 26.06.16 12:20. Заголовок: Добавлю 5 копеек про..
Добавлю 5 копеек про растяжку :nAdjColumn Заметил такую странность, если её использовать, то ширина некоторых колонок начинает сбиваться, срезается. В примере \MiniGUI\SAMPLES\Advanced\Tsb_config приходиться запоминать значение: oBrw:bInit := {|| oBrw:SetColSize( 2, nWidthFirstColumn )} А потом в ResizeBrowse() всегда восстанавливать: Eval(oBrw:bInit) Перестал использовать этот параметр, хотя удобный вроде.
|
|
|
|
| |
Пост N: 5794
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.06.16 12:29. Заголовок: SergKis пишет: Form..
SergKis пишет: Такой вариант не компилится совсем
|
|
|
|
| постоянный участник
|
Пост N: 1036
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.06.16 13:55. Заголовок: Dima пишет:Такой вар..
Dima пишет: цитата: | Такой вариант не компилится совсем |
| ты вместо FormName дал реальное имя окна, на котором Button_1 и их DEFINE уже были. см. Minigui.chm -> ControlsCommand->button в самом конце properties:, events:, metods: тыкаешь Width и т.д. Я в основном пользуюсь от handle получать размеры GetWindow...(handle)
|
|
|
|
| |
Пост N: 5797
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.06.16 13:59. Заголовок: SergKis пишет: ты в..
SergKis пишет: цитата: | ты вместо FormName дал реальное имя окна |
| Понял , не хотел привязываться точно к имени окна , попробовал так xy+=ThisWindow.name.Button_1.Width+11 Не компилится Плюнул и оставил так xy+=getproperty(ThisWindow.name,"Button_1","Width")+11
|
|
|
|
| постоянный участник
|
Пост N: 1038
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.06.16 14:29. Заголовок: Dima пробни xy+=Thi..
Dima пробни xy+=This.Button_1.Width+11 и глянь i_this.ch
|
|
|
|
| |
Пост N: 5798
Зарегистрирован: 17.05.05
|
|
Отправлено: 26.06.16 14:42. Заголовок: SergKis пишет: xy+=..
SergKis пишет: цитата: | xy+=This.Button_1.Width+11 |
| Пробовал так , не компилится...
|
|
|
|
| постоянный участник
|
Пост N: 1039
Зарегистрирован: 17.02.12
|
|
Отправлено: 26.06.16 14:51. Заголовок: Dima пишет:Пробовал ..
Dima пишет: цитата: | Пробовал так , не компилится... |
| Тады ОЙ !
|
|
|
|
| |
Пост N: 5822
Зарегистрирован: 17.05.05
|
|
Отправлено: 28.06.16 21:42. Заголовок: Как узнать нажата кл..
Как узнать нажата клавиша (юзер на нее чашку кофе поставил ) или уже отпущена ? Интересуют VK_DOWN и VK_UP Через Sendmessage это можно получить ?
|
|
|
|
| постоянный участник
|
Пост N: 1051
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.06.16 17:36. Заголовок: Dima пишет Интересую..
Dima пишет цитата: | Интересуют VK_DOWN и VK_UP |
| с VK_DOWN - это bUserKeys, а с VK_UP нету, есть метод KeyUp, но в нем нет то, что надо По идее надо было бы иметь bKeyDown и bKeyUp для таких целей
|
|
|
|
| |
Пост N: 5823
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.06.16 19:44. Заголовок: Сергей я не много не..
Сергей я не много не о том. Есть главный бровс и подчиненный в одном окне. При движении по главному , показываю данные в подчиненном по ключу из базы главного в :BChange Там живет что то типа фильтра (SCOPE) + Obrw:Reset() подчиненного бровса. Так вот если база довольно большая И юзер зажал стрелку ВНИЗ то через какой то момент бровс может коника дать....то есть зависнет. Нужна идея (Игорь в курсе) что бы освежать подчиненный бровс только после того как юзер отпустил в конце концов стрелку вниз (вверх и тд и тп включая колесо мыши)
|
|
|
|
| постоянный участник
|
Пост N: 1052
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.06.16 20:13. Заголовок: Дима, я о том же. Мн..
Дима, я о том же. Мне пришлось влезть в KeyDown и сделать (у меня базовая версия 2.07 и изменения [в рамках разумного переношу из тек.]) METHOD KeyDown( nKey, nFlags ) CLASS TSBrowse ... Case nKey == VK_UP ::GoUp() If ::nRowPos == 1 If ::nKeyDownOld == nKey ::nKeyDownCnt += 1 EndIf If ::nKeyDownCnt >= ( ::nRowCount() ) PostMessage(::hWnd, WM_KEYUP , VK_UP , 0) PostMessage(::hWnd, WM_KEYDOWN, VK_PRIOR, 0) EndIf EndIf ::nKeyDownOld := nKey Case nKey == VK_DOWN ::GoDown() x If ::nRowPos == ::nRowCount() If ::nKeyDownOld == nKey ::nKeyDownCnt += 1 EndIf If ::nKeyDownCnt >= ( ::nRowCount() ) PostMessage(::hWnd, WM_KEYUP , VK_DOWN, 0) PostMessage(::hWnd, WM_KEYDOWN, VK_NEXT, 0) EndIf EndIf ::nKeyDownOld := nKey Case nKey == VK_LEFT ...
|
|
|
|
| постоянный участник
|
Пост N: 1053
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.06.16 20:17. Заголовок: PS а подчиненный бро..
PS а подчиненный бровс обновлять по таймеру при смене ключа связки раз в 1 сек. такой механизм работает со времен VO
|
|
|
|
| |
Пост N: 5824
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.06.16 20:21. Заголовок: Понял , думал есть к..
Понял , думал есть какие другие идеи. Игорь тоже предлагает по таймеру. Проехали тогда.
|
|
|
|
| |
Пост N: 5825
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.06.16 20:24. Заголовок: ЗЫ В консоли по ходу..
ЗЫ В консоли по ходу ни чего не виснет при обновлении подчиненного бровса и даже ни какой велосипед сочинять не надо. Пусть юзер хоть заснет на клаве :)
|
|
|
|
| постоянный участник
|
Пост N: 1054
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.06.16 21:05. Заголовок: Dima пишет Через Sen..
Dima пишет цитата: | Через Sendmessage это можно получить ? ... ни какой велосипед сочинять не надо |
| Дима, в чем сомнения ? в подчиненном бровсе переотображать надо (алгоритм делать), а управлять сообщеними (в гуи так принято), например смотри Tsb_Seek2 и on change с postmessage на кл.VK_F20. у тебя похожая ситуация только по таймеру, т.е. подчиненный бровс знает как отображать, а таимер просто посылает сообщение на переотображение через время и все
|
|
|
|
| |
Пост N: 5826
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.06.16 21:26. Заголовок: SergKis пишет: Дима..
SergKis пишет: Да привык к консоли , вот оно и сказывается. Мысль понял. Спасибо !
|
|
|
|
| |
Пост N: 5827
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.06.16 10:02. Заголовок: Хотел положить тень ..
Хотел положить тень на все окно а после .... ее убрать. Есть ли пример ?
|
|
|
|
| постоянный участник
|
Пост N: 1055
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.06.16 10:26. Заголовок: Dima пишет Хотел пол..
Dima пишет цитата: | Хотел положить тень на все окно а после .... ее убрать. |
| "моя твоя не понимай", что хочешь 1. цвет в окне на серый 2. не активное окно 3. контролы disable ???
|
|
|
|
| |
Пост N: 5828
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.06.16 10:31. Заголовок: SergKis пишет: 1. ц..
|
|
|
|
| |
Пост N: 5829
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.06.16 10:41. Заголовок: я бы даже сказал зат..
|
|
|
|
| постоянный участник
|
Пост N: 1056
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.06.16 10:45. Заголовок: Dima а это пробовал..
Dima а это пробовал (по chm) ? <WindowName>.BackColor := aBackColor SetProperty(cFrm, "BackColor", aBackColor)
|
|
|
|
| постоянный участник
|
Пост N: 1057
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.06.16 10:50. Заголовок: Dima пишет я бы даже..
Dima пишет цитата: | я бы даже сказал затемнение как на скрине |
| там не активное основное окно, поверх лежит модал окно NOSIZE NOMINIMIZE NOMAXMIZE
|
|
|
|
| постоянный участник
|
Пост N: 1058
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.06.16 11:00. Заголовок: PS точнее с MODAL ..
PS точнее с MODAL [ NOSIZE ] [ NOSYSMENU ] [ NOCAPTION ] со своим X и астион выхода
|
|
|
|
| |
Пост N: 5830
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.06.16 11:10. Заголовок: SergKis пишет: SetP..
SergKis пишет: цитата: | SetProperty(cFrm, "BackColor", aBackColor) |
| Счас пробну. Это не то.
|
|
|
|
| |
Пост N: 5831
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.06.16 11:20. Заголовок: SergKis пишет: там..
SergKis пишет: цитата: | там не активное основное окно, поверх лежит модал окно NOSIZE NOMINIMIZE NOMAXMIZE |
| Все верно и оно затемнено (основное) , вот так и мне надо бы. Или как тут http://windowstips.ru/notes/4507 но затемнить нужно конкретное окно
|
|
|
|
| постоянный участник
|
Пост N: 1059
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.06.16 11:36. Заголовок: Dima для начала кла..
Dima для начала клади модал окно поверх, отладив, занимайся сменой цветов в основном
|
|
|
|
| |
Пост N: 5832
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.06.16 11:48. Заголовок: SergKis пишет: для ..
SergKis пишет: цитата: | для начала клади модал окно поверх |
| положил , но окно (не главное) из которого его вызвал хотел затемнить , вот и все. могу сделать его прозрачным , но это не то , нужно затемнение.
|
|
|
|
| постоянный участник
|
Пост N: 1060
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.06.16 11:58. Заголовок: Dima пишет нужно зат..
Dima пишет таких алгоритмов в минигуи не видел
|
|
|
|
| |
Пост N: 5833
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.06.16 12:25. Заголовок: SergKis пишет: аких..
SergKis пишет: цитата: | аких алгоритмов в минигуи не видел |
| есть не что похожее C:\MiniGUI\SAMPLES\Advanced\BosTaurus\Demo5 При запуске сразу идем в меню и давим любой пункт , вылазит MsgInfo а окно за ним становится серым. Попробовал переделать Grayness_effect_start и Grayness_effect_end подавая на вход имя своего окна , не пашет однако.
|
|
|
|
| |
Пост N: 1023
Зарегистрирован: 20.02.11
|
|
Отправлено: 30.06.16 12:55. Заголовок: Это не то. Пример за..
Это не то. Пример затемняет только фон окна. все контролы на окне остаются как были. Попробуй пробежаться по свойсьву BackColor окна и ВСЕХ его контролов.
|
|
|
|
| moderator
|
Пост N: 957
Зарегистрирован: 11.02.10
|
|
Отправлено: 30.06.16 14:08. Заголовок: Haz пишет: Попробуй..
Haz пишет: цитата: | Попробуй пробежаться по свойству BackColor окна и ВСЕХ его контролов. |
| Эти две фукции могут в этом деле помочь /******************************************************************************/ Procedure ChangeAllBackcolor /******************************************************************************/ LOCAL i, nFormCount := Len( _HMG_aFormNames ) LOCAL nI, cCtrlName, cFormName LOCAL aCtrls FOR i := 1 TO nFormCount cFormName := _HMG_aFormNames [ i ] IF _IsWindowDefined ( cFormName ) SetProperty( cFormName, "BACKCOLOR", GRAY ) aCtrls := _GetArrayOfAllControlsForForm( cFormName ) FOR nI := 1 TO Len( aCtrls ) cCtrlName := aCTrls[ nI ] SetProperty( cFormName, cCtrlName, "BACKCOLOR", GRAY ) SetProperty( cFormName, cCtrlName, "FONTCOLOR", WHITE ) NEXT ENDIF NEXT Return /******************************************************************************/ FUNCTION _GetArrayOfAllControlsForForm ( cFormName ) /******************************************************************************/ LOCAL nFormHandle, i, nControlCount, aRetVal := {}, x nFormHandle := GetFormHandle ( cFormName ) nControlCount := Len ( _HMG_aControlHandles ) FOR i := 1 TO nControlCount IF _HMG_aControlParentHandles[ i ] == nFormHandle IF ValType( _HMG_aControlHandles[ i ] ) == 'N' IF ! Empty( _HMG_aControlNames[ i ] ) IF AScan( aRetVal, _HMG_aControlNames[ i ] ) == 0 AAdd( aRetVal, _HMG_aControlNames[ i ] ) ENDIF ENDIF ELSEIF ValType( _HMG_aControlHandles[i ] ) == 'A' FOR x := 1 TO Len ( _HMG_aControlHandles[ i ] ) IF !Empty( _HMG_aControlNames[ i ] ) IF AScan( aRetVal, _HMG_aControlNames[ i ] ) == 0 AAdd( aRetVal, _HMG_aControlNames[ i ] ) ENDIF ENDIF NEXT x ENDIF ENDIF NEXT i RETURN ASort( aRetVal )
|
|
|
|
| постоянный участник
|
Пост N: 1061
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.06.16 14:24. Заголовок: Haz пишет Попробуй п..
Haz пишет цитата: | Попробуй пробежаться по свойсьву BackColor окна и ВСЕХ его контролов. |
| тогда контролам и disable добавить можо
|
|
|
|
| |
Пост N: 1024
Зарегистрирован: 20.02.11
|
|
Отправлено: 30.06.16 14:28. Заголовок: SergKis пишет: тогд..
SergKis пишет: цитата: | тогда контролам и disable добавить можо |
| да, вполне логично это сделать
|
|
|
|
| постоянный участник
|
Пост N: 4987
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.06.16 18:02. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Эти две фукции могут в этом деле помочь |
| Не совсем понятно.... Имею кнопку на форме, при нажатии должны: затемнить текущая форма + вызов новой формы, после закрытия новой формы нужно разтемнить текущую форму.
|
|
|
|
| постоянный участник
|
Пост N: 1062
Зарегистрирован: 17.02.12
|
|
Отправлено: 30.06.16 18:57. Заголовок: Andrey пишет Не совс..
Andrey пишет добавь local b, f, aClrOld := {} ... cCtrlName := aCTrls[ nI ] b := GetProperty( cFormName, cCtrlName, "BACKCOLOR" ) f := GetProperty( cFormName, cCtrlName, "FONTCOLOR" ) aAdd(aClrOld, {cFormName, cCtrlName, b, f}) SetProperty( cFormName, cCtrlName, "BACKCOLOR", GRAY ) SetProperty( cFormName, cCtrlName, "FONTCOLOR", WHITE ) ... Return aClrOld на вызове новой формы или на нажатии темнишь и получаешь старые значения на release новой возвращаешь старые значения на форму - разтемняешь
|
|
|
|
| постоянный участник
|
Пост N: 4988
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.06.16 20:51. Заголовок: У Дмитрия красивое з..
У Дмитрия красивое затенение окна. Примерно так хочется - кнопка BUTTONEX Button_Test с обработкой: ACTION {|| aObj := ChangeAllBackcolor(ThisWindow.Name) ,; MsgDebug("Test Change All Backcolor Form") ,; ChangeAllBackRestore(aObj,ThisWindow.Name) } Фон менять нужно у всех объектов, включая TsBrowse .... С картинкой только это не выйдет, я имею ввиду PNG со свойством TRANSPARENT BACKGROUNDCOLOR aBackColor ....
|
|
|
|
| |
Пост N: 5834
Зарегистрирован: 17.05.05
|
|
Отправлено: 02.07.16 12:43. Заголовок: При нажатии кнопки н..
При нажатии кнопки на форме , каким образом запомнить фон цвета не активного курсора бровса , сменить его и затем снова восстановить. Объясню зачем. Кнопка на форме скипает бровс. У нее такая процедура ACTION {|| tmpbrw:GoDown(),tmpbrw:SetFocus() } При нажатии на нее бровс теряет фокус ввода и затем снова его получает , в результате имеем на бровсе "подмигивание" курсора. Попробовал в кнопке ON GOTFOCUS {|| tmpbrw:setcolor({12},{Rgb( 198, 226, 255 ), Rgb( 159, 207, 255 )})} Но тогда при наведении на кнопку , дергается весь бровс Проехали
|
|
|
|
| постоянный участник
|
Пост N: 596
Зарегистрирован: 13.10.05
|
|
Отправлено: 07.07.16 09:49. Заголовок: У разных языков раз..
У разных языков разные реализации. У Делфи у формы есть свойство AlphaBlend (и параметр) - устанавливает прозрачность. А дальше все просто - надо затенить основную форму - поверх ее (а можно и на весь Экран) открываешь вторую с нужной прозрачность и оттенком. На Основной ничего делать с контролами не надо.Кстати, так и Локеры пишутся
|
|
|
|
| |
Пост N: 1026
Зарегистрирован: 20.02.11
|
|
Отправлено: 07.07.16 23:12. Заголовок: Влад, идея понятна. ..
Влад, идея понятна. Думаю будет работать. Спасибо
|
|
|
|
| |
Пост N: 5851
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.07.16 08:11. Заголовок: Как узнать что кнопк..
Как узнать что кнопка имеет фокус ввода ? PS Проехали сделал через переменную
|
|
|
|
| постоянный участник
|
Пост N: 1067
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.07.16 15:02. Заголовок: Dima пишет:Как узнат..
Dima пишет: цитата: | Как узнать что кнопка имеет фокус ввода ? |
| IF ( nI := ascan(_HMG_aControlHandle, GetFocus()) ) > 0 // фокус на контроле МиниГуи IF _HMG_aControlType [ nI ] == "BUTTON" .and. _HMG_aControlNames [ nI ] == ButtonName // нужный button (или другой контрол) нашли и он в фокусе ... ENDIF ENDIF
|
|
|
|
| |
Пост N: 5852
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.07.16 15:32. Заголовок: SergKis Спасибо !..
SergKis Спасибо Это я так понял для всех окон а если для конкретного окна , то как ? И еще вопрос: как узнать установлен ли конкретный шрифт в системе ?
|
|
|
|
| постоянный участник
|
Пост N: 1068
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.07.16 17:10. Заголовок: Dima GetFocus() дае..
Dima GetFocus() дает handle контрола в фокусе (окно тоже) ParentFormHandle :=_HMG_aControlParenthandles [ nI ] If ( nK := ascan(_HMG_aFormHandles, ParentFormHandle) ) > 0 cFormName := _HMG_aFormNames[ nK ] EndIf
|
|
|
|
| постоянный участник
|
Пост N: 1069
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.07.16 17:15. Заголовок: Dima пишет как узна..
Dima пишет цитата: | как узнать установлен ли конкретный шрифт в системе ? |
| где то уже было, Андрей выяснял, если не ошибаюсь, сам не использовал.
|
|
|
|
| постоянный участник
|
Пост N: 1070
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.07.16 17:20. Заголовок: Dima пишет Это я так..
Dima пишет цитата: | Это я так понял для всех окон а если для конкретного окна , то как ? |
| не очень понимаю к чему клонишь ? If GetControlHandle(cControlName, cForm) == GetFocus() // нужный конрол нужного окна в фокусе EndIf
|
|
|
|
| |
Пост N: 5853
Зарегистрирован: 17.05.05
|
|
Отправлено: 09.07.16 21:44. Заголовок: SergKis пишет: где ..
SergKis пишет: цитата: | где то уже было, Андрей выяснял, если не ошибаюсь |
| Да он выяснял , загружен ли фонт в программе . Ответ был таков GetFontHandle( Font_1 ) если вернуло 0 , не загружен. А вопрос был а доступен ли фонт в системе. В семерке скажем есть фонты которых нет в XP а я формирую Excel отчет и там хочу установить нужный фонт с проверкой конечно. Похожую функцию нашел GetFont() , но она и диалоговое окно вешает а оно мне не нужно. Мне бы просто массив имен фонтов Насчет фокуса контрола вроде понял , тяжко дается после консоли все это
|
|
|
|
| постоянный участник
|
Пост N: 1071
Зарегистрирован: 17.02.12
|
|
Отправлено: 09.07.16 23:29. Заголовок: Dima пишет тяжко да..
Dima пишет цитата: | тяжко дается после консоли все это |
| Главное помни, что на событиях окон, контролов (в блоках кода) всегда есть переменные _HMG_ThisFormIndex _HMG_ThisEventType _HMG_ThisType _HMG_ThisIndex _HMG_ThisFormName _HMG_ThisControlName от них плясать надо в блоках кода. _HMG_ThisType := W-window\C-control а GetFocus(), как правило нужно в процедурах типа TIMER если в GetBox использовать ACTION, ACTION2 и при клике на буттоны соответствующие, в вызовах GetFocus() даст handle нажатого button (он отсутствует в регистации контрлов МиниГуи), а _HMG_ThisControlName даст имя GetBox, к которому бутонны относятся. Через _HMG_ThisIndex можно достать из переменных _HMG_... все о контроле, а через _HMG_ThisFormIndex можно достать из переменных _HMG_... все о форме на котором контрол.
|
|
|
|
| |
Пост N: 5857
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.07.16 13:17. Заголовок: Vlad04 пишет: А дал..
Vlad04 пишет: цитата: | А дальше все просто - надо затенить основную форму - поверх ее (а можно и на весь Экран) открываешь вторую с нужной прозрачность |
| Сделал , прикольно получилось !
|
|
|
|
| |
Пост N: 5858
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.07.16 13:34. Заголовок: http://f3.s.qip.ru/g..
|
|
|
|
| постоянный участник
|
Пост N: 597
Зарегистрирован: 13.10.05
|
|
Отправлено: 10.07.16 14:00. Заголовок: Dima пишет: цитата..
цитата: | Dima пишет: цитата: Как узнать что кнопка имеет фокус ввода ? |
| Можно в некоторых случаях так, к примеру: цитата: | if This.FocusedControl == "Text_New" ..... endif |
|
|
|
|
|
| |
Пост N: 5859
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.07.16 14:14. Заголовок: Vlad04 И так сработ..
Vlad04 И так сработает ? if GetProperty( "Form_0", "FocusedControl" )=="Text_New" .... endif
|
|
|
|
| постоянный участник
|
Пост N: 598
Зарегистрирован: 13.10.05
|
|
Отправлено: 10.07.16 15:03. Заголовок: Dima И так сработае..
|
|
|
|
| |
Пост N: 5860
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.07.16 15:10. Заголовок: Vlad04 пишет: И так..
Vlad04 пишет: У меня не работает , во всяком случае в GOTFOCUS окна , впрочем как и не пашет установка фокуса на бровс. При чем это не пашет если окно получает фокус ввода извне (не из моей проги). Такое поведение только на семерке и XP , выше уже все в порядке. К примеру из проги сформировал отчет EXCEL и вывел его окно так ShowWindow(oExcel:hWnd, SW_MAXIMIZE) BringWindowToTop(oExcel:hWnd) То после возврата в свою программу все танцы с установкой (проверкой) фокуса не работают в GOTFOCUS окна. Поэтому пришлось делать через свои переменные.
|
|
|
|
| |
Пост N: 5861
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.07.16 15:33. Заголовок: Как заставить мышку ..
Как заставить мышку ездить только в пределах указанного окна а после определенных действий вернуть как было ? Вроде был пример , но пока не вижу. ЗЫ Идея вроде ясна , на ON MOUSEMOVE окна вешаем процедуру которая снимает координаты мыши (GETCURSORPOS()) , затем сверяем координаты с координатами окна и если нужно ставим курсор мыши куда нужно с помощью SetcursorPos()
|
|
|
|
| moderator
|
Пост N: 961
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.07.16 15:36. Заголовок: Dima пишет: Мне бы ..
Dima пишет: цитата: | Мне бы просто массив имен фонтов |
| Посмотри функцию rr_GetFontNames() из сырцов библиотеки HbPrinter
|
|
|
|
| |
Пост N: 5862
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.07.16 15:40. Заголовок: gfilatov2002 То что..
gfilatov2002 То что надо
|
|
|
|
| постоянный участник
|
Пост N: 599
Зарегистрирован: 13.10.05
|
|
Отправлено: 11.07.16 11:17. Заголовок: Dima Не клацайте на..
Dima цитата: | Не клацайте на форме Excel |
| Желательно, до окончания формирования отчета , Excel не показывать. Для больших отчетов существенное ускорение.
|
|
|
|
| |
Пост N: 5865
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.07.16 12:12. Заголовок: Vlad04 пишет: Желат..
Vlad04 пишет: цитата: | Желательно, до окончания формирования отчета , Excel не показывать. |
| Да я знаю , так и делал. Сам отчет не очень большой да и юзеры захотели "мультов"
|
|
|
|
| |
Пост N: 5869
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.07.16 21:51. Заголовок: Вертикальный скролл ..
Вертикальный скролл вообще отрубается в TS ? Установка obrw:lNoVScroll := TRUE ему до лампочки
|
|
|
|
| |
Пост N: 5870
Зарегистрирован: 17.05.05
|
|
Отправлено: 13.07.16 22:11. Заголовок: И еще наверное косяк..
И еще наверное косяк В бровсе 2 колонки Есть установки obrw:nfreeze:=2 obrw:lLockFreeze:=FALSE Так вот если вертикального скрола нет (база не большая) то я могу входит в режим редактирования двойным кликом мышки , если этот скрол есть то не могу , хотя VK_RETURN пускает в обоих случаях в режим редактирования.
|
|
|
|
| |
Пост N: 1027
Зарегистрирован: 20.02.11
|
|
Отправлено: 13.07.16 23:23. Заголовок: Dima пишет: Установ..
Dima пишет: цитата: | Установка obrw:lNoVScroll := TRUE ему до лампочки |
| Перед LoadFields() или Перед ::SetArray() те до того как определены данные для бровса oBrw:lNoVScroll := TRUE oBrw:oVScroll := NIL ЗЫ Все в исходниках Это как в поговорке - "Моется тот кому лень чесаться" так и мучается тот кому лень читать
|
|
|
|
| постоянный участник
|
Пост N: 5003
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.07.16 23:23. Заголовок: Dima пишет: Вертика..
Dima пишет: цитата: | Вертикальный скролл вообще отрубается в TS ? Установка obrw:lNoVScroll := TRUE ему до лампочки |
| Ага, подтверждаю ! Тоже с этим замучился.
|
|
|
|
| |
Пост N: 1028
Зарегистрирован: 20.02.11
|
|
Отправлено: 13.07.16 23:25. Заголовок: Dima пишет: Так вот..
Dima пишет: цитата: | Так вот если вертикального скрола нет (база не большая) то я могу входит в режим редактирования двойным кликом мышки , если этот скрол есть то не могу , хотя VK_RETURN пускает в обоих случаях в режим редактирования. |
| с этим не сталкивался , в сырцах вроде нет зависимости редакции от скрола
|
|
|
|
| |
Пост N: 5871
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.07.16 08:28. Заголовок: Haz пишет: Перед Lo..
Haz пишет: цитата: | Перед LoadFields() или Перед ::SetArray() те до того как определены данные для бровса oBrw:lNoVScroll := TRUE oBrw:oVScroll := NIL |
| Не работает однако. Скрол по прежнему рисуется , но при движении по бровсу у него реакции нет (стоит на месте) Нажимаем мышкой но скроле которого не должно быть и получаем ошибку Called from GETPOS(0) Called from TSBROWSE:VSCROLL(12209) Called from TSBROWSE:HANDLEEVENT(7340) Called from EVENTS(0) Вообще я смотрел по началу примеры , прежде чем спросить и один из них твой Tsb_cursor и там была тщетная попытка выключить вертикальный скрол , не до :SetArray а после. И еще непонятка (думал решили) , каким образом горизонтальный скролл влияет на nAdjColumn , если этот скролл есть nAdjColumn работает правильно , если скрола нет то он не работает. Не должно быть между ними ни какой связи , но получается что nAdjColumn зависим от г. скрола.
|
|
|
|
| |
Пост N: 1029
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.07.16 09:04. Заголовок: Dima пишет: Не рабо..
Dima пишет: работает с работы скину рабочий пример
|
|
|
|
| |
Пост N: 5872
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.07.16 09:27. Заголовок: Haz пишет: с работы..
Haz пишет: цитата: | с работы скину рабочий пример |
| OK Тут дело такое или его отключить что не вышло или его починить что бы не глючил с базой ADS Глюк выглядит так (если потаскать за верт. скролл)
|
|
|
|
| |
Пост N: 1030
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.07.16 10:52. Заголовок: Haz пишет: работает..
Haz пишет: цитата: | работает с работы скину рабочий пример |
| Найди вертикальный скрол Записей в бровсе 1000 http://shot.qip.ru/00Qz9C-610KPoqqQy/ кусок кода из Tsb_Cursor DEFINE TBROWSE oBrw AT 17, 0 ; OF Form_0 ; WIDTH Form_0.WIDTH - 2 * GetBorderWidth() ; HEIGHT Form_0.HEIGHT - GetTitleHeight() - GetTitleHeight() - ; GetProperty( "Form_0", "StatusBar", "Height" ) - 2 * GetBorderHeight() ; GRID ; SELECTOR TRUE; FONT "Arial" SIZE 12 oBrw:lNoVScroll := TRUE oBrw:oVScroll := NIL oBrw:SetArray( aDatos, .T. )
|
|
|
|
| |
Пост N: 5873
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.07.16 11:28. Заголовок: Haz пишет: Найди ве..
Haz пишет: Попробуй его не найти если бровс по базе На массиве он да убивается.
|
|
|
|
| |
Пост N: 1031
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.07.16 12:14. Заголовок: Dima пишет: Попробу..
Dima пишет: цитата: | Попробуй его не найти если бровс по базе |
| попробовал oBrw:bChange := {|| oBrw:oVScroll:SetRange( 0, 0 ) } не нашел
|
|
|
|
| |
Пост N: 5874
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.07.16 14:11. Заголовок: Haz пишет: oBrw:bCh..
|
|
|
|
| |
Пост N: 5875
Зарегистрирован: 17.05.05
|
|
Отправлено: 14.07.16 21:46. Заголовок: TS бровс , футер име..
TS бровс , футер имеет 5 строк. Хотелось бы его раскрасить нежным цветом по условию , но он ловит только то что ему покормили в :cFooting. К базе он не привязан , пока не представляю как это сделать. Есть у кого идеи как это сделать в Setcolor ({ 9 ,10}.....)?
|
|
|
|
| |
Пост N: 1032
Зарегистрирован: 20.02.11
|
|
Отправлено: 14.07.16 23:11. Заголовок: Dima пишет: Есть у ..
Dima пишет: цитата: | Есть у кого идеи как это сделать в Setcolor ({ 9 ,10}.....)? |
| как и ячейки не катит ? т.е. вместо массива цветов - блок кода который по условию дает нужный массив
|
|
|
|
| постоянный участник
|
Пост N: 1072
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.07.16 23:48. Заголовок: Dima пишет: Есть у к..
Dima пишет: цитата: | Есть у кого идеи как это сделать в Setcolor ({ 9 ,10}.....)? |
| For i := 1 To len(oBrw:aColumns) oCol := oBrw:aColumns[ i ] oCol::nClrFootBack := {|nCol,oBr| MyFootBack(nCol, oBr) } oCol::nClrFootFore := {|nCol,oBr| MyFootFore(nCol, oBr) } Next ... Static Function MyFootBack( nCol, oBrw ) Local oCol := oBrw:nCol, nClr := CLR_YELLOW // или RGB( 255, 255, 0 ) If oCol:cName == "ID" nClr := CLR_RED ElseIf oCol:cName == "NAME" nClr := CLR_HMAGENTA ... EndIf Return nClr Static Function MyFootFore( nCol, oBrw ) Local oCol := oBrw:nCol, nClr := CLR_YELLOW // или RGB( 255, 255, 0 ) If oCol:cName == "ID" nClr := CLR_HBLUE ElseIf oCol:cName == "NAME" nClr := CLR_BLACK ... EndIf Return nClr как то так
|
|
|
|
| постоянный участник
|
Пост N: 1073
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.07.16 23:53. Заголовок: PS вместо Local oCol..
PS вместо Local oCol := oBrw:nCol надо Local oCol := oBrw:aColumns[nCol]
|
|
|
|
| постоянный участник
|
Пост N: 1074
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.07.16 00:35. Заголовок: PS 2 для градиентной..
PS 2 для градиентной заливки возвращать можно nClr := { CLR_..., CLR_...} или блоки кода nClr := { {|nCol,oBr| RGB(...)}, {|nCol,oBr| RGB(...)} } для хранения цветов и др. инф. для работы с блоками колонок хорошо исп. oCol:Cargo oBrw:GetColumn("ID"):Cargo := { CLR_YELOW, CLR_BLUE, CLR_GREEN,...} и в функциях значения брать из oCol:Cargo
|
|
|
|
| |
Пост N: 5876
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.07.16 08:29. Заголовок: SergKis Haz Я навер..
SergKis Haz Я наверное не корректно поставил вопрос
|
|
|
|
| постоянный участник
|
Пост N: 1075
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.07.16 08:58. Заголовок: Dima Раскрасить мож..
Dima Раскрасить можно ВСЕ строки футера в один цвет. для разноцветных строк можно пробнуть другой Tsb без header, footer, связав его с размерами и событиями изм. размеров. Если правильно прнял твою хотелку
|
|
|
|
| |
Пост N: 5877
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.07.16 09:11. Заголовок: SergKis Понял...
SergKis Понял.
|
|
|
|
| постоянный участник
|
Пост N: 1076
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.07.16 09:24. Заголовок: Dima Возможно проще..
Dima Возможно проще сделать по клику на футер (с сокращенным кол-вом строк) на раскрытие др. Tsb расшифровки этих данных, т.к. упр. футером на Tsb с 2мя HScroll-ами и изм. рамеров может оказаться затрудненным
|
|
|
|
| |
Пост N: 5878
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.07.16 09:27. Заголовок: SergKis Кстати да в..
SergKis Кстати да вариант , по клику или наведению на него мыши , хотя с наведением наверное не получится , TS не умеет такого.
|
|
|
|
| постоянный участник
|
Пост N: 1077
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.07.16 10:02. Заголовок: Dima Можно еще проб..
Dima Можно еще пробнуть Label-на футоре, с цветами и при oBrw:DrawFooter() перепоказывать их, но ... это пробовать (как бы label под футером tsb не оказался)
|
|
|
|
| постоянный участник
|
Пост N: 1078
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.07.16 10:06. Заголовок: Dima пишет хотя с на..
Dima пишет цитата: | хотя с наведением наверное не получится , TS не умеет такого. |
| см. блок кода на ToolTip (мышой на футер) - может что получится
|
|
|
|
| |
Пост N: 5879
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.07.16 10:21. Заголовок: SergKis пишет: см. ..
SergKis пишет: Ты наверное про cToolTip Он ведь долго не живет , показался на время и пропал
|
|
|
|
| постоянный участник
|
Пост N: 1079
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.07.16 10:34. Заголовок: Dima Да. Но провери..
Dima Да. Но проверить, что нет контрола\окна можно и при отсутсвии послать сообщение, к примеру, на FK_F25 вполне можно
|
|
|
|
| постоянный участник
|
Пост N: 1080
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.07.16 10:38. Заголовок: Dima пишет Он ведь д..
Dima пишет цитата: | Он ведь долго не живет , показался на время и пропал |
| Если расшифровку делать через сам cToolTip, то надо сообщение сделать много строчным и установить (вроде должно ставиться) время сообщения больше, потом вернуть
|
|
|
|
| |
Пост N: 5880
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.07.16 12:09. Заголовок: а при наведении могу..
а при наведении могу показать какое то свое окно вместо Tooltip ? например окно а в нем бровс , если мышка скажем уезжает за пределы этого окна то окно закрывается.
|
|
|
|
| постоянный участник
|
Пост N: 1081
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.07.16 12:26. Заголовок: Dima пишет а при нав..
Dima пишет цитата: | а при наведении могу показать какое то свое окно вместо Tooltip ? например окно а в нем бровс |
| делай окно без заголовка, кнопочек, сисменю (без всего) с Tsb, ставь на него фокус, при потере фокуса окном, убиваешь его, передавая фокус где был
|
|
|
|
| |
Пост N: 5881
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.07.16 12:41. Заголовок: что бы окно фокус по..
что бы окно фокус потеряло нужно где то мышкой клацнуть а надо что бы окно закрывалось если курсор мышки выехал за координаты этого временного окна. наверное это можно сделать в MOUSEMOVE() TS или в ON MOUSEMOVE окна
|
|
|
|
| постоянный участник
|
Пост N: 1082
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.07.16 13:00. Заголовок: Это все можно, вопро..
Это все можно, вопрос случайного выезда мыши за окно (задели мышу, задели случайно поверхность мышинную) - это может раздражать
|
|
|
|
| |
Пост N: 5882
Зарегистрирован: 17.05.05
|
|
Отправлено: 15.07.16 13:06. Заголовок: ну не знаю , меня не..
ну не знаю , меня не раздражает к примеру как это сделано в C:\MiniGUI\SAMPLES\BASIC\Mouse_Coords\demo4.exe
|
|
|
|
| постоянный участник
|
Пост N: 1083
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.07.16 15:00. Заголовок: Dima тогда вперед ..
Dima тогда вперед меня раздражает без клацанья (скачет что не попадя, а я не просил)
|
|
|
|
| |
Пост N: 6581
Зарегистрирован: 17.05.05
|
|
Отправлено: 16.09.17 16:48. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Посмотри функцию rr_GetFontNames() из сырцов библиотеки HbPrinter |
| А еще есть WIN_ENUMFONTFAMILIES()
|
|
|
|
| |
Пост N: 50
Зарегистрирован: 18.06.15
|
|
Отправлено: 13.12.17 13:03. Заголовок: Непонятная ошибка ....?
При выполнение простой функции - DEFINE TAB Tab_3 PARENT Form_6 ... PAGE ' СВРА ' @ 130,500 CHECKBOX CheckBox_4 PARENT Form_6 ..... ..... Form_6.CheckBox_4.Enable := .f. вылетает ошибка в сырцах ... как это можно обойти ...? Application: C:\MiniGUI\SAMPLES\MY_BASIC\NAMOTKA\rekl_nam.exe Date: 11.12.2017 Time: 11:16:19 Time from start: 0 days 0 hours 0 mins 6 secs Error BASE/1132 Переполнение массива: Неверное количество аргументов Called from EVENTS(266) in module: h_events.prg Called from DISABLEWINDOW(0) Called from _DISABLECONTROL(1223) in module: h_controlmisc.prg Called from SETPROPERTY(3740) in module: h_controlmisc.prg Called from VIBOR_4(123) in module: rekl_nam.prg Called from (b)VIBOR(45) in module: rekl_nam.prg Called from _DOCONTROLEVENTPROCEDURE(1794) in module: h_windows.prg Called from EVENTS(1733) in module: h_events.prg Called from DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1448) in module: h_windows.prg Called from VIBOR(54) in module: rekl_nam.prg Called from (b)MAIN(270) in module: rekl_nam.prg Called from _DOCONTROLEVENTPROCEDURE(1794) in module: h_windows.prg Called from EVENTS(1733) in module: h_events.prg Called from DOMESSAGELOOP(0) Called from _ACTIVATEWINDOW(1448) in module: h_windows.prg Called from MAIN(319) in module: rekl_nam.prg
|
|
|
|
| постоянный участник
|
Пост N: 743
Зарегистрирован: 13.10.05
|
|
Отправлено: 13.12.17 14:48. Заголовок: Сложно сказать. Пров..
Сложно сказать. Проверь - объявлена ли форма 6 в модуле. Попробуй отдельный микропример, который повторяет условия и т.п
|
|
|
|
| moderator
|
Пост N: 1202
Зарегистрирован: 11.02.10
|
|
Отправлено: 13.12.17 14:50. Заголовок: Alex_Cher пишет: вы..
Alex_Cher пишет: Ищите ошибку у себя в коде либо подготовьте небольшой пример, который демонстрирует проблему. Мой тестовый пример отработал нормально #include "minigui.ch" Function Main DEFINE WINDOW Form_1 ; AT 0,0 ; WIDTH 640 HEIGHT 480 ; TITLE 'Harbour MiniGUI Demo' ; MAIN ; ON SIZE SizeTest() /* DEFINE MAIN MENU DEFINE POPUP 'Test' MENUITEM 'Disable Page 1' ACTION DisableTab( 'Tab_1', 'Form_1', 1 ) MENUITEM 'Enable Page 1' ACTION EnableTab( 'Tab_1', 'Form_1', 1 ) SEPARATOR MENUITEM 'Disable Page 2' ACTION DisableTab( 'Tab_1', 'Form_1', 2 ) MENUITEM 'Enable Page 2' ACTION EnableTab( 'Tab_1', 'Form_1', 2 ) SEPARATOR MENUITEM 'Disable Page 3' ACTION DisableTab( 'Tab_1', 'Form_1', 3 ) MENUITEM 'Enable Page 3' ACTION EnableTab( 'Tab_1', 'Form_1', 3 ) SEPARATOR MENUITEM "E&xit" ACTION Form_1.Release() END POPUP END MENU */ DEFINE TAB Tab_1 ; AT 10,10 ; WIDTH 600 ; HEIGHT 400 ; VALUE 1 ; TOOLTIP 'Tab Control' PAGE 'Page &1' @ 60,20 textbox txt_1 value '1-Uno' @ 90,20 textbox txt_2 value '2-Dos' @ 120,20 textbox txt_3 value '3-Tres' END PAGE PAGE 'Page &2' @ 60,60 textbox txt_a value 'A-Uno' @ 90,60 textbox txt_b value 'B-Dos' @ 120,60 COMBOBOX combo_1 ITEMS {'1-Uno','2-Dos','3-Tres'} VALUE 1 END PAGE PAGE 'Page &3' @ 60,100 textbox txt_c value 'C-Uno' @ 90,100 textbox txt_d value 'D-Dos' // @ 120,100 SPINNER spinner_1 RANGE 0,10 VALUE 5 Define CheckBox CheckBox_4 Row 120 Col 100 Value .F. Caption 'Simple CheckBox' Width 120 PARENT Form_1 End CheckBox @ 150,100 FRAME Frame_2 WIDTH 120 HEIGHT 110 CAPTION "Page 3" DEFINE RADIOGROUP R1 ROW 170 COL 120 OPTIONS { 'Uno','Dos','Tres' } VALUE 1 WIDTH 80 END RADIOGROUP END PAGE END TAB END WINDOW Form_1.CheckBox_4.Enabled := .f. // DisableTab( 'Tab_1', 'Form_1', 2 ) Form_1.Center Form_1.Activate Return Nil Procedure SizeTest() Form_1.Tab_1.Width := Form_1.Width - 40 Form_1.Tab_1.Height := Form_1.Height - 80 Return
|
|
|
Ответов - 151
, стр:
1
2
3
4
5
6
7
8
All
[только новые]
|
|