Páginas

miércoles, 11 de febrero de 2015

Gambas3: Creación de un control Texbox Explanation

Gambas3: Creación de un control Texbox Explanation

Os traigo un código de Tobias Boege, que crea un nuevo control a partir de de un textbox, y que además de añadirle una nueva propiedad "Explanation" (para describir lo que tiene que rellenar el usuario en el textobox), también cambia el comportamiento del textbox, ya que si no tiene el foco y no contiene información introducida por el usuario, muestra el contenido de la nueva propiedad Explanation en gris:

Esto es muy útil para explicar con detalle como y que debe de rellenar el usuario los formularios.


Este es el código  de la clase ExplainTextbox:
' Gambas class file
' Copyright (C) 2015 Tobias Boege'' This program is free software; you can redistribute it and/or modify' it under the terms of the GNU General Public License as published by' the Free Software Foundation; either version 2 of the License, or' (at your option) any later version.'' This program is distributed in the hope that it will be useful,' but WITHOUT ANY WARRANTY; without even the implied warranty of' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the' GNU General Public License for more details.'' You should have received a copy of the GNU General Public License along' with this program; if not, write to the Free Software Foundation, Inc.,' 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
ExportInherits TextBox
Public Const _Properties As String = "*,Explanation"Public Const _DrawWith As String = "TextBox"
Property Explanation As String
Private $hBefore As ObserverPrivate $hAfter As ObserverPrivate $bShowExpl As BooleanPrivate $sExpl As String
Public Sub _new()
$hBefore = New Observer(Me, False) As "Before"$hAfter = New Observer(Me, True) As "After"
End
Public Sub Before_GotFocus()
If $bShowExpl ThenSuper.Text = ""Super.Foreground = $iActualForeground$bShowExpl = FalseEndif
End
Public Sub After_LostFocus()
If Not Super.Text ThenSuper.Text = $sExplSuper.Foreground = Color.Gray$bShowExpl = TrueEndif
End
Private Function Explanation_Read() As String
Return $sExpl
End
Private Sub Explanation_Write(Value As String)
$sExpl = ValueAfter_LostFocus()
End
' Hooks
Property Foreground As Integer

Private $iActualForeground As Integer
Private Function Foreground_Read() As IntegerReturn $iActualForegroundEnd

Private Sub Foreground_Write(Value As Integer)$iActualForeground = ValueIf Not $bShowExpl Then Super.Foreground = ValueEnd


Aquí podéis ver un vídeo de como es su funcionamiento:



Aquí teneis el enlace de descarga del código fuente completo: enlace a google drive