Page 1 of 1

Problema com xBrowse em Dialog

PostPosted: Fri Mar 27, 2015 1:09 pm
by ip_ram
Olás!

Estou com um problema ao exibir uma matriz de dados com xbrowse numa dialog.

Na primeira escolha do combobox tudo funciona perfeitamente.

A partir da segunda escolha, após exibir a nova matriz de dados, ao clicar sobre a linha do registro, o xbrowse exibe a lista anterior.

Code: Select all  Expand view

//
Function Ver_Est()

   Private oDlg, oEst, oCon, oSai, oGra, oTip_Est, cTip_Est, aTip_Est, aEst, aLst
   
    aEst     := {}
    aLst     := {}
    cTip_Est := "Data"
    aTip_Est := { "Data", "Hora", "Endereço IP", "Endereço Internet" }

    If ! Abrir_DBF(cUniSer + cDirBas + "\TB_EST.DBF","TB_EST",.t.,"DBFCDX")
        Return(.f.)
    EndIf
    TB_EST->(DBSetOrder(1))

   Define Dialog oDlg Of oWnd Title "Estatística" Font oFonte From 0,0 To 434,700 Pixel

    @ 005,005 Say "Tipo:" Of oDlg Pixel
    @ 005,025 ComboBox oTip_Est Var cTip_Est Items aTip_Est Size 64,100 Of oDlg Pixel ;
             Message "Informe o tipo da estatísitica"

   @ 020,005 Say Space(1) Of oDlg Box Size 340,05 Pixel

    @ 002,250 BTNBMP oCon Size 16,16 Of oDlg Font oFonte 2007 Pixel ToolTip "Atualizar dados" ;
                 Action (Atu_Est(cTip_Est)) File (cUniSer + cDirImg + "\prop.bmp")

    @ 002,290 BTNBMP oGra Size 16,16 Of oDlg Font oFonte 2007 Pixel ToolTip "Mostrar gráfico" ;
                 Action (MsgInfo("Exibir gráfico","Em breve...")) File (cUniSer + cDirImg + "\graph.bmp")

    @ 002,330 BTNBMP oSai Size 16,16 Of oDlg Font oFonte 2007 Pixel ToolTip "Retornar" ;
                 Action (oDlg:End()) File (cUniSer + cDirImg + "\quit.bmp") Default Cancel

    oDlg:lHelpIcon := .f.

    Activate Dialog oDlg Centered On Init (oTip_Est:SetFocus())

    TB_EST->(DBCloseArea())

Return(Nil)
//
Function Atu_Est(cTip)

    Local cRef, cEst, i := 0

    If Empty(cTip)
        MsgAlert("Deve ser informado um tipo de estatística","Aviso")
        Return(Nil)
    EndIf

    aLst := {}
    cRef := Str(aScan(aTip_Est,AllTrim(cTip)),1)

    TB_EST->(DBSeek(cRef,.f.))

    While ! TB_EST->(EOF()) .And. TB_EST->Tip_Est = cRef
        aEst := {}
        cEst := TB_EST->Ref_Est
        While ! TB_EST->(EOF()) .And. TB_EST->Tip_Est = cRef .And. TB_EST->Ref_Est = cEst
            AAdd( aEst, { TB_EST->Ref_Est, TB_EST->Des_Est, TB_EST->Tot_Est } )
            TB_EST->(DBSkip())
      EndDo
        ASort( aEst ,,, {|x,y| x[3] > y[3] } )
      For i := 1 To Len( aEst )
            If cRef = "4"
            If i < 21
                    AAdd( aLst, { aEst[i,1], aEst[i,2], aEst[i,3] } )
                Else
                    Exit
                EndIf
            Else
            If i < 6
                    AAdd( aLst, { aEst[i,1], aEst[i,2], aEst[i,3] } )
                Else
                    Exit
                EndIf
            EndIf
      Next
    EndDo

    @ 055,000 xBrowse oEst Of oDlg Columns 1,2,3 ;
                 ColSizes 80,510,60 Pictures "@!","@A","999,999,999" Array aLst Pixel Size 700,382 Font oFonte

    oEst:nMarqueeStyle = MARQSTYLE_HIGHLROW
   
    oEst:nRowDividerStyle := 3
    oEst:nColDividerStyle := 2

    oEst:aCols[1]:nDataStrAlign := 2

    oEst:aCols[1]:nHeadStrAlign := 2
    oEst:aCols[2]:nHeadStrAlign := 0

    If cRef = "1"
        oEst:aCols[1]:cHeader = "Data"
        oEst:aCols[1]:Show()
    ElseIf cRef = "2"
        oEst:aCols[1]:cHeader = "Hora"
        oEst:aCols[1]:Show()
    ElseIf cRef = "3"
        oEst:aCols[1]:cHeader = "IP"
        oEst:aCols[1]:Show()
    ElseIf cRef = "4"
        oEst:aCols[1]:cHeader = "Referência"
        oEst:aCols[1]:Hide()
    EndIf

    oEst:CreateFromCode()

    oEst:Refresh()
    oEst:SetFocus()
   
Return(Nil)
//
 


Alguém pode ajudar?

Obrigado!

Rodrigo Melo
xH 1.2.3 / FWH 14.12

Re: Problema com xBrowse em Dialog

PostPosted: Sat Mar 28, 2015 1:25 pm
by Euclides
Olá Rodrigo.
Se você colocasse a definição do cadastro TB_EST.DBF e uma lista aproximada dos dados que ela contêm eu poderia apresentar uma solução mais simples...
Em todo caso, eu NUNCA colocaria uma definição de NENHUM CONTROLE como ACTION de um botão qualquer, como você está fazendo em: Function Atu_Est(cTip). (no máximo, eu faço no ON INIT)
Estamos no aguardo...
T+, Euclides

Re: Problema com xBrowse em Dialog

PostPosted: Mon Mar 30, 2015 11:54 am
by ip_ram
Euclides,

Obrigado por responder.

Uma explicação: A tabela TB_EST contém os registros de acesso à internet das estação de trabalho de uma rede. O que pretendo mostrar no gráfico é uma lista dos 10 mais acessados (para o filtro 4) e uma lista dos 5 mais acessados (para os filtros 1, 2 e 3).

Por isso foi escrito desta forma.

Mas já consegui resolver o problema.

Um abraço!

Rodrigo Melo