Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Crear Un Componente Con Gambas3 (SOLUCIONADO)
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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 
ljma - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 



 
ljma - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 



 
ljma - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 



 
angelnu - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Crear Un Componente Con Gambas3 (SOLUCINADO) 
 
Hola,

Muchas gracias Angel. Es perfecto.


Saludos
 



 
ljma - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Crear Un Componente Nuevo En Gambas3 femsalut Controles/Librerías/Componentes 19 Martes, 25 Enero 2011, 17:10 Ver último mensaje
fabianfv
No hay nuevos mensajes Como Crear Un Componente En Gambas3 Y Usar... jsbsan Videotutoriales 0 Lunes, 12 Agosto 2013, 19:29 Ver último mensaje
jsbsan
No hay nuevos mensajes Crear Un Componente En Gambas3 jsbsan General 7 Lunes, 26 Agosto 2013, 00:53 Ver último mensaje
sebikul
No hay nuevos mensajes Crear Reportes Usando El Componente Gb.rep... willicab Controles/Librerías/Componentes 5 Jueves, 10 Abril 2014, 16:01 Ver último mensaje
leonel
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron