gandalf29100 | |
| 2006-02-28 00:02 - Respuestas: 4 - Tema nº: 2408675
Hola, estoy intentando hacer un editor de texto con ciertas caracteristicas especiales, para el trabajo de un amigo y necesito algunas cosas que no logra hallar cómo hacerlas:
-necesito justificar el texto que se escriba (no alineado a la izquierda, derecha o centrado que son las opciones que tiene VB, sino justificado, como la opcion de MS Word)
-También necesitaría (aunque no es tan importante) darle los márgenes y el espaciado entre linea y linea.
Si alguien puede ayudarme..., muchas gracias. | |
|
|
Prenda | |
|
Re: Justificar texto en VB 6 - 2006-02-28 11:34 - Respuesta 2
Hola,
Supongo que si estás usando un control RichTextBox para albergar el texto ¿no?. En tal caso, te paso una función que no recuerdo de donde saqué... hace tiempo hice algo parecido a lo que estás haciendo.
La función se basa en el ataque del objeto por API.
Uso para justificar: SetAlignment RichTextBox1.HWND, ercParaJustify
El resto de las opciones de alineación las puedes obtener de la definición de constantes ERECParagraphAlignmentConstants que está más abajo.
Code:
nulo;BRnulo;Private Declare Function SendMessageLong Lib nulo;user32nulo; Alias nulo;SendMessageAnulo; (ByVal
nulo;BRnulo;HWND As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
nulo;BRnulo;As Long
nulo;BRnulo;Private Declare Function SendMessage Lib nulo;user32nulo; Alias nulo;SendMessageAnulo; (ByVal
nulo;BRnulo;HWND As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
nulo;BRnulo;
nulo;BRnulo;Const WM_USER = nulo;H400
nulo;BRnulo;Const EM_SETTYPOGRAPHYOPTIONS = WM_USER + 202
nulo;BRnulo;Const TO_ADVANCEDTYPOGRAPHY = 1
nulo;BRnulo;Const EM_SETPARAFORMAT = WM_USER + 71
nulo;BRnulo;Private Const PFA_LEFT = 1
nulo;BRnulo;Private Const PFA_RIGHT = 2
nulo;BRnulo;Private Const PFA_CENTER = 3
nulo;BRnulo;Private Const PFA_JUSTIFY = nulo;H4
nulo;BRnulo;Const MAX_TAB_STOPS = 32
nulo;BRnulo;Private Type PARAFORMAT2
nulo;BRnulo; cbSize As Long
nulo;BRnulo; dwMask As Long
nulo;BRnulo; wNumbering As Integer
nulo;BRnulo; wEffects As Integer
nulo;BRnulo; dxStartIndent As Long
nulo;BRnulo; dxRightIndent As Long
nulo;BRnulo; dxOffset As Long
nulo;BRnulo; wAlignment As Integer
nulo;BRnulo; cTabCount As Integer
nulo;BRnulo; rgxTabs(MAX_TAB_STOPS - 1) As Long
nulo;BRnulo; dySpaceBefore As Long
nulo;BRnulo; dySpaceAfter As Long
nulo;BRnulo; dyLineSpacing As Long
nulo;BRnulo; sStyle As Integer
nulo;BRnulo; bLineSpacingRule As Byte
nulo;BRnulo; bOutlineLevel As Byte
nulo;BRnulo; wShadingWeight As Integer
nulo;BRnulo; wShadingStyle As Integer
nulo;BRnulo; wNumberingStart As Integer
nulo;BRnulo; wNumberingStyle As Integer
nulo;BRnulo; wNumberingTab As Integer
nulo;BRnulo; wBorderSpace As Integer
nulo;BRnulo; wBorderWidth As Integer
nulo;BRnulo; wBorders As Integer
nulo;BRnulo;End Type
nulo;BRnulo;
nulo;BRnulo;Public Enum ERECParagraphAlignmentConstants
nulo;BRnulo; ercParaLeft = PFA_LEFT
nulo;BRnulo; ercParaCentre = PFA_CENTER
nulo;BRnulo; ercParaRight = PFA_RIGHT
nulo;BRnulo; ercParaJustify = PFA_JUSTIFY
nulo;BRnulo; End Enum
nulo;BRnulo;Private Const PFM_ALIGNMENT = nulo;H8nulo;
nulo;BRnulo;
nulo;BRnulo;Private Function SetAlignment(lHwnd As Long, ByVal eAlign As ERECParagraphAlignmentConstants)
nulo;BRnulo; Dim tP2 As PARAFORMAT2
nulo;BRnulo; Dim lR As Long
nulo;BRnulo; tP2.dwMask = PFM_ALIGNMENT
nulo;BRnulo; tP2.cbSize = Len(tP2)
nulo;BRnulo; tP2.wAlignment = eAlign
nulo;BRnulo; lR = SendMessageLong(lHwnd, EM_SETTYPOGRAPHYOPTIONS,
nulo;BRnulo;TO_ADVANCEDTYPOGRAPHY, TO_ADVANCEDTYPOGRAPHY)
nulo;BRnulo; lR = SendMessage(lHwnd, EM_SETPARAFORMAT, 0, tP2)
nulo;BRnulo;End Function
nulo;BRnulo;
Esta función es de libre uso. De hecho creo que la saqué del MSDN. En el caso de que los moderadores estén en desacuerdo con su publicación, les ruego que la eliminen.
Saludos.
[ Este mensaje fué editado por: Prenda el 28-02-2006 a las 11:37] | |
|
|
Hurricane | |
|
Re: Justificar texto en VB 6 - 2006-02-28 22:06 - Respuesta 3
El siguiente código te va a servir. Sólo hace lo que quiers: justificación completa.Code: Rem Justifica una cadena.
Rem Str = Cadena a justificar
Rem Max = Cantidad de caracteres a la que se va a justificar.
Function strJustify(Str As String, Max As Integer) As String
Dim P As Integer, P2 As Integer
Str = LTrim(RTrim(Str))
P = InStr(1, Str, nulo; nulo
If (P nulo; 0) Then
While (Len(Str) nulo; Max)
While (Mid(Str, P, 1) nulo;nulo; nulo; nulo
P = P + 1
Wend
Str = Left(Str, P - 1) + nulo; nulo; + Right(Str, Len(Str) - P + 1)
P = P + 2
If (P nulo;= Len(Str)) Or (InStr(P, Str, nulo; nulo = 0) Then
P = 1
End If
P = InStr(P, Str, nulo; nulo
Wend
End If
strJustify = Str
End Function
Saludos
HURRICANE
| |
|
|
gandalf29100 | |
|
Re: Justificar texto en VB 6 - 2006-03-16 17:26 - Respuesta 4
Hola, gracias a los dos, aunque solo el código de Prenda me funcionó y pude justificar texto sin problemas.
Ahora lo q no pude lograr es aumentar el espacio entre linea y linea ni cambiar los márgenes. Probe cambiar algunas cosas del código de Prenda y no me da errores, pero tampoco produce ningún cambio en el texto.
Si alguien sabe o conoce algun codigo para cambiar los márgenes y el espacio entre líneas de un RichTextBox en VB6, por favor si puede ayudarme...
Gracias de nuevo, hasta la vista
| |
|
|
|