Minimizar ventana

Post Reply
Loren
Posts: 458
Joined: Fri Feb 16, 2007 10:29 am
Location: Cadiz - España

Minimizar ventana

Post by Loren »

Buenas compañeros:

Tengo este código (Simplificado)

Code: Select all

#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> ]  [ <lminimiza: MINIMIZA> ]  [ ACTION <uAction,...> ]  ;
          =>  [ <oBtn> := ] <oMetro>:AddButton( <cPrompt>, <nClrText>, <nClrPane>, <.large.>, <.lminimiza.>, <cImgName>, [{||<uAction>}] )

#xcommand ACTIVATE METRO <oMtr> => <oMtr>:Activate()

oMetro:=TMetro():New('Gestión empresarial',,,,'')
DEFINE METROBUTTON OF oMetro PROMPT "Clientes"      COLOR CLR_WHITE, RGB( 002, 174, 224 )       IMAGE camino+"\images\metro\users.BMP" action clie(1)
DEFINE METROBUTTON OF oMetro PROMPT "Minimizar"    COLOR CLR_WHITE, RGB( 002, 174, 224 )       IMAGE camino+"\images\metro\minimo.BMP" action ::oWnd:Minimize()
oMetro:activate()


//--------------------------------//
CLASS TMetro
   DATA  oWnd, oFont, oFontB, oFontA, oFontC, oFontD
   DATA  cFileName
   DATA  aButtons
   DATA  nOriginX, nOriginY
   DATA  nBtnWidth, nBtnHeight
   DATA  cTitle
   DATA  nRow, nCol
   DATA  oTimer
   DATA  hBitmap
   METHOD New( cTitle, nBtnWidth, nBtnHeight, cFileName )
   METHOD Activate()
   METHOD AddButton( cCaption, nClrText, nClrPane, lLarge, lminimiza, cImgName, bAction )
   METHOD End() INLINE ::oWnd:End()
ENDCLASS


METHOD New( cTitle, nBtnWidth, nBtnHeight, cFileName ) CLASS TMetro
   DEFAULT cTitle := "MyApp", nBtnWidth := 132, nBtnHeight := 132
   ::cTitle     = cTitle
   ::aButtons   = {}
   ::nBtnWidth  = nBtnWidth
   ::nBtnHeight = nBtnHeight
   ::nOriginX   = 200
   ::nOriginY   = 200
   ::nRow       =   0
   ::nCol       =   0
   if File( cFileName )
      ::hBitmap = ReadBitmap( 0, cFileName )
   endif
   DEFINE FONT ::oFont  NAME "Century Gothic" SIZE 0, -60
   DEFINE WINDOW ::oWnd STYLE nOr( WS_POPUP, WS_VISIBLE ) COLOR CLR_WHITE, CLR_BLACK
return Self

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

METHOD Activate() CLASS TMetro
   ACTIVATE WINDOW ::oWnd MAXIMIZED  ON PAINT ( DrawBitmap( hDC, ::hBitmap, 0, 0, GetSysMetrics( 0 ), GetSysMetrics( 1 ) ),;
                 ::oWnd:Say( 3 , 16 , ::cTitle ,,, ::oFont ,, .T. ), ::oWnd:Say( 42, 16 , 'Ruta de acceso: '+cruta ,,, ::oFontD,, .T. ) )
return nil
Para minimizar la ventana manualmente ¿como puedo hacer?
Intento con:
... action ::oWnd:Minimize()

pero me genera un error del tipo: Error BASE/1004 Class: 'NIL' has no exported method: OWND

¿Cómo lo puedo hacer?
Mil gracias.
Un saludo.
LORENZO
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Minimizar ventana

Post by MarioG »

Lorenzo;
Debes declarar una variable, que puede ser local: oSelf:= self
luego declaras asi:
action oSelf:oWnd:Minimize()

la explicación: seguramente un "sabio" lo podrá hacer ;-)
Lo que si puedo agregar es que al escribir ::oWnd, esta interpretando como que es una DATA de la clase METRO
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Minimizar ventana

Post by Daniel Garcia-Gil »

Saludos
MarioG wrote:Debes declarar una variable, que puede ser local: oSelf:= self
luego declaras asi:
action oSelf:oWnd:Minimize()
si eso sucede dentro del metodo de una clases, la solucion es correcta, de lo contrario simplemente con llamar al objeto window que quieras minimizar sera suficionte ejemplo oWnd:Minimize()
MarioG wrote:Lo que si puedo agregar es que al escribir ::oWnd, esta interpretando como que es una DATA de la clase METRO
No necesariamente es asi...

exitendo la explicacion un poco mas

el metodo AddButton de la clase metro crea un BtnBmp y se le asigna el codeblock que contendra nuestra accion en la paramatro 6 (bAction)

Code: Select all

METHOD AddButton( cCaption, nClrText, nClrPane, lLarge, cImgName, bAction ) CLASS TMetro
lo que sucede ahora es que cuando la clase TBtnBmp intente ejecutar ese codeblock, le esta pasando como paramtero el objeto "Self" (que no es mas que el mismo boton, TBtnBmp)

Code: Select all

Eval( ::bAction, Self )
al momento que defines

Code: Select all

#xcommand DEFINE METROBUTTON [<oBtn>]  [ PROMPT <cPrompt> ]  [ COLOR <nClrText>, <nClrPane> ]  [ IMAGE <cImgName> ]  ;
             [ OF <oMetro> ]  [ <large: LARGE> ]  [ <lminimiza: MINIMIZA> ]  [ ACTION <uAction,...> ]  ;
          =>  [ <oBtn> := ] <oMetro>:AddButton( <cPrompt>, <nClrText>, <nClrPane>, <.large.>, <.lminimiza.>, <cImgName>, [{||<uAction>}] )
destacando este codeblock no esta recibiendo el parametro "Self" que le envia la clase TBtnBmp [{||<uAction>}] donde debería ser [{|Self|<uAction>}]

por eso cuando haces ::oWnd:Minimize() los "::" son traducidos a "Self" que vendria a ser el boton pero como el codeblock creado en el comando no lo recibe entonces "Self" sera NIL de alli el error Error BASE/1004 Class: 'NIL' has no exported method: OWND
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Minimizar ventana

Post by karinha »

Code: Select all

#include "fivewin.ch"
#include "xbrowse.ch"
#include "metropnl.ch"

static oMetro, oTools
static nClrBack   := CLR_GREEN

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

function Main( cParam )

   local oWnd, oBar, oMetro, oBrush
   local cTitle := "Start"

   SET DATE ITALIAN
   SET CENTURY ON

   DEFINE WINDOW oWnd TITLE cTitle STYLE nOr( WS_POPUP, WS_MAXIMIZE );
      COLOR CLR_WHITE, CLR_GREEN

   oMetro   := MakeMetroPanel( oWnd )

   DEFINE BRUSH oBrush FILE '..\bitmaps\hires\earth.bmp' RESIZE
   oMetro:SetBrush( oBrush )
   oBrush:End()

   oMetro:bRClicked := { |r,c,f,o| msginfo( 'HWND' + NUMTOHEX( oWnd:hWnd, 8 ) ) }

   ACTIVATE WINDOW oWnd MAXIMIZED ON INIT oMetro:Show()

return nil

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

static function MakeMetroPanel( oWnd )

   local oMetro, oBtn

   DEFINE METROPANEL oMetro OF oWnd TITLE "Start" ;
      COLOR CLR_WHITE, CLR_GREEN ;
      ON CLICK oWnd:End()

   oMetro:lDesignMode := .t.

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   CLR_HBLUE,CLR_WHITE ;
      CAPTION   "Metro" ;
        ALIGN   "MIDDLECENTER" ;
       BITMAP   "..\bitmaps\fivetech3.bmp" ;
     BMPALIGN   "BOTTOMLEFT" ;
         SIZE   50, 50 ;
     BODYTEXT   "FiveWin Power" ;
    TEXTALIGN   "BOTTOMRIGHT" ;
   BACKGROUND   "..\bitmaps\fiveback.bmp" ;
        LARGE                             ;
   ACTION oMetro:Minimize()  // aca minimiza

   oBtn:nClrCaption := CLR_HRED

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   CLR_WHITE,RGB(  86, 177,  14 ) ;
      CAPTION   "Tile Components" ;
        ALIGN   "TOPRIGHT" ;
       BITMAP   "..\bitmaps\metro\contact.bmp" ;
     BMPALIGN   "BOTTOMRIGHT" ;
         SIZE   50, 50 ;
     BODYTEXT   "Caption;BodyText;Bitmap;BackGround" ;
    TEXTALIGN   "MIDDLELEFT" ;
        LARGE

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   RGB(  15,  15,  15 ),RGB( 213, 177,   1 ) ;
      CAPTION   "Align Component" ;
        ALIGN   "TOPRIGHT" ;
     BODYTEXT   "Left-Center-Right;Top-Mid-Bottom" ;
    TEXTALIGN   "BOTTOMCENTER" ;
        LARGE

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   RGB(  15,  15,  15 ),RGB( 219, 239, 107 ) ;
      CAPTION   "Image Types" ;
        ALIGN   "TOPRIGHT" ;
       BITMAP   "..\bitmaps\AlphaBmp\explorer.bmp" ;
     BMPALIGN   "BOTTOMLEFT" ;
         SIZE   50, 50 ;
     BODYTEXT   "Bmp, Jpg;Ico;Png, ....any" ;
    TEXTALIGN   "BOTTOMRIGHT" ;
        LARGE

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   CLR_WHITE,RGB(  86, 177,  14 ) ;
      CAPTION   "Image Size" ;
        ALIGN   "TOPRIGHT" ;
       BITMAP   "..\bitmaps\olga1.jpg" ;
     BMPALIGN   "BOTTOMLEFT" ;
         SIZE   50, 50 ;
     BODYTEXT   "Tile Image AutoReszed;Bitmap to Specify" ;
    TEXTALIGN   "MIDDLERIGHT" ;
        LARGE

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   CLR_WHITE,RGB(   2,  70, 133 ) ;
      CAPTION   "Design" ;
        ALIGN   "TOPCENTER" ;
       BITMAP   "..\bitmaps\metro\utilities.bmp" ;
     BMPALIGN   "BOTTOMLEFT" ;
         SIZE   50, 50 ;
     BODYTEXT   "Right Click;to Design;All Components" ;
    TEXTALIGN   "BOTTOMRIGHT" ;
        LARGE

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   RGB( 255, 255, 128 ),RGB( 202,   7, 218 ) ;
      CAPTION   "Re-Arrange" ;
        ALIGN   "TOPCENTER" ;
     BODYTEXT   "By Just;Drag && Drop" ;
    TEXTALIGN   "MIDDLECENTER"
   oBtn:nClrCaption := CLR_WHITE

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   RGB(  15,  15,  15 ),RGB( 213, 177,   1 ) ;
      CAPTION   "Generate Code" ;
        ALIGN   "TOPRIGHT" ;
     BODYTEXT   "Right Click;Generate Code;Tile or Metro" ;
    TEXTALIGN   "MIDDLELEFT" ;
        LARGE

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   RGB(  15,  15,  15 ),RGB( 255, 128,   0 ) ;
      CAPTION   "Scroll" ;
        ALIGN   "TOPCENTER" ;
     BODYTEXT   "Horizontally;by MouseWheel" ;
    TEXTALIGN   "BOTTOMCENTER"

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   CLR_WHITE,RGB(   2, 174, 224 ) ;
      CAPTION   "Sub Menu" ;
        ALIGN   "TOPLEFT" ;
       BITMAP   "..\bitmaps\metro\files.bmp" ;
     BMPALIGN   "BOTTOMLEFT" ;
         SIZE   48, 48 ;
     BODYTEXT   "Click to View;Directory" ;
    TEXTALIGN   "MIDDLERIGHT" ;
        LARGE    ;
         MENU   MetroFiles()

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   CLR_WHITE,RGB(   2, 174, 224 ) ;
      CAPTION   "Folders" ;
        ALIGN   "TOPRIGHT" ;
       BITMAP   "..\bitmaps\AlphaBmp\folder.bmp" ;
     BMPALIGN   "BOTTOMLEFT" ;
         SIZE   64, 64 ;
     BODYTEXT   "Rearrange;Tiles by;Drag && Drop" ;
    TEXTALIGN   "BOTTOMRIGHT" ;
        LARGE    ;
       ACTION   {|o| MsgInfo( o:cCaption ) }

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   CLR_WHITE,RGB( 234, 112,  39 ) ;
      CAPTION   "Pictures" ;
        ALIGN   "TOPRIGHT" ;
       BITMAP   "..\bitmaps\metro\graphics.bmp" ;
     BMPALIGN   "BOTTOMLEFT" ;
         SIZE   48, 48 ;
   BACKGROUND   "..\bitmaps\olga1.jpg" ;
         MENU   ImageFiles()

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   CLR_WHITE,RGB(   2,  70, 133 ) ;
      CAPTION   "Internet" ;
        ALIGN   "TOPRIGHT" ;
       BITMAP   "..\bitmaps\metro\internet.bmp" ;
     BMPALIGN   "BOTTOMLEFT" ;
         SIZE   48, 48 ;
     BODYTEXT   "Favourites;Forums" ;
    TEXTALIGN   "MIDDLERIGHT" ;
   BACKGROUND   "..\bitmaps\hires\earth.bmp" ;
        LARGE

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   CLR_WHITE,RGB(  86, 177,  14 ) ;
      CAPTION   "Calculator" ;
        ALIGN   "TOPRIGHT" ;
        GROUP   2 ;
       BITMAP   "..\bitmaps\metro\calculator.bmp" ;
     BMPALIGN   "BOTTOMLEFT" ;
         SIZE   48, 48 ;
       ACTION   WinExec( "calc" )

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   CLR_WHITE,RGB(   2, 174, 224 ) ;
      CAPTION   "Reports" ;
        ALIGN   "TOPRIGHT" ;
        GROUP   2 ;
       BITMAP   "..\bitmaps\metro\print.bmp" ;
     BMPALIGN   "BOTTOMLEFT" ;
         SIZE   48, 48

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   CLR_WHITE,RGB(  24, 152,  78 ) ;
      CAPTION   "Utilities" ;
        ALIGN   "TOPRIGHT" ;
        GROUP   2 ;
       BITMAP   "..\bitmaps\metro\utilities.bmp" ;
     BMPALIGN   "BOTTOMLEFT" ;
         SIZE   48, 48 ;
     BODYTEXT   "RightClick;to Design" ;
    TEXTALIGN   "BOTTOMRIGHT"

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   CLR_WHITE,RGB( 234, 112,  39 ) ;
      CAPTION   "Customers" ;
        ALIGN   "TOPRIGHT" ;
        GROUP   2 ;
       BITMAP   "..\bitmaps\metro\users.bmp" ;
     BMPALIGN   "BOTTOMLEFT" ;
         SIZE   48, 48 ;
     BODYTEXT   "Sales;Promotions" ;
    TEXTALIGN   "MIDDLERIGHT" ;
        LARGE

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   CLR_WHITE,RGB( 181,  31,  60 ) ;
      CAPTION   "Stock" ;
        ALIGN   "TOPLEFT" ;
        GROUP   2 ;
       BITMAP   "..\bitmaps\metro\stock.bmp" ;
     BMPALIGN   "BOTTOMRIGHT" ;
         SIZE   48, 48 ;
     BODYTEXT   "Quotes;Trends" ;
    TEXTALIGN   "BOTTOMLEFT" ;
        LARGE

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   CLR_BLACK,RGB( 213, 177,   1 ) ;
      CAPTION   "Contacts" ;
        ALIGN   "TOPRIGHT" ;
        GROUP   2 ;
       BITMAP   "..\bitmaps\metro\contact.bmp" ;
     BMPALIGN   "BOTTOMLEFT" ;
         SIZE   48, 48 ;
     BODYTEXT   "Family;Friends;Business" ;
    TEXTALIGN   "BOTTOMRIGHT" ;
        LARGE

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   CLR_WHITE,RGB(   2,  70, 133 ) ;
      CAPTION   "Movies" ;
        ALIGN   "TOPRIGHT" ;
        GROUP   2 ;
       BITMAP   "..\bitmaps\alphabmp\ichat.bmp" ;
     BMPALIGN   "MIDDLECENTER" ;
         SIZE   80, 80 ;
     BODYTEXT   "3D;HD;DVD" ;
    TEXTALIGN   "BOTTOMLEFT" ;
        LARGE

   DEFINE METROBUTTON oBtn OF oMetro ;
        COLOR   CLR_WHITE,RGB(  86, 177,  14 ) ;
      CAPTION   "Exit" ;
        ALIGN   "TOPRIGHT" ;
        GROUP   2 ;
       BITMAP   "..\bitmaps\metro\exit.bmp" ;
     BMPALIGN   "BOTTOMLEFT" ;
         SIZE   48, 48 ;
       ACTION   If( MsgYesNo( "Want to exit ?" ), oWnd:End(),)


return oMetro

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

static function MetroFiles( oWnd )

   local oMetro, n
   local aDir     := Directory( "*.*" )

   DEFINE METROPANEL oMetro OF oWnd TITLE "Files" ;
      COLOR CLR_WHITE, nClrBack

   for n := 1 to Min( Len( aDir ), 20 )
      oMetro:AddButton( .t., nil, aDir[ n ][ 1 ],nil,nil,nil,"..\metro\files.bmp" )
   next

return oMetro

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

static function ImageFiles( oWnd )

   local oMetro, aFiles, aFile

   aFiles   := Directory( "..\bitmaps\AlphaBmp\*.bmp" )

   DEFINE METROPANEL oMetro OF oWnd TITLE "Bitmaps" ;
      COLOR CLR_WHITE, nClrBack

   for each aFile in aFiles
      DEFINE METROBUTTON OF oMetro ;
          CAPTION  aFile[ 1 ] ALIGN 'BOTTOMCENTER' ;
           BITMAP  "..\bitmaps\AlphaBmp\" + aFile[ 1 ] ;
         BMPALIGN  "TOPCENTER"
   next



return oMetro

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

static function ExitTo( cExe )

   if File( cExe )
      WinExec( cExe )
      WndMain():End()
   else
      MsgInfo( cExe + " not found" )
   endif

return nil

//----------------------------------------------------------------------------//
João Santos - São Paulo - Brasil
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Minimizar ventana

Post by MarioG »

MarioG wrote:Lorenzo;
Debes declarar una variable, que puede ser local: oSelf:= self
luego declaras asi:
action oSelf:oWnd:Minimize()
Sabia que debía escribir hasta ahí :)
Gracias Daniel!
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
Loren
Posts: 458
Joined: Fri Feb 16, 2007 10:29 am
Location: Cadiz - España

Re: Minimizar ventana

Post by Loren »

Gracias MarioG funcionó perfecto!!
Gracias Daniel por tu explicación. Eres un verdadero maestro!!

Un saludo a todos
LORENZO
Post Reply