Página 1 de 1

VALID não funciona

Enviado: 18 Mai 2024 15:16
por JoséQuintas
Problema:
Se chamar a rotina a partir do menu ok, a window funciona normalmente.
Se chamar a rotina a partir de um valid... a window tem o getbox e o valid dele não funciona.

Como debugar isso?

VALID não funciona

Enviado: 18 Mai 2024 17:24
por JoséQuintas
Usando GETBOX com VALID não vai de jeito nenhum.
Usando GETBOX com ON LOSTFOCUS deu certo, ainda não percebi se vai ter efeitos colaterais.

Na HMG3 isso funciona normalmente nos dois casos !!!!

VALID não funciona

Enviado: 19 Mai 2024 21:35
por ivanil
Ola;

O Valid do getbox necessariamente é obrigatório o uso de bloco; como você não postou o código, acredito que seja isso;

eu até levantei essa questão com o Grigory, pois a documentação diz valer as duas condições {função,Bloco}; mas a realidade é que só aceita bloco;

tem uns exemplos muito interessante no samples\basic\getbox;

At;

Ivanil

VALID não funciona

Enviado: 20 Mai 2024 11:22
por JoséQuintas

Código: Selecionar todos

#include "hmg.ch"
#include "i_altsyntax.ch"
#include "i_winuser.ch"

PROCEDURE Main

   LOCAL Dlg1, Text1, Text2, Label1, Label2

   SET WINDOW MAIN OFF
   SET NAVIGATION EXTENDED

   test2()
   gui_DialogCreate( @Dlg1, 0, 0, 1024, 768, "test" )
   gui_LabelCreate( Dlg1, @Label1, 20, 5, 100, 20, "field 1" )
   gui_TextCreate( Dlg1, @Text1, 20, 200, 200, 20, "entervalue", { || test2(), .T. } )
   gui_labelCreate( Dlg1, @Label2, 50, 5, 100, 20, "field 2" )
   gui_TextCreate( Dlg1, @Text2, 50, 200, 20, 20, "anothervalue" )
   ACTIVATE WINDOW (Dlg1)

   RETURN

FUNCTION Test2()

   LOCAL Dlg2, Text3, Text4, Label3, Label4

   gui_DialogCreate( @Dlg2, 0, 0, 1024, 768, "test" )
   gui_LabelCreate( Dlg2, @Label3, 20, 5, 100, 20, "field 1" )
   gui_TextCreate( Dlg2, @Text3, 20, 200, 200, 20, "entervalue", { || MsgBox( "test" ), .T. } )
   gui_labelCreate( Dlg2, @Label4, 50, 5, 100, 20, "field 2" )
   gui_TextCreate( Dlg2, @Text4, 50, 200, 20, 20, "anothervalue" )
   ACTIVATE WINDOW (Dlg2)

   RETURN Nil

FUNCTION gui_DialogCreate( xDlg, nRow, nCol, nWidth, nHeight, cTitle )

   STATIC n := 0

   n += 1
   xDlg := "DLG" + StrZero( n, 3 )
   DEFINE WINDOW ( xDlg ) ;
      AT nCol, nRow ;
      WIDTH nWidth ;
      HEIGHT nHeight ;
      TITLE cTitle ;
      MODAL
   END WINDOW

   RETURN Nil

FUNCTION gui_LabelCreate( xDlg, xControl, nRow, nCol, nWidth, nHeight, xValue )

   STATIC n := 0

   n += 1
   xControl := "lbl" + StrZero( n, 3 )
   DEFINE LABEL ( xControl )
      PARENT ( xDlg )
      COL nCol
      ROW nRow
      WIDTH nWidth
      HEIGHT nHeight
      VALUE xValue
   END LABEL

   RETURN Nil

FUNCTION gui_textCreate( xDlg, xControl, nRow, nCol, nWidth, nHeight, xValue, bValid )

   STATIC n := 0

      n += 1
      xControl := "text" + StrZero( n, 3 )
      DEFINE GETBOX ( xControl )
      PARENT ( xDlg )
      ROW nRow
      COL nCol
      HEIGHT nHeight
      WIDTH nWidth
      VALUE xValue
      IF ! Empty( bValid )
         //ON LOSTFOCUS Eval( bValid )
         VALID bValid // testing about bug?
      ENDIF
   END GETBOX

RETURN Nil
Só testar.
Chama test2, ok, valid funciona.
Chama test1 valid funciona e abre test2, mas aí o valid do test2 não funciona.
Trocando pro lostfocus tudo funciona.

O problema do valid é quando chamado de dentro de outro valid.

Pra testar com lostfocus, só descomentar lostfocus e comentar o valid, tá quase no final.

VALID não funciona

Enviado: 20 Mai 2024 13:03
por JoséQuintas
Aproveitando....

Nessas horas é só por intuição.
Procurar bug não resolve.
Mas veio na cabeça a idéia de testar com lostfocus, e aí funcionou.

E também ajudou estar rodando o mesmo fonte com libs diferentes.
Isso ajuda a eliminar possibilidades de partes dos fontes.

Seguindo o mesmo raciocínio......
em HMG3 dá erro de run-time nisso se usar compilada pra UNICODE.
Talvez o VALID mexa com codepage.

VALID não funciona

Enviado: 20 Mai 2024 13:19
por JoséQuintas
Acrescentei uma informação extra lá na minigui:

Na HMG3, quando comecei com níveis de dialog, e chamar do VALID, recebei erros de run-time, vindos da rotina de unicode.
O erro era referente EVAL não ser método, e isso só existe na rotina de unicode, xxx:Eval()
Mudei HMG3 pra ANSI, e tudo passou a funcionar.

Isso dá a impressão de que há alguma troca de codepage no getbox, que acaba afetando o que roda dentro do valid/tget usado pelo getbox.
De repente minigui utf-8 e tget do getbox ansi do harbour, sei lá o que acontece nas profundezas de baixo nível.

Na HMG 3 tem o ch pra alterar de ANSI pra unicode e vice-versa, mas na HMG Extended e na OOHG não existe isso. apesar que GETBOX é exclusivo HMG Extended. É uma possibilidade, principalmente se essa situação gerar conversão dupla de unicode ou algo assim.