Erro Componente de controle TAB

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

Erro Componente de controle TAB

Mensagem por NiltonGM »

Prezados,

Ao incluir um componente TAB dentro de uma página da TAB principal da erro e o HMG é abortado. O componente está com erro ou não foi implementado esse recurso? Uso uma TAB com 9 Páginas e na primeira página gostaria de usar uma sub-tab com 3 ou 4 páginas, ao incluir a sub-tab da erro conforme imagem anexa.

Abraços.
Anexos
Tab dentro de tab.png
Nilton Medeiros
nilton@sistrom.com.br
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Erro Componente de controle TAB

Mensagem por Pablo César »

Oi Nilton,

Realmente está dando erro ao tentar inserir uma nova TAB dentro de uma página de TAB já existente pela IDE. O ruim que este erro deveria ser previsto.

Mesmo fazendo manualmente, não aceita aninhamentos:
Screen2.png
Screen2.png (9.03 KiB) Exibido 2292 vezes
Estou relatando este erro no fórum oficial da HMG e retorno assim que tiver algo definido.

Obrigado Nilton por relatar !
:)
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

Erro Componente de controle TAB

Mensagem por NiltonGM »

Oi Pablo,

Nada ainda? Os desenvolvedores do Harbour devem estar um tanto ocupados e talvez demore, o que vc acha? Estou com o projeto parado, acho que a solução temporária é encher de "Abas" o Tab principal até aparecer um release.

Qualquer novidade envia pra gente. Um forte abraço.
Nilton Medeiros
nilton@sistrom.com.br
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Erro Componente de controle TAB

Mensagem por Pablo César »

NiltonGM escreveu:Nada ainda? Os desenvolvedores do Harbour devem estar um tanto ocupados e talvez demore
Nada ainda.
Não seria exatamente desenvolvedores do Harbour. Tem mais a ver com HMG e/ou Minigui Extended do que outra coisa.

Por falar disso, você verificou se em Minigui Extended também acontece isto ? (acho que sim, né ?)

Tem uma limitação e eu não sei o por quê. Quem pode fazer algo é o Dr. Claudio Soto.

Mas eu aviso quando surgir um upgrade ou um patch caso consertarem.
NiltonGM escreveu:Estou com o projeto parado, acho que a solução temporária é encher de "Abas" o Tab principal até aparecer um release.
Você poderia intentar fazer o outro TAB em outro FORM (abrindo nova janela), não é algo muito estético mas estaria meio caminho andado quando solucionar essa limitação.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

Erro Componente de controle TAB

Mensagem por NiltonGM »

Oi Pablo,
Por falar disso, você verificou se em Minigui Extended também acontece isto ? (acho que sim, né ?)
Eu não conheço a Minigui Extended, nunca baixei ela, minha primeira ferramenta foi a HMG que me aconselharam ser melhorzinha.
Você poderia intentar fazer o outro TAB em outro FORM (abrindo nova janela), não é algo muito estético mas estaria meio caminho andado quando solucionar essa limitação.
Cheguei a pensar nisso, para cada grupo de Sub-Tab teria que criar um formulário de TAB. Eu perco muito tempo para fazer um formulário porque acho que sou detalhista e fico reparando a estética, aí prefiro nem começar, mas se não tem jeito... fazer o quê. rs
Fico no aguardo.

Um Bom domingo.
Nilton Medeiros
nilton@sistrom.com.br
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Erro Componente de controle TAB

Mensagem por Pablo César »

Oi Nilton,

Acabei de fazer um teste no Minigui Extended e também dá a mesma mensagem: (não pode ser aninhado outro TAB dentro de outro TAB).

Você ja tentou utilizar o TAB em Multine = .T. ?
tela2.PNG
tela2.PNG (5.74 KiB) Exibido 2238 vezes
Ou no modo vertical não resolveria ?
tela1.PNG
tela1.PNG (7.04 KiB) Exibido 2238 vezes
NiltonGM escreveu: Eu perco muito tempo para fazer um formulário porque acho que sou detalhista e fico reparando a estética, aí prefiro nem começar
Somos dois amigo. Mas já que as vezes pensamos que fazer um form dá trabalhinho... por quê não tenta utilizar a função InputWindow() ?
Você passa os labels e os campos a serem editados por meio de vetores e você obtém o form pronto.
Dê uma olhada em:
Imagem

