* 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 * ********************************************************************