home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / com / activexcontrol / basectl / card / solitair / sol.alx next >
Encoding:
Text File  |  1997-10-06  |  99.0 KB  |  2,837 lines

  1.  
  2. <SCRIPT LANGUAGE="VBScript">
  3. <!--
  4.  
  5. 'The naming conventions for each of the areas where
  6. ' cards can play are:
  7. '    
  8. '    Shuffle Stack        Place where cards are ALL face down 
  9. '                 and the user can click to put cards into
  10. '                 play. Both 3 card and 1 card deal are supported.
  11. '                 (to change number of cards played
  12. '                  change the value of gCOUNTDEAL)
  13. '                 There is only 1 Shuffle Stack.
  14. '
  15. '    Discard Stack        Place where cards are face up
  16. '                 and can be dragged to an Ace Stack
  17. '                 or a Card Stack. There is only 1 Discard Stack.
  18. '
  19. '    Ace Stack        Place where cards of the same suit
  20. '                 are piled, starting with the Ace and Ending
  21. '                 with the King. When all kings are showing
  22. '                 the game is over and the animation begins.
  23. '                 There are 4 Ace Stacks.
  24. '
  25. '    Card Stack        Place where cards are piled, alternating the
  26. '                 the suit and in descending order.
  27. '                 There are 7 card stacks.
  28.  
  29. 'The following global variables are used for this application.
  30. 'Before each variable is information explaining how to use it,
  31. 'as well as explanatory text on the question that the variable 
  32. 'answers (Boolean) or a statement describing the variable's use.
  33. '
  34. 'The variable naming conventions used in this
  35. ' application are represented by: [g][r]vartypeVarName
  36. ' Where:
  37. '     [g]        Denotes it as a global variable.
  38. '     [r]        Denotes it as an array (region).
  39. '     vartype    One of the values specified below.
  40. '     VarName    Name of variable, starting each word 
  41. '             with a capital letter.
  42. '            Using a VARNAME in ALL uppercase
  43. '            will denote it as a constant value.
  44. '
  45. ' vartype can be:
  46. '    d    Decimal number, numeric and non-integer.
  47. '    b    Boolean.
  48. '    int    Integer.
  49. '    inc    Incrementer (Used when doing things, like animations
  50. '                 in steps or increments).
  51. '    str    String.
  52. '    obj    Object or Control.
  53. '    
  54. '    NOTE: Since all data types in VBScript are Variants,
  55. '    this variable convention is for documentation and
  56. '    to help you with debugging and programming.
  57. '
  58.  
  59. 'Are we in debug mode?
  60. dim gbDebug
  61.  
  62. 'Did the mouseup event happen so 
  63. ' we can stop dragging a card?
  64. dim gbMouseUp
  65.  
  66. 'Number of MouseMove(s) to skip before actually
  67. ' redrawing a card (makes the drag seem faster).
  68. dim gintDragSkip
  69.  
  70. 'Did the user want to End the game?
  71. dim gbEndGame
  72.  
  73. 'Done with bouncing all cards off screen.
  74. dim gbAnimationDone 
  75.  
  76. 'Was the background clicked during card animation?
  77. dim gbLeaveEarly
  78.  
  79. 'Number of moves the card will take to get to the ace
  80. ' Stack during animation
  81. dim gincCardMoveSteps
  82.  
  83. 'Current card being moved.
  84. dim gobjCurMoveCard
  85.  
  86. 'Amount to move left of card on each step.
  87. dim gincEndLeft
  88.  
  89. 'Amount to move top of card on each step.
  90. dim gincEndTop
  91.  
  92. 'Order the suits appear on the Ace Stacks.
  93. dim gstrSuitOrder
  94.  
  95. 'Stack the cards are currently being moved to
  96. dim gintCurStackToMove
  97.  
  98. 'Done moving cards to Ace Stack.
  99. dim gbCardMoveDone 
  100.  
  101. 'Is the shuffling done yet?
  102. dim gbShuffleDone
  103.  
  104. 'The array to hold the randomly shuffled cards.
  105. dim grintShuffled(52)
  106.  
  107. 'Number of times to go into the random sequence.
  108. dim gRNDCOUNT
  109.  
  110. 'For the End game
  111. 'Each card that is currently bouncing and the 
  112. ' top and left value for each.
  113. dim grCardBouncing(4,3)
  114.  
  115. 'Which cards are done moving.
  116. dim gbDoneMoving(4)
  117.  
  118. 'Friction and gravity valued applied to each bounce.
  119. dim gdFriction
  120. dim gdGravity
  121.  
  122. 'Used for the count of cards to deal.
  123. dim gCOUNTDEAL
  124.  
  125. 'Number of cards moved to Discard Stack when a user clicks the
  126. ' Shuffle Stack.  Needed to determine how many cards should
  127. ' be showing on the Discard Stack.
  128. dim gintCountDiscarded
  129.  
  130. 'Stack the card is being moved from.
  131. dim gintSrcStack
  132.  
  133. 'Used during animation. These variables
  134. ' store the starting position of each card and
  135. ' the End points of where the card
  136. ' should End up after being moved.
  137. dim gdStartTop, gdStartLeft
  138. dim gdCardTop, gdCardLeft
  139. dim gdOffsetTop
  140.  
  141. 'Card being moved.
  142. dim gintMoveCardInx
  143.  
  144. 'Number of total cards being moved during a mouse
  145. ' drag, i.e., moving cards from one stack to another.
  146. dim gintCountMoving
  147.  
  148. 'Holds all the cards of the deck.
  149. dim grobjAllCards(52) 
  150.  
  151. 'Is the card face up?
  152. dim grbCardShowing(52)
  153.  
  154. 'Current deck being displayed.
  155. dim gintCurDeck
  156.  
  157. 'Current deck being displayed in the dialog.
  158. dim gintTempCurDeck
  159.  
  160. 'Holds all the card backs to be displayed later.
  161. dim grobjCardDeck(12)
  162.  
  163. 'Used when comparing with a King or Ace.
  164. dim gACE 
  165. dim gKING
  166.  
  167. 'Starting index into stack array of Shuffle Stack.
  168. dim gintShuffleStackInx
  169.  
  170. 'Starting index into stack array of Discard Stack.
  171. dim gintDiscardStackInx
  172.  
  173. 'Starting index into stack array of first Ace Stack
  174. dim gintAceStackStartInx 
  175.  
  176. 'This encompasses all 7 Card Stacks, 4 Ace Stacks,
  177. ' Shuffle Stack and Discard Stack.
  178. 'This array contains 30 items in each stack because 28 is 
  179. ' the maximum number of cards that could be in one stack
  180. ' plus two spaces for other info.
  181. ' The first dimension of the array determines which
  182. ' stack to use and the second dimension is what is on
  183. ' the stack. The first element in each stack is the
  184. ' stack object, the second element is the count of 
  185. ' elements and the third element onward is where the cards are stored.
  186. dim grobjAllCardStacks(13,30) 
  187.  
  188. 'Value of the bottom of the stack, empty stack.
  189. dim gstrBOTTOMOFSTACK 
  190.  
  191. 'Count of the total number of stacks used.
  192. dim gintCountAllStacks
  193.  
  194. 'Total number of card stacks (7).
  195. dim gintCountCardStacks
  196.  
  197. 'Number of pixels used between each card when
  198. ' being drawn.
  199. dim gintCardOffset
  200.  
  201. -->
  202. </SCRIPT>
  203. <SCRIPT LANGUAGE="VBScript">
  204. <!--
  205. '**********************************************
  206. '* Name: DebugPrint
  207. '**********************************************
  208. '* Description:
  209. '*    Provides a utility Function that displays
  210. '*     the string sent to it in a debug
  211. '*     "window." Currently, a listbox control
  212. '*     is used to display debug output.
  213. '*     Feel free to call this Function during
  214. '*     debugging. 
  215. '*    NOTE: Does depEnd on the existence of a 
  216. '*     listbox with the ID of lstDebugPrint
  217. '**********************************************
  218. '* Parameters:
  219. '*    str        String displayed to debug window
  220. '**********************************************
  221. Sub DebugPrint(str)
  222.     If gbDebug then
  223.         lstDebugPrint.additem str
  224.     END IF
  225. End Sub 'DebugPrint
  226.  
  227. '**********************************************
  228. '* Name: OnLoad event for ActiveX Layout
  229. '**********************************************
  230. '* Description:
  231. '*    Sets up the default values and
  232. '*     calls startgame to get things going.
  233. '**********************************************
  234. '* Parameters:
  235. '*    None
  236. '**********************************************
  237. Sub Form_OnLoad()
  238.     'Turn debug mode off
  239.     gbDebug = false
  240.     'Allow the user a checkbox for changing debug mode
  241.     chkDebug.value = gbDebug
  242.     
  243.     Form.DrawBuffer = "256000"
  244.     gACE = 1
  245.     gKING = 13
  246.     gCOUNTDEAL = 3
  247.  
  248.     gdFriction = 2
  249.     gdGravity = 9.8
  250.  
  251.       gstrBOTTOMOFSTACK = "BOS"
  252.  
  253.     'Spacing when drawing a card
  254.     gintCardOffset = 11
  255.   
  256.     gintShuffleStackInx = 12
  257.     gintDiscardStackInx = 13
  258.       gintCountCardStacks = 7
  259.     gintAceStackStartInx = gintCountCardStacks+1
  260.  
  261.     gintCountAllStacks = 13
  262.  
  263.     AceImage1.Picture = AceImage3.Picture
  264.     AceImage2.Picture = AceImage3.Picture
  265.     AceImage4.Picture = AceImage3.Picture
  266.     AceImage1.visible = true
  267.     AceImage2.visible = true
  268.     AceImage3.visible = true
  269.     AceImage4.visible = true
  270.  
  271.     StartGame  
  272. End Sub 'Form_OnLoad
  273.  
  274. '**********************************************
  275. '* Name: StartGame
  276. '**********************************************
  277. '* Description:
  278. '*    Gets the game going by setting up
  279. '*     the card back and shuffling and dealing 
  280. '*     the cards.
  281. '**********************************************
  282. '* Parameters:
  283. '*    None
  284. '**********************************************
  285. Sub StartGame
  286.     gbEndGame = False
  287.     'Values used during animation
  288.     gintDragSkip = 3
  289.     gbCardMoveDone = True
  290.     tmEndAnimation.enabled = false
  291.     tmEndCardMove.enabled = false
  292.     gincCardMoveSteps = 0
  293.     gincEndLeft = 0
  294.     gincEndTop = 0
  295.     gintCountMoving = 0
  296.  
  297.     LoadCards
  298.  
  299.      if gintCurDeck > -1 or gintCurDeck < -12 then
  300.         ChangeTheDeck -1
  301.     end if
  302.  
  303.     gRNDCOUNT = 500
  304.  
  305.     DealCards
  306. End Sub 'StartGame
  307.  
  308. '**********************************************
  309. '* Name: LoadCard
  310. '**********************************************
  311. '* Description:
  312. '*    Loads all the arrays with the card objects.
  313. '*    Initializes grbCardShowing.
  314. '*    Applies default values to the stacks.
  315. '**********************************************
  316. '* Parameters:
  317. '*    None
  318. '**********************************************
  319. Sub LoadCards
  320.     'Could also use a control array here but this
  321.     ' code loads the card objects into the array
  322.     set grobjAllCards(1) = Card1H
  323.     set grobjAllCards(2) = Card2H
  324.     set grobjAllCards(3) = Card3H
  325.     set grobjAllCards(4) = Card4H
  326.     set grobjAllCards(5) = Card5H
  327.     set grobjAllCards(6) = Card6H
  328.     set grobjAllCards(7) = Card7H
  329.     set grobjAllCards(8) = Card8H
  330.     set grobjAllCards(9) = Card9H
  331.     set grobjAllCards(10) = Card10H
  332.     set grobjAllCards(11) = Card11H
  333.     set grobjAllCards(12) = Card12H
  334.     set grobjAllCards(13) = Card13H
  335.     set grobjAllCards(14) = Card1D
  336.     set grobjAllCards(15) = Card2D
  337.     set grobjAllCards(16) = Card3D
  338.     set grobjAllCards(17) = Card4D
  339.     set grobjAllCards(18) = Card5D
  340.     set grobjAllCards(19) = Card6D
  341.     set grobjAllCards(20) = Card7D
  342.     set grobjAllCards(21) = Card8D
  343.     set grobjAllCards(22) = Card9D
  344.     set grobjAllCards(23) = Card10D
  345.     set grobjAllCards(24) = Card11D
  346.     set grobjAllCards(25) = Card12D
  347.     set grobjAllCards(26) = Card13D
  348.     set grobjAllCards(27) = Card1C
  349.     set grobjAllCards(28) = Card2C
  350.     set grobjAllCards(29) = Card3C
  351.     set grobjAllCards(30) = Card4C
  352.     set grobjAllCards(31) = Card5C
  353.     set grobjAllCards(32) = Card6C
  354.     set grobjAllCards(33) = Card7C
  355.     set grobjAllCards(34) = Card8C
  356.     set grobjAllCards(35) = Card9C
  357.     set grobjAllCards(36) = Card10C
  358.     set grobjAllCards(37) = Card11C
  359.     set grobjAllCards(38) = Card12C
  360.     set grobjAllCards(39) = Card13C
  361.     set grobjAllCards(40) = Card1S
  362.     set grobjAllCards(41) = Card2S
  363.     set grobjAllCards(42) = Card3S
  364.     set grobjAllCards(43) = Card4S
  365.     set grobjAllCards(44) = Card5S
  366.     set grobjAllCards(45) = Card6S
  367.     set grobjAllCards(46) = Card7S
  368.     set grobjAllCards(47) = Card8S
  369.     set grobjAllCards(48) = Card9S
  370.     set grobjAllCards(49) = Card10S
  371.     set grobjAllCards(50) = Card11S
  372.     set grobjAllCards(51) = Card12S
  373.     set grobjAllCards(52) = Card13S
  374.  
  375.  
  376.     'Make all cards transparent
  377.     ClearAllCards
  378.  
  379.     'Load up the card stacks
  380.     set grobjAllCardStacks(gintShuffleStackInx,1)= Shuffle
  381.     set grobjAllCardStacks(gintDiscardStackInx,1)= Discard
  382.  
  383.     set grobjAllCardStacks(1,1) = Stack1
  384.     set grobjAllCardStacks(2,1) = Stack2
  385.     set grobjAllCardStacks(3,1) = Stack3
  386.     set grobjAllCardStacks(4,1) = Stack4
  387.     set grobjAllCardStacks(5,1) = Stack5
  388.     set grobjAllCardStacks(6,1) = Stack6
  389.     set grobjAllCardStacks(7,1) = Stack7
  390.  
  391.     for inx = 1 to gintCountAllStacks
  392.         grobjAllCardStacks(inx,2) = 0
  393.     next 
  394.  
  395.     set grobjAllCardStacks(gintAceStackStartInx,1) = Ace1
  396.     set grobjAllCardStacks(gintAceStackStartInx+1,1) = Ace2
  397.     set grobjAllCardStacks(gintAceStackStartInx+2,1) = Ace3
  398.     set grobjAllCardStacks(gintAceStackStartInx+3,1) = Ace4
  399.  
  400.  
  401.     'Setup initial stack size by setting to the size of a card object.
  402.     ' Don't use default Discard Stack because is hardcoded.
  403.     for inx = 1 to gintCountAllStacks - 1
  404.         grobjAllCardStacks(inx,1).height = grobjAllCards(1).height
  405.         grobjAllCardStacks(inx,1).width = grobjAllCards(1).width
  406.     next
  407.  
  408.     set grobjCardDeck(1) = CardDeck1
  409.     set grobjCardDeck(2) = CardDeck2
  410.     set grobjCardDeck(3) = CardDeck3
  411.     set grobjCardDeck(4) = CardDeck4
  412.     set grobjCardDeck(5) = CardDeck5
  413.     set grobjCardDeck(6) = CardDeck6
  414.     set grobjCardDeck(7) = CardDeck7
  415.     set grobjCardDeck(8) = CardDeck8
  416.     set grobjCardDeck(9) = CardDeck9
  417.     set grobjCardDeck(10) = CardDeck10
  418.     set grobjCardDeck(11) = CardDeck11
  419.     set grobjCardDeck(12) = CardDeck12
  420.  
  421. End Sub 'LoadCard
  422.  
  423. '**********************************************
  424. '* Name: ChangeTheDeck
  425. '**********************************************
  426. '* Description:
  427. '*    Changes the current deck being used.
  428. '**********************************************
  429. '* Parameters:
  430. '*    DeckID    New card deck to be displayed.
  431. '*            Current value of deck is stored
  432. '*            in gintCurDeck.
  433. '**********************************************
  434. Sub ChangeTheDeck (DeckID)
  435.     'The deck back didn't change so don't redo it.
  436.     If gintCurDeck = DeckID then
  437.         exit Sub
  438.     End If
  439.     'Deck is new, let's change all the cards that need it.
  440.     gintCurDeck = DeckID
  441.  
  442.     for StackInx = 1 to gintCountAllStacks
  443.         for inner = 1 to intCountOnStack(StackInx)
  444.             strCard = strGetStackElement(StackInx,inner)
  445.             intCardInx = intGetCardIndex(strCard)
  446.             If not grbCardShowing(intCardInx) then
  447.                 'Redraw the cards that are not face up.
  448.                 DrawCard intCardInx
  449.             End If
  450.         next
  451.     next 
  452. End Sub 'ChangeTheDeck
  453.  
  454. '**********************************************
  455. '* Name: ClearAllCards
  456. '**********************************************
  457. '* Description:
  458. '*    Sets all card objects to their transparent
  459. '*     value.
  460. '**********************************************
  461. '* Parameters:
  462. '*    None
  463. '**********************************************
  464. Sub ClearAllCards
  465.     for inx = 1 to 52
  466.         grobjAllCards(inx).Suite = 0
  467.         grobjAllCards(inx).Visible = True
  468.     next 
  469. End Sub 'ClearAllCards
  470.  
  471. '**********************************************
  472. '* Name: Push
  473. '**********************************************
  474. '* Description:
  475. '*    Pushes (adds) a card object to a stack.
  476. '**********************************************
  477. '* Parameters:
  478. '*    intStack    Stack to add card to
  479. '*    strCard    Card to add
  480. '**********************************************
  481. Sub Push(intStack, strCard)
  482.     dim intNewSize
  483.  
  484.     If gstrBOTTOMOFSTACK <> strTopOfStack(intStack) then
  485.         grobjAllCardStacks(intStack,1).height = grobjAllCardStacks(intStack,1).height + intGetVertOffset(intStack)
  486. '        grobjAllCardStacks(intStack,1).width = grobjAllCardStacks(intStack,1).width + intGetHorzOffset(intStack)
  487.     End If
  488.  
  489.     intNewSize = grobjAllCardStacks(intStack,2)+1
  490.     grobjAllCardStacks(intStack,2) = intNewSize
  491.     grobjAllCardStacks(intStack,intNewSize+2) = strCard
  492.  
  493.     'This makes all cards but the top two invisible so drawing of the stack
  494.     ' is much faster
  495.     if intNewSize > 2 and _
  496.        (intStack >= gintAceStackStartInx and intStack <= gintAceStackStartInx+3) then
  497.         CardIndex = intGetCardIndex(grobjAllCardStacks(intStack,intNewSize+2-2))
  498.         grobjAllCards(CardIndex).suite = 0
  499.     end if
  500.  
  501. End Sub 'Push    
  502.  
  503.  
  504. '**********************************************
  505. '* Name: strPop
  506. '**********************************************
  507. '* Description:
  508. '*    Returns the string representation of
  509. '*     the card at the top of the stack and
  510. '*     removes it from the top.
  511. '**********************************************
  512. '* Parameters:
  513. '*    intStack    Stack to strPop card off of
  514. '**********************************************
  515. Function strPop(intStack)
  516.     strCard = strTopOfStack(intStack)
  517.  
  518.     If gstrBOTTOMOFSTACK = strCard then
  519.         strPop = gstrBOTTOMOFSTACK
  520.         exit Function
  521.     End If
  522.  
  523.     pos = grobjAllCardStacks(intStack,2)
  524.  
  525.     'This unhides the cards that were hidden in Sub Push
  526.     if pos > 2 and _
  527.        (intStack >= gintAceStackStartInx and intStack <= gintAceStackStartInx+3) then
  528.         CardIndex = intGetCardIndex(grobjAllCardStacks(intStack,pos+2-2))
  529.         grobjAllCards(CardIndex).suite = (CardIndex \ 13) + 1
  530.     end if
  531.  
  532.     strPop = grobjAllCardStacks(intStack,pos+2)
  533.     grobjAllCardStacks(intStack,2) = pos-1
  534.  
  535.     grobjAllCardStacks(intStack,1).height = grobjAllCardStacks(intStack,1).height - intGetVertOffset(intStack)
  536. '    grobjAllCardStacks(intStack,1).width = grobjAllCardStacks(intStack,1).width - intGetHorzOffset(intStack)
  537.  
  538. End Function 'Pop
  539.  
  540. '**********************************************
  541. '* Name: strGetStackElement
  542. '**********************************************
  543. '* Description:
  544. '*    Internal Stack function used to get
  545. '*     elements that are not on the top or the
  546. '*     bottom of the stack.
  547. '**********************************************
  548. '* Parameters:
  549. '*    intStack    Stack to get it from
  550. '*    intElement    Position of element
  551. '**********************************************
  552. Function strGetStackElement(intStack,intElement)
  553.     strGetStackElement = gstrBOTTOMOFSTACK
  554.     If Element <= intCountOnStack(intStack) then
  555.         strGetStackElement = grobjAllCardStacks(intStack,intElement+2)
  556.     End If
  557. End Function 'strGetStackElement
  558.  
  559. '**********************************************
  560. '* Name: strTopOfStack
  561. '**********************************************
  562. '* Description:
  563. '*    Returns the string value of the card
  564. '*    on the top of the stack. Does NOT
  565. '*    remove the card from the stack.
  566. '**********************************************
  567. '* Parameters:
  568. '*    intStack    Stack to get card from
  569. '**********************************************
  570. Function strTopOfStack(intStack)
  571.     strTopOfStack = gstrBOTTOMOFSTACK
  572.     If 0 < intCountOnStack(intStack) then
  573.         Pos = intCountOnStack(intStack)
  574.         strTopOfStack = grobjAllCardStacks(intStack,Pos+2)
  575.     End If
  576. End Function 'strTopOfStack
  577.  
  578. '**********************************************
  579. '* Name: strGenerateCard
  580. '**********************************************
  581. '* Description:
  582. '*    Generates a card randomly. If the deck has
  583. '*     not been shuffled yet, they will be.
  584. '**********************************************
  585. '* Parameters:
  586. '*    intCardCount    Card to get
  587. '**********************************************
  588. Function strGenerateCard(intCardCount)
  589.     dim rSorted(52)
  590.     'Shuffle the stack if not already done.
  591.     If not gbShuffleDone then
  592.         Randomize 
  593.         'Go a random number of elements into the sequence.
  594.         for inx = 1 to (gRNDCOUNT * rnd())
  595.         next
  596.  
  597.         'Load the unsorted array.
  598.         for inx = 1 to 52
  599.             rSorted(inx-1) = inx
  600.         next
  601.  
  602.         'Load a shuffled card into the array.
  603.         for inx = 0 to 51
  604.             random = cint(rnd() * (51 - inx))
  605.             grintShuffled(inx+1) = rSorted(random)
  606.             rSorted(random) = rSorted(51 - inx)
  607.         next
  608.         gbShuffleDone = true
  609.     End If
  610.     intCardNum = grintShuffled(intCardCount)
  611.     strGenerateCard = strInxToCard(intCardNum)
  612. End Function 'strGenerateCard
  613.  
  614. '**********************************************
  615. '* Name: strInxToCard
  616. '**********************************************
  617. '* Description:
  618. '*    Converts a card number (index) to its
  619. '*     string representation.
  620. '**********************************************
  621. '* Parameters:
  622. '*    intCardNum    Value of card
  623. '**********************************************
  624. Function strInxToCard(intCardNum)
  625.     inxSuit = 0
  626.     
  627.     intCurCardNum = intCardNum
  628.     while 13 < intCurCardNum
  629.         intCurCardNum = intCurCardNum - 13
  630.         inxSuit = inxSuit + 1
  631.     wEnd
  632.     Select Case inxSuit
  633. 'Clubs, Spades, Hearts and Diamonds is the current order
  634. ' of Suits.
  635. 'Order in Card.ocx is dependent on suit order.
  636.     case 0
  637.         strSuit = "C"
  638.     case 1
  639.         strSuit = "S"
  640.     case 2
  641.         strSuit = "H"
  642.     case 3
  643.         strSuit = "D"
  644.     case Else
  645.         debugPrint "Error (strInxToCard): attempting to increment suit past last one"
  646.     End select
  647.  
  648.     strCurCard = intCurCardNum & strSuit
  649.     strInxToCard = strCurCard
  650. End Function 'strInxToCard
  651.  
  652. '**********************************************
  653. '* Name: strGetCardSuit
  654. '**********************************************
  655. '* Description:
  656. '*    Returns the suit of a card.
  657. '**********************************************
  658. '* Parameters:
  659. '*    strCard    Card to get the suit of.
  660. '**********************************************
  661. Function strGetCardSuit(strCard)
  662.     strGetCardSuit = ""
  663.     If "" = strCard then
  664.         exit Function
  665.     End If
  666.  
  667.     strGetCardSuit = right(strCard,1)
  668. End Function 'strGetCardSuit
  669.  
  670. '**********************************************
  671. '* Name: intGetCardIndex
  672. '**********************************************
  673. '* Description:
  674. '*    Returns the position, (index) into the
  675. '*      AllCards array of where the card is.
  676. '**********************************************
  677. '* Parameters:
  678. '*    strCard    Card to find index of.
  679. '**********************************************
  680. Function intGetCardIndex(strCard)
  681.     If "" = strCard or gstrBOTTOMOFSTACK = strCard then
  682.         intGetCardIndex = -1
  683.         exit Function
  684.     End If
  685.     strSuit = right(strCard,1)
  686. 'Order in Card.ocx is dependent on suit order.
  687.     Select case strSuit
  688.     case "H"
  689.         Offset = 26
  690.     case "D"
  691.         Offset = 39
  692.     case "S"
  693.         Offset = 13
  694.     case "C"
  695.         Offset = 0
  696.     End Select
  697.  
  698.     intGetCardIndex = Offset + intCardVal(strCard)
  699. End Function 'intGetCardIndex
  700.  
  701. '**********************************************
  702. '* Name: intCardVal
  703. '**********************************************
  704. '* Description:
  705. '*    Returns the numeric value of a given card,
  706. '*     independent of suit.
  707. '*     Ex: 10 of Hearts is "10H" and the value
  708. '*     returned would be 10.
  709. '**********************************************
  710. '* Parameters:
  711. '*    strCard    Card to get value of.
  712. '**********************************************
  713. Function intCardVal(strCard)
  714.     dim tmpVal
  715.     If "" = strCard or gstrBOTTOMOFSTACK = strCard then
  716.         tmpVal = -1
  717.     Else
  718.         tmpVal = left(strCard,len(strCard) -1)
  719.     End If
  720.     intCardVal = cint(tmpVal)
  721. End Function 'intCardVal
  722.  
  723. '**********************************************
  724. '* Name: bSameSuit
  725. '**********************************************
  726. '* Description:
  727. '*    Returns:
  728. '*       True    if cards are the same suit.
  729. '*      False    if suits are different.
  730. '**********************************************
  731. '* Parameters:
  732. '*    strCard1    First card.
  733. '*    strCard2    Card to compare against first card.
  734. '**********************************************
  735. Function bSameSuit(strCard1,strCard2)
  736.     'Get the values of both cards.
  737.     strSuit1 = strGetCardSuit(strCard1)
  738.     strSuit2 = strGetCardSuit(strCard2)
  739.     
  740.     bSameSuit = (strSuit1 = strSuit2)
  741. End Function 'bSameSuit
  742.  
  743. '**********************************************
  744. '* Name: bSameColor
  745. '**********************************************
  746. '* Description:
  747. '*    Returns:
  748. '*        True    if cards are the same color.
  749. '*        False    if cards are different color.
  750. '**********************************************
  751. '* Parameters:
  752. '*    strCard1    First card.
  753. '*    strCard2    Card to compare against first card.
  754. '**********************************************
  755. Function bSameColor(strCard1,strCard2)
  756.  
  757.     strSuit1 = strGetCardSuit(strCard1)
  758.     strSuit2 = strGetCardSuit(strCard2)
  759.  
  760.     'Are they the same suit?
  761.     If (strSuit1 = strSuit2) then
  762.         bSameColor = True
  763.         exit Function
  764.     End If
  765.     'Since both cards don't match suit
  766.     ' check the other suit of that color.
  767.     Select Case strSuit1
  768.     case "H"
  769.         bSameColor = (strSuit2 = "D")
  770.     case "D"
  771.         bSameColor = (strSuit2 = "H")
  772.     case "S"
  773.         bSameColor = (strSuit2 = "C")
  774.     case "C"
  775.         bSameColor = (strSuit2 = "S")
  776.     End select
  777.  
  778. End Function 'bSameColor
  779.  
  780. '**********************************************
  781. '* Name: intGetHorzOffset
  782. '**********************************************
  783. '* Description:
  784. '*    Returns the current horizontal offset
  785. '*    in pixels when drawing the cards on a stack.
  786. '**********************************************
  787. '* Parameters:
  788. '*    intStack    Stack to draw.
  789. '**********************************************
  790. Function intGetHorzOffset(intStack)
  791.     intGetHorzOffset = 0
  792.     'Only the Discard Stack has a horizontal offset.
  793.     If (gintDiscardStackInx = intStack) then
  794.         intGetHorzOffset = gintCardOffset
  795.     End If
  796. End Function 'intGetHorzOffset
  797.  
  798. '**********************************************
  799. '* Name: intGetVertOffset
  800. '**********************************************
  801. '* Description:
  802. '*    Returns the vertical offset, used during
  803. '*    drawing a stack, for a particular stack.
  804. '**********************************************
  805. '* Parameters:
  806. '*    intStack    Stack to return Vertical
  807. '*             offset for.
  808. '**********************************************
  809. Function intGetVertOffset(intStack)
  810.     intGetVertOffset = gintCardOffset
  811.     'HARDCODE ASSUMPTION: ALL Stacks above gintAceStackStartInx WILL have a vert offset of 0
  812.     If (gintAceStackStartInx <= intStack) then
  813.         intGetVertOffset = 0
  814.     End If
  815. End Function 'intGetVertOffset
  816.  
  817. '**********************************************
  818. '* Name: DrawDiscardStack
  819. '**********************************************
  820. '* Description:
  821. '*    The Discard Stack is drawn in this routine
  822. '*    because it is a special case of the draw
  823. '*    routine. The difference being that all 
  824. '*    other stacks draw ALL cards with an offset
  825. '*    and the discard ONLY draws the cards on
  826. '*    the top of its pile with an offset.
  827. '**********************************************
  828. '* Parameters:
  829. '*    None
  830. '**********************************************
  831. Sub DrawDiscardStack
  832.     dim intStartOffset
  833.     dim intStackSize
  834.     dim intCountPiles
  835.     dim intRemainder
  836.  
  837.     'Default Offset Values
  838.     intHorzOffset = intGetHorzOffset(gintDiscardStackInx)
  839.     intVertOffset = intGetVertOffset(gintDiscardStackInx)
  840.  
  841.     intStackSize = intCountOnStack(gintDiscardStackInx)
  842.  
  843.     'See if less than three cards were transferred to Discard Stack.
  844.     intStartOffset = (intStackSize - gintCountDiscarded)
  845.  
  846.     'Draw all underneath cards that won't have an offset.
  847.     for inx = 0 to intStartOffset - 1
  848.         strCard = grobjAllCardStacks(gintDiscardStackInx,inx + 3)
  849.         CardIndex = intGetCardIndex(strCard)
  850.         grobjAllCards(CardIndex).top = grobjAllCardStacks(gintDiscardStackInx,1).top 
  851.         grobjAllCards(CardIndex).left = grobjAllCardStacks(gintDiscardStackInx,1).left 
  852.         DrawCard CardIndex
  853.     next 
  854.     OffsetInx = 0
  855.     'Draw the cards at the top of the Discard Stack.
  856.     for inx = intStartOffset to intStackSize - 1
  857.         strCard = grobjAllCardStacks(gintDiscardStackInx,inx + 3)
  858.         CardIndex = intGetCardIndex(strCard)
  859.         grobjAllCards(CardIndex).top = grobjAllCardStacks(gintDiscardStackInx,1).top  + (OffsetInx * intVertOffset)
  860.         grobjAllCards(CardIndex).left = grobjAllCardStacks(gintDiscardStackInx,1).left + (OffsetInx * intHorzOffset)
  861.         DrawCard CardIndex
  862.         OffsetInx = OffsetInx + 1
  863.         'Bring that card to top of pile.
  864.         grobjAllCards(CardIndex).ZOrder(0)
  865.     next
  866.     'Make sure to bring hotspot stack to top of z order so it can get events.
  867.     grobjAllCardStacks(gintDiscardStackInx,1).ZOrder(0)
  868.  
  869. End Sub 'DrawDiscardStack
  870.  
  871. '**********************************************
  872. '* Name: DrawCard
  873. '**********************************************
  874. '* Description:
  875. '*    Here we draw a card based on the index
  876. '*    sent in.
  877. '*    NOTE: if Card.ocx changes it will most likely
  878. '*    effect code here.
  879. '**********************************************
  880. '* Parameters:
  881. '*    intCardIndex    Index into card array of
  882. '*                 card being drawn.
  883. '**********************************************
  884. Sub DrawCard (CardIndex)
  885.     If True = grbCardShowing(CardIndex) then
  886.  
  887.         'Calculate which suit it was so we
  888.         ' can change it back.
  889.         inxSuit = (CardIndex \ 13)
  890.         inxCard = CardIndex - (inxSuit*13)
  891.         If (0 <> inxCard) then
  892.             inxSuit = inxSuit + 1
  893.         Else
  894.             inxCard = 13
  895.         End If
  896.         grobjAllCards(CardIndex).Number= inxCard
  897.     Else
  898.         'Cards are face down, let's use the current deck.
  899.         inxSuit = gintCurDeck
  900.     End If
  901.     grobjAllCards(CardIndex).Suite= inxSuit
  902. End Sub 'DrawCard
  903.  
  904. '**********************************************
  905. '* Name: DrawStack
  906. '**********************************************
  907. '* Description:
  908. '*    Draws a specific stack by getting the correct
  909. '*     offset and then calling DrawCard.
  910. '**********************************************
  911. '* Parameters:
  912. '*    intStack    Stack to draw.
  913. '**********************************************
  914. Sub DrawStack (intStack)
  915.  
  916.     'Default Offset Values
  917.     intHorzOffset = intGetHorzOffset(intStack)
  918.     intVertOffset = intGetVertOffset(intStack)
  919.     If 0 = intCountOnStack(intStack) then Exit Sub
  920.  
  921.     If (gintDiscardStackInx = intStack) then
  922.         DrawDiscardStack
  923.         exit Sub
  924.     End If
  925.  
  926.     for inx = 1 to intCountOnStack(intStack)
  927.     'This cycles through all the cards in the stack applying an offset.
  928.         strCard = grobjAllCardStacks(intStack,inx + 2)
  929.         intCardIndex = intGetCardIndex(strCard)
  930.         grobjAllCards(intCardIndex).top = grobjAllCardStacks(intStack,1).top + ((inx-1) * intVertOffset)
  931.         grobjAllCards(intCardIndex).left = grobjAllCardStacks(intStack,1).left + ((inx-1) * intHorzOffset)
  932.  
  933.         DrawCard intCardIndex
  934.     next
  935.     If (0 < intCardIndex) then 
  936.         grobjAllCards(intCardIndex).ZOrder(0)
  937.         grobjAllCardStacks(intStack,1).ZOrder(0)
  938.     End If
  939. End Sub 'DrawStack
  940.  
  941. '**********************************************
  942. '* Name: DealCards
  943. '**********************************************
  944. '* Description:
  945. '*    Here we deal the cards to each of the
  946. '*    7 card stacks and put the rest into
  947. '*    the Shuffle Stack.
  948. '**********************************************
  949. '* Parameters:
  950. '*    NONE
  951. '**********************************************
  952. Sub DealCards
  953.     'The first time calling GenerateCard we have
  954.     ' to be sure it shuffles the deck.
  955.     gbShuffleDone = false
  956.     intCardCount = 1
  957.  
  958.     'This set of loops will deal the cards
  959.     ' needed to the 7 stacks.
  960.     for inxStack = 1 to gintCountCardStacks
  961.         For inx = 1 to inxStack
  962.             strCard = strGenerateCard(intCardCount)
  963.             'Push on the new card.
  964.             Push inxStack,strCard
  965.             intCardInx = intGetCardIndex(strCard)
  966.             grbCardShowing(intCardInx) = False
  967.             intCardCount = intCardCount +1
  968.             grobjAllCards(intCardInx).Zorder(0)
  969.         next 
  970.         'Only show the top card on the stack.
  971.         grbCardShowing(intCardInx) = True
  972.         DrawStack inxStack
  973.     next 
  974.  
  975.     'Give the rest to the Shuffle Stack.
  976.     for Card = intCardCount to 52
  977.         strCard = strGenerateCard(Card)
  978.         push gintShuffleStackInx, strCard
  979.         intCardInx = intGetCardIndex(strCard)
  980.         grbCardShowing(intCardInx) = false
  981.         grobjAllCards(intCardInx).Zorder(0)
  982.     next
  983.     DrawStack gintShuffleStackInx
  984. End Sub 'DealCards
  985.  
  986. '**********************************************
  987. '* Name: DoDblClick
  988. '**********************************************
  989. '* Description:
  990. '*    Here is where all double-clicking of
  991. '*      a card is processed. The double-click
  992. '*     allows a card to be put on an Ace Stack,
  993. '*     if the move is valid, with the 
  994. '*     top card on the stack clicked.
  995. '**********************************************
  996. '* Parameters:
  997. '*    intStack    The stack that was double-clicked.
  998. '**********************************************
  999. Sub DoDblClick(intStack)
  1000.     'If Valid Move then move it.
  1001.     intAceInx = gintAceStackStartInx
  1002.     bMoved = false
  1003.  
  1004.     strCard = strTopOfStack(intStack)
  1005.     If (gstrBOTTOMOFSTACK = strCard) then Exit Sub
  1006.  
  1007.     'Until we find a valid move or run out of Ace Stacks to check.
  1008.     While intAceInx < gintAceStackStartInx + 4 and not bMoved
  1009.         bMoved = bIsLegalMove(intStack,intAceInx,strCard)
  1010.         intAceInx = intAceInx + 1
  1011.     wEnd
  1012.  
  1013.     If bMoved then
  1014.         gintSrcStack = intStack
  1015.         MoveCard intAceInx -1
  1016.     End If
  1017.     'Turn off the moving of a card.
  1018.     gintMoveCardInx = -1
  1019. End Sub 'DoDblClick
  1020.  
  1021. '**********************************************
  1022. '* Name: ShuffleClicked
  1023. '**********************************************
  1024. '* Description:
  1025. '*    When the Shuffle Stack is clicked we
  1026. '*    must either put some cards on the
  1027. '*    Discard Stack, or if the Shuffle Stack is empty
  1028. '*    move all the cards from the Discard Stack.
  1029. '**********************************************
  1030. '* Parameters:
  1031. '*    intStack    Should be the Shuffle Stack.
  1032. '**********************************************
  1033. Sub ShuffleClicked(intStack)
  1034.     dim strCard
  1035.     dim inx
  1036.     'Do we actually have cards to move?
  1037.     If gstrBOTTOMOFSTACK <> strTopOfStack(intStack) then
  1038.         inx = 0
  1039.         strCard = strPop(intStack)
  1040.         'Move cards to Discard Stack until we are out of cards or
  1041.         ' hit the number we wanted to move.
  1042.         while (gCOUNTDEAL > inx) and (gstrBOTTOMOFSTACK <> strCard)
  1043.             Push gintDiscardStackInx, strCard
  1044.             intCardInx = intGetCardIndex(strCard)
  1045.             If -1 <> intCardInx then grbCardShowing(intCardInx) = True
  1046.             inx = inx + 1
  1047.             strCard = strPop(intStack)
  1048.         Wend
  1049.         If (gCOUNTDEAL = inx ) and (gstrBOTTOMOFSTACK <> strCard) then Push intStack,strCard
  1050.         gintCountDiscarded = inx
  1051.     Else
  1052.         'No more to move so let's move discard back to shuffle.
  1053.         for inx = 1 to intCountOnStack(gintDiscardStackInx)
  1054.             strCard = strPop(gintDiscardStackInx)
  1055.             Push intStack,strCard
  1056.             intCardInx = intGetCardIndex(strCard)
  1057.             grbCardShowing(intCardInx) = False
  1058.         next 
  1059.         DrawStack intStack
  1060.         gintCountDiscarded = 0
  1061.     End If
  1062.     DrawStack gintDiscardStackInx
  1063. End Sub 'ShuffleClicked
  1064.  
  1065. '**********************************************
  1066. '* Name: intCountOnStack
  1067. '**********************************************
  1068. '* Description:
  1069. '*    Returns number of elements on stack given.
  1070. '**********************************************
  1071. '* Parameters:
  1072. '*    intStack    Stack to get number from.
  1073. '**********************************************
  1074. Function intCountonStack(intStack)
  1075.     intCountOnStack = grobjAllCardStacks(intStack,2)
  1076. End Function
  1077.  
  1078. '**********************************************
  1079. '* Name: SetMoveStartValues
  1080. '**********************************************
  1081. '* Description:
  1082. '*    This is the first function called in the 
  1083. '*     action of moving a card. This is where
  1084. '*     the MouseDown events call to so stated
  1085. '*     variables can be initialized.
  1086. '*     Also the top and left start positions
  1087. '*     are set up here for the card drag.
  1088. '*    
  1089. '**********************************************
  1090. '* Parameters:
  1091. '*    intStack    Stack moving from
  1092. '*    x        Start left mouse position
  1093. '*    y        Start top mouse position
  1094. '**********************************************
  1095. Sub SetMoveStartValues (intStack,x,y)
  1096.  
  1097.     dim intCount
  1098.  
  1099.     CardMoving = strTopOfStack(intStack)
  1100.     If gstrBOTTOMOFSTACK <>  CardMoving then
  1101.         intCardInx = intGetCardIndex(CardMoving)
  1102.         If not grbCardShowing(intCardInx) then
  1103.             'Card was on the stack but not visible, so
  1104.             ' make it visible and exit the move.
  1105.             gintMoveCardInx = -1
  1106.             grbCardShowing(intCardInx) = True
  1107.             DrawCard intCardInx
  1108.             exit Sub
  1109.         End If
  1110.     Else
  1111.         gintMoveCardInx = -1
  1112.         Exit Sub
  1113.     End If
  1114.  
  1115.     'If this isn't from an Ace Stack. then we must calculate
  1116.     ' which card it is on that stack,
  1117.     If (gintAceStackStartInx > intStack) then
  1118.         intCount = intCountOnStack(intStack)
  1119.         'Calculate card position using default offset amount.
  1120.         ' No need to check horizontal offset because we wouldn't
  1121.         ' get this event unless we were already in the stack.
  1122.         ClickedCard = (Y \ intGetVertOffset(intStack)) + 1
  1123.         If ClickedCard > intCount then
  1124.             ClickedCard = intCount
  1125.         End If
  1126.         'Number of cards we are moving.
  1127.         gintCountMoving = (intCount - ClickedCard) + 1
  1128.  
  1129.         CardMoving = strGetStackElement(intStack,ClickedCard)
  1130.     Else
  1131.         'Can only move the top element on an Ace Stack.
  1132.         CardMoving = strTopOfStack(intStack)
  1133.         If (gstrBOTTOMOFSTACK = CardMoving) then
  1134.             gintMoveCardInx = -1
  1135.             exit Sub
  1136.         End If
  1137.         gintCountMoving = 1
  1138.     End If
  1139.         
  1140.     gintMoveCardInx = intGetCardIndex(CardMoving)
  1141.  
  1142.     If not grbCardShowing(gintMoveCardInx) then
  1143.         gintMoveCardInx = -1
  1144.         exit Sub
  1145.     End If
  1146.         
  1147.     'Save the stack it came from.
  1148.     gintSrcStack = intStack
  1149.  
  1150.     'Save starting values for the card to be used in
  1151.     ' DragCard.
  1152.     gdCardTop = grobjAllCards(gintMoveCardInx).top 
  1153.        gdCardLeft = grobjAllCards(gintMoveCardInx).left 
  1154.  
  1155.     intStackSize = intCountOnStack(intStack)
  1156.     for inx =  (intStackSize - gintCountMoving)+ 1 to intStackSize
  1157.         'Move the card to top of z order
  1158.         intCardInx = intGetCardIndex(strGetStackElement(intStack,inx))
  1159.         grobjAllCards(intCardInx).ZOrder(0)
  1160.     next 
  1161.  
  1162.     gdOffsetTop = intGetVertOffset(intStack) * intCountOnStack(intStack)
  1163.     gdStartTop = y
  1164.     gdStartLeft = x
  1165.  
  1166. End Sub 'SetMoveStartValues
  1167.  
  1168. '**********************************************
  1169. '* Name: DragCard
  1170. '**********************************************
  1171. '* Description:
  1172. '*    This is where a card is dragged.  Drag stops
  1173. '*    when a MouseUp event is fired.
  1174. '**********************************************
  1175. '* Parameters:
  1176. '*    intStack    Stack moving from
  1177. '*    x        Start left mouse position.
  1178. '*    y        Start top mouse position.
  1179. '**********************************************
  1180. Sub DragCard (intStack,x,y)
  1181.     'Move Top of intStack
  1182.     dim cntCard
  1183.  
  1184.     If gintMoveCardInx = -1 then Exit Sub
  1185.  
  1186.     'DragSkip is used to ignore a number of 
  1187.     ' MouseMove events. This is done so
  1188.     ' we won't be overdrawing the card
  1189.     ' when a draw really isn't necessary.
  1190.     ' It will also make the drag appear to be
  1191.     ' more responsive
  1192.  
  1193.     gintDragSkip = gintDragSkip - 1
  1194.     If gintDragSkip <> 0 then exit Sub
  1195.     gintDragSkip = 3
  1196.  
  1197.     intStackSize = intCountOnStack(intStack)
  1198.     cntCard = 0
  1199.     'Figure out new top and left.
  1200.     MyTop = grobjAllCards(gintMoveCardInx).top
  1201.     MyLeft = grobjAllCards(gintMoveCardInx).left
  1202.     for inx =  (intStackSize - gintCountMoving) + 1 to intStackSize
  1203.         intCardInx = intGetCardIndex(strGetStackElement(intStack,inx))
  1204.         'Apply new values to cards below current one, being sure to maintain offset.
  1205.         grobjAllCards(intCardInx).top =  MyTop + (y - gdStartTop) + (cntCard * intGetVertOffset(intStack))
  1206.            grobjAllCards(intCardInx).left = MyLeft +  (x - gdStartLeft)
  1207.         cntCard = cntCard + 1
  1208.     next 
  1209.  
  1210.     gdStartTop = y
  1211.     gdStartLeft = x
  1212. End Sub 'DragCard
  1213.  
  1214. '**********************************************
  1215. '* Name: SetMouseUp
  1216. '**********************************************
  1217. '* Description:
  1218. '*    Tells the move operation that MouseUp has
  1219. '*    happened. Will take care of seeing if 
  1220. '*    card was dropped in a movable place and
  1221. '*    if so, moves the card. If not in a valid
  1222. '*    place then the card is returned to the start
  1223. '*    stack.
  1224. '**********************************************
  1225. '* Parameters:
  1226. '*    intStack        Stack moving from.
  1227. '*    x        Start left mouse position.
  1228. '*    y        Start top mouse position.
  1229. '**********************************************
  1230. Sub SetMouseUp (intStack, x,y)
  1231.     If gintMoveCardInx = -1 then exit Sub
  1232.  
  1233.     'Calculate the screen coordinates based on the x and y.
  1234.     ScrnX = X + grobjAllCardStacks(intStack,1).left
  1235.     ScrnY = Y + grobjAllCardStacks(intStack,1).top
  1236.     inxStack = 1
  1237.     bHit = False
  1238.     while (inxStack <= gintCountAllStacks) and Not bHit
  1239.         set pCurStack = grobjAllCardStacks(inxStack,1)
  1240.  
  1241.         'Hit testing to see if we dropped it on a stack.
  1242.         If ScrnX >= pCurStack.left and ScrnX <= (pCurStack.Left + pCurStack.Width) then
  1243.             If ScrnY >= pCurStack.Top and ScrnY <= (pCurStack.Top + pCurStack.Height) then
  1244.                 bHit = True
  1245.             End If
  1246.         End If
  1247.         inxStack = inxStack + 1
  1248.     wEnd
  1249.     If inxStack > gintCountAllStacks then
  1250.         'Move it Back.
  1251.         MoveCard gintSrcStack
  1252.     Else
  1253.         'Move it for real.
  1254.         MoveCard inxStack-1
  1255.     End If
  1256. End Sub 'SetMouseUp
  1257.  
  1258. '**********************************************
  1259. '* Name: bIsLegalMove
  1260. '**********************************************
  1261. '* Description:
  1262. '*    Returns:
  1263. '*     True     Move from Src to Dest is valid.
  1264. '*     False    Not valid to move from Src to Dest.
  1265. '*
  1266. '*     Move is valid to a card stack when:
  1267. '*      Card moving is one less and different color.
  1268. '*    Move is valid to an Ace Stack when:
  1269. '*      Card moving is one greater and same suit.
  1270. '*    Moves are valid between card stacks and
  1271. '*    from ace and Discard Stack to card stack.
  1272. '*
  1273. '*     Not valid:
  1274. '*      Ace or Card stack to Discard Stack
  1275. '*      if card not face up.
  1276. '**********************************************
  1277. '* Parameters:
  1278. '*    intSrcStack    Stack coming from.
  1279. '*    intDestStack    Stack going to.
  1280. '*    strCard        Card being moved.
  1281. '**********************************************
  1282. Function bIsLegalMove(intSrcStack,intDestStack, strCard)
  1283.     dim intCard
  1284.     dim intCardInx
  1285.  
  1286.     bIsLegalMove = False
  1287.     'Can put a card anywhere we want in debug mode.
  1288.     If gbDebug then    
  1289.         bIsLegalMove = gbDebug
  1290.         exit Function
  1291.     End If
  1292.     if gintCountMoving > 1 and (intDestStack >= gintAceStackStartInx and intDestStack <= (gintAceStackStartInx + 3)) then
  1293.         exit function
  1294.     end if
  1295.  
  1296.     intCardInx = intGetCardIndex(strCard)
  1297.     If -1 = intCardInx then exit Function
  1298.  
  1299.     'Not valid, not visible.
  1300.     If not grbCardShowing(intCardInx) then Exit Function
  1301.  
  1302.     'Nothing moves to the Discard Stack (Not Valid).
  1303.     If gintDiscardStackInx = intDestStack then exit Function
  1304.  
  1305.     'Get card on top of destination for testing.
  1306.     DestCard = strTopOfStack(intDestStack)
  1307.     intCard = intCardVal(strCard)
  1308.     If gintAceStackStartInx <= intDestStack then
  1309.         'Move to Ace intStack?
  1310.         If (gstrBOTTOMOFSTACK = DestCard) then
  1311.             'Can move to empty Ace Stack if card is an Ace.
  1312.             bIsLegalMove = (gACE = intCard)
  1313.         Else
  1314.             bIsLegalMove = (bSameSuit (strCard,DestCard) and (intCard - 1 = intCardVal(DestCard)))
  1315.         End If
  1316.     Else 'Move to CardStack
  1317.         If (gstrBOTTOMOFSTACK = DestCard) then
  1318.             'Can move to empty card stack if card is a King.
  1319.             bIsLegalMove = (gKING = intCard)
  1320.         Else
  1321.             bIsLegalMove = ((Not bSameColor(strCard,DestCard)) and (intCard + 1 = intCardVal(DestCard)))
  1322.         End If
  1323.     End If
  1324. End Function
  1325.  
  1326. '**********************************************
  1327. '* Name: tmNewCard_Timer
  1328. '**********************************************
  1329. '* Description:
  1330. '*    Here is where a new card is assigned to 
  1331. '*     the animation routine when the last one
  1332. '*     has finished moving to the Ace Stack.
  1333. '**********************************************
  1334. '* Parameters:
  1335. '*    None
  1336. '**********************************************
  1337. Sub tmNewCard_Timer()
  1338.     If gbCardMoveDone then
  1339.         'Turn off all timers until we get a new card assigned.
  1340.         tmNewCard.enabled = false
  1341.         gbCardMoveDone = false
  1342.         'Our Start Case.
  1343.         If gintCurStackToMove = 0 then
  1344.             gintCurStackToMove = gintAceStackStartInx
  1345.         Else
  1346.             gobjCurMoveCard.left = grobjAllCardStacks(gintCurStackToMove,1).left
  1347.             gobjCurMoveCard.top = grobjAllCardStacks(gintCurStackToMove,1).top
  1348.         End If
  1349.  
  1350.         'See if cards are already on the Ace Stack.
  1351.         strCard = strTopOfStack(gintCurStackToMove)
  1352.         intCard = intCardVal(strCard)
  1353.         If -1 = intCard then
  1354.             intCard = gACE
  1355.         Else
  1356.             'Already have cards on the stack, let's pile the rest on.
  1357.             If 13 = intCard then gintCurStackToMove = gintCurStackToMove + 1
  1358.             intCard = intCard + 1
  1359.             While (intCard = 14) and (gintCurStackToMove <> gintAceStackStartInx + 4)
  1360.                 strCard = strTopOfStack(gintCurStackToMove)
  1361.                 If gstrBOTTOMOFSTACK = strCard then
  1362.                     intCard = gACE
  1363.                 Else
  1364.                     intCard = intCardVal(strCard)
  1365.                 End If
  1366.             Wend
  1367.         End If
  1368.         'We are done moving. Call end-game animation to bounce cards away
  1369.         If (gintCurStackToMove =  gintAceStackStartInx + 4) then
  1370.             SeeIfGameOver gintAceStackStartInx
  1371.             exit Sub
  1372.         End If
  1373.  
  1374.         'Current suit that is moving.
  1375.         CurMoveSuit = mid(gstrSuitOrder,((gintCurStackToMove - gintAceStackStartInx) + 1),1)
  1376.  
  1377.         'Move the card to the destination.
  1378.         strCard = intCard & CurMoveSuit
  1379.         push gintCurStackToMove,strCard
  1380.  
  1381.         'Get next card.
  1382.         intCardInx = intGetCardIndex(strCard)
  1383.         set gobjCurMoveCard = grobjAllCards(intCardInx)
  1384.  
  1385.         grbCardShowing(intCardInx) = True
  1386.         gobjCurMoveCard.ZOrder(0)
  1387.         DrawCard intCardInx
  1388.         
  1389.  
  1390.         'Figure out increments for moving it.
  1391.         gincCardMoveSteps = 5
  1392.         gincEndLeft = ((gobjCurMoveCard.left - grobjAllCardStacks(gintCurStackToMove,1).Left) \ gincCardMoveSteps)
  1393.         gincEndTop = ((gobjCurMoveCard.Top - grobjAllCardStacks(gintCurStackToMove,1).Top) \ gincCardMoveSteps)
  1394.     
  1395.         'Start the moving of the new card.
  1396.         tmEndCardMove.enabled = true
  1397.     End If
  1398. End Sub 'tmNewCard_Timer
  1399.  
  1400. '**********************************************
  1401. '* Name: tmEndCardMove_Timer
  1402. '**********************************************
  1403. '* Description:
  1404. '*    Here is where the actual moving of a 
  1405. '*    card to its Ace Stack happens after the
  1406. '*    user clicks End_The_Game.
  1407. '**********************************************
  1408. '* Parameters:
  1409. '*    None
  1410. '**********************************************
  1411. Sub tmEndCardMove_Timer()
  1412.     If (gincCardMoveSteps =  0) then
  1413.         'If card has completed moving, get a new one.
  1414.         gbCardMoveDone = true
  1415.         tmEndCardMove.enabled = false
  1416.         tmNewCard.enabled = true
  1417.         exit Sub
  1418.     End If
  1419.  
  1420.     'Not done yet, move it another increment.
  1421.     gincCardMoveSteps = gincCardMoveSteps - 1
  1422.     gobjCurMoveCard.left = gobjCurMoveCard.left - gincEndLeft
  1423.     gobjCurMoveCard.top = gobjCurMoveCard.top - gincEndTop
  1424. End Sub 'tmEndCardMove_Timer
  1425.  
  1426. '**********************************************
  1427. '* Name: EndTheGame
  1428. '**********************************************
  1429. '* Description:
  1430. '*    When a user clicks End the Game, this is where
  1431. '*    the whole process of moving
  1432. '*    those cards is started.
  1433. '**********************************************
  1434. '* Parameters:
  1435. '*    None
  1436. '**********************************************
  1437. Sub EndTheGame()
  1438.     'Remove ALL cards from the card stacks.
  1439.     for inx = 1 to gintCountCardStacks
  1440.         strCard = strPop(inx)
  1441.         while (strCard <> gstrBOTTOMOFSTACK)
  1442.             strCard = strPop(inx)
  1443.         Wend
  1444.     next
  1445.  
  1446.     gstrSuitOrder = ""
  1447.     'Figure out the order the suits are placed on the Ace Stack.
  1448.     ' gstrSuitOrder holds the order.
  1449.     for inx = gintAceStackStartInx to gintAceStackStartInx + 3    
  1450.         strCard = strTopOfStack(inx)
  1451.         If strCard <> gstrBOTTOMOFSTACK then
  1452.             gstrSuitOrder = gstrSuitOrder & strGetCardSuit(strCard)
  1453.         Else
  1454.             gstrSuitOrder = gstrSuitOrder & " "
  1455.         End If
  1456.     next 
  1457.     curSuit = "C"
  1458.     'Default order is CSHD if no cards are have been played on an Ace Stack.
  1459.     ' If cards are already displayed then figure out which ones we are missing
  1460.     ' and add them to the spaces in the string.
  1461.     for inx = 1 to 4
  1462.         If instr(gstrSuitOrder,curSuit) = 0 then
  1463.             blank = instr(gstrSuitOrder," ")
  1464.             gstrSuitOrder = left(gstrSuitOrder,blank - 1) & curSuit & mid(gstrSuitOrder,blank+1)
  1465.         End If
  1466.         Select Case curSuit
  1467.         Case "C"
  1468.             curSuit = "S"
  1469.         Case "S"
  1470.             curSuit = "H"
  1471.         case "H"
  1472.             curSuit = "D"
  1473.         End select
  1474.     next
  1475.  
  1476.     gintCurStackToMove = 0
  1477.     gbCardMoveDone = true
  1478.  
  1479.     'Set up and start the timers to move the first
  1480.     ' card.
  1481.     tmNewCard.Interval = 1
  1482.     tmNewCard.Enabled = true
  1483.  
  1484.     tmEndCardMove.interval = 1
  1485.  
  1486. End Sub 'EndTheGame
  1487.  
  1488. '**********************************************
  1489. '* Name: SeeIfGameOver
  1490. '**********************************************
  1491. '* Description:
  1492. '*    This is the place to see if all
  1493. '*     the Kings are placed on their proper
  1494. '*     Ace Stack and, if so, start the animation.
  1495. '**********************************************
  1496. '* Parameters:
  1497. '*    intStack        Stack to test.
  1498. '**********************************************
  1499. Sub SeeIfGameOver(intStack)
  1500.     If (gintAceStackStartInx > intStack) or (gintAceStackStartInx+4 < intStack) then
  1501.         exit Sub
  1502.     End If
  1503.     bWon = true
  1504.     inx = gintAceStackStartInx
  1505.     'Go until we don't see a king or we tested the last
  1506.     ' Ace Stack.
  1507.     while bWon and inx < gintAceStackStartInx + 4
  1508.         strCard = strTopOfStack(inx)
  1509.         If (gstrBOTTOMOFSTACK <> strCard) then
  1510.             bWon = (gKING = intCardVal(strCard))
  1511.         Else
  1512.             bWon = False
  1513.         End If
  1514.         inx = inx + 1
  1515.     wEnd 
  1516.  
  1517.     If not bWon then exit Sub
  1518.  
  1519.     'We WON!! Let's initialize for animation.
  1520.     gCardCount = 52
  1521.     tmEndAnimation.interval = 4
  1522.     gbAnimationDone = false
  1523.  
  1524.     'Moving all four cards.
  1525.     for inx = 0 to 3
  1526.         gbDoneMoving(inx) = true
  1527.     next
  1528.     Randomize
  1529.     gbLeaveEarly = False
  1530.  
  1531.     tmEndAnimation.enabled = true
  1532.  
  1533. End Sub 'SeeIfGameOver
  1534.  
  1535. '**********************************************
  1536. '* Name: tmEndAnimation_Timer
  1537. '**********************************************
  1538. '* Description:
  1539. '*    Here is where all of the work for the 
  1540. '*    bouncing cards animation takes place.
  1541. '**********************************************
  1542. '* Parameters:
  1543. '**********************************************
  1544. Sub tmEndAnimation_Timer()
  1545.     dim objCard
  1546. ' inc-/decrement position
  1547.     If gbAnimationDone or gbLeaveEarly then
  1548.         'User wanted to exit early or animation finished.
  1549.         tmEndAnimation.enabled = false
  1550.         gbAnimationDone = True
  1551.         msgbox "You Won !!!",0,"ActiveX Solitaire"
  1552.         ClearAllCards
  1553.         exit Sub
  1554.     End If
  1555.     gbAnimationDone = true
  1556.     for inx = 0 to 3
  1557.         'See if one of the 4 cards is done so we can assign another one.
  1558.         If gbDoneMoving(inx) then
  1559.             'Get next card.
  1560.             strCard = strPop(inx + gintAceStackStartInx)
  1561.             If (gstrBOTTOMOFSTACK <> strCard) then
  1562.                 intCardInx = intGetCardIndex(strCard)
  1563.                 set grCardBouncing(inx,1) = grobjAllCards(intCardInx)
  1564.                     'The following random is subtracted by half the range so 
  1565.                     ' both positive and negative directions can be generated.
  1566.                 grCardBouncing(inx,2) = (rnd() * 10) - 5    'Vertical
  1567.                 grCardBouncing(inx,3) = (rnd() * 30) - 15    'Horizontal
  1568.                 gbDoneMoving(inx) = false
  1569.             Else
  1570.             'Hit bottom of stack, no more bouncing.
  1571.                 grCardBouncing(inx,1) = 0
  1572.             End If
  1573.         End If
  1574.  
  1575.         'Figure out effect of gravity.
  1576.         grCardBouncing(inx,2) = grCardBouncing(inx,2) + (gdGravity * (tmEndAnimation.interval/100))
  1577.         If not gbDoneMoving(inx) then
  1578.             set objCard = grCardBouncing(inx,1)
  1579.             'Get new position.
  1580.             objCard.left = objCard.left + grCardBouncing(inx,3)
  1581.             objCard.top = objCard.top +  grCardBouncing(inx,2)
  1582.  
  1583.             'check for border bounce,
  1584.             gbDoneMoving(inx) = (objCard.left >= Form.Width) or (objCard.left + objCard.Width <= 0)
  1585.             gbDoneMoving(inx) = gbDoneMoving(inx) or (objCard.top > Form.height) or ((objCard.top + objCard.height) < 0)
  1586.  
  1587.             'Here's the friction and direction change if necessary.
  1588.             If (grCardBouncing(inx,1).top <= 0) then 
  1589.                 grCardBouncing(inx,2) = -1 * (grCardBouncing(inx,2) + gdFriction)
  1590.             elseif (objCard.top + objCard.height) >= Form.Height then 
  1591.                 grCardBouncing(inx,2) = (gdFriction - (grCardBouncing(inx,2)))
  1592.             End If
  1593.         End If
  1594.         gbAnimationDone = (gbAnimationDone and gbDoneMoving(inx) and (gstrBOTTOMOFSTACK = strTopOfStack(inx + gintAceStackStartInx)))
  1595.     next 
  1596. End Sub 'tmEndAnimation_timer
  1597.  
  1598. '**********************************************
  1599. '* Name: MoveCard
  1600. '**********************************************
  1601. '* Description:
  1602. '*    This is where a card move actually is
  1603. '*      done. For the source stack, it relies
  1604. '*     on gintSrcStack.
  1605. '**********************************************
  1606. '* Parameters:
  1607. '*    intDestStack    Destination stack
  1608. '**********************************************
  1609. Sub MoveCard (intDestStack)
  1610.     'See If Card hit a different intStack.
  1611.     'If not, hit other intStack or legal drop, then move back to original intStack.
  1612.     intStackSize = intCountOnStack(gintSrcStack)
  1613.     intTopOfMove = (intStackSize - gintCountMoving)+ 1
  1614.  
  1615.     'Move from Src to Dest.
  1616.     If (gintSrcStack <> intDestStack) then 
  1617.         strCard = strGetStackElement(gintSrcStack,intTopOfMove)
  1618.  
  1619.         'See if it is legal to do this move.
  1620.         If bIsLegalMove(gintSrcStack,intDestStack,strCard) then
  1621.             for inx =  (intStackSize - gintCountMoving)+ 1 to intStackSize
  1622.             'Yes, let's move all the cards to the new stack.
  1623.                 strCard = strGetStackElement(gintSrcStack,inx)
  1624.                 Push intDestStack,strCard
  1625.             next 
  1626.             'However many moved must be removed from the source.
  1627.             for inx = 1 to gintCountMoving
  1628.                 strCard = strPop(gintSrcStack)
  1629.             next
  1630.             grobjAllCardStacks(intDestStack,1).Zorder(0)
  1631.             DrawStack intDestStack
  1632.  
  1633.             'After that move, let's see if it is the last.
  1634.             SeeIfGameOver intDestStack
  1635.             exit Sub
  1636.         End If
  1637.     End If
  1638.     cntCard = 0
  1639.     'Source and destination were the same, let's move cards back.
  1640.     for inx =  intTopOfMove to intStackSize
  1641.         intCardInx = intGetCardIndex(strGetStackElement(gintSrcStack,inx))
  1642.         grobjAllCards(intCardInx).top = gdCardTop + (cntCard * intGetVertOffset(intStack))
  1643.               grobjAllCards(intCardInx).left = gdCardLeft
  1644.         cntCard = cntCard + 1
  1645.     next 
  1646.     grobjAllCardStacks(gintSrcStack,1).Zorder(0)
  1647. End Sub 'MoveCard
  1648. -->
  1649. </SCRIPT>
  1650. <SCRIPT LANGUAGE="VBScript">
  1651. <!--
  1652. '**********************************************
  1653. '* Name: Discard Stack Mouse events
  1654. '**********************************************
  1655. '* Description:
  1656. '*    These events will handle the moving
  1657. '*    of cards from the Discard Stack to either
  1658. '*    the Ace Stack or a card stack.
  1659. '**********************************************
  1660. Sub Discard_DblClick(Cancel)
  1661.    DoDblClick gintDiscardStackInx
  1662. End Sub
  1663. Sub Discard_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1664.     If 1 <> Button then exit Sub
  1665.     gbMouseUp = false
  1666.     SetMoveStartValues gintDiscardStackInx,x,y
  1667. End Sub
  1668.  
  1669. Sub Discard_MouseMove(Button, Shift, X, Y)
  1670.     If (1 <> Button) or gbMouseUp then exit Sub
  1671.  
  1672.     DragCard gintDiscardStackInx,x,y
  1673. End Sub
  1674.  
  1675. Sub Discard_MouseUp(Button, Shift, X, Y)
  1676.     gbMouseUp = True
  1677.     SetMouseUp gintDiscardStackInx,x,y
  1678. End Sub
  1679.  
  1680. -->
  1681. </SCRIPT>
  1682. <SCRIPT LANGUAGE="VBScript">
  1683. <!--
  1684. '**********************************************
  1685. '* Name: Shuffle Stack Mouse events
  1686. '**********************************************
  1687. '* Description:
  1688. '*    These events will handle the moving
  1689. '*    of cards from the Shuffle Stack to the
  1690. '*    Discard Stack..
  1691. '**********************************************
  1692. Sub Shuffle_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1693.     ShuffleClicked(gintShuffleStackInx)
  1694. End Sub
  1695. -->
  1696. </SCRIPT>
  1697. <SCRIPT LANGUAGE="VBScript">
  1698. <!--
  1699. '**********************************************
  1700. '* Name: Ace Stack mouse events
  1701. '**********************************************
  1702. '* Description:
  1703. '*    These mouse events for all the Ace Stacks
  1704. '*    will handle moving cards from an ace
  1705. '*    stack back to a card stack ONLY.
  1706. '**********************************************
  1707. Sub Ace1_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1708.     If 1 <> Button then exit Sub
  1709.     gbMouseUp = false
  1710.     SetMoveStartValues gintCountCardStacks + 1,x,y
  1711. End Sub
  1712.  
  1713. Sub Ace1_MouseMove(Button, Shift, X, Y)
  1714.     If (1 <> Button) or gbMouseUp then exit Sub
  1715.     DragCard gintCountCardStacks + 1,x,y
  1716. End Sub
  1717.  
  1718. Sub Ace1_MouseUp(Button, Shift, X, Y)
  1719.     gbMouseUp = True
  1720.     SetMouseUp gintCountCardStacks + 1,x,y
  1721. End Sub
  1722.  
  1723. -->
  1724. </SCRIPT>
  1725. <SCRIPT LANGUAGE="VBScript">
  1726. <!--
  1727. Sub Ace2_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1728.     If 1 <> Button then exit Sub
  1729.     gbMouseUp = false
  1730.     SetMoveStartValues gintCountCardStacks + 2,x,y
  1731. End Sub
  1732.  
  1733. Sub Ace2_MouseMove(Button, Shift, X, Y)
  1734.     If (1 <> Button) or gbMouseUp then exit Sub
  1735.     DragCard gintCountCardStacks + 2,x,y
  1736. End Sub
  1737.  
  1738. Sub Ace2_MouseUp(Button, Shift, X, Y)
  1739.     gbMouseUp = True
  1740.     SetMouseUp gintCountCardStacks + 2,x,y
  1741. End Sub
  1742.  
  1743. -->
  1744. </SCRIPT>
  1745. <SCRIPT LANGUAGE="VBScript">
  1746. <!--
  1747. Sub Ace3_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1748.     If 1 <> Button then exit Sub
  1749.     gbMouseUp = false
  1750.     SetMoveStartValues gintCountCardStacks + 3,x,y
  1751. End Sub
  1752.  
  1753. Sub Ace3_MouseMove(Button, Shift, X, Y)
  1754.     If (1 <> Button) or gbMouseUp then exit Sub
  1755.     DragCard gintCountCardStacks + 3,x,y
  1756. End Sub
  1757.  
  1758. Sub Ace3_MouseUp(Button, Shift, X, Y)
  1759.     gbMouseUp = True
  1760.     SetMouseUp gintCountCardStacks + 3,x,y
  1761. End Sub
  1762.  
  1763. -->
  1764. </SCRIPT>
  1765. <SCRIPT LANGUAGE="VBScript">
  1766. <!--
  1767. Sub Ace4_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1768.     If 1 <> Button then exit Sub
  1769.     gbMouseUp = false
  1770.     SetMoveStartValues gintCountCardStacks + 4,x,y
  1771. End Sub
  1772.  
  1773. Sub Ace4_MouseMove(Button, Shift, X, Y)
  1774.     If (1 <> Button) or gbMouseUp then exit Sub
  1775.     DragCard gintCountCardStacks + 4,x,y
  1776. End Sub
  1777.  
  1778. Sub Ace4_MouseUp(Button, Shift, X, Y)
  1779.     gbMouseUp = True
  1780.     SetMouseUp gintCountCardStacks + 4,x,y
  1781. End Sub
  1782.  
  1783. -->
  1784. </SCRIPT>
  1785. <SCRIPT LANGUAGE="VBScript">
  1786. <!--
  1787. '**********************************************
  1788. '* Name: Card stack mouse events
  1789. '**********************************************
  1790. '* Description:
  1791. '*    These events will handle the moving
  1792. '*    of cards from one stack to another, from
  1793. '*    the Discard Stack to the card stacks or from
  1794. '*    an Ace Stack to a card stack.
  1795. '**********************************************
  1796.  
  1797. Sub Stack7_DblClick(Cancel)
  1798.    DoDblClick 7
  1799. End Sub
  1800. Sub Stack7_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1801.     If 1 <> Button then exit Sub
  1802.     gbMouseUp = false
  1803.     SetMoveStartValues 7,x,y
  1804. End Sub
  1805.  
  1806. Sub Stack7_MouseMove(Button, Shift, X, Y)
  1807.     If (1 <> Button) or gbMouseUp then exit Sub
  1808.     DragCard 7,x,y
  1809. End Sub
  1810.  
  1811. Sub Stack7_MouseUp(Button, Shift, X, Y)
  1812.     gbMouseUp = True
  1813.     SetMouseUp 7,x,y
  1814. End Sub
  1815.  
  1816. -->
  1817. </SCRIPT>
  1818. <SCRIPT LANGUAGE="VBScript">
  1819. <!--
  1820. Sub Stack6_DblClick(Cancel)
  1821.    DoDblClick 6
  1822. End Sub
  1823. Sub Stack6_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1824.     If 1 <> Button then exit Sub
  1825.     gbMouseUp = false
  1826.     SetMoveStartValues 6,x,y
  1827. End Sub
  1828.  
  1829. Sub Stack6_MouseMove(Button, Shift, X, Y)
  1830.     If (1 <> Button) or gbMouseUp then exit Sub
  1831.     DragCard 6,x,y
  1832. End Sub
  1833.  
  1834. Sub Stack6_MouseUp(Button, Shift, X, Y)
  1835.     gbMouseUp = True
  1836.     SetMouseUp 6,x,y
  1837. End Sub
  1838.  
  1839. -->
  1840. </SCRIPT>
  1841. <SCRIPT LANGUAGE="VBScript">
  1842. <!--
  1843. Sub Stack5_DblClick(Cancel)
  1844.    DoDblClick 5
  1845. End Sub
  1846. Sub Stack5_MouseUp(Button, Shift, X, Y)
  1847.     gbMouseUp = True
  1848.     SetMouseUp 5,x,y
  1849. End Sub
  1850. Sub Stack5_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1851.     If 1 <> Button then exit Sub
  1852.     gbMouseUp = false
  1853.     SetMoveStartValues 5,x,y
  1854. End Sub
  1855. Sub Stack5_MouseMove(Button, Shift, X, Y)
  1856.     If (1 <> Button) or gbMouseUp then exit Sub
  1857.     DragCard 5,x,y
  1858. End Sub
  1859. -->
  1860. </SCRIPT>
  1861. <SCRIPT LANGUAGE="VBScript">
  1862. <!--
  1863. Sub Stack4_DblClick(Cancel)
  1864.    DoDblClick 4
  1865. End Sub
  1866. Sub Stack4_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1867.     If 1 <> Button then exit Sub
  1868.     gbMouseUp = false
  1869.     SetMoveStartValues 4,x,y
  1870. End Sub
  1871. Sub Stack4_MouseMove(Button, Shift, X, Y)
  1872.     If (1 <> Button) or gbMouseUp then exit Sub
  1873.     DragCard 4,x,y
  1874. End Sub
  1875. Sub Stack4_MouseUp(Button, Shift, X, Y)
  1876.     gbMouseUp = True
  1877.     SetMouseUp 4,x,y
  1878. End Sub
  1879. -->
  1880. </SCRIPT>
  1881. <SCRIPT LANGUAGE="VBScript">
  1882. <!--
  1883. Sub Stack3_DblClick(Cancel)
  1884.    DoDblClick 3
  1885. End Sub
  1886. Sub Stack3_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1887.     If 1 <> Button then exit Sub
  1888.     gbMouseUp = false
  1889.     SetMoveStartValues 3,x,y
  1890. End Sub
  1891. Sub Stack3_MouseMove(Button, Shift, X, Y)
  1892.     If (1 <> Button) or gbMouseUp then exit Sub
  1893.     DragCard 3,x,y
  1894. End Sub
  1895. Sub Stack3_MouseUp(Button, Shift, X, Y)
  1896.     gbMouseUp = True
  1897.     SetMouseUp 3,x,y
  1898. End Sub
  1899. -->
  1900. </SCRIPT>
  1901. <SCRIPT LANGUAGE="VBScript">
  1902. <!--
  1903. Sub Stack2_DblClick(Cancel)
  1904.    DoDblClick 2
  1905. End Sub
  1906. Sub Stack2_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1907.     If 1 <> Button then exit Sub
  1908.     gbMouseUp = false
  1909.     SetMoveStartValues 2,x,y
  1910. End Sub
  1911. Sub Stack2_MouseMove(Button, Shift, X, Y)
  1912.     If (1 <> Button) or gbMouseUp then exit Sub
  1913.     DragCard 2,x,y
  1914. End Sub
  1915. Sub Stack2_MouseUp(Button, Shift, X, Y)
  1916.     gbMouseUp = True
  1917.     SetMouseUp 2,x,y
  1918. End Sub
  1919. -->
  1920. </SCRIPT>
  1921. <SCRIPT LANGUAGE="VBScript">
  1922. <!--
  1923. Sub Stack1_DblClick(Cancel)
  1924.    DoDblClick 1
  1925. End Sub
  1926. Sub Stack1_MouseUp(Button, Shift, X, Y)
  1927.     gbMouseUp = True
  1928.     SetMouseUp 1,x,y
  1929. End Sub
  1930. Sub Stack1_MouseDown(ByVal Button, ByVal Shift, ByVal X, ByVal Y)
  1931.     If 1 <> Button then exit Sub
  1932.     gbMouseUp = false
  1933.     SetMoveStartValues 1,x,y
  1934. End Sub
  1935. Sub Stack1_MouseMove(Button, Shift, X, Y)
  1936.     If (1 <> Button) or gbMouseUp then exit Sub
  1937.     DragCard 1,x,y
  1938. End Sub
  1939. -->
  1940. </SCRIPT>
  1941. <SCRIPT LANGUAGE="VBScript">
  1942. <!--
  1943. Sub chkDebug_Click()
  1944.     lstDebugPrint.Visible = chkDebug.Value
  1945.     gbDebug = chkDebug.value
  1946. End Sub
  1947. -->
  1948. </SCRIPT>
  1949. <SCRIPT LANGUAGE="VBScript">
  1950. <!--
  1951. '**********************************************
  1952. '* Name: cmdHelp_Click
  1953. '**********************************************
  1954. '* Description:
  1955. '*    User clicks this button to display instructions
  1956. '*    on how to play the game.
  1957. '**********************************************
  1958. sub cmdHelp_Click()
  1959.     dim n
  1960.     n = chr(13)&chr(10)
  1961. MsgBox _
  1962. "Begin play by double-clicking any aces on top of the seven row stacks to move " & _
  1963. "them to the spaces at the top right of the screen and then making any other " & _
  1964. "plays available on the board." &n&n& _
  1965. "You will be building two kinds of stacks: row stacks (7 vertical stacks in the middle) and suit stacks (4 stacks at upper right). " & _
  1966. "To free up cards that you need to build the suit stacks, you build row stacks.  " & _
  1967. "To move a card or a stack of cards from one row stack to another, drag it. " & _
  1968. "To move a card to a suit stack, double-click it. " & _
  1969. "When you have made all the available plays on the board, click the deck (upper left) to begin turning over cards. The card that is face up on top of the deck is always available for play." &n&n& _
  1970. "The object of the game is to use all the cards in the deck to build up the four suit stacks from ace to king.", 0, "ActiveX Solitaire Help"
  1971. end sub
  1972. '**********************************************
  1973. '* Name: cmdEndGame_Click
  1974. '**********************************************
  1975. '* Description:
  1976. '*    User clicks this button to end the game
  1977. '**********************************************
  1978. Sub cmdEndGame_Click()
  1979.     If not gbEndGame then
  1980.         EndTheGame
  1981.         gbEndGame = True
  1982.     End If
  1983. End Sub
  1984. 'Check box for debug mode
  1985. Sub UpDebug_Click()
  1986.     If not gbEndGame then
  1987.         chkDebug.visible = not chkdebug.visible
  1988.     End If
  1989. End Sub
  1990. -->
  1991. </SCRIPT>
  1992. <SCRIPT LANGUAGE="VBScript">
  1993. <!--
  1994. '**********************************************
  1995. '* Name: cmdNewDeck_Click
  1996. '**********************************************
  1997. '* Description:
  1998. '*    User clicks this button to pop up the
  1999. '*    dialog that allows the user to
  2000. '*    choose a different deck.
  2001. '**********************************************
  2002. sub cmdNewDeck_Click()
  2003.     CardDeckClick(-gintCurDeck)
  2004.     CardDeckOnOff(true)
  2005. end sub 'cmdNewDeck_Click
  2006. '**********************************************
  2007. '* Name: CardDeckOk_Click
  2008. '**********************************************
  2009. '* Description:
  2010. '*    Routine called when user clicks the ok
  2011. '*    button in the CardDeck dialog. The routine
  2012. '*    will store the new deck choice and close
  2013. '*    the dialog.
  2014. '**********************************************
  2015. sub CardDeckOk_Click()
  2016.     ChangeTheDeck gintTempCurDeck
  2017.     CardDeckOnOff(false)
  2018. end sub 
  2019. '**********************************************
  2020. '* Name: CardDeckCancel_Click 
  2021. '**********************************************
  2022. '* Description:
  2023. '*    Called to close the card back dialog
  2024. '*    and the NOT change the value of the 
  2025. '*    current deck
  2026. '**********************************************
  2027. sub CardDeckCancel_Click()
  2028.     CardDeckOnOff(false)
  2029. end sub
  2030. '**********************************************
  2031. '* Name: CardDeckClick
  2032. '**********************************************
  2033. '* Description:
  2034. '*    Moves the "selection" square in the Deck
  2035. '*    back dialog to visually show the user
  2036. '*    which card back is choosen
  2037. '**********************************************
  2038. '*    Parameters:
  2039. '*    intCardNum    Deck that is choosen by the user
  2040. '**********************************************
  2041. sub CardDeckClick(intCardnum)
  2042.     gintTempCurDeck = -intCardnum
  2043.     CardDeckSelector.Left = grobjCardDeck(intCardnum).Left - 4
  2044.     CardDeckSelector.Top = grobjCardDeck(intCardnum).Top - 4
  2045. end sub
  2046.  
  2047. sub CardDeck1_Click:    CardDeckClick 1:    end sub
  2048. sub CardDeck2_Click:    CardDeckClick 2:    end sub
  2049. sub CardDeck3_Click:    CardDeckClick 3:    end sub
  2050. sub CardDeck4_Click:    CardDeckClick 4:    end sub
  2051. sub CardDeck5_Click:    CardDeckClick 5:    end sub
  2052. sub CardDeck6_Click:    CardDeckClick 6:    end sub
  2053. sub CardDeck7_Click:    CardDeckClick 7:    end sub
  2054. sub CardDeck8_Click:    CardDeckClick 8:    end sub
  2055. sub CardDeck9_Click:    CardDeckClick 9:    end sub
  2056. sub CardDeck10_Click:    CardDeckClick 10:    end sub
  2057. sub CardDeck11_Click:    CardDeckClick 11:    end sub
  2058. sub CardDeck12_Click:    CardDeckClick 12:    end sub
  2059.  
  2060. '**********************************************
  2061. '* Name: CardDeckOnOff
  2062. '**********************************************
  2063. '* Description:
  2064. '*    Displays or hides the dialog with the
  2065. '*    card backs depending on the parameter.
  2066. '**********************************************
  2067. '*    Parameters:
  2068. '*    bSwitch    True = Show dialog
  2069. '*            False = Hide dialog
  2070. '**********************************************
  2071. sub CardDeckOnOff(bSwitch)
  2072.     if( bSwitch = true ) then
  2073.         bSwitchz = 0
  2074.     else
  2075.         bSwitchz = 1
  2076.     end if
  2077.     CardDeckMouseBlock.Zorder(bSwitchz):    CardDeckMouseBlock.Visible = bSwitch
  2078.     CardDeckBack.Zorder(bSwitchz):        CardDeckBack.Visible = bSwitch
  2079.     CardDeckSelector.Zorder(bSwitchz):    CardDeckSelector.Visible = bSwitch
  2080.     for t = 1 to 12
  2081.         grobjCardDeck(t).Zorder(bSwitchz):     grobjCardDeck(t).Visible = bSwitch
  2082.     next
  2083.     CardDeckOk.Zorder(bSwitchz):        CardDeckOk.Visible = bSwitch
  2084.     CardDeckCancel.Zorder(bSwitchz):        CardDeckCancel.Visible = bSwitch    
  2085. end sub
  2086. -->
  2087. </SCRIPT>
  2088. <SCRIPT LANGUAGE="VBScript">
  2089. <!--
  2090. 'New deal.
  2091. Sub cmdNewDeal_Click()
  2092.     StartGame
  2093. End Sub
  2094. -->
  2095. </SCRIPT>
  2096. <SCRIPT LANGUAGE="VBScript">
  2097. <!--
  2098. 'Click on the background when the end animation is running
  2099. ' to stop the animation and bring up the You Won dialog.
  2100. Sub EndGameClick_MouseDown(Button, Shift, X, Y)
  2101.     If gbEndGame then
  2102.         gbLeaveEarly = true
  2103.     End If
  2104. End Sub
  2105. -->
  2106. </SCRIPT>
  2107. <SCRIPT LANGUAGE="VBScript">
  2108. <!--
  2109. 'Changes the number of cards that are dealt from
  2110. ' the Shuffle Stack to the Discard Stack
  2111. Sub cmdChangeDeal_Click()
  2112.     if( gCOUNTDEAL = 1 ) then
  2113.         gCOUNTDEAL = 3
  2114.         cmdChangeDeal.Caption = "Change to Draw 1"
  2115.     else
  2116.         gCOUNTDEAL = 1 
  2117.         cmdChangeDeal.Caption = "Change to Draw 3"
  2118.     end if
  2119. end sub
  2120. -->
  2121. </SCRIPT>
  2122. <DIV BACKGROUND="#8000" ID="Form" STYLE="LAYOUT:FIXED;WIDTH:450pt;HEIGHT:444pt;">
  2123.     <OBJECT ID="CardDeckMouseBlock"
  2124.      CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:-1pt;LEFT:-2pt;WIDTH:590pt;HEIGHT:362pt;DISPLAY:NONE;ZINDEX:0;">
  2125.         <PARAM NAME="BackColor" VALUE="32768">
  2126.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2127.         <PARAM NAME="Size" VALUE="20814;12771">
  2128.         <PARAM NAME="FontCharSet" VALUE="0">
  2129.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2130.         <PARAM NAME="FontWeight" VALUE="0">
  2131.     </OBJECT>
  2132.     <OBJECT ID="CardDeckBack"
  2133.      CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:68pt;LEFT:13pt;WIDTH:420pt;HEIGHT:223pt;TABINDEX:2;DISPLAY:NONE;ZINDEX:1;">
  2134.         <PARAM NAME="VariousPropertyBits" VALUE="25">
  2135.         <PARAM NAME="Size" VALUE="14817;7867">
  2136.         <PARAM NAME="FontEffects" VALUE="1073750016">
  2137.         <PARAM NAME="FontCharSet" VALUE="0">
  2138.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2139.         <PARAM NAME="ParagraphAlign" VALUE="3">
  2140.         <PARAM NAME="FontWeight" VALUE="0">
  2141.     </OBJECT>
  2142.     <OBJECT ID="EndGameClick"
  2143.      CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:0pt;LEFT:0pt;WIDTH:644pt;HEIGHT:440pt;ZINDEX:2;">
  2144.         <PARAM NAME="BackColor" VALUE="32768">
  2145.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2146.         <PARAM NAME="Size" VALUE="22719;15522">
  2147.         <PARAM NAME="FontCharSet" VALUE="0">
  2148.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2149.     </OBJECT>
  2150.     <OBJECT ID="CardDeckSelector"
  2151.      CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:57pt;LEFT:91pt;WIDTH:65pt;HEIGHT:82pt;DISPLAY:NONE;ZINDEX:4;">
  2152.         <PARAM NAME="ForeColor" VALUE="0">
  2153.         <PARAM NAME="BackColor" VALUE="0">
  2154.         <PARAM NAME="Size" VALUE="2328;2928">
  2155.         <PARAM NAME="FontCharSet" VALUE="0">
  2156.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2157.         <PARAM NAME="FontWeight" VALUE="0">
  2158.     </OBJECT>
  2159.     <OBJECT ID="tmEndAnimation"
  2160.      CLASSID="CLSID:59CCB4A0-727D-11CF-AC36-00AA00A47DD2"
  2161.      CODEBASE="ietimer.ocx"
  2162.      STYLE="TOP:469pt;LEFT:-17pt;WIDTH:25pt;HEIGHT:17pt;TABINDEX:0;ZINDEX:4;">
  2163.         <PARAM NAME="_ExtentX" VALUE="873">
  2164.         <PARAM NAME="_ExtentY" VALUE="609">
  2165.     </OBJECT>
  2166.  
  2167.     <OBJECT ID="Card1H"
  2168.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:15pt;LEFT:124pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:1;ZINDEX:5;"
  2169.     CODEBASE="card.ocx#version=1,0,0,5">   
  2170.         <PARAM NAME="_ExtentX" VALUE="2037">
  2171.         <PARAM NAME="_ExtentY" VALUE="2619">
  2172.     <PARAM NAME="CardAlignment" VALUE="0">
  2173.     </OBJECT>
  2174.     <OBJECT ID="Ace3"
  2175.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:32pt;LEFT:396pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:6;">
  2176.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2177.         <PARAM NAME="Size" VALUE="1905;2540">
  2178.     </OBJECT>
  2179.     <OBJECT ID="AceImage3"
  2180.      CLASSID="CLSID:4C599241-6926-101B-9992-00000B65C6F9"
  2181.      DATA="DATA:application/x-oleobject;BASE64,QZJZTCZpGxCZkgAAC2XG+QACGAA0DgAAAIAAAAAA//8AAAAAVwcAAOwJAACw
  2182. gWfaSsLPEbWEAKoApx0abHQAAOcBAABHSUY4OWFHAGAAkf8A////AIAAAAAA
  2183. AAAALAAAAABHAGAAAAL/TISpy+0PozCH2ouz3rzbOVVGKJbkSaFjyq6u2SLe
  2184. TNe13F7kl+05j/G9Pjib8WjDqWCvpTP3bMaEyKo1VQTqetxgd+vFXsdkJfQs
  2185. TTPXUVGWDE/uqPSv9v7Lj97xfses1iaIxobG54cYdFgXBuaIN/RzmEh5EDIY
  2186. SIhZ6DJZiZjF+KhXAllKmvCpupfZyvm6eUm12pfaaCqKayc5SwsHCKsp7Brl
  2187. 6TsWuhu5fMqci9V7fAUcOxxMzCoNuqjc7P3sTKS9jV1+fS477pd8i9oN/m2s
  2188. bkRtXW1eHD0vB9///i9mX5lL9griGyZP4Ax2o8K1c9jQkj6FHuodvIguG8Uq
  2189. wLYi+nv4zU7CjRssZsR4byTJHnMAenSJS+VKHQRRGjzpZuJMRR9fguxpaSe9
  2190. mjjvFdUodGHLnzDd/ZSZ1KTRqQahCu2oi6lWn0iT/iFK1WY5qzsZZuV6NqZO
  2191. r0GPij1JdiZWp2jppo27UurNsNfwkjRrNzBEtWyVvuWbcq3XuYMFh9zatjAH
  2192. vYf3GlIcdWndxpzjYb4K1nLlVn43Mn68GfXdz2VDj3bLpDRFwJ2BOj4tmQcI
  2193. 0bCrnZAAPLhwCQYKAAA7AA==
  2194. "
  2195.      STYLE="TOP:32pt;LEFT:396pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:99;DISPLAY:NONE">
  2196.     </OBJECT>
  2197.     <OBJECT ID="Ace1"
  2198.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:32pt;LEFT:264pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:8;">
  2199.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2200.         <PARAM NAME="Size" VALUE="1905;2540">
  2201.     </OBJECT>
  2202.     <OBJECT ID="AceImage1"
  2203.      CLASSID="CLSID:4C599241-6926-101B-9992-00000B65C6F9" 
  2204.     STYLE="TOP:32pt;LEFT:264pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:100;DISPLAY:NONE">
  2205.         <PARAM NAME="AutoSize" VALUE="-1">
  2206.         <PARAM NAME="BackColor" VALUE="32768">
  2207.         <PARAM NAME="BorderStyle" VALUE="0">
  2208.         <PARAM NAME="Size" VALUE="2328;2910">
  2209.         <PARAM NAME="PictureAlignment" VALUE="0">
  2210.     </OBJECT>
  2211.     <OBJECT ID="Ace2"
  2212.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:32pt;LEFT:330pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:10;">
  2213.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2214.         <PARAM NAME="Size" VALUE="1905;2540">
  2215.     </OBJECT>
  2216.     <OBJECT ID="AceImage2"
  2217.      CLASSID="CLSID:4C599241-6926-101B-9992-00000B65C6F9" 
  2218.     STYLE="TOP:32pt;LEFT:330pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:100;DISPLAY:NONE">
  2219.         <PARAM NAME="AutoSize" VALUE="-1">
  2220.         <PARAM NAME="BackColor" VALUE="32768">
  2221.         <PARAM NAME="BorderStyle" VALUE="0">
  2222.         <PARAM NAME="Size" VALUE="2328;2910">
  2223.         <PARAM NAME="PictureAlignment" VALUE="0">
  2224.     </OBJECT>
  2225.     <OBJECT ID="Ace4"
  2226.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:32pt;LEFT:198pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:12;">
  2227.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2228.         <PARAM NAME="Size" VALUE="1905;2540">
  2229.     </OBJECT>
  2230.     <OBJECT ID="AceImage4"
  2231.      CLASSID="CLSID:4C599241-6926-101B-9992-00000B65C6F9" 
  2232.     STYLE="TOP:32pt;LEFT:198pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:100;DISPLAY:NONE">
  2233.         <PARAM NAME="AutoSize" VALUE="-1">
  2234.         <PARAM NAME="BackColor" VALUE="32768">
  2235.         <PARAM NAME="BorderStyle" VALUE="0">
  2236.         <PARAM NAME="Size" VALUE="2328;2910">
  2237.         <PARAM NAME="PictureAlignment" VALUE="0">
  2238.     </OBJECT>
  2239.     <OBJECT ID="ShuffleImage"
  2240.      CLASSID="CLSID:4C599241-6926-101B-9992-00000B65C6F9"
  2241.      DATA="DATA:application/x-oleobject;BASE64,QZJZTCZpGxCZkgAAC2XG+QACGAA0DgAAAIAAAAAA//8AAAAAVwcAAOwJAACw
  2242. gWfaSsLPEbWEAKoApx0abHQAAMsBAABHSUY4OWFHAGAAkf8A////AP8AAIAA
  2243. AAAALAAAAABHAGAAAAL/lIapy+0P4zCH2ouz3rzbOXniSI5Iiabpqbauxr7y
  2244. G882Wt+6l+9+1vsJDcHhr2jcIZO3JXPmfNJC0iO1qrxim1pb4AsGW2/hsvnL
  2245. nZ3XZmi3xI63XVGN/D5fvT34flhVd+E3iIazZ9eX4VcSKIAn8mhyKBinIic5
  2246. UtmiyTNJwbnJJhIlSrbW2VGqowrjefrzurEUC3vGgcTqk/txSCvky7th+zQM
  2247. tAf8W3xRpMzUTBGEPIQcnVf1fPCGnYRdXbblaA3dJW0E3LPtLJ6Nkc69jr4u
  2248. 9Rz/DR5uH0yZv0VPLk8M3j9+WPy1A6iOILt9f+4ZZCjGocCDCKc9hFiooDxv
  2249. pA01KlyIMQC4btrc6SKJ6KNFlcxMmgKIq+IqhDFlqklX06aLXeM4lLtZ0cnP
  2250. nSaFDk3BU5/PpChAtYLENFPUnlCPCptKlc8dEpFQSe1KcSsmOIQIGUJaNtFZ
  2251. tGmdjrXUVufTF3Eztmi01Kybk1jX3rOB9+8tT4LfFqZD+HCHwIqXJW48F7Ie
  2252. yYAeU1Z62XBmr5tHWd7MmDKIzjzGSTiNOnUEAwUAADsA
  2253. "
  2254.      STYLE="TOP:32pt;LEFT:0pt;WIDTH:53pt;HEIGHT:72pt;ZINDEX:97;">
  2255.     </OBJECT>
  2256.     <OBJECT ID="Stack1"
  2257.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:131pt;LEFT:0pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:15;">
  2258.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2259.         <PARAM NAME="Size" VALUE="1905;2540">
  2260.     </OBJECT>
  2261.     <OBJECT ID="Stack2"
  2262.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:131pt;LEFT:66pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:15;">
  2263.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2264.         <PARAM NAME="Size" VALUE="1905;2540">
  2265.     </OBJECT>
  2266.     <OBJECT ID="Stack3"
  2267.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:131pt;LEFT:132pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:16;">
  2268.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2269.         <PARAM NAME="Size" VALUE="1905;2540">
  2270.     </OBJECT>
  2271.     <OBJECT ID="Stack4"
  2272.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:131pt;LEFT:198pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:17;">
  2273.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2274.         <PARAM NAME="Size" VALUE="1905;2540">
  2275.     </OBJECT>
  2276.     <OBJECT ID="Stack5"
  2277.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:131pt;LEFT:264pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:18;">
  2278.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2279.         <PARAM NAME="Size" VALUE="1905;2540">
  2280.     </OBJECT>
  2281.     <OBJECT ID="Stack6"
  2282.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:131pt;LEFT:330pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:19;">
  2283.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2284.         <PARAM NAME="Size" VALUE="1905;2540">
  2285.     </OBJECT>
  2286.     <OBJECT ID="Stack7"
  2287.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:131pt;LEFT:396pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:20;">
  2288.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2289.         <PARAM NAME="Size" VALUE="1905;2540">
  2290.     </OBJECT>
  2291.     <OBJECT ID="Discard"
  2292.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:32pt;LEFT:74pt;WIDTH:74pt;HEIGHT:72pt;ZINDEX:22;">
  2293.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2294.         <PARAM NAME="Size" VALUE="2611;2540">
  2295.     </OBJECT>
  2296.     <OBJECT ID="Shuffle"
  2297.      CLASSID="CLSID:2B32FBC2-A8F1-11CF-93EE-00AA00C08FDF" STYLE="TOP:32pt;LEFT:0pt;WIDTH:54pt;HEIGHT:72pt;ZINDEX:23;">
  2298.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2299.         <PARAM NAME="Size" VALUE="1905;2540">
  2300.     </OBJECT>
  2301.     <OBJECT ID="tmEndCardMove"
  2302.      CLASSID="CLSID:59CCB4A0-727D-11CF-AC36-00AA00A47DD2" STYLE="TOP:469pt;LEFT:16pt;WIDTH:25pt;HEIGHT:17pt;TABINDEX:4;ZINDEX:24;">
  2303.         <PARAM NAME="_ExtentX" VALUE="873">
  2304.         <PARAM NAME="_ExtentY" VALUE="609">
  2305.     </OBJECT>
  2306.     <OBJECT ID="tmNewCard"
  2307.      CLASSID="CLSID:59CCB4A0-727D-11CF-AC36-00AA00A47DD2" STYLE="TOP:469pt;LEFT:49pt;WIDTH:25pt;HEIGHT:17pt;TABINDEX:44;ZINDEX:25;">
  2308.         <PARAM NAME="_ExtentX" VALUE="873">
  2309.         <PARAM NAME="_ExtentY" VALUE="609">
  2310.     </OBJECT>
  2311.     <OBJECT ID="HiddenCardLabel"
  2312.      CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:15pt;LEFT:487pt;WIDTH:107pt;HEIGHT:8pt;DISPLAY:NONE;ZINDEX:26;">
  2313.         <PARAM NAME="BackColor" VALUE="32768">
  2314.         <PARAM NAME="Caption" VALUE="All the cards are betwen this lable and the check box">
  2315.         <PARAM NAME="Size" VALUE="3775;282">
  2316.         <PARAM NAME="FontCharSet" VALUE="0">
  2317.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2318.         <PARAM NAME="FontWeight" VALUE="0">
  2319.     </OBJECT>
  2320.     <OBJECT ID="chkDebug"
  2321.      CLASSID="CLSID:8BD21D40-EC42-11CE-9E0D-00AA006002F3" STYLE="TOP:15pt;LEFT:8pt;WIDTH:57pt;HEIGHT:12pt;TABINDEX:5;DISPLAY:NONE;ZINDEX:27;">
  2322.         <PARAM NAME="BackColor" VALUE="2000000000">
  2323.         <PARAM NAME="ForeColor" VALUE="100">
  2324.         <PARAM NAME="DisplayStyle" VALUE="4">
  2325.         <PARAM NAME="Size" VALUE="2011;423">
  2326.         <PARAM NAME="Caption" VALUE="Debug">
  2327.         <PARAM NAME="Accelerator" VALUE="68">
  2328.         <PARAM NAME="FontCharSet" VALUE="0">
  2329.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2330.         <PARAM NAME="FontWeight" VALUE="0">
  2331.     </OBJECT>
  2332.     <OBJECT ID="cmdNewDeal"
  2333.      CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:1pt;LEFT:120pt;WIDTH:50pt;HEIGHT:17pt;ZINDEX:78;">
  2334.         <PARAM NAME="ForeColor" VALUE="65280">
  2335.         <PARAM NAME="BackColor" VALUE="32768">
  2336.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2337.         <PARAM NAME="Caption" VALUE="New Game">
  2338.         <PARAM NAME="Size" VALUE="1746;600">
  2339.         <PARAM NAME="FontName" VALUE="Arial">
  2340.         <PARAM NAME="FontEffects" VALUE="1073741828">
  2341.         <PARAM NAME="FontHeight" VALUE="180">
  2342.         <PARAM NAME="FontCharSet" VALUE="0">
  2343.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2344.         <PARAM NAME="ParagraphAlign" VALUE="3">
  2345.         <PARAM NAME="FontWeight" VALUE="0">
  2346.     </OBJECT>
  2347.     <OBJECT ID="cmdNewDeck"
  2348.      CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:1pt;LEFT:173pt;WIDTH:83pt;HEIGHT:17pt;ZINDEX:79;">
  2349.         <PARAM NAME="ForeColor" VALUE="65280">
  2350.         <PARAM NAME="BackColor" VALUE="32768">
  2351.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2352.         <PARAM NAME="Caption" VALUE="Select New Deck">
  2353.         <PARAM NAME="Size" VALUE="2910;600">
  2354.         <PARAM NAME="FontName" VALUE="Arial">
  2355.         <PARAM NAME="FontEffects" VALUE="1073741828">
  2356.         <PARAM NAME="FontHeight" VALUE="180">
  2357.         <PARAM NAME="FontCharSet" VALUE="0">
  2358.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2359.         <PARAM NAME="ParagraphAlign" VALUE="3">
  2360.         <PARAM NAME="FontWeight" VALUE="0">
  2361.     </OBJECT>
  2362.     <OBJECT ID="cmdChangeDeal"
  2363.      CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:1pt;LEFT:256pt;WIDTH:83pt;HEIGHT:17pt;ZINDEX:80;">
  2364.         <PARAM NAME="ForeColor" VALUE="65280">
  2365.         <PARAM NAME="BackColor" VALUE="32768">
  2366.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2367.         <PARAM NAME="Caption" VALUE="Change to Draw 1">
  2368.         <PARAM NAME="Size" VALUE="2911;600">
  2369.         <PARAM NAME="FontName" VALUE="Arial">
  2370.         <PARAM NAME="FontEffects" VALUE="1073741828">
  2371.         <PARAM NAME="FontHeight" VALUE="180">
  2372.         <PARAM NAME="FontCharSet" VALUE="0">
  2373.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2374.         <PARAM NAME="ParagraphAlign" VALUE="3">
  2375.         <PARAM NAME="FontWeight" VALUE="0">
  2376.     </OBJECT>
  2377.     <OBJECT ID="cmdEndGame"
  2378.      CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:1pt;LEFT:346pt;WIDTH:66pt;HEIGHT:17pt;ZINDEX:81;">
  2379.         <PARAM NAME="ForeColor" VALUE="65280">
  2380.         <PARAM NAME="BackColor" VALUE="32768">
  2381.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2382.         <PARAM NAME="Caption" VALUE="End the Game">
  2383.         <PARAM NAME="Size" VALUE="2328;600">
  2384.         <PARAM NAME="FontName" VALUE="Arial">
  2385.         <PARAM NAME="FontEffects" VALUE="1073741828">
  2386.         <PARAM NAME="FontHeight" VALUE="180">
  2387.         <PARAM NAME="FontCharSet" VALUE="0">
  2388.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2389.         <PARAM NAME="ParagraphAlign" VALUE="3">
  2390.         <PARAM NAME="FontWeight" VALUE="0">
  2391.     </OBJECT>
  2392.     <OBJECT ID="cmdHelp"
  2393.      CLASSID="CLSID:978C9E23-D4B0-11CE-BF2D-00AA003F40D0" STYLE="TOP:1pt;LEFT:414pt;WIDTH:33pt;HEIGHT:17pt;ZINDEX:81;">
  2394.         <PARAM NAME="ForeColor" VALUE="65280">
  2395.         <PARAM NAME="BackColor" VALUE="32768">
  2396.         <PARAM NAME="VariousPropertyBits" VALUE="8388627">
  2397.         <PARAM NAME="Caption" VALUE="Help">
  2398.         <PARAM NAME="Size" VALUE="2328;600">
  2399.         <PARAM NAME="FontName" VALUE="Arial">
  2400.         <PARAM NAME="FontEffects" VALUE="1073741828">
  2401.         <PARAM NAME="FontHeight" VALUE="180">
  2402.         <PARAM NAME="FontCharSet" VALUE="0">
  2403.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2404.         <PARAM NAME="ParagraphAlign" VALUE="3">
  2405.         <PARAM NAME="FontWeight" VALUE="0">
  2406.     </OBJECT>
  2407.     <OBJECT ID="Card2H"
  2408.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:190pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:11;ZINDEX:32;">
  2409.         <PARAM NAME="_ExtentX" VALUE="2037">
  2410.         <PARAM NAME="_ExtentY" VALUE="2619">
  2411.     <PARAM NAME="CardAlignment" VALUE="0">
  2412.     </OBJECT>
  2413.     <OBJECT ID="Card3H"
  2414.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:247pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:12;ZINDEX:33;">
  2415.         <PARAM NAME="_ExtentX" VALUE="2037">
  2416.         <PARAM NAME="_ExtentY" VALUE="2619">
  2417.     <PARAM NAME="CardAlignment" VALUE="0">
  2418.     </OBJECT>
  2419.     <OBJECT ID="Card4H"
  2420.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:132pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:13;ZINDEX:34;">
  2421.         <PARAM NAME="_ExtentX" VALUE="2037">
  2422.         <PARAM NAME="_ExtentY" VALUE="2619">
  2423.     <PARAM NAME="CardAlignment" VALUE="0">
  2424.     </OBJECT>
  2425.     <OBJECT ID="Card5H"
  2426.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:198pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:14;ZINDEX:35;">
  2427.         <PARAM NAME="_ExtentX" VALUE="2037">
  2428.         <PARAM NAME="_ExtentY" VALUE="2619">
  2429.     <PARAM NAME="CardAlignment" VALUE="0">
  2430.     </OBJECT>
  2431.     <OBJECT ID="Card6H"
  2432.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:256pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:15;ZINDEX:36;">
  2433.         <PARAM NAME="_ExtentX" VALUE="2037">
  2434.         <PARAM NAME="_ExtentY" VALUE="2619">
  2435.     <PARAM NAME="CardAlignment" VALUE="0">
  2436.     </OBJECT>
  2437.     <OBJECT ID="Card7H"
  2438.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:140pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:16;ZINDEX:37;">
  2439.         <PARAM NAME="_ExtentX" VALUE="2037">
  2440.         <PARAM NAME="_ExtentY" VALUE="2619">
  2441.     <PARAM NAME="CardAlignment" VALUE="0">
  2442.     </OBJECT>
  2443.     <OBJECT ID="Card8H"
  2444.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:206pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:17;ZINDEX:38;">
  2445.         <PARAM NAME="_ExtentX" VALUE="2037">
  2446.         <PARAM NAME="_ExtentY" VALUE="2619">
  2447.     <PARAM NAME="CardAlignment" VALUE="0">
  2448.     </OBJECT>
  2449.     <OBJECT ID="Card9H"
  2450.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:264pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:18;ZINDEX:39;">
  2451.         <PARAM NAME="_ExtentX" VALUE="2037">
  2452.         <PARAM NAME="_ExtentY" VALUE="2619">
  2453.     <PARAM NAME="CardAlignment" VALUE="0">
  2454.     </OBJECT>
  2455.     <OBJECT ID="Card10H"
  2456.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:148pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:19;ZINDEX:40;">
  2457.         <PARAM NAME="_ExtentX" VALUE="2037">
  2458.         <PARAM NAME="_ExtentY" VALUE="2619">
  2459.     <PARAM NAME="CardAlignment" VALUE="0">
  2460.     </OBJECT>
  2461.     <OBJECT ID="Card11H"
  2462.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:214pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:20;ZINDEX:41;">
  2463.         <PARAM NAME="_ExtentX" VALUE="2037">
  2464.         <PARAM NAME="_ExtentY" VALUE="2619">
  2465.     <PARAM NAME="CardAlignment" VALUE="0">
  2466.     </OBJECT>
  2467.     <OBJECT ID="Card12H"
  2468.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:272pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:21;ZINDEX:42;">
  2469.         <PARAM NAME="_ExtentX" VALUE="2037">
  2470.         <PARAM NAME="_ExtentY" VALUE="2619">
  2471.     <PARAM NAME="CardAlignment" VALUE="0">
  2472.     </OBJECT>
  2473.     <OBJECT ID="Card13H"
  2474.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:140pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:22;ZINDEX:43;">
  2475.         <PARAM NAME="_ExtentX" VALUE="2037">
  2476.         <PARAM NAME="_ExtentY" VALUE="2619">
  2477.     <PARAM NAME="CardAlignment" VALUE="0">
  2478.     </OBJECT>
  2479.     <OBJECT ID="Card1D"
  2480.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:206pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:23;ZINDEX:44;">
  2481.         <PARAM NAME="_ExtentX" VALUE="2037">
  2482.         <PARAM NAME="_ExtentY" VALUE="2619">
  2483.     <PARAM NAME="CardAlignment" VALUE="0">
  2484.     </OBJECT>
  2485.     <OBJECT ID="Card2D"
  2486.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:264pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:24;ZINDEX:45;">
  2487.         <PARAM NAME="_ExtentX" VALUE="2037">
  2488.         <PARAM NAME="_ExtentY" VALUE="2619">
  2489.     <PARAM NAME="CardAlignment" VALUE="0">
  2490.     </OBJECT>
  2491.     <OBJECT ID="Card3D"
  2492.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:148pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:25;ZINDEX:46;">
  2493.         <PARAM NAME="_ExtentX" VALUE="2037">
  2494.         <PARAM NAME="_ExtentY" VALUE="2619">
  2495.     <PARAM NAME="CardAlignment" VALUE="0">
  2496.     </OBJECT>
  2497.     <OBJECT ID="Card4D"
  2498.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:214pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:26;ZINDEX:47;">
  2499.         <PARAM NAME="_ExtentX" VALUE="2037">
  2500.         <PARAM NAME="_ExtentY" VALUE="2619">
  2501.     <PARAM NAME="CardAlignment" VALUE="0">
  2502.     </OBJECT>
  2503.     <OBJECT ID="Card5D"
  2504.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:272pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:27;ZINDEX:48;">
  2505.         <PARAM NAME="_ExtentX" VALUE="2037">
  2506.         <PARAM NAME="_ExtentY" VALUE="2619">
  2507.     <PARAM NAME="CardAlignment" VALUE="0">
  2508.     </OBJECT>
  2509.     <OBJECT ID="Card6D"
  2510.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:157pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:28;ZINDEX:49;">
  2511.         <PARAM NAME="_ExtentX" VALUE="2037">
  2512.         <PARAM NAME="_ExtentY" VALUE="2619">
  2513.     <PARAM NAME="CardAlignment" VALUE="0">
  2514.     </OBJECT>
  2515.     <OBJECT ID="Card7D"
  2516.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:223pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:29;ZINDEX:50;">
  2517.         <PARAM NAME="_ExtentX" VALUE="2037">
  2518.         <PARAM NAME="_ExtentY" VALUE="2619">
  2519.     <PARAM NAME="CardAlignment" VALUE="0">
  2520.     </OBJECT>
  2521.     <OBJECT ID="Card8D"
  2522.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:280pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:30;ZINDEX:51;">
  2523.         <PARAM NAME="_ExtentX" VALUE="2037">
  2524.         <PARAM NAME="_ExtentY" VALUE="2619">
  2525.     <PARAM NAME="CardAlignment" VALUE="0">
  2526.     </OBJECT>
  2527.     <OBJECT ID="Card9D"
  2528.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:165pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:31;ZINDEX:52;">
  2529.         <PARAM NAME="_ExtentX" VALUE="2037">
  2530.         <PARAM NAME="_ExtentY" VALUE="2619">
  2531.     <PARAM NAME="CardAlignment" VALUE="0">
  2532.     </OBJECT>
  2533.     <OBJECT ID="Card10D"
  2534.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:231pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:32;ZINDEX:53;">
  2535.         <PARAM NAME="_ExtentX" VALUE="2037">
  2536.         <PARAM NAME="_ExtentY" VALUE="2619">
  2537.     <PARAM NAME="CardAlignment" VALUE="0">
  2538.     </OBJECT>
  2539.     <OBJECT ID="Card11D"
  2540.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:33;ZINDEX:54;">
  2541.         <PARAM NAME="_ExtentX" VALUE="2037">
  2542.         <PARAM NAME="_ExtentY" VALUE="2619">
  2543.     <PARAM NAME="CardAlignment" VALUE="0">
  2544.     </OBJECT>
  2545.     <OBJECT ID="Card12D"
  2546.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:37;ZINDEX:55;">
  2547.         <PARAM NAME="_ExtentX" VALUE="2037">
  2548.         <PARAM NAME="_ExtentY" VALUE="2619">
  2549.     <PARAM NAME="CardAlignment" VALUE="0">
  2550.     </OBJECT>
  2551.     <OBJECT ID="Card13D"
  2552.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:42;ZINDEX:56;">
  2553.         <PARAM NAME="_ExtentX" VALUE="2037">
  2554.         <PARAM NAME="_ExtentY" VALUE="2619">
  2555.     <PARAM NAME="CardAlignment" VALUE="0">
  2556.     </OBJECT>
  2557.     <OBJECT ID="Card1C"
  2558.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:46;ZINDEX:57;">
  2559.         <PARAM NAME="_ExtentX" VALUE="2037">
  2560.         <PARAM NAME="_ExtentY" VALUE="2619">
  2561.     <PARAM NAME="CardAlignment" VALUE="0">
  2562.     </OBJECT>
  2563.     <OBJECT ID="Card2C"
  2564.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:47;ZINDEX:58;">
  2565.         <PARAM NAME="_ExtentX" VALUE="2037">
  2566.         <PARAM NAME="_ExtentY" VALUE="2619">
  2567.     <PARAM NAME="CardAlignment" VALUE="0">
  2568.     </OBJECT>
  2569.     <OBJECT ID="Card3C"
  2570.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:50;ZINDEX:59;">
  2571.         <PARAM NAME="_ExtentX" VALUE="2037">
  2572.         <PARAM NAME="_ExtentY" VALUE="2619">
  2573.     <PARAM NAME="CardAlignment" VALUE="0">
  2574.     </OBJECT>
  2575.     <OBJECT ID="Card4C"
  2576.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:51;ZINDEX:60;">
  2577.         <PARAM NAME="_ExtentX" VALUE="2037">
  2578.         <PARAM NAME="_ExtentY" VALUE="2619">
  2579.     <PARAM NAME="CardAlignment" VALUE="0">
  2580.     </OBJECT>
  2581.     <OBJECT ID="Card5C"
  2582.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:55;ZINDEX:61;">
  2583.         <PARAM NAME="_ExtentX" VALUE="2037">
  2584.         <PARAM NAME="_ExtentY" VALUE="2619">
  2585.     <PARAM NAME="CardAlignment" VALUE="0">
  2586.     </OBJECT>
  2587.     <OBJECT ID="Card6C"
  2588.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:56;ZINDEX:62;">
  2589.         <PARAM NAME="_ExtentX" VALUE="2037">
  2590.         <PARAM NAME="_ExtentY" VALUE="2619">
  2591.     <PARAM NAME="CardAlignment" VALUE="0">
  2592.     </OBJECT>
  2593.     <OBJECT ID="Card7C"
  2594.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:59;ZINDEX:63;">
  2595.         <PARAM NAME="_ExtentX" VALUE="2037">
  2596.         <PARAM NAME="_ExtentY" VALUE="2619">
  2597.     <PARAM NAME="CardAlignment" VALUE="0">
  2598.     </OBJECT>
  2599.     <OBJECT ID="Card8C"
  2600.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:60;ZINDEX:64;">
  2601.         <PARAM NAME="_ExtentX" VALUE="2037">
  2602.         <PARAM NAME="_ExtentY" VALUE="2619">
  2603.     <PARAM NAME="CardAlignment" VALUE="0">
  2604.     </OBJECT>
  2605.     <OBJECT ID="Card9C"
  2606.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:66;ZINDEX:65;">
  2607.         <PARAM NAME="_ExtentX" VALUE="2037">
  2608.         <PARAM NAME="_ExtentY" VALUE="2619">
  2609.     <PARAM NAME="CardAlignment" VALUE="0">
  2610.     </OBJECT>
  2611.     <OBJECT ID="Card10C"
  2612.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:68;ZINDEX:66;">
  2613.         <PARAM NAME="_ExtentX" VALUE="2037">
  2614.         <PARAM NAME="_ExtentY" VALUE="2619">
  2615.     <PARAM NAME="CardAlignment" VALUE="0">
  2616.     </OBJECT>
  2617.     <OBJECT ID="Card11C"
  2618.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:76;ZINDEX:67;">
  2619.         <PARAM NAME="_ExtentX" VALUE="2037">
  2620.         <PARAM NAME="_ExtentY" VALUE="2619">
  2621.     <PARAM NAME="CardAlignment" VALUE="0">
  2622.     </OBJECT>
  2623.     <OBJECT ID="Card12C"
  2624.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:80;ZINDEX:68;">
  2625.         <PARAM NAME="_ExtentX" VALUE="2037">
  2626.         <PARAM NAME="_ExtentY" VALUE="2619">
  2627.     <PARAM NAME="CardAlignment" VALUE="0">
  2628.     </OBJECT>
  2629.     <OBJECT ID="Card13C"
  2630.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:86;ZINDEX:69;">
  2631.         <PARAM NAME="_ExtentX" VALUE="2037">
  2632.         <PARAM NAME="_ExtentY" VALUE="2619">
  2633.     <PARAM NAME="CardAlignment" VALUE="0">
  2634.     </OBJECT>
  2635.     <OBJECT ID="Card1S"
  2636.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:88;ZINDEX:70;">
  2637.         <PARAM NAME="_ExtentX" VALUE="2037">
  2638.         <PARAM NAME="_ExtentY" VALUE="2619">
  2639.     <PARAM NAME="CardAlignment" VALUE="0">
  2640.     </OBJECT>
  2641.     <OBJECT ID="Card2S"
  2642.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:91;ZINDEX:71;">
  2643.         <PARAM NAME="_ExtentX" VALUE="2037">
  2644.         <PARAM NAME="_ExtentY" VALUE="2619">
  2645.     <PARAM NAME="CardAlignment" VALUE="0">
  2646.     </OBJECT>
  2647.     <OBJECT ID="Card3S"
  2648.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:92;ZINDEX:72;">
  2649.         <PARAM NAME="_ExtentX" VALUE="2037">
  2650.         <PARAM NAME="_ExtentY" VALUE="2619">
  2651.     <PARAM NAME="CardAlignment" VALUE="0">
  2652.     </OBJECT>
  2653.     <OBJECT ID="Card4S"
  2654.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:90;ZINDEX:73;">
  2655.         <PARAM NAME="_ExtentX" VALUE="2037">
  2656.         <PARAM NAME="_ExtentY" VALUE="2619">
  2657.     <PARAM NAME="CardAlignment" VALUE="0">
  2658.     </OBJECT>
  2659.     <OBJECT ID="Card5S"
  2660.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:82;ZINDEX:74;">
  2661.         <PARAM NAME="_ExtentX" VALUE="2037">
  2662.         <PARAM NAME="_ExtentY" VALUE="2619">
  2663.     <PARAM NAME="CardAlignment" VALUE="0">
  2664.     </OBJECT>
  2665.     <OBJECT ID="Card6S"
  2666.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:70;ZINDEX:75;">
  2667.         <PARAM NAME="_ExtentX" VALUE="2037">
  2668.         <PARAM NAME="_ExtentY" VALUE="2619">
  2669.     <PARAM NAME="CardAlignment" VALUE="0">
  2670.     </OBJECT>
  2671.     <OBJECT ID="Card7S"
  2672.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:61;ZINDEX:76;">
  2673.         <PARAM NAME="_ExtentX" VALUE="2037">
  2674.         <PARAM NAME="_ExtentY" VALUE="2619">
  2675.     <PARAM NAME="CardAlignment" VALUE="0">
  2676.     </OBJECT>
  2677.     <OBJECT ID="Card8S"
  2678.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:57;ZINDEX:77;">
  2679.         <PARAM NAME="_ExtentX" VALUE="2037">
  2680.         <PARAM NAME="_ExtentY" VALUE="2619">
  2681.     <PARAM NAME="CardAlignment" VALUE="0">
  2682.     </OBJECT>
  2683.     <OBJECT ID="Card9S"
  2684.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:52;ZINDEX:78;">
  2685.         <PARAM NAME="_ExtentX" VALUE="2037">
  2686.         <PARAM NAME="_ExtentY" VALUE="2619">
  2687.     <PARAM NAME="CardAlignment" VALUE="0">
  2688.     </OBJECT>
  2689.     <OBJECT ID="Card10S"
  2690.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:48;ZINDEX:79;">
  2691.         <PARAM NAME="_ExtentX" VALUE="2037">
  2692.         <PARAM NAME="_ExtentY" VALUE="2619">
  2693.     <PARAM NAME="CardAlignment" VALUE="0">
  2694.     </OBJECT>
  2695.     <OBJECT ID="Card11S"
  2696.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:43;ZINDEX:80;">
  2697.         <PARAM NAME="_ExtentX" VALUE="2037">
  2698.         <PARAM NAME="_ExtentY" VALUE="2619">
  2699.     <PARAM NAME="CardAlignment" VALUE="0">
  2700.     </OBJECT>
  2701.     <OBJECT ID="Card12S"
  2702.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:38;ZINDEX:81;">
  2703.         <PARAM NAME="_ExtentX" VALUE="2037">
  2704.         <PARAM NAME="_ExtentY" VALUE="2619">
  2705.     <PARAM NAME="CardAlignment" VALUE="0">
  2706.     </OBJECT>
  2707.     <OBJECT ID="Card13S"
  2708.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:-41pt;LEFT:289pt;WIDTH:54pt;HEIGHT:72pt;TABINDEX:34;ZINDEX:82;">
  2709.         <PARAM NAME="_ExtentX" VALUE="2037">
  2710.         <PARAM NAME="_ExtentY" VALUE="2619">
  2711.     <PARAM NAME="CardAlignment" VALUE="0">
  2712.     </OBJECT>
  2713.     <OBJECT ID="CardDeck1"
  2714.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:76pt;LEFT:30pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:63;DISPLAY:NONE;ZINDEX:83;">
  2715.         <PARAM NAME="_ExtentX" VALUE="2037">
  2716.         <PARAM NAME="_ExtentY" VALUE="2619">
  2717.         <PARAM NAME="Suite" VALUE="-1">
  2718.     </OBJECT>
  2719.     <OBJECT ID="CardDeck2"
  2720.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:76pt;LEFT:96pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:65;DISPLAY:NONE;ZINDEX:84;">
  2721.         <PARAM NAME="_ExtentX" VALUE="2037">
  2722.         <PARAM NAME="_ExtentY" VALUE="2619">
  2723.         <PARAM NAME="Suite" VALUE="-2">
  2724.     </OBJECT>
  2725.     <OBJECT ID="CardDeck3"
  2726.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:76pt;LEFT:162pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:67;DISPLAY:NONE;ZINDEX:85;">
  2727.         <PARAM NAME="_ExtentX" VALUE="2037">
  2728.         <PARAM NAME="_ExtentY" VALUE="2619">
  2729.         <PARAM NAME="Suite" VALUE="-3">
  2730.     </OBJECT>
  2731.     <OBJECT ID="CardDeck4"
  2732.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:76pt;LEFT:228pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:69;DISPLAY:NONE;ZINDEX:86;">
  2733.         <PARAM NAME="_ExtentX" VALUE="2037">
  2734.         <PARAM NAME="_ExtentY" VALUE="2619">
  2735.         <PARAM NAME="Suite" VALUE="-4">
  2736.     </OBJECT>
  2737.     <OBJECT ID="CardDeck5"
  2738.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:76pt;LEFT:294pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:71;DISPLAY:NONE;ZINDEX:87;">
  2739.         <PARAM NAME="_ExtentX" VALUE="2037">
  2740.         <PARAM NAME="_ExtentY" VALUE="2619">
  2741.         <PARAM NAME="Suite" VALUE="-5">
  2742.     </OBJECT>
  2743.     <OBJECT ID="CardDeck6"
  2744.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:76pt;LEFT:360pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:73;DISPLAY:NONE;ZINDEX:88;">
  2745.         <PARAM NAME="_ExtentX" VALUE="2037">
  2746.         <PARAM NAME="_ExtentY" VALUE="2619">
  2747.         <PARAM NAME="Suite" VALUE="-6">
  2748.     </OBJECT>
  2749.     <OBJECT ID="CardDeck7"
  2750.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:158pt;LEFT:30pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:75;DISPLAY:NONE;ZINDEX:89;">
  2751.         <PARAM NAME="_ExtentX" VALUE="2037">
  2752.         <PARAM NAME="_ExtentY" VALUE="2619">
  2753.         <PARAM NAME="Suite" VALUE="-7">
  2754.     </OBJECT>
  2755.     <OBJECT ID="CardDeck8"
  2756.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:158pt;LEFT:96pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:77;DISPLAY:NONE;ZINDEX:90;">
  2757.         <PARAM NAME="_ExtentX" VALUE="2037">
  2758.         <PARAM NAME="_ExtentY" VALUE="2619">
  2759.         <PARAM NAME="Suite" VALUE="-8">
  2760.     </OBJECT>
  2761.     <OBJECT ID="CardDeck9"
  2762.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:158pt;LEFT:162pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:79;DISPLAY:NONE;ZINDEX:91;">
  2763.         <PARAM NAME="_ExtentX" VALUE="2037">
  2764.         <PARAM NAME="_ExtentY" VALUE="2619">
  2765.         <PARAM NAME="Suite" VALUE="-9">
  2766.     </OBJECT>
  2767.     <OBJECT ID="CardDeck10"
  2768.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:158pt;LEFT:228pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:81;DISPLAY:NONE;ZINDEX:92;">
  2769.         <PARAM NAME="_ExtentX" VALUE="2037">
  2770.         <PARAM NAME="_ExtentY" VALUE="2619">
  2771.         <PARAM NAME="Suite" VALUE="-10">
  2772.     </OBJECT>
  2773.     <OBJECT ID="CardDeck11"
  2774.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:158pt;LEFT:294pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:83;DISPLAY:NONE;ZINDEX:93;">
  2775.         <PARAM NAME="_ExtentX" VALUE="2037">
  2776.         <PARAM NAME="_ExtentY" VALUE="2619">
  2777.         <PARAM NAME="Suite" VALUE="-11">
  2778.     </OBJECT>
  2779.     <OBJECT ID="CardDeck12"
  2780.      CLASSID="CLSID:55707B23-FF82-11CF-BB32-142A04C10000" STYLE="TOP:158pt;LEFT:360pt;WIDTH:58pt;HEIGHT:74pt;TABINDEX:85;DISPLAY:NONE;ZINDEX:94;">
  2781.         <PARAM NAME="_ExtentX" VALUE="2037">
  2782.         <PARAM NAME="_ExtentY" VALUE="2619">
  2783.         <PARAM NAME="Suite" VALUE="-12">
  2784.     </OBJECT>
  2785.     <OBJECT ID="CardDeckOk"
  2786.      CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:249pt;LEFT:121pt;WIDTH:91pt;HEIGHT:25pt;TABINDEX:87;DISPLAY:NONE;ZINDEX:95;">
  2787.         <PARAM NAME="Caption" VALUE="OK">
  2788.         <PARAM NAME="Size" VALUE="3210;882">
  2789.         <PARAM NAME="Accelerator" VALUE="79">
  2790.         <PARAM NAME="FontCharSet" VALUE="0">
  2791.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2792.         <PARAM NAME="ParagraphAlign" VALUE="3">
  2793.         <PARAM NAME="FontWeight" VALUE="0">
  2794.     </OBJECT>
  2795.     <OBJECT ID="CardDeckCancel"
  2796.      CLASSID="CLSID:D7053240-CE69-11CD-A777-00DD01143C57" STYLE="TOP:249pt;LEFT:236pt;WIDTH:91pt;HEIGHT:25pt;TABINDEX:89;DISPLAY:NONE;ZINDEX:96;">
  2797.         <PARAM NAME="Caption" VALUE="Cancel">
  2798.         <PARAM NAME="Size" VALUE="3210;882">
  2799.         <PARAM NAME="Accelerator" VALUE="67">
  2800.         <PARAM NAME="FontCharSet" VALUE="0">
  2801.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2802.         <PARAM NAME="ParagraphAlign" VALUE="3">
  2803.         <PARAM NAME="FontWeight" VALUE="0">
  2804.     </OBJECT>
  2805.     <OBJECT ID="lstDebugPrint"
  2806.      CLASSID="CLSID:8BD21D20-EC42-11CE-9E0D-00AA006002F3" STYLE="TOP:23pt;LEFT:132pt;WIDTH:122pt;HEIGHT:66pt;TABINDEX:9;DISPLAY:NONE;ZINDEX:97;">
  2807.         <PARAM NAME="BackColor" VALUE="16777215">
  2808.         <PARAM NAME="ScrollBars" VALUE="3">
  2809.         <PARAM NAME="DisplayStyle" VALUE="2">
  2810.         <PARAM NAME="Size" VALUE="4304;2328">
  2811.         <PARAM NAME="MatchEntry" VALUE="0">
  2812.         <PARAM NAME="FontCharSet" VALUE="0">
  2813.         <PARAM NAME="FontPitchAndFamily" VALUE="2">
  2814.         <PARAM NAME="FontWeight" VALUE="0">
  2815.     </OBJECT>
  2816.     <OBJECT ID="TitleBanner"
  2817.      CLASSID="CLSID:4C599241-6926-101B-9992-00000B65C6F9"
  2818.      DATA="DATA:application/x-oleobject;BASE64,QZJZTCZpGxCZkgAAC2XG+QACGAC4BgAAAIAAAACAAAAAA///nAwAANwBAACw
  2819. gWfaSsLPEbWEAKoApx0abHQAAFUCAABHSUY4OWF6ABIAov8A////AIAAAGsA
  2820. AEoAADEAABgAABAAAAAALAAAAAB6ABIAAAP/GLrc/jDKSau9VQgc9OZa4z3C
  2821. YH5TGFoj1xTHkBHKcbiCzeTFM9hAmeS3ORgUAppE52L8YpQcLankwD68B+FA
  2822. 0PyOkm2HIJNKqE0Gl0shphc/4aHnyAlrt2VV4X5XCgVxIgRkfAZsJgGJcFiE
  2823. AyiKbIAQYgyBC1R3bokDh1UDBYV8Qo+EH4RdEXF2DFswknNkbGx8Bxuuh2AL
  2824. NjARVyQwr0oER3Y5sZGANmVQTzpfMLoObKwKW8w9m7YBc7s0xEKHkK+QDVtz
  2825. dwqH4XlsW7fbgpEy7wEwjyVQAfUOlWYd+vbJmBTAAJ1u9o7I2xfQXkMtQPTx
  2826. YxhpA0GEiwBa7JEF/+CnhwBJ6WPSAEo1alCuePllzcYeCEkObaOloJcYVguR
  2827. COiFU98qDRMXvIooI2etDX2gGAQYkRecNXSiiOtTgwaibfxARaThhtiupgid
  2828. cBlA5hrDcvvAFNAV40etE/g+/KAhro6oBe/WijWxTW9BOnMfudH7T0qJw+X+
  2829. IVGap0OBIlMCzpHYWJFcWmZF0KzZY/OkmyZDVwFNb1tFTOlqVg7JzXQvbVic
  2830. qj7VjObcOmEdFola7yq8lk+5bjOgS97tvQ0EBQNlAN5jgpFMMwxktuPiqJhk
  2831. ErLxwZPWosMPztk59pyMpQu/kN1s7aWiS0lcyjVI9k6S1Ocet++HHdPQVCJI
  2832. CCMXHaJ08hh5BpiQSiGgQPLEJX5EKOGEFFZo4YUYWpAAADsAAAA=
  2833. "
  2834.      STYLE="TOP:0pt;LEFT:0pt;WIDTH:92pt;HEIGHT:14pt;ZINDEX:98;">
  2835.     </OBJECT>
  2836. </DIV>
  2837.