Page 1 of 1

Poner BMP en Ventana principal (RESUELTO)

PostPosted: Wed Feb 01, 2012 4:16 pm
by Pedro
Hola a todos

Hay alguna forma de poner una imagen, bmp o jpg, en la ventana principal después de haberla creado?
Me explico
Creo la ventana principal, después elijo un área de trabajo y, en esa elección tengo que buscar un fichero que apunta a una imagen, la cual será la que ponga en la ventana principal, algo así como una especie de logotipo de la empresa sobre la que se trabaja.

Lo curioso es que de la forma que lo he intentado, sólo me aparece la imagen después de haber entrado y salido de alguna opción del menú de la ventana, antes no sale.

Alguna idea de como hacerlo?

Re: Poner BMP en Ventana principal

PostPosted: Wed Feb 01, 2012 4:38 pm
by ruben Dario
Pedro

Te refieres cambiar el fondo del escritorio de windows y que coloque el fond0 definido ejemplo como el de la empresa,
si se puede atrvez de la red, lo he hecho con windows 2003 server y estaciones XP.

Esto se hace en el servidor


No se si eso es lo que quieres.

Re: Poner BMP en Ventana principal

PostPosted: Wed Feb 01, 2012 4:39 pm
by JavierVital
Pedro yo lo tengo asi :

DEFINE BitMap oBmp RESOURCE "LOGO_EMP"

DEFINE WINDOW oWin Title "Sistema Empresarial" Icon "AAsesores" NOICONIZE //Menu MenuG()
oWin:bPainted := {|hDC| ABmpTiled(hDC,oWin,oBmp)}




FUNCTION ABmpTiled( hDC, oWnd, oBmp )
local nWidth := oWnd:nWidth(), nHeight := oWnd:nHeight()
local nBmpWidth := oBmp:nWidth(), nBmpHeight := oBmp:nHeight()
local nCol := (nWidth-nBmpWidth)-20, nRow := (nHeight-nBmpHeight)-90
IF oBmp:hBitMap == 0
RETURN nil
ENDIF
PalBmpDraw( hDC, nRow, nCol, oBmp:hBitMap )
RETURN nil

Re: Poner BMP en Ventana principal

PostPosted: Wed Feb 01, 2012 5:20 pm
by Pedro
Hola Ruben

No me refiero al cambio del escritorio de windows, si no a la imagen que ponemos como fondo de nuestra aplicación.

Javier, por lo visto en tu código, oWin:bPainted := {|hDC| ABmpTiled(hDC,oWin,oBmp)} esto es antes de hacer activar la ventana y aparte de eso tu defines la imagen antes. En mi caso no sé cual es la imagen elegida para poner como logotipo de la empresa. Tengo que esperar a la activación de la ventana, y en el evento ON INI es donde voy a saber que imagen BMP voy a tener que poner en la ventana.
Más o menos así :
Code: Select all  Expand view
     ACTIVATE WINDOW oWMain MAXIMIZED ;
               ON INIT (EscogeArea(),;       // aquí escogemos el área de trabajo y es donde averiguamos que imagen es la deseada por el usuario
                            PonFondo(),;          // se supone que aquí deberíamos poner el nuevo fondo a la ventana principal
                            OtrasOpciones()) ; // bueno resto de cosas por hacer........
               ON PAINT(DrawBitmap( hDC, oBmp:hBitmap, ;
                             ( oWMain:nHeight() / 2 ) - ( oBmp:nHeight() / 2 ), ;
                             ( oWMain:nWidth() / 2 ) - ( oBmp:nWidth() / 2 ),0,0 ));
              VALID MsgYesNo( "Finalizar sesion?","Elija" )


El tema es, ¿qué debo enviar a la función para que me pinte la nueva imagen?
Ahora tengo este código, pero sólo me funciona después de entrar y salir de alguna opción de la barra del menú.


