Bug in TBar?

User avatar
ukservice
Posts: 417
Joined: Tue Feb 23, 2010 3:09 pm
Location: John

Re: Bug in TBar?

Post by ukservice »

Antonio,

I search into Manual and Wiki for function IsGdiObject() and it does not exist.

My PC has 8 GB of RAM, so I think it is not a question of memory (unless FWH does not manage 8 GB as it happened with nExtMem()).

Point 3 sounds very interesting. I await your instructions.

Thanks a lot.
FWH 11.11, Harbour 3.1 and Borland C++ 5.82
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Bug in TBar?

Post by Daniel Garcia-Gil »

our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
ukservice
Posts: 417
Joined: Tue Feb 23, 2010 3:09 pm
Location: John

Re: Bug in TBar?

Post by ukservice »

Daniel,

How are Bmps painted in Ribbon?. Does Ribbon use TBar?.

How can I track painted bmps?.

Thanks.
FWH 11.11, Harbour 3.1 and Borland C++ 5.82
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Bug in TBar?

Post by Antonio Linares »

Please add this code to your main PRG:

Code: Select all

#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>

static void TransBmp( HBITMAP hBitmap, int iXsize, int iYsize,
               COLORREF rgbTransparent, HDC hDC,
               int iXOffset, int iYOffset, int iWidth, int iHeight )
{
  HDC mDC, nDC;
  HBITMAP hMask, hBmOld1, hBmOld2;
  LPBYTE lpBits;

  mDC = CreateCompatibleDC( hDC );
  
  if( mDC )
  {
    hBmOld1 = ( HBITMAP ) SelectObject( mDC, hBitmap );

    lpBits = ( LPBYTE ) hb_xgrab( iXsize * iYsize * 2 );
    if( lpBits )
    {
      hMask = CreateBitmap( iXsize, iYsize, 1, 1, lpBits );
      if( hMask )
      {
        nDC = CreateCompatibleDC( hDC );
        if( nDC )
        {
          hBmOld2 = ( HBITMAP ) SelectObject( nDC, hMask );
          SetBkColor( mDC, rgbTransparent );

          BitBlt( nDC, 0, 0, iXsize, iYsize, mDC, 0, 0, SRCCOPY );

          SetStretchBltMode( hDC, COLORONCOLOR );

          StretchBlt( hDC, iXOffset, iYOffset, iWidth, iHeight,
                      mDC, 0, 0, iXsize, iYsize,
                      SRCINVERT );

          StretchBlt( hDC, iXOffset, iYOffset, iWidth, iHeight,
                      nDC, 0, 0, iXsize, iYsize,
                      SRCAND );

          StretchBlt( hDC, iXOffset, iYOffset, iWidth, iHeight,
                      mDC, 0, 0, iXsize, iYsize,
                      SRCINVERT );

          SelectObject( nDC, hBmOld2 );
          DeleteDC( nDC );
        }
        else
           MessageBox( 0, "Can't create compatible DC!", "Error", 0 );

        DeleteObject( hMask );
      }
      else
        MessageBox( 0, "Can't create bitmap!", "Error", 0 );

      hb_xfree( lpBits );
    }
    else
            MessageBox( 0, "Can't allocate memory!", "Error", 0 );
    
SelectObject( mDC, hBmOld1 );
    DeleteDC( mDC );
  }
  else
     MessageBox( 0, "Can't create DC!", "Error", 0 );
}

HB_FUNC( TRANSBMP )
{
   TransBmp( ( HBITMAP ) hb_parnl( 1 ), hb_parnl( 2 ), hb_parnl( 3 ), hb_parnl( 4 ),
             ( HDC ) hb_parnl( 5 ), hb_parnl( 6 ), hb_parnl( 7 ), hb_parnl( 8 ), 
             hb_parnl( 9 ) );   
}

#pragma ENDDUMP
 
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
ukservice
Posts: 417
Joined: Tue Feb 23, 2010 3:09 pm
Location: John

Re: Bug in TBar?

Post by ukservice »

Antonio,

It happened today in Ribbon but no messagebox appear!!!.

Is above TransBmp included in FW 11.11?.

Can you check it?.

Thanks.
FWH 11.11, Harbour 3.1 and Borland C++ 5.82
User avatar
ukservice
Posts: 417
Joined: Tue Feb 23, 2010 3:09 pm
Location: John

Re: Bug in TBar?

Post by ukservice »

up
FWH 11.11, Harbour 3.1 and Borland C++ 5.82
User avatar
ukservice
Posts: 417
Joined: Tue Feb 23, 2010 3:09 pm
Location: John

Re: Bug in TBar?

Post by ukservice »

Daniel?.

Any idea or clue?.

Thank you.
FWH 11.11, Harbour 3.1 and Borland C++ 5.82
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Bug in TBar?

Post by Daniel Garcia-Gil »

Hello

i have not any error or bug with this class, can you provide a sample we can reproduce the problem...

thanks
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: Bug in TBar?

Post by Enrico Maria Giordano »

Unfortunately not. It is very very random. Myself I didn't saw the problem anymore.

EMG
User avatar
ukservice
Posts: 417
Joined: Tue Feb 23, 2010 3:09 pm
Location: John

