|
|
|
|
|
Dicas
|
|
Visual Basic (ActiveX/Controles/DLL)
|
|
|
Título da Dica: Colocando ScrollBar Horizontal num ListBox
|
|
|
|
Postada em 14/8/2000 por Webmaster
webmaster@vbweb.com.br
'Coloque o seguinte código num módulo: Option Explicit
Private Const LB_GETHORIZONTALEXTENT As Long = &H193 Private Const LB_SETHORIZONTALEXTENT As Long = &H194 Private Const DT_CALCRECT As Long = &H400 Private Const SM_CXVSCROLL As Long = 2
Public Type Rect Left As Long Top As Long Right As Long Bottom As Long End Type
Private Declare Function DrawText Lib "user32" _ Alias "DrawTextA" (ByVal hDC As Long, _ ByVal lpStr As String, ByVal nCount As _ Long, lpRect As Rect, ByVal wFormat As _ Long) As Long Private Declare Function GetSystemMetrics Lib _ "user32" (ByVal nIndex 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
Public Function AdicionaItem(ByRef ctl As Control, _ ByVal sNewItem As String, Optional ByVal _ dwNewItemData As Variant) As Long Dim RC As Rect Dim newWidth As Long Dim currWidth As Long Dim sysScrollWidth As Long Dim OldFont As StdFont If ctl.Tag <> "" Then currWidth = CLng(ctl.Tag) End If Set OldFont = ctl.Parent.Font Set ctl.Parent.Font = ctl.Font Call DrawText(ctl.Parent.hDC, sNewItem, -1&, _ RC, DT_CALCRECT) Set ctl.Parent.Font = OldFont sysScrollWidth = GetSystemMetrics(SM_CXVSCROLL) newWidth = RC.Right + sysScrollWidth
If newWidth > currWidth Then Call SendMessage(ctl.hwnd, _ LB_SETHORIZONTALEXTENT, newWidth, _ ByVal 0&) ctl.Tag = newWidth End If ctl.AddItem sNewItem If Not IsMissing(dwNewItemData) Then If IsNumeric(dwNewItemData) Then ctl.ItemData(ctl.newIndex) = dwNewItemData End If End If AdicionaItem = ctl.newIndex End Function
'No form: Private Sub Form_Load() 'Detalhe, NÃO use o List1.AddItem!!! 'Veja como adiciona algumas linhas... Call AdicionaItem(List1, "Coloque o texto que será adicionado aqui") Call AdicionaItem(List1, "Não se preocupe se o texto for muito grande") Call AdicionaItem(List1, "Ele será exibido, seja como for!!!") End Sub Uma dica legal é usar a propriedade TopIndex. Veja o exemplo:
Dim NovoIndex As Long NovoIndex = AdicionaItem(List1, "Texto") List1.TopIndex = NovoIndex O resultado isso é que ele irá posicionar a barra de rolagem vertical da ListBox para que este item recem-adicionado possa ficar visível..
|
|
|
|
|