Differenze tra le versioni di "Spostare un Form con il mouse sulla Scrivania"

Da Gambas-it.org - Wikipedia.
 
(4 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Per spostare lungo la superficie della Scrivania (''Desktop'') con il mouse un "Form", ossia una finestra di un programma Gambas, si dovrà fare ovviamente riferimento allo schermo.
+
Se si deve spostare sulla superficie della Scrivania (''Desktop'' ) un "Form" (ossia una finestra di un programma Gambas), agendo però con il mouse all'interno di tale ''Form'' (e non come di consueto sul margine superiore del suo titolo), si dovrà fare ovviamente riferimento allo schermo e si potrà adottare questo semplice codice:
<BR>Si potrà adottare questo semplice codice:
+
Public Sub Form_MouseMove()
 +
 +
  Me.Move(Mouse.ScreenX - Mouse.StartX, Mouse.ScreenY - Mouse.StartY)
 +
 +
End
 +
Questo codice è valido anche se il ''Form'' è privo di bordi (e quindi privo anche del margine superiore del suo titolo), ossia se alla Proprietà ".Border" del ''Form'' sia stata assegnata la Costante per non disegnare i bordi del ''Form'':
 +
Me.Border = Border.None
 +
 
 +
 
 +
===Spostare il Form agendo con il mouse su un suo Oggetto grafico "Figlio"===
 +
Se invece il ''Form'' dovrà essere spostato agendo con il mouse su un Oggetto grafico "Figlio" del ''Form'' (ad esempio un ''Panel'' posto sul ''Form'' predetto), allora si potrà utilizzare il seguente codice:
 +
Private Panel1 As Panel
 
  Private x As Short
 
  Private x As Short
 
  Private y As Short
 
  Private y As Short
 
   
 
   
 +
'''Public''' Sub Form_Open()
 
   
 
   
'''Public''' Sub Form_MouseDown()
+
  With Panel1 = New Panel(Me) As "Panel1"
 +
    .X = 0
 +
    .Y = 0
 +
    .W = Me.W
 +
    .H = Me.H * 0.2
 +
    .Background = Color.SoftOrange
 +
  End With
 
   
 
   
   x = Mouse.X
+
'''End'''
   y = Mouse.Y
+
 +
'''Public''' Sub Panel1_MouseDown()
 +
 +
   x = Mouse.ScreenX '''- Me.X'''
 +
   y = Mouse.ScreenY '''- Me.Y'''
 
   
 
   
 
  '''End'''
 
  '''End'''
 
   
 
   
  '''Public''' Sub Form_MouseMove()
+
  '''Public''' Sub Panel1_MouseMove()
 
   
 
   
 
   Me.Move(Mouse.ScreenX - x, Mouse.ScreenY - y)
 
   Me.Move(Mouse.ScreenX - x, Mouse.ScreenY - y)
 
   
 
   
 
  '''End'''
 
  '''End'''
Questo codice è valido anche se il ''Form'' è privo di bordi, ossia se alla Proprietà ".Border" del ''Form'' sia stata assegnata la Costante per non disegnare i bordi del ''Form'':
+
Pure in questo caso il codice è valido, anche se il ''Form'' è privo di bordi (e quindi privo anche del margine superiore del suo titolo).
Me.Border = Border.None
 

Versione attuale delle 10:20, 13 giu 2023

Se si deve spostare sulla superficie della Scrivania (Desktop ) un "Form" (ossia una finestra di un programma Gambas), agendo però con il mouse all'interno di tale Form (e non come di consueto sul margine superiore del suo titolo), si dovrà fare ovviamente riferimento allo schermo e si potrà adottare questo semplice codice:

Public Sub Form_MouseMove()

 Me.Move(Mouse.ScreenX - Mouse.StartX, Mouse.ScreenY - Mouse.StartY)

End

Questo codice è valido anche se il Form è privo di bordi (e quindi privo anche del margine superiore del suo titolo), ossia se alla Proprietà ".Border" del Form sia stata assegnata la Costante per non disegnare i bordi del Form:

Me.Border = Border.None


Spostare il Form agendo con il mouse su un suo Oggetto grafico "Figlio"

Se invece il Form dovrà essere spostato agendo con il mouse su un Oggetto grafico "Figlio" del Form (ad esempio un Panel posto sul Form predetto), allora si potrà utilizzare il seguente codice:

Private Panel1 As Panel
Private x As Short
Private y As Short

Public Sub Form_Open()

 With Panel1 = New Panel(Me) As "Panel1"
   .X = 0
   .Y = 0
   .W = Me.W
   .H = Me.H * 0.2
   .Background = Color.SoftOrange
 End With

End

Public Sub Panel1_MouseDown()

 x = Mouse.ScreenX - Me.X
 y = Mouse.ScreenY - Me.Y

End

Public Sub Panel1_MouseMove()

 Me.Move(Mouse.ScreenX - x, Mouse.ScreenY - y)

End

Pure in questo caso il codice è valido, anche se il Form è privo di bordi (e quindi privo anche del margine superiore del suo titolo).