¿¡Remplazar el enter por un caracter?

Iniciado por TheGhost(Z), 1 Agosto 2006, 17:07 PM

0 Miembros y 1 Visitante están viendo este tema.

TheGhost(Z)

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.


sircid

#1
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.

Mad Antrax

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!!
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

sircid

Ignoraba la existencia de la funcion Replace en VB6.

Ese código reemplazaria todo los caracteres en el texto o solo uno?

elmaro

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!

Mad Antrax

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?
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.

elmaro

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!

karmany

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:


Y al pulsar el botón:


Ya contarás, un saludo..

TheGhost(Z)

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,

Mad Antrax

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 ;)
No hago hacks/cheats para juegos Online.
Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.