Página 1 de 1

Posição TELA CONSOLE

Enviado: 12 Ago 2021 16:11
por Marcio-MMM
Olá.
Recentemente converti uma aplicação do Clipper para Harbour. Eu estou iniciando no Harbour.
O cliente pediu para posicionar a tela CONSOLE no canto com um tamanho definido. Olhei o HBGTINFO e falei "OK"
Mas teoria e prática são diferentes.... não funcionou comigo.... rs...
Não mantém o tamanho definido e não posiciona... Ele centraliza e põe um tamanho padrão (será?)
Alguém pode ver onde estou errando?

TELA.PRG

Código: Selecionar todos

***** prog de testes
#include "minigui.ch"  
#include "hbgtinfo.ch"

Function Main()

	LOCAL aTMP := {}
	LOCAL aPOS := {}
	LOCAL cTitle :=  "Teste Posicionamento TELA Console"

	*** Tamanho
	aAdd(aTMP,500)
	aAdd(aTMP,500)

	*** Posicao
	aAdd(aPOS,10)
	aAdd(aPOS,10)

        HB_GTSYS()

        pNewGT := hb_gtCreate( "WVG" )
        pOldGT := hb_gtSelect( pNewGT )

        hb_gtInfo( HB_GTI_WINTITLE, cTitle  )        
	hb_gtInfo( HB_GTI_FONTNAME , "Lucida Console" )
	hb_gtInfo( HB_GTI_RESIZEMODE, HB_GTI_RESIZEMODE_FONT )   

	****** Tamanho *******
	hb_gtInfo( HB_GTI_SCREENHEIGHT, aTMP[1] )
	hb_gtInfo( HB_GTI_SCREENWIDTH, aTMP[2] )

	hb_gtInfo( HB_GTI_SCREENSIZE, aTMP )


	***** Posicao *****
	hb_gtInfo( HB_GTI_SETPOS_XY, aPOS )
	** Tambem tentei 
	**	hb_gtInfo( HB_GTI_SETPOS_ROWCOL, aPOS )


	SetMode(25,80)  && Tamanho da Janela de Texto

	@ 0,0 to 24,79
	@ 10,10 say cTitle
	inkey(0)

RETURN Nil

TELA.HBP

Código: Selecionar todos

-otela
-incpath=c:\minigui\include;c:\minigui\harbour\include;C:\MiniGUI\Harbour\contrib\gtwvg
-Lc:\minigui\lib;c:\minigui\harbour\lib
-lminigui

C:\MiniGUI\Harbour\contrib\hbct\hbct.hbc
C:\MiniGUI\Harbour\contrib\gtwvg\gtwvg.hbc
tela.prg 

Posição TELA CONSOLE

Enviado: 12 Ago 2021 16:32
por Itamar M. Lins Jr.
Olá!
Tá usando MINIGUI ou WVG ?
Removi a referencia da MINIGUI e coloquei um CREAR SCREEN ali.

Código: Selecionar todos

***** prog de testes
#include "hbgtinfo.ch"

Function Main()

   LOCAL aTMP := {}
   LOCAL aPOS := {}
   LOCAL cTitle :=  "Teste Posicionamento TELA Console"

   *** Tamanho
   aAdd(aTMP,500)
   aAdd(aTMP,500)

   *** Posicao
   aAdd(aPOS,10)
   aAdd(aPOS,10)

        HB_GTSYS()

        pNewGT := hb_gtCreate( "WVG" )
        //pOldGT := hb_gtSelect( pNewGT )

        hb_gtInfo( HB_GTI_WINTITLE, cTitle  )        
   hb_gtInfo( HB_GTI_FONTNAME , "Lucida Console" )
   hb_gtInfo( HB_GTI_RESIZEMODE, HB_GTI_RESIZEMODE_FONT )   

   clear screen 

   ****** Tamanho *******
   hb_gtInfo( HB_GTI_SCREENHEIGHT, aTMP[1] )
   hb_gtInfo( HB_GTI_SCREENWIDTH, aTMP[2] )

   hb_gtInfo( HB_GTI_SCREENSIZE, aTMP )


   ***** Posicao *****
   hb_gtInfo( HB_GTI_SETPOS_XY, aPOS )
   ** Tambem tentei 
   **   hb_gtInfo( HB_GTI_SETPOS_ROWCOL, aPOS )


   SetMode(25,80)  && Tamanho da Janela de Texto

   @ 0,0 to 24,79
   @ 10,10 say cTitle
   inkey(0)

