vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Grafik und Font   |   VB-Versionen: VB.NET18.03.05
Ein CPU-Chart mit GDI+

Dieser Tip zeigt Ihnen wie man mit ein paar Tricks einen dem Task Manager ähnlichen CPU Chart direkt auf dem Desktop zeichnen kann.

Autor:   Stefan MährBewertung:     [ Jetzt bewerten ]Views:  20.037 
www.visualsoft-net.deSystem:  WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Dieser Tip zeigt Ihnen wie man mit ein paar Tricks einen dem Task Manager ähnlichen CPU Chart direkt auf dem Desktop zeichnen kann.

Dazu legen Sie ein neues Windows-Form-Projekt an und nennen es zum Beispiel CPUToDesktop.

Formeinstellungen:

  • Height: 300
  • Width: 80

Fügen Sie dem Form einen System-Timer mit folgenden Einstellungen hinzu:

  • Name: tmrMain
  • Enabled: False
  • Interval: 1000

Um das Forumlar unsichtbar zu machen und trotzdem noch darauf zeichnen zu können bedienen wir uns einiger neuer Einstellungen der Winform:

  1. Setzen Sie die BackColor-Eigenschaft des Formulares auf: 255; 192; 255
  2. Setzen Sie die TransparencyKey-Eigenschaft des Forumlares ebenfalls auf: 255; 192; 255
  3. Setzen Sie die FormBorderStyle-Eigenschaft auf None

Wenn Sie das Projekt jetzt kompilieren werden Sie feststellen, dass kein Formular sichtbar wird.

Nun kommen wir zum Source-Code:
Zuerst unsere für das Formular global verfügbare Variablen:

Private perfCounter As System.Diagnostics.PerformanceCounter
Private gDraw As Graphics
Private fnt As Font
Private lngFntHeight As Long
Private lngFntX As Long
Private fillBrsh As SolidBrush
Dim brsh As SolidBrush

Das Form Load Ereignis:

Private Sub Form1_Load(ByVal sender As Object, _
  ByVal e As System.EventArgs) Handles MyBase.Load
 
  Dim rectF As SizeF
 
  ' --> Der Performance Counter wird verwendet um die CPU Last auszulesen
  perfCounter = New System.Diagnostics.PerformanceCounter
  perfCounter.CategoryName = "Processor"
  perfCounter.CounterName = "% Processor Time"
  perfCounter.InstanceName = "_Total"
 
  ' --> Formular im Linken unteren Bereich des Bildschirms ausrichten
  Me.Location = New Point(Screen.PrimaryScreen.WorkingArea.Width - Me.Width - 5, _
                  Screen.PrimaryScreen.WorkingArea.Height - Me.Height - 5)
  Me.Width = 80
 
  ' --> Font für die CPU Auslastung
  fnt = New Font("Arial", 14, FontStyle.Bold, GraphicsUnit.Pixel)
 
  ' --> String ausmessen
  rectF = MeasureTheString()
  lngFntHeight = rectF.Height
  ' --> Ausrichtung der Schrift auf der X-Achse
  lngFntX = Me.Width - rectF.Width
 
  ' --> GDI Objekte
  fillBrsh = New SolidBrush(Color.FromArgb(0, 255, 0))
  brsh = New SolidBrush(Color.FromArgb(255, 192, 255))    
  gDraw = Me.CreateGraphics
 
  ' --> Form im Vordergrund
  Me.TopMost = True
  Me.tmrMain.Enabled = True
End Sub

Die Funktion die Die CPU Last liefert:

' --> Funktion für das Auslesen der CPU Auslastung über
' --> einen Performance Counter
Private Function GetCPULoad() As Integer
  Return Integer.Parse(Format(perfCounter.NextValue, "##0"))
End Function

Hilfsfunktion für das Ausmessen eines Strings als SizeF-Struktur:

' --> Funktion für das Ausmessen eines Strings
Private Function MeasureTheString() As SizeF
  Dim g As Graphics = Me.CreateGraphics
  Dim retValue As SizeF
 
  retValue = g.MeasureString("100 %", fnt)
  g.Dispose()
  Return retValue
End Function

Das Timer-Event:

Private Sub tmrMain_Elapsed(ByVal sender As System.Object, _
  ByVal e As System.Timers.ElapsedEventArgs) Handles tmrMain.Elapsed
 
  Call repaintForm()
End Sub

Die eigentliche Zeichenroutine:

' --> Die eigentliche Zeichnenfunktion
Private Sub repaintForm()
  Dim intRectHeight As Integer = 2
  Dim intSpace As Integer = 1
  Dim intRectWidth As Integer = 80
  Dim intCPULoad As Integer = GetCPULoad()
 
  ' --> Löschen des FormInhaltes
  gDraw.Clear(Color.FromArgb(255, 192, 255))
 
  ' --> Zeichnen der Rectangles
  ' (ein Rectangle für jedes Prozent CPU Auslastung)
  For idx As Integer = 0 To intCPULoad - 1
    gDraw.FillRectangle(fillBrsh, 0, (Me.Height - intRectHeight - _
      (lngFntHeight + 2)) - idx * (intRectHeight + intSpace), _
      Me.Width, intRectHeight)
  Next 
 
  ' --> Zeichnen der CPU Auslastung als Text
  gDraw.DrawString(intCPULoad.ToString & " %", fnt, fillBrsh, _
    lngFntX, Me.Height - lngFntHeight)
End Sub

Das Aufräumen:

' --> GDI Objekte zerstören
Private Sub Form1_Closed(ByVal sender As Object, _
  ByVal e As System.EventArgs) Handles MyBase.Closed
 
  gDraw.Dispose()
  fillBrsh.Dispose()
  brsh.Dispose()
End Sub

Dieser Tipp wurde bereits 20.037 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- 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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel