Saludos,
Pues vera, estoy haciendo un exe para enviar correo, usando MAPI y ShellExecute.
Cuando uso MAPI's Al final del envio sale un mensaje diciendo que un programa esta intentand enviar el sgte mensaje y bala bla bla.. lo cual no viene a mi caso..
El segundo es usando ShellExecute.
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Sub Command1_Click()
Call ShellExecute(Me.hwnd, "Open", "mailto:xxx@xx.com?bcc=&subject=Probando Mailto&body=PrimeraLinea%0ASegundaLinea
End Sub
Con la Segunda opcion no me sale ese mensaje molesto, pero me ejecuta, y me muestra el correo a enviar.. lo cual me resulta util porsi quiero agregar ams cosas al mensaje..
Problema 1: Este metodo solo me permite enviar texto en linea y no lee los enters. porque quiero enviar el contenido de un texto box.. y solo sale en el mensaje la primera linea..
¿Posibles La soluciones?
1.- Intente concatenando cadenas:
"Linea1" & chr(13) & "Linea2" --> No resulto
2.-Insertando caracter especial
Linea1%0ALinea2 --> Si resulto ;)
La clave esta en agregar el caracter "%0A" que reconoce como un enter.. mi proble es que deseo buscar todos los enter en un textbox y reamplazarlos por %0A. asi lo envio en una variable y al fin el correo se muestra tal y como este en el textbox..
Porfa.. si alguien me echa ua mano o si conoce de un link sobre como puedo remplzar los enter de un textbox por %0A
O si conocen otra manera de enviar correo desde desde un textbox, pero sin que salgue ese mensaje de advertencia de envio..
saludos.
No entiendo nada de enviar emails en VB6 pero la duda que tienes si se como resolverla :P.
Si es posible. Al fin y al cabo el salto de línea es un caracter mas como el espacio.
Dim texto, remplazo As String
Dim n, start As Integer
n = 1
start = 1
texto = Chr(32)
remplazo = "%0A"
While n <> 0 ' Mientras en el texto siga existiendo la variable texto:
n = InStr(start, Text1.Text, texto, vbTextCompare) ' Compara el text1.text con la variable texto. El número que devuelve es la posición donde se ha encontrado la cadena de caracteres. Como la posición 0 no existe 0 es que no se ha encontrado.
start = n + 1 'empezará siempre desde la posición de la ultima cadena de caracter encontrada + 1.
If n <> 0 Then ' si se ha encontrado
Text1.SelStart = n - 1 ' se seleccionará la cadena de caracter
Text1.SelLength = Len(texto)
Text1.SelText = remplazo ' se reemplaza el texto seleccionado por el deseado: remplazo.
End If
Wend
El Chr(32) convierte el número 32 en Ascii ( igual que pulsar ALT+32 en numpad y te saldrá un espacio ). Busca el código Ascii del enter ( no lo encontré sorry ) e utilizalo y funcionará 100%.
PD: Encontre el codigo de salto de linea es el 10. Chr(10). Lo probé pero da un resultado extraño. Compruebalo haber que tal.
Espero haberte ayudado.
otra forma más sencilla seria:
Texto = Replace(Text1.Text, vbCrLf, "%0A")
Este código remplaca el caracter vbCrLf por el caracter %0A, si no te sirve prueba este:
Texto = Replace(Text1.Text, Chr(13), "%0A")
Saludos!!
Ignoraba la existencia de la funcion Replace en VB6.
Ese código reemplazaria todo los caracteres en el texto o solo uno?
bueno aca tengo algo que te servira,. es sencillo y rapido
Private Sub Command1_Click()
Dim Cambiar
Cambiar = Replace(Text1.Text, vbCrLf, "%0A")
Text2.Text = Cambiar
End Sub
el text1 contiene todo el texto con los "enters" y demas...
en el text2 al pulsar el boton se te pone todo en una cadena
avisa si te sirve
El MaRo!
Cita de: sircid en 1 Agosto 2006, 18:30 PM
Ignoraba la existencia de la funcion Replace en VB6.
Ese código reemplazaria todo los caracteres en el texto o solo uno?
Si, reemplazaria todos los caracteres de ese string ;)
Por cierto elmaro, eso que has puesto es lo mismo que lo mio, no?
jajaja si,. es que estaba escribiendo el code y me fui a comer,. cuadno volvi me aviso que avia nuevos mensajes,. pero lo postie igual ... :P iba a ser el primero que contestara si no comia :S pero bue...
ahora que veo es lo mismo, solo que tiene una linea que te muestra como keda despues de remplazado,. tu usaste nomas el Replace
es un code bastante simple, no como el de sircid que es bastante largo y complicado de entender a comparacion del Replace, ovbio. es bastante complejo, muy bueno
perdon xD
El MaRo!
Te voy a dar otra solución que no busca el vbCrLf, así te aparecerá tal como lo pusiste en el textbox..
1 formulario, 1 botón y un textbox:
Lo primero yo he dibujado un textbox con esto:
height 1575
left 480
top 480
width 2175.
El interesante código es el siguiente( así te evitas buscar vbCrLf, ya que muchas veces no cabe en una linea de un textbox):
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Sub Command1_Click()
Dim i As Long, nlineas As Long
Dim inicio As Long, longitud As Long
Dim frase As String
' Constantes SendMessage:
Const EM_GETLINECOUNT = &HBA
Const EM_LINELENGTH = &HC1
Const EM_LINEINDEX = &HBB
' Calcula el número de líneas del textbox
nlineas = SendMessage(Text1.hwnd, EM_GETLINECOUNT, 0, 0&)
For i = 0 To nlineas - 1
' Calcula el primer carácter de la linea actual:
inicio = SendMessage(Text1.hwnd, EM_LINEINDEX, i, 0&) + 1
' Calcula la longitud de la línea actual
longitud = SendMessage(Text1.hwnd, EM_LINELENGTH, inicio, 0&)
frase = frase + Mid$(Text1.Text, inicio, longitud) + "%0A"
Next i
Call ShellExecute(Me.hwnd, "Open", "mailto:xxx@xx.com?bcc=&subject=Probando Mailto&body=" + frase, "", "", vbNormalFocus)
End Sub
Private Sub Form_Load()
Text1.Text = "Quijote 2006:" + vbCrLf + "En un lugar de" + vbCrLf + "la mancha, de cuyo nombre no quiero acordarme..."
End Sub
Así que al ejecutar el programa aparece esto:
(http://www.pic2up.net/TDRGYy.jpg)
Y al pulsar el botón:
(http://www.pic2up.net/TtRGYY.jpg)
Ya contarás, un saludo..
Muchísimas gracias a todos... son grandes. Pude resolver el problema..
Gracias a uds. Pue de cambiar todos los enters por los caracteres "%0A" y asi sí se puede enviar los mensajes con el ShelExecute tal y como esta enn el text box..
Bueno, no todo es cierto..
Pues puse cran cantidad de información en el textbox... al pinchar en el command enviar.. no se ejecutaba el nuevo correo.. y como que pasaba por altdo todo el mensaje a evnair..
Y me preguntaba si he ingresado directamente lso caracteres %0A y al enviar lo reconocía como un enter... y ahora porque "@%&0.... no envia si ya todo esta remplazado..
Porlo que tuve que reisar y reviar hasta que enpeze a cortar la infromación. Lo que dedujo que solo se puede envair 819 caracateres contando los espacios en blancos, pero no los enters ya que se remplazan.... bueno depende de cuantos.. enters haya...
Pero como para mi es suficiente enviar los 819 caracteres, no me incomoda.. Pero LES INFORMABA PARA QUE CUANDO TENGAN EL LIO YA SEPAN POR DONDE EMPEZAR..
Saludos,
Ojo, que el carcater "enter" (conocido formalmente como retorno de carro) ocupa 2 caracteres. es decir:
vbCrLf = vbCr + vbLf
vbCrLf = Chr(13) + Chr(10)
Por eso los "enters" ocupan como 2 caracters normales ;)
Hola,karmany, te pasate con el codigo.. esta muy bueno!
Casi ya todo el día me pase buscando soluciones a este lío.. hasta que me dije, mejor boy a mi foro como ultimo recurso... ...
Je je je y me han ayudado con el problema en menos de 30 minutos......
Gracias,
A todos!
y si somos buenos :P :D (??) jasajaja
tmb veo que te gusta starcraft y preferentemente los protoss,. al igual que yo :)
saludos,.
bien x ti x resolver el problema
El MaRo!