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 15.948 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
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. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 sevOutBar 4.0 Vertikale Menüleisten á la Outlook Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. |
||||||||||||||||
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. |