Differenze tra le versioni di "Mostrare e usare in Gambas i simboli musicali forniti dal sistema UNICODE"
(2 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 2: | Riga 2: | ||
Tali simboli possono essere consultati mediante l'applicazione "Tabella dei caratteri" fornita dal sistema operativo. | Tali simboli possono essere consultati mediante l'applicazione "Tabella dei caratteri" fornita dal sistema operativo. | ||
− | <BR>Possiamo visualizzare con Gambas tale gruppo di caratteri musicali ad esempio usando il seguente codice (sarà sufficiente posizionarsi sul riquadro giallo della ''PictureBox'' e ruotare la rotellina del mouse per far scorrere i siboli musicali forniti dal UNICODE) | + | <BR>Possiamo visualizzare con Gambas tale gruppo di caratteri musicali ad esempio usando il seguente codice (sarà sufficiente posizionarsi sul riquadro giallo della ''PictureBox'' e ruotare la rotellina del mouse per far scorrere i siboli musicali forniti dal UNICODE). |
+ | <BR>Come è noto <SUP>[[[#Note|nota 1]]]</sup>, in Gambas i caratteri UNICODE possono essere utilizzati attraverso il Metodo ".Chr()" della Classe ''String''. | ||
Private i As Integer = &1D100 | Private i As Integer = &1D100 | ||
Riga 26: | Riga 27: | ||
If i > &1D1B5 Then i = &1D1B5 | If i > &1D1B5 Then i = &1D1B5 | ||
<FONT Color=gray>' ''Il carattere UNICODE in Gambas viene mostrato usando il Metodo ".Chr()" della Classe "String":''</font> | <FONT Color=gray>' ''Il carattere UNICODE in Gambas viene mostrato usando il Metodo ".Chr()" della Classe "String":''</font> | ||
− | s = <FONT Color=#B22222>String.Chr</font>(i) | + | s = <FONT Color=#B22222><B>String.Chr</b></font>(i) |
With Paint | With Paint | ||
Riga 80: | Riga 81: | ||
====Disegnare una pagina A4 contenente dodici pentagrammi==== | ====Disegnare una pagina A4 contenente dodici pentagrammi==== | ||
In quest'altro esempio all'interno di una ''PictureBox'' di dimensioni di un foglio A4 mostreremo dodici pentagrammi musicali. | In quest'altro esempio all'interno di una ''PictureBox'' di dimensioni di un foglio A4 mostreremo dodici pentagrammi musicali. | ||
− | <BR> | + | <BR>Il pentagramma musicale è rappresentato dal simbolo UNICODE "&h1D11A". |
+ | <BR>L'esempio consentirà anche di creare un file PDF di quanto mostrato nela ''PictureBox''. | ||
Private ScrollView1 As ScrollView | Private ScrollView1 As ScrollView | ||
Private PictureBox1 As PictureBox | Private PictureBox1 As PictureBox | ||
Riga 89: | Riga 91: | ||
Public Sub Form_Open() | Public Sub Form_Open() | ||
− | Dim penta As String = String(27, String.Chr(<FONT Color=#B22222>&1d11a</font>)) | + | Dim penta As String = String(27, String.Chr(<FONT Color=#B22222><B>&1d11a</b></font>)) |
Dim y As Short | Dim y As Short | ||
Dim b, j, t As Byte | Dim b, j, t As Byte | ||
Riga 142: | Riga 144: | ||
.Paper = Printer.A4 | .Paper = Printer.A4 | ||
.Resolution = Desktop.Resolution | .Resolution = Desktop.Resolution | ||
− | .OutputFile = "/tmp/file.pdf" <FONT Color=gray>' ''Consente la stampa in un file PDF''</font> | + | '''.OutputFile''' = "/tmp/file.pdf" <FONT Color=gray>' ''Consente la stampa in un file PDF''</font> |
.Print | .Print | ||
End With | End With | ||
Riga 161: | Riga 163: | ||
<BR>nonché - per gli iscritti al forum www.gambas-it.org - scaricando il progetto allegato nella seguente discussione del forum: | <BR>nonché - per gli iscritti al forum www.gambas-it.org - scaricando il progetto allegato nella seguente discussione del forum: | ||
<BR>https://www.gambas-it.org/smf/index.php?topic=8071.0 | <BR>https://www.gambas-it.org/smf/index.php?topic=8071.0 | ||
+ | |||
+ | ====Combinando i due casi precedenti==== | ||
+ | Se combiniamo i due casi precedenti, spostando su un pentagramma musicale con il puntatore del mouse la figura musicale della ''Croma'', sarà possibile vedere l'adattamento della figura (mediante le rotazioni effettuate nel codice) in base alla sua posizione rispetto al terzo rigo del pentagramma. | ||
+ | Private PictureBox1 As PictureBox | ||
+ | |||
+ | |||
+ | Public Sub Form_Open() | ||
+ | |||
+ | With Me | ||
+ | .W = 200 | ||
+ | .H = 200 | ||
+ | .Background = Color.White | ||
+ | End With | ||
+ | With PictureBox1 = New PictureBox(Me) As "PictureBox1" | ||
+ | .X = 0 | ||
+ | .Y = 0 | ||
+ | .W = Me.W | ||
+ | .H = Me.H | ||
+ | .Image = New Image(.W, .H, Color.Transparent, Image.Standard) | ||
+ | End With | ||
+ | With Paint | ||
+ | .Begin(PictureBox1.Image) | ||
+ | .Font.Size = 28 | ||
+ | .DrawText(String(6, String.Chr(&1d11a)), 10, 100) | ||
+ | .DrawText(String.Chr(&1d11e), 14, 100) | ||
+ | .End | ||
+ | End With | ||
+ | CreaPictureBox() | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
+ | Private Procedure CreaPictureBox() | ||
+ | |||
+ | With PictureBox1 = New PictureBox(Me) As "PictureBox1" | ||
+ | .X = 10 | ||
+ | .Y = 10 | ||
+ | .W = 18 | ||
+ | .H = 52 | ||
+ | End With | ||
+ | |||
+ | DisegnaFigura() | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
+ | Private Procedure DisegnaFigura() | ||
+ | |||
+ | If PictureBox1.Y < 64 Then | ||
+ | PictureBox1.Image = New Image(PictureBox1.W, PictureBox1.H, Color.Transparent, Image.Standard) | ||
+ | With Paint | ||
+ | .Begin(PictureBox1.Image) | ||
+ | .Font.Size = 28 | ||
+ | .DrawText(String.Chr(&1D15F), 8, 16, 0, 0, Align.Center) | ||
+ | .End | ||
+ | End With | ||
+ | <FONT Color=gray>' ''Ribalta orizzontalmente il disegno della figura musicale:''</font> | ||
+ | PictureBox1.Image.Mirror(True, False) | ||
+ | With Paint | ||
+ | .Begin(PictureBox1.Image) | ||
+ | .Font.Size = 28 | ||
+ | <FONT Color=gray>' ''Al disegno della "Semiminima ribaltata aggiunge il carattere-simbolo della coda della "Croma":''</font> | ||
+ | .DrawText(String.Chr(&1D16E), 0, 14, 0, 0, Align.Normal) | ||
+ | .End | ||
+ | End With | ||
+ | <FONT Color=gray>' ''Ribalta verticalmente il disegno sinora ottenuto:''</font> | ||
+ | PictureBox1.Image.Mirror(False, True) | ||
+ | Else | ||
+ | PictureBox1.Image = New Image(PictureBox1.W, PictureBox1.H, Color.Transparent, Image.Standard) | ||
+ | With Paint | ||
+ | .Begin(PictureBox1.Image) | ||
+ | .Font.Size = 28 | ||
+ | .DrawText(String.Chr(&1d160), 0, 14, 0, 0, Align.Normal) | ||
+ | .End | ||
+ | End With | ||
+ | Endif | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
+ | Public Sub PictureBox1_MouseMove() | ||
+ | |||
+ | With PictureBox1 | ||
+ | .Move(.X + Mouse.X - Mouse.StartX, .Y + Mouse.Y - Mouse.StartY) | ||
+ | End With | ||
+ | |||
+ | DisegnaFigura() | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
+ | |||
+ | =Note= | ||
+ | [1] Vedere la seguente pagina: [[Uso di Unicode con gli oggetti di testo]]. |
Versione delle 17:06, 20 lug 2023
Il sistema di codifica UNICODE contempla anche una buona parte dei simboli musicali occidentali assegnando a ciascuno di essi un numero univoco che va da U+1D100 a U+1D1B5.
Tali simboli possono essere consultati mediante l'applicazione "Tabella dei caratteri" fornita dal sistema operativo.
Possiamo visualizzare con Gambas tale gruppo di caratteri musicali ad esempio usando il seguente codice (sarà sufficiente posizionarsi sul riquadro giallo della PictureBox e ruotare la rotellina del mouse per far scorrere i siboli musicali forniti dal UNICODE).
Come è noto [nota 1], in Gambas i caratteri UNICODE possono essere utilizzati attraverso il Metodo ".Chr()" della Classe String.
Private i As Integer = &1D100 Public Sub Form_Open() With PictureBox1 .W = 80 .H = 90 .Background = Color.SoftYellow End With End Public Sub PictureBox1_MouseWheel() Dim im As New Image(PictureBox1.W, PictureBox1.H, Color.Transparent, Image.Standard) Dim s As String i = i + Mouse.Delta If i < &1D100 Then i = &1D100 If i > &1D1B5 Then i = &1D1B5 ' Il carattere UNICODE in Gambas viene mostrato usando il Metodo ".Chr()" della Classe "String": s = String.Chr(i) With Paint .Begin(im) .Font.Size = 28 .DrawText(s, 20, 5, im.W, im.H, Align.Normal) .End End With PictureBox1.Image = im End
Indice
Ottenere le figure musicali con il gambo in basso
Come si può notare, delle figure musicali aventi il gambo sono disponibili in UNICODE soltanto quelle con il gambo rivolto verso l'alto (posizionabili sul pentagramma dunque dal LA del secondo spazio in giù).
Per ottenere le figure musicali con il gambo rivolto verso il basso, bisognerà costruirle usando alcuni simboli forniti dallo stesso UNICODE.
Mostriamo un esempio con la figura della Croma:
Public Sub Form_Open() With PictureBox1 .W = 30 .H = 40 .Background = Color.SoftYellow End With Dim im As New Image(PictureBox1.W, PictureBox1.H, Color.Transparent, Image.Standard) With Paint .Begin(im) .Font.Size = 28 .Brush = .Color(Color.Blue) ' Disegna nell'Oggetto "Image" il carattere-simbolo della "Semiminima": .DrawText(String.Chr(&1D15F), 10, 20, 0, 0, Align.Center) .End End With ' Ribalta orizzontalmente il disegno della figura musicale: im = im.Mirror(True, False) With Paint .Begin(im) .Font.Size = 28 .Brush = .Color(Color.Blue) ' Al disegno della "Semiminima ribaltata aggiunge il carattere-simbolo della coda della "Croma": .DrawText(String.Chr(&1D16E), 10, 18, 0, 0, Align.Center) .End End With ' Ribalta verticalmente il disegno sinora ottenuto: im = im.Mirror(False, True) PictureBox1.Image = im End
Disegnare una pagina A4 contenente dodici pentagrammi
In quest'altro esempio all'interno di una PictureBox di dimensioni di un foglio A4 mostreremo dodici pentagrammi musicali.
Il pentagramma musicale è rappresentato dal simbolo UNICODE "&h1D11A".
L'esempio consentirà anche di creare un file PDF di quanto mostrato nela PictureBox.
Private ScrollView1 As ScrollView Private PictureBox1 As PictureBox Private Button1 As Button Private Printer1 As Printer Public Sub Form_Open() Dim penta As String = String(27, String.Chr(&1d11a)) Dim y As Short Dim b, j, t As Byte With Me .W = Screen.AvailableWidth * 0.65 .H = Screen.AvailableHeight End With With ScrollView1 = New ScrollView(Me) As "ScrollView1" .W = Me.W .H = Me.H .ScrollBar = Scroll.Both End With With PictureBox1 = New PictureBox(ScrollView1) .X = 0 .Y = 0 ' Dimensiona i pixel della "PictureBox" ad un foglio A4 = cm. 21x29,7 a 96 dpi: .W = 794 .H = 1123 .Border = Border.Plain .Image = New Image(.W, .H, Color.White, Image.Standard) End With With Button1 = New Button(Me) As "Button1" .X = Me.W * 0.9 .Y = 100 .W = Me.W * 0.05 .H = Me.H * 0.3 .Text = "C\nr\ne\na\n\nP\nD\nF" End With With Paint .Begin(PictureBox1.Image) .Font.Size = 24 For b = 0 To 11 If b > 0 Then y = 78 j = .Font.TextHeight(penta) - 1 t = 36 Endif .DrawText(penta, 50, (y * b) + j + (132 - t), .Font.TextWidth(penta), .Font.TextHeight(penta), Align.Center) Next .End End With End Public Sub Button1_Click() With Printer1 = New Printer As "Printer1" .Orientation = Printer.Portrait .Paper = Printer.A4 .Resolution = Desktop.Resolution .OutputFile = "/tmp/file.pdf" ' Consente la stampa in un file PDF .Print End With End Public Sub Printer1_Draw() With Paint .DrawImage(PictureBox1.Image, 0, 0, PictureBox1.Image.W, PictureBox1.Image.H) .End End With End
Altri interessanti esempi su tale argomento possono essere consultati in questa pagina della Wiki:
Creare, spostare e distruggere un'immagine in una DrawingArea,
nonché - per gli iscritti al forum www.gambas-it.org - scaricando il progetto allegato nella seguente discussione del forum:
https://www.gambas-it.org/smf/index.php?topic=8071.0
Combinando i due casi precedenti
Se combiniamo i due casi precedenti, spostando su un pentagramma musicale con il puntatore del mouse la figura musicale della Croma, sarà possibile vedere l'adattamento della figura (mediante le rotazioni effettuate nel codice) in base alla sua posizione rispetto al terzo rigo del pentagramma.
Private PictureBox1 As PictureBox Public Sub Form_Open() With Me .W = 200 .H = 200 .Background = Color.White End With With PictureBox1 = New PictureBox(Me) As "PictureBox1" .X = 0 .Y = 0 .W = Me.W .H = Me.H .Image = New Image(.W, .H, Color.Transparent, Image.Standard) End With With Paint .Begin(PictureBox1.Image) .Font.Size = 28 .DrawText(String(6, String.Chr(&1d11a)), 10, 100) .DrawText(String.Chr(&1d11e), 14, 100) .End End With CreaPictureBox() End Private Procedure CreaPictureBox() With PictureBox1 = New PictureBox(Me) As "PictureBox1" .X = 10 .Y = 10 .W = 18 .H = 52 End With DisegnaFigura() End Private Procedure DisegnaFigura() If PictureBox1.Y < 64 Then PictureBox1.Image = New Image(PictureBox1.W, PictureBox1.H, Color.Transparent, Image.Standard) With Paint .Begin(PictureBox1.Image) .Font.Size = 28 .DrawText(String.Chr(&1D15F), 8, 16, 0, 0, Align.Center) .End End With ' Ribalta orizzontalmente il disegno della figura musicale: PictureBox1.Image.Mirror(True, False) With Paint .Begin(PictureBox1.Image) .Font.Size = 28 ' Al disegno della "Semiminima ribaltata aggiunge il carattere-simbolo della coda della "Croma": .DrawText(String.Chr(&1D16E), 0, 14, 0, 0, Align.Normal) .End End With ' Ribalta verticalmente il disegno sinora ottenuto: PictureBox1.Image.Mirror(False, True) Else PictureBox1.Image = New Image(PictureBox1.W, PictureBox1.H, Color.Transparent, Image.Standard) With Paint .Begin(PictureBox1.Image) .Font.Size = 28 .DrawText(String.Chr(&1d160), 0, 14, 0, 0, Align.Normal) .End End With Endif End Public Sub PictureBox1_MouseMove() With PictureBox1 .Move(.X + Mouse.X - Mouse.StartX, .Y + Mouse.Y - Mouse.StartY) End With DisegnaFigura() End
Note
[1] Vedere la seguente pagina: Uso di Unicode con gli oggetti di testo.