Página 2 de 3

hwgui 2.17

Enviado: 19 Fev 2024 00:54
por alxsts
alxsts escreveu:No xHarbour, este tipo de codeblock é delimitado por colchetes []
Opa... não tenho o xhbdiff.txt em mãos agora mas me lembrei que não são colchetes e sim <> (maior e menor).

hwgui 2.17

Enviado: 19 Fev 2024 08:57
por sygecom
alxsts escreveu:Olá!
sygecom escreveu:falta do ON GETFOCUS em alguns componentes,
Não consegue capturar o evento com aquele método ON OTHER MESSAGES (não me lembro se o nome é exatamente este mas é algo assim).
sygecom escreveu:no xharbour ele diz que falta um }
Este código é chamado de codeblock extendido. Veja a quantidade de código que existe entre as chaves {}, tendo inclusive declaração de variáveis LOCAL. Este é o padrão Harbour. No xHarbour, este tipo de codeblock é delimitado por colchetes [], conforme escrito naquele arquivo xhbdiff.txt. É só trocar as chaves pelos colchetes.
Mestre Alexnadre,
Obrigado pela dica eu resolvido esse caso usando no lugar do ON GETFOCUS a clasula WHEN, na verdade esse caso o Kresin tirou com razão estava duplicado, ambas fazem a mesma coisa no GET.
alxsts escreveu:
alxsts escreveu:No xHarbour, este tipo de codeblock é delimitado por colchetes []
Opa... não tenho o xhbdiff.txt em mãos agora mas me lembrei que não são colchetes e sim <> (maior e menor).
Obrigado pela dica, nem lembrava mais do xhb-diff.txt, isso que usei ele a poucos dias quando estava ainda na etapa do apenas HARBOUR sem hwgui kkkkk mas vou consultar certamente deve ter mais outras coisas como essa.Obrigado.

hwgui 2.17

Enviado: 19 Fev 2024 12:00
por JoséQuintas
SE O XHARBOUR ACEITAR, pode fazer algo deste tipo:

antes:

Código: Selecionar todos

@ 0,0 PANEL oPanel OF oTelaPrincipal SIZE 0,37

vPosicao=0
@ vPosicao,2 OWNERBUTTON OF oPanel;
   ON CLICK {|| Pesquisa_Associado() } ;
   SIZE 36,36 ;
   FLAT;
   BITMAP oBmpLogo9 FROM RESOURCE TRANSPARENT;
   TOOLTIP "Cadastro de Associado"

vPosicao=vPosicao+39
@ vPosicao,2 OWNERBUTTON OF oPanel;
   ON CLICK {|| FRMcad_mensal("C") } ;
   SIZE 36,36 ;
   FLAT;
   BITMAP oBmpLogo12 FROM RESOURCE TRANSPARENT;
   TOOLTIP "Cadastro de Mensalidade"

vPosicao=vPosicao+39
@ vPosicao,2 OWNERBUTTON OF oPanel;
   ON CLICK {|| ShellExecute("calc") } ;
   SIZE 36,36 ;
   FLAT;
   BITMAP oBmpLogo3 FROM RESOURCE TRANSPARENT;
   TOOLTIP "Calculadora"

vPosicao=vPosicao+39
@ vPosicao,2 OWNERBUTTON OF oPanel;
   ON CLICK {|| indexa() } ;
   SIZE 36,36 ;
   FLAT;
   BITMAP oBmpLogo7 FROM RESOURCE TRANSPARENT;
   TOOLTIP "Reindexa o Banco de Dados"

vPosicao=vPosicao+39
@ vPosicao,2 OWNERBUTTON OF oPanel;
   ON CLICK {|| Back_up() } ;
   SIZE 36,36 ;
   FLAT;
   BITMAP oBmpLogo2 FROM RESOURCE TRANSPARENT;
   TOOLTIP "Realizar Back-Up do Banco de Dados"

vPosicao=vPosicao+39
@ vPosicao,2 OWNERBUTTON OF oPanel;
   ON CLICK {|| Sendemail("suporte@xxx",1) } ;
   SIZE 36,36 ;
   FLAT;
   BITMAP oBmpLogo8 FROM RESOURCE TRANSPARENT;
   TOOLTIP "Suporte On-Line"

vPosicao=vPosicao+39
@ vPosicao,2 OWNERBUTTON OF oPanel;
   ON CLICK {|| sobre() } ;
   SIZE 36,36 ;
   FLAT;
   BITMAP oBmpLogo5 FROM RESOURCE TRANSPARENT;
   TOOLTIP "Informações Sobre a Informática"

vPosicao=vPosicao+39
@ vPosicao,2 OWNERBUTTON OF oPanel;
   ON CLICK {|| Ajuda_SCM() } ;
   SIZE 36,36 ;
   FLAT;
   BITMAP oBmpLogo13 FROM RESOURCE TRANSPARENT;
   TOOLTIP "Informações Sobre o SCM"

vPosicao=vPosicao+39
@ vPosicao,2 OWNERBUTTON OF oPanel;
   ON CLICK {|| Sair() } ;
   SIZE 36,36 ;
   FLAT;
   BITMAP 1005 FROM RESOURCE TRANSPARENT;
   TOOLTIP "Sair do Sistema"
Depois:

Código: Selecionar todos

@ 0,0 PANEL oPanel OF oTelaPrincipal SIZE 0,37
vPosicao=0
FOR EACH aItem IN { ;
   { oBmpLogo9,  "Cadastro de Associado",             { || Pesquisa_Associado() } }, ;
   { oBmpLogo12, "Cadastro de Mensalidade",           { || frmCad_Mensal( "C" ) } }, ;
   { oBmpLogo3,  "Calculadora",                       { || ShellExecute( "calc" ) } }, ;
   { oBmpLogo7,  "Reindexa o Banco de Dados",         { || Indexa() } }, ;
   { oBmpLogo2,  "Realizar Backup do Banco de Dados", { || Back_up() } }, ;
   { oBtmpLogo8, "Suporte On-Line",                   { || SendEmail( "suporte@xxx",1) } }, ;
   { oBmpLogo5, "Informações sobre a Sygecom Informática", { || Sobre() } }, ;
   { oBmpLogo13, "Informações sobre o SCM",           { || Ajuda_SCM() } }, ;
   { 1005,       "Sair do Sistema",                   { || Sair() } } }

   @ vPosicao, 2 OWNERBUTTON OF oPanel ;
      ON CLICK aItem[ 3 ] ;
      SIZE 36, 36 ;
      FLAT ;
      BITMAP aItem[1] FROM RESOURCE TRANSPARENT ;
      TOOLTIP aItem[2]
   vPosicao += 39
NEXT
De certa forma, isso reduz as diferenças harbour/xharbour, ou de versão de hwgui.
Aconteça o que acontecer, será um tempo gasto e bem aproveitado.
alxsts escreveu:Este código é chamado de codeblock extendido. Veja a quantidade de código que existe entre as chaves {}, tendo inclusive declaração de variáveis LOCAL. Este é o padrão Harbour. No xHarbour, este tipo de codeblock é delimitado por colchetes [], conforme escrito naquele arquivo xhbdiff.txt. É só trocar as chaves pelos colchetes.
Que eu me lembre, colchetes são pra array ou string ou hash.
Não olhei o xhbdiff.txt pra ver que situação é essa diferente, se seria algo deste tipo.

Código: Selecionar todos

cTxt := [ {|| teste() } ]
bCode := &cTxt
ou fonte compilável, usando hb_Compile()

hwgui 2.17

Enviado: 19 Fev 2024 19:07
por JoséQuintas
Vixe.

Eu não uso quase nada de hwgui.
Teste básico da 2.17

Código: Selecionar todos

d:\github\dlgauto\source>c -Ld:\github\hwgui217 hwgui217.hbc hwgui.hbc

d:\github\dlgauto\source>d:\fontes\build\build.exe -Ld:\github\hwgui217 hwgui217.hbc hwgui.hbc

d:\github\dlgauto\source>HBMK2 test.hbp -Ld:\github\hwgui217 hwgui217.hbc hwgui.hbc -w3 -es2 -m -n -strip -compr -wo
rkdir=c:\temp -q -Id:\fontes\build\
hbmk2: Processing environment options: -comp=mingw
hbmk2: Processing configuration: d:\harbour\bin\hbmk.hbc
Harbour 3.2.0dev (r2402101027)
Copyright (c) 1999-2021, https://harbour.github.io/

lib_hwgui.prg:132: error E0030  Syntax error "syntax error at 'DIALOG'"

lib_hwgui.prg:134: error E0030  Syntax error "syntax error at 'DIALOG'"

lib_hwgui.prg:139: warning W0003  Variable 'XDLG' declared but not used in function '128:GUI_DIALOGACTIVATE'

lib_hwgui.prg:159: error E0030  Syntax error "syntax error at 'DIALOG'"

lib_hwgui.prg:163: warning W0003  Variable 'XDLG' declared but not used in function '143:GUI_DIALOGCREATE'

lib_hwgui.prg:163: warning W0003  Variable 'NROW' declared but not used in function '143:GUI_DIALOGCREATE'

lib_hwgui.prg:163: warning W0003  Variable 'NCOL' declared but not used in function '143:GUI_DIALOGCREATE'

lib_hwgui.prg:163: warning W0003  Variable 'NWIDTH' declared but not used in function '143:GUI_DIALOGCREATE'

lib_hwgui.prg:163: warning W0003  Variable 'NHEIGHT' declared but not used in function '143:GUI_DIALOGCREATE'

lib_hwgui.prg:163: warning W0003  Variable 'CTITLE' declared but not used in function '143:GUI_DIALOGCREATE'
3 errors

No code generated.

hwgui 2.17

Enviado: 19 Fev 2024 19:16
por JoséQuintas
hwgui217.png
dlgauto compilou com hwgui 2.17, mas nada mais funciona.

Não que hwgui 2.17 seja problema, apenas as duas não são compatíveis.
Não sai do get do campo chave, nem com ENTER e nem com TAB.

hwgui 2.17

Enviado: 19 Fev 2024 20:37
por alxsts
Olá!
JoséQuintas escreveu:Que eu me lembre, colchetes são pra array ou string ou hash.
Não olhei o xhbdiff.txt pra ver que situação é essa diferente, se seria algo deste tipo.
alxsts escreveu:Opa... não tenho o xhbdiff.txt em mãos agora mas me lembrei que não são colchetes e sim <> (maior e menor).
Eu corrigi a informação imediatamente...
não leu?
xhb-diff.txt escreveu:### EXTENDED CODEBLOCKS ###
=================================
Both compilers support compile time extended codeblocks which allow
to use statements but with a little bit different syntax. Harbour uses
standard Clipper codeblock delimiters {}, f.e.:
? Eval( {| p1, p2, p3 |
? p1, p2, p3
return p1 + p2 + p3
}, 1, 2, 3 )
and xHarbour <>, f.e.:
? Eval( <| p1, p2, p3 |
? p1, p2, p3
return p1 + p2 + p3
>, 1, 2, 3 )

In Harbour extended codeblocks works like nested functions and supports
all function attributes, f.e. they can have own static variables or
other declarations which are local to extended codeblocks only and
do not effect upper function body.
In xHarbour the compiler was not fully updated for such functionality
and extended codeblocks were added to existing compiler structures what
causes that not all language constructs work in extended codeblocks
and creates a set of very serious compiler bugs, f.e., like in this code
with syntax errors but which is compiled by xHarbour without even single
warning giving unexpected results at runtime:
#ifndef __XHARBOUR__
#xtranslate \<|[<x,...>]| => {|<x>|
#xcommand > [<*x*>] => } <x>
#endif
proc main()
local cb, i
for i:=1 to 5
cb := <| p |
? p
exit
return p * 10
>
?? Eval( cb, i )
next
return
It's possible to create many other similar examples which are mostly
caused by missing in the compiler infrastructure for nested functions
support.
This can be fixed if someone invest some time to clean xHarbour compiler.

hwgui 2.17

Enviado: 20 Fev 2024 08:36
por ivanil
O bloco extendido, acho que foi uma das maiores evoluções da linguagem;
Basicamente você cria uma função, recebe parâmetros e devolve valores naturalmente; na prática, podemos ter inúmeras funções muito específicas que pode ou não ficar ligados ao executável;

hwgui 2.17

Enviado: 20 Fev 2024 09:18
por JoséQuintas
Já usei antes codeblock de várias linhas, mas na última vez que foi usar não consegui mais e desisti.
Algo do tipo:

Código: Selecionar todos

aCode := { ;
  | a, b |
LOCAL c := 10
RETURN a + b + c }

Assim funciona, mas isso é codeblock tradicional.

Código: Selecionar todos

PROCEDURE Main

   LOCAL aBlock

   SetMode(30,100)
   CLS
   aBlock := { | a, b, c | ;
      c := 10, ;
      a + b + 10 }

   ? Eval( aBlock, 1, 2 )
   Inkey(0)

   RETURN
pra quem não sabe e/ou não lembra, o codeblock pode ter várias expressões, o retorno será o último.

Código: Selecionar todos

   aBlock := { | a | a +=1, a += 1, a+= 1 }

   ? Eval( aBlock, 1 )
Isso também é aceito no VALID, na declaração INLINE de uma classe, etc.

hwgui 2.17

Enviado: 20 Fev 2024 14:24
por Itamar M. Lins Jr.
Olá!
Esse aqui até hoje eu estudo. Esse "return nil" dentro e tudo mais.

Código: Selecionar todos

LOCAL bCol1 := {|o,h,x1,y1,x2,y2,nc,nr|
      hwg_Fillrect( h, x1, y1, x2, y2, Iif( !Empty(o:brush), o:brush:handle, oBrw:handle ) )
      IF Eval( o:block )
         hwg_DrawTransparentBitmap( h, oBmpCheck:handle, x1+2, y1+2 )
      ENDIF
      RETURN Nil
   }
   LOCAL bEnter := {|o,nc|
      IF nc == 1
         (o:alias)->(rlock())
         (o:Alias)->(Eval( o:aColumns[nc]:block, !Eval( o:aColumns[nc]:block ) ))
         (o:alias)->(dbunlock())
         o:Refresh()
         RETURN .T.
      ENDIF
      RETURN .F.
   }
Saudações,
Itamar M. Lins Jr.

hwgui 2.17

Enviado: 20 Fev 2024 18:46
por JoséQuintas
Itamar M. Lins Jr. escreveu:Esse aqui até hoje eu estudo. Esse "return nil" dentro e tudo mais.
Então.... de forma simples, compare isto

Código: Selecionar todos

{|o,h,x1,y1,x2,y2,nc,nr|
	      hwg_Fillrect( h, x1, y1, x2, y2, Iif( !Empty(o:brush), o:brush:handle, oBrw:handle ) )
	      IF Eval( o:block )
	         hwg_DrawTransparentBitmap( h, oBmpCheck:handle, x1+2, y1+2 )
	      ENDIF
	      RETURN Nil
	   }
com isto:

Código: Selecionar todos

FUNCTION SemNome( o,h,x1,y1,x2,y2,nc,nr)
	      hwg_Fillrect( h, x1, y1, x2, y2, Iif( !Empty(o:brush), o:brush:handle, oBrw:handle ) )
	      IF Eval( o:block )
	         hwg_DrawTransparentBitmap( h, oBmpCheck:handle, x1+2, y1+2 )
	      ENDIF
	      RETURN Nil
Codeblock é uma função sem nome.
Esse fonte tem algum CH a mais?

hwgui 2.17

Enviado: 20 Fev 2024 18:55
por JoséQuintas
BINGO !