http://www.hmgforum.com/viewtopic.php?p=39057#p39057

O controle do TAB é considerado um recipiente, não tenho certeza se o conceito de conter um recipiente dentro de outro seria uma boa ideia.

Outra coisa que você poderia tentar, desconhecendo a finalidade de outro TAB dentro de TAB. Veja este exemplo agenda:
Tela03.png

Código: Selecionar todos

/*
 * Agenda de Contatos (2)
 * Humberto Fornazier - Março/2003
 * hfornazier@brfree.com.br
 * 
 * HMG - Harbour Win32 GUI library - Release 60
 * Copyright 2002 Roberto Lopez <mail.box.hmg@gmail.com>
 * http://www.hmgforum.com//
*/ 

#Include "hmg.ch"

#define BLUE { 0, 0, 128 }

Function Main()         
Local i := 0

SET DELETED ON
SET CENTURY ON

Private lNovo := .F.

AgendaOpen()    

DEFINE WINDOW Form_1   ;
    AT 0,0                ;
    WIDTH 480   ;  
    HEIGHT 470  ;
    TITLE "Agenda de Contatos";     
    MAIN                  ;      
    ICON "AGENDA"   ;
    NOMAXIMIZE  ;
    NOSIZE      ;       
    ON RELEASE Finaliza_Sistema() ;
    BACKCOLOR BLUE
    
    @ 010,415 Grid GIndice Of Form_1 WIDTH 48 HEIGHT 360 HEADERS {""} WIDTHS { 28 } ;                                            
              FONT "Arial" SIZE 09 BOLD ;
              TOOLTIP "Click na Letra Desejada"  ;                                                                      
              ON CLICK Pesquisa_Agenda() 

    @ 010,010 GRID Grid_Agenda      ;
              WIDTH  398            ;
              HEIGHT 360            ;
              HEADERS {"Código","Nome"}    ;
              WIDTHS  {53,338}      ;
              FONT "Arial" SIZE 09  ;
              ON DBLCLICK Novo_Registro(.F.)

    @ 385,010 BUTTON Btn_Novo Of Form_1 ;
              CAPTION '&Novo'       ;
              ACTION Novo_Registro(.T.)     ;       
              WIDTH 120 HEIGHT 27       ;
              FONT "Arial" SIZE 09      ;
              TOOLTIP "Novo Registro"       ;
              FLAT 

    @ 385,165 BUTTON Btn_Imprimir Of Form_1 ;
              CAPTION '&Imprimir'       ;
              ACTION Imprimir()     ;       
              WIDTH 120 HEIGHT 27       ;
              FONT "Arial" SIZE 09      ;
              TOOLTIP "Imprime Contatos"    ;
              FLAT 
           
    @ 385,318 BUTTON Btn_Sair Of Form_1  ;
              CAPTION '&Sair'       ;
              ACTION Form_1.Release       ;       
              WIDTH 120 HEIGHT 27     ;
              FONT "Arial" SIZE 09      ;
              TOOLTIP "Finalizar Sistema"   ;
              FLAT

    @ 418,16 ANIMATEBOX mensagem ;
             WIDTH 390      ;
             HEIGHT 20      ;
             FILE 'MSG02' AUTOPLAY

END WINDOW
For i := 1 To 26
    ADD ITEM { CHR(i+64) } TO GIndice OF Form_1   
Next
MODIFY CONTROL GIndice OF Form_1 VALUE 1

Pesquisa_Agenda()

CENTER WINDOW   Form_1
ACTIVATE WINDOW Form_1
Return

Function Pesquisa_Agenda()  
cPesq := ValorDaColuna( "GIndice" ,  "Form_1" , 1 )

cPesq := IIf( Empty(cPesq), "A" , cPesq )   

Agenda->(DBSetOrder(2))
Agenda->(DBSeek(cPesq,.T.))
DELETE ITEM ALL FROM Grid_Agenda OF Form_1
Do While ! Agenda->(Eof())
   If Substr(Agenda->Nome,1,1) == cPesq       
      ADD ITEM {Agenda->Codigo,Agenda->Nome} TO Grid_Agenda OF Form_1
   Else
      EXIT
   Endif
   Agenda->(DBSkip())
EndDo
Return Nil

Function Novo_Registro( lNovo_Registro  )
Local cCodigo   := ""
Local cNome := ""
Local cEndereco := ""
Local cBairro   := ""
Local cCep  := ""
Local cCidade   := ""
Local cEstado   := ""
Local cFone1    := ""
Local cFone2    := ""
Local cEmail    := ""

Form_1.Btn_Novo.Enabled := .F.  
Form_1.Btn_Sair.Enabled := .F.      

lNovo := lNovo_Registro

If ! lNovo     
   cCodigo := ValorDaColuna( "Grid_Agenda" ,  "Form_1" , 1 )
   Agenda->(DBSetOrder(1))
   If ! Agenda->(DBSeek( cCodigo  ))
      MsgSTOP("Registro "+cCodigo+" não localizado!!","Agenda")
      Release Window ALL
   EndIf
   cNome        := AllTrim( Agenda->Nome)
   cEndereco    := AllTrim( Agenda->Endereco)
             cBairro        := AllTrim( Agenda->Bairro)
   cCep     := AllTrim( Agenda->Cep)
   cCidade  := AllTrim( Agenda->Cidade)
   cEstado  := AllTrim( Agenda->Estado)
   cFone1       := AllTrim( Agenda->Fone1)
   cFone2       := AllTrim( Agenda->Fone2)
   cEmail       := AllTrim( Agenda->EMail)  
EndIf   

DEFINE WINDOW Form_2   ;
    AT 0,0               ;
    WIDTH 490  ;  
    HEIGHT 300 ;
    TITLE "Agenda de Contatos - "+Iif( lNovo , "Novo Registro" , "Alterando Registro");    
    ICON "AGENDA"  ;
    MODAL      ;                                          
    NOSIZE     ;      
    ON RELEASE  {|| Form_1.Btn_Novo.Enabled := .T. , Form_1.Btn_Sair.Enabled := .T. , Form_2.Btn_Excluir.Enabled := .T. , Agenda->(DBSetOrder(2)) , Pesquisa_Agenda() , Form_1.Grid_Agenda.SetFocus() } ;                  
    BACKCOLOR WHITE

    @ 10,10 LABEL Label_Codigo ;
        VALUE 'Código'     ;
        WIDTH 140       ;
        HEIGHT 30       ;
        FONT 'Arial' SIZE 09      ;
        BACKCOLOR WHITE   ;
        FONTCOLOR BLUE BOLD

    @ 40,10 LABEL Label_Nome   ;
        VALUE 'Nome'        ;
        WIDTH 140       ;
        HEIGHT 30       ;
        FONT 'Arial' SIZE 09      ;
        BACKCOLOR WHITE   ;
        FONTCOLOR BLUE BOLD

    @ 70,10 LABEL Label_Endereco   ;
        VALUE 'Endereço'       ;
        WIDTH 140       ;
        HEIGHT 30       ;
        FONT 'Arial' SIZE 09      ;
        BACKCOLOR WHITE   ;
        FONTCOLOR BLUE BOLD

    @ 100,10 LABEL Label_Bairro ;
        VALUE 'Bairro'      ;
        WIDTH 140       ;
        HEIGHT 30       ;
        FONT 'Arial' SIZE 09      ;
        BACKCOLOR WHITE   ;
        FONTCOLOR BLUE BOLD

    @ 100,360 LABEL Label_Cep       ;
        VALUE 'Cep'     ;
        WIDTH 80            ;
        HEIGHT 30       ;
        FONT 'Arial' SIZE 09      ;
        BACKCOLOR WHITE   ;
        FONTCOLOR BLUE BOLD

    @ 130,10 LABEL Label_Cidade ;
        VALUE 'Cidade'      ;
        WIDTH 140       ;
        HEIGHT 30       ;
        FONT 'Arial' SIZE 09      ;
        BACKCOLOR WHITE   ;
        FONTCOLOR BLUE BOLD

    @ 130,345 LABEL Label_Estado    ;
        VALUE 'Estado'      ;
        WIDTH 80            ;
        HEIGHT 30       ;
        FONT 'Arial' SIZE 09      ;
        BACKCOLOR WHITE   ;
        FONTCOLOR BLUE BOLD

    @ 160,10 LABEL Label_Fone1  ;
        VALUE 'Fone 1'      ;
        WIDTH 80            ;
        HEIGHT 30       ;
        FONT 'Arial' SIZE 09      ;
        BACKCOLOR WHITE   ;
        FONTCOLOR BLUE BOLD

    @ 160,346 LABEL Label_Fone2 ;
        VALUE 'Fone 2'      ;
        WIDTH 80            ;
        HEIGHT 30       ;
        FONT 'Arial' SIZE 09      ;
        BACKCOLOR WHITE   ;
        FONTCOLOR BLUE BOLD

    @ 190,10 LABEL Label_Email  ;
        VALUE 'e-mail'      ;
        WIDTH 140       ;
        HEIGHT 30       ;
        FONT 'Arial' SIZE 09      ;
        BACKCOLOR WHITE   ;
        FONTCOLOR BLUE BOLD

    @ 13,70 TEXTBOX T_Codigo       ;
        WIDTH 40           ;
        VALUE cCodigo      ;
        TOOLTIP 'Código do Contato' 

    @ 43,70 TEXTBOX T_Nome      ;   
        OF Form_2     ;
        WIDTH 400     ;
        VALUE cNome       ;
        TOOLTIP 'Nome do Contato' ;
        MAXLENGTH 40      ;
        UPPERCASE     ;
        ON ENTER Iif( ! Empty( Form_2.T_Nome.Value ) , Form_2.T_Endereco.SetFocus , Form_2.T_Nome.SetFocus )

    @ 73,70 TEXTBOX T_Endereco   ;
        OF Form_2      ;
        WIDTH 400        ;
        VALUE cEndereco      ;
        TOOLTIP 'Endereço do Contato';
        MAXLENGTH 40     ;
        UPPERCASE        ;
        ON GOTFOCUS Form_2.Btn_Salvar.Enabled := .T.  ;
        ON ENTER Form_2.T_Bairro.SetFocus 

    @ 103,70 TEXTBOX T_Bairro     ;   
        OF Form_2      ; 
        WIDTH 250     ;
        VALUE cBairro     ;
        TOOLTIP 'Bairro do Contato'   ;
        MAXLENGTH 25      ;
        UPPERCASE     ;
        ON ENTER Form_2.T_Cep.SetFocus          

    @ 103,390 TEXTBOX T_Cep       ;
        OF Form_2     ;   
        WIDTH 80      ;
        VALUE cCep        ;
        TOOLTIP 'Cep do Contato'  ;
        MAXLENGTH 08      ;
        UPPERCASE     ;   
        ON ENTER Form_2.T_Cidade.SetFocus 

    @ 133,70 TEXTBOX T_Cidade     ;
        OF Form_2     ;
        WIDTH 250     ;
        VALUE cCidade     ;
        TOOLTIP 'Bairro do Contato'   ;
        MAXLENGTH 25      ;
        UPPERCASE     ;
        ON ENTER Form_2.T_Estado.SetFocus           

    @ 133,390 TEXTBOX T_Estado    ;
        OF Form_2     ;
        WIDTH 30      ;
        VALUE cEstado     ;
        TOOLTIP 'Estado do Contato';
        MAXLENGTH 02      ;
        UPPERCASE     ;
        ON ENTER Form_2.T_Fone1.SetFocus

    @ 163,70 TEXTBOX T_Fone1      ;
        OF Form_2       ;
        WIDTH 110     ;
        VALUE cFone1      ;
        TOOLTIP 'Telefone do Contato';
        MAXLENGTH 10      ;
        UPPERCASE     ;   
        ON ENTER Form_2.T_Fone2.SetFocus

    @ 163,390 TEXTBOX T_Fone2 ;
        OF Form_2     ;
        WIDTH 80      ;
        VALUE cFone2      ;
        TOOLTIP 'Telefone do Contato';
        MAXLENGTH 10      ;
        UPPERCASE     ;   
        ON ENTER Form_2.T_Email.SetFocus

    @ 193,70 TEXTBOX T_Email      ;
        OF Form_2       ;
        WIDTH 400     ;
        VALUE cEmail      ;
        TOOLTIP 'E-mail do Contato'   ;
        MAXLENGTH 40      ;
        LOWERCASE     ;
        ON ENTER Form_2.Btn_Salvar.SetFocus

    @ 232,70 BUTTON Btn_Salvar Of Form_2   ;
        CAPTION '&Salvar'     ;
        ACTION Salvar_Registro()        ;       
        WIDTH 120 HEIGHT 27     ;
        FONT "Arial" SIZE 09      ;
        TOOLTIP "Salvar Registro" ;
        FLAT       

    @ 232,210  BUTTON Btn_Excluir Of Form_2   ;
        CAPTION '&Deletar'        ;
        ACTION Excluir_Registro()   ;       
        WIDTH 120 HEIGHT 27     ;
        FONT "Arial" SIZE 09      ;
        TOOLTIP "Excluir Registro"    ;
        FLAT

    @ 232,346  BUTTON Btn_Cancelar Of Form_2  ;
        CAPTION '&Cancelar'       ;
        ACTION Sair_do_Form2()      ;       
        WIDTH 120 HEIGHT 27     ;
        FONT "Arial" SIZE 09      ;
        TOOLTIP "Cancelar Operação" ;
        FLAT

END WINDOW
Form_2.T_Codigo.Enabled := .F.

If lNovo
   Form_2.Btn_Salvar.Enabled := .F. 
   Form_2.Btn_Excluir.Enabled := .F.    
EndIf

CENTER WINDOW   Form_2
ACTIVATE WINDOW Form_2
Return Nil

Function Salvar_Registro()
Local ProximoCodigo := ""
Local cCodigo       := ""

If Empty( Form_2.T_Nome.Value )
   MsgINFO( "Nome não foi Informado!!" , "Agenda" )
   Form_2.T_Nome.SetFocus
   Return Nil
EndIf       

If lNovo      
   Agenda->(DBSetOrder(1))
   Agenda->(DBGoBottom())
   ProximoCodigo := StrZero(  Val( Agenda->Codigo ) + 1 , 4 )
   Agenda->(DBAppend())
   Agenda->Codigo := ProximoCodigo    
   Agenda->Nome := Form_2.T_Nome.Value  
   Agenda->Endereco := Form_2.T_Endereco.Value
             Agenda->Bairro := Form_2.T_Bairro.Value
   Agenda->Cep  := Form_2.T_Cep.Value   
   Agenda->Cidade   := Form_2.T_Cidade.Value    
   Agenda->Estado   := Form_2.T_Estado.Value    
   Agenda->Fone1    := Form_2.T_Fone1.Value 
   Agenda->Fone2    := Form_2.T_Fone2.Value 
   Agenda->EMail    := Form_2.T_Email   .Value
Else
   cCodigo := Form_2.T_Codigo.Value
   Agenda->(DBSetOrder(1))
   If ! Agenda->(DBSeek( cCodigo  ))
      MsgSTOP("Registro "+cCodigo+" não localizado!!","Agenda")
      Release Window ALL
   EndIf
   If BloqueiaRegistroNaRede( "Agenda" )
      Agenda->Nome  := Form_2.T_Nome.Value
      Agenda->Endereco    := Form_2.T_Endereco.Value
      Agenda->Bairro  := Form_2.T_Bairro.Value
      Agenda->Cep       := Form_2.T_Cep.Value   
      Agenda->Cidade    := Form_2.T_Cidade.Value    
      Agenda->Estado    := Form_2.T_Estado.Value    
      Agenda->Fone1 := Form_2.T_Fone1.Value 
      Agenda->Fone2 := Form_2.T_Fone2.Value 
      Agenda->EMail := Form_2.T_Email.Value 
      Agenda->(DBUnlock())
   EndIf    
EndIf 
MsgInfo( "Registo "+Iif( lNovo , "Incluído" ,"Alterado!!" )  )
PosicionaIndice( Left( Agenda->Nome , 1 ) )
Pesquisa_Agenda()
Form_2.Release 
Return Nil

Function Sair_do_Form2()
Form_1.Btn_Novo.Enabled := .T.  
Form_1.Btn_Sair.Enabled := .T.
Form_2.Btn_Excluir.Enabled := .T.       
Form_2.Release    
Agenda->(DBSetOrder(2))
Pesquisa_Agenda()
Form_1.Grid_Agenda.SetFocus()
Return Nil

Function Excluir_Registro()                     
If MsgOkCancel ("Confirma Exclusão do Registro??", "Excluir "+AllTrim(Agenda->Nome))
   If BloqueiaRegistroNaRede( "Agenda" )
      Agenda->(DBDelete())
      Agenda->(DBUnlock())
      MsgINFO("Registro Excluído!!","Agenda")    
      Sair_do_Form2()
   EndIf
EndIf
Form_1.Grid_Agenda.SetFocus
Return Nil

Function Finaliza_Sistema() 
Agenda->(DBCloseArea())
Return Nil
    
Function AgendaOpen()
Local nArea    := Select( 'Agenda' )
Local aarq := {}       
Local aDados   := {} 

If nArea == 0
   If ! FILE( "AGENDA.DBF" )
      Aadd( aArq , { 'CODIGO'  , 'C'   , 04    , 0 } )
      Aadd( aArq , { 'NOME '       , 'C'   , 40    , 0 } )
      Aadd( aArq , { 'ENDERECO'    , 'C'   , 40    , 0 } )
      Aadd( aArq , { 'BAIRRO'      , 'C'   , 25    , 0 } )
      Aadd( aArq , { 'CEP'         , 'C'   , 08    , 0 } )
      Aadd( aArq , { 'CIDADE'      , 'C'   , 25    , 0 } )
      Aadd( aArq , { 'ESTADO'  , 'C'   , 02    , 0 } ) 
      Aadd( aArq , { 'FONE1'       , 'C'   , 10    , 0 } )
      Aadd( aArq , { 'FONE2'       , 'C'   , 10    , 0 } ) 
      Aadd( aArq , { 'EMAIL'       , 'C'   , 40    , 0 } )
      DBCreate( "AGENDA.DBF" , aArq  )      
   EndIf
   Use AGENDA Alias Agenda new shared
   If ! File( 'Agenda1.ntx' )
      Index on Codigo to Agenda1
   Endif
   If ! File( 'Agenda2.ntx' )
      Index on Nome  to Agenda2
   Endif
   Agenda->(DBCLearIndex())
   Agenda->(DBSetIndex( 'Agenda1'))
   Agenda->(DBSetIndex( 'Agenda2'))
Endif  
Return Nil

Function ValorDaColuna( ControlName, ParentForm , nCol )
Local aRet := {}
If GetControlType (ControlName,ParentForm) != "GRID"
   MsgBox( "Objeto não é um Grid!!") 
   Return( aRet )
EndIf   
nCol := Iif( nCol == Nil .Or. nCol == 0 , 1 , nCol )
aRet := GetProperty (  ParentForm  , ControlName , 'Item' , GetProperty( ParentForm , ControlName , 'Value' ) )
Return( aRet[ nCol ] )  

Function BloqueiaRegistroNaRede( cArea )
Do While ! (cArea)->(RLock())
   If ! MSGRetryCancel("Registro em Uso na Rede Tenta Acesso??","Agenda")
      Return .F.
   EndIf
EndDo
Return .T.

Function PosicionaIndice(cLetra)
Local i := 0

For i := 1 To 26
    If CHR(i+64) == cLetra
       MODIFY CONTROL GIndice OF Form_1 VALUE i
    EndIf
Next
Form_1.GIndice.SetFocus
Return Nil

Function Imprimir()
Local nLinha := 0
Local i :=  0
Local cLetra := ""
Local nReg   := 0

Private nFont := 11
Private cArquivo := "" 

Set Printer TO REL.TMP
Set Printer ON
Set Console OFF

cLetra := ValorDaColuna( "GIndice" ,  "Form_1" , 1 )

Agenda->(DBSetOrder(2))
Agenda->(DBSeek(cLetra,.T.))    
Do While ! Agenda->(Eof())
   If Substr(Agenda->Nome,1,1) == cLetra
      If nLinha == 0
         ? PadC("     Agenda de Contatos",78)
         ? PadC("Contatos Cadastrados com letra "+cLetra,78)
         ? "Código  Nome"           
         ? Replicate("-",78)
      EndIf
      nLinha += 1
      nReg += 1
      ?   "  "+Agenda->Codigo +   "   "
      ?? Agenda->Nome                              
   Else
      EXIT
   Endif
   Agenda->(DBSkip())
EndDo
? Replicate("-",78)
? "Registros Impressos: "+StrZero(nReg,4)

Set Printer TO 
Set Printer OFF
Set Console ON

cArquivo :=memoRead("REL.TMP")

DEFINE WINDOW Form_3;
    At 0,0              ;
    Width 450        ;
    Height 500       ;
    Title "Contatos Cadastrados com Letra "+cLetra;
    ICON "AGENDA";
    CHILD ;
    NOSYSMENU;
    NOSIZE       ;       
    BACKCOLOR WHITE

    @ 20,-1 EDITBOX Edit_1 ;
        WIDTH 460 ;
        HEIGHT 510 ;
        VALUE cArquivo ;
        TOOLTIP "Contatos Cadastrados com Letra "+cLetra ;
        MAXLENGTH 255                

    @ 01,01 BUTTON Bt_Zoom_Mais  ;
        CAPTION '&Zoom(+)'             ;
        WIDTH 120 HEIGHT 17    ;
        ACTION ZoomLabel(1);
        FONT "MS Sans Serif" SIZE 09 FLAT 

    @ 01,125 BUTTON Bt_Zoom_menos  ;
        CAPTION '&Zoom(-)'             ;
        WIDTH 120 HEIGHT 17    ;
        ACTION ZoomLabel(2);
        FONT "MS Sans Serif" SIZE 09 FLAT

    @ 01,321 BUTTON Sair_1  ;
        CAPTION '&Sair'             ;
        WIDTH 120 HEIGHT 17    ;
        ACTION Form_3.Release;
        FONT "MS Sans Serif" SIZE 09 FLAT

END WINDOW
MODIFY CONTROL Edit_1 OF Form_3 FONTSIZE nFont  
Center Window Form_3
Activate Window Form_3
Return Nil

Function ZoomLabel(nmm)         
If nmm == 1 
   nFont++
Else
   nFont--
Endif
MODIFY CONTROL Edit_1 OF Form_3 FONTSIZE nFont
Return Nil
Talvez poderia utilizar como indice um Grid como neste exemplo.
Sds
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

Erro Componente de controle TAB

Mensagem por NiltonGM »

Oi Plablo,

Além da quantidade de abas que preciso tenho a necessidade de agrupar-las, as outras opções são interessante, vou analisar.
Componentes de controle de TAB's em outras linguagens permite sem problema. Veja o aninhamento de abas dentro de abas em Java.
sub-abas.png
Abraços
Nilton Medeiros
nilton@sistrom.com.br
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Erro Componente de controle TAB

Mensagem por Claudio Soto »

El no poder anidar los controles TAB no es un problema de lenguaje es un problema del funcionamiento de la estructura interna de HMG.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

Erro Componente de controle TAB

Mensagem por NiltonGM »

"Estoy perdido en el jardín o la granja!" kkkk
Nilton Medeiros
nilton@sistrom.com.br
Responder