Página 1 de 1

Tentando entender porque não funciona pra inclusão

Enviado: 11 Dez 2023 19:20
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.

Tentando entender porque não funciona pra inclusão

Enviado: 11 Dez 2023 19:44
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.

Tentando entender porque não funciona pra inclusão

Enviado: 11 Dez 2023 20:04
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.

Tentando entender porque não funciona pra inclusão

Enviado: 11 Dez 2023 20:32
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...

Tentando entender porque não funciona pra inclusão

Enviado: 11 Dez 2023 20:46
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.

Tentando entender porque não funciona pra inclusão

Enviado: 11 Dez 2023 21:05
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.