Where can I download TWbrowse (Hernan) for FWH?

Where can I download TWbrowse (Hernan) for FWH?

Postby dutch » Tue Feb 10, 2009 7:37 pm

Dear All,

I've used TWbrowse (Hernan) in 16bits since FW2.5 and now I need to use with FWH9.01? I found version 1.7 topic but I cannot find where do I can download.

Thanks in advance,
Dutch
Regards,
Dutch

FWH 19.01 / xHarbour Simplex 1.2.3 / BCC73 / Pelles C / UEStudio
FWPPC 10.02 / Harbour for PPC (FTDN)
ADS V.9 / MySql / MariaDB
R&R 12 Infinity / Crystal Report XI R2
(Thailand)
User avatar
dutch
 
Posts: 1543
Joined: Fri Oct 07, 2005 5:56 pm
Location: Thailand

Re: Where can I download TWbrowse (Hernan) for FWH?

Postby pedrog » Tue Feb 10, 2009 8:45 pm

dutch wrote:Dear All,

I've used TWbrowse (Hernan) in 16bits since FW2.5 and now I need to use with FWH9.01? I found version 1.7 topic but I cannot find where do I can download.

Thanks in advance,
Dutch


I think that in the Tools Forum there are a link to get the TWbrowse 1.7 and much more class.

Pedrog
Pedro
FWH9.06 / XMate 1.15 / Borland C++ 5.5.1 / xHarbour build 1.1.0 Intl. (SimpLex) (Rev. 6195)
User avatar
pedrog
 
Posts: 34
Joined: Tue Dec 30, 2008 7:22 pm
Location: Navarra, Spain

Re: Where can I download TWbrowse (Hernan) for FWH?

Postby Antonio Linares » Tue Feb 10, 2009 8:46 pm

Dutch,

We have just asked Angel to upload it so we can copy it here:

viewtopic.php?f=6&t=14166&start=0
regards, saludos

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

Re: Where can I download TWbrowse (Hernan) for FWH?

Postby dutch » Wed Feb 11, 2009 2:50 am

Dear Antonio,

I've got it but it show compile error as following;
Code: Select all  Expand view  RUN
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
OBJ\WBROWSE.C:
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
Error E2194: Could not find file 'OBJ\TMULTISE.C'
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
SOURCE\WBRWLINE.C:
Error E2451 SOURCE\WBRWLINE.C 210: Undefined symbol 'HB_ITEM' in function PaintTheLine
Error E2379 SOURCE\WBRWLINE.C 210: Statement missing ; in function PaintTheLine
Error E2140 SOURCE\WBRWLINE.C 212: Declaration is not allowed here in function PaintTheLine
Error E2140 SOURCE\WBRWLINE.C 213: Declaration is not allowed here in function PaintTheLine
Error E2140 SOURCE\WBRWLINE.C 214: Declaration is not allowed here in function PaintTheLine
Error E2140 SOURCE\WBRWLINE.C 215: Declaration is not allowed here in function PaintTheLine
Error E2140 SOURCE\WBRWLINE.C 216: Declaration is not allowed here in function PaintTheLine
Error E2140 SOURCE\WBRWLINE.C 217: Declaration is not allowed here in function PaintTheLine
Error E2140 SOURCE\WBRWLINE.C 218: Declaration is not allowed here in function PaintTheLine
Error E2140 SOURCE\WBRWLINE.C 219: Declaration is not allowed here in function PaintTheLine
Error E2140 SOURCE\WBRWLINE.C 220: Declaration is not allowed here in function PaintTheLine
Error E2140 SOURCE\WBRWLINE.C 221: Declaration is not allowed here in function PaintTheLine
Error E2140 SOURCE\WBRWLINE.C 222: Declaration is not allowed here in function PaintTheLine
Error E2140 SOURCE\WBRWLINE.C 223: Declaration is not allowed here in function PaintTheLine
Error E2140 SOURCE\WBRWLINE.C 224: Declaration is not allowed here in function PaintTheLine
Error E2140 SOURCE\WBRWLINE.C 227: Declaration is not allowed here in function PaintTheLine
Error E2451 SOURCE\WBRWLINE.C 312: Undefined symbol 'uElem' in function PaintTheLine
Warning W8065 SOURCE\WBRWLINE.C 314: Call to function 'hb_itemType' with no prototype in function PaintTheLine
Warning W8065 SOURCE\WBRWLINE.C 314: Call to function 'hb_itemGetL' with no prototype in function PaintTheLine
Warning W8065 SOURCE\WBRWLINE.C 317: Call to function 'hb_itemGetNL' with no prototype in function PaintTheLine
Warning W8065 SOURCE\WBRWLINE.C 319: Call to function 'hb_itemClear' with no prototype in function PaintTheLine
Warning W8065 SOURCE\WBRWLINE.C 325: Call to function 'hb_itemType' with no prototype in function PaintTheLine
Warning W8065 SOURCE\WBRWLINE.C 327: Call to function 'hb_itemGetNL' with no prototype in function PaintTheLine
Warning W8065 SOURCE\WBRWLINE.C 331: Call to function 'hb_itemGetCPtr' with no prototype in function PaintTheLine
Warning W8069 SOURCE\WBRWLINE.C 331: Nonportable pointer conversion in function PaintTheLine
Warning W8065 SOURCE\WBRWLINE.C 334: Call to function 'hb_itemClear' with no prototype in function PaintTheLine
Error E2288 SOURCE\WBRWLINE.C 1029: Pointer to structure required on left side of -> or ->* in function HB_FUN_WBRWPANE
Error E2451 SOURCE\WBRWLINE.C 1030: Undefined symbol 'HB_ITEM' in function HB_FUN_WBRWPANE
Error E2379 SOURCE\WBRWLINE.C 1030: Statement missing ; in function HB_FUN_WBRWPANE
Error E2140 SOURCE\WBRWLINE.C 1032: Declaration is not allowed here in function HB_FUN_WBRWPANE
Error E2140 SOURCE\WBRWLINE.C 1033: Declaration is not allowed here in function HB_FUN_WBRWPANE
Error E2140 SOURCE\WBRWLINE.C 1034: Declaration is not allowed here in function HB_FUN_WBRWPANE
Error E2451 SOURCE\WBRWLINE.C 1156: Undefined symbol 'aLine' in function HB_FUN_WBRWPANE
Warning W8065 SOURCE\WBRWLINE.C 1161: Call to function 'hb_itemCopy' with no prototype in function HB_FUN_WBRWPANE
Warning W8065 SOURCE\WBRWLINE.C 1188: Call to function 'hb_itemClear' with no prototype in function HB_FUN_WBRWPANE
Error E2288 SOURCE\WBRWLINE.C 1192: Pointer to structure required on left side of -> or ->* in function HB_FUN_WBRWPANE
Error E2228 SOURCE\WBRWLINE.C 1192: Too many error or warning messages in function HB_FUN_WBRWPANE


This is compile batch file
Code: Select all  Expand view  RUN
@ECHO OFF
CLS
set hdir=d:\harbour
set bcdir=d:\bcc55\bin

%hdir%\bin\harbour SOURCE\WBROWSE.PRG /n /id:\fwh\include;%hdir%\include /oOBJ\WBROWSE.C
%hdir%\bin\harbour SOURCE\TMULTISE.PRG /n /id:\fwh\include;%hdir%\include /oOBJ\TMULTISE.C

rem INICIO Modulos C Generados por Harbour !!!

%bcdir%\bcc32 -M -c -D__HARBOUR__;__FLAT__ -I%hdir%\include  -oOBJ\WBROWSE.OBJ  OBJ\WBROWSE.C
@del OBJ\WBROWSE.c
%bcdir%\bcc32 -M -c -D__HARBOUR__;__FLAT__ -I%hdir%\include  -oOBJ\TMULTISE.OBJ  OBJ\TMULTISE.C
@del OBJ\TMULTISE.c


rem Modulos C Nativos !!!

%bcdir%\bcc32 -M -c -D__HARBOUR__;__FLAT__ -I%hdir%\include;d:\fwh\include -oOBJ\WBRWLINE.OBJ  SOURCE\WBRWLINE.C

@del LIB\TWBRW32.LIB

%bcdir%\tlib c:\twbrowse\lib\TWBRW32.LIB + OBJ\WBROWSE.OBJ
%bcdir%\tlib c:\twbrowse\lib\TWBRW32.LIB + OBJ\WBRWLINE.OBJ
%bcdir%\tlib c:\twbrowse\lib\TWBRW32.LIB + OBJ\TMULTISE.OBJ

Regards,
Dutch
Regards,
Dutch

FWH 19.01 / xHarbour Simplex 1.2.3 / BCC73 / Pelles C / UEStudio
FWPPC 10.02 / Harbour for PPC (FTDN)
ADS V.9 / MySql / MariaDB
R&R 12 Infinity / Crystal Report XI R2
(Thailand)
User avatar
dutch
 
Posts: 1543
Joined: Fri Oct 07, 2005 5:56 pm
Location: Thailand

Re: Where can I download TWbrowse (Hernan) for FWH?

Postby Antonio Linares » Wed Feb 11, 2009 9:34 am

Dear Dutch,

> I've got it

Please post here its complete source code so we can review it, thanks :-)
regards, saludos

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

Re: Where can I download TWbrowse (Hernan) for FWH?

Postby Silvio » Wed Feb 11, 2009 9:40 am

WITH XMATE I CAN COMPILE IT GOOD


this is the xmate env

[Version]
Type=xMate
Number=1.15

[Info]
Type=Library
Architecture=xFiveWin
Include=C:\Work\FWH\INCLUDE
Define=__HARBOUR__;HB_API_MACROS;HB_FM_STATISTICS_OFF

[xMate]
Create Map/List File=No

[Project]
Run=
Params=
Final Path=%HOME%
Maintain LNK=Yes
Default Type=0
Error log=

[Data Path]
Dbf=

[Editor]
C:\work\LIB_32\wbrowse\xharbour\SOURCE\WBROWSE.PRG=1,N,Y

[Files]
%HOME%\SOURCE\WBROWSE.PRG=1,.F.,527,4,
%HOME%\SOURCE\WBRWLINE.C=2,.F.,0,0,
%HOME%\SOURCE\TMULTISE.PRG=3,.F.,0,0,
-------------------------------------------------------------------------------





file xfivewin.env
[Environment]
Description 1=Fivewin per harbour
Description 2=
Description 3=
PRG Compiler ver=
C compiler ver=
Subsystem=
Author=Falconi Silvio
Last update=01/26/2009

[Advanced]
Command types=1,1,1,1,1,1,1,1,1

[Harbour]
HB_INSTALL=c:\work\xHarbour
HB_COMMAND=%HB_BIN_INSTALL%\Harbour.Exe %PRG% /m /n /es2 /i%HB_INC_INSTALL% /iinclude;c:\work\fwh\include;%HB_INSTALL%\include
Option prefix=/

[C]
C_INSTALL=c:\work\BCC55
C_COMP_COMMAND=%C_BIN_INSTALL%\Bcc32.Exe -M -c -O2 -tW -v- -X %CRLF%-DHB_FM_STATISTICS_OFF %CRLF%-DHB_NO_DEFAULT_API_MACROS %CRLF%-DHB_NO_DEFAULT_STACK_MACROS %CRLF%-DHB_OS_WIN_32 %CRLF%-I%C_INC_INSTALL%;%HB_INC_INSTALL% -n%HOME%\Obj %C%%CRLF%
C_LIB_COMMAND=%C_BIN_INSTALL%\TLib.Exe %LIB% /P512 @%RSP% , %LST%
C_LINK_COMMAND=%C_BIN_INSTALL%\iLink32.Exe -Gn -aa -Tpe -s @%LNK%
C_RC_COMMAND=%C_BIN_INSTALL%\Brc32.Exe -r -fo%RES% %RC%
C_DLL_COMMAND=%C_BIN_INSTALL%\iLink32.Exe -Gn -aa -Tpd -M -L%C_LIB_INSTALL% @%LNK%
Option prefix=-

[User]
POSTEXE_COMMAND=c:\work\bin\compress.bat %EXE%
POSTLIB_COMMAND=
POSTDLL_COMMAND=

[Files]
%C_LIB_INSTALL%\C0W32.OBJ=1
C:\Work\FWH\LIB\fivehx.lib=2
C:\Work\FWH\LIB\Fivehc.lib=3
%HB_LIB_INSTALL%\rtl.lib=4
%HB_LIB_INSTALL%\vm.lib=5
%HB_LIB_INSTALL%\gtgui.lib=6
%HB_LIB_INSTALL%\lang.lib=7
%HB_LIB_INSTALL%\macro.lib=8
%HB_LIB_INSTALL%\common.lib=9
%HB_LIB_INSTALL%\pp.lib=10
%HB_LIB_INSTALL%\rdd.lib=11
%HB_LIB_INSTALL%\dbfntx.lib=12
%C_LIB_INSTALL%\CW32.LIB=13
%C_LIB_INSTALL%\IMPORT32.LIB=14
%HB_LIB_INSTALL%\dbfcdx.lib=15
%HB_LIB_INSTALL%\dbffpt.lib=16
%HB_LIB_INSTALL%\hbsix.lib=17
%C_LIB_INSTALL%\PSDK\rasapi32.lib=18
%C_LIB_INSTALL%\PSDK\iphlpapi.lib=19
%C_LIB_INSTALL%\PSDK\nddeapi.lib=20
%C_LIB_INSTALL%\PSDK\msimg32.lib=21
%HB_LIB_INSTALL%\hbzip.lib=22
%HB_LIB_INSTALL%\pcrepos.lib=23

[DLL Files]
%HB_LIB_INSTALL%\harbour.lib=1
%C_LIB_INSTALL%\C0W32.OBJ=2
%C_LIB_INSTALL%\CW32.LIB=3
%C_LIB_INSTALL%\IMPORT32.LIB=4
Best Regards, Saludos

Falconi Silvio
User avatar
Silvio
 
Posts: 3107
Joined: Fri Oct 07, 2005 6:28 pm
Location: Teramo,Italy

Re: Where can I download TWbrowse (Hernan) for FWH?

Postby dutch » Wed Feb 11, 2009 2:37 pm

Dear Antonio,

I've got WBRWLINE.OBJ from the forums and compile fine now (I hope so).
Antonio Linares wrote:Dear Dutch,

> I've got it

Please post here its complete source code so we can review it, thanks :-)


http://www.sendspace.com/file/ls3493

This is WBRWLINE.C

Thanks,
Dutch
Regards,
Dutch

FWH 19.01 / xHarbour Simplex 1.2.3 / BCC73 / Pelles C / UEStudio
FWPPC 10.02 / Harbour for PPC (FTDN)
ADS V.9 / MySql / MariaDB
R&R 12 Infinity / Crystal Report XI R2
(Thailand)
User avatar
dutch
 
Posts: 1543
Joined: Fri Oct 07, 2005 5:56 pm
Location: Thailand

Re: Where can I download TWbrowse (Hernan) for FWH?

Postby dutch » Thu Feb 12, 2009 8:00 am

Dear Antonio,

I got WBRWLINE.OBJ (compiled with xHarbour) from the forum. I try to build Harbour but it is not compatible.
Have anyone use TWBRW32.LIB with Harbour (FTDN)? I cannot compile WBRWLINE.C because it has many error.

Thanks&Regards,
Dutch

PS. Should I change xHarbour (FTDN) instead of Harbour? Because I found many guru in here use xHarbour.
What is the advantage of xHarbour?
Regards,
Dutch

FWH 19.01 / xHarbour Simplex 1.2.3 / BCC73 / Pelles C / UEStudio
FWPPC 10.02 / Harbour for PPC (FTDN)
ADS V.9 / MySql / MariaDB
R&R 12 Infinity / Crystal Report XI R2
(Thailand)
User avatar
dutch
 
Posts: 1543
Joined: Fri Oct 07, 2005 5:56 pm
Location: Thailand

Re: Where can I download TWbrowse (Hernan) for FWH?

Postby Antonio Linares » Thu Feb 12, 2009 9:34 am

Dutch,

I have modified the wbrwline.c that you provided me to properly compile with Harbour:
http://www.mediafire.com/?sharekey=ad58 ... 0a1ae8665a

I have not tested it myself, so please test it and lets see if it works or crashes :-) Thanks,

Regarding Harbour or xHarbour, I would suggest you to keep compatibility in your PRG code, so you can build your application with both compilers.

Here it is the modified source code:
wbrwline.c
Code: Select all  Expand view  RUN
void * __conArrayGet( void *, void *, ... );
long __conGetNL( void *, long * );
long __conRelease( void * );

#include <hbapi.h>
#include <Windows.h>

#ifdef __HARBOUR__
   #include <hbVm.h>
   #include <hbapiitm.h>
   #define MoveTo( hDC, x, y ) MoveToEx( hDC, x, y, NULL )
   #define _PutSym( _SymEval ) hb_vmPushSymbol( &hb_symEval )
   #define _xPushM  hb_vmPush
   #define _PutLN   hb_vmPushLong
   #define _xEval   hb_vmDo
   #define _cEval0  hb_vmEvalBlock
   #define _Get_Sym hb_dynsymFindName
   #define PCLIPVAR PHB_ITEM
#endif

#define HA_LEFT    0  // by CeSoTech Alineaciones Horizontales y Verticales
#define HA_RIGHT   1
#define HA_CENTER  2
#define VA_TOP     4
#define VA_BOTTOM  8
#define VA_CENTER  32


static far BOOL bAdjLastCol  ; // CeSoTech
static far BOOL bAdjBrowse   ; // CeSoTech
static far BOOL bDrawHeaders ; // CeSoTech
static far BOOL bDrawFooters ; // CeSoTech
static far WORD wHeaderHeight; // CeSoTech
static far WORD wFooterHeight; // CeSoTech
static far WORD wLineHeight  ; // CeSoTech

static far BOOL bWorking;

WORD WBrwRowsC( HWND hWnd, HDC hDC, HFONT hFont ); // CeSoTech

static void FW_DrawText( HDC hDC, RECT * rct, LPCSTR pText,
                         WORD wAlign, int iLen, HFONT hFont,
                         BOOL bHeadFoot ) ; // CeSoTech
static void FW_DrawBitmapCenter( HDC hDC, HBITMAP hBmp, RECT * rct, WORD nStyle, BOOL bFocused ) ;

void MaskRegion( HDC hDC, RECT * rct, COLORREF cTrColor,
                 COLORREF cBackColor );

FrameDot( HDC hDC, RECT * pRect );

extern void WndDrawBox( HDC, LPRECT, HPEN, HPEN );
extern void DrawBitmap( HDC, HBITMAP, WORD wCol, WORD wRow, WORD wWidth,
                        WORD wHeight, DWORD dwRaster );


static void near PaintTheLine( HDC hDC, RECT * rct, WORD wIndex,
                               PCLIPVAR pAtext, PCLIPVAR pAsizes,
                               HPEN hWhitePen, HPEN hGrayPen, BOOL bTree,
                               PCLIPVAR pAJustify, WORD wPressed,
                               BOOL bHeader, WORD nStyle,
                               WORD nFocus, BOOL bFocused,
                               PCLIPVAR pTextColor, PCLIPVAR pBkColor,
                               WORD wRowPos, WORD nHeightCtrl,
                               LONG nClrLine, BOOL bFooter,
                               BOOL bSelect, PCLIPVAR pFont,
                               BOOL bDrawFocusRect ) ;



void DrawMasked( HDC, HBITMAP, WORD wCol, WORD wRow );
                  // LOW    HIGH
extern int _dvtoi( DWORD, DWORD );
void MsgStr( long l );
LPSTR Str( WORD w );

#ifndef __FLAT__
   static int near GetInt( PCLIPVAR Array, WORD wIndex );
   static far PCLIPSYMBOL pSkip = 0;
#else
   static long near GetInt( void * Array, WORD wIndex );
   // static far void * pSkip = 0;
   PHB_DYNS pSkip = NULL;
#endif

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

static void MaskRegion( HDC hdc, RECT * rct, COLORREF cTransparentColor,
                        COLORREF cBackgroundColor )

