Форум » GUI » TsBrowse в Минигуи (продолжение) » Ответить

TsBrowse в Минигуи (продолжение)

Vlad04: TsBrows определяется в виде строки ПАРМЕТРОВ объекта и их значений К примеру [quote] 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 [/quote] Здесь я собрал параметры из разных tBrows Можно или нет и какие парметры заменить выражением ( и каким) ? oBrw2:.... oBrw2:....

Ответов - 300, стр: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 All

gfilatov2002: i3t4j6 пишет: стала появляться такая ошибка Благодарю за сообщение! Добавил дополнительную проверку в строке 9981

Haz: Григорий можно правочку небольшую в METHOD TSBrowse:Edit() Было: [pre2] 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 [/pre2] Хочу: [pre2] 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 [/pre2] PS Привык пользовать ::PrevEdit() и если он возвращает F не пускать в редактирование. В случае с чекбоксом этот прием не работает пока не внести изменения в код

gfilatov2002: 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: gfilatov2002 пишет Добавил это изменение возможно, делать надо как в методе KeyDown :[pre2] Local uVal ... Line 6562 uVal := Eval( ::aColumns[ nCol ]:bPrevEdit, uVal, Self ) If ValType( uVal ) == "L" .and. ! uVal nKey := VK_RETURN EndIf [/pre2]

SergKis: PS uVal := Eval( ::aColumns[ nCol ]:bPrevEdit, uValue, Self )

gfilatov2002: SergKis пишет: делать надо как в методе KeyDown Благодарю за внимание! Именно так и сделал (с проверкой типа возвращаемого блоком значения): [pre2]... uVar := Eval( oCol:bPrevEdit, uValue, Self ) If ValType( uVar ) == "L" .and. ! uVar nKey := VK_RETURN EndIf [/pre2]

SergKis: gfilatov2002 такую правку предлагаю [pre2] 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 ... [/pre2]

Haz: SergKis пишет: такую правку предлагаю Сергей, а зачем аверх вниз гонять? PS просто из любопытства спрашиваю)))

Dima: Haz пишет: Сергей, а зачем аверх вниз гонять? Тоже не понял....

SergKis: Для правильной установки ::nRowPos Просмотр по тегу, ::nRowPos = 18 (::nRowCount() = 20) Добавили запись или переходим на recno выше, к примеру ::nRowPos должен стать 3 Без добавки сейчас (у меня так) запись добавилась выше, а ::nRowPos остался 18

Haz: SergKis пишет: Для правильной установки ::nRowPos В принципе пробег туда - сюда делается оч быстро и если это снимает проблему то почему бы и нет. У меня новая запись почти всегда не в конец добавляется т. к. используется механизм выбора из удаленных.

SergKis: Haz пишет т. к. используется механизм выбора из удаленных. У меня так же, и если тег по наименованию и ситуация как выше, то nRowPos не становился на новую запись, а оставался где были. Два цикла можно, наверно оптимизировать

Haz: SergKis пишет: nRowPos не становился на новую запись Сергей а так ? oBrw:nLen := Eval( oBrw::bLogicLen ) oBrw:Refresh(.T., .T.) // <------------------ на счет этого не уверен тут может моргать таблица oBrw:GotoRecNo( nRec ) Скинь самодостаточный, но проверить смогу под RDDADS тк только им пользуюсь из за SQL

SergKis: Haz пишет Скинь самодостаточный Наконец сделал пример. GotoRec работатет нормально в тек. версии, немного не привычно - выталкивает первую строку экрана (привычнее последнюю) за пределы при заполнении экрана строками полностью, т.е. с GotoRec - в моей версии что то не так (так что исправление это только у меня) - это хорошо. Пример тут http://my-files.ru/vooru4

gfilatov2002: SergKis пишет: сделал пример. GotoRec работает нормально в тек. версии Благодарю за интересный пример

SergKis: gfilatov2002 надо подправить строки (не работает конструкция oCol:cFooting := {|nKol,oBr| ... }) [pre2] 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 ) [/pre2] Григорий, может функ. SetNoHoles(...) сделать методом TsBrowse ? [pre2] 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 [/pre2]

Haz: Сергей - отличный пример я бы сказал что он не сколько на ::GotoRec() сколько на понимание подхода к TS и его составляющим как к объектам SergKis пишет: выталкивает первую строку экрана (привычнее последнюю) за пределы при заполнении экрана строками полностью Выталкивает вверх потому что подбирается к нужной записи снизу If ( ::cAlias )->( EoF() ) означает что ниже нужной записи нет их необходимого количества чтоб заполнить весь бровс начиная с верхней строки Вот тут [pre2]( ::cAlias )->( DbSkip( nLines - ::nRowPos ) ) [/pre2] при этом ::nRowPos всегда 1 после ::Reset() выше и если записей недостаточно то встает на самый конец и скипает вверх. в принципе можно подумать как переделать чтобы всегда подбирался сверху. т.е. проверять есть ли достаточное количество записей перед и после чтобы ::RowPos остался прежним Не знаю насколько это принципиально, но технически исполнимо Алгоритм зависит от воросов 1) Какой ::nRowPos ставить если перед нужной ( той куда идем) записей меньше чем текущий ::nRowPos - вариантов два - ::nRowPos == 1 или логический новой номер нужной записи 2) Какой ::nRowPos ставить если после нужной ( той куда идем) записей меньше чем текущий ::nRowCount - вариантов три - ::nRowPos == 1 (с обрезанием бровса), поледний ::nRowPos == nRowCount или как сейчас текущий с выпихиванием верха

gfilatov2002: SergKis пишет: надо подправить строки Сделал, конечно (поправил функцию SetHeights() и добавил новый метод SetNoHoles(), и Ваш новый пример). Благодарю за помощь P.S. Выход новой мартовской сборки запланирован на следующей неделе

SergKis: Haz пишет Не знаю насколько это принципиально Для пользователя это может быть важным, т.к. имея сорт. по наим. А1 А2 ... А7 Б1 Б2 добавляя А8, А9 выталкиваться будет А1 и А2 вместо Б... а с др. стороны при полном экране на А... верх будет выдавливаться так же

SergKis: gfilatov2002 пишет и Ваш новый пример там убрать над лишнее [pre2] 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)) [/pre2]



полная версия страницы