Clipper On Line • Ver Tópico - Iniciando com HWGUI
Mudar para estilo Clássico
Projeto HwGui - Biblioteca visual para Harbour/xHarbour
Postar uma resposta

Iniciando com HWGUI

24 Set 2020 10:12

Preciso de ajuda.
Vou precisar de window e vou precisar da main hwgui.

Preciso de uma main invisivel, e talvez que fique recebendo e executando codeblocks
Isso é possível?

Iniciando com HWGUI

24 Set 2020 10:24

Talvez até vocês usem isso numa tela de login... ou não?

Iniciando com HWGUI

24 Set 2020 10:56

HSayIcon ainda não está legal, tá faltando fundo transparente.

hwgui.png


era pra ter ficado assim

icon.png

Iniciando com HWGUI

24 Set 2020 12:18

Ola!

Código:
#xcommand @ <x>,<y> BITMAP [ <oBmp> SHOW ] <bitmap> ;
            [<res: FROM RESOURCE>]     ;
            [ OF <oWnd> ]              ;
            [ ID <nId> ]               ;
            [ SIZE <width>, <height> ] ;
            [ BACKCOLOR <bcolor> ]     ;
            [ STRETCH <nStretch>]      ;
            [<lTransp: TRANSPARENT> [COLOR  <trcolor> ]] ;
            [ ON INIT <bInit> ]        ;
            [ ON SIZE <bSize> ]        ;
            [ ON CLICK <bClick> ]      ;
            [ ON DBLCLICK <bDblClick> ];
            [ TOOLTIP <ctoolt> ]       ;


Use esse pq tem transparência. (ICON/BMP) herdam hSayImage

Saudações,
Itamar M. Lins Jr.

Iniciando com HWGUI

25 Set 2020 18:43

Ola!
Achei o browse com cores, o browse zebrado, e até um browse ADO com meu nome kkkkk

Já está no SVN a opção para ADO... Vc não está lendo as postagens.
Já tinha dito que na pasta samples tem exemplos.
Tem uns bugs em alguns exemplos. Mas isso quando o pessoal voltar a mexer vou avisando para eles.

Saudações,
Itamar M. Lins Jr.

Iniciando com HWGUI

27 Set 2020 14:12

Tô chegando lá....
Ao invés de caçar manual.....

hbmk2 -doc hwindow

SYNTAX
------
INIT WINDOW <oWnd>
APPNAME <appname> TITLE <cTitle> AT <x>, <y> SIZE <nWidth>, <nHeight> ICON <ico>
SYSCOLOR <clr> COLOR <bColor> BACKGROUND BITMAP <oBmp> STYLE <nStyle> EXCLUDE <nExclude>
FONT <oFont> MENU <cMenu> MENUPOS <nPos>
ON INIT <bInit> ON SIZE <bSize> ON PAINT <bPaint> ON GETFOCUS <bGfocus>
ON LOSTFOCUS <bLfocus> ON OTHER MESSAGES <bOther> ON EXIT <bExit>
HELP <cHelp> HELPID <nHelpId>

SEEALSO
-------
hdialog

Iniciando com HWGUI

28 Set 2020 17:51

Bom....

Quero fazer igual console.

Já tenho a tela do aplicativo inteiro, pra ser usada por herança.

Agora é a vez do browse: um browse único pro aplicativo inteiro, ou dois.

Vão ver o que um programador console consegue fazer em GUI ! kkkk

Iniciando com HWGUI

28 Set 2020 18:08

Vai ficar quase igual em HWGUI.

Código:

#include "hbclass.ch"
#include "inkey.ch"

MEMVAR m_Prog

PROCEDURE pBancoCCusto

   LOCAL oFrm := JPBACCUSTOClass():New()

   IF ! AbreArquivos( "jpempresa", "jptabel", "jpconfi" )
      RETURN
   ENDIF
   oFrm:Execute()

   RETURN

CREATE CLASS JPBACCUSTOClass INHERIT FrmCadastroClass

   VAR axKeyValue INIT { 0 }
   VAR cDataTable INIT "JPBACCUSTO"
   VAR cDataField INIT "IDBACCUSTO"
   VAR cnSQL      INIT ADOClass():New( AppConexao() )
   METHOD Especifico( lExiste )
   METHOD TelaDados( lEdit )
   METHOD GridSelection()

   ENDCLASS

METHOD GridSelection() CLASS JPBACCUSTOClass

   LOCAL oTBrowse, bCode
   LOCAL cnSQL := ADOClass():New( AppConexao() )

   WITH OBJECT cnSQL
      :cSQL := "SELECT IDBACCUSTO, CUCCUSTO, CUGRUPO FROM JPBACCUSTO ORDER BY CUCCUSTO"
      :Execute()
      oTBrowse := { ;
         { "CCUSTO", { || :String( "CUCCUSTO", 10 ) } }, ;
         { "GRUPO",  { || :String( "CUGRUPO", 10 ) } }, ;
         { "#ID",    { || Str( :Number( "IDBACCUSTO" ), 6 ) } } }
      IF "ID" $ Upper( ReadVar() )
         bCode := { || Ltrim( Str( :Number( "IDBACCUSTO" ) ) ) }
      ELSE
         bCode := { || :String( "CUCCUSTO" ) }
      ENDIF
      BrowseADO( cnSQL, oTBrowse, "CUCCUSTO,CUGRUPO", bCode )
      :CloseRecordset()
   ENDWITH

   RETURN NIL

METHOD Especifico( lExiste ) CLASS JPBACCUSTOClass

   LOCAL GetList := {}, nIdbaCCusto := 0

   IF ::cOpc != "I"
      nIdBaCCusto := ::axKeyValue[ 1 ]
      @ Row() + 1, 20 GET nIdbaCCusto PICTURE "@K 999999" VALID nIdbaCCusto > 0
      Mensagem( "Digite código para cadastro, F9 Pesquisa, ESC sai" )
      READ
      Mensagem()
      IF LastKey() == K_ESC .OR. nidbaCCusto < 0
         RETURN .F.
      ENDIF
      IF ! ::EspecificoExiste( lExiste, ADORecCount( "JPBACCUSTO", "IDBACCUSTO = " + NumberSQL( nidBaCCusto ) ) == 0 )
         RETURN .F.
      ENDIF
   ENDIF
   ::axKeyValue := { nIdBaCCusto }

   RETURN .T.

METHOD TelaDados( lEdit ) CLASS JPBACCUSTOClass

   LOCAL GetList := {}, nidbaCCusto, mcuGrupo, mcuCCusto
   LOCAL cnSQL     := ADOClass():New( AppConexao() )

   nIdBaCCusto := ::axKeyValue[ 1 ]
   WITH OBJECT cnSQL
      :cSQL := "SELECT * FROM JPBACCUSTO WHERE IDBACCUSTO = " + NumberSQL( nIdbaCCusto )
      :Execute()
      mcuGrupo  := :String( "CUGRUPO", 10 )
      mcuCCusto := :String( "CUCCUSTO", 10 )
      :CloseRecordset()
   ENDWITH

   hb_Default( @lEdit, .F. )

   DO WHILE .T.
      ::ShowTabs()
      DO CASE
      CASE ::nNumTab == 1
         @ Row() + 1, 1 SAY "#ID..............:" GET nidbaCCusto PICTURE "999999" WHEN .F.
         @ Row() + 2, 1 SAY "Centro de Custo..:" GET mcuCCusto PICTURE "@K!"
         @ Row() + 2, 1 SAY "Grupo de CCusto..:" GET mcuGrupo  PICTURE "@K!"
      ENDCASE
      //SetPaintGetList( GetList )
      IF lEdit
         Mensagem( "Digite campos, F9 Pesquisa, ESC Sai" )
         READ
         Mensagem()
      ELSE
         CLEAR GETS
         EXIT
      ENDIF
      ::nNumTab += 1
      IF LastKey() == K_ESC .OR. ::nNumTab > 1
         EXIT
      ENDIF
   ENDDO
   IF ! lEdit .OR. LastKey() == K_ESC
      RETURN NIL
   ENDIF
   WITH OBJECT cnSQL
      :QueryCreate()
      :QueryAdd( "CUCCUSTO", mcuCCusto )
      :QueryAdd( "CUGRUPO",  mcuGrupo )
      IF ::cOpc == "I"
         :QueryAdd( "CUINFINC", LogInfo() )
         nidbaCCusto := :QueryExecuteInsert( "JPBACCUSTO" )
         ::axKeyValue := { nidbaCCusto }
      ELSE
         :QueryAdd( "CUINFALT", LogInfo() )
         :QueryExecuteUpdate( "JPBACCUSTO", "IDBACCUSTO= " + NumberSQL( nidbaCCusto ) )
      ENDIF
   ENDWITH

   RETURN NIL

FUNCTION ValidBancarioCCusto( cResumo )

   LOCAL lOk := .T.

   DO CASE
   CASE cResumo == Pad( "APLIC", 10 )
   CASE cResumo == Pad( "NENHUM", 10 )
   CASE Empty( cResumo ) .AND. m_Prog != "PBANCOGRAFICOMES"
   CASE ADORecCount( "JPBACCUSTO", "CUCCUSTO= " + StringSQL( cResumo ) ) == 0
      MsgWarning( "Despesa/Receita não cadastrada!" )
      lOk := .F.
   ENDCASE

   RETURN lOk

Iniciando com HWGUI

28 Set 2020 19:56

Programar igual GTWVG é lindo....

Pensei que ia demorar mais.
Acrescentei funcionalidade.
Mas sem fonte, o módulo usa a programação default.

Código:
FUNCTION PTESHWGUI( cModule, cTitulo )

   LOCAL oFrm := UmaTelaClass():New( cTitulo, cModule, "CIAEPU+-", "d:\jpa\cordeiro\jpcidade" )
   oFrm:Execute()

   RETURN Nil


https://youtu.be/IkKPkP6SKCo

Iniciando com HWGUI

28 Set 2020 21:25

Pra quem quiser brincar.
Fonte, ícones, manifest, EXE assinado...
Precisa chamar o EXE passando o nome de um DBF.
Ainda não sei colocar mensagem caso falte o nome do arquivo.

Como eu já disse por aqui, meus ícones são multiresolução, e o tamanho é grande, por isso o ZIP e o EXE são grandes.
Um único fonte, e o EXE ficou com quase 1MB compactado.

Acho que a parte interessante é o uso de classe, e não os recursos de hwgui, porque não tem quase nada de hwgui, só básico, só o que está no vídeo.
o fonte é "pelado", então deve usar DBFNTX. e não deve servir dbf com memo FPT ou campo lógico.
"pelado" significa que tirei do aplicativo e ficou sem a parte que configura set date, rdd, etc.

Só não esqueçam que precisa chamar passando o nome de um DBF qualquer

test.zip
(1.14 MiB) Baixado 52 vezes

Iniciando com HWGUI

13 Out 2020 20:14

Melhorou, poluição movida pra "poluição sobre lib gráfica", no bate papo.

Iniciando com HWGUI

14 Out 2020 11:25

Vou dar uma fuçada, pra ver como é, embora eu use MiniGUI...
Postar uma resposta