BMP para fondo del xBrowse ( para Daniel )

BMP para fondo del xBrowse ( para Daniel )

Postby jll-fwh » Sun Nov 14, 2010 5:14 pm

Hola;

Tengo un xbrowse y le añado un BMP para el fondo que quedan muy bonito los browse asi, pero tengo los siguientes inconvenientes:

1.- Este ultimo programa es entorno MDI, y cuando se redimensiona la ventana, ajusto el tamano del xBrowse al tamaño de la ventana, pero no logro ajustar el BMP del fondo ( Brush ), se queda con el mismo tamaño que antes de redimensionar la ventana, como se hace? me he liedo la clase xBrowse para ver como lo hace, pero no logro solucionarlo.

2.- Esto es mas curioso, en el xBrowse principal llamo a un dialogo que tambien contiene un xBrowse( con nombre de objeto diferente ), pues es este objeto no tengo definido ningun Brush, pues aparece pintado tambien en este xBrowse el Brush del anterior, no se supone que los Brush son asociados a un Obejto?

Para que solo me aparezca en el 1 xBrowse tengo que declararlo asi:

oGrid:cBmpAdjBrush := "Fondo.bmp"
oGrid:SetBackGround( "Fondo.bmp" )

Si solo hago, oGrid:cBmpAdjBrush := "Fondo.bmp", me aparecen dicho Brush en los siguientes xBrowse que tengo declarados.

Alguna sugerencia?

Un saludo
JLL
Libreria: FWH/FWH1109 + Harbour 5.8.2 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com
User avatar
jll-fwh
 
Posts: 408
Joined: Fri Jan 29, 2010 8:14 pm
Location: Meliana - Valencia

Re: BMP para fondo del xBrowse ( para Daniel )

Postby FranciscoA » Sun Nov 14, 2010 11:39 pm

Hola jll-fwh, para el 2do. punto:

oBrw2:lTransparent := .f.

Saludos
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: BMP para fondo del xBrowse ( para Daniel )

Postby jll-fwh » Mon Nov 15, 2010 8:14 am

Hola Francisco:

Gracias por tu ayuda. Aunque el tema esta en porque se heredan las propiedades a otro objeto sin indicar nada, no me parece muy normal. A no ser que alguien me de una solucion, creo que no usare esta propiedad aunque queda muy bonito en el Browse, porque ya no me sentiria muy seguro con el codigo.

Gracias de todas formas, muy amable por tu tiempo.
un saludo
JLL
Libreria: FWH/FWH1109 + Harbour 5.8.2 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com
User avatar
jll-fwh
 
Posts: 408
Joined: Fri Jan 29, 2010 8:14 pm
Location: Meliana - Valencia

Re: BMP para fondo del xBrowse ( para Daniel )

Postby jll-fwh » Tue Nov 16, 2010 3:01 pm

Hola a todos:

Nadie sabe como redimensinar un BMP asignado como fondo en un xBrowse? nadie lo ha probado?, es decir, cuando el usuario modifica el tamaño de la ventana, que el BMP de fondo se ajuste al mismo tamaño, con los demas controles me funciona Ok, pero con este no.
alguna idea?

un saludo
JLL
Libreria: FWH/FWH1109 + Harbour 5.8.2 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com
User avatar
jll-fwh
 
Posts: 408
Joined: Fri Jan 29, 2010 8:14 pm
Location: Meliana - Valencia

Re: BMP para fondo del xBrowse ( para Daniel )

Postby Daniel Garcia-Gil » Tue Nov 16, 2010 3:16 pm

jll-fwh

Puedes por favor aportar un pequeño ejemplo que podamos construir

Gracias
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: BMP para fondo del xBrowse ( para Daniel )

Postby jll-fwh » Tue Nov 16, 2010 10:58 pm

Hola Daniel:

Como siempre gracias por tu ayuda y colaboracion.

Tengo dos pequeños detalles sobre la utilización en los xBrowse con el metodo SetBackGround() que son los siguientes:

