Saludos JLL:
Al comparar el código de
TMsgItem encontré el siguiente cambio en el método
PAINTVer 907
- Code: Select all Expand view RUN
if ::oMsgBar:l2007
::oMsgBar:PaintBar( nLeft, ::nWidth )
endif
Ver 1109
- Code: Select all Expand view RUN
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 RUN
// 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