3 de febrero de 2006

Mover controles y ajustar tamaño en tiempo de ejecución

A cuantos nos ha pasado querer permitirle mover controles al usuario y que el usuario pueda cambiar el tamaño del objeto.

Esta utilidad muestra un ejemplo de ello, si quieren que se guarde esta información para que el usuario cargue las ventanas con las caracteristias que él a colocado, pues solo hagan una tabla en la que guarden el control y sus propiedades, en el Init del Form, carguen estas propiedades y en el Unload, guarden las nuevas.

Espero les sea de utilidad.

Alejandro Magaña
PUBLIC loForm1
loForm1 = CREATEOBJECT("Form1")
loForm1.SHOW(1)

DEFINE CLASS Form1 AS FORM
  TOP = 0
  LEFT = 0
  HEIGHT = 225
  WIDTH = 276
  AUTOCENTER = .T.
  CAPTION = "Mover y ajustar controles"
  xoffset = 0
  yoffset = 0
  NAME = "Form1"
  ADD OBJECT command10 AS COMMANDBUTTON WITH ;
    TOP = 68, LEFT = 84, ;
    HEIGHT = 49, WIDTH = 84, ;
    CAPTION = "Mi botón", NAME = "Command10"
  ADD OBJECT check1 AS CHECKBOX WITH ;
    TOP = 20, LEFT = 54, ;
    HEIGHT = 17, WIDTH = 60, ;
    CAPTION = "Mover", NAME = "Check1"
  ADD OBJECT check2 AS CHECKBOX WITH ;
    TOP = 20, LEFT = 161, ;
    HEIGHT = 17, WIDTH = 60, ;
    CAPTION = "Ajustar", NAME = "Check2"
  ADD OBJECT label1 AS LABEL WITH ;
    CAPTION = [Para mover el botón deberá activar la ] + ;
    [casilla "Mover", y para ajustar su Height y ] + ;
    [Width, active la casilla "Ajustar"], ;
    HEIGHT = 60, LEFT = 6, ;
    TOP = 161, WIDTH = 267, ;
    NAME = "Label1", WORDWRAP = .T.
  PROCEDURE ajustar
    LPARAMETERS oSource, nXCoord, nYCoord, nPosicion
    IF nPosicion = 1
      oSource.WIDTH = nXCoord - oSource.LEFT
    ELSE
      oSource.HEIGHT = nYCoord - oSource.TOP
    ENDIF
  ENDPROC
  PROCEDURE DRAGDROP
    LPARAMETERS oSource, nXCoord, nYCoord
    oSource.LEFT = nXCoord - THISFORM.XOffset
    oSource.TOP = nYCoord - THISFORM.YOffset
  ENDPROC
  PROCEDURE command10.DRAGDROP
    LPARAMETERS oSource, nXCoord, nYCoord
    THIS.PARENT.DRAGDROP(oSource, nXCoord, nYCoord)
  ENDPROC
  PROCEDURE command10.CLICK
    MESSAGEBOX("Left: "+TRANSFORM(THIS.LEFT)+CHR(13)+;
      "Top: "+TRANSFORM(THIS.TOP)+CHR(13)+;
      "Width: "+TRANSFORM(THIS.WIDTH)+CHR(13)+;
      "height: "+TRANSFORM(THIS.HEIGHT))
  ENDPROC
  PROCEDURE command10.MOUSEMOVE
    LPARAMETERS nButton, nShift, nXCoord, nYCoord
    IF THISFORM.Check1.VALUE = 1
      IF nButton = 1 && Left button
        THISFORM.XOffset = nXCoord - THIS.LEFT
        THISFORM.YOffset = nYCoord - THIS.TOP
        THIS.DRAG
      ENDIF
    ENDIF
    IF THISFORM.check2.VALUE = 1
      THISFORM.XOffset = nXCoord - THIS.LEFT
      THISFORM.YOffset = nYCoord - THIS.TOP
      DO CASE
        CASE BETWEEN(THISFORM.XOffSet,THIS.WIDTH - 8,THIS.WIDTH + 8)
          THIS.MOUSEPOINTER = 9
          IF nButton = 1
            THISFORM.Ajustar(THIS,nXCoord,nYCoord,1)
          ENDIF
        CASE BETWEEN(THISFORM.YOffSet,THIS.HEIGHT - 8,THIS.HEIGHT + 8)
          THIS.MOUSEPOINTER = 7
          IF nButton = 1
            THISFORM.Ajustar(THIS,nXCoord,nYCoord,2)
          ENDIF
        OTHERWISE
          THIS.MOUSEPOINTER = 0
      ENDCASE
    ENDIF
  ENDPROC
  PROCEDURE check1.CLICK
    IF THIS.VALUE = 1
      THIS.PARENT.check2.VALUE = 0
    ENDIF
  ENDPROC
  PROCEDURE check2.CLICK
    IF THIS.VALUE = 1
      THIS.PARENT.check1.VALUE = 0
    ENDIF
  ENDPROC
ENDDEFINE

No hay comentarios. :

Publicar un comentario

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.