Page 1 of 1

SE VE DISTINTO

Posted: Wed Feb 03, 2016 3:57 pm
by LOUIS
Hola Amigos:
Aquí estoy con un problemilla que me ha desconcertado, trabajo en modo console-gui con la versión 3.0.46 (es la mejor para mi necesidad) ... resulta que la pantalla cuando entra en modo mix se ve bien en unas pantallas y en otras no, en todas hay la resolución 1280 x 768

Son 2 problemas:
1) si dice setmode(43,132) la pantalla y las letras deben aparecer más pequeñas (es lo correcto), pero aparece con letras grandes como si estuviera en setmode(25,80).
2) la Label del Procedure Entrada1 no se ve en unas pantallas, cuando en otras sí se ve (y debería verse porque así está programado).

Adjunto 2 imágenes correctas (Foto1.jpg y Foto2.jpg) y 2 imágenes incorrectas (Foto1a.jpg y Foto2a.jpg que se ven mal)


Adjunto el Código:

Code: Select all

#include "HMG.CH"
#define HWND_TOPMOST                              -1
#define SWP_NOSIZE                                0x0001
#define SWP_DRAWFRAME                             0x0020

REQUEST HB_GT_WIN_DEFAULT 

FUNCTION MAIN()
PUBLIC hWnd:=GetConsoleWindowHandle()
PUBLIC CIA:='MI EMPRESA'

   DEFINE WINDOW PRINCIPAL;
      AT 0,0 WIDTH 0 HEIGHT 0 NOSHOW MAIN;
      ON INIT ENTRADA()
   END WINDOW
ACTIVATE WINDOW PRINCIPAL
RETURN

*-----------------------
PROC ENTRADA

DO WHILE .T.
   SetMode(43,132)
   SetWindowPos( hWnd, HWND_TOPMOST, 0, 0, 1, 1, hb_bitOr( SWP_NOSIZE, SWP_DRAWFRAME ) )
   SET COLO TO ("GR+*/B+")
   CLEA
   @ 10,10 SAY 'BIENVENIDO A MI PROGRAMA !!!'
   DI=' '
   @ 12,10 SAY 'DESEA ACCESAR AL SISTEMA ? <S/N>' GET DI
   READ
   IF DI='S'
      CLEA
      HIDE_WIND()
      DO ENTRADA1
    ELSE
      RELEASE WINDOW PRINCIPAL
      EXIT
   ENDIF
ENDDO
QUIT
RETU

*-----------------------
PROC ENTRADA1

CLEA
DEFINE WINDOW LOGO;
   AT 0,0 WIDTH 1240 HEIGHT 58 NOCAPTION ON INIT ENTRADA2()
   @ 0,0 LABEL Label_1 WIDTH 1240 HEIGHT 58 VALUE "&CIA" FONT "ALGERIAN" SIZE 36 FONTCOLOR RED BACKCOLOR BLUE
END WINDOW
LOGO.Activate
RETU

*-------------------------
PROC ENTRADA2

SHOW_WIND()
SetMode(20,132)
SetWindowPos( hWnd, HWND_TOPMOST, 0, 58, 1, 1, hb_bitOr( SWP_NOSIZE, SWP_DRAWFRAME ) )
SET COLO TO ("W+*/B+")

DI=SPACE(30)
@ 00,00 SAY 'HOLA'
@ 10,10 SAY 'DIGA SU NOMBRE' GET DI VALID !EMPT(DI)
@ 19,00 SAY 'FIN'
READ
RELEASE WINDOW LOGO
RETU

*-------------------
FUNCTION HIDE_WIND()

local hWnd := GETCONSOLEWINDOWHANDLE()
HIDEWINDOW(hWnd)
Return 

*-------------------
FUNCTION SHOW_WIND()

local hWnd := GETCONSOLEWINDOWHANDLE()
SHOWWINDOW(hWnd)
Return 








#pragma BEGINDUMP
#define WINVER 0x0600 // for Vista
#define _WIN32_WINNT 0x0600 // for Vista

#include "windows.h"
#include "hbapi.h"

HB_FUNC( GETCONSOLEWINDOWHANDLE )
{
HWND hwnd;
AllocConsole();
hwnd = FindWindowA("ConsoleWindowClass",NULL);
hb_retnl( (LONG) hwnd );
}

HB_FUNC ( SETWINDOWPOS )
{
    HWND hwnd           = (HWND) hb_parnl(1);    // handle to window or control
    HWND hWndInsertAfter= (HWND) hb_parnl(2);    // placement-order handle
    int X               =        hb_parni(3);    // horizontal position
    int Y               =        hb_parni(4);    // vertical position
    int cx              =        hb_parni(5);    // width
    int cy              =        hb_parni(6);    // height
    UINT uFlags         = (UINT) hb_parni(7);    // window-positioning options

    hb_retl( (BOOL) SetWindowPos( hwnd, hWndInsertAfter, X, Y, cx, cy, uFlags ) );
}

#pragma ENDDUMP

Re: SE VE DISTINTO

Posted: Wed Feb 03, 2016 3:59 pm
by LOUIS
La Imagen que faltó ...

Re: SE VE DISTINTO

Posted: Wed Feb 03, 2016 5:46 pm
by LOUIS
Amigos:
Pensé que era problema de la pantalla, y la cambié con otro computador, la pantalla de mi pc es Samsung y le puse una AOC y NO, sigue saliendo mal.
En esta pantalla AOC se ve bien con su respectivo CPU y W8.
En mi casa tengo W7 y la pantalla es LG y se ve bien.
No es la versión de windows, porque en W7 se ve bien y en W8 también ... entonces debe ser algo en el CPU de esta Máquina, será la configuración de los herzios ? ... Qué podrá ser ? ... Recuerden que la foto 1 y 2 son las correctas.

Quise adjuntarles el exe a ver cómo les sale a Uds. pero no me deja :(

En todo caso compílenlo Uds. por favor y corránlo para que me digan cómo les salió ...

En espera de sus comentarios, muchas gracias de antemano.

Re: SE VE DISTINTO

Posted: Wed Feb 03, 2016 8:48 pm
by andyglezl
Hola LOUIS
( solo como comentario personal )

Yo no utilicé el modo consola de Harbour, en ese aspecto no te puedo ayudar.

Pero tengo un sistema en clipper 5.3 desde hace 15 años que he ido pasando cuando el Sistema Operativo va cambiando
( Win95, Win98, WinXP y ahora Win7). Ya que los clientes que lo tienen, lo conocen muy bien y ademas
no quieren pagar un nuevo desarrollo para Windows.

Mi punto va por el lado de que hay veces que no necesariamente tenemos que programar para solucionar algo, no sé si sea tu caso.
( o que tu quieras aprender hacerlo en modo consola con Harbour y combinado con HMG )

SatinDOS.jpg
SatinDOS.jpg (167.2 KiB) Viewed 4130 times
SatinDOS-2.jpg
SatinDOS-2.jpg (168.34 KiB) Viewed 4130 times

Re: SE VE DISTINTO

Posted: Thu Feb 04, 2016 3:18 pm
by LOUIS
Gracias Andrés por responder.

Parece que encontré la solución mediante un Artificio (ver el código adjunto) ... he comprendido que a veces una sentencia puede estar bien escrita y sin embargo no funciona y se debe a que no está en la posición correcta, es decir, una, dos, tres, etc lineas más arriba o más abajo y ahí sí funciona; la verdad este ambiente console-gui me resulta fascinante, hace pensar un poquito pero me gusta :D

Creo que como Yo deben haber sino muchos, algunos que estamos en este modo console-gui y ojalá sigamos compartiendo experiencias.

Saludos a Todos.

Code: Select all

PROC ENTRADA2

SHOW_WIND()
SetMode(20,132)
SetWindowPos( hWnd, HWND_TOPMOST, 0, 58, 1, 1, hb_bitOr( SWP_NOSIZE, SWP_DRAWFRAME ) )
SET COLO TO ("W+*/B+")

MSGINFO ("LISTO PARA EMPEZAR ?")		&& <--- TRUCO o ARTIFICIO

DI=SPACE(30)
@ 00,00 SAY 'HOLA'
@ 10,10 SAY 'DIGA SU NOMBRE' GET DI VALID !EMPT(DI)
@ 19,00 SAY 'FIN'
READ
RELEASE WINDOW LOGO
RETU

Re: SE VE DISTINTO

Posted: Thu Feb 04, 2016 4:57 pm
by ndarz
Hola LOUIS:

Tengo HMG 3.4.2, compile y da error de multiple definicion en SETWINDOWSPOS, entonces lo modifique muy simple, sacandole todo lo de HMG, incluido MI EMPRESA, y compile en Harbour puro y compilo bien, la letra respeta el tamaño de acuerdo al setmode(), hay formas en Harbour de incluir fuentes y tamaño de letra con "gtwvg" y tambien tenes para raton, si vas a utilizar modo consola o algo semi mixto aprende y usa Harbour, se pueden hacer cosas similares a ventanas Windows.

Si no me equivoco el que funciona bien esta echo en FoxPro, que si maneja ventanas, tus mixtos en HMG, bajo consola usan Clipper que no maneja ventanas, no se si alguien tendra otra opinion, pero la mia es que te complicas haciendolo asi, usa Harbour puro y lograras efectos similares al que mostras en las fotos bien, lleva mas codigo y es mas complicado, pero si queres hacer "consola Windows" es la mejor forma.

Mi humilde consejo es que dejes de lado la consola y comiences a programar en HMG puro, ya que el modo mixto no es para DOS, sino que lo estas usando bajo Windows, si vas a usar HMG programa para Windows.

Y como te dije antes, para modo mixto lo mejor es que uses Harbour, hay un par de opciones para hacerlo,
yo te aconsejo que mires gtwvg.

Re: SE VE DISTINTO

Posted: Thu Feb 04, 2016 6:30 pm
by LOUIS
Gracias Sr. ndarz por sus comentarios, sin embargo, no es que no aprecie lo que me sugiere, sino que todo se me ha hecho muy fácil con el IDE de HMG :mrgreen: