Differenze tra le versioni di "Inserire un testo in diagonale in un Controllo grafico"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Di seguito mostriamo un possibile codice per inserire un testo in diagonale in un Controllo grafico, ad esempio in una ''DrawingArea'': Private DrawingArea1 As DrawingArea...")
 
Riga 40: Riga 40:
 
   
 
   
 
  End
 
  End
 +
o più semplicemente: <SUP&#091;[[#Note|nota 1]]&#093;</sup>
 +
Private DrawingArea1 As DrawingArea
 +
Private Slider1 As Slider
 +
 +
 +
Public Sub Form_Open()
 +
 +
  With Me
 +
    .W = Screen.AvailableWidth * 0.5
 +
    .H = Screen.AvailableHeight * 0.5
 +
    .Center
 +
  End With
 +
  With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
 +
    .X = 0
 +
    .Y = 0
 +
    .W = Me.W * 0.8
 +
    .H = Me.H
 +
    .Background = Color.Orange
 +
  End With
 +
  With Slider1 = New Slider(Me) As "Slider1"
 +
    .X = Me.W * 0.85
 +
    .Y = Me.H * 0.02
 +
    .W = Me.W * 0.1
 +
    .H = Me.H * 0.95
 +
    .MinValue = 0
 +
    .MaxValue = 360
 +
  End With
 +
 
 +
End
 +
 +
 +
Public Sub DrawingArea1_Draw()
 +
 +
  Dim testo As String = "Gambas " & CStr(Slider1.Value) & "°"
 +
 +
  With Paint
 +
<FONT Color=gray>' '''  Impone la rotazione del testo, disegnato, sempre al centro della "DrawingARea":''</font>
 +
    .Translate(DrawingArea1.W / 2, DrawingArea1.H / 2)
 +
    .Rotate(Rad(-Slider1.Value))
 +
    .Brush = Paint.Color(Color.Yellow)
 +
    .Font = Font["Sans Serif, 22"]
 +
<FONT Color=gray>' ''Il testo ruoterà comunque intorno al suo centro verticale e orizzontale:''</font>
 +
    .DrawText(testo, -Paint.TextExtents(testo).W / 2, Paint.TextExtents(testo).H / 2, -.TextExtents(testo).W / 2, -.TextExtents(testo).H / 2, Align.Center)
 +
<FONT Color=gray>' ''oppure anche così:''</font>
 +
<FONT Color=gray>'  '''.DrawText(testo, -.Font.TextWidth(testo) / 2, -.Font.TextHeight(testo) / 2, .Font.TextWidth(testo), .Font.TextHeight(testo), Align.Center)'''</font>
 +
    .End
 +
  End With
 +
 +
End
 +
 +
 +
Public Sub Slider1_Change()
 +
 +
  DrawingArea1.Refresh
 +
 +
End
 +
 +
 +
 +
=Note=
 +
[1] Vedere anche le seguenti pagine:
 +
* [[Ruotare il testo in una DrawingArea]]
 +
* [[Ruotare qualsiasi elemento da disegnare in una DrawingArea]]

Versione delle 08:38, 4 ago 2024

Di seguito mostriamo un possibile codice per inserire un testo in diagonale in un Controllo grafico, ad esempio in una DrawingArea:

Private DrawingArea1 As DrawingArea


Public Sub Form_Open()

 With Me
   .W = 400
   .H = 400
   .Center
   .Arrangement = Arrange.Fill
 End With
 With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
   .X = 0
   .Y = 0
   .Background = Color.Orange
 End With

End


Public Sub DrawingArea1_Draw()

 With Paint
   .LineTo(400, 400)
   .Stroke
' --- il testo ---
   .Translate(140, 100)
   .Rotate(Rad(315))
   .Font.Size = 20
   .Brush = .Color(Color.Yellow)
   .DrawText("G", 0, 0, .Font.TextWidth("G"), .Font.TextHeight("G"), Align.Center)
   .DrawText("a", 20, 0, .Font.TextWidth("a"), .Font.TextHeight("a"), Align.Center)
   .DrawText("m ", 40, 0, .Font.TextWidth("m"), .Font.TextHeight("m"), Align.Center)
   .DrawText("b", 65, 0, .Font.TextWidth("b"), .Font.TextHeight("b"), Align.Center)
   .DrawText("a", 83, 0, .Font.TextWidth("a"), .Font.TextHeight("a"), Align.Center)
   .DrawText("s", 100, 0, .Font.TextWidth("s"), .Font.TextHeight("s"), Align.Center)
   .End
 End With

End

o più semplicemente: <SUP[nota 1]</sup>

Private DrawingArea1 As DrawingArea
Private Slider1 As Slider


Public Sub Form_Open()

 With Me
   .W = Screen.AvailableWidth * 0.5
   .H = Screen.AvailableHeight * 0.5
   .Center
 End With
 With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1"
   .X = 0
    .Y = 0
   .W = Me.W * 0.8
   .H = Me.H
   .Background = Color.Orange
 End With
 With Slider1 = New Slider(Me) As "Slider1"
   .X = Me.W * 0.85
   .Y = Me.H * 0.02
   .W = Me.W * 0.1
   .H = Me.H * 0.95
   .MinValue = 0
   .MaxValue = 360
 End With
 
End


Public Sub DrawingArea1_Draw()

 Dim testo As String = "Gambas " & CStr(Slider1.Value) & "°"

 With Paint
' '  Impone la rotazione del testo, disegnato, sempre al centro della "DrawingARea":
   .Translate(DrawingArea1.W / 2, DrawingArea1.H / 2)
   .Rotate(Rad(-Slider1.Value))
   .Brush = Paint.Color(Color.Yellow)
   .Font = Font["Sans Serif, 22"]
' Il testo ruoterà comunque intorno al suo centro verticale e orizzontale:
   .DrawText(testo, -Paint.TextExtents(testo).W / 2, Paint.TextExtents(testo).H / 2, -.TextExtents(testo).W / 2, -.TextExtents(testo).H / 2, Align.Center)
' oppure anche così:
'  .DrawText(testo, -.Font.TextWidth(testo) / 2, -.Font.TextHeight(testo) / 2, .Font.TextWidth(testo), .Font.TextHeight(testo), Align.Center)
   .End
 End With

End


Public Sub Slider1_Change()

 DrawingArea1.Refresh

End


Note

[1] Vedere anche le seguenti pagine: