Page 1 of 2

Pintado de Ribbon

PostPosted: Mon Nov 04, 2013 12:59 pm
by Carlos Mora
Hay algo que debo estar haciendo mal pero no me doy cuenta que.
Estoy creando una ventana MDI con una Ribbon, algo en principio simple, pero los botones se pintan mal al principio. Al pasar el ratón por encima se corrigen:

Imagen mal:
Image

despues de pasar el raton por encima:

Image

Código:

Code: Select all  Expand view

 #INCLUDE 'Fivewin.ch'
 #INCLUDE 'Ribbon.ch'
 
 STATIC OWNDMAIN, oFont , oFuenteL, oFuenteM, oFuenteS, oWnd
 
Procedure Main()
   LOCAL oBrush , oBmpTit

   DEFINE FONT oFuenteL  NAME "Segoe UI Light"   SIZE 0, -30
   DEFINE FONT oFuenteM  NAME "Segoe UI Light"   SIZE 0, -17
   DEFINE FONT oFuenteS  NAME "Segoe UI Light"   SIZE 0, -14


  DEFINE WINDOW oWnd MDI BRUSH oBrush TITLE 'Prueba' STYLE nOr( WS_POPUP, WS_BORDER)

   oWnd:bInit     :={|| MainMenu(),oWnd:Refresh()}
   oWnd:oMenu:end()

   ACTIVATE WINDOW oWnd  maximized


RETURN

//----------------------------------------------------------------------------//
Function MainMenu()


   local  oRbnBar, oGr1,oTBtn1, oTBtn2,oTBtn3,oGr2,oGr3, oBtn
   local  oBackStage
   local option
   local oMtr,nAct
   local aDB := {}

   if oRbnBar !=nil
      oRbnBar:End()
      oRbnBar:=nil
   endif

   DEFINE RIBBONBAR oRbnBar WINDOW oWnd PROMPT "Principal" HEIGHT 127 TOPMARGIN 25 2013 //Apariencia del 2013
   oRbnBar:nLeftMargin = 4
   oRbnBar:CalcPos()

 
   ADD group oGr1 RIBBON oRbnBar to Option 1 PROMPT "Maestros" WIDTH 805

      @ 5,5   ADD BUTTON oBtn PROMPT "SubSec"    GROUP oGr1 BITMAP "subsec"    ROUND SIZE 75,75 ACTION Mantegen("MAESUBSEC",aDB,.T.,{},{})
      oBtn:SetFont(oFuenteS)

      @ 5,85  ADD BUTTON oBtn PROMPT "CLegal"    GROUP oGr1 BITMAP "contra"    ROUND SIZE 75,75 ACTION Mantegen("MAECONLEG",aDB,.T.,{},{})
      oBtn:SetFont(oFuenteS)

      @ 5,165 ADD BUTTON oBtn PROMPT "CInterno"  GROUP oGr1 BITMAP "contral"   ROUND SIZE 75,75 ACTION  Mantegen("MAECONINT",aDB,.T.,{},{})
      oBtn:SetFont(oFuenteS)

      @ 5,245 ADD BUTTON oBtn PROMPT "Provincia" GROUP oGr1 BITMAP "provin"    ROUND SIZE 75,75 ACTION  Mantegen("MAEPROVIN",aDB,.T.,{},{})
      oBtn:SetFont(oFuenteS)

      @ 5,325 ADD BUTTON oBtn PROMPT "Paises"    GROUP oGr1 BITMAP "paises"    ROUND SIZE 75,75 ACTION  Mantegen("MAEPAIS",aDB,.T.,{},{})
      oBtn:SetFont(oFuenteS)

      @ 5,405 ADD BUTTON oBtn PROMPT "Poblacion" GROUP oGr1 BITMAP "poblacion" ROUND SIZE 75,75 ACTION  Mantegen("MAEPOBLAC",aDB,.T.,{},{})
      oBtn:SetFont(oFuenteS)
      oGr1:SetFont(oFuenteS)

   ADD group oGr2 RIBBON oRbnBar to Option 1 PROMPT "Internos" WIDTH 100

      @ 5,15   ADD BUTTON oBtn PROMPT "Datos Pers." GROUP oGr2 BITMAP "trabaja" ROUND SIZE 75,75 ACTION Mantegen ("DATPER",aDB,.F.,{},{})
      oGr2:SetFont(oFuenteS)
      oBtn:SetFont(oFuenteS)

   ADD group oGr3 RIBBON oRbnBar to Option 1 PROMPT "Externos" WIDTH 100

      @ 5,15   ADD BUTTON oBtn PROMPT "Datos Pers." GROUP oGr3 BITMAP "exter"   ROUND SIZE 75,75 ACTION Mantegen ("INFTRAEXT",aDB,.F.,{},{})
      oGr3:SetFont(oFuenteS)
      oBtn:SetFont(oFuenteS)

 return nil

Function Mantegen( cData )
RETURN MsgInfo(cData )

 


Esta compilado y generado con la última versión de FW, bajada hoy mismo.
No tengo idea que estoy haciendo mal. ¿Alguna pista por favor?

Otro tema: Me gustaría cambiar la altura de las pestañas, pero veo en el código fuente de la TRibbon que si selecciono el tema 2013 nTopMargin se fuerza a 25. ¿Eso es por algo en especial? ¿Se podría cambiar en la clase?

Un saludo

Re: Pintado de Ribbon

PostPosted: Mon Nov 04, 2013 9:04 pm
by cnavarro
Carlos Mora wrote:Hay algo que debo estar haciendo mal pero no me doy cuenta que.
Estoy creando una ventana MDI con una Ribbon, algo en principio simple, pero los botones se pintan mal al principio. Al pasar el ratón por encima se corrigen:

Imagen mal:
Image

despues de pasar el raton por encima:

Image

Código:

Code: Select all  Expand view

 #INCLUDE 'Fivewin.ch'
 #INCLUDE 'Ribbon.ch'
 
 STATIC OWNDMAIN, oFont , oFuenteL, oFuenteM, oFuenteS, oWnd
 
Procedure Main()
   LOCAL oBrush , oBmpTit

   DEFINE FONT oFuenteL  NAME "Segoe UI Light"   SIZE 0, -30
   DEFINE FONT oFuenteM  NAME "Segoe UI Light"   SIZE 0, -17
   DEFINE FONT oFuenteS  NAME "Segoe UI Light"   SIZE 0, -14


  DEFINE WINDOW oWnd MDI BRUSH oBrush TITLE 'Prueba' STYLE nOr( WS_POPUP, WS_BORDER)

   oWnd:bInit     :={|| MainMenu(),oWnd:Refresh()}
   oWnd:oMenu:end()

   ACTIVATE WINDOW oWnd  maximized


RETURN

//----------------------------------------------------------------------------//
Function MainMenu()


   local  oRbnBar, oGr1,oTBtn1, oTBtn2,oTBtn3,oGr2,oGr3, oBtn
   local  oBackStage
   local option
   local oMtr,nAct
   local aDB := {}

   if oRbnBar !=nil
      oRbnBar:End()
      oRbnBar:=nil
   endif

   DEFINE RIBBONBAR oRbnBar WINDOW oWnd PROMPT "Principal" HEIGHT 127 TOPMARGIN 25 2013 //Apariencia del 2013
   oRbnBar:nLeftMargin = 4
   oRbnBar:CalcPos()

 
   ADD group oGr1 RIBBON oRbnBar to Option 1 PROMPT "Maestros" WIDTH 805

      @ 5,5   ADD BUTTON oBtn PROMPT "SubSec"    GROUP oGr1 BITMAP "subsec"    ROUND SIZE 75,75 ACTION Mantegen("MAESUBSEC",aDB,.T.,{},{})
      oBtn:SetFont(oFuenteS)

      @ 5,85  ADD BUTTON oBtn PROMPT "CLegal"    GROUP oGr1 BITMAP "contra"    ROUND SIZE 75,75 ACTION Mantegen("MAECONLEG",aDB,.T.,{},{})
      oBtn:SetFont(oFuenteS)

      @ 5,165 ADD BUTTON oBtn PROMPT "CInterno"  GROUP oGr1 BITMAP "contral"   ROUND SIZE 75,75 ACTION  Mantegen("MAECONINT",aDB,.T.,{},{})
      oBtn:SetFont(oFuenteS)

      @ 5,245 ADD BUTTON oBtn PROMPT "Provincia" GROUP oGr1 BITMAP "provin"    ROUND SIZE 75,75 ACTION  Mantegen("MAEPROVIN",aDB,.T.,{},{})
      oBtn:SetFont(oFuenteS)

      @ 5,325 ADD BUTTON oBtn PROMPT "Paises"    GROUP oGr1 BITMAP "paises"    ROUND SIZE 75,75 ACTION  Mantegen("MAEPAIS",aDB,.T.,{},{})
      oBtn:SetFont(oFuenteS)

      @ 5,405 ADD BUTTON oBtn PROMPT "Poblacion" GROUP oGr1 BITMAP "poblacion" ROUND SIZE 75,75 ACTION  Mantegen("MAEPOBLAC",aDB,.T.,{},{})
      oBtn:SetFont(oFuenteS)
      oGr1:SetFont(oFuenteS)

   ADD group oGr2 RIBBON oRbnBar to Option 1 PROMPT "Internos" WIDTH 100

      @ 5,15   ADD BUTTON oBtn PROMPT "Datos Pers." GROUP oGr2 BITMAP "trabaja" ROUND SIZE 75,75 ACTION Mantegen ("DATPER",aDB,.F.,{},{})
      oGr2:SetFont(oFuenteS)
      oBtn:SetFont(oFuenteS)

   ADD group oGr3 RIBBON oRbnBar to Option 1 PROMPT "Externos" WIDTH 100

      @ 5,15   ADD BUTTON oBtn PROMPT "Datos Pers." GROUP oGr3 BITMAP "exter"   ROUND SIZE 75,75 ACTION Mantegen ("INFTRAEXT",aDB,.F.,{},{})
      oGr3:SetFont(oFuenteS)
      oBtn:SetFont(oFuenteS)

 return nil

Function Mantegen( cData )
RETURN MsgInfo(cData )

 


Esta compilado y generado con la última versión de FW, bajada hoy mismo.
No tengo idea que estoy haciendo mal. ¿Alguna pista por favor?

Otro tema: Me gustaría cambiar la altura de las pestañas, pero veo en el código fuente de la TRibbon que si selecciono el tema 2013 nTopMargin se fuerza a 25. ¿Eso es por algo en especial? ¿Se podría cambiar en la clase?

Un saludo


Carlos
Añade la definicion del BRUSH de la ventana MDI
Code: Select all  Expand view


.../...

DEFINE BRUSH oBrush COLOR RGB(255,255,255)
DEFINE WINDOW oWnd MDI BRUSH oBrush TITLE 'Prueba' STYLE nOr( WS_POPUP, WS_BORDER)

.../...

 

Re: Pintado de Ribbon

PostPosted: Tue Nov 05, 2013 7:39 am
by cnavarro
Carlos Mora wrote:Hay algo que debo estar haciendo mal pero no me doy cuenta que.
Otro tema: Me gustaría cambiar la altura de las pestañas, pero veo en el código fuente de la TRibbon que si selecciono el tema 2013 nTopMargin se fuerza a 25. ¿Eso es por algo en especial? ¿Se podría cambiar en la clase?

Un saludo


Carlos, yo creo que en la definicion del estilo 2013 falta, por lo menos para ese valor el DEFAULT al igual que lo tienen las definiciones 2010 y anteriores
Code: Select all  Expand view


.../...
   IF l2013
      nTopMargin    := 25
      nClrPaneRB    := RGB( 255, 255, 255 )

.../...

 

Deberia ser
Code: Select all  Expand view

.../...
   IF l2013
      DEFAULT nTopMargin    := 25 ,  ;
      nClrPaneRB    := RGB( 255, 255, 255 ) , ;      TODOS O POR LO MENOS nTopMargin

.../...
 

Re: Pintado de Ribbon

