Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0468: Picturebox als Progressbar

 von 

Beschreibung 

Hiermit kann man mit VB Bordmitteln eine Picturebox als ProgressBar zu verwenden.

Update von Hans H. Klein: Von nun an ist garantiert, dass die Beschriftung lesbar ist.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

RtlMoveMemory (CopyMemory)

Download:

Download des Beispielprojektes [3,08 KB]

'Dieser Quellcode stammt von http://www.activevb.de
'und kann frei verwendet werden. Für eventuelle Schäden
'wird nicht gehaftet.

'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
'Ansonsten viel Spaß und Erfolg mit diesem Source!

'------ Anfang Projektdatei picturebox-progressbar.vbp ------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Bildfeld-Steuerelement "PicProgress"
' Steuerelement: Schaltfläche "Command1"
' Steuerelement: Textfeld "Text2"
' Steuerelement: Textfeld "Text1"
' Steuerelement: Beschriftungsfeld "Label2"
' Steuerelement: Beschriftungsfeld "Label1"

Option Explicit

Private Sub Command1_Click()
   Dim i As Long
   
   Dim Min As Long
   Dim Max As Long
   
   Min = Val(Text1)
   Max = Val(Text2)
   
   For i = Min To Max
       ShowProgress PicProgress, i, Min, Max
       DoEvents
   Next
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'--------- Anfang Modul "Module1" alias Module1.bas ---------

Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias _
        "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal _
        ByteLen As Long)

Public Function ShowProgress(PicProgress As PictureBox, _
  ByVal Value As Long, ByVal Min As Long, ByVal Max As Long, _
  Optional ByVal bShowProzent As Boolean = True)
    
    Dim pWidth As Long
    Dim intProz As Integer
    Dim strProz As String
    Dim Farblong As Long
    Dim cRGB(0 To 3) As Byte
    Dim Grauwert As Long
    
    ' Farben
    Const progBackColor = &HC00000
    
    ' Plausibilitätsprüfungen
    If Value < Min Then Value = Min
    If Value > Max Then Value = Max
    
    ' Prozentwert ausrechnen
    If Max > 0 Then
        intProz = Int(Value / Max * 100 + 0.5)
    Else
        intProz = 100
    End If
    
    With PicProgress
        ' Prüfen, ob AutoReadraw=True
        If .AutoRedraw = False Then .AutoRedraw = True
        
        ' Inhalt löschen
        PicProgress.Cls
        
        If Value > 0 Then
            
            ' Balkenbreite
            pWidth = .ScaleWidth / 100 * intProz
            
            ' Balken anzeigen
            PicProgress.Line (0, 0)-(pWidth, .ScaleHeight), _
              progBackColor, BF
            
            ' Prozentanzeige
            If bShowProzent Then
                strProz = CStr(intProz) & " %"
                .CurrentX = (.ScaleWidth - .TextWidth(strProz)) / 2
                .CurrentY = (.ScaleHeight - .TextHeight(strProz)) / 2
                
                ' Vordergrundfarbe
                Farblong = PicProgress.Point(.CurrentX, .CurrentY)
                
                ' in RGB Werte splitten
                Call CopyMemory(cRGB(0), Farblong, 4)
                
                ' den Graustufenwert nach Gewichtung für Monitore berechnen
                Grauwert = (0.3 * cRGB(0)) + (0.59 * cRGB(1)) + (0.11 * cRGB(2))
                .ForeColor = IIf(Grauwert > 127, vbBlack, vbWhite)
                
                PicProgress.Print strProz
            End If
        End If
    End With
End Function


'---------- Ende Modul "Module1" alias Module1.bas ----------
'------- Ende Projektdatei picturebox-progressbar.vbp -------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 2 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von majumder am 12.07.2007 um 17:42

Danke! Sehr gut!

Kommentar von ParaGuaya am 02.06.2002 um 12:02

Noch schöner wird der Progress-Bar, wenn man nach dieser Zeile:
PicProgress.Print strProz
(ist ziemlich am Schluss)
Noch diese Zeile einfügt:
PicProgress.Refresh