Rubrik: Grafik und Font · Grafische Effekte | VB-Versionen: VB4, VB5, VB6 | 22.12.04 |
Fortschrittsanzeige selbst gemacht Eine Alternative zum ProgressBar-Control aus den Windows Common Controls - mit reinen Boardmitteln von VB. | ||
Autor: Bernd Lucas | Bewertung: | Views: 26.728 |
www.lucas-software.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Wenn man innerhalb seines Projektes die "Microsoft Windows Common Controls" nur für die Anzeige eines Fortschrittbalken verwendet, sollte man überlegen, ob man nicht auf diese Controls-Sammlung verzichtet, um so bspw. das Setup der Anwendung "kleiner" zu halten. Einen Fortschrittsbalken kann man nämlich auch mit reinen VB-Boardmitteln realisieren - ohne hierbei zusätzliche "externe" Controls verwenden zu müssen.
Hierzu benötigt man lediglich zwei übereinanderliegende Shape-Controls:
- das 1. Shape-Control verwendet man für den "Rahmen" des Fortschrittbalkens
- das 2. Shape-Control dient der Anzeige des Fortschrittbalkens innerhalb des Rahmens, dessen Breite prozentual zum 1. Shapes berechnet wird
Und so geht's:
Platzieren Sie auf die Form zwei Shape-Controls (Shape1 und Shape2). Die Größe des 1. Shapes legen Sie Ihren Wünschen entsprechend fest.
Alles weitere wird dann per Code erledigt.
Private Sub Form_Load() With Shape1 ' Eigenschaften für Shape1 festlegen (Rahmen) .BackColor = vbWhite .BackStyle = 1 .BorderStyle = 1 .BorderColor = vbBlack ' Shape 2 korrekt positionieren Shape2.Move .Left, .Top, 0, .Height End With ' Eigenschaften des Fortschrittsbalken (Shape2) festlegen With Shape2 .Visible = False .BackStyle = 1 .BackColor = vbBlue .BorderStyle = 0 ' Transparent End With End Sub
' Fortschrittsbalken anzeigen Private Sub ShowProgress(ByVal nValue As Long, ByVal nMax As Long) Dim nWidth As Long If nMax > 0 Then ' Breite von Shape2 prozentual zur Breite von Shape2 berechnen With Shape1 nWidth = (nValue / nMax) * .Width ' Sicher ist sicher :-) If nWidth > .Width Then nWidth = nWidth End With ' Fortschrittsbalken anzeigen With Shape2 .Width = nWidth If Not .Visible Then .Visible = True End With End If End Sub
Ein kleiner Test:
Platzieren Sie auf die Form zusätzlich noch einen Command-Button und fügen folgenden Code in den Codeteil der Form ein:
Option Explicit ' API-Deklaration für Warteschleife Private Declare Sub Sleep Lib "kernel32" ( _ ByVal dwMilliseconds As Long)
Private Sub Command1_Click() Dim i As Long ' Fortschrittsbalken... For i = 1 To 100 ShowProgress i, 100 Sleep 30 Next i End Sub