Page 1 of 2

Gracias a todos que ayudaram!! problema resolvido!!!

Posted: Sun Oct 21, 2007 9:31 pm
by laugusto
Antonio,

Tengo en un DIALOG 18 listbox de array, 1 e 18 tem el mismo array, que son horarios. Lo que pasa es que quando clico en el button executo outra tarefa, que sea, abro una otra DIALOG e retorno sem problemas. Pero, quando clico en una celda del browse, executa la misma tarefa, mas ao retornar, mostra los browses como se tivesse ocorrido un scroll, mira la imagem.

imagem normal

Image

imagem ao retornar quando dou click en la celda del browse

Image

No se como proceder para que não aconteça el problema, o sea, no ocorra scroll en los browses.

Saludos desde Brasil,

Posted: Sun Oct 21, 2007 10:37 pm
by Antonio Linares
Luiz Augusto,

Puedes poner las imágenes más grandes para que se vea con más detalle ? gracias

Posted: Sun Oct 21, 2007 11:44 pm
by laugusto
Antonio,

Pido disculpas por las imagenes, ai vão mas grandes.

la primera vez estou nesta tela
http://al5.us/image/images/112637mapa1.JPG

vou para esta otra tela
http://al5.us/image/images/906771mapa4.JPG

e quando retorno minha tela fica deformada
http://al5.us/image/images/384837mapa2.JPG

Saludos desde Brasil

Posted: Mon Oct 22, 2007 10:05 am
by AOKISANTOS
laugusto


Coloque um pedaço do seu PRG, principalmente quando retorna ao browse para que possamos ajuda-lo.

Ok

Aoki

Posted: Mon Oct 22, 2007 11:49 am
by Antonio Linares
Luiz Augusto,

Haz como te dice Aoki, muéstranos parte del código cuando vas y regresas al browse.

En la imagen la última fecha es 22:30. Es como si hubieses cambiado el comienzo del browse a una hora más adelantada

Posted: Mon Oct 22, 2007 12:24 pm
by laugusto
Buenos dias a todos,

Segue abajo el codigo:

- montagem do button 1 e 18, horarios do mapa:

Code: Select all


   // Monta o Cabeçalho dos Horarios
   a_Mapa[ 1] := { '07:00', '07:30', '08:00', '08:30', '09:00', '09:30', '10:00', '10:30',;
                   '11:00', '11:30', '12:00', '12:30', '13:00', '13:30', '14:00', '14:30',;
                   '15:00', '15:30', '16:00', '16:30', '17:00', '17:30', '18:00', '18:30',;
                   '19:00', '19:30', '20:00', '20:30', '21:00', '21:30', '22:00', '22:30' }
   a_Cor[ 1] := {}
   // Inicializa o Restante dos ARRAYs
   For X := 2 to 32
      a_Mapa[ X] := Array(32)
       a_Cor[ X] := Array(32)
   Next

//monta o listbox dos horarios do mapa

   //--------------------------------------------------------------------------
   // Mostra o Cabeçalho das Horas da Agenda - lado Esquerdo

      TWBrowse():lHScroll := .f.
      REDEFINE LISTBOX oBrw[ 1];
         FIELDS a_Mapa[ 1][ n] ID 70 OF oMap30

      oBrw[ 1]:SetArray( a_Mapa[ 1] )

      oBrw[ 1]:bGotop       := { || n := 1 }
      oBrw[ 1]:bGoBottom    := { || n := Eval( oBrw[ 1]:bLogicLen ) }
      oBrw[ 1]:bSkip        := { | nwant, nold | nold := n , n += nwant, n := Max( 1, Min( n, Eval( oBrw[ 1]:bLogicLen ))), n - nOld }
      oBrw[ 1]:bLogicLen    := { || Len( a_Mapa[ 1] ) }

      // Força o browse a trabalhar com celulas
      oBrw[ 1]:lCellStyle    := .t.
      oBrw[ 1]:nLineStyle    :=  4
      oBrw[ 1]:lDrawHeaders  := .f.

      // Cor da Linha
      oBrw[ 1]:nClrText := { || CLR_BLACK }

      // Cor de fundo da planilha
      oBrw[ 1]:nClrPane := { || nRGB( 209, 209, 209 ) }
      oBrw[ 1]:lDrawSelect := .f.

      oBrw[ 1]:Refresh()


   //--------------------------------------------------------------------------
   // Mostra o Mapa 1 
  //  Esta montagem é exatamente igual para os mapas
  //  1 a 17, o mapa 18 mostra os horarios do lado direito.

      TWBrowse():lHScroll := .f.
      REDEFINE LISTBOX oBrw[ 2];
         FIELDS a_Mapa[ 2][ n] ID 71 OF oMap30

      oBrw[ 2]:SetArray( a_Mapa[ 2] )

      oBrw[ 2]:bGotop       := { || n := 1 }
      oBrw[ 2]:bGoBottom    := { || n := Eval( oBrw[ 2]:bLogicLen ) }
      oBrw[ 2]:bSkip        := { | nwant, nold | nold := n , n += nwant, n := Max( 1, Min( n, Eval( oBrw[ 2]:bLogicLen ))), n - nOld }
      oBrw[ 2]:bLogicLen    := { || Len( a_Mapa[ 2] ) }

      // Força o browse a trabalhar com celulas
      oBrw[ 2]:lCellStyle    := .t.
      oBrw[ 2]:nLineStyle    :=  4
      oBrw[ 2]:lDrawHeaders  := .f.

      // Cor da Linha
      oBrw[ 2]:nClrText := { || CLR_WHITE }

      // Cor de fundo da planilha
      oBrw[ 2]:nClrPane   := { || IF( a_Mapa[ 2][ n] = 'BLOQ', CLR_HRED,;
                                  IF( Substr( a_Cor[ 2][ n], 20, 1 ) = '*', nRgb(   0, 193,   0 ),;
                                  IF( Substr( a_Cor[ 2][ n], 20, 1 ) = '+', nRgb( 255,   0,   0 ), aBrush_[TCOR[ 1]] ))) }

      oBrw[ 2]:bLDblClick   := { | nRow, nCol | pPR_A_COD := TMP[ 1],;
                                                bPos := 1, cPos := n,;
                                                TESTE2( oWnd, oAgen, oMap30, pPR_A_COD, oBtn_, .t. ) }
      /*
      Obs.: bPos equivale ao button do profissional
            cPos equivale a coluna onde se deu o click do mouse
            necessários pra que possa ser feito RETORNO CORRETAMENTE.
      */

      // Tooltip do conteudo da Celula, funcionalidade futura(18.10.2007 by lAugusto)
      oBrw[ 2]:cTooltip := "Duplo Clique para Selecionar " + CRLF + " Horario/Profissional."
    //oBrw[ 2]:bChange  := { || oBrw[ 2]:cToolTip := a_Mapa[ 2][ oBrw[ 2]:nAt ] }
      
      oBrw[ 2]:lDrawSelect := .f.
      oBrw[ 2]:Refresh()
      oBrw[ 2]:nDlgCode := DLGC_WANTALLKEYS
      //SysRefresh()

   //--------------------------------------------------------------------------

// Montagem dos Buttons dos profissionais, de 1 a 18

   REDEFINE SBUTTON oBtn[ 1] ID 635 OF oMap30;
      PROMPT aCbc[ 1];
      ACTION( pPR_A_COD := TMP[ 1], bPos := oMap30:oCtlFocus:nId,;
              TESTE2( oWnd, oAgen, oMap30, pPR_A_COD, oBtn_ ) ) CANCEL;
      COLORS { |oB| IF( oB:lMouseOver,CLR_WHITE, CLR_BLACK )},;
             { |oB| IF( oB:lMouseOver,{ CLR_WHITE, CLR_BLUE },;
                                      { CLR_HGRAY, CLR_HGRAY } ) };
      BORDER TEXT POSITION ON_CENTER

   oBtn[ 1]:lCancel  := .t.
   oBtn[ 1]:bKeyDown := { |nKey|;
   IF( nKey = VK_ESCAPE,( Ver_Tecla1( oAgen ) ),;
   IF( nKey = VK_LEFT,( Anterior( 1 ) ),;
   IF( nKey = VK_RIGHT,( Proximo( 1 ) ), nil ))) }
   oBtn[ 1]:nDlgCode := DLGC_WANTALLKEYS

//-----------------------------------------------------------------
//------------ CLICK NO HBUTTON ------------------------------------------------------------
Function TESTE2( oWnd, oAgen, oMap30, pPR_A_COD, oBtn_, lEdita )

   local oFont
   DEFAULT lEdita := .f.  // Quando TRUE, clicou diretamente na Célula.

   pPR_A_COD := Substr( PPR_A_COD, 1, 2 ) + ( Strzero( Val( Substr( pPR_A_COD, 3, 3 ) ), 3 ) )
   oPR_A_COD:Refresh()

   dbSelectArea( "Pro_A01" )  //  sele 7
   dbSetOrder( 'IPro_A01' )   //  set order to 1
   dbGotop()
   dbSeek( pPR_A_COD )
   IF EOF()
      tone( 2000, 3 )
      msginfo( 'O código selecionado não consta do cadastro de profissionais.', 'Atenção Operador' )
      xSetFocus( oBtn[bPos] )
      Return nil
   EndIF

   oMap30:Hide()

   oAgen:Show()
   //oAgen:Enable()
   //oAgen:SetFocus()

   pPR_A_NOM := Pro_A01->PR_A_NOM
   oPR_A_NOM:Refresh()
 
   dbSelectArea( "Pro_C01" )  // Sele 11
   dbSetOrder( 'IPRO_C01' )
   dbSeek( pPR_A_COD )
   TFOLGAT    := Pro_C01->PR_C_FOLG
   pPR_C_FUN  := Pro_C01->PR_C_FUN
   pPR_C_HENT := Pro_C01->PR_C_HENT

   oPR_C_FUN:Refresh()
   oPR_C_HENT:Refresh()

// pAG_DATA := m->tDATA  by lAugusto 12/09/2007
   DIA_SEMANA( oAgen )
   oAgen:aControls[ 5]:Refresh()            //  oAG_DATA:Refresh()
   oAgen:aControls[ 6]:SetText( tDIA_SEM )  //  oDIA_SEM:Refresh()

   // Vai para AGENDA
   HORARIO( oAgen, oBtn_ )  // Rotina no AG_002.PRG

   // Mostra Botoes Extras de Navegacao do Calendario
   oBtn_[ 3]:Show()
   oBtn_[ 4]:Show()
   oBtn_[ 5]:Show()
   oBtn_[ 6]:Show()

   DIA( oAgen, lEdita, cpos )  // Rotina no AG_002.PRG

Return nil

//-------------------------------------------------------------------
Function Ver_Tecla1( oAgen )

   local X

   tMapa := .t.  // Se TRUE, esta na MAPA.
   tAgen := .f.  // Se TRUE, esta na AGENDA.
   lProc := .f.

   lSai := .f.  // SE FALSE, habilita buttons de funções e coloca o FOCO na data no MAPA
   // destrava Buttons de Movimentação do MAPA
   For X := 22 to 33
      oBtn[ X]:Enable()
      oBtn[ X]:Refresh()
   Next

   // desabilita botoes de escolha do profissional( 1 a 17, inclusive. )
   For X := 1 to 17
      oBtn[ X]:Refresh()
      oBtn[ X]:Disable()
   Next

   oAG_DATA:Enable()
   oAG_DATA:Refresh()

   SET DATE FRENCH
   DIA_SEMM( )

   // Se AGENDA de 30min
   IF _TPA = 'N3'
      MOSTRAM1( oAgen )
   Else  // Se AGENDA de 20min
      // 
   EndIF

   xSetFocus( oAG_DATA )

Return nil
//----------------------------------------------------------------------
Function DIA_SEMM( )

   DO CASE
      Case dow( pAG_DATA ) = 1
         tDIA_SEM := 'Domingo'
      Case dow( pAG_DATA ) = 2
         tDIA_SEM := 'Segunda'
      Case dow( pAG_DATA ) = 3
         tDIA_SEM := 'Terça  '
      Case dow( pAG_DATA ) = 4
         tDIA_SEM := 'Quarta '
      Case dow( pAG_DATA ) = 5
         tDIA_SEM := 'Quinta '
      case dow( pAG_DATA ) = 6
         tDIA_SEM := '_  '
      Case dow( pAG_DATA ) = 7
         tDIA_SEM := 'Sábado '
   ENDCASE
   oDIA_SEM:Refresh()

Return nil
//-----------------------------------------------------------------------
Function MOSTRAM1( oAgen )

   local I, X, Z, nInd := 2, n
   TC := 7

   FOR I = 1 TO 17

      DO CASE
       Case i = 1
            pPR_A_COD = TMP[ 1]
       Case i = 2
            pPR_A_COD = TMP[ 2]
        ... 
        ...
        ...
       Case i = 17
            pPR_A_COD = TMP[17]
      ENDCASE

      dbSelectArea( "Ag_Pri" )  // sele 8
      dbSetOrder( "IAg_002" )   // set order to 2
      dbSeek( pPR_A_COD + Dtos( pAG_DATA ) )

      //----------------------------------------------------------------------
      // Limpa _ do ARRAY do Listbox dos Mapas - 2 a 17
      
      IF Len( a_Mapa[nInd] ) > 0
         Z := Len( a_Mapa[nInd] )
         oBrw[nInd]:bGotop := { || n := 1 }
         For X := 1 To Z
            Adel( a_Mapa[nInd][ oBrw[nInd]:nAt ] )
            ASize( a_Mapa[nInd], Len( a_Mapa[nInd] ) - 1 )
         Next
         // Inicializa o Restante dos ARRAYs
         a_Mapa[nInd] := Array(32)
      EndIF
      
      // Preenche o Array Mapas com os dados da AGENDA do Profissional
      a_Mapa[nInd][ 1] := AG_0700A
      a_Mapa[nInd][ 2] := AG_0730A
      ...
      ...
      ... 
      a_Mapa[nInd][30] := AG_0930P
      a_Mapa[nInd][31] := AG_1000P
      a_Mapa[nInd][32] := AG_1030P

      //- Verifica se Substr( a_Cor[nInd][ n], 20, 1 ) = '*', SE SIM, pinta a celula de verde limão
      a_Cor[nInd][ 1] := AG_0700AT
      a_Cor[nInd][ 2] := AG_0730AT
      ...
      ...
      ...
      a_Cor[nInd][31] := AG_1000PT
      a_Cor[nInd][32] := AG_1030PT
      //----------------------------

      dbSelectArea( "Bloqueio" )  //  sele 25
      SET FILTER TO Bloqueio->BL_SEM = Dow( pAG_DATA )
      dbSeek( pPR_A_COD )
      IF !Bloqueio->( EOF() )
         While pPR_A_COD = BL_COD
            X := BL_HOR
            a_Mapa[nInd][ X] := 'BLOQ'
            dbSkip()
         Enddo
      EndIF
      SET FILTER TO

      oBrw[nInd]:bGotop := { || n := 1 }
      oBrw[nInd]:Refresh()

      dbSelectArea( "Ag_Pri" )  // sele 8
      nInd += 1

   Next

Return nil
Saludos desde Brasil,

Posted: Mon Oct 22, 2007 2:29 pm
by karinha
http://al5.us/image/images/384837mapa2.JPG

Luiz, Não consigo identificar o DEFEITO. Olhei as tres tela, e não vejo o ERRO.

Expliqe onde está o problema.

Posted: Mon Oct 22, 2007 2:42 pm
by laugusto
João,

Olhe as imagens, parece que esta ocorrendo um scroll nos listbox, se voce observar o primeiro listbox, vera que os horarios forma movidos acima, e acontece a mesma coisa com os outros. Este problema não ocorre se clico direto no button, executo a outra tarefa e retorno normal, mas, se clico na CELULA do listbox, ao retornar, causa um scroll.

Espero ter explicado corretamente,

Saludos,

Posted: Mon Oct 22, 2007 2:57 pm
by karinha
TWBrowse():lHScroll := .f.

Luiz, Este comando, é da TWBROWSE.PRG By Hernan???

Luiz, como esta as PROPRIEDADES da sua TWBROWSE(ListBox) no teu ARQUIVO DE RECURSOS. Se entendi, voce não quer que a LISTBOX, APRESENTE UM SCROLL, ele está desligado(desmarcado) na DIALOG??
Vefifique e reporte.

A LISTBOX que voce definui no EDITOR DE RECURSOS, é mesmo uma TWBROWSE??? Verifique.

Abraços.

Regards, saludos.

Posted: Mon Oct 22, 2007 3:13 pm
by Francisco Horta
augusto,
prueba al entrar a la segunda opcion guardar el no. re registro en donde esta posicionado el browse original, luego cuando vuelvas, posiciona el registro nuevamente y refresca el browse
salu2
paco

Posted: Mon Oct 22, 2007 3:25 pm
by laugusto
João,

Este comando,
TWBrowse():lHScroll := .f.

Luiz, Este comando, é da TWBROWSE.PRG By Hernan???
Sim, é do Hernan, codigo fonte compilado com FWH2.6 + Harbour45;
como esta as PROPRIEDADES da sua TWBROWSE(ListBox) no teu ARQUIVO DE RECURSOS.
CONTROL "", 71, "TWBrowse", 0 | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 46, 59, 30, 281
A LISTBOX que voce definui no EDITOR DE RECURSOS, é mesmo uma TWBROWSE??? Verifique.
Sim!

Pra que voce possa entender o problema, tenho a dizer que, ao clicar na celula do listbox, escondo a dialog, oMap30:Hide(), onde estão os listbox, abro uma outra tela, oAgen:Show() que é a tela dos horarios, ao retornar, escondo oAgen:Hide() e torno a mostrar a tela do mapa, oMap30:Show(), neste momento, é que acontece o problema nos listbox, uma especie de scroll involuntario, bagunçando a tela. É como se os dados dos listbox fossem movidos para cima deixando a parte de baixo vazia, espero ter explicado corretamente.

Saludos, [/code]

Posted: Mon Oct 22, 2007 3:35 pm
by laugusto
Paco,

O mas incrivel é que, en el listbox que recebeu o clique do mouse, retorna correto, não acontece o problema.

Saludos desde Brasil,

Posted: Mon Oct 22, 2007 3:35 pm
by karinha
Tente fazer, como o Francisco Horta Falou, além disso, mande REFRESCAR A TELA COM oDlg:Refresh(), oDlg:UpDate(), Veja também se a LISTBOX está sendo REFRESCADA.

Posted: Mon Oct 22, 2007 4:27 pm
by laugusto
Amigos,

Segue link pra baixar o exe e arquivos, ao descompactar, deixar criar a pasta bellewin, e chamar o exe pelo atalho, caso o disco seja diferente de C, trocar a letra no segundo parametro do atalho de C para D. Escolher a opção agenda de profissionais e teclar F5 pra abrir o mapa.

http://discovirtual.terra.com.br/vd.cgi ... 719&_we=13

Senha de acesso: 40AE7257

Saludos,

Posted: Mon Oct 22, 2007 5:05 pm
by karinha
laugusto wrote:Amigos,

Segue link pra baixar o exe e arquivos, ao descompactar, deixar criar a pasta bellewin, e chamar o exe pelo atalho, caso o disco seja diferente de C, trocar a letra no segundo parametro do atalho de C para D. Escolher a opção agenda de profissionais e teclar F5 pra abrir o mapa.

http://discovirtual.terra.com.br/vd.cgi ... 719&_we=13

Senha de acesso: 40AE7257

Saludos,

FALTA USUARIO E SENHA DE ACESSO LUIZ... DO PROGRAMA, NÃO DO TERRA.