USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Dicas

  Visual Basic    (ActiveX/Controles/DLL)

Título da Dica:  Que tal poder editar os itens de um ListBox ?
Postada em 7/7/2003 por Ronaldão         
Na verdade a coisa é mais simples de que pensamos e , não é necessário muito código para por as coisas para funcionar. Apenas uma API aqui outra ali e pronto.

Vamos mostrar como permitir a edição nos itens de uma caixa de Listagem - ListBox. Vamos começar:

- Inicie um novo projeto no VB e no formulário padrão insira uma caixa de listagem , uma caixa de texto e duas etiquetas ( Labels ):



Agora insira o seguinte código no formulário:

Option Explicit
Private Type RECT
   Left As Long
   Top As Long
   Right As Long
   Bottom As Long
End Type

Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const LB_GETITEMRECT = &H198
Private Const EC_LEFTMARGIN& = &H1
Private Const EM_SETMARGINS& = &HD3


-------------------------------------------------------------
Private Sub Form_Load()
  Dim x As Long
  For x = 0 To 10
      List1.AddItem "Item Número : " & CStr(x)
  Next x
  SetParent Text1.hwnd, List1.hwnd
  SendMessage Text1.hwnd, EM_SETMARGINS, EC_LEFTMARGIN, ByVal 1
  Text1.BorderStyle = 0
End Sub


-------------------------------------------------------------
Private Sub List1_DblClick()
  Dim rRect As RECT
  Dim lIndex As Long
  Dim lConv As Long
  lConv = Screen.TwipsPerPixelX
  lIndex = List1.ListIndex
  SendMessage List1.hwnd, LB_GETITEMRECT, lIndex, ByVal rRect
  Text1.Move rRect.Left * lConv, rRect.Top * lConv, rRect.Right * lConv, ((rRect.Bottom - rRect.Top) * lConv)
  Text1.Text = List1.List(lIndex)
  Text1.SelStart = 0
  Text1.SelLength = Len(Text1)
  Text1.Visible = True
  Text1.SetFocus
End Sub


-------------------------------------------------------------
Private Sub List1_GotFocus()
  Text1.Visible = False
  List1.Refresh
End Sub


-------------------------------------------------------------
Private Sub List1_Scroll()
  Text1.Visible = False
  List1.Refresh
End Sub


-------------------------------------------------------------
Private Sub Text1_KeyPress(KeyAscii As Integer)
  If KeyAscii = 13 Then
      List1.List(List1.ListIndex) = Text1.Text
      Text1.Visible = False
      List1.Refresh
  End If
End Sub


-------------------------------------------------------------
Private Sub Text1_LostFocus()
  Text1.Visible = False
  List1.Refresh
End Sub



Como Funciona ?
Quando você clica duas vezes sobre um item da caixa de listagem a posição RECT para o item selecionado é encontrada , então a caixa de texto que esta invisível é movida e cobre o item da caixa de listagem.

Você pode então informar os dados na caixa de texto e quando terminar pressionar a tecla ENTER . Feito isto o texto do item é alterado e a caixa de texto é tornada invisível novamente.
 


CyberWEB Network Ltda.    © Copyright 2000-2021   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página