RETURN Nil
Ficou aqui uma tela, mas para colocar da forma que vc quer falta colocar no hbmk2 meu.prg -gtwvg
Da forma que está, vc esta usando GTWIN.

Tem que usar os comando da WVG. Desenhar a DIALOG, etc... Acredito que seja isso, senão assume o mesmo comportamento a GTWIN.

Saudações,
Itamar M. Lins Jr.

Posição TELA CONSOLE

Enviado: 12 Ago 2021 17:18
por Marcio-MMM
Oi Itamar.

Grato pela resposta... Deu um norte...

Duas considerações:

1) Estou usando MINIGUI (e nem sei se isso é bom!) e também WVG ... Por isso, tirar a referência do minigui é inviável para o resto da aplicação (tentei e realmente deu um montão de erros na compilação).
Estou usando uma Janela GUI para pedir uma senha de acesso, depois uma janela GUI (com menu) para o usuário... Ao selecionar, abrir janelas CONSOLEs com os PRGs em Clipper, usando basicamente isso:
#include "minigui.ch"
#include "hbgtinfo.ch"
#include "wvtwin.ch"
#include "hbgtwvg.ch"
#include "wvgparts.ch"
#include "hbcompat.ch"
#include "winprint.ch"
(migrarei uma a uma, com o tempo). Alguma dica para "começar certo" ???


2) Mesmo no seu "meu.prg" usando apenas "hbmk2 meu.prg -gtwvg", compilou, mas respondeu somente ao tamanho. O posicionamento da janela CONSOLE continua centralizada, mesmo com os "hb_gtInfo( HB_GTI_SETPOS_XY, aPOS ) ou hb_gtInfo( HB_GTI_SETPOS_ROWCOL, aPOS )" . A ideia é abrir tal janela CONSOLE na posição 0,0 do área do desktop.

Grato pela paciência com o "aprendiz-iniciante-imberbe"... rs

Posição TELA CONSOLE

Enviado: 12 Ago 2021 17:48
por Itamar M. Lins Jr.
Olá!
Todo nós somos aprendizes.
Minigui não tem nada a ver com o que vc está querendo.
Pq vc usa a IDE da Minigui, e vem tudo junto no pacote, Harbour+GCC+BCC vai depender ai onde baixou.
Já vem tudo prontinho, mas infelizmente amarrado na Minigui que é uma LIB gráfica.

Código: Selecionar todos

// GTWVT Console GUI Interface
//
// Copyright (c) Pritpal Bedi <pritpal@vouchcac.com>

#require "gtwvg"

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

#define IMAGE_VOUCH                hb_DirBase() + "vouch1.bmp"
#define IMAGE_BROWSE               hb_DirBase() + "v_browse.ico"
#define IMAGE_VR                   hb_DirBase() + "vr_1.ico"
#define IMAGE_NOTES                hb_DirBase() + "v_notes.ico"
#define IMAGE_TOOLS                hb_DirBase() + "v_tools.ico"
#define IMAGE_HELP                 hb_DirBase() + "v_notes.ico"

MEMVAR GetList

PROCEDURE Main()

   LOCAL aPaint

#if defined( __HBSCRIPT__HBSHELL ) .AND. defined( __PLATFORM__WINDOWS )
   hbshell_gtSelect( "GTWVG" )
