VB 5/6-Tipp 0372: Hintergründe von Forms und PictureBoxen mit Grafiken kacheln
von ActiveVB
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: | Verwendete API-Aufrufe: | Download: |
'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-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | |||||||
VB5 | |||||||
VB6 |
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