Die Community zu .NET und Classic VB.
Menü

VB 5/6-Tipp 0372: Hintergründe von Forms und PictureBoxen mit Grafiken kacheln

 von 

Beschreibung 

Für ein Form oder eine PictureBox muß nicht unbedingt eine vollständige Grafik verwendet werden. Oftmals reicht es aus sogenannte Kachelen nachtlos, wiederholend aneinander zu reihen. Dadurch kann auf kleinere, speichersparende Bitmaps zurückgegriffen werden.

Schwierigkeitsgrad:

Schwierigkeitsgrad 2

Verwendete API-Aufrufe:

BitBlt

Download:

Download des Beispielprojektes [47,77 KB]

'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 -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Schaltfläche "Command1" (Index von 0 bis 3)
' Steuerelement: Bildfeld-Steuerelement "Picture1" (Index von 0 bis 3)
' Steuerelement: Beschriftungsfeld "Label1"
' Steuerelement: Beschriftungsfeld "Label2"

Option Explicit

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

Const SRCCOPY = &HCC0020

Dim BackGNr As Integer

Private Sub Form_Load()
    Dim x As Long
    
    For x = 0 To Picture1.UBound
        Picture1(x).ScaleMode = vbPixels
        Picture1(x).Picture = LoadPicture(App.Path & "\Pic" & CStr(x + 1) & ".jpg")
        Picture1(x).Refresh
    Next x
    
    Me.Picture = Picture1(0).Picture
    Form1.ScaleMode = vbPixels
    Me.Refresh
End Sub

Private Sub Form_Paint()
    Call TileForm(BackGNr)
End Sub

Private Sub Command1_Click(Index As Integer)
    BackGNr = Index
    Me.Picture = Picture1(BackGNr).Picture
End Sub

Private Sub TileForm(ByVal Pattern As Long)
    Dim x As Long, y As Long
    Dim Dx As Long, Dy As Long
    
    Dx = Picture1(Pattern).ScaleWidth
    Dy = Picture1(Pattern).ScaleHeight
    
    For x = 0 To Me.ScaleWidth Step Dx
        For y = 0 To Me.ScaleHeight Step Dy
            Call BitBlt(Me.hDC, x, y, Dx, Dy, _
                    Picture1(Pattern).hDC, 0, 0, SRCCOPY)
            
        Next y
    Next x
End Sub


'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------

Tipp-Kompatibilität:

Windows/VB-VersionWin32sWin95Win98WinMEWinNT4Win2000WinXP
VB4
VB5
VB6

Hat dieser Tipp auf Ihrem Betriebsystem und mit Ihrer VB-Version funktioniert?

Ja, funktioniert!

Nein, funktioniert nicht bei mir!

VB-Version:

Windows-Version:

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 3 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 jürgen kroll am 02.12.2003 um 08:27

Hallo,

ich habe versucht diesen Tipp in ein bestehendes Projekt einzubauen. Leider Funktioniert es nicht richtig.
Das einlesen der Bilder ist o.k.. Allerdings wird die Form immer mit der Backcolor ausgefüllt. Vergrössere ich die Form so wird der neue Hintergrund zum Teil sichtbar. Wähle ich aber einen neuen Hintergrund so wird wieder die gesamte Form mit der Backcolor ausgefüllt.
Ich gehe davon aus das ich eine Einstellung an dem Formular vorgenommen habe die diesen Effect auslöst.
Beim Vergleich mit dem Beispiel konnte ich aber keine Abweichung endecken.

Kommentar von AngelusDiaboli am 04.06.2003 um 16:37

Argh!

Wie kriege ich denn nun noch die original-Picturebox unsichtbar!?

Wenn ich sie auf -100/-100 verschiebe, dann ist keine Kachelung mehr da!

Kann mir da jemand helfen?

Greets

Kommentar von Andreas Warning am 26.03.2001 um 15:55

Dieser Tip läuft ganz prima. Aber wir kann ich den Hintergrund einzelner Kontrolls verändern? (z.B. wie komme ich an den .hDC von einem Listview oder Textbox?)
mfg
Andreas