Visual Basic Basic - Guía del Estudiante Cap. 9 INTERFACE DE DOCUMENTOS MULTIPLES. (Multiple Document Document Interface MDI ) EL CONTROL RICH TEXT BOX
INTERFACE DE DOCUMENTOS MULTIPLES.
Lo que se va a explicar en este capítulo le será bastante familiar aunque nunca haya reparado en ello. Posiblemente haya utilizado utilizado un procesador procesador de texto en el que está escribiendo escribiendo una carta, carta, y ante antes s de termina terminarr de escrib escribir ir esa esa carta, carta, comien comienza za a escrib escribir ir otro otro docum document ento, o, y posiblemente otro, y tenga los tres documentos en la pantalla al mismo tiempo, bien en ventanas escalonadas, (cascada), bien en ventanas en forma de mosaico, o simplemente tapando unas a otras completamente. Los tres documentos están en su procesador de textos, y puede actuar actuar sobre uno u otro simplemente eligiendo eligiendo el deseado deseado mediante el mecanismo que le proporcion proporciona a su procesador procesador de textos. Este sistema sistema no es ni mas ni menos que una interfa interface ce de docum document entos os múltiples múltiples.. En progr programa amació ción, n, a este este tipo de aplicaci aplicacion ones es las denominamos MDI Para crear una aplicación MDI debe hacerse mediante un Formulario Padre al que se le añaden añaden tantos Formularios Formularios Hijo como como docum document entos os tengamo tengamos. s. Al formulario formulario padre padre le denominamos Formulario MDI , y a los formularios hijo en Visual Basic se les denomina formularios MDIChild . En esta Guía del Estudiante Estudiante se usarán usarán indistintamen indistintamente te una u otra denominación. La única diferencia entre un formulario normal y un formulario Hijo es que éste tiene la propiedad MDIChild a True. Para realizar una aplicación MDI, lo primero que hay que hacer es introducir en ella un formulario MDI. Para introducirlo, basta con hacer click en Insertar | Formulario MDI de la barra barra de menú. menú. Solame Solamente nte se pued puede e tener tener un formula formulario rio MDI en una aplicación. aplicación. Puede Puede observar que una vez que ha introducido uno, la palabra Formulario MDI del submenú Insertar queda deshabilitada. Una vez que tiene un formulario MDI puede introducir tantos formularios hijo como desee. Para que un formulario sea formulario hijo basta con poner poner a True su propiedad MDIChild. En una aplicación MDI pueden coexistir coexistir f ormularios hijo y formularios normales. Propiedades de los formularios MDI
Aparte de las propiedades de un formulario normal, un formulario MDI tiene las siguiente propiedades : AutoShowChildren . Muestra los formularios hijo nada nada mas cargarlos. cargarlos.
Esta propiedad puede puede verse si se carga un formulario hijo mediante la sentencia : Load NombreFormularioHijo Si la propiedad AutoShowChildren está a True, el formulario cargado se verá inmediatamente. Si está está a False False,, será será nece necesa sario rio ejecut ejecutar ar la sente sentenci ncia a Nombre NombreFor Formul mulario arioHijo Hijo.Sh .Show ow para para presentarlo. Mediante esta propiedad podemos conocer el formulario activo dentro de una aplicación de documentos documentos múltiples. (El (E l formulario activo es aquel que tiene el foco)
ActiveForm
MiVariable = ActiveForm.caption
Titulo) del formulario form ulario activo. MiVariable contendrá el Caption (Barra de Titulo)
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 1
ActiveForm.Backcolor = RGB (255,0,0) pondrá el fondo del formulario activo de color rojo. Hace que el Formulario MDI (padre) muestre barras barras de Scroll para presentar presentar en toda su extensión a un formulario hijo, cuando las dimensiones de áste superan las de aquel.
ScrollBars
Aparte de estas propiedades que diferencian un Formulario MDI de un Formulario normal, los Formularios MDI presentan presentan otras particularidades. Solamente podrán introducirse en un formulario MDI aquellos controles que tengan la propiedad Align. (Picture, (Picture, Data, Data, DBGrid) DBGrid) y solo permiten permiten que que se presenten con alineación a uno de los lados del Formulario (Top, Bottom, Left o Right) Inserción de Controles
El control Picture puede trabajar como contenedor de otros controles. Por lo tanto, para poder introducir cualquier control (TextBox, Label, CommandButton ...) será necesario introducir un control Picture, y sobre el, poner los controles que se necesiten. Línea de Menú.
Cuando existe la línea de Menú Menú en un Formulario Formulario MDI y en el Formulario Hijo que introduzcamos en él, la línea de menú del Formulario MDI se sustituye por la línea de menú del Formulario Hijo introducido. i ntroducido.
Barra de Título.
La Barra Barra de Título del Formular Formulario io MDI se conse conserva rva siempre. siempre. Pero si el Formula Formulario rio Hijo insert insertad ado o dentr dentro o de él está está maximizad maximizado o (ocup (ocupa a toda toda la extens extensión ión del Formulario MDI), a la barra de título se le añadirá la barra de Título del Formulario Hijo entre paréntesis. Para hacer que un Formulario sea un formulario f ormulario hijo basta con ponerle ponerle su propiedad MDIChild a True. Puede preparar los formularios hijo uno a uno e introducirlos dentro del formulario MDI según las necesidades de la aplicación. Este sería el caso de una aplicación con varias pantallas, todas ellas colocadas sobre una pantalla fija (Formulario MDI) del que se aprovecha quizás alguna parte como parte común de toda la aplicación (Menú, Título, Barra de herramientas montada sobre un Picture, etc.) Puede también darse el caso de introducir un número indeterminado de ventanas iguales para realizar varias veces la misma función, pero sobre ventanas diferentes. (Caso del procesador de texto texto que que tiene tiene varias varias venta ventana nas s de texto texto,, cada cada una una con con un docu docume ment nto. o. Lo que que desconocemos desconocemos a priori es el número de documentos que que vamos a editar) Para el primer caso, será necesario crear cada una de las ventanas, e introducirlas y quitarlas según pida la aplicación. En segundo caso, bastará con crear un formulario hijo con todas las partes necesarias para su correcto funcionamiento, y luego, realizar tantas “fotocopias” de ese formulario como ventanas necesitemos. Lo que introducimos en la aplicación son precisamente esas “fotocopias”, pero no el original, que lo seguimos manteniendo intacto para volver a copiarlo si fuese necesario. A esas “fotocopias” de un formulario las l lamamos Instancias. Al original le llamaremos Clase.
En realidad una Clase es la definición de un objeto Visual Basic. Un objeto Visual Basic puede ser un Formulario, un control, un objeto de acceso a datos. La Instancia es la réplica de una clase. Puede ser la réplica de un Formulario, de un control o de otro objeto. La Instancia lleva las mismas Propiedades que la clase. Se dice que hereda las propiedades. (Excepto la propiedad Visible, que siempre, por defecto, aparece a False). Cuando se varía una propiedad de una Instancia, no se altera el valor de esa propiedad en la Clase ni en ninguna de las restantes Instancias.
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 2
Después de toda esta teoría, ¿podemos saber como se crea una Clase de un formulario ? O dicho dicho de mane manera ra mas coloq coloquia uial, l, ¿Cómo ¿Cómo se crea crea un Formul Formulario ario para poder poder hacer hacer varias varias “fotocopias” de él ? La respuesta es obligatoriamente mas sencilla que la teoría. Con el formulario vacío que tengamos en el proyecto (Insertemos un Formulario si fuese necesario) pongámosle todos los controles que deseemos. Le podemos poner un Menú y cambiar a nuestro antojo todas sus propiedades. Entre ellas, la propiedad MDIChild . Si vamos a introducir introducir las Instancias Instancias de ese Formula Formulario rio en un Formul Formulari ario o MDI esa esa propie propieda dad d debe debe estar estar a True, y por lo tanto sus Instancias saldrán saldrán igualmente con esa propiedad propiedad a True. Pongámosle un nombre y ya está creada la clase. Supongamos que ese nombre es FormularioHijo Para crear ahora Instancias de ese Formulario podemos hacerlo de dos formas : Declar Declarar ar una una variable variable tipo Objeto Objeto.. No se asuste asuste.. Para Para decla declarar rar que que una una variable variable es un Formulario basta con declararla de la siguiente forma : Dim MiVentana As Form
Esta variable debe declararla en sitio adecuado para su aplicación, y el ámbito de esa variable objeto será el mismo que para cualquier tipo de variable. (Vea Ambito de las Variables) La sentencia a utilizar para la declaración será Dim, Private, Public o Global tal como se explicó para las variables. Una vez declarada como variable puede hacerla igual a un objeto existente que servirá de modelo (Una Clase) que que estará definida por un nombre: (P.e. (P.e. FormularioHijo) Set MiVentana = New FormularioHjo
Podemos hacer las dos operaciones operaciones a un tiempo : declarar y crear la copia : Dim MiVentana As New FormularioHijo
Una vez creado la instancia del formulario debemos cargarlo en el Formulario Padre. Para cargarlo debemos emplear la sentencia Load MiVentana, con lo que quedará cargado en la memoria, pero, dependiendo de como está la propiedad AutoShowChildren del Formulario Padre se mostrará o no se mostrará. Para que se muestre, independientemente de como esté esa propiedad, basta con ejecutar MiVentana.Show. En realidad mediante el método Show un formulario no solamente se muestra, sino que también se carga en la memoria si no estuviese estuviese previamente previamente cargado cargado.. Por lo tanto tanto podíamos podíamos habernos habernos ahorrad ahorrado o la instrucció instrucción n anterior para cargarlo Load MiVentana Es muy práctico poner un Caption distinto a cada formulario que se introduzca, caso de introducirse varios formularios formu larios hijo iguales. El Caption es una propiedad y por lo tanto todas las instancias heredan el Caption de la Clase. Sería prudente distinguir un formulario de otro mediante su Caption, es decir mediante su barra de t ítulo. Para ello podemos crear un contador en el mismo procedimiento en el que creamos una nueva instancia, y poner el Caption de cada nuevo Formulario siguiendo un orden numeral. Documento 1, Documento 2, Documento 3, etc. Ese procedimiento quedará quedará de la siguiente forma : Static contador As Integer Dim MiVentana As New FormularioHijo MiVentana. Caption = “Documento “ & Str (contador) MiVentana. Show
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 3
Referencias a los Formularios. Formularios. ActiveForm y Me Si queremos nombrar un Formulario Hijo dentro de una aplicación MDI el primer problema con el que nos encontramos es que todos todos los formularios for mularios hijo (Instancias de la misma Clase) tienen t ienen el mismo nombre. Por lo tanto no podemos nombrarlas con ese nombre, ya que la aplicación no sabría a cual de ellas nos referi mos. Si el código código donde donde vamos a nombrar nombrar ese formulario está fuera fuera de él (P.e. (P.e. en el Formulario Padre) deberemos referirnos al formulario hijo mediante ActiveForm. ActiveForm nos va a indicar cual es el formulario que está actualmente activo. Un formulario está activo cuando estamos trabajando sobre él. En ese momento tiene el foco. Permanece activo desde que hacem hacemos os click click con el ratón ratón sobre sobre cualq cualquie uiera ra de sus sus parte partes, s, hasta hasta que que activamo activamos s otro otro formulario. Es sencillo reconocer cual cual es el formulario activo pues tiene su barra barra de título con el color vivo. Cada vez que hacemos una operación operación sobre una parte de un formulario fo rmulario éste se pondrá activo. acti vo. Por ejemplo, si el formulario es un documento de texto, y contiene el texto en un RichTextBox de nombre RTB1, si queremos hacer una operación con el texto desde un botón colocado en el formulario padre (poner (poner en negrita el texto seleccionado), haríamos lo siguiente : ActiveForm.RTB1.SelBold = True
ya que siempre estaremos seguro de que el Formulario Activo es aquel en el que acabamos de seleccionar el texto. Si el botón donde hemos puesto el botón no es el formulario padre, sino el hijo, tenemos un problema similar. Su nombre será (con los ejemplos anteriores) MiVentana, y pueden existir varios formularios formularios con ese nombre, nombre, tantos como documen documentos tos hayamos hayamos introducid introducido. o. No podemos por tanto nombrarlo con su nombre, pues hay (o puede haber) varios. Tampoco lo podemos nombrar con ActiveForm, ya que esta propiedad corresponde al Formulario Padre. La solución es nombrarle mediante Me. Me siempre se refiere al formulario que contiene al procedimiento donde está esa palabra. Por lo tanto, si tenemos un botón en el formulario hijo con la instrucción : Me.RTB1.SelBold = True Me se refiere refiere concretamente a ese ese formulario.
Colocación de los Formularios Hijo - Método ARRANGE ARRANGE Mediante el método Arrange podemos podemos distribuir distribuir los formularios hijo dentro dentro del formulario padre. Pueden Pueden colocarse en cascada, mosaico horizontal, mosaico vert ical o como iconos. Sintaxis
NFMDI.Arrange distribución
donde NFMDI = Nombre del Formulario MDI distribución puede puede tomar los siguientes valores o constantes constantes :
Constante
Valor
Descripción
vbCascade
0
vbTileHorizontal
1
vbTileVertical
2
VbArrangeIcons
3
Dispone todos todos los formularios formu larios MDI secundarios no minimizados en cascada. Dispone todos todos los formularios formu larios MDI secundarios no minimizados en mosaico horizontal. Dispone todos todos los formularios formu larios MDI secundarios no minimizados en mosaico vertical. Dispone los iconos iconos de los formularios MDI minimizados. m inimizados.
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 4
Las ventanas o los iconos se pueden distribuir incluso si el objeto MDIForm está minimizado. Los resultados resultados son visibles cuando el objeto MDIForm se maximiza. maximi za.
Posición de los Formularios en el Eje Z - Método ZOrder Cuan Cuando do tene tenemo mos s vario varios s formul formular ario ios s hijo hijo,, unos unos ocult ocultan an a los los otro otros. s. Much Mucho o mas mas si los los formularios están maximizados. Podemos colocar un formulario hijo en la parte frontal del montón de formularios (para que se vea completamente) o llevarle a la posición mas atrás mediante el Método ZOrder . Sintaxis
NFH.ZOrder posición
Donde NFH = Nombre del Formulario Hijo posición puede se se 0 ó 1. Si es 0 (o si se se omite) el formulario se coloca en primer primer plano. Si es 1 el formulario formular io se coloca en el fondo del eje Z. ZOrder es un método que no solamente se puede emplear con formulario hijo, sino con
cualquier instancia. Puede emplearlo también con cualquier control. Pero lea detenidamente la Ayuda de este método, ya que no todos los controles la admiten.
Mostrar los Formularios Formularios existentes mediante mediante el el Menú Menú -- Propiedad WindowList Al explicar el Editor de menús casi se pasó por alto una propiedad del menú : WindowList . Cuando se activa esta propiedad (Puede activarse para una sola palabra del menú. Si se pretende activar para mas de una dará un error), esa palabra que tiene activada la propiedad WindowList mostrará al hacer click sobre ella, en un menú desplegable, el Caption (Barra de Título) de todos los formularios hijo cargados en ese instante en la aplicación. Pueden estar incluso minimizados.
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 5
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 6
EL CONTROL RICH TEXT BOX
El control RichTextBox es una caja de texto con mas prestaciones que el TextBox. No está normalmente en la caja de herramientas, por lo que habrá que ir a Proyecto | Componentes y elegir Microsoft RichTextBox Control. El icono que presenta en la caja de herramientas es el siguiente :
Frente a la rigidez del TextBox , este control nos permite escribir un texto utilizando distintos tipos de fuentes en el mismo texto, e introducir mas de 65.536 caracteres, límite máximo del TextBox . Aparte de estas, tiene otras características respecto a la forma de guardar y leer el texto texto en un fiche fichero ro,, que que le convie convierte rten n en una una herra herramie mient nta a muy útil útil para para el dise diseño ño de aplicaciones en las que haya que introducir documentos de texto. El RichTextBox RichTextBox puede utilizar indistintamente formato de texto Ascii (que le llamaremos Texto Texto Plano) Plano) o formato RTF (RichTextForm (RichTextFormat, at, que llamaremos llamaremos Texto Texto enriquecido enriquecido)) El formato de Texto enriquecido es un formato de intercambio entre procesadores de texto. Vea al final del capítulo una explicación más detallada de este formato de texto. De momento basta con decir que permite poner tipos distintos de letras, de tamaños, de colores, introducir gráficos, y toda una serie de ventajas que le van a permitir realizar procesadores de texto casi tan perfectos como como los los edito editores res comerci comerciale ales s mas cono conocid cidos. os. Esto Esto nos nos permite permite por por ejempl ejemplo, o, guard guardar ar estrictamente las letras que componen el texto (Propiedad Text de RichTextBox) o guardar el texto, con sus letras y todos los adornos que queramos ponerles (Tipos distintos de fuente, negrita, cursiva, …). Esto lo logramos con la propiedad TextRTF del RichTextBox. RichTextBox. Cuando Cuando hablamos de guardar, nos estamos refiriendo lógicamente a guardarlo en un fichero en el disco, y también a guardarlo en el portapapeles. Si tenemos un RichTextBox de nombre RTB (así le llamaremos en todos los ejemplos) con un texto tal como Te creías muy listo Flanahan, pero tus vacas no pasarán por mis tierras La propiedad Text contendrá los siguiente RTB.Text = Te Te creías muy listo Flanahan, pero tus vacas no pasarán por mis tierras
La propiedad TextRTF contiene toda la información, pero eso sí, en formato RTF RTB.TextRTF={\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fswissMS
Sans Serif;}{\f1\froman\fcharset2 Symbol;}{\f2\fswiss\fprq2Arial;}}{\colortbl\red0\green0\blue0;}\deflang1034\pard\li708\plain\f2\fs 20 Te Te cre\'eda cre\'edas s muy listo \plain\f2\fs20 \plain\f2\fs20\b\i \b\i Flanaha Flanahan\pla n\plain\f2\fs2 in\f2\fs20 0 , pero pero tus \plain\f2\fs24 \plain\f2\fs24 vacas\plain\f2\fs20 no pasar\'e1n pasar\'e1n por \plain\f2\fs20\ul mis tierras\plain\f2\fs20 tierras\plain\f2\fs20 \par \pard\plain\f0\fs17 \par } (Puede que el texto anterior tenga alguna diferencia sobre el real, debido a que hubo que introducirle algún retorno de carro para poder presentarlo) Veamos las propiedades de este control
Propiedades del RichTextBox RichTextBox
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 7
El RichTextBox tiene todas las propiedades del TextBox, y además otras que son las que le dan las característi características cas excepciona excepcionales les a este control. Las tres siguient siguientes es propied propiedade ades s son idénticas para ambos controles : SelLenght
Devuelve o establece el número de caracteres seleccionados. seleccionados. Los caracteres seleccionados son aquellos que se ponen en vídeo inverso cuando arrastramos con el ratón.
SelStart
Devuelve o establece el número del carácter de comienzo del texto seleccionado.
SelText Devuelve o establece la cadena de caracteres seleccionados. seleccionados. Si no hay ningún
carácter seleccionado seleccionado devuelve devuelve la cadena cadena “” (cadena vacía)
En el ejemplo, el texto seleccionado es ejemplo nos permitirá, texto text o que hemos seleccionado con el ratón. Las propiedades propiedades anteriores tomarán estos valores para ese texto seleccionado : SelLenght = 21 SelStart = 5
(Recuerde que el espacio también es un carácter) (La e de ejemplo es es la sexta letra, pero empieza a contar po por la 0)
SelText = ejemplo nos permitirá
Recuerde que estas propiedades son tanto de lectura como de escritura. Es decir, puede seleccionar un texto con el ratón y analizar ese texto seleccionado, o seleccionar el texto dándole valores a estas propiedades. Las diferencias entre uno y otro control comienzan ahora. En un RichTextBox, con un texto seleccionado, seleccionado, podemos cambiar el tipo de letra, su tamaño, su color, etc.
Tipos y tamaño de las fuentes. El RichTextBox tiene la propiedad Font , propiedad que podemos podemos cambiar e tiempo de diseño diseño o en tiempo de ejecución, y que se refiere ref iere a la globalidad del RTB. Debemos señalar señalar que en el RTB, la propiedad Font es en sí un objeto más. Objeto que tiene sus propiedades (Name, Size, Bold, Italic, etc.) Esto ocurre con los controles controles modernos, modernos, dada la tendencia tendencia de VB de ser cada cada día más un lenguaje orientado a objetos. No ocurre lo mismo con otros controles ya conocidos (Commo (CommonDi nDialo alog, g, por por ejempl ejemplo) o) que que debe deben n manten manteners erse e con la nomen nomenclat clatura ura anter anterior ior por por razones razones de compatibilidad compatibilidad con versiones versiones anteriores anteriores de VB. Veamos eamos esto en el siguiente siguiente ejemplo, en el que se modifica la propiedad Font Font de RTB con el CommonDialog CD1
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 8
RTB.Font.Name = CD1.FontName RTB.Font.Size = CD1.FontSize RTB.Font.Bold = False RTB.Font.Italic = False (Observe que en el RTB ponemos Font.Name y en el CD1 ponemos ponemos FontName) Con la propiedad Font podemos escribir en el RTB usando la misma letra para todo el texto. Sin embargo verá que esta propiedad prácticamente no se va a usar, ya que el RTB tiene la gran ventaja que puede usar varios tipos de letra y tamaños dentro de un mismo texto. Puede usar también varios colores. Para poder cambiar de letra no usaremos Font.Name, sino SelFontName, (Fíjese que esta propiedad no lleva ningún punto intermedio) que cambia el tipo de letra en el texto que hayamos seleccionado, seleccionado, y si no hemos seleccionado seleccionado ningún texto, y el cursor de escritura se encuentra al final del texto escrito, lo que hará será cambiar el tipo de letra a partir de ese punto. punto.
Propiedades SelBold , SelItalic, SelStrikethru, SelUnderline Estas Estas propie propiedad dades es son son del tipo tipo Boole Booleano ano (True (True/Fal /False) se) y nos nos permitir permitirán án pone ponerr el texto texto seleccionado en Negrita, Cursiva, Tachada y Subrayada respectivamente. Por ejemplo,
RTB.SetBold = True True pondrá el negrita el texto seleccionado. seleccionado. RTB.SelItalic = True True pondrá en cursiva el texto seleccionado. seleccionado. RTB.SelStrikethru = True pondrá en tachado el texto seleccionado. RTB.SelUnderline = True pondrá en subrayado el texto seleccionado. ( RTB = Nombre del control RichTextBox RichTextBox ) Si el texto seleccionado está en la parte final del texto, o si el cursor de escritura está al final del escrito y no se ha seleccionado ningún texto, la propiedad elegida permanecerá vigente para la escritura que se realice a partir de ese punto.
SelFontName
Esta propiedad propiedad devuelve o establece el nombre de la fuente en el texto seleccionado. P.e. RTB1. SelFontName = “Arial”
SelFontSize
Devuelve o establece el tamaño de la fuente en el texto seleccionado. P.e. RTB1.SelFontSize = 10
SelColor
Devuelve o establece el color del texto seleccionado. Para definir el color color pued puede e usars usarse e cualqu cualquier iera a de los método métodos s explica explicado dos s en un capí capítu tulo lo ante anterio riorr. Los Los ejem ejempl plos os sigu siguie ient ntes es camb cambia iará rán n el texto texto seleccionado seleccionado a color rojo RTB.SelColor = RGB (255,0,0) RTB.SelColor = 255 RTB.SelColor = &HFF
Al igual que las otras propiedades, si el texto seleccionado está al final del texto, o si el cursor de escritura está al final del escrito, la propiedad elegida permanecerá permanecerá vigente para la escritura que se realice a partir de ese punto.
Propiedades Text y TextRTF Las vimos al principio. La propiedad Text contiene TODO el texto del RichTextBox en formato de texto plano. La propiedad TextRTF contiene TODO el texto del RichTextBox en formato de texto enriquecido. Estas propiedades son de lectura y escritura, de forma que pueden tener estas dos sintaxis: Escritura:
LSB
RTB.Text = “Siempre nos quedará París ”
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 9
Esta instrucción sustituye todo el contenido del RTB por el texto Siempre nos quedará quedará París Lectura:
MiVariable = RTB. Text
MiVariable MiVariable contendrá todo el contenido de RTB en formato form ato de texto plano La propiedad TextRTF es similar, pero con texto en formato enriquecido. Si la usamos como lectura: MiVariable = RTB. TextRTF MiVariable contendrá el texto, más los caracteres que definen el tipo de letra, tamaño, etc, como vimos al principio. Si la usamos como escritura: RTB.TextRTF = TuVariable Si TuVariable contiene un texto en formato RTF RTF, el contenido de RTB RTB será justamente justamente ese texto, con todas sus florituras de tipo de letra, tamaño, negrita, etc. Si TuVariable contuviese un texto en formato de texto plano, lo escribirá tal cual, con el tipo y tamaño de letra que tenga en su propiedad Font .
Propiedades SelText y SelRTF Es conveniente no confundirlas con las anteriores. Aquellas contenían TODO el texto del RichTextBox. Estas, solo el texto que está seleccionado.
SelText
Devuelve o establece el texto seleccionado en formato de texto plano. No está disponible en tiempo de diseño.
Al ser una propiedad de lectura y escritura, nos permite: Escritura: añadir texto (que se colocará en la posición en la que esté el curso) o cambiar el
texto seleccionado por otro. La instrucción RTB.SelText = “Siempre nos quedará quedará París” Introducirá el texto anterior en la posición donde estuviera el cursor, o si teníamos texto seleccionado, seleccionado, cambiará el texto anterior por este. Lectura: Teniendo un trozo de texto seleccionado, MiVariable = RTB. SelText MiVariable tomará el valor del texto que estuviese seleccionado en formato de texto plano. SelRTF
Devuelve o establece el texto seleccionado en formato .RTF. Al igual que SelText SelText es de lectura y escritura. No está disponible en tiempo de diseño. Sintaxis
(Escritura)
RTB.SelRTF = MiVariable
Si el conte contenid nido o de MiVaria MiVariable ble está está en formato formato RTF RTF, susti sustituir tuirá á el texto texto que que tuviésem tuviésemos os seleccionado por el contenido de MiVariable, y lo escribirá con todos los detalles de tipo de letr letra, a, tama tamaño ño,, etc., etc., que que cont contuvi uvies ese e el forma formato to RTF RTF. Si no hubi hubiés ésem emos os sele selecci ccion onad ado o previamente ningún texto, escribirá ese texto en el lugar donde donde estuviese colocado colocado el cursor. cursor. Si el contenido de MiVariable fuese un texto plano, escribirá ese texto, usando las mismas propiedades propiedades para la letra que tuviese el texto seleccionado previamente, o las del punto donde se encontrase el cursor.
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 10
Sint Sintax axis is de Lectu ectura ra))
MiV MiVaria ariabl ble e = RTB RTB.. SelRTF
MiVariable MiVariable contendrá el texto que estuviese estuv iese seleccionado, seleccionado, en formato RTF. Esta propiedad es equivalente a la propiedad SelText y funciona de forma idéntica, pero en este caso el texto reemplazado o devuelto mediante la propiedad SelRTF está en formato RTF. Esta propiedad devuelve una cadena de longitud cero ("") si no hay texto seleccionado en el control.
Alineación y márgenes del texto El RichTextBox permite crear un margen desde el borde izquierdo hasta el comienzo de la escritura, (Propiedad SelIndent), y otro margen desde desde el borde borde derecho derecho hasta hasta el final de la línea (Propiedad SelRightIndent ), o limitar el ancho de la línea ( Propiedad RightMargin). También se puede poner una sangría a las líneas segunda y siguientes respecto a la primera línea del párrafo (Propiedad SelHangingIndent ). Este tipo de sangría es la sangría francesa, sangría que no se suele usar (a lo mejor se usa en Francia). En realidad lo que se usa mucho es separar la primera línea del párrafo un poco más que el resto de las líneas. Esto puede conse consegui guirs rse e dand dando o un valor valor nega negativo tivo a la propie propiedad dad SelHangingIndent . Lo verá verá mas mas adelante. La medida de estos márgenes y sangrías se realiza en las unidades de medida del formulario que contiene al RichTextBox. Veamos un ejemplo comentado de estas propiedades.
Margen izquierdo . Con la instrucción RTB.SelIndent = Val(TBSangria) Separa el párrafo correspondiente a la línea donde está en ese momento al cursor. (Que a partir de ahora la llamaremos Línea en curso) El espacio que separa ese párrafo del borde izquie izquierdo rdo del del RichT RichTextB extBox ox es un valor valor igual igual al que que hayam hayamos os introd introduci ucido do en el TextBox extBox TBSangría, medido en las unidades de medida del formulario que contiene a RTB. Recuerde, sólo hace la sangría con el párrafo que contiene la línea en curso. Si queremos separar varios párrafos, debemos seleccionar esos párrafos antes de ejecutar la todas los instrucción instrucción anterior. anterior. Para poner una separaci separación ón desde desde el borde borde izquierdo izquierdo de todas párraf párrafos os del texto texto debe deberem remos os primero primero,, selecc seleccion ionar ar todo todo el texto, texto, y luego luego ejecut ejecutar ar la instrucción anterior. Esto podemos podemos lograrlo combinando estas tres instrucciones: RTB.SelStart = 1 RTB.SelLength = Len(RTB.Text) RTB.SelIndent = Val(TBSangria)
Margen derecho. Usaremos la propiedad SelRightIndent . Con la instrucción: instrucción: RTB.SelRightIndent RTB.SelRightIndent = Val(TBMargenDcho Val(TBMargenDcho)) Separamos el final del párrafo donde está la línea en curso una distancia igual al valor de TBMargenDcho. TBMargenDcho. Esta propiedad propiedad es completamente completamente equivalente a la anterior, anterior, esta referida al margen margen derecho derecho y aque aquella lla al marge margen n izquie izquierdo rdo.. Es aplica aplicable ble todo todo lo que que se dijo dijo para para SelIndent.
Longitud máxima de la línea desde el borde izquierdo . Parece un poco largo la definición de esta propiedad. Se refiere a la propiedad RightMargin. Esta propiedad marca la distancia desde el borde izquierdo del RichTextBox hasta el límite máximo utilizable por el texto. Este valor es el que se toma como fin de la zona utilizable por el texto, por lo tanto, ese punto será la referencia que utilice la propiedad SelRightIndent para determinar el punto a partir partir del cual cual creará creará el margen margen derec derecho ho.. También ambién será será la referen referencia cia derec derecha ha cuan cuando do centremos un texto o lo alineemos a la derecha.
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 11
RTB.RightMargin = Val(TBAncho) La instrucción anterior fija como distancia máxima que puede ocupar una línea de texto la cantidad introducida en TBAncho. Por supuesto, expresada como siempre en las unidades de medida del formulario. La línea puede ser mas ancha que el ancho del RichTextBox. En este caso la línea no cabe en el RTB, pero puede visualizar la línea completa usando baraas de scroll horizontales (Vea (Vea propiedad ScrollBars más adelante)
Sangría francesa. La sangría francesa consiste en separar la segunda línea y siguientes cierta medida a la derecha respecto a la primera línea. Algo así Esta es la primera línea de este texto donde se explica lo que es una sangría francesa en realidad desconozco si en Francia usan este tipo de sangría, pero a mí me gusta más la sangría española, siempre que esté bien fresquita.
Esto se logra mediante la propiedad SelHangingIndent y afecta únicamente al párrafo donde se encuentra la línea en curso. Puede hacer lo que parece mas lógico, separar la pri mera línea un poco respecto a las demás, dando un valor negativo a la propiedad SelHangingIndent . Pero para que esto resulte, debe poner un valor al menos igual a la propiedad SelIndent. En el ejemplo siguiente, hacemos una sangría solamente solamente a la primera línea del párrafo donde está la línea en curso: RTB.SelIndent = Val(TBSangriaEsp) RTB.SelHangingIndent = -Val(TBSangriaEsp) (Observe el signo menos en en la segunda segunda línea) El valor de la sangría de de la primera línea será el contenido en TBSangriaEsp
Centrado, Alineación Alineación a la izquierda o a la derecha. El centrado de una línea o párrafo se logra mediante la propiedad SelAlignment Puede tomar los valores 0 (alineado a la izquierda), 1 (a la derecha) ó 2 (centrado) Siempre se refiere a la línea en curso o al párrafo que contiene la línea en curso. Si quiere alinear varios párrafos, debe seleccionarlos seleccionarlos antes de ejecutar la instrucción de alineamiento. RTB.SelAlign RTB.SelAlignment ment = 0 ‘alinea ‘alinea a la izquierd izquierda a RTB.SelAlign RTB.SelAlignment ment = 1 ‘alinea ‘alinea a la derech derecha a RTB.SelAlign RTB.SelAlignment ment = 2 ‘centra ‘centra el texto texto En la alineación se tiene en cuenta la propiedad RightMargin, es decir, si alinea a la derecha, lo hará tomando como parte mas derecha del escrito el valor de la propiedad RightMargin, no el borde lateral derecho del RTB. Lo mismo le ocurre con el centrado.
Viñetas El RichTextBox es, como decíamos al principio, un control que nos permite realizar editores de textos muy potentes. Incluso podemos podemos poner viñetas Una viñeta es un párrafo marcado con un punto en su comienzo, y que lleva una cierta sangría respecto al borde borde izquierdo del RichTextBox. RichTextBox. Para poner una una viñeta es necesario jugar con dos propiedades: SelBullet, propiedad Booleana Booleana que que si la hacemos True True convertimos el párrafo donde está la línea en curso en en una viñeta. Si está en False, ese párrafo será será un párrafo normal. BulletIndent , propiedad propiedad a la que le pondremos pondremos un un valor numérico igual a la separación separación que queremos poner poner en el texto de la viñeta. Para que tenga efecto la propiedad propiedad BulletIndent , la propiedad SelBullet debe estar puesta a True. True. No tendrá efecto alguno alguno si SelBullet = False. Por ejemplo, para poner una viñeta podemos poner
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 12
RTB.SelBullet = True RTB.BulletIndent = 500 Una vez puesta una viñeta en el RichTextBox, insertará otro cada vez que pulsemos ENTER. Para quitarlo, basta con ejecutar la sentencia sentencia SelBullet = False
La propiedad BulletIndent es de lectura y escritura. La instrucción siguiente nos devuelve la separación separación de la viñeta donde tengamos tengamos el cursor. cursor. La propiedad propiedad BulletIndent devuelve 0 si la selección abarca múltiples párrafos con distintos ajustes de margen o si el párrafo no es una viñeta. También podemos leer el valor de SelBullet. Devolverá Null. La selección abarca más de un párrafo y contiene una mezcla de estilos de viñeta y no
viñeta. True. Los párrafos párrafos de la selección selección tienen estilo estilo de viñeta. False. La párrafos de la selección no tienen estilo de viñeta.
Tabulación del RichTextBox Si quere queremo mos s crear crear un edito editorr de texto texto de la categ categorí oría a de cualqu cualquier iera a de los comerci comerciale ales, s, debemos debemos poder tabular. tabular. Tabular abular significa significa crear crear unos unos hitos o marcas marcas a una determinada determinada dista distanci ncia a del del borde borde izquierd izquierdo o del del papel papel,, de forma forma que que cada cada vez que que pulsem pulsemos os la tecla tecla Tabulador el cursor de escritura se coloca al inicio del siguiente de esas marcas. El primer problema es que si estamos escribiendo sobre el RichTextBox y pulsamos Tabulador, el foco se nos escapa hacia el siguiente control, según el orden de la propiedad TabIndex. Existe una solución, que es pulsar la combinación de las teclas Ctrl + Tab. Sin embargo esa posibilidad no es recomendable, dado que un usuario normal no está acostumbrado a realizar esa combinación para forzar una tabulación. La solución está en poner la propiedad TabStop de todos los controles a False, cada vez que el RichTextBox RichTextBox toma to ma el foco. Es decir, en su procedimiento GotFocus . De esta forma, al dar el tabulador ningún control se “querrá” quedar con el foco, y por lo tanto el foco seguirá en el RichTextBox. En estas condiciones el resultado es que el cursor de escritura pasará a la siguiente tabulación. Vamos a ver como se puede poner la propiedad TabStop a False en todos los controles del formulario. Para ello vamos a explicar un nuevo objeto Visual Basic, el objeto Controls. Este objeto es una colección, y está formada por todos los controles del formulario. Como cualquier colección tendrá una propiedad, la propiedad Count que toma el valor igual al número de control controles es existen existentes tes en el formular formulario. io. Como Como cualqu cualquier ier cosa cosa de VB formada formada por por varios varios elementos, cada uno de ellos se distingue por su índice. Y este índice comienza por el 0 y termina por el n-1, siendo n = número de elementos de esa colección. Para poner la propiedad TabStop a False en todos los controles de la colección Controls del formulario, basta con poner poner este código en el procedimiento GotFocus del RTB Private Sub RTB_GotFocus() RTB_GotFocus() Dim I As Integer ‘Con la siguiente línea se evita el error producido en aquellos controles que no tienen la ‘propiedad TabStop On Error Resume Next For I = 0 To Me.Controls.Count - 1 Controls(I).TabStop = False Next I End Sub
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 13
Podemos hacerlo hacerlo de otra forma. Declaremos una variable tipo Objeto Control Private Sub RTB_GotFocus() RTB_GotFocus() Dim Pepe As Control On Error Resume Next 'De esta forma se evita el error producido en aquellos controles que no tienen la propiedad TabStop For Each Pepe In Controls Pepe.TabStop = False Next End Sub Nota. Si va a la información del RichTextBox podrá ver un ejemplo de esto, con el siguiente código: For Each Control In Controls Control.TabStop Control.TabStop = False Next Control
Milagros del Visual Visual Basic: Así no funciona Ya funcion funciona a perfe perfectam ctamen ente te el tabula tabulado dorr en el RichT RichTextB extBox. ox. Pero Pero cuand cuando o salga salgamo mos s del RichTextBox, debemos volver a poner la propiedad TabStop de todos los controles a True. Para ello, en el procedimiento LostFocus del RTB pondremos el código anterior, poniendo True en vez de False en la propiedad TabStop.
Programar las medidas de las tabulaciones. Propiedad SelTabCount SelTabCount Establece el número de tabulaciones en un RTB. P.e., si queremos crear 5 tabulaciones RTB.SelTabCount = 5
Propiedad SelTabs SelTabs Establece el valor numérico (separación desde el borde izquierdo) de las tabulaciones. Dado que pueden pueden existir varias tabulaciones, deberemos distinguirlas entre ellas mediante un índice. El índice para la primera primer a tabulación es el 0 RTB.SelTabs(0) = 1000 RTB.SelTabs(1) = 2000 RTB.SelTabs(2) = 3000 RTB. RTB.Sel SelT Tabs( abs(3) 3) = 400 4000 0 RTB.SelTabs(4) = 5000
Con Con estas stas línea líneas s dete determi rmina naría ríamo mos s la posi posició ción n de tabu tabula lació ción n de los 5 tabuladores.
Antes Antes de darle darle valor a la propie propiedad dad SelTabs deberemo deberemos s haber haber creado creado los tabulad tabuladores ores mediante mediante SelTabC SelTabCoun ount. t. Si pretend pretende e darle valor a un tabulador tabulador mayor que el número número de tabuladores real (por ejemplo, si pone en el caso anterior RTB.SelTabs(5) = 5000) le dará un error. Recuerde que los valores de los tabuladores debe darlos en las unidades de medida del formulario. OTRAS PROPIEDADES
Propiedad SelCharOffset Nos permite crear subíndices y superíndices. La sintaxis es: RTB.SelCharOffset = Número
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 14
Donde Número indica la separación del superíndice o subíndice en Twips. Si Número es positivo, obtendremos obtendremos un superíndice, si es negativo, un subíndice. Esta forma de escribir subíndices y superíndices se debe aplicar cada vez que queramos escribir uno de ellos, e inmediatamente, poner esa propiedad propiedad a 0, ya que si no lo hacemos así, escribiría escribi ría como subíndice o superíndice el resto del texto. texto . P.e. para poner un superíndice: TamIni = RTB.SelFontSize RTB.SelFontSize = TamIni TamIni - 4 RTB.SelCharOffset = 40 RTB.SetFocus Para restaurar los valores anteriores RTB.SelFontSize = TamIni RTB.SelCharOffset = 0 RTB.SetFocus
Propiedad SelProtected Es una propiedad Booleana, que nos permite proteger contra cualquier cambio a una parte del texto (o todo el texto) que contiene el RTB. Para proteger una parte del texto basta con seleccionarla y a continuación ejecutar la instrucción RTB.SelProtected = True Una vez protegida una parte del texto, esa parte no se puede variar. Puede desprotegerse, volviendo volv iendo a seleccionarla y ejecutando la instrucción: RTB.SelProtected = False
Propiedad ScrollBars Pone barras de desplazamiento al RichTextBox. Esta propiedad puede puede establecerse a 0 (None, ninguna), a 1 (Horizontal), 2 (Vertical) o 3 (Both, ambas). Cuando las barras de desplazamiento no son necesarias, bien porque hay pocas líneas, líneas, bien porque porque hay pocos caracteres caracteres por línea, las barras barras de desplazamien desplazamiento to están están desactivadas. Es frecuente pensar que las barras de desplazamiento horizontal no funcionan. Y eso ocurre porque siempre se ven desactivadas. En realidad lo que pasa es que solamente se activan cuando la línea de texto es mas ancha que el ancho del RichTextBox. Puede ocurrir eso cuando la propiedad RightMargin tiene un valor superior a la anchura del control, circunstancia que nos permite permite escribir saliéndonos del control, control, y es en solamente en ese caso caso en el que se activa la barra de scroll horizontal. Las barras de desplazamiento desplazami ento pueden desactivarse desacti varse mediante la propiedad DisableNoScroll. DisableNoSc roll.
Propiedad DisableNoScroll Devue Devuelve lve o esta establ blec ece e un valor valor que que dete determi rmina na si está están n desa desactiv ctivad adas as las las barr barras as de desplazamiento desplazamiento en el control RichTextBox. RichTextBox. Sintaxis
NombredelRichTextBox. DisableNoScroll = True / False
Si es False, las barras de desplazamiento aparecen normalmente. Si es True, las barras de desplazamiento aparecen atenuadas. Propiedad Appearance
Plano o tridimensional, como en el resto de los controles. Propiedad AutoVerbMenu AutoVerbMenu
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 15
Propiedad Booleana que indica si se presenta un menú emergente cuando el usuario hace click con el botón derecho del ratón. El menú emergente muestra los comandos de Deshacer (Ctrl-Z) cortar (Ctrl-X), copiar (Ctrl-C), pegar (Ctrl-V) y Eliminar (Supr) Pero no es necesario escribir código en ninguna parte para que se realicen estas operaciones (Por una vez, VB nos regala unas operacion operaciones. es. No es VB, VB , es W indows directamente) Sintaxis
NombredelRichTextBox. AutoVerbMenu = True / False
Si esta propiedad está a True muestra el menú. False no lo muestra. Propiedad BorderStyle
Sin borde o con borde (None o Fixed Fi xed Single) Propiedad Enabled
Propiedad Booleana. Booleana. Activa o desactiva el RichTextBox FileName
Esta propiedad devuelve o establece el nombre del fichero .RTF cargado en el RichTextBox. Si ejecutamos la línea de código : RTB1.Filename =”C :\CursoVB\Mitexto.rtf” lo que ocurrirá es que nuestra nuestra aplicación cargará cargará el fichero C :\Curs :\CursoVB\Mi oVB\Mitexto.rtf texto.rtf en el RichTextBox RichTextBox RTB1. Es decir, decir, hace lo mismo que que el Método LoadFile (Vea mas abajo). Sólo puede especificar los nombres de archivos de texto o archivos .RTF válidos para esta propiedad. Le recomendamos que para cargar un texto en un RTB use siempre el método LoadFile en vez de la propiedad propiedad Filename. Si lo que hacemos con esta propiedad es consultar el fichero cargado en el RTB : Variable = RTB1. Filename obtendremos en Variable el nombre (y Path) del fichero que tenemos cargado en el RTB HideSelection
Devuelve o estable establece ce un valor que determina determina si el texto seleccionad seleccionado o aparece aparece resaltado resaltado cuand cuando o el RichT RichTextB extBox ox pierd pierde e el enfoq enfoque ue.. Esto Esto es justam justamen ente te lo que que ocurr ocurre e cuan cuando do seleccionamos un trozo de texto (Por ejemplo para pasar ese texto a negrita) y hacemos click sobre otro control (Por ejemplo, sobre un botón de comando para cambiar a Negrita) Si tenemos esta propiedad a False el texto seleccionado sigue seleccionado. Si está a True, el texto se deselecciona. NOTA Le recomiendo que cuando cuando tenga un control control para cambiar el t ipo de letra, hágalo sobre un control que no acepte el foco fo co (Label, p.e.) Sintaxis propiedad
NombreRTB.HideSelection = True rue / Fals False e Variable = NombreRTB.HideSelection
para para
esta establ blec ecer er
la
para le leerla
Propiedad Locked
Igual que le ocurre al TextBox, si ponemos esta propiedad a True impedimos que se pueda cambiar el texto existente en el RichTextBox RichTextBox mediante el teclado. MaxLength
Esta propiedad marca el número máximo de caracteres que puede contener. Si se pone a 0 (Predeterminado) admite cualquier número de caracteres.
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 16
MousePointer
Igual que para el resto de los controles. Multiline
Igual que para el TextBox. Si está a True (predeterminado) el RichTextBox puede contener varias líneas. Si está a False, una solo. OLEDragMode OLEDropMode
Estas dos propiedades son similares a la DragMode de otros controles. Se verán con mas detalle al estudiar el Drag & Drop. METODOS DEL CONTROL RichTextBox
El control RichTextBox cuenta con unos métodos especiales para abrir un fichero y guardar el texto que contiene un poco especiales. Estos métodos (SaveFile y LoadFile) se pueden usar solam solamen ente te cuand cuando o quere queremo mos s guard guardar ar o leer leer el texto texto en formato formato .RTF .RTF.. Con Con ellos ellos no es necesario abrir el fichero (con Open Nombrefichero .....) ni cerrarlo, pero siempre para guardar o leer texto en formato RTF. Podemos leer o guardar el texto de un RichTextBox como texto plan plano o (Com (Como o los los fiche fichero ros s ASCII ASCII .TXT). .TXT). Para Para ello ello debe debemo mos s utiliz utilizar ar los los méto método dos s Open Open Nombrefichero For Input / Output v istos en el capítulo de ficheros. METODO SaveFile
Guarda el contenido de un control RichTextBox RichTextBox en un archivo. Sintaxis
NombredelRTB. SaveFile(nombre_ruta, (nombre_ruta, tipo_archivo)
Donde nombre_ruta (Parámetro requerido) es una expresión de cadena que define la ruta de acceso y el nombre del archivo que va a recibir el contenido del control, y tipo_archivo es un enter entero o o una una cons constan tante te que que espe especific cifica a el tipo de archivo archivo carga cargado do,, como como se descri describe be a continuación : 0 1
rtfRTF rtfText
El control RichTextBox guarda su contenido como un archivo .RTF. El control RichTextBox guarda su contenido como un archivo de texto.
El valor va lor predeterminado es 0. Si no se pone este parámetro, parámetro, toma el valor 0 por defecto. Ejemplo RTB1.SaveFile “C :\CursoVB\mitexto.rtf”, 0 Guarda el contenido del RichTextBox RTB1 en un fichero llamado mitexto.rtf que está en el directorio CursoVB, con formato RTF Aparte del método SaveFile, puede utilizar la función Print de Visual Basic y las propiedades TextRTF y SelRTF del control RichTextBox para escribir archivos .RTF. Por ejemplo, puede guardar el contenido de un control RichTextBox RichTextBox en un archivo .RTF de este modo: Open "mitexto.rtf" For Output As 1 Print #1, RichTextBox1. RichTextBox1. TextRTF Close #1 METODO LoadFile
Carga un archivo .RTF o un archivo de texto en un control RichTextBox. RichTextBox. Sintaxis
LSB
NombreRTB.LoadFile nombre_ruta, tipo_archivo
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 17
Donde nombre_ruta (Parámetro requerido) es una expresión de cadena que define la ruta de acceso y el nombre del archivo que se va a cargar en el control, y tipo_archivo es un entero o una constante constante que especifica el tipo de archivo cargado, como se describe a continuación 0 1
rtfRTF rtfText
El archi vo cargado debe ser un archivo .RTF válido. El control RichTextBox ca carga cualquier archi vo de de texto.
Al cargar un archivo con el método LoadFile , el contenid contenido o del archivo cargado cargado reemplaza a todo todo el conten contenido ido del contro controll RichT RichTextB extBox. ox. Esto Esto hace hace que que cambie cambien n los los valores valores de las propiedades Text y rtfText. También puede usar la función Input de Visual Basic y las propiedades TextRTF y SelRTF del control RichTextBox para leer archivos .RTF. Por ejemplo, puede cargar el contenido de un archivo .RTF en el control RichTextBox RichTextBox de este modo: Open "C :\CursoVB\mitexto.rtf" For Input As 1 RichTextBox1. TextRTF = Input$(LOF(1), 1) Close #1
METODO Find
Busca una cadena específica en el texto de un control RichTextBox. Sintaxis
Variable = NombreRTB.Find (cadena, inicio, fin, opciones)
Donde : cadena (Necesario) inicio (Opcio (Opcional nal))
fin
(Opci (Opcion onal al))
Opciones (Opcional)
Valor
Constante
Una expresión de cadena que desea buscar en el control. control . Un índi índice ce de de carac caracter teres es de de tipo tipo Integ Integer er que que determ determina ina dónd dónde e comien comienza za la búsqueda. Cada carácter del control tiene un índice entero que lo identifica de forma única. El primer carácter de texto del control tiene un índice 0. Un índ índic ice e de car carác ácte terr de ent enter ero o que que dete determi rmina na dón dónde de ter termin mina a la búsqueda. Una o más más valores o constante constantes s utilizadas para para especificar características opcionales, como se describe a continuación. Descripción
1
rtfWh rtfWhol oleW eWor ord d Dete Determi rmina na si una una coi coinc ncid iden enci cia a se se ba basa en una una pal palab abra ra comp comple leta ta o en en parte de una palabra. 4 rtfM rtfMat atch chCa Cas se Determ termin ina a si si un una coi coin ncid cidencia cia se se ba basa el el us uso de de may mayú úscul scula as y minúsculas de la cadena especificada además del texto de la cadena. cadena. 8 rtfN rtfNoH oHig ighl hlig ight ht Dete Determi rmina na si una una coin coinci cide denc ncia ia apar aparec ece e resa resalt ltad ada a en en el el con contr trol ol RichTextBox. Puede combinar múltiples opciones si utiliza utili za el operador Or. Si se encuentra el texto buscado, el método Find resalta el texto especificado y devuelve un número con la posición del primer carácter resaltado. Si no se encuentra el texto especificado, el método Find devuelve –1. Si utiliza el método Find sin la opción rtfNoHighlight aunque la propiedad HideSelection sea True y el control RichTextBox no tenga el enfoque, el control seguirá resaltando el texto encontrado. Los usos posteriores del método Find sólo buscarán el texto resaltado hasta que se mueva el punto de inserción. El comportamiento de búsqueda del método Find varía según la combinación de valores especificad especificados os para los argumentos argumentos inicio y fin. Esta tabla describ describe e los comportamientos comportamientos posibles:
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 18
Inicio
Fin
Comportamiento de búsqueda
Espe Especifi cifica cado do
Espe Especifi cifica cado do
Especifi cifica cad do
Omit Omitid ido o
Omit Omitid ido o
Especifi cifica cad do
Omitido
Omitido
Busc Busca a desd desde e la ubi ubica caci ción ón ini inicia ciall espe especifi cifica cada da has hasta ta la la ubicación final especificada. Busca sca de desde sde la la ubi ubica caci ció ón ini inici cial al especifi cifica cada da hasta sta el el fin final del texto del control. Busca sca de desde sde el punto de inserc serció ión n actua ctuall ha hasta sta la ubica bicaci ció ón final especificada. Busca en la selección actual si el texto está seleccionado o en todo el contenido del control si no hay texto seleccionado. seleccionado.
METODO GetLineFromChar
Devuelve el número de la línea que contiene una posición de carácter especificado en un control RichTextBox. RichTextBox. Sintaxis
Variable = NombreRTB. GetLineFromChar ( pos_carácter pos_carácter )
Donde pos_carácter (Requerido) es un entero largo que especifica la posición del carácter cuya línea desea identificar. identificar. El índice del primer carácter del control RichTextBox RichTextBox es 0. Utilice Utilice el métod método o GetLineFromChar para para averig averigua uarr qué qué líne línea a del del texto texto de un cont contro roll RichTextBox contiene una determinada posición de carácter. Es posible que necesite hacerlo porque puede variar el número de caracteres de cada línea, lo que hace muy difícil averiguar qué línea del texto contiene un determinado carácter, carácter, identificado identif icado por su posición en el texto. te xto. METODO SelPrint
Envía texto con formato de un control RichTextBox RichTextBox a un dispositivo de impresión. Sintaxis
NombreRTB.SelPrint(hdc)
Donde hdc es el contexto de dispositivo del dispositivo que va a utilizar para imprimir el contenido del control. Si hay texto seleccionado en el control RichTextBox, el método SelPrint sólo enviará el texto seleccionado al dispositivo de destino. Si no hay texto seleccionado, se enviará el contenido completo del control RichTextBox RichTextBox al dispositivo. El método SelPrint no imprime texto desde el control RichTextBox. En su lugar, envía una copia del texto con formato a un dispositivo que pueda imprimirlo. Por ejemplo, puede enviar el texto al objeto Printer utilizando código como éste: RichTextBox1. SelPrint(Printer.hDC) Observe que la propiedad hDC del objeto Printer se utiliza para especificar el argumento de contexto de dispositivo del método SelPrint. Nota Si utiliza el objeto Printer Printer como destino destino del texto desde desde el control RichTextBox, RichTextBox, deberá inicializar en primer lugar el contexto de dispositivo dispositivo del objeto Printer. Printer. Esto es necesario, necesario, ya que Visual Basic no conoce conoce el hDC del Printer hasta que que se imprime algo. La información de Microsoft recomienda imprimir imprim ir una cadena de longitud cero. (Ejecutar la instrucción Printer.Print “”) Sin embargo esa no es buena solución ya que da un error de impresora. Vale mas forzar la posición del papel, aunque no hiciese falta Printer.Orientation = 1 Mediante SelPrint nos podemos podemos ahorrar ahorrar la tediosa tediosa programaci programación ón del Printer, Printer, pero tiene también inconvenientes: No controlamos el cambio de página, si tenemos papel preimpreso es muy difícil ajustarlo, etc. METODO Span
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 19
Selecci Seleccion ona a texto texto en un contr control ol RichT RichTextB extBox ox basá basánd ndos ose e en un conju conjunto nto de caract caractere eres s especificado. Sintaxis
NombreRTB.Span juego_caracteres, hacia_adelante, negado
donde : juego_caracteres (Requerido) Una expresión de cadena que especifica el juego de caracteres
que se va a buscar al ampliar la selección, basándose basándose en el valor va lor de negado. hacia_adelante (Opcional) Una expresión booleana que determina en qué sentido se mueve
el punto de inserción, como se describe mas adelante. Negado (Opc (Opcio iona nal) l) Una Una expr expres esió ión n bool boolea eana na que que deter etermi mina na si los los cara caract cter eres es de juego_caracteres definen el conjunto de caracteres de destino o se excluyen del conjunto de
caracteres de destino, como se describe mas adelante. Los valores para hacia_adelante son: (Predetermi (Predeterminado nado)) Selecciona Selecciona texto desde desde el punto punto de inserción inserción actual actual o desde desde el principio de la selección actual hacia delante, hacia el final del texto. False Selecciona texto desde el punto de inserción actual o el principio de la selección actual hacia atrás, hacia el principio del texto. True
Los valores para negado son: True Los caracteres incluidos en la selección son los que no aparecen en el argumento juego_caracteres. La selección se detiene en el primer carácter encontrado que aparece en el argumento juego_caracteres. False (Predeterminado) Los caracteres incluidos en la selección son los que aparecen en el argumento juego_caracteres. La selección se detiene en el primer carácter encontrado que no aparece en el argumento juego_caracteres.
El método Span se utiliza principalmente para seleccionar fácilmente una palabra o una frase en el control RichTextBox. RichTextBox. Si el método Span no encuentra los caracteres especificados basándose en los valores de los argumentos, el punto de inserción o la selección actual permanece sin cambios. El método Span no devuelve datos. METODO Upto
Mueve el punto de inserción hasta el primer carácter (sin incluirlo) que sea miembro del conjunto de caracteres especificado en un control RichTextBox. RichTextBox. Sintaxis
NombredelRTB. Upto ( juego_caracteres juego_caracteres, hacia_adelante, negado)
Donde : juego_caracteres (Requ (Requeri erido do)) Una Una expre expresió sión n de cade cadena na que que espe especific cifica a el conju conjunto nto de
caracteres que se va a buscar al mover el punto de inserción, basándose en el valor de negado. hacia_adelante (Opcional) Una expresión booleana que determina en qué sentido se mueve el punto de inserción, como se describe en Valores. negado (Opcio (Opcional nal)) Una Una expre expresió sión n boole boolean ana a que que deter determin mina a si los carac caracter teres es de juego_caracteres definen el conjunto de caracteres de destino o se excluyen del conjunto de
caracteres de destino, como se describe en Valores. Valores
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 20
Los valores de hacia_adelante son: True False
(Predeterminado) Mueve el punto de inserción hacia delante, delante, hacia el final f inal del texto. Mueve el punto de inserción hacia atrás, hacia el principio del texto.
Los valores para negado son: Los caracteres no especificados en el argumento juego_caracteres se utilizan para mover el e l punto de inserción. False (Predeterminado) Los caracteres especificados en el argumento juego_caracteres se utilizan para mover el punto de inserción. True
El Portapapeles y el RichTextBox Imagíne Imagínese se que que selec seleccio cionam namos os un texto texto en un RichT RichTextB extBox ox y ese ese texto texto lo metemo metemos s al portapapeles. Dado que el texto está escrito en RTF, ¿Como nos lo guarda el Portapapeles ? La solución es que puede guardarlo en las dos versiones. En formato de texto plano (Guarda estrictamente los caracteres ASCII del texto seleccionado) o como texto enriquecido (RTF), guardando en este caso, además del texto limpio y puro, la información del tipo de letra, tamaño, color, etc. típicas t ípicas del formato RTF. RTF. Para ello debemos indicarle al portapapeles en qué formato queremos guardarlo. La línea de código : Clipboard.SetText RTB1. SelRTF , vbCFRTF guarda en el portapapeles el texto seleccionado en ese momento, en formato RTF. La línea Clipboard.SetText RTB1.TextRTF, vbCFRTF guarda en el portapapeles todo el contenido del RichTextBox (llamado RTB1 en los ejemplos) en formato RTF Las líneas : Clipboard.SetText RTB1. SelRTF , vbCFText Clipboard.SetText RTB1.TextRTF, vbCFText guardarán, respectivamente, el texto seleccionado y todo el texto de RTB1, en formato de texto plano Pero Pero esta esta no es la única única forma forma de intro introdu ducir cir texto texto proc proced eden ente te del del Rich RichT TextB extBox ox en el portapapeles. portapapeles. Podemos introducir el texto seleccionado con formato RTF de la for ma : ClipBoard.SetText ClipBoard.SetText RTB1.SelRTF Y el te texto pl plano co con
Clipboard.SetText RT RTB1.SelText
Para introducir TODO el texto del RTB en formato fo rmato RTF Clipboard.SetText RTB1.TextRTF Para meter TODO el texto del RTB en texto plano Clipboard.SetText RTB1.Text APENDICE
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 21
Constantes del control RichTextBox
Constante
Valor
Descripción
Propiedad Appearance
rtfFlat rtfTh fThreeD
0 1
Uniforme. Pinta sin efectos visuales. (Predeterminado). 3D. Pinta con efectos tridimensionales.
Método Find
rtfWh rtfWhol oleW eWor ord d 2 rtfM rtfMat atch chCa Case se
4
rtfN rtfNoH oHig ighl hlig ight ht 8
Dete Determi rmina na si una una coi coinc ncid iden enci cia a se se ba basa en una una pal palab abra ra comp comple leta ta o en en parte de una palabra. Dete Determi rmina na si una una coin coinci cide denc ncia ia se basa basa en el uso de mayú mayúsc scul ulas as y minúsculas de la cadena especificada además del texto de la cadena. cadena. Dete Determi rmina na si una una coin coinci cide denc ncia ia apar aparec ece e resa resalt ltad ada a en en el el con contr trol ol RichTextBox.
Métodos LoadFile y SaveFile
rtfRTF
0
rtfText
1
(Predeterminado) RTF. El archivo cargado debe ser un archi vo vo .RTF válido (método LoadFile) o el contenido del control se guarda en un archivo .RTF (método SaveFile). Texto. El El co control Ri RichTextBox ca carga cualquier archivo de de texto (método LoadFile) o el contenido del control se guarda en un archivo de texto (método SaveFile).
Propiedad MousePointer
rtfDefault rtfArrow1 rtfCross rtfIbeam rtfIcon r t f Si ze rtfS rtfSiz izeN eNES ESW W
0 (Predeterminado) La form forma a está determin minada por el objeto. Flecha. 2 Cruz (cursor en forma de cruz). 3 Cursor en forma de I. 4 Icono (cuadrado pequeño dentro de un cuadrado). 5 Tamaño (flecha de cuatro puntas que señala al no norte, su sur, es este y oeste) 6 Tamañ amaño o NE-S NE-SO O (fle (flech cha a de dos dos punt puntas as que señal eñala a al norde ordest ste e y al sudoeste). rtfSi fSizeNS 7 Tamaño N S (fle flecha de dos puntas que señala al norte y al sur). rtfSizeNWS E 8 Tamaño NO, SE. rtfS rtfSiz ize eEW 9 Tamaño EO (fl (flecha de dos puntas que señala al este y al oeste). rtfUpArrow 10 Flecha hacia arriba. rtfHourglass 11 Reloj de de arena (espere). rtfNoDrop 12 No colocar. rtfArrowHourglass 13 Flecha y reloj de arena. rtfArrowQuestion 14 Flecha y signo de interrogación. rtfSizeAll 15 Ajustar todo. rtfC rtfCu ustom stom 99 Ico Icono perso rsonaliz aliza ado especif ecific ica ado por la propi ropie edad MouseIco Icon. Propiedad Selalignment
rtfLeft
0
rtfRight rtfCenter
1 2
(Predeterminado) Izquierda. El párrafo se alinea a lo largo del margen izquierdo. Derecha. El El párrafo se alinea a lo largo del ma margen derecho. Centro. El El pá párrafo se se centra tra en entre los los má márgenes iz izquierdo y derecho.
Propiedad Scrollbars
rtfNone rtfHorizontal rtfVertical rtfBoth
0 1 2 3
(Predeterminado) Ninguna. Sólo ba barra de desplazamiento ho horizontal. Sólo ba barra de desplazamiento ve vertical. Barras de desplazamiento horizontal y vertical.
El FORMATO RTF
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 22
Cuando se edita un texto mediante un procesador de textos, el fichero resultante se guarda don un formato distinto para cada procesador. De esta forma, un texto editado en WP no es compatible con el P.T. AmiPro, con Word o con cualquier otro. Los fabricantes de estos procesadores procesadores de textos han tenido que incluir una herramienta capaz de convertir un formato a otro para poder alcanzar alcanzar la compatibilidad compatibil idad entre ellos que el mercado exigía. El Formato de Texto Enriquecido pretende ser un nexo de unión entre todos los procesadores de texto, para poder intercambiar ficheros editados en uno u otro. De hecho, las últimas versiones de los mas importantes procesadores de textos incluyen la posibilidad de guardar y buscar el texto en este formato. (WP, ( WP, Word) Este formato consiste en guardar mediante caracteres ASCII plenamente legibles tanto el texto escrito como los tipos de letra, tamaño, saltos de carro, etc. Veamos un ejemplo comparativo del mismo texto escrito en Word, guardado en RTF y en ASCII ASCII : Texto1 Este texto está escrito en Word. Observe que podemos poner letra negrita, letra cursiva, letra subrayada. Podemos cambiar el color de las letras, rojo rojo,, verde verde,, azul azul.. Podemos cambiar el tamaño de las letras a tamaño mas grande , mas pequeño, etc. Fin Texto 1 El mismo texto en ASCII puro : Texto1 Este texto est escrito en Word. Observe Observe que podemos podemos poner poner letra negrita, letra cursiva, letra subrayada. Podemos cambiar el color de las letras, rojo, verde, azul. Podemos cambiar el tamaño de las letras a tamaño mas grande, mas pequeño, etc. Fin Texto 1 Y ahora el mismo texto en formato RTF. En este formato hubo que seccionar las líneas para pode poderr mostra mostrarla rlas s en una hoja, hoja, ya que que RTF RTF utiliza utiliza línea líneas s sin retorno retornos s de carro. Se han han seccionado las líneas terminándolas con un guión bajo y comenzando en la línea siguiente también con un guión bajo. {\rtf1\ansi \deff5\deflang103 \deff5\def lang1033{\fonttbl{\f5\fswiss\fcharset0\fprq2 3{\fonttbl{\f5\fswiss\fcharset0\fprq2 Arial;}}_ _{\colortbl;\red0\green0\blue0;\red0\gre _{\colortbl;\red0\green 0\blue0;\red0\green0\blue2 en0\blue255;\red0\gree 55;\red0\green255\blue n255\blue255;_ 255;_ _\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0; \red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\_ _green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\_ blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue_ _192;}{\stylesheet{\widctlpar \f5\fs20\lang1034 \snext0 Normal;}{\*\cs10 \additive Default Paragraph Font;}_ _}{\info{\author LUIS SUAREZ BERNALDO}{\operator LUIS SUAREZ BERNALDO}_ _{\creatim\yr1997\mo3\dy9\hr11\min8}{\revtim _{\creatim\yr1997\mo3\dy9\hr1 1\min8}{\revtim\yr1997\mo3\dy9\h \yr1997\mo3\dy9\hr11 r11\min9}_ \min9}_ _{\version1}{\edmins1}{\nofpages1} {\nofwords38}{\nofchars22 {\nofwords38}{\nofchars220}{\*\company 0}{\*\company }{\vern57431}}\margl1701\margr1701 }{\vern57431}}\margl1701\margr1701\_ \_ _ margt1417\margb1417 margt1417\margb1417 \deftab708\widowctrl\ftnbj\aenddoc\hyphho \deftab708\widowctrl\ftnbj\aenddoc\hyphhotz425\formshade_ tz425\formshade_ _ \fet0\sectd \ fet0\sectd \l inex0\headery709\footery709\colsx70 inex0\headery709\footery709\colsx709\endnh 9\endnhere ere {\*\pnseclvl1 \pnucrm\pnstart1\pnindent720\p \pnucrm\pnstart1\pnindent720\pnhang{ nhang{\pntxta \pntxta .}}{\*\pnseclvl2\pnucltr\pnstar_ _ t1\pnindent720\pnh t1\pnindent720\pnhang{\pn ang{\pntxta txta .}}{\*\pnseclvl3\pndec\pnstart1\pninden .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\_ t720\_ _pnhang{\pntxta _pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent7 .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnha 20\pnhang{\pntxta ng{\pntxta )}}{\*\pnseclvl5 \pndec\pnstart1\pninden \pndec\pnstart1\pnindent720\pnha t720\pnhang{\pntxtb ng{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcl_ _tr\pnstart1\pnindent720\pn _tr\pnstart1\pnindent720\pnhang{\pn hang{\pntxtb txtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\_ _pnstart1\pnindent72 _pnstart1\pnindent720\pnhan 0\pnhang{\pntxtb g{\pntxtb (}{\pntxta )}}{\*\pnseclvl )}}{\*\pnseclvl8\pnlcltr\pn_ 8\pnlcltr\pn_ _start1\pnindent720\pnhang
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 23
{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pninden )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnha t720\pnhang{_ ng{_ _\pntxtb (}{\pntxta )}}\pard\plain \qj\widctlpar \f5\fs20\lang1034 \ f5\fs20\lang1034 Texto1 Texto1 \par \par Este texto est\'e1 escrito en Word. Observe que podemos podemos poner letra _ _{\b negrita}, letra {\i cursiva}, letra {\ul subrayada}. subrayada}. Podemos cambiar_ _ el color de las letras, {\cf6 rojo}, {\cf4 verde}, {\cf2 azul}. Podemos _ _cambiar el tama\'f1o de las letras let ras a { \fs24 tama\'f1o mas grande}, {\fs16 mas peque\'f1o}, etc. \par \par \par Fin Texto 1 \par \pard \widctlpar \par } Como puede observar, el RTF incluye el texto escrito casi en ASCII, pero añadiendo una serie de datos respecto respecto al tipo de letra, codif ica los acentos, las eñes, y hasta incluye, tomándolo to mándolo del ordenador, el nombre del operador que lo ha escrito. Estas informaciones también se guardan cuando se archiva un texto en el formato propio del procesador de textos, pero lo hace en binario, por lo que no lo podemos visualizar. El formato RTF, dentro de que mete toda esa información adicional, lo archiva con caracteres ASCII. MUY IMPORTA IMPOR TANTE NTE
Observe que el fichero .RTF comienza por {\rtf Cuando tenga que importar un texto hacia un u n RichTextBox, RichTextBox, puede que ese texto esté en formato f ormato RTF RTF o como com o Texto Texto Plano (Fichero (Fichero ASCII ASCII puro) Para Para saber si el texto está en RTF RTF analice los Cinco primeros caractere caracteres s del texto texto a importar. importar. Si son {\rtf es que está en presencia de un texto RTF.
Para saber si un fichero contiene texto enriquecido, basta con abrirlo como un fichero secuencial, (recuerde que un fichero .RTF tiene solamente caracteres ASCII) y leer los cinco primeros caracteres.
Ejercicio Propuesto. Conlos conocimientos de los Documentos de Interfaces Mult Multip iple les, s, y los los del del Rich RichT TextB extBox ox que que ha adqu adquir irid ido o en este este capí capítu tulo lo,, y los los conocimientos del menú y los ficheros que ya tiene de los capítulos anteriores, ya está en condiciones de realizar un editor de textos, casi tan bueno como el Word. Debe ponerle las funciones típicas de cortar, copiar y pegar, documento nuevo, cerrar, guardar, guardar como, y cada vez que cierra un documento debe saber si ha habido cambios para proponer que se g uarden.
LSB
Visual Basic
-
Guía del estudiante
Capítulo 9
Página 24