Imprimir en español desde VB

Estoy imprimiendo desde Visual Basic utilizando Open para aperturar el puerto LPT1 e imprimir con Print #1. Pero las letras acentuadas y la letra ñ es sustituida por otros caracteres. ¿Cómo hago para que estas letras se impriman correctamente?

1 respuesta

Respuesta
1
Esta rutina la bajé de la Página de el Guille (guille. Costasol.net) que no se diga que no doy los créditos ... y funcionan muy bien.
Antes de usar la función, (FiltroMSDOS), se debe llamar al procedimiento que inicializa el array (IniciarFiltroMSDOS).
Este array debe estar en el mismo módulo en el que se encuentran la función y el procedimiento.
Para usarlo tendrás que hacer algo por el estilo a esto:
sMSDOS = FiltroMSDOS("La cigüeña")
'En la parte de las declaraciones del módulo
Dim iASCII(1 To 63) As Integer 'Para conversión a MS-DOS
'Este sub se debe llamar antes de usar la función
Public Sub IniciarFiltroMSDOS()
'Convertir de ANSI (windows) a ASCII (dos)
Dim i As Integer
Dim p As Integer
'
p = 0
For i = 128 To 156 'de Ç a £ 29
p = p + 1
iASCII(p) = i
Next
For i = 160 To 168 'de á a ¿ 9
p = p + 1
iASCII(p) = i
Next
For i = 170 To 175 'de ¬ a » 6
p = p + 1
iASCII(p) = i
Next
'44 códigos asignados hasta aquí
iASCII(45) = 225 'ß
iASCII(46) = 230 'µ
iASCII(47) = 241 '±
iASCII(48) = 246 '÷
iASCII(49) = 253 '²
iASCII(50) = 65 'Á (A)
iASCII(51) = 73 'Í (I)
iASCII(52) = 79 'Ó (O)
iASCII(53) = 85 'Ú (U)
iASCII(54) = 73 'Ï (I)
iASCII(55) = 65 'À (A)
iASCII(56) = 69 'È (E)
iASCII(57) = 73 'Ì (I)
iASCII(58) = 79 'Ò (O)
iASCII(59) = 85 'Ù (U)
iASCII(60) = 69 'Ë (E)
For i = 61 To 63 ''`´ (')
iASCII(i) = 39
Next
End Sub
Public Function FiltroMSDOS(sWIN As String) As String
'Filtrar la cadena para convertirla en compatible MS-DOS
Const sANSI = "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£áíóúñѪº¿¬½¼¡«»ßµ±÷²ÁÍÓÚÏÀÈÌÒÙË'`´"
'
Dim i As Integer
Dim p As Integer
Dim sC As Integer
Dim sMSD As String
'Aquí se puede poner esta comparación para saber
'si el array está inicializado.
'De esta forma no será necesario llamar al procedimiento
'de inicialización antes de usar esta función.
'(Deberás quitar los comentarios)
'If iASCII(1) = 0 Then 'El primer valor debe ser 128
' IniciarFiltroMSDOS
'End If
sMSD = ""
For i = 1 To Len(sWIN)
sC = Asc(Mid$(sWIN, i, 1))
p = InStr(sANSI, Chr$(sC))
If p Then
sC = iASCII(p)
End If
sMSD = sMSD & Chr$(sC)
Next
FiltroMSDOS = sMSD
End Function
Suerte !
Rogers R.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas