DIRECCIONAR WINDOWS EN MODO CONSOLE
Moderator: Rathinagiri
DIRECCIONAR WINDOWS EN MODO CONSOLE
Estimados Amigos :
Cómo puedo direccionar una pantalla en modo consola, pero que NO se posicione por default en 0,0
sino en la posición que yo la programe, por ejemplo :
Linea 10, columna 0 ... Linea 10, Columna 40 ... Así como se ve en los gráficos adjuntos...
Cómo puedo direccionar una pantalla en modo consola, pero que NO se posicione por default en 0,0
sino en la posición que yo la programe, por ejemplo :
Linea 10, columna 0 ... Linea 10, Columna 40 ... Así como se ve en los gráficos adjuntos...
- Attachments
-
- POR DEFAULT
- POSICION 0 0.jpg (115.42 KiB) Viewed 5274 times
-
- LINEA 10, COLUMNA 0
- POSICION 10 0.jpg (178.03 KiB) Viewed 5274 times
-
- LINEA 10, COLUMNA 40
- POSICION 10 40.jpg (233.74 KiB) Viewed 5274 times
- Pablo César
- Posts: 4059
- Joined: Wed Sep 08, 2010 1:18 pm
- Location: Curitiba - Brasil
DIRECCIONAR WINDOWS EN MODO CONSOLE
Hola Louis,
En verdad seria posicionar el window console. Es algo interesante, dificil pero creo que no es imposible.
1. Estuve viendo que si tu aplicacion abre y clicas en el Title bar de la seccion con el boton derecho del mouse, puedes accesar las propiedades y si vás en el Tab "Layout", podrás notar que se puede configurar tu aplicativo que abra siempre en tal linea, tal columna.
2. Pero tambien investigué si esto se podria hacerse de forma programática. Por lo que leí, el sistema operativo guarda en:
HKEY_CURRENT_USER\Console
Si hace una prueba como mencioné en el item 1 y confirmas, seguro que será grabado path y nombre del aplicativo en esta carpeta de tu REGISTRY en forma de subfolders. En el siguiente formato: C:_hmg.3.4.0_SAMPLES_Basics_CONSOLE_hello.exe (C:\hmg.3.4.0\SAMPLES\Basics\CONSOLE\hello.exe, notar que substituye por underlines).
Siendo asi, podrias utilizar las funciones de lectura y grabacion del REGISTRY en HMG y grabar las posiciones. Parece que esta informacion está guardada en la llave WindowPosition que puede estar en Decimal o Hexadecimal. Solo que no sé como formar este valor. Algun cálculo envolviendo la posicion de linea y columna. Creo que se suma el ancho de la Linea+Altura_ventana+columna+Ancho_ventana y el resultado se debe convertir en Hexadecimal o Decimal.
3. Creo que tambien podria resolver atravéz de la funcion C SetWindowPosition, pero tendrás primero que localizar el handle de tu aplicacion.
Disculpame, todo esto es teórico. No tengo nada desenvuelto a respecto, pero espero haberte esclarecido las opciones que podrias intentar.
En verdad seria posicionar el window console. Es algo interesante, dificil pero creo que no es imposible.
1. Estuve viendo que si tu aplicacion abre y clicas en el Title bar de la seccion con el boton derecho del mouse, puedes accesar las propiedades y si vás en el Tab "Layout", podrás notar que se puede configurar tu aplicativo que abra siempre en tal linea, tal columna.
2. Pero tambien investigué si esto se podria hacerse de forma programática. Por lo que leí, el sistema operativo guarda en:
HKEY_CURRENT_USER\Console
Si hace una prueba como mencioné en el item 1 y confirmas, seguro que será grabado path y nombre del aplicativo en esta carpeta de tu REGISTRY en forma de subfolders. En el siguiente formato: C:_hmg.3.4.0_SAMPLES_Basics_CONSOLE_hello.exe (C:\hmg.3.4.0\SAMPLES\Basics\CONSOLE\hello.exe, notar que substituye por underlines).
Siendo asi, podrias utilizar las funciones de lectura y grabacion del REGISTRY en HMG y grabar las posiciones. Parece que esta informacion está guardada en la llave WindowPosition que puede estar en Decimal o Hexadecimal. Solo que no sé como formar este valor. Algun cálculo envolviendo la posicion de linea y columna. Creo que se suma el ancho de la Linea+Altura_ventana+columna+Ancho_ventana y el resultado se debe convertir en Hexadecimal o Decimal.
3. Creo que tambien podria resolver atravéz de la funcion C SetWindowPosition, pero tendrás primero que localizar el handle de tu aplicacion.
Disculpame, todo esto es teórico. No tengo nada desenvuelto a respecto, pero espero haberte esclarecido las opciones que podrias intentar.
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
Re: DIRECCIONAR WINDOWS EN MODO CONSOLE
NO quiero tocar las Propiedades ni los Predeterminados ... me imagino que si se pudiera hacer como en Fox con Define Windows W1 FROM 5,0 TO 25,46 sería fantástico ... es que esta ventanita en console, tengo que abrirla en varios lugares del programa, por eso no puedo dejarla definida en las propiedades 

- Pablo César
- Posts: 4059
- Joined: Wed Sep 08, 2010 1:18 pm
- Location: Curitiba - Brasil
DIRECCIONAR WINDOWS EN MODO CONSOLE
Que es Predeterminados para vos ?LOUIS wrote:NO quiero tocar las Propiedades ni los Predeterminados ...
Estás seguro que eso existe para console ???LOUIS wrote:me imagino que si se pudiera hacer como en Fox con Define Windows W1 FROM 5,0 TO 25,46 sería fantástico ...
Louis, te di 3 opciones...
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
- Pablo César
- Posts: 4059
- Joined: Wed Sep 08, 2010 1:18 pm
- Location: Curitiba - Brasil
DIRECCIONAR WINDOWS EN MODO CONSOLE
- Attachments
-
- So_Roda5 (Source files).rar
- Sources Files (Atencion hbc file)
- (791 Bytes) Downloaded 272 times
-
- So_Roda5 (Executable file).rar
- Executable file
- (513.21 KiB) Downloaded 287 times
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
Re: DIRECCIONAR WINDOWS EN MODO CONSOLE
Estimado Pablo:
De los 2 rar que pusiste, el executable funciona ok, pero el que trae el prg NO
este es el error ... undefined reference to `HB_FUN_SETWINDOWPOS'
Podés arreglarlo por fa ?
De los 2 rar que pusiste, el executable funciona ok, pero el que trae el prg NO

este es el error ... undefined reference to `HB_FUN_SETWINDOWPOS'
Podés arreglarlo por fa ?
- Pablo César
- Posts: 4059
- Joined: Wed Sep 08, 2010 1:18 pm
- Location: Curitiba - Brasil
DIRECCIONAR WINDOWS EN MODO CONSOLE
Es el mismo !LOUIS wrote:el executable funciona ok, pero el que trae el prg NO
Louis, cual es la version HMG que estás usando ??
Solo está faltando en tu HMG la funcion SETWINDOWPOS.
Y está disponible apartir del HMG 3.1.5, cuando Dr. Claudio lo disponibilizó en C:\hmg.3.1.5\SOURCE\SOURCE\c_windows.c
En este tópico Andrés lo disponibilizó tambien.
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
Re: DIRECCIONAR WINDOWS EN MODO CONSOLE
Amigo Pablo:
Efectivamente, uso la versión 3.0.46 y por eso no creó el exe correctamente ... al compilar con la 3.1.5 se hizo el executable y funciona correctamente esto de direccionar la console-ventana a cualquier lugar de la pantalla; ahora bien, al compilar mis programas con la 3.1.5 que por cierto dicen que es estable, no me funcionan bien
crea el exe y entra a la primera pantalla de presentación en modo gui, de ahí debe pasar a unos procesos internos en modo console y luego volver a presentar una pantalla gui pero no llega a esta y termina abruptamente a pesar de quedarse corriendo en memoria
Intenté copiando C:\hmg.3.1.5\SOURCE\c_windows.c <---> dentro de C:\hmg.3.0.46\SOURCE\c_windows.c pero no funcionó
Recordemos Pablo, que mi programa esta modo mix console-gui y por eso a pesar de haber probado con la última versión 4.2 hace lo mismo que la 3.1.5
Probé bajando la versión 3.2 (aunque tiene 2 parches que bajarse para corregir ciertos bugs) y con esta me funciona bien mi programa console-gui aunque noto ciertas cosillas que la 3.0.46 superó a la 3.0.39 como el pase de foco de una pantalla a otra, y también cuando pido un reporte por pantalla lanza primero una leyenda en modo console en la parte baja de la pantalla, pero luego presenta el informe.
No sé que hacer, si quedarme con la 3.0.46 aunque no pueda direccionar la console-pantalla, o pasarme a la 3.2 y bajar los parches ... Me podrías decir después de la 3.2 que versiones salieron estables (sin parches) antes de llagar a la 4.2 ?
Gracias de antemano.
Efectivamente, uso la versión 3.0.46 y por eso no creó el exe correctamente ... al compilar con la 3.1.5 se hizo el executable y funciona correctamente esto de direccionar la console-ventana a cualquier lugar de la pantalla; ahora bien, al compilar mis programas con la 3.1.5 que por cierto dicen que es estable, no me funcionan bien


Intenté copiando C:\hmg.3.1.5\SOURCE\c_windows.c <---> dentro de C:\hmg.3.0.46\SOURCE\c_windows.c pero no funcionó

Recordemos Pablo, que mi programa esta modo mix console-gui y por eso a pesar de haber probado con la última versión 4.2 hace lo mismo que la 3.1.5
Probé bajando la versión 3.2 (aunque tiene 2 parches que bajarse para corregir ciertos bugs) y con esta me funciona bien mi programa console-gui aunque noto ciertas cosillas que la 3.0.46 superó a la 3.0.39 como el pase de foco de una pantalla a otra, y también cuando pido un reporte por pantalla lanza primero una leyenda en modo console en la parte baja de la pantalla, pero luego presenta el informe.
No sé que hacer, si quedarme con la 3.0.46 aunque no pueda direccionar la console-pantalla, o pasarme a la 3.2 y bajar los parches ... Me podrías decir después de la 3.2 que versiones salieron estables (sin parches) antes de llagar a la 4.2 ?
Gracias de antemano.
- Pablo César
- Posts: 4059
- Joined: Wed Sep 08, 2010 1:18 pm
- Location: Curitiba - Brasil
DIRECCIONAR WINDOWS EN MODO CONSOLE
Si ahora entiendo que lo que buscabas es em MIX (console y gui). Y creo que tu no te has dado cuenta que yo no sabia de este "pequeño" detalle. Porque si te fijas mi ejemplo, no verás ninguna instruccion en GUI, al contrário, estoy forzando la salida del interface con:LOUIS wrote:al compilar mis programas con la 3.1.5 que por cierto dicen que es estable, no me funcionan biencrea el exe y entra a la primera pantalla de presentación en modo gui, de ahí debe pasar a unos procesos internos en modo console y luego volver a presentar una pantalla gui pero no llega a esta y termina abruptamente a pesar de quedarse corriendo en memoria
![]()
REQUEST HB_GT_WIN_DEFAULT
Ni tampoco disponibilizé el #include <hmg.ch> que es responsable por adicionar toda la biblioteca gráfica de HMG.
Asi que tenemos que ver caso a caso.
Cuando hablamos de nuevas versiones, algunos piensan que los cambios solo suceden en HMG, pero en verdad no es asi !
El Harbour tambien cambió en sus versiones la forma de alternar la salidas del interface, tambien cambiamos para UNICODE no utilizando los codepages. Entonces es algo un tanto complejo.
Yo no sé si conseguiria manter um sistema en MIX. No es imposible creo yo, pero que es trabajoso si puedo afirmar.
Creo que esa alternancia de una seccion console para otra gráfica tiene que ser tratada atravéz de llamados en C con sus respectivos HANDLES.
No, eso jamás iria funcionar ! Esta pra´ctica nunca se debe ejecutar de esa forma.Intenté copiando C:\hmg.3.1.5\SOURCE\c_windows.c <---> dentro de C:\hmg.3.0.46\SOURCE\c_windows.c pero no funcionó![]()
Lo que quize decir en mi mensaje anterior, es que puedes extraer el código en C que habian publicado e inserirlo en tu código, no en la biblioteca HMG de la version antigua.
Como expliqué antes, es trabajoso esta alternancia. Son dos ambientes completamente distintos. Yo pensaria en trabajar en un solo ambiente: o en console o en gráfico.Probé bajando la versión 3.2 (aunque tiene 2 parches que bajarse para corregir ciertos bugs) y con esta me funciona bien mi programa console-gui aunque noto ciertas cosillas que la 3.0.46 superó a la 3.0.39 como el pase de foco de una pantalla a otra, y también cuando pido un reporte por pantalla lanza primero una leyenda en modo console en la parte baja de la pantalla, pero luego presenta el informe.
Te paso el código que faltaba para que lo insieras en tu código y puedas compilarlo en 3.0.46.No sé que hacer, si quedarme con la 3.0.46 aunque no pueda direccionar la console-pantalla
Code: Select all
/* Compiled with hmg.3.0.46 version */
#define HWND_TOPMOST -1
#define SWP_NOSIZE 0x0001
#define SWP_DRAWFRAME 0x0020
REQUEST HB_GT_WIN_DEFAULT
Function Main ()
Local hWnd:=GetConsoleWindowHandle()
SetMode(25,80)
SetWindowPos( hWnd, HWND_TOPMOST, 600, 500, 1, 1, hb_bitOr( SWP_NOSIZE, SWP_DRAWFRAME ) )
@ 00,00 to 24,79 double
@ 01,01 SAY "012345678901234567890123456789012345678901234567890123456789012345678901234567"
@ 03,01 SAY "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
Inkey(0)
Return Nil
#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
Yo partiria para la más nueva version. Yo tengo una opinion muy formada con respecto a versiones.o pasarme a la 3.2 y bajar los parches ... Me podrías decir después de la 3.2 que versiones salieron estables (sin parches) antes de llagar a la 4.2 ?
Leé esto por favor, si querés dejá tu opinion a respecto. Creo que es lo que más hace falta por aqui... que todo dén su opinion y relaten sus dificultades.
Pero me parece apropiado estar actualizado SIEMPRE !
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
- Pablo César
- Posts: 4059
- Joined: Wed Sep 08, 2010 1:18 pm
- Location: Curitiba - Brasil
DIRECCIONAR WINDOWS EN MODO CONSOLE
HMGing a better world
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein
"Matter tells space how to curve, space tells matter how to move."
Albert Einstein