PostPosted: Tue Nov 05, 2013 8:14 am
by Carlos Mora
Hola Carlos,

Lamentablemente añadir el Brush no resuelve el problema, solo hace que se note menos. Añadiendo el brush blanco la imágen queda así:
Image

donde se ve que los grupos no estan pintados como en la imagen correcta:
Image


No estoy muy fino con esto de los Ribbons, entonces buscar donde falla me cuesta y apelaba a algún compañero que ya se hubiese "peleado" con este asunto :) .
Respecto de la altura del topmargin, efectivamente había visto la parte del código que pusiste, y esa era la duda: de que están puestos como constantes y no como defaults, no sé si la falta de la cláusula DEFAULT ha sido un olvido o está puesta a propósito. La corrección que sugieres funciona, al menos no ha surgido ningún inconveniente aún. Estoy probando porque tambien le quisiera cambiar la tipografía como a los grupos, y necesito que sea más alta. Ya os iré contando.

Muchas gracias por tu atención. Por cierto... estás en Guadalajara ciudad? Porque parece que no estamos tan lejos, yo vivo y trabajo en Torrejón de Ardoz.

Re: Pintado de Ribbon

PostPosted: Tue Nov 05, 2013 1:50 pm
by Antonio Linares
Cristobal,

Efectivamente el valor nTopMargin tiene que ser DEFAULT, respecto a los otros no, pues hay que asignarles determinados valores por estar seleccionado el estilo 2013. Incluido para el próximo build :-)

Carlos,

El problema parece estar relacionado con el estilo usado en la ventana principal. Aun no sé porque ocurre eso, pero si quitas la definición de ese estilo, entonces se muestra correctamente:

DEFINE WINDOW oWnd MDI TITLE 'Prueba'

Con este estilo mejora algo:

DEFINE WINDOW oWnd MDI TITLE 'Prueba' STYLE nOr( WS_POPUP, WS_VISIBLE )

Re: Pintado de Ribbon

PostPosted: Tue Nov 05, 2013 3:24 pm
by Carlos Mora
Hola Antonio,

efectivamente, si le quito el estilo WS_POPUP se soluciona, pero intentaba no tener la caja de la ventana dibujada. Aparentemente es el diálogo de aDialogs el que fallaría, tal vez se está pintando cuando debe ser transparente, o viceversa.

Un saludo

Re: Pintado de Ribbon

PostPosted: Tue Nov 05, 2013 3:36 pm
by cnavarro
Antonio Linares wrote:Cristobal,

Efectivamente el valor nTopMargin tiene que ser DEFAULT, respecto a los otros no, pues hay que asignarles determinados valores por estar seleccionado el estilo 2013. Incluido para el próximo build :-)

Carlos,

El problema parece estar relacionado con el estilo usado en la ventana principal. Aun no sé porque ocurre eso, pero si quitas la definición de ese estilo, entonces se muestra correctamente:

DEFINE WINDOW oWnd MDI TITLE 'Prueba'

Con este estilo mejora algo:

DEFINE WINDOW oWnd MDI TITLE 'Prueba' STYLE nOr( WS_POPUP, WS_VISIBLE )


Antonio
Efectivamente asi tambien lo consideraba yo

Carlos:
Me llamo Cristobal, y si trabajas y vives en Torrejon es raro que no nos conozcamos porque yo he vivido alli durante muchos años y de hecho voy muy a menudo ya que mi madre y hermana y mi hijo siguen viviendo alli. A ver si coincidimos, que me encantaria compartir una cervecilla

Re: Pintado de Ribbon

PostPosted: Tue Nov 05, 2013 4:04 pm
by Carlos Mora
cnavarro wrote:Me llamo Cristobal, y si trabajas y vives en Torrejon es raro que no nos conozcamos porque yo he vivido alli durante muchos años y de hecho voy muy a menudo ya que mi madre y hermana y mi hijo siguen viviendo alli. A ver si coincidimos, que me encantaria compartir una cervecilla

No tienes más que avisar ;)
Te paso mi teléfono x mail, a ver si quedamos en algún momento.

Un saludo

Re: Pintado de Ribbon

PostPosted: Wed Nov 06, 2013 6:31 pm
by cnavarro
Carlos prueba asi
A mi me funciona correctamente.


Code: Select all  Expand view

 #INCLUDE 'Fivewin.ch'
 #INCLUDE 'Ribbon.ch'
 
 STATIC OWNDMAIN, oFont , oFuenteL, oFuenteM, oFuenteS, oWnd
 
Procedure Main()
   LOCAL oBrush , oBmpTit

   Local oRbn

   DEFINE FONT oFuenteL  NAME "Segoe UI Light"   SIZE 0, -30
   DEFINE FONT oFuenteM  NAME "Segoe UI Light"   SIZE 0, -17
   DEFINE FONT oFuenteS  NAME "Segoe UI Light"   SIZE 0, -14


  DEFINE WINDOW oWnd MDI BRUSH oBrush TITLE 'Prueba' STYLE nOr( WS_POPUP, WS_BORDER)

   //oWnd:bInit     :={|| MainMenu(),oWnd:Refresh()}
   oWnd:oMenu:end()
 
   oRbn   := MainMenu( )

   ACTIVATE WINDOW oWnd  maximized ON INIT SetParent( oRbn:hWnd, oWnd:hWnd )


RETURN

//----------------------------------------------------------------------------//
Function MainMenu( )


   local  oRbnBar, oGr1,oTBtn1, oTBtn2,oTBtn3,oGr2,oGr3, oBtn
   local  oBackStage
   local option
   local oMtr,nAct
   local aDB := {}

   if oRbnBar !=nil
      oRbnBar:End()
      oRbnBar:=nil
   endif

   DEFINE RIBBONBAR oRbnBar WINDOW oWnd PROMPT "Principal" HEIGHT 127 TOPMARGIN 25 2013 //Apariencia del 2013
   oRbnBar:nLeftMargin = 4
   oRbnBar:CalcPos()

 
   ADD group oGr1 RIBBON oRbnBar to Option 1 PROMPT "Maestros" WIDTH 805

      @ 5,5   ADD BUTTON oBtn PROMPT "SubSec"    GROUP oGr1 BITMAP "subsec"    ROUND SIZE 75,75 ACTION Mantegen("MAESUBSEC",aDB,.T.,{},{})
      oBtn:SetFont(oFuenteS)

      @ 5,85  ADD BUTTON oBtn PROMPT "CLegal"    GROUP oGr1 BITMAP "contra"    ROUND SIZE 75,75 ACTION Mantegen("MAECONLEG",aDB,.T.,{},{})
      oBtn:SetFont(oFuenteS)

      @ 5,165 ADD BUTTON oBtn PROMPT "CInterno"  GROUP oGr1 BITMAP "contral"   ROUND SIZE 75,75 ACTION  Mantegen("MAECONINT",aDB,.T.,{},{})
      oBtn:SetFont(oFuenteS)

      @ 5,245 ADD BUTTON oBtn PROMPT "Provincia" GROUP oGr1 BITMAP "provin"    ROUND SIZE 75,75 ACTION  Mantegen("MAEPROVIN",aDB,.T.,{},{})
      oBtn:SetFont(oFuenteS)

      @ 5,325 ADD BUTTON oBtn PROMPT "Paises"    GROUP oGr1 BITMAP "paises"    ROUND SIZE 75,75 ACTION  Mantegen("MAEPAIS",aDB,.T.,{},{})
      oBtn:SetFont(oFuenteS)

      @ 5,405 ADD BUTTON oBtn PROMPT "Poblacion" GROUP oGr1 BITMAP "poblacion" ROUND SIZE 75,75 ACTION  Mantegen("MAEPOBLAC",aDB,.T.,{},{})
      oBtn:SetFont(oFuenteS)
      oGr1:SetFont(oFuenteS)

   ADD group oGr2 RIBBON oRbnBar to Option 1 PROMPT "Internos" WIDTH 100

      @ 5,15   ADD BUTTON oBtn PROMPT "Datos Pers." GROUP oGr2 BITMAP "trabaja" ROUND SIZE 75,75 ACTION Mantegen ("DATPER",aDB,.F.,{},{})
      oGr2:SetFont(oFuenteS)
      oBtn:SetFont(oFuenteS)

   ADD group oGr3 RIBBON oRbnBar to Option 1 PROMPT "Externos" WIDTH 100

      @ 5,15   ADD BUTTON oBtn PROMPT "Datos Pers." GROUP oGr3 BITMAP "exter"   ROUND SIZE 75,75 ACTION Mantegen ("INFTRAEXT",aDB,.F.,{},{})
      oGr3:SetFont(oFuenteS)
      oBtn:SetFont(oFuenteS)

return oRbnBar



Function Mantegen( cData )
RETURN MsgInfo(cData )

 

Re: Pintado de Ribbon

PostPosted: Thu Nov 07, 2013 4:09 pm
by Carlos Mora
Chapó! Fantastico Cristobal, muchísimas gracias por las molestias que te has tomado. Ahora si te deberé la cervecita de verdad, jaja.


Un abrazo

Re: Pintado de Ribbon

PostPosted: Thu Nov 07, 2013 4:53 pm
by cnavarro
Carlos, para eso estamos por aqui
Me alegro que se haya solucionado
Y lo de la cervecita en cuanto tenga un ratillo

Re: Pintado de Ribbon

PostPosted: Mon Nov 11, 2013 8:20 am
by Carlos Mora
Hola Cristobal,
al final no funcionó. Funciona en el ejemplo, pero cuando lo añado al programa completo me vueve a fallar. La única diferencia significativa es que antes de dibujar la caja muestro el diálogo con el que el usuario entra al programa. Vo y a ver si puedo aislar el comportamiento.

Re: Pintado de Ribbon

PostPosted: Mon Nov 11, 2013 7:10 pm
by cnavarro
Carlos
La ventana que lo contiene es MDI, o no?
Colocas el Ribbon en Dialog?

Re: Pintado de Ribbon

PostPosted: Tue Nov 12, 2013 9:33 am
by Carlos Mora
Hola Cristobal,
el Ribbon está en un MDI, solo que antes de activar el MDI aparece un diálogo para que se loguee el usuario,

Code: Select all  Expand view

//------------------------------------------------------------------------------
METHOD Run() CLASS TApplication
//------------------------------------------------------------------------------
   LOCAL oBrush, oBrush2, oBmpTit, oRect
   LOCAL oRbn, hWnd

   // Marca la entrada a la aplicacion
   ::RegistraEntrada()

   IF ::Login()

      DEFINE BITMAP OBMPTIT FILENAME "ICONS\ATISALOGO2.BMP"
      DEFINE BRUSH OBRUSH COLOR CLR_WHITE
      DEFINE WINDOW ::OWNDMAIN MDI BRUSH oBrush STYLE nOr( WS_POPUP, WS_MAXIMIZE)
      ::oWndMain:SetFont( ::oFont )
      SET MESSAGE OF ::OWNDMAIN TO ("ASESORES TITULADOS, S.A. ATISA@ATISA.ES TFNO. 912054400 ") ;
         CLOCK DATE KEYBOARD NOINSET FONT ::oFont
         W8_MsgBar( oApp:oWndMain )

      ::OWNDMAIN:OMENU:END()
       oRbn:= ::MainMenu()

      ::oWndMain:bInit:= {||
         SetParent( oRbn:hWnd, ::oWndMain:hWnd )
         RETURN NIL
         }

      ACTIVATE WINDOW ::OWNDMAIN MAXIMIZED ;
         ON PAINT DRAWBITMAP( HDC, OBMPTIT:HBITMAP, ::OWNDMAIN:NHEIGHT - 450, ::OWNDMAIN:NWIDTH- 340, 330, 246 )

   ENDIF


RETURN NIL
 


Image

Paso el ratón por encima y
Image

Ni idea por donde encararlo

Re: Pintado de Ribbon

PostPosted: Tue Nov 12, 2013 10:47 am
by Antonio Linares
Carlos,

En base al ejemplo de Cristobal, puedes modificarlo para que se asemeje al tuyo y podamos probar lo que comentas ? gracias