Letzte Woche haben wir Ihnen eine Möglichkeit gezeigt, wie sich eine ProgressBar in einer StatusBar anzeigen lässt. Wie wäre es nun, eine ProgressBar in einer ganz bestimmten Spalte im ListView-Control anzuzeigen? Sie werden sich jetzt sicherlich denken: Weit gefehlt... geht nämlich doch Voraussetzung: "Wie? Spalten nicht verändern? Das lässt sich doch gar nicht einstellen! Der Anwender kann die Spaltenbreiten doch immer und sowieso ändern!" Nochmals weit gefehlt... mit einem kleinen Trick werden aus dem Resizable-Columns mal eben ganz schnell Fix-Columns Hierzu erstellen wir zur Laufzeit einfach ein paar CommandButtons und legen diese exakt auf die Spaltenbezeichner im ListView. Nicht mehr und nicht weniger. "Und die ProgressBar?" Nun genug Gerede... jetzt wird gecodet Erstellen Sie ein neues Projekt und ziehen auf die Form:
Option Explicit ' Benötigte API-Deklarationen Private Declare Function SetParent Lib "user32" ( _ ByVal hWndChild As Long, _ ByVal hWndNewParent As Long) As Long Private Sub Form_Load() Dim i As Long Dim oColumn As ColumnHeader Dim oItem As ListItem ' ListView-Eigenschaften festlegen With ListView1 .View = lvwReport .FullRowSelect = True .LabelEdit = lvwManual .GridLines = True .HideSelection = True End With ' Spalten erstellen With ListView1.ColumnHeaders .Add , , "File", 1200 .Add , , "Version", 900 .Add , , "Download", 1800 .Add , , "Date", ListView1.Width - 3900 - 330 End With ' ein paar Test-Einträge For i = 1 To 3 Set oItem = ListView1.ListItems.Add() With oItem .Text = "File" + CStr(i) .SubItems(1) = "1.0.0.0" .SubItems(3) = Now End With Next i ' CommandButtons über ListView-Columns legen lvw_SetNewHeader ' ProgressBar zunächst ausblenden ProgressBar1.Visible = False End Sub Private Sub lvw_SetNewHeader() ' CommandButtons über ListView-Columns legen Dim i As Long cmdColumn(0).Visible = False With ListView1.ColumnHeaders For i = 1 To .Count ' CommandButton laden Load cmdColumn(i) ' Größe festlegen cmdColumn(i).Top = 0 cmdColumn(i).Left = .Item(i).Left cmdColumn(i).Width = .Item(i).Width + 15 cmdColumn(i).Height = ListView1.ListItems.Item(1).Height ' Beschriften, Anzeigen... cmdColumn(i).Caption = .Item(i).Text cmdColumn(i).Visible = True ' ...und ab ins ListView SetParent cmdColumn(i).hwnd, ListView1.hwnd cmdColumn(i).ZOrder Next i End With End Sub Die ProgressBar selbst soll jederzeit in einer beliebigen Zeile/Spalte angezeigt werden können: Private Sub lvw_ShowProgressBar(ByVal nRow As Long, _ ByVal nCol As Long) ' ProgressBar in beliebiger ' Zeile/Spalte anzeigen Dim i As Long Dim nLeft As Long Dim nTop As Long Dim nHeight As Long Dim nWidth As Long ' Positon: Left, Width With ListView1.ColumnHeaders For i = 1 To nCol - 1 nLeft = nLeft + .Item(i).Width Next i nWidth = .Item(nCol).Width End With ' Position: Top, Height With ListView1.ListItems For i = 1 To nRow nTop = nTop + .Item(i).Height Next i nHeight = .Item(nRow).Height End With ' ProgressBar anzeigen With ProgressBar1 SetParent .hwnd, ListView1.hwnd .Left = nLeft .Top = nTop .Width = nWidth .Height = nHeight .Visible = True .Value = 0 End With End Sub Beim Klick auf den Start-Button soll die ProgressBar in der 2. Zeile und 3. Spalte angezeigt werden: Private Sub cmdStart_Click() ' ProgressBar sichtbar machen lvw_ShowProgressBar 2, 3 ' Timer initialisieren Timer1.Interval = 25 Timer1.Enabled = True ' CommandButton deaktivieren cmdStart.Enabled = False End Sub ' Fortschrittsbalken Private Sub Timer1_Timer() With ProgressBar1 If .Value < .Max Then .Value = .Value + 1 Else Timer1.Enabled = False cmdStart.Enabled = True ProgressBar1.Visible = False End If End With End Sub Sollen mehrere ProgressBar-Controls gleichzeitig angezeigt werden, einfach ein Steuerelementfeld erstellen und die Prozdur lvw_ShowProgressBar um einen "Index"-Paramater erweitern Stop! Da fehlt doch noch etwas! Also noch schnell folgenden Code einfügen, und schon geht's wieder: Private Sub cmdColumn_MouseUp( Index As Integer, _ Button As Integer, Shift As Integer, _ X As Single, Y As Single) ' Sortierung Select Case Index Case 1, 2, 4 With ListView1 .SortKey = Index - 1 .SortOrder = lvwDescending .Sorted = True End With Case Else Beep End Select End Sub Dieser Tipp wurde bereits 23.603 mal aufgerufen.
Anzeige
![]() ![]() ![]() (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren [email protected]! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
Access-Tools Vol.1 ![]() Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB Tipp des Monats ![]() Dieter Otter PopUp-Menü wird nicht angezeigt :-( In diesem Tipp verraten wir Ihnen, wie Sie Probleme mit PopUp-Menüs umgehen können, wenn diese unter bestimmten Umständen einfach nicht angezeigt werden. sevAniGif (VB/VBA) ![]() Anzeigen von animierten GIF-Dateien Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. |
||||||||||||||||
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. |