Форум » GUI » Реализация LITEBAR в TBrowse » Ответить

Реализация LITEBAR в TBrowse

gfilatov2002: Вопрос к нашим экспертам по библиотеке TSBrowse: Как средствами TBrowse создать LITEBAR с 1-й по 5-ю колонку, поскольку в 6-й располагается цветной индикатор-светофор, и поэтому курсор не должен на него выходить, его (этот столбец) надо заморозить

Ответов - 13

Haz: gfilatov2002 пишет: Как средствами TBrowse создать LITEBAR с 1-й по 5-ю колонку, лайтбар это типа длинный курсор? с 1 по 5 примерно так [pre2] for nCol := 1 to 5 oBrw:SetColor( { 6 }, {{ |a,b,c| IF( c:nCell == b, -CLR_HRED , -RGB(128,225,225)) }}, nCol ) end [/pre2] заморозка 6 это садиться на навигацию или прорисовку и если колонка болше 5 то вернуть 5

SergKis: gfilatov2002 пишет поскольку в 6-й располагается цветной индикатор-светофор, и поэтому курсор не должен на него выходить, его (этот столбец) надо заморозить Не очень понял с 6-ой колонкой. При скролинге экрана она одна заморожена в 6-ой позиции, а колонки меняются с 1 по 5 и далее с 7-ой ? Или nFreeze := 5 и при попытке ставить фокус на 6-ю переставляем на 7-ю, или оставляем на 5-ой ? Мой вариант (на примере APP_OOPCOLUMNS) только по цвету [pre2] If Empty(aColors) .or. ! HB_ISARRAY(aColors) aColors := {} AAdd(aColors, { CLR_FOCUSB, { |a,nc,ob| If( ob:nCell == nc, ; -CLR_HRED, If( nc > 5, ; {RGB(220, 220, 220), RGB(220, 220, 220)}, -RGB(128,225,225) ) ) } } ) EndIf DEFINE TBROWSE &cName OBJ oBrw AT nY, nX ALIAS ALIAS() WIDTH nW HEIGHT nH CELL ; COLORS aColors ... :nFreeze := 5 :lLockFreeze := .T. ... [/pre2] С Игорем согласен в плане навигации. Можно исп. :bChange и oCol:bGotFocus ля установки колонки

gfilatov2002: SergKis пишет: Не очень понял с 6-ой колонкой. При скролинге экрана она одна заморожена в 6-ой позиции, а колонки меняются с 1 по 5 и далее с 7-ой ? Шестая колонка должна быть заморожена, и должно быть движение курсора только с первой по пятую колонку. Всего в таблице находится шесть колонок Как я понимаю, надо правильно установить блок кода oCol:bGotFocus по совету Игоря: если колонка больше 5, то вернуть 5


Haz: gfilatov2002 пишет: Как я понимаю, надо правильно установить блок кода oCol:bGotFocus по совету Игоря: если колонка больше 5, то вернуть 5 самое простое в данной ситуации [pre2] oBrw:bOnDraw := { || if( oBrw:nCell > 5, oBrw:GoLeft(), nil) } [/pre2]

SergKis: Haz пишет самое простое в данной ситуации Согласен, :bOnDraw, это самое простое. Только, если колонок больше 6, то лучше так :bOnDraw := { |ob| if( ob:nCell > 5, ( ob:nCell := 5, ob:DrawSelect() ), nil) }

SergKis: PS Можно без :bOnDraw, используя :nFreeze [pre2] AAdd(aColors, { CLR_FOCUSB, { |a,nc,ob| If( ob:nCell == nc, ; -CLR_WHITE, If( nc > 5, ; {RGB(220, 220, 220), RGB(220, 220, 220)}, -RGB(128,225,225) ) ) } } ) ... :nFreeze := 5 :lLockFreeze := .T. ... [/pre2] т.е. фокус на колонке 6 всегда и цвет курсора как фона тсб

