Page 1 of 1
Una Matriz de Botones (SOLUCIONADO)
Posted: Wed Mar 23, 2016 4:11 pm
by VitalJavier
Que tal buen dia
Alguien me podría echar la mano con esto
Estoy haciendo una matriz de botones en un TFolderex
Pongo como hago
Code: Select all
FUNCTION build_pages( oFolder )
LOCAL oDialog
FOR J := 1 TO LEN( oFolder:aPrompts )
DEFINE DIALOG oDialog OF oFolder STYLE NOR( WS_VISIBLE, WS_DLGFRAME, WS_CHILD) TRANSPARENT
FOR I := 1 TO LEN(oBtn)
IF oBtn[I,4] = J
@aColB[I,1],aColB[I,2] BTNBMP oBtn[I,1] PROMPT oBtn[I,2] SIZE 48,35 OF odialog PIXEL UPDATE CENTER ACTION .......
oBtn[I,1]:l2007 := .T.
oBtn[I,1]:lBorder := .F.
oBtn[I,1]:lTransparent := .T.
ENDIF
NEXT
oFolder:aDialogs[ J ] := oDialog
NEXT
RETURN oFolder
El gran problema que tengo es en el "ACTION"
Ya estuve buscando como hacerle y no doy
Cada Pestaña del TFolderex tiene un nombre, y cada botón tiene una cadena
Tengo una tabla que quiero filtrar, por el nombre de la pestaña del TFolderex y
por el nombre del botton
si alguien ya paso por esto y me puede echar una mano ???
Gracias.
Re: Una Matriz de Botones
Posted: Wed Mar 23, 2016 7:02 pm
by cuatecatl82
Saludos ojala te pueda servir, no he revisado la clase BTNBMP pero es casi seguro que tenga el parametro bAction
Seria algo así
Code: Select all
oBtn[I,1]:bAction := {|| Msginfo("Item "+str(I) ) }
Ojala funcione..
Saludos.
Re: Una Matriz de Botones
Posted: Wed Mar 23, 2016 7:38 pm
by gmart1
Hola, creo que el problema está en cuando se ejecuta bAction el valor de la variable I es LEN (oBtn)+1.
Para solucionarlo puedes probar asi :
Code: Select all
oBtn[I,1]:bAction := bEjecutaBoton ( I, J )
....
function bEjecutaBoton ( I, J )
return { |I,J| Msginfo ("Boton " + str (I) + " Folder " + str(J) }
Espero te sirva.
Re: Una Matriz de Botones
Posted: Thu Mar 24, 2016 3:45 pm
by VitalJavier
Gracias por responder
ya probe la solución que me están poniendo, pero el detalle es cuando
le doy "click" al botón
function bEjecutaBoton ( I, J )
return { |I,J| Msginfo ("Boton " + str (I) + " Folder " + str(J) }
Esto funciona con forme voy creando los botones, pero después
de ya tener la matriz, y le doy click se pierde.
Alguna idea ??
Saludos.
Re: Una Matriz de Botones
Posted: Fri Mar 25, 2016 3:57 am
by Willi Quintana
HOla, esto funciona...
Code: Select all
FOR nContP := 1 TO 24
REDEFINE BTNBMP aItems[nContP] ;
RESOURCE "NULL" TOP 2007;
ACTION ( MsgInfo(::nId ) ) ; // muestra el ID de cada botón, a partir de allí ya realizas acciones para cada boton
ID 150 + nContP OF oDlg
SysRefresh()
NEXT nContP
Re: Una Matriz de Botones
Posted: Fri Mar 25, 2016 7:14 pm
by noe aburto
Saludos
Tuve que hacer algo asi y me funciono, que te expongo en tu ejemplo:
[code}
FUNCTION build_pages( oFolder )
LOCAL oDialog
FOR J := 1 TO LEN( oFolder:aPrompts )
DEFINE DIALOG oDialog OF oFolder STYLE NOR( WS_VISIBLE, WS_DLGFRAME, WS_CHILD) TRANSPARENT
FOR I := 1 TO LEN(oBtn)
IF oBtn[I,4] = J
DO CASE
CASE I = 1
@aColB[1,1],aColB[1,2] BTNBMP oBtn[1,1] PROMPT oBtn[1,2] SIZE 48,35 OF odialog PIXEL UPDATE CENTER ACTION .......
CASE I = 2
@aColB[2,1],aColB[2,2] BTNBMP oBtn[2,1] PROMPT oBtn[2,2] SIZE 48,35 OF odialog PIXEL UPDATE CENTER ACTION .......
CASE I = 3
@aColB[1,1],aColB[1,2] BTNBMP oBtn[1,1] PROMPT oBtn[1,2] SIZE 48,35 OF odialog PIXEL UPDATE CENTER ACTION .......
CASE
....
ENDCASE
oBtn[I,1]:l2007 := .T.
oBtn[I,1]:lBorder := .F.
oBtn[I,1]:lTransparent := .T.
ENDIF
NEXT
oFolder:aDialogs[ J ] := oDialog
NEXT
RETURN oFolder
[/code]
Y para no tener que cambiar el codigo, puse opciones dentro de CASE de 1 a 30, maximos de botones segun. tal parace que colo con valores fijos te funciona.
Re: Una Matriz de Botones
Posted: Sun Mar 27, 2016 5:30 pm
by Silvio.Falconi
How I can insert a menupopup on button ?
Re: Una Matriz de Botones (SOLUCIONADO)
Posted: Sun Mar 27, 2016 5:38 pm
by VitalJavier
Gracias Amigos por contestar, les agradezco.
Willi, probe tu respuesta y salió a la perfección
Lo hice asi :
Code: Select all
ACTION SHOT_BUTTON(::nId) //Esto en es del botton
FUNCTION SHOT_BUTTON(_Id)
nBusBtn := ASCAN(oBtn,{|aVal| aVal[5]=_Id})
IF nBusBtn > 0
cPrimera := oBtn[nBusBtn,3]
cSegunda := oBtn[nBusBtn,6]
SELECT ARTICULOS
OrdSetFocus("NOMBRE")
cCad := "!Empty(ARTICULOS->ARTICULO) AND ARTICULOS->ESTATUS <> 'B' AND '"+cPrimera+"'$ARTICULOS->NOMBRE AND SUBSTR(ARTICULOS->CODIGO,1,4)='2000' AND '"+AllTrim(cSegunda)+"'$ARTICULOS->NOMBRE"
IF !ADSSetAOF(cCad)
?"No se realizo el filtro...",cCad
ENDIF
DbGoTop()
oBrow:GoTop()
oBrow:Refresh()
ENDIF
RETURN .T.
[/img]
Antes ya había creado el arreglo, y me di cuento que el ID comienza con el "104" y así lo hice.
Gracias por su tiempo.
Re: Silvio Una Matriz de Botones (SOLUCIONADO)
Posted: Mon Mar 28, 2016 3:44 am
by Willi Quintana
Para servir sr.
Y para el MENU POP en cada botón:
En ACTION añades lo siguiente:
Code: Select all
ACTION (<acciones>, MenuMesa(oMesa[::nId-150], ::nId) )
...
..
Function MenuMesa(oObj, nId)
nOption := 0
nTopR := oObj:nBottom //nTop // posicion del control que hizo la llamada
nLeftR := oObj:nRight //nLeft
MENU oMenu POPUP 2007
MENUITEM "Opcion 1" ;
RESOURCE "CALENDARIO1" ACTION nOption := 1
MENUITEM "Opcion 2" ;
RESOURCE "CALENDARIO1" ACTION nOption := 2
MENUITEM "Opcion 3" ;
RESOURCE "CALENDARIO1" ACTION nOption := 3
MENUITEM "Opcion 4" ;
RESOURCE "CALENDARIO1" ACTION nOption := 4
ENDMENU
ACTIVATE POPUP oMenu AT nTopR , nLeftR + 10 OF oObj
? nOption, nId
Return(Nil)
O en tu caso
Code: Select all
FUNCTION SHOT_BUTTON(_Id)
MenuMesa(oMesa[nId], nId)
nBusBtn := ASCAN(oBtn,{|aVal| aVal[5]=_Id})
IF nBusBtn > 0
cPrimera := oBtn[nBusBtn,3]
cSegunda := oBtn[nBusBtn,6]
SELECT ARTICULOS
OrdSetFocus("NOMBRE")
cCad := "!Empty(ARTICULOS->ARTICULO) AND ARTICULOS->ESTATUS <> 'B' AND '"+cPrimera+"'$ARTICULOS->NOMBRE AND SUBSTR(ARTICULOS->CODIGO,1,4)='2000' AND '"+AllTrim(cSegunda)+"'$ARTICULOS->NOMBRE"
IF !ADSSetAOF(cCad)
?"No se realizo el filtro...",cCad
ENDIF
DbGoTop()
oBrow:GoTop()
oBrow:Refresh()
ENDIF
RETURN .T.
Salu2