Автор | Сообщение |
|
| |
Пост N: 5760
Зарегистрирован: 17.05.05
|
|
Отправлено: 23.06.16 21:20. Заголовок: [?] Простой вопрос
Есть главное окно программы , в нем живут несколько CHILD окон (не MDI). В процедуре ON INTERACTIVECLOSE главного окна есть блок кода , если он вернет TRUE тогда закроется главное окно и программа завершится. А вот если блок кода вернул FALSE , то как вернуть фокус ввода на окно на котором был фокус ввода до нажатия крестика главного окна ?
|
|
|
Новых ответов нет
, стр:
1
2
3
4
5
6
7
8
All
[см. все]
|
|
|
| |
Пост 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 для каждого бровса , да юзера заклеймят меня )))
|
|
|
Новых ответов нет
, стр:
1
2
3
4
5
6
7
8
All
[см. все]
|
|