Tentando entender porque não funciona pra inclusão

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

Tentando entender porque não funciona pra inclusão

Mensagem por JoséQuintas »

Código: Selecionar todos

METHOD Save() CLASS frm_Class

   LOCAL aItem

   ::EditOff()
   IF ::cSelected == "INSERT"
      APPEND BLANK
   ENDIF
   IF RLock()
      FOR EACH aItem IN ::aControlList
         DO CASE
         CASE aItem[ CFG_CTLTYPE ] != TYPE_EDIT // not editable
         CASE Empty( aItem[ CFG_FNAME ] )       // do not have name
         CASE ( aItem[ CFG_ISKEY ] .AND. ::cSelected != "INSERT" )  // table key
         OTHERWISE
            FieldPut( FieldNum( aItem[ CFG_FNAME ] ), gui_TextGetValue( ::oDlg, aItem[ CFG_FCONTROL ] ) )
         ENDCASE
      NEXT
      SKIP 0
      UNLOCK
   ENDIF
   ::cSelected := "NONE"

   RETURN Nil
Ao clicar no SAVE salva.
Está funcionando pra alteração, mas não pra inclusão.

Detalhes:
- faz o append blank, então está entrando na rotina
- na alteração salva, então a gravação está correta
- case 1: se NÃO é textbox/edit - se não é edit não há o que salvar
- case 2: se tem nome no campo ou se está vazio - não dá pra salvar um nome que não existe
- case 3: se é campo chave mas não é inclusão, ignora o campo chave no salvamento de alteração, só salva na inclusão
- otherwise: salva o campo se passar nas condições anteriores

O chato de gui é não poder usar o debug do harbour pra acompanhar passo a passo.
vou ter que colocar Msgbox() nisso.

Rlock() falhar, acho que não acontece na inclusã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

Tentando entender porque não funciona pra inclusão

Mensagem por JoséQuintas »

Achei.
O problema está aqui:

Código: Selecionar todos

FUNCTION gui_TabNavigate( xDlg, oTab, aList )

   LOCAL nTab, nPageNext

   FOR nTab = 1 TO Len( aList )
      nPageNext  := iif( nTab == Len( aList ), 1, nTab + 1 )
      gui_TabSetLostFocus( aList[ nTab, Len( aList[ nTab ] ) ], oTab, nPageNext, aList[ nPageNext, 1 ] )
   NEXT
   (xDlg)

   RETURN Nil
Esse lostfocus não pode acontecer se clicar no save.
Complicou.
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

Tentando entender porque não funciona pra inclusão

Mensagem por JoséQuintas »

Só hwgui precisa disso.
Pra não perder o recurso, e não complicar mais....
Quando for mover pra primeira tab, move pro campo 2 ao invés do 1.

Código: Selecionar todos

FUNCTION gui_TabNavigate( xDlg, oTab, aList )

   LOCAL nTab, nPageNext

   FOR nTab = 1 TO Len( aList )
      nPageNext  := iif( nTab == Len( aList ), 1, nTab + 1 )
      gui_TabSetLostFocus( aList[ nTab, Len( aList[ nTab ] ) ], oTab, nPageNext, ;
         aList[ nPageNext, iif( nPageNext == 1, 2, 1 ) ] )  //   <<<---------------
   NEXT
   (xDlg)

   RETURN Nil
Isso é pra navegação automática entre tabs no último campo de cada tab.
No último campo de uma tab vai pro primeiro campo da próxima.
E no último campo, da última tab, volta pra primeira tab.
Só não pode ser pro primeiro campo da primeira tab, porque ele é campo chave, e faz pesquisa.

O certo seria nem mudar o foco ao clicar no save, mas pra fazer esse certo precisaria de muito mais fonte.

Nota:
É só na hwgui que precisa fonte de foco, nas outras LIBs isso é automático
Se alguém souber de outro jeito pra isso, aceito sugestões.

Nota2:

Código: Selecionar todos

FUNCTION gui_IsCurrentFocus( xDlg, xControl )

      (xDlg)

      RETURN hwg_SelfFocus( xControl:Handle )
Tem isso que uso em outro lugar, onde poderia testar se o foco é no button de save ou cancel.
Mas parece que vai ser fonte demais pra pouca coisa.
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

Tentando entender porque não funciona pra inclusão

Mensagem por JoséQuintas »

Código: Selecionar todos

      IF ::lWithTab
         IF ! aItem[ CFG_ISKEY ]
            AAdd( Atail( aList ), aItem[ CFG_FCONTROL ] )
         ENDIF
      ENDIF
removi o campo chave da lista de navegação.

Código: Selecionar todos

FUNCTION gui_TabNavigate( xDlg, oTab, aList )

   LOCAL nTab, nPageNext

   FOR nTab = 1 TO Len( aList ) - 1
E também eliminei a mudança de foco do último item da última tab, vai só até len() - 1.
Mudar o foco também impede save de funcionar.

Pois é... fazer o que...
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

Tentando entender porque não funciona pra inclusão

Mensagem por JoséQuintas »

Aqui cria uma coisa muuuito interessante:

Porque não o foco do save após o último campo?
Aí o save também não funciona.

Ou melhor... depende....

Se você está no último campo e tecla ENTER, o foco vai pra SAVE.
Se você está no último campo e clica em SAVE, o foco pra SAVE invalida o clique em SAVE.

É muito doido isso.

Talvez tratar ENTER ao invés de lostfocus.... ENTER, TAB, SHIFT_TAB, etc.
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

Tentando entender porque não funciona pra inclusão

Mensagem por JoséQuintas »

Aproveitando...

Pra isso que criei o dlgauto.
É tudo que é pipino que vai dar no aplicativo, sem mexer no aplicativo.
Senão... seriam fontes e mais fontes pra resolver/alterar.
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