|
|
|
|
|
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.
|
|
|
|
|