Per ora avrei scritto questo esempio base:
Public Sub Form_Open()
Dim im, i As Image
Dim b As Byte = 97
Dim x, y, x_a, y_o, r, an As Short
With Me
.Center
.W = 400
.H = 400
End With
x_a = 200 ' Rappresenta la distanza X dal punto 0 (angolo in alto a sinistra) dell'immagine principale
y_o = 200 ' Rappresenta la distanza Y dal punto 0 (angolo in alto a sinistra) dell'immagine principale
r = 100 ' Rappresenta la lunghezza del raggio (la distanza di ogni immagine-lettera dal centro)
' Crea l'Oggetto "Image" principale, ove saranno mostrate tutte le lettere alfabetiche:
im = New Image(Me.W, Me.H, Color.White, gb.Standard)
For an = 180 To 360 Step 7 ' Rappresenta l'angolo dell'arco (ci si sposta di 7° in senso orario lungo l'arco)
' Crea un oggetto "Image" per contenere il disegno di una lettera alfabetica:
i = New Image(20, 25, Color.Transparent, gb.Standard)
With Paint
.Begin(i)
.Font.Size = 12
.Text(Chr(b), 1, 1, i.W, i.H, Align.Center)
.Stroke
.End
End With
i = i.Rotate(Rad(an + 90))
x = x_a + r * Cos(Rad(an))
y = y_o + r * Sin(Rad(an))
With Paint
.Begin(im)
.DrawImage(i, x, y, i.W, i.H)
.End
End With
Inc b
Next
With PictureBox1
.X = 0
.Y = 0
.W = Me.W
.H = Me.H
.Image = im
End With
End
...anche questo codice:
Public Sub Form_Open()
Dim im, i As Image
Dim b As Byte
Dim x, y, x_a, y_o, r As Short
Dim an As Float
Dim cl As Integer
Dim bb As New Byte[]
Dim fo As Font
Dim s As String
With Me
.Center
.W = 600
.H = 600
End With
x_a = 260 ' Rappresenta la distanza X dal punto 0 (angolo in alto a sinistra) dell'Image principale
y_o = 260 ' Rappresenta la distanza Y dal punto 0 (angolo in alto a sinistra) dell'Image principale
r = 150 ' Rappresenta la lunghezza del raggio (la distanza di ogni immagine-lettera dal centro)
' Impone il testo da disegnare.
' Carica ogni carattere del testo In un vettore Byte[] per poter estrarre di ciascuno il valore:
bb = bb.FromString("È lì giù che saprò se vivrà.")
' Imposta il colore di partenza:
cl = Color.Blue
' Imposta il punto (sulla base dei gradi) della circonferenza da dove cominciare (in senso orario) a disegnare le lettere:
an += 204.0
' Crea l'Oggetto "Image" principale, ove saranno mostrate tutte le lettere alfabetiche del testo:
im = New Image(Me.W, Me.H, Color.White, gb.Standard)
For b = 0 To bb.Max
' Verifica se il carattere è accentato:
If bb[b] > 127 Then
' Se è un carattere accentato, per riottenerlo nell'Image, combina i due valori che lo compongono:
s = Chr(bb[b]) & Chr(bb[b + 1])
Inc b
Else
s = Chr(bb[b])
Endif
' Definisce le dimensioni dell'immagine, che conterrà la lettera alfabetica, dalle specificità del carattere:
With fo = New Font
.Name = "FreeSans"
.Size = 18
' Crea un oggetto "Image" per contenere il disegno di una lettera alfabetica:
i = New Image(.TextWidth(s) + 4, .TextHeight(s) + 4, Color.Transparent, gb.Standard)
End With
With Paint
.Begin(i)
.Font.Size = 18
.Font.Name = "FreeSans"
.Brush = .Color(cl)
.Text(s, 1, 1, i.W, i.H, Align.Center)
.Fill
.End
End With
i = i.Rotate(Rad(an + 90))
x = x_a + r * Cos(Rad(an))
y = y_o + r * Sin(Rad(an))
With Paint
.Begin(im)
.DrawImage(i, x, y, i.W, i.H)
.End
End With
' Imposta la distanza dei caratteri fra essi:
an += 5.0
cl += 668457
Next
With PictureBox1
.X = 0
.Y = 0
.W = Me.W
.H = Me.H
.Image = im
End With
End