Re: Bug in TBar?

Post by ukservice »

Enrico, thanks for listening.

Daniel, is TransBmp´s funcion pasted above included in FW 11.11?.

Thank you.
FWH 11.11, Harbour 3.1 and Borland C++ 5.82
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Bug in TBar?

Post by Antonio Linares »

John,

yes, it is but without the MessageBox() calls
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
ukservice
Posts: 417
Joined: Tue Feb 23, 2010 3:09 pm
Location: John

Re: Bug in TBar?

Post by ukservice »

Antonio,

I need please latest source with MessageBox in order to trace the bug.

Where should I put the code?.

Thanks.
FWH 11.11, Harbour 3.1 and Borland C++ 5.82
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Bug in TBar?

Post by Antonio Linares »

John,

If you include that code in one of your own PRGs, your function will be used instead of FWH one
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
ukservice
Posts: 417
Joined: Tue Feb 23, 2010 3:09 pm
Location: John

Re: Bug in TBar?

Post by ukservice »

Antonio,

Done.

I also added a number to each message to trace the error:

Code: Select all

#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>

static void TransBmp( HBITMAP hBitmap, int iXsize, int iYsize,
               COLORREF rgbTransparent, HDC hDC,
               int iXOffset, int iYOffset, int iWidth, int iHeight )
{
  HDC mDC, nDC;
  HBITMAP hMask, hBmOld1, hBmOld2;
  LPBYTE lpBits;

  mDC = CreateCompatibleDC( hDC );


  if( mDC )
  {
    hBmOld1 = ( HBITMAP ) SelectObject( mDC, hBitmap );

    lpBits = ( LPBYTE ) hb_xgrab( iXsize * iYsize * 2 );
    if( lpBits )
    {
      hMask = CreateBitmap( iXsize, iYsize, 1, 1, lpBits );
      if( hMask )
      {
        nDC = CreateCompatibleDC( hDC );
        if( nDC )
        {
          hBmOld2 = ( HBITMAP ) SelectObject( nDC, hMask );
          SetBkColor( mDC, rgbTransparent );

          BitBlt( nDC, 0, 0, iXsize, iYsize, mDC, 0, 0, SRCCOPY );

          SetStretchBltMode( hDC, COLORONCOLOR );

          StretchBlt( hDC, iXOffset, iYOffset, iWidth, iHeight,
                      mDC, 0, 0, iXsize, iYsize,
                      SRCINVERT );

          StretchBlt( hDC, iXOffset, iYOffset, iWidth, iHeight,
                      nDC, 0, 0, iXsize, iYsize,
                      SRCAND );

          StretchBlt( hDC, iXOffset, iYOffset, iWidth, iHeight,
                      mDC, 0, 0, iXsize, iYsize,
                      SRCINVERT );

          SelectObject( nDC, hBmOld2 );
          DeleteDC( nDC );
        }
        else
           MessageBox( 0, "(1) Can't create compatible DC!", "Error", 0 );

        DeleteObject( hMask );
      }
      else
        MessageBox( 0, "(2) Can't create bitmap!", "Error", 0 );

      hb_xfree( lpBits );
    }
    else
            MessageBox( 0, "(3) Can't allocate memory!", "Error", 0 );

SelectObject( mDC, hBmOld1 );
    DeleteDC( mDC );
  }
  else
     MessageBox( 0, "(4) Can't create DC!", "Error", 0 );
}

HB_FUNC( TRANSBMP )
{
   TransBmp( ( HBITMAP ) hb_parnl( 1 ), hb_parnl( 2 ), hb_parnl( 3 ), hb_parnl( 4 ),
             ( HDC ) hb_parnl( 5 ), hb_parnl( 6 ), hb_parnl( 7 ), hb_parnl( 8 ),
             hb_parnl( 9 ) );
}

#pragma ENDDUMP
 
Form this .c code, how could I invoke Fivewin´s error system to generate an error.log file with all the debug info to trace this bug?.
FWH 11.11, Harbour 3.1 and Borland C++ 5.82
User avatar
ukservice
Posts: 417
Joined: Tue Feb 23, 2010 3:09 pm
Location: John

Re: Bug in TBar?

Post by ukservice »

Antonio,

I was able to trace the error.

Most of the buttons of the ribbon where painted, but in one case I got:

Error (2) Can't create bitmap!. Please, see above code to see error numbers.

Code: Select all

Stack Calls
===========
   Called from:  => TRANSBMP( 0 )
   Called from: .\source\classes\TRBTN.PRG => TRBTN:PAINT( 1428 )
   Called from: .\source\classes\TRBTN.PRG => (b)TRBTN( 102 )
   Called from: .\source\classes\TRBTN.PRG => TRBTN:DISPLAY( 0 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1665 )
   Called from: .\source\classes\TRBTN.PRG => TRBTN:HANDLEEVENT( 1516 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3160 )
   Called from:  => WINRUN( 0 )
   Called from: .\source\classes\WINDOW.PRG => TWINDOW:ACTIVATE( 989 )
FWH 11.11, Harbour 3.1 and Borland C++ 5.82
Post Reply