#endif

   Set( _SET_DATEFORMAT, "yyyy-mm-dd" )

   Set( _SET_EVENTMASK, INKEY_ALL + HB_INKEY_GTEVENT )

   wvt_SetGUI( .T. )
   wvt_SetFont( "Courier New", 18, 0, 0 )
   wvt_SetMouseMove( .T. )

   SetColor( "N/W" )
   CLS
   wvt_ShowWindow( SW_RESTORE )
   Wvt_SetTitle( "Harbour's GTWVG Demo ( Simplified )" )
   wvt_SetIcon( hb_DirBase() +  "vr_1.ico" )

   SetGT( 1, hb_gtSelect() )

   aPaint := {}

   AAdd( aPaint, { "Label", {|| wvt_DrawLabel( 1, 40, "Harbour Console GUI Demo", 6, , RGB( 255, 255, 255 ), RGB( 198, 198, 198 ), "Arial", 26, , , , , .T., .T. ) }, { WVT_BLOCK_LABEL, 1, 10, 3, 50 } } )
   AAdd( aPaint, { "Box_1", {|| wvt_DrawBoxRaised( 4, 4, 20, 75 ) }, { WVT_BLOCK_BOX, 4, 4, 20, 75 } } )
   AAdd( aPaint, { "Box_2", {|| wvt_DrawBoxRecessed( 7, 61, 13, 70 ) }, { WVT_BLOCK_BOX, 7, 61, 13, 70 } } )
   AAdd( aPaint, { "Box_3", {|| wvt_DrawBoxGroup( 15, 59, 18, 72 ) }, { WVT_BLOCK_BOX, 15, 59, 18, 72 } } )
   AAdd( aPaint, { "Box_4", {|| wvt_DrawBoxGroup( 5, 6, 19, 44 ) }, { WVT_BLOCK_BOX, 5, 6, 19, 44 } } )
   AAdd( aPaint, { "Image", {|| wvt_DrawImage( 8, 62, 12, 69, IMAGE_VOUCH ) }, { WVT_BLOCK_IMAGE, 8, 62, 12, 69 } } )
   AAdd( aPaint, { "Box_5", {|| wvt_DrawBoxRecessed( 7, 48, 13, 55 ) }, { WVT_BLOCK_BOX, 7, 48, 13, 55 } } )
   AAdd( aPaint, { "Line_1", {|| wvt_DrawLine( MaxRow() - 2, 0, MaxRow() - 2, MaxCol(), WVT_LINE_HORZ, WVT_LINE_RECESSED, WVT_LINE_BOTTOM ) }, NIL } )
   AAdd( aPaint, { "Gets", {|| AEval( GetList, {| oGet | wvt_DrawBoxGet( oGet:Row, oGet:Col, Len( Transform( oGet:VarGet(), oGet:Picture ) ) ) } ) }, NIL } )

   ExecForm( aPaint )

   RETURN

/* This function must be linked with the application */

FUNCTION wvt_Paint()  /* must be a public function */

   WvtPaintObjects()

   RETURN NIL

STATIC PROCEDURE ExecForm( aPaint )

   LOCAL cColor  := SetColor()
   LOCAL aPnt
   LOCAL dDate   := Date()
   LOCAL cName   := PadR( "Pritpal Bedi", 35 )
   LOCAL cAdd1   := PadR( "60, New Professor Colony", 35 )
   LOCAL cAdd2   := PadR( "Ludhiana, INDIA", 35 )
   LOCAL cAdd3   := PadR( hb_Version( HB_VERSION_URL_BASE ), 35 )
   LOCAL nSlry   := 20000
   LOCAL nColGet := 8

   aPnt := WvtSetPaint( aPaint )

   SetColor( "N/W" )
   CLS
   SetColor( "N/W,N/GR*,,,N/W*" )

   SetKey( K_F2, {|| DoModalDialog() } )

   @  6, nColGet SAY "< Date >"
   @  9, nColGet SAY "<" + PadC( "Name", 33 ) + ">"
   @ 12, nColGet SAY "<" + PadC( "Address", 33 ) + ">"
   @ 16, 61      SAY "< Salary >"
   @  7, nColGet GET dDate WHEN DispStatusMsg( "Date must be Valid" )
   @ 10, nColGet GET cName WHEN DispStatusMsg( "Must be one of the list!" ) VALID ( MyChoice() < 7 )
   @ 13, nColGet GET cAdd1 WHEN DispStatusMsg( "Press F2 to get modal window" )
   @ 15, nColGet GET cAdd2 WHEN DispStatusMsg( "Press F2 to activate modal window" )
   @ 17, nColGet GET cAdd3 WHEN DispStatusMsg( "Press F2 to bring in front a modal window" )
   @ 17, 61      GET nSlry PICTURE "@Z 9999999.99" WHEN ClearStatusMsg()

   READ

   SetColor( cColor )
   WvtSetPaint( aPnt )

   RETURN

STATIC FUNCTION SetGT( nIndex, pGT )

   LOCAL oldGT
   STATIC s_pGT_ := { NIL, NIL, NIL }

   oldGT := s_pGT_[ nIndex ]
   IF PCount() == 2
      s_pGT_[ nIndex ] := pGT
   ENDIF

   RETURN oldGT

STATIC FUNCTION MyChoice( aChoices )

   LOCAL scr, clr, nChoice

   hb_default( @aChoices, { "One", "Two", "Three", "Four", "Five", "Six", "Seven" } )

   scr := SaveScreen( 7, 48, 13, 55 )
   clr := SetColor( "N/W*,GR+/B*,,,GR+/B" )

   nChoice := AChoice( 7, 48, 13, 55, aChoices )

   SetColor( clr )
   RestScreen( 7, 48, 13, 55, scr )

   RETURN nChoice

FUNCTION DispStatusMsg( cMsg )

   ClearStatusMsg()

   /* NOTE: The GUI function used as such is not subject to autopainting */
   wvt_DrawLabel( MaxRow(), 60, cMsg, 6, , 0, RGB( 198, 198, 198 ), "Arial", 18, , 900 )

   RETURN .T.

STATIC FUNCTION ClearStatusMsg()

   LOCAL nRow := Row()
   LOCAL nCol := Col()

   hb_DispOutAt( MaxRow(), 42, Space( 37 ), "W/W" )

   SetPos( nRow, nCol )

   RETURN .T.

STATIC PROCEDURE DoModalDialog()

   LOCAL oCrt, nSel
   LOCAL aPnt   := WvtSetPaint( {} )
   LOCAL aPaint := {}

   oCrt := WvgCrt():New( , , { 4, 8 }, { 12, 49 }, , .T. )

   oCrt:lModal      := .T.
   oCrt:resizable   := .F.
   oCrt:closable    := .F.
   oCrt:title       := "Modal Dialog!"
   oCrt:icon        := hb_DirBase() + "vr_1.ico"

   oCrt:Create()
   oCrt:show()

   AAdd( aPaint, { "Box_V", {|| wvt_DrawBoxRaised( 1, 2, 11, 47 ) }, NIL, { WVT_BLOCK_BOX, 0, 0, MaxRow(), MaxCol() } } )
   WvtSetPaint( aPaint )

   SetColor( "N/W" )
   CLS
   DO WHILE .T.
      nSel := Alert( "A modal window !;Click on parent window;Move this window", { "OK" } )
      IF nSel == 0 .OR. nSel == 1
         EXIT
      ENDIF
   ENDDO

   oCrt:Destroy()

   WvtSetPaint( aPnt )

   RETURN

#if ! defined( __HBSCRIPT__HBSHELL )

PROCEDURE hb_GTSYS()  /* must be a public function */

   REQUEST HB_GT_WVG_DEFAULT
   REQUEST HB_GT_WVT
   REQUEST HB_GT_WGU

   RETURN

#endif
Tem exemplo da WVG na pasta /contrib/gtwvg do Harbour.

Tenta compilar ai, aqui rodou sem problema.
Deve está aqui o segredo do posicionamento: oCrt := WvgCrt():New( , , { 4, 8 }, { 12, 49 }, , .T. )
Não gosto dessa sintaxe da WVG.
Na Hwgui é: INIT DIALOG oDlg AT 0,0 SIZE 800,600

Mas é pq vc está vindo do CLIPPER, vai precisar reescrever tudo ai no caso das TELAS para WVG.
A tela fica solta a pessoa que vai colocar(puxar) para o CANTO com o mouse. Não sei como fazer isso usando WVG.

Saudações,
Itamar M. Lins Jr.

Posição TELA CONSOLE

Enviado: 12 Ago 2021 18:49
por JoséQuintas
Salve/restaure as coisas.

Código: Selecionar todos

#include "hbgtinfo.ch"

FUNCTION gtSetupFont( lSave )

   STATIC cFontSize, cFontWidth, cFontWeight
   LOCAL  nFontSize, nFontWidth, nFontWeight, cRootKey

   hb_default( @lSave, .F. )

   cRootKey    := "HKCU\Software\Jose Quintas\"
   cFontSize   := win_regRead( cRootKey + "FontSize" )
   cFontWidth  := win_regRead( cRootKey + "FontWidth" )
   cFontWeight := win_regRead( cRootKey + "FontWeight" )

   IF lSave
      nFontSize   := hb_gtInfo( HB_GTI_FONTSIZE )
      nFontWidth  := hb_gtInfo( HB_GTI_FONTWIDTH )
      nFontWeight := hb_gtInfo( HB_GTI_FONTWEIGHT )
      IF cFontSize == Nil .OR. cFontWidth == Nil .OR. cFontWeight == Nil ;
         .OR. Val( cFontSize ) != nFontSize .OR. Val( cFontWidth ) != nFontWidth ;
         .OR. Val( cFontWeight ) != nFontWeight
         win_regWrite( cRootKey + "FontSize",   LTrim( Str( nFontSize ) ) )
         win_regWrite( cRootKey + "FontWidth",  LTrim( Str( nFontWidth ) ) )
         win_regWrite( cRootKey + "FontWeight", LTrim( Str( nFontWeight ) ) )
      ENDIF
   ELSE
      hb_gtInfo( HB_GTI_FONTNAME, "Lucida Console" )
      IF cFontSize != Nil .AND. cFontWidth != Nil .AND. cFontWeight != Nil
         hb_gtInfo( HB_GTI_FONTSIZE,   Val( cFontSize ) )
         hb_gtInfo( HB_GTI_FONTWIDTH,  Val( cFontWidth ) )
         hb_gtInfo( HB_GTI_FONTWEIGHT, Val( cFontWeight ) )
      ENDIF
   ENDIF

   RETURN NIL
