Автор | Сообщение |
Vlad04
|
| постоянный участник
|
Пост N: 420
Зарегистрирован: 13.10.05
|
|
Отправлено: 19.12.13 18:16. Заголовок: TsBrowse в Минигуи (продолжение)
TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений К примеру цитата: | DEFINE TBROWSE oBrw2 ; AT 60,450 ; ALIAS cAlias ; OF Form1 ; WIDTH 330 ; HEIGHT 340 ; FONT "Verdana" ; SIZE 9 ; ON DBLCLICK CopyRec(); ON GOTFOCUS fModelo_Hab(2) ; AUTOFILTER ; CELLED EDIT; VALUE nRec; GRID |
| Здесь я собрал параметры из разных tBrows Можно или нет и какие парметры заменить выражением ( и каким) ? oBrw2:.... oBrw2:....
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|
gfilatov2002
|
| moderator
|
Пост N: 1067
Зарегистрирован: 11.02.10
|
|
Отправлено: 07.02.17 19:50. Заголовок: i3t4j6 пишет: стала..
i3t4j6 пишет: цитата: | стала появляться такая ошибка |
| Благодарю за сообщение! Добавил дополнительную проверку в строке 9981
|
|
|
Haz
|
| |
Пост N: 1069
Зарегистрирован: 20.02.11
|
|
Отправлено: 10.03.17 13:18. Заголовок: Григорий можно пра..
Григорий можно правочку небольшую в METHOD TSBrowse:Edit() Было: 3749: If oCol:bPrevEdit != Nil If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) ) // append mode for arrays ElseIf nKey != VK_RETURN // GF 15-10-2015 Eval( oCol:bPrevEdit, uValue, Self ) EndIf EndIf Хочу: 3749: If oCol:bPrevEdit != Nil If ::lIsArr .and. ( ::lAppendMode .or. ::nAt > Len( ::aArray ) ) // append mode for arrays ElseIf nKey != VK_RETURN // GF 15-10-2015 IF !Eval( oCol:bPrevEdit, uValue, Self ) nKey := VK_RETURN END EndIf EndIf PS Привык пользовать ::PrevEdit() и если он возвращает F не пускать в редактирование. В случае с чекбоксом этот прием не работает пока не внести изменения в код
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1073
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.03.17 15:04. Заголовок: Haz пишет: пользова..
Haz пишет: цитата: | пользовать ::PrevEdit() и если он возвращает F не пускать в редактирование |
| Благодарю за Ваше предложение! Добавил это изменение со следующим комментарием: цитата: | - a cell with checkbox will respect of return value of bPrevEdit block in the method Edit(). Suggested and contributed by Igor Nazarov. |
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1380
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.03.17 15:35. Заголовок: gfilatov2002 пишет Д..
gfilatov2002 пишет возможно, делать надо как в методе KeyDown : Local uVal ... Line 6562 uVal := Eval( ::aColumns[ nCol ]:bPrevEdit, uVal, Self ) If ValType( uVal ) == "L" .and. ! uVal nKey := VK_RETURN EndIf
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1381
Зарегистрирован: 17.02.12
|
|
Отправлено: 10.03.17 15:38. Заголовок: PS uVal := Eval( ::a..
PS uVal := Eval( ::aColumns[ nCol ]:bPrevEdit, uValue, Self )
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1074
Зарегистрирован: 11.02.10
|
|
Отправлено: 10.03.17 16:12. Заголовок: SergKis пишет: дела..
SergKis пишет: цитата: | делать надо как в методе KeyDown |
| Благодарю за внимание! Именно так и сделал (с проверкой типа возвращаемого блоком значения): ... uVar := Eval( oCol:bPrevEdit, uValue, Self ) If ValType( uVar ) == "L" .and. ! uVar nKey := VK_RETURN EndIf
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1382
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.03.17 19:59. Заголовок: gfilatov2002 такую ..
gfilatov2002 такую правку предлагаю METHOD GoToRec( nRec ) CLASS TSBrowse ... If ( ::cAlias )->( EoF() ) ... Else ( ::cAlias )->( DbGoTo( nRecNo ) ) ::nLastPos := nRecNo ::nAt := ::nLogicPos() While ::nRowPos > 1 ::Skip( -1 ) ::nRowPos -- EndDo While nRecNo != ( ::cAlias )->( RecNo() ) ::Skip( 1 ) ::nRowPos ++ EndDo EndIf ...
|
|
|
Haz
|
| |
Пост N: 1070
Зарегистрирован: 20.02.11
|
|
Отправлено: 12.03.17 20:52. Заголовок: SergKis пишет: так..
SergKis пишет: Сергей, а зачем аверх вниз гонять? PS просто из любопытства спрашиваю)))
|
|
|
Dima
|
| |
Пост N: 6334
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.03.17 22:32. Заголовок: Haz пишет: Сергей, ..
Haz пишет: цитата: | Сергей, а зачем аверх вниз гонять? |
| Тоже не понял....
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1383
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.03.17 00:21. Заголовок: Для правильной устан..
Для правильной установки ::nRowPos Просмотр по тегу, ::nRowPos = 18 (::nRowCount() = 20) Добавили запись или переходим на recno выше, к примеру ::nRowPos должен стать 3 Без добавки сейчас (у меня так) запись добавилась выше, а ::nRowPos остался 18
|
|
|
Haz
|
| |
Пост N: 1071
Зарегистрирован: 20.02.11
|
|
Отправлено: 13.03.17 08:51. Заголовок: SergKis пишет: Для ..
SergKis пишет: цитата: | Для правильной установки ::nRowPos |
| В принципе пробег туда - сюда делается оч быстро и если это снимает проблему то почему бы и нет. У меня новая запись почти всегда не в конец добавляется т. к. используется механизм выбора из удаленных.
|
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1384
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.03.17 09:26. Заголовок: Haz пишет т. к. испо..
Haz пишет цитата: | т. к. используется механизм выбора из удаленных. |
| У меня так же, и если тег по наименованию и ситуация как выше, то nRowPos не становился на новую запись, а оставался где были. Два цикла можно, наверно оптимизировать
|
|
|
Haz
|
| |
Пост N: 1072
Зарегистрирован: 20.02.11
|
|
Отправлено: 13.03.17 12:16. Заголовок: SergKis пишет: nRow..
SergKis пишет: цитата: | nRowPos не становился на новую запись |
| Сергей а так ? oBrw:nLen := Eval( oBrw::bLogicLen ) oBrw:Refresh(.T., .T.) // <------------------ на счет этого не уверен тут может моргать таблица oBrw:GotoRecNo( nRec ) Скинь самодостаточный, но проверить смогу под RDDADS тк только им пользуюсь из за SQL
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1385
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.03.17 20:28. Заголовок: Haz пишет Скинь само..
Haz пишет Наконец сделал пример. GotoRec работатет нормально в тек. версии, немного не привычно - выталкивает первую строку экрана (привычнее последнюю) за пределы при заполнении экрана строками полностью, т.е. с GotoRec - в моей версии что то не так (так что исправление это только у меня) - это хорошо. Пример тут http://my-files.ru/vooru4
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1075
Зарегистрирован: 11.02.10
|
|
Отправлено: 14.03.17 21:34. Заголовок: SergKis пишет: сдел..
SergKis пишет: цитата: | сделал пример. GotoRec работает нормально в тек. версии |
| Благодарю за интересный пример
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1386
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.03.17 09:48. Заголовок: gfilatov2002 надо п..
gfilatov2002 надо подправить строки (не работает конструкция oCol:cFooting := {|nKol,oBr| ... }) Static Function SetHeights( oBrw ) ... line 13090 cHeading := If( Valtype( oColumn:cHeading ) == "B", Eval( oColumn:cHeading ), oColumn:cHeading ) на cHeading := If( Valtype( oColumn:cHeading ) == "B", Eval( oColumn:cHeading, nEle, oBrw ), oColumn:cHeading ) line 13137 cHeading := If( Valtype( oColumn:cFooting ) == "B", Eval( oColumn:cFooting ), oColumn:cFooting ) на cHeading := If( Valtype( oColumn:cFooting ) == "B", Eval( oColumn:cFooting, nEle, oBrw ), oColumn:cFooting ) Григорий, может функ. SetNoHoles(...) сделать методом TsBrowse ? Скрытый текст
CLASS TSBrowse FROM TControl ... METHOD SetNoHoles ( nDelta, lSet ) // BK ... METHOD SetNoHoles( nDelta, lSet ) CLASS TSBrowse LOCAL nH, nK, nHeight, nHole, nHScrollBarHeight := GetHScrollBarHeight() DEFAULT nDelta := 2, lSet := .T. nHole := ::nHeight - ::nHeightHead - ::nHeightSuper - ; ::nHeightFoot - ::nHeightSpecHd - ; If( ::lNoHScroll, 0, nHScrollBarHeight ) nHole -= ( Int( nHole / ::nHeightCell ) * ::nHeightCell ) nHole -= nDelta nHeight := nHole If lSet nH := If( ::nHeightSuper > 0, 1, 0 ) + ; If( ::nHeightHead > 0, 1, 0 ) + ; If( ::nHeightSpecHd > 0, 1, 0 ) + ; If( ::nHeightFoot > 0, 1, 0 ) If nH > 0 nK := int( nHole / nH ) If ::nHeightFoot > 0 ::nHeightFoot += nK nHole -= nK EndIf If ::nHeightSuper > 0 ::nHeightSuper += nK nHole -= nK EndIf If ::nHeightSpecHd > 0 ::nHeightSpecHd += nK nHole -= nK EndIf If ::nHeightHead > 0 ::nHeightHead += nHole EndIf Else SetProperty(::cParentWnd, ::cControlName, "Height", ; GetProperty(::cParentWnd, ::cControlName, "Height") - nHole) EndIf ::Display() EndIf RETURN nHeight
|
|
|
|
Haz
|
| |
Пост N: 1073
Зарегистрирован: 20.02.11
|
|
Отправлено: 15.03.17 12:04. Заголовок: SergKis пишет: выта..
Сергей - отличный пример я бы сказал что он не сколько на ::GotoRec() сколько на понимание подхода к TS и его составляющим как к объектам SergKis пишет: цитата: | выталкивает первую строку экрана (привычнее последнюю) за пределы при заполнении экрана строками полностью |
| Выталкивает вверх потому что подбирается к нужной записи снизу If ( ::cAlias )->( EoF() ) означает что ниже нужной записи нет их необходимого количества чтоб заполнить весь бровс начиная с верхней строки Вот тут ( ::cAlias )->( DbSkip( nLines - ::nRowPos ) ) при этом ::nRowPos всегда 1 после ::Reset() выше и если записей недостаточно то встает на самый конец и скипает вверх. в принципе можно подумать как переделать чтобы всегда подбирался сверху. т.е. проверять есть ли достаточное количество записей перед и после чтобы ::RowPos остался прежним Не знаю насколько это принципиально, но технически исполнимо Алгоритм зависит от воросов 1) Какой ::nRowPos ставить если перед нужной ( той куда идем) записей меньше чем текущий ::nRowPos - вариантов два - ::nRowPos == 1 или логический новой номер нужной записи 2) Какой ::nRowPos ставить если после нужной ( той куда идем) записей меньше чем текущий ::nRowCount - вариантов три - ::nRowPos == 1 (с обрезанием бровса), поледний ::nRowPos == nRowCount или как сейчас текущий с выпихиванием верха
|
|
|
gfilatov2002
|
| moderator
|
Пост N: 1076
Зарегистрирован: 11.02.10
|
|
Отправлено: 15.03.17 12:30. Заголовок: SergKis пишет: надо..
SergKis пишет: Сделал, конечно (поправил функцию SetHeights() и добавил новый метод SetNoHoles(), и Ваш новый пример). Благодарю за помощь P.S. Выход новой мартовской сборки запланирован на следующей неделе
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1387
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.03.17 12:58. Заголовок: Haz пишет Не знаю на..
Haz пишет цитата: | Не знаю насколько это принципиально |
| Для пользователя это может быть важным, т.к. имея сорт. по наим. А1 А2 ... А7 Б1 Б2 добавляя А8, А9 выталкиваться будет А1 и А2 вместо Б... а с др. стороны при полном экране на А... верх будет выдавливаться так же
|
|
|
SergKis
|
| постоянный участник
|
Пост N: 1388
Зарегистрирован: 17.02.12
|
|
Отправлено: 15.03.17 13:04. Заголовок: gfilatov2002 пишет и..
gfilatov2002 пишет там убрать над лишнее STATIC FUNC Add_Rec( oBrw ) Local cBrw, hBrw, cAls, cPic Local nHgh, nWdt, nPos, cCol, oCol, nLen Local nRow, nCol, oCel, cGet, cVal, nRec Local cKods, cName, cKodP, cNamP, lRefr Local nY , nX , nW , nH Local nX1, nW1, nH1 Local nX2, nW2, nH2 Local cWnd := oBrw:cParentWnd Local hWnd := GetFormHandle(cWnd) Local hInpl := _HMG_InplaceParentHandle _HMG_InplaceParentHandle := hWnd PRIVATE aResult WITH OBJECT oBrw cBrw := :cControlName cAls := :cAlias hBrw := GetWindowRow(GetControlHandle(cBrw, cWnd))
|
|
|
Ответов - 300
, стр:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
All
[только новые]
|
|