Differenze tra le versioni di "Spostare con il mouse il testo in una DrawingArea"

Da Gambas-it.org - Wikipedia.
Riga 2: Riga 2:
  
  
Il primo codice più semplice e basilare per effettuare uno spstamento nella ''DrawingArea'':
+
Il '''primo''' codice più semplice e basilare per effettuare uno spstamento nella ''DrawingArea'':
 
  Private x As Integer
 
  Private x As Integer
 
  Private y As Integer
 
  Private y As Integer
 
   
 
   
 
   
 
   
  <FONT color=#006400>' ''Gestisce l'evento della pressione del tasto del mouse sulla DrawingArea:''</font>
+
  <FONT color=gray>' ''Gestisce l'evento della pressione del tasto del mouse sulla DrawingArea:''</font>
 
  '''Public''' Sub DrawingArea1_MouseDown()   
 
  '''Public''' Sub DrawingArea1_MouseDown()   
 
    
 
    
   x = Mouse.X  <FONT color=#006400>' ''prende la coordinata x del punto ove si trova il mouse in quel momento''</font>
+
   x = Mouse.X  <FONT color=gray>' ''prende la coordinata x del punto ove si trova il mouse in quel momento''</font>
   y = Mouse.Y  <FONT color=#006400>' ''prende la coordinata y del punto ove si trova il mouse in quel momento''</font>
+
   y = Mouse.Y  <FONT color=gray>' ''prende la coordinata y del punto ove si trova il mouse in quel momento''</font>
 
    
 
    
 
  '''End'''
 
  '''End'''
 
   
 
   
 
   
 
   
  <FONT color=#006400>' ''Gestisce l'evento dello spostamento del mouse sulla DrawingArea''</font>
+
  <FONT color=gray>' ''Gestisce l'evento dello spostamento del mouse sulla DrawingArea''</font>
 
  '''Public''' Sub DrawingArea1_MouseMove()   
 
  '''Public''' Sub DrawingArea1_MouseMove()   
 
    
 
    
Riga 30: Riga 30:
 
    
 
    
 
   With Paint
 
   With Paint
     .Begin(DrawingArea1)    <FONT color=#006400>' ''attiva la DrawingArea''</font>
+
     .Begin(DrawingArea1)    <FONT color=gray>' ''attiva la DrawingArea''</font>
 
     .Font.Size = 22
 
     .Font.Size = 22
     .DrawText("abc", x, y)  <FONT color=#006400>' ''è il testo che andremo a spostare nella DrawingArea''</font>
+
     .DrawText("abc", x, y)  <FONT color=gray>' ''è il testo che andremo a spostare nella DrawingArea''</font>
 
     .End
 
     .End
 
   End With
 
   End With
Riga 39: Riga 39:
  
  
Il secondo codice, più complesso, che consente di spostare il testo senza sbalzi e spostamenti indesiderati rispetto alla posizione del testo e del mouse, può essere estratto dall'esempio allegato dall'utente ''Gianluigi'' del forum ''www.gambas-it.org'' [http://www.gambas-it.org/smf/index.php?topic=3423.0 in questa discussione].
+
 
 +
Il '''secondo''' codice, più complesso, consente di spostare il testo senza sbalzi e spostamenti indesiderati rispetto alla posizione del testo e del mouse:  |[[#Note|1]]|
 +
Private bOk As Boolean      <FONT color=gray>' ''Booleano attivo se puntatore è in area scritta''</font>
 +
Private bDis As Boolean    <FONT color=gray>' ''Booleano attivo se dati provengono da Form_Open''</font>
 +
Private xIn As Integer      <FONT color=gray>' ''Memorizza la posizione del testo al momento che agiamo sul tasto sinistro del mouse''</font>
 +
Private yIn As Integer      <FONT color=gray>' ''Idem''</font>
 +
Private xDif As Integer    <FONT color=gray>' ''Memorizza la distanza tra la posizione del puntatore e quella del testo''</font>
 +
Private yDif As Integer    <FONT color=gray>' ''Idem''</font>
 +
Private x As Integer        <FONT color=gray>' ''Memorizza la posizione del puntatore''</font>
 +
Private y As Integer        <FONT color=gray>' ''Idem''</font>
 +
Private iAlt As Integer    <FONT color=gray>' ''Memorizza l'altezza del testo''</font>
 +
Private iLarg As Integer    <FONT color=gray>' ''Memorizza la larghezza del testo''</font>
 +
Private sTesto As String    <FONT color=gray>' ''Memorizza la scritta del testo''</font>
 +
 +
   
 +
'''Public''' Sub Form_Open() 
 +
 +
<FONT color=gray>' ''Inserisce il testo al centro dell'area di disegno dando le giuste indicazioni a DrawingArea1_Draw:''</font>
 +
  sTesto = "Testo di prova" 
 +
  bDis = True 
 +
  bOk = True 
 +
  DrawingArea1.Refresh 
 +
     
 +
'''End'''
 +
     
 +
     
 +
'''Public''' Sub DrawingArea1_MouseDown() 
 +
     
 +
<FONT color=gray>' ''Quando si preme il tasto sinistro passa la posizione del mouse alle variabili x e y:''</font>
 +
  x = Mouse.X   
 +
  y = Mouse.Y 
 +
<FONT color=gray>' ''Ottiene la differenza fra le posizioni x e y del testo rispetto a quelle del mouse:''</font>
 +
  xDif = xIn - x   
 +
  yDif = yIn - y 
 +
<FONT color=gray>' ''Si accerta che il booleano OK sia su false:''</font>
 +
  bOk = False 
 +
<FONT color=gray>' ''Se il mouse si trova nell'area della scritta cambia aspetto e porta il booleano OK a vero:''</font>
 +
  If x >= xIn And x <= (xIn + iLarg) Then 
 +
    If y <= yIn And y >= (yIn - iAlt) Then       
 +
      DrawingArea1.Mouse = Mouse.SizeAll 
 +
      bOk = True         
 +
    Endif 
 +
  Endif 
 +
     
 +
'''End'''
 +
 +
 +
'''Public''' Sub DrawingArea1_MouseMove() 
 +
     
 +
<FONT color=gray>' ''Se il booleano OK è vero passa alle variabili la posizione e attiva il disegno:''</font>
 +
  If bOk Then 
 +
    x = Mouse.X   
 +
    y = Mouse.Y   
 +
    DrawingArea1.Refresh 
 +
  Endif 
 +
     
 +
     
 +
'''End''' 
 +
     
 +
     
 +
'''Public''' Sub DrawingArea1_Draw() 
 +
     
 +
<FONT color=gray>' ''Se il booleano OK è vero, passa a controllare il booleano eventualmente attivato da "Form_Open".'' 
 +
' ''Se quest 'ultimo è vero crea il testo scritto nella textbox al centro dell'area di disegno,''
 +
' ''altrimenti disegna il testo sulle indicazioni del mouse:''</font> 
 +
  If bOk Then         
 +
    With Paint 
 +
      .Begin(DrawingArea1) 
 +
      .Font.Size = ridimensiona(22) 
 +
      If bDis Then 
 +
        iLarg = .Font.RichTextWidth(sTesto) 
 +
        x = (DrawingArea1.W / 2) - (iLarg / 2) 
 +
        xIn = x 
 +
        iAlt = .Font.RichTextHeight(sTesto) 
 +
        y = (DrawingArea1.H / 2) + (iAlt / 2) 
 +
        yIn = y 
 +
        bDis = False   
 +
      Endif       
 +
      .DrawText(sTesto, x + xDif, y + yDif)       
 +
      .End 
 +
    End With     
 +
  Endif 
 +
     
 +
'''End'''
 +
     
 +
 +
'''Public''' Sub DrawingArea1_MouseUp() 
 +
     
 +
<FONT color=gray>' ''Quando si rilascia il bottone del mouse cambia l'aspetto del mouse a quello di default''
 +
' ''e memorizza nelle variabili la posizione iniziale della scritta per essere pronti al nuovo trascinamento:''</font>
 +
  DrawingArea1.Mouse = Mouse.Default 
 +
  xIn = x + xDif 
 +
  yIn = y + yDif 
 +
     
 +
'''End''' 
 +
     
 +
     
 +
'''Public''' Sub ridimensiona(size As Float) As Float 
 +
     
 +
<FONT color=gray>' ''Proporziona il testo nell'area di disegno:''</font>
 +
  If Paint.Device = DrawingArea1 Then 
 +
    Return (size * 0.744) 
 +
  Else 
 +
    Return size 
 +
  Endif   
 +
     
 +
'''End'''
 +
 
 +
 
 +
 
 +
 
 +
=Note=
 +
[1] Il codice è stato realizzato dall'utente [http://www.gambas-it.org/smf/index.php?action=profile;u=1249''Gianluigi''] del forum ''www.gambas-it.org''.

Versione delle 08:37, 1 giu 2014

Mostreremo due codici per spostare con il mouse un testo all'interno di una DrawingArea.


Il primo codice più semplice e basilare per effettuare uno spstamento nella DrawingArea:

Private x As Integer
Private y As Integer


' Gestisce l'evento della pressione del tasto del mouse sulla DrawingArea:
Public Sub DrawingArea1_MouseDown()   
 
  x = Mouse.X   ' prende la coordinata x del punto ove si trova il mouse in quel momento
  y = Mouse.Y   ' prende la coordinata y del punto ove si trova il mouse in quel momento
 
End


' Gestisce l'evento dello spostamento del mouse sulla DrawingArea
Public Sub DrawingArea1_MouseMove()   
 
  x = Mouse.X
  y = Mouse.Y
 
End


Public Sub DrawingArea1_Draw()
 
 DrawingArea1.Refresh
  
 With Paint
   .Begin(DrawingArea1)     ' attiva la DrawingArea
   .Font.Size = 22
   .DrawText("abc", x, y)   ' è il testo che andremo a spostare nella DrawingArea
   .End
 End With
   
End


Il secondo codice, più complesso, consente di spostare il testo senza sbalzi e spostamenti indesiderati rispetto alla posizione del testo e del mouse: |1|

Private bOk As Boolean      ' Booleano attivo se puntatore è in area scritta
Private bDis As Boolean     ' Booleano attivo se dati provengono da Form_Open
Private xIn As Integer      ' Memorizza la posizione del testo al momento che agiamo sul tasto sinistro del mouse
Private yIn As Integer      ' Idem
Private xDif As Integer     ' Memorizza la distanza tra la posizione del puntatore e quella del testo
Private yDif As Integer     ' Idem
Private x As Integer        ' Memorizza la posizione del puntatore
Private y As Integer        ' Idem
Private iAlt As Integer     ' Memorizza l'altezza del testo
Private iLarg As Integer    ' Memorizza la larghezza del testo
Private sTesto As String    ' Memorizza la scritta del testo

    
Public Sub Form_Open()  

' Inserisce il testo al centro dell'area di disegno dando le giuste indicazioni a DrawingArea1_Draw:
 sTesto = "Testo di prova"  
 bDis = True  
 bOk = True  
 DrawingArea1.Refresh  
      
End
     
     
Public Sub DrawingArea1_MouseDown()  
      
' Quando si preme il tasto sinistro passa la posizione del mouse alle variabili x e y:
 x = Mouse.X    
 y = Mouse.Y   
' Ottiene la differenza fra le posizioni x e y del testo rispetto a quelle del mouse:
 xDif = xIn - x    
 yDif = yIn - y  
' Si accerta che il booleano OK sia su false:
 bOk = False  
' Se il mouse si trova nell'area della scritta cambia aspetto e porta il booleano OK a vero:
 If x >= xIn And x <= (xIn + iLarg) Then  
   If y <= yIn And y >= (yIn - iAlt) Then         
     DrawingArea1.Mouse = Mouse.SizeAll  
     bOk = True          
   Endif  
 Endif  
      
End


Public Sub DrawingArea1_MouseMove()  
     
' Se il booleano OK è vero passa alle variabili la posizione e attiva il disegno:
 If bOk Then  
   x = Mouse.X    
   y = Mouse.Y    
   DrawingArea1.Refresh  
 Endif  
      
     
End  
     
     
Public Sub DrawingArea1_Draw()  
     
' Se il booleano OK è vero, passa a controllare il booleano eventualmente attivato da "Form_Open".   
' Se quest 'ultimo è vero crea il testo scritto nella textbox al centro dell'area di disegno,
' altrimenti disegna il testo sulle indicazioni del mouse:  
 If bOk Then           
   With Paint  
     .Begin(DrawingArea1)  
     .Font.Size = ridimensiona(22)  
     If bDis Then  
       iLarg = .Font.RichTextWidth(sTesto)  
       x = (DrawingArea1.W / 2) - (iLarg / 2)  
       xIn = x  
       iAlt = .Font.RichTextHeight(sTesto)  
       y = (DrawingArea1.H / 2) + (iAlt / 2)  
       yIn = y  
       bDis = False     
     Endif        
     .DrawText(sTesto, x + xDif, y + yDif)        
     .End  
   End With       
 Endif  
      
End
     

Public Sub DrawingArea1_MouseUp()  
      
' Quando si rilascia il bottone del mouse cambia l'aspetto del mouse a quello di default
' e memorizza nelle variabili la posizione iniziale della scritta per essere pronti al nuovo trascinamento:
 DrawingArea1.Mouse = Mouse.Default  
 xIn = x + xDif  
 yIn = y + yDif  
      
End  
     
     
Public Sub ridimensiona(size As Float) As Float  
     
' Proporziona il testo nell'area di disegno:
 If Paint.Device = DrawingArea1 Then  
   Return (size * 0.744)  
 Else  
   Return size  
 Endif    
     
End



Note

[1] Il codice è stato realizzato dall'utente Gianluigi del forum www.gambas-it.org.