FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ventana MDI con Brush STRETCH
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Ventana MDI con Brush STRETCH
Posted: Wed Mar 23, 2022 01:25 PM
Estimados:
Tengo una ventana MDI con un Brush de fondo que lo defino STRETCH
La ventana, en principio no contiene nada, llama a un dialogo para loguearse, y si el logue es existoso, arma una barra RIBBONBAR con los permisos que tiene el usuario
En la primer muestra, con el dialogo de logueo, la imagen de fondo me la muestra completa y ajustada a la ventana.
Al armar la Ribbonbar y actualizar la ventana, la imagen queda cortada, perdiendo lo que ocupa la Ribbonbar en la parte inferior.
Si hago oWnd:Restore() y luego oWnd:Maximize, la imagen se vuelve a ajustar, pero hace un parpadeo que quiero evitar.
Como puedo hacer para solucionarlo?
Dejo un ejemplo funcional
Code (fw): Select all Collapse
#include "FiveWin.ch"
#include "ribbon.ch"

STATIC oWnd, oBar, oBar2
FUNCTION Main()
LOCAL  oBmp, lIngreso
    
    DEFINE BRUSH oBmp  FILE "..\BITMAPS\OLGA1.JPG" STRETCH
    DEFINE WINDOW oWnd ;
       TITLE "Prueba MDI con Brush "; 
       MDI COLOR CLR_RED,CLR_WHITE;
       MENU HazMenu() ;
       BRUSH oBmp
    
    RELEASE oApp:oBmp

    ACTIVATE WINDOW oWnd MAXIMIZED ON INIT (lIngreso := Ingreso(),;
                                                  IF(lIngreso,ArmaBarra(),oWnd:End()))
RETURN NIL

// --------------------------------------------------------------------//
// ------------- Funcion men£ de la pantalla principal ----------------//
// --------------------------------------------------------------------//
STATIC FUNCTION HazMenu()
LOCAL oMenu
MENU oMenu 2010
ENDMENU
RETURN oMenu

// --------------------------------------------------------------------//
// ------------- Funcion que ejecuta las funciones del menu -----------//
// --------------------------------------------------------------------//


********************************************
** Validacion de Usuarios
STATIC FUNCTION Ingreso()
LOCAL retorno := .f., aVar := ARRAY(2), oDlg, oBot := ARRAY(2),oGet := ARRAY(2),;
      oQry, oBit
aVar[1] :=SPACE(15)
aVar[2] :=SPACE(15)


DEFINE DIALOG oDlg TITLE "Acceso al Sistema" OF oWnd FROM 05,20 TO 13,60 
   oDlg:lHelpIcon := .f.   
   @ 07,05 SAY "Id:"               OF oDlg PIXEL SIZE 45,12 RIGHT
   @ 22,05 SAY "Password:"         OF oDlg PIXEL SIZE 45,12 RIGHT
   @ 05,60 GET oGet[1] VAR aVar[1] OF oDlg PIXEL
   @ 20,60 GET oGet[2] VAR aVar[2] OF oDlg PIXEL
   oGet[2]:lPassword := .t.
   @ 35,20 BUTTON oBot[1] PROMPT "&Acceder"  ACTION (retorno := .t.,oDlg:end()) SIZE 30,12 PIXEL
   @ 35,65 BUTTON oBot[2] PROMPT "&Salir"    ACTION (retorno := .f.,oDlg:end()) SIZE 30,12 PIXEL
ACTIVATE DIALOG oDlg CENTER
RETURN retorno

*******************************************************
** Armar la barra de botones
STATIC FUNCTION ArmaBarra()
LOCAL oGr := ARRAY(1), oBot
DEFINE RIBBONBAR oBar WINDOW oWnd PROMPT "Salir" HEIGHT 120 TOPMARGIN 25 
    
oBar2 = TRBtn():New( 4, 0, 60, 20, "..\bitmaps\rbnmenu.bmp", { || MsgInfo(1) }, oBar,;
                         ,,,,,, .T., .T.,,,,,,/* "POPUP"*/, ,,,,,,,,,,,,, , nRGB( 125, 172, 215 ),;
                         nRGB( 65, 106, 189 ) ) 
ADD GROUP oGr[1] RIBBON oBar TO OPTION 1 PROMPT "Salir" width 330 
@ 2,05 ADD BUTTON oBot PROMPT "Salir"  GROUP oGr[1] BITMAP "SALIR" ;   
    ROUND SIZE 80,65  TOOLTIP "Salir del Sistema" ACTION oWnd:End()
@ 2,95 ADD BUTTON oBot PROMPT "Calculadora"  GROUP oGr[1]  BITMAP "CALCU" ;   
    ROUND SIZE 80,65  TOOLTIP "Calculadora" ACTION WinExec("calc.exe")    

RETURN .t.
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Ventana MDI con Brush STRETCH
Posted: Wed Mar 23, 2022 02:32 PM
Intenta asi:

Code (fw): Select all Collapse
#include "FiveWin.ch"
#include "ribbon.ch"

STATIC oWnd, oBar, oBar2
FUNCTION Main()

   LOCAL oBmp, lIngreso, cTitle, oBrush

   cTitle := "Prueba MDI con Brush y STRETCH"

   // DEFINE BRUSH oBmp   FILENAME ".\OLGA1.JPG" STRETCH
   // DEFINE BRUSH oBrush FILENAME ".\OLGA1.JPG" STRETCH
   DEFINE BITMAP oBmp     FILENAME ".\OFFICE.BMP" STRECH

   DEFINE WINDOW oWnd TITLE "Prueba MDI con Brush " MDI ;
      COLOR CLR_RED, CLR_WHITE                          ;
      MENU HazMenu() // BRUSH oBmp

   ACTIVATE WINDOW oWnd MAXIMIZED ON INIT ( lIngreso := Ingreso(), ;
      IF( lIngreso, ArmaBarra(), oWnd:End() ) )                    ;
      ON PAINT DrawBitmap( hDC, oBmp:hBitmap, 0, 0, oWnd:nWidth, oWnd:nHeight - 80 )

RETURN NIL
// ------------- Funcion men£ de la pantalla principal ----------------//
STATIC FUNCTION HazMenu()

   LOCAL oMenu

   MENU oMenu 2010

   ENDMENU

RETURN( oMenu )
// ------------- Funcion que ejecuta las funciones del menu -----------//
// * Validacion de Usuarios
STATIC FUNCTION Ingreso()

   LOCAL retorno := .F., aVar := Array( 2 ), oDlg, oBot := Array( 2 ),       ;
         oGet := Array( 2 ),   oQry, oBit

   aVar[ 1 ] := Space( 15 )
   aVar[ 2 ] := Space( 15 )


   DEFINE DIALOG oDlg TITLE "Acceso al Sistema" OF oWnd FROM 05, 20 TO 13, 60

   oDlg:lHelpIcon := .F.

   @ 07, 05 SAY "Id:"               OF oDlg PIXEL SIZE 45, 12 RIGHT

   @ 22, 05 SAY "Password:"         OF oDlg PIXEL SIZE 45, 12 RIGHT

   @ 05, 60 GET oGet[ 1 ] VAR aVar[ 1 ] OF oDlg PIXEL

   @ 20, 60 GET oGet[ 2 ] VAR aVar[ 2 ] OF oDlg PIXEL

   oGet[ 2 ]:lPassword := .T.

   @ 35, 20 BUTTON oBot[ 1 ] PROMPT "&Acceder"  ACTION ( retorno := .T., oDlg:end() ) SIZE 30, 12 PIXEL

   @ 35, 65 BUTTON oBot[ 2 ] PROMPT "&Salir"    ACTION ( retorno := .F., oDlg:end() ) SIZE 30, 12 PIXEL

   ACTIVATE DIALOG oDlg CENTER

RETURN( Retorno )
// * Armar la barra de botones
STATIC FUNCTION ArmaBarra()

   LOCAL oGr := Array( 1 ), oBot

   DEFINE RIBBONBAR oBar WINDOW oWnd PROMPT "Salir" HEIGHT 120 TOPMARGIN 25

   oBar2 = TRBtn():New( 4, 0, 60, 20, "..\bitmaps\rbnmenu.bmp", {|| MsgInfo( 1 ) }, oBar, ;
      ,,,,,, .T., .T.,,,,,, /* "POPUP"*/, ,,,,,,,,,,,,, , nRGB( 125, 172, 215 ),;
   nRGB( 65, 106, 189 ) )

   ADD GROUP oGr[ 1 ] RIBBON oBar TO OPTION 1 PROMPT "Salir" width 330

   @ 2, 05 ADD BUTTON oBot PROMPT "Salir"  GROUP oGr[ 1 ] BITMAP "SALIR" ;
      ROUND SIZE 80, 65  TOOLTIP "Salir del Sistema" ACTION oWnd:End()

   @ 2, 95 ADD BUTTON oBot PROMPT "Calculadora"  GROUP oGr[ 1 ]  BITMAP "CALCU" ;
      ROUND SIZE 80, 65  TOOLTIP "Calculadora" ACTION WinExec( "calc.exe" )

RETURN( .T. )

// FIN / END


Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Ventana MDI con Brush STRETCH
Posted: Wed Mar 23, 2022 07:19 PM

Hola Jao, gracias por responder. Pero no, no me toma un .jpg y no me lo ajusta a la ventana.
Gracias igual!

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Ventana MDI con Brush STRETCH
Posted: Wed Mar 23, 2022 09:50 PM
cmsoft wrote:Hola Jao, gracias por responder. Pero no, no me toma un .jpg y no me lo ajusta a la ventana.
Gracias igual!


Con .BMP me parece bién. Mira:

Download completo:

https://mega.nz/file/Ydsh2TrK#YnfBZWO6xeufYG5u-Ip1L_hxYnl7sfhYWv8D3QTcYQo

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Ventana MDI con Brush STRETCH
Posted: Wed Mar 23, 2022 11:01 PM

Jao:
Muchas gracias por tomarte el tiempo para ver lo planteado.
Tu ejemplo, en la parte inferior de la primer pantalla, la imagen no cubre toda la pantalla, al menos en mi pc
Tambien el bmp se pixela mucho cuando vas achicando la ventana

Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Ventana MDI con Brush STRETCH
Posted: Thu Mar 24, 2022 10:29 AM

Que raro. Aquí funciona bien. ¿Qué resolución de pantalla usas?

Muestre una imagen por favor.

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Ventana MDI con Brush STRETCH
Posted: Thu Mar 24, 2022 12:32 PM


Fijate que en la parte baja de la imagen, en una tiene un margen de sobra, en la otra le falta un tramo
1366 x 768
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: Ventana MDI con Brush STRETCH
Posted: Thu Mar 24, 2022 01:13 PM
Intente ahora.

Mira se comprende el que quiero decir: mi portunhol, es terrible. jajajaja.

Code (fw): Select all Collapse
// C:\CMSOFT\CMSOFT5.PRG

#include "FiveWin.ch"
#include "Ribbon.ch"

#Define CLR_MSPURPLE   nRGB( 0,   120, 215 ) //-> Purpura.
#Define CLR_MSRED      nRGB( 232,  17,  35 )
#Define CLR_MSGRAY     nRGB( 229, 229, 229 )
#Define CLR_LGRAY      nRGB( 230, 230, 230 )

STATIC oWnd, oBar, oBar2

FUNCTION Main()

   LOCAL oBmp, lIngreso, cTitle, oBrush
   LOCAL nResHoriz, nResVert

   cTitle := "Prueba MDI con Brush y STRETCH"

   DEFINE BITMAP oBmp   FILENAME ".\OFFICE.BMP" STRECH ADJUST
   DEFINE BRUSH  oBrush COLOR nRGB( 250, 213, 174 )    ADJUST

   DEFINE WINDOW oWnd TITLE cTitle                                           ;
      MENU HazMenu() COLOR CLR_CYAN, CLR_MSPURPLE MENUINFO 3 MDI

   oWnd:SetBrush( oBrush )

   nResHoriz := oWnd:nHorzRes() // retorna a resolucao horizontal
   nResVert  := oWnd:nVertRes() // retorna a resolucao vertical

   IF nResHoriz = 1366 .AND. nResVert = 768

      ACTIVATE WINDOW oWnd MAXIMIZED ON INIT ( lIngreso := Ingreso(),           ;
         IF( lIngreso, ArmaBarra(), oWnd:End() ) )                              ;
         ON PAINT DrawBitmap( hDC, oBmp:hBitmap, 0, 0, oWnd:nWidth, oWnd:nHeight - 30 )

   ELSEIF nResHoriz = 1360 .AND. nResVert = 768

      ACTIVATE WINDOW oWnd MAXIMIZED ON INIT ( lIngreso := Ingreso(),           ;
         IF( lIngreso, ArmaBarra(), oWnd:End() ) )                              ;
         ON PAINT DrawBitmap( hDC, oBmp:hBitmap, 0, 0, oWnd:nWidth, oWnd:nHeight - 80 )

   ELSEIF nResHoriz = 1280 .AND. nResVert = 1024

      // Continue

   ELSEIF nResHoriz = 1280 .AND. nResVert = 768

      // Continue

   ELSEIF nResHoriz = 1280 .AND. nResVert = 720

      // Continue

   ELSEIF nResHoriz = 1024 .AND. nResVert = 768  // Minha Maquina

      // Continue

   ELSE

      // O HAGA EN UNA FUNCTION, ok?

   ENDIF

   oBrush:End()

RETURN NIL
// ------------- Funcion men£ de la pantalla principal ----------------//
STATIC FUNCTION HazMenu()

   LOCAL oMenu

   MENU oMenu 2010

   ENDMENU

RETURN( oMenu )
// ------------- Funcion que ejecuta las funciones del menu -----------//
// * Validacion de Usuarios
STATIC FUNCTION Ingreso()

   LOCAL retorno := .F., aVar := Array( 2 ), oDlg, oBot := Array( 2 ),       ;
         oGet := Array( 2 ),   oQry, oBit

   aVar[ 1 ] := Space( 15 )
   aVar[ 2 ] := Space( 15 )


   DEFINE DIALOG oDlg TITLE "Acceso al Sistema" OF oWnd FROM 05, 20 TO 13, 60

   oDlg:lHelpIcon := .F.

   @ 07, 05 SAY "Id:"               OF oDlg PIXEL SIZE 45, 12 RIGHT

   @ 22, 05 SAY "Password:"         OF oDlg PIXEL SIZE 45, 12 RIGHT

   @ 05, 60 GET oGet[ 1 ] VAR aVar[ 1 ] OF oDlg PIXEL

   @ 20, 60 GET oGet[ 2 ] VAR aVar[ 2 ] OF oDlg PIXEL

   oGet[ 2 ]:lPassword := .T.

   @ 35, 20 BUTTON oBot[ 1 ] PROMPT "&Acceder"  ACTION ( retorno := .T., oDlg:end() ) SIZE 30, 12 PIXEL

   @ 35, 65 BUTTON oBot[ 2 ] PROMPT "&Salir"    ACTION ( retorno := .F., oDlg:end() ) SIZE 30, 12 PIXEL

   ACTIVATE DIALOG oDlg CENTER

RETURN( Retorno )
// * Armar la barra de botones
STATIC FUNCTION ArmaBarra()

   LOCAL oGr := Array( 1 ), oBot

   DEFINE RIBBONBAR oBar WINDOW oWnd PROMPT "Salir" HEIGHT 120 TOPMARGIN 25

   oBar2 = TRBtn():New( 4, 0, 60, 20, "..\bitmaps\rbnmenu.bmp", {|| MsgInfo( 1 ) }, oBar, ;
      ,,,,,, .T., .T.,,,,,, /* "POPUP"*/, ,,,,,,,,,,,,, , nRGB( 125, 172, 215 ),;
   nRGB( 65, 106, 189 ) )

   ADD GROUP oGr[ 1 ] RIBBON oBar TO OPTION 1 PROMPT "Salir" width 330

   @ 2, 05 ADD BUTTON oBot PROMPT "Salir"  GROUP oGr[ 1 ] BITMAP "SALIR" ;
      ROUND SIZE 80, 65  TOOLTIP "Salir del Sistema" ACTION oWnd:End()

   @ 2, 95 ADD BUTTON oBot PROMPT "Calculadora"  GROUP oGr[ 1 ]  BITMAP "CALCU" ;
      ROUND SIZE 80, 65  TOOLTIP "Calculadora" ACTION WinExec( "calc.exe" )

RETURN( .T. )

// FIN / END


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Ventana MDI con Brush STRETCH
Posted: Thu Mar 24, 2022 09:42 PM

Jao:
Muchas gracias por toda la info.. La estudio y comento.

Posts: 10733
Joined: Sun Nov 19, 2006 05:22 AM
Re: Ventana MDI con Brush STRETCH
Posted: Fri Apr 01, 2022 03:41 PM
This is working well for me.
Code (fw): Select all Collapse
#include "fivewin.ch"
#include "ribbon.ch"

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

function Main()

   local oWnd, oBar, oBrush

   DEFINE BRUSH oBrush FILE "..\bitmaps\olga1.jpg" STRETCH

   DEFINE WINDOW oWnd MDI MENU TMenu():New() BRUSH oBrush
   ACTIVATE WINDOW oWnd ON INIT ;
      If( ValidLogin(), oBar := BuildRibbon(), oWnd:End() )

   RELEASE BRUSH oBrush

return nil

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

static function ValidLogin()

   local cUser, cPassword
   local lValid   := .f.

   EDITVARS cUser, cPassword
   lValid   := !Empty( cUser ) .and. !Empty( cPassword )

return lValid

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

function BuildRibbon()

   local oBar

   DEFINE RIBBONBAR oBar WINDOW WndMain() PROMPT "Salir" HEIGHT 120 TOPMARGIN 25
   WndMain():oWndClient:Refresh()

return oBar

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


Regards



G. N. Rao.

Hyderabad, India
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Ventana MDI con Brush STRETCH
Posted: Fri Apr 01, 2022 09:30 PM

Perfecto Mr. Rao, esa es la solucion.
Como siempre, muy agradecido de sus aportes.
Saludos

Continue the discussion