sabato 29 ottobre 2011

[VB6] Gestire Controlli Image a Runtime con Drag & Drop

Descrizione :
Una tecnica interessante per gestire creazione, eliminazione, spostamento di controlli Image a runtime.

+ Articolo :

--> Form di Test :
Basta avere una Form VB6 abbastanza grande, e poi aggiungere questi controlli :

- 2 Controlli Image ( che si chiameranno "Image1" e "Image2" )
su Image1 e Image2 è necessario impostare la Proprietà DragMode=1-Automatic.

- 1 altro Controllo Image ( che si chiamerà "IMG" )
su IMG è necessario impostare le Proprietà Index=0 e Visible=False.

Image1 e Image2 sono immagini "sorgenti", ossia stanno in posizione fissa rispetto alla Form, e non possono essere eliminate.
Le immagini "derivate" si possono creare semplicemente draggando sulla Form le rispettive Image sorgenti.
Le immagini derivate possono essere spostate successivamente, ed eliminate ( tasto destro del mouse )...

--> Il codice Form :

Private mouseX As Single
Private mouseY As Single
Private indiceIMG As Integer
 
Private Function nuovaImage() As Image
 
    Dim i As Integer
    i = IMG.Count
    Load IMG(i)
    IMG(i).Visible = True
 
    Set nuovaImage = IMG(i)
 
End Function
 
Private Sub Form_Load()
 
    Image1.Picture = LoadPicture("C:\Test.bmp")
    Image2.Picture = LoadPicture("C:\Test.bmp")
 
End Sub
 
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
 
    If TypeName(Source) = "Image" Then
 
        If Source.Tag = "IMG" Then
            IMG(indiceIMG).Left = X - mouseX
            IMG(indiceIMG).Top = Y - mouseY
        Else
            Dim nI As Image
            Set nI = nuovaImage
            With nI
                .Picture = Source.Picture
                .Stretch = True
                .Width = Source.Width
                .Height = Source.Height
                .Left = X - mouseX
                .Top = Y - mouseY
                .Tag = "IMG"
                .DragMode = DragModeConstants.vbAutomatic
                '...
                '...
            End With
        End If
 
    End If
 
End Sub
 
Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
 
    mouseX = X
    mouseY = Y
 
End Sub
 
Private Sub Image2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
 
    mouseX = X
    mouseY = Y
 
End Sub
 
Private Sub IMG_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
 
    If Button = vbRightButton Then Unload IMG(Index)
 
End Sub
 
Private Sub IMG_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
 
    mouseX = X
    mouseY = Y
    indiceIMG = Index
 
End Sub

1. Con un Click destro elimino una qualsiasi Image derivata ( ma non una Image sorgente ).

2. Con il pulsante sinistro invece possiamo spostare anche le Image derivate ( che in questo caso non verranno duplicate ), per correggere errori di posizionamento.


+ Fine Articolo.

Un Click su "Mi Piace" è il modo migliore per ringraziare l'autore di questo articolo.



0 commenti:

Posta un commento

Favorites Twitter Facebook Delicious Digg Stumbleupon More

 
Design by Free WordPress Themes Modificato da MarcoGG