PDA

Ver la Versión Completa : [Duda] Texto enriquecido


Josber
3 de mayo de 2024, 21:06
Hola a todos,

¿Alguien ha usado o sabe como poner texto enriquecido en los campos de texto de PWC?, es que me lo ha pedido un amigo como modificación y, aunque ya casi no me dedico a la programación, por desgracia, le he dicho que "ni idea", (me refiero a poder poner negrita una parte del texto, subrayar, etc). Me supongo que será con algún ocx de terceros, para variar, pero si conocéis alguno, me vendría bien, incluso si hay ejemplos, mejor, (puestos a pedir ...)

Mil gracias

Un salu2.-

Kuk
4 de mayo de 2024, 11:25
@Josber, con este viejo OCX de Microsoft puedes hacerlo, MS Rich Text Box (en adjuntos). Trabaja en formato RTF.
Creo que debes tener el Visual Basic 6 instalado, si no te dice lo de "Not licenced to use" ;)

Josber
4 de mayo de 2024, 13:35
Gracias @Kuk, lo probaré a ver aunque, igual lo de tener VB 6 instalado, igual no le hace gracia al colega ...:piti:

Kuk
4 de mayo de 2024, 15:34
@Josber, no, el VB6 lo tienes que tener instalado para poder trabajar con él en modo diseño. Para distribuir la aplicación, no creo que haga falta, sólo registrar la OCX.

Ejemplos de código con este control:


*> Negrita
01 SV-LENGTH PIC S9(5) COMP-5.
...
MOVE "SelLength" OF RichTextBox1 TO SV-LENGTH
MOVE 1 TO "SelLength" OF RichTextBox1

IF "SelBold" OF RichTextBox1 = POW-FALSE
MOVE SV-LENGTH TO "SelLength" OF RichTextBox1
MOVE POW-TRUE TO "SelBold" OF RichTextBox1

ELSE
MOVE SV-LENGTH TO "SelLength" OF RichTextBox1
MOVE POW-FALSE TO "SelBold" OF RichTextBox1
END-IF

*> Cursiva
MOVE "SelLength" OF RichTextBox1 TO SV-LENGTH
MOVE 1 TO "SelLength" OF RichTextBox1

IF "SelItalic" OF RichTextBox1 = POW-FALSE
MOVE SV-LENGTH TO "SelLength" OF RichTextBox1
MOVE POW-TRUE TO "SelItalic" OF RichTextBox1

ELSE
MOVE SV-LENGTH TO "SelLength" OF RichTextBox1
MOVE POW-FALSE TO "SelItalic" OF RichTextBox1
END-IF

*> Subrayado
MOVE "SelLength" OF RichTextBox1 TO SV-LENGTH
MOVE 1 TO "SelLength" OF RichTextBox1

IF "SelUnderline" OF RichTextBox1 = POW-FALSE
MOVE SV-LENGTH TO "SelLength" OF RichTextBox1
MOVE POW-TRUE TO "SelUnderline" OF RichTextBox1

ELSE
MOVE SV-LENGTH TO "SelLength" OF RichTextBox1
MOVE POW-FALSE TO "SelUnderline" OF RichTextBox1
END-IF

*> Lista "bullet"
MOVE "SelLength" OF RichTextBox1 TO SV-LENGTH
MOVE 1 TO "SelLength" OF RichTextBox1

IF "SelBullet" OF RichTextBox1 = POW-FALSE
MOVE SV-LENGTH TO "SelLength" OF RichTextBox1
MOVE POW-TRUE TO "SelBullet" OF RichTextBox1

ELSE
MOVE SV-LENGTH TO "SelLength" OF RichTextBox1
MOVE POW-FALSE TO "SelBullet" OF RichTextBox1
END-IF

*> Alinear texto a la izquierda
MOVE 0 TO "SelAlignment" OF RichTextBox1

*> Alinear texto en el centro
MOVE 2 TO "SelAlignment" OF RichTextBox1

*> Alinear texto a la derecha
MOVE 1 TO "SelAlignment" OF RichTextBox1


Ejemplo de cómo Buscar texto:

ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-FONT PIC 9 VALUE 1.
01 WS-BUSC PIC 9 VALUE 4.
01 RESP PIC 9.
01 SV-BUSCADO PIC X(50).
01 rtfWholeWord PIC 9 VALUE 2.
01 rtfMatchCase PIC 9 VALUE 4.
01 rtfNoHighlight PIC 9 VALUE 8.

01 SV-TEXTO PIC X(15000).

PROCEDURE DIVISION.

IF "Caption" OF CmStatic1 = "0"
GO TO SALIDA
END-IF

IF POW-TEXT OF TXT-BUSCAR = SPACES OR
POW-TEXT OF TXT-BUSCAR = "Buscar..."
INVOKE POW-SELF "DisplayMessage"
USING "¡Indique el texto a buscar!" 48

INVOKE TXT-BUSCAR "SetFocus"

ELSE
IF GLB-SELENGTH = ZEROS
MOVE ZEROS TO GLB-SELSTART
END-IF

MOVE POW-FALSE TO "Enabled" OF POW-SELF
MOVE POW-MP-WAIT TO "MousePointer" OF POW-SELF

MOVE POW-TEXT OF TXT-BUSCAR TO SV-BUSCADO

INVOKE OBJ-RTF "GET-Text" RETURNING SV-TEXTO

COMPUTE GLB-SELENGTH = FUNCTION STORED-CHAR-LENGTH(SV-BUSCADO)

INSPECT SV-TEXTO CONVERTING
'abcdefghijklmnopqrstuvwxyzáéíóúàèìòùäëïöü' TO
'ABCDEFGHIJKLMNOPQRSTUVWXYZAEIOUAEIOUAEIOU'

INSPECT SV-BUSCADO CONVERTING
'abcdefghijklmnopqrstuvwxyzáéíóúàèìòùäëïöü' TO
'ABCDEFGHIJKLMNOPQRSTUVWXYZAEIOUAEIOUAEIOU'

PERFORM WITH TEST AFTER UNTIL SV-TEXTO(GLB-SELSTART:GLB-SELENGTH) =
SV-BUSCADO(1:GLB-SELENGTH) OR
(GLB-SELSTART + GLB-SELENGTH) >= 15000
ADD 1 TO GLB-SELSTART
END-PERFORM

MOVE POW-TRUE TO "Enabled" OF POW-SELF
MOVE POW-MP-DEFAULT TO "MousePointer" OF POW-SELF

IF SV-TEXTO(GLB-SELSTART:GLB-SELENGTH) =
SV-BUSCADO(1:GLB-SELENGTH)
MOVE GLB-SELSTART TO "SelStart" OF RichTextBox1

SUBTRACT 1 FROM "SelStart" OF RichTextBox1

MOVE GLB-SELENGTH TO "SelLength" OF RichTextBox1

ELSE
INVOKE POW-SELF "DisplayMessage"
USING "¡No hay más coincidencias!" 64

MOVE ZEROS TO GLB-SELSTART
END-IF
END-IF

INVOKE POW-SELF "ThruEvents"
.

SALIDA.
EXIT.