Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
XY Quadrant Form Splitter
Message
 
To
All
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Title:
XY Quadrant Form Splitter
Miscellaneous
Thread ID:
01171347
Message ID:
01171347
Views:
61
I needed something like the ISE GUI offers - a 4 quandrant form splitter - I couldn't find one - so I impovised one - it seems clean - an any critique appreciated:
* 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                         *
********************************************************************
Imagination is more important than knowledge
Next
Reply
Map
View

Click here to load this message in the networking platform