Página 1 de 1

Define TAB

Enviado: 30 Abr 2008 17:11
por Oráculo
Gostaria de saber se tem como dentro do Define Window usando o Define Tab posso abrir dois Browse usando dois Dbfs diferentes ou quem sabe o mesmo usando o DbfSetFilter() do Clipper.

Código: Selecionar todos

DEFINE WINDOW Win_1				;
	AT 0,0					;
        WIDTH 750                               ;
        HEIGHT 500                              ;
        TITLE 'Estoque de Placas'               ;
	MODAL   				;
        FONT 'ARIAL' SIZE 10                    

        DEFINE TAB Tab_1   ;
                   AT 02,05   ;
                   WIDTH 295  ;
                    HEIGHT 469 ;
                    VALUE 1    ;
                    TOOLTIP 'Tab Control' 

            PAGE '&Primeiro DBF'
             // Primeiro Browse
            END PAGE

            PAGE '&Segundo DBF'
             // Segundo Browse
            END PAGE


        END TAB

END WINDOW
Quando se usa o ( ON INT ) no DEFINE WINDOW so da para abrir 1 por cada janela, Tambem tentei colocar funcoes depois da linha PAGE para abrir mais de um DBF por PAGE. Ate que abre mas so se manter o ultimo dbf aberto no Browse.

Alguem entre os extimados colegas gostaria de me dizer se tem como abrir mais de um browse usando o DEFINE TAB.

Re: Define TAB

Enviado: 02 Mai 2008 12:45
por software_facil
Prezado,

É totalmente possível, basta que vc utilize nomes diferentes.
Exemplo :

Código: Selecionar todos

tab 1
define browse browse_1
.......
end browse
end tab 1

tab 2
define browse browse_2
.......
end browse
end tab 2
Caso o exemplo simbólico não tenha sido útil para resolver a sua dúvida, por favor, poste o seu código, talvez fique mais fácil exemplificar, mas a lógica é essa.

Abraços

Re: Define TAB

Enviado: 02 Mai 2008 13:51
por Oráculo
Colega Tentei usa como vc me explicou mas não consegui: Agora da erro ao compilar o sistema.

Re: Define TAB

Enviado: 02 Mai 2008 14:31
por software_facil
Prezado,

Por favor, poste aqui o seu código fonte, para que seja mais fácil ajudá-lo.
E sempre que der uma mensagem de erro, é necessário que vc escreva aqui qual é, para que possamos ajudá-lo.

Abraços

Re: Define TAB

Enviado: 05 Mai 2008 09:01
por Oráculo
Estou postando o meu codigo para que possamos analizar juntos:

Código: Selecionar todos

#include 'minigui.ch'
#include 'TABELAS.ch'
#include 'TECLAS.ch'

PROCEDURE ControleTwoPlacas

        Public Nuevo   := .F.
        Public Quant   := 1

	DEFINE WINDOW Win_1				;
		AT 0,0					;
                WIDTH 750                               ;
                HEIGHT 500                              ;
                TITLE 'Estoque de Placas'               ;
		MODAL   				;
                FONT 'ARIAL' SIZE 10                    ;
                ON INIT ( AbreTab2(), AbreTab1()  ) ;
                ON RELEASE CerrarTabelas()

                DEFINE TAB Tab_1   ;
                        AT 02,05   ;
                        WIDTH 295  ;
                        HEIGHT 469 ;
                        VALUE 1    ;
			TOOLTIP 'Tab Control' 

                        PAGE '&Situacao > 5'

                        @ 80,10 BROWSE Browse_1                             ;
                                WIDTH 270                                   ;
                                HEIGHT 360                                  ; 
                                HEADERS { 'Numero', 'Tamanho', 'Aquisicao', 'Material' } ;
                                WIDTHS { 70,120,100,120 }                   ;
                                WORKAREA Placas                             ;
                                FIELDS { 'Placas->Numero', 'Placas->Tamanho', 'Placas->DataAqui', 'Placas->Material' } ;
                                ON CHANGE AtualizarBrowse_1() ;
                                ON DBLCLICK ( AtivarBrowse_1() , If ( ! BloquearRegistro() , DesativarBrowse_1() , Nil ) )

                        @ 30,  3 BUTTON  PRIMEIRO_B1 ;
                                 PICTURE 'Primeiro2'  ;
                                 ACTION ( RegBrowse_1(), dBGoTop(), Win_1.Browse_1.Value := RecNo() )  ;
                                 WIDTH 70 HEIGHT 40 TOOLTIP '&Primeiro' 

                        @ 30, 75 BUTTON  ANTERIOR_B1 ;
                                 PICTURE 'Anterior2'  ;
                                 ACTION ( RegBrowse_1(), dBSkip ( -1 ) , Win_1.Browse_1.Value := RecNo() )  ;
                                 WIDTH 70 HEIGHT 40 TOOLTIP '&Anterior' 

                        @ 30,147 BUTTON SEGUINTE_B1 ;
                                 PICTURE 'Seguinte'  ;
                                 ACTION ( RegBrowse_1(), dBSkip (1) , if ( Eof() , DbGoBottom() , Nil ) , Win_1.Browse_1.Value := RecNo() )  ;
                                 WIDTH 70 HEIGHT 40 TOOLTIP '&Seguinte' 

                        @ 30,219 BUTTON  ULTIMO_B1 ;
                                 PICTURE 'Ultimo2'  ;
                                 ACTION ( RegBrowse_1(), dBGoBottom () , Win_1.Browse_1.Value := RecNo() ) ;
                                 WIDTH 70 HEIGHT 40 TOOLTIP '&Ultimo' 

                        @ 30,298 BUTTON  BUSCAR_B1 ;
                                 PICTURE 'Buscar2'  ;
                                 ACTION  Buscar() ;
                                 WIDTH 70 HEIGHT 40 TOOLTIP '&Buscar' 

                        @ 30,371 BUTTON  NOVO_B1 ;
                                 PICTURE 'Novo'  ;
                                 ACTION ( dBGoBottom () , Win_1.Browse_1.Value := RecNo(), Nuevo := .T. , Nuevo() ) ;
                                 WIDTH 70 HEIGHT 40 TOOLTIP '&Novo' 

                        @ 30,444 BUTTON  EDITAR_B1 ;
                                 PICTURE 'Editar2'  ;
                                 ACTION If ( BloquearRegistro() , AtivarBrowse_1() , Nil ) ;
                                 WIDTH 70 HEIGHT 40 TOOLTIP '&Editar' 

                        @ 30,517 BUTTON  ELIMINAR_B1 ;
                                 PICTURE 'Eliminar'  ;
                                 ACTION  Eliminar()  ;
                                 WIDTH 70 HEIGHT 40 TOOLTIP 'E&liminar' 

                        @ 30,663 BUTTON  VOLTAR_B1 ;
                                 PICTURE 'VOLTAR'  ;
                                 ACTION  Win_1.release ;
                                 WIDTH 70 HEIGHT 40 TOOLTIP '&Voltar' 

                        @ 80,298 FRAME FRAME_1 ;
                                 WIDTH 435     ;
                                 HEIGHT 300                       

                        @  96 , 310 LABEL LABEL_b1_1 ;
                                VALUE 'Numero:' ;
                                WIDTH 80

                        @  96 , 380 TEXTBOX Control_b1_1 ;
                                WIDTH 75 ;
                                NUMERIC ;
                                MAXLENGTH 6

                        @ 126, 310 LABEL LABEL_b1_2 ;
                                VALUE 'Quantia:' ;
                                WIDTH 80

                        @ 126, 380 SPINNER Control_b1_2 ;
                                   RANGE 1,99 ;
                                   VALUE 1 ;
                                   WIDTH 80 ;
                                   TOOLTIP 'Range 1,65000' 

                        @ 156 , 310 LABEL LABEL_b1_3  ;
                                VALUE 'Aquisicao:' ;
                                WIDTH 80

                        @ 156 , 380 DATEPICKER Control_b1_3 

                        @ 186 , 310 LABEL LABEL_b1_4 ;
                                VALUE 'Tamanho:' ;
                                WIDTH 80

                        @ 186 , 380 TEXTBOX Control_b1_4 ;
                                MAXLENGTH 15

                        @ 216, 310 LABEL LABEL_b1_5 ;
                                VALUE 'Material:' ;
                                WIDTH 80

                        @ 216, 380 TEXTBOX Control_b1_5 ;
                                MAXLENGTH 15

                        @ 216 , 510 LABEL LABEL_b1_6 ;
                                VALUE 'Fabricante:' ;
                                WIDTH 80

                        @ 216 , 590 TEXTBOX Control_b1_6 ;
                                MAXLENGTH 25

                        @ 246, 510 LABEL LABEL_b1_7 VALUE 'Tipo:' WIDTH 80

                        @ 246, 590 COMBOBOX Control_b1_7 ;
                               ITEMS { 'Locacao', 'Vendas'};
                               VALUE 1

                        @ 276, 510 LABEL LABEL_b1_8 VALUE 'Situacao:' WIDTH 80
                
                        @ 276, 590 COMBOBOX Control_b1_8 ;
                                ITEMS { 'Nova','Boa','Media','Ruim','Perda' };
                                VALUE 1

                        @ 396,350 BUTTON GRAVAR_B1 ;
                                CAPTION '&Gravar' ;
                                ACTION Acert_Ed_Browse_1()

                        @ 396,455 BUTTON CANCELAR_B1 ;
                                CAPTION 'Cancela&r' ;
                                ACTION Canc_Ed_Browse_1()

                        DesativarBrowse_1()
			END PAGE

                        PAGE '&Situacao = 5'

                        @ 80,10 BROWSE Browse_2                             ;
                                WIDTH 270                                   ;
                                HEIGHT 360                                  ; 
                                HEADERS { 'Numero', 'Aquisicao', 'Tamanho', 'Material' } ;
                                WIDTHS { 70,100,120,120 }                   ;
                                WORKAREA Placas                             ;
                                FIELDS { 'Placas->Numero', 'Placas->DataAqui', 'Placas->Tamanho', 'Placas->Material' } ;
                                ON CHANGE AtualizarBrowse_2() ;
                                ON DBLCLICK ( AtivarBrowse_2() , If ( ! BloquearRegistro() , DesativarBrowse_2() , Nil ) )

                        @ 30,  3 BUTTON  PRIMEIRO_B2 ;
                                 PICTURE 'Primeiro2'  ;
                                 ACTION ( RegBrowse_2(), dBGoTop(), Win_1.Browse_2.Value := RecNo() )  ;
                                 WIDTH 70 HEIGHT 40 TOOLTIP '&Primeiro' 

                        @ 30, 75 BUTTON  ANTERIOR_B2 ;
                                 PICTURE 'Anterior2'  ;
                                 ACTION ( RegBrowse_2(), dBSkip ( -1 ) , Win_1.Browse_2.Value := RecNo() )  ;
                                 WIDTH 70 HEIGHT 40 TOOLTIP '&Anterior' 

                        @ 30,147 BUTTON SEGUINTE_B2 ;
                                 PICTURE 'Seguinte'  ;
                                 ACTION ( RegBrowse_2(), dBSkip (1) , if ( Eof() , DbGoBottom() , Nil ) , Win_1.Browse_2.Value := RecNo() )  ;
                                 WIDTH 70 HEIGHT 40 TOOLTIP '&Seguinte' 

                        @ 30,219 BUTTON  ULTIMO_B2 ;
                                 PICTURE 'Ultimo2'  ;
                                 ACTION ( RegBrowse_2(), dBGoBottom () , Win_1.Browse_2.Value := RecNo() ) ;
                                 WIDTH 70 HEIGHT 40 TOOLTIP '&Ultimo' 

                        @ 80,298 FRAME FRAME_2 ;
                                 WIDTH 435     ;
                                 HEIGHT 300                       

                        @ 396,350 BUTTON GRAVAR_B2 ;
                                CAPTION '&Gravar' ;
                                ACTION Acert_Ed_Browse_2()

                        @ 396,455 BUTTON CANCELAR_B2 ;
                                CAPTION 'Cancela&r' ;
                                ACTION Canc_Ed_Browse_2()

                        DesativarBrowse_2()
                        END PAGE

		END TAB

	END WINDOW

	CENTER WINDOW Win_1
	ACTIVATE WINDOW Win_1

RETURN

*------------------------------------------------------------------------------*
STATIC PROCEDURE CerrarTabelas
*------------------------------------------------------------------------------*

        Close Placas

RETURN
*------------------------------------------------------------------------------*
STATIC PROCEDURE AtivarBrowse_1
*------------------------------------------------------------------------------*

        Win_1.Browse_1.Enabled          := .F.
        Win_1.Browse_2.Enabled          := .T.

        Win_1.Control_b1_1.Enabled      := .F.
        Win_1.Control_b1_2.Enabled      := IIf(Nuevo == .T.,.T.,.F.)
        Win_1.Control_b1_3.Enabled      := .T.
        Win_1.Control_b1_4.Enabled      := .T. 
        Win_1.Control_b1_5.Enabled      := .T.
        Win_1.Control_b1_6.Enabled      := .T.
        Win_1.Control_b1_7.Enabled      := .T.
        Win_1.Control_b1_8.Enabled      := .T.

        Win_1.Gravar_b1.Enabled         := .T.
        Win_1.Cancelar_b1.Enabled       := .T.

        Win_1.Control_b1_1.SetFocus

RETURN
*------------------------------------------------------------------------------*
STATIC PROCEDURE DesativarBrowse_1
*------------------------------------------------------------------------------*

        Win_1.Browse_1.Enabled          := .T.

        Win_1.Control_b1_1.Enabled      := .F.
        Win_1.Control_b1_2.Enabled      := .F. 
        Win_1.Control_b1_3.Enabled      := .F.
        Win_1.Control_b1_4.Enabled      := .F. 
        Win_1.Control_b1_5.Enabled      := .F.
        Win_1.Control_b1_6.Enabled      := .F.
        Win_1.Control_b1_7.Enabled      := .F.
        Win_1.Control_b1_8.Enabled      := .F.

        Win_1.Gravar_b1.Enabled         := .F.
        Win_1.Cancelar_b1.Enabled       := .F.

        Win_1.Browse_1.SetFocus

RETURN

*------------------------------------------------------------------------------*
STATIC PROCEDURE AtivarBrowse_2
*------------------------------------------------------------------------------*
        Win_1.Browse_2.Enabled          := .F.
        Win_1.Browse_1.Enabled          := .T.

        Win_1.Gravar_b2.Enabled         := .T.
        Win_1.Cancelar_b2.Enabled       := .T.

RETURN
*------------------------------------------------------------------------------*
STATIC PROCEDURE DesativarBrowse_2
*------------------------------------------------------------------------------*
        Win_1.Browse_2.Enabled          := .T.


        Win_1.Gravar_b2.Enabled         := .F.
        Win_1.Cancelar_b2.Enabled       := .F.

        Win_1.Browse_2.SetFocus

RETURN

*------------------------------------------------------------------------------*
STATIC PROCEDURE Canc_Ed_Browse_1()
*------------------------------------------------------------------------------*
        DesativarBrowse_1()
        AtualizarBrowse_1()

	UNLOCK

	Nuevo := .F.

RETURN

*------------------------------------------------------------------------------*
STATIC PROCEDURE Canc_Ed_Browse_2()
*------------------------------------------------------------------------------*
        DesativarBrowse_2()
        AtualizarBrowse_2()

	UNLOCK

	Nuevo := .F.
RETURN

*------------------------------------------------------------------------------*
STATIC PROCEDURE Acert_Ed_Browse_1()
*------------------------------------------------------------------------------*

        DesativarBrowse_1()

        For i:= 1 to Quant
          If Nuevo == .T.
               Placas->(DbAppend())
          EndIf

          Placas->Numero       := Win_1.Control_b1_1.Value
          Quant                := Win_1.Control_b1_2.Value

          Placas->Dataaqui     := Win_1.Control_b1_3.Value
          Placas->Tamanho      := Win_1.Control_b1_4.Value
          Placas->Material     := Win_1.Control_b1_5.Value
          Placas->Fabrican     := Win_1.Control_b1_6.Value
          Placas->Finalida     := Win_1.Control_b1_7.Value
          Placas->Situacao     := Win_1.Control_b1_8.Value

          nNumero := Win_1.Control_b1_1.Value
          nNumero += 1
          Win_1.Control_b1_1.Value := nNumero
        Next

        Win_1.Browse_1.Refresh

	If Nuevo == .T.
               Win_1.Browse_1.Value := Placas->(RecNo())
               Nuevo := .F.
        EndIf

	UNLOCK

RETURN

STATIC PROCEDURE Acert_Ed_Browse_2()

RETURN
*------------------------------------------------------------------------------*


*------------------------------------------------------------------------------*
STATIC PROCEDURE Nuevo()
*------------------------------------------------------------------------------*
        nNumero := 0
        nNumero := Placas->Numero +1

        Win_1.Control_b1_1.Value := nNumero
        Win_1.Control_b1_2.Value := 1
        Win_1.Control_b1_3.Value := Date()
        Win_1.Control_b1_4.Value := ''
        Win_1.Control_b1_5.Value := ''
        Win_1.Control_b1_6.Value := ''
        Win_1.Control_b1_7.Value := 0
        Win_1.Control_b1_8.Value := 0

        AtivarBrowse_1()

RETURN
*------------------------------------------------------------------------------*
STATIC PROCEDURE AtualizarBrowse_1()
*------------------------------------------------------------------------------*
RegBrowse_1()

        Win_1.Control_b1_1.Value   := Placas->Numero
        Win_1.Control_b1_2.Value   := Quant

        Win_1.Control_b1_3.Value   := Placas->Dataaqui
        Win_1.Control_b1_4.Value   := Placas->Tamanho
        Win_1.Control_b1_5.Value   := Placas->Material 
        Win_1.Control_b1_6.Value   := Placas->Fabrican 
        Win_1.Control_b1_7.Value   := Placas->Finalida
        Win_1.Control_b1_8.Value   := Placas->Situacao

Return
*------------------------------------------------------------------------------*
STATIC PROCEDURE AtualizarBrowse_2()
*------------------------------------------------------------------------------*
RegBrowse_2()

Return
*------------------------------------------------------------------------------*
Static Function BloquearRegistro()
*------------------------------------------------------------------------------*
Local RetVal

        If Placas->(RLock())
		RetVal := .t.
	Else
		MsgExclamation ('El Registro Esta Siendo Editado Por Otro Usuario. Reintente Mas Tarde')
		RetVal := .f.
	EndIf

Return RetVal
*------------------------------------------------------------------------------*
Static Procedure Eliminar
*------------------------------------------------------------------------------*
	If MsgYesNo ( 'Esta Seguro')
		If BloquearRegistro()
                    Placas->(dbdelete())
                    Placas->(dBSkip(-1))
                    Win_1.Browse_1.Refresh
                    Win_1.Browse_1.Value := Placas->(RecNo())
                    AtualizarBrowse_1()
		EndIf
	EndIf

Return
*------------------------------------------------------------------------------*
Static Procedure Buscar
*------------------------------------------------------------------------------*
Local Buscar

*        Buscar := Upper ( AllTrim ( InputBox( 'Coloque Numero para Buscar:' , 'Buscando' ) ) )
        Buscar := VAL( AllTrim ( InputBox( 'Coloque Numero para Buscar:' , 'Buscando' ) ) )

	If .Not. Empty(Buscar)
           If Placas->(DbSeek(Buscar))
                Win_1.Browse_1.Value := Placas->(RecNo())
           Else
                MsgExclamation('Registro NÆo Encontrado')
           EndIf
	EndIf

Return

STATIC PROCEDURE AbreTab1

     IF SELECT( "PLACAS") != 0
        Placas->( DBCLOSEAREA() )
     ENDIF

     IF SELECT( "PLACAS") = 0
        IF !AbreDBf( { pTAB_PLACAS } )    
           DBCLOSEALL(); RETURN
        ENDIF
     ENDIF

     SELECT Placas
     DBSETFILTER( { || SITUACAO < 5 }, "SITUACAO < 5 " )
     DBGOTOP()
     DBSETORDER( 1 )

     Win_1.Browse_1.Value := Placas->(RecNo())

RETURN

STATIC PROCEDURE AbreTab2
     IF SELECT( "PLACAS") != 0
        Placas->( DBCLOSEAREA() )
     ENDIF

     IF SELECT( "PLACAS") = 0
        IF !AbreDBf( { pTAB_PLACAS } )
           DBCLOSEALL(); RETURN
        ENDIF
     ENDIF

     SELECT Placas
     DBSETFILTER( { || SITUACAO = 5 }, "SITUACAO = 5 " )
     DBGOTOP()
     DBSETORDER( 1 )

     Win_1.Browse_2.Value := Placas->(RecNo())

RETURN

*------------------------------------------------------------------------------*
Static Procedure RegBrowse_1()
*------------------------------------------------------------------------------*
Local RegBrowse1

        RegBrowse1 := Placas->(RecNo())

        Select Placas
        DBSETFILTER( { || SITUACAO < 5 }, "SITUACAO < 5 " )
        DBSETORDER( 1 )

        Placas->(DbGoTo(RegBrowse1))

Return
*------------------------------------------------------------------------------*
Static Procedure RegBrowse_2()
*------------------------------------------------------------------------------*
Local RegBrowse2

        RegBrowse2 := Placas->(RecNo())

        Select Placas
        DBSETFILTER( { || SITUACAO = 5 }, "SITUACAO = 5 " )
        DBSETORDER( 1 )

        Placas->(DbGoTo(RegBrowse2))

Return
Ate o momento eu consegui abrir um DBF usando o DbSetFilter() utilizando o Define Tab o problema agora é anipular o mesmo pois quando vc sai de uma pagina para outra a segunda pagina não esta atualizada.

Obs. Se vc tiver outra ideia de como manupular dois DBFs ou o memo usando o DBSetFilter() sem ter que abrir varias janelas com o Define Window, Por favor me da uma dica.

Re: Define TAB

Enviado: 05 Mai 2008 10:23
por Oráculo
Caro Colega

Olha só que legal, após ter mandado o Codigo tive uma excelente idéia que arrumou o meu problema.

Eu apenas peguei o arquivo .Dbf e index novamente usando um outro nome, tendo agora 2 .CDX para o mesmo .Dbf com isso eu consigo agora manipular o Dbf usando o DbSetFilter().

Estou testanto e ate o momento esta uma beleza.
Obrigado pela sua atenção

Re: Define TAB

Enviado: 05 Mai 2008 12:04
por MARCELOG
Que bom que funcionou!
Só que, se está usando índices cdx, não precisa criar um novo arquivo de índice.
Bastar criar um índice (Tag) filtrando os registros a serem exibidos ou usar ordscope para filtrar pelo índice.
Se a base de dados for pequena e se mantiver assim, esqueça o que eu disse.
Boa sorte.

MarceloG