Page 1 of 3

Classe Metro

PostPosted: Tue May 19, 2015 10:40 am
by Joaoalpande
Boa Tarde,

Estou a ver vários exemplos da classe metro e não estou a conseguir fazer o que desejo, preciso o seguinte:

na primeira tela quero que mostre 1 Metrobutton por cada registo da tabela REGIOES.DBF em que o caption é o campo nome desta mesma, quando o usuário clicar num deles preciso saber em que Recno() da REGIOES.DBF clicou , para depois fazer um filtro a tabela ARTIGOS.DBF em que o campo CodReg=RECNO() da tabela REGIOES clicado na primeira tela e mostrar todos os artigos filtrados em 1 metrobutton por cada registo, tem como fazer isso?


Cumprimentos
João Alpande

Re: Classe Metro

PostPosted: Tue May 19, 2015 11:29 am
by Antonio Linares
Joao,

Prueba asi:

Code: Select all  Expand view
  local oMetro

   DEFINE METRO oMetro ;
      TITLE "My FWH Metro app" ;
      BACKGROUND "..\bitmaps\hires\earth.bmp"
     
   while ! Eof()
      DEFINE METROBUTTON OF oMetro ;
         PROMPT FieldGet( 1 ) COLOR CLR_WHITE, RGB( 2, 174, 224 ) ;  // 1 primer campo
         IMAGE "..\bitmaps\metro\files.bmp" ;
         ACTION Records()  
      DbSkip()
   end
 

Re: Classe Metro

PostPosted: Tue May 19, 2015 12:32 pm
by Joaoalpande
Gracias Antonio Linares,

MUISTRA BIEN os metrobutton do dbf , cómo saber recno() do dbf el usuario hace clic ?

Saludos

João

Re: Classe Metro

PostPosted: Tue May 19, 2015 3:28 pm
by Antonio Linares
Joao,

Tienes que hacer esta modificación en metro.ch:
Code: Select all  Expand view
#xcommand DEFINE METROBUTTON [<oBtn>] ;
             [ PROMPT <cPrompt> ] ;
             [ COLOR <nClrText>, <nClrPane> ] ;
             [ IMAGE <cImgName> ] ;
             [ OF <oMetro> ] ;
             [ <large: LARGE> ] ;
             [ ACTION <uAction,...> ] ;
          => ;
             [ <oBtn> := ] <oMetro>:AddButton( <cPrompt>, <nClrText>, <nClrPane>,;
                <.large.>, <cImgName>, [{| Self |<uAction>}] )


Code: Select all  Expand view
 local oMetro, oBtn

   DEFINE METRO oMetro ;
      TITLE "My FWH Metro app" ;
      BACKGROUND "..\bitmaps\hires\earth.bmp"
     
   while ! Eof()
      DEFINE METROBUTTON oBtn OF oMetro ;
         PROMPT FieldGet( 1 ) COLOR CLR_WHITE, RGB( 2, 174, 224 ) ;  // 1 primer campo
         IMAGE "..\bitmaps\metro\files.bmp" ;
         ACTION ShowRecords( ::Cargo )  
      oBtn:Cargo = RecNo()
      DbSkip()
   end
 

Re: Classe Metro

PostPosted: Wed May 20, 2015 10:27 am
by Joaoalpande
ola Antonio Linares,

Alterei o metro.ch assim:
Code: Select all  Expand view
// FiveWin - Windows 8 Metro look

#ifndef _METRO_CH
#define _METRO_CH

//----------------------------------------------------------------------------//

#xcommand DEFINE METRO <oMtr> ;
             [ BACKGROUND <cFileName> ] ;
             [ BTNSIZE <nBtnWidth>, <nBtnHeight> ] ;
             [ TITLE <cTitle> ] ;
          => ;
          <oMtr> := TMetro():New( <cTitle>, <nBtnWidth>, <nBtnHeight>, <cFileName> )

xcommand DEFINE METROBUTTON [<oBtn>] ;
             [ PROMPT <cPrompt> ] ;
             [ COLOR <nClrText>, <nClrPane> ] ;
             [ IMAGE <cImgName> ] ;
             [ OF <oMetro> ] ;
             [ <large: LARGE> ] ;
             [ ACTION <uAction,...> ] ;
          => ;
             [ <oBtn> := ] <oMetro>:AddButton( <cPrompt>, <nClrText>, <nClrPane>,;
                <.large.>, <cImgName>, [{| Self |<uAction>}] )
#xcommand ACTIVATE METRO <oMtr> => <oMtr>:Activate()

//----------------------------------------------------------------------------//

#endif


alterei o metro.prg assim:
Code: Select all  Expand view
DEFINE METRO oMetro ;
      TITLE "My FWH Metro app" ;
      BACKGROUND "..\bitmaps\hires\earth.bmp"
    DBSELECTAREA( 1 )
    NET_USE ("F_REG.DBF", 3,.T.)
 while ! Eof()
      DEFINE METROBUTTON oBtn OF oMetro ;
         PROMPT FieldGet( 1 ) COLOR CLR_WHITE, RGB( 2, 174, 224 ) ;  // 1 primer campo
         IMAGE "..\bitmaps\metro\files.bmp" ;
         ACTION ShowRecords( ::Cargo )
        oBtn:Cargo = RecNo()
      DbSkip()
   end

   DEFINE METROBUTTON OF oMetro ;
      PROMPT "Exit" COLOR CLR_WHITE, RGB( 2, 174, 224 ) ;
      IMAGE "..\bitmaps\metro\exit.bmp" ;
      ACTION If( MsgYesNo( "Want to exit ?" ), oMetro:End(),)

   ACTIVATE METRO oMetro