{
   HDC        hdcTemp, hdcObject, hdcBack, hdcMem;
   POINT      ptSize;
   COLORREF   cColor;
   HBITMAP    bmAndObject, bmAndBack, bmBackOld, bmObjectOld,
              bmAndTemp, bmTempOld, bmAndMem, bmMemOld;
   HBRUSH     hBrush, hBrOld;

   ptSize.x = rct->right - rct->left + 1;
   ptSize.y = rct->bottom - rct->top + 1;

   hBrush      = CreateSolidBrush(cBackgroundColor);

   hdcTemp     = CreateCompatibleDC(hdc);
   hdcObject   = CreateCompatibleDC(hdc);
   hdcBack     = CreateCompatibleDC(hdc);
   hdcMem      = CreateCompatibleDC(hdc);

   bmAndTemp   = CreateCompatibleBitmap(hdc, ptSize.x, ptSize.y);
   bmAndMem    = CreateCompatibleBitmap(hdc, ptSize.x, ptSize.y);
   bmAndObject = CreateBitmap(ptSize.x, ptSize.y, 1, 1, NULL);
   bmAndBack   = CreateBitmap(ptSize.x, ptSize.y, 1, 1, NULL);

   bmTempOld   = SelectObject(hdcTemp, bmAndTemp);
   bmMemOld    = SelectObject(hdcMem, bmAndMem);
   bmBackOld   = SelectObject(hdcBack, bmAndBack);
   bmObjectOld = SelectObject(hdcObject, bmAndObject);

   hBrOld      = SelectObject(hdcMem, hBrush);

   BitBlt(hdcTemp, 0, 0, ptSize.x, ptSize.y, hdc, rct->left, rct->top, SRCCOPY);

   SetMapMode(hdcTemp, GetMapMode(hdc));

   cColor = SetBkColor(hdcTemp, cTransparentColor);

   BitBlt(hdcObject, 0, 0, ptSize.x, ptSize.y, hdcTemp, 0, 0, SRCCOPY);

   SetBkColor(hdcTemp, cColor);

   BitBlt(hdcBack, 0, 0, ptSize.x, ptSize.y, hdcObject, 0, 0, NOTSRCCOPY);
   PatBlt(hdcMem, 0,0, ptSize.x, ptSize.y, PATCOPY);
   BitBlt(hdcMem, 0, 0, ptSize.x, ptSize.y, hdcObject, 0, 0, SRCAND);
   BitBlt(hdcTemp, 0, 0, ptSize.x, ptSize.y, hdcBack, 0, 0, SRCAND);
   BitBlt(hdcMem, 0, 0, ptSize.x, ptSize.y, hdcTemp, 0, 0, SRCPAINT);
   BitBlt(hdc, rct->left, rct->top, ptSize.x, ptSize.y, hdcMem, 0, 0, SRCCOPY);

   DeleteObject(SelectObject(hdcMem, hBrOld));
   DeleteObject(SelectObject(hdcTemp, bmTempOld));
   DeleteObject(SelectObject(hdcMem, bmMemOld));
   DeleteObject(SelectObject(hdcBack, bmBackOld));
   DeleteObject(SelectObject(hdcObject, bmObjectOld));
   DeleteDC(hdcMem);
   DeleteDC(hdcBack);
   DeleteDC(hdcObject);
   DeleteDC(hdcTemp);
}

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

#ifdef __CLIPPER__
static int near GetInt( PCLIPVAR Array, WORD wIndex )
{
    int iRet = 0;
    _cAt( Array, wIndex, -1, ++_tos );

    if( _tos->wType & NUMERIC )
        iRet = (int) _tos->pPointer1;

    else if( _tos->wType & NUM_FLOAT )
        iRet = _dvtoi( (DWORD) _tos->pPointer1, (DWORD) _tos->pPointer2 );

    --_tos;

    return iRet;
}
#endif

#ifdef __XPP__
static long GetInt( void * Array, WORD wIndex )
{
   void * chItem = 0;
   long l;

   __conArrayGet( Array, chItem, wIndex, 0 );
   __conGetNL( chItem, &l );
   __conRelease( chItem );

   return l;
}
#endif

#ifdef __HARBOUR__
   #define GetInt( Array, wIndex )  hb_arrayGetNL( Array, wIndex )
#endif

//-----------------------------------------------------------------------=
                                                        // ÚÄ1ra Col.a Pintar
                                                        // ³
static void near PaintTheLine( HDC hDC, RECT * rct, WORD wIndex,
                               PCLIPVAR pAtext, PCLIPVAR pAsizes,
                               HPEN hWhitePen, HPEN hGrayPen, BOOL bTree,
                               PCLIPVAR pAJustify, WORD wPressed,
                               BOOL bHeader, WORD nStyle,
                               WORD wFocus, BOOL bFocused,
                               PCLIPVAR pTextColor, PCLIPVAR pBkColor,
                               WORD wRowPos, WORD nHeightCtrl,
                               LONG nClrLine, BOOL bFooter,
                               BOOL bSelect, PCLIPVAR pFont,
                               BOOL bDrawFocusRect )
{
   RECT box, wholebox, rctadj;
   int iMaxRight = rct->right;

   WORD wLenJust = 0 ;
   #ifndef __HARBOUR__
   WORD wLen     = _VARRAYLEN( pAtext );
   CLV_WORD lJustify;
   #else
   WORD wLen     = hb_arrayLen( pAtext );
   PHB_ITEM pElem;
   #endif
   WORD wType, wcLen;
   LONG lValue;
   char * cValue;
   HPEN hOldPen, hPen;
   BITMAP bmp;
   WORD wRow, wCol;
   LONG lColor ;
   HBRUSH hBrush;
   LONG lTextColorOld = -1 ; // CeSoTech
   LONG lBkColorOld   = -1 ; // CeSoTech
   PCLIPVAR pEvalOld ;
   HFONT hFont ; // CeSoTech
   WORD wAlign ; // CeSoTech

   // CeSoTech
   LONG nClrLineC = ( nStyle == 2 || nStyle == 6 || nStyle == 8 ||
                      nStyle == 10 ) ? GetSysColor( COLOR_BTNSHADOW ) : 0 ;

   // CeSoTech
   if ( nClrLine >= 0 )   // Desde Clipper manda color especifico linea
      nClrLineC = nClrLine ;

   if ( ! bDrawHeaders )
      bHeader = FALSE ;

   if ( bFooter )
      bHeader = TRUE ; //-> Para que lo pinte con similar aspecto

   //CeSoTech
   // Si es un estilo sin separadores horizontales, pintar uno mas arriba
   //CeSoTech para que que bien completa el area !!!
   if ( ! (bHeader) && (nStyle == 0 || nStyle == 5 || nStyle == 6 ||
                        nStyle == 9 || nStyle == 10) )
      rct->top--       ;

   wholebox.top    = rct->top+1;
   wholebox.left   = rct->left;
   wholebox.bottom = rct->bottom;
   wholebox.right  = rct->right;

   rct->right  = 0;

   box.top    = rct->top ;
   box.bottom = rct->bottom - 1;

   if( !wIndex | wIndex > wLen )
       wIndex = 1;

   if ( pAJustify )
      #ifndef __HARBOUR__
         wLenJust = _VARRAYLEN( pAJustify );
      #else
         wLenJust = hb_arrayLen( pAJustify );
//         uElem.type = HB_IT_NIL;
      #endif


   while( wIndex <= wLen )
   {

        rct->left   = rct->right;

        rct->right  = ( wIndex == wLen ? iMaxRight
                                      : rct->left + GetInt( pAsizes, wIndex ) );

        // CeSoTech // Cuando estoy estoy en la ultima celda, NO pintar hasta
                    // el final si no existe ajuste de ultima columna.
        if ( ( wIndex == wLen ) && ( ! bAdjLastCol )  )
        {
           rct->right  = rct->left + GetInt( pAsizes, wIndex ) +(bHeader ? 1: 0) ;
           if ( !bAdjBrowse )
              wholebox.right = rct->right ; // Tambien ajusto el borde focus

        }
        // CeSoTech //


        wAlign = HA_LEFT | VA_CENTER ;  // Alineacion por defecto
        wcLen = 0;
        ///////// INICIO Toma de datos celda !!!

        #ifndef __HARBOUR__
           if ( wIndex <= wLenJust )
           {
             _cAt( pAJustify, wIndex, 0xFFFF, ( PCLIPVAR ) &lJustify );
             wAlign = lJustify.wWord ;
           }
           _cAt( pAtext, wIndex, 0xFFFF, ++_tos );
           wType = _tos->wType;
           if ( wType & NUMERIC )
              lValue = (LONG) _tos->pPointer1;
           if ( wType & CHARACTER )
           {
              cValue = _VSTR( _tos );
              wcLen = _tos->w2;
           }
        #else

           if ( wIndex <= wLenJust )
           {   
                 hb_itemClear( pElem );
              hb_arrayGet( pAJustify, wIndex, pElem );
              if ( ( hb_itemType( pElem ) & HB_IT_LOGICAL ) && hb_itemGetL( pElem ) )
                 wAlign = HA_RIGHT | VA_CENTER ;
              else
                 wAlign = hb_itemGetNL( pElem );

           hb_itemClear( pElem );
           }   
         

           hb_itemClear( pElem ); 
           hb_arrayGet( pAtext, wIndex, pElem );
           wType = hb_itemType( pElem );
           if ( wType & HB_IT_NUMERIC )
              lValue = hb_itemGetNL( pElem );
           if ( wType & HB_IT_STRING )
           {
//              cValue = hb_itemGetC( &uElem );
            cValue = hb_itemGetCPtr( pElem );
                wcLen = strlen( cValue );
           }
           hb_itemClear( pElem );

        #endif
        ///////// FIN Toma de datos celda !!!



        if( wFocus > 0 && wIndex != wFocus )
        {
           #ifndef __HARBOUR__
              _tos--;
           #endif

           if( rct->right >= iMaxRight )
           {
               wIndex = wLen + 1;   // ya no pintamos m s
           }
           else
              ++wIndex;
           continue;
        }
   
        if( bTree ||
            (GetInt( pAsizes, wIndex ) > 0) ) //Si NO es columna oculta (x Freeze)
        {                                     //(Es lo mismo no hacer esto,
                                              // pero es para evitar hacer trabajar
                                              // al codigo sin sentido !!! )

           if( (wType & HB_IT_NUMERIC ) && bTree )
           {
               if( lValue )
               {
                  FillRect( hDC, rct, hBrush = CreateSolidBrush( GetPixel( hDC, rct->left, rct->top ) ) );
                  DrawMasked( hDC, (HBITMAP) lValue, rct->top, rct->left );
                  DeleteObject( hBrush );
               }

           }
           else  // Si es Numerico Bmp no Tree, o , es Character !!!!
           {

               if ( pBkColor )  // Bloque de Color Fondo Celda
               {
                  _PutSym( _SymEval );
                  _xPushM( pBkColor );
                  _PutLN( wRowPos );
                  _PutLN( wIndex );
                  _PutLN( bFooter ? 2 : ( bHeader ? 1 : ( bSelect ? 3 : 0 ) ) );
                  _xEval( 3 ) ;
                  if ( hb_parinfo( -1 ) & HB_IT_NUMERIC )
                    lBkColorOld = SetBkColor( hDC, hb_parnl( - 1 ) ) ;
               }

               if( pTextColor ) // Bloque de Color Texto Celda
               {
                  _PutSym( _SymEval );
                  _xPushM( pTextColor );
                  _PutLN( wRowPos );
                  _PutLN( wIndex );
                  _PutLN( bFooter ? 2 : ( bHeader ? 1 : ( bSelect ? 3 : 0 ) ) );
                  _xEval( 3 ) ;
                  if ( hb_parinfo( -1 ) & HB_IT_NUMERIC )
                    lTextColorOld = SetTextColor( hDC, hb_parnl( - 1 ) ) ;
               }

               hFont = 0 ;
               if( pFont )      // Bloque de Font Celda
               {
                  _PutSym( _SymEval );
                  _xPushM( pFont );
                  _PutLN( wRowPos );
                  _PutLN( wIndex );
                  _PutLN( bFooter ? 2 : ( bHeader ? 1 : ( bSelect ? 3 : 0 ) ) );
                  _xEval( 3 ) ;
                  if ( hb_parinfo( -1 ) & HB_IT_NUMERIC )
                     hFont = (HFONT) hb_parnl( - 1 ) ;
               }


               /////// CeSoTech ///////
               if (!bHeader) rct->top ++;


               if( wType & HB_IT_NUMERIC )   // Es un BitMap
               {
                  FW_DrawBitmapCenter( hDC, (HBITMAP) lValue, rct, nStyle, bSelect );
               }
               else                    // Es una Cadena
               {
                  FW_DrawText( hDC, rct,
                               ( wType & HB_IT_STRING ) ? cValue : "",
                               wAlign, wcLen, hFont, bHeader ) ;
               }


               /////// CeSoTech restauracion de colores //////
               if ( lTextColorOld >= 0 )
               {
                  SetTextColor( hDC, lTextColorOld ) ;
                  lTextColorOld = -1 ;
               }
               if ( lBkColorOld >= 0 )
               {
                  SetBkColor( hDC, lBkColorOld ) ;
                  lBkColorOld = -1 ;
               }


               /// CeSoTech ///
               // Si hay modalidad ajustar el Browse y no hay ajuste de ultima
               // columna, deber‚ pintar hasta el final hasta cubrir toda
               // el area, hasta llegar a la derecha del control. (Col.Ficticia)
               if ( bAdjBrowse && wIndex == wLen && !bAdjLastCol &&
                    rct->right <= iMaxRight )
               {
                  rctadj.top    = rct->top;
                  rctadj.left   = rct->right ;
                  rctadj.bottom = rct->bottom;
                  rctadj.right  = wholebox.right  ;

                  if ( nStyle == 3 )
                     rctadj.top--;

                  if ( wFocus == 0 )  // Si No es CellStyle (Pinto hasta final)
                     ExtTextOut( hDC, 0, rct->top, ETO_OPAQUE, &rctadj, "", 0, 0 );

                  if ( bHeader && nStyle==3 ) // Pinto Bordes Header Falso
                   {
                      rctadj.right  = wholebox.right - 2  ;
                      rctadj.bottom = rctadj.bottom - 2 ;
                      WndDrawBox( hDC, &rctadj, hWhitePen, hGrayPen );   
                      rctadj.bottom++  ;
                      rctadj.right++  ;
                      WndDrawBox( hDC, &rctadj, hWhitePen, GetStockObject( BLACK_PEN ) ); 

                      if ( bFooter ) // Si es Footer (Linea Negra de Arriba Foot)
                      {
                        hPen = GetStockObject( BLACK_PEN );
                        hOldPen = SelectObject( hDC, hPen );
                        MoveTo( hDC, rctadj.left-1, rctadj.top-1 );
                        LineTo( hDC, rctadj.right+1, rctadj.top-1 );
                        SelectObject( hDC, hOldPen );
                      }

                  }

               }
               /// CeSoTech Fin ///

               if (!bHeader) rct->top --;
           }

           box.left   = rct->left;

           box.right  = ( wIndex < wLen && rct->right <= iMaxRight ?
                                                        rct->right - 1 :
                                                        iMaxRight - 1 );

           // CeSoTech // El Borde derecho de Box de la ultima columna,
                       // no estirarlo cuando no exista ajuste de ultima columna
                       // PERO cuando nLineStyle (nStyle) es 7/8 (Lineas Horiz)
                       // queda anti-estetico cortar los renglones, cuando no hay
                       // ajuste ult.col. y hay ajuste de browse. Por ello
                       // se verificara que para cortar el borde no se de esta
                       // condicion.
           if ( ( wIndex == wLen ) && ( ! bAdjLastCol ) )
           {
              if (! (!bHeader && (nStyle==7 || nStyle==8) && !bAdjLastCol && bAdjBrowse) )
               box.right  = rct->left + GetInt( pAsizes, wIndex ) - 1 ;
           }
           // CeSoTech //



           if( ! bTree )
           {
              if( wPressed && ( wIndex == wPressed ) )
              {
                WndDrawBox( hDC, &box, hGrayPen, hWhitePen );
              }
              else
/////////////  if(!bHeader)
               if(!bHeader || (bHeader && nStyle!=3) )
               {
                  switch( nStyle )
                  {
                     case 0:
                        break;
                     case 1:
                    //  hOldPen = SelectObject( hDC, GetStockObject( BLACK_PEN ) );
                        hPen = CreatePen(PS_SOLID, 0, nClrLineC );
                        hOldPen = SelectObject( hDC, hPen);
                        MoveTo( hDC, box.left, box.bottom+1 );
                        LineTo( hDC, box.left, box.top );
                        LineTo( hDC, box.right+1, box.top );
                        LineTo( hDC, box.right+1,  box.bottom+1 );
                        LineTo( hDC, box.left, box.bottom+1 );
                        SelectObject( hDC, hOldPen );
                        DeleteObject( hPen);
                        break;
                     case 2:
                        hPen = CreatePen(PS_SOLID, 0, nClrLineC );
                        hOldPen = SelectObject( hDC, hPen);
                        MoveTo( hDC, box.left, box.bottom+1 );
                        LineTo( hDC, box.left, box.top );
                        LineTo( hDC, box.right+1, box.top );
                        LineTo( hDC, box.right+1,  box.bottom+1 );
                        LineTo( hDC, box.left, box.bottom+1 );
                        SelectObject( hDC, hOldPen );
                        DeleteObject( hPen);
                        break;
                     case 3:
                        WndDrawBox( hDC, &box, hWhitePen, hGrayPen );
                        break;
                     case 4:
                        box.bottom ++;
                        box.right ++;
                        FrameDot( hDC, &box );
                        box.bottom --;
                        box.right --;
                        break;
                     case 7:
                     case 8:
                        hPen = CreatePen(PS_SOLID, 0, nClrLineC );
                        hOldPen = SelectObject( hDC, hPen);
                        MoveTo( hDC, box.left, box.top );
                        LineTo( hDC, box.right+1, box.top );
                        MoveTo( hDC, box.right+1,  box.bottom+1 );
                        LineTo( hDC, box.left, box.bottom+1 );
                        SelectObject( hDC, hOldPen );
                        DeleteObject( hPen);
                        break;
                     case 5:
                     case 6:
                     case 9:
                     case 10:
                        hPen = CreatePen(PS_SOLID, 0, nClrLineC);
                        hOldPen = SelectObject( hDC, hPen);
                        if (box.left>1)
                        {
                           MoveTo( hDC, box.left, box.bottom+1 );
                           LineTo( hDC, box.left, box.top );
                        }
                        MoveTo( hDC, box.right+1, box.top );

                        if ( bDrawFooters && nStyle >= 9 )
                        {
                        LineTo( hDC, box.right+1,
                                     nHeightCtrl - (wFooterHeight+1) ) ;
                        } else {
                          LineTo( hDC, box.right+1,
                                     nStyle < 9 ? box.bottom+1 : nHeightCtrl );
                        }

                        SelectObject( hDC, hOldPen );
                        DeleteObject( hPen);
                        break;
                  }
               }
               else  // Box para Headers !!!
               {
                  box.left ++;

                  // CeSoTech
                  if ( bFooter ) // Linea negra sobre el Footer
                  {
                    hPen = GetStockObject( BLACK_PEN );
                    hOldPen = SelectObject( hDC, hPen );
                    MoveTo( hDC, box.left-1, box.top-1 );
                    LineTo( hDC, box.right+1, box.top-1 );
                    SelectObject( hDC, hOldPen );
                  }

                  box.right--  ;
                  box.bottom-- ;
                  WndDrawBox( hDC, &box, hWhitePen, hGrayPen );
                  box.bottom++  ;
                  box.right++  ;
                  WndDrawBox( hDC, &box, hWhitePen, GetStockObject( BLACK_PEN ) );

                  box.left --;

               }
           }
           else
           {
              if( ! ( wType & HB_IT_NUMERIC ) )
              {
                 box.left -= 16;
              }
           }

          // CeSoTech if( bFocused && wFocus > 0 && wIndex == wFocus )
           if( bDrawFocusRect && bFocused && wFocus > 0 &&
               wIndex == wFocus && nStyle != 3)
           {
            rct->left++;
            rct->top++;
            DrawFocusRect( hDC, rct );
            rct->left--;
            rct->top--;
           }

        }

        #ifndef __HARBOUR__
           _tos--;
        #endif

        if( rct->right >= iMaxRight )
        {
            wIndex = wLen + 1;   // ya no pintamos m s
        }
        else
           ++wIndex;


   }


   


   if (bDrawFocusRect && !bTree && bFocused && wFocus==0 && nStyle!=3) // CeSoTech
      DrawFocusRect( hDC, &wholebox );

}

