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 Expand view RUN
#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