Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



viernes, 30 de enero de 2015

Calendario: Ejemplo de creación de controles en tiempo de ejecución.

 Calendario: 

Ejemplo de creación de controles en tiempo de ejecución.



Os traigo un pequeño ejemplo de creación de controles en tiempo de ejecución. En la siguiente imagen, podeis ver un calendario que esta creado usando HBOX y Textlabel:




El formulario inicial Fmain es este:

Las propiedades Arrangement tiene el valor "Vertical", para que los controles se ordenen  ocupando todo el formulario horizontalmente (hemos puesto 2 paneles), uno para elegir el mes (con botones y un datebox) y otro para presentar los dias del mes.
 
Presentación de los dias del mes:
El Panel (llamado Panel1),es donde se van a presentar los dias del mes.
Va a alojar los HBOX y dentro de ellos los TextLabel:
Panel: Panel1, donde se alojan los HBox y los textbox

En el punto 2) podemos ver que la organización de los elementos dentro del panel va ha ser "Vertical" (propiedad Arrangement)
En el punto 3) podemos ver que la propiedad Expand, esta como Verdadero (True)

Mediante código, vamos a añadir al panel, 7 controles HBox y a cada Hbox, otros 7 textbox para los dias:

ControlTemporal=New Control(ContenedorTemporal)





El código que hace esto, es el siguiente:
 
Public Sub CrearControlesCalendario()
'construir controles...

Dim a As Integer, b As Integer
Dim hboxtmp As HBox
Dim TextLabeltmp As TextLabel
Dim contador As Integer = 0
'creo hbox (filas de la semana)
For a = 0 To 5
'por cada hboxtmp, creo 7 casillas para los dias
If a = 0 Then
hboxtmp = New HBox(Panel1)
hboxtmp.Expand = True

For b = 0 To 6
TextLabeltmp = New TextLabel(hboxtmp)
TextLabeltmp.Border = Border.Plain
TextLabeltmp.h = 20
textlabeltmp.expand = True
TextLabeltmp.Background = Color.blue
TextLabeltmp.Foreground = Color.White
TextLabeltmp.Text = DiaSemana[b]
TextLabeltmp.Alignment = Align.Center

Next
Endif

hboxtmp = New HBox(Panel1)
hboxtmp.Expand = True

For b = 0 To 6
TextLabeltmp = New TextLabel(hboxtmp) As "DiaCalendario"
TextLabeltmp.Border = Border.Plain
TextLabeltmp.AutoResize = True
textlabeltmp.expand = True
TextLabeltmp.Background = Color.gray
TextlabelDia.Add(TextLabeltmp, Str$(contador))
contador += 1
Next

Next

End

 Como veis en la linea:
TextLabeltmp = New TextLabel(hboxtmp) As "DiaCalendario"

se le añade un observador "DiaCalendario", con lo cual cuando hacemos doble click sobre un textlabel, se produce el evento _dblclick, y podemos ejecutar algún código:



Public Sub DiaCalendario_DblClick()

Message.Info(Last.text)

End


En el ejemplo, se muestra el contenido del ultimo control donde se recibio el evento _dblclick.

Enlace del código fuente: alojado en code google


Saludos

Julio