Hola:
Usando la consola C# 2017. He visto que el comando Consola.Beep(); puedes cambiar el tono del pitido. Lo que no he visto la posibilidad de cambiar su volumen.
Aún así y antes que nada, quiero hacer un menú pequeño, solo se usa tres teclas, flecha arriaba, abajo y Enter.
Cita:
Menú principal de ejemplo.
Se usan solo tres teclas.
-Enter.
-Flecha arriba.
-Flecha abajo.
-
Se usa resolución de la consola C# 16x2.
Nos centramos en esta ocasión en Vol. Teclas.
Si pulsa la ventana verde “Vol. teclas”
Aparecerá la ventana naranja “Ver teclas: 4”.
El número 4 parpadea de unos 300 ms.
Puedes variar de 0 al 7. 0 es sin sonido, desde el 1 se empieza a oir Beep y el 7 es su volumen máximo.
En caso de que no se oiga los sonidos, si quiero ser capaz de ver el cambio del 0 al 7 en pantalla.
|
¿Alguna idea?
Lo quiero implementar en este código que estamos haciendo (incluyendo gente dle foro) que dejo aquí abajo.
Código consola C#:
Código:
using System;
namespace Menu_consola_09_cs
{
class Program
{
// Variables globales.
public static int luz = 6;
public const int BRILLO_MAX = 8;
public static bool radio = false;
static void Main(string[] args)
{
// Título de la ventana.
Console.Title = "Menú de opciones";
// Tamaño ventana consola.
// X anchura.
Console.WindowWidth = 16;
// Y altura.
Console.WindowHeight = 2;
// Oculto el cursor.
Console.CursorVisible = false;
ConsoleKey teclaInicial;
Console.BackgroundColor = ConsoleColor.Green;
// Letras negras.
Console.ForegroundColor = ConsoleColor.Black;
// Limpiar pantalla.
do
{
Console.Clear();
Console.WriteLine(DateTime.Now.ToString("ddd dd MMM")); // Formato numérico dd/MM/yyyy.
teclaInicial = Console.ReadKey(true).Key;
if (teclaInicial == ConsoleKey.Enter)
{
menuPrincipal();
}
} while (teclaInicial != ConsoleKey.Escape); // SANTIAGOOOOO.
//while (true);
}
#region Menú Principal.
public static void menuPrincipal()
{
// Contador de teclas y navegador.
int opcion = 0;
bool salir = false;
// Capturar tecla para luego validar.
ConsoleKey tecla;
do
{
//******************************************************************
// Dibujo el menú.
// Rellenar fondo verde.
Console.BackgroundColor = ConsoleColor.Green;
// Letras negras.
Console.ForegroundColor = ConsoleColor.Black;
// Limpiar pantalla.
Console.Clear();
switch (opcion)
{
case 0:
Console.SetCursorPosition(0, 0);
Console.Write("Language");
break;
case 1:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Ajustar hora ->");
break;
case 2:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Ajustar fecha ->");
break;
case 3:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Brillo");
break;
case 4:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Ver radio");
break;
case 5:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Vol. avisos");
break;
case 6:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Vol. teclas");
break;
case 7:
Console.SetCursorPosition(0, 0);
Console.WriteLine("Salir menú");
break;
default:
Console.WriteLine("Fuera de rango.");
break;
}
// Fin de pintar el menú.
//******************************************************************
// Leer tecla ingresada por el usuario.
tecla = Console.ReadKey(true).Key;
// Validar el tipo de tecla.
if (tecla == ConsoleKey.Enter)
{
switch (opcion)
{
case 3:
brillo();
break;
case 4:
radiazo();
break;
case 7:
salir = true;
break;
default:
break;
}
}
if (tecla == ConsoleKey.DownArrow)
{
opcion += 1;
}
if (tecla == ConsoleKey.UpArrow)
{
opcion -= 1;
}
// Si está en la última opción, salta a la primera.
if (opcion > 7)
{
opcion = 0;
}
// Si está en la primera posición, salta a la última.
if (opcion < 0)
{
opcion = 7;
}
// Uso la tecla escape como salida.
} while (salir == false);
}
#endregion
#region Brillo (3).
public static void brillo()
{
ConsoleKey teclaBrillo;
Console.Clear();
do
{
Console.SetCursorPosition(0, 0);
Console.Write("Luz: ");
for (int i = 0; i < luz; i++)
{
Console.Write("X");
}
for (int j = 0; j < (BRILLO_MAX - luz); j++)
{
Console.Write("-");
}
teclaBrillo = Console.ReadKey(true).Key;
// ¿Se pulsó el cursor arriba?
if (teclaBrillo == ConsoleKey.UpArrow)
{
//¿no llega al limite?
if (luz < BRILLO_MAX)
{
// Incrementa 1.
luz++;
}
}
if (teclaBrillo == ConsoleKey.DownArrow)
{
if (luz > 0)
{
// Decremmenta 1.
luz--;
}
}
} while (teclaBrillo != ConsoleKey.Enter);
}
#endregion
#region Radio (4).
public static void radiazo()
{
ConsoleKey teclaRadio;
Console.Clear();
do
{
Console.SetCursorPosition(0, 0);
Console.Write("Ver radio: ");
Console.SetCursorPosition(11, 0);
Console.Write(radio ? "On " : "Off");
teclaRadio = Console.ReadKey(true).Key;
if ((teclaRadio == ConsoleKey.UpArrow) || (teclaRadio == ConsoleKey.DownArrow))
{
radio = !radio;
}
} while (teclaRadio != ConsoleKey.Enter);
}
#endregion
}
}
Lo que estoy haciendo a ver si me sale el 0 al 7 que se visualice pero me trabo. Solo he hecho el principio antes de hacer algo.
Código:
#region Volumen teclas.
public static void VolTeclas()
{
ConsoleKey teclaVolumen;
Console.Clear();
do
{
Console.SetCursorPosition(0, 0);
Console.Write("Vol. tecla: ");
Console.SetCursorPosition(11, 0);
teclaVolumen = Console.ReadKey(true).Key;
} while (teclaVolumen != ConsoleKey.Enter);
}
#endregion