Cómo insertar imágenes JPG, GIF y BMP de una forma sencilla.
A veces es necesario aprovechar todos los recursos que nos brinda el control RichTextBox. Si estamos creando un procesador de textos con este control, nos sería interesante hacer que nuestros programas tengan muchas posibilidades (formato, color, viñetas, etc) pero entre una de ellas está la de poder insertar imágenes dentro del documento. Para ello vamos a usar el Portapapeles y una llamada a la API SendMessage para lograr poner la imagen dentro del RichTextBox. El proyecto también tiene el control CommonDialog para abrir la imagen.
Código:
Option Explicit Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ (ByVal hWnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Long) As Long Private Const WM_PASTE = &H302; Private Sub cmdInsertarImagen_Click() On Error GoTo ErrorImagen Dim strRutaImagen As String Dim imgLaImagen As Picture Dim strContenidoPortapapeles As String With cdlImagen .DialogTitle = "Insertar imagen" .CancelError = True .Filter = "Todos los archivos de imágenes|*.gif;*.jpg;*.jpe;*.bmp;*.png|" _ & "Imágenes GIF (*.gif)|*.gif|Imágenes JPG (*.jpg, *.jpe)|*.jpg;*.jpe|" _ & "Imágenes de mapas de bits (*.bmp)|*.bmp|Imágenes PNG (*.png)|*.png| _ & "Todos los archivos (*.*)|*.*" .FilterIndex = 1 .Flags = cdlOFNFileMustExist Or cdlOFNHideReadOnly .ShowOpen strRutaImagen = .FileName End With Set imgLaImagen = LoadPicture(strRutaImagen) strContenidoPortapapeles = Clipboard.GetText Clipboard.Clear Clipboard.SetData imgLaImagen SendMessage rtfTexto.hWnd, WM_PASTE, 0, 0 Clipboard.Clear Clipboard.SetText strContenidoPortapapeles Exit Sub ErrorImagen: If Err.Number <> 32755 Then MsgBox "Error " & Err.Number & " " & Err.Description Exit Sub End If End Sub
La imagen queda insertada en el RichTextBox como si de un objeto se tratase. Se puede cambiar de tamaño, mover, y el texto va acompañado de la imagen.