1.- Declaro el xBrowse como siempre, y añadiendo este metodo me incorpora la imagen como fondo del xBrowse, hasta aqui bien, como veras en la( imagen-01), pero cuando redimensiono la ventana y la hago mas pequeña, la imagen que hemos declarado como fondo no se redimensiona auotomaticamente ver ( imagen-02 ), si la ventana la hago mas grande, sucede esto, ( imagen-03 ). He intentado borrar el pincel ( brushes ) y volverlo a crear cuando se redimensiona la ventana ( ya que hasta donde yo llevo, un brushes no se puede cambiar sus propiedades), me lo crea pero al mismo tamaño que tenia, en fin, no logro hacerme con ello, y sera una chorrada pero de momento no lo veo.

Imagen-01
Image

Imagen-02
Image

Imagen-03
Image

2.- El detalle del punto uno, es simplemente un detalle estetico, que sino se logra solucionar, no se pone y punto, pero en esta parte te comento los detalles de funcionalidad al utilizar SetBackGround() o cBmpAdjBrush o ambas a la vez:
Si declaras un xBrowse y aplicas la DATA cBmpAdjBrush y el metodo SetBackGround(), y usas la ruedecita del raton y subes y bajas rapidamente los registros de este modo, sucede lo que muestro en la
( imagen-04 ). Si te das cuenta ha desaparecido la barra del browse o en determinadas ocasiones, algunas celdas las pinta y otras no, esto solo sucede cuando usas esta DATA y/o Metodo, sino funciona perfectamente el xBrowse aunque hagas burradas como la de moverse por el xBrowse con la rueda del raton.

Imagen-04
Image

3.- Supuestamente se puede asignar un cursor al xBrowse ( Hand ), pero a mi no me funciona correctamente, me aparece el cursor en la parte donde se pinta la flecha que indica la posicion del puntero en la BD (->), pero en las filas no aparece ( imagen-05 ), como con un volcado de pantalla no aparecen los cursores te lo he indicado donde se ve y no se ve el cursor con unas flechas.

Declaro el Cursor asi:

DEFINE CURSOR oCrusor HAND

Y para asignarselo al xBrowse, lo aplico asi:

oGrid:oCursor := oCursor

Imagen-05
Image


Sino es mucho pedir, todavia tengo algun tema pendiente que no me ha contestado nadie hasta la fecha sobre los TREE,a ver si te sabes como se hace esto, ver hilo: http://forums.fivetechsupport.com/viewtopic.php?f=6&t=20183&hilit=+tree

Comentar y supongo que todos o casi todos los compañeros del foro lo haran es que, antes de preguntar aqui, intento solucionarlo yo mismo, pero muchas veces es bastantes complicado aprenderse y entender todas clases y filosofia de FWH.

Espero a ver aportado los datos necesarios e imagenes para que puedas enterder perfectamente lo que me pasa. Como he comentado no te aporto codigo porque solo es aplicar la DATA y Metodo a cualquier fuentes que tengas tu por ahi, no es nada especial como ves.

Muchas gracias por tu amabilidad y tu tiempo como siempre, espero que al menos Antonio te pague por los servicios, jejeje.
Un saludo
JLL

(*) Las versiones, herramientas y S.O que uso estan en la firma de mi usuario del foro.
Libreria: FWH/FWH1109 + Harbour 5.8.2 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com
User avatar
jll-fwh
 
Posts: 408
Joined: Fri Jan 29, 2010 8:14 pm
Location: Meliana - Valencia

Re: BMP para fondo del xBrowse ( para Daniel )

Postby Antonio Linares » Wed Nov 17, 2010 7:39 am

JLL,

El método SetBackGround() crea un brush a partir del bitmap, y ese brush no va a redimensionarse cuando redimensiones el browse. El brush permanecerá con el mismo tamaño salvo que vuelvas a llamar a SetBackGround() con un bitmap redimensionado.

El usar la rueda del ratón no debería afectar al pintado del brush. De hacerlo, es un bug que tenemos que solucionar.

En cuanto al cursor, prueba esto:
oGrid:lKinetic := .F.
oGrid:oCursor := oCursor

Te he contestado en el mensaje del TREE :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: BMP para fondo del xBrowse ( para Daniel )

Postby jll-fwh » Wed Nov 17, 2010 1:14 pm

Hola Antonio:

Gracias por responderme tambien al tema del TREE.

Te comento, respecto al tema del Brush, mirando el metodo SetBackGround() ya mire y lo crea y lo pinta, pero no logro cambiar el tamaño del brush en tiempo real, pero mirando la clase BRUSH veo que no se puede, no?

Pero si hay una forma facil de hacerlo seguro que tu en 1 seg sabras como indicarmelo, el truco estara en el metodo Paint() y sin modificar nada de la clase.

1. Ejecuto el programa ( es entorno MDI ), se pinta el xBrowse y el Brush correctamente.
2.- Ahora redimensiono la ventana para que se vea mas pequeña, aqui es donde el Brush se queda con el mismo tamaño, yo tengo una funcion que modifica el tamaño de los objetos que contiene la ventana para adecuarlos a su tamaño ON RESIZE( ResizeWndMain( oWndPClie, oGrid, oTabla ) ), a excepcion del Brush que no logro redimensionar su tamaño, que como he indicado antes, creo que no se puede no?.
3.- Al ser entorno MDI, si yo le doy otra vez al boton ejemplo NIDADAS, ( sin cerrar el programa me refiero, con el tamaño de la vehntana que ahora esta mas pequeño ), que es el ejemplo que he puesto las imagenes, se vuelve a crear todo y por supuesto el Brush sale con el tamaño correcto, porque se a creado todo de nuevo.

4.- Si hago lo contrario, maximizo la ventana, el Brush, por supuesto se queda con su tamaño anterior ( imagen-03 ) , si ahora hago lo mismo que en el punto 3, de volver a darle al boton de NIDADAS, como se vuelve a generar todo, pues el Brush se pinta correctamente al tamaño completo.

Me explico bien? jeje

- He intentado hacer ::Paint() cuando se activa el ON RESIZE, pero el brush sigue con tu tamaño al crearlo.
- Tambien he intentado borrar el Brush, y volverlo a crear, pero me hace lo mismo.

Como podria hacer, que cuando se active el ON RESIZE, se repinte todo otra vez como si fuera la 1 que entro en el modulo?, supuestamente si hago ::paint(), no deberia pintarse todo de nuevo con los nuevos valores ? ( es decir, tañamos, etc, )

Espero haberme explicado bien, porque se me da fatal esto de las explicaciones.

Sobre el tema de la rueda del raton, creo que no me explique bien, no se.

Comento resumiendo de nuevo. Sino pones el Brush, ya le puedes dar como quieres al xBrowse que funciona genial, pero me he dado cuenta probando los Brushes, que si tiene uno asignado , entonces se desmadra un poco el repintado de las celdas/filas del xBrowse, deje una imagen ( Imagen-04) para que vieras que la barra del xBrowse, ha desaparecido como se puede apreciar, solo en este el caso de asignar un Brush y darle a la rueda del raton que baje filas a toda leche.( nota: como ves la BD solo tiene 4 reg, no hablo de base de datos enormes, solo tiene indices NTX en este ejemplo y tampoco contiene filtros ), es un mantenimiento normal y corriente como siempre. Igual en versiones posteriores no lo hace, pero en la mia si ( FWH8, en la firma del mi cuenta del foro estan las versiones que uso ). Supongo que sera una chorrada como siempre.

Muchas gracias por tu ayuda y espero haberme explicado lo suficientemente bien, jejeje
Un saludo
JLL
Libreria: FWH/FWH1109 + Harbour 5.8.2 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com
User avatar
jll-fwh
 
Posts: 408
Joined: Fri Jan 29, 2010 8:14 pm
Location: Meliana - Valencia

Re: BMP para fondo del xBrowse ( para Daniel )

Postby jll-fwh » Wed Nov 17, 2010 1:21 pm

Se me ha olvidado comentarte que en mi version ( en la firma de la cuenta del foro estan mis datos ) no exite la DATA ::lKinetic, de hecho no me sonaba de nada cuando he liedo el mensaje.

Aqui dejo el mensaje de error, ademas lo he comprado en la clase y no existe.

Application
===========
Path and name: C:\JLLORISH\PsitaControl32 v10 Rel 1.3\alert.exe (32 bits)
Size: 2,422,784 bytes
Time from start: 0 hours 0 mins 2 secs
Error occurred at: 17-11-2010, 14:19:24
Error description: Error BASE/1005 Message not found: TXBROWSE:LKINETIC

