vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Re: ToolTip bei FileListBox 
Autor: BAStler
Datum: 27.12.06 10:53

Hallo Stefan,

hier ist die neue MouseMove-Prozedur.
Private Sub Datei1_MouseMove(Index As Integer, Button As Integer, Shift As _
  Integer, X As Single, Y As Single)
  Dim DateiName As String
  Dim nIndex As Long
  Dim nTop As Long
  Dim nLeft As Long
  Dim nHeight As Long
  Dim nWidth As Long
  Dim mDesktopWindow As Long
  Dim nRect As RECT
 
  ' Mit Hilfe des ermittelten Index, wird der Dateiname an DateiName übergeben
  nIndex = FileListBoxHitTest(Datei1(glngFileList), X, Y)
  DateiName = Datei1(glngFileList).List(nIndex)
  'PictureBox leeren, zur Aufnahme des neu ermittelten Eintrages
  PicRuler.Cls
  PicRuler.AutoRedraw = True
  Set PicRuler.Font = Datei1(glngFileList).Font
  PicRuler.FontSize = Datei1(glngFileList).FontSize
  nRect.Top = frmDosShell.Top \ Screen.TwipsPerPixelX
  nRect.Left = frmDosShell.Left \ Screen.TwipsPerPixelY
 
  'Anzeige soll nur erfolgen, wenn der Eintrag(DateiName) breiter als die 
  ' FileListBox ist
  If gRect.Right - PicRuler.TextWidth(DateiName) <= 0 Then
    'Startposition für Tooltip ermitteln
    nWidth = PicRuler.TextWidth(DateiName) + PicRuler.TextWidth(" ")
    nHeight = PicRuler.TextHeight("A") + 3
 
    ' Startposition = (Indexposition + Zeilenhöhe) + Hauptform.Top + 
    ' FileListBox.Top
    nTop = (nIndex * gItemHeight + 1) + nRect.Top + Datei1(glngFileList).Top + _
      41
    nLeft = nRect.Left + Datei1(glngFileList).Left + 5
    ' Position auf dem Bildschirm ermitteln
    If nWidth + 1 > lScreenWidth Then
      nLeft = lScreenWidth - nWidth
    End If
    If nTop + nHeight > lScreenHeight Then
      nTop = lScreenHeight - nHeight
    End If
    If GetParent(PicRuler.hwnd) <> GetDesktopWindow() Then
      SetParent PicRuler.hwnd, GetDesktopWindow()
    End If
    ' Setzen des Tooltip auf die ermittelte Position, wo der Mauszeiger steht
    PicRuler.Visible = True
    SetWindowPos PicRuler.hwnd, HWND_TOPMOST, nLeft, nTop, nWidth, nHeight, _
      SWP_SHOWWINDOW
    PicRuler.Print DateiName
    ' Die folgende Codezeile wäre die einfache Tooltipausgabe, ohne genaue 
    ' Positionierung
    'Datei1(glngFileList).ToolTipText = DateiName
  Else
     'Datei1(glngFileList).ToolTipText = ""
     PicRuler.Visible = False
  End If
End Sub
da wird dann die Funktion FileListBoxHitTest aufgerufen.
'Übergibt den unter dem Mauszeiger befindlichen Index
Public Function FileListBoxHitTest(FileListBox As FileListBox, ByVal X As _
  Single, ByVal Y As Single) As Long
  Dim nXPoint As Long
  Dim nYPoint As Long
  Dim nIndex As Long
 
  With Screen
    nXPoint = X / .TwipsPerPixelX
    nYPoint = Y / .TwipsPerPixelY
    lScreenWidth = .Width \ .TwipsPerPixelX
    lScreenHeight = .Height \ .TwipsPerPixelY
  End With
 
  With FileListBox
    GetClientRect .hwnd, gRect
    'Hier wird der Index(Dateiname) unter dem Mauszeiger ermittelt
    nIndex = SendMessage(.hwnd, LB_ITEMFROMPOINT, 0, nYPoint * 65536 + nXPoint)
    'nachdem der Index ermittelt ist, wird die tatsächliche Höhe des 
    ' Listeneintrages ermittelt
    gItemHeight = SendMessage(.hwnd, LB_GETITEMHEIGHT, 0, 0)
    If (nIndex And &H10000) = &H10000 Then
      FileListBoxHitTest = -1   'Mauszeiger befindet sich innerhalb der 
      ' Listbox, aber nicht über einer Datei
      Exit Function
    Else
      FileListBoxHitTest = nIndex
    End If
  End With
End Function
Hier noch ein paar Deklarationen im Modul, in dem die Funktion drin steht.
'Variable für FileListBox
Global gRect As RECT
Global gItemHeight As Long
 
Private Const LB_GETITEMHEIGHT = &H1A1
Private Const LB_ITEMFROMPOINT = &H1A9
 
Public Const SWP_SHOWWINDOW = &H40
Public Const HWND_TOPMOST = -1
 
'Die folgende API wird für den Tooltip innerhalb der FileListBox(Datei(1-3)) 
' benötigt
Private Declare Function SendMessage Lib "user32" _
  Alias "SendMessageA" (ByVal hwnd As Long, _
  ByVal wMsg As Long, ByVal wParam As Long, _
  ByVal lParam As Long) As Long
PicRuler selbst ist eine normale PictureBox, mit ScaleMode = Pixel.

Gruß BAStler
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
ToolTip bei FileListBox1.576BAStler19.12.06 15:27
Re: ToolTip bei FileListBox991vbtricks19.12.06 18:34
Re: ToolTip bei FileListBox876BAStler19.12.06 20:28
Re: ToolTip bei FileListBox908vbtricks20.12.06 10:40
Re: ToolTip bei FileListBox894BAStler20.12.06 11:08
Re: ToolTip bei FileListBox880vbtricks20.12.06 11:17
Re: ToolTip bei FileListBox899BAStler21.12.06 16:35
Re: ToolTip bei FileListBox873vbtricks24.12.06 08:54
Re: ToolTip bei FileListBox860BAStler24.12.06 11:20
Re: ToolTip bei FileListBox908BAStler27.12.06 10:53

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel