http://sandstorm36.blogspot.com/2012/07/drag-drop-and-retain-positions.html
Autor: Jun Tangunan
Traducido por: Luis Maria Guayán
Arrastrar, soltar y conservar posiciones
Aquí otro ejemplo moviendo objetos a su alrededor y conservando las posiciones en la siguiente ejecución del formulario. Esto es sólo una simple demostración de cómo podemos hacer lo siguiente:Mientras que la parte de arrastrar y soltar parece ser fácil, además de conservar y recuperar esos valores posteriormente, lo que me llevó más tiempo de averiguar es cómo el reordenamiento de estos objetos que afectan las propiedades tabIndex de cada objeto dentro del contenedor. De todos modos, esto no está perfecto aun, pero al menos usted tendrá algo con que empezar y perfeccionar.
Copie y pegue el código a un .PRG, ejecute y tilde "Permitir mover", a continuación, arrastre los botones alrededor. Después de eso, cierre el formulario y a continuación, ejecutelo de nuevo. Vea si se mantiene las últimas posiciones cuando se cerró el formulario y si el tabindex es el adecuado.
Aquí el código del ejemplo si le interesa:
LOCAL oForm AS FORM oForm = CREATEOBJECT('TestForm') oForm.SHOW(1) RETURN DEFINE CLASS TestForm AS FORM AUTOCENTER = .T. WIDTH = 300 HEIGHT = 440 MINWIDTH = 200 MINHEIGHT = 100 CAPTION = 'Drag, Drop & Retain Positions' ADD OBJECT chkMove AS CHECKBOX WITH CAPTION = 'Permitir mover los objetos',; TOP = 400, LEFT = 5, AUTOSIZE = .T., VALUE = .F., ANCHOR = 6 ADD OBJECT Command1 AS MyButton WITH CAPTION='One', TOP = 5, LEFT = 5 ADD OBJECT Command2 AS MyButton WITH CAPTION='Two', TOP = 70, LEFT = 5 ADD OBJECT Command3 AS MyButton WITH CAPTION='Three', TOP =135, LEFT = 5 ADD OBJECT Command4 AS MyButton WITH CAPTION='Four', TOP = 200, LEFT = 5 ADD OBJECT Command5 AS MyButton WITH CAPTION='Five', TOP = 265, LEFT = 5 ADD OBJECT Command6 AS MyButton WITH CAPTION='Six', TOP = 330, LEFT = 5 PROCEDURE LOAD CLOSE DATABASES ALL * Check if table is there for preserving/restoring values IF !FILE('DragDrops.dbf') CREATE TABLE dragdrops FREE (ObjectName c(40),xTop I,xLeft I,xTabIndex I) INDEX ON xTop+xLeft TAG xTabIndex ELSE USE dragdrops ORDER xTabIndex ENDIF ENDPROC PROCEDURE INIT * Check if first run or not, if first run, make an entry in the table IF RECCOUNT() == 0 FOR EACH loCtrl IN THISFORM.CONTROLS FOXOBJECT INSERT INTO dragdrops VALUES (loCtrl.NAME,loCtrl.TOP,loCtrl.LEFT,0) NEXT ENDIF THIS._reorder() ENDPROC PROCEDURE _TabIndex * recreate tab indexes LOCAL lnTab lnTab = 1 SCAN REPLACE xTabIndex WITH m.lnTab IN dragdrops lnTab = m.lnTab + 1 ENDSCAN ENDPROC PROCEDURE _reorder * Reorder Tab Index FOR EACH loCtrl IN THISFORM.CONTROLS FOXOBJECT SELECT dragdrops LOCATE FOR UPPER(loCtrl.NAME) = UPPER(ObjectName) loCtrl.TABINDEX = dragdrops.xTabIndex NEXT ENDPROC ENDDEFINE DEFINE CLASS MyButton AS COMMANDBUTTON HEIGHT = 60 WIDTH = 100 PROCEDURE INIT * Get previous positions SELECT dragdrops LOCATE FOR UPPER(THIS.NAME) = UPPER(ObjectName) THIS.TOP = dragdrops.xTop THIS.LEFT = dragdrops.xLeft ENDPROC PROCEDURE MOUSEMOVE LPARAMETERS nButton, nShift, nXCoord, nYCoord IF m.nButton = 1 AND THISFORM.chkMove.VALUE = .T. THIS.MOVE(m.nXCoord, m.nYCoord) * update new coordinates REPLACE xTop WITH m.nYCoord, xLeft WITH m.nXCoord FOR; UPPER(THIS.NAME) = UPPER(ObjectName) IN dragdrops THISFORM._TabIndex() ENDIF ENDPROC PROCEDURE CLICK MESSAGEBOX("You've clicked "+THIS.NAME+CHR(13)+; "Tab Index: "+TRANSFORM(THIS.TABINDEX)) ENDPROC ENDDEFINE
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.