Mostrando resultados del 1 al 7 de 7

Tema: Controles y clases en Visual Basic, programaci髇

  1. #1
    root
    Guest

    Predeterminado Controles y clases en Visual Basic, programaci髇

    Propiedades, m閠odos, Funciones y Eventos


    Cu醤do nace la programaci髇 orientada a objetos una de los principios m醩 importantes era la reutilizaci髇 de c骴igo, es decir, codificando una sola vez, podr韆mos usar ese control en cualquiera de nuestros proyectos sin volver a codificarlos, IMPRESIONANTE NO!!!, pero los controles tienen 4 caracter韘ticas importantes que son: PROPIEDADES, METODOS, FUNCIONES y EVENTOS, las propiedades son como las partes que constituyen al objeto, (Como por ejemplo, una persona se podr韆 decir que presenta propiedades como sus: ojos, oreja, labios, pies, color, etc), estas propiedades constituyen al control ya que ellas presentan valores, que le dan forma al mismo control, que quiero decir, si seguimos con el ejemplo de la persona las propiedades mencionadas tienen valores cuando nosotros nacemos (por ejemplo Ojos = Verdes, Orejas = Grandes, PIES = Planos, etc), como pueden ver estos valores no dan a nosotros nuestra forma, igual es con un control los valores de las propiedades son la que definen su forma.

    Otra ventaja de la programaci髇 orientada a objetos es lo que se llama ENCAPSULACION, esto significa que podemos tener un control 50 veces en un formulario, y si le cambiamos una propiedad a un control solamente se cambia en 閘 y no en los 49 controles restantes, es decir, cada control mantiene encapsulado sus propiedades, con este ejemplo se entender mejor:

    Cuando nos referimos a una propiedad de un control tenemos que colocar su nombre y el nombre de la propiedad, ejemplo:

    Nombre_de_Control.Propiedad = Valor

    Si continuamos con el ejemplo de una persona ser韆 algo parecido:

    Maria.Ojos = Casta駉s

    En un programa de Visual Basic seria de la siguiente manera:

    Text1.text = "HOLA"

    Donde Text1 es un control TEXTBOX, Text es una propiedad del control TEXTBOX, y "HOLA" es una cadena String que se le pasa a la propiedad (Text) de Text1 (CONTROL).

    Perfecto, entonces un ejemplo de Encapsulaci髇 seria el siguiente supongamos que tenemos 2 TEXTBOX en un formulario Text1 y Text2 si hacemos lo siguiente:

    Text1.text = "HOLA MUNDO"

    Este texto nada mas es para el Text1, no se modifica la propiedad "Text" del Text2 (ESO ES ENCAPSULAMIENTO)

    Ahora, ya entendido de lo que son las propiedades vamos a ver los m閠odos y Funciones, los m閠odos y las funciones son muy similares la diferencia radica en que los m閠odos (NO RETORNAN VALOR), y las funciones (SIEMPRE RETORNAN UN SOLO VALOR). Ejemplo en c骴igo de visual basic es:

    M閠odo:

    Sub Nombre_del_Metodo (Par醡etros_Requeridos)

    .

    .

    .

    .

    .

    .

    (l韓eas de c骴igo)

    End sub

    Funciones:

    Function Nombre_de_la_Funcion (Par醡etros_Requeridos) as Valor_a_devolver

    .

    .

    .

    .

    .

    .

    (l韓eas de c骴igo)

    Nombre_de_la_funcion = Valor

    End function

    Como ya supongo que ustedes saben ya de esto, ahora vamos a explicar los Eventos, los eventos son aquellas reacciones de un control sobre algo que sucede a su alrededor, es decir, cuando se pulsa una tecla en un control se produce un evento que se llama Keypress, nosotros podemos ah codificar como va reaccionar el control cuando se presione una determinada tecla, los eventos son muchos (MOUSEDOWN, MOUESUP, GETFOCUS, etc) dependiendo del tipo de control, cuando nosotros creamos un control podemos utilizar eventos ya creados o crear nuestros propios eventos.

  2. #2
    root
    Guest

    Predeterminado Re:Controles y clases en Visual Basic, programaci髇

    Creaci髇 de un control


    Ahora vamos a lo que en realidad queremos, CREAR UN CONTROL, antes de crearlo un control tiene un ciclo de vida el cual se compone de la siguiente manera:

    Al nacer: Initialize, InitProperties, ReadProperties, Resize.

    Al morir: WriteProperties, Terminate.

    Ahora, que es todo eso que escribir arriba, bueno esos son eventos de un control cuando se esta dise馻ndo (OJO: estos eventos nada mas se ven cuando se dise馻 el control, no cuando usamos el control en algunos de nuestros proyectos), lo que quiero decir que para que un control funcione adecuadamente hay que a馻dir unas l韓eas de c骴igo en estos eventos para el buen funcionamiento del mismo, no se preocupen que eso le vemos mas adelante.

    Vamos a dise馻r un TEXTBOX pero especial, ahora que tiene de especial, bueno lo especial es que este TEXTBOX_ESPECIAL, lo vamos a dise馻r para que acepte los caracteres del teclado que nosotros queremos que acepte, es decir, si han usado un TEXTBOX normal ver醤 que si quieren que el TEXBOX solamente acepte n鷐eros tienen que codificar las restricciones en cada TEXTBOX, con este TEXTBOX_ESPECIAL las restricciones solamente las codificamos una sola vez para TODOS LOS PROGRAMAS que vayamos a dise馻r.

  3. #3
    root
    Guest

    Predeterminado Re:Controles y clases en Visual Basic, programaci髇

    Creaci髇 de las propiedades del control textbox especial

    Ahora vamos adaptar algunas de las propiedades mas importantes o la que mas utilizamos del TEXTBOX (OJO: no es obligatoria colocar todas), en nuestro control nada mas habilitaremos o mostraremos las propiedades: FONT, FORECOLOR, BACKCOLOR, TEXT, ALINEACI覰, ENABLED, LOCKED, MAXLENGHT y PASSWORDCHAR, para hacer esto introduzca en la ventana de c骴igo del control lo siguiente:

    Public Property Get Font() As Font

    Set Font = text1.Font

    End Property

    Public Property Get ForeColor() As OLE_COLOR

    ForeColor = text1.ForeColor

    End Property

    Public Property Get BackColor() As OLE_COLOR

    BackColor = text1.BackColor

    End Property

    Public Property Get Text() As String

    Text = text1.Text

    End Property

    Public Property Get Enabled() As Boolean

    Enabled = text1.Enabled

    End Property

    Public Property Get Locked() As Boolean

    Locked = text1.Locked

    End Property

    Public Property Get MaxLenght() As Integer

    MaxLenght = text1.MaxLength

    End Property

    Public Property Get PasswordChar() As String

    PasswordChar = text1.PasswordChar

    End Property

    Public Property Set Font(ByVal NuevoValor As Font)

    Set text1.Font = NuevoValor

    PropertyChanged "Font"

    End Property

    Public Property Let ForeColor(ByVal NuevoValor As OLE_COLOR)

    text1.ForeColor() = NuevoValor

    PropertyChanged "ForeColor"

    End Property

    Public Property Let BackColor(ByVal NuevoValor As OLE_COLOR)

    text1.BackColor() = NuevoValor

    PropertyChanged "BackColor"

    End Property

    Public Property Let Text(ByVal NuevoValor As String)

    text1.Text = NuevoValor

    PropertyChanged "Text"

    End Property

    Public Property Let Enabled(ByVal NuevoValor As Boolean)

    text1.Enabled = NuevoValor

    PropertyChanged "Enabled"

    End Property

    Public Property Let Locked(ByVal NuevoValor As Boolean)

    text1.Locked = NuevoValor

    PropertyChanged "Locked"

    End Property

    Public Property Let MaxLenght(ByVal NuevoValor As Integer)

    text1.MaxLength = NuevoValor

    PropertyChanged "MaxLenght"

    End Property

    Public Property Let PasswordChar(ByVal NuevoValor As String)

    text1.PasswordChar = NuevoValor

    PropertyChanged "PasswordChar"

    End Property

    NOTA: le recomendar韆 que guardaran el proyecto no vaya ser que se vaya la luz y perdamos todo el tiempo invertido (NO QUEREMOS ESO)

    Se deben de estar preguntando ("QUE ES TODO ESTO"), bueno empecemos la explicaci髇:

    Cuando se crean propiedades, se deben de utilizar lo siguiente:

    Property Let

    Property Get

    Property Let se ejecutara cada vez que nosotros cambiamos alguna de las propiedades del control en el formulario del proyecto ya sea a nivel de dise駉 o de c骴igo.

    Property Get se ejecutara cada vez que solicitemos alguna informaci髇 de nuestras propiedades por ejemplo que una variable quiera tomar una propiedad:

    Nombre_Variable = TEXTBOX_ESPECIAL.Text

    Por ejemplo voy a explicar una propiedad y la explicaci髇 es lo mismo para todas las propiedades:

    Public Property Get Text() As String

    Text = text1.Text

    End Property

    Public Property Let Text(ByVal NuevoValor As String)

    text1.Text = NuevoValor

    PropertyChanged "Text"

    End Property

    En Property Get lo que hacemos es que cuando solicitamos informaci髇 del texto que esta introducido en el TEXTBOX_ESPECIAL hacemos Text que es nuestra propiedad igual a Text1.Text, siendo text1 el control que nosotros colocamos en nuestro control.

    Por ejemplo:

    Variable = TEXTBOX_ESPECIAL.text

    Cuando hacemos esto, sin darnos cuenta nuestro control invoca Property get de la propiedad Text y tomamos el valor el cual seria Text = text1.Text , y ese valor se le asigna a la variable que lo invoco en este caso "Variable"

    En Property Let lo que hacemos es que cuando le asignamos un nuevo valor a nuestra propiedad Text (OJO "NUESTRA PROPIEDAD"), ejemplo:

    TEXTBOX_ESPECIAL.text = "HOLA"

    Sin darnos cuenta se ejecuta el c骴igo que adentro se encuentre, en este caso le asignamos al Text1.text = NuevoValor siendo "nuevoValor" el texto que aparecer en el control. El ByVal se debe a que el valor se pasa por copia y no por Referencia, l閍nse la ayuda sobre m閠odos y Funciones.

    Cuando dije (OJO "NUESTRA PROPIEDAD") quise decir, que nosotros pudimos haber llamado esa propiedad como nosotros queramos, es decir, que en ves de llamarlo Text, lo pudi閟emos haber llamado "TEXTO", "CADENA", "PEPE", "PEPITO", como nosotros queramos, lo que sucede que para no confundir a los usuarios que usen el control, respeto ya el est醤dar del Textbox existente. Recuerden no estamos creando desde cero un TEXTBOX, lo que estamos haciendo es un control que posee un control TEXTBOX com鷑 y silvestre, pero que se adaptara a nuestra exigencias (En este caso lo que mencione al principio, un Textbox_Especial que acepte los caracteres del teclado que nosotros queramos, ya que el Textbox normal no lo hace de manera autom醫ica)

    Si ahora insertan nuestro control en el formulario con esta modificaciones van a notar en la ventana propiedades que ahora aparecen MAS PROPIEDADES QUE ANTES, y que se pueden modificar "MAGNIFICO NO!!!!" poco a poco aprendemos mas. Anda cambia la propiedad Text de nuestro control a nivel de dise駉 para que vea como cambia en el formulario.

    Ahora vamos a aprender algo m醩, para empezar inserten un control TEXTBOX com鷑 y corriente (ES DECIR EL DE VISUAL BASIC) en el formulario donde estamos trabajando, y en la ventana propiedades denle Click a la propiedad "Alignment", ver醤 que se habilita un bot髇 con una flecha hacia abajo y si le dan click le mostrara una lista de las opciones posibles; a lo que quiero llegar es que ustedes se deben de estar preguntando "COMO SE HACE ESO?" , bueno es f醕il primero en la secci髇 de "Declaraciones", en la ventana de c骴igo (de nuestro control), insertaremos la declaraci髇 de la siguiente variable:

    Enum Tipo_Alineacion

    Izquierda = 0

    Derecha = 1

    Centro = 2

    End Enum

    Ahora vamos a crear la propiedad de la manera siguiente:

    Public Property Get Alineacion() As Tipo_Alineacion

    Alineacion = Text1.Alignment

    End Property

    Public Property Let Alineacion(ByVal NuevoValor As Tipo_Alineacion)

    Text1.Alignment = NuevoValor

    PropertyChanged "Alineacion"

    End Property

    Si ahora insertan nuestro control con las modificaciones hechas, en el formulario podr醤 notar que a馻di una nueva propiedad que se llama "ALINEACION", y si le dan click ver醤 el bot髇 de al lado con la flecha hacia abajo, y si dan click al bot髇 ver醤 una lista con las opciones disponibles "INCRE虰LE NO!!!", siempre cuando ustedes desean mostrar una lista en alguna de las propiedades usen la declaraci髇 ENUM (VEASE EN LA AYUDA las variables de tipo ENUM).

    Algo que se me ha olvidado explicar es el PropertyChanged, esto se tiene que escribir cuando una propiedad cambia su estado

    Abran notado que todav韆 no hemos ejecutado el proyecto, es decir solamente hemos visto nuestro control a nivel de dise駉 y no a nivel de ejecuci髇, bueno ahora vamos a ejecutarlo, pero primero cambien el color de nuestro control, al color que ustedes quieran, y en la alineaci髇 coloquen la opci髇 de "CENTRO", muy bien para ejecutar el proyecto primero debemos de hacer los siguientes paso dele click a "PROYECTO" en el men, luego a "Propiedades del Proyecto1", en el cuadro de "TIPO DE PROYECTO", seleccionen "Exe est醤dar" y en "OBJETO INICIAL", seleccionen Form1 y luego le dan aceptar.

    Bueno, debemos de tener un control con un fondo que ustedes hayan elegido, con el texto Centrado, ahora ejecuten el proyecto......................................, podr醤 haber notado que tanto el fondo como la alineaci髇 no esta como nosotros la colocamos en el dise駉, es decir, estamos viendo un fondo blanco, con la alineaci髇 a la izquierda, bueno esto en realidad fue intencional, por que todav韆 nos falta echar unas pocas l韓eas de c骴igo para que funcione.

    Cierren el programa en ejecuci髇, y metanse en el c骴igo de nuestro control y a馻dan las siguientes l韓eas:

    Private Sub UserControl_WriteProperties(PropBag As PropertyBag)

    On Error Resume Next

    Call PropBag.WriteProperty("BackColor", Text1.BackColor, &H80000005)

    Call PropBag.WriteProperty("Font", Font, Ambient.Font)

    Call PropBag.WriteProperty("ForeColor", Text1.ForeColor, &H80000008)

    Call PropBag.WriteProperty("Alineacion", Text1.Alignment, 0)

    Call PropBag.WriteProperty("Enabled", Text1.Enabled, True)

    Call PropBag.WriteProperty("Locked", Text1.Locked, False)

    Call PropBag.WriteProperty("MaxLenght", Text1.MaxLength, "")

    Call PropBag.WriteProperty("PasswordChar", Text1.PasswordChar, "")

    Call PropBag.WriteProperty("Text", Text1.Text, "")

    End Sub

    Private Sub UserControl_ReadProperties(PropBag As PropertyBag)

    On Error Resume Next

    Set Font = PropBag.ReadProperty("Font", Ambient.Font)

    Text1.ForeColor = PropBag.ReadProperty("ForeColor", &H80000008)

    Text1.BackColor = PropBag.ReadProperty("BackColor", &H80000005)

    Text1.Alignment = PropBag.ReadProperty("Alineacion", 0)

    Text1.Enabled = PropBag.ReadProperty("Enabled", True)

    Text1.Locked = PropBag.ReadProperty("Locked", False)

    Text1.MaxLength = PropBag.ReadProperty("MaxLenght", "")

    Text1.PasswordChar = PropBag.ReadProperty("PasswordChar", "")

    Text1.Text = PropBag.ReadProperty("Text", "")

    End Sub

    En estos momentos si ustedes estaban confundidos, o le costaba entender el c髆o se hace un control, deben de estar peor al ver este poco de l韓eas que seguro ni entienden por que la escribieron; bueno para empezar con estos dos m閠odos se deben de "MECANIZAR" que quiero decir con esto, todo control cualquiera fuera su tipo siempre va a tener estos dos Eventos, y se usan igual para todos los controles que ustedes dise馿n.

    WriteProperties: en este m閠odo o evento declaramos l韓eas como esta

    Call PropBag.WriteProperty("BackColor", Text1.BackColor, &H80000005)

    Donde:


    "BackColor" : es el nombre de la propiedad.


    "Text1.BackColor", es el nombre de la propiedad original.


    "&H80000005", es el valor inicial de esta propiedad o el valor por DEFECTO. (&H80000005 es equivalente en Hexadecimal al color blanco"

    Siempre y esto que quede claro cuando ustedes crean una propiedad tienen que meterla en WritePropery, no se preocupen por entender "Call PropBag.WriteProperty", esto no importa lo que si es importa es que sepan que tienen que poner como primer valor el nombre de la propiedad, luego el nombre de la propiedad original, y por ultimo el valor por defecto.

    ReadProperty: en este m閠odo o evento declaramos l韓eas como esta:

    Text1.BackColor = PropBag.ReadProperty("BackColor", &H80000005)

    Donde:


    "BackColor" es el nombre de la propiedad de nuestro control.


    Y &H80000005 es el valor por defecto Noten que estamos haciendo Text1.BackColor (nombre de la propiedad del Texbox que estamos usando en nuestro control) = PropBag.ReadProperty("BackColor", &H80000005)

    Al igual que WriteProperty, no se preocupen de buscar el "POR QUE HACEMOS ESTO", lo que importa es que cuando a馻dan una nueva propiedad en Readproperty tienes que poner el nombre de la propiedad a utilizar (En este caso Text1.BackColor) igual a Propbag.ReadProperty(Nombre_de_la propiedad_nuestra, valor original o por defecto).

    Esta parte reconozco que es un poco complicada de entender, por eso mencione que para estos dos m閠odos MECAN虲ENSE, no lo busquen el por que, tan sencillamente h醙anlo de esa manera, si desean averiguar sobre estos Eventos (Vean en la ayuda de MSDN de Microsoft)

    Ahora, vamos al formulario del proyecto, quiten el control viejo y vuelvan a insertar nuestro control con los nuevos cambios, ver醤 que tanto f韘icamente como en las propiedades no ha cambiado, pero ahora, c醡bienle el color y la alineaci髇 p髇gala centrada y ejecuten............................... habr醤 notado que ya el color y la alineaci髇 se mantienen UE BUENO!, pera que vean lo poderosas con son esas instrucciones.

  4. #4
    root
    Guest

    Predeterminado Re:Controles y clases en Visual Basic, programaci髇

    Creaci髇 de los eventos


    Ya pasamos lo mas dif韈il que era la declaraci髇 de propiedades, ahora viene lo mas f醕il, si ustedes se meten en el c骴igo del formulario e intentan ver los eventos del TEXTBOX_ESPECIAL, ver醤 que no ven todos lo eventos, sino unos pocos; ahora nuestra misi髇 es hacer que se vean los eventos que nosotros usamos en un TEXBOX.

    Para eso inserten las siguientes l韓eas de c骴igo en la declaraci髇 de variables (DE NUESTRO CONTROL):

    Public Event Changed()

    Public Event MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

    Public Event MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

    Public Event MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

    Public Event Keypress(KeyAscii As Integer)

    Public Event KeyDown(KeyCode As Integer, Shift As Integer)

    Public Event KeyUP(KeyCode As Integer, Shift As Integer)

    Public Event Click()

    Public Event DbClick()

    NOTA: ustedes pueden a馻dir mas eventos, yo solamente a馻d los mas usados.

    Ahora, lo que acabamos de hacer es declarar los eventos, ero como lo invocamos!, bueno lo que hacemos es que en cada evento del TEXBOX que tenemos un nuestro control, a馻dimos lo siguiente:

    RaiseEvent Nombre_del_Evento

    Por ejemplo en el Evento KeyPress de Text1 (Este TextBox es el que esta adentro de nuestro control) a馻dimos lo siguiente:

    Private Sub Text1_KeyPress(KeyAscii As Integer)

    RaiseEvent Keypress(KeyAscii)

    End Sub

    En keyup:

    Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)

    RaiseEvent KeyUP(KeyCode, Shift)

    End Sub

    En MouseMove:

    Private Sub Text1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

    RaiseEvent MouseMove(Button, Shift, X, Y)

    End Sub

    Y as sucesivamente...... (H醙anlo en todos los eventos que declare arriba)

    Con esto nuestro control tiene algunos de los eventos del TEXTBOX original y su misma funcionalidad.

    NOTA: todos los eventos que invocan con RaiseEvent deben de estar declarados previamente.

    Vieron que era mas simple, ahora vayamos al formulario de nuestro proyecto, quitemos el control viejo e insertemos un nuevo control con las modificaciones hechas, ahora si se meten en el c骴igo del formulario y seleccionan a nuestro control, y verifican los eventos notaran que aparecen los eventos que ya ven韆n por defecto y los que nosotros a馻dimos, cada vez hacemos un control mas REAL.

    Bueno ya tenemos un control DECENTE, pero ustedes se estar醤 preguntando que carrizo estoy haciendo, este control es igualito al TEXTBOX normal, y peor por que tiene menos propiedades y eventos que el original, HAAAAA!!!! lo que sucede es que ahora es que vamos a codificar lo bueno.

  5. #5
    root
    Guest

    Predeterminado Re:Controles y clases en Visual Basic, programaci髇

    Creaci髇 de las propiedades y funciones personalizadas


    Muy bien, el objetivo de este control es que el usuario elija que quiere que el TEXTBOX_ESPECIAL acepte al escribir sobre 閘, (por ejemplo NUMEROS, LETRAS, FECHA, etc), bueno pera eso tenemos que declarar otra variable ENUM en la ventana de c骴igo del control en la parte de declaraciones y una variables:

    Enum Tipo_Text

    Texto = 0

    Letras = 1

    Num閞ico = 2

    Fecha = 3

    Monetario = 4

    May鷖culas = 5

    Custom = 6

    End Enum

    Dim mTipo As Integer

    Y a馻dimos otro propiedad la cual se va a llamar "TIPO":

    Public Property Get Tipo() As Tipo_Text

    Tipo = mTipo

    End Property

    Public Property Let Tipo(ByVal NuevoValor As Tipo_Text)

    mTipo = NuevoValor

    PropertyChanged "Tipo"

    End Property

    Ahora, por que uso una variable "mTipo", si en las otras propiedades uso Text1.propiedad = "valor", bueno por la simple raz髇 que el TEXBOX original no tiene esta propiedad, aqu es donde esta el poder del dise駉 de controles, estamos utilizando un control que ya existe (TEXTBOX) pero adapt醤dolo a nuestras exigencias, uso una variable "mTipo", por que esta es una propiedad exclusiva de nuestro control, y no existe en el TEXTBOX original.

    No se les olvide colocar en:

    WriteProperty:

    Call PropBag.WriteProperty("Tipo", mTipo, Tipo_Text.Texto)

    Dense cuenta que como segundo par醡etro esta mTipo, por lo que dije, esta es una propiedad exclusiva de nosotros y no del TextBox.

    ReadProperty:

    mTipo = PropBag.ReadProperty("Tipo", Tipo_Text.Texto)

    Donde el valor por defecto, es Tipo_Text.Texto, (Por esta raz髇 cuando ustedes insertan un control, en la propiedad "Tipo" van a haber que se encuentra ubicado en la opci髇 0.- Texto)

    Muy bien, ahora vamos al formulario quitemos nuestro control viejo, y coloquemos el nuevo, vera que en las propiedades esta "Tipo", ah le aparecer una lista desplegadle, en la cual usted se馻lara que quieres que acepte el TEXTBOX_ESPECIAL, si quiere que sea numero, texto, etc. Seleccione Numero, y ejecute el proyecto, e intente escribir, notara que puede escribir cualquier cosa ERO HOMBRE ESO ES OBVIO TODAV虯 NO HEMOS HECHO EL CODIGO DE LAS RESTRICCIONES!, sal del programa en ejecuci髇, y metete en el c骴igo de nuestro control y a馻de las siguientes Funciones:

    Public Function Numeros (Tecla As Integer) As Integer

    Dim strValido As String

    strValido = "0123456789"

    If Tecla > 26 Then

    If InStr(strValido, Chr(Tecla)) = 0 Then

    Tecla = 0

    End If

    End If

    Numeros = Tecla

    End Function

    Public Function VLetras(Tecla As Integer) As Integer

    Dim strValido As String

    strValido = "qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPASDFGHJKLZXCV BNM,.*-}'!%&/()=?*[;:_"

    If Tecla > 26 Then

    If InStr(strValido, Chr(Tecla)) = 0 Then

    Tecla = 0

    End If

    End If

    VLetras = Tecla

    End Function

    Public Function VFecha(Tecla As Integer) As Integer

    Dim strValido As String

    strValido = "0123456789/"

    If Tecla > 26 Then

    If InStr(strValido, Chr(Tecla)) = 0 Then

    Tecla = 0

    End If

    End If

    VFecha = Tecla

    End Function

    Public Function VDinero(Tecla As Integer) As Integer

    Dim strValido As String

    strValido = "0123456789,-"

    If Tecla > 26 Then

    If InStr(strValido, Chr(Tecla)) = 0 Then

    Tecla = 0

    End If

    End If

    VDinero = Tecla

    End Function

    Public Function VCadenas_Mayusculas(Tecla As Integer) As Integer

    VCadenas_Mayusculas = Asc(UCase(Chr(Tecla)))

    End Function

    Public Function VPersonalizado(Tecla As Integer) As Integer

    Dim strValido As String

    strValido = mPersonalizado

    If Tecla > 26 Then

    If InStr(strValido, Chr(Tecla)) = 0 Then

    Tecla = 0

    End If

    End If

    VPersonalizado = Tecla

    End Function

    No voy a explicar cada una de las funciones tan sencillamente por que ustedes ya deben de poseer los conocimientos necesarios para entender este c骴igo, lo 鷑ico que dijo es que las funciones reciben el Car醕ter en ASCII, y verifican si se encuentra en el par醡etro que se acepta en este caso es la variable "strValido", la funci髇 retorna, el mismo c骴igo ASCII si es valido o retorna un 0 si no es valido..

    Ahora, como o en que parte se llaman las funciones, bueno cuando nosotros apretamos una tecla en nuestro control, se ejecuta el Evento KeyPress (del TextBox que esta en nuestro control), lo que tenemos que hacer es invocar la validaci髇 desde el evento, es decir, copie este c骴igo en el evento keyPress (del Text1 de nuestro control) , el cual quedar韆 de esta manera:

    Private Sub Text1_KeyPress(KeyAscii As Integer)

    Select Case mTipo

    Case 1

    KeyAscii = VLetras(KeyAscii)

    Case 2

    KeyAscii = Numeros(KeyAscii)

    Case 3

    KeyAscii = VFecha(KeyAscii)

    Case 4

    KeyAscii = VDinero(KeyAscii)

    Case 5

    KeyAscii = VCadenas_Mayusculas(KeyAscii)

    Case 6

    KeyAscii = VPersonalizado(KeyAscii)

    End Select

    RaiseEvent Keypress(KeyAscii)

    End Sub

    Vamonos al formulario y quitemos nuestro control viejo y a馻dimos uno nuevo, en la propiedad "Tipo", coloca num閞ico, y ejecuta el programa veras que si te colocas en nuestro control e intentas escribir no podr醩 escribir ninguna letra, car醕ter especial y nada sino solamente n鷐eros, AHHH ahora si se esta poniendo mejor la cosa, pero tenemos un defecto; salgan del programa en ejecuci髇 podr醤 ver que nosotros colocamos en tipo numero, pero si intentan cambiar el Text a nivel de dise駉 el le acepta cualquier tecla, es solamente a nivel de ejecuci髇 donde se valida la entrada, para solucionar esto hacemos lo siguiente:


    O le dejamos as, y quedara en ustedes programadores dise馻r una forma de restringir la entrada a nivel de dise駉


    O Hacer que esta propiedad funcione nada mas a nivel de ejecuci髇 y no de dise駉.

    Bueno, voy a explicar como hacer la opci髇 2, si quieren desarrollar la opci髇 1, quedara en su cuenta ya que tampoco voy a dar 10 paginas de puro c骴igo cuando lo que estamos explicando es como crear un control, mas no las mil y un funciones, que deber韆 de tener un control.

    Como lo opci髇 2 es una tonter韆, la voy a explicar ya que es importante saber como hacer que una propiedad trabaje nada mas a nivel de ejecuci髇, para esto a馻dan el siguiente c骴igo en Property Let de la propiedad Text de nuestro control:

    Public Property Let Text(ByVal NuevoValor As String)

    If Ambient.UserMode = False Then

    MsgBox "No se puede editar este control a nivel de dise駉", vbInformation + vbOKOnly, "TextBox Especial"

    Else

    Text1.Text = NuevoValor

    PropertyChanged "Text"

    End If

    End Property

    Puede notar que a馻dimos un par de l韓eas la primera e importante Ambient.UserMode esta es la propiedad que determina si el control se esta ejecutando a nivel de c骴igo o Dise駉, cuando inserten esto, AH, se me hab韆 olvidado, dele doble-click al control TEXBOX_ESPECIAL en la ventana de proyecto, cuando vean nuestro control aseg鷕ense que la propiedad Text, del Textbox que nosotros insertamos este en blanco, es decir, que no muestre nada; continuamos, cuando hayan insertado el c骴igo nuevo, v醳anse al formulario borren el viejo control, inserten uno nuevo e intenten cambiar la propiedad Text a nivel de dise駉 vera que cuando presione ENTER le aparecer un Msgbox, indic醤dole que no puede editar este control a nivel de dise駉.


    Bueno esto tiene su pro y sus contra; por ejemplo si nosotros tenemos una variable:

    Variable_T = "HOLA"

    Y en cualquier parte del c骴igo hacemos:

    TextBox_Especial1.text = Variable_T

    Y tenemos a la propiedad "Tipo" como Numero, ver醤 que acepta a la variable_T y mostrara "HOLA", pero bueno nada es perfecto, es decir, la validaci髇 nada mas se har cuando escribamos en el TEXTBOX_ESPECIAL, no cuando le asignemos otra variable como el ejemplo anterior. Bueno pero ese es un ejercicio para ustedes, recuerden con los controles se puede hacer lo que quiera.

    Ahora, si colocamos a tipo como numero (Sabemos que el TEXTBOX_ESPECIAL nada mas aceptara n鷐eros), Texto (aceptara todo tipo de letra), Monetario (Aceptara n鷐eros y una coma), si ponemos fecha (aceptara el / y los n鷐eros) pero en la fecha si podemos cometer errores, por ejemplo podemos escribir 33/99/3000, esta no es una fecha valida si queremos evitar codificar en el programa las validaciones, vamos hacer la validaci髇 en el control.

    Para realizar la validaci髇 vamos a insertar el c骴igo siguiente en el evento LostFocus del TEXTBOX (Text1) de nuestro control:

    Private Sub text1_LostFocus()

    If mTipo = 3 Then

    If Not IsDate(text1.Text) Then

    MsgBox "Esta Fecha no es Valida", vbInformation + vbOKOnly, "Text Box Especial"

    text1.Text = vbNullString

    text1.SetFocus

    End If

    End If

    End Sub

    Ahora, regresemos al formulario quiten el control viejo, inserta uno nuevo y en la propiedad "Tipo" selecciona fecha, ejecuta el programa, introduce una fecha incorrecta, y dale el Foco a otro control veras que te aparece un mensaje diciendo que la fecha no es valida. BUENO NO!!!!!!

    No se preocupen, que ya falta poco para terminar la parte de controles, vamos a introducir una sola propiedad MAS!, vamos a馻dan en el c骴igo del control lo siguiente:

    Dim mPersonalizado As String

    Public Property Let Personalizado(ByVal NuevoValor As String)

    mPersonalizado = NuevoValor

    PropertyChanged "Personalizado"

    End Property

    Public Property Get Personalizado() As String

    Personalizado = mPersonalizado

    End Property

    En ReadProperty:

    mPersonalizado = PropBag.ReadProperty("Personalizado", "")

    En WriteProperty:

    Call PropBag.WriteProperty("Personalizado", mPersonalizado, "")

    Esta propiedad lo que realiza es que cuando seleccionan en "Tipo", la opci髇 de CUSTOM, y colocan la letra A en la propiedad de personalizado, solamente la letra A se podr escribir en la ejecuci髇 del control......

  6. #6
    root
    Guest

    Predeterminado Re:Controles y clases en Visual Basic, programaci髇

    Finalizaci髇 de un Control

    Para ser este ultimo paso hagan lo siguiente:


    Dale Click al men en la parte de "PROYECTO", y ah le das click a Propiedades del Proyecto en "Tipo de Proyecto", selecciona "Control Activex", en "Objeto Inicial" selecciona ninguno, y en nombre del proyecto Escribe "TextBE", y le das click a Aceptar.


    Ahora le das click a Archivo en el men, y le selecciones "Generar Proyecto1.ocx...." ver醤 que le aparece un error (UHY COMO SUFRI PARA SOLUCIONAR ESE ERROR), que le dice "No se ha detectado ning鷑 control de usuario publico", para solucionar este error denle dobleclick al control en la Ventana de Proyecto, en la Ventana de propiedades, busquen la propiedad Public la cual deber韆 de estar en False, y la cambian a True.


    Ahora intenta generar el ocx haciendo lo que indica el paso 2, veras que ahora te aparece un formulario donde decidir醩 la ubicaci髇 de tu ocx, vamos a guardarlo en WINDOWS/SYSTEM y en nombre de archivo coloca TextBE.ocx, y le dan click a Aceptar.


    Si no da ning鷑 error, significa que todo sali perfecto, ahora se preguntaran como a馻dimos nuestro control a un proyecto, bueno en el men Archivo, denle click a "Quitar Proyecto", cuando tengan todo en blanco, a馻den un nuevo proyecto, que solamente tenga un formulario, vean en la ventana de controles que no aparece nuestro control. Para solucionar eso metanse en el men Proyecto y le dan click a la opci髇 de "Componentes......" y buscan por la letra T y ver醤 que aparecer en la lista TextBE lo seleccionan y luego Presionan el bot髇 Aceptar.


    Ver醤 que se a馻de un nuevo control, VAMOS PRUEBA EL CONTROL!!!!!!!!!.


    Para cambiar el icono que muestra el control, basta que cuando est閚 dise馻ndo el control en la Ventana Propiedades, busques la propiedad "ToolboxBitmap" y le asignes una imagen.

  7. #7
    root
    Guest

    Predeterminado Re:Controles y clases en Visual Basic, programaci髇

    Fuente:
    [SOLO LOS USUARIOS REGISTRADOS PUEDEN VER LOS ENLACES. ]

Temas Similares

  1. <<->> LIBROS - REVISTAS - EBOOKs <<->>
    By Fashion in forum Carbide C/C#/C++
    Respuestas: 11
    脷ltimo mensaje: 16-sep-2013, 20:45
  2. visual basic access y sql dudas驴?
    By linux2 in forum Visual Basic y Net
    Respuestas: 5
    脷ltimo mensaje: 24-sep-2010, 18:28
  3. <<->> HERRAMIENTAS - ACCESORIOs <<->>
    By Fashion in forum Visual Basic y Net
    Respuestas: 5
    脷ltimo mensaje: 16-nov-2009, 03:54
  4. <<->> NORMAS PARA VISUAL BASIC y NET <<->>
    By Fashion in forum Visual Basic y Net
    Respuestas: 0
    脷ltimo mensaje: 12-jul-2009, 06:46

Normas de Publicaci贸n

  • No puedes crear nuevos temas
  • No puedes responder mensajes
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •