* R6_PSA_Objects.PRG >* November (c) 2006 Terry Thurber >* All Rights Reserved >CLOSE ALL >CLEAR ALL >SET EXACT ON >PUBLIC myform as Form >myform=CREATEOBJECT('frmSPlitter') >myform.show > >******************************************************************** >* START SPLITTER FORM DEMO * >******************************************************************** >DEFINE CLASS frmSplitter as Form &&================================= >nPercentLeft=0 >nPercentTop=0 >lMoveInProgress=.f. > >PROCEDURE init >WITH this >.edtNE.zOrder(1) >.edtNW.zOrder(1) >.edtSE.zOrder(1) >.edtSW.zOrder(1) >.cmdX.zOrder(0) >.cmdY.zOrder(0) >.cmdXY.zOrder(0) >.nPercentLeft=.50 >.nPercentTop=.50 >.resize >ENDWITH >ENDPROC > >PROCEDURE release >this.queryunload >ENDPROC > >PROCEDURE QueryUnload >CLEAR EVENTS >RELEASE ALL >ENDPROC > >PROCEDURE resize >WITH this >PSA_MoveSplitter(this,.nPercentLeft*.width,.nPercentTop*.height) >.cmdX.height=.height-4 >.cmdY.width=.width-4 >ENDWITH >ENDPROC > >ADD OBJECT edtNE as edtBox >edtNE.BackColor=15790335 >ADD OBJECT edtNW as edtBox >edtNW.BackColor=16056304 >ADD OBJECT edtSE as edtBox >edtSE.BackColor=15532031 >ADD OBJECT edtSW as edtBox >edtSW.BackColor=16773874 > >ADD OBJECT cmdX as cmdXClass >ADD OBJECT cmdY as cmdYClass >ADD OBJECT cmdXY as cmdXYClass > >Minheight=10 >caption=[XY Quadrant Form Splitter] >visible =.t. >ENDDEFINE && frmSplitter as Form &&================================= > >DEFINE CLASS edtBox as EditBox &&=================================== >visible=.t. >left=2 >top=2 >ENDDEFINE && edtBox as EditBox &&=================================== >******************************************************************** >* END DEMO FORM CLASS * >******************************************************************** >******************************************************************** >* START SCREEN SPLITTER * >******************************************************************** >PROCEDURE PSA_MoveSplitter(oform,lnSplitterLeft,lnSplitterTop) &&--- >WITH oform >.cmdX.Left=lnSplitterLeft >.cmdY.Top=lnSplitterTop >.cmdXY.Left=lnSplitterLeft >.cmdXY.Top=lnSplitterTop >* NE >.edtNE.width=.cmdX.Left-2 >.edtNE.height=.cmdY.top-2 >* NW >.edtNW.left=.cmdX.Left+2 >.edtNW.width=.width-.cmdX.Left-3 >.edtNW.height=.cmdY.top-2 >* SE >.edtSE.top=.cmdY.top+2 >.edtSE.width=.cmdX.Left-2 >.edtSE.height=.height-.cmdY.top-3 >* NW >.edtSW.top=.cmdY.top+2 >.edtSW.left=.cmdX.Left+2 >.edtSW.width=.width-.cmdX.Left-3 >.edtSW.height=.height-.cmdY.top-3 >ENDWITH >ENDPROC &&PSA_MoveSplitter(oform,lnSplitterLeft,lnSplitterTop) &&--- > >DEFINE CLASS cmdSplitterClass as CommandButton &&=================== >top=2 >left=2 >width=3 >height=3 >caption=[] >style=1 >visible=.t. > >PROCEDURE MouseDown (nButton, nShift, nXCoord, nYCoord) >thisform.lMoveInProgress=.t. >ENDPROC &&MouseDown (nButton, nShift, nXCoord, nYCoord) > >PROCEDURE MouseMove (nButton, nShift, nXCoord, nYCoord) >WITH this >IF thisform.lMoveInProgress > IF [Y]$.name > nSplitterTop=nYCoord > IF nSplitterTop<4 > nSplitterTop=4 > ELSE > IF nSplitterTop>thisform.height-4 > nSplitterTop=thisform.height-4 > ENDIF > ENDIF > nSplitterLeft=thisform.cmdXY.left > ELSE > ENDIF > IF [X]$.name > nSplitterLeft=nXCoord > IF nSplitterLeft<4 > nSplitterLeft=4 > ELSE > IF nSplitterleft>thisform.width-4 > nSplitterLeft=thisform.width-4 > ENDIF > ENDIF > nSplitterTop=IIF([XY]$.name,nSplitterTop,thisform.cmdXY.top) > ELSE > ENDIF > PSA_MoveSplitter(thisform,nSplitterLeft,nSplitterTop) >ELSE >ENDIF &&thisform.lMoveInProgress >ENDWITH >ENDPROC > >PROCEDURE MouseUp (nButton, nShift, nXCoord, nYCoord) >this.Mousepointer=0 >thisform.nPercentLeft=thisform.cmdXY.left/thisform.width >thisform.nPercentTop=thisform.cmdXY.Top/thisform.height >thisform.lMoveInProgress=.F. >ENDPROC >ENDDEFINE && cmdSplitterClass as CommandButton &&=================== > >DEFINE CLASS cmdXClass as cmdSplitterClass && ====================== >PROCEDURE MouseMove (nButton, nShift, nXCoord, nYCoord) >WITH this >.mousepointer=IIF(nXCoord<.left-1 or nXCoord>.left+2,0,9) >cmdSplitterClass::MouseMove (nButton, nShift, nXCoord, nYCoord) >ENDWITH >ENDPROC &&MouseMove (nButton, nShift, nXCoord, nYCoord) >ENDDEFINE && cmdXClass as cmdSplitterClass && ====================== > >DEFINE CLASS cmdYClass as cmdSplitterClass && ====================== >PROCEDURE MouseMove (nButton, nShift, nXCoord, nYCoord) >WITH this >.mousepointer=IIF(nYCoord<.top-1 or nYCoord>.top+2,0,7) >cmdSplitterClass::MouseMove (nButton, nShift, nXCoord, nYCoord) >ENDWITH >ENDPROC &&MouseMove (nButton, nShift, nXCoord, nYCoord) >ENDDEFINE && cmdYClass as cmdSplitterClass && ====================== > >DEFINE CLASS cmdXYClass as cmdSplitterClass && ===================== >PROCEDURE MouseMove (nButton, nShift, nXCoord, nYCoord) >WITH this >.mousepointer=IIF(nYCoord<.top-1 OR nYCoord>.top+2 ; > OR nXCoord<.left-1 or nXCoord>.left+2,0,5) >cmdSplitterClass::MouseMove (nButton, nShift, nXCoord, nYCoord) >ENDWITH >ENDPROC &&MouseMove (nButton, nShift, nXCoord, nYCoord) >ENDDEFINE && cmdYClass as cmdSplitterClass && ====================== >******************************************************************** >* END SCREEN SPLITTER * >******************************************************************** >