Mostrando las entradas con la etiqueta Observer. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Observer. Mostrar todas las entradas

martes, 7 de abril de 2020

BoxInteger (clase)


Esta clase hereda de textbox, todo, valga la redundancia, pero le añadiremos un comportamiento particular en su evento KeyPress(). Este evento se lanza o se produce cuando presionamos una tecla. Por medio de un observador capturaremos este evento, haremos un filtro que si la tecla presionada no es un número del 0 a 9 retornemos previamente parando el evento mediante Stop Event haciendo que no se escriba el carácter elegido por el usuario mediante el teclado. Para escribir un número tendrá que presionar nuevamente otra tecla para lanzar el evento nuevamente y ahí actuará nuestro filtro. Otras teclas que permitiremos para que el usuario pueda editar serán suprimir, retornar, inicio, fin y alguna mas.

' gambas class file

'by postapase 07 abr 2020
Export

Inherits TextBox

Public Const Properties As String = "*"
Public Const _IsControl As Boolean = True
Public Const _DefaultSize As String = "14,4"
Public Const _Group As String = "Form"

Public obs As Observer

Property Read Valor As Integer

Public Sub _new()
'aquí esta el observador con el cual podremos manipular los eventos del textbox mediante la palabra "boxinteger" (aquí podemos poner un nombre a elección"
Obs = New Observer(Me) As "BoxInteger"

End




Public Sub BoxInteger_KeyPress()

Select Case Key.Code
Case Key.Del
Return
Case Key.Return
Return
Case Key.Home
Return
Case Key.End
Return
Case 16777234
Return
Case 16777236
Return
Case 16777219
Return
Case 48 To 57 'estos son los códigos ascii del número 0 al 9
Return
Default
End Select

Stop Event
Return

End

Private Function Valor_Read() As Integer

If Me.Text = "" Then Return 0

Return CInt(Me.Text)

End


Código:
https://gambas.one/gambasfarm/?id=776&action=search

domingo, 20 de marzo de 2016

Ejemplo 2 - Clase Observer


Este ejemplo surgió a partir de este hilo del foro gambas:
http://www.gambas-es.org/viewtopic.php?f=1&t=5072

en el cual yo estaba buscando e investigando la forma de programar mis propios eventos. Después shell hizo su aporte y Julio lo remato con algunos arreglos mas, resultando en el ejemplo siguiente.


Clase personalizada llamada: DrawingZona


' gambas class file

'***********************************************************************
'Fuente: http://www.gambas-es.org/viewtopic.php?f=1&t=5072
'Victor (http://postapase.blogspot.com/), Shell, y Jsbsan
'copyright 2016
'***********************************************************************
Export

Inherits DrawingArea

Event Abajo
Event Arriba

Private observador1 As Observer

Public Sub _new()

observador1 = New Observer(Me) As "Zona"

With Me
.Background = Color.Blue
.X = 20
.y = 20
.Height = 100
.Width = 200
End With

End

Public Sub Zona_Abajo()

Print "Se ejecuta el código del evento Abajo, dentro de la clase drawingzona"

End

Public Sub Zona_Arriba()

Print "Se ejecuta el código del evento Arriba, dentro de la clase drawingzona "

End

Public Sub Zona_DblClick()

Print "dobleclic"
Print Mouse.y

If Mouse.y < (Me.Height / 2) Then
Print "arriba ejecutado ---->"
Raise Arriba
Else
Print "abajo ejecutado <----"
Raise Abajo
Endif

End



Formulario 

' gambas class file

'***********************************************************************
'Fuente: http://www.gambas-es.org/viewtopic.php?f=1&t=5072
'Victor (http://postapase.blogspot.com/), Shell, y Jsbsan
'copyright 2016
'***********************************************************************
Public mizona As DrawingZona

Public obs As Observer

Public Sub Form_Open()

mizona = New DrawingZona(Me)
'vigilo el objeto "mizona", para si se produce un evento Arriba o Abajo, hago algo en el formulario principal

obs = New Observer(mizona) As "vigilo" 'este observador observará lo que ocurre en el objeto "mizona"

End

Public Sub vigilo_Arriba()

Print "Se ejecuta el código del evento Arriba, en el formulario "
PictureBoxFlecha.Stretch = True ' para que se adapte el dibujo a las dimensiones del picturebox
PictureBoxFlecha.Picture = Picture["fechaArriba.png"]

End

Public Sub vigilo_Abajo()

Print "Se ejecuta el código del evento Abajo, en el formulario "
PictureBoxFlecha.Stretch = True ' para que se adapte el dibujo a las dimensiones del picturebox
PictureBoxFlecha.Picture = Picture["fechaAbajo.png"]

End

Descargar ejemplo
(necesario estar registrado en el foro)

lunes, 14 de marzo de 2016

Ejemplo de clase Observer


Los Observadores son objetos que le permiten interceptar eventos lanzados por otros objetos, es decir que los "observan".
Puede interceptar eventos justo antes o después de que sean lanzados.
Por cada evento interceptado el observador lanzará un evento con el mismo nombre y los mismos argumentos.
Puede cancelar el evento original al usar STOP EVENT dentro del manejador de evento del observador.


' gambas class file

'by postapase

Private $hObserver As Observer

Public Sub Form_Open()

$hObserver = New Observer(Button1) As "Observador"

End

Public Sub Observador_Click()

If CheckBox1.Value Then
Debug "Se hizo clic en el botón. ¡Cancelo el evento!" & "(Observador Activado)"
Stop Event
Else
Debug "(El observador esta desactivado!)"
Endif

End

Public Sub Button1_Click()
Print "Me ves porque el Observador esta desactivado"
End


Código fuente en la Granja de Gambas.