Red de conocimiento informático - Problemas con los teléfonos móviles - Programación Rtfw

Programación Rtfw

Utilice el control RichTextBox para proporcionar funciones de edición al usuario y agregar funciones de "deshacer" y "rehacer" similares a palabras.

Agregue una dosis de "medicina para el arrepentimiento" a su programa de edición de texto

Función de implementación del programa: use el control RichTextBox para proporcionar funciones de edición al usuario, agregando palabras como "deshacer" y " restaurar" Función.

'****************************************** *****************************

Este programa se basa en la lectura de Zhang Zhixin de Tianjin el 4 de abril de 2005 Mejorado sobre la base del artículo publicado en "Computer News".

Cuando aplique el código siguiente, asegúrese de mantener el contenido entre las líneas "*" sin cambios.

Hay dos mejoras principales:

1. Agrega una variable para controlar el número de veces recuperables, limitando así el uso ilimitado de la memoria para evitar el desbordamiento de la misma.

2. Corrija los errores del código original para evitar errores del usuario durante la recuperación.

El programa original del periódico se puede utilizar para la detección de errores ingresando continuamente 0123456789.

Descubrirás que la entrada es correcta cuando la deshaces, pero se producen errores cuando la restauras.

El contenido entre las líneas de puntos lo agregué recientemente yo. Después de agregar estos códigos, este programa será más completo.

Me gustaría agradecer al Sr. Zhang Zhixin.

El programa fuente modificado se puede descargar a través del siguiente enlace: /software/vbundo.rar.

gt gt gt Qingdao>; gt Xu>; gt gt2005.4.7

'********************* ************************************************** * *

Ejecute VB6 para crear un nuevo estándar. exe, haga clic en el menú "Proyecto/Componente", seleccione "Control de cuadro de texto enriquecido de Microsoft"

Marque "√" antes de "6.0", aparecerá un control "RichTextBox" en la caja de herramientas y en el formulario Cree un control "RichTextBox", asígnele el nombre "rtbText" y luego cree dos botones.

, llamados "cmdUndo" y "cmdRedo" respectivamente, simplemente ingrese los siguientes códigos en secuencia.

Este programa se ejecuta en el entorno de servidor VB6 WIN2000.

Opción explícita

Dimrtbundstack() como cadena "Deshacer pila."

DimrtbRedoStack() como cadena "Restaurar pila"

" Dim bChg As Boolean" registra si el contenido del cuadro de texto enriquecido ha cambiado.

-

Modifique el programa original y agregue una variable para controlar el número de veces recuperables, limitando así el uso ilimitado de la memoria y evitando el desbordamiento de la memoria.

Atenuar UndoNum siempre

-

Sub cmdUndo_Click()

Si UBound(rtbUndoStack)>Entonces 1

bChg = true

ReDim retiene rtbRedoStack(UBound(rtbRedoStack) 1) como cadena

rtbRedoStack(UBound(rtbRedoStack)) = texto rtb. TextoRTF

RTBTexto.

text rtf = rtbUndoStack(UBound(rtbUndoStack)-1)

ReDim retiene rtbUndoStack(UBound(rtbUndoStack)-1) como una cadena

Terminará si...

-

Agregue la función de juzgar y limitar el número de deshacer

Si UBound(rtbRedoStack)>entonces abandone

cmdUndo. Enable = False

MsgBox("Permitir solo deshacer"; UndoNum amp "Era")

Terminará si...

-

Conector final

Subform_Load() privado

ReDim conserva rtbUndoStack(1) como una cadena

ReDim conserva rtbRedoStack(1) como una cadena String

Rtbundostack (1) = rtbtext. "textrtf" inicializa el elemento de la pila de deshacer.

Rtbredostack (1) = rtbtext. La inicialización "textrtf" restaura los elementos de la pila.

bChg = false

-

Agrega algún código de inicialización.

"UndoNum = 3" limita el número de veces recuperables a 3.

cmdRehacer. habilitado = falso

cmdUndo. Habilitado=Falso

-

Conector final

Sub RTBText_Change()

Atenuar N mientras

Dim M As Long

Si bChg = False, determine si el contenido del cuadro de texto enriquecido se ha modificado por primera vez.

ReDim retiene rtbUndoStack(UBound(rtbUndoStack) 1) como una cadena

M = UBound(rtbUndoStack)

rtbUndoStack(M) = RTBText. TextRTF

redim preserve rtbredostack(1)as string 'Borrar el contenido de la pila de recuperación.

-

Uno de los dos principales defectos del programa original del periódico: si no hay límite, puede provocar un desbordamiento de la memoria.

If M gtUndoNum 1 Then 'Limita el número de veces que se puede restaurar.

Para N = 1 a M

rtbUndoStack(N-1) = rtbUndoStack(N)

El siguiente N

ReDim rtbUndoStack(M - 1) permanece como una cadena

Terminará si...

-

Otro

bChg = false

p>

Terminará si...

Determina y establece si el botón de restauración está disponible.

Si UBound(rtbUndoStack)>Entonces 1

cmdUndo. enable=True

Otro

cmdUndo. enable = false

Finalizar si...

Si UBound(rtbRedoStack)>entonces1

cmdRedo. enable=Verdadero

Otro

cmdRedo.

Enabled=false

Finalizar si 1

bChg = true

ReDim conserva rtbUndoStack(UBound(rtbUndoStack) 1) como cadena

rtbundostack (ubound(rtbundostack) = rtb text.' textrtf 'La posición original del programa en el periódico, elimínela y colóquela debajo

RTBText. text rtf = rtbRedoStack(UBound(rtbRedoStack))

ReDim rtbRedoStack(. UBound(rtbRedoStack)-1) se conserva como una cadena

El programa original en el periódico tiene dos defectos: si se coloca en la posición original, la recuperación fallar.

rtbUndoStack(UBound). (rtbUndoStack))= texto rtb

Terminará si...

-

Agregue la función de juzgar y limitar el número de rehaceres

si UBound(rtbRedoStack) lt;= 1 entonces

cmdRedo.enabled=false

lo hará finalizar si...

-

Conector final

-

Restaurar:

Función de declaración privada Enviar mensaje Lib "usuario 32" Alias ​​​​"SendMessage a" (ByVal hwnd As Long, _

ByVal wMsg tiene la misma longitud, ByVal wParam tiene la misma longitud, lParam tiene la misma longitud

Const EM _ UNDO = ampHC7

Private Sub mnuundo_Click()

Dim UndoResult es largo

Deshacer resultado = SendMessage(cuadro de texto enriquecido 1. hwnd, EM_UNDO , 0, 0)

El valor de retorno de UndoResult = -1 indica que la deshacer no tuvo éxito

p>

Conector final

Recortado

Private Sub mnucut_Click()

Borrar el contenido del portapapeles

Borrar portapapeles

Copia el texto marcado al portapapeles.

Portapapeles. Establecer texto RichTextBox1. SelText

Borrar texto de etiqueta

RichTextBox1. SelText = " "

Conector final

Copiar

Private Sub mnucopy_Click()

Borrar el contenido del portapapeles.

Portapapeles. borrar

Copia el texto marcado al portapapeles.

Portapapeles. Establecer texto RichTextBox1. SelText

Conector final

Persistencia

Private Sub mnupaste_Click()

Si hay un área marcada, copia el contenido del portapapeles al cursor Área marcada.

Si no hay ningún área marcada, inserte el contenido del portapapeles en la posición del cursor.

RichTextBox1. SelText = Portapapeles.

GetText

Conector final

Eliminar

Private Sub mnudelete_Click()

Borrar texto de etiqueta

RichTextBox1. SelText = " "

Conector final

Marcar todo

Sub privado mnuselall _ Click()

Marcar todas las palabras en el cuadro de texto

RichTextBox1. SelStart = 0

RichTextBox1. SelLength = Len(cuadro de texto enriquecido 1. Texto)

Conector final