none
"La Cosa" en Windows Form RRS feed

  • Pregunta

  • Buenas:

    Gracias a los compañeros del foro, se ha hecho este código de abjo en modo consola C# 2017.

    using System;
    using System.Threading;
    
    namespace The_Thing_La_Cosa_Consola_01_cs
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.Title = "The Thing - La Cosa - C#";
                Console.WindowWidth = 38;   // X ancho.
                Console.WindowHeight = 15;  // Y altura.
    
                // Cursor invisible.
                Console.CursorVisible = false;
    
                // Dibujar cuadro.
                DrawMarco(1, 1, 35, 14);
    
                // Escribir textos.
                Console.SetCursorPosition(2, 4);
                Escribir("PROJECTION:\n", 25);
                Console.SetCursorPosition(2, 5);
                Escribir("IF INTRUDER ORGANISM REACHES\n", 25);
                Console.SetCursorPosition(2, 6);
                Escribir("CIVILIZED AREAS . . .\n", 25);
                Thread.Sleep(100);
                Console.SetCursorPosition(2, 10);
                Escribir("ENTIRE WORLD POPULATION INFECTED\n", 25);
                Console.SetCursorPosition(2, 11);
                Escribir("27,000 HOURS FROM FIRST CONTACT.\n", 25);
    
                // En español.
                Thread.Sleep(2000);
    
                // Limpiar pantalla.
                Console.Clear();
    
                // Dibujar cuadro.
                DrawMarco(1, 1, 35, 14);
    
                // Escribir textos.
                Console.SetCursorPosition(2, 3);
                Escribir("PROYECCIÓN:\n", 25);
                Console.SetCursorPosition(2, 4);
                Escribir("SI ORGANISMO INTRUSO ALCANZA\n", 25);
                Console.SetCursorPosition(2, 5);
                Escribir("ZONAS CIVILIZADAS . . .\n", 25);
                Thread.Sleep(100);
                Console.SetCursorPosition(2, 9);
                Escribir("TODA LA POBLACIÓN MUNDIAL INFECTÓ\n", 25);
                Console.SetCursorPosition(2, 10);
                Escribir("27,000 HORAS DESDE EL PRIMER\n", 25);
                Console.SetCursorPosition(2, 11);
                Escribir("CONTACTO.\n", 25);
    
                Console.ReadKey();
            }
    
            public static void Escribir(string Cadena, int tiempo)
            {
                foreach (char letra in Cadena)
                {
                    Console.Write(letra);
                    Console.Beep(600, 25); // Console.Beep(frecuencia, duracion);
                }
            }
    
            private static void DrawMarco(int v1, int v2, int v3, int v4)
            {
                Console.ForegroundColor = ConsoleColor.Cyan; // Texto azul claro.
                Console.BackgroundColor = ConsoleColor.DarkBlue; // Fondo azul oscuro.
                Console.Clear(); // Para poner fondo azul oscuro en la pantalla completa.
    
                Console.CursorVisible = false;
                gotoXY(v1, v2, "┌");
    
                for (int i = v1 + 1; i < v3; i++)
                {
                    gotoXY(i, v2, "─");
                }
                gotoXY(v3, v2, "┐");
                for (int i = v2 + 1; i < v4; i++)
                {
                    gotoXY(v3, i, "│");
                }
                gotoXY(v3, v4, "┘");
                for (int i = v3 - 1; i > v1; i--)
                {
                    gotoXY(i, v4, "─");
                }
                gotoXY(v1, v4, "└");
                for (int i = v4 - 1; i > v2; i--)
                {
                    gotoXY(v1, i, "│");
                }
                //Console.CursorVisible = true;
            }
    
            private static void gotoXY(int v1, int v2, string cadena)
            {
                Console.SetCursorPosition(v1, v2);
                Console.WriteLine(cadena);
                Thread.Sleep(1);
            }
        }
    }

    Quiero que aparezca alrededor el marco primero, pero no se hace igual como el código que muestra aquí ya que se está tratando con un label.

    Ahora quiero adaptarlo con Windows Form, he introducido un label en su lugar como muestra en  la pantalla.

    Que se dibuje poco a poco.

    ¿Cómo se hace?

    Otra cosa, el sonido del beep solo suena al final.

    ¿Se puede en Windows form poner sonido por cada letra que en consola si se puede hacer?

    Gracias.


    http://electronica-pic.blogspot.com


    • Editado Metaconta domingo, 5 de mayo de 2019 8:44
    domingo, 5 de mayo de 2019 8:40

Respuestas

  • Hola

    para que aparezca todo con un retraso se debe dibujar todo en un hile diferente a la ejecución

    para el marco se utiliza graphic del form

    y para los textos los labels, en mi caso inserte 9 labels pero no use todas y tampoco elimine las que no utice

    el codigo me quedo asi + o -

     private void Form1_Load(object sender, EventArgs e)
            {
                Thread tr = new Thread(new ThreadStart(drawlines));
                tr.Start();
            }
    
            public delegate void Function();
            Point A = new Point(5, 5);
            Point B = new Point(5, 5);
    
            private void drawlines()
            {
                Thread.Sleep(1000);
                drawMarco();
                Thread.Sleep(25);
                SetText("2", "PROJECTION:");
                SetText("3", "IF INTRUDER ORGANISM REACHES");
                SetText("4", "CIVILIZED AREAS . . .");
                Thread.Sleep(100);
                SetText("7", "ENTIRE WORLD POPULATION INFECTED");
                SetText("8", "27,000 HOURS FROM FIRST CONTACT.");
                Thread.Sleep(2000);
                clrscr();
                drawMarco();
                SetText("1", "PROYECCIÓN:");
                SetText("2", "SI ORGANISMO INTRUSO ALCANZA");
                SetText("3", "ZONAS CIVILIZADAS . . . ");
                Thread.Sleep(100);
                SetText("7", "TODA LA POBLACIÓN MUNDIAL INFECTÓ");
                SetText("8", "27,000 HORAS DESDE EL PRIMER");
                SetText("9", "CONTACTO.");
                Thread.Sleep(2000);
                Application.Exit();
    
            }
           
            private void clrscr()
            {
                A = B;
                Graphics ps = this.CreateGraphics();
                ps.FillRectangle(new SolidBrush(Color.DarkBlue), 0,0, this.Width, this.Height);
                foreach (Control control in Controls)
                {
                    this.Invoke(new Function(delegate ()
                    {                
                        control.Text = "";
                    }));                
                }
    
            }
    
            private void SetText(string name, string txt)
            {
                string nombre = $"label{name}";
                foreach (char letra in txt)
                {
                    this.Invoke(new Function(delegate ()
                    {            
                   
                        Controls[nombre].Text += letra;
                    }));
                    Console.Beep(600, 25);
                    Thread.Sleep(25);
    
                }
            }
    
           
    
            private void drawMarco()
            {
                for (int i = 5; i < this.Width - 20; i++)
                    SetMarco(i, B.Y);            
                for (int i = 5; i < this.Height - 40; i++)
                    SetMarco(B.X, i);            
                for (int i = this.Width - 20; i > 5; i--)
                     SetMarco(i, B.Y);            
                for (int i = this.Height - 40; i > 5; i--)
                     SetMarco(B.X, i);
            }
    
            private void SetMarco(int x,int y)
            {
                this.Invoke(new Function(delegate ()
                  {
                      A = B;
                      B = new Point(x, y);
                      Graphics ps = this.CreateGraphics();
                      ps.DrawLine(new Pen(Color.Blue,3), A, B);
                  }));
                Thread.Sleep(1);
            }

    si el codigo te sirvio marcala como resuelta

    • Marcado como respuesta Metaconta domingo, 5 de mayo de 2019 22:24
    domingo, 5 de mayo de 2019 17:20
  • Deleted
    • Marcado como respuesta Metaconta domingo, 5 de mayo de 2019 22:25
    domingo, 5 de mayo de 2019 18:01

Todas las respuestas

  • Hola

    para que aparezca todo con un retraso se debe dibujar todo en un hile diferente a la ejecución

    para el marco se utiliza graphic del form

    y para los textos los labels, en mi caso inserte 9 labels pero no use todas y tampoco elimine las que no utice

    el codigo me quedo asi + o -

     private void Form1_Load(object sender, EventArgs e)
            {
                Thread tr = new Thread(new ThreadStart(drawlines));
                tr.Start();
            }
    
            public delegate void Function();
            Point A = new Point(5, 5);
            Point B = new Point(5, 5);
    
            private void drawlines()
            {
                Thread.Sleep(1000);
                drawMarco();
                Thread.Sleep(25);
                SetText("2", "PROJECTION:");
                SetText("3", "IF INTRUDER ORGANISM REACHES");
                SetText("4", "CIVILIZED AREAS . . .");
                Thread.Sleep(100);
                SetText("7", "ENTIRE WORLD POPULATION INFECTED");
                SetText("8", "27,000 HOURS FROM FIRST CONTACT.");
                Thread.Sleep(2000);
                clrscr();
                drawMarco();
                SetText("1", "PROYECCIÓN:");
                SetText("2", "SI ORGANISMO INTRUSO ALCANZA");
                SetText("3", "ZONAS CIVILIZADAS . . . ");
                Thread.Sleep(100);
                SetText("7", "TODA LA POBLACIÓN MUNDIAL INFECTÓ");
                SetText("8", "27,000 HORAS DESDE EL PRIMER");
                SetText("9", "CONTACTO.");
                Thread.Sleep(2000);
                Application.Exit();
    
            }
           
            private void clrscr()
            {
                A = B;
                Graphics ps = this.CreateGraphics();
                ps.FillRectangle(new SolidBrush(Color.DarkBlue), 0,0, this.Width, this.Height);
                foreach (Control control in Controls)
                {
                    this.Invoke(new Function(delegate ()
                    {                
                        control.Text = "";
                    }));                
                }
    
            }
    
            private void SetText(string name, string txt)
            {
                string nombre = $"label{name}";
                foreach (char letra in txt)
                {
                    this.Invoke(new Function(delegate ()
                    {            
                   
                        Controls[nombre].Text += letra;
                    }));
                    Console.Beep(600, 25);
                    Thread.Sleep(25);
    
                }
            }
    
           
    
            private void drawMarco()
            {
                for (int i = 5; i < this.Width - 20; i++)
                    SetMarco(i, B.Y);            
                for (int i = 5; i < this.Height - 40; i++)
                    SetMarco(B.X, i);            
                for (int i = this.Width - 20; i > 5; i--)
                     SetMarco(i, B.Y);            
                for (int i = this.Height - 40; i > 5; i--)
                     SetMarco(B.X, i);
            }
    
            private void SetMarco(int x,int y)
            {
                this.Invoke(new Function(delegate ()
                  {
                      A = B;
                      B = new Point(x, y);
                      Graphics ps = this.CreateGraphics();
                      ps.DrawLine(new Pen(Color.Blue,3), A, B);
                  }));
                Thread.Sleep(1);
            }

    si el codigo te sirvio marcala como resuelta

    • Marcado como respuesta Metaconta domingo, 5 de mayo de 2019 22:24
    domingo, 5 de mayo de 2019 17:20
  • Deleted
    • Marcado como respuesta Metaconta domingo, 5 de mayo de 2019 22:25
    domingo, 5 de mayo de 2019 18:01
  • Aquí se podrá hacer con GDI+ a base de rallas.

    https://docs.microsoft.com/es-es/dotnet/api/system.drawing.graphics.drawline?view=netframework-4.8

    dd


    http://electronica-pic.blogspot.com

    domingo, 5 de mayo de 2019 22:28