TListView: TProgressBar in jedem ListItem
-
Moin,
ich würde gern in einer TListView für jeden Eintrag eine ProgressBar anzeigen,
natürlich in der ansicht vsReport und in einer Detailspalte.
Also erstelle ich für jeden Eintrag eine Progressbar und setze Parent auf die ListView und verknüpfe die Bar mit dem ListViewItem per Data.In welches Ereigniss muss ich jetzte den Code zum Zeichnen einer ProgressBar hängen bzw wie komme ich an die richtigen maße ?
Habs schon mit solchen sachen wie OnItemDraw und DisplayRect() versucht aber mit Diplay Rect bekomm ich net die maße des Untereintrags und musste sie mir mühselig aus Column Breiten und gesamter Zeilengröße berechenen.
Außer dem,das dann meine anderer text nicht dargestellt wird weil OwnerDraw true ist, löst das ereignis auch nicht aus wenn man Während der laufzeit die Spaltenbreite verändert.
Ich hoffe mein Problem is klargeworden und freue mich auf Hilfe.
Gagget
-
Fange die Nachricht WM_NOTIFY für deine Form ab. Wie du das machst, siehe FAQ - "Windows Messages". Wenn ein ListView-Control ein Item darstellen soll, wird an das Hauptfenster diese Nachricht geschickt mit ((LPNMHDR)lParam)->code = LVN_GETDISPINFO. Mit ((LV_DISPINFO*)lParam)->item.iItem bekommst du die Zeile und mit ((LV_DISPINFO*)lParam)->item.iSubItem die Spalte (beide nullbasierend). Mit dem Makro ListView_GetItemPosition() bekommst du die Position eines Items (also einer Zeile). Die Position eines SubItems kannst du dann natürlich über die Breiten der HeaderSections rausfinden. Dann kannst du deine ProgressBar malen.
Natürlich musst du noch solche Sachen wie WM_VSCROLL und (evtl. WM_HSCROLL) abfangen, um die ProgressBars hoch- und runtergleiten zu lassen, wenn du scrollst. Ich fürchte, das wird garnicht so einfach.