Page 10 of 10

Re: HMG Graph based on Bos Taurus

Posted: Wed Dec 07, 2016 2:17 pm
by Rathinagiri
Thank you for the tip Grigory Filatov. Now I will check that up!

Re: HMG Graph based on Bos Taurus

Posted: Wed Dec 07, 2016 2:59 pm
by Rathinagiri
Yep! With Grigory's fix, the problem is gone!

Thank you Grigory.

Claudio, can you please leave a patch?

Re: HMG Graph based on Bos Taurus

Posted: Wed Dec 07, 2016 3:07 pm
by gfilatov
Rathinagiri wrote:Yep! With Grigory's fix, the problem is gone!

Thank you Grigory.
Hi Rathi,

You are welcome.

FYI I've fixed the others memory leaks in the C-functions of BosTaurus library also.

It will be available at a next MiniguiEx build 8-)

Re: HMG Graph based on Bos Taurus

Posted: Wed Dec 07, 2016 3:14 pm
by srvet_claudio
gfilatov wrote:
mol wrote:What I need to change? Sources of Bos Taurus?
Hi Marek,

Yes, it is. :cry:

For example, there is the missed cleaning of hBrush variable in the C-function BT_DRAW_HDC_POLY :o

This function should be fixed as below

Code: Select all

HB_FUNC( BT_DRAW_HDC_POLY )
{
   HDC hDC;
   HPEN hPen;
   HBRUSH hBrush;
   HPEN   OldPen;
   HBRUSH OldBrush;
   INT nCountX, nCountY;
   COLORREF ColorLine, ColorFill;
   INT nWidthLine, nLen;
   INT nPOLY, i;
   #ifndef __MINGW_H
      POINT aPoint [2048];
   #endif

   hDC        = (HDC)      HB_PARNL  (1);
   nCountX    = (INT)      hb_parinfa(2,0);
   nCountY    = (INT)      hb_parinfa(3,0);
   ColorLine  = (COLORREF) hb_parnl  (4);
   nWidthLine = (INT)      hb_parni  (5);
   ColorFill  = (COLORREF) hb_parnl  (6);
   nPOLY      = (INT)      hb_parni  (7);

   nLen = min( nCountX, nCountY );

   if ( nLen > 0 )
   {
      #ifdef __MINGW_H
         POINT aPoint[ nLen ];
      #endif
      for ( i=0; i < nLen; i++ )
      {  aPoint[ i ].x = hb_parvni ( 2, i + 1 );
         aPoint[ i ].y = hb_parvni ( 3, i + 1 );
      }
      SaveDC(hDC);
         hPen = CreatePen(PS_SOLID, nWidthLine, ColorLine);
         OldPen = ( HPEN ) SelectObject(hDC, hPen);
         hBrush = CreateSolidBrush( ColorFill );
         OldBrush = ( HBRUSH ) SelectObject(hDC, hBrush);

         switch( nPOLY )
         {
            case BT_DRAW_POLYLINE:
               Polyline( hDC, aPoint, nLen );
               break;
            case BT_DRAW_POLYGON:
               Polygon( hDC, aPoint, nLen );
               break;
            case BT_DRAW_POLYBEZIER:
               PolyBezier( hDC, aPoint, nLen );
               break;
         }

         SelectObject( hDC, OldBrush );
         DeleteObject(hBrush);
         SelectObject( hDC, OldPen );
         DeleteObject(hPen);   
      RestoreDC(hDC, -1);
      hb_retl( TRUE );
   }
   else
      hb_retl( FALSE );
}
Please take a look for the needed additional strings
SelectObject( hDC, OldBrush );
...
SelectObject( hDC, OldPen );
There are a similar bugs with the missed SelectObject calling in the others functions also. :?

Hope that helps :idea:
Thanks Grigory !

Re: HMG Graph based on Bos Taurus

Posted: Wed Dec 07, 2016 6:12 pm
by mol
It's working good now, I think. But, I'm still trying ;-)

Many thanks, Grigorij for your help!