• Lunes 23 de Diciembre de 2024, 02:06

Autor Tema:  Incompatibilidad: Ortografia Con Rtf  (Leído 1761 veces)

mosaic04

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Incompatibilidad: Ortografia Con Rtf
« en: Jueves 19 de Febrero de 2004, 13:14 »
0
Hola a TODOS,

  Tengo un problema a la hora de usar el corrector ortografio del objeto de WORD, ya que cuando le aplico la correccion, pierde los atributos asociados a RTF (si tenia palabras en negrita, cursiva, etc...)

  Os adjunto el trozo de codigo que uso para esto.....
 
      Dim MSWord As Object, Texto As String
      Set MSWord = CreateObject("Word.Basic")
      MSWord.AppMinimize
      MSWord.AppHide
      MSWord.FileNewDefault
      MSWord.EditSelectAll
      MSWord.EditCut
      MSWord.Insert rtf.Text
      MSWord.StartOfDocument
      On Error Resume Next
      MSWord.ToolsSpelling
      On Error GoTo 0
      MSWord.EditSelectAll
      Texto = MSWord.Selection
      If Mid(Texto, Len(Texto), 1) = Chr(13) Then Texto = Mid(Texto, 1, Len(Texto) - 1)
      If Len(Texto) > 1 Then rtf = Texto
      MSWord.FileCloseAll 2
      MSWord.AppClose

------------------

  HE cambiado la opcion rtf.text por rtf.textRTF pero entonces lo que no funciona correctamente es el corrector ya que coge todas las etiquetas del RTF... ALGUIEN sabe como solucionarlo :(

      Gracias de antemano por echarme una mano

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Incompatibilidad: Ortografia Con Rtf
« Respuesta #1 en: Jueves 19 de Febrero de 2004, 16:20 »
0
Hola mosaic04.

El tema está en que el texto que estás insertando en el documento word  no se reconoce como RTF o no se inserta como RTF, de forma que el texto en word (si no ocultas la aplicación lo puedes comprobar) está sin formato. Cuando vuelves a asignar el texto al RichTextBox desde el word, el texto no tiene formato RTF, por lo que pierdes esas carácterísticas. La solución pasa por conseguir indicar a word que el formato del documento es RTF y por asignar/recuperar el texto del RichTextBox a través de la propiedad TextRTF. Como no sé como se puede indicar esto al objeto WordBasic, te presento esta otra alternativa a ver que te parece...

Se trataría de guardar el valor de la propiedad TextRTF en un string, pero sustituyendo cada palabra de RichTextBox1.Text por ciertos carácteres...
Ejecutar la corrección tal y como la haces y luego sustituir en la variable string aquellos caracteres por la respectiva palabra corregida. Terminariamos asignando a RichTextBox1.TextRTF el valor de la variable.

Como no sé si me habré explicado muy bien (que creo que no) te envío un ejemplo de cómo creo que más o menos debería ser la cosa. Ojo que no lo he probado a fondo, sólo para que veas la idea.

Código: Text
  1.  
  2. Private Sub Corregir()
  3.    
  4.     Dim strTextoRTF As String
  5.  
  6.     Dim var1 As Variant
  7.     var1 = Split(rtf.Text, " ")
  8.  
  9.     Dim int1 As Integer
  10.     Dim lng1 As Long
  11.     Dim lngIdx As Long
  12.     lngIdx = 1
  13.     strTextRTF = rtf.TextRTF
  14.     For int1 = LBound(var1) To UBound(var1)
  15.         lng1 = InStr(lngIdx, rtf.TextRTF, var1(int1))
  16.         If lng1 > 0 Then
  17.             lngIdx = lng1 + Len(var1(int1))
  18.             strTextRTF = Left(strTextRTF, lng1 - 1) _
  19.             & "???" & Mid(strTextRTF, lngIdx)
  20.         End If
  21.     Next int1
  22.  
  23. 'Aquí va tú código
  24.     Dim MSWord As Object, Texto As String
  25.     Set MSWord = CreateObject("Word.Basic")
  26.     MSWord.AppMinimize
  27.     MSWord.AppHide
  28.     MSWord.FileNewDefault
  29.     MSWord.EditSelectAll
  30.     MSWord.EditCut
  31.     MSWord.Insert rtf.Text
  32.     MSWord.StartOfDocument
  33.     On Error Resume Next
  34.     MSWord.ToolsSpelling
  35.     On Error GoTo 0
  36.     MSWord.EditSelectAll
  37.     Texto = MSWord.Selection
  38.     If Mid(Texto, Len(Texto), 1) = Chr(13) Then _
  39.     Texto = Mid(Texto, 1, Len(Texto) - 1)
  40.  
  41. '   Aquí le damos la vuelta a la tortilla
  42.     If Len(Texto) > 1 Then
  43.        var1 = Split(Texto, " ")
  44.        lngIdx = 1
  45.        For int1 = LBound(var1) To UBound(var1)
  46.             lng1 = InStr(lngIdx,strTextRTF, "???")
  47.             If lng1 > 0 Then
  48.                 lngIdx = lng1 + 3
  49.                 strTextRTF = Left(strTextRTF, lng1 - 1) _
  50.                 & var1(int1) & Mid(strTextRTF, lngIdx)
  51.             End If
  52.         Next int1
  53.         rtf.TextRTF = strTextRTF
  54.     End If
  55.  
  56.     MSWord.FileCloseAll 2
  57.     MSWord.AppClose
  58.     Set MSWord = Nothing
  59.  
  60. End Sub
  61.  
  62.  

Bueno, resalto de nuevo que el código está sin probar ni depurar, escrito al vuelo, es para que pilles la idea... Otra cosa: he supuesto que el número de palabras que se mandan corregir es el mismo número que las corregidas.

Espero que esto te sirva.
Chao.