Page 1 of 1

MSGItem 2007

Posted: Wed Nov 07, 2007 12:05 am
by Silvio
Avevo fatto una piccola modifica sul vecchio msgitem per non vedere i item incavati per questione di estetica infatti avevo modificato nel metodo paint solo la riga :

WndBoxRaised( hDC, 0, nLeft - 4, 22, nLeft + ::nWidth -1)

anzichè

WndBoxIn( hDC, 3, nLeft - 2, ::oMsgBar:nHeight-5, nLeft + ::nWidth - 6 )

il mio problema è adesso che i text li scrive sul fondo bianco ma ho visto che la classe originale lo fa lo stesso anche se crea un Box raised cioè incavato

come posso fare per scrivere il testo in trasparenza cioè senza lo sfondo bianco ?

grazie

Re: MSGItem 2007

Posted: Wed Nov 07, 2007 7:50 am
by Enrico Maria Giordano
Prova a mettere

SetBkMode( hDC, 1 )

prima della chiamata a DrawMsgItem(). Se non funziona allora ci vuole Antonio.

EMG

Posted: Wed Nov 07, 2007 8:01 pm
by Silvio
Mi ero perso a vedere ppc ...solo oggi hoprovato ma non succede niente


METHOD Paint() CLASS TMsgItem

local nCount, nClrBack
local nLeft := ::nLeft()
local hBmp, nBmpWidth := 0
local hDC := ::oMsgBar:GetDC()

if ::hBitmap1 != nil
hBmp = If( ::lActive, ::hBitmap1, ;
If( ::hBitmap2 != nil, ::hBitmap2, ::hBitmap1 ) )
nBmpWidth = nBmpWidth( hBmp )
DrawMasked( hDC, hBmp, 4, nLeft + 1 )
endif

DrawMsgItem( hDC, ::cMsg,;
{ 5, nLeft + nBmpWidth, ::oMsgBar:nHeight-6, nLeft + ( ::nWidth - 7 ) },;
If( ::lActive, ::nClrText, ::nClrDisabled ),;
::nClrPane, ::oFont:hFont )
* WndBoxIn( hDC, 3, nLeft - 2, ::oMsgBar:nHeight-5, nLeft + ::nWidth - 6 )
SetBkMode( hDC, 1 )
WndBoxRaised( hDC, 0, nLeft - 4, 22, nLeft + ::nWidth -1)
::oMsgBar:ReleaseDC()

return nil
Image

Posted: Wed Nov 07, 2007 8:07 pm
by Silvio
l'ho messo anche prima di DrawMsgItem ma non accade niente....

Image

Posted: Thu Nov 08, 2007 11:00 am
by Silvio
ENRICO,

adesso l'ho chiesto a Linares...

Posted: Tue Dec 18, 2007 7:15 am
by Silvio
Enrico nell 'ultima versione il problema non è stato corretto
ho messo il messaggio anche sul forum inglese
inoltre ho l'impressione che tutti sono spariti .... già in vacanze natalizie ?

Posted: Tue Dec 18, 2007 8:59 am
by Enrico Maria Giordano
Andrebbe modificata la funzione DrawMsgItem(). Prova magari a sostituirla con il metodo Say() specificando a .T. il parametro lTrasparent.

EMG

Posted: Tue Dec 18, 2007 9:25 am
by Silvio
Si però... Antonio mi disse che l'avrebbe corretto nella 7.12 !!!!

Posted: Fri Dec 21, 2007 10:08 am
by Silvio
ok corretto quasi tutto :

Code: Select all

#include "FiveWin.ch"

#ifdef __XPP__
   #define New   _New
#endif

//----------------------------------------------------------------------------//
// MODIFIED BY FALCONI SILVIO &  Nageswaragunupudi 
// NOT  remove this 


CLASS TMsgItem

   DATA   oMsgBar
   DATA   cMsg
   DATA   nWidth, nClrText, nClrPane, nClrDisabled
   DATA   bMsg, bAction
   DATA   oFont
   DATA   lActive, lTimer AS LOGICAL
   DATA   lWasActive
   DATA   hBitmap1, hPalette1
   DATA   hBitmap2, hPalette2
   DATA   cToolTip

   METHOD New( oMsgBar, cMsg, nWidth, oFont, nClrText, nClrBack, lAdd,;
               bAction, cBmp1, cBmp2, cToolTip ) CONSTRUCTOR

   METHOD Refresh()

   METHOD SetFont( oFont ) INLINE ::oFont:End(), ::oFont := oFont
   METHOD Paint()

   METHOD SetText( cMsg ) INLINE ::cMsg := cValToChar( cMsg ), ::Paint()

   METHOD Click( nRow, nCol ) INLINE If( ::bAction != nil, Eval( ::bAction, nRow, nCol ),)

   METHOD IsOver( nRow, nCol )

   METHOD nLeft()

ENDCLASS

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

