Una Matriz de Botones (SOLUCIONADO)

Post Reply
VitalJavier
Posts: 188
Joined: Mon Jun 10, 2013 6:40 pm

Una Matriz de Botones (SOLUCIONADO)

Post 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.
Last edited by VitalJavier on Sun Mar 27, 2016 6:01 pm, edited 1 time in total.
User avatar
cuatecatl82
Posts: 614
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México
Contact:

Re: Una Matriz de Botones

Post 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.
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
gmart1
Posts: 65
Joined: Wed Oct 24, 2007 12:48 pm
Location: Alhaurin de la Torre (MALAGA)

Re: Una Matriz de Botones

Post 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.
VitalJavier
Posts: 188
Joined: Mon Jun 10, 2013 6:40 pm

Re: Una Matriz de Botones

Post 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.
User avatar
Willi Quintana
Posts: 859
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú
Contact:

Re: Una Matriz de Botones

Post 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
 
User avatar
noe aburto
Posts: 420
Joined: Wed Nov 26, 2008 6:33 pm
Location: Morelia, Mich. Mexico.

Re: Una Matriz de Botones

Post 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.
Noé Aburto Sánchez
Tec. Prog. de Sistemas. -Morelia, Mich. México.
fwh 20.06, Harbour 3.2.0, bcc 7.4
TsBrowse 9.0, TsButton 7.0, xEdit 6.1
naburtos@gmail.com, noeaburto67@hotmail.com
User avatar
Silvio.Falconi
Posts: 4956
Joined: Thu Oct 18, 2012 7:17 pm

Re: Una Matriz de Botones

Post by Silvio.Falconi »

How I can insert a menupopup on button ?
I use : FiveWin for Harbour August 2020 (Revision) - Harbour 3.2.0dev (r1712141320) - Bcc7.30 - xMate ver. 1.15.3 - PellesC
VitalJavier
Posts: 188
Joined: Mon Jun 10, 2013 6:40 pm

Re: Una Matriz de Botones (SOLUCIONADO)

Post 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.

 
Image
[/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.
User avatar
Willi Quintana
Posts: 859
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú
Contact:

Re: Silvio Una Matriz de Botones (SOLUCIONADO)

Post 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
Post Reply