none
Añadir función ''insertar imagen''

    Question

  • Hola, tengo VS2008 Professional y quisiera saber cómo insertar un formulario de inserción de imagen en un editor de texto (por ejemplo) que yo crease en Visual Basic o en C# (explíqueme cómo debo hacer lo que les pregunto en cada uno de estos lenguajes: VB y C#).
    Es decir, para que yo pueda crear una opción/función de ''Insertar imagen''. 

    Ángel Manuel
    Sunday, January 31, 2010 10:07 PM

Answers

  • :-)
    Hola de nuevo,

    El código que te he pasado lo que hace es obtener la ruta a una imagen de una caprpeta, y luego la carga en el fondo del formulario. Si lo que quieres es insertarla en un RichTextBox debes hacer lo siguiente:

            public const uint WM_PASTE = 0x302;
            [System.Runtime.InteropServices.DllImport("user32.dll")]
            public static extern int SendMessage(
                int hWnd, uint Msg, long wParam, long lParam);
    
            private void insertPictureInRichTextBox(RichTextBox RTB, Image Picture)
            {
                Clipboard.SetDataObject(Picture);
                DataFormats.Format myFormat = DataFormats.GetFormat (DataFormats.Bitmap);
                if (RTB.CanPaste(myFormat))
                {
                    RTB.Paste(myFormat);
                }
                else
                {
                  MessageBox.Show("Formato incorrecto!");
                }
            }
    Y llamar a la función de este modo:

            private void button1_Click(object sender, EventArgs e)
            {
                openFileDialog.Filter = "Sólo imágenes|*.jpg;*.pgn;*.gif";
                openFileDialog.Title = "Selecciona una imágen";
                openFileDialog.InitialDirectory = Environment.GetFolderPath(
                    Environment.SpecialFolder.MyPictures);
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    insertPictureInRichTextBox(richTextBox1, 
                        Image.FromFile(openFileDialog.FileName));
                }
            }

    Por cierto, para el desarrollo de Word y las demás aplicaciones que comentas no se utiliza este control. Es demasiado sencillo. Existen en el mercado otros controles de edición de texto para Windows / Web.

    Nota: El código está en C# pero puedes convertirlo a VB mediante cualquier conversor de los muchos que existen.

    Saludos,

    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Blog: http://msmvps.com/blogs/lfranco
    Geeks: http://geeks.ms/blogs/lfranco

    Monday, February 01, 2010 4:27 PM