Não uso reposicionamento, mas dá uma olhada nos exemplos.
Ou dá uma olhada na classe wvgcrt.prg, porque a janela normal vira uma wvgcrt.

Talvez wvgSetAppWindow():SetPos(0,0)

Posição TELA CONSOLE

Enviado: 12 Ago 2021 18:53
por JoséQuintas
NÃO USE nada disso que o Itamar mostrou.
Apesar de fazer parte da GTWVG.... considero tudo isso um lixo.
Podemos até dizer que não tem nada a ver com GTWVG.

GTWVG é API Windows sobre a WVT.
Aí não tem nada de API Windows.

Posição TELA CONSOLE

Enviado: 12 Ago 2021 20:58
por Itamar M. Lins Jr.
Olá!
NÃO USE nada disso que o Itamar mostrou.
Eu não inventei nada.
Isso é exemplo do Pritpal Bedi. Do pai da WVG. Tá lá na pasta de exemplos de uso.

Ainda disse que não gosto da sintaxe.
Apesar de fazer parte da GTWVG.... considero tudo isso um lixo.
Sim, oh! grande deus do olimpo!
Podemos até dizer que não tem nada a ver com GTWVG.
Fale isso para o Pritpal Bedi, não comigo.
Talvez wvgSetAppWindow():SetPos(0,0)
Como assim talvez ? Não usa wvg ?

Saudações,
Itamar M. Lins Jr.

Posição TELA CONSOLE

Enviado: 12 Ago 2021 21:04
por Itamar M. Lins Jr.
Olá!
Apesar de fazer parte da GTWVG.... considero tudo isso um lixo.
E eu considero a WVG toda ela defasada, antiquada o mesmo pensamento do Pritpal seu criador ! Mas o que eu penso é meu pensamento se outras pessoas desejam usar e, eu se sei, de alguma coisa que possa ajudar, não fico tirando o incentivo dos outros, deixo que cada um descubra por si. Vai que a pessoa goste.

Saudações,
Itamar M. Lins Jr.

Posição TELA CONSOLE

Enviado: 13 Ago 2021 08:31
por JoséQuintas
Itamar M. Lins Jr. escreveu:Como assim talvez ? Não usa wvg ?
Devo estar usando outra LIB.
O que postam por aqui é tudo estranho pra mim.
Devo estar usando alguma versão de HWGUI, pensando ser GTWVG.

Posição TELA CONSOLE

Enviado: 13 Ago 2021 10:21
por JoséQuintas
Itamar, faça uma forcinha aí.

Você, que usa HWGUI, deveria saber que não tem nada igual à HWGUI, o mais próximo é a GTWVG mesmo.

Posição TELA CONSOLE

Enviado: 13 Ago 2021 11:02
por Itamar M. Lins Jr.
Olá!
Itamar, faça uma forcinha aí.
Não entendi não. É pra fazer o quê ?


Saudações,
Itamar M. Lins Jr.

Posição TELA CONSOLE

Enviado: 13 Ago 2021 12:01
por JoséQuintas
Deixe pra lá, vai fugir muito do assunto principal do tópico, mais ainda.

Posição TELA CONSOLE

Enviado: 13 Ago 2021 16:19
por JoséQuintas
E com o Harbour 3.4 morto....
Não sei se vou conseguir/ter paciência pra adaptar a GTWVG com os recursos que eu uso para o 3.2...
Para o 3.2, vou ter que descobrir como eu faço pra, por exemplo, somar 2 a nSize, e considero a necessidade disso uma merd...

Posição TELA CONSOLE

Enviado: 14 Ago 2021 18:13
por Nascimento
no geral quando quero 100% modo console eu só uso a gtwvt, tinha um sistema em clipper, passei 3 dias para portar para harbour, e lembrando que ele usava o
antigo miro "editor de telas"

abaixo vou upar para mostrar como era , depois foi que descidi portar todo pra grafico usando a minigui
Sistema em clipper , telas desenhadas no Miro
Sistema em clipper , telas desenhadas no Miro