Page 1 of 1

MOVER BOTON TIEMPO DE EJECUCION

Posted: Thu Dec 27, 2018 1:01 pm
by jbrita
Estoy intentando hacer un sistema de buses, pero la cosa se está poniendo difícil. Lo que quiero hacer es un botón que al hacerle click me cree nuevos botones (en tiempo de ejecución/dinámicos - o nuevas asiento) y luego poder mover esos mismos botones (asientos) y posicionarlos dentro del Form Principal.

saludos

Re: MOVER BOTON TIEMPO DE EJECUCION

Posted: Thu Dec 27, 2018 6:24 pm
by cmsoft
Hola jbrita:
Eso lo puedes hacer con BTNBMP, con la opcion DESIGN. Con una barra para el boton agregar un asiento. Y que el usuario lo ponga y lo mueva donde quiera.
Yo lo uso desde una tabla MySql, pero es lo mismo con DBFs.
Tendrás que tener guardado en que coordenadas de la pantalla lo dejo el usuario.

Code: Select all

#include "FiveWin.ch"
MEMVAR oApp
static oDlg, nAsiento := 1,oQryAsientos

PROCEDURE ConfBus(nBus)
LOCAL oBar
   oQryAsientos:= oApp:oServer:Query("SELECT * FROM asientos ORDER BY numero")   
   DEFINE FONT oFont NAME "TIME NEW ROMAS" SIZE 15,30    
   DEFINE WINDOW oDlg MDICHILD TITLE "Definicion de Bus" ;   
   DEFINE BUTTONBAR oBar  3D SIZE 60,60 OF oDlg 2007 RIGHT
   DEFINE BUTTON OF oBar TOOLTIP "Agregar Asiento"  NOBORDER PROMPT "Agregar"  TOP ACTION AgregaAsiento(oDlg)   
   DEFINE BUTTON OF oBar TOOLTIP "Guardar Bus"      NOBORDER PROMPT "Guardar"  TOP ACTION GrabarAsiento(oDlg)   
   DEFINE BUTTON OF oBar TOOLTIP "Salir"            NOBORDER PROMPT "Salir"    TOP ACTION oDlg:End()
   ACTIVATE WINDOW oDlg MAXIMIZED ON INIT (CargarAsientos(oDlg),SysRefresh())
RETURN

STATIC function AgregaAsiento( oDlg )
   LOCAL oBitMap
   @20, 20 BTNBMP oBitMap PROMPT (ALLTRIM(STR(nAsiento))) RESOURCE "ASIENTO" CENTER ;
         OF oDlg SIZE 55,55 DESIGN ADJUST NOBORDER TRANSPARENT FONT oFont 
   BringWindowToTop( oBitMap:hWnd ) 
   oBitMap:SetFocus()
   oBitMap:cargo := nAsiento
   nAsiento ++   
return nil

STATIC function CargarAsientos(oDlg)
LOCAL oBitMap
DO WHILE !oQryAsientos:Eof()
    @ oQryAsientos:nTop, oQryAsientos:nLeft BTNBMP oBitMap PROMPT (STR(oQryAsientos:numero)) RESOURCE "ASIENTO" ;
         OF oDlg SIZE oQryAsientos:nWidth, oQryAsientos:nHeight CENTER DESIGN ADJUST NOBORDER TRANSPARENT FONT oFont      
    nAsiento := oQryAsientos:numero
    oBitMap:cargo := nAsiento
    oQryMesas:Skip()
ENDDO
nAsiento := oQryAsientos:numero + 1
RETURN nil

STATIC FUNCTION GrabarAsiento(oDlg)
LOCAL i, oControl 
oApp:oServer:Execute("TRUNCATE asientos")
FOR i := 1 to LEN(oDlg:aControls)
    oControl := oDlg:aControls[i]
    IF oControl:cargo = NIL 
       LOOP
    ENDIF
    oApp:oServer:Execute("INSERT INTO asientos "+;
      "(numero,ntop,nleft,nwidth,nheight) VALUES "+;
                         "("+ClipValue2Sql(oControl:cargo)+","+;
                            +ClipValue2Sql(oControl:nTop)+","+; 
                            +ClipValue2Sql(oControl:nLeft)+","+;
                            +ClipValue2Sql(oControl:nWidth)+","+;
                            +ClipValue2Sql(oControl:nHeight)+")")
NEXT i
RETURN nil
 

Re: MOVER BOTON TIEMPO DE EJECUCION

Posted: Thu Dec 27, 2018 8:05 pm
by jbrita
muchas gracias , probare yo igual trabajo con mysql

saludos