//---------------------------------------------------------------------------//
#ifdef __HARBOUR__
HARBOUR HB_FUN_WBRWSELBOX()
#else
CLIPPER WBRWSELBOX( PARAMS ) // ( hWnd, hDC, nRow, nFirstCol, nCurCol,;
                             //   lFocus, aSizes, hFont)
#endif
{
   HWND hWnd        = (HWND) hb_parnl( 1 );
   HDC hDC          = (HDC) hb_parnl( 2 );
   WORD wRow        = hb_parni( 3 );
   WORD wIndex      = hb_parni( 4 );
   WORD wCol        = hb_parni( 5 );
   BOOL bFocused    = hb_parl( 6 );
   PCLIPVAR pAsizes = hb_param( 7, -1 );
   HFONT hFont      = (HFONT) hb_parnl( 8 );
   BOOL bDestroyDC  = FALSE;
   TEXTMETRIC tm;
   RECT rct;
   HFONT hOldFont;

   if( ! hDC )
   {
      bDestroyDC = TRUE;
      hDC = GetDC( hWnd );
   }

   if( hFont )
      hOldFont = SelectObject( hDC, hFont );

   GetClientRect( hWnd, &rct );
   GetTextMetrics( hDC, &tm );

   if( hFont )
      SelectObject( hDC, hOldFont );

   tm.tmHeight += 1;

   if ( ! bDrawHeaders )  // By CeSoTech
      wRow-- ;

   rct.top    = tm.tmHeight * wRow ;
   rct.bottom = tm.tmHeight * ( wRow + 1) - 1;
   rct.left   = 0;

   while( wIndex < wCol )
      rct.left  += GetInt( pAsizes, wIndex++ );

   rct.right  =  rct.left+GetInt( pAsizes, wCol ) - 1;

   MaskRegion( hDC, &rct, GetBkColor( hDC ), GetSysColor(COLOR_ACTIVECAPTION) );

   if( bFocused )
      DrawFocusRect( hDC, &rct );

   if( bDestroyDC )
      ReleaseDC( hWnd, hDC );
}

//---------------------------------------------------------------------------//
#ifdef __HARBOUR__
HARBOUR HB_FUN_WBRWLINE()
#else
CLIPPER WBRWLINE( PARAMS ) // ( hWnd, hDC, nRow, aText, aSizes, nFirstItem, ;
                           // nClrFore, nClrBack, hFont, lTree, aJustify, nPressed,
                           // nStyle, nColAct, lFocused )
                           // bTextColor, bBkColor, nClrLine, lFooter, lSelect,
                           // bFont, lDrawFocusRect ) // New's by CesoTech
#endif

{
   HWND hWnd        = (HWND) hb_parnl( 1 );
   HDC hDC          = (HDC) hb_parnl( 2 );
   WORD wRow        = hb_parni( 3 );
   BOOL bDestroyDC  = FALSE;
   WORD wHeight;
   RECT rct, box;
   PCLIPVAR bClrFore, bClrBack;
   COLORREF clrFore = 0;
   COLORREF clrBack = 0;
   HPEN hGrayPen    ;
   HPEN hWhitePen   ;
   HFONT hFont      = (HFONT) hb_parnl( 9 );
   HFONT hOldFont;
   BOOL bTree      = hb_parl( 10 );
   BOOL bFooter = HB_IS_LOGICAL( 19 ) ? hb_parl( 19 ) : FALSE ;  // CeSoTech

   WORD nHeightCtrl ; // by CeSoTech

   hGrayPen    = CreatePen( PS_SOLID, 1, GetSysColor( COLOR_BTNSHADOW ) ) ; // RGB( 128, 128, 128 ) );
   hWhitePen   = CreatePen( PS_SOLID, 1, GetSysColor( COLOR_BTNHIGHLIGHT ) ); // GetStockObject( WHITE_PEN );


   if( hb_pcount() > 6 )
   {
      if( HB_IS_BLOCK( 7 ) )
      {
         bClrFore = hb_param( 7, -1 );
         _cEval0( bClrFore );
         clrFore = hb_parnl( -1 );
      }
      else
         clrFore = hb_parnl( 7 );
   }

   if( hb_pcount() > 7 )
   {
      if( HB_IS_BLOCK( 8 ) )
      {
         bClrBack = hb_param( 8, -1 );
         _cEval0( bClrBack );
         clrBack = hb_parnl( -1 );
      }
      else
         clrBack = hb_parnl( 8 );
   }

   if( ! hDC )
   {
      bDestroyDC = TRUE;
      hDC = GetDC( hWnd );
   }

   if( hFont )
      hOldFont = SelectObject( hDC, hFont );

   GetClientRect( hWnd, &rct );

   nHeightCtrl = rct.bottom-rct.top ; // by CeSoTech

   SetTextColor( hDC, clrFore );
   SetBkColor( hDC, clrBack );

   wHeight = wLineHeight + 1 ;

   if ( ( wRow == 0 ) && bDrawHeaders )  // Es una Cabecera
      wHeight = wHeaderHeight + 1 ;

   if ( ! bFooter )
   {
      if ( ( wRow == 0 ) && bDrawHeaders )  // Es una Cabecera
      {
         rct.top    = 0 ;
         rct.bottom = wHeaderHeight + 1 ;
      }
      else
      {
        rct.top    = ( bDrawHeaders ? wHeaderHeight+1 : 0 ) + (wHeight * (wRow-1) )  ;
        rct.bottom = ( bDrawHeaders ? wHeaderHeight+1 : 0 ) + (wHeight * wRow)  ;
      }

   } else {
      rct.top    = rct.bottom - (wFooterHeight+1) ;
   }

   rct.left   = 0;

   PaintTheLine( hDC, &rct, hb_parni( 6 ), hb_param( 4, -1 ), hb_param( 5, -1 ),
                 hWhitePen, hGrayPen, bTree,
                 HB_IS_ARRAY(11) ? hb_param( 11, -1 ) : 0, hb_parni( 12 ),
                 (wRow == 0), hb_parni( 13 ),
                 hb_parni( 14 ), hb_parl( 15 ),
                 HB_IS_BLOCK( 16 ) ? hb_param( 16, -1 ) : 0,   // CeSoTech
                 HB_IS_BLOCK( 17 ) ? hb_param( 17, -1 ) : 0,   // CeSoTech
                 wRow, nHeightCtrl,                      // CeSoTech
                 HB_IS_NUMERIC( 18 ) ? hb_parnl( 18 ) : -1,        // CeSoTech
                 bFooter,                                // CeSoTech
                 HB_IS_LOGICAL( 20 ) ? hb_parl( 20 ) : FALSE,  // CeSoTech
                 HB_IS_BLOCK( 21 ) ? hb_param( 21, -1 ) : 0,   // CeSoTech
                 HB_IS_LOGICAL( 22 ) ? hb_parl( 22 ) : FALSE );// CeSoTech

   DeleteObject( hGrayPen );
   DeleteObject( hWhitePen );

   if( hFont )
      SelectObject( hDC, hOldFont );

   if( bDestroyDC )
       ReleaseDC( hWnd, hDC );

   hb_reta( 2 );
   hb_storni( rct.top,    -1, 1 );
   hb_storni( rct.bottom, -1, 2 );

}

//---------------------------------------------------------------------------//
#ifdef __HARBOUR__
HARBOUR HB_FUN_AWBRWROWDIM()
#else
CLIPPER AWBRWROWDIM( PARAMS )
#endif

{
   HWND hWnd      = (HWND) hb_parnl( 1 );
   WORD wRow      = (WORD) hb_parnl( 2 );
   HFONT hFont    = (HFONT) hb_parnl( 3 );
   HFONT hOldFont;
   HDC  hDC       = GetDC( hWnd );
   TEXTMETRIC tm;

   if( hFont )
      hOldFont = SelectObject( hDC, hFont );

   GetTextMetrics( hDC, &tm );
   tm.tmHeight += 1;

   if( hFont )
      SelectObject( hDC, hOldFont );

   ReleaseDC( hWnd, hDC );

   hb_reta( 2 );
   hb_storni( tm.tmHeight * wRow++, -1, 1 );
   hb_storni( tm.tmHeight * wRow,   -1, 2 );
}

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

WORD ScreenBaseX( WORD wX )
{
    return 4 * wX / LOWORD( GetDialogBaseUnits() );
}

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

WORD ScreenBaseY( WORD wY )
{
    return 8 * wY / HIWORD( GetDialogBaseUnits() );
}


//---------------------------------------------------------------------------//
#ifdef __HARBOUR__
HARBOUR HB_FUN_WBRWRECT()
#else
CLIPPER WBrwRect( PARAMS ) // ( hWnd, nRow, aSizes, nFirstItem, nCol,
                           //   nLineStyle, nWidthVScroll )
#endif
{
   HWND hWnd        = ( HWND ) hb_parnl( 1 );

   HDC hDC          = GetDC( hWnd );
   WORD wRow        = hb_parni( 2 );
   WORD wHeight ;
   RECT rct;
   WORD nStyle = HB_IS_NUMERIC( 6 ) ? hb_parni( 6 ) : -1 ; // CeSoTech


   #ifdef __CLIPPER__
      PCLIPVAR paSizes = hb_param( 3, 0x8000 );
      WORD wLen        = _VARRAYLEN( paSizes );
   #else
      #ifdef __HARBOUR__
//       void * paSizes = ( void * ) hb_param( 3, HB_IT_ARRAY );
         WORD wLen      = hb_parinfa( 3, 0 );
      #else
         void * paSizes = ( void * ) hb_param( 3, 0x8000 );
         WORD wLen      = _VARRAYLEN( paSizes );
      #endif
   #endif
   WORD wIndex      = hb_parni( 4 );
   WORD wCol        = hb_parni( 5 );
   WORD wMaxRight;
   LONG l;

   if( !wCol || wCol > wLen )
        return;


   GetWindowRect( hWnd, &rct );
   wMaxRight = rct.right - 2;

   wHeight = wLineHeight + 1 ;

   rct.top    = rct.top + ( bDrawHeaders ? wHeaderHeight+1 : 0 ) +
                (wHeight * (wRow-1) ) ;


   rct.bottom = rct.top + wHeight;
   rct.right  = rct.left;

   while( wIndex <= wCol )
   {
        rct.left   = rct.right;

        #ifndef __FLAT__

           rct.right  = ( wIndex == wLen && bAdjLastCol ? wMaxRight
                                         : rct.left + GetInt( paSizes, wIndex ) );

        #else
           #ifndef __HARBOUR__
              #define hb_parnl(x,y) PARNL(x,params,y);
           #endif
           l = hb_parnl( 3, wIndex );

           rct.right  = ( wIndex == wLen && bAdjLastCol ? wMaxRight
                                         : rct.left + l );
        #endif

        if( rct.right >= wMaxRight )
        {
            wIndex = wCol + 1;   // ya no pintamos m s
            rct.right = wMaxRight;
        }
        else
            wIndex++;
   }



   ReleaseDC( hWnd, hDC );

   hb_reta( 4 );

   #ifdef __XPP__
      #define hb_storni( x, y, z ) STORNI( x, params, y, z )
   #endif


   // Si es un estilo sin separadores horizontales, pintar uno mas arriba
   //CeSoTech para que que bien completa el area !!!
   if (nStyle == 0 || nStyle == 5 || nStyle == 6 || nStyle == 9 || nStyle == 10)
      rct.top-- ;  // Las coord.de edicion deberan ser mas arriba tambien !!!


   hb_storni( rct.top,    -1, 1 );
   hb_storni( rct.left,   -1, 2 );
   hb_storni( rct.bottom, -1, 3 );
   hb_storni( ( wMaxRight <= rct.right ) ?
              wMaxRight - hb_parni( 7 ) : rct.right, -1, 4 );
}

//---------------------------------------------------------------------------//
#ifdef __HARBOUR__
HARBOUR HB_FUN_WBRWPANE()
#else
CLIPPER WBRWPANE( PARAMS ) // ( hWnd, hDC, Self, bLine, aSizes, nFirstItem,
                           //   nClrFore, nClrBack, hFont, aJustify, nStyle
                           //   lCellStyle, lFocused ) -> nRowsSkipped
                           //   bTextColor, bBkColor, nClrLine, nColorFondo, bFont ) // New's by CesoTech
#endif
{
   HWND hWnd        = ( HWND ) hb_parnl( 1 );
   HDC hDC          = ( HDC ) hb_parnl( 2 );
   WORD wRows;
   WORD wLastBottom = 0;
   WORD wRow        = 1;
   WORD wSkipped    = 1;
   PCLIPVAR Self    = hb_param( 3, -1 );
   PCLIPVAR bLine   = hb_param( 4, -1 );
   PCLIPVAR pASizes = hb_param( 5, -1 );
   HFONT hFont      = ( HFONT ) hb_parnl( 9 );
   HFONT hOldFont;
   BOOL bDestroyDC  = FALSE;
   WORD wHeight ;
   RECT rct, box, client;
   WORD wIndex      = hb_parni( 6 );
   PCLIPVAR bClrFore = 0, bClrBack = 0;
   COLORREF clrFore = 0;
   COLORREF clrBack = 0;
   HPEN hGrayPen    = CreatePen( PS_SOLID, 1, GetSysColor( COLOR_BTNSHADOW ) ) ; // RGB( 128, 128, 128 ) );
   HPEN hWhitePen   = CreatePen( PS_SOLID, 1, GetSysColor( COLOR_BTNHIGHLIGHT ) ); // GetStockObject( WHITE_PEN );
   #ifndef __HARBOUR__
   BOOL bColBlock   = pASizes->wType & BLOCK;
   #else
   BOOL bColBlock   = HB_IS_BLOCK( pASizes );
   PHB_ITEM aLine;   
   #endif
   PCLIPVAR pAJustify = HB_IS_ARRAY( 10 ) ? hb_param( 10, -1 ): 0;
   WORD nHeightCtrl ; // by CeSoTech
   WORD nStyle = hb_parni( 11 );



   if( hb_pcount() > 6 )
   {
      if( HB_IS_BLOCK( 7 ) )
         bClrFore = hb_param( 7, -1 );
      else
         clrFore = hb_parnl( 7 );
   }

   if( hb_pcount() > 7 )
   {
      if( HB_IS_BLOCK( 8 ) )
      {
         bClrBack = hb_param( 8, -1 );
         _cEval0( bClrBack );
         clrBack = hb_parnl( -1 );
      }
      else
         clrBack = hb_parnl( 8 );
   }

   if( ! hDC )
   {
      bDestroyDC = TRUE;
      hDC = GetDC( hWnd );
   }

   if( ! pSkip )
       pSkip = _Get_Sym( "SKIP" );

   if( hFont )
      hOldFont = SelectObject( hDC, hFont );

   /////////////////////////
   // Borremos el Area de la derecha no coubierta
   if ( !bAdjBrowse && !bAdjLastCol )
   {
       GetClientRect( hWnd, &rct );
       SetBkColor( hDC, hb_parnl( 17 ) ) ;

       for( wIndex=wIndex ; wIndex <= (WORD) hb_parinfa( 5, NULL); wIndex++ )
       {
            rct.left += hb_parni( 5, wIndex ) ;
       }

       if ( !(nStyle == 0 || nStyle == 7 || nStyle == 8 || nStyle == 3) )
          rct.left++;

       ExtTextOut( hDC, rct.left, rct.top, ETO_OPAQUE | ETO_CLIPPED,
                   &rct, "", 0, 0 );

       wIndex = hb_parni( 6 );
       GetClientRect( hWnd, &rct );
   }
   /////////////////////////

   GetClientRect( hWnd, &client );

   nHeightCtrl = client.bottom-client.top ; // by CeSoTech

   wHeight = wLineHeight + 1 ;

   wRows = WBrwRowsC( hWnd, hDC, hFont );

   if( ! bClrFore )
      SetTextColor( hDC, clrFore );
      SetBkColor( hDC, clrBack );

   while( wRow <= wRows && wSkipped == 1 )
   {
      rct.top    = client.top + ( bDrawHeaders ? wHeaderHeight+1 : 0 ) +
                   (wHeight * (wRow-1) ) ;

      rct.bottom = rct.top + wHeight;
      rct.left   = 0;
      rct.right  = client.right;

      #ifndef __HARBOUR__

         _cEval0( bLine );
         _xPushM( _eval );

         if( bClrFore )
         {
            _cEval0( bClrFore );
            SetTextColor( hDC, hb_parnl( -1 ) );
         }

         if( bClrBack )
         {
            _cEval0( bClrBack );
            SetBkColor( hDC, hb_parnl( -1 ) );
         }

         if( bColBlock )
            _cEval0( pASizes );

         PaintTheLine( hDC, &rct, wIndex, _tos,
                       ( bColBlock ? _eval : pASizes ),
                       hWhitePen, hGrayPen,
                       bColBlock, pAJustify, 0, FALSE, hb_parni( 11 ),
                       hb_parni ( 12 ), hb_parl( 13 ),
                       HB_IS_BLOCK( 14 ) ? hb_param( 14, -1 ) : 0,   // CeSoTech
                       HB_IS_BLOCK( 15 ) ? hb_param( 15, -1 ) : 0,   // CeSoTech
                       wRow, nHeightCtrl,                      // CeSoTech
                       HB_IS_NUMERIC( 16 ) ? hb_parnl( 16 ) : -1,        // CeSoTech
                       FALSE, FALSE,                           // CeSoTech
                       HB_IS_BLOCK( 18 ) ? hb_param( 18, -1 ) : 0,   // CeSoTech
                       FALSE ) ;

         _tos--;

         _PutSym( pSkip );
         _xPushM( Self );
         _PutQ( 1 );
         _xSend( 1 );

      #else
      {               
         hb_itemClear( aLine );

         // Esta extension de xHarbour no se puede aplicar en Harbour
         // hb_itemForwardValue( &aLine, hb_vmEvalBlock( bLine ) );
      
         hb_itemCopy( aLine, hb_vmEvalBlock( bLine ) );

         if( bClrFore )
         {
            _cEval0( bClrFore );
            SetTextColor( hDC, hb_parnl( -1 ) );
         }

         if( bClrBack )
         {
            _cEval0( bClrBack );
            SetBkColor( hDC, hb_parnl( -1 ) );
         }

         PaintTheLine( hDC, &rct, wIndex, aLine,
                       ( bColBlock ? hb_vmEvalBlock( pASizes ) : pASizes ),
                       hWhitePen, hGrayPen,
                       bColBlock, pAJustify, 0, FALSE, hb_parnl( 11 ),
                       hb_parnl ( 12 ), hb_parl( 13 ),
                       HB_IS_BLOCK( 14 ) ? hb_param( 14, -1 ) : 0,   // CeSoTech
                       HB_IS_BLOCK( 15 ) ? hb_param( 15, -1 ) : 0,   // CeSoTech
                       wRow, nHeightCtrl,                      // CeSoTech
                       HB_IS_NUMERIC( 16 ) ? hb_parnl( 16 ) : -1,        // CeSoTech
                       FALSE, FALSE,                           // CeSoTech
                       HB_IS_BLOCK( 18 ) ? hb_param( 18, -1 ) : 0,   // CeSoTech
                       FALSE ) ;

         hb_itemClear( aLine );

         if ( pSkip )
         {
            hb_vmPushSymbol( pSkip );
            hb_vmPush( Self );
            hb_vmPushLong( 1 );
            hb_vmDo( 1 );
         }
      }

      #endif

      wLastBottom = rct.bottom ;
      wSkipped = hb_parni( -1 );

      if( wSkipped == 1 )
          wRow++;
   }

   ////////////////////////
   // Borremos el Area de Abajo no cubierta
   GetClientRect( hWnd, &rct );
   SetBkColor( hDC, hb_parnl( 17 ) ) ;

   rct.top = wLastBottom + 1 ;
   if ( wLastBottom == 0 ) // No Mostro Registros
      rct.top = ( bDrawHeaders ? wHeaderHeight+1 : 0 ) ;
   
   rct.bottom-=  1 + ( bDrawFooters ? wFooterHeight+1 : 0 ) ;

   if (nStyle == 0 || nStyle == 5 || nStyle == 6 ||
       nStyle == 9 || nStyle == 10 || nStyle == 3 )
      rct.top--;

   if ( !bDrawFooters )
      rct.bottom++;


   if ( rct.top < rct.bottom )
   {
      ExtTextOut( hDC, rct.left, rct.top, ETO_OPAQUE | ETO_CLIPPED,
                  &rct, "", 0, 0 );
   }
   ////////////////////////

   DeleteObject( hGrayPen );
   DeleteObject( hWhitePen );

   if( hFont )
      SelectObject( hDC, hOldFont );

   if( bDestroyDC )
       ReleaseDC( hWnd, hDC );


   hb_retni( wRow );

}

       
//---------------------------------------------------------------------------//
#ifdef __HARBOUR__
HARBOUR HB_FUN_WBRWSET()
#else
CLIPPER WBrwSet() // ( lAdjLastCol, lAdjBrowse, lDrawHeaders, lDrawFooters )
#endif
{                                                                  // CeSoTech
    bAdjLastCol  =  hb_parl( 1 ) ; // Ajuste o no de ultima columna al control.
    bAdjBrowse   =  hb_parl( 2 ) ; // Ajuste del Browse a la derecha
                                 // cuando no existe ajuste de ultima columna.
    bDrawHeaders = hb_parl( 3 )  ; // Si quiere visualizar Headers !!!
    bDrawFooters = hb_parl( 4 )  ; // Si se quiere visualizar Footers !!!

    wHeaderHeight= hb_parni( 5 )  ;
    wFooterHeight= hb_parni( 6 )  ;
    wLineHeight  = hb_parni( 7 )  ;

}

//----------------------------------------------------------------------------//
// Devuelve Nro. de Filas de Datos (No incluye Headers ni Footers)
static WORD WBrwRowsC( HWND hWnd, HDC hDC, HFONT hFont )
{
   WORD wHeight;
   RECT rct;
   WORD wRows;
   BOOL bDCDestroy = FALSE;
   HFONT hOldFont;

   if( ! hDC )
   {
      bDCDestroy = TRUE;
      hDC = GetDC( hWnd );
   }

   if( hFont )
      hOldFont = SelectObject( hDC, hFont );

   wHeight = wLineHeight + 1 ;

   GetClientRect( hWnd, &rct );
   wRows = ( ( rct.bottom - rct.top - 2 ) -
             ( bDrawHeaders ? wHeaderHeight+1 : 0 ) -
             ( bDrawFooters ? wFooterHeight+1 : 0 ) ) / wHeight ;

   if( hFont )
      SelectObject( hDC, hOldFont );

   if( bDCDestroy )
      ReleaseDC( hWnd, hDC );

   return wRows;
}

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

#ifdef __HARBOUR__
HARBOUR HB_FUN_WBRWROWS()
#else
CLIPPER WBrwRows( PARAMS ) // ( hWnd, hDC, hFont )
#endif
{
   hb_retni( WBrwRowsC( ( HWND ) hb_parnl( 1 ), ( HDC ) hb_parnl( 2 ),
                      ( HFONT ) hb_parnl( 3 ) ) );
}
//----------------------------------------------------------------------------//

#ifdef __HARBOUR__
HARBOUR HB_FUN_WBRWSCRL()
#else
CLIPPER WBrwScrl( PARAMS ) // ( hWnd, nRows, hFont, nLineStyle, hDC )
#endif
{
   HWND hWnd   = ( HWND ) hb_parnl( 1 );
   int wRows  = hb_parni( 2 );
   HFONT hFont = ( HFONT ) hb_parnl( 3 );
   HFONT hOldFont;
   HDC hDC = ( HDC ) hb_parnl( 5 );  //  = GetDC( hWnd );
   RECT rct;
   WORD nStyle = hb_parni( 4 );

   if( hFont )
      hOldFont = SelectObject( hDC, hFont );

   GetClientRect( hWnd, &rct );

   if ( bDrawHeaders )
      rct.top += wHeaderHeight+1 ;


   // Defino Bottom de Area del Scroll
   rct.bottom = ( WBrwRowsC( hWnd, hDC, hFont ) * (wLineHeight+1) ) +
                ( bDrawHeaders ? wHeaderHeight+1 : 0 )  ;


   // Si es un estilo sin separadores horizontales, pintar uno mas arriba
   // CeSoTech para que que bien completa el area !!!
   // El Area Scroll deber  entonces no tomar el separator (forma parte de ant)
   if ( !(nStyle == 0 || nStyle == 5 || nStyle == 6 ||
          nStyle == 9 || nStyle == 10 || nStyle == 3 ) )
      rct.bottom++;   // Debe tomarse dado que no pinta celda 1 una mas arriba

  // ScrollWindowEx( hWnd, 0, -( (wLineHeight+1) * wRows ), 0, &rct, 0, 0, 0 );

   ScrollDC( hDC, 0, -( (wLineHeight+1) * wRows ), 0, &rct, 0, 0 );



   if( hFont )
      SelectObject( hDC, hOldFont );

  //  ReleaseDC( hWnd, hDC );
}

//----------------------------------------------------------------------------//
#ifdef __HARBOUR__
HARBOUR HB_FUN_WBRWHEIGHT()
#else
CLIPPER WBrwHeight( PARAMS ) // ( hWnd, hFont )
#endif
{
   HWND hWnd   = ( HWND ) hb_parnl( 1 );
   HFONT hFont = ( HFONT ) hb_parnl( 2 );
   HFONT hOldFont;
   HDC hDC     = GetDC( hWnd );
   TEXTMETRIC tm;

   if( hFont )
      hOldFont = SelectObject( hDC, hFont );

   GetTextMetrics( hDC, &tm );
   hb_retni( tm.tmHeight ) ;

   if( hFont )
      SelectObject( hDC, hOldFont );

   ReleaseDC( hWnd, hDC );
}

//----------------------------------------------------------------------------//
static void FW_DrawText( HDC hDC, RECT * rct, LPCSTR pText,
                         WORD wAlign, int iWidth,
                         HFONT hFont, BOOL bHeadFoot )

{
   RECT rcttmp     ;
   int iHeight     ;
   UINT uiFlag     ;
   HFONT hOldFont  ;
   int iFactor     ;

   if( hFont )
      hOldFont = SelectObject( hDC, hFont );

   /////////////////////////////
   // Alineaciones Verticales //
   /////////////////////////////
   iHeight = DrawText( hDC, pText, iWidth, &rcttmp, DT_CALCRECT ) ;
   iFactor = ( ( rct->bottom - rct->top ) - iHeight ) / 2 ;

   if ( wAlign & VA_TOP )
      iFactor = 0 ;

   if ( wAlign & VA_BOTTOM )
   {
      iFactor = ( rct->bottom - rct->top ) - iHeight - ( bHeadFoot ? 1 : 0 ) ;
   }


   rcttmp.top    = rct->top + iFactor ;
   rcttmp.bottom = rct->bottom ;
   rcttmp.left   = rct->left   ;
   rcttmp.right  = rct->right  ;


   if ( rcttmp.top < rct->top )
     rcttmp.top = rct->top ;

   ///////////////////////////////
   // Alineaciones Horizontales //
   ///////////////////////////////
   uiFlag = DT_LEFT ;
   rcttmp.left+= 2 ;

   if ( wAlign & HA_CENTER )
   {
     rcttmp.left-= 2 ;
     uiFlag = DT_CENTER ;
   }

   if ( wAlign & HA_RIGHT )
   {
     rcttmp.left-= 2 ;
     uiFlag = DT_RIGHT ;
     rcttmp.right-= 2 + ( bHeadFoot ? 1 : 0 ) ;
   }


   ExtTextOut( hDC, 0, 0, ETO_OPAQUE | ETO_CLIPPED, rct, "", 0, 0 ) ;
   DrawText( hDC, pText, iWidth, &rcttmp, uiFlag | DT_NOPREFIX ) ;

   if( hFont )
      SelectObject( hDC, hOldFont );

}















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

static void FW_DrawBitmapCenter( HDC hDC, HBITMAP hBmp, RECT * rct, WORD nStyle, BOOL bSelect )
{
   WORD wWidth   ;
   WORD wHeight  ;
   WORD wRow ;
   WORD wCol ;
   BITMAP bm;
   LONG lBkColorBMP, lBkColor = GetBkColor( hDC );
   BOOL bFlag = FALSE ;

   if ( (nStyle == 0 || nStyle == 3 || nStyle == 5 ||
         nStyle == 6 || nStyle == 9 || nStyle == 10) && bSelect )
   {
      rct->bottom-- ;
      bFlag = TRUE ;
   }

   wWidth  = rct->right - rct->left ;
   wHeight = rct->bottom - rct->top ;
   GetObject( hBmp, sizeof( BITMAP ), ( LPSTR ) &bm );

   if ( wHeight > bm.bmHeight )
   {
      wRow = rct->top + ( ( wHeight - bm.bmHeight ) / 2 ) ;
      wHeight = bm.bmHeight ;
   } else
   {
      wRow = rct->top ;
   }

   if ( wWidth > bm.bmWidth )
   {
      wCol = rct->left + ( ( wWidth - bm.bmWidth ) / 2 ) ;
      wWidth = bm.bmWidth ;
   } else
   {
      wCol = rct->left ;
   }

   rct->bottom++;
   ExtTextOut( hDC, 0, rct->top, ETO_OPAQUE, rct, "", 0, 0 );
   rct->bottom--;

   if ( hBmp > 0 )
   {
      DrawBitmap( hDC, hBmp, wRow, wCol, wWidth, wHeight, 0 ) ;
      if( ( lBkColorBMP = GetPixel( hDC, wCol, wRow ) ) != lBkColor)
           MaskRegion( hDC, rct, lBkColorBMP, lBkColor );
   }

   if (bFlag)
      rct->bottom++ ;


}

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



/*******


static void FW_DrawBitmapCenter( HDC hDC, HBITMAP hBmp, RECT * rct, WORD nStyle, BOOL bSelect )
{
   WORD wWidth   ;
   WORD wHeight  ;
   WORD wRow ;
   WORD wCol ;
   BITMAP bm;
   LONG lBkColorBMP, lBkColor = GetBkColor( hDC ), lBkColorOld;
   BOOL bFlag = FALSE ;

   RECT rRect ;
   HDC hDC2 ;   
   HBITMAP hBmp2, hBmpOld ;


   if ( (nStyle == 0 || nStyle == 3 || nStyle == 5 ||
          nStyle == 6 || nStyle == 9 || nStyle == 10) && bSelect )
   {
      rct->bottom-- ;
      bFlag = TRUE ;
   }

   ///////////////////////////////
   // Creo un buffer auxiliar ////
   rRect.top    = 0 ;
   rRect.left   = 0 ;
   rRect.right  = rct->right - rct->left ;
   rRect.bottom = rct->bottom - rct->top ; 

   hDC2    = CreateCompatibleDC( hDC );
   hBmp2   = CreateCompatibleBitmap( hDC, rRect.right, rRect.bottom );
   hBmpOld = SelectObject( hDC2, hBmp2 );
   BitBlt( hDC2, 0, 0, rRect.right, rRect.bottom, hDC, 0, 0, SRCCOPY );
   ///////////////////////////////

 
   wWidth  = rct->right - rct->left ;
   wHeight = rct->bottom - rct->top ;
   GetObject( hBmp, sizeof( BITMAP ), ( LPSTR ) &bm );

   if ( wHeight > bm.bmHeight )
   {
      wRow = 0 + ( ( wHeight - bm.bmHeight ) / 2 ) ;
      wHeight = bm.bmHeight ;
   } else
   {
      wRow = 0 ;
   }

   if ( wWidth > bm.bmWidth )
   {
      wCol = 0 + ( ( wWidth - bm.bmWidth ) / 2 ) ;
      wWidth = bm.bmWidth ;
   } else
   {
      wCol = 0 ;
   }

   rRect.bottom++;
   lBkColorOld = SetBkColor( hDC2, lBkColor );
   ExtTextOut( hDC2, 0, 0, ETO_OPAQUE, &rRect, "", 0, 0 );
   rRect.bottom--;

   if ( hBmp > 0 )
   {
      DrawBitmap( hDC2, hBmp, wRow, wCol, wWidth, wHeight, 0 ) ;
      if( ( lBkColorBMP = GetPixel( hDC2, wCol, wRow ) ) != lBkColor)
           MaskRegion( hDC2, &rRect, lBkColorBMP, lBkColor );
   }

   ///////////////////////////////
   // Pego el buffer auxiliar ////
   BitBlt( hDC, rct->left, rct->top, rRect.right, rRect.bottom, hDC2, 0, 0, SRCCOPY ); 
   SetBkColor( hDC2, lBkColorOld );
   SelectObject( hDC2, hBmpOld );
   DeleteObject( hBmp2 );
   DeleteObject( hBmpOld );
   DeleteDC( hDC2 );
   ///////////////////////////////

   if (bFlag)
      rct->bottom++ ;

}


************/




















//----------------------------------------------------------------------------//
#ifdef __HARBOUR__
HARBOUR HB_FUN_FWDISPBEGIN()
#else
CLIPPER FWDISPBEGI( PARAMS ) // ( hWnd, hDC )
#endif
{
  HWND hWnd        = ( HWND ) hb_parnl( 1 );
  HDC hDC          = ( HDC ) hb_parnl( 2 );   
  HDC hDC2 ;   
  HBITMAP hBmp, hBmpOld ;
  RECT rct;
 
  GetClientRect( hWnd, &rct );
   
  hDC2    = CreateCompatibleDC( hDC );
  hBmp    = CreateCompatibleBitmap( hDC, rct.right - rct.left, rct.bottom - rct.top );
  hBmpOld = SelectObject( hDC2, hBmp );
  BitBlt( hDC2, 0, 0, rct.right, rct.bottom, hDC, 0, 0, SRCCOPY );
 
  hb_reta( 5 );
  hb_stornl( (LONG) hWnd   , -1, 1 );
  hb_stornl( (LONG) hDC    , -1, 2 );
  hb_stornl( (LONG) hDC2   , -1, 3 );
  hb_stornl( (LONG) hBmp   , -1, 4 );
  hb_stornl( (LONG) hBmpOld, -1, 5 );

   return;
}




//----------------------------------------------------------------------------//
#ifdef __HARBOUR__
HARBOUR HB_FUN_FWDISPEND()
#else
CLIPPER FWDISPEND( PARAMS ) // { hWnd, hDC, hDC2, hBmp, hBmpOld }
#endif
{
   RECT rct;
 
   GetClientRect( (HWND) hb_parnl( 1, 1 ), &rct );

   BitBlt( (HDC) hb_parnl( 1, 2 ), 0, 0, rct.right - rct.left, rct.bottom - rct.top, (HDC) hb_parnl( 1, 3 ), 0, 0, SRCCOPY );     
   SelectObject( (HDC) hb_parnl( 1, 3 ), (HBITMAP) hb_parnl( 1, 5 ) );
   DeleteObject( (HBITMAP) hb_parnl( 1, 4 ) );
   DeleteObject( (HBITMAP) hb_parnl( 1, 5 ) );
   DeleteDC( (HDC) hb_parnl( 1, 3 ) );
   
   hb_retnl( (LONG) hb_parnl( 1, 2 ) ) ;

   return ;
}   
regards, saludos

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

Re: Where can I download TWbrowse (Hernan) for FWH?

Postby dutch » Thu Feb 12, 2009 3:18 pm

Dear Antonio,

I add this line in CONFIGS\HARBOUR\APPLICATION but it seem TWBRW32.LIB is not including in the program.
Because :Set3DStyle() is unknow message.
Code: Select all  Expand view  RUN
LIBS4 = $(FWH)\LIB\SBUTTONH.LIB $(FWH)\LIB\TWBRW32.LIB D:\noway\Lib\Harbour\b32\noway.lib $(HPATHL)\hbmzip.lib $(HPATHL)\hbzlib.lib $(FWH)\LIB\ACE32.LIB $(HPATHL)\rddads.lib
LIBS = $(LIBS4) $(LIBS1) $(LIBS2) $(LIBS3)


Code: Select all  Expand view  RUN
Application
===========
   Path and name: D:\V5\QUOTE\QUOTE.EXE (32 bits)
   Size: 2,311,680 bytes
   Time from start: 0 hours 0 mins 9 secs
   Error occurred at: 12/02/2009, 22:15:26
   Error description: Error BASE/1004  Message not found: TWBROWSE:SET3DSTYLE
   Args:
     [   1] = O   Object

Stack Calls
===========
   Called from:  => __ERRRT_SBASE(0)
   Called from:  => TWBROWSE:ERROR(170)
   Called from: source\rtl\tobject.prg => (b)HBOBJECT(105)
   Called from:  => TWBROWSE:MSGNOTFOUND(0)
   Called from:  => TWBROWSE:SET3DSTYLE(164)
   Called from: D:\V5\QUOTE\QUOTE.prg => REPORT(1179)
   Called from: D:\V5\QUOTE\QUOTE.prg => (b)BUILDOUTBAR(135)
   Called from:  => (b)ADDITEM(193)
   Called from:  => TBTNBMP:CLICK(389)
   Called from:  => TBTNBMP:LBUTTONUP(560)
   Called from:  => TWINDOW:HANDLEEVENT(0)
   Called from:  => TCONTROL:HANDLEEVENT(1451)
   Called from:  => TBTNBMP:HANDLEEVENT(1025)
   Called from: .\source\classes\WINDOW.PRG => _FWH(3333)
   Called from:  => WINRUN(0)
   Called from:  => TWINDOW:ACTIVATE(952)
   Called from: D:\V5\QUOTE\QUOTE.prg => MAIN(79)


I don't know what I do wrong?

Help please,

Regards,
Dutch
Regards,
Dutch

FWH 19.01 / xHarbour Simplex 1.2.3 / BCC73 / Pelles C / UEStudio
FWPPC 10.02 / Harbour for PPC (FTDN)
ADS V.9 / MySql / MariaDB
R&R 12 Infinity / Crystal Report XI R2
(Thailand)
User avatar
dutch
 
Posts: 1543
Joined: Fri Oct 07, 2005 5:56 pm
Location: Thailand

Re: Where can I download TWbrowse (Hernan) for FWH?

Postby Antonio Linares » Thu Feb 12, 2009 4:13 pm

Dutch,

To test it, for now, please copy (TWBRW32.LIB) wbrowse.prg contents to the bottom of your main PRG.

Once it is working, then we will check why it is not getting linked into the EXE.
regards, saludos

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

Re: Where can I download TWbrowse (Hernan) for FWH?

Postby dutch » Thu Feb 12, 2009 4:39 pm

Dear Antonio,

I add TMULTISE.PRG WBROWSE.PRG into Project and add WBRWLINE.OBJ (your upload and .C) to build. Now It quit without error message.

Regards,
Dutch
Regards,
Dutch

FWH 19.01 / xHarbour Simplex 1.2.3 / BCC73 / Pelles C / UEStudio
FWPPC 10.02 / Harbour for PPC (FTDN)
ADS V.9 / MySql / MariaDB
R&R 12 Infinity / Crystal Report XI R2
(Thailand)
User avatar
dutch
 
Posts: 1543
Joined: Fri Oct 07, 2005 5:56 pm
Location: Thailand

Re: Where can I download TWbrowse (Hernan) for FWH?

Postby Antonio Linares » Thu Feb 12, 2009 6:51 pm

Dutch,

Please check if there is an error.log file.

If not, then please provide me here those files so we can build an example here, thanks
regards, saludos

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

Re: Where can I download TWbrowse (Hernan) for FWH?

Postby dutch » Fri Feb 13, 2009 2:59 am

Dear Antonio,

This is all file and .PRJ of UES.
http://www.sendspace.com/file/fisa7j

I'm still cannot add modified TGET to Fivehc.lib. I used following batch.

[code][set hdir=d:\harbour
set bcdir=d:\bcc55\bin

%hdir%\bin\harbour TGET.PRG /n /id:\fwh\include;%hdir%\include /oTGET.C
%bcdir%\bcc32 -M -c -D__HARBOUR__ -I%hdir%\include -oTGET.OBJ TGET.C

%bcdir%\tlib d:\fwh\lib\fivehc.lib +- TGET.OBJ
/code]

Thanks&Regards,
Dutch
Regards,
Dutch

FWH 19.01 / xHarbour Simplex 1.2.3 / BCC73 / Pelles C / UEStudio
FWPPC 10.02 / Harbour for PPC (FTDN)
ADS V.9 / MySql / MariaDB
R&R 12 Infinity / Crystal Report XI R2
(Thailand)
User avatar
dutch
 
Posts: 1543
Joined: Fri Oct 07, 2005 5:56 pm
Location: Thailand

Re: Where can I download TWbrowse (Hernan) for FWH?

Postby Antonio Linares » Fri Feb 13, 2009 7:29 am

Dutch,

Shouldn't it be wbrowse.prg instead of tget.prg ?
regards, saludos

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

Next

Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 42 guests