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




Пост 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: 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 появляется.
Что не так делаю ?


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




Пост N: 1017
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 24.06.16 22:00. Заголовок: Dima пишет:но GET по..


Dima пишет:
 цитата:
но GET появляется


срабатывает метод KeyChar, попробуй поставь в блок кода obrw:nUserKey := 255 до lLock
у себя я ввел переменную в TsBrowse lNoKeyChar := .T. и отлючил по умолчанию

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




Пост 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 }




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




Пост N: 5773
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 24.06.16 22:15. Заголовок: SergKis Понял, попр..


SergKis
Понял, попробую , отпишу.


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




Пост 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



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




Пост 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



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




Пост N: 1020
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.06.16 00:15. Заголовок: Dima коректировка п..


Dima
коректировка по VK_RETURN ?
пробни
ElseIf nKey == VK_RETURN
// uRet := .F.

ElseIf nKey == VK_F4

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




Пост 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 пускает и не пойму как это предотвратить.

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




Пост N: 5776
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.06.16 09:30. Заголовок: Разобрался...


Разобрался.

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




Пост N: 4975
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.06.16 13:57. Заголовок: Dima пишет: Разобра..


Dima пишет:

 цитата:
Разобрался.


Поделись !

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




Пост N: 5778
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.06.16 14:03. Заголовок: Andrey пишет: Подел..


Andrey пишет:

 цитата:
Поделись !


Чем ?

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




Пост 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

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




Пост 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


Там какой то косяк однако. Дырки да нет. Но стоит курсором доехать до нижней границы бровса
и продолжать двигаться вниз то записи над курсором ломаются и в них дублируется одна и та же строка.
При движении вверх , внизу бровса имеет место фантомная строка.

Скрин когда едем вниз

Когда едем вверх (яйцо постоянно живет в самом низу)



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




Пост 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



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




Пост N: 1022
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.06.16 16:51. Заголовок: Dima пишет:Дошли рук..


Dima пишет:
 цитата:
Дошли руки потестить твою функцию SetNoHole


текст надо взять из примера Tsb_Seek_2 (если происходит искажение отображения, играться надо параметром nDelta) :Скрытый текст

использовать для окна с NOSIZE, если resize tsb возможен, ф-ю не применять

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




Пост 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. ) , проблем нет , но есть дырка.
Что то в ней не так....

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




Пост N: 5782
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.06.16 17:09. Заголовок: Проверил пример Tsb_..


Проверил пример Tsb_Seek_2 , имею те же проблемы

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




Пост N: 1023
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.06.16 17:12. Заголовок: Dima поставь nDelta..


Dima
поставь nDelta := 2 \ 3
к сожалению tsb очень чувствителен к изменению размеров высот его элементов, зависит от разрешения монтора, фонта
у себя вынес значение nDelta в ini и бывает оставляю дырку в 1\2\3 пикселя

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




Пост N: 1024
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 25.06.16 17:18. Заголовок: Dima пишет:Проверил ..


Dima пишет:
 цитата:
Проверил пример Tsb_Seek_2 , имею те же проблемы


у меня на двух компах с 15' и 11' экраном все хорошо с примером, взят как есть

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




Пост N: 5783
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.06.16 17:20. Заголовок: SergKis пишет: пост..


SergKis пишет:

 цитата:
поставь nDelta := 2 \ 3


Это не выход , так как ты верно пишешь что разрешение может быть разное , фонты да
и размеры самого бровса , не писать же в INI nDelta для каждого бровса , да юзера
заклеймят меня )))

Спасибо: 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 час. Хитов сегодня: 108
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет