TMsgBar: Ayuda por favor.... RESUELTO!!!

TMsgBar: Ayuda por favor.... RESUELTO!!!

Postby RSalazarU » Fri Oct 07, 2011 6:56 pm

Saludos amigos del foro:

Tengo un problema con TMsgBar, algunos TMsgItem capturan el fondo de la pantalla al iniciarse el programa con la nueva FWH1109

Image

eso no sucedía con la FWH0907

Image

Algo estoy haciendo mal, porque ya compile el ejemplo TestMbar y esta OK

Es algo con

Code: Select all  Expand view
oMsgItem:SetText( cTexto )


¿Que estoy haciendo mal?

De antemano, gracias

Rolando.
Saludos desde Cochabamba, Bolivia
Last edited by RSalazarU on Fri Oct 14, 2011 12:40 am, edited 1 time in total.
RSalazarU
 
Posts: 211
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia

Re: TMsgBar: Ayuda por favor

Postby jll-fwh » Sat Oct 08, 2011 3:47 am

Hola RSalazarU;

Pon el código para ver donde tienes el fallo, porque yo uso la FWH1109 y a mi me funciona correctamente:

Barra con estilo 2007
Image

Barra sin estilo 2007
Image

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: Encontre el problema

Postby RSalazarU » Thu Oct 13, 2011 1:25 am

Saludos JLL:

Al comparar el código de TMsgItem encontré el siguiente cambio en el método PAINT

Ver 907
Code: Select all  Expand view
  if ::oMsgBar:l2007
      ::oMsgBar:PaintBar( nLeft, ::nWidth )
   endif

 


Ver 1109
Code: Select all  Expand view
  if ::oMsgBar:l2007 .or. ::oMsgBar:l2010
      ::oMsgBar:PaintBar( nLeft, ::nWidth )
      hDCMem = CreateCompatibleDC( hDC )
      If ::hBack == NIL
         ::hBack  = CreateCompatibleBitmap( hDC, ::nWidth + 4, ::oMsgBar:nHeight )
         hOld = SelectObject( hDCMem, ::hBack )
         BitBlt( hDCMem, 0, 0, ::nWidth + 4, ::oMsgBar:nHeight, hDC, ::nLeft() - 4, 0, 0xCC0020 )
         SelectObject( hDCMem, hOld )
      endif
      hOld = SelectObject( hDCMem, ::hBack )
      BitBlt( hDC, ::nLeft() - 4, 0, ::nWidth + 4, ::oMsgBar:nHeight, hDCMem, 0, 0, 0xCC0020 )
      DeleteDC( hDCMem )
   endif

 


Creo que el problema esta relacionado con ::hBack

y para probarlo modifique el ejemplo testmbar

Code: Select all  Expand view
// Testing Bitmaps in the MsgBar

#include "FiveWin.ch"

static oWnd

//----------------------------------------------------------------------------//

function Main()

   local lMail := .t., oBar

   local oMsgItem, oMsgItemMail

   DEFINE WINDOW oWnd TITLE "Testing MsgBar with bitmaps"

   DEFINE BUTTONBAR oBar OF oWnd _3D

   @ 10,10 CHECKBOX lMail PROMPT "E-Mail"  OF oWnd ;
           SIZE 200, 35 COLOR CLR_BLACK ;
           ON CHANGE If( ! lMail, oWnd:oMsgBar:DelItem( oMsgItemMail ), ;
                                  oWnd:oMsgBar:InsItem( oMsgItemMail, 2 ) )

   SET MESSAGE OF oWnd TO "I may use different bitmaps" 2007

   DEFINE MSGITEM oMsgItem OF oWnd:oMsgBar ;
          PROMPT "Lock" ;
          SIZE 60 ;
          BITMAPS "..\bitmaps\16x16\lock.bmp", "..\bitmaps\16x16\unlock.bmp" ;
          ACTION ( oMsgItem:lActive := !oMsgItem:lActive, oMsgItem:Paint() )

   DEFINE MSGITEM oMsgItemMail OF oWnd:oMsgBar ;
          SIZE 24 ;
          BITMAPS "..\bitmaps\16x16\MAIL.BMP" ;
          TOOLTIP "Check the email" + CRLF + "Get email"

   DEFINE MSGITEM OF oWnd:oMsgBar ;
          BITMAPS "..\bitmaps\16x16\PRINTER.BMP" ;
          ACTION PrinterSetup() ;
          TOOLTIP "Setup the printer"

   oWnd:oMsgBar:DateOn()
   oWnd:oMsgBar:ClockOn()

   oMsgItem:SetText("Bloqueo") //<--- ACA EL PROBLEMA!!!!!!!!!!!!!!!!!!

   ACTIVATE WINDOW oWnd

return nil

//----------------------------------------------------------------------------//


El problema ocurre cuando se quiere cambiar el mensaje a un ítem antes de activar la ventana. Si se cambia el mensaje una vez activada la ventana todo OK.

Mi problema ahora es llevar ese código al bOnInit de la ventana, lo cual va a ser difícil en mi caso.

Por el momento tuve que eliminar ese código en la clase TMsgItem y volver a compilar

Bueno, espero se solucione de alguna forma o tendré que cambiar bastante código.

Atentamente,


Rolando.
Saludos desde Cochabamba, Bolivia
RSalazarU
 
Posts: 211
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia

Re: TMsgBar: Ayuda por favor

Postby Antonio Linares » Thu Oct 13, 2011 7:22 pm

Rolando,

Por favor, en la clase original TMsgItem implementa este cambio y comprueba si asi te funciona bien:

METHOD SetText( cMsg ) INLINE ::cMsg := cValToChar( cMsg ), If( IsWindowVisible( ::oMsgBar:hWnd ), ::Paint(),)

gracias! :-)
regards, saludos

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

funciona .. pero

Postby RSalazarU » Thu Oct 13, 2011 9:48 pm

Maestro Antonio:

Gracias por responder.

Modifique el código, y resuelve el problema de las TMsgIte:SetText().

Sin embargo algo pasa con las opciones NOINSET KEYBOARD TIME de TMsgbar

Image

El problema ocurre cuando se crea un dialogo antes de activar la ventana principal, en mi caso yo activo un dialogo para la captura de los datos del usuario: ID, Psw, etc. y si esta Ok, recién activo la ventana principal.

El codigo modificado de Testmbar es:
Code: Select all  Expand view
// Testing Bitmaps in the MsgBar

#include "FiveWin.ch"

static oWnd

//----------------------------------------------------------------------------//

function Main()

   local lMail := .t., oBar

   local oMsgItem, oMsgItemMail

   DEFINE WINDOW oWnd TITLE "Testing MsgBar with bitmaps"

   DEFINE BUTTONBAR oBar OF oWnd _3D

   @ 10,10 CHECKBOX lMail PROMPT "E-Mail"  OF oWnd ;
           SIZE 200, 35 COLOR CLR_BLACK ;
           ON CHANGE If( ! lMail, oWnd:oMsgBar:DelItem( oMsgItemMail ), ;
                                  oWnd:oMsgBar:InsItem( oMsgItemMail, 2 ) )

   SET MESSAGE OF oWnd TO "I may use different bitmaps" 2007

   DEFINE MSGITEM oMsgItem OF oWnd:oMsgBar ;
          PROMPT "Lock" ;
          SIZE 60 ;
          BITMAPS "..\bitmaps\16x16\lock.bmp", "..\bitmaps\16x16\unlock.bmp" ;
          ACTION ( oMsgItem:lActive := !oMsgItem:lActive, oMsgItem:Paint() )

   DEFINE MSGITEM oMsgItemMail OF oWnd:oMsgBar ;
          SIZE 24 ;
          BITMAPS "..\bitmaps\16x16\MAIL.BMP" ;
          TOOLTIP "Check the email" + CRLF + "Get email"

   DEFINE MSGITEM OF oWnd:oMsgBar ;
          BITMAPS "..\bitmaps\16x16\PRINTER.BMP" ;
          ACTION PrinterSetup() ;
          TOOLTIP "Setup the printer"

   oWnd:oMsgBar:DateOn()
   oWnd:oMsgBar:ClockOn()

   msginfo( "Antes de activar la ventana" )  //Añadi esto para crear un dialogo antes de activar la ventana

   oMsgItem:SetText("Bloqueo")   //<--- ACA EL PROBLEMA!!!!!!!!!!!!!!!!!!

   ACTIVATE WINDOW oWnd

return nil

//----------------------------------------------------------------------------//


Nuevamente gracias por responder.

Recibe un cordial saludo desde Cochabamba, Bolivia.

Rolando.
RSalazarU
 
Posts: 211
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia

Re: Creo que tengo la solucion

Postby RSalazarU » Fri Oct 14, 2011 12:39 am

Master Antonio:

Siguiendo la lógica del código que me indicaste, entonces en el método ::Refresh() se tiene que reemplazar la llamada a ::Paint() por:

Code: Select all  Expand view
If( IsWindowVisible( ::oMsgBar:hWnd ), ::Paint(),)


Así lo hice y funciono.

Saludos desde Cochabamba - Bolivia.

Rolando.
RSalazarU
 
Posts: 211
Joined: Wed Jul 16, 2008 12:59 pm
Location: Cochabamba-Bolivia

Re: TMsgBar: Ayuda por favor.... RESUELTO!!!

Postby Antonio Linares » Fri Oct 14, 2011 5:54 am

Rolando,

Muy bien! Gracias! :-)
regards, saludos

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

Re: TMsgBar: Ayuda por favor.... RESUELTO!!!

Postby ruben Dario » Thu Oct 27, 2011 4:35 pm

Rolando Gracias.

Hice el cambio que indica Lineares.

METHOD SetText( cMsg ) INLINE ::cMsg := cValToChar( cMsg ), If( IsWindowVisible( ::oMsgBar:hWnd ), ::Paint(),)

Pero solamente Pinta el Num los demas como la fecha , Hora , Ins y Caps quedan igual.

Saludos
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
User avatar
ruben Dario
 
Posts: 1070
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: pablovidal and 37 guests