Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0304: Grafischen Fortschrittsbalken in die Taskleiste setzten

 von 

Beschreibung 

Und wo wir gerade beim Thema sind, dieser Tipp setzt eine formeigene PictureBox in das SystemTray. Dies ermöglicht es unter anderem, die dort üblicherweise vorhandenen Grafiken zu überdecken, oder gar die PictureBox als Container für allerlei anderen Schabernack zu benutzen. In diesem Fall wird ein breiter ProgressBar einfach direkt in die Box gezeichnet.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Verwendete API-Aufrufe:

FindWindowA (FindWindow), FindWindowExA (FindWindowEx), GetWindowRect, SetParent

Download:

Download des Beispielprojektes [2,66 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 Project1.vbp -------------
' Die Komponente 'Microsoft Windows Common Controls 6.0 (SP6) (mscomctl.ocx)' wird benötigt.

'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Bildfeld-Steuerelement "Picture1"
' Steuerelement: Timersteuerelement "Timer"


'Autor: Manuel Herzog

Option Explicit

Private Declare Function FindWindow Lib "user32" Alias _
        "FindWindowA" (ByVal lpClassName As String, ByVal _
        lpWindowName As String) As Long
        
Private Declare Function FindWindowEx Lib "user32" Alias _
        "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 _
        As Long, ByVal lpsz1 As String, ByVal lpsz2 As _
        String) As Long
        
Private Declare Function GetWindowRect Lib "user32" (ByVal _
        hWnd As Long, lpRect As RECT) As Long
        
Private Declare Function SetParent Lib "user32" (ByVal _
        hWndChild As Long, ByVal hWndNewParent As Long) _
        As Long

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type

Dim CurrentPercent As Integer

Private Sub Form_Load()
    Dim hWnd As Long
    Dim R As RECT
    
    hWnd = FindWindow("Shell_TrayWnd", vbNullString)
    hWnd = FindWindowEx(hWnd, 0, "TrayNotifyWnd", vbNullString)

    Call GetWindowRect(hWnd, R)
    With Me
        .Top = 0
        .Left = 0
        .Height = .Height * (R.Bottom - R.Top) / .ScaleHeight
        .Width = .Width * (R.Right - R.Left) / .ScaleWidth
    End With
  
    Timer.Enabled = True
    SetParent Me.hWnd, hWnd
    Picture1.Height = Me.ScaleHeight
    Picture1.Width = Me.ScaleWidth
    Picture1.AutoRedraw = True
End Sub

Private Sub Form_Resize()
    Picture1.Top = (Me.ScaleHeight - Picture1.Height) / 2
End Sub

Private Sub Picture1_Click()
    Unload Me
End Sub

Private Sub Timer_Timer()
    Static Cnt As Integer
  
    Cnt = Cnt + 2
    If Cnt <= 100 Then
        Dim Num As String
        
        With Picture1
            .Cls
            .ScaleWidth = 100
            .DrawMode = 10
            Num = Format$(Cnt, "###") + "%"
            .CurrentX = 50 - .TextWidth(Num$) / 2
            .CurrentY = (.ScaleHeight - .TextHeight(Num$)) / 2
            Picture1.Print Num
            Picture1.Line (0, 0)-(Cnt, .ScaleHeight), , BF
            .Refresh
        End With
    Else
        Timer.Enabled = False
        Cnt = 0
    End If
End Sub
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.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 Mathias am 10.03.2004 um 21:11

Hallo,

Ist es möglich damit auch die Uhr zu überladen? Wenn ja, wie?

Kommentar von Hubert Z. am 24.03.2003 um 16:04

Hallo liebe Forums-Mitglieder.

Das hier sieht ganz nach dem aus, was ich brauche nur kann ich leider nur VBA für Excel. Wie schreibe ich sowas um? Kann mir da jemand behilflich sein?