Criação de telas

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Criação de telas

Mensagem por JoséQuintas »

Uma coisa que falta aí:

Na edição:
Como mudar automaticamente o foco pra segunda tab quando terminar a primeira ?
Ou... como mudar automaticamente o foco pro button SAVE ?
Ou.... como mudar qualquer foco pra qualquer lugar, já que sem isso, GUI fica sem sentido, e fica pior que console ?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Criação de telas

Mensagem por Itamar M. Lins Jr. »

Ola!
INIT DIALOG oDlg CLIPPER

Esse CLIPPER ativa pular dos get's com ENTER.
O FOCO já expliquei em outro lugar deve ter esquecido

Código: Selecionar todos

oBotaoX:Handle = hwg_GetFocus() //Tem focus
oBj:SetFocus() //coloca focus

oObj := oDlg:findcontrol(,hwg_Getfocus())

cObjNome := upper(oObj:OBJNAME)

IF cObjNome == "OBRW"
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Criação de telas

Mensagem por JoséQuintas »

Se isso já tem, então com certeza não é isso.
Não me referi de um campo pra outro, e sim de tab pra outra.

Código: Selecionar todos

   INIT DIALOG ::oDlg CLIPPER NOEXIT TITLE ::cTitle ;
      AT 0, 0 SIZE ::nDlgWidth, ::nDlgHeight ;
      BACKCOLOR STYLE_BACK ;
      ON EXIT hwg_EndDialog() ;
      ON INIT { || ::EditUpdate() }
Ou simplesmente trocar de tab, e não se vê nenhum get ativo
Ou o foco no button, e não conseguir voltar de jeito nenhum nos gets
E por aí vai.

Normalmente num programa windows seria o TABSTOP, mas não encontrei isso na hwgui e nem mesmo na minigui, só mesmo wvg kkkk
tabstop.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Criação de telas

Mensagem por Itamar M. Lins Jr. »

Olá!

Código: Selecionar todos

IF oDlg:oTab:GetActivePage() = 3 //estou na tab 3
Deve ter setActivePage...

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Criação de telas

Mensagem por Itamar M. Lins Jr. »

Olá!

Código: Selecionar todos

     oTab:ChangePage(1)
     oTab:ShowPage(1)
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Criação de telas

Mensagem por JoséQuintas »

já tinha visto isso pelo fonte. A questão agora é AONDE colocar pra fazer a mudança funcionar.
Deveria ser tudo automático, mas não é.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Criação de telas

Mensagem por Itamar M. Lins Jr. »

Olá!

Código: Selecionar todos

   oEdit:bLostFocus := { || oTab:ChangePage( nPageNext ), oTab:ShowPage(nPageNext), oEditNext:SetFocus(), .T. }
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Criação de telas

Mensagem por JoséQuintas »

José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Criação de telas

Mensagem por JoséQuintas »

Estou alterando pra criação de aplicativo ao invés de somente telas avulsas.

Criei o menu básico...

Código: Selecionar todos

#include "hbgtinfo.ch"
#include "hwgui.ch"
#include "directry.ch"

FUNCTION DlgAutoMenu()

   LOCAL oDlg, aDBFList, aItem

   aDBFList := Directory( "*.dbf" )

   INIT DIALOG oDlg NOEXIT TITLE "Example" ;
     AT 200,0 SIZE 400,150

   MENU OF oDlg
      MENU TITLE "Exit"
         MENUITEM "&Exit" ACTION oDlg:Close()
      ENDMENU
      MENU TITLE "Data"
         FOR EACH aItem IN aDBFList
            MENUITEM hb_FNameName( aItem[ F_NAME ] ) ACTION DlgAutoDat( hb_FNameName( aItem[ F_NAME ] ) )
         NEXT
      ENDMENU
   ENDMENU

   ACTIVATE DIALOG oDlg CENTER

RETURN Nil
Além do menu sumir ao acionar opção, ao sair da dialog de cadastro passou a dar este erro
Error BASE/1004 No exported method: EVAL
Called from (b)EVAL(0)
Called from HWG_ENDDIALOG(573)
Called from (b)HDIALOG(73)
Called from HDIALOG:CLOSE(0)
Called from (b)DLGAUTOMAIN(22)
Called from THISDLG:EXIT(0)
Dá erro na função hwg_EndDialog()

