Форум » 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: SergKis пишет: По мне лучше метод Огромная благодарность за помощь! Добавил этот новый метод, но переименовал его в nAtColActual Вот что получилось

Haz: gfilatov2002 пишет: Вот что получилось Нормальненько получилось , в тултип можно добавить еще и номер недели [pre2] //Find number of week within year FT_WOY( <dDate> ) -> <nResult> [/pre2]

Dima: gfilatov2002 пишет: Вот что получилось Поправил линк на картинку (не видно было)


Andrey: В новой версии 1604 ушёл баг про который писал в Пост N: 4819 и N: 4822 Спасибо !

Andrey: Тестирую новую версию - попал на БОЛЬШОЙ БАГ ! Проверил старую, там тоже "падает" программа... Что делать, не знаю... Из основного Tsbrowsa (свои переменные STATIC цвета, PUBLIC oBrw и т.д.) вызываю другой Tsbrowse (со своими STATIC, PUBLIC oBrw_5 - переменными). У основного в цветах таблицы определяю типа так: AADD( aStatClsUsl , { { || Master->KDoljn == 0 .OR. Master->KMaster == 0 }, "12/4" } ) AADD( aStatClsUsl , { { || LEN( ALLTRIM(Master->Master) ) == 0 } , {128, 255} } ) AADD( aStatClsUsl , { { || Master->KDel == 0 }, "4/2" } ) Как в примере MiniGUI\SAMPLES\Advanced\Tsb_config После вызова другого Tsbrowse отладка не действует, окно с MsgDebug() не появляется. Хотя ставлю MsgLog(Alias()) - видно что база переключилась на новую. И тип ошибки вообще убивает: Error BASE/1003 Переменная не существует: KMASTER Called from (b)FIELDBLOCK(0) Called from TSBROWSE:DRAWLINE(2928) Called from TSBROWSE:DRAWSELECT(3176) Called from TSBROWSE:LOSTFOCUS(8108) Called from TCONTROL:HANDLEEVENT(898) Called from TSBROWSE:HANDLEEVENT(7342) Called from EVENTS(75) Так в новой базе и нету такого поля !!!! Причём тут запрос этого поля, я его не делаю... Или это oBrw:bChange отрабатывает ? Как тогда остановить его на время обращения к другой базе ? Вот стек вызов процедур: Помогите пожалуйста решить мою проблему !

SergKis: Andrey для блока отображения используй FieldWBlock(cFieldName, select(cAlias)) вместо FieldBlock

Andrey: SergKis пишет: для блока отображения используй FieldWBlock(cFieldName, select(cAlias)) вместо FieldBlock Блин, так просто... Сразу заработало !!! Спасибо БОЛЬШОЕ !!!

gfilatov2002: Andrey пишет: Как в примере MiniGUI\SAMPLES\Advanced\Tsb_config Просто к сведению. Поправил эту неточность в вышеуказанном примере

Andrey: Всем привет ! Что-то неправильно работает в Tsbrowse следующее cDateBlock := 'FieldWblock( "VidOpl", Select("VidOpl") )' или '{ || VidOpl->VidOpl }' , использую oBrw:aColumns[nI]:bData := &( cDateBlock ) Вот скрин: Если делаю через свою функцию cDateBlock := '{ || SAY_SEL((Alias())->KVidOpl,"VidOpl","VidOpl") }', то показывает правильно: Соседнюю колонку показывает правильно, там делаю cDateBlock := 'FieldWblock( "StDogov", Select("StDogov") )' ! База не битая, индексы правильные... Из-за чего такое может быть ?

Haz: *PRIVAT*

Andrey: Вот ещё одна непонятка в новой программе... Если редактируемое поле в таблице подключено в индексное выражение, то после окончания редактирования его, курсор уходит неизвестно куда, а потом при движении стрелка вверх/вниз появляется вторая фантомная таблица-дубль ! Т.е. все координаты Tsbrowsa сместились на новые... Вот так на экране это выглядит: И куда здесь "копать" ?

Haz: Andrey пишет: И куда здесь "копать" ? Самое простое. - после редактирования oBrw:GotoRecNo( (oBrw:cAlias)->(Recno()) )

Andrey: Да есть такая обработка у меня. ( наверно опечатался - GotoRecNo ?) oBrw:aColumns[nJ]:bPrevEdit := {|| nRecBuff := (oBrw:cAlias)->(RecNo()), MyFieldEdit( oBrw:aColumns[oBrwS:nCell]:Cargo ) } oBrw:aColumns[nI]:bPostEdit := {|| oBrw:GoToRec(nRecBuff), oBrw:GoLeft(), oBrw:Refresh(.T.) } А координаты бровса почему "улетают" ? Если убрать bPostEdit то улёт прекращается, но только тогда курсор может оказаться после редактирования на другой позиции. У меня еще в обработке сидит oBrw:bUserKeys := { |a,b,c| MyKeyCheck(a,b,c) }, где отслеживается набор букв и делается фильтр по этому полю. CASE nKey > 47 .AND. nKey < 254 cStSearchValue := cStSearchValue + KeyToChar(nKey)//LatRus( CHR(nKey) ) Form_Spr.Text_1.Value := cStSearchValue RefreshBrowse() STATIC FUNCTION RefreshBrowse() LOCAL cSeek := Alltrim( Form_Spr.Text_1.Value ) LOCAL cStrSeek, cExp cExp := "'" + UPPER(cSeek) + "' $ UPPER("+cStPole_DbRelation+")" cStrSeek := '('+ oBrwS:cAlias +')->'+cStPole_DbSetFilter IF !Empty(cSeek) ( oBrw:cAlias )->( DbSetFilter( &("{||" + cExp + "}"), cExp ) ) ELSE ( oBrw:cAlias )->( DbClearFilter() ) END oBrwS:Reset() Form_Spr.oBrw.Setfocus RETURN NIL

