GFTilePicture/GFTilePicture.frm

VERSION 5.00
Begin VB.Form Form1
   Caption         =   "Form1"
   ClientHeight    =   4335
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   5655
   LinkTopic       =   "Form1"
   ScaleHeight     =   4335
   ScaleWidth      =   5655
   StartUpPosition =   3 'Windows‑Standard
   Begin VB.CommandButton Command2
      Caption         =   "Check Borders"
      Height          =   375
      Left            =   1320
      TabIndex        =   3
      Top             =   3840
      Width           =   2055
   End
   Begin VB.CommandButton Command1
      Caption         =   "Tile Picture!"
      Height          =   375
      Left            =   3480
      TabIndex        =   2
      Top             =   3840
      Width           =   2055
   End
   Begin VB.PictureBox Picture2
      Height          =   2400
      Left            =   60
      Picture         =   "GFTilePicture.frx":0000
      ScaleHeight     =   2340
      ScaleWidth      =   4920
      TabIndex        =   1
      Top             =   480
      Width           =   4980
   End
   Begin VB.PictureBox Picture1
      Height          =   360
      Left            =   60
      ScaleHeight     =   300
      ScaleWidth      =   480
      TabIndex        =   0
      Top             =   60
      Width           =   540
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
'(c)2001, 2004 by Louis. Use to display a picture tiled. www.louis‑coder.com.
'GFTilePicture
Private Declare Function BitBlt Lib "gdi32.dll" (ByVal hDestDC As LongByVal x As LongByVal y As LongByVal nWidth As LongByVal nHeight As LongByVal hSrcDC As LongByVal xSrc As LongByVal ySrc As LongByVal dwRop As Long) As Long

Private Sub GFTilePicture(ByRef TileSourcePicture As PictureBox, ByRef TileTargetPicture As PictureBox)
    'on error resume next 'source and target picture must not be equal
    Dim TileSourcePictureScaleModeUnchanged As Integer
    Dim TileTargetPictureScaleModeUnchanged As Integer
    Dim TileXSizeCurrent As Long
    Dim TileYSizeCurrent As Long
    Dim TileXSizeTotal As Long
    Dim TileYSizeTotal As Long
    'preset
    TileSourcePictureScaleModeUnchanged = TileSourcePicture.ScaleMode
    TileSourcePicture.ScaleMode = vbPixels 'important
    TileTargetPictureScaleModeUnchanged = TileTargetPicture.ScaleMode
    TileTargetPicture.ScaleMode = vbPixels 'important
    'verify
    If (TileSourcePicture.ScaleWidth = 0) Or (TileSourcePicture.ScaleHeight = 0) Then 'verify
        Exit Sub
    End If
    'begin
    Do
        TileYSizeCurrent = TileSourcePicture.ScaleHeight
        If (TileYSizeTotal + TileYSizeCurrent) > TileTargetPicture.ScaleHeight Then
            TileYSizeCurrent = TileTargetPicture.ScaleHeight ‑ TileYSizeTotal
        End If
        TileXSizeTotal = 0 'reset
        Do
            TileXSizeCurrent = TileSourcePicture.ScaleWidth
            If (TileXSizeTotal + TileXSizeCurrent) > TileTargetPicture.ScaleWidth Then
                TileXSizeCurrent = TileTargetPicture.ScaleWidth ‑ TileXSizeTotal
            End If
            Call BitBlt(TileTargetPicture.hDC, TileXSizeTotal, TileYSizeTotal, TileXSizeCurrent, TileYSizeCurrent, TileSourcePicture.hDC, 0, 0, vbSrcCopy)
            TileXSizeTotal = TileXSizeTotal + TileXSizeCurrent
            If Not (TileXSizeTotal < TileTargetPicture.ScaleWidth) Then Exit Do
        Loop
        TileYSizeTotal = TileYSizeTotal + TileYSizeCurrent
        If Not (TileYSizeTotal < TileTargetPicture.ScaleHeight) Then Exit Do
    Loop
    'reset
    TileSourcePicture.ScaleMode = TileSourcePictureScaleModeUnchanged
    TileTargetPicture.ScaleMode = TileTargetPictureScaleModeUnchanged
End Sub

Private Sub Command1_Click()
    'on error resume next
    Call GFTilePicture(Picture1, Picture2)
End Sub

Private Sub Command2_Click()
    'on error resume next
    Picture1.Width = Picture1.Width + (3 * Screen.TwipsPerPixelX)
    Picture1.Height = Picture1.Height + (3 * Screen.TwipsPerPixelY)
End Sub


[END OF FILE]