Hola Ariel, Hola Flor
Os envio este código a ver si os sirve para imprimir un Memo y en modo texto sin Crystal.
'***************************************************************************************************
' Iniciar impresora
Printer.Print ""
' Indicar propiedades de la fuente (comenta o cambia lo que no te sirva)
Printer.Font.Name = "Arial"
Printer.Font.Size = 10
Printer.Font.Bold = True
Printer:Font.Italic = True
Printer.Font.Underline = True
' Poner Titulo si lo quieres
Dim Titulo$
Titulo = "TituloMemo"
' Indicar coordenadas de impresión en twips, las cifras exactas las calculas segun 1cm = 567
Printer.CurrentX = (11340 - Printer.TextWidth(Titulo)) / 2 ' centra el titulo horizontalmente
Printer.CurrentY = 567 ' posición vertical del titulo
Printer.Print Titulo
'----- Imprimir memo con control data-----
Dim sCadMemo$
sCadMemo = Data1.Recordset("NombreCampoMemo")
' El registro activo es el que aparece en el control asociado a Data.
' Moverse a otro con Move o Find si es necesario.
' Si la longitud de la cadena no sobrepasa una línea ni el ancho del papel no tendrás
' más problemas que: Printer.Print sCadMemo y darle las posiciones antes.
' Si tiene más lineas y el ancho es variable deberás dar formato a la cadena con las
' funciones InStr y Mid$ ó insertando Chr(13) cada n caracteres, que correspondan
' al ancho de cada línea que quieras, medida según el ancho de la fuente.
' El ejemplo que sigue es solo orientativo (sin probar), no te puedo asegurar que funcione.
Printer. CurrentY = ? ' Aquí pones la posición de inicio vertical de impresión del Memo
Dim lNumeroCaracteres&, lIniPosic&, lSigPosic&, sCadImprimir$
lNumeroCaracteres = ? ' Aquí pones el nº carac. que necesites
lIniPosic = 1
lSigPosic = 0
Do While lIniPosic <= Len(sCadMemo)
Do
'-------Buscar espacios en el texto----------
lSigPosic = InStr(lIniPosic, sCadMemo, " ")
If lSigPosic = 0 Then ' si no hay espacios
' extraer cadena hasta el final
sCadImprimir = sCadImprimir & Mid$(sCadMemo, lIniPosic)
' modificar posic. inicio
lIniPosic = Len(sCadMemo) + 1
Else ' si hay espacios
' extraer cadena espacio a espacio (palabra a palabra)
sCadImprimir = sCadImprimir & Mid$(sCadMemo, lIniPosic, _
lSigPosic - lIniPosic + 1)
' modificar posic. inicio
lIniPosic = lSigPosic + 1
End If
Loop While Len(sCadImprimir) <= lNumeroCaracteres _
And lIniPosic <= Len(sCadMemo)
'-------Imprimir cada línea-----------
' Printer. CurrentY no se indica ya que el salto de carro se añade automaticamente
' a cada instrucción Print. Pero hay que expecificar CurrentX por cada línea
Printer.CurrentX = ? ' Aquí pones distancia de margen izq. para cada línea
Printer. Print sCadImprimir
Loop
' Enviar doc a la impresora
Printer.EndDoc
'*****************************************************************************************************
Es posible que se altere un poco la anchura de la cadena por sobrepasar una vez las condiciones a la salida del bucle. Si es así, reducir el nº de caracteres, o estudiar la manera de intercalar más variables de posición en el bucle para remediarlo. Tambien podeis experimentar con la anchura medida con Printer.TextWidth(sCadImprimir) en lugar de Len(sCadImprimir). Mejorarlo y corregirlo ya es cosa vuestra y nos lo contais. Espero que os sirva. Para más información sobre Printer pedidle a Ramón Egido el documento que cita en su mensaje. Saludos
Santiago Jimeno (Madrid)