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

#171
Scripting / Probando este código
17 Junio 2020, 15:55 PM
Buenas:

Tengo este código de Python 2.x. No me funciona en Visual Studio Community 2019 (Gratuito).

Código (python) [Seleccionar]
import os, sys, tkFileDialog,Tkinter

root = Tkinter.Tk()
root.withdraw()

formats = [ ('Roms Super Nintendo SMC','.smc'),('Roms Super Nintendo SFC','.sfc'),('Fichier Bin','.bin'),('Roms Super Nintendo','.smc .sfc .bin') ]

input = tkFileDialog.askopenfile(parent=root,mode='rb',filetypes=formats,title='Select file to swap bin HI to LO like A16->A15, A17->A16...A21->A20 and A15->21')
if not input:
        print "Error: Cannot open file"
        sys.exit()

output = tkFileDialog.asksaveasfile(parent=root,mode='wb',filetypes=formats,title='Create output file name')
if not output:
        print "Error: cannot create output file"
        sys.exit()
       

# reading input file to a byte array
data = bytearray(input.read())

# calculating rom size in 2 exponants
expsize = 0
bytesize = len(data)
while bytesize > 1:
        expsize += 1
        bytesize = bytesize // 2

# init a proper size empty bytearray
buffer = bytearray()
for i in range(2**expsize): buffer.append(0)

# let's do the swap
count = 0
for i in range(len(data)):
        addr = (i & 0x7fff) + ((i & 0x008000) << (expsize - 16)) + ((i & 0x010000) >> 1) + ((i & 0x020000) >> 1) + ((i & 0x040000) >> 1) + ((i & 0x080000) >> 1) + ((i & 0x100000) >> 1) + ((i & 0x200000) >> 1)
        if addr != i: count += 1
        buffer[addr] = data[i]
print "Swapped %s (%s) addresses" % (count, hex(count))

# writing output file
output.write(buffer)

# close file handles
input.close()
output.close()


Me sale estos errores.
Traceback (most recent call last):
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "c:\program files (x86)\microsoft visual studio\2019\community\common7\ide\extensions\microsoft\python\core\debugpy\__main__.py", line 45, in <module>
    cli.main()
  File "c:\program files (x86)\microsoft visual studio\2019\community\common7\ide\extensions\microsoft\python\core\debugpy/..\debugpy\server\cli.py", line 429, in main
    run()
  File "c:\program files (x86)\microsoft visual studio\2019\community\common7\ide\extensions\microsoft\python\core\debugpy/..\debugpy\server\cli.py", line 266, in run_file
    runpy.run_path(options.target, run_name=compat.force_str("__main__"))
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 261, in run_path
    code, fname = _get_code_from_file(run_name, path_name)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\runpy.py", line 236, in _get_code_from_file
    code = compile(f.read(), fname, 'exec')
  File "C:\Users\Meta\Documents\Visual Studio 2019\Python_consola_01\Python_consola_01\Python_consola_01.py", line 10
    print "Error: Cannot open file"
                                  ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Error: Cannot open file")?
Press any key to continue . . .

¿Les dicen algo?

Saludos.
#173
Programación C/C++ / Capturar tecla
16 Junio 2020, 13:49 PM
Buenas:

En C++ CLR para almacenar en una variable cualquier tecla pulsada de hace así indicado abajo.

// Almacena la tecla pulsada en la variable.
ConsoleKey teclaInicial;


¿Cómo se hace en C++ Win32?

Saludos.
#174
No me funcioina.

Descubrí que en este caso si. Lo dejo aquí abajo por si alguien lo necesita.

Código (cpp) [Seleccionar]
// Ocultar cursor.
CONSOLE_CURSOR_INFO cci;
GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
cci.bVisible = 0;
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);


Saludos. Muchas gracias de todas formas.
#175
Buenas:

Trabajando con Win32 de C++ bajo Visual Studio Community 2019.

Cuando escriba Hola mundo. El cursor parpadea.

¿Hay alguna manera de quitarlo?

En C++ del CLR si se puede.

Código (cpp) [Seleccionar]
Console::CursorVisible = false;

En C++ Win32 no se como se hace.

Saludos.
#176
Hola:

Aquí un programa hecho en consola, solo se usa las flechas del teclado y Enter.

Este programa se basa en radioButton, que en este caso funciona si selecciona una opción y pulsas Enter, se pone un asterisco. Hasta ahí bien.

Al pulsar Salir, luego Entrar, no se queda guardado el * en el último radioButton seleccionado.

¿Cómo se hace?

El código que tengo por ahora lo dejo aquí.

using System;

namespace radioButton_consola_02_cs
{
    class Program
    {
        #region Variables.
        private static readonly string[] TEXTO = new string[]
        {
            "( ) Opción A        ",
            "( ) Opción B        ",
            "( ) Opción C        ",
            "    SALIR"
        };
        #endregion

        static void Main(string[] args)
        {
            // Tamaño de la ventana.
            Console.SetWindowSize(20, 5);

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

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

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

            // Almacena la tecla pulsada en la variable.
            ConsoleKey teclaInicial;

            do
            {
                // Limpiar pantalla.
                Console.Clear();

                // Posición del cursor del título del MENÚ PRINCIPAL.
                Console.SetCursorPosition(0, 0);

                // Título.
                Console.Write("   MENÚ PRINCIPAL   ");

                // Pocisión de la hora.
                Console.SetCursorPosition(4, 2);

                // Formato numérico dd/MM/yyyy.
                Console.Write(DateTime.Now.ToString("ddd dd MMM"));

                // Almacena en la variable una tecla pulsada.
                teclaInicial = Console.ReadKey(true).Key;

                // ¿Haz pulsado la tecla Enter?
                if (teclaInicial == ConsoleKey.Enter)
                {
                    // Sí. Se ejecuta esta función.
                    MenuPrincipal();
                }
            } while (teclaInicial != ConsoleKey.Escape);

            #region Menú Principal.
            void MenuPrincipal()
            {
                bool salir = false;

                // En itemSelecionado:
                // -1 = Sin seleccionar con * ninguna opción.
                // 0 = Seleccionar con * la Opción A.
                // 1 = Seleccionar con * la Opción B.
                // 2 = Seleccionar con * la opción C.
                int itemSeleccionado = 0;
                int itemSeñalado = 0;

                // Capturar tecla para luego validar.
                ConsoleKey tecla;

                do
                {
                    //******************************************************************
                    // Dibujo el menú principal.

                    // Rellenar fondo verde.
                    //Console.BackgroundColor = ConsoleColor.Green;

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

                    // Limpiar pantalla.
                    Console.Clear();

                    for (int k = 0; k < TEXTO.Length; k++)
                    {
                        Console.SetCursorPosition(0, k);
                        Console.Write(itemSeñalado == k ? "> " : "  ");
                        Console.Write(TEXTO[k]);
                        Console.SetCursorPosition(3, k);
                        Console.Write(itemSeleccionado == k ? "*" : " ");
                    }

                    // Fin de pintar el menú principal.
                    //******************************************************************

                    // Leer tecla ingresada por el usuario.
                    tecla = Console.ReadKey(true).Key;

                    switch (tecla)
                    {
                        case ConsoleKey.Enter:
                            itemSeleccionado = itemSeñalado;
                            salir = (itemSeleccionado == TEXTO.Length - 1);
                            break;

                        case ConsoleKey.DownArrow:
                            if (++itemSeñalado >= TEXTO.Length)
                            {
                                itemSeñalado = 0;
                            }
                            break;

                        case ConsoleKey.UpArrow:
                            if (--itemSeñalado < 0)
                            {
                                itemSeñalado = TEXTO.Length - 1;
                            }
                            break;
                    }
                    // Uso la tecla escape como salida.
                } while (!salir);
            }
            #endregion
        }
    }
}


Saludos.
#177
.NET (C#, VB.NET, ASP) / Corregir un fallo
11 Junio 2020, 12:33 PM
Buenas:



Usando el teclado solo las flechas y el Enter, en este programa puedo escribir nombre y se muestra en pantalla. Al escribir un nombre, pulso Enter y correctamente me lleva a la zona de > "Atrás". Si con la flecha derecha o izquierda me tiene que llevar a la parte de > Guardar.

El problema está que tiene que indicar con el caracter > en Guardar, y se ejecuta directamente, cosa que no debe ser. En la zona Atrás y Guardar solo se ejecuta si pulso Enter.

Dejo el código aquí como ejemplo.
Código (csharp) [Seleccionar]
using System;

namespace LCD_nombre_archivo_consola_03
{
    class Program
    {
        static string guardarNombre = "";
        static int coordenadaX = 0;
        static ConsoleKey key;

        static readonly char[] roALFANUMERICO = new char[] {
            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'Ñ', 'O', 'P',
            'Q', 'R', 'S', 'T', 'U', 'V', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
            'i', 'j', 'k', 'l', 'm', 'n', 'ñ', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'x', 'y',
            'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9','.', ',', '-', '_', ':', ';',
            '¿', '?', '(', ')', '[', ']', '{', '}','=', '$','&', '"', ' '};
        static readonly int[] roINDICE_ARRAY = new int[] {
            80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80 };
        static readonly string[] TEXTO = new string[] { "ATRÁS", "GUARDAR" };
        static int index = 0;
        static void Main(string[] args)
        {
            // Título de la pantalla.
            Console.Title = "Cambiar nombre";

            Inicio();
        }

        #region Inico.
        private static void Inicio()
        {
            // Tamaño de la ventana.
            Console.SetWindowSize(20, 5);

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

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

            Console.Clear();

            Console.SetCursorPosition(0, 0);
            Console.Write("Nombre del relé 1:  ");
            Console.SetCursorPosition(0, 1);
            //Console.Write("AAAAAAAAAAAAAAAA");

            for (int i = 0; i < roINDICE_ARRAY.Length; i++)
            {
                Console.Write(roALFANUMERICO[roINDICE_ARRAY[i]]);
            }

            Console.SetCursorPosition(2, 3);
            Console.Write(TEXTO[0]); // ATRÁS.
            Console.SetCursorPosition(12, 3);
            Console.Write(TEXTO[1]); // GUARDAR.

            while (true)
            {
                Console.SetCursorPosition(coordenadaX, 1);
                key = Console.ReadKey(true).Key;
                switch (key)
                {
                    case ConsoleKey.RightArrow:
                        if (coordenadaX < 15)
                            coordenadaX++;
                        break;

                    case ConsoleKey.LeftArrow:
                        if (coordenadaX > 0)
                            coordenadaX--;
                        break;

                    case ConsoleKey.UpArrow:
                        roINDICE_ARRAY[coordenadaX]++;
                        if (roINDICE_ARRAY[coordenadaX] >= roALFANUMERICO.Length)
                        {
                            roINDICE_ARRAY[coordenadaX] = 0;
                        }
                        Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
                        break;

                    case ConsoleKey.DownArrow:
                        roINDICE_ARRAY[coordenadaX]--;
                        if (roINDICE_ARRAY[coordenadaX] < 0)
                        {
                            roINDICE_ARRAY[coordenadaX] = roALFANUMERICO.Length - 1;
                        }
                        Console.Write(roALFANUMERICO[roINDICE_ARRAY[coordenadaX]]);
                        break;

                    case ConsoleKey.Enter:
                        Console.SetCursorPosition(1, 3);
                        Console.Write(">");
 
                        while (true)
                        {
                            key = Console.ReadKey(true).Key;

                            switch (key)
                            {
                                case ConsoleKey.RightArrow:
                                case ConsoleKey.LeftArrow:
                                    index = 1 - index;
                                    break;

                                case ConsoleKey.UpArrow:
                                case ConsoleKey.DownArrow:
                                    Console.SetCursorPosition(coordenadaX, 1);
                                    break;

                                case ConsoleKey.Enter:

                                    break;
                            }

                            for (int a = 0; a < 2; a++)
                            {
                                Console.SetCursorPosition(1 + (10 * a), 3);
                                if (a == index)
                                    Console.Write(">");
                                else
                                    Console.Write(" ");
                            }

                            if (index == 0)  // se pulsó Atrás
                            {
                                Atras();
                                //break;  // vuelve a la edición de letras
                            }
                            else if (index == 1)  // se pulsó Guardar
                            {
                                Guardar();
                            }
                        }
                }
            }
        }
        #endregion

        private static void Atras()
        {
            Console.Clear();
            Console.SetCursorPosition(0, 1);
            Console.Write("HAS PULSADO ATRÁS   ");
            Console.ReadKey(); // Pulse cualquier tecla para salir.
        }

        private static void Guardar()
        {
            Console.Clear();
            Console.SetCursorPosition(0, 1);
            Console.Write("HAS GUARDADO       ");
            for (int a = 0; a < roINDICE_ARRAY.Length; a++)
                guardarNombre += roALFANUMERICO[roINDICE_ARRAY[a]].ToString();
            Console.SetCursorPosition(0, 2);
            Console.Write(guardarNombre);
        }
    }
}


Un cordial saludos.
#178
.NET (C#, VB.NET, ASP) / Re: Cambio de estilo
5 Abril 2020, 05:51 AM
Serial es pa rael puerto serie.

Que se parezca programar C de Arduino cuando estás con C#.
#179
.NET (C#, VB.NET, ASP) / Cambio de estilo
4 Abril 2020, 20:28 PM
Hola:

En un archivo de Arduino C, se escribe algo así.
void setup()
{
  // put your setup code here, to run once:

}

void loop()
{
  // put your main code here, to run repeatedly:

}


Quiero simularlo en C# los setup y loop. Que daría en C# así:
Código (csharp) [Seleccionar]
using System;

namespace Prueba
{
    class Program
    {
        static void Main(string[] args)
        {
            setup();
            while (true)
            {
                loop();
            }
        }

        private static void setup()
        {
          // put your setup code here, to run once:
        }

        private static void loop()
        {
          // put your main code here, to run repeatedly:
        }
    }
}


Mostrar texto en consola de C# es así:
Código (csharp) [Seleccionar]
Console.Write"¡Hola Mundo!";

En Arduino mostarlo en un LCD es así:
lcd.printf("¡Hola Mundo!");

Se crea en C# simulando el C de Arduino así:
Código (csharp) [Seleccionar]
public static class lcd{

    public static void printf(string mensaje){

        Console.Write(mensaje);

   }

}


¿Cómo hago en C# una buena plantilla para que se vea solo lo de abajo?
    void setup()
    {
      // put your setup code here, to run once:
     
    }
     
    void loop()
    {
      // put your main code here, to run repeatedly:
     
    }


En pleno C#.

Saludos.
#180
Muy bueno.

Lo que no sabía la forma que esto se puede hacer como lo hiciste.
Código (csharp) [Seleccionar]
static char[] abc123 = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789".ToCharArray();

Ni en los documentos oficiales aparece ese ejemplo que hiciste.
https://docs.microsoft.com/es-es/dotnet/api/system.array?view=netframework-4.8

El compilador me indicó que pusiera readonly (solo lectura).
Código (csharp) [Seleccionar]
        static bool escribiendo = true, fin = false;
        static ConsoleKey key;
        static String nombre;
        static readonly char[] abc123 = " ABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789".ToCharArray();
        static readonly int[] idx = new int[16];


Funciona todo el programa perfecto. Faltó un detalle. Si estás en las flechas en la zona.

> ATRÁS     GUARDAR.

Cuando pulses todo el rato la flecha izquierda o derecha, tiene que rotar el cursos >, no que si pulso izquierda, se quede ahí.

En cuanto a lo demás, buena calidad del código y buen trabajo.

Saludos.  ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)