Автор | Сообщение |
|
| постоянный участник
|
Пост 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:....
|
|
|
Ответов - 192
, стр:
1
2
3
4
5
6
7
8
9
10
All
[только новые]
|
|
|
| постоянный участник
|
Пост N: 7738
Зарегистрирован: 12.09.06
|
|
Отправлено: 23.04.24 00:12. Заголовок: Схема расчёта итогов..
Схема расчёта итогов на лету, после установки фильтра на базу. Может кому будет интересно. Т.е. набираем буквы в поиске, и получаем итого в подвале таблицы. Спасибо ОГРОМНОЕ Сергею. Скрытый текст
* Построение таблицы справочника/поиск по буквам и подсчёт итогов "на лету" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1) LOCAL aFldSum := {"F3", "F4"} // поля базы числовые !!! ... DbSelectArea(cAls) aItogo := Itogo_Dbf(aFldSum, Alias(), .T.) // расчёт итого по базе DEFINE WINDOW Report AT .... ; ON INIT _wPost( 0) ; ON RELEASE _wSend(90) ... This.Cargo := oHmgData() ; owc := This.Cargo // для окна создаем объект без переменных (условно пустой) owc:aFldSum := aFldSum // для подвала таблицы - итого owc:nCount := aItogo[1] owc:aItogo := aItogo[2] owc:aReturn := {} // для возврата выбранных значений ... DEFINE TBROWSE oRpt OBJ oRpt AT nY, nX ALIAS cAls .... ; ... ; ON INIT {|ob| myTsbInit( ob ) } // настройки таблицы - смотреть ниже myTsbTune(oRpt) // настроить myTsbColor(oRpt,oBrw) // цвета изменить myTsbKeys(oRpt) // обработка клавиш // не должно быть нигде, кроме события ! myTsbItogo() // показ подвала END TBROWSE ON END {|ob| ob:SetNoHoles(), ob:SetFocus() } This.Cargo:oRpt := oRpt // положить объект oRpt (таблицу) на окно // GetBox в подвале таблицы - можно сделать и через меню @ nY-nG, nX+nG GETBOX GB_Find OBJ oGet WIDTH nW-nG HEIGHT nH VALUE space(30) ; PICTURE "@K" NOTABSTOP INVISIBLE ; ON LOSTFOCUS {|| This.Cargo := .F., This.Value := space(30), This.Hide } ; ON CHANGE {|| iif( Empty( This.Cargo ), NIL, Search_TSB( ThisWindow.Object, .T. ) ) } ; ON INIT {|| This.Cargo := .T. } This.Cargo:oGet := oGet This.Cargo:cGet := "GB_Find" // запомнить для дальнейшего использования /////////////////////////////////// o := This.Object o:Event( 0, {|ow| _wPost(22, ow) } ) // инициализация после построения окна o:Event( 22, {|ow| myTsbItogo(ow) } ) // итого refresh o:Event( 90, {| | aReturn := (This.Cargo):aReturn } ) // возврат LOCAL aReturn o:Event( 99, {|ow| ow:Release() } ) END WINDOW RETURN aReturn 2) // GetBox в подвале таблицы STATIC FUNCTION Search_TSB(oWnd, aWait) // поиск по базе LOCAL oRpt, cVal, cGet, aItg Default oWnd := ThisWindow.Object Default aWait := .F. oRpt := oWnd:Cargo:oRpt cGet := oWnd:Cargo:cGet // это "GB_Find" IF !Empty(aWait) IF HB_ISLOGICAL(aWait) aWait := "Расчёт ИТОГОВ ..." ENDIF // нельзя срабатывает LOSGFOCUS getbox //WaitWindow( aWait, .T. , 600, 16, NIL, BLUE, App.Cargo:aBClrMain ) ENDIF SET WINDOW THIS TO oWnd This.&(cGet).Show cVal := Trim( This.&(cGet).Value ) SET WINDOW THIS TO oRpt:FilterFTS( cVal, .T. ) // Empty(cVal) обработка внутри метода aItg := Itogo_Dbf(oWnd:Cargo:aFldSum, oRpt:cAlias) // расчёты итого oWnd:Cargo:nCount := aItg[1] oWnd:Cargo:aItogo := aItg[2] // нельзя срабатывает LOSGFOCUS getbox //IF !Empty(aWait) ; WaitWindow() //ENDIF _wSend( 22, oWnd ) // вывод в подвал //но можно и //_wPost( 22, oWnd ) // вывод в подвал RETURN .T. 3) // расчёт итого по базе STATIC FUNCTION Itogo_Dbf(aFld, cAls, aWait) // расчёты итого LOCAL nLen := 0, nRec, aItg, aPos, nPos LOCAL nOld := Select(), nCnt := 0, nSum Default cAls := Alias(), aWait := .F. IF !Empty(aWait) IF HB_ISLOGICAL(aWait) aWait := "Wait processing ..." ENDIF WaitWindow( aWait, .T. , 600, 16, NIL, BLUE, App.Cargo:aBClrMain ) ENDIF dbSelectArea( cAls ) nRec := RecNo() aItg := Array(Len(aFld)) ; aFill(aItg, 0) aPos := {} ; AEval(aFld, {|cn| AAdd(aPos, FieldPos(cn)) }) DO EVENTS GO TOP DO WHILE ! EOF() nCnt++ DO EVENTS FOR EACH nPos IN aPos IF nPos > 0 .and. HB_ISNUMERIC( nSum := FieldGet( nPos ) ) aItg[ hb_EnumIndex(nPos) ] += nSum ENDIF NEXT SKIP ENDDO DbGoTo( nRec ) ; DO EVENTS IF !Empty(aWait) ; WaitWindow() ENDIF dbSelectArea( nOld ) ; DO EVENTS RETURN { nCnt, aItg } 4) STATIC FUNCTION myTsbItogo( oWnd ) // подвал - ТОЛЬКО показ LOCAL aItg := oWnd:Cargo:aItogo Local oRpt := oWnd:Cargo:oRpt oRpt:aColumns[1]:cFooting := {|nc,ob| nc := ob:nLen, iif( Empty(nc), "", hb_NtoS(nc) ) } oRpt:aColumns[3]:cFooting := {|nc | nc := aItg[1], iif( Empty(nc), "", hb_NtoS(nc) ) } oRpt:aColumns[4]:cFooting := {|nc | nc := aItg[2], iif( Empty(nc), "", hb_NtoS(nc) ) } oRpt:Cargo:cKeyLang := '('+KB_LANG()+')' // -> util_keychar.prg oRpt:aColumns[5]:cFooting := oRpt:Cargo:cKeyLang oRpt:DrawFooters() ; DO EVENTS RETURN Nil
|
|
|
|
|
| постоянный участник
|
Пост N: 7743
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.05.24 17:32. Заголовок: Открываю базу, устан..
Открываю базу, устанавливаю индекс, делаю SCOPE на базу. После правки (ENTER) ячейки - теряется SCOPE... Почему ? Что там хитрого сделано после правки ячейки ?
|
|
|
|
| постоянный участник
|
Пост N: 4561
Зарегистрирован: 17.02.12
|
|
Отправлено: 06.05.24 18:12. Заголовок: Andrey пишет После п..
Andrey пишет цитата: | После правки (ENTER) ячейки - теряется SCOPE... Почему ? Что там хитрого сделано после правки ячейки ? |
| При создании тсб надо ставить правильный тэг индекса, тсб его удерживает, если не используешь привязку тэгов к колонкам.
|
|
|
|
| постоянный участник
|
Пост N: 7744
Зарегистрирован: 12.09.06
|
|
Отправлено: 06.05.24 19:43. Заголовок: SergKis пишет: При ..
SergKis пишет: цитата: | При создании тсб надо ставить правильный тэг индекса, тсб его удерживает, если не используешь привязку тэгов к колонкам. |
| Да кто же знал об этом ... Спасибо БОЛЬШОЕ ! Заработало !
|
|
|
|
| moderator
|
Пост N: 2311
Зарегистрирован: 11.02.10
|
|
Отправлено: Вчера 11:29. Заголовок: Andrey пишет: Да кт..
Andrey пишет: В твоей библиотеке TsbViewer есть такая функция FUNCTION myDbIndexChange(cTitle, oBrw) LOCAL aRet, nIndx, cOrd aRet := Tbrowse_MenuIndex(cTitle, oBrw) IF LEN(aRet) > 0 nIndx := aRet[1] cOrd := aRet[2] DbSelectArea(oBrw:cAlias) DbSetOrder(nIndx) oBrw:uLastTag := (oBrw:cAlias)->( OrdName(nIndx) ) // без этого индекс слетает oBrw:Reset() oBrw:Refresh(.T.) oBrw:GoTop() DO EVENTS ENDIF oBrw:Setfocus() RETURN NIL Обрати внимание на комментарий
|
|
|
|
| постоянный участник
|
Пост N: 7745
Зарегистрирован: 12.09.06
|
|
Отправлено: Вчера 13:20. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | Обрати внимание на комментарий |
| Это я помню и делал с этим. В новом примере, который сбоил - использовал ТОЛЬКО один индекс со SCOPE Из-за этого и не тащил oBrw:uLastTag := (oBrw:cAlias)->( OrdName(nIndx) )
|
|
|
|
| постоянный участник
|
Пост N: 7746
Зарегистрирован: 12.09.06
|
|
Отправлено: Вчера 13:33. Заголовок: Когда делаю oBrw:Ena..
Когда делаю oBrw:Enabled(.F.) остаётся не закрашенная колонка. Это можно исправить в исходниках ? Или дайте как это можно сделать ручками, пробовал сам, у меня не получилось.
|
|
|
|
| постоянный участник
|
Пост N: 4562
Зарегистрирован: 17.02.12
|
|
Отправлено: Вчера 16:23. Заголовок: Andrey пишет В новом..
Andrey пишет цитата: | В новом примере, который сбоил - использовал ТОЛЬКО один индекс со SCOPE Из-за этого и не тащил oBrw:uLastTag := (oBrw:cAlias)->( OrdName(nIndx) ) |
| Его не надо тащить в такой ситуации, надо ставить сразу нужный тэг индекса, т.е. dbSelectArea(cAls) OrdSetFocus("MY_TAG") ... DEFINE TBROWSE ... или oBrw := _TBrowse(...) Далее можно, если надо, этот и другие тэги закреплять за колонками для DublClick-а по Header колонки и переключения тэгов показа тсб. oBrw:uLastTag самому надо вести при самостоятельном переключении тэгов, не используя механизм тсб и метод oBrw:SetOrder( nColumn )
|
|
|
|
| постоянный участник
|
Пост N: 7747
Зарегистрирован: 12.09.06
|
|
Отправлено: Вчера 16:59. Заголовок: SergKis пишет: Его ..
SergKis пишет: цитата: | Его не надо тащить в такой ситуации, надо ставить сразу нужный тэг индекса |
| Да я понял ! Спасибо ! Что насчёт - Поста N: 7746 ? Как закрасить SELECTOR ?
|
|
|
|
| moderator
|
Пост N: 2312
Зарегистрирован: 11.02.10
|
|
Отправлено: Вчера 17:15. Заголовок: Andrey пишет: Как з..
Andrey пишет: цитата: | FUNCTION Tbrowse_Customization( oBrw, oTsb ) // донастройка таблицы ... // Левый верхний + нижний уголок - specialаselector header background color oBrw:nClrSelectorHdBack := nClrNoDbf |
|
|
|
|
|
| постоянный участник
|
Пост N: 4563
Зарегистрирован: 17.02.12
|
|
Отправлено: Вчера 17:29. Заголовок: gfilatov2002 Это о ..
gfilatov2002 Это о другом, надо править метод Enabled Скрытый текст
METHOD Enabled( lEnab ) CLASS TSBrowse LOCAL nI DEFAULT lEnab := .T. IF ValType( lEnab ) == "L" IF ! lEnab IF ::lEnabled ::aOldEnabled := { ::hBrush, {}, ::nClrPane, {}, ::nClrLine, } IF ::lSelector .and. ::lDrawSpecHd ::aOldEnabled[6] := ::nClrSpcHdBack ENDIF FOR nI := 1 TO Len( ::aColumns ) AAdd( ::aOldEnabled[ 2 ], ::aColumns[ nI ]:Clone() ) ::aColumns[ nI ]:SaveColor() NEXT IF ::lDrawSuperHd AEval( ::aSuperHead, {| AS | AAdd( ::aOldEnabled[ 4 ], { AS[ 4 ], AS[ 5 ], AS[ 11 ] } ) } ) ENDIF IF ! Empty( ::oPhant ) ::oPhant:SaveColor() ::oPhant:nClrHeadBack := ::nCLR_HGRAY ::oPhant:nClrFootBack := ::nCLR_HGRAY ENDIF ENDIF ::lEnabled := .F. ::SetColor( { 2 }, { ::nCLR_HGRAY } ) ::SetColor( { 3, 4 }, { ::nCLR_GRAY, ::nCLR_HGRAY } ) ::SetColor( { 9, 10 }, { ::nCLR_GRAY, ::nCLR_HGRAY } ) ::SetColor( { 16, 17 }, { ::nCLR_GRAY, ::nCLR_HGRAY } ) ::SetColor( { 18, 19 }, { ::nCLR_GRAY, ::nCLR_HGRAY } ) ::nClrPane := ::nCLR_HGRAY ::nClrLine := ::nCLR_Lines ::hBrush := CreateSolidBrush( GetRed( ::nClrPane ), GetGreen( ::nClrPane ), GetBlue( ::nClrPane ) ) IF ::lSelector .and. ::lDrawSpecHd ::nClrSpcHdBack := ::nCLR_HGRAY ENDIF ELSE IF ! ::lEnabled FOR nI := 1 TO Len( ::aColumns ) ::aColumns[ nI ]:RestColor() SetColor( , ::aColumns[ nI ]:aColors, nI ) NEXT IF ! Empty( ::oPhant ) ::oPhant:RestColor() ENDIF IF HB_ISARRAY( ::aOldEnabled ) .AND. ! Empty( ::aOldEnabled[ 1 ] ) AEval( ::aOldEnabled[ 2 ], {| oc, nc | ::aColumns[ nc ] := oc:Clone() } ) DeleteObject( ::hBrush ) ::hBrush := ::aOldEnabled[ 1 ] ::nClrPane := ::aOldEnabled[ 3 ] ::nClrLine := ::aOldEnabled[ 5 ] IF ::lDrawSuperHd AEval( ::aOldEnabled[ 4 ], {| AS, ns | ::aSuperHead[ ns ][ 4 ] := AS[ 1 ], ; ::aSuperHead[ ns ][ 5 ] := AS[ 2 ], ; ::aSuperHead[ ns ][ 11 ] := AS[ 3 ] } ) ENDIF ENDIF IF ::lSelector .and. ::lDrawSpecHd ::nClrSpcHdBack := ::aOldEnabled[6] ENDIF ENDIF ::lEnabled := .T. ENDIF ::Refresh() ENDIF RETURN 0
| Пример тут https://TransFiles.ru/s7vog Клавиша F1 -> :Enabled(.F.) Клавиша F2 -> :Enabled(.T.) PS. В методе :DrawHeaders() делается следующее по селектору IF nI == nBegin .AND. ::lSelector nClrBacks := iif( ::lDrawSpecHd, ::nClrSpcHdBack, nClrHeadBack ) ELSE nClrBacks := iif( ::nPhantom == -1, ATail( ::aColumns ):nClrSpcHdBack, nClrPane ) ENDIF
|
|
|
|
|
| moderator
|
Пост N: 2313
Зарегистрирован: 11.02.10
|
|
Отправлено: Вчера 18:02. Заголовок: SergKis пишет: надо..
SergKis пишет: цитата: | надо править метод Enabled |
| Понял, уже поправил. Благодарю за помощь
|
|
|
Ответов - 192
, стр:
1
2
3
4
5
6
7
8
9
10
All
[только новые]
|
|