FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Poner BMP en Ventana principal (RESUELTO)
Posts: 464
Joined: Tue Mar 21, 2006 07:30 PM
Poner BMP en Ventana principal (RESUELTO)
Posted: Wed Feb 01, 2012 04:16 PM

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?

Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO
Posts: 1078
Joined: Thu Sep 27, 2007 03:47 PM
Re: Poner BMP en Ventana principal
Posted: Wed Feb 01, 2012 04:38 PM

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
Posts: 105
Joined: Thu Feb 26, 2009 04:08 PM
Re: Poner BMP en Ventana principal
Posted: Wed Feb 01, 2012 04:39 PM

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

Posts: 464
Joined: Tue Mar 21, 2006 07:30 PM
Re: Poner BMP en Ventana principal
Posted: Wed Feb 01, 2012 05:20 PM
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 (fw): Select all Collapse
      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 (fw): Select all Collapse
   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
Posts: 105
Joined: Thu Feb 26, 2009 04:08 PM
Re: Poner BMP en Ventana principal
Posted: Wed Feb 01, 2012 05:29 PM

Como le haces para cargar la imagen en "Ponefondo()"

Posts: 464
Joined: Tue Mar 21, 2006 07:30 PM
Re: Poner BMP en Ventana principal
Posted: Wed Feb 01, 2012 06:06 PM

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
Posts: 105
Joined: Thu Feb 26, 2009 04:08 PM
Re: Poner BMP en Ventana principal
Posted: Thu Feb 02, 2012 04:28 PM

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
Posts: 464
Joined: Tue Mar 21, 2006 07:30 PM
Re: Poner BMP en Ventana principal
Posted: Thu Feb 02, 2012 04:51 PM
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
Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Poner BMP en Ventana principal
Posted: Thu Feb 02, 2012 05:27 PM
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.



Fwxh-MySql-TMySql
Posts: 464
Joined: Tue Mar 21, 2006 07:30 PM
Re: Poner BMP en Ventana principal
Posted: Thu Feb 02, 2012 05:43 PM

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.

Un saludo
Pedro
gahetesoft@gmail.com
FWH12.06 BCC582, Xverce CW, Pelles C 6.00.4,PSPAD 4.54
y ahora con ADO

Continue the discussion