All replies

  • hola

    ese editor de texto que mencionas con que control lo estas desarrollando ?

    sera quizas el RichTextBox


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Sunday, January 31, 2010 10:16 PM
  • Igual que hay controles en Visual Studio para abrir y guardar archivos, o modificar fuente,cómo asignar un control de inserción de imagen. (por si creare un editor de texto tipo WOrdPad)
    Ángel Manuel
    Monday, February 01, 2010 10:01 AM
  • :-)
    Hola,

    No es sencillo personalizar el diálogo de Abrir archivo, pero puede hacerse. Aquí tienes una forma:
    http://www.codeproject.com/KB/dialog/OpenFileDialogEx.aspx

    La otra es crearte tu propio formulario, que muestre una lista de los ficheros de una carpeta y un pictureBox para previsualizar el fichero.
    Saludos,

    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Blog: http://msmvps.com/blogs/lfranco
    Geeks: http://geeks.ms/blogs/lfranco

    Monday, February 01, 2010 12:21 PM
  • Pero yo quiero insertar una función que permita insertar una imagen en el texto (en este caso de un editor de texto), mejor dicho, en la que el usuario de la aplicación que yo crease, pueda añadir una imagen a la vez que texto. Algo como esto:

    FUNCIÓN ''INSERTAR IMAGEN'' en WORDPAD


    Ángel Manuel
    Monday, February 01, 2010 2:10 PM
  • :-)
    Hola Angel,

    Es que este cuadro de diálogo que nos muestras es un OpenFileDialog con el título cambiado y con un filtro que sólo permite seleccionar imágenes. Si le sumas que se abre por defecto en la carpeta de imágenes del usuario... tachán! Ya tienes un cuadro de diágolo para seleccionar imágenes.

    Saludos,

    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Blog: http://msmvps.com/blogs/lfranco
    Geeks: http://geeks.ms/blogs/lfranco

    Monday, February 01, 2010 2:44 PM
  • Pues explíqueme por favor qué hacer para que éste sólo permita seleccionar imágenes e insertarlas. Dígame cómo hacerlo en Visual C# y en Visual Basic, (o si se hace en ambos lenguajes de la misma manera)
    Ángel Manuel
    Monday, February 01, 2010 2:48 PM
  • hola

    por ahi algo como esto sea de utilidad

    Customizing OpenFileDialog in .NET


    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Monday, February 01, 2010 3:26 PM
  • :-)))
    Leandro... que es el mismo enlace que le he pasado antes, jejeje.
    No te preocupes, ya le estoy preparando un ejemplo... ahora lo publico.

    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Blog: http://msmvps.com/blogs/lfranco
    Geeks: http://geeks.ms/blogs/lfranco

    Monday, February 01, 2010 3:34 PM
  • :-)
    Hola,
    Prueba este código:

            private void button1_Click(object sender, EventArgs e)
            {
                openFileDialog.Filter = "Sólo imágenes|*.jpg;*.pgn;*.gif";
                openFileDialog.Title = "Selecciona una imágen";
                openFileDialog.InitialDirectory = Environment.GetFolderPath(
                    Environment.SpecialFolder.MyPictures);
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    this.BackgroundImage = Image.FromFile(openFileDialog.FileName);
                }
            }
    Observa que se establece el filtro del diálogo, el título y la carpeta inicial. El resto es comprobar si se ha seleccionado una imágen y cargarla en el form.

    Saludos,

    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Blog: http://msmvps.com/blogs/lfranco
    Geeks: http://geeks.ms/blogs/lfranco

    Monday, February 01, 2010 3:40 PM
  • hola

    uuhh si, disculpa no habia visto que ya habias recomendado ese link

    saludos
    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    Monday, February 01, 2010 3:40 PM
  • He empleado ese código en un proyecto C# con un RichTextBox, y un MenuStrip, y el usuario puede hacer clic en el acceso al formulario de imagen, pero selecciona la imagen y no se inserta. (¿entonces como desarrollan Word, WordPad u OpenOffice?)
    Ángel Manuel
    Monday, February 01, 2010 4:02 PM
  • :-)
    Hola de nuevo,

    El código que te he pasado lo que hace es obtener la ruta a una imagen de una caprpeta, y luego la carga en el fondo del formulario. Si lo que quieres es insertarla en un RichTextBox debes hacer lo siguiente:

            public const uint WM_PASTE = 0x302;
            [System.Runtime.InteropServices.DllImport("user32.dll")]
            public static extern int SendMessage(
                int hWnd, uint Msg, long wParam, long lParam);
    
            private void insertPictureInRichTextBox(RichTextBox RTB, Image Picture)
            {
                Clipboard.SetDataObject(Picture);
                DataFormats.Format myFormat = DataFormats.GetFormat (DataFormats.Bitmap);
                if (RTB.CanPaste(myFormat))
                {
                    RTB.Paste(myFormat);
                }
                else
                {
                  MessageBox.Show("Formato incorrecto!");
                }
            }
    Y llamar a la función de este modo:

            private void button1_Click(object sender, EventArgs e)
            {
                openFileDialog.Filter = "Sólo imágenes|*.jpg;*.pgn;*.gif";
                openFileDialog.Title = "Selecciona una imágen";
                openFileDialog.InitialDirectory = Environment.GetFolderPath(
                    Environment.SpecialFolder.MyPictures);
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    insertPictureInRichTextBox(richTextBox1, 
                        Image.FromFile(openFileDialog.FileName));
                }
            }

    Por cierto, para el desarrollo de Word y las demás aplicaciones que comentas no se utiliza este control. Es demasiado sencillo. Existen en el mercado otros controles de edición de texto para Windows / Web.

    Nota: El código está en C# pero puedes convertirlo a VB mediante cualquier conversor de los muchos que existen.

    Saludos,

    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Blog: http://msmvps.com/blogs/lfranco
    Geeks: http://geeks.ms/blogs/lfranco

    Monday, February 01, 2010 4:27 PM
  • :-)
    Hola de nuevo,

    El código que te he pasado lo que hace es obtener la ruta a una imagen de una caprpeta, y luego la carga en el fondo del formulario. Si lo que quieres es insertarla en un RichTextBox debes hacer lo siguiente:

            public const uint WM_PASTE = 0x302;
    
            [System.Runtime.InteropServices.DllImport("user32.dll")]
    
            public static extern int SendMessage(
    
                int hWnd, uint Msg, long wParam, long lParam);
    
    
    
            private void insertPictureInRichTextBox(RichTextBox RTB, Image Picture)
    
            {
    
                Clipboard.SetDataObject(Picture);
    
                DataFormats.Format myFormat = DataFormats.GetFormat (DataFormats.Bitmap);
    
                if (RTB.CanPaste(myFormat))
    
                {
    
                    RTB.Paste(myFormat);
    
                }
    
                else
    
                {
    
                  MessageBox.Show("Formato incorrecto!");
    
                }
    
            }
    
    
    Y llamar a la función de este modo:

            private void button1_Click(object sender, EventArgs e)
    
            {
    
                openFileDialog.Filter = "Sólo imágenes|*.jpg;*.pgn;*.gif";
    
                openFileDialog.Title = "Selecciona una imágen";
    
                openFileDialog.InitialDirectory = Environment.GetFolderPath(
    
                    Environment.SpecialFolder.MyPictures);
    
                if (openFileDialog.ShowDialog() == DialogResult.OK)
    
                {
    
                    insertPictureInRichTextBox(richTextBox1, 
    
                        Image.FromFile(openFileDialog.FileName));
    
                }
    
            }
    
    

    Por cierto, para el desarrollo de Word y las demás aplicaciones que comentas no se utiliza este control. Es demasiado sencillo. Existen en el mercado otros controles de edición de texto para Windows / Web.

    Nota: El código está en C# pero puedes convertirlo a VB mediante cualquier conversor de los muchos que existen.

    Saludos,

    No olvides marcar la respuesta como correcta si te ha sido de utilidad :-)

    [MS-MVP-MCTS]

    Mi Perfil MVP en: https://mvp.support.microsoft.com/profile/Lluis
    NUG: http://andorradotnet.com
    Web: http://www.ordeeno.com
    Blog: http://msmvps.com/blogs/lfranco
    Geeks: http://geeks.ms/blogs/lfranco


    ¿Y de qué sitios podría bajar yo otros controles de edición de texto de los que vd. me habla?
    He insertado la imagen, pero cuando se reduce, se estropea la calidad.
      public const uint WM_PASTE = 0x302;
            [System.Runtime.InteropServices.DllImport("user32.dll")]
            public static extern int SendMessage(
                int hWnd, uint Msg, long wParam, long lParam);
    
            private void insertPictureInRichTextBox(RichTextBox RTB, Image Picture)
            {
                Clipboard.SetDataObject(Picture);
              	 DataFormats.Format myFormat = DataFormats.GetFormat (DataFormats.Bitmap);
                if (RTB.CanPaste(myFormat))
                {
                    RTB.Paste(myFormat);
                }
                else
                {
                  MessageBox.Show("Formato incorrecto!");
                }
            }
    
    En este blóque de código, que le muestro, podría cambiar ''Bitmap'' (en la 10 linea) por lo relacionado a los formatos PNG y JPG.
    Ángel Manuel
    Tuesday, February 02, 2010 2:46 PM
  • Pero en ese mismo bloque de código, qué debo insertar para cambiar "Bitmap" por PNG, digo lo que reemplace a dicha palabra.
    Ángel Manuel
    Wednesday, February 03, 2010 6:26 PM
  • public const uint WM_PASTE = 0x302;
            [System.Runtime.InteropServices.DllImport("user32.dll")]
            public static extern int SendMessage(
                int hWnd, uint Msg, long wParam, long lParam);
    
            private void insertPictureInRichTextBox(RichTextBox RTB, Image Picture)
            {
                Clipboard.SetDataObject(Picture);
              	 DataFormats.Format myFormat = DataFormats.GetFormat (DataFormats.Bitmap);
                if (RTB.CanPaste(myFormat))
                {
                    RTB.Paste(myFormat);
                }
                else
                {
                  MessageBox.Show("Formato incorrecto!");
                }
            }
    Quiero saber qué debo hacer para que en este bloque de código, pueda cambiar ''bitmap'' a ''PNG'' (mejor dicho lo que debería escribir) y segundo, qué debería de hacer y en cuál de los 2 bloques de código para que al insertarse la imagen, apareciera en unas dimensiones definidas por mi y no las originales del archivo.
    Ángel Manuel
    Friday, February 05, 2010 12:18 PM
  • Gracias Lius franco me a valido mucho.

    Sabrias decirme como se imprime un listBox.

    De casiti MUCHAS GRACIAS

    Thursday, August 11, 2011 12:08 PM
  • geniooooooooooo!!!!! "

    this.BackgroundImage = Image.FromFile(openFileDialog.FileName);
    

    "

    me salvasteee!!!!!


    juan mejia

    Tuesday, August 07, 2012 9:14 PM