Modificare la dimensione di un Oggetto grafico con il mouse impostando i punti di contatto intorno al suo perimetro
Da Gambas-it.org - Wikipedia.
Per ridimensionare un Controllo con il mouse, è sufficiente con opportuno codice operare in movimento con il puntatore del mouse sull'Oggetto grafico medesimo. [nota 1]
In questa pagina mostreremo un codice, per disegnare lungo il perimetro di un Controllo gli otto consueti punti quadrati di contatto, e per operare il ridimensionamento del predetto Controllo agendo con il puntatore del mouse su tali punti di contatto.
Nell'esempio di codice seguente si opererà, come Oggetto grafico, su di un Panel.
Private Panel1 As Panel Private id As New Integer[] Private rrtt As New Panel[] Private y As Short Private x As Short Public Sub Form_Open() Dim rtn As Panel With Panel1 = New Panel(Me) As "Panel1" .W = Me.W * 0.2 .H = Me.H * 0.1 .X = (Me.W * 0.5) - (Panel1.W * 0.5) .Y = (Me.H * 0.5) - (Panel1.H * 0.5) .Border = Border.Plain End With For b As Byte = 0 To 2 For n As Byte = 0 To 2 If (b And n) == 1 Then Continue With rtn = New Panel(Me) As "Rectangulum" .X = (Panel1.X + ((Panel1.W * 0.5) * n)) - 3 .Y = (Panel1.Y + ((Panel1.H * 0.5) * b)) - 3 .W = 7 .H = 7 .Background = Color.SoftBlue id.Push(.Id) End With rrtt.Push(rtn) Next Next End Public Sub Rectangulum_MouseDown() Y = Panel1.Y x = Panel1.x End Public Sub Rectangulum_MouseMove() With Last .X = .X + Mouse.X - Mouse.StartX + 3 .Y = .Y + Mouse.Y - Mouse.StartY + 3 End With Select Case Last.Id Case id[0] With Panel1 .X = Last.X .W = (x + .W) - Last.X x = .X .Y = Last.Y .H = (y + .H) - Last.Y y = .Y End With Last.Y -= 3 Last.X -= 3 With rrtt[1] .X = Panel1.X + (Panel1.W * 0.5) - 3 .Y = Panel1.Y - 3 End With With rrtt[2] .Y = Panel1.Y - 3 End With With rrtt[3] .X = Panel1.X - 3 .Y = Panel1.Y + (Panel1.H * 0.5) - 3 End With With rrtt[4] .Y = Panel1.Y + (Panel1.H * 0.5) - 3 End With With rrtt[5] .X = Panel1.X - 3 End With With rrtt[6] .X = Panel1.X + (Panel1.W * 0.5) - 3 End With Case id[1] With Panel1 .Y = Last.Y .H = (y + .H) - Last.Y y = .Y End With Last.Y -= 3 Last.X = Panel1.X + (Panel1.W * 0.5) - 3 With rrtt[0] .Y = Panel1.Y - 3 End With With rrtt[2] .Y = Panel1.Y - 3 End With With rrtt[3] .Y = Panel1.Y + (Panel1.H * 0.5) - 3 End With With rrtt[4] .Y = Panel1.Y + (Panel1.H * 0.5) - 3 End With Case id[2] With Panel1 .W = Last.X - x x = .X .Y = Last.Y .H = (y + .H) - Last.Y y = .Y End With Last.X -= 3 Last.Y -= 3 With rrtt[0] .Y = Panel1.Y - 3 End With With rrtt[1] .X = Panel1.X + (Panel1.W * 0.5) - 3 .Y = Panel1.Y - 3 End With With rrtt[3] .Y = Panel1.Y + (Panel1.H * 0.5) - 3 End With With rrtt[4] .X = Panel1.X + Panel1.W - 3 .Y = Panel1.Y + (Panel1.H * 0.5) - 3 End With With rrtt[6] .X = Panel1.X + (Panel1.W * 0.5) - 3 End With With rrtt[7] .X = Panel1.X + Panel1.W - 3 End With Case id[3] With Panel1 .X = Last.X .W = (x + .W) - Last.X x = .X End With Last.Y = Panel1.Y + (Panel1.H * 0.5) - 3 Last.X = Panel1.X - 3 With rrtt[0] .X = Panel1.X - 3 End With With rrtt[1] .X = Panel1.X + (Panel1.W * 0.5) - 3 End With With rrtt[5] .X = Panel1.X - 3 End With With rrtt[6] .X = Panel1.X + (Panel1.W * 0.5) - 3 End With Case id[4] With Panel1 .W = Last.X - x x = .X End With Last.X -= 4 Last.Y = Panel1.Y + (Panel1.H * 0.5) - 3 With rrtt[1] .X = Panel1.X + (Panel1.W * 0.5) - 3 End With With rrtt[2] .X = Panel1.X + Panel1.W - 3 End With With rrtt[6] .X = Panel1.X + (Panel1.W * 0.5) - 3 End With With rrtt[7] .X = Panel1.X + Panel1.W - 3 End With Case id[5] With Panel1 .X = Last.X .W = (x + .W) - Last.X x = .X .H = Last.Y - y y = .Y End With Last.X -= 3 Last.Y = Panel1.Y + Panel1.H - 3 With rrtt[0] .X = Panel1.X - 3 End With With rrtt[1] .X = Panel1.X + (Panel1.W * 0.5) - 3 End With With rrtt[3] .X = Panel1.X - 3 .Y = Panel1.Y + (Panel1.H * 0.5) - 3 End With With rrtt[4] .Y = Panel1.Y + (Panel1.H * 0.5) - 3 End With With rrtt[6] .X = Panel1.X + (Panel1.W * 0.5) - 3 .Y = Panel1.Y + Panel1.H - 3 End With With rrtt[7] .Y = Panel1.Y + Panel1.H - 3 End With Case id[6] With Panel1 .H = Last.Y - y y = .Y End With Last.Y -= 3 Last.X = Panel1.X + (Panel1.W * 0.5) - 3 With rrtt[3] .Y = Panel1.Y + (Panel1.H * 0.5) - 3 End With With rrtt[4] .Y = Panel1.Y + (Panel1.H * 0.5) - 3 End With With rrtt[5] .Y = Panel1.Y + Panel1.H - 3 End With With rrtt[7] .Y = Panel1.Y + Panel1.H - 3 End With Case id[7] With Panel1 .W = Last.X - x x = .X .H = Last.Y - y y = .Y End With Last.X = Panel1.X + Panel1.W - 4 Last.Y = Panel1.Y + Panel1.H - 4 With rrtt[1] .X = Panel1.X + (Panel1.W * 0.5) - 3 End With With rrtt[2] .X = Panel1.X + Panel1.W - 3 End With With rrtt[3] .Y = Panel1.Y + (Panel1.H * 0.5) - 3 End With With rrtt[4] .X = Panel1.X + Panel1.W - 3 .Y = Panel1.Y + (Panel1.H * 0.5) - 3 End With With rrtt[5] .Y = Panel1.Y + Panel1.H - 3 End With With rrtt[6] .X = Panel1.X + (Panel1.W * 0.5) - 3 .Y = Panel1.Y + Panel1.H - 3 End With End Select End
Note
[1] Al riguardo si vedano le seguenti pagine: