Crear Un Componente Con Gambas3 (SOLUCIONADO)


Objetivo: Crear Un Componente Con Gambas3 (SOLUCIONADO)
Hola,

No consigo que al crear una propiedad tipo String, llamada "Tipo" me aparezcan los valores de la lista en el control en tiempo de diseño.


Inherits TextBox
Export
Public Const _Properties As String = "*,Obligatorio=True,Negativo=False,Decimales{Range}=3,Tipo{Cadena;Entero;Float}=Entero"

Private hObs As Observer
Property Obligatorio As Boolean
Private $Obligatorio As Boolean
Property Tipo As String
Private $tipo As String
Property Decimales As Integer
Private $decimales As Integer
Private Ndecimales As String
Property Negativo As Boolean
Private $negativo As Boolean




Otra cosa: Cuando se crea el nuevo objeto ¿En qué momento se asigna el valor que tienen las propiedades al objeto? Ejemplo: si yo cambio en tiempo de diseño el borde del Textbox a False, y Decimales a "2", si pongo este código para hacer comprobaciones:

Public Sub _new()
Print Super.Border
Print Me.Decimales
End


Los valores que me saca son
True
0
respectivamente. Cuando temina de cargar, el borde del control no sale (es lo esperado), pero "Decimales" no toma el valor "2" que le habíamos puesto en tiempo de diseño.

¿Alguna pista?

Gracias anticipadas

Saludos

última edición por ljma el Lunes, 27 Febrero 2012, 23:34; editado 3 veces
Objetivo: Re: Crear Un Componente Con Gambas3
Hola otra vez,

Por si no se entiende pongo un ejemplo más elaborado.

Inherits TextBox
Export

Public Const _Properties As String = "*,Obligatorio=True,Tipo{Class1.*},Tipo2{Class2.*}"
Public Const _IsControl As Boolean = True
Public Const _DrawWith As String = "TextBox"

Private hObs As Observer
Property Obligatorio As Boolean
Private $Obligatorio As Boolean
Property Tipo As String
Private $Tipo As String
Property Tipo2 As Integer
Private $Tipo2 As Integer

Public Sub _new()
hObs = New Observer(Me) As "TextBox" ' declara una nueva clase observer llamada TextBox
Super.background = &FFFFFF&
End


Public Sub TextBox_GotFocus()
Last.background = &9FFFFF&
End

Public Sub TextBox_lostFocus()
Last.background = &FFFFFF&
If Me.Obligatorio = True Then
Super.background = &FF0000&
else
Super.background = &FFFFFF&
Endif
End


Private Function Obligatorio_Read() As Boolean
Return $Obligatorio
End

Private Sub Obligatorio_Write(Value As Boolean)
$Obligatorio = Value
End

Private Function Tipo_Read() As String
Return $Tipo
End

Private Sub Tipo_Write(Value As String)
$Tipo = Value
End


Private Function Tipo2_Read() As Integer
Return $Tipo2
End

Private Sub Tipo2_Write(Value As Integer)
$Tipo2 = Value
End


la Clase Class1:

Public Const Entero As String = "Entero"
Public Const Float As String = "Float"
Public Const Cadena As String = "Cadena"


La Clase Class2:


Este código crea un componente de usuario que se pone en color azul cuando recibe el foco y debería ponerse en color rojo cuando lo pierde si la propiedad "Obligatorio" está en True.

Como se puede ver, por defecto, esta propiedad está en True. Aunque se ponga en True en tiempo de diseño, luego en tiempo de ejecución no coge este valor, coge siempre False. Es como si faltara código para asignar los valores de las propiedades asignados en tiempo de diseño a las variables de las propiedades.

Tampoco consigo crear una propiedad con una lista de opciones. Según el How To:

For properties that take their value into a list of predefined constants of the same class, you can specify a class instead of a property kind, with an optional list of constants.

Class . ( * | Constant1 ; Constant2 ; ... ) [ = Default ]
The IDE will will use a ComboBox control to edit the value of the property, and will fill it with the specified constants.


¿Alguna idea de qué estoy haciendo mal?


Gracias anticipadas

Objetivo: Re: Crear Un Componente Con Gambas3
Destro del evento _New() deberías inicializar los valores de las propiedades (no de sus variables) tal que así:


Public Sub _new()
hObs = New Observer(Me) As "TextBox" ' declara una nueva clase observer llamada TextBox
Super.background = &FFFFFF&

Obligatorio = True
' otrapropiedad = loquesea

End


Saludos

Perfil MP  
Objetivo: Re: Crear Un Componente Con Gambas3
Hola jguardon,

Gracias por contestar. Ya lo tengo casi claro tal y como me habéis indicado Benoît y tu. Fallo mío por no terminar de leer el How to.

Citar:
You must be careful when defining (or not) the Default value of a property.
* First, if not specified, the taken default value is the default value associated with the property data type (FALSE for a Boolean property, 0 for a numerical one...).
* Last, the default value must be accurate with the property implementation. Because when a property is set to its default value in the IDE form editor, no code is emitted to initialize the property at run time.


Queda pendiente el poner una lista de opciones tipo string en una propiedad. ¿Alguna idea?


Saludos

Objetivo: Re: Crear Un Componente Con Gambas3
Si no declaras unas constantes con el nombre no te pueden salir en lista de valores, esto es lo que yo tengo declarado en un control basado en textbox:

Inherits TextBox

Export

Public Const _Properties As String = "*,-Password,Fecha_local{TextBd.local;ingles},TipoDatos{TextBd.boolean;byte;short;integer;long;single;float;date;string;stringNumeric},CampoBd,Formato,SelecFoco,Value"
Public Const _DrawWith As String = "TextBox"
Public Const _Similar As String = "TextBox"
Public Const _IsControl As Boolean = True

Public Enum {boolean} = 1, {byte} = 2, {short} = 3, {integer} = 4, {long} = 5, {single} = 6, {float} = 7, {Date} = 8, {String} = 9
Public Enum {stringNumeric} = 10, {local} = 11, {ingles} = 12

Property Value As Variant
Property TipoDatos As Integer
Property CampoBd As String
Property Formato As String
Property SelecFoco As Boolean
Property Fecha_local As Integer
Property Text As String



Como veras la propiedad Fecha_local es integer el encabezado: Fecha_local{TextBd.local;ingles} en tiempo de diseño sale el combo con esos dos valores que estan declarados como constantes {local} = 11, {ingles} = 12.

Espero que te sirva, a mi el control me funciona perfectamente el problema es que en gambas3 para ver el control en la caja de herramientas tengo que agregar la clase al proyecto, mientras que en gambas2 hacías el ejecutable del control y era accesible para todos los proyectos, yo por lo menos no se como hacerlo.

Un saludo
Angel

Perfil MP  
Objetivo: Re: Crear Un Componente Con Gambas3 (SOLUCINADO)
Hola,

Muchas gracias Angel. Es perfecto.


Saludos


Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4883s (PHP: -73% SQL: 173%)
Consultas SQL: 45 - Debug off - GZIP Activado