VB6 - Arrastar e Soltar , é só começar...


Você já precisou arrastar elementos de um controle usando o mouse e movê-los para outro controle ? O exemplo clássico é mover elementos de um controle Listbox - Listbox1- para outro - Listbox2 - usando os eventos OLEDragDrop e OLeStartDrop

O evento OLEDragDrop ocorre quando um arrastamos um componente entre dois controles somente quando a propriedade OLEDropMode é definida com o valor 1 - Manual.

A sintaxe é a seguinte:

Private Sub object_OLEDragDrop(data As DataObject, effect As Long, button As Integer, shift As Integer, x As Single, y As Single)

Parte Descrição
Object Um objeto ao qual o evento se aplica.
Data Um objeto DataObject que contém formatos que o componente origem irá fornecer.
Effect Um valor initeiro longo definido pelo componente de destino que identifica a ação que foi executada permitindo assim a origem tomar a ação apropriada se o componente foi movido. Os valores possíveis são:
Constante Valor
VbDropEffectNone 0
VbDropEffectCopy 1
VbDropEffectMove 2
VbDropEffectScroll -2147483648
Button Um inteiro que indica o estado do campo bit do mouse quando foi pressionado. O botão esquerdo é 0 , o direito 1 e o do meio é 2. inn
Shift Um inteiro que indica o estado do campo bit para o estado das teclas shift, ctrl, e alt quando elas são soltas .
x,y Um numero que indica o localização atual do ponteiro do mouse.

O evento OLEStartDrag ocorre quando o método OLEDrag do componente é executado ou quando uma operação OLE drag/drop ocorre.

Da teoria á prática

Chega de papo e vamos ao trabalho:

1- Inicie o Visual Basic e insira dois controles ListBox no formulário padrão. Vamos usar os nomes padrões dos controles : ListBox1 e ListBox2.

2- Nosso objetivo e arrastar elementos de um listbox e movê-los para o outro controle Listbox. O código será idêntico para os dois controles:

3-Código do evento Load do formulário : Vamos preencher o Listbox1 e definir as propriedades OLEDropMode de cada controle com valor igual a 1 - Manual.

Private Sub Form_Load()
  'Preenche a lista
  List1.AddItem "Macoratti"
  List1.AddItem "Jefferson"
  List1.AddItem "Jessica"    
  List1.AddItem "Janice"
  List1.AddItem "Miriam"
  List1.OLEDropMode = 1
  List2.OLEDropMode = 1
End Sub

4- Insira o código a seguir no evento MouseDown de Listbox1:

' codigo para gerenciar elementos da listbox1 para listbox2
Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
List1.OLEDrag ' inicia o arrasto
End Sub

5-Insira o código a seguir no evento OLEStartDrag de Listbox1:

Private Sub List1_OLEStartDrag(Data As DataObject, AllowedEffects As Long)
' Permite somente mover
AllowedEffects = vbDropEffectMove
' atribui a selecao em listbox ao DataObject
Data.SetData List1
End Sub

6-Agora por último o evento OLEDragDrop de ListBox2 :

Private Sub List2_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, _ 
Shift As Integer, X As Single, Y As Single)
  Dim strList As String
  ' verifica o formato de DataObject
  If Not Data.GetFormat(vbCFText) Then Exit Sub
  ' devolve o texto de DataObject
  strList = Data.GetData(vbCFText)
  ' se o item não arrastou a ele proprio
  If Not strList = List2.Text Then
    List2.AddItem strList
    'Remove o item da listbox
   List1.RemoveItem List1.ListIndex
  End If
End Sub

A seguir o código que torna possível a mesma operação de ListBox2 para ListBox1:

Private Sub List2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
   List2.OLEDrag ' inicia o arrasto
End Sub

Private Sub List2_OLEStartDrag(Data As DataObject, AllowedEffects As Long)
  AllowedEffects = vbDropEffectMove
  Data.SetData List2
End Sub

Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer,_
Shift As Integer, X As Single, Y As Single)
Dim strList As String
 ' verifica o formato de DataObject
 If Not Data.GetFormat(vbCFText) Then Exit Sub
 ' devolve o texto de DataObject
 strList = Data.GetData(vbCFText)
 If Not strList = List1.Text Then
 List1.AddItem strList
 'Remove o item da listbox
 List2.RemoveItem List2.ListIndex
End If
End Sub

Execute o projeto e veja o resultado: Agora e Drag and Drop...

Básico... Até mais...

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti