* PASO 1
* CREAR UN METODO EN EL FORMULARIO (GETUPMOUSE)
* METODO DE USUARIO GETUPMOUSE
*******************************
LPARAMETERS xcName,xnTop,xnleft
lcExact=SET("EXACT")
lcName=Thisform.Name+","+xcName
SET EXACT ON
SELECT formpos
IF !INDEXSEEK(lcName,.f.,"FORMPOS","IFORMPOS")
INSERT INTO FORMPOS (CONTROLES) ;
VALUES (lcName)
ENDIF
INDEXSEEK(lcName,.T.,"FORMPOS","IFORMPOS")
REPLACE ngTop WITH xnTop,;
ngLeft WITH xnLeft
SET EXACT &lcExact
* LOAD DEL FORMULARIO
*********************
&& se crea la tabla "FORMPOS" para conservar las posiciones del formulario y sus objetos
IF !FILE("FORMPOS.DBF")
CREATE TABLE FORMPOS FREE ;
("CONTROLES" C(150),;
"NGTOP" I,;
"NGLEFT" I)
SELECT FORMPOS
INDEX ON CONTROLES TAG IFORMPOS
ENDIF
IF !USED("FORMPOS")
USE FORMPOS IN 0 EXCLUSIVE
ENDIF
* INIT DEL FORMULARIO
*********************
lcFormName=This.Name
qlen=LEN(lcFormName)
SELECT FORMPOS
SCAN FOR LEFT(controles,qlen)==lcFormName
lcProp=ALLTRIM(controles)
lnControls=ALINES(gaControl,lcProp,1,",")
DO case
CASE lnControls=0
CASE lnControls=1
WITH thisform
.Top=ngtop
.left=ngLeft
ENDWITH
CASE lnControls=2
lcControl=gaControl[2]
&& Previene objetos borrados ó cambio de nombres
IF VARTYPE(thisform.&lcControl)="O"
WITH thisform.&lcControl.
.Top=formpos.ngtop
.left=formpos.ngleft
ENDWITH
endif
ENDCASE
ENDSCAN
*DESTROY DEL FORMULARIO
************************
lcExact=SET("EXACT")
lcName=Thisform.Name
SET EXACT ON
* Guarda la posición del formulario y cierra el archivo
SELECT formpos
IF !INDEXSEEK(lcName,.f.,"FORMPOS","IFORMPOS")
INSERT INTO FORMPOS (CONTROLES) ;
VALUES (lcName)
ENDIF
INDEXSEEK(lcName,.T.,"FORMPOS","IFORMPOS")
REPLACE ngTop WITH this.Top,;
ngLeft WITH this.Left
SET EXACT &lcExact
IF USED("FORMPOS")
SELECT FORMPOS
USE
ENDIF
**********************************************
* En cada botón que puede moverse
**********************************
* Evento MOUSEMOVE
******************
LPARAMETERS nButton, nShift, nXCoord, nYCoord && línea Default()
IF NBUTTON=1
WITH this
.Top=nYCoord
.Left=nXCoord
ENDWITH
ENDIF
* EVENTO MOUSEUP
****************
LPARAMETERS nButton, nShift, nXCoord, nYCoord && Línea Default()
thisform.getupmouse(this.Name,this.Top,this.Left)