Shell   11-02-2023, 12:49
#1
Buenas!.

No encontré un tema similar en la comunidad, puede que en el antiguo foro se encuentre.

Me surgen unas dudas referentes a la construcción del control.
Mi caso era que estoy diseñando el control círculo. Creé su clase, añadí nuevas propiedades.
Ahora quiero añadir valores por defecto para que nos aparezcan en la lista de propiedades del IDE de Gambas.

Dos cuestiones:

Supongamos que quiero que en la lista de propiedades del IDE de Gambas aparezca el valor
por defecto del radio. 20, 30, etc. Que tenga un valor fijo aunque se pueda cambiar luego.

Y ahora supongamos que debe aparecer una lista de valores posibles constantes.
20,30,40

He logrado hacer aparecer el valor 50 en la lista de propiedades haciendo esto:

Código:
Pero luego al ejecutarse el código, sigue diciendo que el me.radio o hradio es 0.
Como si no se asignase el valor de la constante a la propiedad.

[code]Public Const _Properties As String = "*,radio=50,colorprimerplano{Color}"

Inherits DrawingArea

Property radio As Integer Use hradio
Property colorprimerplano As Integer Use hcolorprimerplano

Private refrescador As Timer
Private observadrawing As Observer

Public Sub _new()

  observadrawing = New Observer(Me) As "ManejaDrawingArea"
  With Me
    .W = Me.W
    .H = Me.H
    .Expand = True
  End With

  Print hradio

  refrescador = New Timer As "ManejaReloj"

  With refrescador
    .Delay = 500
    .Start
  End With

End


Saludos
Última modificación: 11-02-2023, 16:36 por Shell.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   11-02-2023, 13:36
#2
El valor se lo debes dar tú. Las constantes públicas sólo son para que el IDE lo dibuje. Es decir que si en las constantes pones que radio=50, en la función _new debes poner que radio = 50.

No podemos regresar
Shell   11-02-2023, 16:35
#3
(11-02-2023, 13:36)Shordi escribió: Es decir que si en las constantes pones que radio=50, en la función _new debes poner que radio = 50.

Así es. De esta forma aparece 50 en la lista de propiedades y ademas usa ese valor luego en el constructor.
Lo más curioso es que si cambio el valor en la lista de propiedades el cambio se realiza con el valor que le des. (Aunque parezca lo más normal y habitual ).
Si ingreso un valor  y lo elimino se restaura el valor 50.

Dicho de alguna manera. Que aunque en el constructor tenga asignado 50 a la propiedad radio,
sobre esta se encuentra el valor de la lista de propiedades del IDE y es la que manda.

En tu vídeo usabas textdefault.

Un problema de lo más extraño que me estoy encontrado es que si le aplico algunos colores, como es
DarkOrange al borde del círculo, se colapsa el editor de Gambas!. Confused

[Imagen: mBA6xvY.png]

¿ Por un color ?. Huh
Última modificación: 11-02-2023, 16:37 por Shell.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shordi   11-02-2023, 18:09
#4
Ni idea, oiga. Lo mismo es un bug...

No podemos regresar
Shell   11-02-2023, 23:27
#5
(11-02-2023, 18:09)Shordi escribió: Ni idea, oiga. Lo mismo es un bug...

El problema es de quien hereda.
No debe heredar de DrawingArea, debe heredar de UserControl.

- El Timer no es necesario, no es algo en movimiento.
- El observador no es necesario. El objeto tipo DrawingArea tiene su propio manejador/manipulador de eventos definido.

Quedando de esta forma el código.

Código:
Export
Inherits UserControl

Public Const _Properties As String = "*,Radio=50,Colorprimerplano{Color}"

Property Radio As Integer Use hRadio''Radio del círculo
Property Colorprimerplano As Integer Use hColorprimerplano''Color del trazo del círculo

Private $hDrawingArea As DrawingArea

Public Sub _new()

  $hDrawingArea = New DrawingArea(Me) As "DrawingArea"

  With $hDrawingArea
    .W = Me.W
    .H = Me.H
    .Expand = True
  End With

  Me.radio = 50

End

Public Sub DrawingArea_Draw()

  Paint.LineWidth = 2
  Paint.Arc(Me.W / 2, Me.H / 2, hRadio)
  Paint.Background = hColorprimerplano
  Paint.Stroke

End

En cuanto al color por defecto, siempre es negro. Si te fijas controles como ColorButton, su propiedad Value no tiene un valor por defecto.

¿ Y cómo lo resolví ?. Pues ya te puedes hacer una idea, aprendiendo del código fuente de Gambas.

P.d .¿ Conoces la clase Style ?. Si no es así, como trasteas más con controles quizás te interese conocerla.

Clase Style

Por cierto al heredar de UserControl en la lista de propiedades de control en el editor ahora se muestran ordenadas alfabéticamente y no salen abajo.

Saludos
Última modificación: 11-02-2023, 23:35 por Shell.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
Shell   12-02-2023, 12:52
#6
Algo curioso que también ocurrió. Es que renombré el nombre la propiedad y casualmente el editor recordaba el nombre anterior como si existiese
aún.  Tuve que cerrar y abrir el editor de nuevo. En parte se solucionó asignándole un valor al nuevo nombre en la lista de propiedades.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
  
Usuarios navegando en este tema: 3 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.