Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Meta

#191
Hola:

En C++ no te puedo ayudar mucho y es lo primero que te diego, pero hay peros, puedes transformar son tu astucia que no tengo, pasarlo de C# a C++. Si lo haces, lo muestras aquí.

Código (csharp) [Seleccionar]
using System;

namespace Menu_consola_26_cs
{
    class Program
    {
        static void Main(string[] args)
        {
            int xMax = 80;
            int yMax = 25;
            int x = 1;
            int y = 1;

            Console.Title = "Moviendo cursor con las flechas del teclado.";
            Console.SetWindowSize(xMax + 1, yMax + 2);
            Console.CursorVisible = false;
            DrawMarco(0, 0, xMax, yMax);
           
            do
            {
                gotoxy(x, y, "█"); // ♠
                ConsoleKey tecla = Console.ReadKey(true).Key;

                if (tecla == ConsoleKey.Enter)
                {
                    gotoxy(5, yMax, $" posicion del cursor es x:{x} y:{y} ══════");
                    continue;
                }
                gotoxy(x, y, " ");
                if (tecla == ConsoleKey.DownArrow)
                {
                    if (y < yMax - 1)
                        y++;
                }
                if (tecla == ConsoleKey.UpArrow)
                {
                    if (y > 1)
                        y--;
                }
                if (tecla == ConsoleKey.RightArrow)
                {
                    if (x < xMax - 1)
                        x++;
                }
                if (tecla == ConsoleKey.LeftArrow)
                {
                    if (x > 1)
                        x--;
                }
                if (tecla == ConsoleKey.Escape)
                    break;
            } while (true);
            Console.CursorVisible = true;
        }

        // Generar marco.
        private static void DrawMarco(int v1, int v2, int v3, int v4)
        {
            gotoxy(v1, v2, "╔");
            gotoxy(v1, v4, "╚");
            gotoxy(v3, v2, "╗");
            gotoxy(v3, v4, "╝");

            for (int i = v1 + 1; i < v3; i++)
            {
                gotoxy(i, v2, "═");
                gotoxy(i, v4, "═");
            }
            for (int i = v2 + 1; i < v4; i++)
            {
                gotoxy(v1, i, "║");
                gotoxy(v3, i, "║");
            }
        }

        public static void gotoxy(int x, int y, string cad)
        {
            Console.SetCursorPosition(x, y);
            Console.Write(cad);
        }
    }
}


Pulsas las flechas del teclado pra mover en la pantalla un caracter, pulsa Enter para indicar la posición de donde está.

¿Es algo parecido a lo que buscas?

Saludos.
#192
Tienes razón, me equivoqué. Espero que un moderador lo corrija.
Gracias.
#193
Hola:

Paso 1.

Quiero quitar caracter raros hasta en el título cuando uso tildes.

Antes usaba el #include "pch.h". Ya no se como añadirlo. Hace dos años que no uso el C++ de Visual Studio Community 2019.
Código (cpp) [Seleccionar]
#include <iostream>

#include <windows.h> // Para mostrar texto en el título de la ventana.



using namespace std;

using std::cout;



int main(void)

{



SetConsoleTitle(TEXT("Título de la ventana. Win32 C++ 2019."));



cout << "Terminarías. Conocerías. Título. Analógico. \n";

cout << "Muchas gracias mi muy distinguido amigo.";



cin.get();

return 0;

}


Paso 2.

¿Cómo redimensionar la ventana?

Por ejemplo, en C# se usa esto.
Código (csharp) [Seleccionar]
          // Tamaño ventana consola.

           // X anchura.

           Console.WindowWidth = 20;



           // Y altura.

           Console.WindowHeight = 5;


Más fácil aún y en una sola línea es:

Código (csharp) [Seleccionar]
Console.SetWindowSize(20, 5);

¿Cómo se hace en C++?

Gracias.
#194
Eres el mejor. Buen trabajo.  ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
#195
Mover el cursos con las flechas.

También pulsar Enter para ver las coordenadas.

Código (csharp) [Seleccionar]

using System;

namespace Menu_consola_26_cs
{
    class Program
    {
        static void Main(string[] args)
        {
            int xMax = 80;
            int yMax = 25;
            int x = 1;
            int y = 1;
            Console.Title = "Moviendo cursor con las flechas del teclado.";
            Console.SetWindowSize(xMax + 1, yMax + 2);
            DrawMarco(0, 0, xMax, yMax);
            Console.CursorVisible = false;
            do
            {
                gotoxy(x, y, "█"); // ♠
                ConsoleKey opc = Console.ReadKey(true).Key;
                if (opc == ConsoleKey.Enter)
                {
                    gotoxy(5, yMax, $" posicion del cursor es x:{x} y:{y} ══════");
                    continue;
                }
                gotoxy(x, y, " ");
                if (opc == ConsoleKey.DownArrow)
                {
                    if (y < yMax - 1)
                        y++;
                }
                if (opc == ConsoleKey.UpArrow)
                {
                    if (y > 1)
                        y--;
                }
                if (opc == ConsoleKey.RightArrow)
                {
                    if (x < xMax - 1)
                        x++;
                }
                if (opc == ConsoleKey.LeftArrow)
                {
                    if (x > 1)
                        x--;
                }
                if (opc == ConsoleKey.Escape)
                    break;
            } while (true);
            Console.CursorVisible = true;
        }

        // Generar marco.
        private static void DrawMarco(int v1, int v2, int v3, int v4)
        {
            gotoxy(v1, v2, "╔");
            gotoxy(v1, v4, "╚");
            gotoxy(v3, v2, "╗");
            gotoxy(v3, v4, "╝");

            for (int i = v1 + 1; i < v3; i++)
            {
                gotoxy(i, v2, "═");
                gotoxy(i, v4, "═");
            }
            for (int i = v2 + 1; i < v4; i++)
            {
                gotoxy(v1, i, "║");
                gotoxy(v3, i, "║");
            }
        }

        public static void gotoxy(int x, int y, string cad)
        {
            Console.SetCursorPosition(x, y);
            Console.WriteLine(cad);
        }
    }
}

#196
Muy buen trabajo, explicaciones y ayudas.

Los códigos prefiero guardarlos dentro de un método o funciones, que me sirve para futuros proyectos. Falta seleccionar la parte de Atrás y Menú. Si se selecciona Atrás, pulsas Enter, dice un mensaje, estás en opción Atrás, si estás en Menú, dice un mensaje que estás en la opción Menú.

Al menos mover el > en esas cuatro zonas, son solo cuatro zonas. Que se dice pronto.

Una cosa lo dejo clara. Ya no uso el Do While, para evitar condiciones como el ejemlo de arriba, pulsar el escape.

En este ejemplo del menú, solo se usa cinco teclas, felchas arriba, abajo, izquierda, derecha y Enter. En este caso uso While (true). Aunque suene bucle cerrado infinito, dentro de ella si cumple una condición, por ejemplo, señalar con el > la zona Menú y pulso Enter, se va a otro método o función, que en otra ventana o subopción y ya está. Es algo parecido a esto. Por eso es bueno hacer un esquema boceto de los menús y submenús, para tener una idea rápida de lo que se quiere hacer, aquí hablando de diseño, en este tema, hablando de funcionalidades, como controlar el > y una barra de estado.

Frente a tu código, solo falta lo indicado arriba. Lo modifiqué un pelín, solo la apariencia y nada más.
Código (csharp) [Seleccionar]
using System;

namespace Consola_menu_25_cs
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Title = "Título de la ventana.";
            Console.BackgroundColor = ConsoleColor.Green;
            Console.ForegroundColor = ConsoleColor.Black;
            Console.SetWindowSize(21, 5);
            Console.CursorVisible = false;

            ConsoleKey key;
            int selPosY = 0;
            int volPosX = 9;
            int briPosX = 9;

            Console.Clear();
            Console.WriteLine("  Brillo:────────   ");
            Console.WriteLine("  Volum.:────────   ");
            Console.WriteLine("                    ");
            Console.WriteLine("  Atrás        Menú ");

            Console.SetCursorPosition(0, selPosY);
            Console.Write(">");
            Console.SetCursorPosition(briPosX, 0);
            Console.Write("█");
            Console.SetCursorPosition(volPosX, 1);
            Console.Write("█");
            Console.SetCursorPosition(18, 0);
            Console.Write(briPosX - 9);
            Console.SetCursorPosition(18, 1);
            Console.Write(volPosX - 9);

            do
            {
                key = Console.ReadKey(true).Key;
                if ((key == ConsoleKey.UpArrow) && ((selPosY - 1) >= 0))
                {

                    Console.SetCursorPosition(0, selPosY);
                    Console.Write(" ");

                    Console.CursorTop--;
                    selPosY = Console.CursorTop;
                    Console.SetCursorPosition(0, selPosY);
                    Console.Write(">");
                }

                if ((key == ConsoleKey.DownArrow) && ((selPosY + 1) <= 1))
                {

                    Console.SetCursorPosition(0, selPosY);
                    Console.Write(" ");

                    Console.CursorTop++;
                    selPosY = Console.CursorTop;
                    Console.SetCursorPosition(0, selPosY);
                    Console.Write(">");
                }

                if (key == ConsoleKey.LeftArrow)
                {

                    if ((selPosY == 0) && ((briPosX - 1) >= 9))
                    {
                        Console.SetCursorPosition(briPosX, 0);
                        Console.Write("─");

                        Console.CursorLeft -= 2;
                        briPosX = Console.CursorLeft;
                        Console.Write("█");

                        Console.SetCursorPosition(18, 0);
                        Console.Write(briPosX - 9);
                    }

                    if ((selPosY == 1) && ((volPosX - 1) >= 9))
                    {
                        Console.SetCursorPosition(volPosX, 1);
                        Console.Write("─");

                        Console.CursorLeft -= 2;
                        volPosX = Console.CursorLeft;
                        Console.Write("█");

                        Console.SetCursorPosition(18, 1);
                        Console.Write(volPosX - 9);
                    }

                }

                if (key == ConsoleKey.RightArrow)
                {

                    if ((selPosY == 0) && ((briPosX + 1) <= 16))
                    {
                        Console.SetCursorPosition(briPosX, 0);
                        Console.Write("─");

                        briPosX = Console.CursorLeft;
                        Console.Write("█");

                        Console.SetCursorPosition(18, 0);
                        Console.Write(briPosX - 9);
                    }

                    if ((selPosY == 1) && ((volPosX + 1) <= 16))
                    {
                        Console.SetCursorPosition(volPosX, 1);
                        Console.Write("─");

                        volPosX = Console.CursorLeft;
                        Console.Write("█");

                        Console.SetCursorPosition(18, 1);
                        Console.Write(volPosX - 9);
                    }
                }

            } while (key != ConsoleKey.Escape);
        }
    }
}


#197
Hola:

Una barra por probar, funciona.
Código (csharp) [Seleccionar]
using System;

namespace Menu_consola_22_cs
{
    class Program
    {
        // Variables.
        static readonly int MARGEN = 9;
        static int indicadorPos = 0;
        static readonly int INDICADOR_MIN = 0;
        //int indicadorMax = Console.WindowWidth - 2 * margen;
        static readonly int INDICADOR_MAX = 7;
        static int volumen = 0;
        static void Main(string[] args)
        {
            Console.Title = "Barra volumen y brillo";

            // Tamaño ventana consola.
            // X anchura.
            Console.WindowWidth = 20;

            // Y altura.
            Console.WindowHeight = 5;

            // Oculto el cursor.
            Console.CursorVisible = false;

            // Fondo verde.
            Console.BackgroundColor = ConsoleColor.Green;

            // Letras negras.
            Console.ForegroundColor = ConsoleColor.Black;

            Console.Clear();
            Dibuja();
            Barra();
        }

        #region Barra.
        static void Barra()
        {
            // Combinación de tecla.
            Console.TreatControlCAsInput = true;

            for (ConsoleKey ck = ConsoleKey.Spacebar; ck != ConsoleKey.S; ck = Console.ReadKey(true).Key)
            {
                switch (ck)
                {
                    case ConsoleKey.Add: // Tecla de suma del teclado numérico.
                    case ConsoleKey.OemPlus:
                    case ConsoleKey.RightArrow: // Flecha derecha.
                        if (indicadorPos < INDICADOR_MAX)
                        {
                            indicadorPos++;
                            volumen++;
                            Dibuja();
                        }
                        break;

                    case ConsoleKey.Subtract: // Tecla de resta del teclado numérico.
                    case ConsoleKey.OemMinus:
                    case ConsoleKey.LeftArrow: // Flecha izquierda.
                        if (indicadorPos > INDICADOR_MIN)
                        {
                            indicadorPos--;
                            volumen--;
                            Dibuja();
                        }
                        break;

                    case ConsoleKey.UpArrow:
                        if (ConsoleKey.UpArrow == Console.ReadKey(true).Key)
                        {
                            Console.SetCursorPosition(0, 3);
                            Console.Write(" ");
                            Console.SetCursorPosition(13, 3);
                            Console.Write(">");
                        }

                        break;

                    case ConsoleKey.DownArrow:
                        if (ConsoleKey.DownArrow == Console.ReadKey(true).Key)
                        {
                            Console.SetCursorPosition(0, 3);
                            Console.Write(">");
                            Console.SetCursorPosition(13, 3);
                            Console.Write(" ");
                        }
                        break;
                }
            }
        }
        static void Dibuja()
        {
            Console.SetCursorPosition(0, 1); // X = -, Y = |.
            Console.Write("> Volum.:");
            Console.SetCursorPosition(MARGEN, 1);
            //Console.BackgroundColor = ConsoleColor.Blue;
            Console.ForegroundColor = ConsoleColor.Black;
            Console.Write(string.Empty.PadRight(INDICADOR_MAX + 1, '─'));
            Console.SetCursorPosition(MARGEN + indicadorPos, 1);
            Console.ForegroundColor = ConsoleColor.Black;
            Console.Write("█");
            Console.SetCursorPosition(18, 1);
            Console.Write(volumen);
            //Console.SetCursorPosition(0, 3);
            //Console.Write("  Atrás");
            //Console.SetCursorPosition(13, 3);
            //Console.Write("  Menú");
        }
#endregion
    }
}


El problema está hacer la otra barra y los ATRÁS y MENÚ.

A saludos.
#198
Tienes las cosas claras.

Por lo que cuentas. Lo que llamas función, otros lo llaman métodos. Solo se diferencia entre que uno no tiene parámetos y el otro si.

1. El dibujado.

2. Función o método de controlar el signo >. Arriba, abajo, izquierda y derecha. En este caso, solo tiene 4 posiciones indicadas en el dibujo hecho a mano en el primer post.
3. Función el brillo.
4. Función Volumen.

¿Falta algo?

Parecía fácil pero la cosa se complica.
#199
Hola gente del foro:

En la consola C# 2019 quiero hacer un menú con estas dimensiones.

Código (csharp) [Seleccionar]
            Console.Title = "Menú de opciones";

            // Tamaño ventana consola.
            // X anchura.
            Console.WindowWidth = 20;

            // Y altura.
            Console.WindowHeight = 5;

            // Oculto el cursor.
            Console.CursorVisible = false;

            // Fondo verde.
            Console.BackgroundColor = ConsoleColor.Green;

            // Letras negras.
            Console.ForegroundColor = ConsoleColor.Black;


El diseño lo hago primero a mano. Hay que seleccionar o indicar la parte de la pantalla este símbolo >.
Con esto maneja las dos barras indicada abajo y las opciónes ATRÁS y MENÚ.

Las coordenadas del > está indicada en el dibujo de abajo.



Ver zoom.

El > lo mueves solo con flechas del teclado, arriba, abajo, derecha e izquierda.

Para dejarlo más claro, aquí una captura pero no es funcional.


La barra Brillo y Voum. se mueve del 0 al 7.

Antes de sacar un super código horrible, quiero saber cual es la mejor idea y facilidad para el dibujado y que funcione.

Saludos.
#200
Me gustó lo que hiciste.