gfilatov2002: SergKis пишет: фокус на колонке 6 всегда и цвет курсора как фона тсб Спасибо, в примере из папки APP_OOPCOLUMNS получилось сделать непрерывный курсор с 1-й по 5-ю колонку, используя :nFreeze. А вот при работе с массивом такой курсор не виден. Контрольный пример - ниже. [pre2]/* * MINIGUI - Harbour Win32 GUI library Demo * */ #include "minigui.ch" #include "tsbrowse.ch" #define AMARELOCLARO {255,252,200} #define AZULCLARO {202,225,230} #define CINZA05 {239,238,238} #define CINZA10 {222,222,221} #define CINZA20 {194,193,193} #define CINZA80 {96,93,92} #define VERDE {0,146,63} #define VERDECLARO {192,235,210} #define AZULESCURO {0,0,128} #define VERDEESCURO {33,68,70} #define VERMELHOCLARO {255,150,150} #define RGB_PRETO RGB( 0,0,0 ) #define RGB_BRANCO RGB( 255,255,255 ) #define RGB_AMARELOCLARO RGB( 255,252,200 ) #define RGB_AZULCLARO RGB( 202,225,230 ) #define RGB_CINZA05 RGB( 239,238,238 ) #define RGB_CINZA10 RGB( 222,222,221 ) #define RGB_CINZA20 RGB( 194,193,193 ) #define RGB_CINZA80 RGB( 96,93,92 ) #define RGB_VERDE RGB( 0,146,63 ) #define RGB_AZULESCURO RGB( 0,0,128 ) #define RGB_AZUL RGB( 0,0,255 ) #define RGB_VERMELHO RGB( 255,0,0 ) #define RGB_AMARELO RGB( 255,255,0 ) #define RGB_CELCLARA RGB( 210, 215, 210 ) #define RGB_CELESCURA RGB( 240, 240, 240 ) #define RGB_COLCLARA RGB( 182, 194, 222 ) #define RGB_COLESCURA RGB( 170, 185, 220 ) #define RGB_ROSACLARO RGB( 255, 244, 241 ) //------------------------------------------------ PROCEDURE Main //------------------------------------------------ Public oGrid_Fases,; aFases := { { "","",Space(15),CtoD( " / / " ),CtoD( " / / " ),.T. } },; bColor,aBmp[3],nSave aBmp[1] := LoadImage ("images\Ponteiro.bmp") aBmp[2] := LoadImage ("images\Level1.bmp") aBmp[3] := LoadImage ("images\Level2.bmp") DEFINE WINDOW win_1 AT 0,0 WIDTH 500 HEIGHT 500 ; MAIN TITLE "Teste NoHorizontal" NOMAXIMIZE NOSIZE GerarDados() bColor := { || If( oGrid_Fases:nAt % 2 == 0, RGB_CELCLARA, RGB_CELESCURA ) } DEFINE TBROWSE oGrid_Fases AT 20,10; WIDTH 430 HEIGHT 395 CELLED; Font "Arial" Size 9; ToolTip "Identificaзгo das fases, conforme quantidade de fases."; Colors {RGB_AZULESCURO, bColor}; BackColor CINZA10 oGrid_Fases:SetArray( aFases ) ADD COLUMN TO TBROWSE oGrid_Fases DATA ARRAY ELEMENT 1; TITLE "" SIZE 20 ADD COLUMN TO TBROWSE oGrid_Fases DATA ARRAY ELEMENT 2; TITLE "Seq" SIZE 30 ADD COLUMN TO TBROWSE oGrid_Fases DATA ARRAY ELEMENT 3; TITLE "Descriзгo da Fase" SIZE 140 ADD COLUMN TO TBROWSE oGrid_Fases DATA ARRAY ELEMENT 4; TITLE "Data Inнcio" SIZE 90 ADD COLUMN TO TBROWSE oGrid_Fases DATA ARRAY ELEMENT 5; TITLE "Data Fim" SIZE 90 ADD COLUMN TO TBROWSE oGrid_Fases DATA ARRAY ELEMENT 6; TITLE "Peso" SIZE 40 CHECKBOX EDITABLE // this column is editable oGrid_Fases:lNoHScroll := .T. oGrid_Fases:lNoLiteBar := .F. oGrid_Fases:Look3D( .T., 1, 1 ) oGrid_Fases:Look3D( .T., 2, 1 ) oGrid_Fases:Look3D( .T., Nil, 2 ) oGrid_Fases:Look3D( .T., 1, 1 ) oGrid_Fases:aColumns[3]:cPicture := "@!" oGrid_Fases:nLineStyle := LINES_VERT oGrid_Fases:nFreeze := 2 oGrid_Fases:lLockFreeze := .T. oGrid_Fases:nHeightCell += 1 oGrid_Fases:nHeightHead += 3 oGrid_Fases:lNoChangeOrd:= .T. && Desativa a Classificaзгo pelo Cabeзalho oGrid_Fases:lNoPopup := .T. && Desativa Menu pelo Botгo Direito no Cabeзalho oGrid_Fases:lPickerMode := .F. && Desativa o modo de preenchimento no campo data oGrid_Fases:aColumns[6]:nEditMove := DT_MOVE_DOWN oGrid_Fases:aColumns[6]:aCheck := { aBmp[2], aBmp[3] } oGrid_Fases:GetColumn(6):bLClicked := {|| _Pushkey(VK_SPACE) } oGrid_Fases:GetColumn(6):bPostEdit := {|uVl,oBr,lAp| mPostEdit(uVl, oBr, lAp) } oGrid_Fases:SetColor( { 1, 2, 3, 4, 7, 8, 11, 12, 13, 14, 15 }, ; { RGB_PRETO, bColor, RGB_AZULESCURO, { RGB_COLESCURA,RGB_COLCLARA }, RGB_VERMELHO, RGB_AMARELO, RGB_PRETO, bColor,RGB_AZULESCURO, { RGB_COLESCURA,RGB_COLCLARA }, RGB_AZULESCURO } ) oGrid_Fases:SetColor( { 2 }, { { RGB_COLESCURA,RGB_COLCLARA } },1 ) oGrid_Fases:SetColor( { 2 }, { { RGB_COLESCURA,RGB_COLCLARA } },2 ) oGrid_Fases:hBmpCursor := aBmp[1] oGrid_Fases:SetAlign( 1, 1, DT_CENTER ) // ( nCol, nLevel, nAlign ) oGrid_Fases:SetAlign( 2, 1, DT_CENTER ) // ( nCol, nLevel, nAlign ) oGrid_Fases:SetAlign( 3, 1, DT_CENTER ) // ( nCol, nLevel, nAlign ) oGrid_Fases:SetAlign( 4, 1, DT_CENTER ) // ( nCol, nLevel, nAlign ) oGrid_Fases:SetAlign( 5, 1, DT_CENTER ) // ( nCol, nLevel, nAlign ) oGrid_Fases:SetAlign( 6, 1, DT_RIGHT ) // ( nCol, nLevel, nAlign ) oGrid_Fases:HiliteCell( 3 ) && Posiciona na coluna n END TBROWSE END WINDOW CENTER WINDOW win_1 ACTIVATE WINDOW win_1 RETURN Function GerarDados() aFases := {} For nI := 1 To 50 cDescFase := AllTrim( Str( nI ) )+"є BIMESTRE"+Space(50) cDescFase := SubStr( cDescFase,1,15 ) aAdd( aFases,{ "",StrZero( nI,2 ),cDescFase,CtoD( " / / " ),CtoD( " / / " ),.T. } ) Next nI Return Nil STATIC FUNCTION mPostEdit( uVal, oBrw, lApp ) LOCAL cForm := oBrw:cParentWnd LOCAL cBrw := oBrw:cControlName LOCAL nCell := oBrw:nCell LOCAL oCol := oBrw:aColumns[ nCell ] LOCAL lRet := .T. If nCell == 6 SetProperty(cForm, "Title", cvaltochar(oBrw:nAt)+'->'+cvaltochar(uVal)) EndIf RETURN lRet [/pre2]

