Poner BMP en Ventana principal (RESUELTO)

Post Reply
User avatar
Pedro
Posts: 457
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Poner BMP en Ventana principal (RESUELTO)

Post 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?
Last edited by Pedro on Thu Feb 02, 2012 5:44 pm, edited 2 times in total.
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
User avatar
ruben Dario
Posts: 986
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Poner BMP en Ventana principal

Post 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.
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
JavierVital
Posts: 105
Joined: Thu Feb 26, 2009 4:08 pm
Contact:

Re: Poner BMP en Ventana principal

Post 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
User avatar
Pedro
Posts: 457
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Poner BMP en Ventana principal

Post 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

      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

   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)
 
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
User avatar
JavierVital
Posts: 105
Joined: Thu Feb 26, 2009 4:08 pm
Contact:

Re: Poner BMP en Ventana principal

Post by JavierVital »

Como le haces para cargar la imagen en "Ponefondo()"
User avatar
Pedro
Posts: 457
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Poner BMP en Ventana principal

Post by Pedro »

oBmp:LoadBmp(cBmpFile)
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
User avatar
JavierVital
Posts: 105
Joined: Thu Feb 26, 2009 4:08 pm
Contact:

Re: Poner BMP en Ventana principal

Post 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
User avatar
Pedro
Posts: 457
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Poner BMP en Ventana principal

Post 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.
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Poner BMP en Ventana principal

Post 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
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
User avatar
Pedro
Posts: 457
Joined: Tue Mar 21, 2006 7:30 pm
Location: Córdoba (España)

Re: Poner BMP en Ventana principal

Post 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 _ de área de trabajo se pone su logotipo.
Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
Post Reply