VB 5/6-Tipp 0304: Grafischen Fortschrittsbalken in die Taskleiste setzten
von Manuel Herzog
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: | Verwendete API-Aufrufe: FindWindowA (FindWindow), FindWindowExA (FindWindowEx), GetWindowRect, SetParent | Download: |
'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-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
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?