vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2015
 
zurück
Rubrik: System/Windows · Desktop/Bildschirm/Display   |   VB-Versionen: VB4, VB5, VB622.03.05
Grafiken auf den Desktop projezieren

Mit diesem Tipp ist es möglich, direkt auf dem Desktop zu "zeichnen"

Autor:   Martin WalcherBewertung:     [ Jetzt bewerten ]Views:  10.590 
www.martinwalcher.deSystem:  Win9x, Win2k, WinXP, Vista, Win7, Win8 Beispielprojekt auf CD 

Summer-Special bei Tools & Components!
Gute Laune Sommer bei Tools & Components
Top Summer-Special - Sparen Sie teilweise über 100,- EUR
Alle sev-Entwicklerkomponenten und Komplettpakete jetzt bis zu 25% reduziert!
zum Beispiel:
  • Developer CD nur 455,- EUR statt 569,- EUR
  • sevDTA 2.0 nur 224,30 EUR statt 299,- EUR
  •  
  • vb@rchiv   Vol.6 nur 18,70 EUR statt 24,95 EUR
  • sevCoolbar 3.0 nur 58,70 EUR statt 69,- EUR
  • - Werbung -Und viele weitere Angebote           Aktionspreise nur für kurze Zeit gültig

    Unser heutiger beschreibt, wie man eine Grafik auf den Windows-Desktop projeziert und den Desktop danach wieder "cleanen" kann. Auf diese Weise kann man zur Weihnachtszeit bspw. Schneeflocken über den Desktop schneien lassen

    Zuständig für das Projezieren der Grafik ist unsere Funktion DrawItem. Die Funktion selbst erwartet als Parameter eine PictureBox (AutoRedraw = True), deren Inhalt dann auf den Desktop zu zeichnen ist, sowie optional die Zielposition an der das Bild erscheinen soll. Dabei werden die Positionen 0 bis 1 automatisch an die aktuelle Bildschirmgröße angepasst. Der vierte Parameter legt die Farbe fest, die beim zeichnen transparent erscheinen soll. Standardmäßig wird Magenta als transparente Farbe verwendet. Über die Funktion ClearScreen werden alle auf den Bildschirm gezeichneten Symbole wieder gelöscht.

    Erstellen Sie ein neues Projekt und platzieren auf die Form eine PictureBox, sowie ein Timer-Control. Laden Sie in die PictureBox ein Bildsymbol ihrer Wahl.

    Im Allgemein-Teil der Form müssen folgende Deklarationen eingefügt werden:

    Option Explicit
     
    ' Benötigte API-Deklarationen
    Private Declare Function GetDesktopWindow Lib "user32.dll" () As Long
     
    Private Declare Function GetDC Lib "user32.dll" ( _
      ByVal hwnd As Long) As Long
     
    Private Declare Function GetWindowRect Lib "user32.dll" ( _
      ByVal hwnd As Long, _
      ByRef lpRect As RECT) As Long
     
    Private Declare Function TransparentBlt Lib "msimg32.dll" ( _
      ByVal hdc As Long, _
      ByVal x As Long, _
      ByVal y As Long, _
      ByVal nWidth As Long, _
      ByVal nHeight As Long, _
      ByVal hSrcDC As Long, _
      ByVal xSrc As Long, _
      ByVal ySrc As Long, _
      ByVal nSrcWidth As Long, _
      ByVal nSrcHeight As Long, _
      ByVal crTransparent As Long) As Long
     
    Private Declare Function InvalidateRect Lib "user32.dll" ( _
      ByVal hwnd As Long, _
      lpRect As Any, _
      ByVal bErase As Long) As Long
     
    Private Type RECT
      Left As Long
      Top As Long
      Right As Long
      Bottom As Long
    End Type

    Wie eingangs erwähnt ist unsere Funktion DrawItem für das Projezieren des Bildes zuständig:

    Private Function DrawItem(varItem As PictureBox, _
      Optional ByVal x As Single = -1, _
      Optional ByVal y As Single = -1, _
      Optional ByVal lngTransparency As ColorConstants = vbMagenta)
     
      Dim hwnd As Long
      Dim dc As Long
      Dim varScreen As RECT
      Dim varPicture As RECT
     
      ' Handle des Windows-Desktop ermitteln
      hwnd = GetDesktopWindow()
      dc = GetDC(0)
     
      ' Größe des Desktopbereichs ermitteln  
      GetWindowRect hwnd, varScreen
     
      ' Größe der PictureBox ermitteln
      GetWindowRect varItem.hwnd, varPicture
     
      With varPicture
        .Right = .Right - .Left
        .Bottom = .Bottom - .Top
        varScreen.Right = varScreen.Right - .Right + 1
        varScreen.Bottom = varScreen.Bottom - .Bottom + 1
      End With
     
      ' Falls x und y nicht angegeben wurden, Position zufällig ermitteln
      If x = -1 Then x = Rnd
      If y = -1 Then y = Rnd
     
      With varPicture
        DrawItem = (TransparentBlt(dc, varScreen.Right * x, varScreen.Bottom * y, _
         .Right, .Bottom, varItem.hdc, 0, 0, .Right, .Bottom, lngTransparency) = 1)
      End With
    End Function

    Das Wiederherstellen des Desktops erledigt unsere Funktion ClearScreen:

    Private Function ClearScreen()
      ClearScreen = (InvalidateRect(0, 0&, 0) = 1)
    End Function

    Mit Hilfe des Timers wird unser Bild nun an beliebigen Positionen des Desktops gezeichnet:

    Private Sub Form_Load()
      ' Timer-Intervall festlegen
      Timer1.Interval = 150
      Timer1.Enabled = True
    End Sub
    Private Sub Timer1_Timer()
      DrawItem Picture1
    End Sub

    Beim Beenden der Anwendung soll der Desktop wieder gesäubert werden:

    Private Sub Form_Unload(Cancel As Integer)
      ClearScreen
    End Sub

    So... und nun viel Spaß damit
     

    Dieser Tipp wurde bereits 10.590 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-2015 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