Páginas

lunes, 17 de abril de 2017

Gambas3: Nuevo control DayButton

Gambas3: Nuevo control DayButton

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