ايران ويج

نسخه‌ی کامل: چطور برای لیست ویو بالون بسازیم؟؟؟
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
من میخوام با نگه داشتن موس روی هر ردیف از ایتمهای لیست ویو به صورت بالون یک سری اطلاعات رو به کاربر نشون بدم. مثلا نام اون ایتمی که موس روش توقف کرده


تشکر
يه راه هست که من خودم هم استفاده کردم يک بار
شايد راه های بهتری هم وجود دشته ولی این هم جواب ميده

واسه اینکه بتونی تشخيص بدی که ماوس روی کدوم ایندکس از ليست هستش از SendMessage استفاده ميکنی و ....
کد:
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

Const LVM_FIRST = &H1000&
Const LVM_HITTEST = LVM_FIRST + 18

Private Type POINTAPI
    x As Long
    y As Long
End Type

Private Type LVHITTESTINFO
   pt As POINTAPI
   flags As Long
   iItem As Long
   iSubItem As Long
End Type

Dim TT As CTooltip
Dim m_lCurItemIndex As Long

Private Sub Form_Load()
   With ListView1.ListItems
      .Add Text:="Test item #1"
      .Add Text:="Test item #2"
      .Add Text:="Test item #3"
   End With

   Set TT = New CTooltip
   TT.Style = TTBalloon
   TT.Icon = TTIconInfo
End Sub

Private Sub ListView1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
   Dim lvhti As LVHITTESTINFO
   Dim lItemIndex As Long
  
   lvhti.pt.x = x / Screen.TwipsPerPixelX
   lvhti.pt.y = y / Screen.TwipsPerPixelY
   lItemIndex = SendMessage(ListView1.hwnd, LVM_HITTEST, 0, lvhti) + 1
  
   If m_lCurItemIndex <> lItemIndex Then
      m_lCurItemIndex = lItemIndex
      If m_lCurItemIndex = 0 Then   ' no item under the mouse pointer
         TT.Destroy
      Else
         TT.Title = "Multiline tooltip"
         TT.TipText = ListView1.ListItems(m_lCurItemIndex).Text
         TT.Create ListView1.hwnd
      End If
   End If
End Sub
کد:
ListView1.ListItems(1).ToolTipText = "Ur Text"
ListView1.ListItems(1).ListSubItems(1).ToolTipText = "Ur Text"
ListView1.ListItems(1).ListSubItems(2).ToolTipText = "Ur Text"
ListView1.ListItems(1).ListSubItems(3).ToolTipText = "Ur Text"
ممنون جناب PouriaAmid عالی بود

من یه سمپل درست کردم و کدها توی اون گذاشتم اما ظاهرا یه جاهاش ایراد داره
نمیدونم مشکلم کجاست میتونی برام یه سمپل بزاری
با تشکر
کد رو بريز توی فرم يه ListView هم بزار بعد اجرا کن
(۲۷-فروردین-۱۳۸۸, ۱۶:۴۲:۱۹)PouriaAmid نوشته است: [ -> ]يه راه هست که من خودم هم استفاده کردم يک بار
شايد راه های بهتری هم وجود دشته ولی این هم جواب ميده

واسه اینکه بتونی تشخيص بدی که ماوس روی کدوم ایندکس از ليست هستش از SendMessage استفاده ميکنی و ....
کد:
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

Const LVM_FIRST = &H1000&
Const LVM_HITTEST = LVM_FIRST + 18

Private Type POINTAPI
x As Long
y As Long
End Type

Private Type LVHITTESTINFO
pt As POINTAPI
flags As Long
iItem As Long
iSubItem As Long
End Type

Dim TT As CTooltip
Dim m_lCurItemIndex As Long

Private Sub Form_Load()
With ListView1.ListItems
.Add Text:="Test item #1"
.Add Text:="Test item #2"
.Add Text:="Test item #3"
End With

Set TT = New CTooltip
TT.Style = TTBalloon
TT.Icon = TTIconInfo
End Sub

Private Sub ListView1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim lvhti As LVHITTESTINFO
Dim lItemIndex As Long

lvhti.pt.x = x / Screen.TwipsPerPixelX
lvhti.pt.y = y / Screen.TwipsPerPixelY
lItemIndex = SendMessage(ListView1.hwnd, LVM_HITTEST, 0, lvhti) + 1

If m_lCurItemIndex <> lItemIndex Then
m_lCurItemIndex = lItemIndex
If m_lCurItemIndex = 0 Then ' no item under the mouse pointer
TT.Destroy
Else
TT.Title = "Multiline tooltip"
TT.TipText = ListView1.ListItems(m_lCurItemIndex).Text
TT.Create ListView1.hwnd
End If
End If
End Sub

من کدها رو توی یه برنامه گذاشتم اما ظاهرا ! یه جاهاییش مشکل داره
ممکنه راهنماییم کنی
با تشکر