Code: Select all  Expand view
  DEFINE BITMAP oBmp
            DEFINE WINDOW oWMain MDI .........

            ACTIVATE WINDOW oWMain MAXIMIZED ;
                            ON INIT (EscogeArea(),PonFondo(),VerificaConfig()) ;
                            ON PAINT(DrawBitmap( hDC, oBmp:hBitmap, ;
                                          ( oWMain:nHeight() / 2 ) - ( oBmp:nHeight() / 2 ), ;
                                          ( oWMain:nWidth() / 2 ) - ( oBmp:nWidth() / 2 ),0,0 ));
                        VALID MsgYesNo( "Finalizar sesion?","Elija" )
//----------------------------------------------------------------------------//
FUNCTION PonFondo()
//----------------------------------------------------------------------------//
Local cBmpFile := Alltrim(aDatEmp[15])  //aquí traemos el path y el nombre del fichero imagen

      oBmp:LoadBmp(cBmpFile)
      oBmp:Refresh()
      oWMain:Refresh()
      Sysrefresh()
Return(nil)
 

Re: Poner BMP en Ventana principal

PostPosted: Wed Feb 01, 2012 5:29 pm
by JavierVital
Como le haces para cargar la imagen en "Ponefondo()"

Re: Poner BMP en Ventana principal

PostPosted: Wed Feb 01, 2012 6:06 pm
by Pedro
oBmp:LoadBmp(cBmpFile)

Re: Poner BMP en Ventana principal

PostPosted: Thu Feb 02, 2012 4:28 pm
by JavierVital
Perdo, ya lo cambie

oWin:bPainted := {|hDC| ABmpTiled(hDC,oWin,oBmp)} // Este lo quite

y lo puse al

ACTIVATE WINDOW oWin Maximized ON INIT PoneUsua() ON PAINT ABmpTiled(hDC,oWin,oBmp) VALID Cerrar()

y lo hace correctamente

Yo solo tengo 2 logos por 2 empresas y los selecciono asi :


IF lCorona
DEFINE BitMap oBmp RESOURCE "LOGO_EMP"
ELSE
DEFINE BitMap oBmp RESOURCE "LOGO_EMPH"
ENDIF

Re: Poner BMP en Ventana principal

PostPosted: Thu Feb 02, 2012 4:51 pm
by Pedro
Unas preguntas, Javier

¿Cuando tú activas la ventana, ya tienes el objeto BMP con su imagen? . Inténtalo sin tener la imagen

¿Qué se hace antes en la clase Windows, el Paint, o el Init ? . Esto es porque creo que en la clase se activa antes el PAINT que el INIT, por eso se pinta primero la imagen y luego hará lo que le digas en el INIT.

¿Has probado a hacer ON PAINT ABmpTiled(hDC,oWin,oBmp) sin tener todavía la imagen definida en el objeto oBmp?, ¿te funcionaría?
Esto viene a cuento de la primera pregunta

Estas preguntas son para que comprendas que el objeto imagen oBmp, se tendría que cargar después de crear la ventana principal, cuando ésta ya tiene su barra de botones y su menú. A mí me funciona lo que tengo, con la salvedad de que la imagen SOLO se activa una vez escogida alguna de las opciones del menú.

A ver si Antonio, o Daniel, o alguien podría decirme el motivo por el cual se activa la imagen de esta manera.

Re: Poner BMP en Ventana principal

PostPosted: Thu Feb 02, 2012 5:27 pm
by FranciscoA
Hola Pedro.
Veo que usas entorno MDI, por lo tanto, creo que te funcionaría así:

FUNCTION PonFondo()
//----------------------------------------------------------------------------//
Local cBmpFile := Alltrim(aDatEmp[15]) //aquí traemos el path y el nombre del fichero imagen

oBmp:LoadBmp(cBmpFile)
// oBmp:Refresh()
oWMain:oWMainClient:Refresh()
Sysrefresh()
Return(nil)

Saludos

Re: Poner BMP en Ventana principal

PostPosted: Thu Feb 02, 2012 5:43 pm
by Pedro
Muchas gracias Francisco

Funcionó a las mil maravillas, con esto puedo poner a cada área de trabajo el logotipo que elija el usuario.
Una vez escogido el área , ya sea de primera vez o si durante la ejecución del programa queremos cambiar de área de trabajo se pone su logotipo.