Código: Selecionar todos

   aBlock := { | a |
     a +=1
     a += 1
     a+= 1
     RETURN a
     }
O fechamento do codeblock precisa estar sozinho na linha de baixo.

Então....

Código: Selecionar todos

FUNCTION CalcImposto( nValor, nAliquota )

   LOCAL nImposto

   nImposto := nValor * nAliquota / 100

   RETURN nImposto
Em codeblock

Código: Selecionar todos

{ | nValor, nAliquota |

LOCAL nImposto

nImposto := nValor * nAliquota / 100

   RETURN nImposto
}
Pra executar a função:

Código: Selecionar todos

CalcImposto( 1000, 10 )
Pra executar o codeblock, depois de atribuir a uma variável:

Código: Selecionar todos

Eval( variavel, 1000, 10 )

Isso deixa tudo mais simples de entender.

hwgui 2.17

Enviado: 20 Fev 2024 19:17
por JoséQuintas
Então....
Eu já comentei várias vezes sobre esse tipo de coisa.
Às vezes só depende de encontrar alguma coisa já existente pra fazer comparação, pra entender o funcionamento da coisa nova.
Encontrou um "modelo" ideal de fazer comparação, tudo fica mais fácil.

Array comparar com lista
Hash comparar com array
Json os dois juntos

Se deixou de entender o antigo, não vai entender o novo.

Quem não entendeu FUNCTION, por incrível que pareça muitos ainda não entendem...
não vai entender codeblock.

E aquilo de -w3 -es2, e remodelar fontes, é algo como voltar ao começo, e reaprender tudo do jeito certo.
É justamente repassar o antigo, e craque no antigo fica craque no novo.

Vai encontrar muita function errada, que tá dependendo de coisa externa, quando não deveria.
E se não entende function, não vai entender codeblock.

NÃO é o caso do Itamar, se ele não entendeu, foi apenas porque não fez a comparação com uma function.

E eu não estava conseguindo fazer por conta da chave final, que deve ficar na linha de baixo.
O fonte que o Itamar mostrou resolveu a questão.
Apenas levei a chave pra linha de cima, e deu erro de compilação.

última linha, com a chave na mesma linha

Código: Selecionar todos

     RETURN Imposto }
Harbour 3.2.0dev (r2402101027)
Copyright (c) 1999-2021, https://harbour.github.io/

test.prg:18: error E0030 Syntax error "syntax error at '}'"

test.prg:18: warning W0007 Function '{||...}' does not end with RETURN statement
1 error

hwgui 2.17

Enviado: 20 Fev 2024 19:25
por JoséQuintas
Assim também não aceita.
erro.png
Mas com ponto e vírgula sim, porque considera mesma linha.

Código: Selecionar todos

   aBlock := { ;
   | Valor, AliquotaIcms |

hwgui 2.17

Enviado: 08 Set 2024 01:44
por deividdjs
Ola amigo .. estou brincando com o HWGUI ... estou usando o Designer e ele compila normalmente ... quando eu coloco o codigo gerado por ele no meu sistema essa parte ele dá erro de sintax .. 'FROM RESOURCE TRANSPARENT;' quando eu comento compila .. alguem já teve esse problema ??

Código: Selecionar todos

	@ 6,4 OWNERBUTTON oOwnerbutton2  OF oPanel1 SIZE 52,40  ;
        TEXT 'Usuarios'  ;
        FONT HFont():Add( 'MS Sans Serif',0,-11,400,,,) ;
        COORDINATES 0, 22, 0, 0  ; //        FLAT;
        BITMAP 'C:\CONTROLE_\IMAGEM\smopen.bmp' ; //FROM RESOURCE TRANSPARENT  ;
        COORDINATES 0, 4, 0, 0  ;
        ON CLICK {|| ThisForm:CLOSE() } 
Abs!

hwgui 2.17

Enviado: 09 Set 2024 10:43
por JoséQuintas
Dá uma olhada no #define ou #translate se ajuda.
Não dá pra saber se está usando hwgui 2.17 mesmo ou outra, e pode ter diferença entre elas.