SergKis: gfilatov2002 пишет А вот при работе с массивом такой курсор не виден. Курсор раотает, только он забивается установками :SetColor(...), если добавить [pre2] oGrid_Fases:SetColor( { 2 }, { { RGB_COLESCURA,RGB_COLCLARA } },2 ) oGrid_Fases:SetColor( { 6 }, { { |a,nc,ob| If( ob:nCell == nc, -CLR_HRED, -RGB(128,225,225) ) } } ) [/pre2] то -CLR_HRED будет виден

SergKis: PS Убрал все установки цвета в примере, оставил только oGrid_Fases:SetColor( { 6 }, { { |a,nc,ob| If( ob:nCell == nc, -CLR_HRED, -RGB(128,225,225) ) } } ) -CLR_HRED есть -RGB(128,225,225) нет похоже надо разбираться

SergKis: SergKis пишет похоже надо разбираться У меня получилась такая правка (hmg 19.09 версия)[pre2] METHOD DrawSelect( xRow, lDrawCell ) CLASS TSBrowse ... If lNoLite nClrFore := ::GetValProp( oColumn:nClrFocuFore, nClrText, nJ, ::nAt ) nClrBack := ::GetValProp( oColumn:nClrFocuBack, nClrPane, nJ, ::nAt ) nCursor := 0 If ValType( nClrBack ) == "N" .and. nClrBack < 0 nClrBack := -nClrBack // nClrBack := ::GetValProp( oColumn:nClrBack, nClrPane, nJ, ::nAt ) EndIf Else ... [/pre2] С отрицательным nClrBack возможны варианты (строка в комментарии) В примере, добавляем[pre2] oGrid_Fases:SetColor( { 2 }, { { RGB_COLESCURA,RGB_COLCLARA } },2 ) oGrid_Fases:SetColor( { 6 }, { { |a,nc,ob| If( ob:nCell == nc, -CLR_HRED, -RGB(128,225,225) ) } } ) oGrid_Fases:hBmpCursor := aBmp[1] [/pre2]

Andrey: А итоговый пример будет ?

SergKis: Andrey пишет А итоговый пример будет ? gfilatov2002 пишет Контрольный пример - ниже. Скрытый текст См. пост 1667 выше

gfilatov2002: SergKis пишет: У меня получилась такая правка Да, после этой правки заработало и с массивом. Благодарю за помощь



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