Stack Calls
===========
Called from: .\source\function\HARBOUR.PRG => _CLSSETERROR(168)
Called from: => TXBROWSE:_LKINETIC(4967)
Called from: .\PROC0901.PRG => TABLANIDADAS(0)
Called from: .\PROC0901.PRG => NIDADAS(0)
Called from: .\ALERT.PRG => (b)FRAMEBAR(0)
Called from: => TBTNBMP:CLICK(389)
Called from: => TBTNBMP:LBUTTONUP(560)
Called from: => TWINDOW:HANDLEEVENT(0)
Called from: => TCONTROL:HANDLEEVENT(1454)
Called from: => TBTNBMP:HANDLEEVENT(1025)
Called from: .\WINDOW.PRG => _FWH(0)
Called from: => WINRUN(0)
Called from: => TMDIFRAME:ACTIVATE(0)
Called from: .\ALERT.PRG => MAINOPENWND(0)
Called from: .\ALERT.PRG => MAIN(0)

System


Gracias de nuevo
Un saludo
JLL
Libreria: FWH/FWH1109 + Harbour 5.8.2 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com
User avatar
jll-fwh
 
Posts: 408
Joined: Fri Jan 29, 2010 8:14 pm
Location: Meliana - Valencia

Re: BMP para fondo del xBrowse ( para Daniel )

Postby Daniel Garcia-Gil » Wed Nov 17, 2010 2:05 pm

Daniel Garcia-Gil wrote:jll-fwh

Puedes por favor aportar un pequeño ejemplo que podamos construir

Gracias
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: BMP para fondo del xBrowse ( para Daniel )

Postby jll-fwh » Wed Nov 17, 2010 5:01 pm

Hola Antonio/Daniel:

He montado un ejemplo para ver los temas de: el brush en xbrowse y el cursor. Lo he generado apartir del codigo que tengo, aunque yo uso MDI y aqui lo he generado un una simple ventana.

Antonio: Sobre el tema de moverse por el xbrowse con la rueda del raton, haciendo esta prueba, aqui funciona bien, ufff, pero en MDI no, por tanto tendre que testear porque me hace eso en MDI.

un saludo
JLL
Libreria: FWH/FWH1109 + Harbour 5.8.2 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com
User avatar
jll-fwh
 
Posts: 408
Joined: Fri Jan 29, 2010 8:14 pm
Location: Meliana - Valencia

Re: BMP para fondo del xBrowse ( para Daniel )

Postby jll-fwh » Wed Nov 17, 2010 5:02 pm

Libreria: FWH/FWH1109 + Harbour 5.8.2 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com
User avatar
jll-fwh
 
Posts: 408
Joined: Fri Jan 29, 2010 8:14 pm
Location: Meliana - Valencia

Re: BMP para fondo del xBrowse ( para Daniel )

Postby Daniel Garcia-Gil » Thu Nov 18, 2010 5:40 pm

Saludos

teniendo el ejemplo es mas facil

teoricamente deberia bastar con hacer esto

Code: Select all  Expand view
ON RESIZE ( oGrid:SetSize( oWnd:nRight-14, oWnd:nBottom-30 ), oGrid:lBrushed := .F. )


pero esa version tiene un bug que hace perder memoria cuando se repinta el fondo ajustado, por eso te recomiendo cambies este codigo en el metodo paint

