home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 3_2004-2005.ISO / Data / Zips / Flash_Desk172758422004.psc / DesktopMate.frm < prev    next >
Text File  |  2004-04-02  |  22KB  |  682 lines

  1. VERSION 5.00
  2. Object = "{D27CDB6B-AE6D-11CF-96B8-444553540000}#1.0#0"; "Flash.ocx"
  3. Begin VB.Form DMate 
  4.    AutoRedraw      =   -1  'True
  5.    BorderStyle     =   0  'None
  6.    Caption         =   "DesktopMate"
  7.    ClientHeight    =   1905
  8.    ClientLeft      =   0
  9.    ClientTop       =   0
  10.    ClientWidth     =   1830
  11.    Icon            =   "DesktopMate.frx":0000
  12.    KeyPreview      =   -1  'True
  13.    LinkTopic       =   "Form1"
  14.    ScaleHeight     =   127
  15.    ScaleMode       =   3  'Pixel
  16.    ScaleWidth      =   122
  17.    ShowInTaskbar   =   0   'False
  18.    StartUpPosition =   3  'Windows Default
  19.    Begin VB.Timer Timer1 
  20.       Interval        =   150
  21.       Left            =   1320
  22.       Top             =   1440
  23.    End
  24.    Begin VB.Label lblDrag 
  25.       BackStyle       =   0  'Transparent
  26.       Height          =   615
  27.       Left            =   1080
  28.       TabIndex        =   1
  29.       Top             =   1200
  30.       Width           =   615
  31.    End
  32.    Begin ShockwaveFlashObjectsCtl.ShockwaveFlash ShockwaveFlash1 
  33.       Height          =   1575
  34.       Left            =   0
  35.       TabIndex        =   0
  36.       Top             =   0
  37.       Width           =   2055
  38.       _cx             =   3625
  39.       _cy             =   2778
  40.       FlashVars       =   ""
  41.       Movie           =   "C:\Documents and Settings\Default\Desktop\DesktopFlashMate\snowman.swf"
  42.       Src             =   "C:\Documents and Settings\Default\Desktop\DesktopFlashMate\snowman.swf"
  43.       WMode           =   "Transparent"
  44.       Play            =   -1  'True
  45.       Loop            =   -1  'True
  46.       Quality         =   "High"
  47.       SAlign          =   ""
  48.       Menu            =   -1  'True
  49.       Base            =   ""
  50.       AllowScriptAccess=   "always"
  51.       Scale           =   "ShowAll"
  52.       DeviceFont      =   0   'False
  53.       EmbedMovie      =   -1  'True
  54.       BGColor         =   ""
  55.       SWRemote        =   ""
  56.       MovieData       =   ""
  57.       SeamlessTabbing =   -1  'True
  58.    End
  59. End
  60. Attribute VB_Name = "DMate"
  61. Attribute VB_GlobalNameSpace = False
  62. Attribute VB_Creatable = False
  63. Attribute VB_PredeclaredId = True
  64. Attribute VB_Exposed = False
  65. Option Explicit
  66. ' Have a flash animation that wanders around your desktop.
  67. ' Shows some interesting things like communication between flash and VB,
  68. '    and interacting with other top level windows.
  69. ' Easily customized, read the readme
  70. ' One note, I use some of the varibles in a non-standard way
  71. '   that might not be obvious at first.  The integers like moveright
  72. '   are used as a boolean (everything non-zero is treated as true by VB) but
  73. '   it also holds the amount still needed to travel in that direction.
  74. '  Have fun with it, and if you come up with a cool aniamtion or
  75. '  expand it email it to me or post it.
  76. '  If you find it useful or fun vote and leave a comment.
  77.  
  78. Private Type POINTAPI
  79.     X As Long
  80.     Y As Long
  81. End Type
  82. Private Type RECT
  83.     Left As Long
  84.     Top As Long
  85.     Right As Long
  86.     Bottom As Long
  87. End Type
  88.  
  89. Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
  90. Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
  91. Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
  92. Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
  93.  
  94. Const MF_CHECKED = &H8&
  95. Const MF_APPEND = &H100&
  96. Const TPM_LEFTALIGN = &H0&
  97. Const MF_DISABLED = &H2&
  98. Const MF_GRAYED = &H1&
  99. Const MF_SEPARATOR = &H800&
  100. Const MF_STRING = &H0&
  101. Const TPM_RETURNCMD = &H100&
  102. Const TPM_RIGHTBUTTON = &H2&
  103. Private Declare Function CreatePopupMenu Lib "user32" () As Long
  104. Private Declare Function TrackPopupMenuEx Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal X As Long, ByVal Y As Long, ByVal hwnd As Long, ByVal lptpm As Any) As Long
  105. Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
  106. Private Declare Function DestroyMenu Lib "user32" (ByVal hMenu As Long) As Long
  107. Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
  108. Dim RMenu As Long
  109.  
  110. Private Const ULW_ALPHA = &H2
  111. Private Const ULW_COLORKEY = &H1
  112. Private Const ULW_OPAQUE = &H4
  113. Private Const GWL_STYLE = (-16)
  114. Private Const GWL_EXSTYLE = (-20)
  115. Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  116. Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
  117. Private Const SWP_FRAMECHANGED = &H20
  118. Private Const SWP_NOSIZE = &H1
  119. Private Const SWP_NOMOVE = &H2
  120. Private Const SWP_NOZORDER = &H4
  121. Private Const WS_EX_LAYERED = &H80000
  122. Private Const WS_EX_WINDOWEDGE = &H100&
  123. Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
  124. Private Declare Function SetLayeredWindowAttributes Lib "user32.dll" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
  125. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  126. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wparam As Integer, ByVal iparam As Long) As Long
  127. Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long
  128. Private Declare Function ReleaseCapture Lib "user32" () As Long
  129. Dim tRect As RECT
  130. Dim OnTop As Boolean
  131. Dim Trans As Boolean
  132. Dim OldStyle As Long
  133. Dim Falling As Boolean
  134. Dim WasFalling As Boolean
  135. Dim MoveLeft As Integer
  136. Dim WasMoveLeft As Boolean
  137. Dim MoveRight As Integer
  138. Dim WasMoveRight As Boolean
  139. Dim Waiting As Boolean
  140. Dim WalkRect As RECT
  141. Dim Climbing As Boolean
  142. Dim ClimbLeft As Boolean
  143. Dim ClimbRight As Boolean
  144. Dim ClimbHWND As Long
  145. Dim WasClimbing As Boolean
  146.  
  147. ' How fast to fall
  148. Const FALL_RATE = 150
  149. ' Percentage of the time to climb a window you bump into.
  150. Const CLIMB_CHANCE = 25
  151. ' How fast to climb or walk
  152. Const CLIMB_RATE = 80
  153. Const WALK_RATE = 50
  154. ' Change these to your corresponding frames in your animation.
  155. Const LEFT_FRAME = 1
  156. Const RIGHT_FRAME = 1
  157. Const COOLTHING1_FRAME = 64
  158. Const COOLTHING2_FRAME = 50
  159. Const FALLING_FRAME = 22
  160. Const LANDED_FRAME = 12
  161. Const CLIMBING_RIGHT_FRAME = 38
  162. Const CLIMBING_LEFT_FRAME = 51
  163. Const BEING_CARRIED = 1
  164.  
  165. Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
  166.   Select Case KeyCode
  167.     Case vbKeyEscape
  168.       Unload Me
  169.       End
  170.     Case vbKeyT
  171.       OnTop = True
  172.       FormOnTop Me.hwnd, True
  173.     Case vbKeyU
  174.       OnTop = False
  175.       FormOnTop Me.hwnd, False
  176.     Case vbKeyM
  177.       Transparent (True)
  178.     Case vbKeyN
  179.       Transparent (False)
  180.   End Select
  181. End Sub
  182.  
  183. Private Sub Form_Load()
  184.   Randomize (Now)
  185.   Dim tWnd As Long
  186.   tWnd = FindWindow("Shell_traywnd", vbNullString)
  187.   GetWindowRect tWnd, tRect
  188.   ' Get old window style so can be reset with the transparency off
  189.   OldStyle = GetWindowLong(Me.hwnd, GWL_STYLE)
  190.   ShockwaveFlash1.Width = Me.ScaleWidth
  191.   ShockwaveFlash1.Height = Me.ScaleHeight
  192.   lblDrag.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight
  193.   ShockwaveFlash1.Movie = App.Path + "\snowman.swf"
  194.   
  195.   ' Win98, 95, me and NT, comment out the next two lines or it won't run
  196.   ' the setWindowLayersAttribute call for transparency is 2000 XP only
  197.   Trans = False
  198.   Transparent (True)
  199.   
  200.   OnTop = True
  201.   FormOnTop Me.hwnd, True
  202. End Sub
  203.  
  204. Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  205.     ReleaseCapture
  206.     SendMessage Me.hwnd, &HA1, 2, ByVal 0&
  207. End Sub
  208.  
  209. Private Sub lblDrag_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  210.   If Button = 1 Then
  211.     WasMoveRight = False
  212.     WasMoveLeft = False
  213.     WasFalling = False
  214.     MoveLeft = 0
  215.     MoveRight = 0
  216.     Falling = False
  217.     Waiting = False
  218.     WasClimbing = False
  219.     Climbing = False
  220.     Timer1.Enabled = True
  221.     PlayFlashFrom (BEING_CARRIED)
  222.     ReleaseCapture
  223.     SendMessage Me.hwnd, &HA1, 2, ByVal 0&
  224.   End If
  225. End Sub
  226.  
  227. Private Sub lblDrag_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  228.   ' Create the right click menu, thanks to allapi.net for the sample code
  229.   If Button = 2 Then
  230.     Dim Pt As POINTAPI
  231.     Dim ret As Long
  232.     RMenu = CreatePopupMenu()
  233.     If OnTop Then
  234.       AppendMenu RMenu, MF_STRING, 1, "Not On Top"
  235.     Else
  236.       AppendMenu RMenu, MF_STRING, 1, "Put On Top"
  237.     End If
  238.     AppendMenu RMenu, MF_SEPARATOR, 3, ByVal 0&
  239.     If Trans Then
  240.       AppendMenu RMenu, MF_STRING, 4, "Make Opaque"
  241.     Else
  242.       AppendMenu RMenu, MF_STRING, 4, "Make Transparent"
  243.     End If
  244.     AppendMenu RMenu, MF_STRING, 5, "Exit"
  245.     GetCursorPos Pt
  246.     Timer1.Enabled = False
  247.     ret = TrackPopupMenuEx(RMenu, TPM_LEFTALIGN Or TPM_RETURNCMD Or TPM_RIGHTBUTTON, Pt.X, Pt.Y, Me.hwnd, ByVal 0&)
  248.     Select Case ret
  249.       Case 1
  250.         If OnTop Then
  251.           FormOnTop Me.hwnd, False
  252.         Else
  253.           FormOnTop Me.hwnd, True
  254.         End If
  255.         OnTop = Not OnTop
  256.       Case 2
  257.       Case 4
  258.         If Trans Then
  259.           Transparent (False)
  260.         Else
  261.           Transparent (True)
  262.         End If
  263.       Case 5
  264.         Unload Me
  265.         End
  266.     End Select
  267.     DestroyMenu RMenu
  268.     Timer1.Enabled = True
  269.   End If
  270. End Sub
  271.  
  272. Private Sub ShockwaveFlash1_FSCommand(ByVal command As String, ByVal args As String)
  273.   ' Resets animation when it was set to wait using the setWait function
  274.   ' Communicates from flash to vb through actionscript (read the ReadMe.txt
  275.   ' for more info)
  276.   
  277.   If command = "Done" And Waiting Then
  278.     command = ""
  279.     Waiting = False
  280.     WasMoveRight = False
  281.     WasMoveLeft = False
  282.     WasFalling = False
  283.     MoveLeft = 0
  284.     MoveRight = 0
  285.     Falling = False
  286.     Waiting = False
  287.     WasClimbing = False
  288.     Climbing = False
  289.     Timer1.Enabled = True
  290.   End If
  291. End Sub
  292.  
  293. Private Sub Timer1_Timer()
  294.   ' "brains" of the animation, checks what the animation should be doing
  295.   ' now.  If nothing else is already being done then it decides WhatToDo().
  296.   ' The order is important here, example --climbing has a higher precedence than
  297.   ' checking if the animation should be falling. Otherwise every time it starts to
  298.   ' climb it will fall.
  299.   
  300.   Select Case True
  301.     Case Climbing
  302.       Climb
  303.     Case CheckFalling2()
  304.     Case MoveLeft
  305.       Call MoveLeftNow
  306.     Case MoveRight
  307.       Call MoveRightNow
  308.     Case Else ' Not doing anything else what should I do
  309.       Call WhatToDo
  310.   End Select
  311. End Sub
  312.  
  313. Private Sub MoveLeftNow()
  314.   If MoveLeft < 0 Then
  315.     MoveLeft = 0
  316.     WasMoveLeft = False
  317.     Exit Sub
  318.   End If
  319.     ' Inititate correct frame only the first time
  320.   If Not WasMoveLeft Then
  321.     PlayFlashFrom LEFT_FRAME
  322.   End If
  323.   'WasFalling = False
  324.   'Waiting = False
  325.   If Me.Left < 0 Then
  326.     Me.Left = 0
  327.     MoveLeft = 0
  328.     WasMoveLeft = False
  329.     Exit Sub
  330.   End If
  331.   If Me.Left > Screen.Width - Me.Width Then
  332.     Me.Left = Screen.Width - Me.Width
  333.     WasMoveRight = False
  334.     MoveRight = 0
  335.   End If
  336.   'ShockwaveFlash1.Play
  337.   Dim Pt As POINTAPI, mWnd As Long, WR As RECT, nDC As Long
  338.   Dim ParentWindow As Long
  339.   Dim MeRect As RECT
  340.   Dim winRECT As RECT
  341.   GetWindowRect Me.hwnd, MeRect
  342.     ' Set the point to check right of form now.
  343.   Pt.X = MeRect.Left - 1
  344.   Pt.Y = MeRect.Bottom - 10
  345.   If MeRect.Left <= 0 Then
  346.     MoveLeft = 0
  347.     WasMoveLeft = False
  348.     Exit Sub
  349.   End If
  350.  
  351.     mWnd = WindowFromPoint(Pt.X, Pt.Y)
  352.     'Get the window's position
  353.     ParentWindow = GetParent(mWnd)
  354.     If ParentWindow = 0 Then
  355.       GetWindowRect mWnd, WR
  356.       Dim MyStr As String
  357.       MyStr = String(100, Chr$(0))
  358.       GetWindowText mWnd, MyStr, 100
  359.       MyStr = Left$(MyStr, InStr(MyStr, Chr$(0)) - 1)
  360.       If MyStr = "DesktopMate" Then
  361.         MsgBox "Hi buddy!"
  362.         WasMoveLeft = False
  363.         MoveLeft = 0
  364.         Exit Sub
  365.         ' Found another one like me what should I do stuff here
  366.       Else
  367.         ' Another non desktopmate top level window should I climb it?
  368.         If MeRect.Left - 10 <= 0 Then
  369.           MoveLeft = 0
  370.           Me.Left = 0
  371.           WasMoveLeft = False
  372.           Exit Sub
  373.         End If
  374.         Dim ClimbIt As Integer
  375.         ClimbIt = Rnd * 100
  376.         ' Only climb the window if you walk into it fromn the left
  377.         If ClimbIt < CLIMB_CHANCE And MyStr <> "FolderView" And MeRect.Right < Screen.Width * Screen.TwipsPerPixelX - 30 _
  378.             And MeRect.Right > WR.Right Then
  379.           ' If within the percentage of chance to climb then climb it
  380.           ClimbHWND = mWnd
  381.           'If Pt.X >= WR.Right - 30 And Pt.X < WR.Right + 30 Then
  382.           'If MeRect.Right > WR.Right Then
  383.             ClimbRight = True
  384.           'End If
  385.           'Else
  386.           '  ClimbLeft = True
  387.           'End If
  388.           WasMoveLeft = False
  389.           Climbing = True
  390.           Exit Sub
  391.         End If
  392.       End If
  393.       'Cls
  394.       'Print MyStr
  395.     End If
  396.     
  397.     If Pt.X > WalkRect.Left And Pt.X > 0 Then 'ParentWindow = 0 And a <= 5 And (Pt.y > WR.Left Or Pt.y < WR.Right) Then
  398.       Me.Left = Me.Left - WALK_RATE
  399.       MoveLeft = MoveLeft - WALK_RATE
  400.       WasMoveLeft = True
  401.     Else
  402.       ' I'm at the edge of the window should I jump or fall
  403.       Me.Left = Me.Left - WALK_RATE
  404.       'MoveLeft = 0
  405.       WasMoveLeft = False
  406.     End If
  407. End Sub
  408.  
  409. Private Sub MoveRightNow()
  410.   If MoveRight < 0 Then
  411.     MoveRight = 0
  412.     WasMoveRight = False
  413.     Exit Sub
  414.   End If
  415.   WasFalling = False
  416.   Waiting = False
  417.   If Me.Left < 0 Then
  418.     Me.Left = 0
  419.     MoveRight = 0
  420.     WasMoveRight = False
  421.     Exit Sub
  422.   End If
  423.   If Not WasMoveRight Then
  424.     PlayFlashFrom RIGHT_FRAME
  425.   End If
  426.   If Me.Left > Screen.Width - Me.Width Then
  427.     Me.Left = Screen.Width - Me.Width
  428.     WasMoveRight = False
  429.     MoveRight = 0
  430.   End If
  431.   Dim Pt As POINTAPI, mWnd As Long, WR As RECT, nDC As Long
  432.   Dim ParentWindow As Long
  433.   ShockwaveFlash1.Play
  434.   Dim MeRect As RECT
  435.   Dim winRECT As RECT
  436.   GetWindowRect Me.hwnd, MeRect
  437.   ' Set the point to check right of form now.
  438.   Pt.X = MeRect.Right + 1
  439.   Pt.Y = MeRect.Bottom - 10
  440.   ' Inititate correct frame only the first time
  441.   mWnd = WindowFromPoint(Pt.X, Pt.Y)
  442.   'Get the window's position
  443.   ParentWindow = GetParent(mWnd)
  444.   If ParentWindow = 0 Then
  445.       GetWindowRect mWnd, WR
  446.       Dim MyStr As String
  447.       MyStr = String(100, Chr$(0))
  448.       GetWindowText mWnd, MyStr, 100
  449.       MyStr = Left$(MyStr, InStr(MyStr, Chr$(0)) - 1)
  450.       If MyStr = "DesktopMate" Then
  451.         ' Found another one like me what should I do stuff here
  452.         MsgBox "Hi buddy!"
  453.         WasMoveRight = False
  454.         MoveLeft = 0
  455.         Exit Sub
  456.       Else
  457.         ' Another non desktopmate top level window should I climb it?
  458.         If MeRect.Right + 10 >= Screen.Width \ Screen.TwipsPerPixelX Then
  459.           MoveRight = 0
  460.           Me.Left = (Screen.Width - Me.Width)
  461.           WasMoveRight = False
  462.           Exit Sub
  463.         End If
  464.         
  465.         Dim ClimbIt As Integer
  466.         ClimbIt = Rnd * 100
  467.         ' Only climb if walking into the window from the right
  468.         If ClimbIt < CLIMB_CHANCE And MyStr <> "FolderView" _
  469.             And MeRect.Left < WR.Left Then
  470.           ' If within the percentage of chance to climb then climb it
  471.           ClimbHWND = mWnd
  472.           'If MeRect.Left < WR.Left Then
  473.           'If MeRect.Right >= WR.Left - 130 And MeRect.Right < WR.Left + 130 Then
  474.             'ClimbRight = True
  475.           'Else
  476.             ClimbLeft = True
  477.           'End If
  478.           WasMoveRight = False
  479.           Climbing = True
  480.           Exit Sub
  481.         End If
  482.       End If
  483. '      Cls
  484. '      Print MyStr
  485.     End If
  486.  
  487.     If Pt.X < WalkRect.Right And Pt.X < Screen.Width \ Screen.TwipsPerPixelX Then 'ParentWindow = 0 And a <= 5 And (Pt.y > WR.Left Or Pt.y < WR.Right) Then
  488.       Me.Left = Me.Left + WALK_RATE
  489.       MoveRight = MoveRight - WALK_RATE
  490.       WasMoveRight = True
  491.     Else
  492.       ' I'm at the edge of the window should I jump or fall
  493.       'MoveRight = 0
  494.       WasMoveRight = False
  495.       Me.Left = Me.Left + WALK_RATE 'Me.Width \ 2 + 1
  496.     End If
  497. End Sub
  498.  
  499. Private Function CheckFalling2() As Boolean
  500.   Dim MeRect As RECT
  501.   Dim ParentWindow As Long
  502.   Dim WinBelow As Long
  503.   Dim winRECT As RECT
  504.   GetWindowRect Me.hwnd, MeRect
  505.   WinBelow = WindowFromPoint(MeRect.Left + (Me.ScaleWidth \ 2), MeRect.Bottom + 1)
  506.   ParentWindow = GetParent(WinBelow)
  507.  
  508.   ' Checks if below the bottom of the screen
  509.   If MeRect.Bottom > tRect.Top Then
  510.     If WasFalling Then
  511.       Waiting = False
  512.       WasMoveRight = False
  513.       WasMoveLeft = False
  514.       MoveLeft = 0
  515.       MoveRight = 0
  516.       Waiting = False
  517.       WasClimbing = False
  518.       Climbing = False
  519.       Timer1.Enabled = True
  520.       PlayFlashFrom (LANDED_FRAME)
  521.       SetWait
  522.       WasFalling = False
  523.     End If
  524.     Me.Top = (tRect.Top - Me.ScaleHeight) * Screen.TwipsPerPixelY
  525.     CheckFalling2 = False
  526.     Exit Function
  527.   End If
  528.   
  529.   If ParentWindow = 0 Then
  530.     GetWindowRect WinBelow, WalkRect
  531.     If MeRect.Bottom > WalkRect.Top Then
  532.       If MeRect.Bottom > WalkRect.Top + 30 Then
  533.         Me.Top = Me.Top + FALL_RATE
  534.         WasFalling = True
  535.         CheckFalling2 = True
  536.       Else
  537.         Me.Top = (WalkRect.Top - Me.ScaleHeight) * Screen.TwipsPerPixelY
  538.         If WasFalling Then
  539.       Waiting = False
  540.       WasMoveRight = False
  541.       WasMoveLeft = False
  542.       MoveLeft = 0
  543.       MoveRight = 0
  544.       Waiting = False
  545.       WasClimbing = False
  546.       Climbing = False
  547.       Timer1.Enabled = True
  548.       PlayFlashFrom (LANDED_FRAME)
  549.       SetWait
  550.       WasFalling = False
  551.         End If
  552.         CheckFalling2 = False
  553.       End If
  554.     End If
  555.   Else
  556.     If Not WasFalling Then
  557.       PlayFlashFrom (FALLING_FRAME)
  558.     End If
  559.       WasMoveLeft = False
  560.       WasMoveRight = False
  561.       Me.Top = Me.Top + FALL_RATE
  562.       WasFalling = True
  563.       CheckFalling2 = True
  564.   End If
  565. End Function
  566. Private Sub WhatToDo()
  567.   Dim What As Integer
  568.   What = Round(Rnd * 100)
  569.   Select Case What
  570.     Case Is < 45
  571.       MoveLeft = Round(Rnd * Screen.Width)
  572.     Case Is < 85
  573.       MoveRight = Round(Rnd * Screen.Width)
  574.     Case Is < 97
  575.       PlayFlashFrom (64)
  576.       SetWait
  577.     Case Else
  578.       Me.Top = 0
  579.   End Select
  580. End Sub
  581.  
  582. Public Sub FormOnTop(hWindow As Long, bTopMost As Boolean)
  583. ' Example: Call FormOnTop(me.hWnd, True)
  584.   Dim wFlags As Long
  585.   Dim placement As Long
  586.   Const SWP_NOSIZE = &H1
  587.   Const SWP_NOMOVE = &H2
  588.   Const SWP_NOACTIVATE = &H10
  589.   Const SWP_SHOWWINDOW = &H40
  590.   Const HWND_TOPMOST = -1
  591.   Const HWND_NOTOPMOST = -2
  592.   wFlags = SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW Or SWP_NOACTIVATE
  593.   Select Case bTopMost
  594.   Case True
  595.     placement = HWND_TOPMOST
  596.   Case False
  597.     placement = HWND_NOTOPMOST
  598.   End Select
  599.   SetWindowPos hWindow, placement, 0, 0, 0, 0, wFlags
  600. End Sub
  601.  
  602. Private Function PlayFlashFrom(pintFrameNo As Integer)
  603.   ShockwaveFlash1.GotoFrame (pintFrameNo)
  604.   ShockwaveFlash1.StopPlay
  605.   ShockwaveFlash1.Play
  606. End Function
  607.  
  608. Private Sub Climb()
  609.   Dim ClimbRect As RECT
  610.   Dim MeRect As RECT
  611.   GetWindowRect Me.hwnd, MeRect
  612.   GetWindowRect ClimbHWND, ClimbRect
  613.   If MeRect.Left <= 0 Or MeRect.Right > Screen.Width / Screen.TwipsPerPixelX Then
  614.     ClimbLeft = False
  615.     ClimbRight = False
  616.     Climbing = False
  617.     MoveLeft = 0
  618.     MoveRight = 0
  619.     WasMoveLeft = False
  620.     WasMoveRight = False
  621.     Exit Sub
  622.   End If
  623.  
  624.   If ClimbRight Then
  625.     ' Initiate the correct frame only once at start of climb
  626.     If Not WasClimbing Then
  627.       PlayFlashFrom CLIMBING_RIGHT_FRAME
  628.     End If
  629.     WasClimbing = True
  630.     Me.Left = ClimbRect.Right * Screen.TwipsPerPixelX
  631.   Else
  632.     ' Initiate the correct frame only once at start of climb
  633.     If Not WasClimbing Then
  634.       PlayFlashFrom CLIMBING_LEFT_FRAME
  635.     End If
  636.     Me.Left = (ClimbRect.Left - Me.ScaleWidth) * Screen.TwipsPerPixelX
  637.     WasClimbing = True
  638.   End If
  639.   If MeRect.Bottom <= ClimbRect.Top Then
  640.     ' I'm at the top
  641.     ''Me.Left = Me.Left - (Me.Width \ 2) - 25
  642.     ''Me.Top = (ClimbRect.Top - Me.ScaleHeight) * Screen.TwipsPerPixelY
  643.     ' Walk on the window
  644.     If ClimbRight Then
  645.       Me.Left = Me.Left - (Me.Width \ 2) - 25
  646.       Me.Top = (ClimbRect.Top - Me.ScaleHeight) * Screen.TwipsPerPixelY
  647.       MoveLeft = 1000
  648.     Else
  649.       Me.Left = Me.Left + (Me.Width \ 2) + 25
  650.       Me.Top = (ClimbRect.Top - Me.ScaleHeight) * Screen.TwipsPerPixelY
  651.       MoveRight = 1000
  652.     End If
  653.     Climbing = False
  654.     WasClimbing = False
  655.   Else
  656.     ' If I'm at the top of the screen
  657.     If MeRect.Top <= 1 Then
  658.       WasClimbing = False
  659.       Climbing = False
  660.     Else
  661.       Me.Top = Me.Top - CLIMB_RATE
  662.     End If
  663.   End If
  664. End Sub
  665.  
  666. Private Sub Transparent(t As Boolean)
  667.   Trans = Not Trans
  668.   If t Then
  669.       Me.BackColor = &HFFCCCC
  670.       SetWindowLong Me.hwnd, GWL_EXSTYLE, WS_EX_LAYERED
  671.       SetLayeredWindowAttributes Me.hwnd, &HFFCCCC, 0, ULW_COLORKEY
  672.   Else
  673.       Me.BackColor = &H8000000F
  674.       SetWindowLong Me.hwnd, GWL_EXSTYLE, OldStyle
  675.   End If
  676. End Sub
  677.  
  678. Private Sub SetWait()
  679.   Waiting = True
  680.   Timer1.Enabled = False
  681. End Sub
  682.