METHOD New( oMsgBar, cMsg, nWidth, oFont, nClrText, nClrBack, lAdd, bAction,;
            cBmp1, cBmp2, cToolTip ) CLASS TMsgItem

   #ifdef __XPP__
      #undef New
   #endif

   DEFAULT nClrText := oMsgBar:nClrText,;
           nClrBack := oMsgBar:nClrPane,;
           lAdd := .f., cMsg := "", cToolTip := ""

   ::oMsgBar = oMsgBar
   ::cMsg    = cMsg
   ::oFont   = If( oFont != nil, oFont, ::oMsgBar:oFont )
   ::bAction = bAction
   ::lActive = .t.
   ::lWasActive = .t.
   ::lTimer  = .f.
   ::cToolTip = cToolTip

   if Valtype( nClrText ) == "C"
      ::nClrText := nGetForeRGB( nClrText )
      ::nClrPane := nGetBackRGB( nClrText )
   else
      ::nClrText := nClrText
      ::nClrPane := nClrBack
   endif

   if cBmp1 != nil
      if File( cBmp1 )
         ::hBitmap1  = ReadBitmap( 0, cBmp1 )
         ::hPalette1 = 0
      else
         ::hBitmap1  = LoadBitmap( GetResources(), cBmp1 )
         ::hPalette1 = 0
      endif

      if ::hBitmap1 == 0
         ::hBitmap1 := nil
      else
         DEFAULT nWidth := nBmpWidth( ::hBitmap1 ) + 7
      endif
   endif

   if cBmp2 != nil
      if File( cBmp2 )
         ::hBitmap2  = ReadBitmap( 0, cBmp2 )
         ::hPalette2 = 0
      else
         ::hBitmap2  = LoadBitmap( GetResources(), cBmp2 )
         ::hPalette2 = 0
      endif
      if ::hBitmap2 == 0
         ::hBitmap2 := nil
      else
         DEFAULT nWidth := nBmpWidth( ::hBitmap2 ) + 7
      endif
   endif

   DEFAULT nWidth := 40

   ::nWidth = nWidth

   if ! Empty( ::cToolTip )
      ::oMsgBar:cToolTip := ""
   endif

   if lAdd
      oMsgBar:AddItem( Self )
   endif

return Self

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

#ifdef __CLIPPER__

static function IsAppThemed()

return .f.

#endif

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

METHOD nLeft() CLASS TMsgItem

   local n := Len( ::oMsgBar:aItem ), nPos := ::oMsgBar:nRight - ;
              If( IsAppThemed(), 13, ;
                  If( IsZoomed( ::oMsgBar:oWnd:hWnd ), 3, 13 ) )

   while n > 0 .and. ! ::oMsgBar:aItem[ n ] == Self
      nPos -= ( ::oMsgBar:aItem[ n ]:nWidth + 4 )
      n--
   end
   nPos -= ( ::nWidth - 2 )

return nPos

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

METHOD IsOver( nRow, nCol ) CLASS TMsgItem

   local nLeft := ::nLeft()

return nCol >= ( nLeft - 1 ) .and. ( nCol <= nLeft + ( ::nWidth - 7 ) ) .and. ;
       nRow > 5

//----------------------------------------------------------------------------//
METHOD Paint() CLASS TMsgItem

   local nCount, nClrBack 
   local nLeft := ::nLeft() 
   local hBmp, nBmpWidth := 0 
   local hDC 

   hDC := ::oMsgBar:GetDC() 

   if ::omsgbar:l2007 

      Gradient( hDC, { 0, nLeft, ::omsgbar:nHeight / 3, nLeft + ::nWidth },; 
                nRGB( 227, 239, 255 ), nRGB( 201, 224, 255 ), .T. ) 
      Gradient( hDC, { ( ::omsgbar:nHeight / 3 ) + 1, nLeft, ::omsgbar:nHeight, nLeft + ::nWidth },; 
                nRGB( 174, 209, 255 ), nRGB( 186, 216, 255 ), .T. ) 
   endif 

   if ::hBitmap1 != nil 
      hBmp = If( ::lActive, ::hBitmap1, ; 
                 If( ::hBitmap2 != nil, ::hBitmap2, ::hBitmap1 ) ) 
      nBmpWidth  = nBmpWidth( hBmp ) 
      DrawMasked( hDC, hBmp, 4, nLeft + 1 ) 
   endif 


   if ::omsgbar:l2007 

      ::oMsgBar:Say( ::oMsgBar:nHeight / 4 - 2,; 
             nLeft + (::nWidth - GetTextWidth( hDC,::cMsg ))/2, ::cMsg, ; 
             iif( ::lActive, ::nClrText, ::nClrDisabled ), ::nClrPane, ; 
             ::oFont, .T., .T. ) 
      wndboxin( hDc, 0, nLeft-1, ::oMsgBar:nHeight, nLeft )   // present test values 


   else 


      DrawMsgItem( hDC, ::cMsg,; 
                { 5, nLeft + nBmpWidth, ::oMsgBar:nHeight-6, nLeft + ( ::nWidth - 7 ) },; 
                If( ::lActive, ::nClrText, ::nClrDisabled ),; 
                ::nClrPane, ::oFont:hFont ) 

      WndBoxIn( hDC, 3, nLeft - 2, ::oMsgBar:nHeight-5, nLeft + ::nWidth - 6 ) // fwh 

   endif 


   ::oMsgBar:ReleaseDC() 


return nil 



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

METHOD Refresh() CLASS TMsgItem

   local cMsg

   if ::bMsg != nil
      cMsg = cValToChar( Eval( ::bMsg ) )
      if cMsg != ::cMsg .or. ::lActive != ::lWasActive
         ::cMsg = cMsg
         ::Paint()
         ::lWasActive = ::lActive
      endif
   endif

return nil

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