Usare la ScrollArea: differenze tra le versioni
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| Riga 91: | Riga 91: | ||
.Brush = Paint.Color(Color.Red) | .Brush = Paint.Color(Color.Red) | ||
.LineWidth = 3.0 | .LineWidth = 3.0 | ||
.Ellipse(x[c] - ScrollArea1.ScrollX, y[c] - ScrollArea1.ScrollY, 10, 10) | .Ellipse((x[c] - ScrollArea1.ScrollX) - 5, (y[c] - ScrollArea1.ScrollY) - 5, 10, 10) | ||
.Stroke | .Stroke | ||
Next | Next | ||
Versione delle 12:20, 23 ott 2021
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".
Mostriamo un 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 End With End
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, 10, 10)
.Stroke
.End
End With
End
Public Sub ScrollArea1_MouseDown()
x = Mouse.X + ScrollArea1.ScrollX
y = Mouse.Y + ScrollArea1.ScrollY
ScrollArea1.Refresh
End
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
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, 10, 10)
.Stroke
Next
Endif
.End
End With
End
Public Sub ScrollArea1_MouseDown()
x.Push(Mouse.X + ScrollArea1.ScrollX)
y.Push(Mouse.Y + ScrollArea1.ScrollY)
ScrollArea1.Refresh
End