Haz: Andrey пишет: Если убрать bPostEdit то улёт прекращается, но только тогда курсор может оказаться после редактирования на другой позиции. замени на :bEditEnd А это nRecBuff := (oBrw:cAlias)->(RecNo()) совершенно лишнее если спецом не меняешь текущую запись то она же и осталась. Можно просто GotoRec( (oBrw:cAlias)->(Recno()) )

Haz: gfilatov2002 пишет: Добавил этот новый метод, но переименовал его в nAtColActual еще мелкий фикс, сейчас объясню Часто использую перестройку бровса на лету - удаляю все колонки кроме первой в ней у меня ID записи и потом добавляю нужные для конкресного случая ::HideColumns() не катит для широких таблиц т.к. начинаются тормоза с пропусками скрытых колонок и прочие не нужные прорисовки Если в этот момент курсор стоит правее первой колонки то ::MouseMove высчитывает nColumn как 2 и при попытке проверить ToolTip получаем вылет с ошибкой. Вот код, на входе nColumn уже равен 1 , nFreeze = 0 , ::nColCount() = 1 т.к. все кроме 1 поудалял [pre2] ::MouseMove() строка 8182 For nI := 1 To ::nColCount() IF nI > ::nFreeze IF nColPix > nColPixPos nColumn ++ // Тут получим 2 END nColPixPos += IF(::IsColVis2(nI), ::GetColSizes()[ nI ], 0 ) END End [/pre2] Далее в строке 8192 пытаемся влезть в несуществующую колонку [pre2] If ( lHeader := ( nRowLine == 0 ) ) .and. ! Empty( ::aColumns ) .and. ; ! Empty( ::aColumns[ nColumn ]:cToolTip ) .... [/pre2] предлагаю ВЕСЬ кусок кода с выводом тултипа по колонке заключить в условие [pre2] IF nColumn <= ::nColCount() // то есть курсор на области колонок А тут все с тултипами END [/pre2]

gfilatov2002: Haz пишет: предлагаю ВЕСЬ кусок кода с выводом тултипа по колонке Благодарю за разъяснение! Переработал этот кусок кода таким образом: [pre] If nColumn <= ::nColCount() If ( lHeader := ( nRowLine == 0 .or. nRowLine == -2 ) ) .and. ! Empty( ::aColumns ) .and. ; ! Empty( ::aColumns[ nColumn ]:cToolTip ) cToolTip := ::aColumns[ nColumn ]:cToolTip // column's header tooltip Else cToolTip := ::cToolTip // grid's tooltip EndIf If ::nToolTip != nColumn .or. nRowLine != ::nToolTipRow If Valtype( ctooltip ) == "B" cToolTip := Eval( cToolTip, Self, nColumn, nRowLine ) EndIf SetToolTip( ::hWnd, cToolTip, ::hToolTip ) SysRefresh() ::nToolTipRow := nRowLine EndIf ::nToolTip := nColumn EndIf ... [/pre]

Andrey: Всем привет ! Использую SetArrayTo(). Как в нём сделать сортировку сразу по ДВУМ колонкам ? Или такое сделать нельзя ? У меня графа квартира сделаны в двух колонках: номер квартиры (NKVAR) и буква квартиры (CKVAR). Заранее спасибо за помощь.

Haz: Andrey пишет: Как в нём сделать сортировку сразу по ДВУМ колонкам ? Asort () с блоком кода для сортировки. Хоть повсем сразу.

Andrey: Haz пишет: Asort () с блоком кода для сортировки. Хоть повсем сразу. Покрутил, так и эдак. Если добавлять новую запись и ставить новый номер квартиры, или изменить любую запись с номером квартиры, то тогда нужно опять делать aSort(). Решил пойти по другому пути: делаю скрытую колонку, помещаю туда STR(NKVAR)+CKVAR и делаю сортировку oBrw:SetOrder(2, , .F. ) Единственно что не понял/не знаю как сделать в первой колонке нумерацию автоматом по возрастанию ? Сейчас после добавления/удаления записи приходиться ручками пересчитывать нумерацию: FOR nI := 1 TO oBrw:nLen oBrw:aArray[ nI, 1 ] := nI // новая нумерация №№ NEXT

Haz: Andrey пишет: Единственно что не понял/не знаю как сделать в первой колонке нумерацию автоматом по возрастанию ? а oBrw:nAt не подходит ? Бровс по массиву использую редко, но вроде там ::nAt правильный



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