Форум » 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

Andrey: Блин, пробовал до этого так {|nRow,nCo| MyFunctionSelect(nRow,nCol) } Увидел что пикселы это и бросил... а зря оказывается.... Спасибо !

SergKis: Andrey пишет:и твой блок кода будет таким {|nRowPix,nColPix,nAt,oBrw| MyFunctionSelect(nRowPix,nColPix,nAt,oBrw) } Номера подвала колонки нет ! Andrey, а посмотреть указанное место трудно ? там есть ответ буквально несколькими строками ниже от uPar1 := nRowPix, ; uPar2 := nColPix, ; ... nClickRow := ::GetTxtRow( nRowPix ) nAtCol := Max( ::nAtCol( nColPix ), 1 ) поставь и подсвети в свою ф-ю

Andrey: Рано радовался... oBrw1:aColumns[ nI ]:bFLClicked := {|nRowPix,nColPix,nAt,oBrw| SelectRunColumns(nRowPix,nColPix,nAt,oBrw) } Как получить номер нажатого подвала колонки ? nAt - это номер строки таблицы. Нельзя в исходнике добавить НОМЕР подвала нажатой колонки ?


Haz: Andrey пишет: Нельзя в исходнике добавить НОМЕР подвала нажатой колонки Во первых он там есть Во вторых , то что Сергей в посте 925 написал , не подходит что ли ? SergKis: и номер колонки в ф-ии будет oBrw:nCell, а oBrw:nRowPos тек. строка и т.д.

Andrey: Haz пишет: Во вторых , то что Сергей в посте 925 написал , не подходит что ли ? Это я написал, а потом смотрю ответ выше моего появился... SergKis пишет: поставь и подсвети в свою ф-ю Спасибо БОЛЬШОЕ !

Andrey: Погонял я нажатие мышкой подвала таблицы и заметил ляпы: под 8.1 ширина нажатия подвала - чуть больше половины подвала. Нижняя половина подвала на нажатие мышки никак не реагирует. Под 7-кой срабатывание при нажатии мышкой сужается до 1/3 подвала таблицы. А почему так ? For nI := 2 To oBrw1:nColCount() oBrw1:aColumns[ nI ]:bFLClicked := {|nRowPix,nColPix,nAt,oBrw| SelectRunColumns(nRowPix,nColPix,nAt,oBrw) } Next ............ ////////////////////////////////////////////////////////////////// FUNCTION SelectRunColumns(nRowPix,nColPix,nAt,oBrw) LOCAL nClickRow := oBrw:GetTxtRow( nRowPix ) LOCAL nAtCol := Max( oBrw:nAtCol( nColPix ), 1 ) LOCAL cRet //MsgDebug(nRowPix,nColPix,nAt,"----",nClickRow,nAtCol) cRet := Form_SelectRunColumns(nAtCol) IF LEN(cRet) > 0 // выбрана настройка формул oBrw1:aColumns[nAtCol]:cFooting := cRet oBrw1:DrawFooters() ENDIF RETURN NIL

Andrey: Andrey пишет: Погонял я нажатие мышкой подвала таблицы и заметил ляпы: под 8.1 ширина нажатия подвала - чуть больше половины подвала. Нижняя половина подвала на нажатие мышки никак не реагирует. Сделал обработку подвала в другом примере - заработало без проблем. Вернулся к этому же примеру и понял, что при увеличение высоты подвала + ширины колонки подвала будет такая проблема (см.описание выше) ! Как решить эту проблему ?

Andrey: Вот ещё одна проблемка.... Назначаю подсказку на один столбец: oBrw1:cToolTip := {|oBr,nCol,nRow| IIF( nCol==2, cToolTip + " "+HB_NtoS(nRow), "") } Ставлю мышку на суперхидер - подсказка всё равно отображается: Как убрать подсказку с суперхидера ?

Vlad04: Имеется TsBrows на форме.Отображаются данные таблицы 1, после некоторых действий надо на этом же месте отобразить данные другой таблицы . Структура та же, алиас другой. Как правильно переопределить TsBrows

Haz: Vlad04 пишет: Как правильно переопределить TsBrows Brw:cAlias := cNewAlias то что ниже Brw:Reset() перед Brw:Reset() важно переопределить блоки кода бровса ( в них остался прежний алиас ). Я работаю с ADS и для него годится так [pre2] Brw:cAlias := cAlias Brw:bGoTop := {|| ( cAlias )->( DbGoTop() ) } Brw:bGoBottom := {|| ( cAlias )->( DbGoBottom() ) } Brw:bSkip := {| n | If( n == Nil, n := 1, Nil ), Brw:DbSkipper( n ) } Brw:bBof := {|| ( cAlias )->( Bof() ) } Brw:bEof := {|| ( cAlias )->( Eof() ) } // отсюда специфика ADS cAdsKeyNo := "{| n, oBrw | If( n == Nil, Round( " + cAlias + "->( ADSGetRelKeyPos() ) * oBrw:nLen, 0 ), " + ; cAlias + "->( ADSSetRelKeyPos( n / oBrw:nLen ) ) ) }" cAdsKeyCount := "{|cTag| " + cAlias + "->( ADSKeyCount(cTag,, 1 ) ) }" Brw:bKeyNo := &cAdsKeyNo Brw:bKeyCount := &cAdsKeyCount Brw:bLogicLen := &cAdsKeyCount Brw:bTagOrder := {|uTag| ( cAlias )->( OrdSetFocus( uTag ) ) } Brw:bGoToPos := {|n| Eval( Brw:bKeyNo, n, Brw ) } /* А это для других RDD Brw:bKeyNo := {| n | ( cAlias )->( If( n == Nil, If( IndexOrd() > 0, OrdKeyNo(), RecNo() ), ; If( IndexOrd() > 0, OrdKeyGoto( n ), DbGoTo( n ) ) ) ) } Brw:bKeyCount := {|| ( cAlias )->( If( IndexOrd() > 0, OrdKeyCount(), LastRec() ) ) } Brw:bLogicLen := {|| ( cAlias )->( If( IndexOrd() == 0, LastRec(), OrdKeyCount() ) ) } Brw:bTagOrder := {|uTag| ( cAlias )->( OrdSetFocus( uTag ) ) } Brw:bGoToPos := {|n| Eval( ::bKeyNo, n ) } */ Brw:SetDbf( cAlias ) [/pre2] PS. в случае когда структура другая , нужно убить старый бровс и на его месте создать новый . В случае когда отличия только в части полей - проще в первом бровсе удалить колонки , которых не должно быть во втором и добавить новые, потом Reset()

Vlad04: Haz нужно убить старый бровс А как ?

Haz: Vlad04 пишет: А как ? Элементарно ) DoMethod('Form_1', 'Brw', 'Release')

SergKis: Vlad04 пишет: Как правильно переопределить TsBrows можно закрыть dbf с oBrw:cAlias и в той же область открыть аналогичный dbf с таким же алиасом, если использовались oCol:cOrder (сортировка на колонках), то аналогичный dbf должен иметь и аналогичные индексы

Haz: SergKis пишет: открыть аналогичный dbf с таким же алиасом, Подтверждаю, это самый простой способ. Использую именно его когда получаю алиас из SQL запроса. т.к. управляющий индекс не нужен ( сортировка ставится как ORDER BY ) , то достаточно одного Brw:Reset()

Vlad04: оК! Все нормально!

Vlad04: С открытием и закрытием все нормально. Как избежать повторного закрытия (открытия) соответственно уже закрытого или открытого бровза ( исключаем человеческий фактор )? Для окна делаем так if !IsWindowDefined(Frm_klient) а для элемента окна ?

Andrey: Наверно так: IF GetControlIndex("Timer_1", cForm ) > 0

SergKis: или #translate IsControlDefined ( <ControlName> , <FormName> ) ; => ; _IsControlDefined ( <"ControlName"> , <"FormName"> )

Vlad04: *-------------------------------- Удаляем Контрол, при его наличии Procedure Del_Brv() if _IsControlDefined ( "oBrw" , "DEMO" ) = .t. //вариант // IF GetControlIndex("oBrw",'Demo' ) > 0 DoMethod('Demo', 'oBrw', 'Release') endif Return *------------------------------- Открывам контрол , если его нет Procedure Open_Brw() IF GetControlIndex("oBrw",'Demo' ) = 0 // вариант // if _IsControlDefined ( "oBrw" , "DEMO" ) = .f. OpenBrows( "oBrw", 'DEMO', 80, 15, dEMO.Width-20, DEMO.Height-130 , Alias() ) endif Return *----------------------------------------- Оба способа работают, только функции проверки возвращают разные значения.

Haz: Григорий, просьба в два метода ::DrawLine() и ::DrawSelect() добавить проверку условия ::lVisible в строках [pre2] lCheck := ( oColumn:lCheckBox .and. ValType( uData ) == "L" .and. oColumn:lVisible ) [/pre2] примерные номера строк в исходнике 2932 и 3253 без этой проверки , если lCheckBox истина и колонка скрыта, в соседнюю выдает мусор от битмапа. Тестовый пример писать не стал, т.к. и так все просто. В любом примере TS в колонке по логическому полю задать то что ниже и посмотреть [pre2] oBrw:aColumns[n]:lCheckBox := .T. oBrw:Hidecolumns(n, .T. ) [/pre2] PS. Хорошо кстати тестится на примере Сергея Tsb_BitMaps



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