dá error: Error description: Error description: Error BASE/1005 Class: 'NIL' has no property: CARGO

se retirar : oBtn:Cargo = RecNo() mostra bem os metrobutton mas quando clico num dá erro:

Error BASE/1003 Variable does not exist: SELF

Gracias

Re: Classe Metro

PostPosted: Wed May 20, 2015 10:32 am
by Antonio Linares
Por favor compílalo usando /b al llamar a Harbour.exe y comprueba que te aparece en el fichero.PPO

Re: Classe Metro

PostPosted: Wed May 20, 2015 11:05 am
by Joaoalpande
obrigado, o .ppo aparece assim, estou compilando com buildx.bat do samples:
Code: Select all  Expand view
oMetro := TMetro():New( "My FWH Metro app",,, "..\bitmaps\hires\earth.bmp" )
    DBSELECTAREA( 1 )
    NET_USE ("F_REG.DBF", 3,.T.)
    DBGOTOP()
 while ! Eof()
      oBtn := oMetro:AddButton( FieldGet( 1 ), 16777215, ( 2 + ( 174 * 256 ) + ( 224 * 65536 ) ), .F., "..\bitmaps\metro\files.bmp", {||ShowRecords(::Cargo )} )
         oBtn:Cargo :=RecNo()
      DbSkip()
   end
   oMetro:AddButton( "Exit", 16777215, ( 2 + ( 174 * 256 ) + ( 224 * 65536 ) ), .F., "..\bitmaps\metro\exit.bmp", {||If( MsgYesNo( "Want to exit ?" ), oMetro:End(),)} )
   oMetro:Activate()

Re: Classe Metro

PostPosted: Wed May 20, 2015 1:18 pm
by Antonio Linares
En el .ppo debería aparecer esto:

{| Self |ShowRecords(::Cargo )}

Has modificado el fichero metro.ch como te indiqué ?

Re: Classe Metro

PostPosted: Wed May 20, 2015 1:31 pm
by Joaoalpande
Desculpa Antonio Linares, o metro.ch estava errado , mas continua com o mesmo erro Error description: Error BASE/1005 Class: 'NIL' has no property: CARGO
.ppo esta:

Code: Select all  Expand view
  oMetro := TMetro():New( "My FWH Metro app",,, "..\bitmaps\hires\earth.bmp" )
    DBSELECTAREA( 1 )
    NET_USE ("F_REG.DBF", 3,.T.)
    DBGOTOP()
 while ! Eof()
      oBtn := oMetro:AddButton( FieldGet( 1 ), 16777215, ( 2 + ( 174 * 256 ) + ( 224 * 65536 ) ), .F., "..\bitmaps\metro\files.bmp", {| Self |ShowRecords(::Cargo )} )
         oBtn:Cargo :=RecNo()
      DbSkip()
   end
   oMetro:AddButton( "Exit", 16777215, ( 2 + ( 174 * 256 ) + ( 224 * 65536 ) ), .F., "..\bitmaps\metro\exit.bmp", {| Self |If( MsgYesNo( "Want to exit ?" ), oMetro:End(),)} )
   oMetro:Activate()
 

Re: Classe Metro

PostPosted: Wed May 20, 2015 1:36 pm
by Antonio Linares
Please try this change and let me know what you get:

Code: Select all  Expand view
while ! Eof()
      oBtn := oMetro:AddButton( FieldGet( 1 ), 16777215, ( 2 + ( 174 * 256 ) + ( 224 * 65536 ) ), .F., "..\bitmaps\metro\files.bmp", {| Self |ShowRecords(::Cargo )} )
         MsgInfo( ValType( oBtn ) )
         oBtn:Cargo :=RecNo()
      DbSkip()
   end

Re: Classe Metro

PostPosted: Wed May 20, 2015 1:50 pm
by Joaoalpande
information : U

Error description: Error BASE/1005 Class: 'NIL' has no property: CARG

Re: Classe Metro

PostPosted: Thu May 21, 2015 3:18 pm
by Joaoalpande
Ola antonio,

no forum fivewin brasil deram uma solução mas com dialog e button , não funciona com metro , veja:

http://fivewin.com.br/index.php?/topic/24015-classe-metro/

Saludos

Re: Classe Metro

PostPosted: Thu May 21, 2015 3:35 pm
by karinha
Master algo +- asi:

Code: Select all  Expand view

FUNCTION TESTEPRODU( oFld, _Folder, oPRODU, _LETRA, _INIPROD, _FIMPROD )

    MEMVAR OCTL, _oProdu

    PUBLIC WPRODFOCO

    oCtl := oFld:aDialogs[_Folder]:oCtlFocus()

    WHILE _INIPROD <= _FIMPROD

        SYSREFRESH()

        _oProdu := oProdu+STRZERO(_INIPROD,2,0)+_LETRA

        IF (oCtl:hWnd = &_oProdu:hWnd)

           WPRODFOCO := _INIPROD

           EXIT

        ENDIF

        _INIPROD = _INIPROD + 1

    ENDDO

RETURN( .T. )
 

Re: Classe Metro

PostPosted: Thu May 21, 2015 7:20 pm
by Antonio Linares
Joao,

Que versión de FWH usas ?

Re: Classe Metro

PostPosted: Thu May 21, 2015 9:49 pm
by Joaoalpande
12.07