(10-02-2023, 21:38)Shordi escribió: TextArea...
He creado un ejemplo. A ver si me explico mejor con esto.
He creado el control circulo que hereda de DrawingArea.
Este es el código.
Código:
Export
Public Const _Properties As String = "*,radio"
Inherits DrawingArea
Property radio As Integer Use hradio
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
refrescador = New Timer As "ManejaReloj"
With refrescador
.Delay = 500
.Start
End With
End
Public Sub ManejaDrawingArea_Draw()
Paint.LineWidth = 2
Paint.Arc(Me.W / 2, Me.H / 2, hradio)
Paint.Background = Color.Green
Paint.Stroke
End
Public Sub ManejaReloj_Timer()
Me.Refresh
End
Creé el icono del control y este se muestra en el menú de controles donde estaba DrawingArea, normal.
Ahora bien. Cuando situó el control en el formulario.
Veo el icono que hice para el control, pero no veo un circulo que aumenta o disminuye según ajusto su contenedor. ( En modo diseño ).
Eso es lo que quería decir.
Por cierto si añadiese una propiedad para el color del trazado, ¿ cómo podría escoger entre un color u otro ?.
Como pasa con el color de fondo de un control o el de primer plano (foreground).
Complicado con el tema de las llaves para decirle de que tipo es.
Código:
Public Const _Properties As String = "*,radio,colorprimerplano{Color}"
Inherits DrawingArea
Property radio As Integer Use hradio
Property colorprimerplano As Integer Use hcolorprimerplano
El actual código queda de esta forma:
- Ahora hereda de UserControl
- No necesita Timer, al ser un objeto que no tiene movimiento
- No necesita un observador, ya que el propio objeto DrawingArea tiene su manipulador de eventos
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
Saludos