FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Minimizar ventana
Posts: 479
Joined: Fri Feb 16, 2007 10:29 AM
Minimizar ventana
Posted: Thu Oct 16, 2014 12:47 PM
Buenas compa帽eros:

Tengo este c贸digo (Simplificado)
Code (fw): Select all Collapse
#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 ::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
Posts: 1380
Joined: Fri Oct 14, 2005 01:28 PM
Re: Minimizar ventana
Posted: Thu Oct 16, 2014 01: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
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Minimizar ventana
Posted: Thu Oct 16, 2014 01:58 PM
Saludos

MarioG wrote:Debes declarar una variable, que puede ser local: oSelf:= self
luego declaras asi:
action oSelf: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 (fw): Select all Collapse
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 (fw): Select all Collapse
Eval( ::bAction, Self )


al momento que defines
Code (fw): Select all Collapse
#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 ::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
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Minimizar ventana
Posted: Thu Oct 16, 2014 02:11 PM
Code (fw): Select all Collapse
#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
Posts: 1380
Joined: Fri Oct 14, 2005 01:28 PM
Re: Minimizar ventana
Posted: Thu Oct 16, 2014 06:53 PM
MarioG wrote:Lorenzo;
Debes declarar una variable, que puede ser local: oSelf:= self
luego declaras asi:
action oSelf:Minimize()


Sabia que deb铆a escribir hasta ah铆 :-)
Gracias Daniel!
Resistencia - "Ciudad de las Esculturas"

Chaco - Argentina
Posts: 479
Joined: Fri Feb 16, 2007 10:29 AM
Re: Minimizar ventana
Posted: Fri Oct 17, 2014 07:49 AM

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

Un saludo a todos
LORENZO

Continue the discussion