Hwgui GTHWG.

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 8229
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 17 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.
Responder