Hola, ya había probado esta función SendMessage pero, poniendo tu función,
aunque me devuelve verdadero me deja interlineado 1.5 en la parte lineal del
texto. Es curioso que el texto se ve con interlineado sencillo pero si se
inserta una nueva línea le pone interlineado 1.5
Estas son las líneas que uso:
TDBIclnAnotaciones.SelStart = 0
TDBIclnAnotaciones.SelLength = Len(TDBIclnAnotaciones.Text)
e = RTF_Interlineado(TDBIclnAnotaciones.hwnd, [0 - Simple], 12)
TDBIclnAnotaciones.SelLength = 0
Gracias,
Javier Jiménez
Post by JavierHola,
¿Como puedo forzar interlineado "normal" en un RichTextBox?
El tipo de separación entre líneas no está controlado en el objeto
RichTextBox y si por ejemplo se copia y pega desde Word un texto con
interlineado doble, queda con ese interlineado en el RichTextBox y no veo la
manera de cambiarlo.
Hola Javier,
que yo sepa este tipo de formatos de párrafo no los podrás modificar
mediante las propiedades que expone el control.
Pero al RichTextBox le puedes enviar el mensaje EM_SETPARAFORMAT a
través de la función de la API de Windows 'SendMessage', pasándole una
estructura PARAFORMAT2, a cuyo miembro 'dwMask' le establezcas el indicador
PFM_LINESPACING para indicarle que el valor especificado en los miembros
'bLineSpacingRule' y 'dyLineSpacing' de dicha estructura contendrán un valor
válido, y en tu caso le especificarías el valor 0 al primero para establecer
un "interlineado sencillo" al texto seleccionado en el control.
En el miembro 'dyLineSpacing' puedes indicar un valor, que será ignorado
en los casos de "Interlineado Simple | 1,5 líneas | Doble | (con una
excepción en el 'Mínimo')".
En el interlineado "Mínimo", "Exacto" y "Múltiple" puedes especificar el
espaciado de una línea a la siguiente.
Te sugiero que no dejes de consultar el resto de los detalles en la
documentación:
· PARAFORMAT2 Structure:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/richedit/richeditcontrols/richeditcontrolreference/richeditstructures/paraformat2.asp
· EM_SETPARAFORMAT Message:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/richedit/richeditcontrols/richeditcontrolreference/richeditmessages/em_setparaformat.asp
En el siguiente ejemplo te muestro una función pública a la que le
pasarás el controlador de ventana de un RichTextBox, el miembro de una
enumeración que corresponderá a la "regla de espaciado", y un valor opcional
para el interlineado. La función devolverá 'False' si no se pudo establecer
el formato de párrafo en la llamada.
**Recuerda que el formato se aplica a la selección actual**
El control de errores te lo dejo a tí.
La llamada podrá ser por ejemplo:
If InterlineadoRTB(TuRichTextBox.hWnd, [0 - Simple]) = False Then
ó
If InterlineadoRTB(TuRichTextBox.hWnd, [5 - Múltiple], 50) ...
'En un módulo estándar...
'***********************
Option Explicit
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA"
( _
ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
Private Const EM_SETPARAFORMAT As Long = &H447
Private Const PFM_LINESPACING As Long = &H100
Private Const PFM_SPACEAFTER As Long = &H80
Private Const MAX_TAB_STOPS As Long = 32
Private Type PARAFORMAT2
cbSize As Long
dwMask As Long
wNumbering As Integer
wEffects As Integer
dxStartIndent As Long
dxRightIndent As Long
dxOffset As Long
wAlignment As Integer
cTabCount As Integer
rgxTabs(1 To MAX_TAB_STOPS) As Long
dySpaceBefore As Long
dySpaceAfter As Long
dyLineSpacing As Long
sStyle As Integer
bLineSpacingRule As Byte
bOutlineLevel As Byte
wShadingWeight As Integer
wShadingStyle As Integer
wNumberingStart As Integer
wNumberingStyle As Integer
wNumberingTab As Integer
wBorderSpace As Integer
wBorderWidth As Integer
wBorders As Integer
End Type
Public Enum ConstantesInterlineado
[0 - Simple] = 0 'dyLineSpacing será ignorado
[1 - 1,5 líneas] 'dyLineSpacing será ignorado
[2 - Doble] 'dyLineSpacing será ignorado
[3 - Mínimo] 'dyLineSpacing será ignorado si se especifica un valor
' menor que un «Interlineado Simple», en cuyo caso
' se aplicará automáticamente un interlineado Simple.
[4 - Exacto] 'A diferencia del "Mínimo", aunque el valor sea menor
que
' un «Interlineado Simple», se usará el valor que se
indique.
[5 - Múltiple] 'Escala 1:20 de espaciado entre líneas. 20 unidades =
un '0-Simple'.
End Enum
' -- -- -- -- --
Public Function InterlineadoRTB( _
ByVal hWndRTB As Long, _
ByVal OpInterlineado As ConstantesInterlineado, _
Optional ByVal ValorInterlineado As Long _
) As Boolean
Dim PF As PARAFORMAT2
With PF
.cbSize = Len(PF)
.dwMask = PFM_LINESPACING Or PFM_SPACEAFTER
.bLineSpacingRule = OpInterlineado
.dyLineSpacing = ValorInterlineado
End With
InterlineadoRTB = SendMessage(hWndRTB, EM_SETPARAFORMAT, 0&, PF) <> 0
End Function
'***********************
--
Saludos
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
( ! ) Respuestas precedentes en Google:
http://groups.google.com/group/microsoft.public.es.vb
( i ) Temperancia en el foro:
http://support.microsoft.com/default.aspx?scid=fh;ES-ES;newsreglas
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -