"Wie kann man so eine Fortschrittsleist erstellen?" Genau diese Frage wurde vor kurzem im Forum gestellt. ein Sprite, und ein Hintergrundbild mit der eigendlichen Laufleiste erstellen: Alle Bilder werden in Pictureboxen eingefügt, wobei die Picturebox mit dem Hintergrundbild die Einstellung BorderStyle=0 zugewiesen bekommt und wiederum in eine Picturebox eingefügt wird. Die anderen beiden Pictureboxen werden mit der Eigenschaft Visible=False zur Laufzeit unsichtbar. Jetzt ist noch wichtig, dass bei ALLEN Pictureboxen AutoRedraw auf True geschaltet wird! Damit wir das Ganze auch testen können, setzen wir noch einen Timer (Interval=100, Enabled=False) und einen Button auf die Form. Doch vorher noch der Code. Zunächst die benötigte API-Deklaration und die dazugehörigen Konstanten: Private Declare Function BitBlt Lib "gdi32" ( _ ByVal hDestDC 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 dwRop As Long) As Long ' (DWORD) dest = source AND dest Private Const SRCAND = &H8800C6 ' (DWORD) dest = source XOR dest Private Const SRCINVERT = &H660046 Jetzt programmieren wir mit dieser API eine Funktion Draw, die uns den Inhalt der beiden unsichtbaren Pictureboxen zu einem teiltransparenten Bild zusammenfügt und auf den Hintergrund zeichnet. Mit dem Parameter "Fortschritt" übergeben wir die Angabe in Pixeln, wie weit die Leiste schon vorgerückt sein soll: Private Function Draw(Fortschritt As Integer) ' Erstellen eines Transparenten Bildes im Speicher With PicMask BitBlt PicLeiste.hDC, 0, 0, .Width, .Height, _ .hDC, 0, 0, SRCAND BitBlt PicLeiste.hDC, 0, 0, .Width, .Height, _ PicSprite.hDC, 0, 0, SRCINVERT ' Das vorherige Bild in der Leiste löschen PicLeiste.Cls ' Die Leiste an die gewünschte Position bringen PicLeiste.Left = -237 + Fortschritt ' Das Bild aus dem Speicher auf die Leiste zeichnen BitBlt PicLeiste.hDC, 237 - Fortschritt, 0, _ .Width, .Height, .hDC, 0, 0, SRCAND BitBlt PicLeiste.hDC, 237 - Fortschritt, 0, _ .Width, .Height, PicSprite.hDC, 0, 0, SRCINVERT End With End Function Diese Draw-Funktion wird in unserem Beispiel durch den Timer aufgerufen: Private Sub Timer1_Timer() Static Fortschritt As Integer If Fortschritt < 237 Then Fortschritt = Fortschritt + 1 Else Fortschritt = 0 Timer1.Enabled = False End If Draw Fortschritt End Sub Starten kann man den Timer mit dem Button: Private Sub Command1_Click() Timer1.Enabled = True End Sub Und damit schon beim Start der Hintergrund angezeigt wird, führen wir auch beim Form_Load-Ereignis die Draw-Funktion aus, allerdings mit 0 Fortschritt! Private Sub Form_Load() Draw 0 End Sub Dieser Tipp wurde bereits 16.853 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. |
Neu! sevEingabe 3.0 Einfach stark! Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Tipp des Monats Juni 2024 Microsys Kramer Mausrad im Formular abschalten (Access) Deaktiviert das Mausrad in Access-Formularen. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
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. |