Alguma idéia?


Comparado com antes, só acrescentei esse menu inicial.
Talvez o ponto a verificar seja: porque a dialog de menu desaparece?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Criação de telas

Mensagem por JoséQuintas »

Resolvido.

Dei uma instância de GTWVG pro cadastro, e usei multithread no menu.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Criação de telas

Mensagem por JoséQuintas »

Só pra dar uma idéia do que vém por aí........
A nova configuração, sem setup ainda.

Código: Selecionar todos

      USE ( cFile )
      aStru := dbStruct()
      FOR EACH aField IN aStru
         AAdd( aAllSetup, { cFile, aField[ DBS_NAME ], aField[ DBS_TYPE ], ;
            aField[ DBS_LEN ], aField[ DBS_DEC ], aField[ DBS_NAME ], ;
            "", "", "", "" } )
         DO CASE
         CASE ! cFile == "ACCOUNT"
         CASE aField[ DBS_NAME ] == "IDPRODUCT"
            ATail( aAllSetup )[ 7 ] := "PRODUCT"
            ATail( aAllSetup )[ 8 ] := "IDPRODUCT"
            ATail( aAllSetup )[ 9 ]  := "NAME"
         CASE aField[ DBS_NAME ] == "IDPEOPLE"
            ATail( aAllSetup )[ 7 ] := "PEOPLE"
            ATail( aAllSetup )[ 8 ] := "IDPEOPLE"
            ATail( aAllSetup )[ 9 ]  := "NAME"
         ENDCASE
      NEXT
      USE
Na tela de account, vai pesquisar o produto e trazer descrição, e pesquisar o cliente e trazer descrição.....

Em andamento, ainda estou aprendendo.
Ainda é minha primeira tela, multiplicada por milhares, mas é minha primeira tela ainda.

Pois é... mais de um ano pra fazer uma simples tela....
Por isso uso essa coisa de criar várias telas... nem é pra usar... é só pra tirar essa sensação de não ter saído da primeira tela.
Ao invés da sensação de.... não criei nem a primeira, e ainda faltam 999...
Fica a sensação de.... só falta mais um negocinho... e o aplicativo tá quase pronto...

É só por isso mesmo.

De resto:

- uma criação de dialog
- uma criação de get
- uma criação de say
- uma criação de tab
- uma criação de page
- uma criação de panel
- somar linha/coluna, e quebrar página igual qualquer relatório

É coisa que todo mundo sabe fazer, e faz o tempo todo.

Talvez o destaque seja o uso de codeblock. Se não construir direito, ele não faz o que a gente pensa.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Criação de telas

Mensagem por JoséQuintas »

Primeiro passo: reservar espaço pra mostrar descrição.

Não precisa inteligência artificial pra isso, se vai ter descrição, e essa descrição vai ficar junto com o código.... é incluir isso no cálculo de posição.
O detalhe é: dependendo do layout, o cálculo vai ser diferente
E precisa uma precaução: Vai que isso fica maior que a largura da tela, não pode ficar pulando linha infinitamente.

Código: Selecionar todos

         IF ::nEditStyle == 1 .OR. ::nEditStyle == 2
            nLen := Len( aItem[ CFG_CAPTION ] ) + aItem[ CFG_LEN ] + 3 + iif( Empty( aItem[ CFG_VTABLE ] ), 0, Len( aItem[ CFG_VVALUE ] ) + 3 )
         ELSE
            nLen := Max( aItem[ CFG_LEN ] + iif( Empty( aItem[ CFG_VTABLE ] ), 0, Len( aItem[ CFG_VVALUE ] ) + 3 ), Len( aItem[ CFG_CAPTION ] ) )
         ENDIF
         IF ::nEditStyle == 1 .OR. ( nCol != 10 .AND. nCol + 30 + ( nLen * 12 ) > ::nDlgWidth - 40 ) .OR. nRow > ::nPageLimit
espaco.png
No teste prático deu certo, espaço foi reservado, pra descrição do produto e descrição da pessoa.

Agora começa... colocar aí um LABEL e rotina de atualização.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Criação de telas

Mensagem por JoséQuintas »

Código: Selecionar todos

         IF ! Empty( aItem[ CFG_VTABLE ] )
            @ nCol2 + ( ( aItem[ CFG_LEN ] + 3 ) * 12 ), nRow2 SAY aItem[ CFG_VOBJ ] CAPTION aItem[ CFG_VVALUE ] OF ;
               iif( ::lWithTab, oTab, ::oDlg ) SIZE Len( aItem[ CFG_VVALUE ] ) * 12, 20 COLOR STYLE_FORE TRANSPARENT
         ENDIF
Pronto, agora só falta atualizar conforme navega.
Depois vejo como atualizar na digitação.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Criação de telas

Mensagem por JoséQuintas »

update.png
Funcionou ?

NÃO. Dá erro aonde a gente menos espera.

O primeiro registro funciona, os demais não.

Código: Selecionar todos

METHOD EditUpdate() CLASS DlgAutoEdit

   LOCAL aItem, nSelect

   FOR EACH aItem IN ::aControlList
      IF aItem[ CFG_CTLTYPE ] == TYPE_EDIT
         IF ! Empty( aItem[ CFG_NAME ] )
            aItem[ CFG_OBJ ]:Value := FieldGet( FieldNum( aItem[ CFG_NAME ] ) )
            aItem[ CFG_OBJ ]:Refresh()
         ENDIF
         IF ! Empty( aItem[ CFG_VTABLE ] )
            nSelect := Select()
            SELECT ( Select( aItem[ CFG_VTABLE ] ) )
            SEEK aItem[ CFG_OBJ ]:Value
            aItem[ CFG_VOBJ ]:SetText( &( aItem[ CFG_VTABLE ] )->( FieldGet( FieldNum( aItem[ CFG_VSHOW ] ) ) ) )
            aItem[ CFG_VOBJ ]:Refresh()
            SELECT ( nSelect )
         ENDIF
      ENDIF
   NEXT

   RETURN Nil
Pega o valor do HEDIT, pesquisa, pega a descrição, coloca no HSTATIC.
Está certo.... o primeiro fez certo.
Está errado ? os demais não atualizou.

preenchi people com P1, e produto com U1, pra diferenciar o conteúdo.
TODAS as tabelas tem códigos 1 a 9

Sei lá....
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Criação de telas

Mensagem por JoséQuintas »

Código: Selecionar todos

FUNCTION DlgAutoDBF()

   LOCAL nCont

   IF ! File( "people.dbf" )
      dbCreate( "people", { ;
         { "IDPEOPLE", "N", 6, 0 }, ;
         { "NAME",     "C", 30, 0 } } )
      USE people
      FOR nCont = 1 TO 9
         APPEND BLANK
         REPLACE IDPEOPLE WITH 1, NAME WITH Replicate( "P" + Str( nCont, 1 ), 10 )
      NEXT
      INDEX ON field->idPeople TAG primary
      INDEX ON field->Name     TAG name
      USE
   ENDIF
   IF ! File( "product.dbf" )
      dbCreate( "product", { ;
         { "IDPRODUCT", "N", 6, 0 }, ;
         { "NAME", "C", 30, 0 } } )
      USE product
      FOR nCont = 1 TO 9
         APPEND BLANK
         REPLACE IDPRODUCT WITH 1, NAME WITH Replicate( "U" + Str( nCont, 1 ), 10 )
      NEXT
      INDEX ON field->idProduct TAG primary
      INDEX ON field->Name      TAG name
      USE
   ENDIF
   IF ! File( "account.dbf" )
      dbCreate( "account", { ;
         { "IDACCOUNT", "N", 6, 0 }, ;
         { "IDPEOPLE",  "N", 6, 0 }, ;
         { "IDPRODUCT", "N", 6, 0 }, ;
         { "VALUE",     "N", 14, 2 } } )
      USE account
      FOR nCont = 1 TO 9
         APPEND BLANK
         REPLACE IDACCOUNT WITH nCont, IDPEOPLE WITH nCont, IDPRODUCT WITH nCont, VALUE WITH nCont * 1000
      NEXT
      INDEX ON field->IdAccount TAG primary
      USE
   ENDIF

   RETURN Nil
Lógico, se a gente grava tudo com número 1, não vai achar nunca kkkkk
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder