Mira, yo lo hago asi, cuando abro una mesa, creo un archivo temporario con el nombre de la mesa, ej. MESA001.DBF, ya que si quiere dejar pendiente una mesa para luego agregarle mas items vendidos, tiene que tener esa posibilidad. Luego utilizo este codigo:
DEFINE WINDOW oWnd MDICHILD TITLE "Seleccion de mesa" ;
OF MEMVAR->oWPpal NOZOOM ICON MEMVAR->oIco
DEFINE DIALOG oDlg RESOURCE "SELEMESA" OF oWnd
oDlg:nStyle := WS_CHILD
FOR i := 1 TO 100
REDEFINE BTNBMP oBit[i] ;
RESNAME IF(FILE("MESA"+STRTRAN(STR(i,3)," ","0")+".DBF"),;
"MESO",;
"MESA") ;
ACTION (Venta(::nId - 100, @oBit,@mocupa,@mlibre),;
oGet1:Refresh(),oGet2:Refresh());
ID i+100;
TOOLTIP "Mesa "+STR(i,3) OF oDlg NOBORDER
mocupa := mocupa + IF(FILE("MESA"+STRTRAN(STR(i-1,3)," ","0")+".DBF"),;
1,0)
NEXT i
mlibre := 100 - mocupa
REDEFINE GET oGet1 VAR mocupa ID 201 PICTURE "999" WHEN(.F.) OF oDlg
REDEFINE GET oGet2 VAR mlibre ID 202 PICTURE "999" WHEN(.F.) OF oDlg
REDEFINE GET oGet3 VAR mmesa ID 204 PICTURE "999" OF oDlg ;
VALID(mmesa>0 .and. mmesa < 101)
REDEFINE BUTTON oBot1 ID 206 ACTION Venta(mmesa,@oBit,@mocupa,@mlibre)
REDEFINE BUTTON oBot2 ID 205 ACTION oWnd:End() CANCEL
ACTIVATE DIALOG oDlg NOWAIT ON INIT oDlg:Move(0,0) VALID(oWnd:End())
ACTIVATE WINDOW oWnd VALID(cerrar(base,oGet,oWnd))Como veras, tengo dos BMP en el recurso que se llaman MESO y MESA
MESO es el dibujo de mesa ocupada y MESA es el de mesa libre. Y los ID de los botones comienzan en 201 en el recurso.
Cualquier consulta, no dudes en preguntar.