solo cambiar el bloque completo del primer IF/ENDIF
Code: Select all  Expand view

   if ::cBmpAdjBrush != NIL .and. !::lBrushed
      ::lBrushed := .t.
      ::lTransparent := .t.
      if valtype( ::cBmpAdjBrush ) == "C"
      if '.' $ ::cBmpAdjBrush
            if upper( right( ::cBmpAdjBrush, 3 ) ) == "BMP"
               if file( ::cBmpAdjBrush )
                  hBmp := ReadBitmap( 0, ::cBmpAdjBrush )
               else
                  msgstop( "File " + ::cBmpAdjBrush + " not Found","Fivewin: Class TXBrowse" )
                  return( 0 )
               endif
            else
               msgstop( "Bad BMP File format","Fivewin: Class TXBrowse" )
               return( 0 )
            endif
         else
            if ( hBmp := LoadBitmap( GetResources(), ::cBmpAdjBrush ) ) == 0
               msgstop( "Resource " + ::cBmpAdjBrush + " No Found", "Fivewin: Class TXBrowse" )
               return( 0 )
            endif
         endif
      else
         msgstop( "Only BMP File or Resource","Fivewin: Class TXBrowse" )
         return( 0 )
      endif

      nBrushRow         := 0
      nBrushCol         := 0
      nBrushWidth    := ::BrwWidth()
      nBrushHeight   := ::BrwHeight()

      if ::lRecordSelector = .T.
          nBrushCol += RECORDSELECTOR_WIDTH *0.73
          nBrushWidth   -= RECORDSELECTOR_WIDTH *0.73
      endif

      if ::lFooter
         nBrushHeight -= ::FooterHeight()
      endif

      if ::lHeader
         nBrushHeight -= ::HeaderHeight()
         nBrushRow += ::HeaderHeight()
      endif

      PalBmpDraw( ::hDC, nBrushRow, nBrushCol,  hBmp,, nBrushWidth, nBrushHeight )
      hDCComp := CreateCDC( ::hDC )
      hBmpNew := CreateCompatibleBitMap( ::hDC, ::BrwWidth(), ::BrwHeight() )
      holdBitMap    := selectobject( hdccomp, hBmpNew )
      BitBlt( hDCComp, nBrushCol, nBrushRow,  nBrushWidth, nBrushHeight, ::hDC, nBrushCol, nBrushRow, SRCCOPY )

      selectobject( hBmpNew, hOldBitMap )

      ::lBrushed := .t.
      ::lTransparent := .t.
      ::oBrush:End()
      DeleteObject( ::oBrush:hBrush )
      ::oBrush:hBrush = CreatePatternBrush( hBmpNew )
      DeleteObject( hBmpNew )
      DeleteObject( hBmp )
      DeleteDC( hDCComp )
      //::Refresh()
   endif
 
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: BMP para fondo del xBrowse ( para Daniel )

Postby jll-fwh » Fri Nov 19, 2010 9:09 am

Hola Daniel:

Como diria mi sobrino, "ERES EL PUTO AMO", jaja. Con esas modificaciones ya funciona bien, y el jodio pinguino ya se redimensiona correctamente. Con el monton de horas que he estado leyendo la clase y haciendo pruebas y nada, y tu en un plis plaf, hecho y funcionando, increible.

Solo queda pendiente el tema de los cursores que tampoco funciona bien, lo aplico como comento Antonio, pero no funciona bien.

Una pregunta que no acabo de entender, ¿porque cuando se redimensiona la ventana hay que hacer oGrid:lBrushed := .F. ?

Algo que si me preocupa y mucho es, el tema de la perdida de memoria, con estas modificaciones esta solucionado? esta version que yo uso tiene mas BUG de memoria por ahi que me pueden dar problemas? , muy preocupante, porque una vez finalice las pruebas que estoy haciendo, voy a empezar un proyecto grande y ahora mismo ya me estoy preocupando.

Un saludo y muy agradecido por tu ayuda y tiempo.
JLL
Libreria: FWH/FWH1109 + Harbour 5.8.2 + Borland C++ 5.8.2
Editor de Recursos: PellecC
ADA, OURXDBU
S.O: XP / Win 7 /Win10
Blog: http://javierlloris.blogspot.com.es/
e-mail: javierllorisprogramador@gmail.com
User avatar
jll-fwh
 
Posts: 408
Joined: Fri Jan 29, 2010 8:14 pm
Location: Meliana - Valencia

Re: BMP para fondo del xBrowse ( para Daniel )

Postby Daniel Garcia-Gil » Fri Nov 19, 2010 12:10 pm

Saludos

jll-fwh wrote:Solo queda pendiente el tema de los cursores que tampoco funciona bien, lo aplico como comento Antonio, pero no funciona bien.

Revisando

jll-fwh wrote:Una pregunta que no acabo de entender, ¿porque cuando se redimensiona la ventana hay que hacer oGrid:lBrushed := .F. ?

por que hay q redimensionar primero el brush para despues asignarlo, haciendo FALSE la variable le indicamos que ese proceso no se hecho y debe hacerse

jll-fwh wrote:Algo que si me preocupa y mucho es, el tema de la perdida de memoria, con estas modificaciones esta solucionado? esta version que yo uso tiene mas BUG de memoria por ahi que me pueden dar problemas? , muy preocupante, porque una vez finalice las pruebas que estoy haciendo, voy a empezar un proyecto grande y ahora mismo ya me estoy preocupando.

con respecto a xbrowse, el bug era solo cuando se redimensionaba con brush ajustado

Mi recomendacion es que actualices tu version de fivewin, ha tenido muchas mejoras desde tu version
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 88 guests