Differenze tra le versioni di "Usare la ScrollArea"

Da Gambas-it.org - Wikipedia.
 
(5 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
Per utilizzare un oggetto '''''ScrollArea''''' bisogna tenere presente alcuni accorgimenti:
 
Per utilizzare un oggetto '''''ScrollArea''''' bisogna tenere presente alcuni accorgimenti:
  
1) definire con il Metodo "''.ResizeContents( )'' " l'area del contenuto che sarà disegnato nella ''ScrollArea''.
+
1) definire con il Metodo ".ResizeContents()" l'area del contenuto che sarà disegnato nella ''ScrollArea''.
  
2) considerare i valori delle proprietà "''.ScrollX'' " e "''.ScrollY'' " quando si disegna dentro il gestore dell'evento "_Draw()" (almeno per le cose che devono spostarsi con le barre di spostamento). Quando la "ScrollArea" disegna, questo Oggetto deve usare le proprietà "''.ScrollX'' " e "''.ScrollY'' " per conoscere quanto si deve spostare ciò che viene disegnato dentro il gestore dell'evento "_Draw()". Insomma, mediante le proprietà "''.ScrollX'' " e "''.ScrollY'' " si definiscono le coordinate in cui si inizia a disegnare nella "ScrollArea".
+
2) considerare i valori delle Proprietà ".ScrollX" e ".ScrollY" quando si disegna dentro il gestore dell'Evento "_Draw()" (almeno per le cose che devono spostarsi con le barre di spostamento). Quando la "ScrollArea" disegna, questo Oggetto deve usare le Proprietà ".ScrollX" e ".ScrollY" per conoscere quanto si deve spostare ciò che viene disegnato dentro il gestore dell'Evento "_Draw()". Insomma, mediante le Proprietà ".ScrollX" e ".ScrollY" si definiscono le coordinate in cui si inizia a disegnare nella ''ScrollArea'';
 +
 
 +
3) <U>non</u> inserire il Metodo ".End()" della Classe ''Paint'', altrimenti verrà sollevato l'errore "''No current device'' ".
  
  
 
Mostriamo un semplice esempio pratico:
 
Mostriamo un semplice esempio pratico:
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
    
 
    
 
   With ScrollArea1
 
   With ScrollArea1
Riga 15: Riga 17:
 
   End With
 
   End With
 
    
 
    
  '''End'''
+
  End
 
+
   
 
 
  '''Public''' Sub ScrollArea1_Draw()
 
 
    
 
    
 +
Public Sub ScrollArea1_Draw()
 +
 
   With Paint
 
   With Paint
 
     .Brush = Paint.Color(Color.Blue)
 
     .Brush = Paint.Color(Color.Blue)
Riga 25: Riga 27:
 
     .Ellipse(50, ScrollArea1.<FONT Color=#B22222>ScrollY</font>, 200, 200)  <FONT Color=gray>' ''oppure con il valore negativo: (...,</font> '''-''' <FONT Color=gray>ScrollArea1.ScrollY, ...)</font>
 
     .Ellipse(50, ScrollArea1.<FONT Color=#B22222>ScrollY</font>, 200, 200)  <FONT Color=gray>' ''oppure con il valore negativo: (...,</font> '''-''' <FONT Color=gray>ScrollArea1.ScrollY, ...)</font>
 
     .Stroke
 
     .Stroke
    .End
 
 
   End With
 
   End With
 
+
  '''End'''
+
  End
  
 
===Disegnare cerchi===
 
===Disegnare cerchi===
Riga 37: Riga 38:
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
+
   im = Image.Load("<FONT Color=gray>''/percorso/del/file/immagine''</font>")
+
   im = Image.Load("<FONT Color=darkgreen>''/percorso/del/file/immagine''</font>")
 
    
 
    
 
   ScrollArea1.ResizeContents(im.W, im.H)
 
   ScrollArea1.ResizeContents(im.W, im.H)
 
    
 
    
  '''End'''
+
  End
 +
 +
 +
Public Sub ScrollArea1_Draw()
 
   
 
   
'''Public''' Sub ScrollArea1_Draw()
 
   
 
 
   With Paint
 
   With Paint
 
     .DrawImage(im, -ScrollArea1.ScrollX, -ScrollArea1.ScrollY)
 
     .DrawImage(im, -ScrollArea1.ScrollX, -ScrollArea1.ScrollY)
Riga 54: Riga 56:
 
     .Ellipse(x - 5, y - 5, 9, 9)  
 
     .Ellipse(x - 5, y - 5, 9, 9)  
 
     .Stroke
 
     .Stroke
    .End
 
 
   End With
 
   End With
 
+
 
  '''End'''
+
  End
 +
 
   
 
   
  '''Public''' Sub ScrollArea1_MouseDown()
+
  Public Sub ScrollArea1_MouseDown()
 
   
 
   
 
   x = Mouse.X + ScrollArea1.ScrollX
 
   x = Mouse.X + ScrollArea1.ScrollX
Riga 66: Riga 68:
 
   ScrollArea1.Refresh
 
   ScrollArea1.Refresh
 
    
 
    
  '''End'''
+
  End
  
 
===Disegnare cerchi conservando quelli disegnati in precedenza===
 
===Disegnare cerchi conservando quelli disegnati in precedenza===
Riga 75: Riga 77:
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
+
   im = Image.Load("<FONT Color=gray>''/percorso/del/file/immagine''</font>")
+
   im = Image.Load("<FONT Color=darkgreen>''/percorso/del/file/immagine''</font>")
 
    
 
    
 
   ScrollArea1.ResizeContents(im.W, im.H)
 
   ScrollArea1.ResizeContents(im.W, im.H)
 
    
 
    
  '''End'''
+
  End
 +
 +
 +
Public Sub ScrollArea1_Draw()
 
   
 
   
'''Public''' Sub ScrollArea1_Draw()
 
 
 
 
   Dim c As Short
 
   Dim c As Short
 
    
 
    
Riga 98: Riga 101:
 
       Next
 
       Next
 
     Endif
 
     Endif
    .End
 
 
   End With
 
   End With
 
+
 
  '''End'''
+
  End
 +
 +
 +
Public Sub ScrollArea1_MouseDown()
 
   
 
   
'''Public''' Sub ScrollArea1_MouseDown()
 
 
 
 
  <FONT Color=gray>' ''Raccoglie e memorizza nei due vettori le coordinate del cerchio che si disegnerà sulla "ScrollArea":''</font>
 
  <FONT Color=gray>' ''Raccoglie e memorizza nei due vettori le coordinate del cerchio che si disegnerà sulla "ScrollArea":''</font>
 
   x.Push(Mouse.X + ScrollArea1.ScrollX)
 
   x.Push(Mouse.X + ScrollArea1.ScrollX)
Riga 111: Riga 114:
 
   ScrollArea1.Refresh
 
   ScrollArea1.Refresh
 
    
 
    
  '''End'''
+
  End
  
 
===Salvare in un file immagine quanto disegnato sulla "ScrollArea"===
 
===Salvare in un file immagine quanto disegnato sulla "ScrollArea"===
Riga 122: Riga 125:
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
+
   im = Image.Load("<FONT Color=gray>''/percorso/del/file/immagine''</font>")
+
   im = Image.Load("<FONT Color=darkgreen>''/percorso/del/file/immagine''</font>")
 
    
 
    
 
   ScrollArea1.ResizeContents(im.W, im.H)
 
   ScrollArea1.ResizeContents(im.W, im.H)
Riga 130: Riga 133:
 
   modifica = im.DrawImage(im, 0, 0, im.W, im.H)
 
   modifica = im.DrawImage(im, 0, 0, im.W, im.H)
 
    
 
    
  '''End'''
+
  End
 +
 +
 +
Public Sub ScrollArea1_Draw()
 
   
 
   
'''Public''' Sub ScrollArea1_Draw()
 
 
 
 
   Dim c As Short
 
   Dim c As Short
 
    
 
    
Riga 142: Riga 146:
 
         .Brush = Paint.Color(Color.Red)
 
         .Brush = Paint.Color(Color.Red)
 
         .LineWidth = 3.0
 
         .LineWidth = 3.0
         .Ellipse((x[c] - ScrollArea1.ScrollX) - 5, (y[c] - ScrollArea1.ScrollY) - 5, 9, 9,)
+
         .Ellipse((x[c] - ScrollArea1.ScrollX) - 5, (y[c] - ScrollArea1.ScrollY) - 5, 9, 9)
 
         .Stroke
 
         .Stroke
 
       Next
 
       Next
Riga 160: Riga 164:
 
       Endif
 
       Endif
 
     Endif
 
     Endif
    .End
 
 
   End With
 
   End With
 
 
'''End'''
 
 
   
 
   
  '''Public''' Sub ScrollArea1_MouseDown()
+
  End
 
+
 +
 +
Public Sub ScrollArea1_MouseDown()
 +
 
   x.Push(Mouse.X + ScrollArea1.ScrollX)
 
   x.Push(Mouse.X + ScrollArea1.ScrollX)
 
   y.Push(Mouse.Y + ScrollArea1.ScrollY)
 
   y.Push(Mouse.Y + ScrollArea1.ScrollY)
Riga 173: Riga 177:
 
   ScrollArea1.Refresh
 
   ScrollArea1.Refresh
 
    
 
    
  '''End'''
+
  End

Versione attuale delle 09:30, 20 giu 2024

Per utilizzare un oggetto ScrollArea bisogna tenere presente alcuni accorgimenti:

1) definire con il Metodo ".ResizeContents()" l'area del contenuto che sarà disegnato nella ScrollArea.

2) considerare i valori delle Proprietà ".ScrollX" e ".ScrollY" quando si disegna dentro il gestore dell'Evento "_Draw()" (almeno per le cose che devono spostarsi con le barre di spostamento). Quando la "ScrollArea" disegna, questo Oggetto deve usare le Proprietà ".ScrollX" e ".ScrollY" per conoscere quanto si deve spostare ciò che viene disegnato dentro il gestore dell'Evento "_Draw()". Insomma, mediante le Proprietà ".ScrollX" e ".ScrollY" si definiscono le coordinate in cui si inizia a disegnare nella ScrollArea;

3) non inserire il Metodo ".End()" della Classe Paint, altrimenti verrà sollevato l'errore "No current device ".


Mostriamo un semplice esempio pratico:

Public Sub Form_Open()
 
 With ScrollArea1
   .ResizeContents(ScrollArea1.W, ScrollArea1.H + 200)
   .ScrollBar = Scroll.Vertical
   .Background = Color.Lighter(Color.Yellow)
 End With
  
End

 
Public Sub ScrollArea1_Draw()

 With Paint
   .Brush = Paint.Color(Color.Blue)
   .LineWidth = 3.5
   .Ellipse(50, ScrollArea1.ScrollY, 200, 200)   ' oppure con il valore negativo: (..., - ScrollArea1.ScrollY, ...)
   .Stroke
 End With

End

Disegnare cerchi

In quest'altro esempio, cliccando sulla "ScrollArea", si disegnerà ogni volta un nuovo cerchio, che così apparirà posto al di sopra dell'immagine caricata.

Private im As Image
Private x As Short
Private y As Short


Public Sub Form_Open()

 im = Image.Load("/percorso/del/file/immagine")
 
 ScrollArea1.ResizeContents(im.W, im.H)
 
End


Public Sub ScrollArea1_Draw()

 With Paint
   .DrawImage(im, -ScrollArea1.ScrollX, -ScrollArea1.ScrollY)
   .Brush = Paint.Color(Color.Red)
   .LineWidth = 3.0
   .Translate(-ScrollArea1.ScrollX, -ScrollArea1.ScrollY)
   .Ellipse(x - 5, y - 5, 9, 9) 
   .Stroke
 End With
 
End


Public Sub ScrollArea1_MouseDown()

 x = Mouse.X + ScrollArea1.ScrollX
 y = Mouse.Y + ScrollArea1.ScrollY
 
 ScrollArea1.Refresh
  
End

Disegnare cerchi conservando quelli disegnati in precedenza

Di seguito un codice simile al precedente, ma in questo caso i cerchi disegnati saranno conservati e continueranno ad essere mostrati nel punto dell'immagine ove furono posti.

Private im As Image
Private x As New Short[]
Private y As New Short[]


Public Sub Form_Open()

 im = Image.Load("/percorso/del/file/immagine")
 
 ScrollArea1.ResizeContents(im.W, im.H)
 
End


Public Sub ScrollArea1_Draw()

 Dim c As Short
 
 With Paint
   .DrawImage(im, -ScrollArea1.ScrollX, -ScrollArea1.ScrollY)
   If x.Count > 0 Then
' Tenendo conto delle coordinate precedentemente salvate, disegna di nuovo ogni cerchio già disegnato:
     For c = 0 To x.Max
       .Brush = Paint.Color(Color.Red)
       .LineWidth = 3.0
       .Ellipse((x[c] - ScrollArea1.ScrollX) - 5, (y[c] - ScrollArea1.ScrollY) - 5, 9, 9)
       .Stroke
     Next
   Endif
 End With
 
End


Public Sub ScrollArea1_MouseDown()

' Raccoglie e memorizza nei due vettori le coordinate del cerchio che si disegnerà sulla "ScrollArea":
 x.Push(Mouse.X + ScrollArea1.ScrollX)
 y.Push(Mouse.Y + ScrollArea1.ScrollY)
 
 ScrollArea1.Refresh
  
End

Salvare in un file immagine quanto disegnato sulla "ScrollArea"

Nel seguente esempio, dopo aver caricato un'immagine sulla "ScrollArea", ad ogni clic con il mouse su quest'Oggetto sarà disegnato un cerchio rosso in corrispondenza del suo cursore e l'immagine, così modificata, sarà automaticamente salvata in un file immagine.

Private im As Image
Private modifica As Image
Private x As New Short[]
Private y As New Short[]
Private bo As Boolean


Public Sub Form_Open()

 im = Image.Load("/percorso/del/file/immagine")
 
 ScrollArea1.ResizeContents(im.W, im.H)
 
 modifica = im.DrawImage(im, 0, 0, im.W, im.H)
 
End


Public Sub ScrollArea1_Draw()

 Dim c As Short
 
 With Paint
   .DrawImage(im, -ScrollArea1.ScrollX, -ScrollArea1.ScrollY)
   If x.Count > 0 Then
     For c = 0 To x.Max
       .Brush = Paint.Color(Color.Red)
       .LineWidth = 3.0
       .Ellipse((x[c] - ScrollArea1.ScrollX) - 5, (y[c] - ScrollArea1.ScrollY) - 5, 9, 9)
       .Stroke
     Next
' Consente di accedere al codice seguente solo se si è cliccato sulla "ScrollArea" per creare un cerchio:
     If bo Then
       bo = False ' Impedisce che siano incontrollatamente disegnati cerchi ad ogni "scroll" della "ScrollArea:
       .Begin(modifica)
' Disegna nella immagine, che sarà poi salvata, i cerchi sinora già impostati:
       For c = 0 To x.Max
        .Brush = Paint.Color(Color.Red)
        .LineWidth = 3.0
        .Ellipse(x[c] - 5, y[c] - 5, 10, 10)
        .Stroke
       Next
' Solo dopo il clic del mouse salva immediatamente in un file .png l'immagine come sinora modificata:
       modifica.Save("/tmp/immagine_modificata.png", 100)
     Endif
   Endif
 End With

End


Public Sub ScrollArea1_MouseDown()

 x.Push(Mouse.X + ScrollArea1.ScrollX)
 y.Push(Mouse.Y + ScrollArea1.ScrollY)
 bo = True
 
 ScrollArea1.Refresh
  
End