Página 1 de 3

Hwgui 2.22 build 2

Enviado: 23 Dez 2018 12:07
por Itamar M. Lins Jr.
Ola!
Usar XML ou PRG ?

HWGUI 2.22 build 2 ( 23.12.2018 )
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[*] Designer: splitter, top panel, status panel, static link controls added.
Grid implemented.
[*] GTK3 support mostly implemented.
[!] Fixes, corrections.

Código: Selecionar todos

2018-12-23 13:48 UTC+0300 Alexander Kresin <alex@belacy.ru>
  * include/guilib.ch
    * Build number is changed to 2
  * whatsnew.txt
    * Updated for v2.22 build 2

2018-12-22 17:58 UTC+0300 Alexander Kresin <alex@belacy.ru>
  * source/gtk/hfrmtmpl.prg
  * source/winapi/hfrmtmpl.prg
  * utils/designer/resource/widgets.xml
    * Static link control support added to the Designer.
Saudações,
Itamar M. Lins Jr.

Hwgui 2.22 build 2

Enviado: 23 Dez 2018 22:51
por Fernando queiroz
quando fui compilar o novo Build deu essa warning
compila.jpg

Hwgui 2.22 build 2

Enviado: 24 Dez 2018 08:09
por gilbertosilverio
Ola Itamar,

Tentei achar o local para enviar possíveis erros, mais infelizmente não consegui. Por favor, veja se e um erro meu o da HWGUI.

Baseado no exemplo da pasta samples, COLRBLOCK.PRG, se voce alterar esta linhas veja como o browse fica deformado.

Código: Selecionar todos


       hwg_CREATEARLIST( oBrwArr, aArrayTst )

        oBrwArr:bcolorSel := x_BLUE
 
        oBrwArr:freeze     := 1     // inclui para mostrar o erro
        oBrwArr:lAdjRight := .F.   // incluir para mostrar o erro

        oBrwArr:aColumns[1]:length := 10
        oBrwArr:aColumns[2]:length := 11
        oBrwArr:aColumns[3]:length := 10
       
        oBrwArr:aColumns[4]:length := 10   // diminui para 10
       
        oBrwArr:aColumns[5]:length := 05


Hwgui 2.22 build 2

Enviado: 24 Dez 2018 10:31
por Fernando queiroz
outra coisa que notei foi que no Designer ele so abre se for .XML , minhas telas em .PRG nao abrem mais

e para salvar quando pede para salvar em .PRG nao vai com os recursos que tem para o formato .XML


formato .PRG

Código: Selecionar todos

#include "hwgui.ch"
#include "common.ch"
#ifdef __XHARBOUR__
   #include "ttable.ch"
#endif

FUNCTION _teste

LOCAL oToolbar1

  INIT DIALOG oDlg TITLE "Form1" ;
    AT 658,165 SIZE 516,465 ;
     STYLE WS_SYSMENU+WS_SIZEBOX+WS_VISIBLE


   @ 1,8 TOOLBAR oToolbar1  SIZE 494,50    ID 700


   ACTIVATE DIALOG oDlg
RETURN oDlg:lresult

formato .XML

Código: Selecionar todos

<?xml version="1.0" encoding="UTF-8"?>

-<part class="form">


-<style>

<property name="Geometry">{658,165,500,400}</property>

<property name="Caption">[Form1]</property>

<property name="FormType">[dlgModal]</property>

<property name="lClipper">.F.</property>

<property name="lExitOnEnter">.F.</property>

<property name="lDebug">.F.</property>

<property name="FromStyle">[Popup]</property>

<property name="Icon">[]</property>

<property name="BackColor">-1</property>

<property name="NoModal">.F.</property>

<property name="SystemMenu">.T.</property>

<property name="Minimizebox">.F.</property>

<property name="Maximizebox">.F.</property>

<property name="AbsAlignent">.T.</property>

<property name="SizeBox">.T.</property>

<property name="Visible">.T.</property>

<property name="3DLook">.F.</property>

<property name="Clipsiblings">.F.</property>

<property name="Clipchildren">.F.</property>

</style>


-<part class="toolbar">


-<style>

<property name="Geometry">{1,8,494,50}</property>

<property name="Name">[oToolbar1]</property>

<property name="Anchor">11</property>


-<property name="hstyle">

<hstyle orient="1" colors="{1,12632256}"/>

</property>

</style>

</part>

</part>

sera que estamos indo para telas externas em formato xml ??? :'( :'( :'( :'(

Hwgui 2.22 build 2

Enviado: 24 Dez 2018 11:23
por Itamar M. Lins Jr.
Ola!
Tentei achar o local para enviar possíveis erros, mais infelizmente não consegui.
Tem que se cadastrar no SOURCEFORGE primeiro, depois se cadastrar no developer da Hwgui.
https://sourceforge.net/auth/
Depois que vc for autorizado, pode postar usando qualquer clientes de email.
https://sourceforge.net/p/hwgui/mailman ... evelopers/
Mesmo que não tenha acesso a escrita no SVN, pode postar no forum dos DEVELOPERS.

Saudações,
Itamar M. Lins Jr.

Hwgui 2.22 build 2

Enviado: 24 Dez 2018 11:24
por gilbertosilverio
Ola Amigos,

Nos teste que estou fazendo, infelizmente existem muitas diferenças entres as versões 2.17 para a 2.22 e fica impossível usar a 2.22

Nesta rotina de Browse compartilhados, na versão 2.22 existe a classe hbrwflt, para filtar os arquivos da segunda base de dados, mais quando voce faz uma alteração no meu caso no kardex, ele retorna dados de um item que não e o mesmo que filtrei.

Código: Selecionar todos

FUNCTION PRODUTOS()
  LOCAL o, nKEY, nRec:=1, oGET1, oGET2, nLast := 0, oLINE1
  PRIVATE oLabel1, oEdit1, oLabel2, oEdit2, oButtonex2, oBrw1, zREC:=0, vgDESCRICAO:=[], vgMARCA:=[]
  PRIVATE oButtonex1, oButtonex2, oButtonex3, oButtonex4, oBrw2, aPCHA:=0, oButtonex5, oButtonex6, oButtonex7
  PRIVATE nPES, gPes, vPes:="", keyAnt:=0, aVERDE, aAMARELO, oTECLA:="", nORDEM:=1, cRAZ
  PRIVATE CM1:=1, aCOMBO, nPosicao:=0, cProgressKey:="", fVLR01:=0, oBRW3

  KSETCAPS(.T.)

  aCOMBO:= {[1 - Descricao   ],;
            [2 - Sal Base    ],;
            [3 - Fornecedor  ] }

  CLOSE DATA

  DBUSEAREA(.T., "DBFNTX", "xMITI", "xMITI", .T.)
  SET INDEX TO xMITEMIS, xMITNOTA, xMITCOEM, xMITVEND, xMITVECT, xMIEMI, xMINNF

  DBUSEAREA(.T., "DBFNTX", "xENDAS", "xENDAS", .T.)
  SET INDEX TO xENDACOD

  DBUSEAREA(.T., "DBFNTX", "xESTOQUE", "xESTOQUE", .T.)
  SET INDEX TO xESTDES, xESTPCH, xESTFOR, xESTCOD, xESTPRI, xESTEAN, ESTSEC, xESTFRA

  DBUSEAREA(.T., "DBFNTX", "xARDEX", "xARDEX", .T.)
  SET INDEX TO xADES, xACOD

  DBSELECTAREA("xESTOQUE")
  xESTOQUE->(DBSETORDER(nORDEM))
  xESTOQUE->(DBSEEK(xARDEX->DESCRICAO, .F.))

  INIT DIALOG oDlg TITLE "Pesquisar Produto " AT 0,0 SIZE 980,600                ;
       FONT HFont():Add( 'tahoma',0,-13,400,,,) CLIPPER                         ;
       STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+WS_MAXIMIZEBOX+WS_SIZEBOX+DS_CENTER

       ThisBUSCA := oDlg

       @  13, 10 SAY       [Pesquisando :]    SIZE 100,19
       @ 100, 10 SAY gPes CAPTION vPes        SIZE 300,22 COLOR 255

       @  13, 35 SAY       [Localizado  :]    SIZE 100,19
       @ 100, 35 SAY cRAZ CAPTION SPAC(50)    SIZE 400,22

       @ 0, 62 LINE oLine1 LENGTH 980

       @ 13,070 BROWSE oBrw1 DATABASE SIZE 960,270 STYLE WS_TABSTOP                            ;
                ON POSCHANGE {|| EVAL(oBrw2:bFirst), ESTOQUE_onPosChange(), oBrw2:Refresh() }  ;
                ON CLICK {||zREC:=xESTOQUE->(RECNO()), ThisBUSCA:CLOSE(), PRODUTO_INCLUIR(zREC), oBU4:SetFocus() }

       oBrw1:alias       := 'xESTOQUE'
       oBrw1:nColumns    := 10
       oBrw1:freeze      := 1
    // oBrw1:lAdjRight   := .F.

       SELECT (oBrw1:alias)

       oBrw1:AddColumn( HColumn():New('EAN'        , FieldBlock( 'EAN' )       ,'C',16, 0 ,.F.,0,0,,,,,,,,,))
       oBrw1:AddColumn( HColumn():New('Descrição'  , FieldBlock( 'DESCRICAO' ) ,'C',45, 0 ,.F.,0,0,,,,,,,,,)) // DIREITA
       oBrw1:AddColumn( HColumn():New('Fornecedor' , FieldBlock( 'FORNECEDOR' ),'C',15, 0 ,.F.,0,0,,,,,,,,,))
       oBrw1:AddColumn( HColumn():New('Estoque'    , FieldBlock( 'QTDEESTOQU') ,'N',08, 0 ,.F.,2,2,,,,,,,,,))
       oBrw1:AddColumn( HColumn():New('Reservado'  , FieldBlock( 'QTDEVENDA' ) ,'N',08, 0 ,.F.,2,2,,,,,,,,,))
       oBrw1:AddColumn( HColumn():New('Sal Base'   , FieldBlock( 'SALBASE' )   ,'C',70, 0 ,.F.,0,0,,,,,,,,,))
       oBrw1:AddColumn( HColumn():New('Promoção'   , FieldBlock( 'MINIMO' )    ,'N',05, 0 ,.F.,1,1,,,,,,,,,)) // ESQUERDA
       oBrw1:AddColumn( HColumn():New('Codigo'     , FieldBlock( 'CODIGO' )    ,'N',06, 0 ,.F.,0,0,,,,,,,,,))
       oBrw1:AddColumn( HColumn():New('P.M.C.'     , FieldBlock( 'PRECOMC' )   ,'N',10, 2 ,.F.,2,2,,,,,,,,,))
       oBrw1:AddColumn( HColumn():New('Preço Fabr.', FieldBlock( 'TABELA01' )  ,'N',10, 2 ,.F.,2,2,,,,,,,,,))

       oBrw1:bKeyDown := { |o,key|HB_SYMBOL_UNUSED(o),IIF(key==27,(hwg_EndDialog(oDlg:handle),.F.),a_BrwKeyfun(o,key))}

       oBrw1:aColumns[02]:bHeadClick := {|| oBrw1_2_onHeadClick( ) }  // 1 - Descricao
       oBrw1:aColumns[03]:bHeadClick := {|| oBrw1_3_onHeadClick( ) }  // 3 - Fornecedor
       oBrw1:aColumns[06]:bHeadClick := {|| oBrw1_6_onHeadClick( ) }  // 2 - sAL

       oBrw1:nFootRows := 1                                 // numero de colunas para mostrar os totais no final do browse
       oBrw1:acolumns[01]:footing    := [ ]
       oBrw1:acolumns[02]:footing    := [<F5>Descricao    <F6>SalBase    <F7>Fornecedor]

       FOR nI := 1 TO 10
           oBrw1:aColumns[nI]:bColorBlock := ;     // LETRA   CAIXA    LET_CX  BARRA
                 {|nI| IF(xESTOQUE->QTDEESTOQU  > 0, {x_RED, x_WHITE, x_BLACK, CINZA}, {x_BLACK, x_WHITE, x_BLACK, CINZA} )}
       NEXT
       oBrw1:aColumns[7]:bColorBlock := ;
             {|n| IF( (xESTOQUE->MINIMO > 0 .AND. xESTOQUE->MINIMO < 10 .AND. xESTOQUE->(QTDEESTOQU-QTDEVENDA) > 0), ;
                       {x_BLUE, x_WHITE, x_WHITE, CINZA}, {CINZA, CINZA, CINZA, CINZA} )}
       oBrw1:Anchor   := 15
       oBrw1:Refresh()

       @ 13,350 BROWSE oBrw2 FILTER SIZE 960,170 STYLE WS_TABSTOP AUTOEDIT                    ;
            FIRST {|| XARDEX->( DBSEEK(xESTOQUE->(SUBSTR(DESCRICAO,1,49)), .F.) ) }           ;
            WHILE {|| XARDEX->(SUBSTR(DESCRICAO,1,49)) == xESTOQUE->(SUBSTR(DESCRICAO,1,49))} ;
            ON UPDATE {|| kardex_onPosChange() }

       //oBrw2:nHeadHeight := 24
       oBrw2:alias       := 'xARDEX'
       oBrw2:nColumns    := 4
     //Obrw2:freeze      := 1

       SELECT (oBrw2:alias)

       // ( cHeading,   block,                    type, length, dec, lEditable, nJusHead, nJusLin, cPict, bValid, bWhen, aItem, bColorBlock, bHeadClick ) CLASS HColumn
       // ('Descrição', FieldBlock( 'DESCRICAO' ),'C' , 50,     0 ,  .F.       ,0       , 0      ,      ,       ,      ,      ,            ,           ,,,))
       oBrw2:AddColumn( HColumn():New('Descrição', FieldBlock( 'DESCRICAO' ) ,'C',50, 0 ,.F.,0,0,,,,,,,,,))          // ESQUERDA
       oBrw2:AddColumn( HColumn():New('N Lote'   , FieldBlock( 'Nlote' )     ,'C',20, 0 ,.T.,0,0,,,,,,,,,))
       oBrw2:AddColumn( HColumn():New('Validade' , FieldBlock( 'Validade')   ,'C',10, 0 ,.T.,0,0,'99/9999',,,,,,,,)) // CENTRO
       oBrw2:AddColumn( HColumn():New('Qtde'     , FieldBlock( 'Qtde' )      ,'N',06, 0 ,.T.,DT_CENTER,DT_RIGHT,'9999999',,,,,,,,))

       oBrw2:acolumns[03]:footing   := [Qtde Total: ]
       oBrw2:acolumns[04]:footing   := TRANSF( fVLR01, [@E 999,999] )

       oBrw2:aColumns[04]:lResizable:= .F.

       oBrw2:Anchor := ANCHOR_LEFTABS  + ANCHOR_BOTTOMABS //12+ ANCHOR_RIGHTABS
       oBrw2:Refresh()

       @ 203,550 BUTTON oButtonex1 CAPTION "&Vendas" SIZE 98,32 STYLE WS_TABSTOP ;
             ON CLICK {|| zREC:=xESTOQUE->(RECNO()), aPCHA:=xESTOQUE->CODIGO, VENDAS_PRO(), xESTOQUE->(DBGOTO(zREC)), oBrw1:REFRESH(), oBrw1:setfocus() }
             oButtonex1:Anchor := 12

       @ 311,550 BUTTON oButtonex2 CAPTION "C&have" SIZE 98,32 STYLE WS_TABSTOP ;
             ON CLICK {|| zREC:=xESTOQUE->(RECNO()), PESQUISA_CHAVE(), xESTOQUE->(DBGOTO(zREC)), oBrw1:REFRESH(), oBrw1:setfocus() }
             oButtonex2:Anchor := 12

       @ 419,550 BUTTON oButtonex3 CAPTION "&Reservas" SIZE 98,32 STYLE WS_TABSTOP ;
             ON CLICK {|| zREC:=xESTOQUE->(RECNO()), aPCHA:=xESTOQUE->CODIGO, HWG_PEUMSO(aPCHA), xESTOQUE->(DBGOTO(zREC)), oBrw1:REFRESH(), oBrw1:setfocus() }
             oButtonex3:Anchor := 12

       @ 527,550 BUTTON oButtonex4 CAPTION "Excluir" SIZE 98,32 STYLE WS_TABSTOP //;
             //ON CLICK {|| zREC:=xARDEX->(RECNO()), Excluir_Kardex(zRec), oBrw1:REFRESH(), oBrw1:setfocus() }
             oButtonex4:Anchor := 12

       @ 635,550 BUTTON oButtonex5 CAPTION "&Importar" SIZE 98,32 STYLE WS_TABSTOP ;
             ON CLICK {||zREC:=xESTOQUE->(RECNO()), ThisBUSCA:CLOSE(), PRODUTO_INCLUIR(zREC), oBU4:SetFocus() }
             oButtonex5:Anchor := 12

       @ 740,550 BUTTON oButtonex6 CAPTION "&Ordem"   SIZE 98,32 STYLE WS_TABSTOP ;
             ON CLICK {|| MsgGetORDEM( @nORDEM, @aCOMBO ), xESTOQUE->(DBSETORDER(nORDEM)), oBrw1:Refresh(), oBrw1:Setfocus() }
             oButtonex6:Anchor := 12

       @ 848,550 BUTTON oButtonex7 CAPTION "Sai&r"   SIZE 98,32 STYLE WS_TABSTOP ;
             ON CLICK {|| DBCLOSEALL(), ThisBUSCA:CLOSE() }
             oButtonex7:Anchor := 12

  ACTIVATE DIALOG oDlg

RETURN(NIL)

Olhem a primeira imagem feito na 2.17 como é, e como fica com a versão 2.22 nas outras duas imagens

Infelizmente, a versão 2.22 e muito pobre em exemplos, e mesmo no tutorial feito pelo Kresin, não existem exemplos, nem mesmo os mais básicos para voce ter noção de como usa-la.

Creio que existe muito potencial, na GUI, mais infelizmente, para usuários leigos, como eu, fica difícil ...

Hwgui 2.22 build 2

Enviado: 24 Dez 2018 11:28
por Itamar M. Lins Jr.
Ola!
sera que estamos indo para telas externas em formato xm
Acredito que irá depender da quantidade de pessoas que estão usando estes recursos do Designer.
Quem sabe um baixo assinado rsrsrs ou algo mais interessante informando a quantidade de pessoas que querem usar a Hwgui 2.22 junto com o Designer e com estes recursos que ainda estão precisando de uma maior atenção do Kresin.
Se todo mundo se cadastrar lá no forum da Hwgui developers do SVN e postar lá os problemas, todos os desenvolvedores irão ver.

Saudações,
Itamar M. Lins Jr.

Hwgui 2.22 build 2

Enviado: 24 Dez 2018 11:39
por Itamar M. Lins Jr.
Ola!
Nesta rotina de Browse compartilhados, na versão 2.22 existe a classe hbrwflt, para filtar os arquivos da segunda base de dados, mais quando voce faz uma alteração no meu caso no kardex, ele retorna dados de um item que não e o mesmo que filtrei.
Isso ele resolve rapidinho, é só informar o BUG para ele.
Quanto aos exemplos, também é só perguntar lá no forum. Ninguém gosta de trabalhar sozinho. Vamos participar no forum de desenvolvedores.

Saudações,
Itamar M. Lins Jr.

Hwgui 2.22 build 2

Enviado: 24 Dez 2018 12:10
por Itamar M. Lins Jr.
Ola!
Creio que existe muito potencial, na GUI, mais infelizmente, para usuários leigos, como eu, fica difícil ...
Temos que caminhar para frente, devagar e sempre. Encontrar soluções, mostrar os problemas, apontar os defeitos e participar da solução, se houver jeito.
Mandei esses 2 problemas, para ele.
No caso se vc tem dificuldade com alguma coisa, explica qual é a dificuldade apontando alguma solução se souber. Pelo menos informar para o Kresin o problema. Senão como ele vai saber ?
Meu problema e que não sei fazer tal coisa. Que tal coisa é essa ? Tem algum exemplo de como fazer tal coisa ? Falar que não tem exemplo não ajuda. Tem que perguntar lá para ele sobre essas "tais coisas".

Saudações,
Itamar M. Lins Jr.

Hwgui 2.22 build 2

Enviado: 24 Dez 2018 13:11
por gilbertosilverio
Itamar,

Creio que o ideal seria incluir vários exemplos básicos, para as mais diversas funcionalidades, como existia na 2.17, pois assim a cada nova atualização, fica mais fácil testar e descobrir possíveis erros e informar.

Vou testando, e baseado nas minhas limitações, vou postando para ver se conseguimos deixa-la 100%.

Novamente, grato pela sua atenção.

Hwgui 2.22 build 2

Enviado: 24 Dez 2018 18:03
por Fernando queiroz
também tentei fazer um relatório usando o designer mas ele não faz nada
sera que tem algum macete pois não consigo colocar os componentes :% :% :% :%

Hwgui 2.22 build 2

Enviado: 25 Dez 2018 09:26
por Itamar M. Lins Jr.
Ola!
Sobre o problema do Designer não trabalhar com PRG.

Resposta do Kresin:
Yes, it is. I didn't updated export to prg for a long time and don't know now, when will be able to do this. So, I recommend to use xml format only. If there are real reasons to use prg, we may consider them and try to find a suitable decision with xml.
Sim. Eu não atualizei a exportação para prg por um longo tempo e não sei agora, quando será capaz de fazer isso. Por isso, recomendo usar somente o formato xml. Se houver razões reais para usar o prg, podemos considerá-las e tentar encontrar uma decisão adequada com xml.
Saudações,
Itamar M. Lins Jr.

Hwgui 2.22 build 2

Enviado: 25 Dez 2018 09:29
por Itamar M. Lins Jr.
Ola!
Resposta do Colrblock.prg.
Hm...
I couldn't reproduce this, all looks normally here.
Maybe, he had changed something else?

Regards, Alexander.
Hm ...
Eu não consegui reproduzir isso, tudo parece normalmente aqui.
Talvez ele tivesse mudado alguma outra coisa?

Atenciosamente, Alexander.
Saudações,
Itamar M. Lins Jr.

Hwgui 2.22 build 2

Enviado: 25 Dez 2018 09:38
por gilbertosilverio
Ola Itamar,

Por favor compila ai no seu e testa e ve se da o mesmo erro.

Alterei o menu: BROWSE - ARRAY

Código: Selecionar todos

/*
 * Demo by HwGUI Alexander Kresin
 *  http://kresin.belgorod.su/
 *
 *
 * Paulo Flecha <pfflecha@yahoo.com>
 * 07/07/2005
 * Demo for Browse using bColorBlock
 *
 *       oBrowse:aColumns[1]:bColorBlock := {|| IF (nNumber < 0, ;
 *       {textColor, backColor, textColorSel, backColorSel} ,;
 *       {textColor, backColor, textColorSel, backColorSel} ) }
 *
 *       bColorBlock must return an array containing four colors values
 *
 */

#define x_BLUE       16711680
#define x_DARKBLUE   10027008
#define x_WHITE      16777215
#define x_CYAN       16776960
#define x_BLACK             0
#define x_RED             255
#define x_GREEN         32768
#define x_GRAY        8421504
#define x_YELLOW        65535

#include "windows.ch"
#include "guilib.ch"

***********************
FUNCTION Main()
***********************
LOCAL oWinMain

SET(_SET_DATEFORMAT, "dd/mm/yyyy")
SET(_SET_EPOCH, 1950)

REQUEST DBFCDX                      // Causes DBFCDX RDD to be linked in
rddSetDefault( "DBFCDX" )           // Set up DBFCDX as default driver

*FERASE("TSTBRW.DBF")

IF !FILE("TSTBRW.DBF")
   CriaDbf()
ELSE
   DBUSEAREA(.T., "DBFCDX", "TSTBRW", "TSTB")
END

INIT WINDOW oWinMain MAIN  ;
     TITLE "Teste" AT 0, 0 SIZE 600,400;
    FONT HFont():Add( 'Arial',0,-13,400,,,) ;
    STYLE WS_DLGFRAME + WS_SYSMENU + DS_CENTER


   MENU OF oWinMain
      MENU TITLE "&Arquivo"
          MENUITEM "&Sair"              ACTION hwg_EndWindow()
      ENDMENU
      MENU TITLE "&Browse"
         MENUITEM "&Database"           ACTION BrwDbs(.f.)
         MENUITEM "Database &EDITABLE"  ACTION BrwDbs(.t.)
         MENUITEM "Database &Zebra"     ACTION BrwDbs(.f., .T.)
         SEPARATOR
         MENUITEM "&Array"              ACTION BrwArr(.f.)
         MENUITEM "Array E&DITABLE"     ACTION BrwArr(.t.)
         MENUITEM "Array Ze&bra"        ACTION BrwArr(.f., .T.)
      ENDMENU
   ENDMENU

   oWinMain:Activate()

RETURN(NIL)

*****************************
STATIC FUNCTION BrwDbs( lEdit, lZebra )
*****************************
LOCAL oEdGoto
LOCAL oBrwDb
LOCAL o_Obtn1, o_Obtn2, o_Obtn3, o_Obtn4
LOCAL oTbar
LOCAL nRec := 1
LOCAL nLast := 0

  lZebra := IF(lZebra == NIL, .F., lZebra)
  DBSELECTAR("TSTB")
  nLast := LASTREC()
  dbGoTop()

  INIT DIALOG oDlg TITLE "Browse DataBase" ;
        AT 0,0 SIZE 600, 500 NOEXIT ;
        FONT HFont():Add( 'Arial',0,-13,400,,,) ;
        STYLE WS_DLGFRAME + WS_SYSMENU + DS_CENTER

  IF lEdit
   @ 10 ,10 BROWSE oBrwDb DATABASE SIZE 580, 385  ;
        STYLE  WS_VSCROLL + WS_HSCROLL ;
        AUTOEDIT ;
        APPEND ;
        ON UPDATE {|| oBrwDb:REFRESH() } ;
        ON KEYDOWN {|oBrwDb, nKey| BrowseDbKey(oBrwDb, nKey, @nLast, oLbl2, "") } ;
        ON POSCHANGE {|| BrowseMove(oBrwDb, "NIL", oEdGoto, "Dbs" ) }
  ELSE
   @ 10 ,10 BROWSE oBrwDb DATABASE SIZE 580, 385  ;
        STYLE  WS_VSCROLL + WS_HSCROLL ;
        ON UPDATE {|| oBrwDb:REFRESH() } ;
        ON KEYDOWN {|oBrwDb, nKey| BrowseDbKey(oBrwDb, nKey, @nLast, oLbl2, "") } ;
        ON POSCHANGE {|| BrowseMove(oBrwDb, "NIL", oEdGoto, "Dbs" ) }
  END

   @ 260,410 BUTTON oBtn1 CAPTION "&OK " SIZE 80,26 ;
         ON CLICK {|| hwg_EndDialog()}

   @ 0, 445 PANEL oTbar1 SIZE 600, 26

   @ 17,10 SAY oLbl1 CAPTION "Records :" OF oTbar1 SIZE 70,22

   @ 85,5 OWNERBUTTON o_Obtn1 OF oTbar1 SIZE 20,20     ;
        BITMAP "Home.bmp";// TRANSPARENT COORDINATES 0,2,0,0 ;
        ON CLICK {|| BrowseMove(oBrwDb, "Home", oEdGoto, "Dbs" ) };
        TOOLTIP "First Record"

   @ 105,5 OWNERBUTTON o_Obtn2 OF oTbar1 SIZE 20,20    ;
        BITMAP "Up.bmp";// TRANSPARENT COORDINATES 0,2,0,0 ;
        ON CLICK {|| BrowseMove(oBrwDb, "Up", oEdGoto, "Dbs" ) } ;
        TOOLTIP "Prior"

   @ 130,4 GET oEdGoto VAR nRec OF oTbar1 SIZE 80,22 ;
        MAXLENGTH 09 PICTURE "999999999" ;
        STYLE WS_BORDER + ES_LEFT ;
        VALID {||GoToRec(oBrwDb, @nRec, nLast, "Dbs")}

   @ 270,7 SAY oLbl2 CAPTION " of  " + ALLTRIM(STR(nLast)) OF oTbar1 SIZE 70,22

   @ 215,5 OWNERBUTTON o_Obtn3 OF oTbar1 SIZE 20,20   ;
        BITMAP "Down.bmp";// TRANSPARENT COORDINATES 0,2,0,0 ;
        ON CLICK {|| BrowseMove(oBrwDb, "Down", oEdGoto, "Dbs" ) } ;
        TOOLTIP "Next"

   @ 235,5 OWNERBUTTON o_Obtn4 OF oTbar1 SIZE 20,20   ;
        BITMAP "End.bmp";// TRANSPARENT COORDINATES 0,2,0,0 ;
        ON CLICK {|| BrowseMove(oBrwDb, "End", oEdGoto, "Dbs" ) } ;
        TOOLTIP "Last Record"

        oBrwDb:bcolorSel := x_DARKBLUE
        oBrwDb:alias := 'TSTB'
        oBrwDb:AddColumn( HColumn():New( "Field1" , FieldBlock(Fieldname(1)),"N", 10,02) )
        oBrwDb:AddColumn( HColumn():New( "Field2" , FieldBlock(Fieldname(2)),"C", 11,00) )
        oBrwDb:AddColumn( HColumn():New( "Field3" , FieldBlock(Fieldname(3)),"D", 10,00) )
        oBrwDb:AddColumn( HColumn():New( "Field4" , FieldBlock(Fieldname(4)),"C", 31,00) )
        oBrwDb:AddColumn( HColumn():New( "Field5" , FieldBlock(Fieldname(5)),"C", 05,00) )

        oBrwDb:aColumns[1]:nJusHead := DT_CENTER
        oBrwDb:aColumns[2]:nJusHead := DT_CENTER
        oBrwDb:aColumns[3]:nJusHead := DT_CENTER
        oBrwDb:aColumns[4]:nJusHead := DT_CENTER
        oBrwDb:aColumns[5]:nJusHead := DT_CENTER

        IF lEdit
        oBrwDb:aColumns[1]:lEditable := .T.
        oBrwDb:aColumns[2]:lEditable := .T.
        oBrwDb:aColumns[3]:lEditable := .T.
        oBrwDb:aColumns[4]:lEditable := .T.
        oBrwDb:aColumns[5]:lEditable := .T.
        END

//      {|| IF (nNumber < 0, ;
//       {tColor, bColor, tColorSel, bColorSel} ,;
//       {tColor, bColor, tColorSel, bColorSel}) }

        IF lEdit
          oBrwDb:aColumns[1]:bColorBlock := {|| IF(TSTB->FIELD1 < 0 , ;
           {x_RED, x_WHITE, x_CYAN, x_GRAY} , ;
           {x_BLUE, x_WHITE , x_BLACK, x_YELLOW })}
        ELSE
          oBrwDb:aColumns[1]:bColorBlock := {|| IF(TSTB->FIELD1 < 0 , ;
           {x_RED, x_WHITE, x_CYAN, x_DARKBLUE} , ;
           {x_BLACK, x_WHITE , x_WHITE, x_DARKBLUE })}
          IF lZebra
             FOR nI := 2 TO 5
                oBrwDB:aColumns[nI]:bColorBlock := {|| IF(MOD(oBrwDB:nPaintRow, 2) = 0,;
                      {x_BLACK, x_GRAY, x_CYAN, x_DARKBLUE} , ;
                      {x_BLACK, x_WHITE , x_WHITE, x_DARKBLUE })}
             NEXT
          ENDIF
        END
   oDlg:Activate()

RETURN(NIL)

*******************************************************
STATIC FUNCTION BrowseMove(oBrw, cPar, oEdGoto, cType )
*******************************************************
IF cPar == "Home"
  oBrw:TOP()
ELSEIF cPar == "Up"
  oBrw:LineUp()
ELSEIF cPar == "Down"
  oBrw:LineDown()
ELSEIF cPar == "End"
  oBrw:BOTTOM()
END

IF cType == "Dbs"
  oEdGoto:SetText(oBrw:recCurr)
ELSEIF cType == "Array"
  oEdGoto:SetText(oBrw:nCurrent)
END
Return Nil

*************************************************
STATIC FUNCTION GoToRec(oBrw, nRec, nLast, cType)
*************************************************
IF nRec == 0
   nRec := 1
END

IF nRec > nLast
  nRec := nlast
END

oBrw:TOP()
IF cType == "Dbs"
  dbGoto(nRec)
ELSEIF cType == "Array"
  oBrw:nCurrent := nRec
END
oBrw:Refresh()

hwg_Setfocus(oBrw:handle)

RETURN(.T.)

*************************************************************
STATIC FUNCTION BrowseDbKey(oBrwDb, nKey, nLast, oLbl2, cPar)
*************************************************************
IF nKey == 46   // DEL

ELSEIF nKey == VK_RETURN

END

Return .T.

*************************
STATIC FUNCTION CriaDbf()
*************************
LOCAL Estrutura := {}
LOCAL i := 1
LOCAL nIncrement := 10

  IF ! FILE("TSTBRW.DBF")
     AADD(Estrutura, {"FIELD1", "N", 10, 02})
     AADD(Estrutura, {"FIELD2", "C", 11, 00})
     AADD(Estrutura, {"FIELD3", "D", 08, 00})
     AADD(Estrutura, {"FIELD4", "C", 30, 00})
     AADD(Estrutura, {"FIELD5", "C", 05, 00})

     DBCREATE("TSTBRW.DBF", Estrutura)
     DBCLOSEAREA()
  ENDIF

  DBUSEAREA(.T., "DBFCDX", "TSTBRW", "TSTB")

  For i := 1 to 200
        APPEND BLANK
        IF i == nIncrement
          nIncrement += 10
          FIELD->FIELD1 := -i
        ELSE
          IF i == 1
             FIELD->FIELD1 := -i
          else
             FIELD->FIELD1 := i
          end
        END
        FIELD->FIELD2 := "Field2 " + STRZERO(i,4)
        FIELD->FIELD3 := DATE() + i
        FIELD->FIELD4 := "jgçpqy " + STRZERO(i, 23)
        FIELD->FIELD5 := STRZERO(i, 5)
  Next

RETURN(.T.)

*****************************
STATIC FUNCTION BrwArr(lEdit, lZebra)
****************************
LOCAL oEdGoto
LOCAL oBrwArr
LOCAL o_Obtn1, o_Obtn2, o_Obtn3, o_Obtn4
LOCAL oTbar
LOCAL nRec := 1
LOCAL aArrayTst := Create_Array()
LOCAL nLast := LEN(aArrayTst)
LOCAL nI

  lZebra := IF(lZebra == NIL, .F., lZebra)
  INIT DIALOG oDlg TITLE "Browse Array" ;
        AT 0,0 SIZE 600, 500 NOEXIT ;
        FONT HFont():Add( 'Arial',0,-13,400,,,) ;
        STYLE WS_DLGFRAME + WS_SYSMENU + DS_CENTER

  IF lEdit
   @ 10 ,10 BROWSE oBrwArr ARRAY SIZE 580, 385  ;
        STYLE  WS_VSCROLL + WS_HSCROLL ;
        AUTOEDIT ;
        APPEND ;
        ON UPDATE {|| oBrwArr:REFRESH() } ;
        ON KEYDOWN {|oBrwArr, nKey| BrowseDbKey(oBrwArr, nKey, @nLast, oLbl2, "") } ;
        ON POSCHANGE {|| BrowseMove(oBrwArr, "NIL", oEdGoto, "Array" ) }
  ELSE
   @ 10 ,10 BROWSE oBrwArr ARRAY SIZE 280, 385  ;
        STYLE  WS_VSCROLL + WS_HSCROLL ;
        ON UPDATE {|| oBrwArr:REFRESH() } ;
        ON KEYDOWN {|oBrwArr, nKey| BrowseDbKey(oBrwArr, nKey, @nLast, oLbl2, "") } ;
        ON POSCHANGE {|| BrowseMove(oBrwArr, "NIL", oEdGoto, "Array" ) }
  END

   @ 260,410 BUTTON oBtn1 CAPTION "&OK " SIZE 80,26 ;
         ON CLICK {|| hwg_EndDialog()}

   @ 0, 445 PANEL oTbar1 SIZE 600, 26

   @ 17,10 SAY oLbl1 CAPTION "Elements :" OF oTbar1 SIZE 70,22

   @ 85,5 OWNERBUTTON o_Obtn1 OF oTbar1 SIZE 20,20     ;
        BITMAP "Home.bmp";// TRANSPARENT COORDINATES 0,2,0,0 ;
        ON CLICK {|| BrowseMove(oBrwArr, "Home", oEdGoto, "Array" ) };
        TOOLTIP "First Record"

   @ 105,5 OWNERBUTTON o_Obtn2 OF oTbar1 SIZE 20,20    ;
        BITMAP "Up.bmp";// TRANSPARENT COORDINATES 0,2,0,0 ;
        ON CLICK {|| BrowseMove(oBrwArr, "Up", oEdGoto, "Array" ) } ;
        TOOLTIP "Prior"

   @ 130,4 GET oEdGoto VAR nRec OF oTbar1 SIZE 80,22 ;
        MAXLENGTH 09 PICTURE "999999999" ;
        STYLE WS_BORDER + ES_LEFT ;
        VALID {||GoToRec(oBrwArr, @nRec, nLast, "Array")}

   @ 270,7 SAY oLbl2 CAPTION " of  " + ALLTRIM(STR(nLast)) OF oTbar1 SIZE 70,22

   @ 215,5 OWNERBUTTON o_Obtn3 OF oTbar1 SIZE 20,20   ;
        BITMAP "Down.bmp";// TRANSPARENT COORDINATES 0,2,0,0 ;
        ON CLICK {|| BrowseMove(oBrwArr, "Down", oEdGoto, "Array" ) } ;
        TOOLTIP "Next"

   @ 235,5 OWNERBUTTON o_Obtn4 OF oTbar1 SIZE 20,20   ;
        BITMAP "End.bmp";// TRANSPARENT COORDINATES 0,2,0,0 ;
        ON CLICK {|| BrowseMove(oBrwArr, "End", oEdGoto, "Array" ) } ;
        TOOLTIP "Last Record"

       hwg_CREATEARLIST( oBrwArr, aArrayTst )

        oBrwArr:bcolorSel := x_BLUE
        oBrwArr:freeze    := 1
        oBrwArr:lAdjRight := .F.

        oBrwArr:aColumns[1]:length := 10
        oBrwArr:aColumns[2]:length := 11
        oBrwArr:aColumns[3]:length := 10
        oBrwArr:aColumns[4]:length := 10
        oBrwArr:aColumns[5]:length := 05

        oBrwArr:aColumns[1]:heading := "Column[1]"
        oBrwArr:aColumns[2]:heading := "Column[2]"
        oBrwArr:aColumns[3]:heading := "Column[3]"
        oBrwArr:aColumns[4]:heading := "Column[4]"
        oBrwArr:aColumns[5]:heading := "Column[5]"

        oBrwArr:aColumns[1]:nJusHead := DT_CENTER
        oBrwArr:aColumns[2]:nJusHead := DT_CENTER
        oBrwArr:aColumns[3]:nJusHead := DT_CENTER
        oBrwArr:aColumns[4]:nJusHead := DT_CENTER
        oBrwArr:aColumns[5]:nJusHead := DT_CENTER

        IF lEdit
           oBrwArr:aColumns[1]:lEditable := .T.
           oBrwArr:aColumns[2]:lEditable := .T.
           oBrwArr:aColumns[3]:lEditable := .T.
           oBrwArr:aColumns[4]:lEditable := .T.
           oBrwArr:aColumns[5]:lEditable := .T.
        END

//      {|| IF (nNumber < 0, ;
//       {tColor, bColor, tColorSel, bColorSel} ,;
//       {tColor, bColor, tColorSel, bColorSel}) }
       IF lEdit
       oBrwArr:aColumns[1]:bColorBlock := {|n| IF(aArrayTst[oBrwArr:nCurrent][1] < 0 , ;
           {x_RED, x_WHITE, x_CYAN, x_BLUE} , ;
           {x_BLUE, x_WHITE , x_WHITE, x_BLUE })}
       ELSE
       oBrwArr:aColumns[1]:bColorBlock := {|n| IF(aArrayTst[oBrwArr:nCurrent][1] < 0 , ;
           {x_RED, x_WHITE, x_CYAN, x_DARKBLUE} , ;
           {x_BLUE, x_WHITE , x_WHITE, x_BLUE })}
          IF lZebra
             FOR nI := 2 TO 5
                oBrwArr:aColumns[nI]:bColorBlock := {|| IF(MOD(oBrwArr:nCurrent, 2) = 0,;
                       {x_BLACK, x_GRAY, x_CYAN, x_DARKBLUE} , ;
                       {x_BLACK, x_WHITE , x_WHITE, x_DARKBLUE })}
             NEXT
          ENDIF
       END

/*
        oBrwDb:aColumns[1]:bColorBlock := {|| IF(TSTB->FIELD1 < 0 , ;
         {x_VERMELHO, x_BRANCO, x_CYAN, x_CINZA50} , ;
         {x_AZUL, x_BRANCO , x_LARANJA, x_AMARELO })}
*/
   oDlg:Activate()

RETURN(.T.)

******************************
STATIC FUNCTION Create_Array()
******************************
LOCAL i := 1
LOCAL n := 1
LOCAL nIncrement := 10
LOCAL aArray := {}

  For i := 1 to 200
    n := i
    IF i == nIncrement
       nIncrement += 10
       n := -i
    ELSE
       IF i == 1
          n := -i
       ELSE
             n := i
       END
    END
    AADD(aArray, { n, STRZERO(i,4), DATE() + i, "jgçpqy " + STRZERO(i, 23), STRZERO(i, 5)})
  Next

RETURN(aArray)

/* -------------------------------------------------------------------------- */

#Ifdef __XHARBOUR__
 #XTRANSLATE HB_PVALUE(<var>)  => PVALUE(<var>)
#endif

FUNCTION MsgD( cV1, cV2, cV3, cV4, cV5, cV6, cV7, cV8, cV9, cV10 )
   LOCAL nI, nLen := PCOUNT(), cVar := ""
   FOR nI := 1 TO nLen
       IF HB_PVALUE(nI) == NIL
         cVar += "NIL"
       ELSEIF VALTYPE(HB_PVALUE(nI)) == "B"
         cVar += "CODEBLOCK"
       ELSEIF VALTYPE(HB_PVALUE(nI)) == "N"
         cVar += STR(HB_PVALUE(nI))
       ELSEIF VALTYPE(HB_PVALUE(nI)) == "D"
         cVar += DTOS(HB_PVALUE(nI))
       ELSEIF VALTYPE(HB_PVALUE(nI)) == "L"
         cVar += IF(HB_PVALUE(nI), ".T.", ".F.")
       ELSEIF VALTYPE(HB_PVALUE(nI)) == "C"
         cVar += HB_PVALUE(nI)
       ENDIF
       cVar += "/"
   NEXT
   hwg_Msginfo(LEFT(cVar, LEN(cVar) - 1))
RETURN NIL


Hwgui 2.22 build 2

Enviado: 25 Dez 2018 10:00
por alxsts
Olá!

Só um palpite: não teria que colocar "#include hwgui.ch" no código acima?