Here's a simple example of one possible technique. You'll need a form with three pictureboxes (Picture1, Picture2 and picPage) and a command button. Picture1 should contain the image that goes on one side of the flip, Picture2 should contain the second image. In this example you don't need to worry if the images are the same size; it all gets automatically scaled for you:
[tt]
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Enum ctDirection
ctForward = 1
ctBackward = -1
End Enum
Private Const ScaleMax As Long = 100
Private Sub Command1_Click()
Turn ctForward
Turn ctBackward
End Sub
Private Sub Form_Load()
' Arbitarily select a scale mode for picPage
picPage.ScaleWidth = ScaleMax
picPage.ScaleHeight = ScaleMax
picPage.AutoRedraw = True
End Sub
Private Sub Turn(ctDir As ctDirection)
Dim lTurn As Long
Dim iSource As Image
Dim Start As Long
Dim Finish As Long
If ctDir = 1 Then
Start = 0
Finish = ScaleMax
Else
Start = ScaleMax
Finish = 0
End If
For lTurn = Start To Finish Step ctDir
picPage.Cls ' Clear previous image
If lTurn < (ScaleMax) \ 2 + 1 Then
picPage.PaintPicture Picture1.Picture, lTurn, 0, (ScaleMax) \ 2 + 1 - lTurn, ScaleMax
Else
picPage.PaintPicture Picture2.Picture, (ScaleMax) \ 2, 0, lTurn - (ScaleMax) \ 2, ScaleMax
End If
picPage.Refresh ' Give picture chance to actually display new image
Sleep 10 ' brief delay
Next
End Sub