Hwgui GTHWG.

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8242
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 6 vezes
Curtiram: 1 vez

Hwgui GTHWG.

Mensagem por Itamar M. Lins Jr. »

Olá!
Estava analisando essa biblioteca da Hwgui, que mistura modo console dentro da tela Hwgui.
Vejam que interessante.
2026-08-26_23-02-15.png
2026-08-26_23-02-15.png (63.78 KiB) Exibido 48 vezes
Ela desenha a tela console dentro de uma tela Janela (Window) da Hwgui.
Vou usar esse recurso para migrar um sistema inteiro para Hwgui. Vou fazer os testes e posto aqui os resultados.
Detalhe 100% Unicode + 64Bits + Clang ou GCC. Mas pretendo usar Clang agora como padrão.
Olhem o código e vejam como é familiar, mudei a função para passar linha, coluna da imagem.
Entendam o seguinte a tela DENTRO da Window Main(principal) é GTHWG tipo GTWIN, GTWVT, GTWVW.
Precisa desenhar pensando nisso! A resolução do monitor A jenela MAin, para pode usar os recursos da Hwgui e a tela CONSOLE.

Código: Selecionar todos

/*
 * $Id: test1.prg 3429 2023-12-22 10:59:13Z josequintas $
 *
 * GTHWG, Video subsystem, based on HwGUI
 *
 * test1.prg - simple test program
 *
 * Copyright 2021 - 2023 Alexander S.Kresin <alex@kresin.ru>
 * www - http://www.kresin.ru
 */

REQUEST HB_GT_HWGUI
REQUEST HB_GT_HWGUI_DEFAULT

REQUEST HB_CODEPAGE_RU866
REQUEST HB_CODEPAGE_UTF8

#include "hbgtinfo.ch"
#include "inkey.ch"

STATIC shadow1

FUNCTION Main( _par1 )

   LOCAL choice, frame, nw, nh

   ( _par1 )
   SET DATE BRITISH
   SET WRAP ON
   SET SCORE OFF
   hb_cdpSelect( "RU866" )
   Set ( _SET_EVENTMASK, INKEY_ALL - INKEY_MOVE + HB_INKEY_GTEVENT )

   CreateWindow()

   SetMode( 30,100 )
   nw := Min( 1920, hb_gtinfo( HB_GTI_DESKTOPWIDTH ) ) - 20
   nh := Min( 1080, hb_gtinfo( HB_GTI_DESKTOPHEIGHT ) ) - 84
   hb_gtinfo( HB_GTI_FONTWIDTH, Int( nw / ( MaxCol() + 1 ) ) )
   hb_gtinfo( HB_GTI_FONTSIZE, Int( nh / ( MaxRow() + 1 ) ) )

   frame   := Replicate( Chr( 219 ), 9 )
   shadow1 := Replicate( Chr( 220 ), 9 )

   choice := 1
   DO WHILE choice != 3 .AND. choice != 0
      SET COLOR TO N+/N
      @  0,  0, 29, 99 BOX frame
      @  2,  7, 2, 30 BOX shadow1
      @  1, 30 SAY Chr( 223 )
      @  4,  7, 4, 30 BOX shadow1
      @  3, 30 SAY Chr( 223 )
      @  6,  7, 6, 30 BOX shadow1
      @  5, 30 SAY Chr( 223 )
      DO ZAGOL
      SET COLOR TO B/W,+GR/B
      @ 01, 06 PROMPT "   GET SYSTEM DIALOG    "
      @ 03, 06 PROMPT "    SHOW SCREEN INFO    "
      @ 05, 06 PROMPT "        E X I T         "
      MENU TO choice

      DO CASE
      CASE choice = 1
         DO PGM1
      CASE choice = 2
         DO PGM2
      ENDCASE
   ENDDO

   SET COLOR TO W/N
   @  0,  0 CLEAR TO 29, 99

   gthwg_CloseWindow()

   RETURN Nil

STATIC PROCEDURE ZAGOL

   DO SHADOW WITH 04, 63, 13, 94
   SET COLOR TO +GR/B
   @  4, 63 CLEAR TO 13, 94
   @  4, 63 TO 13, 94
   @  5, 70 SAY "GTHWGUI DEMO PROGRAM"
   @  6, 75 SAY "Version 1.1"
   @ 09, 64 TO 09, 93
   SET COLOR TO +RB/B

   RETURN

STATIC PROCEDURE SHADOW( y1, x1, y2, x2 )

   SET COLOR TO N+/N
   @ y2 + 1, x1 + 1, y2 + 1, x2 + 1 BOX shadow1
   @ y1 + 1, x2 + 1 CLEAR TO y2, x2 + 1
   @ y1, x2 + 1 SAY Chr( 223 )

   RETURN

STATIC PROCEDURE PGM1

   LOCAL bufsc := SaveScreen( 6, 10, 14, 74 )
   LOCAL x1, x2, x3, GetList := {}

   @ 6, 10 CLEAR TO 14, 74
   @ 6, 10 TO 14,74

   gthwg_PaintCB( , "../../../image/hwgui.bmp",7,50 )

   x1 := x2 := x3 := Space( 32 )
   @  8, 12  SAY "1:" GET x1
   @  10, 12 SAY "2:" GET x2
   @  12, 12 SAY "3:" GET x3
   READ

   gthwg_PaintCB()
   RestScreen( 6, 10, 14, 74, bufsc )

   RETURN

STATIC PROCEDURE PGM2

   LOCAL bufsc := SaveScreen( 6, 20, 15, 44 )

   @ 6, 20 CLEAR TO 15, 44
   @ 6, 20 TO 15, 44

   @  08, 22 SAY "Rows: " + Ltrim( Str( MaxRow() ) )
   @  09, 22 SAY "Cols: " + Ltrim( Str( MaxCol() ) )
   @  10, 22 SAY "Height: " + Ltrim( Str( hb_gtinfo( HB_GTI_SCREENHEIGHT ) ) )
   @  11, 22 SAY "Width: " + Ltrim( Str( hb_gtinfo( HB_GTI_SCREENWIDTH ) ) )
   @  13, 22 SAY "Press any key"
   Inkey(0)

   RestScreen( 6, 20, 15, 44, bufsc )

   RETURN

#include "hwgui.ch"

STATIC FUNCTION CreateWindow()

   LOCAL oWnd := gthwg_CreateMainWindow( "GT HwGUI Test" )

   MENU OF oWnd
      MENU TITLE "&File"
         MENUITEM "&New" ACTION hwg_MsgInfo( "New!" )
         SEPARATOR
         MENUITEM "&Exit" ACTION oWnd:Close()
      ENDMENU
      MENU TITLE "&Help"
         MENUITEM "&About" ACTION hwg_MsgInfo( hwg_version()+Chr(13)+Chr(10)+"gt: " + hb_gtVersion(),"About" )
      ENDMENU
   ENDMENU

   RETURN oWnd

FUNCTION gthwg_PaintCB( hDC, cFileName, nRow, nCol )

   LOCAL aBmpSize
   STATIC hImage, img_x1, img_y1, img_width, img_height

   IF Empty( hDC )
      IF Empty( cFileName )
         gthwg_paint_SetCallback()
         IF !Empty( hImage )
            hwg_Deleteobject( hImage )
            hImage := Nil
         ENDIF
      ELSE
         hImage := hwg_OpenImage( cFileName )
         IF !Empty( hImage )
            // If coordinates are provided, use them; otherwise keep old behavior
            IF nRow != NIL .AND. nCol != NIL
               img_x1 := Int( hb_gtinfo( HB_GTI_SCREENWIDTH ) / MaxCol() ) * nCol
               img_y1 := Int( hb_gtinfo( HB_GTI_SCREENHEIGHT ) / MaxRow() ) * nRow
            ELSE
               img_x1 := Int( hb_gtinfo( HB_GTI_SCREENWIDTH ) / MaxCol() ) * 50
               img_y1 := Int( hb_gtinfo( HB_GTI_SCREENHEIGHT ) / MaxRow() ) * 8
            ENDIF

            aBmpSize  := hwg_Getbitmapsize( hImage )
            img_width := aBmpSize[ 1 ]
            img_height := aBmpSize[ 2 ]
            gthwg_paint_SetCallback( "GTHWG_PAINTCB" )
            hwg_Invalidaterect( hb_gtinfo(HB_GTI_WINHANDLE), 0 )
         ENDIF
      ENDIF
   ELSEIF !Empty( hImage )
      hwg_Drawbitmap( hDC, hImage,, img_x1, img_y1, img_width, img_height )
   ENDIF

   RETURN Nil
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20564
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 3 vezes

Re: Hwgui GTHWG.

Mensagem por JoséQuintas »

Já falamos muito disso, é só converter linha/coluna pra pixel.
LÓGICO, considerando uma fonte fixa pra esse cálculo.
Teoricamente, a tela console é isso.
O funcionamento pra "console" e gui não podem ser iguais, e isso deve limitar as possibilidades.

Estranhei:
o fonte exemplo está com meu nome na criação
Não reparei nisso na época.

Código: Selecionar todos

/*
 * $Id: test1.prg 3429 2023-12-22 10:59:13Z josequintas $
 
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8242
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 6 vezes
Curtiram: 1 vez

Re: Hwgui GTHWG.

Mensagem por Itamar M. Lins Jr. »

Olá!
É o arquivo hbp... Que tem isso, vou remover...
Mas neste caso ai, vc deve ter corrigido um Warning... Ou diagramação.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20564
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 3 vezes

Re: Hwgui GTHWG.

Mensagem por JoséQuintas »

Naquela época criei como se fosse essa GT mas usando hwgui.
Foi com base na GTWVG, depois veio essa gt pra HWGUI.
Talvez seja o mesmo programa exemplo da época, por isso ficou meu nome.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder