SELECT PADR('Customer_'+cust_id,20) AS NodeID, ;
PADR('',20) AS ParentID, ;
PADR(Company,100) AS NodeText, ;
0 AS LEVEL ;
FROM (HOME(2)+'data\customer') ;
UNION ;
SELECT PADR('Orders_'+order_id,20) AS NodeID, ;
PADR('Customer_'+c.cust_id,20) AS ParentID, ;
PADR(ALLTRIM(TRANSFORM(order_id))+":"+TRANSFORM(Order_Date),100) AS NodeText, ;
1 AS LEVEL ;
FROM (HOME(2)+'data\Orders') o ;
INNER JOIN (HOME(2)+'data\customer') c ON o.cust_id == c.cust_id ;
UNION ;
SELECT 'OrdItems_'+oi.order_id+'_'+PADL(line_no,3,'0') AS NodeID, ;
'Orders_'+o.order_id AS ParentID, ;
TRANSFORM(oi.line_no)+':'+p.Prod_Name-(' ['+TRANSFORM(oi.Quantity)+']') AS NodeText, ;
2 AS LEVEL ;
FROM (HOME(2)+'data\OrdItems') oi ;
INNER JOIN (HOME(2)+'data\Orders') o ON oi.order_id == o.order_id ;
INNER JOIN (HOME(2)+'data\customer') c ON o.cust_id == c.cust_id ;
INNER JOIN (HOME(2)+'data\products') p ON oi.product_id == p.product_id ;
ORDER BY LEVEL ;
INTO CURSOR myTree ;
nofilter
#DEFINE tvwFirst 0
#DEFINE tvwLast 1
#DEFINE tvwNext 2
#DEFINE tvwPrevious 3
#DEFINE tvwChild 4
PUBLIC oForm
oForm = CREATEOBJECT('myTreeForm','myTree')
oForm.SHOW
DEFINE CLASS myTreeForm AS FORM
HEIGHT = 640
WIDTH = 800
Autocenter = .T.
CAPTION = "TreeView - TestPad"
nxtwips = 0
nytwips = 0
cursorbehind = ''
ADD OBJECT TreeView AS OLECONTROL WITH ;
HEIGHT = 640, WIDTH = 800, ;
anchor = 15, OLECLASS = 'MSComCtlLib.TreeCtrl'
PROCEDURE INIT
LPARAMETERS tcCursorName
WITH THIS.TreeView
.linestyle =1
.labeledit =1
.indentation = 5
.PathSeparator = '\'
.SCROLL = .T.
.OLEDRAGMODE = 0
.OLEDROPMODE = 0
ENDWITH
THIS.cursorbehind = m.tcCursorName
THIS.PixelToTwips()
THIS.Populate()
ENDPROC
PROCEDURE Populate
SELECT (THIS.cursorbehind)
WITH THIS.TreeView.Nodes
SCAN
IF EMPTY(ParentID)
oNode = .ADD(,tvwFirst,TRIM(NodeID),TRIM(NodeText))
oNode.Bold = .T.
ELSE
oNode = .ADD(TRIM(ParentID),tvwChild,TRIM(NodeID) ,TRIM(NodeText))
IF OCCURS('\',oNode.FULLPATH)=1
oNode.BACKCOLOR = 0x00FFFF
oNode.FORECOLOR = 0xFF0000
ENDIF
IF OCCURS('\',oNode.FULLPATH)=2
oNode.FORECOLOR = 0x0000FF
ENDIF
ENDIF
ENDSCAN
ENDWITH
ENDPROC
PROCEDURE PixelToTwips
LOCAL liHDC, liPixelsPerInchX, liPixelsPerInchY
#DEFINE cnLOG_PIXELS_X 88
#DEFINE cnLOG_PIXELS_Y 90
#DEFINE cnTWIPS_PER_INCH 1440
DECLARE INTEGER GetActiveWindow IN WIN32API
DECLARE INTEGER GetDC IN WIN32API INTEGER iHDC
DECLARE INTEGER GetDeviceCaps IN WIN32API INTEGER iHDC, INTEGER iIndex
liHDC = GetDC(GetActiveWindow())
liPixelsPerInchX = GetDeviceCaps(liHDC, cnLOG_PIXELS_X)
liPixelsPerInchY = GetDeviceCaps(liHDC, cnLOG_PIXELS_Y)
THIS.nxtwips = ( cnTWIPS_PER_INCH / liPixelsPerInchX )
THIS.nytwips = ( cnTWIPS_PER_INCH / liPixelsPerInchY )
ENDPROC
PROCEDURE TreeView.MOUSEMOVE
LPARAMETERS BUTTON, SHIFT, x, Y
WITH THISFORM
oHitTest = THIS.HitTest( x * .nxtwips, Y * .nytwips )
IF TYPE("oHitTest")= "O" AND !ISNULL(oHitTest)
WAIT WINDOW NOWAIT oHitTest.FULLPATH
ENDIF
ENDWITH
oHitTest = .NULL.
ENDPROC
PROCEDURE TreeView.NodeClick
LPARAMETERS oNode
LOCAL aNodeInfo[1]
IF ALINES(aNodeInfo,oNode.KEY,1,'_') = 2 && Customer or orders
IF LOWER(aNodeInfo[1]) == 'customer'
SELECT * FROM customer WHERE cust_id = aNodeInfo[2]
ELSE
SELECT * FROM orders WHERE VAL(order_id) = VAL(aNodeInfo[2])
ENDIF
ELSE
SELECT * FROM orditems ;
WHERE VAL(order_id) = VAL(aNodeInfo[2]) AND line_no = VAL(aNodeInfo[3])
ENDIF
ENDPROC
ENDDEFINE
Gracias Cetin por compartir y autorizar esta publicación.
25 de mayo de 2011
Utilizando el control TreeView (2/4)
Segunda parte de una serie de códigos de ejemplos sobre como utilizar el control TreeView en VFP, escritos por el turco Cetin Basoz (Microsoft Visual FoxPro MVP 1999-2010).
Suscribirse a:
Comentarios de la entrada
(
Atom
)
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.