Newsgroup: it.comp.lang.visual-basic
Titolo: Come leggere l'intera riga...?

Scusatemi, qualcuno sa come fare per far si che se una riga inserita in un
listbox supera i margini mi scriva i tre punti (...) e successivamente al
passaggio del mouse mi mostri l'intera riga come in uno tooltiptext?
In pratica quello che accade in Outlook Express per il campo oggetto .
Grazie in anticipo
David
--
E-mail: 
d...@iol.it

Natale wrote in message ...

Usa invecie di una listbox una ListView
Ciao

 In pratica quello che accade in Outlook Express per il campo oggetto .
Mi dispiace, non lo so, ma ti propongo un modo fatto in casa, come si faceva
una volta... manca la temporizzazione e non ho parametrizzato la larghezza
della barra di scorrimento.
Poni sul Form una ListBox e una PictureBox con all'interno una Label.
Option Explicit
Const sFRM_3DOTS = " ..."
Private s_Array(0 To 3) As String
Private Sub DoMouseMove( _
  obj As Object _
, intButton As Integer _
, intShift As Integer _
, sngX As Single _
, sngY As Single _
)
Static i_Prev As Integer
Dim i_Curr    As Integer
  If obj Is List1 Then
    With List1
      Let i_Curr = .TopIndex + (sngY \ Label1.Height)
      If i_Curr <> i_Prev Then
        If .List(i_Curr) Like "*" & sFRM_3DOTS Then
          With Label1
            Let .Caption = s_Array(i_Curr)
            Call .Refresh
            With Picture1
              Call .Move( _
                  List1.Left + sngX _
                + 4 * Screen.TwipsPerPixelX _
                , List1.Top + sngY - Label1.Height _
                - 4 * Screen.TwipsPerPixelY _
                , (.Width - .ScaleWidth) + Label1.Width)
              Let .Visible = True
            End With
          End With
        Else
          Let Picture1.Visible = False
        End If
        Let i_Prev = i_Curr
      End If
    End With
  Else
    Let Picture1.Visible = False
    Let i_Prev = -1
  End If
End Sub
Private Function strShort( _
ByVal strText As String _
) As String
Dim f_Len As Single
Dim f_MaxW As Single
Dim i As Integer
  Let f_MaxW = List1.Width - 26 * Screen.TwipsPerPixelX
  If TextWidth(strText) >= f_MaxW Then
    Let f_MaxW = f_MaxW - TextWidth(sFRM_3DOTS)
    For i = 1 To Len(strText)
      Let f_Len = f_Len + TextWidth(Mid$(strText, i, 1))
      If f_Len > f_MaxW Then Exit For
    Next
    Let strShort = Left$(strText, i) & sFRM_3DOTS
  Else
    Let strShort = strText
  End If
End Function
Private Sub Form_Load( _
)
Dim i
  Let s_Array(0) = "Questo č un testo lungo."
  Let s_Array(1) = "Questo č un testo ancora piů lungo."
  Let s_Array(2) = "Questo č corto."
  Let s_Array(3) = "Corto."
  For i = LBound(s_Array) To UBound(s_Array)
    Call List1.AddItem(strShort(s_Array(i)))
  Next
  With Picture1
    Let .Visible = False
    Let .Height = (.Height - .ScaleHeight) + Label1.Height
    Call .ZOrder
  End With
  Let Label1.BackColor = vbYellow
End Sub
Private Sub Form_MouseMove( _
  Button As Integer _
, Shift As Integer _
, X As Single _
, Y As Single _
)
  Call DoMouseMove(Me, Button, Shift, X, Y)
End Sub
Private Sub List1_MouseMove( _
  Button As Integer _
, Shift As Integer _
, X As Single _
, Y As Single _
)
  Call DoMouseMove(List1, Button, Shift, X, Y)
End Sub
--
Ciao.
Maurizio