Una forma de extender el lenguaje gambas3, es crear nuevos controles que faciliten el trabajo de los programadores, a la hora de crear interfaces y/o programas. Este control es un ejemplo, sobre partiendo de uno existente (el button), se crea otro que nos muestra la fecha que le hayamos pasado en su propiedad fecha de la siguiente manera: día de la semana en texto, día numéricamente, y mes. Ademas si te sitúas encima de el, te sale el tooltip con la fecha:
Para redibujar el interior del botón, el código es el siguiente:
Public Sub _new()
$hDA = New DrawingArea(Me) As "da"
Me.Proxy = $hDA
End
Public Sub da_Draw()
Dim hImage As New Image
Dim iFlag As Integer = Style.StateOf(Me)
Style.PaintButton(0, 0, $hDA.W, $hDA.H, $bState, iFlag, False)
If Me.W > Me.H Then
Me.H = Me.W
Else
Me.W = Me.H
Endif
Style.PaintButton(0, 0, $hDA.W, $hDA.H, $bState, iFlag, False)
Draw.RichText(Html(WeekDatText(Me.fecha)), 0, 0, Me.W, Me.H / 3, Align.Center)
Draw.RichText(Html(Day(Me.fecha)), 0, Me.H / 3, Me.W, Me.H * 1 / 3, Align.Center)
Draw.RichText(Html(MonthText(Me.fecha)), 0, Me.H * 2 / 3, Me.W, Me.H / 3, Align.Center)
End
Y las funciones que convierten la fecha en texto (dia, mes) son:
Public Function WeekDatText(fecha As Date) As String
Dim ArrayDay As String[]
ArrayDay = [("Lunes"), ("Martes"), ("Miercoles"), ("Jueves"), ("Viernes"), ("Sabado"), ("Domingo")]
Return Choose(WeekDay(fecha), ArrayDay[0], ArrayDay[1], ArrayDay[2], ArrayDay[3], ArrayDay[4], ArrayDay[5], ArrayDay[6])
End
Public Function MonthText(fecha As Date) As String
Dim ArrayMonth As String[]
ArrayMonth = [("Enero"), ("Febrero"), ("Marzo"), ("Abril"), ("Mayo"), ("Junio"), ("Julio"), ("Agosto"), ("Septiembre"), ("Octubre"), ("Noviembre"), ("Diciembre")]
Return ArrayMonth[Month(fecha) - 1]
End
Private Function Fecha_Read() As Date
If hfecha = Null Then
hfecha = Now
Me.Tooltip = Str(Format(hfecha, "dd-mm-yyyy"))
Endif
Return hfecha
End
El video de presentación del control:
Enlace de descarga: alojado en google drive