home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Programming Tool Box
/
SIMS_2.iso
/
vb_code2
/
q_cards
/
form1.frm
(
.txt
)
< prev
next >
Wrap
Visual Basic Form
|
1993-04-30
|
18KB
|
354 lines
Form1
QCard.DLL Demo
Form1,
Timer1
Dra&wing
DrawCard
Draw&Card
DealCard
&DealCard
DrawBack
Draw&Back
DrawSymbol
Draw&Symbol
RemoveCard
&RemoveCard
MenuExit
E&xit
Information
&Information
CardInformation
&CardInformation
Dragging
&Dragging
MenuDoDrag
D&oDrag
MenuHelp
&Help
m MenuHowTo
Ho&w To...
n MenuAbout
A&bout
Form_Click
DealCard
Form1
Form_Loadi
InitializeDecke
Form_MouseDown
Buttons
Shift
View_Click
DealCard_Click
DrawBack_Click(
DrawBack~
MenuExit_Click
DrawSymbol_Click
DrawSymbol
EraseCard_Click
DrawCard&
Timer1
EnabledE
TRUEr
Timer1_TimerA
EraseCard
FALSEC
CARDWIDTHu
CARDHEIGHT
DrawCard_Click
RemoveCard
RemoveCard_Click.
CardInformation_ClickY
bDragging
Form_MouseMove[
Form_MouseUpq
GetCardColorQ
GetCardValue
GetCardSuit
GetCardX|
GetCardY
IsCardVisible
Width2
Height
ScaleMode
ScaleTop
ScaleLeft
Information_Click
ScaleWidth
ScaleHeight>
bDragDemo
SPACER
MenuDoDrag_Click
AdjustCardBlocked
ActiveCard
PointInCard
nActiveCardH
SetActiveCard
InitDrag
DoDrag)
EndDrag
OldY5
Dragging_Click
ReturnDrag
PointInFreeCard
Screen#
MousePointer.
InitDeck
Form_Paint
SetCardDisabled,
Picture1
nReturn
PointInCardTop~
Form_DblClick
nClickedCard
GlobalXf
GlobalY
DblClkX[
DblClickX
DblClickY
nSpacer
OFFSET
BlockCardsf
BlockDrag
OffsetX
OffsetY
EndBlockDrag
bSingleDraggingc
bBlockDragging
bBlockDrag
SetDefaultValues
ReturnBlockDragr
DragCardsN
Form2
upperbound!
lowerbound
Lefte
fresh
GetFreeDestination
GetCardBlocked
nEndDrag
nTemp
AbortDrag
nSourceCard
nDestCard9
CardArray
Counter
cxSpacer|
SetUser3
SetUser4
nStatus
nArrayID
nArrayPos
nItems'
GetUser4
GetUser3+
nNewXD
nNewY
nSourceArrayV
nSourceArrayPosq
nDestArray
nSourceColor
nDestColor
o_Click
nSourceArrayID
nDestArrayID
nDeltaX
nDeltaY
nSourceX|
nSourceY
nUnused
SetCardBlocked
dlbClickY
DlbClickX
nThisSourceCard
nThisDestCard
bMouseMoved7
process
clicks
similarR
MenuHowTo_Click
Helpn
MenuAbout_Click
About
AutoRedraw
nDrawSelection
SelectCase
nInformationCard
DoText
nCard
MenuHelp_Click
This program demonstrates some of the function callss
of QCard.DLL. In an effort to keep all code under
their respective Event Procedures, I have not usedd
any Sub procedures of my own. Using a few Sub proceduress
would considerably clean up the "spaghetti" nature of
some of the dragging events.t
This demo is not complete in that it does not repaint
it's window properly. I was more interested in demonsrating
function calls rather than creating a usable product.
declare a few counters
declare some test switchesn
declare some card identifiers
to save mouse position for double click event
set up a two dimensional arrayy
four arrays to hold the numbers of thee
cards in each piled
set up a counter to go along with each pile
Form_Load
try to fire up the DLLL
a FALSE return value indicates problems
Sorry. Another application is using QCards.DLL
set ScaleMode to Pixel(3) so form and DLL use the
same coordinatess
make form full screen width
make some initial assigns
DealCard_Click
deal cards in a diagonal line
DrawBack_Click
draw six piles of cards offsetting by 2 pixels up and overr
MenuExit_Click
DrawSymbol_Click
draw in one of each of the three symbolss
Timer1_Timer
remove cards one at a timee
don't forget to take them off in reverse orderr
or you will have a mess
DrawCard_Click
draw the cards using DrawCard
this does not update any of the propertiess
of the cardst
RemoveCard_Click
deal 13 cards and enable the timer sub which will remove them
CardInformation_Click
pick a random cardi
pick a random locationt
Int((upperbound - lowerbound + 1) * Rnd + lowerbound))
set current information card for Paint eventt
deal the card
draw in the text informationr
MenuDoDrag_Click
clear out any old card properties
draw in symbols
each pile has it's own array identifying the cardss
each pile has a counter to maintain the pilee
each card uses it's User3 and User4 properties to
store which array it belongs to and what position
it's in within the array. This makes dragging and
dropping easier
deal first pile and set up array
card's position in array
array ID
block all cards except the one on top
there are 13 cards per pile
card's position in array
array IDc
card's position in array
array IDc
card's position in array
array IDc
Form_MouseDown
InitDrag returns the number of the card that contains the
mouse, as well as setting up the drag operation
save mouse x and y position for double click eventt
no card selecteds
save old position for later use
if the drag is invalidh
if card is not blocked, it is a single drag
if it's blocked, it means were doing a block drag
Form_MouseMove
if just a single card, it's number was set with InitDrag call
determine which pile we are dealing withr
determine the position of the first card in dragn
how many cards are we movinge
create an array to hold the numbers of the cards to movee
and fill the array starting at 0e
put a temporary block on the last card being draggeda
pass the BlockDrag sub the actual array, referencing it's
first element. This acts as a "pointer" to the rest ofs
the elements in the array in memory
let the MouseUp event know that it is ok to
reference the Temp(0) array for this instance
Form_MouseUp
most of the code here involves relocating cards
to their new homes/arrays
end the drag operation and
find out who we are dropping in on
do some color testing
only allow drop if source and destination colors are the same
and if nSourceCard is not the last card in it's pile.
if nDestCard is 0, the Source Card was dropped at an invalid location
if not a valid drop site, return drag
valid single drag/drop... proceed with relocation
which array did we come fromt
reduce our old array countert
which array are we joining
add another to it's counter
block our new neighbor
install our new arrayID and positiong
align with left side of card above us
and down OFFSET (16)o
unblock last card in old array
add ourselves to new arrayr
we can reuse the Temp() array from MouseMovee
as long as MouseMove actually occurredc
end the drag and find out the destination card
do some color testing
only allow drop if source and destination colors are the same
and nSourceCard is not the last card in it's pile
if not a valid drop site, return drag
remove temporary block on last card in block drag array
which array did we come from
reduce our old array counter
which array are we joining
block our new neighbor
this bit of code demonstrates how you can "fool" a drag operation
to drag the item to a specific location. Usually, you pass the
BlockDrag sub the x,y location of the mouse. If you first determine
your current mouse position in relation to the object you are dragging
you can add that difference (nDeltaX, nDeltaY) to the position youi
want to drag to, and pass those points to BlockDrag. We want to align
with the left side of DestCard and down OFFSET (16) pixels from its top
install our new arrayIDs and positionsn
unblock last card in old arrayy
remove temporary block on last card in block drag array
There was a MouseDown event but no MouseMove evente
Form_Paint
Even when the AutoRedraw property for yourr
form is set to TRUE, VB will not redraw any
of your cards for you. You must handle thee
redrawing in the Paint Event. In a normal cardd
game, your Paint Event will look a lot like
Case 6 beloww
Form_DblClick
You can process double clicks in a similar
way to the ButtonUp event.c
The current mouse position is saved for us in the
ButtonDown event as DblClickX and DblClickY
Instead of using the Shared variables nSourceCard
and nDestCard, we will use two local variabless
nThisSourceCard and nThisDestCard..
We need to do this because VB processes ButtonDownn
and ButtonUp messages before it actually gets too
the DblClick event. This will keep our currentt
selections from being corrupted by one of the
other eventsr
We can use the PointInFreeCard function to determinee
if the mouse is within any card that is not blocked
pick a destination pile according to original pileE
if this is the last card in a row, and not the only card in the row
then move it over to the other "same color row" and adjust arrays and blocks
MenuHowTo_Click
winhelp.exe
\qcard.hlp
MenuAbout_Click
Form1.Refreshh
DoText
Card number is "
Card color is
Card value is
Card suit is "
Card x location is "
Card y location is "
Card IsVisible value is
Form ScaleWidth is "
Form ScaleHeight is