Minimizar ventana

Minimizar ventana

Postby Loren » Thu Oct 16, 2014 12:47 pm

Buenas compañeros:

Tengo este código (Simplificado)
Code: Select all  Expand view  RUN
#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
Loren
 
Posts: 479
Joined: Fri Feb 16, 2007 10:29 am
Location: Cadiz - España

Re: Minimizar ventana

Postby MarioG » Thu Oct 16, 2014 1:35 pm

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
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Minimizar ventana

Postby Daniel Garcia-Gil » Thu Oct 16, 2014 1:58 pm

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  Expand view  RUN
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  Expand view  RUN
Eval( ::bAction, Self )


al momento que defines
Code: Select all  Expand view  RUN
#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
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Minimizar ventana

Postby karinha » Thu Oct 16, 2014 2:11 pm

Code: Select all  Expand view  RUN

#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 - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7831
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Minimizar ventana

Postby MarioG » Thu Oct 16, 2014 6:53 pm

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
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Minimizar ventana

Postby Loren » Fri Oct 17, 2014 7:49 am

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

Un saludo a todos
LORENZO
Loren
 
Posts: 479
Joined: Fri Feb 16, 2007 10:29 am
Location: Cadiz - España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 54 guests