<![CDATA[FiveTech Software tech support forums]]> https://forums.fivetechsupport.com Smartfeed extension for phpBB <![CDATA[FiveWin for Harbour/xHarbour :: Re: XBrowse 16.04 : Gets in Header Bar :: Reply by damianodec]]> 2025-04-09T02:43:06-06:00 2025-04-09T02:43:06-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=32347&p=278908#p278908 if I press the "clear filter" button the value into the get header remains there.
How can I clean the get fields when I press "clear filter" ?]]>
if I press the "clear filter" button the value into the get header remains there.
How can I clean the get fields when I press "clear filter" ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: XBrowse 16.04 : Gets in Header Bar :: Reply by Antonio Linares]]> 2025-04-09T03:23:28-06:00 2025-04-09T03:23:28-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=32347&p=278910#p278910
Please provide a screenshot, thanks!]]>

Please provide a screenshot, thanks!]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: XBrowse 16.04 : Gets in Header Bar :: Reply by damianodec]]> 2025-04-09T03:56:18-06:00 2025-04-09T03:56:18-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=32347&p=278911#p278911 Image

then I press "Clear Filter" Button but the value "simp" is still in the get header
Image

How can I clear the field?]]>
Image

then I press "Clear Filter" Button but the value "simp" is still in the get header
Image

How can I clear the field?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: XBrowse 16.04 : Gets in Header Bar :: Reply by cnavarro]]> 2025-04-09T04:25:22-06:00 2025-04-09T04:25:22-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=32347&p=278912#p278912

Code: Select all | Expand

   @ 60,250 BTNBMP PROMPT "Clear Filter" ;
      SIZE 100,40 PIXEL OF oDlg FLAT ;
      ACTION ( oBrw:cAlias )->( DBCLEARFILTER(), oBrw:Refresh(), ClearFilter( oBrw ), oBrw:SetFocus() )   // Look

   ACTIVATE DIALOG oDlg CENTERED
   RELEASE FONT oFontB, oBoldB

return nil

//----------------------------------------------------------------------------//
// New code
// Function clean barget
//----------------------------------------------------------------------------//

static function ClearFilter( oBrw )

   local n

   for n := 1 to Len( oBrw:aCols )
      WITH OBJECT oBrw:aCols[ n ]
         if FieldType( n ) != 'L'
            :uBarGetVal    := uValBlank( fieldGet( n ) )
            if FieldType( n ) == 'N'
               :cBarGetPic := NumPict( FieldLen( n ), FieldDec( n ) )
            endif
         endif
         if hb_IsObject( :oBarGet )
            :oBarGet:Refresh()
         endif
      END
   next
Return nil

//----------------------------------------------------------------------------//
Please note that the functions used for applying and removing filters depend on the RDD (data source) you are using in xbrowse, and therefore the initialization of the oGetBar will also be different. This example is created using a DBF.
The important thing to clean the values ​​in the barget is to initialize the data :uBarGetVal of all columns. Their initial value, as I mentioned before, will depend on the RDD used in Xbrowse.]]>

Code: Select all | Expand

   @ 60,250 BTNBMP PROMPT "Clear Filter" ;
      SIZE 100,40 PIXEL OF oDlg FLAT ;
      ACTION ( oBrw:cAlias )->( DBCLEARFILTER(), oBrw:Refresh(), ClearFilter( oBrw ), oBrw:SetFocus() )   // Look

   ACTIVATE DIALOG oDlg CENTERED
   RELEASE FONT oFontB, oBoldB

return nil

//----------------------------------------------------------------------------//
// New code
// Function clean barget
//----------------------------------------------------------------------------//

static function ClearFilter( oBrw )

   local n

   for n := 1 to Len( oBrw:aCols )
      WITH OBJECT oBrw:aCols[ n ]
         if FieldType( n ) != 'L'
            :uBarGetVal    := uValBlank( fieldGet( n ) )
            if FieldType( n ) == 'N'
               :cBarGetPic := NumPict( FieldLen( n ), FieldDec( n ) )
            endif
         endif
         if hb_IsObject( :oBarGet )
            :oBarGet:Refresh()
         endif
      END
   next
Return nil

//----------------------------------------------------------------------------//
Please note that the functions used for applying and removing filters depend on the RDD (data source) you are using in xbrowse, and therefore the initialization of the oGetBar will also be different. This example is created using a DBF.
The important thing to clean the values ​​in the barget is to initialize the data :uBarGetVal of all columns. Their initial value, as I mentioned before, will depend on the RDD used in Xbrowse.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: XBrowse 16.04 : Gets in Header Bar :: Reply by damianodec]]> 2025-04-09T06:35:34-06:00 2025-04-09T06:35:34-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=32347&p=278914#p278914 Thank you]]> Thank you]]> <![CDATA[FiveWin for Harbour/xHarbour :: msgbar item :: Author Natter]]> 2025-04-12T03:14:08-06:00 2025-04-12T03:14:08-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45619&p=278954#p278954
How can I hide/show the msgbar item ? If I write like this

Code: Select all | Expand

oWnd:oMsgBar:aItems[1]:Hide()
, I get an error - "Message not found: TMSGITEM:HIDE"]]>

How can I hide/show the msgbar item ? If I write like this

Code: Select all | Expand

oWnd:oMsgBar:aItems[1]:Hide()
, I get an error - "Message not found: TMSGITEM:HIDE"]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: msgbar item :: Reply by Antonio Linares]]> 2025-04-12T04:34:38-06:00 2025-04-12T04:34:38-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45619&p=278955#p278955 <![CDATA[FiveWin for Harbour/xHarbour :: Re: msgbar item :: Reply by Natter]]> 2025-04-12T05:33:09-06:00 2025-04-12T05:33:09-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45619&p=278957#p278957 <![CDATA[FiveWin for Harbour/xHarbour :: Re: msgbar item :: Reply by Antonio Linares]]> 2025-04-12T06:35:17-06:00 2025-04-12T06:35:17-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45619&p=278958#p278958 <![CDATA[FiveWin for Harbour/xHarbour :: String functions UTF8 compatible :: Author marzio]]> 2025-04-11T13:54:32-06:00 2025-04-11T13:54:32-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45618&p=278949#p278949 in a program I'm trying to replace all the string functions with the new UTF8 functions to be compatible with the RUSSIAN alphabet (cirillic).
FW_At() seemed to me to be of this type but in reality it returns me almost double values ​​with Russian apart from numbers, spaces, punctuation etc.
I also tried HB_At() but it gives the same result.
Where can I find documentation on all these UTF8 functions and also all the new functions and classes of these last years?
thanks for the help.
Marzio

some functions found:
FW_ISUTF8, UTF8TOANSI, ANSITOUTF8, FW_UTF8LEN, UTF8LEN, FW_UTF8LEFT, FW_UTF8SUBSTR, FW_AT, FW_GETCLIPBOARDDATA,
FW_UTF8STUFF, FW_UTF8TOSTR, FW_STRTOUTF8, FW_UTF8TOOEM, FW_OEMTOUTF8 ispureAnsiAsWide(), UTF16toANSI(), UTF16toSTR8(), GETWINDOWTEXT(), MGETLINE(), MGETREPLACE(), GETWINTXTLENGHT(), WINUPPER(), WINLOWER(), GETTEXTWIDTH(), GETTEXTHEIGHT()]]>
in a program I'm trying to replace all the string functions with the new UTF8 functions to be compatible with the RUSSIAN alphabet (cirillic).
FW_At() seemed to me to be of this type but in reality it returns me almost double values ​​with Russian apart from numbers, spaces, punctuation etc.
I also tried HB_At() but it gives the same result.
Where can I find documentation on all these UTF8 functions and also all the new functions and classes of these last years?
thanks for the help.
Marzio

some functions found:
FW_ISUTF8, UTF8TOANSI, ANSITOUTF8, FW_UTF8LEN, UTF8LEN, FW_UTF8LEFT, FW_UTF8SUBSTR, FW_AT, FW_GETCLIPBOARDDATA,
FW_UTF8STUFF, FW_UTF8TOSTR, FW_STRTOUTF8, FW_UTF8TOOEM, FW_OEMTOUTF8 ispureAnsiAsWide(), UTF16toANSI(), UTF16toSTR8(), GETWINDOWTEXT(), MGETLINE(), MGETREPLACE(), GETWINTXTLENGHT(), WINUPPER(), WINLOWER(), GETTEXTWIDTH(), GETTEXTHEIGHT()]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: String functions UTF8 compatible :: Reply by cnavarro]]> 2025-04-11T14:33:35-06:00 2025-04-11T14:33:35-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45618&p=278951#p278951 https://www.kresin.ru/en/hrbfaq.html#_Doc5
https://github.com/Petewg/harbour-core/wiki/Strings]]>
https://www.kresin.ru/en/hrbfaq.html#_Doc5
https://github.com/Petewg/harbour-core/wiki/Strings]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: String functions UTF8 compatible :: Reply by marzio]]> 2025-04-12T10:06:00-06:00 2025-04-12T10:06:00-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45618&p=278960#p278960 very useful and interesting to have all the functions for harbour.
Is there something similar for fivewin?
thanks]]>
very useful and interesting to have all the functions for harbour.
Is there something similar for fivewin?
thanks]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: String functions UTF8 compatible :: Reply by Antonio Linares]]> 2025-04-12T10:49:47-06:00 2025-04-12T10:49:47-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45618&p=278962#p278962
> Is there something similar for fivewin?

Please run this from FWH\samples:

buildh.bat fwfuncs]]>

> Is there something similar for fivewin?

Please run this from FWH\samples:

buildh.bat fwfuncs]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: String functions UTF8 compatible :: Reply by marzio]]> 2025-04-12T21:13:11-06:00 2025-04-12T21:13:11-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45618&p=278964#p278964 i have microsoft visual c compiler. i have found tlib.exe and tlib64.exe and loaded in the bcc77 folder.
i have modify ReadFuncs() in fwfuncs.prg to use theese files but i don't obtain the fiveh.lst
WaitRun( cBccFolder + "bin\tlib.exe ..\lib\fiveh64.lib, fiveh.lst" )
i have tried also tlib64.exe
i see a flash of two windows and then they disappear
i have also tried lib.exe di msvc with the same result.

from the command prompt with fiveh64.lib copied in the same directory bin:
d:\WinClip\bcc77\bin>tlib64.exe fiveh64.lib, fiveh.lst
TLIB64 6.4 Copyright (c) 1987-2014 Embarcadero Technologies, Inc.
Warning: no changes required; library will not be modified

what is the problem?]]>
i have microsoft visual c compiler. i have found tlib.exe and tlib64.exe and loaded in the bcc77 folder.
i have modify ReadFuncs() in fwfuncs.prg to use theese files but i don't obtain the fiveh.lst
WaitRun( cBccFolder + "bin\tlib.exe ..\lib\fiveh64.lib, fiveh.lst" )
i have tried also tlib64.exe
i see a flash of two windows and then they disappear
i have also tried lib.exe di msvc with the same result.

from the command prompt with fiveh64.lib copied in the same directory bin:
d:\WinClip\bcc77\bin>tlib64.exe fiveh64.lib, fiveh.lst
TLIB64 6.4 Copyright (c) 1987-2014 Embarcadero Technologies, Inc.
Warning: no changes required; library will not be modified

what is the problem?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: String functions UTF8 compatible :: Reply by Antonio Linares]]> 2025-04-12T23:34:01-06:00 2025-04-12T23:34:01-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45618&p=278965#p278965
Please copy these two files to FWH\samples

fiveh.lst

Code: Select all | Expand

Publics by module

activex 	size = 6872
	_HB_FUN_TACTIVEX                  _HB_FUN_THACTIVEX

adofuncs	size = 49883
	_HB_FUN_ADOCREATECOLSQL           _HB_FUN_ADODEFAULT
	_HB_FUN_ADONULL                   _HB_FUN_ADOROLLUPTREE
	_HB_FUN_ADOROLLUPTREEBROWSE       _HB_FUN_DBMSNUM
	_HB_FUN_FIELDTYPEADOTODBF         _HB_FUN_FWADOAPPENDBLANK
	_HB_FUN_FWADOCREATETABLE          _HB_FUN_FWADODELRECORD
	_HB_FUN_FWADOFIELDDEC             _HB_FUN_FWADOFIELDLEN
	_HB_FUN_FWADOFIELDSIZE            _HB_FUN_FWADOFIELDSTRUCT
	_HB_FUN_FWADOFIELDTYPE            _HB_FUN_FWADOLOADRECORD
	_HB_FUN_FWADOMEMOSIZETHRESHOLD    _HB_FUN_FWADOSAVERECORD
	_HB_FUN_FWADOSTRUCT               _HB_FUN_FW_ACEVER
	_HB_FUN_FW_ADOADDCOL              _HB_FUN_FW_ADOADDMODICOLSQL
	_HB_FUN_FW_ADOAPPLYPARAMS         _HB_FUN_FW_ADOCATALOGS
	_HB_FUN_FW_ADOCONNECTIONSTRING    _HB_FUN_FW_ADOCREATEINDEX
	_HB_FUN_FW_ADOCREATETABLESQL      _HB_FUN_FW_ADOCURRENTDB
	_HB_FUN_FW_ADODATETIME            _HB_FUN_FW_ADODROPINDEX
	_HB_FUN_FW_ADOEXPORTTODBF         _HB_FUN_FW_ADOFIELDUPDATEABLE
	_HB_FUN_FW_ADOIMPORTFROMDBF       _HB_FUN_FW_ADOINDEXES
	_HB_FUN_FW_ADOMODIFYCOL           _HB_FUN_FW_ADOPIVOTARRAY
	_HB_FUN_FW_ADOPIVOTRS             _HB_FUN_FW_ADOPRIMARYKEY
	_HB_FUN_FW_ADOQUERYRESULT         _HB_FUN_FW_ADORECONNECT
	_HB_FUN_FW_ADORSTOCSV             _HB_FUN_FW_ADORSTOHTML
	_HB_FUN_FW_ADORSTOTEXT            _HB_FUN_FW_ADOSELECTDB
	_HB_FUN_FW_ADOTABLEEXISTS         _HB_FUN_FW_ADOTABLES
	_HB_FUN_FW_ADOTOEXCEL             _HB_FUN_FW_ADOUNQUOTE
	_HB_FUN_FW_ARRAYASRECORDSET       _HB_FUN_FW_COMPACTMDB
	_HB_FUN_FW_CREATEMDB              _HB_FUN_FW_DATETOADO
	_HB_FUN_FW_DATETOSQL              _HB_FUN_FW_FILTER2WHERE
	_HB_FUN_FW_FILTERDBF2ADO          _HB_FUN_FW_GETADOERROR
	_HB_FUN_FW_MSSQLDB                _HB_FUN_FW_MSSQL_BACKUP
	_HB_FUN_FW_MSSQL_RESTORE          _HB_FUN_FW_ONADOERROR
	_HB_FUN_FW_OPENADOCONNECTION      _HB_FUN_FW_OPENADOEXCELBOOK
	_HB_FUN_FW_OPENADOEXCELSHEET      _HB_FUN_FW_OPENRECORDSET
	_HB_FUN_FW_OPENTRECSET            _HB_FUN_FW_QUOTEDCOLSQL
	_HB_FUN_FW_RDBMSNAME              _HB_FUN_FW_RECSETHEADERS
	_HB_FUN_FW_REOPENRECORDSET        _HB_FUN_FW_SHOWADOERROR
	_HB_FUN_FW_VALTOSQL               _HB_FUN_MSSQL_BULKIMPORTDBF
	_HB_FUN_RSGETROWS                 _HB_FUN_RSTOHASH
	_HB_FUN_RSTOJSON                  _HB_FUN_TADOCOMMAND
	_HB_FUN_TRM                       _HB_FUN_UTYPETOBLANK

alert   	size = 3212
	_HB_FUN_ALERT                   

autoget 	size = 11251
	_HB_FUN_TAUTOGET                  _HB_FUN_TGETLIST

bar     	size = 25647
	_HB_FUN_GRADIENT2000              _HB_FUN_TBAR

bartabs 	size = 2684
	_HB_FUN_TBARTABS                

bitmap  	size = 16799
	_HB_FUN_PALBMPFREE                _HB_FUN_PALBMPNEW
	_HB_FUN_TBITMAP                 

block   	size = 1228
	_HB_FUN_TBLOCK                  

browse  	size = 4408
	_HB_FUN_BROWSE                    _HB_FUN_REPORT

brush   	size = 13063
	_HB_FUN_GRADIENTBRUSH             _HB_FUN_RESIZEBITMAP
	_HB_FUN_TBRUSH                  

brushex 	size = 1312
	_HB_FUN_TBRUSHEX                

btnbmp  	size = 36407
	_HB_FUN_TBTNBMP                 

btnflat 	size = 8231
	_HB_FUN_TBTNFLAT                

button  	size = 6912
	_HB_FUN_TBUTTON                 

buttonb 	size = 6416
	_HB_FUN_TBUTTONBMP              

c5lib   	size = 8935
	_HB_FUN_AC5BOX                    _HB_FUN_ASPLIT
	_HB_FUN_C5BOX                     _HB_FUN_COLORES
	_HB_FUN_CREAAROWRIGHT             _HB_FUN_CREABITMAPEX
	_HB_FUN_CREABITMAPEX2             _HB_FUN_CREAVGRIP
	_HB_FUN_DLGCHANGESIZE             _HB_FUN_DRAWMTEXT
	_HB_FUN_FINDCHAR                  _HB_FUN_FONTUNDER
	_HB_FUN_GENIMAGELIST              _HB_FUN_GETBITMAP16
	_HB_FUN_GETBITMAPSIZE             _HB_FUN_GETDEFFONT
	_HB_FUN_GETORIGINALORDEN          _HB_FUN_ICON2BMP
	_HB_FUN_LFN2SFNEX                 _HB_FUN_LOADACCESOS
	_HB_FUN_LOADICONEX                _HB_FUN_LOADIMAGEEX
	_HB_FUN_LOADIMAGEEX2              _HB_FUN_LTHEMES
	_HB_FUN_MEMOWRITEX                _HB_FUN_RESTORESCREENFROMBMP
	_HB_FUN_SAVESCREENASBMP           _HB_FUN_STRCOUNT
	_HB_FUN_XADRIVES                  _HB_FUN___MIRROW

c5tooltp	size = 11531
	_HB_FUN_TC5TOOLTIP              

calinfo 	size = 6456
	_HB_FUN_TCALINFO                

callstac	size = 2968
	_HB_FUN_CCALLSTACK                _HB_FUN_SHOWCALLSTACK
	_HB_FUN_STACKVARS               

chatgpt 	size = 2760
	_HB_FUN_TCHATGPT                

checkbox	size = 7160
	_HB_FUN_TCHECKBOX               

checkres	size = 1482
	DelResource                       _HB_FUN_CHECKRES
	_HB_FUN_FWADDRESOURCE             _HB_FUN_FWDELRESOURCE
	_HB_FUN_SETRESDEBUG               _RegisterResource

clipbrd 	size = 4304
	_HB_FUN_GETCLIPCONTENTFORMAT      _HB_FUN_TCLIPBOARD

clipmore	size = 492
	_HB_FUN_RLNEW                     _HB_FUN_RLQUERY

combobox	size = 20863
	_HB_FUN_SETCBXCOLORFOCUS          _HB_FUN_TCOMBOBOX
	_HB_FUN_TDRAWITEMSTRUCT         

combom  	size = 13759
	_HB_FUN_TCOMBOMETRO             

control 	size = 30079
	_HB_FUN_GETGRIDSIZE               _HB_FUN_SETGRIDSIZE
	_HB_FUN_TCONTROL                

crcard  	size = 2044
	_HB_FUN_FW_VALIDCREDITCARD      

cursor  	size = 3512
	_HB_FUN_TCURSOR                 

database	size = 39523
	_HB_FUN_TDATABASE               

datarow 	size = 47499
	_HB_FUN_BTNCHOOSECOLOR            _HB_FUN_EXTRACTBMP
	_HB_FUN_FW_COPYRECORD             _HB_FUN_FW_EDITHASH
	_HB_FUN_FW_PASTERECORD            _HB_FUN_FW_RECORD
	_HB_FUN_MAKEBMPARRAY              _HB_FUN_TDATAROW
	_HB_FUN_XEDIT                   

dbcombo 	size = 9040
	_HB_FUN_TDBCOMBO                

dbffunc1	size = 2948
	_HB_FUN_DBF_APPLYPARAMS           _HB_FUN_DBF_NEEDSLOCK
	_HB_FUN_DBROLLBACK                _HB_FUN_DBROLLBACKALL
	_HB_FUN_FIELDINEXPR               _HB_FUN_FW_DBFTOARRAY
	_HB_FUN_FW_DBFTOHASH              _HB_FUN_FW_DBFTOHTML
	_HB_FUN_FW_DBFTOJSON              _HB_FUN_ORDERTAGINFO

dbffunc2	size = 16256
	_HB_FUN_CONVERTTYPE               _HB_FUN_DBFAPPEND
	_HB_FUN_FW_ARRAYTODBF             _HB_FUN_FW_ARRAYTODBFEX
	_HB_FUN_FW_CDXCREATE              _HB_FUN_FW_COPYDBFTO
	_HB_FUN_FW_DBFILTERBLOCK          _HB_FUN_FW_DBFLOOKUP
	_HB_FUN_FW_DBFRENAMEFIELD         _HB_FUN_FW_DBFSQLQUERY
	_HB_FUN_FW_DBFSTRUCT              _HB_FUN_FW_DBFTOEXCEL
	_HB_FUN_FW_DBINSERT               _HB_FUN_FW_EXCELTODBF
	_HB_FUN_FW_FIELDSPUT              _HB_FUN_FW_HASHTOREC
	_HB_FUN_FW_INDEXINFO              _HB_FUN_FW_RECTOHASH
	_HB_FUN_FW_RECTOJSON              _HB_FUN_FW_SAVEARRAYTODBF
	_HB_FUN_FW_SETRECYCLEDELETED      _HB_FUN_SPLITATAS

dbffunc9	size = 1808
	_HB_FUN_GETRECYCLEDREC          

dbgabout	size = 1936
	_HB_FUN_DBGABOUT                

dbgalert	size = 1948
	_HB_FUN_DBGALERT                

dbgmemo 	size = 1812
	_HB_FUN_DBGMEMO                 

dbgprint	size = 2100
	_HB_FUN_DBGPRINT                

dbgtable	size = 2688
	_HB_FUN_DBGTABLE                

dbgtrace	size = 2976
	_HB_FUN_DBGTRACE                

dbtools 	size = 1396
	_HB_FUN_AGETWORKAREAS             _HB_FUN_CGETNEWALIAS
	_HB_FUN_CGETNEWALIASNAME          _HB_FUN_DUPRECORD
	_HB_FUN_GETORDNAMES             

dde     	size = 2756
	_HB_FUN_DDEACK                    _HB_FUN_DDETERMINATE
	_HB_FUN_TDDE                    

ddeclien	size = 4416
	_HB_FUN_TDDECLIENT              

dialog  	size = 23135
	_HB_FUN_FW_SETTRUEPIXEL           _HB_FUN_SETCENTERONPARENT
	_HB_FUN_SETDIALOGESC              _HB_FUN_SETDLGGRADIENT
	_HB_FUN_TDIALOG                 

dlgfind 	size = 1896
	_HB_FUN_DLGFINDTEXT               _HB_FUN_TDLGFIND

dlgs32  	size = 2296
	_HB_FUN_CGETDIR32                 _HB_FUN_CGETFILE32
	_HB_FUN_NGETFILTER32            

dostofwh	size = 5760
	_HB_FUN_ADDDOSMENUPROMPT          _HB_FUN_EXECDOSMENUPROMPT
	_HB_FUN_FW_DBEDIT                 _HB_FUN_FW_DOSCLEAR
	_HB_FUN_FW_DOSDIALOG              _HB_FUN_FW_DOSREAD
	_HB_FUN_FW_SETCOLOR             

dotnet_ 	size = 6284
	_HB_FUN_CLRCREATEINSTANCE         _HB_FUN_FW_DOTNET
	_HB_FUN_FW_DOTNETERROR            _HB_FUN_TDOTNET

drawbmp 	size = 860
	_HB_FUN_DRAWTEXTTRANSPARENT       _HB_FUN_DRAWTILED
	_HB_FUN_DRAWTRANSPARENT         

drxl    	size = 9939
	_HB_FUN_CGETFILEXLSX              _HB_FUN_CTEMPXLSX
	_HB_FUN_DRXLSFORMAT               _HB_FUN_DRXLSXLINKED
	_HB_FUN_DRXLSXOBJ                 _HB_FUN_FWDRXLSX
	_HB_FUN_USEDRXLSX                 _HB_FUN_USEXLSXLIB
	_HB_FUN_XLSXLIBLINKED             _HB_FUN_XLSXLIBOBJ
	_HB_FUN_XLSXOBJ                 

edit    	size = 7819
	_HB_FUN_TEDIT                   

editcell	size = 1664
	_HB_FUN_EDITCELL                

epfunc  	size = 896
	_HB_FUN_EP_GETTEMPPATH            _HB_FUN_EP_LINKEDTOAPP
	_HB_FUN_EP_SETPATH                _HB_FUN_EP_TIDYUP

ereport 	size = 74819
	_HB_FUN_AREACHANGE                _HB_FUN_AREAHIDE
	_HB_FUN_AREAPROPERTIES            _HB_FUN_BARMENU
	_HB_FUN_BETAVERSION               _HB_FUN_CHECKSTYLE
	_HB_FUN_CLICKLISTTREE             _HB_FUN_CLIENTWINDOWS
	_HB_FUN_DECLAREPUBLICS            _HB_FUN_DEFINEFONTS
	_HB_FUN_DELSELECTITEMS            _HB_FUN_DRAWRULERHORZLINE
	_HB_FUN_DRAWRULERVERTLINE         _HB_FUN_ERBUILDMENU
	_HB_FUN_EREPORT                   _HB_FUN_ERGETALLITEMS
	_HB_FUN_ER_MDICHILD               _HB_FUN_ER_MOUSEWHEEL
	_HB_FUN_ER_SETCOLOR               _HB_FUN_EXITEREPORT
	_HB_FUN_FONTSANDCOLORS            _HB_FUN_GENERATESOURCE
	_HB_FUN_GETALLCOLORS              _HB_FUN_GETCOLOR
	_HB_FUN_GETCURRENTFONT            _HB_FUN_GETFONTS
	_HB_FUN_GETFONTTEXT               _HB_FUN_GETPAPERSIZES
	_HB_FUN_INIMAINWINDOW             _HB_FUN_ITEMLIST
	_HB_FUN_LISTTREES                 _HB_FUN_MDL2
	_HB_FUN_MSGBARINFOS               _HB_FUN_OPTIONS
	_HB_FUN_PAINTGRID                 _HB_FUN_POPUPMENU
	_HB_FUN_PREVIEWMENU               _HB_FUN_PREVIEWREFRESH
	_HB_FUN_REPORTSETTINGS            _HB_FUN_SCROLLHORIZONT
	_HB_FUN_SCROLLVERTICAL            _HB_FUN_SELECTFONT
	_HB_FUN_SET2COLOR                 _HB_FUN_SET3COLOR
	_HB_FUN_SETAREAFORMULABTN         _HB_FUN_SETGENERALSETTINGS
	_HB_FUN_SETGRAPHTREEBMP           _HB_FUN_SETMAINWND
	_HB_FUN_SETSCROLLBAR              _HB_FUN_SETTITLECOLOR
	_HB_FUN_SETWINNULL                _HB_FUN_SHOWAREASONBAR
	_HB_FUN_SHOWCOLORCHOICE           _HB_FUN_SHOWFONTCHOICE
	_HB_FUN_STARTMESSAGE              _HB_FUN_TEASYREPORT
	_HB_FUN_TSCRIPT                   _HB_FUN_TTHISREPORT
	_HB_FUN_WNDKEYDOWNACTION        

erfile  	size = 22807
	_HB_FUN_ASKSAVEFILES              _HB_FUN_CHECKFILENAME
	_HB_FUN_CREATEBACKUP              _HB_FUN_CREATENEWREPORT
	_HB_FUN_ER_NEWREPORT              _HB_FUN_ER_SAVEAS
	_HB_FUN_FILEINFOS                 _HB_FUN_MOVERECORD
	_HB_FUN_OPENFILE                  _HB_FUN_SAVEASFILE
	_HB_FUN_SAVEFILE                  _HB_FUN_SETNEWREPORTDEFAULTS
	_HB_FUN_SETSAVE                   _HB_FUN_SETSAVEINFOS

eritems 	size = 45663
	_HB_FUN_BARCODEPROPERTIES         _HB_FUN_DEACTIVATEITEM
	_HB_FUN_DELETEALLITEMS            _HB_FUN_DELETEITEM
	_HB_FUN_DELITEMWITHKEY            _HB_FUN_DRAWBARCODE
	_HB_FUN_DRAWGRAPHIC               _HB_FUN_EDITSOURCECODE
	_HB_FUN_ELEMENTACTIONS            _HB_FUN_ER_SHOWITEM
	_HB_FUN_GETCOLORBTN               _HB_FUN_GETGRAPHINDEX
	_HB_FUN_GETGRAPHNAME              _HB_FUN_GETIMAGESIZE
	_HB_FUN_GETITEMDLGPOS             _HB_FUN_GETOVAR
	_HB_FUN_GRAPHICPROPERTIES         _HB_FUN_IMAGEPROPERTIES
	_HB_FUN_ISGRAPHIC                 _HB_FUN_ITEMCOPY
	_HB_FUN_ITEMPASTE                 _HB_FUN_ITEMPOPUPMENU
	_HB_FUN_ITEMPROPERTIES            _HB_FUN_KEYDOWNACTION
	_HB_FUN_MSGBARITEM                _HB_FUN_MULTIITEMPROPERTIES
	_HB_FUN_NEWITEM                   _HB_FUN_SAVEBARITEM
	_HB_FUN_SAVEGRAITEM               _HB_FUN_SAVEIMGITEM
	_HB_FUN_SAVEITEMGENERAL           _HB_FUN_SAVETEXTITEM
	_HB_FUN_SETFORMULABTN             _HB_FUN_SETITEMDEFAULT
	_HB_FUN_SETITEMDLG                _HB_FUN_SETITEMSIZE
	_HB_FUN_TEXTPROPERTIES            _HB_FUN_UPDATEITEMS

eritems2	size = 2964
	_HB_FUN_INVERTSELECTION           _HB_FUN_MARKITEM
	_HB_FUN_MOVESELECTION             _HB_FUN_MSGSELECTED
	_HB_FUN_REFRESHSELECTION          _HB_FUN_SELECTALLITEMS
	_HB_FUN_SELECTITEM                _HB_FUN_STARTSELECTION
	_HB_FUN_STOPSELECTION             _HB_FUN_TOGGLEITEMSELECTION
	_HB_FUN_UNSELECTALL             

errsysw 	size = 9316
	_HB_FUN_ERRORLINK                 _HB_FUN_ERRORSYS
	_HB_FUN_FWERRORSYS                _HB_FUN_FW_GT
	_HB_FUN_GETCPU                    _HB_FUN_HB_GTSYS
	_HB_FUN_SETERRORDIALOG            _HB_FUN_SETERRORFILENAME
	_HB_FUN_SETERRORPATH              _HB_FUN_SETPOSTERRORACTION

ertools 	size = 34983
	_HB_FUN_ADD2UNDO                  _HB_FUN_ADDTORECENTDOCS
	_HB_FUN_ADELETE                   _HB_FUN_ALTPRINTREPORT
	_HB_FUN_CHECKEXPRESSION           _HB_FUN_CLEARUNDOREDO
	_HB_FUN_CLOSEUNDO                 _HB_FUN_COPYTOEXPRESS
	_HB_FUN_CREATEDBFSEXPRESSIONS     _HB_FUN_CREATENEWFILE
	_HB_FUN_DATABASES                 _HB_FUN_DELDBASE
	_HB_FUN_DELETEAREA                _HB_FUN_EDITLANGUAGE
	_HB_FUN_ERCOPYFILE                _HB_FUN_ER_CHECKPATH
	_HB_FUN_ER_GETPIXEL               _HB_FUN_EXPRESSIONS
	_HB_FUN_GETBARCODES               _HB_FUN_GETCMINCH
	_HB_FUN_GETDBASE                  _HB_FUN_GETDBFIELD
	_HB_FUN_GETDIVISIBLE              _HB_FUN_GETEXPRFIELDS
	_HB_FUN_GETFIELD                  _HB_FUN_GETFILE
	_HB_FUN_GETLANGUAGE               _HB_FUN_GETSOURCETOOLTIP
	_HB_FUN_GL                        _HB_FUN_GOBOTTOM
	_HB_FUN_INICOLOR                  _HB_FUN_INSERTAREA
	_HB_FUN_ISDIVISIBLE               _HB_FUN_ISINTERSECTRECT
	_HB_FUN_ISPOINTINRECT             _HB_FUN_ISSECONDPAGE
	_HB_FUN_MAINCAPTION               _HB_FUN_MULTIUNDOREDO
	_HB_FUN_OPENDATABASES             _HB_FUN_OPENLANGUAGE
	_HB_FUN_OPENUNDO                  _HB_FUN_PRINTREPORT
	_HB_FUN_REDO                      _HB_FUN_REFRESHREDO
	_HB_FUN_REFRESHUNDO               _HB_FUN_SAVEDATABASES
	_HB_FUN_STRATNUM                  _HB_FUN_UNDO
	_HB_FUN_UNDOEXPRESSION            _HB_FUN_UNDOREDOMENU
	_HB_FUN_VRD_MSGRUN              

esreport	size = 49423
	_HB_FUN_ERSTART                   _HB_FUN_FWER_ITEM
	_HB_FUN_FWER_PRREPORT             _HB_FUN_FW_EREPORT

etc     	size = 808
	_HB_FUN_FNADDBITMAP               _HB_FUN___CHANGESTYLEWINDOW

expbuild	size = 8480
	_HB_FUN_CGETEXPRESSION            _HB_FUN_FWARGSLIST
	_HB_FUN_FWCHECKEXPRESSION         _HB_FUN_FWEXPBUILDER

fget    	size = 71131
	_HB_FUN_GTFTOTXT                  _HB_FUN_TFGET
	_HB_FUN_TXTTOGTF                

fileedit	size = 12247
	_HB_FUN_BROWSEITEMS               _HB_FUN_CELLVARPUT
	_HB_FUN_DBREPLACE                 _HB_FUN_DUPLICATE
	_HB_FUN_EREDITCELL                _HB_FUN_FEBUILDMENU
	_HB_FUN_FEFILEEDIT                _HB_FUN_FEGETFILE
	_HB_FUN_FEOPENFILE                _HB_FUN_FILEEDITABOUT
	_HB_FUN_GETTYPE                   _HB_FUN_LASTENTRYNR
	_HB_FUN_REPLACEITEMS            

filename	size = 7192
	_HB_FUN_ADRIVES                   _HB_FUN_AFINDFILE
	_HB_FUN_CFILEDISC                 _HB_FUN_CFILEEXT
	_HB_FUN_CFILEMASK                 _HB_FUN_CFILENAME
	_HB_FUN_CFILENOEXT                _HB_FUN_CFILENOPATH
	_HB_FUN_CFILEPATH                 _HB_FUN_CFILESETEXT
	_HB_FUN_CFILESUBDIR               _HB_FUN_CFILEUNC
	_HB_FUN_CNEWFILENAME              _HB_FUN_CRELATIVEPATH
	_HB_FUN_CTEMPFILE                 _HB_FUN_CURDRIVE
	_HB_FUN_FDATE                     _HB_FUN_FOLDEREXISTS
	_HB_FUN_FSIZE                     _HB_FUN_FTIME
	_HB_FUN_FW_MEMOWRIT               _HB_FUN_FW_NETRMTNAME
	_HB_FUN_GETIMAGE                  _HB_FUN_ISFILEEXT
	_HB_FUN_LFILEISREMOTE             _HB_FUN_LISDIR
	_HB_FUN_LOGFILE                   _HB_FUN_LOGSTACK
	_HB_FUN_MAPDRIVE                  _HB_FUN_MOVEFILE
	_HB_FUN_REMOVEDIR                 _HB_FUN_SETFOLDERICON
	_HB_FUN_SETLOGFILE              

fldex   	size = 8085
	_CalcPos                          _HB_FUN_CALPOS
	_HB_FUN_CALPOSITION               _RetriveFldInfo
	_hb_FWarrayClone                

fline   	size = 1380
	_HB_FUN_TFLINE                  

folder  	size = 16391
	_HB_FUN_TFOLDER                 

font    	size = 13215
	_HB_FUN_FONTFROMTEXT              _HB_FUN_FONTTOTEXT
	_HB_FUN_FW_CHECKFONT              _HB_FUN_GETUSEDFONTS
	_HB_FUN_TFONT                   

ftranslate	size = 3096
	_HB_FUN_FW_TRANSLANG              _HB_FUN_LISTLANGS
	_HB_FUN_TRANSACTION             

fwbarcod	size = 14352
	_HB_FUN_FWER_BARCODE              _HB_FUN_FWER_BARCODE_CHKDIGIT

fwdbg   	size = 42467
	_HB_FUN_DBGGETODBG                _HB_FUN_DBGSETODBG
	_HB_FUN_DBGSOALARM                _HB_FUN_DBGSOALERT
	_HB_FUN_DBGSOBLEEP                _HB_FUN_DBGSOCLICK
	_HB_FUN_DBGSOINFO                 _HB_FUN_DBGSOPUCK
	_HB_FUN_TDBG                      _HB_FUN___DBGENTRY

fwdecode	size = 3768
	_HB_FUN_ARRTRANSPOSE              _HB_FUN_ARRTRANSPOSEQ
	_HB_FUN_ASHUFFLE                  _HB_FUN_FW_AREVERSE
	_HB_FUN_FW_ARRGROUPSUM            _HB_FUN_FW_ARRSUM
	_HB_FUN_FW_ASORT                  _HB_FUN_FW_DECODE
	_HB_FUN_FW_GREATEST               _HB_FUN_FW_LEAST
	_HB_FUN_FW_RAEVAL               

fwerror 	size = 956
	_HB_FUN__FWGENERROR               _HB_FUN___LOWMEMERROR

fwmaria 	size = 159286
	_HB_FUN_FRECSET                   _HB_FUN_FWMARIALIB_VERSION
	_HB_FUN_FWMARIA_LCMESSAGES        _HB_FUN_FWMARIA_SET_PAD_CHAR_TO_FULL_LENGTH
	_HB_FUN_FW_DEMODB                 _HB_FUN_FW_XOR
	_HB_FUN_INBRACKETS                _HB_FUN_MARIA_CONNECT
	_HB_FUN_MARIA_CONNECTERROR        _HB_FUN_MARIA_EMBEDDED
	_HB_FUN_MYSQL_BLOBASHEX           _HB_FUN_MYSQL_CRYPT
	_HB_FUN_MYSQL_CRYPTKEY            _HB_FUN_MYSQL_ESCAPE_STRING
	_HB_FUN_MYSQL_MAXPADLIMIT         _HB_FUN_MYSQL_QUOTEDCOL
	_HB_FUN_MYSQL_ROWSET              _HB_FUN_MYSQL_STMT_BINDTEST
	_HB_FUN_MYSQL_STMT_CLOSE          _HB_FUN_MYSQL_STMT_EXECUTE
	_HB_FUN_MYSQL_STMT_INIT           _HB_FUN_MYSQL_STMT_PREPARE
	_HB_FUN_MYSQL_TINYINTASLOGICAL    _HB_FUN_MYSQL_UPDATEFROMTABLESQL
	_HB_FUN_MYSQL_UPDATESUMMARYSQL    _HB_FUN_STRICMPX
	_fw_isbinarydata                  _result_items

fwmsword	size = 11887
	_HB_FUN_FWMSWORDDOC             

fwmulti 	size = 1006
	_HB_FUN_EXEID                     _HB_FUN_FW_SETMULTI
	_HB_FUN_OPENMUTEX               

fworm   	size = 15247
	_HB_FUN_EXTRACTGROUPBY            _HB_FUN_ORM_CONNECTION
	_HB_FUN_ORM_TABLE               

fwpdf   	size = 29239
	_HB_FUN_FWHARU                    _HB_FUN_FWPDF

fwrowset	size = 23593
	_HB_FUN_FWM_BLANKVALUE            _HB_FUN_FWROWSET
	_HB_FUN_TRANS_DBFSQL              _HB_FUN_TRANS_LIKETODBF

fwstack 	size = 1592
	_HB_FUN_FWSTACK                 

fwxlsxlb	size = 15979
	_HB_FUN_TWORKBOOK                 _HB_FUN_XLSXLIB

fwzebra 	size = 4876
	_HB_FUN_FWZEBRA                   _HB_FUN_FWZEBRA_BARCODE

gantt   	size = 8403
	_HB_FUN_TGANTT                    _HB_FUN_TGANTTITEM

getfiles	size = 920
	_HB_FUN_AGETFILES                 _HB_FUN_AGETFILESA

getsysin	size = 9248
	_HB_FUN_BORLANDVERSION            _HB_FUN_COLORSQTY
	_HB_FUN_CWINVERSION               _HB_FUN_DISPFONTPERSIZE
	_HB_FUN_FW_ACTIVEMONITORS         _HB_FUN_FW_GETALLMONITORS
	_HB_FUN_FW_GETMONITOR             _HB_FUN_FW_GETTHEMEMODE
	_HB_FUN_FW_ISMOUSEPRESENT         _HB_FUN_FW_ISTABLETMODE
	_HB_FUN_FW_ISTOUCHSCREEN          _HB_FUN_FW_SETMONITOR
	_HB_FUN_FW_VIRTUALSCREEN          _HB_FUN_GETCPUSPEED
	_HB_FUN_GETSYSFONT                _HB_FUN_ISDARKTHEME
	_HB_FUN_ISWIN2000                 _HB_FUN_ISWIN64
	_HB_FUN_ISWIN7                    _HB_FUN_ISWIN8
	_HB_FUN_ISWINDOWS10               _HB_FUN_ISWINDOWS11
	_HB_FUN_ISWINVISTA                _HB_FUN_ISWINXP
	_HB_FUN_LARGEFONTS                _HB_FUN_SAVEDESKTOP
	_HB_FUN_SCREENHEIGHT              _HB_FUN_SCREENHEIGHTMM
	_HB_FUN_SCREENSCALING             _HB_FUN_SCREENSIZE
	_HB_FUN_SCREENSIZE_NOSCALING      _HB_FUN_SCREENWIDTH
	_HB_FUN_SCREENWIDTHMM             _HB_FUN_SCRRESOLUTION
	_HB_FUN_SETDARKTHEME              _HB_FUN_WINDOWS
	_HB_FUN_WNDCENTEREX             

gettasks	size = 2784
	_HB_FUN_GETTASKS                  _HB_FUN_GETWINDOWMODULEFILENAME
	_HB_FUN_SETTASKMANAGER          

gmail   	size = 5740
	_HB_FUN_TGMAIL                  

group   	size = 5136
	_HB_FUN_TGROUP                  

gtf     	size = 6940
	_HB_FUN_GTFTORTF                  _HB_FUN_ISGTF
	_HB_FUN_ISRTF                     _HB_FUN_RTFTOGTF

harbour 	size = 4379
	_HB_FUN_ASEND                     _HB_FUN_ASLONG
	_HB_FUN_ASLONGLONG                _HB_FUN_ASPTR
	_HB_FUN_CHILDLEVEL                _HB_FUN_EXECUTE
	_HB_FUN_FREELIB32                 _HB_FUN_FREELIBRARY
	_HB_FUN_FREOPEN_STDERR            _HB_FUN_GETLASTERROR
	_HB_FUN_GETLOCAL                  _HB_FUN_GETPARAM
	_HB_FUN_GETPROCADDRESS            _HB_FUN_HB_DBG_VMPARLLIST
	_HB_FUN_HB_DBG_VMSTKLCOUNT        _HB_FUN_HB_DBG_VMVARLGET
	_HB_FUN_HB_DBG_VMVARSLEN          _HB_FUN_LOADLIB32
	_HB_FUN_LOADLIBRARY               _HB_FUN_LOADVBX
	_HB_FUN_LOCALCOUNT                _HB_FUN_MEMMAX
	_HB_FUN_MEMUSED                   _HB_FUN_NHEAPSIZE
	_HB_FUN_NINITDSSIZE               _HB_FUN_NSTACKSIZE
	_HB_FUN_NSTATICS                  _HB_FUN_NSYMPSIZE
	_HB_FUN_NTXPOS                    _HB_FUN_OCLONE
	_HB_FUN_OLEGETPROPERTY            _HB_FUN_OLEINVOKE
	_HB_FUN_OLESETPROPERTY            _HB_FUN_OSEND
	_HB_FUN_PARAMCOUNT                _HB_FUN_SETMULTIPLE
	_HB_FUN_TVBCONTROL                _HB_FUN_ULOADOBJECT
	_HB_FUN_VBXCLASSNAME              _HB_FUN_VBXEVENT
	_HB_FUN_WINDOWSFIX                _HB_FUN__CLSSETERROR
	_HB_FUN__GENERROR               

help32  	size = 4424
	_HB_FUN_HELPINDEX                 _HB_FUN_HELPPOPUP
	_HB_FUN_HELPSEARCH                _HB_FUN_HELPTOPIC
	_HB_FUN_SETAUTOHELP               _HB_FUN_SPWINHELP
	_HB_FUN_SPWINHELPC                _HB_FUN_WINHELP

helpchm 	size = 3071
	_HB_FUN_CHMHELPINDEX              _HB_FUN_CHMHELPPOPUP
	_HB_FUN_CHMHELPSEARCH             _HB_FUN_CHMHELPTOPIC
	_HB_FUN_FREEHTMLDLL               _HB_FUN_GETHELPPOPUP
	_HB_FUN_HTMLPOP                   _HB_FUN_HTMLSEARCH
	_HB_FUN_HTML_HELP                 _HB_FUN_SETHELPPOPUP
	_hDLL                             _helpaddress
	_pHTMLHELP                      

icon    	size = 3956
	_HB_FUN_TICON                   

iget    	size = 2560
	_HB_FUN_TICONGET                

igroup  	size = 15835
	_HB_FUN_TICONGROUP              

image   	size = 16455
	_HB_FUN_FICNV24                   _HB_FUN_FICONVERTIMAGEFILE
	_HB_FUN_FICONVTO32                _HB_FUN_FIGETBITS
	_HB_FUN_FIGETFILETYPE             _HB_FUN_FIGETINFO
	_HB_FUN_FIGETINFOHEADER           _HB_FUN_FIGETWIDTH
	_HB_FUN_FIISTRANSPARENT           _HB_FUN_FILOAD
	_HB_FUN_FILOADFROMMEMORY          _HB_FUN_FILOADIMG
	_HB_FUN_FIMAKETHUMBNAIL           _HB_FUN_FIROTATE
	_HB_FUN_FIROTATEIMG               _HB_FUN_FISAVE
	_HB_FUN_FISETTRANSPARENT          _HB_FUN_FITYPEFROMMEMORY
	_HB_FUN_FIUNLOAD                  _HB_FUN_FI_CLOSEMEMORY
	_HB_FUN_FI_GETFILETYPEFROMFILENAME  _HB_FUN_FI_GETFILETYPEFROMMEMORY
	_HB_FUN_FI_LOADFROMMEMORY         _HB_FUN_FI_OPENMEMORY
	_HB_FUN_FI_SAVETOMEMORY           _HB_FUN_FI_SUPPORTSWRITING
	_HB_FUN_FMAKETHUMBNAIL            _HB_FUN_FREEIMAGEISLOADED
	_HB_FUN_ISIMAGEDATA               _HB_FUN_LOADFREEIMAGE
	_HB_FUN_TIMAGE                    _HB_FUN_UNLOADFREEIMAGE

imageb64	size = 7500
	_HB_FUN_TIMAGEBASE64            

imgtxtio	size = 51385
	_HB_FUN_CALCTEXTWH                _HB_FUN_CONTRASTCLR
	_HB_FUN_DRAWBMPARRAY              _HB_FUN_DRAWPROGRESSBAR
	_HB_FUN_DRAWTEXTEXARRAY           _HB_FUN_DUPLICATEIMAGE
	_HB_FUN_ELLIPSE_RADIUS            _HB_FUN_EMF2HBITMAP
	_HB_FUN_EXTRACTBASE64IMAGE        _HB_FUN_FILLRECTEX
	_HB_FUN_FW_ANGLEARC               _HB_FUN_FW_BARCODEBMP
	_HB_FUN_FW_BMPMINUS               _HB_FUN_FW_BMPPLUS
	_HB_FUN_FW_BMPSTAR                _HB_FUN_FW_BOX
	_HB_FUN_FW_CLIPBOARDHASIMAGE      _HB_FUN_FW_COPYTOCLIPBOARD
	_HB_FUN_FW_CREATEBITMAP           _HB_FUN_FW_DRAWIMAGE
	_HB_FUN_FW_DRAWSHADOW             _HB_FUN_FW_DRAWSHAPES
	_HB_FUN_FW_ELLIPSHADOW            _HB_FUN_FW_EMPTYCLIPBOARD
	_HB_FUN_FW_GETCLIPBOARDDATA       _HB_FUN_FW_HBITMAPTOFILE
	_HB_FUN_FW_IMAGETOBLOB            _HB_FUN_FW_MAKEYOURBITMAP
	_HB_FUN_FW_PIECHART               _HB_FUN_FW_READIMAGE
	_HB_FUN_FW_RICHTEXTBMP            _HB_FUN_FW_SAVEHBITMAP
	_HB_FUN_FW_SAVEIMAGE              _HB_FUN_FW_SAVEIMAGESAMETYPE
	_HB_FUN_FW_SAVETHUMBNAIL          _HB_FUN_FW_SAYBARCODE
	_HB_FUN_FW_SAYHOLLOW              _HB_FUN_FW_SAYTEXT
	_HB_FUN_FW_SAYTEXTHILITE          _HB_FUN_FW_SAYTEXTSPREAD
	_HB_FUN_FW_STITCHIMAGES           _HB_FUN_FW_TEXTTOBITMAP
	_HB_FUN_FW_TRANSFORMBITMAP        _HB_FUN_GDI32_HOLLOWTEXT
	_HB_FUN_GETBMPHEIGHT              _HB_FUN_GETBMPWIDTH
	_HB_FUN_GRADARGB2RGB              _HB_FUN_GRADIENTFILL
	_HB_FUN_GRADIENTGDIP              _HB_FUN_HICO2HBMP
	_HB_FUN_HVALTOBRUSH               _HB_FUN_HVALTOPEN
	_HB_FUN_ISALPHACLR                _HB_FUN_ISFILEIMAGETYPE
	_HB_FUN_ISIMAGEEXT                _HB_FUN_ISXHBCOM
	_HB_FUN_JPEGDIM                   _HB_FUN_MEMORYBUFFERTYPE
	_HB_FUN_MSGINFOSCROLL             _HB_FUN_PCHARTOPTR
	_HB_FUN_RESIZEIMAGEPTR            _HB_FUN_RINGGRADIENTFILL
	_HB_FUN_SAMEIMGEXT                _HB_FUN_SAYTEXTATANGLE
	_HB_FUN_SEGOEMDL2                 _HB_FUN_SELECTCLIPPATH
	_HB_FUN_SELECTCLIPRGN             _HB_FUN_SETDEFAULTICONSIZE
	_HB_FUN_TXTINRCT                  _HB_FUN_USEGDI
	_HB_FUN_WEBIMAGE                  _HB_FUN_WEBPAGECONTENTS
	_HB_FUN_WINDOWFROMDC              _HB_FUN_WNDBMP
	_HB_FUN_WRAPTOWIDTH             

ini     	size = 2852
	_HB_FUN_GETPVPRFSE                _HB_FUN_TINI

internet	size = 1580
	_HB_FUN_TINTERNET               

keys    	size = 376
	_HB_FUN__SETKEY                 

linklist	size = 5140
	_HB_FUN_TLINKLIST               

listbox 	size = 12095
	_HB_FUN_TLISTBOX                

loadval 	size = 444
	_HB_FUN_LOADVALUE               

longnam2	size = 3572
	_HB_FUN_APIFINDCLS                _HB_FUN_APIFINDFST
	_HB_FUN_APIFINDNXT                _HB_FUN_GETFULLPATHNAME
	_HB_FUN_GETSHORTPATHNAME          _HB_FUN_LFN2SFN
	_HB_FUN_SFN2LFN                 

mariarec	size = 4380
	_HB_FUN_FWMARIARECORD           

math    	size = 640
	_HB_FUN_BINTOC                    _HB_FUN_BINTON
	_HB_FUN_NTOBIN                  

matrices	size = 10860
	_HB_FUN_ADIFF                     _HB_FUN_FW_MATRIX
	_HB_FUN_MATRIXINVERT              _HB_FUN_MATRIXMULTIPLY
	_HB_FUN_MATRIX_BOX              

mdichild	size = 7595
	_HB_FUN_TMDICHILD               

mdiclien	size = 5304
	_HB_FUN_TMDICLIENT              

mdiframe	size = 9371
	_HB_FUN_GETWNDFRAME               _HB_FUN_TMDIFRAME

mdirec  	size = 1324
	_HB_FUN_MDIRECEDIT              

memoedit	size = 25087
	_HB_FUN_BUILDRICHEDITBAR          _HB_FUN_FW_MEMOEDIT
	_HB_FUN_HTMLVIEW                  _HB_FUN_JSONBROWSE
	_HB_FUN_JSONVIEW                  _HB_FUN_RICHEDIT
	_HB_FUN_RICHEDIT5                 _HB_FUN_SAVEFILESOURCE
	_HB_FUN_SETUPSCINT                _HB_FUN_SOURCECOMPILE
	_HB_FUN_SOURCEEDIT                _HB_FUN_SOURCEEDITOR
	_HB_FUN_UTFEDIT                 

memstat 	size = 684
	_HB_FUN_MEMSTAT                 

menu    	size = 49759
	_HB_FUN_DELCHECK                  _HB_FUN_GETAAUXITEMS
	_HB_FUN_GETALLITEMS               _HB_FUN_GETBMPSITEMS
	_HB_FUN_GETNHEIGHTITEM            _HB_FUN_GETNHEIGHTSEP
	_HB_FUN_GETNOLDHEIGHTITEM         _HB_FUN_GETNWIDTHITEM
	_HB_FUN_GETPOPUPS                 _HB_FUN_ITEMBITMAP
	_HB_FUN_MENUCLONE                 _HB_FUN_RESBUILD
	_HB_FUN_SEARCHID                  _HB_FUN_SEARCHITEM
	_HB_FUN_TMENU                   

menuitem	size = 21635
	_HB_FUN_TMENUITEM                 _HB_FUN_TXTTOBMP

meter   	size = 13083
	_HB_FUN_PAINTCIRCULARMETER        _HB_FUN_PAINTCIRCULARMETEROLD
	_HB_FUN_TMETER                  

metrcirc	size = 12207
	_HB_FUN_TPROGRESSWHEEL          

metropnl	size = 23443
	_HB_FUN_TMETROBTN                 _HB_FUN_TMETROPANEL

mget    	size = 17911
	_HB_FUN_SETMGETCOLORFOCUS         _HB_FUN_TMULTIGET

mimeclip	size = 3352
	_HB_FUN_FFMIMEDEC                 _HB_FUN_FFMIMEENC
	_HB_FUN_FMIMEDEC                  _HB_FUN_FMIMEENC
	_HB_FUN_MAKEWIND                  _HB_FUN_MIMEEXT
	_HB_FUN_REGQRYVALUEEX             _HB_FUN_TESTTHIS

mru     	size = 4376
	_HB_FUN_TMRU                    

msgbar  	size = 15851
	_HB_FUN_GETMSGBARDEFAULT          _HB_FUN_SETMSGBARDEFAULT
	_HB_FUN_TIMEFROMSTART             _HB_FUN_TMSGBAR

msgcalc 	size = 4276
	_HB_FUN_MSGCALC                 

msgget  	size = 3596
	_HB_FUN_MSGGET                  

msglist 	size = 1552
	_HB_FUN_MSGLIST                 

msglogo 	size = 2108
	_HB_FUN_MSGLOGO                   _HB_FUN_MSGSPLASH

msgmeter	size = 6272
	_HB_FUN_MSGDATE                   _HB_FUN_MSGMETER

msgrun  	size = 1592
	_HB_FUN_MSGRUN                    _HB_FUN_MSGWAIT
	_HB_FUN_STOPUNTIL                 _HB_FUN_WAITSECONDS

msgtbar 	size = 884
	_HB_FUN_MSGTOOLBAR              

netapi32	size = 3964
	_HB_FUN_ISEXTERNALIP              _HB_FUN_ISINTERNET
	_HB_FUN_ISLOCALIP                 _HB_FUN_LOCALIP
	_HB_FUN_NETBIOS                   _HB_FUN_NETSERIALNUMBER
	_HB_FUN_PUBLICIP                

now     	size = 6884
	_HB_FUN_NOW                       _HB_FUN_NOWC
	_IN6ADDR_ISANY                    _IN6ADDR_ISEQUAL
	_IN6ADDR_ISLOOPBACK               _IN6ADDR_ISUNSPECIFIED
	_IN6ADDR_SETANY                   _IN6ADDR_SETLOOPBACK
	_IN6_ADDR_EQUAL                   _IN6_IS_ADDR_ANYCAST
	_IN6_IS_ADDR_EUI64                _IN6_IS_ADDR_GLOBAL
	_IN6_IS_ADDR_LINKLOCAL            _IN6_IS_ADDR_LOOPBACK
	_IN6_IS_ADDR_MC_GLOBAL            _IN6_IS_ADDR_MC_LINKLOCAL
	_IN6_IS_ADDR_MC_NODELOCAL         _IN6_IS_ADDR_MC_ORGLOCAL
	_IN6_IS_ADDR_MC_SITELOCAL         _IN6_IS_ADDR_MULTICAST
	_IN6_IS_ADDR_SITELOCAL            _IN6_IS_ADDR_SUBNET_RESERVED_ANYCAST
	_IN6_IS_ADDR_SUBNET_ROUTER_ANYCAST  _IN6_IS_ADDR_UNSPECIFIED
	_IN6_IS_ADDR_V4COMPAT             _IN6_IS_ADDR_V4MAPPED
	_IN6_IS_ADDR_V4TRANSLATED         _IN6_SET_ADDR_LOOPBACK
	_IN6_SET_ADDR_UNSPECIFIED         _WSAGetFailConnectOnIcmpError
	_WSAGetIPUserMtu                  _WSAGetIcmpErrorInfo
	_WSAGetRecvIPEcn                  _WSAGetUdpRecvMaxCoalescedSize
	_WSAGetUdpSendMessageSize         _WSASetFailConnectOnIcmpError
	_WSASetIPUserMtu                  _WSASetRecvIPEcn
	_WSASetUdpRecvMaxCoalescedSize    _WSASetUdpSendMessageSize
	_gai_strerrorA                    _gai_strerrorW
	_getipv4sourcefilter              _getsourcefilter
	_idealsendbacklognotify           _idealsendbacklogquery
	_setipv4sourcefilter              _setsourcefilter

num2word	size = 3228
	_HB_FUN_FW_N2WSETUP               _HB_FUN_FW_NUMTOWORDS

oauth   	size = 10748
	_HB_FUN_THTTPSERVER               _HB_FUN_TOAUTH

objects 	size = 1472
	_HB_FUN_ENDOBJECT                 _HB_FUN_SETOBJECT
	_HB_FUN_TAPPLICATION            

objfile 	size = 4116
	_HB_FUN_TOBJFILE                

odata   	size = 412
	_HB_FUN_AODATA                  

odbc    	size = 2092
	_HB_FUN_ODBCDSNENTRIES            _HB_FUN_SQLCOL
	_HB_FUN_SQLCOMMIT                 _HB_FUN_SQLDESCRIBECOL
	_HB_FUN_SQLDRIVERCONNECT          _HB_FUN_SQLFILE
	_HB_FUN_SQLGETCURNAME             _HB_FUN_SQLGETDATA
	_HB_FUN_SQLGETINFO                _HB_FUN_SQLINDEX
	_HB_FUN_SQLPREPARE                _HB_FUN_SQLSETCURNAME

olefuncs	size = 8368
	_HB_FUN_CONVERTTOOOURL            _HB_FUN_DBF2EXCELNUMFORMAT
	_HB_FUN_EXCELBOOKSAVEAS           _HB_FUN_EXCELLANG
	_HB_FUN_EXCELLANGID               _HB_FUN_EXCELOBJ
	_HB_FUN_EXCELSEPARATORS           _HB_FUN_EXCELTRANSLATE
	_HB_FUN_FILESYSOBJ                _HB_FUN_FWGETOLEOBJECT
	_HB_FUN_FW_TOGGLEDESKTOP          _HB_FUN_GETEXCELBOOK
	_HB_FUN_GETEXCELRANGE             _HB_FUN_GETPROPERTYVALUE
	_HB_FUN_HARBOURNEW                _HB_FUN_MERGEDOCS
	_HB_FUN_OFFICEEXTRACTIMAGE        _HB_FUN_SUNCALCOBJ
	_HB_FUN_WINHTTPOBJ                _HB_FUN_WINWORDOBJ
	_HB_FUN_WMISERVICE                _HB_FUN_XLRANGEVALUE

outl2003	size = 11175
	_HB_FUN_TOUTLOOK2003              _HB_FUN_TOUTLOOK2003GROUP

outl2010	size = 11159
	_HB_FUN_TOUTLOOK2010              _HB_FUN_TOUTLOOK2010GROUP

outlook 	size = 11363
	_HB_FUN_TOUTLOOK                

pdmenu  	size = 20811
	_HB_FUN_DELAMENUSAUX              _HB_FUN_DELMENUFONT
	_HB_FUN_FW_MEASUREITEM            _HB_FUN_FW_MENUDRAW
	_HB_FUN_GETACCTABLE               _HB_FUN_GETAMENUS
	_HB_FUN_GETAMENUSAUX              _HB_FUN_GETMENUFONT
	_HB_FUN_GETPARENTAUXMENUS         _HB_FUN_ISCHARUNI
	_HB_FUN_ISUTF8                    _HB_FUN_LASTAUXMENU
	_HB_FUN_LASTITEM                  _HB_FUN_LASTITEMPOS
	_HB_FUN_LASTMENU                  _HB_FUN_LASTMENUITEMSCOUNT
	_HB_FUN_MENUADDITEM               _HB_FUN_MENUBEGIN
	_HB_FUN_MENUDATA                  _HB_FUN_MENUEND
	_HB_FUN_SETINITITEMSCHILDS        _HB_FUN_SETOLDMENUS
	_HB_FUN_SETSPACEMONOSP            _HB_FUN_SETSPACEXTRAS
	_HB_FUN_SETSPACEXTRASPOP        

pdreport	size = 1852
	_HB_FUN_RPTADDCOLUMN              _HB_FUN_RPTADDGROUP
	_HB_FUN_RPTBEGIN                  _HB_FUN_RPTEND

pen     	size = 1584
	_HB_FUN_TPEN                    

pgsuport	size = 11424
	_HB_FUN_FWPG_APPENDFROMALIAS      _HB_FUN_FWPG_CREATETABLESQL
	_HB_FUN_FWPG_CURRENTDB            _HB_FUN_FWPG_EXECUTE
	_HB_FUN_FWPG_FIELDGET             _HB_FUN_FWPG_GOTOKEYVAL
	_HB_FUN_FWPG_IMPORTFROMDBF        _HB_FUN_FWPG_LISTDBS
	_HB_FUN_FWPG_LISTSCHEMAS          _HB_FUN_FWPG_METASTRUCT
	_HB_FUN_FWPG_PRIMARYKEYS          _HB_FUN_FWPG_PRIMARYORDER
	_HB_FUN_FWPG_QUERYSETORDER        _HB_FUN_FWPG_SKIPPER
	_HB_FUN_FWPG_STRUCTURE            _HB_FUN_FWPG_TABLENAMEFROMID
	_HB_FUN_FWPG_XBRSAVEDATA          _HB_FUN_FWPG_XBRSEEK

printer 	size = 36179
	_HB_FUN_AGETPRINTERS              _HB_FUN_HARUPDFDOC
	_HB_FUN_ISHARULINKED              _HB_FUN_MSPRINTTOPDF
	_HB_FUN_PAGEBEGIN                 _HB_FUN_PAGEEND
	_HB_FUN_PRINTBEGIN                _HB_FUN_PRINTEND
	_HB_FUN_PRINTQUEUE                _HB_FUN_PRNGETFILETOSAVE
	_HB_FUN_PRNLASTPAGE               _HB_FUN_SAVEPREVIEWTOIMAGE
	_HB_FUN_SETPRINTDEFAULT           _HB_FUN_SETPRINTER
	_HB_FUN_TPRINTER                

prv2pdf 	size = 11286
	_HB_FUN_FWJPGTOPDF                _HB_FUN_FWSAVEPREVIEWTOPDF
	_HB_FUN_FW_EMFTOPDF               _HB_FUN_FW_I2PDF
	_HB_FUN_TFW_PDF                   _HB_FUN_WORDPDF
	_fp                               _iBufLen
	_nDocLen                        

radio   	size = 7048
	_HB_FUN_TRADIO                  

radmenu 	size = 5340
	_HB_FUN_TRADMENU                

random  	size = 1192
	_HB_FUN_DECTOHEX                  _HB_FUN_NHEX
	_HB_FUN_NRANDOM                   _HB_FUN_TIMEZONE

rcolumn 	size = 12531
	_HB_FUN_TRCOLUMN                

readxlsx	size = 11259
	_HB_FUN_FW_OPENXLSX               _HB_FUN_FW_SHOWXLSX
	_HB_FUN_TXLSXREADER             

rebar   	size = 1848
	_HB_FUN_TREBAR                  

rect    	size = 9352
	_HB_FUN_ARRAYMATH                 _HB_FUN_POINTROWCOL
	_HB_FUN_POINTXY                   _HB_FUN_TPOINT
	_HB_FUN_TRECT                   

reg32   	size = 3236
	_HB_FUN_TREG32                  

report  	size = 35839
	_HB_FUN_TREPORT                 

rfile   	size = 3740
	_HB_FUN_TRFILE                  

rgroup  	size = 4500
	_HB_FUN_TRGROUP                 

rline   	size = 3684
	_HB_FUN_TRLINE                  

rpreview	size = 39495
	_HB_FUN_CONVERTTOWORDDOC          _HB_FUN_RPREVIEW
	_HB_FUN_RPREVUSERBTNS             _HB_FUN_SETCUSTOMPRINTPREVIEW
	_HB_FUN_TOWORDDOCVIAWRITER        _HB_FUN_TPREVIEW

rtfbox  	size = 1420
	_HB_FUN_RTFBOX                  

rtffile 	size = 2944
	_HB_FUN_TRTFFILE                

say     	size = 7236
	_HB_FUN_TSAY                    

scintila	size = 87123
	_HB_FUN_CHOICEFONT                _HB_FUN_FUNCHARB
	_HB_FUN_GETLEXERS                 _HB_FUN_HCADFUNCTION
	_HB_FUN_LOADFHB                   _HB_FUN_READFUNCFW
	_HB_FUN_READFUNCFWC               _HB_FUN_READFUNCHB
	_HB_FUN_SETMIFONT                 _HB_FUN_TSCINTILLA

scrllbar	size = 6624
	_HB_FUN_TSCROLLBAR              

scrlpanl	size = 10707
	_HB_FUN_TSCROLLPANEL            

scrollm 	size = 9940
	_HB_FUN_SMLARROW                  _HB_FUN_SMRARROW
	_HB_FUN_TSCROLLMETRO            

scrolmsg	size = 4052
	_HB_FUN_TSCROLLMSG              

selector	size = 10451
	_HB_FUN_ATANG                     _HB_FUN_FWCOS
	_HB_FUN_FWSIN                     _HB_FUN_TANG
	_HB_FUN_TSELECTOR               

shellapi	size = 2508
	_HB_FUN_COPYFILE                  _HB_FUN_OUTPUTDEBUGSTRING
	_HB_FUN_SHELL_NOTIFYICON          _HB_FUN_TASKADDICON
	_HB_FUN_TASKCHANGEICON            _HB_FUN_TASKDELICON

skin    	size = 9981
	_HB_FUN_APPLYSETFILTER            _HB_FUN_ISWIN98
	_HB_FUN_SETFILTER                 _HB_FUN_SETTRANSPARENT
	_HB_FUN_SKIN                      _HB_FUN_TSKIN
	_SetFilter                      

skins   	size = 7164
	_HB_FUN_BUTTONS2007               _HB_FUN_FWSKINBTNFOCUSED
	_HB_FUN_FWSKINBTNKEYDOWN          _HB_FUN_FWSKINBTNKEYUP
	_HB_FUN_FWSKINBTNLBUTTONDOWN      _HB_FUN_FWSKINBTNLBUTTONUP
	_HB_FUN_FWSKINBTNMOUSELEAVE       _HB_FUN_FWSKINBTNMOUSEMOVE
	_HB_FUN_FWSKINBTNOBJ              _HB_FUN_FWSKINBTNPAINT
	_HB_FUN_SETSKINBTNDEFAULTCLRS     _HB_FUN_SETSKINBUTTONSCOLORS
	_HB_FUN_SKINBUTTONS             

slider  	size = 10091
	_HB_FUN_TSLIDER                 

sliderm 	size = 2776
	_HB_FUN_TSLIDERMETRO            

splitter	size = 11863
	_HB_FUN_TSPLITTER               

sqlerror	size = 2072
	_HB_FUN_TSQLERROR               

statusba	size = 4304
	_HB_FUN_TSTATUSBAR              

strings 	size = 51580
	_HB_FUN_FWADDLANGUAGE             _HB_FUN_FWADDSTRING
	_HB_FUN_FWEDITSTRINGS             _HB_FUN_FWLANGUAGEID
	_HB_FUN_FWLOADSTRINGS             _HB_FUN_FWMISSINGSTRINGS
	_HB_FUN_FWSAVESTRINGS             _HB_FUN_FWSETLANGUAGE
	_HB_FUN_FWSETSTRING               _HB_FUN_FWSTRING

system  	size = 356
	_HB_FUN_SYSWAIT                 

tabs    	size = 19483
	_HB_FUN_TTABS                   

tacctbl 	size = 1752
	_HB_FUN_TACCTABLE               

tagcloud	size = 5348
	_HB_FUN_TTAGCLOUD               

tanimate	size = 4244
	_HB_FUN_TANIMATE                

tarrdata	size = 39127
	_HB_FUN_STR2STRUCT                _HB_FUN_TARRAYDATA

tblockchain	size = 5332
	_HB_FUN_TBLOCKCHAIN             

tbtnclr 	size = 13527
	_HB_FUN_TBTNCLR                   _HB_FUN_TPICKERCOLOR

tcalenda	size = 17119
	_HB_FUN_TCALENDAR               

tcalex  	size = 29615
	_HB_FUN_CALEX_SETFIRSTDATE        _HB_FUN_COLORDATA
	_HB_FUN_DRAWBOX                   _HB_FUN_DRAWSPECIALBOX
	_HB_FUN_TCALEX                  

tcbrowse	size = 25155
	_HB_FUN_TCBROWSE                

tccolumn	size = 4392
	_HB_FUN_TCCOLUMN                

tclipget	size = 728
	_HB_FUN_FWGETNEW                  _HB_FUN_TCLIPGET

tcomobj 	size = 1924
	_HB_FUN_TCOMOBJECT              

tcompone	size = 3092
	_HB_FUN_TCOMPONENT              

tctrsock	size = 2204
	_HB_FUN_TCTRLSOCKET             

tcvrflow	size = 20867
	_HB_FUN_TCOVER                    _HB_FUN_TCOVERFLOW

tdayv   	size = 7455
	_HB_FUN_TDAYVIEW                

tdbase  	size = 992
	_HB_FUN_TDBASE                  

tdbfcomp	size = 2888
	_HB_FUN_TDBFCOMP                

tdbfuncs	size = 652
	_HB_FUN_TDBF_DECRYPT              _HB_FUN_TDBF_ENCRYPT

tdbodbc 	size = 23531
	_HB_FUN_TDBODBC                 

tdbodbcd	size = 17831
	_HB_FUN_TDBODBCDIRECT           

tddemlcl	size = 3056
	_HB_FUN_DDECLIENT                 _HB_FUN_TDDEMLCLIENT

tddemlsv	size = 4004
	_HB_FUN_DDESERVER                 _HB_FUN_TDDEMLSERVER

tdeepseek	size = 2724
	_HB_FUN_TDEEPSEEK               

tdict   	size = 29499
	_HB_FUN_LOGEVENT                  _HB_FUN_TDICT

tdockpnel	size = 25547
	_HB_FUN_TDOCKPNEL               

tdosprn 	size = 6592
	_HB_FUN_TDOSPRN                 

tdtpicke	size = 11653
	_HB_FUN_DTP_GETSTYLE              _HB_FUN_DTP_SETSTYLE
	_HB_FUN_TDATEPICK                 _read_datetime

tembeddings	size = 4008
	_HB_FUN_TEMBEDDINGS             

tenhmeta	size = 4852
	_HB_FUN_TENHMETAFILE            

tereport	size = 61283
	_HB_FUN_ADDNEWDATAS               _HB_FUN_TEREPORT

texplbar	size = 15635
	_HB_FUN_TEXPLORERBAR              _HB_FUN_TTASKPANEL

texplist	size = 20171
	_HB_FUN_TEXPLORERLIST             _HB_FUN_TITEMLISTBAR

texstruc	size = 3792
	_HB_FUN_STRUCBEGIN                _HB_FUN_STRUCEND
	_HB_FUN_STRUCMEMBER               _HB_FUN_TEXSTRUCT

tfield  	size = 1148
	_HB_FUN_TFIELD                  

tfile   	size = 5484
	_HB_FUN_TFILE                   

tfilegtf	size = 3124
	_HB_FUN_GTFFONT                   _HB_FUN_GTFFORMAT
	_HB_FUN_SETGTFALIGN               _HB_FUN_SETGTFCOLOR
	_HB_FUN_SETGTFFONT                _HB_FUN_SETGTFFORMAT
	_HB_FUN_TFILEGTF                

tfoldex 	size = 31359
	_HB_FUN_TFOLDEREX               

tform   	size = 4600
	_HB_FUN_TFORM                   

tftp    	size = 3220
	_HB_FUN_TFTP                    

tftpcli 	size = 5176
	_HB_FUN_TFTPCLIENT              

tftpfile	size = 2148
	_HB_FUN_TFTPFILE                

tftpserv	size = 6224
	_HB_FUN_TFTPSERVER              

tftpsess	size = 944
	_HB_FUN_TFTPSESSION             

tgdiplus	size = 25163
	_HB_FUN_AEMF2IMAGES               _HB_FUN_BRUSH
	_HB_FUN_CGETBMPNAME               _HB_FUN_DRAWIMAGEROTATECENTER
	_HB_FUN_EMFTOIMG                  _HB_FUN_FRAMETIFF
	_HB_FUN_GDIBMP                    _HB_FUN_GDIPLUSCONVER24TO32ALPHA
	_HB_FUN_GDIPLUSCONVER24TO32ALPHAGRAY  _HB_FUN_GDIPLUSCONVERTIMAGE
	_HB_FUN_GDIPLUSRESIZEIMAGE        _HB_FUN_GDIPLUSSAVETHUMBNAIL
	_HB_FUN_GETIMGFROMLIST            _HB_FUN_GETIMGFROMLISTH
	_HB_FUN_GETIMGFROMLISTV           _HB_FUN_GRAPHICS
	_HB_FUN_HBMPFROMFILE              _HB_FUN_HBMPFROMRES
	_HB_FUN_IMAGEFROM10RESOURCE       _HB_FUN_IMAGEPNGFROMSTR
	_HB_FUN_LISPNG                    _HB_FUN_NEWEMFTOJPG
	_HB_FUN_PATH                      _HB_FUN_PEN
	_HB_FUN_REGION                    _HB_FUN_SAVEPREVIEWTOIMG
	_HB_FUN_SAVEWINDOW                _HB_FUN_TIFFTOJPG

tgemini 	size = 7352
	_HB_FUN_TGEMINI                 

tget    	size = 57659
	_HB_FUN_CHR16                     _HB_FUN_FW_SETGETTIMEPART
	_HB_FUN_FW_UTF8PADBYTE            _HB_FUN_FW_UTF8PADCHAR
	_HB_FUN_GETTEXTLIMITBYCHARS       _HB_FUN_LENMINMAX
	_HB_FUN_POPUPBROWSE               _HB_FUN_SETGETCOLORFOCUS
	_HB_FUN_TGET                      _HB_FUN_WIDESTRPUT

tgif    	size = 4176
	_HB_FUN_TGIF                    

tgraph  	size = 55119
	_HB_FUN_TGRAPH                  

tgselect	size = 16687
	_HB_FUN_CHOOSEGRADIENT            _HB_FUN_TCHOOSEGRADIENT
	_HB_FUN_TGSELECTOR                _HB_FUN_TINK

theader 	size = 4068
	_HB_FUN_THEADER                 

thtmlpag	size = 1636
	_HB_FUN_THTMLPAGE               

timaglst	size = 2392
	_HB_FUN_TIMAGELIST              

time    	size = 2036
	_HB_FUN_TTIME                   

timer   	size = 2072
	_HB_FUN_TIMEREVENT                _HB_FUN_TTIMER

tindex  	size = 1784
	_HB_FUN_TINDEX                  

tlayout 	size = 3744
	_HB_FUN_TLAYOUT                 

tlex    	size = 2792
	_HB_FUN_TLEX                    

tlib    	size = 920
	_HB_FUN_TLIBFILE                

tlistvie	size = 8123
	_HB_FUN_TLISTVIEW                 _HB_FUN_TLISTVIEWGROUP
	_HB_FUN_TLISTVIEWITEM           

tlocks  	size = 3424
	_HB_FUN_TLOCKS                  

tmail   	size = 2448
	_HB_FUN_TMAIL                   

tmci    	size = 2356
	_HB_FUN_TMCI                    

tmcpserver	size = 9152
	_HB_FUN_CREATEMCPSERVER           _HB_FUN_ERRORHANDLER
	_HB_FUN_FREADLINE                 _HB_FUN_TMCPCONTEXT
	_HB_FUN_TMCPPROMPT                _HB_FUN_TMCPRESOURCE
	_HB_FUN_TMCPSERVER                _HB_FUN_TMCPTOOL

tmetafil	size = 6601
	_HB_FUN_GETEMFSIZE                _HB_FUN_GETOBJECTTYPE
	_HB_FUN_ISENHMETA                 _HB_FUN_ISHBITMAP
	_HB_FUN_TMETAFILE               

tmeterex	size = 6900
	_HB_FUN_TMETEREX                

tmetro  	size = 4588
	_HB_FUN_TMETRO                  

tmnucomp	size = 2244
	_HB_FUN_TMNUCOMP                

tmonthv 	size = 12047
	_HB_FUN_TMONTHVIEW              

tmsgitem	size = 9339
	_HB_FUN_TMSGITEM                

tneuralnet	size = 4111
	_HB_FUN_DSIGMOID                  _HB_FUN_MATH_E
	_HB_FUN_SIGMOID                   _HB_FUN_TNEURALLAYER
	_HB_FUN_TNEURALNETWORK            _HB_FUN_TNEURON

tnewsins	size = 17323
	_HB_FUN_TNEWSINSTANCE           

tnewssrv	size = 4696
	_HB_FUN_TNEWSSERVER             

todbc   	size = 11479
	_HB_FUN_TODBC                   

tollama 	size = 4136
	_HB_FUN_TAGENT                    _HB_FUN_TOLLAMA

toolbar 	size = 7380
	_HB_FUN_TTOOLBAR                

topenai 	size = 4968
	_HB_FUN_TOPENAI                 

tordinfo	size = 2016
	_HB_FUN_TORDINFO                

tpages  	size = 5468
	_HB_FUN_TPAGES                  

tpanel  	size = 5936
	_HB_FUN_TPANEL                  

tparser 	size = 976
	_HB_FUN_TPARSER                 

tpdf    	size = 12519
	_HB_FUN_TPDF                    

tpop3   	size = 4120
	_HB_FUN_TPOP3                   

tprogres	size = 3540
	_HB_FUN_TPROGRESS               

tproxy  	size = 2384
	_HB_FUN_TPROXY                  

trackbar	size = 3688
	_HB_FUN_TTRACKBAR               

tras    	size = 4760
	_HB_FUN_TRAS                    

trating 	size = 6636
	_HB_FUN_TRATING                 

trbgroup	size = 18207
	_HB_FUN_TRBGROUP                

trbtn   	size = 26407
	_HB_FUN_TRBTN                   

trdd    	size = 3684
	_HB_FUN_RDDEVENT                  _HB_FUN_TRDD
	_HB_FUN_VIRTUALRDD              

trddodbc	size = 6064
	_HB_FUN_TRDDODBC                

trecset 	size = 22155
	_HB_FUN_ADOERRORASTEXT            _HB_FUN_TRECSET

treeitem	size = 9388
	_HB_FUN_GETTREEBMPS               _HB_FUN_TTREEITEM

trees   	size = 2372
	_HB_FUN_SUMMARYDATAASTREE         _HB_FUN_TREEBEGIN
	_HB_FUN_TREEEND                   _HB_FUN_TREEFREE
	_HB_FUN__TREEITEM               

tribbon 	size = 41067
	_HB_FUN_GRADIENTBMP               _HB_FUN_TBACKSTAGE
	_HB_FUN_TBACKSTAGEOPTION          _HB_FUN_TQUICKACCESS
	_HB_FUN_TRIBBONBAR              

triched5	size = 48423
	_HB_FUN_MNUCOLORS                 _HB_FUN_TRICHEDIT5

trichedi	size = 26651
	_HB_FUN_TRICHEDIT               

trpanel 	size = 2332
	_HB_FUN_TRPANEL                 

tsaybcod	size = 4044
	_HB_FUN_TSAYBARCODE             

tselex  	size = 12027
	_HB_FUN_TSELEX                  

tskinbtn	size = 2304
	_HB_FUN_TSKINBUTTON             

tsmtp   	size = 14667
	_HB_FUN_CFILENOPATHSMTP           _HB_FUN_TSMTP

tsocket 	size = 6868
	_HB_FUN_SHOWIP                    _HB_FUN_TSOCKET

tstruct 	size = 4048
	_HB_FUN_THISSTRUCT                _HB_FUN_TSTRUCT

tswitch 	size = 9327
	_HB_FUN_TSWITCH                 

ttabctrl	size = 4304
	_HB_FUN_TTABCONTROL             

ttitle  	size = 21199
	_HB_FUN_TTITLE                    _HB_FUN_TTITLEIMG
	_HB_FUN_TTITLETEXT              

ttmpicke	size = 5776
	_HB_FUN_TTIMEPICK               

ttoast  	size = 21155
	_HB_FUN_TIPTIMEHIDE               _HB_FUN_TIPTRANSFLICKER
	_HB_FUN_TIPTRANSHIDE              _HB_FUN_TIPTRANSSHOW
	_HB_FUN_TTOAST                  

ttray   	size = 4580
	_HB_FUN_GETNOTIFYICONDATA         _HB_FUN_TTRAYICON

ttreevie	size = 12739
	_HB_FUN_TTREEVIEW               

ttvitem 	size = 4528
	_HB_FUN_TTVITEM                 

ttxtedit	size = 33555
	_HB_FUN_TTXTEDIT                  _HB_FUN_TTXTUNDO

ttxtfile	size = 5112
	_HB_FUN_TTXTFILE                

twebcam 	size = 9295
	_HB_FUN_GETVIDEOCAPDRIVER         _HB_FUN_TWEBCAM
	_HB_FUN__WEBCAM_EVENT           

twebclie	size = 2084
	_HB_FUN_TWEBCLIENT              

twebserv	size = 9472
	_HB_FUN_CLIENTIP                  _HB_FUN_GETQUERY
	_HB_FUN_SERVERIP                  _HB_FUN_TWEBSERVER
	_HB_FUN_UNESCAPE                

twebsock	size = 4824
	_HB_FUN_TWEBSOCKETSERVER        

twebview	size = 5964
	_HB_FUN_BUILDWEBVIEW              _HB_FUN_ISWEBVIEWAVAILABLE
	_HB_FUN_TWEBVIEW                  _HB_FUN_TWEBVIEWITEM
	_HB_FUN_WEBVIEW                   _HB_FUN_WEBVIEWITEMREDEFINE
	_HB_FUN_WEBVIEW_GETVALUES         _HB_FUN_WEBVIEW_HANDLEEVENT

twebview2	size = 5936
	_HB_FUN_FW_WEBVIEW                _HB_FUN_TWEBVIEW2
	_HB_FUN_WEBVIEW2_ONBIND           _HB_FUN_WEBVIEW2_ONEVAL
	_HB_FUN_WEBVIEW2_ONNAVIGATIONCOMPLETED

tweekv  	size = 8411
	_HB_FUN_TWEEKVIEW               

tyacc   	size = 4448
	_HB_FUN_TYACC                   

uidialog	size = 6852
	_HB_FUN_DLGBARTITLEUI             _HB_FUN_DLGVS
	_HB_FUN_NCUANTAS                  _HB_FUN_TDIALOGUI

uiwindow	size = 51843
	_HB_FUN_CARGAIMGBTT               _HB_FUN_CHANGECOLORBAR
	_HB_FUN_CHANGECOLORIMG            _HB_FUN_DRAWTXTROW
	_HB_FUN_KEYBD_EVENT               _HB_FUN_LOADIMGUI
	_HB_FUN_SINB                      _HB_FUN_TWINDOWSUI

urllink 	size = 5628
	_HB_FUN_TURLLINK                

valblank	size = 4830
	_HB_FUN_ARRAYTOTEXT               _HB_FUN_CCLRTOCODE
	_HB_FUN_CVALTOCHAR                _HB_FUN_FW_CLRTOHTML
	_HB_FUN_FW_DEFAULT                _HB_FUN_FW_READVAR
	_HB_FUN_IFNIL                     _HB_FUN_NRGBADD
	_HB_FUN_NRGBRESET                 _HB_FUN_UVALBLANK
	_HB_FUN_XEVAL                   

valtostr	size = 23285
	_HB_FUN_ARRAYTOTEXTBOX            _HB_FUN_ARRTOHASH
	_HB_FUN_ARRTOJSON                 _HB_FUN_CNUM2EXPFORMAT
	_HB_FUN_CNUMTOSTR                 _HB_FUN_COMPAREUNISTR
	_HB_FUN_CURRENCYSYMBOL            _HB_FUN_CVALTOSTR
	_HB_FUN_DATETIMEFROMFILETIME      _HB_FUN_DBF_FIELDPIC
	_HB_FUN_EXPANDNUMPICT             _HB_FUN_FITNUMPICTTOVAL
	_HB_FUN_FWNUMFORMAT               _HB_FUN_FW_ADDMONTH
	_HB_FUN_FW_ADDTIME                _HB_FUN_FW_AGE
	_HB_FUN_FW_ALLTRIM                _HB_FUN_FW_ARRAYASLIST
	_HB_FUN_FW_ARRAYTOCSV             _HB_FUN_FW_ARRAYTOHTML
	_HB_FUN_FW_CONCAT                 _HB_FUN_FW_CONCAT_WS
	_HB_FUN_FW_DATETOUNIX             _HB_FUN_FW_DTOT
	_HB_FUN_FW_JSONDECODE             _HB_FUN_FW_LISTASARRAY
	_HB_FUN_FW_LTRIM                  _HB_FUN_FW_MTHSLAPSED
	_HB_FUN_FW_NEXTBIRTHDAY           _HB_FUN_FW_PROPERCASE
	_HB_FUN_FW_RTRIM                  _HB_FUN_FW_SETJSONHUMAN
	_HB_FUN_FW_STOT                   _HB_FUN_FW_STUFF
	_HB_FUN_FW_TABLESTYLEHTML         _HB_FUN_FW_TIMEPART
	_HB_FUN_FW_TIMEZONE               _HB_FUN_FW_TIMEZONENAME
	_HB_FUN_FW_TRANSFORM              _HB_FUN_FW_TRIM
	_HB_FUN_FW_TTOD                   _HB_FUN_FW_UNIXTODATE
	_HB_FUN_FW_UTCTOLOCAL             _HB_FUN_FW_UTF8LEFT
	_HB_FUN_FW_UTF8RIGHT              _HB_FUN_FW_UTF8STUFF
	_HB_FUN_FW_UTF8SUBSTR             _HB_FUN_FW_VALTOCSV
	_HB_FUN_FW_VALTOEXP               _HB_FUN_FW_VALTOHTML
	_HB_FUN_FW_YMDLAPSED              _HB_FUN_INTPICT
	_HB_FUN_ISBINARYDATA              _HB_FUN_ISROMANNUMBER
	_HB_FUN_ISTEXTUNICODE             _HB_FUN_MAKEIID
	_HB_FUN_NSTRTONUM                 _HB_FUN_NUMPICT
	_HB_FUN_NUMPICTADDCURRENCY        _HB_FUN_NUMPICTFORVAL
	_HB_FUN_STRBETWEEN                _HB_FUN_TABLETOHTMLPAGE
	_HB_FUN_UCHARTOVAL                _HB_FUN_UTC_TIMESTAMP
	_HB_FUN_UTF16TOUTF8               _HB_FUN_UTF8TOUTF16
	_HB_FUN_WHEELSCROLL             

valtostt	size = 248
	_HB_FUN_FW_DT2STR                 _HB_FUN_FW_STR2DT

video   	size = 2832
	_HB_FUN_TVIDEO                  

vistamnu	size = 22394
	_HB_FUN_C5SETSCROLLINFO           _HB_FUN_INTERSECTRECT
	_HB_FUN_TVISTAMENU                _HB_FUN_TVISTAMENUITEM

vrd     	size = 44247
	_HB_FUN_DELFILE                   _HB_FUN_ENTRYNR
	_HB_FUN_FULLPATHNAME              _HB_FUN_GETINIENTRY
	_HB_FUN_GETINISECTION             _HB_FUN_GETPPSECTION
	_HB_FUN_REGOPENKEYEXA             _HB_FUN_REGQUERYVALUEEXA
	_HB_FUN_VRD                       _HB_FUN_VRD_ATOKEN
	_HB_FUN_VRD_ERSTART               _HB_FUN_VRD_GETFIELD
	_HB_FUN_VRD_GETFULLPATH           _HB_FUN_VRD_GETGROUP
	_HB_FUN_VRD_GETREGISTRY           _HB_FUN_VRD_GL
	_HB_FUN_VRD_LF2SF                 _HB_FUN_VRD_NEWSTRUCTURE
	_HB_FUN_VRD_PRREPORT              _HB_FUN_VRD_SETFIELD
	_HB_FUN_VRD_STRCOUNT              _HB_FUN_VRD_XTOC

vrdbcode	size = 11700
	_HB_FUN_VRDBARCODE              

vrdini  	size = 3592
	_HB_FUN_GETPROFSECT               _HB_FUN_TINIER

vrditem 	size = 9016
	_HB_FUN_VRDITEM                 

vstrfun1	size = 5496
	_HB_FUN_FINDMATCH                 _HB_FUN_FIRSTWORD
	_HB_FUN_FW_AT                     _HB_FUN_FW_EXPRNASBLOCK
	_HB_FUN_FW_STRICMP                _HB_FUN_FW_STRIPCOMMENTS
	_HB_FUN_ISINLIST                  _HB_FUN_VALTYPEX

wbrowse 	size = 44751
	_HB_FUN_TWBROWSE                  _HB_FUN__AFIELDS

webapp  	size = 9352
	_HB_FUN_BUTTONHTML                _HB_FUN_CHECKBOXHTML
	_HB_FUN_CTRLSHTML                 _HB_FUN_EDITHTML
	_HB_FUN_GETWEBAPP                 _HB_FUN_ISWEBAPP
	_HB_FUN_SETWEBAPP                 _HB_FUN_STATICHTML
	_HB_FUN_WA_ADDDIALOG              _HB_FUN_WA_CONTROLLER
	_HB_FUN_WA_EXISTDIALOG            _HB_FUN_WA_GETDIALOGFROMID
	_HB_FUN_WA_GETDIALOGFROMLINK      _HB_FUN_WA_HEADER
	_HB_FUN_WA_SHOWCODEDIALOGS        _HB_FUN_WEBSERVER

webserver	size = 5462
	_HB_FUN_HBWEBSERVER               _HB_FUN_HB_URLDECODE
	_HB_FUN_OBJSETDATA                _HB_FUN_OBJTOCHAR

window  	size = 66407
	_HB_FUN_AREAD                     _HB_FUN_ASAVE
	_HB_FUN_ATOTEXT                   _HB_FUN_BRWCLASSES
	_HB_FUN_CLEARDATASLIST            _HB_FUN_DBUFFEREND
	_HB_FUN_DEVICETOUCHSPACE          _HB_FUN_FW_TOUCHFRIENDLY
	_HB_FUN_GETALLWIN                 _HB_FUN_GETDROPINFO
	_HB_FUN_GETMSGLOG                 _HB_FUN_GETSETWINSYSLOG
	_HB_FUN_GETWNDDEFAULT             _HB_FUN_MSGLOG
	_HB_FUN_NWINDOWS                  _HB_FUN_OREAD
	_HB_FUN_OWNDFROMHWND              _HB_FUN_SETALPHA
	_HB_FUN_SETBALLOON                _HB_FUN_SETDRAGBEGINWND
	_HB_FUN_SETDROPINFO               _HB_FUN_SETSKINS
	_HB_FUN_SETWNDDEFAULT             _HB_FUN_STARTFWLOG
	_HB_FUN_TWINDOW                   _HB_FUN_WNDCREATEERROR
	_HB_FUN_WNDMAIN                   _HB_FUN_WNDPARENTS
	_HB_FUN__FWH                    

wininet 	size = 7844
	_HB_FUN_FTPCREATEDIRECTORY        _HB_FUN_FTPDELETEFILE
	_HB_FUN_FTPFINDFIRSTFILE          _HB_FUN_FTPGETFILE
	_HB_FUN_FTPOPENFILE               _HB_FUN_FTPPUTFILE
	_HB_FUN_FTPRENAMEFILE             _HB_FUN_FTPSETCURRENTDIRECTORY
	_HB_FUN_INTERAUTHA                _HB_FUN_INTERNETAT
	_HB_FUN_INTERNETAU                _HB_FUN_INTERNETCLOSEHANDLE
	_HB_FUN_INTERNETCONNECT           _HB_FUN_INTERNETDI
	_HB_FUN_INTERNETFINDNEXTFILE      _HB_FUN_INTERNETGO
	_HB_FUN_INTERNETHA                _HB_FUN_INTERNETOPEN
	_HB_FUN_INTERNETREADFILE          _HB_FUN_INTERNETSETFILEPOINTER
	_HB_FUN_INTERNETST                _HB_FUN_INTERNETWRITEFILE
	_HB_FUN_INTRESPINF                _HB_FUN_WININET

winrt   	size = 3796
	_HB_FUN_ROGETACTIVATIONFACTORY    _HB_FUN_ROINITIALIZE
	_HB_FUN_ROUNINITIALIZE            _HB_FUN_TOAST
	_HB_FUN_WINDOWSCREATESTRING       _HB_FUN_WINDOWSDELETESTRING
	_HB_FUN_WINDOWSGETSTRINGRAWBUFFER  _HB_FUN_WINRTSTRING

wqout   	size = 400
	_HB_FUN_WQOUT                   

xbrcode 	size = 19199
	_HB_FUN_CFONTCODE                 _HB_FUN_TXBRCODE
	_HB_FUN_TXBRCOLCODE             

xbrgetdt	size = 7748
	_HB_FUN_RESETCAL                  _HB_FUN_SETUPCOL
	_HB_FUN_TDTXBROWSE                _HB_FUN_XBRGETDATE

xbrowse 	size = 264311
	_HB_FUN_CALCLINEWH                _HB_FUN_CONTRASTCOLOR
	_HB_FUN_DRAWHORZ                  _HB_FUN_DRAWPEN
	_HB_FUN_DRAWVERT                  _HB_FUN_EXTRACTLINE
	_HB_FUN_HASHTREE                  _HB_FUN_ISRECORDSET
	_HB_FUN_PARSEXBRCOLSPEC           _HB_FUN_SETKINETIC
	_HB_FUN_SETXBROWSE                _HB_FUN_TXBROWS
	_HB_FUN_TXBROWSE                  _HB_FUN_TXBRWCOLUMN
	_HB_FUN_XADS_KEYGOTO              _HB_FUN_XBRADOSAVE
	_HB_FUN_XBREDITMEMO               _HB_FUN_XBRGETSELECTALL
	_HB_FUN_XBRHEXEDIT                _HB_FUN_XBRIMAGEEDIT
	_HB_FUN_XBRJUSTIFY                _HB_FUN_XBRNUMFORMAT
	_HB_FUN_XBROWSABLEOBJ             _HB_FUN_XBROWSENEW
	_HB_FUN_XBRSQLRDDMODE             _HB_FUN_XBRWSETDATASOURCE
	_HB_FUN_XREPORT                 

xbrowser	size = 10775
	_HB_FUN_XBROWSE                 

xcbrowse	size = 42219
	_HB_FUN_CLICKOUTEND               _HB_FUN_DAFMTOTXT
	_HB_FUN_DRAWROWN                  _HB_FUN_GENMENUBLOCK
	_HB_FUN_TXCBROWS                  _HB_FUN_TXCBROWSE
	_HB_FUN_TXCBRWCOLUMN              _HB_FUN_XBRWLINDET
	_HB_FUN_XBRWTEXTFILE              _HB_FUN_XCBROWSEMNU
	_HB_FUN_XCBROWSENEW               _HB_FUN_XCBROWSETREE
	_HB_FUN_XMAKETREE                 _HB_FUN_XSUBTREE
	_HB_FUN_XTOGGLEFOLDER           

ximage  	size = 29213
	_HB_FUN_ANGLE3PT                  _HB_FUN_ROTATEBMP
	_HB_FUN_TXIMAGE                   _HB_FUN_WMF2EMFX
	_HB_FUN_XIMAGE                    _HB_FUN_XIMAGEARRAY

xmlview 	size = 5224
	_HB_FUN_FW_XMLVIEW                _HB_FUN_XBROWSEXML

xpad    	size = 740
	_HB_FUN_GETFREESYSTEMRESOURCES    _HB_FUN_XPADC
	_HB_FUN_XPADL                     _HB_FUN_XPADR
]]>

Please copy these two files to FWH\samples

fiveh.lst

Code: Select all | Expand

Publics by module

activex 	size = 6872
	_HB_FUN_TACTIVEX                  _HB_FUN_THACTIVEX

adofuncs	size = 49883
	_HB_FUN_ADOCREATECOLSQL           _HB_FUN_ADODEFAULT
	_HB_FUN_ADONULL                   _HB_FUN_ADOROLLUPTREE
	_HB_FUN_ADOROLLUPTREEBROWSE       _HB_FUN_DBMSNUM
	_HB_FUN_FIELDTYPEADOTODBF         _HB_FUN_FWADOAPPENDBLANK
	_HB_FUN_FWADOCREATETABLE          _HB_FUN_FWADODELRECORD
	_HB_FUN_FWADOFIELDDEC             _HB_FUN_FWADOFIELDLEN
	_HB_FUN_FWADOFIELDSIZE            _HB_FUN_FWADOFIELDSTRUCT
	_HB_FUN_FWADOFIELDTYPE            _HB_FUN_FWADOLOADRECORD
	_HB_FUN_FWADOMEMOSIZETHRESHOLD    _HB_FUN_FWADOSAVERECORD
	_HB_FUN_FWADOSTRUCT               _HB_FUN_FW_ACEVER
	_HB_FUN_FW_ADOADDCOL              _HB_FUN_FW_ADOADDMODICOLSQL
	_HB_FUN_FW_ADOAPPLYPARAMS         _HB_FUN_FW_ADOCATALOGS
	_HB_FUN_FW_ADOCONNECTIONSTRING    _HB_FUN_FW_ADOCREATEINDEX
	_HB_FUN_FW_ADOCREATETABLESQL      _HB_FUN_FW_ADOCURRENTDB
	_HB_FUN_FW_ADODATETIME            _HB_FUN_FW_ADODROPINDEX
	_HB_FUN_FW_ADOEXPORTTODBF         _HB_FUN_FW_ADOFIELDUPDATEABLE
	_HB_FUN_FW_ADOIMPORTFROMDBF       _HB_FUN_FW_ADOINDEXES
	_HB_FUN_FW_ADOMODIFYCOL           _HB_FUN_FW_ADOPIVOTARRAY
	_HB_FUN_FW_ADOPIVOTRS             _HB_FUN_FW_ADOPRIMARYKEY
	_HB_FUN_FW_ADOQUERYRESULT         _HB_FUN_FW_ADORECONNECT
	_HB_FUN_FW_ADORSTOCSV             _HB_FUN_FW_ADORSTOHTML
	_HB_FUN_FW_ADORSTOTEXT            _HB_FUN_FW_ADOSELECTDB
	_HB_FUN_FW_ADOTABLEEXISTS         _HB_FUN_FW_ADOTABLES
	_HB_FUN_FW_ADOTOEXCEL             _HB_FUN_FW_ADOUNQUOTE
	_HB_FUN_FW_ARRAYASRECORDSET       _HB_FUN_FW_COMPACTMDB
	_HB_FUN_FW_CREATEMDB              _HB_FUN_FW_DATETOADO
	_HB_FUN_FW_DATETOSQL              _HB_FUN_FW_FILTER2WHERE
	_HB_FUN_FW_FILTERDBF2ADO          _HB_FUN_FW_GETADOERROR
	_HB_FUN_FW_MSSQLDB                _HB_FUN_FW_MSSQL_BACKUP
	_HB_FUN_FW_MSSQL_RESTORE          _HB_FUN_FW_ONADOERROR
	_HB_FUN_FW_OPENADOCONNECTION      _HB_FUN_FW_OPENADOEXCELBOOK
	_HB_FUN_FW_OPENADOEXCELSHEET      _HB_FUN_FW_OPENRECORDSET
	_HB_FUN_FW_OPENTRECSET            _HB_FUN_FW_QUOTEDCOLSQL
	_HB_FUN_FW_RDBMSNAME              _HB_FUN_FW_RECSETHEADERS
	_HB_FUN_FW_REOPENRECORDSET        _HB_FUN_FW_SHOWADOERROR
	_HB_FUN_FW_VALTOSQL               _HB_FUN_MSSQL_BULKIMPORTDBF
	_HB_FUN_RSGETROWS                 _HB_FUN_RSTOHASH
	_HB_FUN_RSTOJSON                  _HB_FUN_TADOCOMMAND
	_HB_FUN_TRM                       _HB_FUN_UTYPETOBLANK

alert   	size = 3212
	_HB_FUN_ALERT                   

autoget 	size = 11251
	_HB_FUN_TAUTOGET                  _HB_FUN_TGETLIST

bar     	size = 25647
	_HB_FUN_GRADIENT2000              _HB_FUN_TBAR

bartabs 	size = 2684
	_HB_FUN_TBARTABS                

bitmap  	size = 16799
	_HB_FUN_PALBMPFREE                _HB_FUN_PALBMPNEW
	_HB_FUN_TBITMAP                 

block   	size = 1228
	_HB_FUN_TBLOCK                  

browse  	size = 4408
	_HB_FUN_BROWSE                    _HB_FUN_REPORT

brush   	size = 13063
	_HB_FUN_GRADIENTBRUSH             _HB_FUN_RESIZEBITMAP
	_HB_FUN_TBRUSH                  

brushex 	size = 1312
	_HB_FUN_TBRUSHEX                

btnbmp  	size = 36407
	_HB_FUN_TBTNBMP                 

btnflat 	size = 8231
	_HB_FUN_TBTNFLAT                

button  	size = 6912
	_HB_FUN_TBUTTON                 

buttonb 	size = 6416
	_HB_FUN_TBUTTONBMP              

c5lib   	size = 8935
	_HB_FUN_AC5BOX                    _HB_FUN_ASPLIT
	_HB_FUN_C5BOX                     _HB_FUN_COLORES
	_HB_FUN_CREAAROWRIGHT             _HB_FUN_CREABITMAPEX
	_HB_FUN_CREABITMAPEX2             _HB_FUN_CREAVGRIP
	_HB_FUN_DLGCHANGESIZE             _HB_FUN_DRAWMTEXT
	_HB_FUN_FINDCHAR                  _HB_FUN_FONTUNDER
	_HB_FUN_GENIMAGELIST              _HB_FUN_GETBITMAP16
	_HB_FUN_GETBITMAPSIZE             _HB_FUN_GETDEFFONT
	_HB_FUN_GETORIGINALORDEN          _HB_FUN_ICON2BMP
	_HB_FUN_LFN2SFNEX                 _HB_FUN_LOADACCESOS
	_HB_FUN_LOADICONEX                _HB_FUN_LOADIMAGEEX
	_HB_FUN_LOADIMAGEEX2              _HB_FUN_LTHEMES
	_HB_FUN_MEMOWRITEX                _HB_FUN_RESTORESCREENFROMBMP
	_HB_FUN_SAVESCREENASBMP           _HB_FUN_STRCOUNT
	_HB_FUN_XADRIVES                  _HB_FUN___MIRROW

c5tooltp	size = 11531
	_HB_FUN_TC5TOOLTIP              

calinfo 	size = 6456
	_HB_FUN_TCALINFO                

callstac	size = 2968
	_HB_FUN_CCALLSTACK                _HB_FUN_SHOWCALLSTACK
	_HB_FUN_STACKVARS               

chatgpt 	size = 2760
	_HB_FUN_TCHATGPT                

checkbox	size = 7160
	_HB_FUN_TCHECKBOX               

checkres	size = 1482
	DelResource                       _HB_FUN_CHECKRES
	_HB_FUN_FWADDRESOURCE             _HB_FUN_FWDELRESOURCE
	_HB_FUN_SETRESDEBUG               _RegisterResource

clipbrd 	size = 4304
	_HB_FUN_GETCLIPCONTENTFORMAT      _HB_FUN_TCLIPBOARD

clipmore	size = 492
	_HB_FUN_RLNEW                     _HB_FUN_RLQUERY

combobox	size = 20863
	_HB_FUN_SETCBXCOLORFOCUS          _HB_FUN_TCOMBOBOX
	_HB_FUN_TDRAWITEMSTRUCT         

combom  	size = 13759
	_HB_FUN_TCOMBOMETRO             

control 	size = 30079
	_HB_FUN_GETGRIDSIZE               _HB_FUN_SETGRIDSIZE
	_HB_FUN_TCONTROL                

crcard  	size = 2044
	_HB_FUN_FW_VALIDCREDITCARD      

cursor  	size = 3512
	_HB_FUN_TCURSOR                 

database	size = 39523
	_HB_FUN_TDATABASE               

datarow 	size = 47499
	_HB_FUN_BTNCHOOSECOLOR            _HB_FUN_EXTRACTBMP
	_HB_FUN_FW_COPYRECORD             _HB_FUN_FW_EDITHASH
	_HB_FUN_FW_PASTERECORD            _HB_FUN_FW_RECORD
	_HB_FUN_MAKEBMPARRAY              _HB_FUN_TDATAROW
	_HB_FUN_XEDIT                   

dbcombo 	size = 9040
	_HB_FUN_TDBCOMBO                

dbffunc1	size = 2948
	_HB_FUN_DBF_APPLYPARAMS           _HB_FUN_DBF_NEEDSLOCK
	_HB_FUN_DBROLLBACK                _HB_FUN_DBROLLBACKALL
	_HB_FUN_FIELDINEXPR               _HB_FUN_FW_DBFTOARRAY
	_HB_FUN_FW_DBFTOHASH              _HB_FUN_FW_DBFTOHTML
	_HB_FUN_FW_DBFTOJSON              _HB_FUN_ORDERTAGINFO

dbffunc2	size = 16256
	_HB_FUN_CONVERTTYPE               _HB_FUN_DBFAPPEND
	_HB_FUN_FW_ARRAYTODBF             _HB_FUN_FW_ARRAYTODBFEX
	_HB_FUN_FW_CDXCREATE              _HB_FUN_FW_COPYDBFTO
	_HB_FUN_FW_DBFILTERBLOCK          _HB_FUN_FW_DBFLOOKUP
	_HB_FUN_FW_DBFRENAMEFIELD         _HB_FUN_FW_DBFSQLQUERY
	_HB_FUN_FW_DBFSTRUCT              _HB_FUN_FW_DBFTOEXCEL
	_HB_FUN_FW_DBINSERT               _HB_FUN_FW_EXCELTODBF
	_HB_FUN_FW_FIELDSPUT              _HB_FUN_FW_HASHTOREC
	_HB_FUN_FW_INDEXINFO              _HB_FUN_FW_RECTOHASH
	_HB_FUN_FW_RECTOJSON              _HB_FUN_FW_SAVEARRAYTODBF
	_HB_FUN_FW_SETRECYCLEDELETED      _HB_FUN_SPLITATAS

dbffunc9	size = 1808
	_HB_FUN_GETRECYCLEDREC          

dbgabout	size = 1936
	_HB_FUN_DBGABOUT                

dbgalert	size = 1948
	_HB_FUN_DBGALERT                

dbgmemo 	size = 1812
	_HB_FUN_DBGMEMO                 

dbgprint	size = 2100
	_HB_FUN_DBGPRINT                

dbgtable	size = 2688
	_HB_FUN_DBGTABLE                

dbgtrace	size = 2976
	_HB_FUN_DBGTRACE                

dbtools 	size = 1396
	_HB_FUN_AGETWORKAREAS             _HB_FUN_CGETNEWALIAS
	_HB_FUN_CGETNEWALIASNAME          _HB_FUN_DUPRECORD
	_HB_FUN_GETORDNAMES             

dde     	size = 2756
	_HB_FUN_DDEACK                    _HB_FUN_DDETERMINATE
	_HB_FUN_TDDE                    

ddeclien	size = 4416
	_HB_FUN_TDDECLIENT              

dialog  	size = 23135
	_HB_FUN_FW_SETTRUEPIXEL           _HB_FUN_SETCENTERONPARENT
	_HB_FUN_SETDIALOGESC              _HB_FUN_SETDLGGRADIENT
	_HB_FUN_TDIALOG                 

dlgfind 	size = 1896
	_HB_FUN_DLGFINDTEXT               _HB_FUN_TDLGFIND

dlgs32  	size = 2296
	_HB_FUN_CGETDIR32                 _HB_FUN_CGETFILE32
	_HB_FUN_NGETFILTER32            

dostofwh	size = 5760
	_HB_FUN_ADDDOSMENUPROMPT          _HB_FUN_EXECDOSMENUPROMPT
	_HB_FUN_FW_DBEDIT                 _HB_FUN_FW_DOSCLEAR
	_HB_FUN_FW_DOSDIALOG              _HB_FUN_FW_DOSREAD
	_HB_FUN_FW_SETCOLOR             

dotnet_ 	size = 6284
	_HB_FUN_CLRCREATEINSTANCE         _HB_FUN_FW_DOTNET
	_HB_FUN_FW_DOTNETERROR            _HB_FUN_TDOTNET

drawbmp 	size = 860
	_HB_FUN_DRAWTEXTTRANSPARENT       _HB_FUN_DRAWTILED
	_HB_FUN_DRAWTRANSPARENT         

drxl    	size = 9939
	_HB_FUN_CGETFILEXLSX              _HB_FUN_CTEMPXLSX
	_HB_FUN_DRXLSFORMAT               _HB_FUN_DRXLSXLINKED
	_HB_FUN_DRXLSXOBJ                 _HB_FUN_FWDRXLSX
	_HB_FUN_USEDRXLSX                 _HB_FUN_USEXLSXLIB
	_HB_FUN_XLSXLIBLINKED             _HB_FUN_XLSXLIBOBJ
	_HB_FUN_XLSXOBJ                 

edit    	size = 7819
	_HB_FUN_TEDIT                   

editcell	size = 1664
	_HB_FUN_EDITCELL                

epfunc  	size = 896
	_HB_FUN_EP_GETTEMPPATH            _HB_FUN_EP_LINKEDTOAPP
	_HB_FUN_EP_SETPATH                _HB_FUN_EP_TIDYUP

ereport 	size = 74819
	_HB_FUN_AREACHANGE                _HB_FUN_AREAHIDE
	_HB_FUN_AREAPROPERTIES            _HB_FUN_BARMENU
	_HB_FUN_BETAVERSION               _HB_FUN_CHECKSTYLE
	_HB_FUN_CLICKLISTTREE             _HB_FUN_CLIENTWINDOWS
	_HB_FUN_DECLAREPUBLICS            _HB_FUN_DEFINEFONTS
	_HB_FUN_DELSELECTITEMS            _HB_FUN_DRAWRULERHORZLINE
	_HB_FUN_DRAWRULERVERTLINE         _HB_FUN_ERBUILDMENU
	_HB_FUN_EREPORT                   _HB_FUN_ERGETALLITEMS
	_HB_FUN_ER_MDICHILD               _HB_FUN_ER_MOUSEWHEEL
	_HB_FUN_ER_SETCOLOR               _HB_FUN_EXITEREPORT
	_HB_FUN_FONTSANDCOLORS            _HB_FUN_GENERATESOURCE
	_HB_FUN_GETALLCOLORS              _HB_FUN_GETCOLOR
	_HB_FUN_GETCURRENTFONT            _HB_FUN_GETFONTS
	_HB_FUN_GETFONTTEXT               _HB_FUN_GETPAPERSIZES
	_HB_FUN_INIMAINWINDOW             _HB_FUN_ITEMLIST
	_HB_FUN_LISTTREES                 _HB_FUN_MDL2
	_HB_FUN_MSGBARINFOS               _HB_FUN_OPTIONS
	_HB_FUN_PAINTGRID                 _HB_FUN_POPUPMENU
	_HB_FUN_PREVIEWMENU               _HB_FUN_PREVIEWREFRESH
	_HB_FUN_REPORTSETTINGS            _HB_FUN_SCROLLHORIZONT
	_HB_FUN_SCROLLVERTICAL            _HB_FUN_SELECTFONT
	_HB_FUN_SET2COLOR                 _HB_FUN_SET3COLOR
	_HB_FUN_SETAREAFORMULABTN         _HB_FUN_SETGENERALSETTINGS
	_HB_FUN_SETGRAPHTREEBMP           _HB_FUN_SETMAINWND
	_HB_FUN_SETSCROLLBAR              _HB_FUN_SETTITLECOLOR
	_HB_FUN_SETWINNULL                _HB_FUN_SHOWAREASONBAR
	_HB_FUN_SHOWCOLORCHOICE           _HB_FUN_SHOWFONTCHOICE
	_HB_FUN_STARTMESSAGE              _HB_FUN_TEASYREPORT
	_HB_FUN_TSCRIPT                   _HB_FUN_TTHISREPORT
	_HB_FUN_WNDKEYDOWNACTION        

erfile  	size = 22807
	_HB_FUN_ASKSAVEFILES              _HB_FUN_CHECKFILENAME
	_HB_FUN_CREATEBACKUP              _HB_FUN_CREATENEWREPORT
	_HB_FUN_ER_NEWREPORT              _HB_FUN_ER_SAVEAS
	_HB_FUN_FILEINFOS                 _HB_FUN_MOVERECORD
	_HB_FUN_OPENFILE                  _HB_FUN_SAVEASFILE
	_HB_FUN_SAVEFILE                  _HB_FUN_SETNEWREPORTDEFAULTS
	_HB_FUN_SETSAVE                   _HB_FUN_SETSAVEINFOS

eritems 	size = 45663
	_HB_FUN_BARCODEPROPERTIES         _HB_FUN_DEACTIVATEITEM
	_HB_FUN_DELETEALLITEMS            _HB_FUN_DELETEITEM
	_HB_FUN_DELITEMWITHKEY            _HB_FUN_DRAWBARCODE
	_HB_FUN_DRAWGRAPHIC               _HB_FUN_EDITSOURCECODE
	_HB_FUN_ELEMENTACTIONS            _HB_FUN_ER_SHOWITEM
	_HB_FUN_GETCOLORBTN               _HB_FUN_GETGRAPHINDEX
	_HB_FUN_GETGRAPHNAME              _HB_FUN_GETIMAGESIZE
	_HB_FUN_GETITEMDLGPOS             _HB_FUN_GETOVAR
	_HB_FUN_GRAPHICPROPERTIES         _HB_FUN_IMAGEPROPERTIES
	_HB_FUN_ISGRAPHIC                 _HB_FUN_ITEMCOPY
	_HB_FUN_ITEMPASTE                 _HB_FUN_ITEMPOPUPMENU
	_HB_FUN_ITEMPROPERTIES            _HB_FUN_KEYDOWNACTION
	_HB_FUN_MSGBARITEM                _HB_FUN_MULTIITEMPROPERTIES
	_HB_FUN_NEWITEM                   _HB_FUN_SAVEBARITEM
	_HB_FUN_SAVEGRAITEM               _HB_FUN_SAVEIMGITEM
	_HB_FUN_SAVEITEMGENERAL           _HB_FUN_SAVETEXTITEM
	_HB_FUN_SETFORMULABTN             _HB_FUN_SETITEMDEFAULT
	_HB_FUN_SETITEMDLG                _HB_FUN_SETITEMSIZE
	_HB_FUN_TEXTPROPERTIES            _HB_FUN_UPDATEITEMS

eritems2	size = 2964
	_HB_FUN_INVERTSELECTION           _HB_FUN_MARKITEM
	_HB_FUN_MOVESELECTION             _HB_FUN_MSGSELECTED
	_HB_FUN_REFRESHSELECTION          _HB_FUN_SELECTALLITEMS
	_HB_FUN_SELECTITEM                _HB_FUN_STARTSELECTION
	_HB_FUN_STOPSELECTION             _HB_FUN_TOGGLEITEMSELECTION
	_HB_FUN_UNSELECTALL             

errsysw 	size = 9316
	_HB_FUN_ERRORLINK                 _HB_FUN_ERRORSYS
	_HB_FUN_FWERRORSYS                _HB_FUN_FW_GT
	_HB_FUN_GETCPU                    _HB_FUN_HB_GTSYS
	_HB_FUN_SETERRORDIALOG            _HB_FUN_SETERRORFILENAME
	_HB_FUN_SETERRORPATH              _HB_FUN_SETPOSTERRORACTION

ertools 	size = 34983
	_HB_FUN_ADD2UNDO                  _HB_FUN_ADDTORECENTDOCS
	_HB_FUN_ADELETE                   _HB_FUN_ALTPRINTREPORT
	_HB_FUN_CHECKEXPRESSION           _HB_FUN_CLEARUNDOREDO
	_HB_FUN_CLOSEUNDO                 _HB_FUN_COPYTOEXPRESS
	_HB_FUN_CREATEDBFSEXPRESSIONS     _HB_FUN_CREATENEWFILE
	_HB_FUN_DATABASES                 _HB_FUN_DELDBASE
	_HB_FUN_DELETEAREA                _HB_FUN_EDITLANGUAGE
	_HB_FUN_ERCOPYFILE                _HB_FUN_ER_CHECKPATH
	_HB_FUN_ER_GETPIXEL               _HB_FUN_EXPRESSIONS
	_HB_FUN_GETBARCODES               _HB_FUN_GETCMINCH
	_HB_FUN_GETDBASE                  _HB_FUN_GETDBFIELD
	_HB_FUN_GETDIVISIBLE              _HB_FUN_GETEXPRFIELDS
	_HB_FUN_GETFIELD                  _HB_FUN_GETFILE
	_HB_FUN_GETLANGUAGE               _HB_FUN_GETSOURCETOOLTIP
	_HB_FUN_GL                        _HB_FUN_GOBOTTOM
	_HB_FUN_INICOLOR                  _HB_FUN_INSERTAREA
	_HB_FUN_ISDIVISIBLE               _HB_FUN_ISINTERSECTRECT
	_HB_FUN_ISPOINTINRECT             _HB_FUN_ISSECONDPAGE
	_HB_FUN_MAINCAPTION               _HB_FUN_MULTIUNDOREDO
	_HB_FUN_OPENDATABASES             _HB_FUN_OPENLANGUAGE
	_HB_FUN_OPENUNDO                  _HB_FUN_PRINTREPORT
	_HB_FUN_REDO                      _HB_FUN_REFRESHREDO
	_HB_FUN_REFRESHUNDO               _HB_FUN_SAVEDATABASES
	_HB_FUN_STRATNUM                  _HB_FUN_UNDO
	_HB_FUN_UNDOEXPRESSION            _HB_FUN_UNDOREDOMENU
	_HB_FUN_VRD_MSGRUN              

esreport	size = 49423
	_HB_FUN_ERSTART                   _HB_FUN_FWER_ITEM
	_HB_FUN_FWER_PRREPORT             _HB_FUN_FW_EREPORT

etc     	size = 808
	_HB_FUN_FNADDBITMAP               _HB_FUN___CHANGESTYLEWINDOW

expbuild	size = 8480
	_HB_FUN_CGETEXPRESSION            _HB_FUN_FWARGSLIST
	_HB_FUN_FWCHECKEXPRESSION         _HB_FUN_FWEXPBUILDER

fget    	size = 71131
	_HB_FUN_GTFTOTXT                  _HB_FUN_TFGET
	_HB_FUN_TXTTOGTF                

fileedit	size = 12247
	_HB_FUN_BROWSEITEMS               _HB_FUN_CELLVARPUT
	_HB_FUN_DBREPLACE                 _HB_FUN_DUPLICATE
	_HB_FUN_EREDITCELL                _HB_FUN_FEBUILDMENU
	_HB_FUN_FEFILEEDIT                _HB_FUN_FEGETFILE
	_HB_FUN_FEOPENFILE                _HB_FUN_FILEEDITABOUT
	_HB_FUN_GETTYPE                   _HB_FUN_LASTENTRYNR
	_HB_FUN_REPLACEITEMS            

filename	size = 7192
	_HB_FUN_ADRIVES                   _HB_FUN_AFINDFILE
	_HB_FUN_CFILEDISC                 _HB_FUN_CFILEEXT
	_HB_FUN_CFILEMASK                 _HB_FUN_CFILENAME
	_HB_FUN_CFILENOEXT                _HB_FUN_CFILENOPATH
	_HB_FUN_CFILEPATH                 _HB_FUN_CFILESETEXT
	_HB_FUN_CFILESUBDIR               _HB_FUN_CFILEUNC
	_HB_FUN_CNEWFILENAME              _HB_FUN_CRELATIVEPATH
	_HB_FUN_CTEMPFILE                 _HB_FUN_CURDRIVE
	_HB_FUN_FDATE                     _HB_FUN_FOLDEREXISTS
	_HB_FUN_FSIZE                     _HB_FUN_FTIME
	_HB_FUN_FW_MEMOWRIT               _HB_FUN_FW_NETRMTNAME
	_HB_FUN_GETIMAGE                  _HB_FUN_ISFILEEXT
	_HB_FUN_LFILEISREMOTE             _HB_FUN_LISDIR
	_HB_FUN_LOGFILE                   _HB_FUN_LOGSTACK
	_HB_FUN_MAPDRIVE                  _HB_FUN_MOVEFILE
	_HB_FUN_REMOVEDIR                 _HB_FUN_SETFOLDERICON
	_HB_FUN_SETLOGFILE              

fldex   	size = 8085
	_CalcPos                          _HB_FUN_CALPOS
	_HB_FUN_CALPOSITION               _RetriveFldInfo
	_hb_FWarrayClone                

fline   	size = 1380
	_HB_FUN_TFLINE                  

folder  	size = 16391
	_HB_FUN_TFOLDER                 

font    	size = 13215
	_HB_FUN_FONTFROMTEXT              _HB_FUN_FONTTOTEXT
	_HB_FUN_FW_CHECKFONT              _HB_FUN_GETUSEDFONTS
	_HB_FUN_TFONT                   

ftranslate	size = 3096
	_HB_FUN_FW_TRANSLANG              _HB_FUN_LISTLANGS
	_HB_FUN_TRANSACTION             

fwbarcod	size = 14352
	_HB_FUN_FWER_BARCODE              _HB_FUN_FWER_BARCODE_CHKDIGIT

fwdbg   	size = 42467
	_HB_FUN_DBGGETODBG                _HB_FUN_DBGSETODBG
	_HB_FUN_DBGSOALARM                _HB_FUN_DBGSOALERT
	_HB_FUN_DBGSOBLEEP                _HB_FUN_DBGSOCLICK
	_HB_FUN_DBGSOINFO                 _HB_FUN_DBGSOPUCK
	_HB_FUN_TDBG                      _HB_FUN___DBGENTRY

fwdecode	size = 3768
	_HB_FUN_ARRTRANSPOSE              _HB_FUN_ARRTRANSPOSEQ
	_HB_FUN_ASHUFFLE                  _HB_FUN_FW_AREVERSE
	_HB_FUN_FW_ARRGROUPSUM            _HB_FUN_FW_ARRSUM
	_HB_FUN_FW_ASORT                  _HB_FUN_FW_DECODE
	_HB_FUN_FW_GREATEST               _HB_FUN_FW_LEAST
	_HB_FUN_FW_RAEVAL               

fwerror 	size = 956
	_HB_FUN__FWGENERROR               _HB_FUN___LOWMEMERROR

fwmaria 	size = 159286
	_HB_FUN_FRECSET                   _HB_FUN_FWMARIALIB_VERSION
	_HB_FUN_FWMARIA_LCMESSAGES        _HB_FUN_FWMARIA_SET_PAD_CHAR_TO_FULL_LENGTH
	_HB_FUN_FW_DEMODB                 _HB_FUN_FW_XOR
	_HB_FUN_INBRACKETS                _HB_FUN_MARIA_CONNECT
	_HB_FUN_MARIA_CONNECTERROR        _HB_FUN_MARIA_EMBEDDED
	_HB_FUN_MYSQL_BLOBASHEX           _HB_FUN_MYSQL_CRYPT
	_HB_FUN_MYSQL_CRYPTKEY            _HB_FUN_MYSQL_ESCAPE_STRING
	_HB_FUN_MYSQL_MAXPADLIMIT         _HB_FUN_MYSQL_QUOTEDCOL
	_HB_FUN_MYSQL_ROWSET              _HB_FUN_MYSQL_STMT_BINDTEST
	_HB_FUN_MYSQL_STMT_CLOSE          _HB_FUN_MYSQL_STMT_EXECUTE
	_HB_FUN_MYSQL_STMT_INIT           _HB_FUN_MYSQL_STMT_PREPARE
	_HB_FUN_MYSQL_TINYINTASLOGICAL    _HB_FUN_MYSQL_UPDATEFROMTABLESQL
	_HB_FUN_MYSQL_UPDATESUMMARYSQL    _HB_FUN_STRICMPX
	_fw_isbinarydata                  _result_items

fwmsword	size = 11887
	_HB_FUN_FWMSWORDDOC             

fwmulti 	size = 1006
	_HB_FUN_EXEID                     _HB_FUN_FW_SETMULTI
	_HB_FUN_OPENMUTEX               

fworm   	size = 15247
	_HB_FUN_EXTRACTGROUPBY            _HB_FUN_ORM_CONNECTION
	_HB_FUN_ORM_TABLE               

fwpdf   	size = 29239
	_HB_FUN_FWHARU                    _HB_FUN_FWPDF

fwrowset	size = 23593
	_HB_FUN_FWM_BLANKVALUE            _HB_FUN_FWROWSET
	_HB_FUN_TRANS_DBFSQL              _HB_FUN_TRANS_LIKETODBF

fwstack 	size = 1592
	_HB_FUN_FWSTACK                 

fwxlsxlb	size = 15979
	_HB_FUN_TWORKBOOK                 _HB_FUN_XLSXLIB

fwzebra 	size = 4876
	_HB_FUN_FWZEBRA                   _HB_FUN_FWZEBRA_BARCODE

gantt   	size = 8403
	_HB_FUN_TGANTT                    _HB_FUN_TGANTTITEM

getfiles	size = 920
	_HB_FUN_AGETFILES                 _HB_FUN_AGETFILESA

getsysin	size = 9248
	_HB_FUN_BORLANDVERSION            _HB_FUN_COLORSQTY
	_HB_FUN_CWINVERSION               _HB_FUN_DISPFONTPERSIZE
	_HB_FUN_FW_ACTIVEMONITORS         _HB_FUN_FW_GETALLMONITORS
	_HB_FUN_FW_GETMONITOR             _HB_FUN_FW_GETTHEMEMODE
	_HB_FUN_FW_ISMOUSEPRESENT         _HB_FUN_FW_ISTABLETMODE
	_HB_FUN_FW_ISTOUCHSCREEN          _HB_FUN_FW_SETMONITOR
	_HB_FUN_FW_VIRTUALSCREEN          _HB_FUN_GETCPUSPEED
	_HB_FUN_GETSYSFONT                _HB_FUN_ISDARKTHEME
	_HB_FUN_ISWIN2000                 _HB_FUN_ISWIN64
	_HB_FUN_ISWIN7                    _HB_FUN_ISWIN8
	_HB_FUN_ISWINDOWS10               _HB_FUN_ISWINDOWS11
	_HB_FUN_ISWINVISTA                _HB_FUN_ISWINXP
	_HB_FUN_LARGEFONTS                _HB_FUN_SAVEDESKTOP
	_HB_FUN_SCREENHEIGHT              _HB_FUN_SCREENHEIGHTMM
	_HB_FUN_SCREENSCALING             _HB_FUN_SCREENSIZE
	_HB_FUN_SCREENSIZE_NOSCALING      _HB_FUN_SCREENWIDTH
	_HB_FUN_SCREENWIDTHMM             _HB_FUN_SCRRESOLUTION
	_HB_FUN_SETDARKTHEME              _HB_FUN_WINDOWS
	_HB_FUN_WNDCENTEREX             

gettasks	size = 2784
	_HB_FUN_GETTASKS                  _HB_FUN_GETWINDOWMODULEFILENAME
	_HB_FUN_SETTASKMANAGER          

gmail   	size = 5740
	_HB_FUN_TGMAIL                  

group   	size = 5136
	_HB_FUN_TGROUP                  

gtf     	size = 6940
	_HB_FUN_GTFTORTF                  _HB_FUN_ISGTF
	_HB_FUN_ISRTF                     _HB_FUN_RTFTOGTF

harbour 	size = 4379
	_HB_FUN_ASEND                     _HB_FUN_ASLONG
	_HB_FUN_ASLONGLONG                _HB_FUN_ASPTR
	_HB_FUN_CHILDLEVEL                _HB_FUN_EXECUTE
	_HB_FUN_FREELIB32                 _HB_FUN_FREELIBRARY
	_HB_FUN_FREOPEN_STDERR            _HB_FUN_GETLASTERROR
	_HB_FUN_GETLOCAL                  _HB_FUN_GETPARAM
	_HB_FUN_GETPROCADDRESS            _HB_FUN_HB_DBG_VMPARLLIST
	_HB_FUN_HB_DBG_VMSTKLCOUNT        _HB_FUN_HB_DBG_VMVARLGET
	_HB_FUN_HB_DBG_VMVARSLEN          _HB_FUN_LOADLIB32
	_HB_FUN_LOADLIBRARY               _HB_FUN_LOADVBX
	_HB_FUN_LOCALCOUNT                _HB_FUN_MEMMAX
	_HB_FUN_MEMUSED                   _HB_FUN_NHEAPSIZE
	_HB_FUN_NINITDSSIZE               _HB_FUN_NSTACKSIZE
	_HB_FUN_NSTATICS                  _HB_FUN_NSYMPSIZE
	_HB_FUN_NTXPOS                    _HB_FUN_OCLONE
	_HB_FUN_OLEGETPROPERTY            _HB_FUN_OLEINVOKE
	_HB_FUN_OLESETPROPERTY            _HB_FUN_OSEND
	_HB_FUN_PARAMCOUNT                _HB_FUN_SETMULTIPLE
	_HB_FUN_TVBCONTROL                _HB_FUN_ULOADOBJECT
	_HB_FUN_VBXCLASSNAME              _HB_FUN_VBXEVENT
	_HB_FUN_WINDOWSFIX                _HB_FUN__CLSSETERROR
	_HB_FUN__GENERROR               

help32  	size = 4424
	_HB_FUN_HELPINDEX                 _HB_FUN_HELPPOPUP
	_HB_FUN_HELPSEARCH                _HB_FUN_HELPTOPIC
	_HB_FUN_SETAUTOHELP               _HB_FUN_SPWINHELP
	_HB_FUN_SPWINHELPC                _HB_FUN_WINHELP

helpchm 	size = 3071
	_HB_FUN_CHMHELPINDEX              _HB_FUN_CHMHELPPOPUP
	_HB_FUN_CHMHELPSEARCH             _HB_FUN_CHMHELPTOPIC
	_HB_FUN_FREEHTMLDLL               _HB_FUN_GETHELPPOPUP
	_HB_FUN_HTMLPOP                   _HB_FUN_HTMLSEARCH
	_HB_FUN_HTML_HELP                 _HB_FUN_SETHELPPOPUP
	_hDLL                             _helpaddress
	_pHTMLHELP                      

icon    	size = 3956
	_HB_FUN_TICON                   

iget    	size = 2560
	_HB_FUN_TICONGET                

igroup  	size = 15835
	_HB_FUN_TICONGROUP              

image   	size = 16455
	_HB_FUN_FICNV24                   _HB_FUN_FICONVERTIMAGEFILE
	_HB_FUN_FICONVTO32                _HB_FUN_FIGETBITS
	_HB_FUN_FIGETFILETYPE             _HB_FUN_FIGETINFO
	_HB_FUN_FIGETINFOHEADER           _HB_FUN_FIGETWIDTH
	_HB_FUN_FIISTRANSPARENT           _HB_FUN_FILOAD
	_HB_FUN_FILOADFROMMEMORY          _HB_FUN_FILOADIMG
	_HB_FUN_FIMAKETHUMBNAIL           _HB_FUN_FIROTATE
	_HB_FUN_FIROTATEIMG               _HB_FUN_FISAVE
	_HB_FUN_FISETTRANSPARENT          _HB_FUN_FITYPEFROMMEMORY
	_HB_FUN_FIUNLOAD                  _HB_FUN_FI_CLOSEMEMORY
	_HB_FUN_FI_GETFILETYPEFROMFILENAME  _HB_FUN_FI_GETFILETYPEFROMMEMORY
	_HB_FUN_FI_LOADFROMMEMORY         _HB_FUN_FI_OPENMEMORY
	_HB_FUN_FI_SAVETOMEMORY           _HB_FUN_FI_SUPPORTSWRITING
	_HB_FUN_FMAKETHUMBNAIL            _HB_FUN_FREEIMAGEISLOADED
	_HB_FUN_ISIMAGEDATA               _HB_FUN_LOADFREEIMAGE
	_HB_FUN_TIMAGE                    _HB_FUN_UNLOADFREEIMAGE

imageb64	size = 7500
	_HB_FUN_TIMAGEBASE64            

imgtxtio	size = 51385
	_HB_FUN_CALCTEXTWH                _HB_FUN_CONTRASTCLR
	_HB_FUN_DRAWBMPARRAY              _HB_FUN_DRAWPROGRESSBAR
	_HB_FUN_DRAWTEXTEXARRAY           _HB_FUN_DUPLICATEIMAGE
	_HB_FUN_ELLIPSE_RADIUS            _HB_FUN_EMF2HBITMAP
	_HB_FUN_EXTRACTBASE64IMAGE        _HB_FUN_FILLRECTEX
	_HB_FUN_FW_ANGLEARC               _HB_FUN_FW_BARCODEBMP
	_HB_FUN_FW_BMPMINUS               _HB_FUN_FW_BMPPLUS
	_HB_FUN_FW_BMPSTAR                _HB_FUN_FW_BOX
	_HB_FUN_FW_CLIPBOARDHASIMAGE      _HB_FUN_FW_COPYTOCLIPBOARD
	_HB_FUN_FW_CREATEBITMAP           _HB_FUN_FW_DRAWIMAGE
	_HB_FUN_FW_DRAWSHADOW             _HB_FUN_FW_DRAWSHAPES
	_HB_FUN_FW_ELLIPSHADOW            _HB_FUN_FW_EMPTYCLIPBOARD
	_HB_FUN_FW_GETCLIPBOARDDATA       _HB_FUN_FW_HBITMAPTOFILE
	_HB_FUN_FW_IMAGETOBLOB            _HB_FUN_FW_MAKEYOURBITMAP
	_HB_FUN_FW_PIECHART               _HB_FUN_FW_READIMAGE
	_HB_FUN_FW_RICHTEXTBMP            _HB_FUN_FW_SAVEHBITMAP
	_HB_FUN_FW_SAVEIMAGE              _HB_FUN_FW_SAVEIMAGESAMETYPE
	_HB_FUN_FW_SAVETHUMBNAIL          _HB_FUN_FW_SAYBARCODE
	_HB_FUN_FW_SAYHOLLOW              _HB_FUN_FW_SAYTEXT
	_HB_FUN_FW_SAYTEXTHILITE          _HB_FUN_FW_SAYTEXTSPREAD
	_HB_FUN_FW_STITCHIMAGES           _HB_FUN_FW_TEXTTOBITMAP
	_HB_FUN_FW_TRANSFORMBITMAP        _HB_FUN_GDI32_HOLLOWTEXT
	_HB_FUN_GETBMPHEIGHT              _HB_FUN_GETBMPWIDTH
	_HB_FUN_GRADARGB2RGB              _HB_FUN_GRADIENTFILL
	_HB_FUN_GRADIENTGDIP              _HB_FUN_HICO2HBMP
	_HB_FUN_HVALTOBRUSH               _HB_FUN_HVALTOPEN
	_HB_FUN_ISALPHACLR                _HB_FUN_ISFILEIMAGETYPE
	_HB_FUN_ISIMAGEEXT                _HB_FUN_ISXHBCOM
	_HB_FUN_JPEGDIM                   _HB_FUN_MEMORYBUFFERTYPE
	_HB_FUN_MSGINFOSCROLL             _HB_FUN_PCHARTOPTR
	_HB_FUN_RESIZEIMAGEPTR            _HB_FUN_RINGGRADIENTFILL
	_HB_FUN_SAMEIMGEXT                _HB_FUN_SAYTEXTATANGLE
	_HB_FUN_SEGOEMDL2                 _HB_FUN_SELECTCLIPPATH
	_HB_FUN_SELECTCLIPRGN             _HB_FUN_SETDEFAULTICONSIZE
	_HB_FUN_TXTINRCT                  _HB_FUN_USEGDI
	_HB_FUN_WEBIMAGE                  _HB_FUN_WEBPAGECONTENTS
	_HB_FUN_WINDOWFROMDC              _HB_FUN_WNDBMP
	_HB_FUN_WRAPTOWIDTH             

ini     	size = 2852
	_HB_FUN_GETPVPRFSE                _HB_FUN_TINI

internet	size = 1580
	_HB_FUN_TINTERNET               

keys    	size = 376
	_HB_FUN__SETKEY                 

linklist	size = 5140
	_HB_FUN_TLINKLIST               

listbox 	size = 12095
	_HB_FUN_TLISTBOX                

loadval 	size = 444
	_HB_FUN_LOADVALUE               

longnam2	size = 3572
	_HB_FUN_APIFINDCLS                _HB_FUN_APIFINDFST
	_HB_FUN_APIFINDNXT                _HB_FUN_GETFULLPATHNAME
	_HB_FUN_GETSHORTPATHNAME          _HB_FUN_LFN2SFN
	_HB_FUN_SFN2LFN                 

mariarec	size = 4380
	_HB_FUN_FWMARIARECORD           

math    	size = 640
	_HB_FUN_BINTOC                    _HB_FUN_BINTON
	_HB_FUN_NTOBIN                  

matrices	size = 10860
	_HB_FUN_ADIFF                     _HB_FUN_FW_MATRIX
	_HB_FUN_MATRIXINVERT              _HB_FUN_MATRIXMULTIPLY
	_HB_FUN_MATRIX_BOX              

mdichild	size = 7595
	_HB_FUN_TMDICHILD               

mdiclien	size = 5304
	_HB_FUN_TMDICLIENT              

mdiframe	size = 9371
	_HB_FUN_GETWNDFRAME               _HB_FUN_TMDIFRAME

mdirec  	size = 1324
	_HB_FUN_MDIRECEDIT              

memoedit	size = 25087
	_HB_FUN_BUILDRICHEDITBAR          _HB_FUN_FW_MEMOEDIT
	_HB_FUN_HTMLVIEW                  _HB_FUN_JSONBROWSE
	_HB_FUN_JSONVIEW                  _HB_FUN_RICHEDIT
	_HB_FUN_RICHEDIT5                 _HB_FUN_SAVEFILESOURCE
	_HB_FUN_SETUPSCINT                _HB_FUN_SOURCECOMPILE
	_HB_FUN_SOURCEEDIT                _HB_FUN_SOURCEEDITOR
	_HB_FUN_UTFEDIT                 

memstat 	size = 684
	_HB_FUN_MEMSTAT                 

menu    	size = 49759
	_HB_FUN_DELCHECK                  _HB_FUN_GETAAUXITEMS
	_HB_FUN_GETALLITEMS               _HB_FUN_GETBMPSITEMS
	_HB_FUN_GETNHEIGHTITEM            _HB_FUN_GETNHEIGHTSEP
	_HB_FUN_GETNOLDHEIGHTITEM         _HB_FUN_GETNWIDTHITEM
	_HB_FUN_GETPOPUPS                 _HB_FUN_ITEMBITMAP
	_HB_FUN_MENUCLONE                 _HB_FUN_RESBUILD
	_HB_FUN_SEARCHID                  _HB_FUN_SEARCHITEM
	_HB_FUN_TMENU                   

menuitem	size = 21635
	_HB_FUN_TMENUITEM                 _HB_FUN_TXTTOBMP

meter   	size = 13083
	_HB_FUN_PAINTCIRCULARMETER        _HB_FUN_PAINTCIRCULARMETEROLD
	_HB_FUN_TMETER                  

metrcirc	size = 12207
	_HB_FUN_TPROGRESSWHEEL          

metropnl	size = 23443
	_HB_FUN_TMETROBTN                 _HB_FUN_TMETROPANEL

mget    	size = 17911
	_HB_FUN_SETMGETCOLORFOCUS         _HB_FUN_TMULTIGET

mimeclip	size = 3352
	_HB_FUN_FFMIMEDEC                 _HB_FUN_FFMIMEENC
	_HB_FUN_FMIMEDEC                  _HB_FUN_FMIMEENC
	_HB_FUN_MAKEWIND                  _HB_FUN_MIMEEXT
	_HB_FUN_REGQRYVALUEEX             _HB_FUN_TESTTHIS

mru     	size = 4376
	_HB_FUN_TMRU                    

msgbar  	size = 15851
	_HB_FUN_GETMSGBARDEFAULT          _HB_FUN_SETMSGBARDEFAULT
	_HB_FUN_TIMEFROMSTART             _HB_FUN_TMSGBAR

msgcalc 	size = 4276
	_HB_FUN_MSGCALC                 

msgget  	size = 3596
	_HB_FUN_MSGGET                  

msglist 	size = 1552
	_HB_FUN_MSGLIST                 

msglogo 	size = 2108
	_HB_FUN_MSGLOGO                   _HB_FUN_MSGSPLASH

msgmeter	size = 6272
	_HB_FUN_MSGDATE                   _HB_FUN_MSGMETER

msgrun  	size = 1592
	_HB_FUN_MSGRUN                    _HB_FUN_MSGWAIT
	_HB_FUN_STOPUNTIL                 _HB_FUN_WAITSECONDS

msgtbar 	size = 884
	_HB_FUN_MSGTOOLBAR              

netapi32	size = 3964
	_HB_FUN_ISEXTERNALIP              _HB_FUN_ISINTERNET
	_HB_FUN_ISLOCALIP                 _HB_FUN_LOCALIP
	_HB_FUN_NETBIOS                   _HB_FUN_NETSERIALNUMBER
	_HB_FUN_PUBLICIP                

now     	size = 6884
	_HB_FUN_NOW                       _HB_FUN_NOWC
	_IN6ADDR_ISANY                    _IN6ADDR_ISEQUAL
	_IN6ADDR_ISLOOPBACK               _IN6ADDR_ISUNSPECIFIED
	_IN6ADDR_SETANY                   _IN6ADDR_SETLOOPBACK
	_IN6_ADDR_EQUAL                   _IN6_IS_ADDR_ANYCAST
	_IN6_IS_ADDR_EUI64                _IN6_IS_ADDR_GLOBAL
	_IN6_IS_ADDR_LINKLOCAL            _IN6_IS_ADDR_LOOPBACK
	_IN6_IS_ADDR_MC_GLOBAL            _IN6_IS_ADDR_MC_LINKLOCAL
	_IN6_IS_ADDR_MC_NODELOCAL         _IN6_IS_ADDR_MC_ORGLOCAL
	_IN6_IS_ADDR_MC_SITELOCAL         _IN6_IS_ADDR_MULTICAST
	_IN6_IS_ADDR_SITELOCAL            _IN6_IS_ADDR_SUBNET_RESERVED_ANYCAST
	_IN6_IS_ADDR_SUBNET_ROUTER_ANYCAST  _IN6_IS_ADDR_UNSPECIFIED
	_IN6_IS_ADDR_V4COMPAT             _IN6_IS_ADDR_V4MAPPED
	_IN6_IS_ADDR_V4TRANSLATED         _IN6_SET_ADDR_LOOPBACK
	_IN6_SET_ADDR_UNSPECIFIED         _WSAGetFailConnectOnIcmpError
	_WSAGetIPUserMtu                  _WSAGetIcmpErrorInfo
	_WSAGetRecvIPEcn                  _WSAGetUdpRecvMaxCoalescedSize
	_WSAGetUdpSendMessageSize         _WSASetFailConnectOnIcmpError
	_WSASetIPUserMtu                  _WSASetRecvIPEcn
	_WSASetUdpRecvMaxCoalescedSize    _WSASetUdpSendMessageSize
	_gai_strerrorA                    _gai_strerrorW
	_getipv4sourcefilter              _getsourcefilter
	_idealsendbacklognotify           _idealsendbacklogquery
	_setipv4sourcefilter              _setsourcefilter

num2word	size = 3228
	_HB_FUN_FW_N2WSETUP               _HB_FUN_FW_NUMTOWORDS

oauth   	size = 10748
	_HB_FUN_THTTPSERVER               _HB_FUN_TOAUTH

objects 	size = 1472
	_HB_FUN_ENDOBJECT                 _HB_FUN_SETOBJECT
	_HB_FUN_TAPPLICATION            

objfile 	size = 4116
	_HB_FUN_TOBJFILE                

odata   	size = 412
	_HB_FUN_AODATA                  

odbc    	size = 2092
	_HB_FUN_ODBCDSNENTRIES            _HB_FUN_SQLCOL
	_HB_FUN_SQLCOMMIT                 _HB_FUN_SQLDESCRIBECOL
	_HB_FUN_SQLDRIVERCONNECT          _HB_FUN_SQLFILE
	_HB_FUN_SQLGETCURNAME             _HB_FUN_SQLGETDATA
	_HB_FUN_SQLGETINFO                _HB_FUN_SQLINDEX
	_HB_FUN_SQLPREPARE                _HB_FUN_SQLSETCURNAME

olefuncs	size = 8368
	_HB_FUN_CONVERTTOOOURL            _HB_FUN_DBF2EXCELNUMFORMAT
	_HB_FUN_EXCELBOOKSAVEAS           _HB_FUN_EXCELLANG
	_HB_FUN_EXCELLANGID               _HB_FUN_EXCELOBJ
	_HB_FUN_EXCELSEPARATORS           _HB_FUN_EXCELTRANSLATE
	_HB_FUN_FILESYSOBJ                _HB_FUN_FWGETOLEOBJECT
	_HB_FUN_FW_TOGGLEDESKTOP          _HB_FUN_GETEXCELBOOK
	_HB_FUN_GETEXCELRANGE             _HB_FUN_GETPROPERTYVALUE
	_HB_FUN_HARBOURNEW                _HB_FUN_MERGEDOCS
	_HB_FUN_OFFICEEXTRACTIMAGE        _HB_FUN_SUNCALCOBJ
	_HB_FUN_WINHTTPOBJ                _HB_FUN_WINWORDOBJ
	_HB_FUN_WMISERVICE                _HB_FUN_XLRANGEVALUE

outl2003	size = 11175
	_HB_FUN_TOUTLOOK2003              _HB_FUN_TOUTLOOK2003GROUP

outl2010	size = 11159
	_HB_FUN_TOUTLOOK2010              _HB_FUN_TOUTLOOK2010GROUP

outlook 	size = 11363
	_HB_FUN_TOUTLOOK                

pdmenu  	size = 20811
	_HB_FUN_DELAMENUSAUX              _HB_FUN_DELMENUFONT
	_HB_FUN_FW_MEASUREITEM            _HB_FUN_FW_MENUDRAW
	_HB_FUN_GETACCTABLE               _HB_FUN_GETAMENUS
	_HB_FUN_GETAMENUSAUX              _HB_FUN_GETMENUFONT
	_HB_FUN_GETPARENTAUXMENUS         _HB_FUN_ISCHARUNI
	_HB_FUN_ISUTF8                    _HB_FUN_LASTAUXMENU
	_HB_FUN_LASTITEM                  _HB_FUN_LASTITEMPOS
	_HB_FUN_LASTMENU                  _HB_FUN_LASTMENUITEMSCOUNT
	_HB_FUN_MENUADDITEM               _HB_FUN_MENUBEGIN
	_HB_FUN_MENUDATA                  _HB_FUN_MENUEND
	_HB_FUN_SETINITITEMSCHILDS        _HB_FUN_SETOLDMENUS
	_HB_FUN_SETSPACEMONOSP            _HB_FUN_SETSPACEXTRAS
	_HB_FUN_SETSPACEXTRASPOP        

pdreport	size = 1852
	_HB_FUN_RPTADDCOLUMN              _HB_FUN_RPTADDGROUP
	_HB_FUN_RPTBEGIN                  _HB_FUN_RPTEND

pen     	size = 1584
	_HB_FUN_TPEN                    

pgsuport	size = 11424
	_HB_FUN_FWPG_APPENDFROMALIAS      _HB_FUN_FWPG_CREATETABLESQL
	_HB_FUN_FWPG_CURRENTDB            _HB_FUN_FWPG_EXECUTE
	_HB_FUN_FWPG_FIELDGET             _HB_FUN_FWPG_GOTOKEYVAL
	_HB_FUN_FWPG_IMPORTFROMDBF        _HB_FUN_FWPG_LISTDBS
	_HB_FUN_FWPG_LISTSCHEMAS          _HB_FUN_FWPG_METASTRUCT
	_HB_FUN_FWPG_PRIMARYKEYS          _HB_FUN_FWPG_PRIMARYORDER
	_HB_FUN_FWPG_QUERYSETORDER        _HB_FUN_FWPG_SKIPPER
	_HB_FUN_FWPG_STRUCTURE            _HB_FUN_FWPG_TABLENAMEFROMID
	_HB_FUN_FWPG_XBRSAVEDATA          _HB_FUN_FWPG_XBRSEEK

printer 	size = 36179
	_HB_FUN_AGETPRINTERS              _HB_FUN_HARUPDFDOC
	_HB_FUN_ISHARULINKED              _HB_FUN_MSPRINTTOPDF
	_HB_FUN_PAGEBEGIN                 _HB_FUN_PAGEEND
	_HB_FUN_PRINTBEGIN                _HB_FUN_PRINTEND
	_HB_FUN_PRINTQUEUE                _HB_FUN_PRNGETFILETOSAVE
	_HB_FUN_PRNLASTPAGE               _HB_FUN_SAVEPREVIEWTOIMAGE
	_HB_FUN_SETPRINTDEFAULT           _HB_FUN_SETPRINTER
	_HB_FUN_TPRINTER                

prv2pdf 	size = 11286
	_HB_FUN_FWJPGTOPDF                _HB_FUN_FWSAVEPREVIEWTOPDF
	_HB_FUN_FW_EMFTOPDF               _HB_FUN_FW_I2PDF
	_HB_FUN_TFW_PDF                   _HB_FUN_WORDPDF
	_fp                               _iBufLen
	_nDocLen                        

radio   	size = 7048
	_HB_FUN_TRADIO                  

radmenu 	size = 5340
	_HB_FUN_TRADMENU                

random  	size = 1192
	_HB_FUN_DECTOHEX                  _HB_FUN_NHEX
	_HB_FUN_NRANDOM                   _HB_FUN_TIMEZONE

rcolumn 	size = 12531
	_HB_FUN_TRCOLUMN                

readxlsx	size = 11259
	_HB_FUN_FW_OPENXLSX               _HB_FUN_FW_SHOWXLSX
	_HB_FUN_TXLSXREADER             

rebar   	size = 1848
	_HB_FUN_TREBAR                  

rect    	size = 9352
	_HB_FUN_ARRAYMATH                 _HB_FUN_POINTROWCOL
	_HB_FUN_POINTXY                   _HB_FUN_TPOINT
	_HB_FUN_TRECT                   

reg32   	size = 3236
	_HB_FUN_TREG32                  

report  	size = 35839
	_HB_FUN_TREPORT                 

rfile   	size = 3740
	_HB_FUN_TRFILE                  

rgroup  	size = 4500
	_HB_FUN_TRGROUP                 

rline   	size = 3684
	_HB_FUN_TRLINE                  

rpreview	size = 39495
	_HB_FUN_CONVERTTOWORDDOC          _HB_FUN_RPREVIEW
	_HB_FUN_RPREVUSERBTNS             _HB_FUN_SETCUSTOMPRINTPREVIEW
	_HB_FUN_TOWORDDOCVIAWRITER        _HB_FUN_TPREVIEW

rtfbox  	size = 1420
	_HB_FUN_RTFBOX                  

rtffile 	size = 2944
	_HB_FUN_TRTFFILE                

say     	size = 7236
	_HB_FUN_TSAY                    

scintila	size = 87123
	_HB_FUN_CHOICEFONT                _HB_FUN_FUNCHARB
	_HB_FUN_GETLEXERS                 _HB_FUN_HCADFUNCTION
	_HB_FUN_LOADFHB                   _HB_FUN_READFUNCFW
	_HB_FUN_READFUNCFWC               _HB_FUN_READFUNCHB
	_HB_FUN_SETMIFONT                 _HB_FUN_TSCINTILLA

scrllbar	size = 6624
	_HB_FUN_TSCROLLBAR              

scrlpanl	size = 10707
	_HB_FUN_TSCROLLPANEL            

scrollm 	size = 9940
	_HB_FUN_SMLARROW                  _HB_FUN_SMRARROW
	_HB_FUN_TSCROLLMETRO            

scrolmsg	size = 4052
	_HB_FUN_TSCROLLMSG              

selector	size = 10451
	_HB_FUN_ATANG                     _HB_FUN_FWCOS
	_HB_FUN_FWSIN                     _HB_FUN_TANG
	_HB_FUN_TSELECTOR               

shellapi	size = 2508
	_HB_FUN_COPYFILE                  _HB_FUN_OUTPUTDEBUGSTRING
	_HB_FUN_SHELL_NOTIFYICON          _HB_FUN_TASKADDICON
	_HB_FUN_TASKCHANGEICON            _HB_FUN_TASKDELICON

skin    	size = 9981
	_HB_FUN_APPLYSETFILTER            _HB_FUN_ISWIN98
	_HB_FUN_SETFILTER                 _HB_FUN_SETTRANSPARENT
	_HB_FUN_SKIN                      _HB_FUN_TSKIN
	_SetFilter                      

skins   	size = 7164
	_HB_FUN_BUTTONS2007               _HB_FUN_FWSKINBTNFOCUSED
	_HB_FUN_FWSKINBTNKEYDOWN          _HB_FUN_FWSKINBTNKEYUP
	_HB_FUN_FWSKINBTNLBUTTONDOWN      _HB_FUN_FWSKINBTNLBUTTONUP
	_HB_FUN_FWSKINBTNMOUSELEAVE       _HB_FUN_FWSKINBTNMOUSEMOVE
	_HB_FUN_FWSKINBTNOBJ              _HB_FUN_FWSKINBTNPAINT
	_HB_FUN_SETSKINBTNDEFAULTCLRS     _HB_FUN_SETSKINBUTTONSCOLORS
	_HB_FUN_SKINBUTTONS             

slider  	size = 10091
	_HB_FUN_TSLIDER                 

sliderm 	size = 2776
	_HB_FUN_TSLIDERMETRO            

splitter	size = 11863
	_HB_FUN_TSPLITTER               

sqlerror	size = 2072
	_HB_FUN_TSQLERROR               

statusba	size = 4304
	_HB_FUN_TSTATUSBAR              

strings 	size = 51580
	_HB_FUN_FWADDLANGUAGE             _HB_FUN_FWADDSTRING
	_HB_FUN_FWEDITSTRINGS             _HB_FUN_FWLANGUAGEID
	_HB_FUN_FWLOADSTRINGS             _HB_FUN_FWMISSINGSTRINGS
	_HB_FUN_FWSAVESTRINGS             _HB_FUN_FWSETLANGUAGE
	_HB_FUN_FWSETSTRING               _HB_FUN_FWSTRING

system  	size = 356
	_HB_FUN_SYSWAIT                 

tabs    	size = 19483
	_HB_FUN_TTABS                   

tacctbl 	size = 1752
	_HB_FUN_TACCTABLE               

tagcloud	size = 5348
	_HB_FUN_TTAGCLOUD               

tanimate	size = 4244
	_HB_FUN_TANIMATE                

tarrdata	size = 39127
	_HB_FUN_STR2STRUCT                _HB_FUN_TARRAYDATA

tblockchain	size = 5332
	_HB_FUN_TBLOCKCHAIN             

tbtnclr 	size = 13527
	_HB_FUN_TBTNCLR                   _HB_FUN_TPICKERCOLOR

tcalenda	size = 17119
	_HB_FUN_TCALENDAR               

tcalex  	size = 29615
	_HB_FUN_CALEX_SETFIRSTDATE        _HB_FUN_COLORDATA
	_HB_FUN_DRAWBOX                   _HB_FUN_DRAWSPECIALBOX
	_HB_FUN_TCALEX                  

tcbrowse	size = 25155
	_HB_FUN_TCBROWSE                

tccolumn	size = 4392
	_HB_FUN_TCCOLUMN                

tclipget	size = 728
	_HB_FUN_FWGETNEW                  _HB_FUN_TCLIPGET

tcomobj 	size = 1924
	_HB_FUN_TCOMOBJECT              

tcompone	size = 3092
	_HB_FUN_TCOMPONENT              

tctrsock	size = 2204
	_HB_FUN_TCTRLSOCKET             

tcvrflow	size = 20867
	_HB_FUN_TCOVER                    _HB_FUN_TCOVERFLOW

tdayv   	size = 7455
	_HB_FUN_TDAYVIEW                

tdbase  	size = 992
	_HB_FUN_TDBASE                  

tdbfcomp	size = 2888
	_HB_FUN_TDBFCOMP                

tdbfuncs	size = 652
	_HB_FUN_TDBF_DECRYPT              _HB_FUN_TDBF_ENCRYPT

tdbodbc 	size = 23531
	_HB_FUN_TDBODBC                 

tdbodbcd	size = 17831
	_HB_FUN_TDBODBCDIRECT           

tddemlcl	size = 3056
	_HB_FUN_DDECLIENT                 _HB_FUN_TDDEMLCLIENT

tddemlsv	size = 4004
	_HB_FUN_DDESERVER                 _HB_FUN_TDDEMLSERVER

tdeepseek	size = 2724
	_HB_FUN_TDEEPSEEK               

tdict   	size = 29499
	_HB_FUN_LOGEVENT                  _HB_FUN_TDICT

tdockpnel	size = 25547
	_HB_FUN_TDOCKPNEL               

tdosprn 	size = 6592
	_HB_FUN_TDOSPRN                 

tdtpicke	size = 11653
	_HB_FUN_DTP_GETSTYLE              _HB_FUN_DTP_SETSTYLE
	_HB_FUN_TDATEPICK                 _read_datetime

tembeddings	size = 4008
	_HB_FUN_TEMBEDDINGS             

tenhmeta	size = 4852
	_HB_FUN_TENHMETAFILE            

tereport	size = 61283
	_HB_FUN_ADDNEWDATAS               _HB_FUN_TEREPORT

texplbar	size = 15635
	_HB_FUN_TEXPLORERBAR              _HB_FUN_TTASKPANEL

texplist	size = 20171
	_HB_FUN_TEXPLORERLIST             _HB_FUN_TITEMLISTBAR

texstruc	size = 3792
	_HB_FUN_STRUCBEGIN                _HB_FUN_STRUCEND
	_HB_FUN_STRUCMEMBER               _HB_FUN_TEXSTRUCT

tfield  	size = 1148
	_HB_FUN_TFIELD                  

tfile   	size = 5484
	_HB_FUN_TFILE                   

tfilegtf	size = 3124
	_HB_FUN_GTFFONT                   _HB_FUN_GTFFORMAT
	_HB_FUN_SETGTFALIGN               _HB_FUN_SETGTFCOLOR
	_HB_FUN_SETGTFFONT                _HB_FUN_SETGTFFORMAT
	_HB_FUN_TFILEGTF                

tfoldex 	size = 31359
	_HB_FUN_TFOLDEREX               

tform   	size = 4600
	_HB_FUN_TFORM                   

tftp    	size = 3220
	_HB_FUN_TFTP                    

tftpcli 	size = 5176
	_HB_FUN_TFTPCLIENT              

tftpfile	size = 2148
	_HB_FUN_TFTPFILE                

tftpserv	size = 6224
	_HB_FUN_TFTPSERVER              

tftpsess	size = 944
	_HB_FUN_TFTPSESSION             

tgdiplus	size = 25163
	_HB_FUN_AEMF2IMAGES               _HB_FUN_BRUSH
	_HB_FUN_CGETBMPNAME               _HB_FUN_DRAWIMAGEROTATECENTER
	_HB_FUN_EMFTOIMG                  _HB_FUN_FRAMETIFF
	_HB_FUN_GDIBMP                    _HB_FUN_GDIPLUSCONVER24TO32ALPHA
	_HB_FUN_GDIPLUSCONVER24TO32ALPHAGRAY  _HB_FUN_GDIPLUSCONVERTIMAGE
	_HB_FUN_GDIPLUSRESIZEIMAGE        _HB_FUN_GDIPLUSSAVETHUMBNAIL
	_HB_FUN_GETIMGFROMLIST            _HB_FUN_GETIMGFROMLISTH
	_HB_FUN_GETIMGFROMLISTV           _HB_FUN_GRAPHICS
	_HB_FUN_HBMPFROMFILE              _HB_FUN_HBMPFROMRES
	_HB_FUN_IMAGEFROM10RESOURCE       _HB_FUN_IMAGEPNGFROMSTR
	_HB_FUN_LISPNG                    _HB_FUN_NEWEMFTOJPG
	_HB_FUN_PATH                      _HB_FUN_PEN
	_HB_FUN_REGION                    _HB_FUN_SAVEPREVIEWTOIMG
	_HB_FUN_SAVEWINDOW                _HB_FUN_TIFFTOJPG

tgemini 	size = 7352
	_HB_FUN_TGEMINI                 

tget    	size = 57659
	_HB_FUN_CHR16                     _HB_FUN_FW_SETGETTIMEPART
	_HB_FUN_FW_UTF8PADBYTE            _HB_FUN_FW_UTF8PADCHAR
	_HB_FUN_GETTEXTLIMITBYCHARS       _HB_FUN_LENMINMAX
	_HB_FUN_POPUPBROWSE               _HB_FUN_SETGETCOLORFOCUS
	_HB_FUN_TGET                      _HB_FUN_WIDESTRPUT

tgif    	size = 4176
	_HB_FUN_TGIF                    

tgraph  	size = 55119
	_HB_FUN_TGRAPH                  

tgselect	size = 16687
	_HB_FUN_CHOOSEGRADIENT            _HB_FUN_TCHOOSEGRADIENT
	_HB_FUN_TGSELECTOR                _HB_FUN_TINK

theader 	size = 4068
	_HB_FUN_THEADER                 

thtmlpag	size = 1636
	_HB_FUN_THTMLPAGE               

timaglst	size = 2392
	_HB_FUN_TIMAGELIST              

time    	size = 2036
	_HB_FUN_TTIME                   

timer   	size = 2072
	_HB_FUN_TIMEREVENT                _HB_FUN_TTIMER

tindex  	size = 1784
	_HB_FUN_TINDEX                  

tlayout 	size = 3744
	_HB_FUN_TLAYOUT                 

tlex    	size = 2792
	_HB_FUN_TLEX                    

tlib    	size = 920
	_HB_FUN_TLIBFILE                

tlistvie	size = 8123
	_HB_FUN_TLISTVIEW                 _HB_FUN_TLISTVIEWGROUP
	_HB_FUN_TLISTVIEWITEM           

tlocks  	size = 3424
	_HB_FUN_TLOCKS                  

tmail   	size = 2448
	_HB_FUN_TMAIL                   

tmci    	size = 2356
	_HB_FUN_TMCI                    

tmcpserver	size = 9152
	_HB_FUN_CREATEMCPSERVER           _HB_FUN_ERRORHANDLER
	_HB_FUN_FREADLINE                 _HB_FUN_TMCPCONTEXT
	_HB_FUN_TMCPPROMPT                _HB_FUN_TMCPRESOURCE
	_HB_FUN_TMCPSERVER                _HB_FUN_TMCPTOOL

tmetafil	size = 6601
	_HB_FUN_GETEMFSIZE                _HB_FUN_GETOBJECTTYPE
	_HB_FUN_ISENHMETA                 _HB_FUN_ISHBITMAP
	_HB_FUN_TMETAFILE               

tmeterex	size = 6900
	_HB_FUN_TMETEREX                

tmetro  	size = 4588
	_HB_FUN_TMETRO                  

tmnucomp	size = 2244
	_HB_FUN_TMNUCOMP                

tmonthv 	size = 12047
	_HB_FUN_TMONTHVIEW              

tmsgitem	size = 9339
	_HB_FUN_TMSGITEM                

tneuralnet	size = 4111
	_HB_FUN_DSIGMOID                  _HB_FUN_MATH_E
	_HB_FUN_SIGMOID                   _HB_FUN_TNEURALLAYER
	_HB_FUN_TNEURALNETWORK            _HB_FUN_TNEURON

tnewsins	size = 17323
	_HB_FUN_TNEWSINSTANCE           

tnewssrv	size = 4696
	_HB_FUN_TNEWSSERVER             

todbc   	size = 11479
	_HB_FUN_TODBC                   

tollama 	size = 4136
	_HB_FUN_TAGENT                    _HB_FUN_TOLLAMA

toolbar 	size = 7380
	_HB_FUN_TTOOLBAR                

topenai 	size = 4968
	_HB_FUN_TOPENAI                 

tordinfo	size = 2016
	_HB_FUN_TORDINFO                

tpages  	size = 5468
	_HB_FUN_TPAGES                  

tpanel  	size = 5936
	_HB_FUN_TPANEL                  

tparser 	size = 976
	_HB_FUN_TPARSER                 

tpdf    	size = 12519
	_HB_FUN_TPDF                    

tpop3   	size = 4120
	_HB_FUN_TPOP3                   

tprogres	size = 3540
	_HB_FUN_TPROGRESS               

tproxy  	size = 2384
	_HB_FUN_TPROXY                  

trackbar	size = 3688
	_HB_FUN_TTRACKBAR               

tras    	size = 4760
	_HB_FUN_TRAS                    

trating 	size = 6636
	_HB_FUN_TRATING                 

trbgroup	size = 18207
	_HB_FUN_TRBGROUP                

trbtn   	size = 26407
	_HB_FUN_TRBTN                   

trdd    	size = 3684
	_HB_FUN_RDDEVENT                  _HB_FUN_TRDD
	_HB_FUN_VIRTUALRDD              

trddodbc	size = 6064
	_HB_FUN_TRDDODBC                

trecset 	size = 22155
	_HB_FUN_ADOERRORASTEXT            _HB_FUN_TRECSET

treeitem	size = 9388
	_HB_FUN_GETTREEBMPS               _HB_FUN_TTREEITEM

trees   	size = 2372
	_HB_FUN_SUMMARYDATAASTREE         _HB_FUN_TREEBEGIN
	_HB_FUN_TREEEND                   _HB_FUN_TREEFREE
	_HB_FUN__TREEITEM               

tribbon 	size = 41067
	_HB_FUN_GRADIENTBMP               _HB_FUN_TBACKSTAGE
	_HB_FUN_TBACKSTAGEOPTION          _HB_FUN_TQUICKACCESS
	_HB_FUN_TRIBBONBAR              

triched5	size = 48423
	_HB_FUN_MNUCOLORS                 _HB_FUN_TRICHEDIT5

trichedi	size = 26651
	_HB_FUN_TRICHEDIT               

trpanel 	size = 2332
	_HB_FUN_TRPANEL                 

tsaybcod	size = 4044
	_HB_FUN_TSAYBARCODE             

tselex  	size = 12027
	_HB_FUN_TSELEX                  

tskinbtn	size = 2304
	_HB_FUN_TSKINBUTTON             

tsmtp   	size = 14667
	_HB_FUN_CFILENOPATHSMTP           _HB_FUN_TSMTP

tsocket 	size = 6868
	_HB_FUN_SHOWIP                    _HB_FUN_TSOCKET

tstruct 	size = 4048
	_HB_FUN_THISSTRUCT                _HB_FUN_TSTRUCT

tswitch 	size = 9327
	_HB_FUN_TSWITCH                 

ttabctrl	size = 4304
	_HB_FUN_TTABCONTROL             

ttitle  	size = 21199
	_HB_FUN_TTITLE                    _HB_FUN_TTITLEIMG
	_HB_FUN_TTITLETEXT              

ttmpicke	size = 5776
	_HB_FUN_TTIMEPICK               

ttoast  	size = 21155
	_HB_FUN_TIPTIMEHIDE               _HB_FUN_TIPTRANSFLICKER
	_HB_FUN_TIPTRANSHIDE              _HB_FUN_TIPTRANSSHOW
	_HB_FUN_TTOAST                  

ttray   	size = 4580
	_HB_FUN_GETNOTIFYICONDATA         _HB_FUN_TTRAYICON

ttreevie	size = 12739
	_HB_FUN_TTREEVIEW               

ttvitem 	size = 4528
	_HB_FUN_TTVITEM                 

ttxtedit	size = 33555
	_HB_FUN_TTXTEDIT                  _HB_FUN_TTXTUNDO

ttxtfile	size = 5112
	_HB_FUN_TTXTFILE                

twebcam 	size = 9295
	_HB_FUN_GETVIDEOCAPDRIVER         _HB_FUN_TWEBCAM
	_HB_FUN__WEBCAM_EVENT           

twebclie	size = 2084
	_HB_FUN_TWEBCLIENT              

twebserv	size = 9472
	_HB_FUN_CLIENTIP                  _HB_FUN_GETQUERY
	_HB_FUN_SERVERIP                  _HB_FUN_TWEBSERVER
	_HB_FUN_UNESCAPE                

twebsock	size = 4824
	_HB_FUN_TWEBSOCKETSERVER        

twebview	size = 5964
	_HB_FUN_BUILDWEBVIEW              _HB_FUN_ISWEBVIEWAVAILABLE
	_HB_FUN_TWEBVIEW                  _HB_FUN_TWEBVIEWITEM
	_HB_FUN_WEBVIEW                   _HB_FUN_WEBVIEWITEMREDEFINE
	_HB_FUN_WEBVIEW_GETVALUES         _HB_FUN_WEBVIEW_HANDLEEVENT

twebview2	size = 5936
	_HB_FUN_FW_WEBVIEW                _HB_FUN_TWEBVIEW2
	_HB_FUN_WEBVIEW2_ONBIND           _HB_FUN_WEBVIEW2_ONEVAL
	_HB_FUN_WEBVIEW2_ONNAVIGATIONCOMPLETED

tweekv  	size = 8411
	_HB_FUN_TWEEKVIEW               

tyacc   	size = 4448
	_HB_FUN_TYACC                   

uidialog	size = 6852
	_HB_FUN_DLGBARTITLEUI             _HB_FUN_DLGVS
	_HB_FUN_NCUANTAS                  _HB_FUN_TDIALOGUI

uiwindow	size = 51843
	_HB_FUN_CARGAIMGBTT               _HB_FUN_CHANGECOLORBAR
	_HB_FUN_CHANGECOLORIMG            _HB_FUN_DRAWTXTROW
	_HB_FUN_KEYBD_EVENT               _HB_FUN_LOADIMGUI
	_HB_FUN_SINB                      _HB_FUN_TWINDOWSUI

urllink 	size = 5628
	_HB_FUN_TURLLINK                

valblank	size = 4830
	_HB_FUN_ARRAYTOTEXT               _HB_FUN_CCLRTOCODE
	_HB_FUN_CVALTOCHAR                _HB_FUN_FW_CLRTOHTML
	_HB_FUN_FW_DEFAULT                _HB_FUN_FW_READVAR
	_HB_FUN_IFNIL                     _HB_FUN_NRGBADD
	_HB_FUN_NRGBRESET                 _HB_FUN_UVALBLANK
	_HB_FUN_XEVAL                   

valtostr	size = 23285
	_HB_FUN_ARRAYTOTEXTBOX            _HB_FUN_ARRTOHASH
	_HB_FUN_ARRTOJSON                 _HB_FUN_CNUM2EXPFORMAT
	_HB_FUN_CNUMTOSTR                 _HB_FUN_COMPAREUNISTR
	_HB_FUN_CURRENCYSYMBOL            _HB_FUN_CVALTOSTR
	_HB_FUN_DATETIMEFROMFILETIME      _HB_FUN_DBF_FIELDPIC
	_HB_FUN_EXPANDNUMPICT             _HB_FUN_FITNUMPICTTOVAL
	_HB_FUN_FWNUMFORMAT               _HB_FUN_FW_ADDMONTH
	_HB_FUN_FW_ADDTIME                _HB_FUN_FW_AGE
	_HB_FUN_FW_ALLTRIM                _HB_FUN_FW_ARRAYASLIST
	_HB_FUN_FW_ARRAYTOCSV             _HB_FUN_FW_ARRAYTOHTML
	_HB_FUN_FW_CONCAT                 _HB_FUN_FW_CONCAT_WS
	_HB_FUN_FW_DATETOUNIX             _HB_FUN_FW_DTOT
	_HB_FUN_FW_JSONDECODE             _HB_FUN_FW_LISTASARRAY
	_HB_FUN_FW_LTRIM                  _HB_FUN_FW_MTHSLAPSED
	_HB_FUN_FW_NEXTBIRTHDAY           _HB_FUN_FW_PROPERCASE
	_HB_FUN_FW_RTRIM                  _HB_FUN_FW_SETJSONHUMAN
	_HB_FUN_FW_STOT                   _HB_FUN_FW_STUFF
	_HB_FUN_FW_TABLESTYLEHTML         _HB_FUN_FW_TIMEPART
	_HB_FUN_FW_TIMEZONE               _HB_FUN_FW_TIMEZONENAME
	_HB_FUN_FW_TRANSFORM              _HB_FUN_FW_TRIM
	_HB_FUN_FW_TTOD                   _HB_FUN_FW_UNIXTODATE
	_HB_FUN_FW_UTCTOLOCAL             _HB_FUN_FW_UTF8LEFT
	_HB_FUN_FW_UTF8RIGHT              _HB_FUN_FW_UTF8STUFF
	_HB_FUN_FW_UTF8SUBSTR             _HB_FUN_FW_VALTOCSV
	_HB_FUN_FW_VALTOEXP               _HB_FUN_FW_VALTOHTML
	_HB_FUN_FW_YMDLAPSED              _HB_FUN_INTPICT
	_HB_FUN_ISBINARYDATA              _HB_FUN_ISROMANNUMBER
	_HB_FUN_ISTEXTUNICODE             _HB_FUN_MAKEIID
	_HB_FUN_NSTRTONUM                 _HB_FUN_NUMPICT
	_HB_FUN_NUMPICTADDCURRENCY        _HB_FUN_NUMPICTFORVAL
	_HB_FUN_STRBETWEEN                _HB_FUN_TABLETOHTMLPAGE
	_HB_FUN_UCHARTOVAL                _HB_FUN_UTC_TIMESTAMP
	_HB_FUN_UTF16TOUTF8               _HB_FUN_UTF8TOUTF16
	_HB_FUN_WHEELSCROLL             

valtostt	size = 248
	_HB_FUN_FW_DT2STR                 _HB_FUN_FW_STR2DT

video   	size = 2832
	_HB_FUN_TVIDEO                  

vistamnu	size = 22394
	_HB_FUN_C5SETSCROLLINFO           _HB_FUN_INTERSECTRECT
	_HB_FUN_TVISTAMENU                _HB_FUN_TVISTAMENUITEM

vrd     	size = 44247
	_HB_FUN_DELFILE                   _HB_FUN_ENTRYNR
	_HB_FUN_FULLPATHNAME              _HB_FUN_GETINIENTRY
	_HB_FUN_GETINISECTION             _HB_FUN_GETPPSECTION
	_HB_FUN_REGOPENKEYEXA             _HB_FUN_REGQUERYVALUEEXA
	_HB_FUN_VRD                       _HB_FUN_VRD_ATOKEN
	_HB_FUN_VRD_ERSTART               _HB_FUN_VRD_GETFIELD
	_HB_FUN_VRD_GETFULLPATH           _HB_FUN_VRD_GETGROUP
	_HB_FUN_VRD_GETREGISTRY           _HB_FUN_VRD_GL
	_HB_FUN_VRD_LF2SF                 _HB_FUN_VRD_NEWSTRUCTURE
	_HB_FUN_VRD_PRREPORT              _HB_FUN_VRD_SETFIELD
	_HB_FUN_VRD_STRCOUNT              _HB_FUN_VRD_XTOC

vrdbcode	size = 11700
	_HB_FUN_VRDBARCODE              

vrdini  	size = 3592
	_HB_FUN_GETPROFSECT               _HB_FUN_TINIER

vrditem 	size = 9016
	_HB_FUN_VRDITEM                 

vstrfun1	size = 5496
	_HB_FUN_FINDMATCH                 _HB_FUN_FIRSTWORD
	_HB_FUN_FW_AT                     _HB_FUN_FW_EXPRNASBLOCK
	_HB_FUN_FW_STRICMP                _HB_FUN_FW_STRIPCOMMENTS
	_HB_FUN_ISINLIST                  _HB_FUN_VALTYPEX

wbrowse 	size = 44751
	_HB_FUN_TWBROWSE                  _HB_FUN__AFIELDS

webapp  	size = 9352
	_HB_FUN_BUTTONHTML                _HB_FUN_CHECKBOXHTML
	_HB_FUN_CTRLSHTML                 _HB_FUN_EDITHTML
	_HB_FUN_GETWEBAPP                 _HB_FUN_ISWEBAPP
	_HB_FUN_SETWEBAPP                 _HB_FUN_STATICHTML
	_HB_FUN_WA_ADDDIALOG              _HB_FUN_WA_CONTROLLER
	_HB_FUN_WA_EXISTDIALOG            _HB_FUN_WA_GETDIALOGFROMID
	_HB_FUN_WA_GETDIALOGFROMLINK      _HB_FUN_WA_HEADER
	_HB_FUN_WA_SHOWCODEDIALOGS        _HB_FUN_WEBSERVER

webserver	size = 5462
	_HB_FUN_HBWEBSERVER               _HB_FUN_HB_URLDECODE
	_HB_FUN_OBJSETDATA                _HB_FUN_OBJTOCHAR

window  	size = 66407
	_HB_FUN_AREAD                     _HB_FUN_ASAVE
	_HB_FUN_ATOTEXT                   _HB_FUN_BRWCLASSES
	_HB_FUN_CLEARDATASLIST            _HB_FUN_DBUFFEREND
	_HB_FUN_DEVICETOUCHSPACE          _HB_FUN_FW_TOUCHFRIENDLY
	_HB_FUN_GETALLWIN                 _HB_FUN_GETDROPINFO
	_HB_FUN_GETMSGLOG                 _HB_FUN_GETSETWINSYSLOG
	_HB_FUN_GETWNDDEFAULT             _HB_FUN_MSGLOG
	_HB_FUN_NWINDOWS                  _HB_FUN_OREAD
	_HB_FUN_OWNDFROMHWND              _HB_FUN_SETALPHA
	_HB_FUN_SETBALLOON                _HB_FUN_SETDRAGBEGINWND
	_HB_FUN_SETDROPINFO               _HB_FUN_SETSKINS
	_HB_FUN_SETWNDDEFAULT             _HB_FUN_STARTFWLOG
	_HB_FUN_TWINDOW                   _HB_FUN_WNDCREATEERROR
	_HB_FUN_WNDMAIN                   _HB_FUN_WNDPARENTS
	_HB_FUN__FWH                    

wininet 	size = 7844
	_HB_FUN_FTPCREATEDIRECTORY        _HB_FUN_FTPDELETEFILE
	_HB_FUN_FTPFINDFIRSTFILE          _HB_FUN_FTPGETFILE
	_HB_FUN_FTPOPENFILE               _HB_FUN_FTPPUTFILE
	_HB_FUN_FTPRENAMEFILE             _HB_FUN_FTPSETCURRENTDIRECTORY
	_HB_FUN_INTERAUTHA                _HB_FUN_INTERNETAT
	_HB_FUN_INTERNETAU                _HB_FUN_INTERNETCLOSEHANDLE
	_HB_FUN_INTERNETCONNECT           _HB_FUN_INTERNETDI
	_HB_FUN_INTERNETFINDNEXTFILE      _HB_FUN_INTERNETGO
	_HB_FUN_INTERNETHA                _HB_FUN_INTERNETOPEN
	_HB_FUN_INTERNETREADFILE          _HB_FUN_INTERNETSETFILEPOINTER
	_HB_FUN_INTERNETST                _HB_FUN_INTERNETWRITEFILE
	_HB_FUN_INTRESPINF                _HB_FUN_WININET

winrt   	size = 3796
	_HB_FUN_ROGETACTIVATIONFACTORY    _HB_FUN_ROINITIALIZE
	_HB_FUN_ROUNINITIALIZE            _HB_FUN_TOAST
	_HB_FUN_WINDOWSCREATESTRING       _HB_FUN_WINDOWSDELETESTRING
	_HB_FUN_WINDOWSGETSTRINGRAWBUFFER  _HB_FUN_WINRTSTRING

wqout   	size = 400
	_HB_FUN_WQOUT                   

xbrcode 	size = 19199
	_HB_FUN_CFONTCODE                 _HB_FUN_TXBRCODE
	_HB_FUN_TXBRCOLCODE             

xbrgetdt	size = 7748
	_HB_FUN_RESETCAL                  _HB_FUN_SETUPCOL
	_HB_FUN_TDTXBROWSE                _HB_FUN_XBRGETDATE

xbrowse 	size = 264311
	_HB_FUN_CALCLINEWH                _HB_FUN_CONTRASTCOLOR
	_HB_FUN_DRAWHORZ                  _HB_FUN_DRAWPEN
	_HB_FUN_DRAWVERT                  _HB_FUN_EXTRACTLINE
	_HB_FUN_HASHTREE                  _HB_FUN_ISRECORDSET
	_HB_FUN_PARSEXBRCOLSPEC           _HB_FUN_SETKINETIC
	_HB_FUN_SETXBROWSE                _HB_FUN_TXBROWS
	_HB_FUN_TXBROWSE                  _HB_FUN_TXBRWCOLUMN
	_HB_FUN_XADS_KEYGOTO              _HB_FUN_XBRADOSAVE
	_HB_FUN_XBREDITMEMO               _HB_FUN_XBRGETSELECTALL
	_HB_FUN_XBRHEXEDIT                _HB_FUN_XBRIMAGEEDIT
	_HB_FUN_XBRJUSTIFY                _HB_FUN_XBRNUMFORMAT
	_HB_FUN_XBROWSABLEOBJ             _HB_FUN_XBROWSENEW
	_HB_FUN_XBRSQLRDDMODE             _HB_FUN_XBRWSETDATASOURCE
	_HB_FUN_XREPORT                 

xbrowser	size = 10775
	_HB_FUN_XBROWSE                 

xcbrowse	size = 42219
	_HB_FUN_CLICKOUTEND               _HB_FUN_DAFMTOTXT
	_HB_FUN_DRAWROWN                  _HB_FUN_GENMENUBLOCK
	_HB_FUN_TXCBROWS                  _HB_FUN_TXCBROWSE
	_HB_FUN_TXCBRWCOLUMN              _HB_FUN_XBRWLINDET
	_HB_FUN_XBRWTEXTFILE              _HB_FUN_XCBROWSEMNU
	_HB_FUN_XCBROWSENEW               _HB_FUN_XCBROWSETREE
	_HB_FUN_XMAKETREE                 _HB_FUN_XSUBTREE
	_HB_FUN_XTOGGLEFOLDER           

ximage  	size = 29213
	_HB_FUN_ANGLE3PT                  _HB_FUN_ROTATEBMP
	_HB_FUN_TXIMAGE                   _HB_FUN_WMF2EMFX
	_HB_FUN_XIMAGE                    _HB_FUN_XIMAGEARRAY

xmlview 	size = 5224
	_HB_FUN_FW_XMLVIEW                _HB_FUN_XBROWSEXML

xpad    	size = 740
	_HB_FUN_GETFREESYSTEMRESOURCES    _HB_FUN_XPADC
	_HB_FUN_XPADL                     _HB_FUN_XPADR
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: String functions UTF8 compatible :: Reply by Antonio Linares]]> 2025-04-12T23:35:24-06:00 2025-04-12T23:35:24-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45618&p=278966#p278966

Code: Select all | Expand

Publics by module

BMPREAD 	size = 347
	_HB_FUN_FILEREAD                  _HB_FUN_READBITMAP

CTLHDLEH	size = 6976
	_HB_FUN_WNDHANDLEEVENT            _regex

FFWNDRUN	size = 400
	_GetWndApp                        _HB_FUN_SETIDLEACT
	_HB_FUN_WINRUN                    _HB_FUN___GENGPF
	_SetWndApp                        __SetAcceleratorTable
	_wLastKey                       

HARBOURC	size = 622
	_FW_GetUnicode                    _FrameProc
	_HB_FUN_ALLOCCONSOLE              _HB_FUN_DEBUGGER
	_HB_FUN_FW_SETUNICODE             _HB_FUN_GETSTDHANDLE
	_HB_FUN_SETCONSOLETITLE           _HB_FUN__LASTKEY
	_LogFile                          ___FWH

LEGACYCP	size = 0

SYSREFRE	size = 530
	_DdeRefresh                       _HB_FUN_DDEREFRESH
	_HB_FUN_SYSREFRESH                _SysRefresh

TOOLBARS	size = 970
	_HB_FUN_CREATETLBAR               _HB_FUN_INITCOMMONCONTROLS
	_HB_FUN_INITCOMMONCONTROLSEX      _HB_FUN_TBADDBUTTON
	_HB_FUN_TBADDMENU                 _HB_FUN_TBADDSEPARATOR
	_HB_FUN_TBENABLEBUTTON            _HB_FUN_TBGETRECT
	_HB_FUN_TBSETTEXT                 _HB_FUN_TTNSETTEXT

TOOLTIP 	size = 322
	_HB_FUN_CREATETOOLTIP           

WNDRUN  	size = 6572
	_GetWndProcInstance               _HB_FUN_CANREGDIALOG
	_HB_FUN_DEREGDIALOG               _HB_FUN_GETWNDAPP
	_HB_FUN_LWRUNNING                 _HB_FUN_REGDIALOG
	_HB_FUN_SETWNDAPP                 _IsModelessDialog
	_SetRunning                       _bWRunning

XPROC   	size = 152
	_HB_FUN_XCHANGEPROC             

__WNDPRO	size = 149
	_HB_FUN_WININSPECT                __DbgWndProc
	__WndProc                         _bDbgActive
	_bDbgBreak                      

aat     	size = 201
	_HB_FUN_AAT                     

accelera	size = 422
	_HB_FUN_LOADACCELERATORS          _HB_FUN_SETACCTABLE
	_HB_FUN_TRANSLATEACCELERATOR    

actx    	size = 557

anigif  	size = 101

animate 	size = 160
	_HB_FUN_ANIMOPEN                  _HB_FUN_ANIMOPENEX
	_HB_FUN_ANIMPLAY                

ansiup  	size = 227
	_HB_FUN_ANSILOWER                 _HB_FUN_ANSIUPPER
	_HB_FUN_CHARUPPER                 _HB_FUN_ISANSILOWER
	_HB_FUN_ISANSIUPPER             

arg     	size = 115
	_HB_FUN_ARG                       _HB_FUN_CARGV
	_HB_FUN_NARGC                   

atom    	size = 101
	_HB_FUN_GLOBALADDATOM             _HB_FUN_GLOBALDELATOM
	_HB_FUN_GLOBALGETATOMNAME       

b2bin   	size = 176
	_HB_FUN_B2BIN                     _HB_FUN_BIN2D
	_HB_FUN_C2HEX                     _HB_FUN_D2BIN

backgrnd	size = 436
	_HB_FUN_DitBackGrd              

bartools	size = 807
	_BtnDisable                       _HB_FUN_BARADJUST
	_HB_FUN_BTNDISABLE                _RectDisable

bitmaps 	size = 34183
	_HB_FUN_FWBITMAP                  _fwstrlwr

bmpdraw 	size = 4064
	_DrawBitmap                       _DrawGray
	_DrawGrayed                       _DrawMasked
	_DuplicateBitmap                  _FWWaterMark
	_HB_FUN_BMPALPHA                  _HB_FUN_BTNPAINT
	_HB_FUN_COPYIMAGE                 _HB_FUN_CREATECOMPATIBLEBITMAP
	_HB_FUN_DRAWBITMAP                _HB_FUN_DRAWGRAY
	_HB_FUN_DRAWMASKED                _HB_FUN_DUPLICATEBITMAP
	_HB_FUN_FWHBMPTOALPHA             _HB_FUN_FWWATERMARK
	_HB_FUN_RESIZEBMP                 _HB_FUN_SHADOWH
	_HB_FUN_SHADOWV                   _HB_FUN_STRETCHBLT

bmps    	size = 14363
	_HB_FUN_BMPEBCOLLAPSED            _HB_FUN_BMPEBEXPANDED
	_HB_FUN_BMPOLARROW                _HB_FUN_BMPOLDOTS
	_HB_FUN_CLOSELISTBAR              _HB_FUN_CLOSEOVERLISTBAR
	_HB_FUN_MSGBAR2007                _HB_FUN_OPENLISTBAR
	_HB_FUN_OPENOVERLISTBAR           _HB_FUN_QUICKAREAL
	_HB_FUN_QUICKAREAM                _HB_FUN_QUICKAREAR

bmptabs 	size = 10585
	_HB_FUN_BMP_BACK                  _HB_FUN_BMP_BACKV
	_HB_FUN_BMP_TABSEL                _HB_FUN_BMP_TABSELL
	_HB_FUN_BMP_TABSELLV              _HB_FUN_BMP_TABSELR
	_HB_FUN_BMP_TABSELRV              _HB_FUN_BMP_TABSELV
	_HB_FUN_BMP_TABUNSEL              _HB_FUN_BMP_TABUNSELV
	_HB_FUN_BMP_TABUNSL               _HB_FUN_BMP_TABUNSLV
	_HB_FUN_BMP_TABUNSR               _HB_FUN_BMP_TABUNSRV

brushes 	size = 22037
	_CircleGradient                   _CreateMemBitmap
	_CreateMemBitmap2                 _CreateMemBitmap3
	_DiagonalGradient                 _Gradient
	_HB_FUN_ABPAINT                   _HB_FUN_ATREEBMPS
	_HB_FUN_BMP_ARROWBCK              _HB_FUN_CIRCLEGRADIENT
	_HB_FUN_CREATEHATCHBRUSH          _HB_FUN_DIAGONALGRADIENT
	_HB_FUN_EMF2WMF                   _HB_FUN_FIXSAYS
	_HB_FUN_FWBRUSHES                 _HB_FUN_FWLOGOBITMAP
	_HB_FUN_GETDRAWITEM               _HB_FUN_GETDRAWMENU
	_HB_FUN_GETMEAITEM                _HB_FUN_GRADIENT
	_HB_FUN_ISBREAK                   _HB_FUN_ISDIBITMAP
	_HB_FUN_ISMENUITEM                _HB_FUN_ISMISEPARATOR
	_HB_FUN_ISSEPARATOR               _HB_FUN_MISTEXT
	_HB_FUN_MSGBAR2010                _HB_FUN_MSGBAR2015
	_HB_FUN_PARENTIMAGE               _HB_FUN_WMF2EMF
	_HB_ISDIBitmap                  

c5cnew  	size = 28735
	BrowseCallbackProc                _BitmapFromCode
	_C5GradientFill                   _C5_CloseThemeData
	_C5_DrawThemeBackground           _C5_IsAppThemed
	_C5_IsThemeActive                 _C5_OpenThemeData
	_DrawAlphaTransparentBitmap       _DrawBitmapEx
	_DrawBitmapTransparent            _DrawGradientFill
	_DrawMaskedColor                  _FillSolidRect
	_FrameDotEx2                      _GetFontMenu
	_GradientFill0                    _HB_FUN_ARROWDOWN
	_HB_FUN_ARROWUP                   _HB_FUN_BMPARROWDOWNBLACK
	_HB_FUN_BMPARROWDOWNNET           _HB_FUN_BMPARROWDOWNWHITE
	_HB_FUN_BMPARROWUPBLACK           _HB_FUN_BMPARROWUPWHITE
	_HB_FUN_BMPBLACKARROWS            _HB_FUN_BMPBTNDBAR
	_HB_FUN_BMPCARPETA                _HB_FUN_BMPCDROM
	_HB_FUN_BMPHDDISK                 _HB_FUN_BMPHEIGHT
	_HB_FUN_BMPHTML                   _HB_FUN_BMPNETDRIVE
	_HB_FUN_BMPTOGRAY                 _HB_FUN_BMPWHITEARROWS
	_HB_FUN_BMPWIDTH                  _HB_FUN_BOX
	_HB_FUN_BOXEX                     _HB_FUN_C5CURSORCATCH
	_HB_FUN_C5CURSORHAND              _HB_FUN_C5CURSORSEP
	_HB_FUN_C5DEGRADA                 _HB_FUN_C5DRAWTEXT
	_HB_FUN_C5LINE                    _HB_FUN_C5ROUNDBOX
	_HB_FUN_C5ROUNDRECT               _HB_FUN_C5_CLOSETHEMEDATA
	_HB_FUN_C5_DRAWTHEMEBACKGROUND    _HB_FUN_C5_DRAWTHEMEICON
	_HB_FUN_C5_DRAWTHEMETEXT          _HB_FUN_C5_EXTFLOODFILL
	_HB_FUN_C5_GETCURRENTTHEMENAME    _HB_FUN_C5_GETTHEMECOLOR
	_HB_FUN_C5_GETTHEMEFONT           _HB_FUN_C5_ISAPPTHEMED
	_HB_FUN_C5_ISTHEMEACTIVE          _HB_FUN_C5_OPENTHEMEDATA
	_HB_FUN_CGETFILEEX                _HB_FUN_CGETFOLDER
	_HB_FUN_COMPATBMP                 _HB_FUN_COMPATDC
	_HB_FUN_CREAFBOLD                 _HB_FUN_CREAFCAPT
	_HB_FUN_CREAFUNDER                _HB_FUN_CREATEBRUSHDOTTED
	_HB_FUN_CREATECAPTIONFONT         _HB_FUN_CREATEFONTBOLD
	_HB_FUN_CREATEFONTUNDERLINE       _HB_FUN_CREATEHGRIP
	_HB_FUN_DEGRADASO                 _HB_FUN_DRAWALPHATRANSPARENTBITMAP
	_HB_FUN_DRAWBITMAPEX              _HB_FUN_DRAWEDGE
	_HB_FUN_DRAWFRAMECONTROL          _HB_FUN_DRAWGRADIENTFILL
	_HB_FUN_DRAWIMAGEBLEND            _HB_FUN_DRAWMASKEDCOLOR
	_HB_FUN_DRAWSTATESTRING           _HB_FUN_EQUALRECT
	_HB_FUN_EXCLUDECLIPRECT           _HB_FUN_FILLSOLIDRECT
	_HB_FUN_FILLSOLIRC                _HB_FUN_FRAMEDOTEX
	_HB_FUN_FWDELETEFILE              _HB_FUN_GETBMPICONEXT
	_HB_FUN_GETCURRENTOBJECT          _HB_FUN_GETDRAWITEMSTRUCT
	_HB_FUN_GETSCROLLINFOPOS          _HB_FUN_GETSIZETEXT
	_HB_FUN_GETTEXTLEN                _HB_FUN_HGRADIENTFILL
	_HB_FUN_HORIZONTALGRADIENT        _HB_FUN_ICONTOBMP
	_HB_FUN_ICONTOGRAY                _HB_FUN_IMAGELIST_ADD
	_HB_FUN_IMAGELIST_ADDMASKED       _HB_FUN_IMAGELIST_CREATE
	_HB_FUN_IMAGELIST_DESTROY         _HB_FUN_IMAGELIST_DRAW
	_HB_FUN_IMAGELIST_GETICONSIZE     _HB_FUN_IMAGELIST_LOADIMAGE
	_HB_FUN_INTRECT                   _HB_FUN_LINEEX
	_HB_FUN_MENUDRAWITEM2             _HB_FUN_MENUMEASUREITEM2
	_HB_FUN_POW                       _HB_FUN_PTINRECT
	_HB_FUN_REGISTERWINDOWMESSAGE     _HB_FUN_ROUNDRECTEX
	_HB_FUN_SETBRUSHORG               _HB_FUN_SETEDITCLIENTRIGHT
	_HB_FUN_SETMENUITEMBITMAPS        _HB_FUN_SETSTRETCHBLTMODE
	_HB_FUN_SHADERECT                 _HB_FUN_STARTTRACKMOUSELEAVE
	_HB_FUN_TRANSPARENTBLT            _HB_FUN_TRANSPARENTBLT2
	_HB_FUN_VALIDATERECT              _HB_FUN_VERTICALGRADIENT
	_HB_FUN_VGRADIENTFILL             _HorizontalGradient
	_ShadeRect                        _StartTrackMouseLeave
	_VerticalGradient               

caldll32	size = 552
	_GetCallProc32                    _HB_FUN_GETHWND32
	_HB_FUN_GETPROC32                 _HB_FUN_GETVDMP16
	_HB_FUN_GETVDMP32                 _HB_FUN_LADDTOC

calendar	size = 1574
	_HB_FUN_GETDAYSTATE               _HB_FUN_ISOVERDAY
	_HB_FUN_MONTHCAL_GETCOLOR         _HB_FUN_MONTHCAL_GETCURRENTVIEW
	_HB_FUN_MONTHCAL_GETCURSEL        _HB_FUN_MONTHCAL_GETFIRSTDAYOFWEEK
	_HB_FUN_MONTHCAL_GETMAXSELCOUNT   _HB_FUN_MONTHCAL_GETMINREQRECT
	_HB_FUN_MONTHCAL_GETMONTHRANGE    _HB_FUN_MONTHCAL_GETRANGE
	_HB_FUN_MONTHCAL_GETSELRANGE      _HB_FUN_MONTHCAL_GETTODAY
	_HB_FUN_MONTHCAL_GETVIEWCHANGEVALUES  _HB_FUN_MONTHCAL_SETCOLOR
	_HB_FUN_MONTHCAL_SETCURRENTVIEW   _HB_FUN_MONTHCAL_SETCURSEL
	_HB_FUN_MONTHCAL_SETFIRSTDAYOFWEEK  _HB_FUN_MONTHCAL_SETMAXSELCOUNT
	_HB_FUN_MONTHCAL_SETRANGE         _HB_FUN_MONTHCAL_SETSELRANGE
	_HB_FUN_MONTHCAL_SETTODAY         _HB_FUN_MONTHCAL_SIZERECTTOMIN
	_HB_FUN_SETDAYSTATE             

calexc  	size = 1908
	_HB_FUN_HNEXTITEM                 _HB_FUN_HNEXTITEMO
	_HB_FUN_HPREVITEM                 _HB_FUN_HPREVITEMO
	_HB_FUN_POLYLINE                  _HB_FUN_RGBFILTER

calldll 	size = 816
	_HB_FUN_FWCALLDLL               

calldllc	size = 0

caret   	size = 154
	_HB_FUN_CREATECARET               _HB_FUN_DESTROYCARET
	_HB_FUN_GETCARETPOS               _HB_FUN_HIDECARET
	_HB_FUN_SETCARETPOS               _HB_FUN_SHOWCARET

changepr	size = 92
	_HB_FUN_CHANGEPROC                _HB_FUN_LINKDLG
	_HB_FUN_RESTPROC                

chr2data	size = 65
	_HB_FUN_CCHR2DATA               

clpbrd  	size = 1050
	_HB_FUN_CLOSECLIPBOARD            _HB_FUN_EMPTYCLIPBOARD
	_HB_FUN_GETCLPDATA                _HB_FUN_GETPRIORITYCLIPBOARDFORMAT
	_HB_FUN_OPENCLIPBOARD             _HB_FUN_SETCLIPBOARDDATA

clrchoos	size = 305
	ComDlgHkColor                     _HB_FUN_CHOOSECOLOR

clt2scr 	size = 256
	_HB_FUN_CLIENTTOSCREEN            _HB_FUN_SCREENTOCLIENT

codegtf 	size = 641
	_HB_FUN_CODETEXT                  _HB_FUN_DECODETEXT

color   	size = 2659
	_HB_FUN_ARGB2RGB                  _HB_FUN_BGR2RGB
	_HB_FUN_CLR2ARRAY                 _HB_FUN_GETBKCOLOR
	_HB_FUN_GETSYSCOLOR               _HB_FUN_GETTEXTCOLOR
	_HB_FUN_HSLTORGB                  _HB_FUN_NARGB
	_HB_FUN_NRGB                      _HB_FUN_RGBTOHSL
	_HB_FUN_SETBKCOLOR                _HB_FUN_SETBKMODE
	_HB_FUN_SETSYSCOLORS              _HB_FUN_SETTEXTCOLOR
	_hashrgbtocolorref                _hsl_to_rgb
	_rgb_to_hsl                     

colorton	size = 1009
	_HB_FUN_LIGHTCOLOR                _HB_FUN_NCOLORTON
	_HB_FUN_NGETBACKRGB               _HB_FUN_NGETFORERGB
	_HB_FUN_NRGB2ARRAY                _HB_FUN_NRGBBLUE
	_HB_FUN_NRGBGREEN                 _HB_FUN_NRGBRED
	_bColorToN                        _lColorToRGB

comm    	size = 1417
	_CloseComm                        _EnableCommNotification
	_FlushComm                        _GetCommError
	_GetCommEventMask                 _HB_FUN_BUILDCOMMDCB
	_HB_FUN_CLOSECOMM                 _HB_FUN_ENABLECOMMNOTIFICATION
	_HB_FUN_ESCAPECOMMFUNCTION        _HB_FUN_FLUSHCOMM
	_HB_FUN_GETCOMMERROR              _HB_FUN_OPENCOMM
	_HB_FUN_READCOMM                  _HB_FUN_SETCOMMSTATE
	_HB_FUN_WRITECOMM                 _OpenComm
	_ReadComm                         _SetCommEventMask
	_WriteComm                      

crc     	size = 1642
	_HB_FUN_NCRCERROR                 _HB_FUN_NFILECRC
	_HB_FUN_NSTRCRC                 

createpa	size = 48
	_HB_FUN_CREATEPATTERNBRUSH      

createpe	size = 40
	_HB_FUN_CREATEPEN               

createso	size = 149
	_HB_FUN_CREATESOLIDBRUSH          _HB_FUN_SETBRUSHORGEX

creatwnd	size = 207
	_HB_FUN_CREATEWINDOW              _HB_FUN_GETERRMSG

ctl3d   	size = 858
	Ctl3dAutoSubClass                 Ctl3dEnabled
	Ctl3dRegister                     Ctl3dSubClassDlgEx
	Ctl3dSubclassCtl                  Ctl3dUnregister
	Ctl3dUnsubclassCtl                _HB_FUN_CTL3DAUTOS
	_HB_FUN_CTL3DDLGEX                _HB_FUN_CTL3DLOOK
	_HB_FUN_CTL3DREGIS                _HB_FUN_CTL3DUNREG
	_HB_FUN_SET3DLOOK               

ctrl2chr	size = 643
	_HB_FUN_CCTRL2CHR                 _HB_FUN_CTRLFONTFACENAME
	_HB_FUN_CTRLFONTSIZE              _HB_FUN_CTRLGETBACKCOLOR
	_HB_FUN_CTRLGETTEXTCOLOR          _HB_FUN_GETDIALOGBASEUNITS

ctrldraw	size = 2059
	_HB_FUN_BARINVERT                 _HB_FUN_CTRLDRAW
	_HB_FUN_CTRLDRAWFOCUS             _HB_FUN_LBXDRAWITEM
	_HB_FUN_LBXMEASURE                _HB_FUN_RECTDOTTED

cursors 	size = 4370
	_CursorArrow                      _CursorWait
	_HB_FUN_CREATEBMPCURSOR           _HB_FUN_CURSOR
	_HB_FUN_CURSORARROW               _HB_FUN_CURSORCATCH
	_HB_FUN_CURSORDRAG                _HB_FUN_CURSORHAND
	_HB_FUN_CURSORIBEAM               _HB_FUN_CURSORNO
	_HB_FUN_CURSORNS                  _HB_FUN_CURSOROPENHAND
	_HB_FUN_CURSORSEARCH              _HB_FUN_CURSORSIZE
	_HB_FUN_CURSORSTOP                _HB_FUN_CURSORWAIT
	_HB_FUN_CURSORWE                  _HB_FUN_DESTROYCURSOR
	_HB_FUN_GETCURSORDRAG             _HB_FUN_GETCURSORHAND
	_HB_FUN_GETCURSORPOS              _HB_FUN_GETCURSORSEARCH
	_HB_FUN_GETCURSORSTOP             _HB_FUN_GETGUIRESOURCES
	_HB_FUN_LOADCURSOR                _HB_FUN_SETCURSORPOS
	_HB_FUN_SHOWCURSOR                _HB_FUN_WSETCURSOR

cvrflow 	size = 3844
	_BackImg                          _BmpPer
	_BmpPerspec                       _DrawReflex
	_HB_FUN_BMPPER                    _HB_FUN_BMPPERSPEC
	_HB_FUN_DRAWREFLEX              

cwebview	size = 1368

datepick	size = 385
	_HB_FUN_GETDATEPICK               _HB_FUN_INITCOMMON
	_HB_FUN_SETDATEPICK             

datetime	size = 201
	_HB_FUN_FILETIMETODATE            _HB_FUN_FILETIMETOTIME
	_HB_FUN_SYSTIME                 

dbl2flt 	size = 186
	_HB_FUN_NDBL2FLT                  _dbl2flt

dc      	size = 1788
	_HB_FUN_BITBLT                    _HB_FUN_CREATECDC
	_HB_FUN_CREATECOMPATIBLEDC        _HB_FUN_CREATEDC
	_HB_FUN_DBUFFERSTART              _HB_FUN_DELETEDC
	_HB_FUN_FWDISPBEGIN               _HB_FUN_FWDISPEND
	_HB_FUN_FWRESTSCREEN              _HB_FUN_FWSAVESCREEN
	_HB_FUN_GETDC                     _HB_FUN_GETWINDOWDC
	_HB_FUN_RELEASEDC                 _HB_FUN_RESTOREDC
	_HB_FUN_SAVEDC                    _HB_FUN_SETDIBITSTODEVICE
	_HB_FUN_SETVIEWORG                _HB_FUN_SETVIEWPORTEXT
	_HB_FUN_SETWINDOWEXT            

ddeml   	size = 1121
	_ClientCallback                   _HB_FUN_CLIENTCALLBACK
	_HB_FUN_DDEACCESSDATA             _HB_FUN_DDECLIENTTRANSACTION
	_HB_FUN_DDECMPSTRINGHANDLES       _HB_FUN_DDECONNECT
	_HB_FUN_DDECREATEDATAHANDLE       _HB_FUN_DDECREATESTRINGHANDLE
	_HB_FUN_DDEDISCONNECT             _HB_FUN_DDEFREEDATAHANDLE
	_HB_FUN_DDEFREESTRINGHANDLE       _HB_FUN_DDEGETDATA
	_HB_FUN_DDEGETLASTERROR           _HB_FUN_DDEINITIALIZE
	_HB_FUN_DDENAMESERVICE            _HB_FUN_DDEQUERYSTRING
	_HB_FUN_DDEUNINITIALIZE           _HB_FUN_SERVERCALLBACK
	_ServerCallback                 

ddexc   	size = 112
	_HB_FUN_DDECOMMAND                _HB_FUN_DDEGETCOMMAND

delobjec	size = 103
	_HB_FUN_DELETEOBJECT              _HB_FUN_ISGDIOBJECT
	_IsGDIObject                    

desktop 	size = 154
	_HB_FUN_GETDESKTOPAREA            _HB_FUN_GETDESKTOPWINDOW
	_HB_FUN_SETDESKWALLPAPER        

device  	size = 639
	_HB_FUN_DEVICECAPABILITIES        _HB_FUN_GETDEVICECAPS
	_HB_FUN_GETDRIVETYPE              _HB_FUN_GETLOGICALDRIVES
	_HB_FUN_GETLOGICALDRIVESTRINGS    _HB_FUN_SETROP2

dib     	size = 1348
	_CreateDIBPalette                 _DibBits
	_DibDraw                          _DibRead
	_DibToStr                         _DibWrite
	_HB_FUN_CREATEDIBITMAP            _HB_FUN_DIBDRAW
	_HB_FUN_DIBHEIGHT                 _HB_FUN_DIBPALETTE
	_HB_FUN_DIBREAD                   _HB_FUN_DIBTOSTR
	_HB_FUN_DIBWIDTH                  _HB_FUN_DIBWRITE
	wDIBColors                      

dibbmp  	size = 1257
	_DibFromBitmap                    _DibNumColors
	_HB_FUN_ALPHAFILL                 _HB_FUN_BMPTOSTR
	_HB_FUN_DIBFROMBITMAP             _HB_FUN_HASALPHA
	_isalphabmp                       _setalphabits

disk    	size = 104
	_HB_FUN_GETDISKFREESPACEEX      

dlg2chr 	size = 461
	_HB_FUN_CDLG2CHR                  _HB_FUN_GETDLGBASEUNITS

dlgbox  	size = 851
	_AnsiToWide                       _HB_FUN_DIALOGBOX
	_HB_FUN_DIALOGBOXINDIRECT         _HB_FUN_DIALOGBOXINDIRECTW
	_HB_FUN_DIALOGBOXW              

dll     	size = 0

dlogbox 	size = 708
	_HB_FUN_CREATEDLG                 _HB_FUN_CREATEDLGINDIRECT
	_HB_FUN_CREATEDLGINDIRECTW        _HB_FUN_CREATEDLGW
	_HB_FUN_ENDDIALOG                 _HB_FUN_NDLGBOX
	_HB_FUN_SETOWNERDRAWITEMHEIGHT  

dotnet  	size = 0

dots    	size = 729
	_HB_FUN_DOTSADJUST              

drawgrid	size = 117
	_HB_FUN_DRAWGRID                

drawicon	size = 1202
	_HB_FUN_EXTDRAWICON               _HB_FUN_GETPROMPTRECT
	_MsgAdjust                      

drawing 	size = 1618
	_HB_FUN_ARC                       _HB_FUN_CHORD
	_HB_FUN_DRAWSTATE                 _HB_FUN_ELLIPSE
	_HB_FUN_EXTFLOODFILL              _HB_FUN_FLOODFILL
	_HB_FUN_GETPIXEL                  _HB_FUN_LINETO
	_HB_FUN_PIE                       _HB_FUN_POLYPOLYGON
	_HB_FUN_RECTANGLE                 _HB_FUN_SETPIXEL
	_HB_FUN_SETPOLYFILLMODE           _MoveTo

drawitem	size = 274
	_HB_FUN_DRAWMSGITEM             

drawsele	size = 1118
	_HB_FUN_DRAWSELECTOR            

drawslid	size = 4605
	_HB_FUN_DRAWSLIDER              

drives  	size = 201
	_HB_FUN_GETCURDIR                 _HB_FUN_ISCDROM
	_HB_FUN_ISDISKETTE                _HB_FUN_SETCURDIR
	_HB_FUN_SETCURDRIVE             

dropfile	size = 829
	DropTarget_AddRef                 DropTarget_DragEnter
	DropTarget_DragLeave              DropTarget_DragOver
	DropTarget_Drop                   DropTarget_QueryInterface
	DropTarget_Release                _DropTarget_Vtbl
	_HB_FUN_DRAGACCEPTFILES           _HB_FUN_DRAGFINISH
	_HB_FUN_DRAGQUERYFILES            _HB_FUN_DRAGQUERYPOINT
	_HB_FUN_REGISTERDRAGDROP          _HB_FUN_REVOKEDRAGDROP

encript 	size = 548
	_HB_FUN_DECRYPT                   _HB_FUN_ENCRYPT

ffdlgprc	size = 425
	DialogWndProc                     DlgNoModalProc
	_HB_FUN_ODLGFROMHWND              _SetDlgNoModal

fgetclip	size = 624
	_HB_FUN_GETFCLIPDATA              _HB_FUN_SETFCLIPDATA

fgetline	size = 5353
	_GetTextExtent                    _HB_FUN_CARETFLINE
	_HB_FUN_DRAWFGETLINE              _HB_FUN_FORMATFLINE
	_HB_FUN_HEIGHTFLINE               _HB_FUN_LENFLINE
	_HB_FUN_WIDTHFLINE                _HB_FUN__DRAWFGETLINE

files   	size = 865
	_HB_FUN_FATTRIB                   _HB_FUN_FCOMMIT
	_HB_FUN_GETFTIME                  _HB_FUN_SETFTIME

findtext	size = 354
	_HB_FUN_FINDTEXT                

foldtool	size = 3108
	_HB_FUN_FOLDPAINT               

fonts   	size = 3072
	_HB_FUN_ADDFONTRESOURCE           _HB_FUN_BASETEXT
	_HB_FUN_CHOOSEFONT                _HB_FUN_CREATEFONT
	_HB_FUN_CREATEFONTAS              _HB_FUN_GETFACEFONTMENU
	_HB_FUN_GETFONTHEIGHT             _HB_FUN_GETFONTINFO
	_HB_FUN_GETFONTMENU               _HB_FUN_GETFONTNAMES
	_HB_FUN_GETFONTWIDTH              _HB_FUN_GETHEIGHTFONTMENU
	_HB_FUN_GETHEIGHTMENU             _HB_FUN_GETHFONTFROMINFO
	_HB_FUN_GETWIDTHFONTMENU          _HB_FUN_GETWIDTHMENU
	_HB_FUN_HFONTTOAFONT              _HB_FUN_REMOVEFONTRESOURCE

ftext   	size = 683
	_HB_FUN_CFREADLINE                _HB_FUN_CSTRWORD
	_HB_FUN_LGETTEXTLINE              _HB_FUN_NTXTLINES
	__TReadLn                         _bStrAt

fwarray 	size = 1346
	_fwArrayAdd                       _fwArrayDel
	_fwArrayFree                      _fwArrayGet
	_fwArrayIns                       _fwArrayLen
	_fwArrayLock                      _fwArrayNew
	_fwArraySet                       _fwArraySize
	_fwArrayTraverse                  _fwArrayUnlock

fwbmp   	size = 7176
	_AlphaBlendNew                    _HB_FUN_CROPIMAGE
	_HB_FUN_NBMPCOLORS                _HB_FUN_NBMPHEIGHT
	_HB_FUN_NBMPWIDTH                 _HB_FUN_PALBMPDRAW
	_HB_FUN_PALBMPLOAD                _HB_FUN_PALBMPREAD
	_HB_FUN_PALBMPREALIZE             _HB_FUN_PALBTNPAINT
	_HB_FUN_TRANSBMP                  _MaskRegion
	_TransBmp                         _TransBmpNew
	_drawbmp_alpha                    _drawbmp_trans
	_hPalBitmapDraw                   _hPalBitmapNew

fwcrc8  	size = 326
	_HB_FUN_FW_CRC8                 

fwgif   	size = 34168
	FW_WndProc                        _FWGIFClass
	_FWReadFile                       _HB_FUN_FWGIFEND
	_HB_FUN_FWGIFISRUNNING            _HB_FUN_FWGIFPLAY
	_HB_FUN_FWGIFRESIZE               _HB_FUN_FWGIFRESTART
	_HB_FUN_FWGIFSTOP                 _HB_FUN_FWGIFWINDOW
	_HB_FUN_FWIGNOREBCK               _HB_FUN_FWSETGIFBRUSH
	_HB_FUN_FWSETGIFSIZING            _HB_FUN_GETGIFINFO
	_hin                              _last_passed
	_pass                           

fwmatrix	size = 3858
	_HB_FUN_MATRIX_ARRAY              _HB_FUN_MATRIX_CALC
	_HB_FUN_MATRIX_CREATE             _HB_FUN_MATRIX_DETERMINANT
	_HB_FUN_MATRIX_IDENTITY           _HB_FUN_MATRIX_INVERT
	_HB_FUN_MATRIX_MMULT              _HB_FUN_MATRIX_RANDOM
	_HB_FUN_MATRIX_REFLECT            _HB_FUN_MATRIX_RELEASE
	_HB_FUN_MATRIX_ROW                _HB_FUN_MATRIX_SUMOFROWS
	_HB_FUN_MATRIX_TRANSPOSE          _HB_FUN_MATRIX_VAL
	_array_determinant                _calc
	_matrix_adjunct                   _matrix_check
	_matrix_clone                     _matrix_copyfrom
	_matrix_determinant               _matrix_identity
	_matrix_invert                    _matrix_linear_calc
	_matrix_mmult                     _matrix_new
	_matrix_random                    _matrix_release
	_matrix_scalar_calc               _matrix_sigmoid
	_matrix_sigmoid_derivative        _matrix_sumofrows
	_matrix_transpose               

fwpalctl	size = 742
	_HB_FUN_PALCHGEVENT               _HB_FUN_QRYNEWPALEVENT
	_HB_FUN_SETFOREBMP                _IsForePalette
	_PalBmpRealize                  

fwpng   	size = 2899
	_FillBitmap                       _HB_FUN_CONVERTEMF2PNG
	_HB_FUN_FWOPENPNGFILE             _HB_FUN_FWPNGFROMMEMORY
	_HB_FUN_SAVE2PNGFILE              _IsPng
	_imgbuf_alloc                     _imgbuf_free
	_imgbuf_init                      _pix
	_pixel_at                         _save_png_to_file

fwstr   	size = 484
	_fw_memmove                       _fw_strcat
	_fw_strchr                        _fw_strcpy
	_fw_strncmp                       _fw_strstr
	_fw_wcslen                      

fwunicode	size = 7189
	_FW_AnsiToWide                    _FW_WideToAnsi
	_HB_FUN_ANSITOUTF8                _HB_FUN_APPENDMENUW
	_HB_FUN_CREATEWINDOWEXW           _HB_FUN_DRAWTEXTW
	_HB_FUN_EXTTEXTOUTW               _HB_FUN_FW_CDPTRANSLATE
	_HB_FUN_FW_LEFT                   _HB_FUN_FW_OEMTOUTF8
	_HB_FUN_FW_RIGHT                  _HB_FUN_FW_SETCDP
	_HB_FUN_FW_STRPEEK                _HB_FUN_FW_STRTOUTF8
	_HB_FUN_FW_SUBSTR                 _HB_FUN_FW_UTF8CHR
	_HB_FUN_FW_UTF8LEN                _HB_FUN_FW_UTF8TOOEM
	_HB_FUN_FW_UTF8TOSTR              _HB_FUN_GETACP
	_HB_FUN_GETCLASSINFOW             _HB_FUN_GETOEMCP
	_HB_FUN_GETTEXTWIDTHW             _HB_FUN_HBCDP
	_HB_FUN_INSERTMENUW               _HB_FUN_MENUDRAWITEMW
	_HB_FUN_MSGINFOW                  _HB_FUN_MSGPAINTW
	_HB_FUN_REGISTERCLASSW            _HB_FUN_STRTOWIDE
	_HB_FUN_TEXTOUTW                  _HB_FUN_UTF8TOANSI
	_HB_FUN_WIDETOSTR                 _HB_FUN_WTEXTOUTW
	_UTF16toUTF8                      _UTF8toUTF16
	_fw_parWide                       _fw_retWide
	_hasbom8                          _hbcdp_to_wincdp
	_is2byteansi                      _is_utf8
	_strlentowidestr                  _strpart
	_strtowidestr                     _utf8part
	_widestrlentostr                  _widestrtostr

gdipfwh 	size = 4071

gdiplus 	size = 2770
	_gdiplusStartupInput              _gdiplusToken

getdir  	size = 815
	_HB_FUN_CGETDIR                   _HB_FUN_CGETDIRA
	_HB_FUN_FW_FOLDERCHANGED        

getdlgit	size = 96
	_HB_FUN_GETDLGCTRLID              _HB_FUN_GETDLGITEM
	_HB_FUN_NEXTDLGTAB              

getfile 	size = 2126
	ComDlgHkFile                      _HB_FUN_CGETFILE
	_HB_FUN_CGETFILEA                 _HB_FUN_NGETFILEFILTER

getproca	size = 219
	_HB_FUN_GETPRADD                  _HB_FUN_GETPROCADD
	_HB_FUN_SETPROCADDRESS          

getstkob	size = 82
	_HB_FUN_GETSTOCKOBJECT            _HB_FUN_SETBLACKPEN
	_HB_FUN_SETWHITEPEN             

gettext 	size = 918
	_HB_FUN_GETWINDOWTEXT             _HB_FUN_GETWINTXTLENGHT
	_HB_FUN_MGETLINE                  _HB_FUN_MGETREPLACE
	_HB_FUN_WINLOWER                  _HB_FUN_WINUPPER
	_UTF16toANSI                      _UTF16toSTR8
	_ispureAnsiAsWide               

gettextw	size = 400
	_HB_FUN_GETTEXTHEIGHT             _HB_FUN_GETTEXTWIDTH

getwnd  	size = 179
	_HB_FUN_CHILDWINDOWFROMPOINT      _HB_FUN_GETWINDOW
	_HB_FUN_GETWINDOWTHREADPROCESSID  _HB_FUN_GETWINDOWWORD
	_HB_FUN_GETWNDTASK              

handlist	size = 1172
	__fwAddGlobal                     __fwDelGlobal
	__fwFreeAllGlobals                __fwFreeAllLibrarys
	__fwFreeLibInstance               __fwFreeLibrary
	__fwLoadLibrary                 

harddisk	size = 233
	_HB_FUN_NSERIALA                  _HB_FUN_NSERIALHD
	_HB_FUN_VOLUMENAME              

help    	size = 726
	_HB_FUN_GETHELPFILE               _HB_FUN_GETHELPTOPIC
	_HB_FUN_HELPCTRLHWND              _HB_FUN_HELPSETPOS
	_HB_FUN_HELPSETTOPIC              _HB_FUN_SETHELPFILE
	_HB_FUN__SETHELPFI              

hex2dec 	size = 226
	_HB_FUN_HEXTODEC                  _fw_hextodec

hiloword	size = 196
	_HB_FUN_NHIBYTE                   _HB_FUN_NHIWORD
	_HB_FUN_NLOBYTE                   _HB_FUN_NLOWORD

icons   	size = 4610
	_DrawIconFocus                    _GetIconSize
	_HB_FUN_BMPFROMICON               _HB_FUN_BMPFROMICONEX
	_HB_FUN_DESTROYICON               _HB_FUN_DRAWICON
	_HB_FUN_DRAWICONEX                _HB_FUN_DRAWICONFOCUS
	_HB_FUN_DUPLICATEICON             _HB_FUN_EXTRACTICON
	_HB_FUN_GETICONSIZE               _HB_FUN_HASICONALPHA
	_HB_FUN_HBMPFROMHICON             _HB_FUN_ICON_READ
	_HB_FUN_ICON_READEX               _HB_FUN_ISHICON
	_HB_FUN_LOADICON                  _HB_FUN_LOADIMAGEFILEICON
	_HB_FUN_LOADIMAGERESICON          _HB_FUN_NICONS
	_hasIconAlpha                   

imagelis	size = 639
	_HB_FUN_ILADD                     _HB_FUN_ILADDICON
	_HB_FUN_ILADDMASKED               _HB_FUN_ILCREATE
	_HB_FUN_ILDESTROY                 _HB_FUN_ILLOADIMAGE
	_HB_FUN_ILSETBKCOLOR            

instance	size = 251
	_GetInstance                      _HB_FUN_GETFOCUS
	_HB_FUN_GETINSTANCE               _HB_FUN_POSTQUITMESSAGE
	_HB_FUN_SETFOCUS                  _HB_FUN_SETFOREGROUNDWINDOW
	_HB_FUN_SHOWWINDOW                _HB_FUN__SETFOCUS

joystick	size = 504
	_HB_FUN_JOYGETDEVCAPS             _HB_FUN_JOYGETNUMDEVS
	_HB_FUN_JOYGETPOS                 _HB_FUN_JOYGETTHRESHOLD
	_HB_FUN_JOYRELEASECAPTURE         _HB_FUN_JOYSETCAPTURE
	_HB_FUN_JOYSETTHRESHOLD         

keybrd  	size = 457
	_HB_FUN_FW_SENDKEY                _HB_FUN_GETASYNCKEY
	_HB_FUN_GETKEYSTATE               _HB_FUN_GETKEYTOGGLE
	_HB_FUN_KEYTOGGLE                 _HB_FUN_SENDKEY
	_HB_FUN____KEYBOARD               _PostVirtualKeyEvent

lbx     	size = 282
	_HB_FUN_LBXGETITEM                _HB_FUN_LBXGETSELITEMS
	_HB_FUN_MEASUREITEM             

listview	size = 1396
	_HB_FUN_GETNMLISTVIEWITEM         _HB_FUN_LVDELETEITEM
	_HB_FUN_LVENABLEGROUPVIEW         _HB_FUN_LVFINDITEM
	_HB_FUN_LVGROUPSETSTATE           _HB_FUN_LVINSERTGROUP
	_HB_FUN_LVINSERTGROUPINLIST       _HB_FUN_LVINSERTINLIST
	_HB_FUN_LVINSERTITEM              _HB_FUN_LVINSERTITEMGROUP
	_HB_FUN_LVSETGROUP                _HB_FUN_LVSETITEMSELECT
	_HB_FUN_LVSETITEMTEXT             _HB_FUN_LVSETSTYLE

loadbmp 	size = 169
	_HB_FUN_CREATEMEMBITMAP           _HB_FUN_HSYSBITMAP
	_HB_FUN_LOADBITMAP              

longname	size = 84
	_HB_FUN_LCLOSE                    _HB_FUN_LCREAT
	_HB_FUN_LOPEN                   

lzexpand	size = 112
	_HB_FUN_LZCOPYFILE              

makeintr	size = 19
	_HB_FUN_MAKEINTRESOURCE         

makelong	size = 48
	_HB_FUN_NMAKELONG               

mapi    	size = 3875
	_HB_FUN_MAPIADDRESS               _HB_FUN_MAPIDELETEMAIL
	_HB_FUN_MAPIFINDNEXT              _HB_FUN_MAPILOGOFF
	_HB_FUN_MAPILOGON                 _HB_FUN_MAPIREADMAIL
	_HB_FUN_MAPIRESOLVENAME           _HB_FUN_MAPISENDDOCUMENTS
	_HB_FUN_MAPISENDMAIL            

mci     	size = 728
	_HB_FUN_AUXGETCAPS                _HB_FUN_AUXGETDEV
	_HB_FUN_AUXGETVOL                 _HB_FUN_AUXSETVOL
	_HB_FUN_MCIGETERRORSTRING         _HB_FUN_MCISENDCOMMAND
	_HB_FUN_MCISENDSTR                _HB_FUN_NMCIOPEN
	_HB_FUN_NMCIPLAY                  _HB_FUN_NMCIWINDOW

mdi     	size = 871
	_HB_FUN_CMDISTRUCT                _HB_FUN_CREATEMDIWINDOW
	_HB_FUN_GETFRAMEPROC              _HB_FUN_GETMDICHLPROC
	_HB_FUN_MDICTRLADJUST             _WndFrameProc

mem     	size = 401
	_HB_FUN_GETFREESPACE              _HB_FUN_GLOBALALLOC
	_HB_FUN_GLOBALCOMPACT             _HB_FUN_GLOBALDATA
	_HB_FUN_GLOBALFREE                _HB_FUN_GLOBALLOCK
	_HB_FUN_GLOBALREALLOC             _HB_FUN_GLOBALSIZE
	_HB_FUN_GLOBALUNLOCK              _HB_FUN_LOCALSHRINK
	_HB_FUN_NEXTMEM                   _fwGlobalAlloc
	_fwGlobalFree                   

menudraw	size = 17080
	_Bmp2Gray                         _Check2007
	_Check2010                        _Check2013
	_Check2015                        _CheckFw
	_DelCheck2007                     _DelCheck2010
	_DelCheck2013                     _DelCheck2015
	_DelCheckFw                       _DelPointC
	_FwBarMenu                        _FwBmpItem
	_FwCharItem                       _FwCheckedItem
	_FwNoSelectedItem                 _FwPromptItem
	_FwSelectedItem                   _FwSeparatorItem
	_HB_FUN_ALTFONTMIMENU             _HB_FUN_ANCFONTMIMENU
	_HB_FUN_BMP2GRAY                  _HB_FUN_CCOLORMENU
	_HB_FUN_CCOLORSUBMENU             _HB_FUN_CFONTMIMENU
	_HB_FUN_CHGMENUMEA                _HB_FUN_CHGMNUISR
	_HB_FUN_COLORGETBACK              _HB_FUN_DELCHECK2007
	_HB_FUN_DELCHECK2010              _HB_FUN_DELCHECK2013
	_HB_FUN_DELCHECK2015              _HB_FUN_DELCHECKFW
	_HB_FUN_DELPOINTC                 _HB_FUN_GETDRAWISR
	_HB_FUN_GETITEMTEXT               _HB_FUN_GETPARENTITEM
	_HB_FUN_HBITMAPITEM               _HB_FUN_HBMPBACK
	_HB_FUN_HB_FWBCODE                _HB_FUN_HCHECK
	_HB_FUN_HPOINT                    _HB_FUN_HSETBMPBACK
	_HB_FUN_MENUDRAWFW                _HB_FUN_MGETALLITEMS
	_HB_FUN_MINFOMIMENU               _HB_FUN_MITEMS
	_HB_FUN_MITEMS2007                _HB_FUN_MITEMSFW
	_HB_FUN_MSYSBITMAP                _HB_FUN_NOCLOSEDLG
	_HB_FUN_SET2007SKINMENU           _HB_FUN_SET2010SKINMENU
	_HB_FUN_SET2013SKINMENU           _HB_FUN_SET2015SKINMENU
	_HB_FUN_SETBITMAPITEM             _HB_FUN_SETFWSKINMENU
	_HB_FUN_SETITEMSTEXT              _HB_FUN_SETOWNERMENU
	_HPointC                          _SelectSkinMnu
	_SysBitMap                        _getParentMenuItem
	_hsetbmpback                      _set2007SkinMenu
	_set2010SkinMenu                  _set2013SkinMenu
	_set2015SkinMenu                  _setFwSkinMenu

menus   	size = 2006
	_DrawCheck                        _DrawRadioCheck
	_DrawRadioUncheck                 _DrawUncheck
	_HB_FUN_APPENDMENU                _HB_FUN_CHECKMENUITEM
	_HB_FUN_CREATEMENU                _HB_FUN_CREATEPOPUPMENU
	_HB_FUN_DESTROYMENU               _HB_FUN_DRAWMENUBAR
	_HB_FUN_ENABLEMENUITEM            _HB_FUN_FSETMENUDEFAULTITEM
	_HB_FUN_FSETMENUITEMBITMAPS       _HB_FUN_FWMODIFYMENU
	_HB_FUN_GETMENU                   _HB_FUN_GETMENUSTATE
	_HB_FUN_GETMENUSTRING             _HB_FUN_GETMITEMCOUNT
	_HB_FUN_GETMITEMID                _HB_FUN_GETSUBMENU
	_HB_FUN_GETSYSTEMMENU             _HB_FUN_HILITEMENUITEM
	_HB_FUN_INSERTMENU                _HB_FUN_ISMENU
	_HB_FUN_LOADMENU                  _HB_FUN_MODIFYMENU
	_HB_FUN_RADIOMENUITEM             _HB_FUN_REMOVEMENU
	_HB_FUN_SETITEMBITMAPS            _HB_FUN_SETMENU
	_HB_FUN_SETMENUDEFAULTITEM        _HB_FUN_TRACKPOPUP
	_HB_FUN_TRACKPOPUPMENUEX          _HB_FUN__GETMENUID

metafi32	size = 886
	_HB_FUN_CLOSEENHMETAFILE          _HB_FUN_CREATEENHMETAFILE
	_HB_FUN_DELETEENHMETAFILE         _HB_FUN_GETENHMETAFILE
	_HB_FUN_PLAYENHMETAFILE           _HB_FUN_XPLAYENHMETAFILE

metafile	size = 795
	_HB_FUN_CLOSEMETAFILE             _HB_FUN_CREATEMETAFILE
	_HB_FUN_DELETEMETAFILE            _HB_FUN_GETMETABIT
	_HB_FUN_GETMETAFILE               _HB_FUN_GETPMETAFILE
	_HB_FUN_PLAYMETAFILE              _HB_FUN_PMETA
	_SetMetaFileBits                

metpaint	size = 730
	_HB_FUN_METERPAINT              

mgetcrea	size = 387
	_HB_FUN_MGETCREATE              

mime64  	size = 1008
	_HB_FUN_CMIMEDEC                  _HB_FUN_CMIMEENC
	_at                             

mkdir   	size = 602
	_HB_FUN_FILEW                     _HB_FUN_GETWINDOWSDIRECTORY
	_HB_FUN_LCHDIR                    _HB_FUN_LCHDIRW
	_HB_FUN_LISDIRW                   _HB_FUN_LLFNMKDIR
	_HB_FUN_LLFNRMDIR                 _HB_FUN_LMKDIR
	_HB_FUN_LMKDIRW                   _HB_FUN_LMKFULLPATH
	_HB_FUN_LMKFULLPATHW              _HB_FUN_LRMDIR
	_HB_FUN_LRMDIRW                 

moveto  	size = 182
	_HB_FUN_MOVEGET                   _HB_FUN_MOVETO
	_HB_FUN_MOVETOEX                

msgbeep 	size = 23
	_HB_FUN_MESSAGEBEEP               _HB_FUN_MSGBEEP

msgs    	size = 2119
	MsgBoxHookProc                    _HB_FUN_CENTERMSGS
	_HB_FUN_FWMESSAGEBOX              _HB_FUN_MSGABOUT
	_HB_FUN_MSGALERT                  _HB_FUN_MSGINFO
	_HB_FUN_MSGNOYES                  _HB_FUN_MSGRETRYCANCEL
	_HB_FUN_MSGSTOP                   _HB_FUN_MSGYESNO
	_HB_FUN_MSGYESNOCANCEL            _HB_FUN_NMSGBOX
	_HB_FUN_SETASMSGBOX               _HB_FUN_SETMSGLANGID
	_HB_FUN_SHELLABOUT                _HB_FUN_UNHOOKWINDOWSHOOKEX
	_LToStr                           _MsgStr
	_ValToChar                      

msgsapi 	size = 1025
	_HB_FUN_FW_ISUTF8                 _HB_FUN_POSTMESSAGE
	_HB_FUN_SENDMESSAGE               _HB_FUN_SENDWIDESTRINGMESSAGE
	_SendMessageU                     _fw_parAnsi
	_isutf8                         

msgtools	size = 1094
	_HB_FUN_MSGPAINT                  _HB_FUN_MSGPAINT3L

net     	size = 740
	_HB_FUN_WNETADDCON                _HB_FUN_WNETADDCONNECTION2
	_HB_FUN_WNETADDCONNECTION2W       _HB_FUN_WNETBROWSEDIALOG
	_HB_FUN_WNETCONNECT               _HB_FUN_WNETDELCONNECTION
	_HB_FUN_WNETDISCONNECTDIALOG      _HB_FUN_WNETERROR
	_HB_FUN_WNETGETCONNECTION         _HB_FUN_WNETGETERR
	_HB_FUN_WNETGETUSER             

netcrdid	size = 809
	_GetMACaddress                    _GetMACaddressEx
	_HB_FUN_GETNETCARDID              _HB_FUN_GETNETCARDINFO

nonclient	size = 2567
	_HB_FUN_COMBOSELTEXT              _HB_FUN_DLGDIRLISTCOMBOBOX
	_HB_FUN_GETALIGNPOPUP             _HB_FUN_GETNONCLIENT
	_HB_FUN_GETRECTCOMBOBTT           _HB_FUN_GETRECTCOMBOEDIT
	_HB_FUN_HWNDCOMBO                 _HB_FUN_HWNDCOMBOEDIT
	_HB_FUN_HWNDCOMBOLIST             _HB_FUN_ISTACTIL
	_HB_FUN_NGETLISTBOXINFO           _HB_FUN_NONCLIENT
	_HB_FUN_SETADDTOOL                _HB_FUN_SETALIGNPOPUP
	_HB_FUN_SETNONCLIENT              _HB_FUN_SETRECTCOMBOBTT
	_HB_FUN_SETRECTCOMBOEDIT          _HB_FUN_SETWHSCROLL

notify  	size = 89
	_HB_FUN_GETNMHDRCODE              _HB_FUN_GETNMHDRHWNDFROM
	_HB_FUN_GETNMHDRIDFROM            _HB_FUN_NMTREEVIEWACTION
	_HB_FUN_NMTREEVIEWITEMNEW       

ntxtools	size = 175
	_HB_FUN_CNTXKEY                   _HB_FUN_DELDBFMDX

numcword	size = 3690
	_HB_FUN_FW_NUMTOWORDC             _HB_FUN_N2W_SETSTRINGS
	_HB_FUN_N2W_SETUNITS              _bAnd
	_bIndian                        

ocx     	size = 164
	_HB_FUN_COINITIALIZE              _HB_FUN_REGISTERSERVER
	_HB_FUN_UNREGISTERSERVER        

odbc32x 	size = 2798
	_HB_FUN_SQLALLOCCONNECT           _HB_FUN_SQLALLOCENV
	_HB_FUN_SQLALLOCSTMT              _HB_FUN_SQLCANCEL
	_HB_FUN_SQLCOLUMNS                _HB_FUN_SQLCONNECT
	_HB_FUN_SQLDESC32                 _HB_FUN_SQLDISCONNECT
	_HB_FUN_SQLDRVC32                 _HB_FUN_SQLERROR
	_HB_FUN_SQLEXECDIRECT             _HB_FUN_SQLEXECUTE
	_HB_FUN_SQLEXTENDEDFETCH          _HB_FUN_SQLFETCH
	_HB_FUN_SQLFREECONNECT            _HB_FUN_SQLFREEENV
	_HB_FUN_SQLFREESTMT               _HB_FUN_SQLGETCONNECTOPTION
	_HB_FUN_SQLGETCURSORNAME          _HB_FUN_SQLGETD32
	_HB_FUN_SQLGETDIAGREC             _HB_FUN_SQLGETIN32
	_HB_FUN_SQLGETSTMTOPTION          _HB_FUN_SQLGETTEXTDATA
	_HB_FUN_SQLNUMRESULTCOLS          _HB_FUN_SQLPARAMDATA
	_HB_FUN_SQLPREP32                 _HB_FUN_SQLPRIMARYKEYS
	_HB_FUN_SQLPUTDATA                _HB_FUN_SQLROLLBACK
	_HB_FUN_SQLROWCOUNT               _HB_FUN_SQLSCOL
	_HB_FUN_SQLSETCONNECTOPTION       _HB_FUN_SQLSETCURSORNAME
	_HB_FUN_SQLSETPARAM               _HB_FUN_SQLSETPOS
	_HB_FUN_SQLSETSTMT                _HB_FUN_SQLSTATISTICS
	_HB_FUN_SQLTABLES                 _HB_FUN_SQLTRANSACT
	_aRowStatus                     

oemansi 	size = 455
	_HB_FUN_ANSITOOEM                 _HB_FUN_ISANSI
	_HB_FUN_ISOEM                     _HB_FUN_OEMTOANSI
	_HB_FUN_makeLANGID              

onoffbmp	size = 2245
	_HB_FUN_FWBMPOFF                  _HB_FUN_FWBMPON

or      	size = 472
	_HB_FUN_I2HEX                     _HB_FUN_L2HEX
	_HB_FUN_LAND                      _HB_FUN_LXOR
	_HB_FUN_NAND                      _HB_FUN_NNOT
	_HB_FUN_NOR                       _HB_FUN_NPTRWORD
	_HB_FUN_NXOR                      _HB_FUN_PTRTONUM
	_HB_FUN_UTOS                    

paint   	size = 79
	_HB_FUN_BEGINPAINT                _HB_FUN_ENDPAINT

peekmsg 	size = 87
	_HB_FUN_PEEKMESSAGE               _HB_FUN_WAITMESSAGE

peekpoke	size = 42
	_HB_FUN_PEEKBYTE                  _HB_FUN_PEEKWORD
	_HB_FUN_POKEBYTE                  _HB_FUN_POKEWORD

point   	size = 210
	_HB_FUN_DPTOLP                    _HB_FUN_LPTODP

printdc 	size = 4684
	_HB_FUN_ABORTDOC                  _HB_FUN_COMDLGXERR
	_HB_FUN_DRAFTMODE                 _HB_FUN_ENDDOC
	_HB_FUN_ENDPAGE                   _HB_FUN_ENUMFONTFAMILIES
	_HB_FUN_ESCAPE                    _HB_FUN_GETPRINTDC
	_HB_FUN_GETPRINTDEFAULT           _HB_FUN_IMPORTRAWFILE
	_HB_FUN_ISCOLORPRINTER            _HB_FUN_ISDUPLEXPRINTER
	_HB_FUN_PAGEGETMARGINS            _HB_FUN_PAGESETUP
	_HB_FUN_PRINTERDCFROMNAME         _HB_FUN_PRINTEREND
	_HB_FUN_PRINTERESC                _HB_FUN_PRINTERINIT
	_HB_FUN_PRINTERSETUP              _HB_FUN_PRNBINSOURCE
	_HB_FUN_PRNDUPLEX                 _HB_FUN_PRNGETCOLLATE
	_HB_FUN_PRNGETCOPIES              _HB_FUN_PRNGETDRIVE
	_HB_FUN_PRNGETNAME                _HB_FUN_PRNGETORIENTATION
	_HB_FUN_PRNGETPAGES               _HB_FUN_PRNGETPAGNUMS
	_HB_FUN_PRNGETPORT                _HB_FUN_PRNGETSELECTION
	_HB_FUN_PRNGETSIZE                _HB_FUN_PRNLANDSCAPE
	_HB_FUN_PRNOFFSET                 _HB_FUN_PRNPORTRAIT
	_HB_FUN_PRNSETCOLLATE             _HB_FUN_PRNSETCOPIES
	_HB_FUN_PRNSETPAGE                _HB_FUN_PRNSETSIZE
	_HB_FUN_PRNSTATUS                 _HB_FUN_RESETDC
	_HB_FUN_SPOOLFILE                 _HB_FUN_STARTDOC
	_HB_FUN_STARTPAGE                 _HB_FUN_devMODE

prnsayrt	size = 0

profile 	size = 522
	_HB_FUN_DELINIENTRY               _HB_FUN_DELINISECTION
	_HB_FUN_GETPROFINT                _HB_FUN_GETPROFSTRING
	_HB_FUN_GETPVPROFINT              _HB_FUN_GETPVPROFSTRING
	_HB_FUN_WRITEPPROSTRING           _HB_FUN_WRITEPROFSTRING

prop    	size = 182
	_HB_FUN_GETPROP                   _HB_FUN_REMOVEPROP
	_HB_FUN_SETPROP                 

prpsheet	size = 416
	_HB_FUN_PROPSHEET               

rasapi  	size = 1141
	_HB_FUN_RACONST                   _HB_FUN_RADIAL
	_HB_FUN_RAENUMCONNECTIONS         _HB_FUN_RAENUMENTRIES
	_HB_FUN_RAGETCONST                _HB_FUN_RAGETERROR
	_HB_FUN_RAHANGUP                

rebars  	size = 213
	_HB_FUN_RBINSERTBAND              _HB_FUN_SETREBARINFO

rebarsw 	size = 357
	_HB_FUN_RBINSERTBANDAW            _HB_FUN_SETREBARINFOAW

rects   	size = 1911
	_FrameDot                         _HB_FUN_DRAWFOCUSELLIPSE
	_HB_FUN_DRAWFOCUSRECT             _HB_FUN_FILLRECT
	_HB_FUN_FRAMEDOT                  _HB_FUN_GETCLIENTRECT
	_HB_FUN_GETCOORS                  _HB_FUN_GETLABELDIM
	_HB_FUN_GETWNDRECT                _HB_FUN_INVALIDATERECT
	_HB_FUN_INVERTRECT                _HB_FUN_MAPDIALOGRECT
	_HB_FUN_NCCSRIGHT                 _HB_FUN_ROUNDRECT

regclass	size = 264
	_HB_FUN_GETMODULEHANDLE           _HB_FUN_REGISTERCLASS
	_HB_FUN_SETCLASSWORD            

regedit 	size = 876
	_HB_FUN_REGCLOSEKEY               _HB_FUN_REGCREATEKEY
	_HB_FUN_REGDELETEKEY              _HB_FUN_REGENUMKEY
	_HB_FUN_REGENUMVALUE              _HB_FUN_REGOPENKEY
	_HB_FUN_REGOPENKEYEX              _HB_FUN_REGQUERYVALUE
	_HB_FUN_REGQUERYVALUEEX           _HB_FUN_REGSETVALUE
	_HB_FUN_REGSETVALUEEX           

regions 	size = 1046
	_HB_FUN_COMBINERGN                _HB_FUN_CREATEELLIPTICRGN
	_HB_FUN_CREATEELLIPTICRGNINDIRECT  _HB_FUN_CREATEPOLYGONRGN
	_HB_FUN_CREATERECTRGN             _HB_FUN_CREATEROUNDRECTRGN
	_HB_FUN_FRAMERGN                  _HB_FUN_INVALIDATERGN
	_HB_FUN_SETWINDOWRGN            

resource	size = 757
	_GetResources                     _HB_FUN_CRESTOSTR
	_HB_FUN_ENUMRESOURCENAMES         _HB_FUN_FINDICON
	_HB_FUN_FINDRESOURCE              _HB_FUN_FREERESOURCES
	_HB_FUN_GETRESOURCES              _HB_FUN_LOADHTML
	_HB_FUN_LOADRESOURCE              _HB_FUN_LOCKRESOURCE
	_HB_FUN_RCDATATOFILE              _HB_FUN_RESOURCEFREE
	_HB_FUN_SETRESOURCES            

ribbon  	size = 6849
	_BitmapFromMem                    _Blur
	_BrightImg                        _CreateBase
	_CreateShadow                     _DoHBlur
	_DoHorizontalBlur                 _DoVBlur
	_DoVerticalBlur                   _HB_FUN_BEGINPATH
	_HB_FUN_BLUR                      _HB_FUN_BRIGHTIMG
	_HB_FUN_CREATEBASE                _HB_FUN_CREATESHADOW
	_HB_FUN_ENDPATH                   _HB_FUN_FILLPATH
	_HB_FUN_FILLRGN                   _HB_FUN_GETTEXTEXTENTPOINT32
	_HB_FUN_HDCBITMAP                 _HB_FUN_LITTLEARROW
	_HB_FUN_MAKEBKBMP                 _HB_FUN_MAKEBKBMPEX
	_HB_FUN_MAKEBKBRUSH               _HB_FUN_MINIBTN
	_HB_FUN_OFFSETRGN                 _HB_FUN_PARENTCAPTURE
	_HB_FUN_PATHTOREGION              _HB_FUN_RESIZEIMG
	_HB_FUN_STROKEANDFILLPATH         _HB_FUN_STROKEPATH
	_HB_FUN_TI_DRAWREFLEX             _MakeBkBmp
	_MakeBkBmpEx                      _MakeBkBmpExHDC
	_ParentCapture                    _PrepareInfoHeader
	_ResizeImg                        _TI_DrawReflex

richedi5	size = 14450
	_FillRichEditFromFile             _HB_FUN_GETPARFORM5
	_HB_FUN_REDLLVERSION5             _HB_FUN_REFINDTEXT5
	_HB_FUN_REGETBACKCOLOR5           _HB_FUN_REGETBULLET5
	_HB_FUN_REGETCHARFORMAT5          _HB_FUN_REGETDATETIME5
	_HB_FUN_REGETHIGHLIGHT5           _HB_FUN_REGETINDENT5
	_HB_FUN_REGETNMHDRLINK5           _HB_FUN_REGETNUMBERING5
	_HB_FUN_REGETOLEINTERFACE5        _HB_FUN_REGETPARAFORMAT5
	_HB_FUN_REGETPARAGRAPH5           _HB_FUN_REGETPARAGRAPHALL5
	_HB_FUN_REGETSELECTION5           _HB_FUN_REGETTEXTCOLOR5
	_HB_FUN_REGETZOOM5                _HB_FUN_REINSERTPICTURE5
	_HB_FUN_REINSERTRTF5              _HB_FUN_REINSERTRTFFROMFILE5
	_HB_FUN_RELASTLINEVISIBLE         _HB_FUN_RELEN5
	_HB_FUN_RELOADASRTF5              _HB_FUN_REPAGEBREAK5
	_HB_FUN_REPASTESPECIAL5           _HB_FUN_REPREVIEW5
	_HB_FUN_REPRINT5                  _HB_FUN_REPRINTBOX5
	_HB_FUN_RESAVEASRTF5              _HB_FUN_RESETATTRIBUTE5
	_HB_FUN_RESETAUTOURLDETECT5       _HB_FUN_RESETBACKCOLOR5
	_HB_FUN_RESETBULLET5              _HB_FUN_RESETCHARFORMAT5
	_HB_FUN_RESETFONTNAME5            _HB_FUN_RESETFONTSIZE5
	_HB_FUN_RESETHIGHLIGHT5           _HB_FUN_RESETINDENT5
	_HB_FUN_RESETNUMBERING5           _HB_FUN_RESETOLECALLBACK5
	_HB_FUN_RESETOLEINIT5             _HB_FUN_RESETOLEUNINIT5
	_HB_FUN_RESETPARADELIMITER5       _HB_FUN_RESETPARAFORMAT5
	_HB_FUN_RESETPARAGRAPH5           _HB_FUN_RESETPARAGRAPHALL5
	_HB_FUN_RESETPOS5                 _HB_FUN_RESETSELECTION5
	_HB_FUN_RESETTEXTCOLOR5           _HB_FUN_RESETZOOM5
	_HB_FUN_RTGETPARAFORMAT5          _HB_FUN_RTINSERTOBJECT5
	_HB_FUN_RTINSERTTABLE5            _HB_FUN_RTSETPARAFORMAT5
	_HB_FUN_SETPARFORM5               _InsertObject

richedit	size = 8997
	_HB_FUN_REDLLVERSION              _HB_FUN_REFINDTEXT
	_HB_FUN_REGETBULLET               _HB_FUN_REGETCHARFORMAT
	_HB_FUN_REGETDATETIME             _HB_FUN_REGETHIGHLIGHT
	_HB_FUN_REGETINDENT               _HB_FUN_REGETNMHDRLINK
	_HB_FUN_REGETNUMBERING            _HB_FUN_REGETOLEINTERFACE
	_HB_FUN_REGETPARAFORMAT           _HB_FUN_REGETPARAGRAPH
	_HB_FUN_REGETSELECTION            _HB_FUN_REGETZOOM
	_HB_FUN_REINSERTPICTURE           _HB_FUN_RELEN
	_HB_FUN_RELOADASRTF               _HB_FUN_REPAGEBREAK
	_HB_FUN_REPASTESPECIAL            _HB_FUN_REPREVIEW
	_HB_FUN_REPRINT                   _HB_FUN_REPRINTBOX
	_HB_FUN_RESAVEASRTF               _HB_FUN_RESETATTRIBUTE
	_HB_FUN_RESETAUTOURLDETECT        _HB_FUN_RESETBULLET
	_HB_FUN_RESETCHARFORMAT           _HB_FUN_RESETFONTNAME
	_HB_FUN_RESETFONTSIZE             _HB_FUN_RESETHIGHLIGHT
	_HB_FUN_RESETINDENT               _HB_FUN_RESETNUMBERING
	_HB_FUN_RESETOLECALLBACK          _HB_FUN_RESETOLEINIT
	_HB_FUN_RESETOLEUNINIT            _HB_FUN_RESETPARAFORMAT
	_HB_FUN_RESETPARAGRAPH            _HB_FUN_RESETPOS
	_HB_FUN_RESETSELECTION            _HB_FUN_RESETTEXTCOLOR
	_HB_FUN_RESETZOOM               

saveicon	size = 1001
	_HB_FUN_FW_SAVEHICONTOICO         _SaveIcon3

scintilc	size = 3602
	_HB_FUN_ASIGNKEYS                 _HB_FUN_FINDAUTOCOMPLETE
	_HB_FUN_GETANNOTALINESADDHDR      _HB_FUN_GETCHARHDR
	_HB_FUN_GETIDHDR                  _HB_FUN_GETLENHDR
	_HB_FUN_GETLEVNOWHDR              _HB_FUN_GETLEVPREVHDR
	_HB_FUN_GETLINADDHDR              _HB_FUN_GETLINEHDR
	_HB_FUN_GETLISTCOMPLETIONHDR      _HB_FUN_GETLISTHDR
	_HB_FUN_GETLPARAM                 _HB_FUN_GETMARGHDR
	_HB_FUN_GETMESSAGEHDR             _HB_FUN_GETMODIFIER
	_HB_FUN_GETMODTYPE                _HB_FUN_GETPOSHDR
	_HB_FUN_GETPOSIHDR                _HB_FUN_GETTEXTHDR
	_HB_FUN_GETTOKENHDR               _HB_FUN_GETUPDATEDHDR
	_HB_FUN_GETWNDHDR                 _HB_FUN_GETWPARAM
	_HB_FUN_GETXHDR                   _HB_FUN_GETXPARAM
	_HB_FUN_GETYHDR                   _HB_FUN_GETYPARAM
	_HB_FUN_MYFUNC_DBLUE              _HB_FUN_MYFUNC_F
	_HB_FUN_MYFUNC_F16                _HB_FUN_MYFUNC_FBLUE
	_HB_FUN_MYFUNC_MBLUE              _HB_FUN_MYFUNC_MBLUE16
	_HB_FUN_MYFUNC_VBLUE              _HB_FUN_PONFOLD
	_HB_FUN_PONFOLDCOMPACT            _HB_FUN_SCIGETLINE
	_HB_FUN_SCIGETSELTEXT             _HB_FUN_SCIGETTEXT
	_HB_FUN_SCIGETTEXTAT              _HB_FUN_SCI_OPENFILE
	_HB_FUN_SCNOTIFICATIONCH          _HB_FUN_SCNOTIFICATIONCODE
	_HB_FUN_SC_ADDTEXT                _HB_FUN_SC_ISREADONLY
	_HB_FUN_SEARCHBACKWARD            _HB_FUN_SEARCHFORWARD
	_SearchBackward                   _SearchForward

scroll  	size = 503
	_HB_FUN_ENABLESCROLLBAR           _HB_FUN_GETSCROLLPOS
	_HB_FUN_GETSCROLLRANGE            _HB_FUN_SETSCROLLINFO
	_HB_FUN_SETSCROLLPOS              _HB_FUN_SETSCROLLRANGE
	_HB_FUN_SETSCROLLRANGEX         

selobjec	size = 31
	_HB_FUN_SELECTOBJECT            

sethandl	size = 22
	_HB_FUN_SETHANDLECOUNT          

setmapmo	size = 75
	_HB_FUN_GETMAPMODE                _HB_FUN_GETSYSMETRICS
	_HB_FUN_SETMAPMODE              

settext 	size = 88
	_HB_FUN_SETWINDOWTEXT           

sound   	size = 269
	_HB_FUN_MSGSOUND                  _HB_FUN_SNDPLAYRESOURCE
	_HB_FUN_SNDPLAYSOUND            

str2hex 	size = 806
	_HB_FUN_FW_URLENCODE              _HB_FUN_HEX2STR
	_HB_FUN_STR2HEX                 

string  	size = 67
	_HB_FUN_LOADSTRING              

strtoken	size = 672
	_HB_FUN_STRBYTE                   _HB_FUN_STRCAPFIRST
	_HB_FUN_STRCHAR                   _HB_FUN_STRCHARCOUNT
	_HB_FUN_STRCPY                    _HB_FUN_STRPTR
	_HB_FUN_STRTOKEN                  _StrToken

tabctrl 	size = 939
	_HB_FUN_TABCTRLADD                _HB_FUN_TABCTRL_ADJUSTRECT
	_HB_FUN_TABCTRL_GETCURSEL         _HB_FUN_TABCTRL_HITTEST
	_HB_FUN_TABCTRL_SETCURSEL         _HB_FUN_TABDELALLITEMS
	_HB_FUN_TABGETROWCOUNT            _HB_FUN_TABSETITEM

tabctrlw	size = 1242
	_HB_FUN_TABCTRLADDW               _HB_FUN_TABCTRL_ADJUSTRECTW
	_HB_FUN_TABCTRL_GETCURSELW        _HB_FUN_TABCTRL_HITTESTW
	_HB_FUN_TABCTRL_SETCURSELW        _HB_FUN_TABDELALLITEMSW
	_HB_FUN_TABGETROWCOUNTW           _HB_FUN_TABSETITEMW

tcbfuncs	size = 1615
	_HB_FUN_ATCBRWPOSRECT             _HB_FUN_NTCWROW
	_HB_FUN_TCBRWSCROLL               _HB_FUN_TCDRAWCELL

text    	size = 2892
	_DrawTextAW                       _DrawTextAW2
	_DrawTextAWC                      _ExtTextOutAW
	_HB_FUN_DRAWTEXT                  _HB_FUN_DRAWTEXTEX
	_HB_FUN_EXTTEXTOUT                _HB_FUN_GETTEXTALIGN
	_HB_FUN_SETTEXTALIGN              _HB_FUN_SETTEXTJUSTIFICATION
	_HB_FUN_TEXTOUT                   _TextOutAW
	_UTF8toUTF16W                     _fw_parRect

theaders	size = 692
	_HB_FUN_GETNMHEABUTTON            _HB_FUN_GETNMHEAITEM
	_HB_FUN_HEADERGET                 _HB_FUN_HEADERINS
	_HB_FUN_HEADERLAYOUT              _HB_FUN_HEADERSET

themes  	size = 4543
	_DrawGripper                      _DrawPBack
	_DrawRBGripper                    _HB_FUN_APPHASMANIFEST
	_HB_FUN_CHECKFOCUS                _HB_FUN_DRAWGRIPPER
	_HB_FUN_DRAWHEADER                _HB_FUN_DRAWPBACK
	_HB_FUN_DRAWTABBODY               _HB_FUN_DRAWTHEMED
	_HB_FUN_EDBORDER                  _HB_FUN_FIXTHEMECONTROLS
	_HB_FUN_ISAPPTHEMED               _HB_FUN_ISCLASSIC
	_HB_FUN_ISTHEMEACTIVE             _HB_FUN_MAPWINDOWPOINT
	_HB_FUN_SETWINDOWTHEME            _HB_FUN_TBERASE
	__HasManifest                     __IsAppThemed

timepick	size = 221
	_HB_FUN_GETTIMEPICK               _HB_FUN_SETTIMEPICK

timers  	size = 93
	_HB_FUN_GETTICKCOUNT              _HB_FUN_KILLTIMER
	_HB_FUN_SETTIMER                

toolbarsw	size = 1219
	_HB_FUN_CREATETLBARAW             _HB_FUN_INITCOMMONCONTROLSEXW
	_HB_FUN_INITCOMMONCONTROLSW       _HB_FUN_TBADDBUTTONAW
	_HB_FUN_TBADDMENUAW               _HB_FUN_TBADDSEPARATORAW
	_HB_FUN_TBENABLEBUTTONAW          _HB_FUN_TBGETRECTAW
	_HB_FUN_TBSETTEXTAW               _HB_FUN_TTNSETTEXTA
	_HB_FUN_TTNSETTEXTW             

toolhelp	size = 39
	_HB_FUN_INTERRUPTREGISTER         _HB_FUN_INTERRUPTUNREGISTER
	_HB_FUN_TERMINATEAPP              _HB_FUN_TIMERCOUNT

tooltipa	size = 608
	_HB_FUN_CREATETOOLTIPANEW       

tooltipw	size = 904
	_HB_FUN_CREATETOOLTIPWNEW       

touch   	size = 897
	_HB_FUN_AUTOROTATIONPREF          _HB_FUN_GESTUREINFO
	_HB_FUN_GETAUTOROTATIONSTATE      _HB_FUN_ISEVENTBYTOUCH
	_HB_FUN_USEALLGESTURES          

treeview	size = 1576
	_HB_FUN_TVDELALLITEMS             _HB_FUN_TVDELETEITEM
	_HB_FUN_TVEDITLABEL               _HB_FUN_TVGETCHECK
	_HB_FUN_TVGETEDITCONTROL          _HB_FUN_TVGETPARENT
	_HB_FUN_TVGETSELECTED             _HB_FUN_TVGETSELTEXT
	_HB_FUN_TVGETTEXT                 _HB_FUN_TVHITTEST
	_HB_FUN_TVINSERTITEM              _HB_FUN_TVIPARAM
	_HB_FUN_TVSELECT                  _HB_FUN_TVSETCHECK
	_HB_FUN_TVSETCOLOR                _HB_FUN_TVSETIMAGELIST
	_HB_FUN_TVSETITEMBOLD             _HB_FUN_TVSETITEMHEIGHT
	_HB_FUN_TVSETITEMIMAGE            _HB_FUN_TVSETITEMTEXT
	_HB_FUN_TVSETTEXTIMAGE          

urldownloadtofile	size = 8
	_downloading                    

wbrwline	size = 408
	_HB_FUN_ABRWPOSRECT             

webcam  	size = 1018
	_HB_FUN_CAPFILESETCAPTUREFILE     _HB_FUN_WEBCAM_CAPTUREWINDOW
	_HB_FUN_WEBCAM_DLGVIDEOFORMAT     _HB_FUN_WEBCAM_DLGVIDEOSOURCE
	_HB_FUN_WEBCAM_DRIVERCONNECT      _HB_FUN_WEBCAM_DRIVERDISCONNECT
	_HB_FUN_WEBCAM_FILESAVEDIB        _HB_FUN_WEBCAM_GETDRIVERDESCRIPTION
	_HB_FUN_WEBCAM_PREVIEW            _HB_FUN_WEBCAM_PREVIEWRATE
	_HB_FUN_WEBCAM_PREVIEWSCALE       _HB_FUN___WEBCAM_CALLBACK
	fpCallbackProc                    fpCallbackProc2

webview 	size = 1295
	_HB_FUN_WEBVIEW_BIND              _HB_FUN_WEBVIEW_CREATE
	_HB_FUN_WEBVIEW_DESTROY           _HB_FUN_WEBVIEW_DISPATCH
	_HB_FUN_WEBVIEW_EVAL              _HB_FUN_WEBVIEW_GETWINDOW
	_HB_FUN_WEBVIEW_INIT              _HB_FUN_WEBVIEW_NAVIGATE
	_HB_FUN_WEBVIEW_OPENDEVTOOLSWINDOW  _HB_FUN_WEBVIEW_RETURN
	_HB_FUN_WEBVIEW_RUN               _HB_FUN_WEBVIEW_SETHTML
	_HB_FUN_WEBVIEW_SETSIZE           _HB_FUN_WEBVIEW_SETTITLE
	_HB_FUN_WEBVIEW_SETUSERAGENT      _HB_FUN_WEBVIEW_TERMINATE
	_HB_FUN_WEBVIEW_UNBIND            _HB_FUN_WV_SENDTOFWH

webview2	size = 237
	_HB_FUN_WEBVIEW2_END              _HB_FUN_WEBVIEW2_EVAL
	_HB_FUN_WEBVIEW2_NAVIGATE         _HB_FUN_WEBVIEW2_NEW
	_HB_FUN_WEBVIEW2_OPENDEVTOOLSWINDOW  _HB_FUN_WEBVIEW2_SETHTML
	_HB_FUN_WEBVIEW2_SETSIZE          _HB_FUN_WEBVIEW2_SETUSERAGENT
	_HB_FUN_WEBVIEW2_SHOWDOWNLOADS  

win2000 	size = 49
	_HB_FUN_SETLAYEREDWINDOWATTRIBUTES

windows 	size = 431
	_HB_FUN_DEFWINDOWPROC             _HB_FUN_ENUMCHILDWINDOWS
	_HB_FUN_ENUMWINDOWS               _HB_FUN_GETCLASSLONG
	_HB_FUN_GETPARENT                 _HB_FUN_LOCKWINDOWUPDATE
	_HB_FUN_SETCLASSLONG              _HB_FUN_SETPARENT

winexec 	size = 1308
	_HB_FUN_EXITWINDOW                _HB_FUN_EXITWND
	_HB_FUN_GETMODULEFILENAME         _HB_FUN_GETNUMTASKS
	_HB_FUN_GETSYSDIR                 _HB_FUN_GETWINDIR
	_HB_FUN_ISEXERUNNING              _HB_FUN_SHELLEXECUTE
	_HB_FUN_SHFILEOPERATION           _HB_FUN_SHFILEOPERATIONW
	_HB_FUN_SLEEP                     _HB_FUN_WAITRUN
	_HB_FUN_WINEXEC                 

winrtc  	size = 964
	_HB_FUN_WINRTEVENTHANDLER         _HB_FUN_WINRTEVENTTOKEN
	_HB_FUN_WINRTFIND                 _HB_FUN_WINRTMETHOD

winsock 	size = 1506
	_HB_FUN_ACCEPT                    _HB_FUN_BINDTOPORT
	_HB_FUN_CLOSESOCKET               _HB_FUN_CONNECTTO
	_HB_FUN_GETHOSTBYADDRESS          _HB_FUN_GETHOSTBYNAME
	_HB_FUN_GETHOSTNAME               _HB_FUN_GETIP
	_HB_FUN_GETPEERNAME               _HB_FUN_GETPORT
	_HB_FUN_GETSERVBYNAME             _HB_FUN_HTONS
	_HB_FUN_INET_ADDR                 _HB_FUN_LISTEN
	_HB_FUN_RECV                      _HB_FUN_SENDBINARY
	_HB_FUN_SETSOCKOPT                _HB_FUN_SOCKET
	_HB_FUN_SOCKETSELECT              _HB_FUN_SOCKETSEND
	_HB_FUN_WSAASYNCSELECT            _HB_FUN_WSACLEANUP
	_HB_FUN_WSAGETLASTERROR           _HB_FUN_WSASTARTUP

wmouse  	size = 178
	_HB_FUN_GETCAPTURE                _HB_FUN_RELEASECAPTURE
	_HB_FUN_SETCAPTURE                _HB_FUN_TRACKMOUSEEVENT

wndboxes	size = 1924
	_HB_FUN_BARPAINT                  _HB_FUN_ROUNDBOX
	_HB_FUN_WNDBOX                    _HB_FUN_WNDBOX2007
	_HB_FUN_WNDBOXCLR                 _HB_FUN_WNDBOXIN
	_HB_FUN_WNDBOXRAISED              _HB_FUN_WNDINSET
	_HB_FUN_WNDRAISED                 _RoundBox
	_WindowBox                        _WindowBoxBlack
	_WindowBoxIn                      _WindowBoxInBlack
	_WindowInset                      _WindowRaised
	_WndBox2007                       _WndDrawBox

wndcente	size = 631
	_HB_FUN_GETVIEWPORTORGEX          _HB_FUN_GETWINDOWORGEX
	_HB_FUN_SETACTIVEWINDOW           _HB_FUN_SETWINDOWORG
	_HB_FUN_WNDCENTER               

wnddestr	size = 46
	_HB_FUN_DESTROYWINDOW           

wndis   	size = 1447
	_HB_FUN_BORLANDC                  _HB_FUN_CALLWINDOWPROC
	_HB_FUN_CLOSEWINDOW               _HB_FUN_ENABLEWINDOW
	_HB_FUN_FINDWINDOW                _HB_FUN_GETACTIVEWINDOW
	_HB_FUN_GETCLASSINFO              _HB_FUN_GETFOREGROUNDWINDOW
	_HB_FUN_GETTOPWINDOW              _HB_FUN_GETVERSION
	_HB_FUN_GETWINDOWLONG             _HB_FUN_GETWINFLAGS
	_HB_FUN_GETWINVER                 _HB_FUN_ISCHILD
	_HB_FUN_ISDEFBUTTON               _HB_FUN_ISEXE64
	_HB_FUN_ISICONIC                  _HB_FUN_ISWIN95
	_HB_FUN_ISWINDOW                  _HB_FUN_ISWINDOWENABLED
	_HB_FUN_ISWINDOWUNICODE           _HB_FUN_ISWINDOWVISIBLE
	_HB_FUN_ISWINNT                   _HB_FUN_ISWOW64
	_HB_FUN_ISZOOMED                  _HB_FUN_MSVC
	_HB_FUN_SETWINDOWLONG             _HB_FUN_SETWINDOWWORD
	_HB_FUN_WINDOWFROMPOINT           _IsWin95
	_fnIsWow64Process               

wndisove	size = 121
	_HB_FUN_ISOVERWND                 _HB_FUN_WNDHASSCROLLS

wndlines	size = 604
	_HB_FUN_WNDHLINERA                _HB_FUN_WNDHRAISED
	_HB_FUN_WNDVLINERA                _HB_FUN_WNDVRAISED
	_WindowHRaised                    _WindowVRaised
	_WndDrawHLine                     _WndDrawVLine

wndmove 	size = 3131
	_HB_FUN_BRINGWINDOWTOTOP          _HB_FUN_MOVEWINDOW
	_HB_FUN_SETMINMAX                 _HB_FUN_WNDADJBOTTOM
	_HB_FUN_WNDADJCLIENT              _HB_FUN_WNDADJLEFT
	_HB_FUN_WNDADJRIGHT               _HB_FUN_WNDADJTOP
	_HB_FUN_WNDBOTTOM                 _HB_FUN_WNDCOPY
	_HB_FUN_WNDHEIGHT                 _HB_FUN_WNDLEFT
	_HB_FUN_WNDSETSIZE                _HB_FUN_WNDTOP
	_HB_FUN_WNDWIDTH                

wndpos  	size = 196
	_HB_FUN_GETWINDOWPLACEMENT        _HB_FUN_SETWINDOWPLACEMENT
	_HB_FUN_SETWINDOWPOS            

wndprint	size = 466
	_HB_FUN_PRINTWINDOW               _HB_FUN_WNDBITMAP
	_HB_FUN_WNDPRINT                

wndproc 	size = 436
	_HB_FUN_REMOVEWINDOWPROC          _HB_FUN_SETWINDOWPROC

wndrows 	size = 364
	_GetWindowRow                     _GetWindowRows
	_HB_FUN_NWROW                     _HB_FUN_NWROWS

wndsay  	size = 972
	_HB_FUN_NWNDCHRHEIGHT             _HB_FUN_WSAY
	_HB_FUN_WSAYRECT                

wndscrol	size = 639
	_HB_FUN_SCROLLWINDOW              _HB_FUN_WBRWSCROLL
	_HB_FUN_WSCROLL                 

wndupdat	size = 52
	_HB_FUN_GETCLASSNAME              _HB_FUN_UPDATEWINDOW

xbrowsec	size = 1465
	_BmpDrawNoStretch                 _HB_FUN_BMPDRAWNOSTRETCH
	_HB_FUN_FWBMPASC                  _HB_FUN_FWBMPDES
	_HB_FUN_FWDARROW                  _HB_FUN_FWRARROW
	_HB_FUN_XBRWSCROLLROW           

xhb     	size = 0

xxproc  	size = 166
	_HB_FUN_XXCHANGEPROC            
]]>

Code: Select all | Expand

Publics by module

BMPREAD 	size = 347
	_HB_FUN_FILEREAD                  _HB_FUN_READBITMAP

CTLHDLEH	size = 6976
	_HB_FUN_WNDHANDLEEVENT            _regex

FFWNDRUN	size = 400
	_GetWndApp                        _HB_FUN_SETIDLEACT
	_HB_FUN_WINRUN                    _HB_FUN___GENGPF
	_SetWndApp                        __SetAcceleratorTable
	_wLastKey                       

HARBOURC	size = 622
	_FW_GetUnicode                    _FrameProc
	_HB_FUN_ALLOCCONSOLE              _HB_FUN_DEBUGGER
	_HB_FUN_FW_SETUNICODE             _HB_FUN_GETSTDHANDLE
	_HB_FUN_SETCONSOLETITLE           _HB_FUN__LASTKEY
	_LogFile                          ___FWH

LEGACYCP	size = 0

SYSREFRE	size = 530
	_DdeRefresh                       _HB_FUN_DDEREFRESH
	_HB_FUN_SYSREFRESH                _SysRefresh

TOOLBARS	size = 970
	_HB_FUN_CREATETLBAR               _HB_FUN_INITCOMMONCONTROLS
	_HB_FUN_INITCOMMONCONTROLSEX      _HB_FUN_TBADDBUTTON
	_HB_FUN_TBADDMENU                 _HB_FUN_TBADDSEPARATOR
	_HB_FUN_TBENABLEBUTTON            _HB_FUN_TBGETRECT
	_HB_FUN_TBSETTEXT                 _HB_FUN_TTNSETTEXT

TOOLTIP 	size = 322
	_HB_FUN_CREATETOOLTIP           

WNDRUN  	size = 6572
	_GetWndProcInstance               _HB_FUN_CANREGDIALOG
	_HB_FUN_DEREGDIALOG               _HB_FUN_GETWNDAPP
	_HB_FUN_LWRUNNING                 _HB_FUN_REGDIALOG
	_HB_FUN_SETWNDAPP                 _IsModelessDialog
	_SetRunning                       _bWRunning

XPROC   	size = 152
	_HB_FUN_XCHANGEPROC             

__WNDPRO	size = 149
	_HB_FUN_WININSPECT                __DbgWndProc
	__WndProc                         _bDbgActive
	_bDbgBreak                      

aat     	size = 201
	_HB_FUN_AAT                     

accelera	size = 422
	_HB_FUN_LOADACCELERATORS          _HB_FUN_SETACCTABLE
	_HB_FUN_TRANSLATEACCELERATOR    

actx    	size = 557

anigif  	size = 101

animate 	size = 160
	_HB_FUN_ANIMOPEN                  _HB_FUN_ANIMOPENEX
	_HB_FUN_ANIMPLAY                

ansiup  	size = 227
	_HB_FUN_ANSILOWER                 _HB_FUN_ANSIUPPER
	_HB_FUN_CHARUPPER                 _HB_FUN_ISANSILOWER
	_HB_FUN_ISANSIUPPER             

arg     	size = 115
	_HB_FUN_ARG                       _HB_FUN_CARGV
	_HB_FUN_NARGC                   

atom    	size = 101
	_HB_FUN_GLOBALADDATOM             _HB_FUN_GLOBALDELATOM
	_HB_FUN_GLOBALGETATOMNAME       

b2bin   	size = 176
	_HB_FUN_B2BIN                     _HB_FUN_BIN2D
	_HB_FUN_C2HEX                     _HB_FUN_D2BIN

backgrnd	size = 436
	_HB_FUN_DitBackGrd              

bartools	size = 807
	_BtnDisable                       _HB_FUN_BARADJUST
	_HB_FUN_BTNDISABLE                _RectDisable

bitmaps 	size = 34183
	_HB_FUN_FWBITMAP                  _fwstrlwr

bmpdraw 	size = 4064
	_DrawBitmap                       _DrawGray
	_DrawGrayed                       _DrawMasked
	_DuplicateBitmap                  _FWWaterMark
	_HB_FUN_BMPALPHA                  _HB_FUN_BTNPAINT
	_HB_FUN_COPYIMAGE                 _HB_FUN_CREATECOMPATIBLEBITMAP
	_HB_FUN_DRAWBITMAP                _HB_FUN_DRAWGRAY
	_HB_FUN_DRAWMASKED                _HB_FUN_DUPLICATEBITMAP
	_HB_FUN_FWHBMPTOALPHA             _HB_FUN_FWWATERMARK
	_HB_FUN_RESIZEBMP                 _HB_FUN_SHADOWH
	_HB_FUN_SHADOWV                   _HB_FUN_STRETCHBLT

bmps    	size = 14363
	_HB_FUN_BMPEBCOLLAPSED            _HB_FUN_BMPEBEXPANDED
	_HB_FUN_BMPOLARROW                _HB_FUN_BMPOLDOTS
	_HB_FUN_CLOSELISTBAR              _HB_FUN_CLOSEOVERLISTBAR
	_HB_FUN_MSGBAR2007                _HB_FUN_OPENLISTBAR
	_HB_FUN_OPENOVERLISTBAR           _HB_FUN_QUICKAREAL
	_HB_FUN_QUICKAREAM                _HB_FUN_QUICKAREAR

bmptabs 	size = 10585
	_HB_FUN_BMP_BACK                  _HB_FUN_BMP_BACKV
	_HB_FUN_BMP_TABSEL                _HB_FUN_BMP_TABSELL
	_HB_FUN_BMP_TABSELLV              _HB_FUN_BMP_TABSELR
	_HB_FUN_BMP_TABSELRV              _HB_FUN_BMP_TABSELV
	_HB_FUN_BMP_TABUNSEL              _HB_FUN_BMP_TABUNSELV
	_HB_FUN_BMP_TABUNSL               _HB_FUN_BMP_TABUNSLV
	_HB_FUN_BMP_TABUNSR               _HB_FUN_BMP_TABUNSRV

brushes 	size = 22037
	_CircleGradient                   _CreateMemBitmap
	_CreateMemBitmap2                 _CreateMemBitmap3
	_DiagonalGradient                 _Gradient
	_HB_FUN_ABPAINT                   _HB_FUN_ATREEBMPS
	_HB_FUN_BMP_ARROWBCK              _HB_FUN_CIRCLEGRADIENT
	_HB_FUN_CREATEHATCHBRUSH          _HB_FUN_DIAGONALGRADIENT
	_HB_FUN_EMF2WMF                   _HB_FUN_FIXSAYS
	_HB_FUN_FWBRUSHES                 _HB_FUN_FWLOGOBITMAP
	_HB_FUN_GETDRAWITEM               _HB_FUN_GETDRAWMENU
	_HB_FUN_GETMEAITEM                _HB_FUN_GRADIENT
	_HB_FUN_ISBREAK                   _HB_FUN_ISDIBITMAP
	_HB_FUN_ISMENUITEM                _HB_FUN_ISMISEPARATOR
	_HB_FUN_ISSEPARATOR               _HB_FUN_MISTEXT
	_HB_FUN_MSGBAR2010                _HB_FUN_MSGBAR2015
	_HB_FUN_PARENTIMAGE               _HB_FUN_WMF2EMF
	_HB_ISDIBitmap                  

c5cnew  	size = 28735
	BrowseCallbackProc                _BitmapFromCode
	_C5GradientFill                   _C5_CloseThemeData
	_C5_DrawThemeBackground           _C5_IsAppThemed
	_C5_IsThemeActive                 _C5_OpenThemeData
	_DrawAlphaTransparentBitmap       _DrawBitmapEx
	_DrawBitmapTransparent            _DrawGradientFill
	_DrawMaskedColor                  _FillSolidRect
	_FrameDotEx2                      _GetFontMenu
	_GradientFill0                    _HB_FUN_ARROWDOWN
	_HB_FUN_ARROWUP                   _HB_FUN_BMPARROWDOWNBLACK
	_HB_FUN_BMPARROWDOWNNET           _HB_FUN_BMPARROWDOWNWHITE
	_HB_FUN_BMPARROWUPBLACK           _HB_FUN_BMPARROWUPWHITE
	_HB_FUN_BMPBLACKARROWS            _HB_FUN_BMPBTNDBAR
	_HB_FUN_BMPCARPETA                _HB_FUN_BMPCDROM
	_HB_FUN_BMPHDDISK                 _HB_FUN_BMPHEIGHT
	_HB_FUN_BMPHTML                   _HB_FUN_BMPNETDRIVE
	_HB_FUN_BMPTOGRAY                 _HB_FUN_BMPWHITEARROWS
	_HB_FUN_BMPWIDTH                  _HB_FUN_BOX
	_HB_FUN_BOXEX                     _HB_FUN_C5CURSORCATCH
	_HB_FUN_C5CURSORHAND              _HB_FUN_C5CURSORSEP
	_HB_FUN_C5DEGRADA                 _HB_FUN_C5DRAWTEXT
	_HB_FUN_C5LINE                    _HB_FUN_C5ROUNDBOX
	_HB_FUN_C5ROUNDRECT               _HB_FUN_C5_CLOSETHEMEDATA
	_HB_FUN_C5_DRAWTHEMEBACKGROUND    _HB_FUN_C5_DRAWTHEMEICON
	_HB_FUN_C5_DRAWTHEMETEXT          _HB_FUN_C5_EXTFLOODFILL
	_HB_FUN_C5_GETCURRENTTHEMENAME    _HB_FUN_C5_GETTHEMECOLOR
	_HB_FUN_C5_GETTHEMEFONT           _HB_FUN_C5_ISAPPTHEMED
	_HB_FUN_C5_ISTHEMEACTIVE          _HB_FUN_C5_OPENTHEMEDATA
	_HB_FUN_CGETFILEEX                _HB_FUN_CGETFOLDER
	_HB_FUN_COMPATBMP                 _HB_FUN_COMPATDC
	_HB_FUN_CREAFBOLD                 _HB_FUN_CREAFCAPT
	_HB_FUN_CREAFUNDER                _HB_FUN_CREATEBRUSHDOTTED
	_HB_FUN_CREATECAPTIONFONT         _HB_FUN_CREATEFONTBOLD
	_HB_FUN_CREATEFONTUNDERLINE       _HB_FUN_CREATEHGRIP
	_HB_FUN_DEGRADASO                 _HB_FUN_DRAWALPHATRANSPARENTBITMAP
	_HB_FUN_DRAWBITMAPEX              _HB_FUN_DRAWEDGE
	_HB_FUN_DRAWFRAMECONTROL          _HB_FUN_DRAWGRADIENTFILL
	_HB_FUN_DRAWIMAGEBLEND            _HB_FUN_DRAWMASKEDCOLOR
	_HB_FUN_DRAWSTATESTRING           _HB_FUN_EQUALRECT
	_HB_FUN_EXCLUDECLIPRECT           _HB_FUN_FILLSOLIDRECT
	_HB_FUN_FILLSOLIRC                _HB_FUN_FRAMEDOTEX
	_HB_FUN_FWDELETEFILE              _HB_FUN_GETBMPICONEXT
	_HB_FUN_GETCURRENTOBJECT          _HB_FUN_GETDRAWITEMSTRUCT
	_HB_FUN_GETSCROLLINFOPOS          _HB_FUN_GETSIZETEXT
	_HB_FUN_GETTEXTLEN                _HB_FUN_HGRADIENTFILL
	_HB_FUN_HORIZONTALGRADIENT        _HB_FUN_ICONTOBMP
	_HB_FUN_ICONTOGRAY                _HB_FUN_IMAGELIST_ADD
	_HB_FUN_IMAGELIST_ADDMASKED       _HB_FUN_IMAGELIST_CREATE
	_HB_FUN_IMAGELIST_DESTROY         _HB_FUN_IMAGELIST_DRAW
	_HB_FUN_IMAGELIST_GETICONSIZE     _HB_FUN_IMAGELIST_LOADIMAGE
	_HB_FUN_INTRECT                   _HB_FUN_LINEEX
	_HB_FUN_MENUDRAWITEM2             _HB_FUN_MENUMEASUREITEM2
	_HB_FUN_POW                       _HB_FUN_PTINRECT
	_HB_FUN_REGISTERWINDOWMESSAGE     _HB_FUN_ROUNDRECTEX
	_HB_FUN_SETBRUSHORG               _HB_FUN_SETEDITCLIENTRIGHT
	_HB_FUN_SETMENUITEMBITMAPS        _HB_FUN_SETSTRETCHBLTMODE
	_HB_FUN_SHADERECT                 _HB_FUN_STARTTRACKMOUSELEAVE
	_HB_FUN_TRANSPARENTBLT            _HB_FUN_TRANSPARENTBLT2
	_HB_FUN_VALIDATERECT              _HB_FUN_VERTICALGRADIENT
	_HB_FUN_VGRADIENTFILL             _HorizontalGradient
	_ShadeRect                        _StartTrackMouseLeave
	_VerticalGradient               

caldll32	size = 552
	_GetCallProc32                    _HB_FUN_GETHWND32
	_HB_FUN_GETPROC32                 _HB_FUN_GETVDMP16
	_HB_FUN_GETVDMP32                 _HB_FUN_LADDTOC

calendar	size = 1574
	_HB_FUN_GETDAYSTATE               _HB_FUN_ISOVERDAY
	_HB_FUN_MONTHCAL_GETCOLOR         _HB_FUN_MONTHCAL_GETCURRENTVIEW
	_HB_FUN_MONTHCAL_GETCURSEL        _HB_FUN_MONTHCAL_GETFIRSTDAYOFWEEK
	_HB_FUN_MONTHCAL_GETMAXSELCOUNT   _HB_FUN_MONTHCAL_GETMINREQRECT
	_HB_FUN_MONTHCAL_GETMONTHRANGE    _HB_FUN_MONTHCAL_GETRANGE
	_HB_FUN_MONTHCAL_GETSELRANGE      _HB_FUN_MONTHCAL_GETTODAY
	_HB_FUN_MONTHCAL_GETVIEWCHANGEVALUES  _HB_FUN_MONTHCAL_SETCOLOR
	_HB_FUN_MONTHCAL_SETCURRENTVIEW   _HB_FUN_MONTHCAL_SETCURSEL
	_HB_FUN_MONTHCAL_SETFIRSTDAYOFWEEK  _HB_FUN_MONTHCAL_SETMAXSELCOUNT
	_HB_FUN_MONTHCAL_SETRANGE         _HB_FUN_MONTHCAL_SETSELRANGE
	_HB_FUN_MONTHCAL_SETTODAY         _HB_FUN_MONTHCAL_SIZERECTTOMIN
	_HB_FUN_SETDAYSTATE             

calexc  	size = 1908
	_HB_FUN_HNEXTITEM                 _HB_FUN_HNEXTITEMO
	_HB_FUN_HPREVITEM                 _HB_FUN_HPREVITEMO
	_HB_FUN_POLYLINE                  _HB_FUN_RGBFILTER

calldll 	size = 816
	_HB_FUN_FWCALLDLL               

calldllc	size = 0

caret   	size = 154
	_HB_FUN_CREATECARET               _HB_FUN_DESTROYCARET
	_HB_FUN_GETCARETPOS               _HB_FUN_HIDECARET
	_HB_FUN_SETCARETPOS               _HB_FUN_SHOWCARET

changepr	size = 92
	_HB_FUN_CHANGEPROC                _HB_FUN_LINKDLG
	_HB_FUN_RESTPROC                

chr2data	size = 65
	_HB_FUN_CCHR2DATA               

clpbrd  	size = 1050
	_HB_FUN_CLOSECLIPBOARD            _HB_FUN_EMPTYCLIPBOARD
	_HB_FUN_GETCLPDATA                _HB_FUN_GETPRIORITYCLIPBOARDFORMAT
	_HB_FUN_OPENCLIPBOARD             _HB_FUN_SETCLIPBOARDDATA

clrchoos	size = 305
	ComDlgHkColor                     _HB_FUN_CHOOSECOLOR

clt2scr 	size = 256
	_HB_FUN_CLIENTTOSCREEN            _HB_FUN_SCREENTOCLIENT

codegtf 	size = 641
	_HB_FUN_CODETEXT                  _HB_FUN_DECODETEXT

color   	size = 2659
	_HB_FUN_ARGB2RGB                  _HB_FUN_BGR2RGB
	_HB_FUN_CLR2ARRAY                 _HB_FUN_GETBKCOLOR
	_HB_FUN_GETSYSCOLOR               _HB_FUN_GETTEXTCOLOR
	_HB_FUN_HSLTORGB                  _HB_FUN_NARGB
	_HB_FUN_NRGB                      _HB_FUN_RGBTOHSL
	_HB_FUN_SETBKCOLOR                _HB_FUN_SETBKMODE
	_HB_FUN_SETSYSCOLORS              _HB_FUN_SETTEXTCOLOR
	_hashrgbtocolorref                _hsl_to_rgb
	_rgb_to_hsl                     

colorton	size = 1009
	_HB_FUN_LIGHTCOLOR                _HB_FUN_NCOLORTON
	_HB_FUN_NGETBACKRGB               _HB_FUN_NGETFORERGB
	_HB_FUN_NRGB2ARRAY                _HB_FUN_NRGBBLUE
	_HB_FUN_NRGBGREEN                 _HB_FUN_NRGBRED
	_bColorToN                        _lColorToRGB

comm    	size = 1417
	_CloseComm                        _EnableCommNotification
	_FlushComm                        _GetCommError
	_GetCommEventMask                 _HB_FUN_BUILDCOMMDCB
	_HB_FUN_CLOSECOMM                 _HB_FUN_ENABLECOMMNOTIFICATION
	_HB_FUN_ESCAPECOMMFUNCTION        _HB_FUN_FLUSHCOMM
	_HB_FUN_GETCOMMERROR              _HB_FUN_OPENCOMM
	_HB_FUN_READCOMM                  _HB_FUN_SETCOMMSTATE
	_HB_FUN_WRITECOMM                 _OpenComm
	_ReadComm                         _SetCommEventMask
	_WriteComm                      

crc     	size = 1642
	_HB_FUN_NCRCERROR                 _HB_FUN_NFILECRC
	_HB_FUN_NSTRCRC                 

createpa	size = 48
	_HB_FUN_CREATEPATTERNBRUSH      

createpe	size = 40
	_HB_FUN_CREATEPEN               

createso	size = 149
	_HB_FUN_CREATESOLIDBRUSH          _HB_FUN_SETBRUSHORGEX

creatwnd	size = 207
	_HB_FUN_CREATEWINDOW              _HB_FUN_GETERRMSG

ctl3d   	size = 858
	Ctl3dAutoSubClass                 Ctl3dEnabled
	Ctl3dRegister                     Ctl3dSubClassDlgEx
	Ctl3dSubclassCtl                  Ctl3dUnregister
	Ctl3dUnsubclassCtl                _HB_FUN_CTL3DAUTOS
	_HB_FUN_CTL3DDLGEX                _HB_FUN_CTL3DLOOK
	_HB_FUN_CTL3DREGIS                _HB_FUN_CTL3DUNREG
	_HB_FUN_SET3DLOOK               

ctrl2chr	size = 643
	_HB_FUN_CCTRL2CHR                 _HB_FUN_CTRLFONTFACENAME
	_HB_FUN_CTRLFONTSIZE              _HB_FUN_CTRLGETBACKCOLOR
	_HB_FUN_CTRLGETTEXTCOLOR          _HB_FUN_GETDIALOGBASEUNITS

ctrldraw	size = 2059
	_HB_FUN_BARINVERT                 _HB_FUN_CTRLDRAW
	_HB_FUN_CTRLDRAWFOCUS             _HB_FUN_LBXDRAWITEM
	_HB_FUN_LBXMEASURE                _HB_FUN_RECTDOTTED

cursors 	size = 4370
	_CursorArrow                      _CursorWait
	_HB_FUN_CREATEBMPCURSOR           _HB_FUN_CURSOR
	_HB_FUN_CURSORARROW               _HB_FUN_CURSORCATCH
	_HB_FUN_CURSORDRAG                _HB_FUN_CURSORHAND
	_HB_FUN_CURSORIBEAM               _HB_FUN_CURSORNO
	_HB_FUN_CURSORNS                  _HB_FUN_CURSOROPENHAND
	_HB_FUN_CURSORSEARCH              _HB_FUN_CURSORSIZE
	_HB_FUN_CURSORSTOP                _HB_FUN_CURSORWAIT
	_HB_FUN_CURSORWE                  _HB_FUN_DESTROYCURSOR
	_HB_FUN_GETCURSORDRAG             _HB_FUN_GETCURSORHAND
	_HB_FUN_GETCURSORPOS              _HB_FUN_GETCURSORSEARCH
	_HB_FUN_GETCURSORSTOP             _HB_FUN_GETGUIRESOURCES
	_HB_FUN_LOADCURSOR                _HB_FUN_SETCURSORPOS
	_HB_FUN_SHOWCURSOR                _HB_FUN_WSETCURSOR

cvrflow 	size = 3844
	_BackImg                          _BmpPer
	_BmpPerspec                       _DrawReflex
	_HB_FUN_BMPPER                    _HB_FUN_BMPPERSPEC
	_HB_FUN_DRAWREFLEX              

cwebview	size = 1368

datepick	size = 385
	_HB_FUN_GETDATEPICK               _HB_FUN_INITCOMMON
	_HB_FUN_SETDATEPICK             

datetime	size = 201
	_HB_FUN_FILETIMETODATE            _HB_FUN_FILETIMETOTIME
	_HB_FUN_SYSTIME                 

dbl2flt 	size = 186
	_HB_FUN_NDBL2FLT                  _dbl2flt

dc      	size = 1788
	_HB_FUN_BITBLT                    _HB_FUN_CREATECDC
	_HB_FUN_CREATECOMPATIBLEDC        _HB_FUN_CREATEDC
	_HB_FUN_DBUFFERSTART              _HB_FUN_DELETEDC
	_HB_FUN_FWDISPBEGIN               _HB_FUN_FWDISPEND
	_HB_FUN_FWRESTSCREEN              _HB_FUN_FWSAVESCREEN
	_HB_FUN_GETDC                     _HB_FUN_GETWINDOWDC
	_HB_FUN_RELEASEDC                 _HB_FUN_RESTOREDC
	_HB_FUN_SAVEDC                    _HB_FUN_SETDIBITSTODEVICE
	_HB_FUN_SETVIEWORG                _HB_FUN_SETVIEWPORTEXT
	_HB_FUN_SETWINDOWEXT            

ddeml   	size = 1121
	_ClientCallback                   _HB_FUN_CLIENTCALLBACK
	_HB_FUN_DDEACCESSDATA             _HB_FUN_DDECLIENTTRANSACTION
	_HB_FUN_DDECMPSTRINGHANDLES       _HB_FUN_DDECONNECT
	_HB_FUN_DDECREATEDATAHANDLE       _HB_FUN_DDECREATESTRINGHANDLE
	_HB_FUN_DDEDISCONNECT             _HB_FUN_DDEFREEDATAHANDLE
	_HB_FUN_DDEFREESTRINGHANDLE       _HB_FUN_DDEGETDATA
	_HB_FUN_DDEGETLASTERROR           _HB_FUN_DDEINITIALIZE
	_HB_FUN_DDENAMESERVICE            _HB_FUN_DDEQUERYSTRING
	_HB_FUN_DDEUNINITIALIZE           _HB_FUN_SERVERCALLBACK
	_ServerCallback                 

ddexc   	size = 112
	_HB_FUN_DDECOMMAND                _HB_FUN_DDEGETCOMMAND

delobjec	size = 103
	_HB_FUN_DELETEOBJECT              _HB_FUN_ISGDIOBJECT
	_IsGDIObject                    

desktop 	size = 154
	_HB_FUN_GETDESKTOPAREA            _HB_FUN_GETDESKTOPWINDOW
	_HB_FUN_SETDESKWALLPAPER        

device  	size = 639
	_HB_FUN_DEVICECAPABILITIES        _HB_FUN_GETDEVICECAPS
	_HB_FUN_GETDRIVETYPE              _HB_FUN_GETLOGICALDRIVES
	_HB_FUN_GETLOGICALDRIVESTRINGS    _HB_FUN_SETROP2

dib     	size = 1348
	_CreateDIBPalette                 _DibBits
	_DibDraw                          _DibRead
	_DibToStr                         _DibWrite
	_HB_FUN_CREATEDIBITMAP            _HB_FUN_DIBDRAW
	_HB_FUN_DIBHEIGHT                 _HB_FUN_DIBPALETTE
	_HB_FUN_DIBREAD                   _HB_FUN_DIBTOSTR
	_HB_FUN_DIBWIDTH                  _HB_FUN_DIBWRITE
	wDIBColors                      

dibbmp  	size = 1257
	_DibFromBitmap                    _DibNumColors
	_HB_FUN_ALPHAFILL                 _HB_FUN_BMPTOSTR
	_HB_FUN_DIBFROMBITMAP             _HB_FUN_HASALPHA
	_isalphabmp                       _setalphabits

disk    	size = 104
	_HB_FUN_GETDISKFREESPACEEX      

dlg2chr 	size = 461
	_HB_FUN_CDLG2CHR                  _HB_FUN_GETDLGBASEUNITS

dlgbox  	size = 851
	_AnsiToWide                       _HB_FUN_DIALOGBOX
	_HB_FUN_DIALOGBOXINDIRECT         _HB_FUN_DIALOGBOXINDIRECTW
	_HB_FUN_DIALOGBOXW              

dll     	size = 0

dlogbox 	size = 708
	_HB_FUN_CREATEDLG                 _HB_FUN_CREATEDLGINDIRECT
	_HB_FUN_CREATEDLGINDIRECTW        _HB_FUN_CREATEDLGW
	_HB_FUN_ENDDIALOG                 _HB_FUN_NDLGBOX
	_HB_FUN_SETOWNERDRAWITEMHEIGHT  

dotnet  	size = 0

dots    	size = 729
	_HB_FUN_DOTSADJUST              

drawgrid	size = 117
	_HB_FUN_DRAWGRID                

drawicon	size = 1202
	_HB_FUN_EXTDRAWICON               _HB_FUN_GETPROMPTRECT
	_MsgAdjust                      

drawing 	size = 1618
	_HB_FUN_ARC                       _HB_FUN_CHORD
	_HB_FUN_DRAWSTATE                 _HB_FUN_ELLIPSE
	_HB_FUN_EXTFLOODFILL              _HB_FUN_FLOODFILL
	_HB_FUN_GETPIXEL                  _HB_FUN_LINETO
	_HB_FUN_PIE                       _HB_FUN_POLYPOLYGON
	_HB_FUN_RECTANGLE                 _HB_FUN_SETPIXEL
	_HB_FUN_SETPOLYFILLMODE           _MoveTo

drawitem	size = 274
	_HB_FUN_DRAWMSGITEM             

drawsele	size = 1118
	_HB_FUN_DRAWSELECTOR            

drawslid	size = 4605
	_HB_FUN_DRAWSLIDER              

drives  	size = 201
	_HB_FUN_GETCURDIR                 _HB_FUN_ISCDROM
	_HB_FUN_ISDISKETTE                _HB_FUN_SETCURDIR
	_HB_FUN_SETCURDRIVE             

dropfile	size = 829
	DropTarget_AddRef                 DropTarget_DragEnter
	DropTarget_DragLeave              DropTarget_DragOver
	DropTarget_Drop                   DropTarget_QueryInterface
	DropTarget_Release                _DropTarget_Vtbl
	_HB_FUN_DRAGACCEPTFILES           _HB_FUN_DRAGFINISH
	_HB_FUN_DRAGQUERYFILES            _HB_FUN_DRAGQUERYPOINT
	_HB_FUN_REGISTERDRAGDROP          _HB_FUN_REVOKEDRAGDROP

encript 	size = 548
	_HB_FUN_DECRYPT                   _HB_FUN_ENCRYPT

ffdlgprc	size = 425
	DialogWndProc                     DlgNoModalProc
	_HB_FUN_ODLGFROMHWND              _SetDlgNoModal

fgetclip	size = 624
	_HB_FUN_GETFCLIPDATA              _HB_FUN_SETFCLIPDATA

fgetline	size = 5353
	_GetTextExtent                    _HB_FUN_CARETFLINE
	_HB_FUN_DRAWFGETLINE              _HB_FUN_FORMATFLINE
	_HB_FUN_HEIGHTFLINE               _HB_FUN_LENFLINE
	_HB_FUN_WIDTHFLINE                _HB_FUN__DRAWFGETLINE

files   	size = 865
	_HB_FUN_FATTRIB                   _HB_FUN_FCOMMIT
	_HB_FUN_GETFTIME                  _HB_FUN_SETFTIME

findtext	size = 354
	_HB_FUN_FINDTEXT                

foldtool	size = 3108
	_HB_FUN_FOLDPAINT               

fonts   	size = 3072
	_HB_FUN_ADDFONTRESOURCE           _HB_FUN_BASETEXT
	_HB_FUN_CHOOSEFONT                _HB_FUN_CREATEFONT
	_HB_FUN_CREATEFONTAS              _HB_FUN_GETFACEFONTMENU
	_HB_FUN_GETFONTHEIGHT             _HB_FUN_GETFONTINFO
	_HB_FUN_GETFONTMENU               _HB_FUN_GETFONTNAMES
	_HB_FUN_GETFONTWIDTH              _HB_FUN_GETHEIGHTFONTMENU
	_HB_FUN_GETHEIGHTMENU             _HB_FUN_GETHFONTFROMINFO
	_HB_FUN_GETWIDTHFONTMENU          _HB_FUN_GETWIDTHMENU
	_HB_FUN_HFONTTOAFONT              _HB_FUN_REMOVEFONTRESOURCE

ftext   	size = 683
	_HB_FUN_CFREADLINE                _HB_FUN_CSTRWORD
	_HB_FUN_LGETTEXTLINE              _HB_FUN_NTXTLINES
	__TReadLn                         _bStrAt

fwarray 	size = 1346
	_fwArrayAdd                       _fwArrayDel
	_fwArrayFree                      _fwArrayGet
	_fwArrayIns                       _fwArrayLen
	_fwArrayLock                      _fwArrayNew
	_fwArraySet                       _fwArraySize
	_fwArrayTraverse                  _fwArrayUnlock

fwbmp   	size = 7176
	_AlphaBlendNew                    _HB_FUN_CROPIMAGE
	_HB_FUN_NBMPCOLORS                _HB_FUN_NBMPHEIGHT
	_HB_FUN_NBMPWIDTH                 _HB_FUN_PALBMPDRAW
	_HB_FUN_PALBMPLOAD                _HB_FUN_PALBMPREAD
	_HB_FUN_PALBMPREALIZE             _HB_FUN_PALBTNPAINT
	_HB_FUN_TRANSBMP                  _MaskRegion
	_TransBmp                         _TransBmpNew
	_drawbmp_alpha                    _drawbmp_trans
	_hPalBitmapDraw                   _hPalBitmapNew

fwcrc8  	size = 326
	_HB_FUN_FW_CRC8                 

fwgif   	size = 34168
	FW_WndProc                        _FWGIFClass
	_FWReadFile                       _HB_FUN_FWGIFEND
	_HB_FUN_FWGIFISRUNNING            _HB_FUN_FWGIFPLAY
	_HB_FUN_FWGIFRESIZE               _HB_FUN_FWGIFRESTART
	_HB_FUN_FWGIFSTOP                 _HB_FUN_FWGIFWINDOW
	_HB_FUN_FWIGNOREBCK               _HB_FUN_FWSETGIFBRUSH
	_HB_FUN_FWSETGIFSIZING            _HB_FUN_GETGIFINFO
	_hin                              _last_passed
	_pass                           

fwmatrix	size = 3858
	_HB_FUN_MATRIX_ARRAY              _HB_FUN_MATRIX_CALC
	_HB_FUN_MATRIX_CREATE             _HB_FUN_MATRIX_DETERMINANT
	_HB_FUN_MATRIX_IDENTITY           _HB_FUN_MATRIX_INVERT
	_HB_FUN_MATRIX_MMULT              _HB_FUN_MATRIX_RANDOM
	_HB_FUN_MATRIX_REFLECT            _HB_FUN_MATRIX_RELEASE
	_HB_FUN_MATRIX_ROW                _HB_FUN_MATRIX_SUMOFROWS
	_HB_FUN_MATRIX_TRANSPOSE          _HB_FUN_MATRIX_VAL
	_array_determinant                _calc
	_matrix_adjunct                   _matrix_check
	_matrix_clone                     _matrix_copyfrom
	_matrix_determinant               _matrix_identity
	_matrix_invert                    _matrix_linear_calc
	_matrix_mmult                     _matrix_new
	_matrix_random                    _matrix_release
	_matrix_scalar_calc               _matrix_sigmoid
	_matrix_sigmoid_derivative        _matrix_sumofrows
	_matrix_transpose               

fwpalctl	size = 742
	_HB_FUN_PALCHGEVENT               _HB_FUN_QRYNEWPALEVENT
	_HB_FUN_SETFOREBMP                _IsForePalette
	_PalBmpRealize                  

fwpng   	size = 2899
	_FillBitmap                       _HB_FUN_CONVERTEMF2PNG
	_HB_FUN_FWOPENPNGFILE             _HB_FUN_FWPNGFROMMEMORY
	_HB_FUN_SAVE2PNGFILE              _IsPng
	_imgbuf_alloc                     _imgbuf_free
	_imgbuf_init                      _pix
	_pixel_at                         _save_png_to_file

fwstr   	size = 484
	_fw_memmove                       _fw_strcat
	_fw_strchr                        _fw_strcpy
	_fw_strncmp                       _fw_strstr
	_fw_wcslen                      

fwunicode	size = 7189
	_FW_AnsiToWide                    _FW_WideToAnsi
	_HB_FUN_ANSITOUTF8                _HB_FUN_APPENDMENUW
	_HB_FUN_CREATEWINDOWEXW           _HB_FUN_DRAWTEXTW
	_HB_FUN_EXTTEXTOUTW               _HB_FUN_FW_CDPTRANSLATE
	_HB_FUN_FW_LEFT                   _HB_FUN_FW_OEMTOUTF8
	_HB_FUN_FW_RIGHT                  _HB_FUN_FW_SETCDP
	_HB_FUN_FW_STRPEEK                _HB_FUN_FW_STRTOUTF8
	_HB_FUN_FW_SUBSTR                 _HB_FUN_FW_UTF8CHR
	_HB_FUN_FW_UTF8LEN                _HB_FUN_FW_UTF8TOOEM
	_HB_FUN_FW_UTF8TOSTR              _HB_FUN_GETACP
	_HB_FUN_GETCLASSINFOW             _HB_FUN_GETOEMCP
	_HB_FUN_GETTEXTWIDTHW             _HB_FUN_HBCDP
	_HB_FUN_INSERTMENUW               _HB_FUN_MENUDRAWITEMW
	_HB_FUN_MSGINFOW                  _HB_FUN_MSGPAINTW
	_HB_FUN_REGISTERCLASSW            _HB_FUN_STRTOWIDE
	_HB_FUN_TEXTOUTW                  _HB_FUN_UTF8TOANSI
	_HB_FUN_WIDETOSTR                 _HB_FUN_WTEXTOUTW
	_UTF16toUTF8                      _UTF8toUTF16
	_fw_parWide                       _fw_retWide
	_hasbom8                          _hbcdp_to_wincdp
	_is2byteansi                      _is_utf8
	_strlentowidestr                  _strpart
	_strtowidestr                     _utf8part
	_widestrlentostr                  _widestrtostr

gdipfwh 	size = 4071

gdiplus 	size = 2770
	_gdiplusStartupInput              _gdiplusToken

getdir  	size = 815
	_HB_FUN_CGETDIR                   _HB_FUN_CGETDIRA
	_HB_FUN_FW_FOLDERCHANGED        

getdlgit	size = 96
	_HB_FUN_GETDLGCTRLID              _HB_FUN_GETDLGITEM
	_HB_FUN_NEXTDLGTAB              

getfile 	size = 2126
	ComDlgHkFile                      _HB_FUN_CGETFILE
	_HB_FUN_CGETFILEA                 _HB_FUN_NGETFILEFILTER

getproca	size = 219
	_HB_FUN_GETPRADD                  _HB_FUN_GETPROCADD
	_HB_FUN_SETPROCADDRESS          

getstkob	size = 82
	_HB_FUN_GETSTOCKOBJECT            _HB_FUN_SETBLACKPEN
	_HB_FUN_SETWHITEPEN             

gettext 	size = 918
	_HB_FUN_GETWINDOWTEXT             _HB_FUN_GETWINTXTLENGHT
	_HB_FUN_MGETLINE                  _HB_FUN_MGETREPLACE
	_HB_FUN_WINLOWER                  _HB_FUN_WINUPPER
	_UTF16toANSI                      _UTF16toSTR8
	_ispureAnsiAsWide               

gettextw	size = 400
	_HB_FUN_GETTEXTHEIGHT             _HB_FUN_GETTEXTWIDTH

getwnd  	size = 179
	_HB_FUN_CHILDWINDOWFROMPOINT      _HB_FUN_GETWINDOW
	_HB_FUN_GETWINDOWTHREADPROCESSID  _HB_FUN_GETWINDOWWORD
	_HB_FUN_GETWNDTASK              

handlist	size = 1172
	__fwAddGlobal                     __fwDelGlobal
	__fwFreeAllGlobals                __fwFreeAllLibrarys
	__fwFreeLibInstance               __fwFreeLibrary
	__fwLoadLibrary                 

harddisk	size = 233
	_HB_FUN_NSERIALA                  _HB_FUN_NSERIALHD
	_HB_FUN_VOLUMENAME              

help    	size = 726
	_HB_FUN_GETHELPFILE               _HB_FUN_GETHELPTOPIC
	_HB_FUN_HELPCTRLHWND              _HB_FUN_HELPSETPOS
	_HB_FUN_HELPSETTOPIC              _HB_FUN_SETHELPFILE
	_HB_FUN__SETHELPFI              

hex2dec 	size = 226
	_HB_FUN_HEXTODEC                  _fw_hextodec

hiloword	size = 196
	_HB_FUN_NHIBYTE                   _HB_FUN_NHIWORD
	_HB_FUN_NLOBYTE                   _HB_FUN_NLOWORD

icons   	size = 4610
	_DrawIconFocus                    _GetIconSize
	_HB_FUN_BMPFROMICON               _HB_FUN_BMPFROMICONEX
	_HB_FUN_DESTROYICON               _HB_FUN_DRAWICON
	_HB_FUN_DRAWICONEX                _HB_FUN_DRAWICONFOCUS
	_HB_FUN_DUPLICATEICON             _HB_FUN_EXTRACTICON
	_HB_FUN_GETICONSIZE               _HB_FUN_HASICONALPHA
	_HB_FUN_HBMPFROMHICON             _HB_FUN_ICON_READ
	_HB_FUN_ICON_READEX               _HB_FUN_ISHICON
	_HB_FUN_LOADICON                  _HB_FUN_LOADIMAGEFILEICON
	_HB_FUN_LOADIMAGERESICON          _HB_FUN_NICONS
	_hasIconAlpha                   

imagelis	size = 639
	_HB_FUN_ILADD                     _HB_FUN_ILADDICON
	_HB_FUN_ILADDMASKED               _HB_FUN_ILCREATE
	_HB_FUN_ILDESTROY                 _HB_FUN_ILLOADIMAGE
	_HB_FUN_ILSETBKCOLOR            

instance	size = 251
	_GetInstance                      _HB_FUN_GETFOCUS
	_HB_FUN_GETINSTANCE               _HB_FUN_POSTQUITMESSAGE
	_HB_FUN_SETFOCUS                  _HB_FUN_SETFOREGROUNDWINDOW
	_HB_FUN_SHOWWINDOW                _HB_FUN__SETFOCUS

joystick	size = 504
	_HB_FUN_JOYGETDEVCAPS             _HB_FUN_JOYGETNUMDEVS
	_HB_FUN_JOYGETPOS                 _HB_FUN_JOYGETTHRESHOLD
	_HB_FUN_JOYRELEASECAPTURE         _HB_FUN_JOYSETCAPTURE
	_HB_FUN_JOYSETTHRESHOLD         

keybrd  	size = 457
	_HB_FUN_FW_SENDKEY                _HB_FUN_GETASYNCKEY
	_HB_FUN_GETKEYSTATE               _HB_FUN_GETKEYTOGGLE
	_HB_FUN_KEYTOGGLE                 _HB_FUN_SENDKEY
	_HB_FUN____KEYBOARD               _PostVirtualKeyEvent

lbx     	size = 282
	_HB_FUN_LBXGETITEM                _HB_FUN_LBXGETSELITEMS
	_HB_FUN_MEASUREITEM             

listview	size = 1396
	_HB_FUN_GETNMLISTVIEWITEM         _HB_FUN_LVDELETEITEM
	_HB_FUN_LVENABLEGROUPVIEW         _HB_FUN_LVFINDITEM
	_HB_FUN_LVGROUPSETSTATE           _HB_FUN_LVINSERTGROUP
	_HB_FUN_LVINSERTGROUPINLIST       _HB_FUN_LVINSERTINLIST
	_HB_FUN_LVINSERTITEM              _HB_FUN_LVINSERTITEMGROUP
	_HB_FUN_LVSETGROUP                _HB_FUN_LVSETITEMSELECT
	_HB_FUN_LVSETITEMTEXT             _HB_FUN_LVSETSTYLE

loadbmp 	size = 169
	_HB_FUN_CREATEMEMBITMAP           _HB_FUN_HSYSBITMAP
	_HB_FUN_LOADBITMAP              

longname	size = 84
	_HB_FUN_LCLOSE                    _HB_FUN_LCREAT
	_HB_FUN_LOPEN                   

lzexpand	size = 112
	_HB_FUN_LZCOPYFILE              

makeintr	size = 19
	_HB_FUN_MAKEINTRESOURCE         

makelong	size = 48
	_HB_FUN_NMAKELONG               

mapi    	size = 3875
	_HB_FUN_MAPIADDRESS               _HB_FUN_MAPIDELETEMAIL
	_HB_FUN_MAPIFINDNEXT              _HB_FUN_MAPILOGOFF
	_HB_FUN_MAPILOGON                 _HB_FUN_MAPIREADMAIL
	_HB_FUN_MAPIRESOLVENAME           _HB_FUN_MAPISENDDOCUMENTS
	_HB_FUN_MAPISENDMAIL            

mci     	size = 728
	_HB_FUN_AUXGETCAPS                _HB_FUN_AUXGETDEV
	_HB_FUN_AUXGETVOL                 _HB_FUN_AUXSETVOL
	_HB_FUN_MCIGETERRORSTRING         _HB_FUN_MCISENDCOMMAND
	_HB_FUN_MCISENDSTR                _HB_FUN_NMCIOPEN
	_HB_FUN_NMCIPLAY                  _HB_FUN_NMCIWINDOW

mdi     	size = 871
	_HB_FUN_CMDISTRUCT                _HB_FUN_CREATEMDIWINDOW
	_HB_FUN_GETFRAMEPROC              _HB_FUN_GETMDICHLPROC
	_HB_FUN_MDICTRLADJUST             _WndFrameProc

mem     	size = 401
	_HB_FUN_GETFREESPACE              _HB_FUN_GLOBALALLOC
	_HB_FUN_GLOBALCOMPACT             _HB_FUN_GLOBALDATA
	_HB_FUN_GLOBALFREE                _HB_FUN_GLOBALLOCK
	_HB_FUN_GLOBALREALLOC             _HB_FUN_GLOBALSIZE
	_HB_FUN_GLOBALUNLOCK              _HB_FUN_LOCALSHRINK
	_HB_FUN_NEXTMEM                   _fwGlobalAlloc
	_fwGlobalFree                   

menudraw	size = 17080
	_Bmp2Gray                         _Check2007
	_Check2010                        _Check2013
	_Check2015                        _CheckFw
	_DelCheck2007                     _DelCheck2010
	_DelCheck2013                     _DelCheck2015
	_DelCheckFw                       _DelPointC
	_FwBarMenu                        _FwBmpItem
	_FwCharItem                       _FwCheckedItem
	_FwNoSelectedItem                 _FwPromptItem
	_FwSelectedItem                   _FwSeparatorItem
	_HB_FUN_ALTFONTMIMENU             _HB_FUN_ANCFONTMIMENU
	_HB_FUN_BMP2GRAY                  _HB_FUN_CCOLORMENU
	_HB_FUN_CCOLORSUBMENU             _HB_FUN_CFONTMIMENU
	_HB_FUN_CHGMENUMEA                _HB_FUN_CHGMNUISR
	_HB_FUN_COLORGETBACK              _HB_FUN_DELCHECK2007
	_HB_FUN_DELCHECK2010              _HB_FUN_DELCHECK2013
	_HB_FUN_DELCHECK2015              _HB_FUN_DELCHECKFW
	_HB_FUN_DELPOINTC                 _HB_FUN_GETDRAWISR
	_HB_FUN_GETITEMTEXT               _HB_FUN_GETPARENTITEM
	_HB_FUN_HBITMAPITEM               _HB_FUN_HBMPBACK
	_HB_FUN_HB_FWBCODE                _HB_FUN_HCHECK
	_HB_FUN_HPOINT                    _HB_FUN_HSETBMPBACK
	_HB_FUN_MENUDRAWFW                _HB_FUN_MGETALLITEMS
	_HB_FUN_MINFOMIMENU               _HB_FUN_MITEMS
	_HB_FUN_MITEMS2007                _HB_FUN_MITEMSFW
	_HB_FUN_MSYSBITMAP                _HB_FUN_NOCLOSEDLG
	_HB_FUN_SET2007SKINMENU           _HB_FUN_SET2010SKINMENU
	_HB_FUN_SET2013SKINMENU           _HB_FUN_SET2015SKINMENU
	_HB_FUN_SETBITMAPITEM             _HB_FUN_SETFWSKINMENU
	_HB_FUN_SETITEMSTEXT              _HB_FUN_SETOWNERMENU
	_HPointC                          _SelectSkinMnu
	_SysBitMap                        _getParentMenuItem
	_hsetbmpback                      _set2007SkinMenu
	_set2010SkinMenu                  _set2013SkinMenu
	_set2015SkinMenu                  _setFwSkinMenu

menus   	size = 2006
	_DrawCheck                        _DrawRadioCheck
	_DrawRadioUncheck                 _DrawUncheck
	_HB_FUN_APPENDMENU                _HB_FUN_CHECKMENUITEM
	_HB_FUN_CREATEMENU                _HB_FUN_CREATEPOPUPMENU
	_HB_FUN_DESTROYMENU               _HB_FUN_DRAWMENUBAR
	_HB_FUN_ENABLEMENUITEM            _HB_FUN_FSETMENUDEFAULTITEM
	_HB_FUN_FSETMENUITEMBITMAPS       _HB_FUN_FWMODIFYMENU
	_HB_FUN_GETMENU                   _HB_FUN_GETMENUSTATE
	_HB_FUN_GETMENUSTRING             _HB_FUN_GETMITEMCOUNT
	_HB_FUN_GETMITEMID                _HB_FUN_GETSUBMENU
	_HB_FUN_GETSYSTEMMENU             _HB_FUN_HILITEMENUITEM
	_HB_FUN_INSERTMENU                _HB_FUN_ISMENU
	_HB_FUN_LOADMENU                  _HB_FUN_MODIFYMENU
	_HB_FUN_RADIOMENUITEM             _HB_FUN_REMOVEMENU
	_HB_FUN_SETITEMBITMAPS            _HB_FUN_SETMENU
	_HB_FUN_SETMENUDEFAULTITEM        _HB_FUN_TRACKPOPUP
	_HB_FUN_TRACKPOPUPMENUEX          _HB_FUN__GETMENUID

metafi32	size = 886
	_HB_FUN_CLOSEENHMETAFILE          _HB_FUN_CREATEENHMETAFILE
	_HB_FUN_DELETEENHMETAFILE         _HB_FUN_GETENHMETAFILE
	_HB_FUN_PLAYENHMETAFILE           _HB_FUN_XPLAYENHMETAFILE

metafile	size = 795
	_HB_FUN_CLOSEMETAFILE             _HB_FUN_CREATEMETAFILE
	_HB_FUN_DELETEMETAFILE            _HB_FUN_GETMETABIT
	_HB_FUN_GETMETAFILE               _HB_FUN_GETPMETAFILE
	_HB_FUN_PLAYMETAFILE              _HB_FUN_PMETA
	_SetMetaFileBits                

metpaint	size = 730
	_HB_FUN_METERPAINT              

mgetcrea	size = 387
	_HB_FUN_MGETCREATE              

mime64  	size = 1008
	_HB_FUN_CMIMEDEC                  _HB_FUN_CMIMEENC
	_at                             

mkdir   	size = 602
	_HB_FUN_FILEW                     _HB_FUN_GETWINDOWSDIRECTORY
	_HB_FUN_LCHDIR                    _HB_FUN_LCHDIRW
	_HB_FUN_LISDIRW                   _HB_FUN_LLFNMKDIR
	_HB_FUN_LLFNRMDIR                 _HB_FUN_LMKDIR
	_HB_FUN_LMKDIRW                   _HB_FUN_LMKFULLPATH
	_HB_FUN_LMKFULLPATHW              _HB_FUN_LRMDIR
	_HB_FUN_LRMDIRW                 

moveto  	size = 182
	_HB_FUN_MOVEGET                   _HB_FUN_MOVETO
	_HB_FUN_MOVETOEX                

msgbeep 	size = 23
	_HB_FUN_MESSAGEBEEP               _HB_FUN_MSGBEEP

msgs    	size = 2119
	MsgBoxHookProc                    _HB_FUN_CENTERMSGS
	_HB_FUN_FWMESSAGEBOX              _HB_FUN_MSGABOUT
	_HB_FUN_MSGALERT                  _HB_FUN_MSGINFO
	_HB_FUN_MSGNOYES                  _HB_FUN_MSGRETRYCANCEL
	_HB_FUN_MSGSTOP                   _HB_FUN_MSGYESNO
	_HB_FUN_MSGYESNOCANCEL            _HB_FUN_NMSGBOX
	_HB_FUN_SETASMSGBOX               _HB_FUN_SETMSGLANGID
	_HB_FUN_SHELLABOUT                _HB_FUN_UNHOOKWINDOWSHOOKEX
	_LToStr                           _MsgStr
	_ValToChar                      

msgsapi 	size = 1025
	_HB_FUN_FW_ISUTF8                 _HB_FUN_POSTMESSAGE
	_HB_FUN_SENDMESSAGE               _HB_FUN_SENDWIDESTRINGMESSAGE
	_SendMessageU                     _fw_parAnsi
	_isutf8                         

msgtools	size = 1094
	_HB_FUN_MSGPAINT                  _HB_FUN_MSGPAINT3L

net     	size = 740
	_HB_FUN_WNETADDCON                _HB_FUN_WNETADDCONNECTION2
	_HB_FUN_WNETADDCONNECTION2W       _HB_FUN_WNETBROWSEDIALOG
	_HB_FUN_WNETCONNECT               _HB_FUN_WNETDELCONNECTION
	_HB_FUN_WNETDISCONNECTDIALOG      _HB_FUN_WNETERROR
	_HB_FUN_WNETGETCONNECTION         _HB_FUN_WNETGETERR
	_HB_FUN_WNETGETUSER             

netcrdid	size = 809
	_GetMACaddress                    _GetMACaddressEx
	_HB_FUN_GETNETCARDID              _HB_FUN_GETNETCARDINFO

nonclient	size = 2567
	_HB_FUN_COMBOSELTEXT              _HB_FUN_DLGDIRLISTCOMBOBOX
	_HB_FUN_GETALIGNPOPUP             _HB_FUN_GETNONCLIENT
	_HB_FUN_GETRECTCOMBOBTT           _HB_FUN_GETRECTCOMBOEDIT
	_HB_FUN_HWNDCOMBO                 _HB_FUN_HWNDCOMBOEDIT
	_HB_FUN_HWNDCOMBOLIST             _HB_FUN_ISTACTIL
	_HB_FUN_NGETLISTBOXINFO           _HB_FUN_NONCLIENT
	_HB_FUN_SETADDTOOL                _HB_FUN_SETALIGNPOPUP
	_HB_FUN_SETNONCLIENT              _HB_FUN_SETRECTCOMBOBTT
	_HB_FUN_SETRECTCOMBOEDIT          _HB_FUN_SETWHSCROLL

notify  	size = 89
	_HB_FUN_GETNMHDRCODE              _HB_FUN_GETNMHDRHWNDFROM
	_HB_FUN_GETNMHDRIDFROM            _HB_FUN_NMTREEVIEWACTION
	_HB_FUN_NMTREEVIEWITEMNEW       

ntxtools	size = 175
	_HB_FUN_CNTXKEY                   _HB_FUN_DELDBFMDX

numcword	size = 3690
	_HB_FUN_FW_NUMTOWORDC             _HB_FUN_N2W_SETSTRINGS
	_HB_FUN_N2W_SETUNITS              _bAnd
	_bIndian                        

ocx     	size = 164
	_HB_FUN_COINITIALIZE              _HB_FUN_REGISTERSERVER
	_HB_FUN_UNREGISTERSERVER        

odbc32x 	size = 2798
	_HB_FUN_SQLALLOCCONNECT           _HB_FUN_SQLALLOCENV
	_HB_FUN_SQLALLOCSTMT              _HB_FUN_SQLCANCEL
	_HB_FUN_SQLCOLUMNS                _HB_FUN_SQLCONNECT
	_HB_FUN_SQLDESC32                 _HB_FUN_SQLDISCONNECT
	_HB_FUN_SQLDRVC32                 _HB_FUN_SQLERROR
	_HB_FUN_SQLEXECDIRECT             _HB_FUN_SQLEXECUTE
	_HB_FUN_SQLEXTENDEDFETCH          _HB_FUN_SQLFETCH
	_HB_FUN_SQLFREECONNECT            _HB_FUN_SQLFREEENV
	_HB_FUN_SQLFREESTMT               _HB_FUN_SQLGETCONNECTOPTION
	_HB_FUN_SQLGETCURSORNAME          _HB_FUN_SQLGETD32
	_HB_FUN_SQLGETDIAGREC             _HB_FUN_SQLGETIN32
	_HB_FUN_SQLGETSTMTOPTION          _HB_FUN_SQLGETTEXTDATA
	_HB_FUN_SQLNUMRESULTCOLS          _HB_FUN_SQLPARAMDATA
	_HB_FUN_SQLPREP32                 _HB_FUN_SQLPRIMARYKEYS
	_HB_FUN_SQLPUTDATA                _HB_FUN_SQLROLLBACK
	_HB_FUN_SQLROWCOUNT               _HB_FUN_SQLSCOL
	_HB_FUN_SQLSETCONNECTOPTION       _HB_FUN_SQLSETCURSORNAME
	_HB_FUN_SQLSETPARAM               _HB_FUN_SQLSETPOS
	_HB_FUN_SQLSETSTMT                _HB_FUN_SQLSTATISTICS
	_HB_FUN_SQLTABLES                 _HB_FUN_SQLTRANSACT
	_aRowStatus                     

oemansi 	size = 455
	_HB_FUN_ANSITOOEM                 _HB_FUN_ISANSI
	_HB_FUN_ISOEM                     _HB_FUN_OEMTOANSI
	_HB_FUN_makeLANGID              

onoffbmp	size = 2245
	_HB_FUN_FWBMPOFF                  _HB_FUN_FWBMPON

or      	size = 472
	_HB_FUN_I2HEX                     _HB_FUN_L2HEX
	_HB_FUN_LAND                      _HB_FUN_LXOR
	_HB_FUN_NAND                      _HB_FUN_NNOT
	_HB_FUN_NOR                       _HB_FUN_NPTRWORD
	_HB_FUN_NXOR                      _HB_FUN_PTRTONUM
	_HB_FUN_UTOS                    

paint   	size = 79
	_HB_FUN_BEGINPAINT                _HB_FUN_ENDPAINT

peekmsg 	size = 87
	_HB_FUN_PEEKMESSAGE               _HB_FUN_WAITMESSAGE

peekpoke	size = 42
	_HB_FUN_PEEKBYTE                  _HB_FUN_PEEKWORD
	_HB_FUN_POKEBYTE                  _HB_FUN_POKEWORD

point   	size = 210
	_HB_FUN_DPTOLP                    _HB_FUN_LPTODP

printdc 	size = 4684
	_HB_FUN_ABORTDOC                  _HB_FUN_COMDLGXERR
	_HB_FUN_DRAFTMODE                 _HB_FUN_ENDDOC
	_HB_FUN_ENDPAGE                   _HB_FUN_ENUMFONTFAMILIES
	_HB_FUN_ESCAPE                    _HB_FUN_GETPRINTDC
	_HB_FUN_GETPRINTDEFAULT           _HB_FUN_IMPORTRAWFILE
	_HB_FUN_ISCOLORPRINTER            _HB_FUN_ISDUPLEXPRINTER
	_HB_FUN_PAGEGETMARGINS            _HB_FUN_PAGESETUP
	_HB_FUN_PRINTERDCFROMNAME         _HB_FUN_PRINTEREND
	_HB_FUN_PRINTERESC                _HB_FUN_PRINTERINIT
	_HB_FUN_PRINTERSETUP              _HB_FUN_PRNBINSOURCE
	_HB_FUN_PRNDUPLEX                 _HB_FUN_PRNGETCOLLATE
	_HB_FUN_PRNGETCOPIES              _HB_FUN_PRNGETDRIVE
	_HB_FUN_PRNGETNAME                _HB_FUN_PRNGETORIENTATION
	_HB_FUN_PRNGETPAGES               _HB_FUN_PRNGETPAGNUMS
	_HB_FUN_PRNGETPORT                _HB_FUN_PRNGETSELECTION
	_HB_FUN_PRNGETSIZE                _HB_FUN_PRNLANDSCAPE
	_HB_FUN_PRNOFFSET                 _HB_FUN_PRNPORTRAIT
	_HB_FUN_PRNSETCOLLATE             _HB_FUN_PRNSETCOPIES
	_HB_FUN_PRNSETPAGE                _HB_FUN_PRNSETSIZE
	_HB_FUN_PRNSTATUS                 _HB_FUN_RESETDC
	_HB_FUN_SPOOLFILE                 _HB_FUN_STARTDOC
	_HB_FUN_STARTPAGE                 _HB_FUN_devMODE

prnsayrt	size = 0

profile 	size = 522
	_HB_FUN_DELINIENTRY               _HB_FUN_DELINISECTION
	_HB_FUN_GETPROFINT                _HB_FUN_GETPROFSTRING
	_HB_FUN_GETPVPROFINT              _HB_FUN_GETPVPROFSTRING
	_HB_FUN_WRITEPPROSTRING           _HB_FUN_WRITEPROFSTRING

prop    	size = 182
	_HB_FUN_GETPROP                   _HB_FUN_REMOVEPROP
	_HB_FUN_SETPROP                 

prpsheet	size = 416
	_HB_FUN_PROPSHEET               

rasapi  	size = 1141
	_HB_FUN_RACONST                   _HB_FUN_RADIAL
	_HB_FUN_RAENUMCONNECTIONS         _HB_FUN_RAENUMENTRIES
	_HB_FUN_RAGETCONST                _HB_FUN_RAGETERROR
	_HB_FUN_RAHANGUP                

rebars  	size = 213
	_HB_FUN_RBINSERTBAND              _HB_FUN_SETREBARINFO

rebarsw 	size = 357
	_HB_FUN_RBINSERTBANDAW            _HB_FUN_SETREBARINFOAW

rects   	size = 1911
	_FrameDot                         _HB_FUN_DRAWFOCUSELLIPSE
	_HB_FUN_DRAWFOCUSRECT             _HB_FUN_FILLRECT
	_HB_FUN_FRAMEDOT                  _HB_FUN_GETCLIENTRECT
	_HB_FUN_GETCOORS                  _HB_FUN_GETLABELDIM
	_HB_FUN_GETWNDRECT                _HB_FUN_INVALIDATERECT
	_HB_FUN_INVERTRECT                _HB_FUN_MAPDIALOGRECT
	_HB_FUN_NCCSRIGHT                 _HB_FUN_ROUNDRECT

regclass	size = 264
	_HB_FUN_GETMODULEHANDLE           _HB_FUN_REGISTERCLASS
	_HB_FUN_SETCLASSWORD            

regedit 	size = 876
	_HB_FUN_REGCLOSEKEY               _HB_FUN_REGCREATEKEY
	_HB_FUN_REGDELETEKEY              _HB_FUN_REGENUMKEY
	_HB_FUN_REGENUMVALUE              _HB_FUN_REGOPENKEY
	_HB_FUN_REGOPENKEYEX              _HB_FUN_REGQUERYVALUE
	_HB_FUN_REGQUERYVALUEEX           _HB_FUN_REGSETVALUE
	_HB_FUN_REGSETVALUEEX           

regions 	size = 1046
	_HB_FUN_COMBINERGN                _HB_FUN_CREATEELLIPTICRGN
	_HB_FUN_CREATEELLIPTICRGNINDIRECT  _HB_FUN_CREATEPOLYGONRGN
	_HB_FUN_CREATERECTRGN             _HB_FUN_CREATEROUNDRECTRGN
	_HB_FUN_FRAMERGN                  _HB_FUN_INVALIDATERGN
	_HB_FUN_SETWINDOWRGN            

resource	size = 757
	_GetResources                     _HB_FUN_CRESTOSTR
	_HB_FUN_ENUMRESOURCENAMES         _HB_FUN_FINDICON
	_HB_FUN_FINDRESOURCE              _HB_FUN_FREERESOURCES
	_HB_FUN_GETRESOURCES              _HB_FUN_LOADHTML
	_HB_FUN_LOADRESOURCE              _HB_FUN_LOCKRESOURCE
	_HB_FUN_RCDATATOFILE              _HB_FUN_RESOURCEFREE
	_HB_FUN_SETRESOURCES            

ribbon  	size = 6849
	_BitmapFromMem                    _Blur
	_BrightImg                        _CreateBase
	_CreateShadow                     _DoHBlur
	_DoHorizontalBlur                 _DoVBlur
	_DoVerticalBlur                   _HB_FUN_BEGINPATH
	_HB_FUN_BLUR                      _HB_FUN_BRIGHTIMG
	_HB_FUN_CREATEBASE                _HB_FUN_CREATESHADOW
	_HB_FUN_ENDPATH                   _HB_FUN_FILLPATH
	_HB_FUN_FILLRGN                   _HB_FUN_GETTEXTEXTENTPOINT32
	_HB_FUN_HDCBITMAP                 _HB_FUN_LITTLEARROW
	_HB_FUN_MAKEBKBMP                 _HB_FUN_MAKEBKBMPEX
	_HB_FUN_MAKEBKBRUSH               _HB_FUN_MINIBTN
	_HB_FUN_OFFSETRGN                 _HB_FUN_PARENTCAPTURE
	_HB_FUN_PATHTOREGION              _HB_FUN_RESIZEIMG
	_HB_FUN_STROKEANDFILLPATH         _HB_FUN_STROKEPATH
	_HB_FUN_TI_DRAWREFLEX             _MakeBkBmp
	_MakeBkBmpEx                      _MakeBkBmpExHDC
	_ParentCapture                    _PrepareInfoHeader
	_ResizeImg                        _TI_DrawReflex

richedi5	size = 14450
	_FillRichEditFromFile             _HB_FUN_GETPARFORM5
	_HB_FUN_REDLLVERSION5             _HB_FUN_REFINDTEXT5
	_HB_FUN_REGETBACKCOLOR5           _HB_FUN_REGETBULLET5
	_HB_FUN_REGETCHARFORMAT5          _HB_FUN_REGETDATETIME5
	_HB_FUN_REGETHIGHLIGHT5           _HB_FUN_REGETINDENT5
	_HB_FUN_REGETNMHDRLINK5           _HB_FUN_REGETNUMBERING5
	_HB_FUN_REGETOLEINTERFACE5        _HB_FUN_REGETPARAFORMAT5
	_HB_FUN_REGETPARAGRAPH5           _HB_FUN_REGETPARAGRAPHALL5
	_HB_FUN_REGETSELECTION5           _HB_FUN_REGETTEXTCOLOR5
	_HB_FUN_REGETZOOM5                _HB_FUN_REINSERTPICTURE5
	_HB_FUN_REINSERTRTF5              _HB_FUN_REINSERTRTFFROMFILE5
	_HB_FUN_RELASTLINEVISIBLE         _HB_FUN_RELEN5
	_HB_FUN_RELOADASRTF5              _HB_FUN_REPAGEBREAK5
	_HB_FUN_REPASTESPECIAL5           _HB_FUN_REPREVIEW5
	_HB_FUN_REPRINT5                  _HB_FUN_REPRINTBOX5
	_HB_FUN_RESAVEASRTF5              _HB_FUN_RESETATTRIBUTE5
	_HB_FUN_RESETAUTOURLDETECT5       _HB_FUN_RESETBACKCOLOR5
	_HB_FUN_RESETBULLET5              _HB_FUN_RESETCHARFORMAT5
	_HB_FUN_RESETFONTNAME5            _HB_FUN_RESETFONTSIZE5
	_HB_FUN_RESETHIGHLIGHT5           _HB_FUN_RESETINDENT5
	_HB_FUN_RESETNUMBERING5           _HB_FUN_RESETOLECALLBACK5
	_HB_FUN_RESETOLEINIT5             _HB_FUN_RESETOLEUNINIT5
	_HB_FUN_RESETPARADELIMITER5       _HB_FUN_RESETPARAFORMAT5
	_HB_FUN_RESETPARAGRAPH5           _HB_FUN_RESETPARAGRAPHALL5
	_HB_FUN_RESETPOS5                 _HB_FUN_RESETSELECTION5
	_HB_FUN_RESETTEXTCOLOR5           _HB_FUN_RESETZOOM5
	_HB_FUN_RTGETPARAFORMAT5          _HB_FUN_RTINSERTOBJECT5
	_HB_FUN_RTINSERTTABLE5            _HB_FUN_RTSETPARAFORMAT5
	_HB_FUN_SETPARFORM5               _InsertObject

richedit	size = 8997
	_HB_FUN_REDLLVERSION              _HB_FUN_REFINDTEXT
	_HB_FUN_REGETBULLET               _HB_FUN_REGETCHARFORMAT
	_HB_FUN_REGETDATETIME             _HB_FUN_REGETHIGHLIGHT
	_HB_FUN_REGETINDENT               _HB_FUN_REGETNMHDRLINK
	_HB_FUN_REGETNUMBERING            _HB_FUN_REGETOLEINTERFACE
	_HB_FUN_REGETPARAFORMAT           _HB_FUN_REGETPARAGRAPH
	_HB_FUN_REGETSELECTION            _HB_FUN_REGETZOOM
	_HB_FUN_REINSERTPICTURE           _HB_FUN_RELEN
	_HB_FUN_RELOADASRTF               _HB_FUN_REPAGEBREAK
	_HB_FUN_REPASTESPECIAL            _HB_FUN_REPREVIEW
	_HB_FUN_REPRINT                   _HB_FUN_REPRINTBOX
	_HB_FUN_RESAVEASRTF               _HB_FUN_RESETATTRIBUTE
	_HB_FUN_RESETAUTOURLDETECT        _HB_FUN_RESETBULLET
	_HB_FUN_RESETCHARFORMAT           _HB_FUN_RESETFONTNAME
	_HB_FUN_RESETFONTSIZE             _HB_FUN_RESETHIGHLIGHT
	_HB_FUN_RESETINDENT               _HB_FUN_RESETNUMBERING
	_HB_FUN_RESETOLECALLBACK          _HB_FUN_RESETOLEINIT
	_HB_FUN_RESETOLEUNINIT            _HB_FUN_RESETPARAFORMAT
	_HB_FUN_RESETPARAGRAPH            _HB_FUN_RESETPOS
	_HB_FUN_RESETSELECTION            _HB_FUN_RESETTEXTCOLOR
	_HB_FUN_RESETZOOM               

saveicon	size = 1001
	_HB_FUN_FW_SAVEHICONTOICO         _SaveIcon3

scintilc	size = 3602
	_HB_FUN_ASIGNKEYS                 _HB_FUN_FINDAUTOCOMPLETE
	_HB_FUN_GETANNOTALINESADDHDR      _HB_FUN_GETCHARHDR
	_HB_FUN_GETIDHDR                  _HB_FUN_GETLENHDR
	_HB_FUN_GETLEVNOWHDR              _HB_FUN_GETLEVPREVHDR
	_HB_FUN_GETLINADDHDR              _HB_FUN_GETLINEHDR
	_HB_FUN_GETLISTCOMPLETIONHDR      _HB_FUN_GETLISTHDR
	_HB_FUN_GETLPARAM                 _HB_FUN_GETMARGHDR
	_HB_FUN_GETMESSAGEHDR             _HB_FUN_GETMODIFIER
	_HB_FUN_GETMODTYPE                _HB_FUN_GETPOSHDR
	_HB_FUN_GETPOSIHDR                _HB_FUN_GETTEXTHDR
	_HB_FUN_GETTOKENHDR               _HB_FUN_GETUPDATEDHDR
	_HB_FUN_GETWNDHDR                 _HB_FUN_GETWPARAM
	_HB_FUN_GETXHDR                   _HB_FUN_GETXPARAM
	_HB_FUN_GETYHDR                   _HB_FUN_GETYPARAM
	_HB_FUN_MYFUNC_DBLUE              _HB_FUN_MYFUNC_F
	_HB_FUN_MYFUNC_F16                _HB_FUN_MYFUNC_FBLUE
	_HB_FUN_MYFUNC_MBLUE              _HB_FUN_MYFUNC_MBLUE16
	_HB_FUN_MYFUNC_VBLUE              _HB_FUN_PONFOLD
	_HB_FUN_PONFOLDCOMPACT            _HB_FUN_SCIGETLINE
	_HB_FUN_SCIGETSELTEXT             _HB_FUN_SCIGETTEXT
	_HB_FUN_SCIGETTEXTAT              _HB_FUN_SCI_OPENFILE
	_HB_FUN_SCNOTIFICATIONCH          _HB_FUN_SCNOTIFICATIONCODE
	_HB_FUN_SC_ADDTEXT                _HB_FUN_SC_ISREADONLY
	_HB_FUN_SEARCHBACKWARD            _HB_FUN_SEARCHFORWARD
	_SearchBackward                   _SearchForward

scroll  	size = 503
	_HB_FUN_ENABLESCROLLBAR           _HB_FUN_GETSCROLLPOS
	_HB_FUN_GETSCROLLRANGE            _HB_FUN_SETSCROLLINFO
	_HB_FUN_SETSCROLLPOS              _HB_FUN_SETSCROLLRANGE
	_HB_FUN_SETSCROLLRANGEX         

selobjec	size = 31
	_HB_FUN_SELECTOBJECT            

sethandl	size = 22
	_HB_FUN_SETHANDLECOUNT          

setmapmo	size = 75
	_HB_FUN_GETMAPMODE                _HB_FUN_GETSYSMETRICS
	_HB_FUN_SETMAPMODE              

settext 	size = 88
	_HB_FUN_SETWINDOWTEXT           

sound   	size = 269
	_HB_FUN_MSGSOUND                  _HB_FUN_SNDPLAYRESOURCE
	_HB_FUN_SNDPLAYSOUND            

str2hex 	size = 806
	_HB_FUN_FW_URLENCODE              _HB_FUN_HEX2STR
	_HB_FUN_STR2HEX                 

string  	size = 67
	_HB_FUN_LOADSTRING              

strtoken	size = 672
	_HB_FUN_STRBYTE                   _HB_FUN_STRCAPFIRST
	_HB_FUN_STRCHAR                   _HB_FUN_STRCHARCOUNT
	_HB_FUN_STRCPY                    _HB_FUN_STRPTR
	_HB_FUN_STRTOKEN                  _StrToken

tabctrl 	size = 939
	_HB_FUN_TABCTRLADD                _HB_FUN_TABCTRL_ADJUSTRECT
	_HB_FUN_TABCTRL_GETCURSEL         _HB_FUN_TABCTRL_HITTEST
	_HB_FUN_TABCTRL_SETCURSEL         _HB_FUN_TABDELALLITEMS
	_HB_FUN_TABGETROWCOUNT            _HB_FUN_TABSETITEM

tabctrlw	size = 1242
	_HB_FUN_TABCTRLADDW               _HB_FUN_TABCTRL_ADJUSTRECTW
	_HB_FUN_TABCTRL_GETCURSELW        _HB_FUN_TABCTRL_HITTESTW
	_HB_FUN_TABCTRL_SETCURSELW        _HB_FUN_TABDELALLITEMSW
	_HB_FUN_TABGETROWCOUNTW           _HB_FUN_TABSETITEMW

tcbfuncs	size = 1615
	_HB_FUN_ATCBRWPOSRECT             _HB_FUN_NTCWROW
	_HB_FUN_TCBRWSCROLL               _HB_FUN_TCDRAWCELL

text    	size = 2892
	_DrawTextAW                       _DrawTextAW2
	_DrawTextAWC                      _ExtTextOutAW
	_HB_FUN_DRAWTEXT                  _HB_FUN_DRAWTEXTEX
	_HB_FUN_EXTTEXTOUT                _HB_FUN_GETTEXTALIGN
	_HB_FUN_SETTEXTALIGN              _HB_FUN_SETTEXTJUSTIFICATION
	_HB_FUN_TEXTOUT                   _TextOutAW
	_UTF8toUTF16W                     _fw_parRect

theaders	size = 692
	_HB_FUN_GETNMHEABUTTON            _HB_FUN_GETNMHEAITEM
	_HB_FUN_HEADERGET                 _HB_FUN_HEADERINS
	_HB_FUN_HEADERLAYOUT              _HB_FUN_HEADERSET

themes  	size = 4543
	_DrawGripper                      _DrawPBack
	_DrawRBGripper                    _HB_FUN_APPHASMANIFEST
	_HB_FUN_CHECKFOCUS                _HB_FUN_DRAWGRIPPER
	_HB_FUN_DRAWHEADER                _HB_FUN_DRAWPBACK
	_HB_FUN_DRAWTABBODY               _HB_FUN_DRAWTHEMED
	_HB_FUN_EDBORDER                  _HB_FUN_FIXTHEMECONTROLS
	_HB_FUN_ISAPPTHEMED               _HB_FUN_ISCLASSIC
	_HB_FUN_ISTHEMEACTIVE             _HB_FUN_MAPWINDOWPOINT
	_HB_FUN_SETWINDOWTHEME            _HB_FUN_TBERASE
	__HasManifest                     __IsAppThemed

timepick	size = 221
	_HB_FUN_GETTIMEPICK               _HB_FUN_SETTIMEPICK

timers  	size = 93
	_HB_FUN_GETTICKCOUNT              _HB_FUN_KILLTIMER
	_HB_FUN_SETTIMER                

toolbarsw	size = 1219
	_HB_FUN_CREATETLBARAW             _HB_FUN_INITCOMMONCONTROLSEXW
	_HB_FUN_INITCOMMONCONTROLSW       _HB_FUN_TBADDBUTTONAW
	_HB_FUN_TBADDMENUAW               _HB_FUN_TBADDSEPARATORAW
	_HB_FUN_TBENABLEBUTTONAW          _HB_FUN_TBGETRECTAW
	_HB_FUN_TBSETTEXTAW               _HB_FUN_TTNSETTEXTA
	_HB_FUN_TTNSETTEXTW             

toolhelp	size = 39
	_HB_FUN_INTERRUPTREGISTER         _HB_FUN_INTERRUPTUNREGISTER
	_HB_FUN_TERMINATEAPP              _HB_FUN_TIMERCOUNT

tooltipa	size = 608
	_HB_FUN_CREATETOOLTIPANEW       

tooltipw	size = 904
	_HB_FUN_CREATETOOLTIPWNEW       

touch   	size = 897
	_HB_FUN_AUTOROTATIONPREF          _HB_FUN_GESTUREINFO
	_HB_FUN_GETAUTOROTATIONSTATE      _HB_FUN_ISEVENTBYTOUCH
	_HB_FUN_USEALLGESTURES          

treeview	size = 1576
	_HB_FUN_TVDELALLITEMS             _HB_FUN_TVDELETEITEM
	_HB_FUN_TVEDITLABEL               _HB_FUN_TVGETCHECK
	_HB_FUN_TVGETEDITCONTROL          _HB_FUN_TVGETPARENT
	_HB_FUN_TVGETSELECTED             _HB_FUN_TVGETSELTEXT
	_HB_FUN_TVGETTEXT                 _HB_FUN_TVHITTEST
	_HB_FUN_TVINSERTITEM              _HB_FUN_TVIPARAM
	_HB_FUN_TVSELECT                  _HB_FUN_TVSETCHECK
	_HB_FUN_TVSETCOLOR                _HB_FUN_TVSETIMAGELIST
	_HB_FUN_TVSETITEMBOLD             _HB_FUN_TVSETITEMHEIGHT
	_HB_FUN_TVSETITEMIMAGE            _HB_FUN_TVSETITEMTEXT
	_HB_FUN_TVSETTEXTIMAGE          

urldownloadtofile	size = 8
	_downloading                    

wbrwline	size = 408
	_HB_FUN_ABRWPOSRECT             

webcam  	size = 1018
	_HB_FUN_CAPFILESETCAPTUREFILE     _HB_FUN_WEBCAM_CAPTUREWINDOW
	_HB_FUN_WEBCAM_DLGVIDEOFORMAT     _HB_FUN_WEBCAM_DLGVIDEOSOURCE
	_HB_FUN_WEBCAM_DRIVERCONNECT      _HB_FUN_WEBCAM_DRIVERDISCONNECT
	_HB_FUN_WEBCAM_FILESAVEDIB        _HB_FUN_WEBCAM_GETDRIVERDESCRIPTION
	_HB_FUN_WEBCAM_PREVIEW            _HB_FUN_WEBCAM_PREVIEWRATE
	_HB_FUN_WEBCAM_PREVIEWSCALE       _HB_FUN___WEBCAM_CALLBACK
	fpCallbackProc                    fpCallbackProc2

webview 	size = 1295
	_HB_FUN_WEBVIEW_BIND              _HB_FUN_WEBVIEW_CREATE
	_HB_FUN_WEBVIEW_DESTROY           _HB_FUN_WEBVIEW_DISPATCH
	_HB_FUN_WEBVIEW_EVAL              _HB_FUN_WEBVIEW_GETWINDOW
	_HB_FUN_WEBVIEW_INIT              _HB_FUN_WEBVIEW_NAVIGATE
	_HB_FUN_WEBVIEW_OPENDEVTOOLSWINDOW  _HB_FUN_WEBVIEW_RETURN
	_HB_FUN_WEBVIEW_RUN               _HB_FUN_WEBVIEW_SETHTML
	_HB_FUN_WEBVIEW_SETSIZE           _HB_FUN_WEBVIEW_SETTITLE
	_HB_FUN_WEBVIEW_SETUSERAGENT      _HB_FUN_WEBVIEW_TERMINATE
	_HB_FUN_WEBVIEW_UNBIND            _HB_FUN_WV_SENDTOFWH

webview2	size = 237
	_HB_FUN_WEBVIEW2_END              _HB_FUN_WEBVIEW2_EVAL
	_HB_FUN_WEBVIEW2_NAVIGATE         _HB_FUN_WEBVIEW2_NEW
	_HB_FUN_WEBVIEW2_OPENDEVTOOLSWINDOW  _HB_FUN_WEBVIEW2_SETHTML
	_HB_FUN_WEBVIEW2_SETSIZE          _HB_FUN_WEBVIEW2_SETUSERAGENT
	_HB_FUN_WEBVIEW2_SHOWDOWNLOADS  

win2000 	size = 49
	_HB_FUN_SETLAYEREDWINDOWATTRIBUTES

windows 	size = 431
	_HB_FUN_DEFWINDOWPROC             _HB_FUN_ENUMCHILDWINDOWS
	_HB_FUN_ENUMWINDOWS               _HB_FUN_GETCLASSLONG
	_HB_FUN_GETPARENT                 _HB_FUN_LOCKWINDOWUPDATE
	_HB_FUN_SETCLASSLONG              _HB_FUN_SETPARENT

winexec 	size = 1308
	_HB_FUN_EXITWINDOW                _HB_FUN_EXITWND
	_HB_FUN_GETMODULEFILENAME         _HB_FUN_GETNUMTASKS
	_HB_FUN_GETSYSDIR                 _HB_FUN_GETWINDIR
	_HB_FUN_ISEXERUNNING              _HB_FUN_SHELLEXECUTE
	_HB_FUN_SHFILEOPERATION           _HB_FUN_SHFILEOPERATIONW
	_HB_FUN_SLEEP                     _HB_FUN_WAITRUN
	_HB_FUN_WINEXEC                 

winrtc  	size = 964
	_HB_FUN_WINRTEVENTHANDLER         _HB_FUN_WINRTEVENTTOKEN
	_HB_FUN_WINRTFIND                 _HB_FUN_WINRTMETHOD

winsock 	size = 1506
	_HB_FUN_ACCEPT                    _HB_FUN_BINDTOPORT
	_HB_FUN_CLOSESOCKET               _HB_FUN_CONNECTTO
	_HB_FUN_GETHOSTBYADDRESS          _HB_FUN_GETHOSTBYNAME
	_HB_FUN_GETHOSTNAME               _HB_FUN_GETIP
	_HB_FUN_GETPEERNAME               _HB_FUN_GETPORT
	_HB_FUN_GETSERVBYNAME             _HB_FUN_HTONS
	_HB_FUN_INET_ADDR                 _HB_FUN_LISTEN
	_HB_FUN_RECV                      _HB_FUN_SENDBINARY
	_HB_FUN_SETSOCKOPT                _HB_FUN_SOCKET
	_HB_FUN_SOCKETSELECT              _HB_FUN_SOCKETSEND
	_HB_FUN_WSAASYNCSELECT            _HB_FUN_WSACLEANUP
	_HB_FUN_WSAGETLASTERROR           _HB_FUN_WSASTARTUP

wmouse  	size = 178
	_HB_FUN_GETCAPTURE                _HB_FUN_RELEASECAPTURE
	_HB_FUN_SETCAPTURE                _HB_FUN_TRACKMOUSEEVENT

wndboxes	size = 1924
	_HB_FUN_BARPAINT                  _HB_FUN_ROUNDBOX
	_HB_FUN_WNDBOX                    _HB_FUN_WNDBOX2007
	_HB_FUN_WNDBOXCLR                 _HB_FUN_WNDBOXIN
	_HB_FUN_WNDBOXRAISED              _HB_FUN_WNDINSET
	_HB_FUN_WNDRAISED                 _RoundBox
	_WindowBox                        _WindowBoxBlack
	_WindowBoxIn                      _WindowBoxInBlack
	_WindowInset                      _WindowRaised
	_WndBox2007                       _WndDrawBox

wndcente	size = 631
	_HB_FUN_GETVIEWPORTORGEX          _HB_FUN_GETWINDOWORGEX
	_HB_FUN_SETACTIVEWINDOW           _HB_FUN_SETWINDOWORG
	_HB_FUN_WNDCENTER               

wnddestr	size = 46
	_HB_FUN_DESTROYWINDOW           

wndis   	size = 1447
	_HB_FUN_BORLANDC                  _HB_FUN_CALLWINDOWPROC
	_HB_FUN_CLOSEWINDOW               _HB_FUN_ENABLEWINDOW
	_HB_FUN_FINDWINDOW                _HB_FUN_GETACTIVEWINDOW
	_HB_FUN_GETCLASSINFO              _HB_FUN_GETFOREGROUNDWINDOW
	_HB_FUN_GETTOPWINDOW              _HB_FUN_GETVERSION
	_HB_FUN_GETWINDOWLONG             _HB_FUN_GETWINFLAGS
	_HB_FUN_GETWINVER                 _HB_FUN_ISCHILD
	_HB_FUN_ISDEFBUTTON               _HB_FUN_ISEXE64
	_HB_FUN_ISICONIC                  _HB_FUN_ISWIN95
	_HB_FUN_ISWINDOW                  _HB_FUN_ISWINDOWENABLED
	_HB_FUN_ISWINDOWUNICODE           _HB_FUN_ISWINDOWVISIBLE
	_HB_FUN_ISWINNT                   _HB_FUN_ISWOW64
	_HB_FUN_ISZOOMED                  _HB_FUN_MSVC
	_HB_FUN_SETWINDOWLONG             _HB_FUN_SETWINDOWWORD
	_HB_FUN_WINDOWFROMPOINT           _IsWin95
	_fnIsWow64Process               

wndisove	size = 121
	_HB_FUN_ISOVERWND                 _HB_FUN_WNDHASSCROLLS

wndlines	size = 604
	_HB_FUN_WNDHLINERA                _HB_FUN_WNDHRAISED
	_HB_FUN_WNDVLINERA                _HB_FUN_WNDVRAISED
	_WindowHRaised                    _WindowVRaised
	_WndDrawHLine                     _WndDrawVLine

wndmove 	size = 3131
	_HB_FUN_BRINGWINDOWTOTOP          _HB_FUN_MOVEWINDOW
	_HB_FUN_SETMINMAX                 _HB_FUN_WNDADJBOTTOM
	_HB_FUN_WNDADJCLIENT              _HB_FUN_WNDADJLEFT
	_HB_FUN_WNDADJRIGHT               _HB_FUN_WNDADJTOP
	_HB_FUN_WNDBOTTOM                 _HB_FUN_WNDCOPY
	_HB_FUN_WNDHEIGHT                 _HB_FUN_WNDLEFT
	_HB_FUN_WNDSETSIZE                _HB_FUN_WNDTOP
	_HB_FUN_WNDWIDTH                

wndpos  	size = 196
	_HB_FUN_GETWINDOWPLACEMENT        _HB_FUN_SETWINDOWPLACEMENT
	_HB_FUN_SETWINDOWPOS            

wndprint	size = 466
	_HB_FUN_PRINTWINDOW               _HB_FUN_WNDBITMAP
	_HB_FUN_WNDPRINT                

wndproc 	size = 436
	_HB_FUN_REMOVEWINDOWPROC          _HB_FUN_SETWINDOWPROC

wndrows 	size = 364
	_GetWindowRow                     _GetWindowRows
	_HB_FUN_NWROW                     _HB_FUN_NWROWS

wndsay  	size = 972
	_HB_FUN_NWNDCHRHEIGHT             _HB_FUN_WSAY
	_HB_FUN_WSAYRECT                

wndscrol	size = 639
	_HB_FUN_SCROLLWINDOW              _HB_FUN_WBRWSCROLL
	_HB_FUN_WSCROLL                 

wndupdat	size = 52
	_HB_FUN_GETCLASSNAME              _HB_FUN_UPDATEWINDOW

xbrowsec	size = 1465
	_BmpDrawNoStretch                 _HB_FUN_BMPDRAWNOSTRETCH
	_HB_FUN_FWBMPASC                  _HB_FUN_FWBMPDES
	_HB_FUN_FWDARROW                  _HB_FUN_FWRARROW
	_HB_FUN_XBRWSCROLLROW           

xhb     	size = 0

xxproc  	size = 166
	_HB_FUN_XXCHANGEPROC            
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: String functions UTF8 compatible :: Reply by marzio]]> 2025-04-13T22:30:24-06:00 2025-04-13T22:30:24-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45618&p=278968#p278968 i have tried with fivehc32.lib and fiveh32.lib but doesn't works.
i have posted below fwfuncs.prg corrected from some oversights (I left the wrong lines as comments)
pay attention to the updated version of MS VC22 is now numbered: \14.43.34808\
i have tried to change bin\Hostx64\x86\ with bin\Hostx86\x86\

i have tried also from from the command prompt with libs copied in the same directory bin but i have this result:
Microsoft (R) Library Manager Version 14.43.34809.0
Copyright (C) Microsoft Corporation. All rights reserved.
LINK : fatal error LNK1181: cannot open input file 'fiveh32.lib,'

now i use the LST files that you have posted, when you have time you try to see what is not working.
thanks for attention,
Marzio

Code: Select all | Expand

#include "fivewin.ch"

#define EM_LINESCROLL           182
#define EM_GETFIRSTVISIBLELINE  0x00CE


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

static cBccFolder  := "c:\bcc77\"   // your bcc folder here
static cMSVCFolder := "c:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34808\bin\Hostx64\x86\"   // your msvc folder here

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

function Main()

   local aFunc
   local oDlg, nWd, oFont, oFixed, oBrw, oSay, oGet
   local cModule, cFile, cText, cUpper
   local aTemp := {}
   local cSymbols := ""

   SetMGetColorFocus()

   aFunc := ReadFuncs()
   if Empty( aFunc )
      return nil
   endif

   AEval( aFunc, { | a | AAdd( aTemp, a[ 2 ] ) } )
   ASort( aTemp )
   // XBrowse( aTemp )
   AEval( aTemp, { | cName | cSymbols += "extern " + cName + CRLF } )
   hb_memoWrit( "symbols.txt", cSymbols )
   // fw_memoEdit( cSymbols )

   cModule  := aFunc[ 1, 1 ]
   cFile    := ModuleToFile( cModule )
   cText    := If( Empty( cFile ), "", MemoRead( cFile ) )

   DEFINE FONT oFont  NAME "TAHOMA" SIZE 0,-13
   DEFINE FONT oFixed NAME "LUCIDA CONSOLE" SIZE 0,-14

   nWd      := Int( ScreenWidth() * 0.9 )

   DEFINE DIALOG oDlg SIZE nWd,600 PIXEL TRUEPIXEL FONT oFont ;
      TITLE FWVERSION + ": Functions and Classes"

   @ 20,20 XBROWSE oBrw SIZE 400,-20 PIXEL OF oDlg ;
      DATASOURCE aFunc COLUMNS 1,2 ;
      HEADERS "MODULE", "FUNCTION" ;
      COLSIZES "BBBBBBBBBB" ;
      CELL LINES NOBORDER FOOTERS AUTOSORT

   WITH OBJECT oBrw
      :bRecSelData   := { || oBrw:KeyNo }
      :nRecSelWidth  := "9999"
      :bRecSelHeader := { || "SlNo" }
      :bRecSelFooter := { || oBrw:nLen }

      :lHScroll      := .f.
      :lSeekBar      := .t.
      :bClrEdits     := { || { CLR_HRED, CLR_YELLOW } }
      :lSeekWild     := .t.
      :nStretchCol   := 2

      :bChange       := <||
         if !( cModule == oBrw:aRow[ 1 ] )
            cModule  := oBrw:aRow[ 1 ]
            cFile    := ModuleToFile( cModule )
            if Empty( cFile )
               cText := ""
            else
               cText := MemoRead( cFile )
            endif
            cUpper   := Upper( cText )
            oSay:Refresh()
            oGet:Refresh()
         endif
         LocateFunction( oBrw:aRow[ 2 ], cText, cUpper, oGet )
         return nil
         >

      :CreateFromCode()
   END

   @ 20,420 SAY oSay PROMPT { || cFile } SIZE nWd - 440, 26 PIXEL CENTER OF oDlg ;
      COLOR CLR_BLACK, oBrw:nRecSelColor

   @ 50,420 GET oGet VAR cText MEMO SIZE nWd - 440, 530 PIXEL OF oDlg FONT oFixed

   ACTIVATE DIALOG oDlg CENTERED ;
      ON INIT LocateFunction( aFunc[ 1, 2 ], cText, cUpper, oGet )
   RELEASE FONT oFont, oFixed

return nil

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

function ReadFuncs()

   local cText, aLines, cLine, cFunc, cFunc1, cFunc2, n, i
   local cModule  := ""
   local aFunc    := {}

   if "Borland" $ HB_Compiler() .and. ! lIsDir( cBccFolder )
      MsgStop( cBccFolder + " not found" )
      return nil
   endif

   if "Microsoft" $ HB_Compiler() .and. ! lIsDir( cMSVCFolder )
      MsgStop( cMSVCFolder + " not found" )
      return nil
   endif

   if ! File( "fiveh.lst" )
     if File( cBccFolder + "bin\tlib.exe" )
        WaitRun( cBccFolder + "bin\tlib.exe ..\lib\fiveh.lib, fiveh.lst" )
     else
        WaitRun( cMSVCFolder + "bin\lib.exe ..\lib\fiveh32.lib, fiveh32.lst" )      // MsgStop( cMSVCFolder + "bin\lib.exe ..\lib\fiveh32.lib, fiveh.lst" )
     endif
     SysWait( .2 )
   endif

   if File( "fiveh.lst" )
      cText    := MemoRead( "fiveh.lst" )
   elseif File( "fiveh32.lst" )
      cText    := MemoRead( "fiveh32.lst" )
   endif
   aLines   := AMERGE( aLines, HB_ATokens( cText, CRLF ) )                             //   aLines   := HB_ATokens( cText, CRLF )

   if ! File( "fivehc.lst" )
      if File( cBccFolder + "bin\tlib.exe" )
         WaitRun( cBccFolder + "bin\tlib.exe ..\lib\fivehc.lib, fivehc.lst" )
      else
         WaitRun( cMSVCFolder + "bin\lib.exe ..\lib\fivehc32.lib, fivehc32.lst" )   // MsgStop( cMSVCFolder + "bin\lib.exe ..\lib\fiveh32c.lib, fivehc.lst" )
      endif
       SysWait( .2 )
   endif

   if File( "fivehc.lst" )
      cText    := MemoRead( "fivehc.lst" )
   elseif File( "fivehc32.lst" )                                                            //   elseif File( "fiveh32c.lst" )
      cText    := MemoRead( "fivehc32.lst" )                                        //      cText    := MemoRead( "fiveh32c.lst" )
   endif
   aLines   := AMERGE( aLines, HB_ATokens( cText, CRLF ) )

   for n := 2 to Len( aLines )
      cLine    := aLines[ n ]
      if Empty( cLine )
         LOOP
      endif
      if Left( cLine, 1 ) == Chr( 9 )
         for i := 1 to 2
            cFunc    := TOKEN( cLine, , i )
            if cFunc = "_HB_FUN_"
               AAdd( aFunc, { cModule, AFTERATNUM( "_HB_FUN_", cFunc ) } )
            else
               EXIT
            endif
         next
      else
         cModule  := AllTrim( TOKEN( cLine,,1 ) )
      endif
   next

   ASort( aFunc, , , { |x,y| If( x[ 1 ] == y[ 1 ], x[ 2 ] < y[ 2 ], x[ 1 ] < y[ 1 ] ) } )

return aFunc

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

static function ModuleToFile( cModule )

   local cSpec := "..\source\" + cModule + ".*"
   local cFile := ""
   local aDir

   aDir     := DirectoryRecurse( TrueName( cSpec ) )
   if !Empty( aDir )
      cFile    := aDir[ 1, 1 ]
   endif

return cFile

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

static function LocateFunction( cFunc, cText, cUpper, oGet )

   local nRow     := 1
   local aSeek    := {}
   local nPos

   if !Empty( cText )

      DEFAULT cUpper  := Upper( cText )

      aSeek    := {  "FUNCTION " + cFunc + "(", ;
                     "FUNCTION " + cFunc + " ", ;
                     "CLASS " + cFunc, ;
                     "HB_FUNC( " + cFunc + " )", ;
                     "HB_FUNC (" + cFunc + ")" }

      nPos     := AAT( aSeek, cUpper )

      if nPos > 0
         nRow     := OCCURS( CRLF, LEFT( cText, nPos ) )
      endif

      GetSetTopRow( oGet, nRow )

   endif

return nRow

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

static function GetSetTopRow( oGet, nRow )

   local nTopRow     := oGet:SendMsg( EM_GETFIRSTVISIBLELINE )

   oGet:SendMsg( EM_LINESCROLL, 0, nRow - nTopRow )

return nil

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

]]>
i have tried with fivehc32.lib and fiveh32.lib but doesn't works.
i have posted below fwfuncs.prg corrected from some oversights (I left the wrong lines as comments)
pay attention to the updated version of MS VC22 is now numbered: \14.43.34808\
i have tried to change bin\Hostx64\x86\ with bin\Hostx86\x86\

i have tried also from from the command prompt with libs copied in the same directory bin but i have this result:
Microsoft (R) Library Manager Version 14.43.34809.0
Copyright (C) Microsoft Corporation. All rights reserved.
LINK : fatal error LNK1181: cannot open input file 'fiveh32.lib,'

now i use the LST files that you have posted, when you have time you try to see what is not working.
thanks for attention,
Marzio

Code: Select all | Expand

#include "fivewin.ch"

#define EM_LINESCROLL           182
#define EM_GETFIRSTVISIBLELINE  0x00CE


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

static cBccFolder  := "c:\bcc77\"   // your bcc folder here
static cMSVCFolder := "c:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34808\bin\Hostx64\x86\"   // your msvc folder here

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

function Main()

   local aFunc
   local oDlg, nWd, oFont, oFixed, oBrw, oSay, oGet
   local cModule, cFile, cText, cUpper
   local aTemp := {}
   local cSymbols := ""

   SetMGetColorFocus()

   aFunc := ReadFuncs()
   if Empty( aFunc )
      return nil
   endif

   AEval( aFunc, { | a | AAdd( aTemp, a[ 2 ] ) } )
   ASort( aTemp )
   // XBrowse( aTemp )
   AEval( aTemp, { | cName | cSymbols += "extern " + cName + CRLF } )
   hb_memoWrit( "symbols.txt", cSymbols )
   // fw_memoEdit( cSymbols )

   cModule  := aFunc[ 1, 1 ]
   cFile    := ModuleToFile( cModule )
   cText    := If( Empty( cFile ), "", MemoRead( cFile ) )

   DEFINE FONT oFont  NAME "TAHOMA" SIZE 0,-13
   DEFINE FONT oFixed NAME "LUCIDA CONSOLE" SIZE 0,-14

   nWd      := Int( ScreenWidth() * 0.9 )

   DEFINE DIALOG oDlg SIZE nWd,600 PIXEL TRUEPIXEL FONT oFont ;
      TITLE FWVERSION + ": Functions and Classes"

   @ 20,20 XBROWSE oBrw SIZE 400,-20 PIXEL OF oDlg ;
      DATASOURCE aFunc COLUMNS 1,2 ;
      HEADERS "MODULE", "FUNCTION" ;
      COLSIZES "BBBBBBBBBB" ;
      CELL LINES NOBORDER FOOTERS AUTOSORT

   WITH OBJECT oBrw
      :bRecSelData   := { || oBrw:KeyNo }
      :nRecSelWidth  := "9999"
      :bRecSelHeader := { || "SlNo" }
      :bRecSelFooter := { || oBrw:nLen }

      :lHScroll      := .f.
      :lSeekBar      := .t.
      :bClrEdits     := { || { CLR_HRED, CLR_YELLOW } }
      :lSeekWild     := .t.
      :nStretchCol   := 2

      :bChange       := <||
         if !( cModule == oBrw:aRow[ 1 ] )
            cModule  := oBrw:aRow[ 1 ]
            cFile    := ModuleToFile( cModule )
            if Empty( cFile )
               cText := ""
            else
               cText := MemoRead( cFile )
            endif
            cUpper   := Upper( cText )
            oSay:Refresh()
            oGet:Refresh()
         endif
         LocateFunction( oBrw:aRow[ 2 ], cText, cUpper, oGet )
         return nil
         >

      :CreateFromCode()
   END

   @ 20,420 SAY oSay PROMPT { || cFile } SIZE nWd - 440, 26 PIXEL CENTER OF oDlg ;
      COLOR CLR_BLACK, oBrw:nRecSelColor

   @ 50,420 GET oGet VAR cText MEMO SIZE nWd - 440, 530 PIXEL OF oDlg FONT oFixed

   ACTIVATE DIALOG oDlg CENTERED ;
      ON INIT LocateFunction( aFunc[ 1, 2 ], cText, cUpper, oGet )
   RELEASE FONT oFont, oFixed

return nil

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

function ReadFuncs()

   local cText, aLines, cLine, cFunc, cFunc1, cFunc2, n, i
   local cModule  := ""
   local aFunc    := {}

   if "Borland" $ HB_Compiler() .and. ! lIsDir( cBccFolder )
      MsgStop( cBccFolder + " not found" )
      return nil
   endif

   if "Microsoft" $ HB_Compiler() .and. ! lIsDir( cMSVCFolder )
      MsgStop( cMSVCFolder + " not found" )
      return nil
   endif

   if ! File( "fiveh.lst" )
     if File( cBccFolder + "bin\tlib.exe" )
        WaitRun( cBccFolder + "bin\tlib.exe ..\lib\fiveh.lib, fiveh.lst" )
     else
        WaitRun( cMSVCFolder + "bin\lib.exe ..\lib\fiveh32.lib, fiveh32.lst" )      // MsgStop( cMSVCFolder + "bin\lib.exe ..\lib\fiveh32.lib, fiveh.lst" )
     endif
     SysWait( .2 )
   endif

   if File( "fiveh.lst" )
      cText    := MemoRead( "fiveh.lst" )
   elseif File( "fiveh32.lst" )
      cText    := MemoRead( "fiveh32.lst" )
   endif
   aLines   := AMERGE( aLines, HB_ATokens( cText, CRLF ) )                             //   aLines   := HB_ATokens( cText, CRLF )

   if ! File( "fivehc.lst" )
      if File( cBccFolder + "bin\tlib.exe" )
         WaitRun( cBccFolder + "bin\tlib.exe ..\lib\fivehc.lib, fivehc.lst" )
      else
         WaitRun( cMSVCFolder + "bin\lib.exe ..\lib\fivehc32.lib, fivehc32.lst" )   // MsgStop( cMSVCFolder + "bin\lib.exe ..\lib\fiveh32c.lib, fivehc.lst" )
      endif
       SysWait( .2 )
   endif

   if File( "fivehc.lst" )
      cText    := MemoRead( "fivehc.lst" )
   elseif File( "fivehc32.lst" )                                                            //   elseif File( "fiveh32c.lst" )
      cText    := MemoRead( "fivehc32.lst" )                                        //      cText    := MemoRead( "fiveh32c.lst" )
   endif
   aLines   := AMERGE( aLines, HB_ATokens( cText, CRLF ) )

   for n := 2 to Len( aLines )
      cLine    := aLines[ n ]
      if Empty( cLine )
         LOOP
      endif
      if Left( cLine, 1 ) == Chr( 9 )
         for i := 1 to 2
            cFunc    := TOKEN( cLine, , i )
            if cFunc = "_HB_FUN_"
               AAdd( aFunc, { cModule, AFTERATNUM( "_HB_FUN_", cFunc ) } )
            else
               EXIT
            endif
         next
      else
         cModule  := AllTrim( TOKEN( cLine,,1 ) )
      endif
   next

   ASort( aFunc, , , { |x,y| If( x[ 1 ] == y[ 1 ], x[ 2 ] < y[ 2 ], x[ 1 ] < y[ 1 ] ) } )

return aFunc

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

static function ModuleToFile( cModule )

   local cSpec := "..\source\" + cModule + ".*"
   local cFile := ""
   local aDir

   aDir     := DirectoryRecurse( TrueName( cSpec ) )
   if !Empty( aDir )
      cFile    := aDir[ 1, 1 ]
   endif

return cFile

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

static function LocateFunction( cFunc, cText, cUpper, oGet )

   local nRow     := 1
   local aSeek    := {}
   local nPos

   if !Empty( cText )

      DEFAULT cUpper  := Upper( cText )

      aSeek    := {  "FUNCTION " + cFunc + "(", ;
                     "FUNCTION " + cFunc + " ", ;
                     "CLASS " + cFunc, ;
                     "HB_FUNC( " + cFunc + " )", ;
                     "HB_FUNC (" + cFunc + ")" }

      nPos     := AAT( aSeek, cUpper )

      if nPos > 0
         nRow     := OCCURS( CRLF, LEFT( cText, nPos ) )
      endif

      GetSetTopRow( oGet, nRow )

   endif

return nRow

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

static function GetSetTopRow( oGet, nRow )

   local nTopRow     := oGet:SendMsg( EM_GETFIRSTVISIBLELINE )

   oGet:SendMsg( EM_LINESCROLL, 0, nRow - nTopRow )

return nil

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

]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: String functions UTF8 compatible :: Reply by Antonio Linares]]> 2025-04-13T23:43:39-06:00 2025-04-13T23:43:39-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45618&p=278969#p278969 <![CDATA[FiveWin for Harbour/xHarbour :: Re: String functions UTF8 compatible :: Reply by marzio]]> 2025-04-14T01:23:07-06:00 2025-04-14T01:23:07-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45618&p=278970#p278970 However, the fact remains that from the prompt of the commands does not extract the file at 32 and at 64 bit.]]> However, the fact remains that from the prompt of the commands does not extract the file at 32 and at 64 bit.]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: String functions UTF8 compatible :: Reply by Antonio Linares]]> 2025-04-14T01:41:51-06:00 2025-04-14T01:41:51-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45618&p=278972#p278972 <![CDATA[FiveWin for Harbour/xHarbour :: Re: FWH Zebra QR test :: Reply by richard-service]]> 2025-04-15T00:07:31-06:00 2025-04-15T00:07:31-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45597&p=278983#p278983
It's working fine.]]>

It's working fine.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: :MakeTotals() and picture :: Author damianodec]]> 2025-04-15T01:35:50-06:00 2025-04-15T01:35:50-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45622&p=278984#p278984 thisi is my xbrowse
Image
this is code

Code: Select all | Expand

	@ 40,10 XBROWSE oBrw SIZE -10,-50 PIXEL ;
	  RECORDSET oRs ;
	  COLUMNS "cdcli", "rascl", "totale",  "pezzi" ;
	  HEADERS "CLIENTE", "RAGIONE SOCIALE", "TOTALE EURO", "TOTALE PEZZI" ;
	  PICTURE NIL,NIL, "@ZE 99,999,999.99", "@ZE 99999,999.999" ;
	  FOOTERS ;
	  OF oDlg2	  
	
	oBrw:nMarqueeStyle       := MARQSTYLE_HIGHLROW
	oBrw:nColDividerStyle    := LINESTYLE_BLACK
	oBrw:nRowDividerStyle    := LINESTYLE_BLACK
	oBrw:lColDividerComplete := .T. 
	oBrw:lRecordSelector     := .t.
	oBrw:lHScroll            := .T.
	oBrw:lVScroll            := .T.
	oBrw:lExcelCellWise 	 := .t.
	
	oBrw:bClrSelFocus = { || { 16777215, 15512898 } }   
	oBrw:bClrSel = { || { 16777215, 15512898 } }
	oBrw:bClrStd := {|| {CLR_BLACK, iif( oBrw:Keyno() % 2 = 0, CLR_SFBRWP, CLR_SFBRWD  ) } }
	
    oBrw:CreateFromCode()
	
    WITH OBJECT oBrw
		:aCols[03]:nFooterType := AGGR_SUM
		:aCols[04]:nFooterType := AGGR_SUM	
		:MakeTotals()
	END		

why does the first column of totals have that picture ?

I Use FiveWin for xHarbour 24.02 - Feb. 2024 - Embarcadero C++ 7.00 for Win32]]>
thisi is my xbrowse
Image
this is code

Code: Select all | Expand

	@ 40,10 XBROWSE oBrw SIZE -10,-50 PIXEL ;
	  RECORDSET oRs ;
	  COLUMNS "cdcli", "rascl", "totale",  "pezzi" ;
	  HEADERS "CLIENTE", "RAGIONE SOCIALE", "TOTALE EURO", "TOTALE PEZZI" ;
	  PICTURE NIL,NIL, "@ZE 99,999,999.99", "@ZE 99999,999.999" ;
	  FOOTERS ;
	  OF oDlg2	  
	
	oBrw:nMarqueeStyle       := MARQSTYLE_HIGHLROW
	oBrw:nColDividerStyle    := LINESTYLE_BLACK
	oBrw:nRowDividerStyle    := LINESTYLE_BLACK
	oBrw:lColDividerComplete := .T. 
	oBrw:lRecordSelector     := .t.
	oBrw:lHScroll            := .T.
	oBrw:lVScroll            := .T.
	oBrw:lExcelCellWise 	 := .t.
	
	oBrw:bClrSelFocus = { || { 16777215, 15512898 } }   
	oBrw:bClrSel = { || { 16777215, 15512898 } }
	oBrw:bClrStd := {|| {CLR_BLACK, iif( oBrw:Keyno() % 2 = 0, CLR_SFBRWP, CLR_SFBRWD  ) } }
	
    oBrw:CreateFromCode()
	
    WITH OBJECT oBrw
		:aCols[03]:nFooterType := AGGR_SUM
		:aCols[04]:nFooterType := AGGR_SUM	
		:MakeTotals()
	END		

why does the first column of totals have that picture ?

I Use FiveWin for xHarbour 24.02 - Feb. 2024 - Embarcadero C++ 7.00 for Win32]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: :MakeTotals() and picture :: Reply by acuellar]]> 2025-04-15T05:50:07-06:00 2025-04-15T05:50:07-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45622&p=278985#p278985
Maybe

Code: Select all | Expand

'
   :aCols[03]:cEditPicture:="99,999,999.99"
]]>

Maybe

Code: Select all | Expand

'
   :aCols[03]:cEditPicture:="99,999,999.99"
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: :MakeTotals() and picture :: Reply by damianodec]]> 2025-04-15T06:03:15-06:00 2025-04-15T06:03:15-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45622&p=278986#p278986
I'd like total like the detail with two decimals]]>

I'd like total like the detail with two decimals]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: :MakeTotals() and picture :: Reply by karinha]]> 2025-04-15T07:25:47-06:00 2025-04-15T07:25:47-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45622&p=278988#p278988
https://forums.fivetechsoft.com/viewtopic.php?t=20973

https://www.fivetechsupport.com/forums/ ... p?p=173606

Regards, saludos.]]>

https://forums.fivetechsoft.com/viewtopic.php?t=20973

https://www.fivetechsupport.com/forums/ ... p?p=173606

Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: :MakeTotals() and picture :: Reply by cmsoft]]> 2025-04-15T11:56:06-06:00 2025-04-15T11:56:06-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45622&p=278990#p278990 Tienes una configuracion diferente?

Damian, the thousands separator is , and the decimal separator is . by default.
Do you have a different configuration?]]>
Tienes una configuracion diferente?

Damian, the thousands separator is , and the decimal separator is . by default.
Do you have a different configuration?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: :MakeTotals() and picture :: Reply by cnavarro]]> 2025-04-15T22:56:25-06:00 2025-04-15T22:56:25-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45622&p=278996#p278996 <![CDATA[FiveWin for Harbour/xHarbour :: Get Multiline with picture :: Author oliveiros junior]]> 2025-04-16T08:07:11-06:00 2025-04-16T08:07:11-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45626&p=279007#p279007
Does anyone know if it is possible to add a picture option to a multiline get?

Thanks in advance for the information.

Best regards,

Oliveiros Junior]]>

Does anyone know if it is possible to add a picture option to a multiline get?

Thanks in advance for the information.

Best regards,

Oliveiros Junior]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Get Multiline with picture :: Reply by cnavarro]]> 2025-04-16T08:16:54-06:00 2025-04-16T08:16:54-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45626&p=279008#p279008
Maybe I should try the EDIT control ( look in fivewin.ch )

Code: Select all | Expand

#command @ <nRow>, <nCol> EDIT [ <oEdit> VAR ] <uVar> ;
            [ <dlg: OF, WINDOW, DIALOG> <oWnd> ] ;
            [ <lMemo: MEMO,TEXT,MULTILINE> ] ;
           ...
]]>

Maybe I should try the EDIT control ( look in fivewin.ch )

Code: Select all | Expand

#command @ <nRow>, <nCol> EDIT [ <oEdit> VAR ] <uVar> ;
            [ <dlg: OF, WINDOW, DIALOG> <oWnd> ] ;
            [ <lMemo: MEMO,TEXT,MULTILINE> ] ;
           ...
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Get Multiline with picture :: Reply by oliveiros junior]]> 2025-04-16T08:50:00-06:00 2025-04-16T08:50:00-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45626&p=279009#p279009
What I need is to create a fixed-length GET, for example 20 characters, and when it reaches this limit it moves to the next line of the same GET, hence the use of MEMO, but I need to format the characters with @!.

Att.,

Oliveiros Junior]]>

What I need is to create a fixed-length GET, for example 20 characters, and when it reaches this limit it moves to the next line of the same GET, hence the use of MEMO, but I need to format the characters with @!.

Att.,

Oliveiros Junior]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Get Multiline with picture :: Reply by karinha]]> 2025-04-16T09:08:31-06:00 2025-04-16T09:08:31-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45626&p=279010#p279010

Code: Select all | Expand

   REDEFINE GET oGet[17] VAR wTEXTO MULTILINE ID 217 OF oDlg  ;
      COLOR CLR_BLUE, CLR_WHITE UPDATE FONT oFont             ;
      ON CHANGE( SB_LimitText( oGet[17], oSay, oTransmite ) ) // By AleSB

   oGet[17]:bGotFocus = { || oGet[17]:SetSel( 0, 0 ),;
                             oGet[17]:Goto( oGet[17]:GetLineCount() ),;
                             __Keyboard( Chr( VK_HOME ) ) }

Outro, Other:

      REDEFINE GET oGet[4] VAR cDest ID 21 OF oDlgEnv MEMO        ;
         FONT oFont1 UPDATE COLORS nRgb(0,0,220),nRgb(253,252,213)    ;
         VALID( CHECA_GET_Dest( ALLTRIM( cDest ) ) )

      oGet[4]:bLostFocus := { || oGet[4]:SetColor( CLR_BLACK, CLR_WHITE) }
      oGet[4]:bGotFocus  := { || oGet[4]:SetColor( CLR_BLACK, nRGB( 255,255,45 )), oGet[4]:setsel(0,0) }

      oGet[4]:cToolTip := OemToAnsi( "Para: Contato(Email) Campo Obrigat¢rio" )

      // Para que o GET com MEMO possa "pular" Para o Proximo GET. Afff!!
      oGet[4]:bKeyDown:={|nKey|IF(nKey==VK_RETURN, VER_FOCO_GET4( oGet ),)}

FUNCTION VER_FOCO_GET4( oGet ) // GET 5 - 24/07/2013 - FWH13.06

   // Posiciona o Cursor na 1a. Letra do Email Problemas no FOCO do MEMO
   oGet[5]:SetFocus()   // nao funciona com XFOCUS()
   oGet[5]:bGotFocus := { || oGet[5]:SetPos(0), Nil }

RETURN( .T. )

FUNCTION VER_FOCO_GET5( oGet ) // GET 5 - 24/07/2013

   // Posiciona o Cursor na 1a. Letra do Email Problemas no FOCO do MEMO
   oGet[6]:SetFocus()   // nao funciona com XFOCUS()
   oGet[6]:bGotFocus := { || oGet[6]:SetPos(0), Nil }

RETURN( .T. )

FUNCTION VER_FOCO_GET6( oGet ) // GET 6 - 24/07/2013
   // Posiciona o Cursor na 1a. Letra do Email Problemas no FOCO do MEMO
   oGet[6]:bGotFocus := { || oGet[6]:SetPos(0), Nil }
   oGet[5]:SetFocus()  // nao funciona com XFOCUS()
   oGet[5]:bGotFocus := { || oGet[5]:SetPos(0), Nil }

RETURN( .T. )


FUNCTION SB_LimitText( oGet, oSay, oTransmite )

   ///////////////////////////////////////////////////////////////////////////
   // Autor..........: Peguei no Forum FiveWin Brasil                       //
   // Modificaçoes...: Ale SB - Soft Camus                                  //
   // Descricao......: Restringe o Tamanho de um Texto.                     //
   // Parametros ==>                                                        //
   //  - oGet  : oBjeto Get.                                                //
   //  - nSize : Tamanho que deve ter o Texto.                              //
   // Dependencias ==>                                                      //
   // Retorno ==> nil                                                       //
   ///////////////////////////////////////////////////////////////////////////

   LOCAL nTam, nSize
  
   DEFAULT nSize := 999  // maximo ‚ 1000 caracteres

   nTam := LEN( ALLTRIM( oGet:cText ) )

   IF nTam > nSize

      MsgInfo( "A Mensagem da Carta já Alcançou o Tamanho Limite de " + ;
               "1000 Caracteres Permitidos Pela Sefaz!",                ;
               "..:: Atenção ::.." )

      oGet:cText := Substr(oGet:cText, 1, nTam-1)

      RETURN( .F. )

   ENDIF

   // Mostra a qtde de caracteres digitados no SAY
   oSay:VarPut( Strzero( nTam, 3, 0 ) )
   oSay:Refresh()

   IF nTam <= 14 // caracteres

      lLigaBotao := .F.

      // Botao da Transmissao
      oTransmite:Disable()
      oTransmite:Refresh()

   ELSE

      lLigaBotao := .T.

      // Botao da Transmissao
      oTransmite:Enable()
      oTransmite:Refresh()

   ENDIF

RETURN( .T. )
Regards, saludos. - kapiabafwh@gmail.com]]>

Code: Select all | Expand

   REDEFINE GET oGet[17] VAR wTEXTO MULTILINE ID 217 OF oDlg  ;
      COLOR CLR_BLUE, CLR_WHITE UPDATE FONT oFont             ;
      ON CHANGE( SB_LimitText( oGet[17], oSay, oTransmite ) ) // By AleSB

   oGet[17]:bGotFocus = { || oGet[17]:SetSel( 0, 0 ),;
                             oGet[17]:Goto( oGet[17]:GetLineCount() ),;
                             __Keyboard( Chr( VK_HOME ) ) }

Outro, Other:

      REDEFINE GET oGet[4] VAR cDest ID 21 OF oDlgEnv MEMO        ;
         FONT oFont1 UPDATE COLORS nRgb(0,0,220),nRgb(253,252,213)    ;
         VALID( CHECA_GET_Dest( ALLTRIM( cDest ) ) )

      oGet[4]:bLostFocus := { || oGet[4]:SetColor( CLR_BLACK, CLR_WHITE) }
      oGet[4]:bGotFocus  := { || oGet[4]:SetColor( CLR_BLACK, nRGB( 255,255,45 )), oGet[4]:setsel(0,0) }

      oGet[4]:cToolTip := OemToAnsi( "Para: Contato(Email) Campo Obrigat¢rio" )

      // Para que o GET com MEMO possa "pular" Para o Proximo GET. Afff!!
      oGet[4]:bKeyDown:={|nKey|IF(nKey==VK_RETURN, VER_FOCO_GET4( oGet ),)}

FUNCTION VER_FOCO_GET4( oGet ) // GET 5 - 24/07/2013 - FWH13.06

   // Posiciona o Cursor na 1a. Letra do Email Problemas no FOCO do MEMO
   oGet[5]:SetFocus()   // nao funciona com XFOCUS()
   oGet[5]:bGotFocus := { || oGet[5]:SetPos(0), Nil }

RETURN( .T. )

FUNCTION VER_FOCO_GET5( oGet ) // GET 5 - 24/07/2013

   // Posiciona o Cursor na 1a. Letra do Email Problemas no FOCO do MEMO
   oGet[6]:SetFocus()   // nao funciona com XFOCUS()
   oGet[6]:bGotFocus := { || oGet[6]:SetPos(0), Nil }

RETURN( .T. )

FUNCTION VER_FOCO_GET6( oGet ) // GET 6 - 24/07/2013
   // Posiciona o Cursor na 1a. Letra do Email Problemas no FOCO do MEMO
   oGet[6]:bGotFocus := { || oGet[6]:SetPos(0), Nil }
   oGet[5]:SetFocus()  // nao funciona com XFOCUS()
   oGet[5]:bGotFocus := { || oGet[5]:SetPos(0), Nil }

RETURN( .T. )


FUNCTION SB_LimitText( oGet, oSay, oTransmite )

   ///////////////////////////////////////////////////////////////////////////
   // Autor..........: Peguei no Forum FiveWin Brasil                       //
   // Modificaçoes...: Ale SB - Soft Camus                                  //
   // Descricao......: Restringe o Tamanho de um Texto.                     //
   // Parametros ==>                                                        //
   //  - oGet  : oBjeto Get.                                                //
   //  - nSize : Tamanho que deve ter o Texto.                              //
   // Dependencias ==>                                                      //
   // Retorno ==> nil                                                       //
   ///////////////////////////////////////////////////////////////////////////

   LOCAL nTam, nSize
  
   DEFAULT nSize := 999  // maximo ‚ 1000 caracteres

   nTam := LEN( ALLTRIM( oGet:cText ) )

   IF nTam > nSize

      MsgInfo( "A Mensagem da Carta já Alcançou o Tamanho Limite de " + ;
               "1000 Caracteres Permitidos Pela Sefaz!",                ;
               "..:: Atenção ::.." )

      oGet:cText := Substr(oGet:cText, 1, nTam-1)

      RETURN( .F. )

   ENDIF

   // Mostra a qtde de caracteres digitados no SAY
   oSay:VarPut( Strzero( nTam, 3, 0 ) )
   oSay:Refresh()

   IF nTam <= 14 // caracteres

      lLigaBotao := .F.

      // Botao da Transmissao
      oTransmite:Disable()
      oTransmite:Refresh()

   ELSE

      lLigaBotao := .T.

      // Botao da Transmissao
      oTransmite:Enable()
      oTransmite:Refresh()

   ENDIF

RETURN( .T. )
Regards, saludos. - kapiabafwh@gmail.com]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Copying controls :: Author Natter]]> 2025-04-14T01:35:52-06:00 2025-04-14T01:35:52-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45620&p=278971#p278971 "A" there is a control - xBrowser. In the process of work I need to copy it to the dialog "B" (ocopy())/.
How can I do this ?]]>
"A" there is a control - xBrowser. In the process of work I need to copy it to the dialog "B" (ocopy())/.
How can I do this ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copying controls :: Reply by Antonio Linares]]> 2025-04-14T01:55:02-06:00 2025-04-14T01:55:02-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45620&p=278973#p278973
Maybe you can just change the parent of the control using SetParent()]]>

Maybe you can just change the parent of the control using SetParent()]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copying controls :: Reply by Natter]]> 2025-04-14T02:05:13-06:00 2025-04-14T02:05:13-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45620&p=278974#p278974 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Copying controls :: Reply by Natter]]> 2025-04-14T02:23:44-06:00 2025-04-14T02:23:44-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45620&p=278975#p278975

Code: Select all | Expand

oNew:=ocopy(oDlg_1:aControls[1])
aadd(oDlg_2:aControls, oNew)
oDlg_2:Refresh()
]]>

Code: Select all | Expand

oNew:=ocopy(oDlg_1:aControls[1])
aadd(oDlg_2:aControls, oNew)
oDlg_2:Refresh()
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copying controls :: Reply by Antonio Linares]]> 2025-04-14T06:29:36-06:00 2025-04-14T06:29:36-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45620&p=278976#p278976
Please try it this way:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    USE customer

    XBROWSER SETUP BrwSetup( oBrw ) 

return nil    

function BrwSetup( oBrw )

   local oDlg, oBrw2, hWnd

   DEFINE DIALOG oDlg SIZE 800, 600 

   @ 1, 1 XBROWSE oBrw2 OF oDlg SIZE 600, 500 

   oBrw2:CreateFromCode()

   ACTIVATE DIALOG oDlg CENTERED NOWAIT ;
      ON INIT ( hWnd := oBrw2:hWnd, oBrw2 := OClone( oBrw ), oBrw2:hWnd := hWnd, oBrw2:oWnd := oDlg, .T. ) 

return nil 
]]>

Please try it this way:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    USE customer

    XBROWSER SETUP BrwSetup( oBrw ) 

return nil    

function BrwSetup( oBrw )

   local oDlg, oBrw2, hWnd

   DEFINE DIALOG oDlg SIZE 800, 600 

   @ 1, 1 XBROWSE oBrw2 OF oDlg SIZE 600, 500 

   oBrw2:CreateFromCode()

   ACTIVATE DIALOG oDlg CENTERED NOWAIT ;
      ON INIT ( hWnd := oBrw2:hWnd, oBrw2 := OClone( oBrw ), oBrw2:hWnd := hWnd, oBrw2:oWnd := oDlg, .T. ) 

return nil 
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copying controls :: Reply by Natter]]> 2025-04-16T07:16:08-06:00 2025-04-16T07:16:08-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45620&p=279003#p279003

Code: Select all | Expand

oCtl:=ocopy(oDlg_1:aControls[1])
oDlg_2:AddControl(oCtl)
]]>

Code: Select all | Expand

oCtl:=ocopy(oDlg_1:aControls[1])
oDlg_2:AddControl(oCtl)
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copying controls :: Reply by cnavarro]]> 2025-04-16T07:30:50-06:00 2025-04-16T07:30:50-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45620&p=279004#p279004 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Copying controls :: Reply by Natter]]> 2025-04-16T07:48:39-06:00 2025-04-16T07:48:39-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45620&p=279005#p279005 ]]> ]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Copying controls :: Reply by cnavarro]]> 2025-04-16T08:00:43-06:00 2025-04-16T08:00:43-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45620&p=279006#p279006 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Copying controls :: Reply by Natter]]> 2025-04-16T09:40:58-06:00 2025-04-16T09:40:58-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45620&p=279013#p279013 oCtl:oWnd:=oDlg_2
oDlg_2:AddControl(oCtl)]]>
oCtl:oWnd:=oDlg_2
oDlg_2:AddControl(oCtl)]]>
<![CDATA[FiveWin for Harbour/xHarbour :: No difference in tabs of lisbox :: Author driessen]]> 2025-04-16T06:21:43-06:00 2025-04-16T06:21:43-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45625&p=279001#p279001
I have this screen using listbox. In the listbox I have several tabs. The are working just fine. Only the colors are bothering me.
Since the tabs are all white, you hardley can see the differene between them

This is how my screen looks like:

Image

Can anyone tell me how to change the color of everything that is white on this screen, except the listbox itself?

Thanks a lot in advance for any help.]]>

I have this screen using listbox. In the listbox I have several tabs. The are working just fine. Only the colors are bothering me.
Since the tabs are all white, you hardley can see the differene between them

This is how my screen looks like:

Image

Can anyone tell me how to change the color of everything that is white on this screen, except the listbox itself?

Thanks a lot in advance for any help.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: No difference in tabs of lisbox :: Reply by cnavarro]]> 2025-04-16T06:34:40-06:00 2025-04-16T06:34:40-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45625&p=279002#p279002 You use TFolderEx ?]]> You use TFolderEx ?]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: No difference in tabs of lisbox :: Reply by karinha]]> 2025-04-16T12:48:42-06:00 2025-04-16T12:48:42-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45625&p=279016#p279016

Code: Select all | Expand

   oSkinB = TSkinButton():New()

   oSkinB:nClrBorder0_N := RGB( 249, 194, 179 )
   oSkinB:nClrBorder1_N := RGB( 181, 61, 29 )

   oSkinB:aClrNormal    := { { .50, nRGB( 210, 235, 216 ), nRGB( 199,182,231 ) } }
                                              //  118, 96, 138 / 135, 121, 78

   SkinButtons( oSkinB )
Or show how you are doing it, because the LISTBOX has nothing to do with the Buttons.

Regards, saludos]]>

Code: Select all | Expand

   oSkinB = TSkinButton():New()

   oSkinB:nClrBorder0_N := RGB( 249, 194, 179 )
   oSkinB:nClrBorder1_N := RGB( 181, 61, 29 )

   oSkinB:aClrNormal    := { { .50, nRGB( 210, 235, 216 ), nRGB( 199,182,231 ) } }
                                              //  118, 96, 138 / 135, 121, 78

   SkinButtons( oSkinB )
Or show how you are doing it, because the LISTBOX has nothing to do with the Buttons.

Regards, saludos]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: No difference in tabs of lisbox :: Reply by karinha]]> 2025-04-17T11:03:48-06:00 2025-04-17T11:03:48-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45625&p=279027#p279027

Code: Select all | Expand

    DEFINE DIALOG oDlg RESOURCE "FOLDER"           ;
           TITLE "Gerenciamento dos Devedores - "+ ;
                 "Cadastro - Inclusão " +          ;
                 "/ Alteração"                     ;
           COLORS CLR_BLACK, nRGB( 193, 205, 205 ) ;
           ICON oIco

    ODLG:LHELPICON := .F.

    REDEFINE FOLDER oFld ID 101 OF oDlg                          ;
             PROMPT "&Dados Comerciais ", "&Complemento ",       ;
                    "&Inadimplencia "                            ;
             DIALOGS "FLD_GENERAL", "FLD_GENERAL_2",             ;
                     "FLD_GENERAL_3"                             ;
             BITMAPS "MFONE", "EXPLORER2", "COMP16"              ;
             TABCOLOR   CLR_HBLUE                                ;
             FOCUSCOLOR CLR_HRED                                 ;
             COLORS nRGB( 127, 127, 127 ), nRGB( 143, 188, 143 ) ;
             ADJUST

    oFld:oFont := FntArial

    oFld:SetOption( 1 )

    oFld:Show()

    oFld:aEnable[ 1 ] := .T.
    oFld:Refresh()
Regards, saludos.]]>

Code: Select all | Expand

    DEFINE DIALOG oDlg RESOURCE "FOLDER"           ;
           TITLE "Gerenciamento dos Devedores - "+ ;
                 "Cadastro - Inclusão " +          ;
                 "/ Alteração"                     ;
           COLORS CLR_BLACK, nRGB( 193, 205, 205 ) ;
           ICON oIco

    ODLG:LHELPICON := .F.

    REDEFINE FOLDER oFld ID 101 OF oDlg                          ;
             PROMPT "&Dados Comerciais ", "&Complemento ",       ;
                    "&Inadimplencia "                            ;
             DIALOGS "FLD_GENERAL", "FLD_GENERAL_2",             ;
                     "FLD_GENERAL_3"                             ;
             BITMAPS "MFONE", "EXPLORER2", "COMP16"              ;
             TABCOLOR   CLR_HBLUE                                ;
             FOCUSCOLOR CLR_HRED                                 ;
             COLORS nRGB( 127, 127, 127 ), nRGB( 143, 188, 143 ) ;
             ADJUST

    oFld:oFont := FntArial

    oFld:SetOption( 1 )

    oFld:Show()

    oFld:aEnable[ 1 ] := .T.
    oFld:Refresh()
Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Text position in the cell :: Author Natter]]> 2025-04-19T00:57:36-06:00 2025-04-19T00:57:36-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45629&p=279042#p279042
By default, the xBrowse cell is set to be vertically centered. Can this be changed (:nDataStrAlign does not help) ?]]>

By default, the xBrowse cell is set to be vertically centered. Can this be changed (:nDataStrAlign does not help) ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Text position in the cell :: Reply by Antonio Linares]]> 2025-04-19T01:45:03-06:00 2025-04-19T01:45:03-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45629&p=279043#p279043
When text wraps (DT_WORDBREAK is used, which happens implicitly if nDataLines > 1 or if the text is too long for a single line), DT_VCENTER, DT_TOP, and DT_BOTTOM often don't control the vertical positioning of the entire text block within the cell's height as you might expect. The text block itself usually starts drawing from the top of the provided rectangle.

The perceived centering comes from the ROW_EXTRAHEIGHT padding added to the calculated text height when determining the nRowHeight. DrawTextEx then draws the text (often top-aligned within this padded rectangle), making it appear centered overall.

How to Change Vertical Alignment (Top or Bottom):

The most flexible way to precisely control vertical alignment, especially for multi-line text or to override the single-line default, is to use the bPaintText codeblock for the specific column (TXBrwColumn).

This codeblock gives you full control over how the text is drawn within the cell's data area.

Example: Forcing Top Alignment
// Assuming oBrw is your TXBrowse object and oCol is the specific TXBrwColumn

// --- Define the Column ---
@ R,C XBROWSE oBrw ...
ADD COLUMN oCol OF oBrw ... // Other column definitions

// --- Set the bPaintText codeblock for Top Alignment ---
oCol:bPaintText := {| oCol, hDC, cData, aRect, aColors, lHighLite, lSelected | ;
local nStyle, oFont, nTextColor, nVAlign ;
( lHighLite, lSelected ) ; // Parameters might be needed depending on your logic

oFont := oCol:DataFont() // Get the correct font for the cell
oFont:Activate( hDC ) // Activate font on the Device Context

// Determine text color (handle highlighting etc. if needed)
nTextColor := aColors[1] // Use the foreground color passed in aColors

// --- Core Logic for Alignment ---
// Get the base style, removing default vertical centering if present
nStyle := oCol:nDataStyle
nStyle := nOr( nStyle, DT_TOP ) // *** Explicitly add DT_TOP ***
nStyle := nOr( nStyle, DT_WORDBREAK ) // Ensure word break if needed
nStyle := nAnd( nStyle, NOT DT_VCENTER, NOT DT_BOTTOM ) // Remove other vertical flags

// Draw the text using the adjusted style within the provided rectangle
// FW_SayText is a FiveWin wrapper around DrawTextEx
FW_SayText( hDC, cData, aRect, nil, oFont, nTextColor, nil, nil, nStyle )

oFont:Deactivate( hDC ) // Deactivate the font
|}

oBrw:CreateFromCode()

Explanation:

bPaintText: We assign a codeblock to the column's bPaintText data member. This block will be executed instead of the default text painting logic.

Parameters: The block receives several parameters, including the column object (oCol), the device context (hDC), the text data (cData), the rectangle to draw in (aRect), and calculated colors (aColors).

Get Font: We retrieve the appropriate font using oCol:DataFont() and activate it.

Get Text Color: We typically use the foreground color provided in aColors[1]. You might add logic here to change the color based on lHighLite or lSelected if needed.

Modify Style (nStyle):
We start with the column's default nDataStyle.
We explicitly add DT_TOP using nOr().
We ensure DT_WORDBREAK is set if multi-line text is possible.
We explicitly remove DT_VCENTER and DT_BOTTOM using nAnd(..., NOT flag, NOT flag) to prevent conflicts.

FW_SayText: We call the FiveWin drawing function (or you could use DrawTextEx directly) with the modified nStyle. This forces the text rendering to start at the top of the aRect.
Deactivate Font: Clean up by deactivating the font.

For Bottom Alignment:

You would modify the nStyle calculation similarly, but use DT_BOTTOM instead of DT_TOP:

nStyle := oCol:nDataStyle
nStyle := nOr( nStyle, DT_BOTTOM ) // *** Explicitly add DT_BOTTOM ***
nStyle := nOr( nStyle, DT_WORDBREAK )
nStyle := nAnd( nStyle, NOT DT_VCENTER, NOT DT_TOP ) // Remove other vertical flags

Alternative (Less Flexible - Affects All Columns):

If you want all cells to be effectively top-aligned and don't need the extra vertical padding, you could try setting ROW_EXTRAHEIGHT to 0 before creating the browse. This makes the row height fit the calculated text height more closely.

#include "xbrowse.ch" // Make sure ROW_EXTRAHEIGHT is accessible

// BEFORE creating the browse object or columns:
ROW_EXTRAHEIGHT := 0 // Or maybe 1 or 2 for minimal padding

// ... create your browse ...
@ R,C XBROWSE oBrw ...

This is less flexible as it affects all columns and removes the visual padding. Using bPaintText offers column-specific control.]]>

When text wraps (DT_WORDBREAK is used, which happens implicitly if nDataLines > 1 or if the text is too long for a single line), DT_VCENTER, DT_TOP, and DT_BOTTOM often don't control the vertical positioning of the entire text block within the cell's height as you might expect. The text block itself usually starts drawing from the top of the provided rectangle.

The perceived centering comes from the ROW_EXTRAHEIGHT padding added to the calculated text height when determining the nRowHeight. DrawTextEx then draws the text (often top-aligned within this padded rectangle), making it appear centered overall.

How to Change Vertical Alignment (Top or Bottom):

The most flexible way to precisely control vertical alignment, especially for multi-line text or to override the single-line default, is to use the bPaintText codeblock for the specific column (TXBrwColumn).

This codeblock gives you full control over how the text is drawn within the cell's data area.

Example: Forcing Top Alignment
// Assuming oBrw is your TXBrowse object and oCol is the specific TXBrwColumn

// --- Define the Column ---
@ R,C XBROWSE oBrw ...
ADD COLUMN oCol OF oBrw ... // Other column definitions

// --- Set the bPaintText codeblock for Top Alignment ---
oCol:bPaintText := {| oCol, hDC, cData, aRect, aColors, lHighLite, lSelected | ;
local nStyle, oFont, nTextColor, nVAlign ;
( lHighLite, lSelected ) ; // Parameters might be needed depending on your logic

oFont := oCol:DataFont() // Get the correct font for the cell
oFont:Activate( hDC ) // Activate font on the Device Context

// Determine text color (handle highlighting etc. if needed)
nTextColor := aColors[1] // Use the foreground color passed in aColors

// --- Core Logic for Alignment ---
// Get the base style, removing default vertical centering if present
nStyle := oCol:nDataStyle
nStyle := nOr( nStyle, DT_TOP ) // *** Explicitly add DT_TOP ***
nStyle := nOr( nStyle, DT_WORDBREAK ) // Ensure word break if needed
nStyle := nAnd( nStyle, NOT DT_VCENTER, NOT DT_BOTTOM ) // Remove other vertical flags

// Draw the text using the adjusted style within the provided rectangle
// FW_SayText is a FiveWin wrapper around DrawTextEx
FW_SayText( hDC, cData, aRect, nil, oFont, nTextColor, nil, nil, nStyle )

oFont:Deactivate( hDC ) // Deactivate the font
|}

oBrw:CreateFromCode()

Explanation:

bPaintText: We assign a codeblock to the column's bPaintText data member. This block will be executed instead of the default text painting logic.

Parameters: The block receives several parameters, including the column object (oCol), the device context (hDC), the text data (cData), the rectangle to draw in (aRect), and calculated colors (aColors).

Get Font: We retrieve the appropriate font using oCol:DataFont() and activate it.

Get Text Color: We typically use the foreground color provided in aColors[1]. You might add logic here to change the color based on lHighLite or lSelected if needed.

Modify Style (nStyle):
We start with the column's default nDataStyle.
We explicitly add DT_TOP using nOr().
We ensure DT_WORDBREAK is set if multi-line text is possible.
We explicitly remove DT_VCENTER and DT_BOTTOM using nAnd(..., NOT flag, NOT flag) to prevent conflicts.

FW_SayText: We call the FiveWin drawing function (or you could use DrawTextEx directly) with the modified nStyle. This forces the text rendering to start at the top of the aRect.
Deactivate Font: Clean up by deactivating the font.

For Bottom Alignment:

You would modify the nStyle calculation similarly, but use DT_BOTTOM instead of DT_TOP:

nStyle := oCol:nDataStyle
nStyle := nOr( nStyle, DT_BOTTOM ) // *** Explicitly add DT_BOTTOM ***
nStyle := nOr( nStyle, DT_WORDBREAK )
nStyle := nAnd( nStyle, NOT DT_VCENTER, NOT DT_TOP ) // Remove other vertical flags

Alternative (Less Flexible - Affects All Columns):

If you want all cells to be effectively top-aligned and don't need the extra vertical padding, you could try setting ROW_EXTRAHEIGHT to 0 before creating the browse. This makes the row height fit the calculated text height more closely.

#include "xbrowse.ch" // Make sure ROW_EXTRAHEIGHT is accessible

// BEFORE creating the browse object or columns:
ROW_EXTRAHEIGHT := 0 // Or maybe 1 or 2 for minimal padding

// ... create your browse ...
@ R,C XBROWSE oBrw ...

This is less flexible as it affects all columns and removes the visual padding. Using bPaintText offers column-specific control.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Text position in the cell :: Reply by Natter]]> 2025-04-19T05:49:31-06:00 2025-04-19T05:49:31-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45629&p=279044#p279044 ]]> ]]> <![CDATA[FiveWin for Harbour/xHarbour :: Read / Write a file CSV 'UTF-16 LE' :: Author max]]> 2025-04-17T04:12:20-06:00 2025-04-17T04:12:20-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45628&p=279022#p279022 Apparently opening with text editor this two variations has the same content, but it's not like that.
It had never happened to me before.
Someone can help me? Thank you.]]>
Apparently opening with text editor this two variations has the same content, but it's not like that.
It had never happened to me before.
Someone can help me? Thank you.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Read / Write a file CSV 'UTF-16 LE' :: Reply by Enrico Maria Giordano]]> 2025-04-17T06:15:17-06:00 2025-04-17T06:15:17-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45628&p=279023#p279023 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Read / Write a file CSV 'UTF-16 LE' :: Reply by max]]> 2025-04-17T06:40:21-06:00 2025-04-17T06:40:21-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45628&p=279024#p279024 Now, how can i read and write correctly in Hexadecimal from my FWH app converting characters to (and from) ANSI standard <-> Hexadecimal?
To manipulate string i use abitually memowrit() or copy to or memoread() functions and similar, but all of these commands/functions works fine only with ANSI standard characters. Perhaps i have to use other functions i never use before and i don't know, i suppose.]]>
Now, how can i read and write correctly in Hexadecimal from my FWH app converting characters to (and from) ANSI standard <-> Hexadecimal?
To manipulate string i use abitually memowrit() or copy to or memoread() functions and similar, but all of these commands/functions works fine only with ANSI standard characters. Perhaps i have to use other functions i never use before and i don't know, i suppose.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Read / Write a file CSV 'UTF-16 LE' :: Reply by Jack]]> 2025-04-17T12:19:34-06:00 2025-04-17T12:19:34-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45628&p=279031#p279031
https://github.com/Petewg/harbour-core/wiki/Strings]]>

https://github.com/Petewg/harbour-core/wiki/Strings]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Read / Write a file CSV 'UTF-16 LE' :: Reply by cnavarro]]> 2025-04-19T19:54:48-06:00 2025-04-19T19:54:48-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45628&p=279052#p279052
max wrote: Thu Apr 17, 2025 12:40 pm Ok. Differences seen viewing both files in Hexadecimal editor PSPAD.
Now, how can i read and write correctly in Hexadecimal from my FWH app converting characters to (and from) ANSI standard <-> Hexadecimal?
To manipulate string i use abitually memowrit() or copy to or memoread() functions and similar, but all of these commands/functions works fine only with ANSI standard characters. Perhaps i have to use other functions i never use before and i don't know, i suppose.
Please try this sample ( pure harbour ) and apply these functions to your code

Code: Select all | Expand

#include "hbclass.ch"
#include "mysql.ch"

Function Main()
   LOCAL oServer, oQuery, oRow
   LOCAL cCsvFile := "output.csv"
   LOCAL cQuery := "SELECT * FROM clientes"
   Local cTable := "fwh"
   LOCAL hFile, cLine, aFields, nI
   Local nFields
   LOCAL cBOM := Chr(0xFF) + Chr(0xFE) // BOM para UTF-16 LE

   oServer := TMySQLServer():New("localhost", "root", "", 3306 )
   
   IF oServer:NetErr()
      ? "Error de conexión: ", oServer:Error()
      RETURN
   ENDIF

   oServer:SelectDB( cTable )

   oQuery := oServer:Query( cQuery )
   
   IF oQuery:NetErr()
      ? "Error en la consulta: ", oQuery:Error()
      oServer:End()
      RETURN
   ENDIF

   hFile := FCreate(cCsvFile)
   
   IF hFile == -1
      ? "Error al crear el archivo CSV"
      oQuery:End()
      oServer:End()
      RETURN
   ENDIF

   // Escribir BOM para UTF-16 LE
   FWrite(hFile, cBOM)                 // LOOK

   nFields := oQuery:FCount()
   cLine := ""
   FOR nI := 1 TO nFields
      cLine += '"' + oQuery:FieldName( nI ) + '"'
      IF nI < nFields
         cLine += ","
      ENDIF
   NEXT
   cLine += hb_eol()
   FWrite(hFile, StrToUTF16LE( cLine ))                 // LOOK

   DO WHILE !oQuery:Eof()
      oRow := oQuery:GetRow()
      cLine := ""
      
      FOR nI := 1 TO nFields
         cLine += '"' + hb_ValToStr(oRow:FieldGet(nI)) + '"'
         IF nI < nFields
            cLine += ","
         ENDIF
      NEXT
      
      cLine += hb_eol()
      FWrite(hFile, StrToUTF16LE( cLine ) )    // LOOK
      oQuery:Skip()
   ENDDO

   FClose(hFile)
   oQuery:End()
   oServer:End()
   
   ? "Archivo CSV generado exitosamente: ", cCsvFile

Return nil

// IMPORTANT
// Function convert strint to UTF-16 LE
STATIC FUNCTION StrToUTF16LE(cStr)
   LOCAL cResult := ""
   LOCAL nI, cChar

   FOR nI := 1 TO Len(cStr)
      cChar := SubStr(cStr, nI, 1)
      cResult += Chr(Asc(cChar)) + Chr(0) // Little Endian: byte bajo primero
   NEXT

RETURN cResult

]]>
max wrote: Thu Apr 17, 2025 12:40 pm Ok. Differences seen viewing both files in Hexadecimal editor PSPAD.
Now, how can i read and write correctly in Hexadecimal from my FWH app converting characters to (and from) ANSI standard <-> Hexadecimal?
To manipulate string i use abitually memowrit() or copy to or memoread() functions and similar, but all of these commands/functions works fine only with ANSI standard characters. Perhaps i have to use other functions i never use before and i don't know, i suppose.
Please try this sample ( pure harbour ) and apply these functions to your code

Code: Select all | Expand

#include "hbclass.ch"
#include "mysql.ch"

Function Main()
   LOCAL oServer, oQuery, oRow
   LOCAL cCsvFile := "output.csv"
   LOCAL cQuery := "SELECT * FROM clientes"
   Local cTable := "fwh"
   LOCAL hFile, cLine, aFields, nI
   Local nFields
   LOCAL cBOM := Chr(0xFF) + Chr(0xFE) // BOM para UTF-16 LE

   oServer := TMySQLServer():New("localhost", "root", "", 3306 )
   
   IF oServer:NetErr()
      ? "Error de conexión: ", oServer:Error()
      RETURN
   ENDIF

   oServer:SelectDB( cTable )

   oQuery := oServer:Query( cQuery )
   
   IF oQuery:NetErr()
      ? "Error en la consulta: ", oQuery:Error()
      oServer:End()
      RETURN
   ENDIF

   hFile := FCreate(cCsvFile)
   
   IF hFile == -1
      ? "Error al crear el archivo CSV"
      oQuery:End()
      oServer:End()
      RETURN
   ENDIF

   // Escribir BOM para UTF-16 LE
   FWrite(hFile, cBOM)                 // LOOK

   nFields := oQuery:FCount()
   cLine := ""
   FOR nI := 1 TO nFields
      cLine += '"' + oQuery:FieldName( nI ) + '"'
      IF nI < nFields
         cLine += ","
      ENDIF
   NEXT
   cLine += hb_eol()
   FWrite(hFile, StrToUTF16LE( cLine ))                 // LOOK

   DO WHILE !oQuery:Eof()
      oRow := oQuery:GetRow()
      cLine := ""
      
      FOR nI := 1 TO nFields
         cLine += '"' + hb_ValToStr(oRow:FieldGet(nI)) + '"'
         IF nI < nFields
            cLine += ","
         ENDIF
      NEXT
      
      cLine += hb_eol()
      FWrite(hFile, StrToUTF16LE( cLine ) )    // LOOK
      oQuery:Skip()
   ENDDO

   FClose(hFile)
   oQuery:End()
   oServer:End()
   
   ? "Archivo CSV generado exitosamente: ", cCsvFile

Return nil

// IMPORTANT
// Function convert strint to UTF-16 LE
STATIC FUNCTION StrToUTF16LE(cStr)
   LOCAL cResult := ""
   LOCAL nI, cChar

   FOR nI := 1 TO Len(cStr)
      cChar := SubStr(cStr, nI, 1)
      cResult += Chr(Asc(cChar)) + Chr(0) // Little Endian: byte bajo primero
   NEXT

RETURN cResult

]]>
<![CDATA[FiveWin for Harbour/xHarbour :: get numeric with % :: Author Silvio.Falconi]]> 2025-04-19T13:22:04-06:00 2025-04-19T13:22:04-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45631&p=279050#p279050

I have a problem in the numeric tget class

I have to insert 5 discounts example 12.90% I wish have 12,9 %

the fields on archive is 6 digit and 2 decimal

the problem is that the customer wants to insert the data quickly and finds it difficult

if he inserts 12345 automatically the get puts it correctly i.e. 123.45%

if instead he has to insert 10.9% he cannot insert it i.e. if he presses the point or comma after 10
the get goes to the next get

If I press "." or "," the get goes to the next get

I tried to check the digits with aGet[1]:bChange := {|nKey|(Chr(nKey)$"0123456789.")}

or chech the key with aGet[1]:bKeyDown := { | nKey |MyKeyHandler( nKey, @nSconto1 ) }

I tried with picture "@EZ 999,99 %" and "@E ###,## %"


this is the test

Code: Select all | Expand



#include "fivewin.ch"
#include 'constant.ch'

#define DLG_nColorDlg     RGB(245,245,235)


FUNCTION Main()
   local oDlg
   local nRow:= 10,nCol:=10
   local nBottom:= 9
   local nRight := 75
   local nWd := Max( nRight * DLG_CHARPIX_W, 180 )
   local nHt := nBottom * DLG_CHARPIX_H
   local oFont,oBold
   local oSay:=array(1)
   local aGet:=array(5)
   local cPicture:= "@EZ 999,99 %" //"@E ###,## %"
   local nSizeGetSconto := 60
   local nSconto1 := 0,;
         nSconto2 := 0,;
         nSconto3 := 0,;
         nSconto4 := 0,;
         nSconto5 := 0

   oFont := TFont():New( "Arial", 0, -11 )
   oBold := TFont():New( "Arial", 0, -11,,.t. )

   DEFINE DIALOG oDlg SIZE nWd, nHt PIXEL TRUEPIXEL;
       FONT oFont  TITLE "test get numerico %" COLOR CLR_BLACK, DLG_nColorDlg  ;
       STYLE nOR( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, ;
                  WS_MINIMIZEBOX)

   @ nRow, nCol SAY oSay[1] PROMPT "Sconto %:" OF oDlg SIZE 75, 18 PIXEL FONT oFont  TRANSPARENT
   nCol+=110

   @ nRow, nCol GET aGet[1] VAR nSconto1 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE  cPicture;
      OF oDlg

            aGet[1]:bChange  := {|nKey|(Chr(nKey)$"0123456789.")}
          //aGet[1]:bKeyDown := { | nKey |MyKeyHandler( nKey, @nSconto1 ) }

    nCol+=78
    @ nRow, nCol GET aGet[2] VAR nSconto2 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE  cPicture;
      OF oDlg
    nCol+=78
    @ nRow, nCol GET aGet[3] VAR nSconto3 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE  cPicture;
      OF oDlg
    nCol+=78
    @ nRow, nCol GET aGet[4] VAR nSconto4 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE  cPicture;
      OF oDlg
    nCol+=78
    @ nRow, nCol GET aGet[5] VAR nSconto5 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE  cPicture;
      OF oDlg

   // Bottone di conferma
   @ 90, 100 BUTTON "OK" SIZE 80, 30 PIXEL ACTION oDlg:End()

   ACTIVATE DIALOG oDlg CENTERED

   RETURN NIL



 FUNCTION MyKeyHandler( nKey, nVar )
   LOCAL cKey := Chr(nKey)
   LOCAL cVal
   IF cKey == "," .OR. cKey == "."
      cVal := LTrim(Str(nVar, 10, 2))
      IF "." $ cVal .OR. "," $ cVal
         RETURN 0
      ENDIF
      cVal += ","
      nVar := Val( StrTran(cVal, ",", ".") )
      RETURN 0
   ENDIF

RETURN nKey



any solution pls ?]]>


I have a problem in the numeric tget class

I have to insert 5 discounts example 12.90% I wish have 12,9 %

the fields on archive is 6 digit and 2 decimal

the problem is that the customer wants to insert the data quickly and finds it difficult

if he inserts 12345 automatically the get puts it correctly i.e. 123.45%

if instead he has to insert 10.9% he cannot insert it i.e. if he presses the point or comma after 10
the get goes to the next get

If I press "." or "," the get goes to the next get

I tried to check the digits with aGet[1]:bChange := {|nKey|(Chr(nKey)$"0123456789.")}

or chech the key with aGet[1]:bKeyDown := { | nKey |MyKeyHandler( nKey, @nSconto1 ) }

I tried with picture "@EZ 999,99 %" and "@E ###,## %"


this is the test

Code: Select all | Expand



#include "fivewin.ch"
#include 'constant.ch'

#define DLG_nColorDlg     RGB(245,245,235)


FUNCTION Main()
   local oDlg
   local nRow:= 10,nCol:=10
   local nBottom:= 9
   local nRight := 75
   local nWd := Max( nRight * DLG_CHARPIX_W, 180 )
   local nHt := nBottom * DLG_CHARPIX_H
   local oFont,oBold
   local oSay:=array(1)
   local aGet:=array(5)
   local cPicture:= "@EZ 999,99 %" //"@E ###,## %"
   local nSizeGetSconto := 60
   local nSconto1 := 0,;
         nSconto2 := 0,;
         nSconto3 := 0,;
         nSconto4 := 0,;
         nSconto5 := 0

   oFont := TFont():New( "Arial", 0, -11 )
   oBold := TFont():New( "Arial", 0, -11,,.t. )

   DEFINE DIALOG oDlg SIZE nWd, nHt PIXEL TRUEPIXEL;
       FONT oFont  TITLE "test get numerico %" COLOR CLR_BLACK, DLG_nColorDlg  ;
       STYLE nOR( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, ;
                  WS_MINIMIZEBOX)

   @ nRow, nCol SAY oSay[1] PROMPT "Sconto %:" OF oDlg SIZE 75, 18 PIXEL FONT oFont  TRANSPARENT
   nCol+=110

   @ nRow, nCol GET aGet[1] VAR nSconto1 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE  cPicture;
      OF oDlg

            aGet[1]:bChange  := {|nKey|(Chr(nKey)$"0123456789.")}
          //aGet[1]:bKeyDown := { | nKey |MyKeyHandler( nKey, @nSconto1 ) }

    nCol+=78
    @ nRow, nCol GET aGet[2] VAR nSconto2 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE  cPicture;
      OF oDlg
    nCol+=78
    @ nRow, nCol GET aGet[3] VAR nSconto3 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE  cPicture;
      OF oDlg
    nCol+=78
    @ nRow, nCol GET aGet[4] VAR nSconto4 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE  cPicture;
      OF oDlg
    nCol+=78
    @ nRow, nCol GET aGet[5] VAR nSconto5 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE  cPicture;
      OF oDlg

   // Bottone di conferma
   @ 90, 100 BUTTON "OK" SIZE 80, 30 PIXEL ACTION oDlg:End()

   ACTIVATE DIALOG oDlg CENTERED

   RETURN NIL



 FUNCTION MyKeyHandler( nKey, nVar )
   LOCAL cKey := Chr(nKey)
   LOCAL cVal
   IF cKey == "," .OR. cKey == "."
      cVal := LTrim(Str(nVar, 10, 2))
      IF "." $ cVal .OR. "," $ cVal
         RETURN 0
      ENDIF
      cVal += ","
      nVar := Val( StrTran(cVal, ",", ".") )
      RETURN 0
   ENDIF

RETURN nKey



any solution pls ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: get numeric with % :: Reply by Otto]]> 2025-04-19T16:19:27-06:00 2025-04-19T16:19:27-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45631&p=279051#p279051 Best regards,
Otto]]>
Best regards,
Otto]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: get numeric with % :: Reply by Silvio.Falconi]]> 2025-04-20T00:27:25-06:00 2025-04-20T00:27:25-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45631&p=279054#p279054
Otto wrote: Sat Apr 19, 2025 10:19 pm Silvio, can't you switch to a character GET and convert on exit?
Best regards,
Otto
Big problem]]>
Otto wrote: Sat Apr 19, 2025 10:19 pm Silvio, can't you switch to a character GET and convert on exit?
Best regards,
Otto
Big problem]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: get numeric with % :: Reply by Silvio.Falconi]]> 2025-04-20T01:46:36-06:00 2025-04-20T01:46:36-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45631&p=279057#p279057
Otto wrote: Sat Apr 19, 2025 10:19 pm Silvio, can't you switch to a character GET and convert on exit?
Best regards,
Otto
Or modify KeyChar method]]>
Otto wrote: Sat Apr 19, 2025 10:19 pm Silvio, can't you switch to a character GET and convert on exit?
Best regards,
Otto
Or modify KeyChar method]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: get numeric with % :: Reply by Otto]]> 2025-04-20T01:53:48-06:00 2025-04-20T01:53:48-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45631&p=279058#p279058 Best regards,
Otto

ChatGPT – suggests this to me – I haven’t tested it – but the idea isn’t bad:

Instead of using a numeric GET with PICTURE, use a character GET, let the user type freely, and convert the value when leaving the field. This way, you avoid having `,` or `.` act as tab commands. Example:

Code: Select all | Expand

@ 10,10 GET oGet VAR cBuf SIZE 60,18 OF oDlg
oGet:bChange := {|nKey| Chr(nKey) $ "0123456789,." .OR. nKey == VK_BACK ? nKey : 0 }
oGet:Valid  := { ||
   c := StrTran( cBuf, ",", "." )        // comma → period
   n := Val( c )                         // convert to numeric
   IF n < 0 .OR. n > 100
      MsgStop( "Invalid value: " + c )
      RETURN .F.
   ENDIF
   nSconto1 := n                              // assign to your numeric variable
   RETURN .T.
}
– this way you keep full control over input and formatting.]]>
Best regards,
Otto

ChatGPT – suggests this to me – I haven’t tested it – but the idea isn’t bad:

Instead of using a numeric GET with PICTURE, use a character GET, let the user type freely, and convert the value when leaving the field. This way, you avoid having `,` or `.` act as tab commands. Example:

Code: Select all | Expand

@ 10,10 GET oGet VAR cBuf SIZE 60,18 OF oDlg
oGet:bChange := {|nKey| Chr(nKey) $ "0123456789,." .OR. nKey == VK_BACK ? nKey : 0 }
oGet:Valid  := { ||
   c := StrTran( cBuf, ",", "." )        // comma → period
   n := Val( c )                         // convert to numeric
   IF n < 0 .OR. n > 100
      MsgStop( "Invalid value: " + c )
      RETURN .F.
   ENDIF
   nSconto1 := n                              // assign to your numeric variable
   RETURN .T.
}
– this way you keep full control over input and formatting.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: get numeric with % :: Reply by Silvio.Falconi]]> 2025-04-20T03:10:14-06:00 2025-04-20T03:10:14-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45631&p=279060#p279060
aGet[1]:bChange := {|nKey|(Chr(nKey)$"0123456789.,")}

aGet[1]:bValid := { ||
cBuf:= aGet[1]:ctext
c := StrTran( cBuf, ",", "." ) // comma ? period
n := Val( c ) // convert to numeric
IF n < 0 .OR. n > 100
MsgStop( "Invalid value: " + c )
RETURN .F.
ENDIF
nSconto1 := n // assign to your numeric variable
RETURN .T.
}

but not run make the same


see the tget class line 2335

Code: Select all | Expand

if ::oGet:Type == "N" .and. ;
              ( Chr( nKey ) == "." .or. Chr( nKey ) == "," )
              if ::oGet:Clear()
              #ifndef __XHARBOUR__
                 ::oGet:DelEnd()
              #endif
              endif
              ::oGet:ToDecPos()



seem not process the todecpos() function]]>

aGet[1]:bChange := {|nKey|(Chr(nKey)$"0123456789.,")}

aGet[1]:bValid := { ||
cBuf:= aGet[1]:ctext
c := StrTran( cBuf, ",", "." ) // comma ? period
n := Val( c ) // convert to numeric
IF n < 0 .OR. n > 100
MsgStop( "Invalid value: " + c )
RETURN .F.
ENDIF
nSconto1 := n // assign to your numeric variable
RETURN .T.
}

but not run make the same


see the tget class line 2335

Code: Select all | Expand

if ::oGet:Type == "N" .and. ;
              ( Chr( nKey ) == "." .or. Chr( nKey ) == "," )
              if ::oGet:Clear()
              #ifndef __XHARBOUR__
                 ::oGet:DelEnd()
              #endif
              endif
              ::oGet:ToDecPos()



seem not process the todecpos() function]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: get numeric with % :: Reply by Silvio.Falconi]]> 2025-04-20T03:33:14-06:00 2025-04-20T03:33:14-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45631&p=279061#p279061 this run

I tested with "," and with "."

Image

at init there is only a get

Code: Select all | Expand

#include "fivewin.ch"
#include 'constant.ch'

#define DLG_nColorDlg RGB(245,245,235)

FUNCTION Main()
   local oDlg, oFont, oBold
   local nRow := 10, nCol := 10
   local nBottom := 9
   local nRight := 75
   local nWd := Max( nRight * DLG_CHARPIX_W, 180 )
   local nHt := nBottom * DLG_CHARPIX_H
   local oSay := array(5)
   local aGet := array(5)
   local cPicture := "@E 999999.99 %" // Formato per 6 cifre intere e 2 decimali
   local nSizeGetSconto := 60
   local nSconto1 := 0, nSconto2 := 0, nSconto3 := 0, nSconto4 := 0, nSconto5 := 0

   oFont := TFont():New( "Arial", 0, -11 )
   oBold := TFont():New( "Arial", 0, -11,, .t. )

   DEFINE DIALOG oDlg SIZE nWd, nHt PIXEL TRUEPIXEL;
      FONT oFont TITLE "Test Get Numerico %" COLOR CLR_BLACK, DLG_nColorDlg;
      STYLE nOR( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, WS_MINIMIZEBOX)

   @ nRow, nCol SAY oSay[1] PROMPT "Sconto %:" OF oDlg SIZE 75, 18 PIXEL FONT oFont TRANSPARENT
   nCol += 110

   @ nRow, nCol GET aGet[1] VAR nSconto1 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE cPicture OF oDlg;
      VALID {|| (MyValid( aGet[1] ),UpdateSconti(nSconto1, nSconto2, nSconto3, nSconto4, nSconto5, aGet, oSay, oDlg)) }
   aGet[1]:bKeyDown := { |nKey| MyKeyHandler( nKey, aGet[1] ) }

   nCol += 78
     @ nRow, nCol SAY oSay[2] PROMPT "+" OF oDlg SIZE 10, 20 PIXEL FONT oFont TRANSPARENT
   nCol+=15
   @ nRow, nCol GET aGet[2] VAR nSconto2 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE cPicture OF oDlg;
      VALID {|| (MyValid( aGet[2] ),UpdateSconti(nSconto1, nSconto2, nSconto3, nSconto4, nSconto5, aGet, oSay, oDlg)) }
   aGet[2]:bKeyDown := { |nKey| MyKeyHandler( nKey, aGet[2] ) }

   nCol += 78
     @ nRow, nCol SAY oSay[3] PROMPT "+" OF oDlg SIZE 10, 20 PIXEL FONT oFont TRANSPARENT
   nCol+=15
   @ nRow, nCol GET aGet[3] VAR nSconto3 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE cPicture OF oDlg;
           VALID {|| (MyValid( aGet[3] ),UpdateSconti(nSconto1, nSconto2, nSconto3, nSconto4, nSconto5, aGet, oSay, oDlg)) }
   aGet[3]:bKeyDown := { |nKey| MyKeyHandler( nKey, aGet[3] ) }

   nCol += 78
     @ nRow, nCol SAY oSay[4] PROMPT "+" OF oDlg SIZE 10, 20 PIXEL FONT oFont TRANSPARENT
   nCol+=15
   @ nRow, nCol GET aGet[4] VAR nSconto4 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE cPicture OF oDlg;
            VALID {|| (MyValid( aGet[4] ),UpdateSconti(nSconto1, nSconto2, nSconto3, nSconto4, nSconto5, aGet, oSay, oDlg)) }
   aGet[4]:bKeyDown := { |nKey| MyKeyHandler( nKey, aGet[4] ) }

   nCol += 78
     @ nRow, nCol SAY oSay[5] PROMPT "+" OF oDlg SIZE 10, 20 PIXEL FONT oFont TRANSPARENT
   nCol+=15
   @ nRow, nCol GET aGet[5] VAR nSconto5 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE cPicture OF oDlg;
           VALID {|| (MyValid( aGet[5] ),UpdateSconti(nSconto1, nSconto2, nSconto3, nSconto4, nSconto5, aGet, oSay, oDlg)) }
   aGet[5]:bKeyDown := { |nKey| MyKeyHandler( nKey, aGet[5] ) }

   @ 90, 100 BUTTON "OK" SIZE 80, 30 PIXEL ACTION oDlg:End()

   ACTIVATE DIALOG oDlg CENTERED ;
   ON INIT UpdateSconti(nSconto1, nSconto2, nSconto3, nSconto4, nSconto5, aGet, oSay, oDlg)

RETURN NIL

FUNCTION MyKeyHandler( nKey, oGet )
   if oGet:oGet:Type == "N" .and. ( Chr( nKey ) == "." .or. Chr( nKey ) == "," )
      oGet:oGet:Assign( StrTran( oGet:oGet:Buffer, ".", "," ) )
      oGet:oGet:ToDecPos()
      oGet:Refresh()
      return 0
   endif
RETURN nKey

FUNCTION MyValid( oGet )
   local nValue := oGet:Value
   if nValue < 0 .or. nValue > 999999.99
      MsgAlert( "Valore non valido! Deve essere tra 0 e 999999,99", "Errore" )
      return .F.
   endif
   RETURN .T.


   static Function UpdateSconti(nSconto1, nSconto2, nSconto3, nSconto4, nSconto5, aGet, oSay, oDlgEdit)
  // Sconto 2
   if nSconto1 > 0
      oSay[2]:Show()
      aGet[2]:Show()
   else
      oSay[2]:Hide()
      aGet[2]:Hide()
      nSconto2 := 0
   endif

   // Sconto 3
   if nSconto2 > 0
      oSay[3]:Show()
      aGet[3]:Show()
   else
      oSay[3]:Hide()
      aGet[3]:Hide()
      nSconto3 := 0
   endif

   // Sconto 4
   if nSconto3 > 0
      oSay[4]:Show()
      aGet[4]:Show()
   else
      oSay[4]:Hide()
      aGet[4]:Hide()
      nSconto4 := 0
   endif

   // Sconto 5
   if nSconto4 > 0
      oSay[5]:Show()
      aGet[5]:Show()
   else
      oSay[5]:Hide()
      aGet[5]:Hide()
      nSconto5 := 0
   endif


return .T.

/code]


but at init I see "0,00%"   not Know how   change to "0%"


[b]look carefully [/b] this function , so I call todecpos() becuse keychar method of tget class ( line 2335) not  is processed

[code]FUNCTION MyKeyHandler( nKey, oGet )
   if oGet:oGet:Type == "N" .and. ( Chr( nKey ) == "." .or. Chr( nKey ) == "," )
      oGet:oGet:Assign( StrTran( oGet:oGet:Buffer, ".", "," ) )
      oGet:oGet:ToDecPos()
      oGet:Refresh()
      return 0
   endif
RETURN nKey
the problem remains that at the beginning I see in the get 0.00% instead of 0%]]>
this run

I tested with "," and with "."

Image

at init there is only a get

Code: Select all | Expand

#include "fivewin.ch"
#include 'constant.ch'

#define DLG_nColorDlg RGB(245,245,235)

FUNCTION Main()
   local oDlg, oFont, oBold
   local nRow := 10, nCol := 10
   local nBottom := 9
   local nRight := 75
   local nWd := Max( nRight * DLG_CHARPIX_W, 180 )
   local nHt := nBottom * DLG_CHARPIX_H
   local oSay := array(5)
   local aGet := array(5)
   local cPicture := "@E 999999.99 %" // Formato per 6 cifre intere e 2 decimali
   local nSizeGetSconto := 60
   local nSconto1 := 0, nSconto2 := 0, nSconto3 := 0, nSconto4 := 0, nSconto5 := 0

   oFont := TFont():New( "Arial", 0, -11 )
   oBold := TFont():New( "Arial", 0, -11,, .t. )

   DEFINE DIALOG oDlg SIZE nWd, nHt PIXEL TRUEPIXEL;
      FONT oFont TITLE "Test Get Numerico %" COLOR CLR_BLACK, DLG_nColorDlg;
      STYLE nOR( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, WS_MINIMIZEBOX)

   @ nRow, nCol SAY oSay[1] PROMPT "Sconto %:" OF oDlg SIZE 75, 18 PIXEL FONT oFont TRANSPARENT
   nCol += 110

   @ nRow, nCol GET aGet[1] VAR nSconto1 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE cPicture OF oDlg;
      VALID {|| (MyValid( aGet[1] ),UpdateSconti(nSconto1, nSconto2, nSconto3, nSconto4, nSconto5, aGet, oSay, oDlg)) }
   aGet[1]:bKeyDown := { |nKey| MyKeyHandler( nKey, aGet[1] ) }

   nCol += 78
     @ nRow, nCol SAY oSay[2] PROMPT "+" OF oDlg SIZE 10, 20 PIXEL FONT oFont TRANSPARENT
   nCol+=15
   @ nRow, nCol GET aGet[2] VAR nSconto2 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE cPicture OF oDlg;
      VALID {|| (MyValid( aGet[2] ),UpdateSconti(nSconto1, nSconto2, nSconto3, nSconto4, nSconto5, aGet, oSay, oDlg)) }
   aGet[2]:bKeyDown := { |nKey| MyKeyHandler( nKey, aGet[2] ) }

   nCol += 78
     @ nRow, nCol SAY oSay[3] PROMPT "+" OF oDlg SIZE 10, 20 PIXEL FONT oFont TRANSPARENT
   nCol+=15
   @ nRow, nCol GET aGet[3] VAR nSconto3 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE cPicture OF oDlg;
           VALID {|| (MyValid( aGet[3] ),UpdateSconti(nSconto1, nSconto2, nSconto3, nSconto4, nSconto5, aGet, oSay, oDlg)) }
   aGet[3]:bKeyDown := { |nKey| MyKeyHandler( nKey, aGet[3] ) }

   nCol += 78
     @ nRow, nCol SAY oSay[4] PROMPT "+" OF oDlg SIZE 10, 20 PIXEL FONT oFont TRANSPARENT
   nCol+=15
   @ nRow, nCol GET aGet[4] VAR nSconto4 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE cPicture OF oDlg;
            VALID {|| (MyValid( aGet[4] ),UpdateSconti(nSconto1, nSconto2, nSconto3, nSconto4, nSconto5, aGet, oSay, oDlg)) }
   aGet[4]:bKeyDown := { |nKey| MyKeyHandler( nKey, aGet[4] ) }

   nCol += 78
     @ nRow, nCol SAY oSay[5] PROMPT "+" OF oDlg SIZE 10, 20 PIXEL FONT oFont TRANSPARENT
   nCol+=15
   @ nRow, nCol GET aGet[5] VAR nSconto5 SIZE nSizeGetSconto, 18 PIXEL RIGHT;
      PICTURE cPicture OF oDlg;
           VALID {|| (MyValid( aGet[5] ),UpdateSconti(nSconto1, nSconto2, nSconto3, nSconto4, nSconto5, aGet, oSay, oDlg)) }
   aGet[5]:bKeyDown := { |nKey| MyKeyHandler( nKey, aGet[5] ) }

   @ 90, 100 BUTTON "OK" SIZE 80, 30 PIXEL ACTION oDlg:End()

   ACTIVATE DIALOG oDlg CENTERED ;
   ON INIT UpdateSconti(nSconto1, nSconto2, nSconto3, nSconto4, nSconto5, aGet, oSay, oDlg)

RETURN NIL

FUNCTION MyKeyHandler( nKey, oGet )
   if oGet:oGet:Type == "N" .and. ( Chr( nKey ) == "." .or. Chr( nKey ) == "," )
      oGet:oGet:Assign( StrTran( oGet:oGet:Buffer, ".", "," ) )
      oGet:oGet:ToDecPos()
      oGet:Refresh()
      return 0
   endif
RETURN nKey

FUNCTION MyValid( oGet )
   local nValue := oGet:Value
   if nValue < 0 .or. nValue > 999999.99
      MsgAlert( "Valore non valido! Deve essere tra 0 e 999999,99", "Errore" )
      return .F.
   endif
   RETURN .T.


   static Function UpdateSconti(nSconto1, nSconto2, nSconto3, nSconto4, nSconto5, aGet, oSay, oDlgEdit)
  // Sconto 2
   if nSconto1 > 0
      oSay[2]:Show()
      aGet[2]:Show()
   else
      oSay[2]:Hide()
      aGet[2]:Hide()
      nSconto2 := 0
   endif

   // Sconto 3
   if nSconto2 > 0
      oSay[3]:Show()
      aGet[3]:Show()
   else
      oSay[3]:Hide()
      aGet[3]:Hide()
      nSconto3 := 0
   endif

   // Sconto 4
   if nSconto3 > 0
      oSay[4]:Show()
      aGet[4]:Show()
   else
      oSay[4]:Hide()
      aGet[4]:Hide()
      nSconto4 := 0
   endif

   // Sconto 5
   if nSconto4 > 0
      oSay[5]:Show()
      aGet[5]:Show()
   else
      oSay[5]:Hide()
      aGet[5]:Hide()
      nSconto5 := 0
   endif


return .T.

/code]


but at init I see "0,00%"   not Know how   change to "0%"


[b]look carefully [/b] this function , so I call todecpos() becuse keychar method of tget class ( line 2335) not  is processed

[code]FUNCTION MyKeyHandler( nKey, oGet )
   if oGet:oGet:Type == "N" .and. ( Chr( nKey ) == "." .or. Chr( nKey ) == "," )
      oGet:oGet:Assign( StrTran( oGet:oGet:Buffer, ".", "," ) )
      oGet:oGet:ToDecPos()
      oGet:Refresh()
      return 0
   endif
RETURN nKey
the problem remains that at the beginning I see in the get 0.00% instead of 0%]]>
<![CDATA[FiveWin for Harbour/xHarbour :: ctrl+ and ctrl- in xBrowse :: Author Natter]]> 2025-04-20T07:17:35-06:00 2025-04-20T07:17:35-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45632&p=279062#p279062 <![CDATA[FiveWin for Harbour/xHarbour :: Re: ctrl+ and ctrl- in xBrowse :: Reply by Antonio Linares]]> 2025-04-20T09:44:53-06:00 2025-04-20T09:44:53-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45632&p=279067#p279067
To override this and execute your own code (perhaps for changing background size, although that's less common and more complex than font size, or for any other custom action), you should use the bKeyDown codeblock property of the TXBrowse object.

How to Use bKeyDown:

Assign a codeblock to the :bKeyDown data member after you create the TXBrowse object but before the dialog/window is activated. This codeblock will receive the key code (nKey) and modifier flags (nFlags) just like the internal KeyDown method.

Crucially, if your codeblock handles the key combination, it MUST return 0. Returning 0 tells the browse (and the underlying system) that the key has been processed and no further default action (like calling the internal :FontSize() or passing the key to the parent) should occur. Returning NIL (or any non-zero value) allows the default processing to continue.

Example Codeblock:

Code: Select all | Expand

#include "InKey.ch" // Required for VK_ constants

// Assuming oBrw is your TXBrowse object instance

oBrw:bKeyDown := {| nKey, nFlags, oBrowse |
    local lCtrlDown

    // Check if the Control key is pressed
    // GetKeyState returns a negative value if the key is down.
    lCtrlDown := ( GetKeyState( VK_CONTROL ) < 0 )

    IF lCtrlDown
        DO CASE
            CASE nKey == VK_ADD // Numpad Plus key
                // --- Your custom code for Ctrl + '+' ---
                MsgInfo( "Ctrl + Numpad Plus detected!" )
                // Example: Maybe change a custom property or call a function
                // oBrowse:SomeCustomBackgroundResize( +1 )
                // --------------------------------------
                RETURN 0 // IMPORTANT: Prevent default FontSize(+1) action

            CASE nKey == VK_SUBTRACT // Numpad Minus key
                // --- Your custom code for Ctrl + '-' ---
                MsgInfo( "Ctrl + Numpad Minus detected!" )
                // Example:
                // oBrowse:SomeCustomBackgroundResize( -1 )
                // --------------------------------------
                RETURN 0 // IMPORTANT: Prevent default FontSize(-1) action

           /* // Optional: Handling for main keyboard +/- (less common/reliable for this)
            CASE nKey == VK_OEM_PLUS .AND. GetKeyState( VK_SHIFT ) < 0 // Main keyboard '+' (usually needs Shift)
                 MsgInfo( "Ctrl + Main Plus detected!" )
                 RETURN 0
            CASE nKey == VK_OEM_MINUS // Main keyboard '-'
                 MsgInfo( "Ctrl + Main Minus detected!" )
                 RETURN 0
           */

        ENDCASE
    ENDIF

    // If the key wasn't handled above, return NIL to allow default processing
    // for other keys (like arrows, Enter, etc.)
    RETURN NIL
|}

// --- Rest of your browse setup and activation ---
// oBrw:CreateFromCode() or oBrw assigned in resource definition
// ACTIVATE WINDOW ...
Explanation:

#include "InKey.ch": Make sure this is included at the top of your PRG file to define constants like VK_ADD, VK_SUBTRACT, VK_CONTROL, etc.
oBrw:bKeyDown := {|| ... }: Assign the codeblock to the browse object's bKeyDown property.
Parameters: The block receives nKey (the virtual key code), nFlags (modifier flags, though GetKeyState is often clearer for specific modifiers), and oBrowse (the browse object itself).

GetKeyState(VK_CONTROL): Explicitly checks if the Control key is currently held down.

CASE nKey == VK_ADD / VK_SUBTRACT: Checks if the pressed key is the Numpad Plus or Numpad Minus. Note: Using the Numpad keys is generally more reliable for this type of shortcut than the main keyboard '+' and '-' which might involve Shift and have different VK codes (VK_OEM_PLUS, VK_OEM_MINUS).
// --- Your custom code ---: Replace the MsgInfo calls with the actual logic you want to perform when these key combinations are pressed.

RETURN 0: This is essential. It stops the TXBrowse's internal KeyDown method from processing this specific key event further, thereby preventing the default :FontSize() call.

RETURN NIL: If the key combination is not Ctrl++ or Ctrl+-, the codeblock returns NIL. This allows the default TXBrowse:KeyDown method (and potentially the parent window) to handle other keys normally (like arrow keys, page up/down, Enter, Escape, etc.).

By implementing this bKeyDown block, you gain full control over what happens when Ctrl++ and Ctrl+- are pressed within your specific TXBrowse instance.]]>

To override this and execute your own code (perhaps for changing background size, although that's less common and more complex than font size, or for any other custom action), you should use the bKeyDown codeblock property of the TXBrowse object.

How to Use bKeyDown:

Assign a codeblock to the :bKeyDown data member after you create the TXBrowse object but before the dialog/window is activated. This codeblock will receive the key code (nKey) and modifier flags (nFlags) just like the internal KeyDown method.

Crucially, if your codeblock handles the key combination, it MUST return 0. Returning 0 tells the browse (and the underlying system) that the key has been processed and no further default action (like calling the internal :FontSize() or passing the key to the parent) should occur. Returning NIL (or any non-zero value) allows the default processing to continue.

Example Codeblock:

Code: Select all | Expand

#include "InKey.ch" // Required for VK_ constants

// Assuming oBrw is your TXBrowse object instance

oBrw:bKeyDown := {| nKey, nFlags, oBrowse |
    local lCtrlDown

    // Check if the Control key is pressed
    // GetKeyState returns a negative value if the key is down.
    lCtrlDown := ( GetKeyState( VK_CONTROL ) < 0 )

    IF lCtrlDown
        DO CASE
            CASE nKey == VK_ADD // Numpad Plus key
                // --- Your custom code for Ctrl + '+' ---
                MsgInfo( "Ctrl + Numpad Plus detected!" )
                // Example: Maybe change a custom property or call a function
                // oBrowse:SomeCustomBackgroundResize( +1 )
                // --------------------------------------
                RETURN 0 // IMPORTANT: Prevent default FontSize(+1) action

            CASE nKey == VK_SUBTRACT // Numpad Minus key
                // --- Your custom code for Ctrl + '-' ---
                MsgInfo( "Ctrl + Numpad Minus detected!" )
                // Example:
                // oBrowse:SomeCustomBackgroundResize( -1 )
                // --------------------------------------
                RETURN 0 // IMPORTANT: Prevent default FontSize(-1) action

           /* // Optional: Handling for main keyboard +/- (less common/reliable for this)
            CASE nKey == VK_OEM_PLUS .AND. GetKeyState( VK_SHIFT ) < 0 // Main keyboard '+' (usually needs Shift)
                 MsgInfo( "Ctrl + Main Plus detected!" )
                 RETURN 0
            CASE nKey == VK_OEM_MINUS // Main keyboard '-'
                 MsgInfo( "Ctrl + Main Minus detected!" )
                 RETURN 0
           */

        ENDCASE
    ENDIF

    // If the key wasn't handled above, return NIL to allow default processing
    // for other keys (like arrows, Enter, etc.)
    RETURN NIL
|}

// --- Rest of your browse setup and activation ---
// oBrw:CreateFromCode() or oBrw assigned in resource definition
// ACTIVATE WINDOW ...
Explanation:

#include "InKey.ch": Make sure this is included at the top of your PRG file to define constants like VK_ADD, VK_SUBTRACT, VK_CONTROL, etc.
oBrw:bKeyDown := {|| ... }: Assign the codeblock to the browse object's bKeyDown property.
Parameters: The block receives nKey (the virtual key code), nFlags (modifier flags, though GetKeyState is often clearer for specific modifiers), and oBrowse (the browse object itself).

GetKeyState(VK_CONTROL): Explicitly checks if the Control key is currently held down.

CASE nKey == VK_ADD / VK_SUBTRACT: Checks if the pressed key is the Numpad Plus or Numpad Minus. Note: Using the Numpad keys is generally more reliable for this type of shortcut than the main keyboard '+' and '-' which might involve Shift and have different VK codes (VK_OEM_PLUS, VK_OEM_MINUS).
// --- Your custom code ---: Replace the MsgInfo calls with the actual logic you want to perform when these key combinations are pressed.

RETURN 0: This is essential. It stops the TXBrowse's internal KeyDown method from processing this specific key event further, thereby preventing the default :FontSize() call.

RETURN NIL: If the key combination is not Ctrl++ or Ctrl+-, the codeblock returns NIL. This allows the default TXBrowse:KeyDown method (and potentially the parent window) to handle other keys normally (like arrow keys, page up/down, Enter, Escape, etc.).

By implementing this bKeyDown block, you gain full control over what happens when Ctrl++ and Ctrl+- are pressed within your specific TXBrowse instance.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: ctrl+ and ctrl- in xBrowse :: Reply by Natter]]> 2025-04-20T10:20:06-06:00 2025-04-20T10:20:06-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45632&p=279069#p279069 <![CDATA[FiveWin for Harbour/xHarbour :: Re: ctrl+ and ctrl- in xBrowse :: Reply by Antonio Linares]]> 2025-04-20T12:11:55-06:00 2025-04-20T12:11:55-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45632&p=279073#p279073
However, in the context of TXBrowse and how FiveWin often handles customization, overriding :FontSize() is generally not the recommended or easiest approach for intercepting the keyboard shortcut.

Here's why and why bKeyDown is preferred:

Modifying the Library: You cannot directly change the METHOD FontSize(...) CLASS TXBrowse line within the xbrowse.ch file itself. Modifying library source code is highly discouraged as it makes updates impossible and can lead to instability.

Subclassing Complexity: To override it properly, you would need to:
Create your own class: CLASS MyXBrowse FROM TXBrowse.
Define a METHOD FontSize(nPlus) within your MyXBrowse class.
Use MyXBrowse instead of TXBrowse wherever you define your browse.

Crucially: Your overridden FontSize method would completely replace the original. If you ever wanted the actual font sizing behavior (maybe called from somewhere else), you'd have to explicitly call ::Super:FontSize(nPlus) inside your overridden method.

Separation of Concerns: The KeyDown method is responsible for interpreting the key press (Ctrl + '+') and deciding what action to call (which happens to be :FontSize by default). The :FontSize method is responsible for performing the action (changing the font and refreshing). Using bKeyDown intercepts the event at the interpretation stage, which is cleaner. Overriding :FontSize intercepts at the action stage, which might have unintended consequences if :FontSize were ever called from somewhere else besides the Ctrl++/- handler.

bKeyDown is the Intended Mechanism: The bKeyDown (and bKeyChar, bGotFocus, bLostFocus, etc.) codeblocks are specifically provided in FiveWin controls as the standard, flexible way to hook into and customize event handling without needing to subclass or modify the original class methods. They allow you to:

React to specific events.

Perform custom actions.

Optionally prevent the default action (by returning 0 from bKeyDown).

Simplicity: While subclassing might seem appealing initially, the bKeyDown approach is arguably simpler for this specific task:
No need to define a new class.

You only write code for the specific keys you want to handle.

The mechanism to prevent default behavior (return 0) is straightforward.

In summary:

While you could technically override :FontSize by creating a subclass, it's more complex, potentially brittle (if the base class changes how :FontSize is used), and mixes the concerns of input handling and action execution.

Using the provided bKeyDown codeblock is the idiomatic and recommended FiveWin/TXBrowse way to intercept keyboard events like Ctrl++ and Ctrl+-, perform custom actions, and prevent the default behavior.]]>

However, in the context of TXBrowse and how FiveWin often handles customization, overriding :FontSize() is generally not the recommended or easiest approach for intercepting the keyboard shortcut.

Here's why and why bKeyDown is preferred:

Modifying the Library: You cannot directly change the METHOD FontSize(...) CLASS TXBrowse line within the xbrowse.ch file itself. Modifying library source code is highly discouraged as it makes updates impossible and can lead to instability.

Subclassing Complexity: To override it properly, you would need to:
Create your own class: CLASS MyXBrowse FROM TXBrowse.
Define a METHOD FontSize(nPlus) within your MyXBrowse class.
Use MyXBrowse instead of TXBrowse wherever you define your browse.

Crucially: Your overridden FontSize method would completely replace the original. If you ever wanted the actual font sizing behavior (maybe called from somewhere else), you'd have to explicitly call ::Super:FontSize(nPlus) inside your overridden method.

Separation of Concerns: The KeyDown method is responsible for interpreting the key press (Ctrl + '+') and deciding what action to call (which happens to be :FontSize by default). The :FontSize method is responsible for performing the action (changing the font and refreshing). Using bKeyDown intercepts the event at the interpretation stage, which is cleaner. Overriding :FontSize intercepts at the action stage, which might have unintended consequences if :FontSize were ever called from somewhere else besides the Ctrl++/- handler.

bKeyDown is the Intended Mechanism: The bKeyDown (and bKeyChar, bGotFocus, bLostFocus, etc.) codeblocks are specifically provided in FiveWin controls as the standard, flexible way to hook into and customize event handling without needing to subclass or modify the original class methods. They allow you to:

React to specific events.

Perform custom actions.

Optionally prevent the default action (by returning 0 from bKeyDown).

Simplicity: While subclassing might seem appealing initially, the bKeyDown approach is arguably simpler for this specific task:
No need to define a new class.

You only write code for the specific keys you want to handle.

The mechanism to prevent default behavior (return 0) is straightforward.

In summary:

While you could technically override :FontSize by creating a subclass, it's more complex, potentially brittle (if the base class changes how :FontSize is used), and mixes the concerns of input handling and action execution.

Using the provided bKeyDown codeblock is the idiomatic and recommended FiveWin/TXBrowse way to intercept keyboard events like Ctrl++ and Ctrl+-, perform custom actions, and prevent the default behavior.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Run an other program as different user :: Author Marc Vanzegbroeck]]> 2025-04-23T05:46:54-06:00 2025-04-23T05:46:54-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45641&p=279133#p279133
I need to run another program with a different user/password , than my program, from my program.
That other program have to have other right to access a server to get data, but that user/password,can't access the things that my program is using...
Is that possible?
It's something as the RUNAS-dos-command,but that one ask me the password.

Thanks]]>

I need to run another program with a different user/password , than my program, from my program.
That other program have to have other right to access a server to get data, but that user/password,can't access the things that my program is using...
Is that possible?
It's something as the RUNAS-dos-command,but that one ask me the password.

Thanks]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Run an other program as different user :: Reply by Natter]]> 2025-04-23T06:05:05-06:00 2025-04-23T06:05:05-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45641&p=279135#p279135
There is a general user directory on the server
Full name, password, rights fields

If you run the program from your program, then all this can be passed as parameters]]>

There is a general user directory on the server
Full name, password, rights fields

If you run the program from your program, then all this can be passed as parameters]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Run an other program as different user :: Reply by Marc Vanzegbroeck]]> 2025-04-23T06:21:40-06:00 2025-04-23T06:21:40-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45641&p=279136#p279136
The other user can only access data from another (OPC)-server. Only that user has access to get data from that system.

My program will call the other program(with other credentials), and that program return data(it place data on a specific place that my program can access) , that my program will use.

The reason why only that other user can access the other server, is that this is used in a chemical plant, and the normal user may not access the other server. They give me a login than I can use in my program to access that data, but the users may not know the user/password]]>

The other user can only access data from another (OPC)-server. Only that user has access to get data from that system.

My program will call the other program(with other credentials), and that program return data(it place data on a specific place that my program can access) , that my program will use.

The reason why only that other user can access the other server, is that this is used in a chemical plant, and the normal user may not access the other server. They give me a login than I can use in my program to access that data, but the users may not know the user/password]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Run an other program as different user :: Reply by Natter]]> 2025-04-23T06:27:12-06:00 2025-04-23T06:27:12-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45641&p=279137#p279137 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Run an other program as different user :: Reply by Marc Vanzegbroeck]]> 2025-04-23T07:01:46-06:00 2025-04-23T07:01:46-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45641&p=279138#p279138
Enter the password when prompted. The RunAs program demands that you type the password manually. This was a conscious design decision. If it were possible to pass the password on the command line, people would start embedding passwords into batch files and logon scripts, which is laughably insecure
There is a possibility to use the /savecred, but the I have to enter the password manualy one time.

I see that the runas() function in Autoit can handle passwords. I will try it.]]>
Enter the password when prompted. The RunAs program demands that you type the password manually. This was a conscious design decision. If it were possible to pass the password on the command line, people would start embedding passwords into batch files and logon scripts, which is laughably insecure
There is a possibility to use the /savecred, but the I have to enter the password manualy one time.

I see that the runas() function in Autoit can handle passwords. I will try it.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Run an other program as different user :: Reply by Natter]]> 2025-04-23T07:14:32-06:00 2025-04-23T07:14:32-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45641&p=279139#p279139 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Run an other program as different user :: Reply by Marc Vanzegbroeck]]> 2025-04-23T07:25:49-06:00 2025-04-23T07:25:49-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45641&p=279140#p279140
I see that there are different alternative programs for it.
I will try those.]]>

I see that there are different alternative programs for it.
I will try those.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Excel file on a dialog :: Author Natter]]> 2025-04-20T08:17:42-06:00 2025-04-20T08:17:42-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45633&p=279064#p279064 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Excel file on a dialog :: Reply by Antonio Linares]]> 2025-04-20T10:06:14-06:00 2025-04-20T10:06:14-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45633&p=279068#p279068

Code: Select all | Expand

<input type="file" id="input" accept=".xlsx, .xls" />
<div id="output"></div>
<script src="https://cdn.sheetjs.com/xlsx-latest/xlsx.full.min.js"></script>
<script>
  document.getElementById("input").addEventListener("change", async (e) => {
    const file = e.target.files[0];
    const data = await file.arrayBuffer();
    const workbook = XLSX.read(data);
    const firstSheet = workbook.Sheets[workbook.SheetNames[0]];
    const html = XLSX.utils.sheet_to_html(firstSheet);
    document.getElementById("output").innerHTML = html;
  });
</script>
]]>

Code: Select all | Expand

<input type="file" id="input" accept=".xlsx, .xls" />
<div id="output"></div>
<script src="https://cdn.sheetjs.com/xlsx-latest/xlsx.full.min.js"></script>
<script>
  document.getElementById("input").addEventListener("change", async (e) => {
    const file = e.target.files[0];
    const data = await file.arrayBuffer();
    const workbook = XLSX.read(data);
    const firstSheet = workbook.Sheets[workbook.SheetNames[0]];
    const html = XLSX.utils.sheet_to_html(firstSheet);
    document.getElementById("output").innerHTML = html;
  });
</script>
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Excel file on a dialog :: Reply by Natter]]> 2025-04-20T10:23:27-06:00 2025-04-20T10:23:27-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45633&p=279070#p279070 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Excel file on a dialog :: Reply by Natter]]> 2025-04-22T02:38:24-06:00 2025-04-22T02:38:24-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45633&p=279086#p279086 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Excel file on a dialog :: Reply by Antonio Linares]]> 2025-04-22T03:03:28-06:00 2025-04-22T03:03:28-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45633&p=279087#p279087
webviewexcel.prg

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   local oWebView := TWebView2():New()

   oWebView:SetHtml( Html() )
   oWebView:SetTitle( "Microsoft Edge WebView working from FWH" )
   oWebView:SetUserAgent( "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Mobile Safari/537.36" )
   oWebView:Run()
   oWebView:End()

return nil

function Html()

   local cHtml

   TEXT INTO cHtml
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Read Excel File</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }
        table {
            border-collapse: collapse;
            margin-top: 20px;
        }
        th, td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: left;
        }
        th {
            background-color: #f2f2f2;
        }
        #output p {
            color: red;
        }
    </style>
</head>
<body>
    <h1>Upload and Display Excel File</h1>
    <input type="file" id="input" accept=".xlsx, .xls" />
    <div id="output"></div>

    <script src="https://cdn.sheetjs.com/xlsx-latest/xlsx.full.min.js"></script>
    <script>
        document.getElementById('input').addEventListener('change', async (e) => {
            const file = e.target.files[0];
            if (!file) return;
            try {
                const data = await file.arrayBuffer();
                const workbook = XLSX.read(data);
                const firstSheet = workbook.Sheets[workbook.SheetNames[0]];
                const html = XLSX.utils.sheet_to_html(firstSheet);
                document.getElementById('output').innerHTML = html;
            } catch (error) {
                console.error('Error reading file:', error);
                document.getElementById('output').innerHTML = '<p>Error reading file.</p>';
            }
        });
    </script>
</body>
</html>
   ENDTEXT

return cHtml
]]>

webviewexcel.prg

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   local oWebView := TWebView2():New()

   oWebView:SetHtml( Html() )
   oWebView:SetTitle( "Microsoft Edge WebView working from FWH" )
   oWebView:SetUserAgent( "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Mobile Safari/537.36" )
   oWebView:Run()
   oWebView:End()

return nil

function Html()

   local cHtml

   TEXT INTO cHtml
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Read Excel File</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }
        table {
            border-collapse: collapse;
            margin-top: 20px;
        }
        th, td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: left;
        }
        th {
            background-color: #f2f2f2;
        }
        #output p {
            color: red;
        }
    </style>
</head>
<body>
    <h1>Upload and Display Excel File</h1>
    <input type="file" id="input" accept=".xlsx, .xls" />
    <div id="output"></div>

    <script src="https://cdn.sheetjs.com/xlsx-latest/xlsx.full.min.js"></script>
    <script>
        document.getElementById('input').addEventListener('change', async (e) => {
            const file = e.target.files[0];
            if (!file) return;
            try {
                const data = await file.arrayBuffer();
                const workbook = XLSX.read(data);
                const firstSheet = workbook.Sheets[workbook.SheetNames[0]];
                const html = XLSX.utils.sheet_to_html(firstSheet);
                document.getElementById('output').innerHTML = html;
            } catch (error) {
                console.error('Error reading file:', error);
                document.getElementById('output').innerHTML = '<p>Error reading file.</p>';
            }
        });
    </script>
</body>
</html>
   ENDTEXT

return cHtml
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Excel file on a dialog :: Reply by Natter]]> 2025-04-22T03:24:17-06:00 2025-04-22T03:24:17-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45633&p=279089#p279089 C:\MyFile.xlsx]]> C:\MyFile.xlsx]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Excel file on a dialog :: Reply by Antonio Linares]]> 2025-04-22T08:40:07-06:00 2025-04-22T08:40:07-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45633&p=279111#p279111

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   local oWebView := TWebView2():New()

   oWebView:SetHtml( Html() )
   oWebView:SetTitle( "Microsoft Edge WebView working from FWH" )
   oWebView:SetUserAgent( "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Mobile Safari/537.36" )
   // oWebView:OpenDevToolsWindow( .T. ) // Open DevTools
   oWebView:Run()
   oWebView:End()

return nil

function Html()

   local cHtml

   TEXT INTO cHtml
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Read Excel File</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }
        table {
            border-collapse: collapse;
            margin-top: 20px;
        }
        th, td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: left;
        }
        th {
            background-color: #f2f2f2;
        }
        #output p {
            color: red;
        }
    </style>
</head>
<body>
    <h1>Upload and Display Excel File</h1>
    <input type="file" id="input" accept=".xlsx, .xls" />
    <div id="output"></div>

    <script src=https://cdn.sheetjs.com/xlsx-0.20.3/package/dist/xlsx.full.min.js></script>
    <script>
        document.getElementById('input').addEventListener('change', async (e) => {
            const file = e.target.files[0];
            if (!file) return;
            try {
                const data = await file.arrayBuffer();
                const workbook = XLSX.read(data);
                const firstSheet = workbook.Sheets[workbook.SheetNames[0]];
                const html = XLSX.utils.sheet_to_html(firstSheet);
                document.getElementById('output').innerHTML = html;
            } catch (error) {
                console.error('Error reading file:', error);
                document.getElementById('output').innerHTML = '<p>Error reading file.</p>';
            }
        });
    </script>
</body>
</html>
   ENDTEXT

return cHtml
]]>

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   local oWebView := TWebView2():New()

   oWebView:SetHtml( Html() )
   oWebView:SetTitle( "Microsoft Edge WebView working from FWH" )
   oWebView:SetUserAgent( "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Mobile Safari/537.36" )
   // oWebView:OpenDevToolsWindow( .T. ) // Open DevTools
   oWebView:Run()
   oWebView:End()

return nil

function Html()

   local cHtml

   TEXT INTO cHtml
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Read Excel File</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }
        table {
            border-collapse: collapse;
            margin-top: 20px;
        }
        th, td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: left;
        }
        th {
            background-color: #f2f2f2;
        }
        #output p {
            color: red;
        }
    </style>
</head>
<body>
    <h1>Upload and Display Excel File</h1>
    <input type="file" id="input" accept=".xlsx, .xls" />
    <div id="output"></div>

    <script src=https://cdn.sheetjs.com/xlsx-0.20.3/package/dist/xlsx.full.min.js></script>
    <script>
        document.getElementById('input').addEventListener('change', async (e) => {
            const file = e.target.files[0];
            if (!file) return;
            try {
                const data = await file.arrayBuffer();
                const workbook = XLSX.read(data);
                const firstSheet = workbook.Sheets[workbook.SheetNames[0]];
                const html = XLSX.utils.sheet_to_html(firstSheet);
                document.getElementById('output').innerHTML = html;
            } catch (error) {
                console.error('Error reading file:', error);
                document.getElementById('output').innerHTML = '<p>Error reading file.</p>';
            }
        });
    </script>
</body>
</html>
   ENDTEXT

return cHtml
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Excel file on a dialog :: Reply by Natter]]> 2025-04-23T02:25:43-06:00 2025-04-23T02:25:43-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45633&p=279128#p279128 "Error reading file" (maybe I have an old version of WebView).

Is it possible to get properties of WebView object via GetProp(), GetPropA() ?]]>
"Error reading file" (maybe I have an old version of WebView).

Is it possible to get properties of WebView object via GetProp(), GetPropA() ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Excel file on a dialog :: Reply by Lailton]]> 2025-04-23T14:03:14-06:00 2025-04-23T14:03:14-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45633&p=279141#p279141 read it from webpage.

:D]]>
read it from webpage.

:D]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Excel file on a dialog :: Reply by Antonio Linares]]> 2025-04-23T14:28:00-06:00 2025-04-23T14:28:00-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45633&p=279142#p279142
Natter wrote: Wed Apr 23, 2025 8:25 am When I select a file I get the message "Error reading file" (maybe I have an old version of WebView).

Is it possible to get properties of WebView object via GetProp(), GetPropA() ?
Please double check that you are using https://cdn.sheetjs.com/xlsx-0.20.3/pac ... ull.min.js

Here it works very fine :)]]>
Natter wrote: Wed Apr 23, 2025 8:25 am When I select a file I get the message "Error reading file" (maybe I have an old version of WebView).

Is it possible to get properties of WebView object via GetProp(), GetPropA() ?
Please double check that you are using https://cdn.sheetjs.com/xlsx-0.20.3/pac ... ull.min.js

Here it works very fine :)]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Excel file on a dialog :: Reply by Natter]]> 2025-04-24T02:27:29-06:00 2025-04-24T02:27:29-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45633&p=279146#p279146
To load local files you can combine the BIND events and send some request from web page to the FWH take the file ( convert to base64 ) and
read it from webpage.
Lailton, could you give me a small example?]]>
To load local files you can combine the BIND events and send some request from web page to the FWH take the file ( convert to base64 ) and
read it from webpage.
Lailton, could you give me a small example?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Excel file on a dialog :: Reply by Antonio Linares]]> 2025-04-24T05:57:09-06:00 2025-04-24T05:57:09-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45633&p=279149#p279149
Please email me your excel file and I will provide you a screenshot and the EXE]]>

Please email me your excel file and I will provide you a screenshot and the EXE]]>
<![CDATA[FiveWin for Harbour/xHarbour :: upgrade 32 to 64 bit fivewin :: Author davor0501]]> 2025-04-22T03:22:38-06:00 2025-04-22T03:22:38-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45637&p=279088#p279088 I have been using fivewin 32 bit version for ten years, I would like to switch to 64 bit version. Is it enough to buy 64 bit upgrade or do I have to buy installation package for 64 bit version.
Greetings]]>
I have been using fivewin 32 bit version for ten years, I would like to switch to 64 bit version. Is it enough to buy 64 bit upgrade or do I have to buy installation package for 64 bit version.
Greetings]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: upgrade 32 to 64 bit fivewin :: Reply by Antonio Linares]]> 2025-04-22T08:41:58-06:00 2025-04-22T08:41:58-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45637&p=279113#p279113 alinares@fivetechsoft.com or to antonio.fivetech@gmail.com

thanks!]]>
alinares@fivetechsoft.com or to antonio.fivetech@gmail.com

thanks!]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: upgrade 32 to 64 bit fivewin :: Reply by vilian]]> 2025-04-22T14:14:58-06:00 2025-04-22T14:14:58-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45637&p=279118#p279118 Is there a step-by-step for to do this upgrade?]]> Is there a step-by-step for to do this upgrade?]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: upgrade 32 to 64 bit fivewin :: Reply by Antonio Linares]]> 2025-04-22T22:00:23-06:00 2025-04-22T22:00:23-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45637&p=279125#p279125
There is no need for such step by step documentation as the migration to FWH 64 bits is quite straightforward.

If you use a resources DLL in 32 bits, then you have to migrate it to 64 bits. FWH provides a FWH\DLL\rc2dll64.bat for such purpose.

If you are using a library when building your EXE, then you have to get the equivalent 64 bits library version.

If you are using any C language developed keep in mind that the handles in Windows API must be managed using hb_parnll() and the returned handles must use hb_retnll(). Please notice the double LL.

Keeping in mind the above topics, it is a simple as using the FWH 64 bits libraries and recompile all your PRGs using the Harbour 64 bits version for your chosen 64 bits C compiler.]]>

There is no need for such step by step documentation as the migration to FWH 64 bits is quite straightforward.

If you use a resources DLL in 32 bits, then you have to migrate it to 64 bits. FWH provides a FWH\DLL\rc2dll64.bat for such purpose.

If you are using a library when building your EXE, then you have to get the equivalent 64 bits library version.

If you are using any C language developed keep in mind that the handles in Windows API must be managed using hb_parnll() and the returned handles must use hb_retnll(). Please notice the double LL.

Keeping in mind the above topics, it is a simple as using the FWH 64 bits libraries and recompile all your PRGs using the Harbour 64 bits version for your chosen 64 bits C compiler.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: upgrade 32 to 64 bit fivewin :: Reply by vilian]]> 2025-04-24T12:48:20-06:00 2025-04-24T12:48:20-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45637&p=279161#p279161 ]]> ]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: upgrade 32 to 64 bit fivewin :: Reply by hua]]> 2025-04-24T22:33:22-06:00 2025-04-24T22:33:22-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45637&p=279173#p279173 <![CDATA[FiveWin for Harbour/xHarbour :: Copy and Paste issue with TGET and FWMariaDb *Fixed* :: Author dutch]]> 2025-04-20T20:51:51-06:00 2025-04-25T02:26:34-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279076#p279076
I use FWH2304 with xHarbour (20221118).

I got the problem with paste from clipboard to TGET, the issue is
Problem
- paste to TGET in oRs:lastname field (MariaDb database) when it has some text in field, it cannot paste any text to.
- paste to TGET in Variable and declare from MariaDb database field, it does not work.
Works fine
- paste to TGET in oRs:lastname field with empty text, it work fine.
- paste to TGET in Variable, it work fine.

Thank you in advance for any suggestion.]]>

I use FWH2304 with xHarbour (20221118).

I got the problem with paste from clipboard to TGET, the issue is
Problem
- paste to TGET in oRs:lastname field (MariaDb database) when it has some text in field, it cannot paste any text to.
- paste to TGET in Variable and declare from MariaDb database field, it does not work.
Works fine
- paste to TGET in oRs:lastname field with empty text, it work fine.
- paste to TGET in Variable, it work fine.

Thank you in advance for any suggestion.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy and Paste issue with TGET and FWMariaDb :: Reply by Antonio Linares]]> 2025-04-21T02:21:23-06:00 2025-04-21T02:21:23-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279077#p279077
This example is working fine here with Harbour and xHarbour, when pasting on the first GET:

modified maria02.prg

Code: Select all | Expand

#include "fivewin.ch"

static aStr := { "localhost,fwh,fivetec1_antonio,1234" }

static oCn

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

function Main()

   local oRs, cSql, oDlg

   FWSetLanguage( 1 )
   FW_SetUnicode( .t. )

   if ( oCn := maria_Connect( aStr[ 1 ], .t. ) ) != nil

      TEXT INTO cSql
         SELECT C.ID AS CustID, C.FIRST AS CustName, C.AGE AS AG, C.STATE AS ST, S.NAME AS StateName
         FROM customer C
         LEFT OUTER JOIN states S ON C.STATE = S.CODE
         ORDER BY CUSTID
      ENDTEXT

      oRs   := oCn:RowSet( cSql )

      DEFINE DIALOG oDlg 

      @ 1, 1 GET oRs:CustName OF oDlg 

      @ 3, 1 GET oRs:St OF oDlg 

      ACTIVATE DIALOG oDlg CENTERED

      oCn:Close()

   endif

return nil


]]>

This example is working fine here with Harbour and xHarbour, when pasting on the first GET:

modified maria02.prg

Code: Select all | Expand

#include "fivewin.ch"

static aStr := { "localhost,fwh,fivetec1_antonio,1234" }

static oCn

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

function Main()

   local oRs, cSql, oDlg

   FWSetLanguage( 1 )
   FW_SetUnicode( .t. )

   if ( oCn := maria_Connect( aStr[ 1 ], .t. ) ) != nil

      TEXT INTO cSql
         SELECT C.ID AS CustID, C.FIRST AS CustName, C.AGE AS AG, C.STATE AS ST, S.NAME AS StateName
         FROM customer C
         LEFT OUTER JOIN states S ON C.STATE = S.CODE
         ORDER BY CUSTID
      ENDTEXT

      oRs   := oCn:RowSet( cSql )

      DEFINE DIALOG oDlg 

      @ 1, 1 GET oRs:CustName OF oDlg 

      @ 3, 1 GET oRs:St OF oDlg 

      ACTIVATE DIALOG oDlg CENTERED

      oCn:Close()

   endif

return nil


]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy and Paste issue with TGET and FWMariaDb :: Reply by dutch]]> 2025-04-22T06:52:24-06:00 2025-04-22T06:52:24-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279100#p279100
It doesn't work with FWH2304 as vdo clip.

https://streamable.com/7q7ppd


Antonio Linares wrote: Mon Apr 21, 2025 8:21 am Dear Dutch,

This example is working fine here with Harbour and xHarbour, when pasting on the first GET:

modified maria02.prg

Code: Select all | Expand

#include "fivewin.ch"

static aStr := { "localhost,fwh,fivetec1_antonio,1234" }

static oCn

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

function Main()

   local oRs, cSql, oDlg

   FWSetLanguage( 1 )
   FW_SetUnicode( .t. )

   if ( oCn := maria_Connect( aStr[ 1 ], .t. ) ) != nil

      TEXT INTO cSql
         SELECT C.ID AS CustID, C.FIRST AS CustName, C.AGE AS AG, C.STATE AS ST, S.NAME AS StateName
         FROM customer C
         LEFT OUTER JOIN states S ON C.STATE = S.CODE
         ORDER BY CUSTID
      ENDTEXT

      oRs   := oCn:RowSet( cSql )

      DEFINE DIALOG oDlg 

      @ 1, 1 GET oRs:CustName OF oDlg 

      @ 3, 1 GET oRs:St OF oDlg 

      ACTIVATE DIALOG oDlg CENTERED

      oCn:Close()

   endif

return nil


]]>

It doesn't work with FWH2304 as vdo clip.

https://streamable.com/7q7ppd


Antonio Linares wrote: Mon Apr 21, 2025 8:21 am Dear Dutch,

This example is working fine here with Harbour and xHarbour, when pasting on the first GET:

modified maria02.prg

Code: Select all | Expand

#include "fivewin.ch"

static aStr := { "localhost,fwh,fivetec1_antonio,1234" }

static oCn

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

function Main()

   local oRs, cSql, oDlg

   FWSetLanguage( 1 )
   FW_SetUnicode( .t. )

   if ( oCn := maria_Connect( aStr[ 1 ], .t. ) ) != nil

      TEXT INTO cSql
         SELECT C.ID AS CustID, C.FIRST AS CustName, C.AGE AS AG, C.STATE AS ST, S.NAME AS StateName
         FROM customer C
         LEFT OUTER JOIN states S ON C.STATE = S.CODE
         ORDER BY CUSTID
      ENDTEXT

      oRs   := oCn:RowSet( cSql )

      DEFINE DIALOG oDlg 

      @ 1, 1 GET oRs:CustName OF oDlg 

      @ 3, 1 GET oRs:St OF oDlg 

      ACTIVATE DIALOG oDlg CENTERED

      oCn:Close()

   endif

return nil


]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy and Paste issue with TGET and FWMariaDb :: Reply by ertan]]> 2025-04-22T07:09:45-06:00 2025-04-22T07:09:45-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279101#p279101
This problem is fixed in Fivewin 25.01

Can you rebuild the fivewin libraries?

Best regards,

Ertan Hakan ÖZTÜRK
ertan_ozturk@yahoo.com]]>

This problem is fixed in Fivewin 25.01

Can you rebuild the fivewin libraries?

Best regards,

Ertan Hakan ÖZTÜRK
ertan_ozturk@yahoo.com]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy and Paste issue with TGET and FWMariaDb :: Reply by dutch]]> 2025-04-22T07:50:09-06:00 2025-04-22T07:50:09-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279103#p279103
Where I can fix and rebuild my library version (FWH2304)?

Thanks in advance,
ertan wrote: Tue Apr 22, 2025 1:09 pm Hi Dutch,

This problem is fixed in Fivewin 25.01

Can you rebuild the fivewin libraries?

Best regards,

Ertan Hakan ÖZTÜRK
ertan_ozturk@yahoo.com
]]>

Where I can fix and rebuild my library version (FWH2304)?

Thanks in advance,
ertan wrote: Tue Apr 22, 2025 1:09 pm Hi Dutch,

This problem is fixed in Fivewin 25.01

Can you rebuild the fivewin libraries?

Best regards,

Ertan Hakan ÖZTÜRK
ertan_ozturk@yahoo.com
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy and Paste issue with TGET and FWMariaDb :: Reply by ertan]]> 2025-04-22T08:00:26-06:00 2025-04-22T08:00:26-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279104#p279104
I will check and test again before share details with Mr.Antonio Linares
The problem is in the files source\api\clpbrd.c and fwunicode.c

Best regards,

Ertan Hakan ÖZTÜRK,
ertan_ozturk@yahoo.com]]>

I will check and test again before share details with Mr.Antonio Linares
The problem is in the files source\api\clpbrd.c and fwunicode.c

Best regards,

Ertan Hakan ÖZTÜRK,
ertan_ozturk@yahoo.com]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy and Paste issue with TGET and FWMariaDb :: Reply by dutch]]> 2025-04-22T08:07:51-06:00 2025-04-22T08:07:51-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279105#p279105
I found clpbrd.c, I compare with my old FW version 1901. The different is paste image only. But I cannot find fwunicode.c in anywhere.
Image
How to fix and rebuild?
ertan wrote: Tue Apr 22, 2025 2:00 pm Hi again Dutch,

I will check and test again before share details with Mr.Antonio Linares
The problem is in the files source\api\clpbrd.c and fwunicode.c

Best regards,

Ertan Hakan ÖZTÜRK,
ertan_ozturk@yahoo.com
]]>

I found clpbrd.c, I compare with my old FW version 1901. The different is paste image only. But I cannot find fwunicode.c in anywhere.
Image
How to fix and rebuild?
ertan wrote: Tue Apr 22, 2025 2:00 pm Hi again Dutch,

I will check and test again before share details with Mr.Antonio Linares
The problem is in the files source\api\clpbrd.c and fwunicode.c

Best regards,

Ertan Hakan ÖZTÜRK,
ertan_ozturk@yahoo.com
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy and Paste issue with TGET and FWMariaDb :: Reply by ertan]]> 2025-04-22T08:19:39-06:00 2025-04-22T08:19:39-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279108#p279108
My DB Engine is MariaDB and I use always BCC with Harbour.
I need to check your problem in [x]Harbour
I need a litle time, Don't worry. Please...

unicode.c changed to fwunicode.c in fivewin 25.01

Best regards,
Ertan Hakan ÖZTÜRK,
ertan_ozturk@yahoo.com]]>

My DB Engine is MariaDB and I use always BCC with Harbour.
I need to check your problem in [x]Harbour
I need a litle time, Don't worry. Please...

unicode.c changed to fwunicode.c in fivewin 25.01

Best regards,
Ertan Hakan ÖZTÜRK,
ertan_ozturk@yahoo.com]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy and Paste issue with TGET and FWMariaDb :: Reply by dutch]]> 2025-04-22T08:32:53-06:00 2025-04-22T08:32:53-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279110#p279110
Thank you so much for your kind help. I use MariaDB too.
unicode.c changed to fwunicode.c in fivewin 25.01
I got it, thanks in advance,
ertan wrote: Tue Apr 22, 2025 2:19 pm Hi Dutch,

My DB Engine is MariaDB and I use always BCC with Harbour.
I need to check your problem in [x]Harbour
I need a litle time, Don't worry. Please...

unicode.c changed to fwunicode.c in fivewin 25.01

Best regards,
Ertan Hakan ÖZTÜRK,
ertan_ozturk@yahoo.com
]]>

Thank you so much for your kind help. I use MariaDB too.
unicode.c changed to fwunicode.c in fivewin 25.01
I got it, thanks in advance,
ertan wrote: Tue Apr 22, 2025 2:19 pm Hi Dutch,

My DB Engine is MariaDB and I use always BCC with Harbour.
I need to check your problem in [x]Harbour
I need a litle time, Don't worry. Please...

unicode.c changed to fwunicode.c in fivewin 25.01

Best regards,
Ertan Hakan ÖZTÜRK,
ertan_ozturk@yahoo.com
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy and Paste issue with TGET and FWMariaDb :: Reply by ertan]]> 2025-04-22T14:24:55-06:00 2025-04-22T14:24:55-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279119#p279119
Can you send me an e-mail for testing?

Best regards,
Ertan Hakan ÖZTÜRK
ertan_ozturk@yahoo.com]]>

Can you send me an e-mail for testing?

Best regards,
Ertan Hakan ÖZTÜRK
ertan_ozturk@yahoo.com]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy and Paste issue with TGET and FWMariaDb :: Reply by dutch]]> 2025-04-22T20:31:32-06:00 2025-04-22T20:31:32-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279123#p279123
my email : dutchez4@gmail.com

Thank you,
ertan wrote: Tue Apr 22, 2025 8:24 pm Hi again Dutch,

Can you send me an e-mail for testing?

Best regards,
Ertan Hakan ÖZTÜRK
ertan_ozturk@yahoo.com
]]>

my email : dutchez4@gmail.com

Thank you,
ertan wrote: Tue Apr 22, 2025 8:24 pm Hi again Dutch,

Can you send me an e-mail for testing?

Best regards,
Ertan Hakan ÖZTÜRK
ertan_ozturk@yahoo.com
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy and Paste issue with TGET and FWMariaDb :: Reply by ertan]]> 2025-04-22T22:24:24-06:00 2025-04-22T22:24:24-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279126#p279126
I sent your email.

Best regards,
Ertan Hakan ÖZTÜRK

ertan_ozturk@yahoo.com]]>

I sent your email.

Best regards,
Ertan Hakan ÖZTÜRK

ertan_ozturk@yahoo.com]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy and Paste issue with TGET and FWMariaDb :: Reply by dutch]]> 2025-04-23T02:16:07-06:00 2025-04-23T02:16:07-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279127#p279127
How to rebuild c file to library?

thanks in advance,
ertan wrote: Wed Apr 23, 2025 4:24 am Dear Dutch,

I sent your email.

Best regards,
Ertan Hakan ÖZTÜRK

ertan_ozturk@yahoo.com
]]>

How to rebuild c file to library?

thanks in advance,
ertan wrote: Wed Apr 23, 2025 4:24 am Dear Dutch,

I sent your email.

Best regards,
Ertan Hakan ÖZTÜRK

ertan_ozturk@yahoo.com
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy and Paste issue with TGET and FWMariaDb :: Reply by dutch]]> 2025-04-23T03:19:38-06:00 2025-04-23T03:19:38-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279129#p279129
I compile and rebuild to FIVEHC.LIB but the issue does not solve, still the same.

Thanks in advance,]]>

I compile and rebuild to FIVEHC.LIB but the issue does not solve, still the same.

Thanks in advance,]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy and Paste issue with TGET and FWMariaDb :: Reply by ertan]]> 2025-04-23T04:02:04-06:00 2025-04-23T04:02:04-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279130#p279130
I try reproduce your error and analysis this with xHarbour

Best regards,

Ertan Hakan ÖZTÜRK
ertan_ozturk@yahoo.com]]>

I try reproduce your error and analysis this with xHarbour

Best regards,

Ertan Hakan ÖZTÜRK
ertan_ozturk@yahoo.com]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy and Paste issue with TGET and FWMariaDb :: Reply by dutch]]> 2025-04-23T04:38:56-06:00 2025-04-23T04:38:56-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279132#p279132
I used xHarbour 1.2.3 Intl. (SimpLex) (Build 20221118).
I changed xHarbour to older version xHarbour 1.2.3 Intl. (SimpLex) (Build 20201212), it's still the same problem.
ertan wrote: Wed Apr 23, 2025 10:02 am Dear Dutch,

I try reproduce your error and analysis this with xHarbour

Best regards,

Ertan Hakan ÖZTÜRK
ertan_ozturk@yahoo.com
]]>

I used xHarbour 1.2.3 Intl. (SimpLex) (Build 20221118).
I changed xHarbour to older version xHarbour 1.2.3 Intl. (SimpLex) (Build 20201212), it's still the same problem.
ertan wrote: Wed Apr 23, 2025 10:02 am Dear Dutch,

I try reproduce your error and analysis this with xHarbour

Best regards,

Ertan Hakan ÖZTÜRK
ertan_ozturk@yahoo.com
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy and Paste issue with TGET and FWMariaDb :: Reply by ertan]]> 2025-04-23T06:01:14-06:00 2025-04-23T06:01:14-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279134#p279134
The problem is not caused by xHarbour

Please check your email,

Best regards,
Ertan Hakan ÖZTÜRK

ertan_ozturk@yahoo.com]]>

The problem is not caused by xHarbour

Please check your email,

Best regards,
Ertan Hakan ÖZTÜRK

ertan_ozturk@yahoo.com]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy and Paste issue with TGET and FWMariaDb :: Reply by dutch]]> 2025-04-24T16:33:13-06:00 2025-04-24T16:33:13-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279163#p279163
I still struck with this issue (FWH2304). Previous version, I use FWH1901 without this problem. Could you help to fix it please.

Thanks in advance,
Antonio Linares wrote: Mon Apr 21, 2025 8:21 am Dear Dutch,

This example is working fine here with Harbour and xHarbour, when pasting on the first GET:

modified maria02.prg

Code: Select all | Expand

#include "fivewin.ch"

static aStr := { "localhost,fwh,fivetec1_antonio,1234" }

static oCn

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

function Main()

   local oRs, cSql, oDlg

   FWSetLanguage( 1 )
   FW_SetUnicode( .t. )

   if ( oCn := maria_Connect( aStr[ 1 ], .t. ) ) != nil

      TEXT INTO cSql
         SELECT C.ID AS CustID, C.FIRST AS CustName, C.AGE AS AG, C.STATE AS ST, S.NAME AS StateName
         FROM customer C
         LEFT OUTER JOIN states S ON C.STATE = S.CODE
         ORDER BY CUSTID
      ENDTEXT

      oRs   := oCn:RowSet( cSql )

      DEFINE DIALOG oDlg 

      @ 1, 1 GET oRs:CustName OF oDlg 

      @ 3, 1 GET oRs:St OF oDlg 

      ACTIVATE DIALOG oDlg CENTERED

      oCn:Close()

   endif

return nil


]]>

I still struck with this issue (FWH2304). Previous version, I use FWH1901 without this problem. Could you help to fix it please.

Thanks in advance,
Antonio Linares wrote: Mon Apr 21, 2025 8:21 am Dear Dutch,

This example is working fine here with Harbour and xHarbour, when pasting on the first GET:

modified maria02.prg

Code: Select all | Expand

#include "fivewin.ch"

static aStr := { "localhost,fwh,fivetec1_antonio,1234" }

static oCn

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

function Main()

   local oRs, cSql, oDlg

   FWSetLanguage( 1 )
   FW_SetUnicode( .t. )

   if ( oCn := maria_Connect( aStr[ 1 ], .t. ) ) != nil

      TEXT INTO cSql
         SELECT C.ID AS CustID, C.FIRST AS CustName, C.AGE AS AG, C.STATE AS ST, S.NAME AS StateName
         FROM customer C
         LEFT OUTER JOIN states S ON C.STATE = S.CODE
         ORDER BY CUSTID
      ENDTEXT

      oRs   := oCn:RowSet( cSql )

      DEFINE DIALOG oDlg 

      @ 1, 1 GET oRs:CustName OF oDlg 

      @ 3, 1 GET oRs:St OF oDlg 

      ACTIVATE DIALOG oDlg CENTERED

      oCn:Close()

   endif

return nil


]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy and Paste issue with TGET and FWMariaDb :: Reply by Antonio Linares]]> 2025-04-24T21:14:05-06:00 2025-04-24T21:14:05-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279170#p279170
Already sent by email a working 2304 version

Waiting for your feedback]]>

Already sent by email a working 2304 version

Waiting for your feedback]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy and Paste issue with TGET and FWMariaDb :: Reply by dutch]]> 2025-04-25T02:27:44-06:00 2025-04-25T02:27:44-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45635&p=279174#p279174
After Antonio help, the issue has fixed and work perfectly now.

Thank you so much for your kind support.
Antonio Linares wrote: Fri Apr 25, 2025 3:14 am Dear Dutch,

Already sent by email a working 2304 version

Waiting for your feedback
]]>

After Antonio help, the issue has fixed and work perfectly now.

Thank you so much for your kind support.
Antonio Linares wrote: Fri Apr 25, 2025 3:14 am Dear Dutch,

Already sent by email a working 2304 version

Waiting for your feedback
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Fivedit - Download :: Reply by ssbbs]]> 2025-04-08T19:28:59-06:00 2025-04-08T19:28:59-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45615&p=278907#p278907 :D :D]]> :D :D]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Fivedit - Download :: Reply by cnavarro]]> 2025-04-09T03:21:04-06:00 2025-04-09T03:21:04-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45615&p=278909#p278909 ]]> ]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Fivedit - Download :: Reply by cnavarro]]> 2025-04-15T23:37:29-06:00 2025-04-15T23:37:29-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45615&p=278997#p278997 https://discord.gg/d2zyR8UY]]> https://discord.gg/d2zyR8UY]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Fivedit - Download :: Reply by cnavarro]]> 2025-04-22T03:47:57-06:00 2025-04-22T03:47:57-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45615&p=279091#p279091 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Fivedit - Download :: Reply by cnavarro]]> 2025-04-26T17:14:38-06:00 2025-04-26T17:14:38-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45615&p=279200#p279200 FIVEDIT 64 bits in Discord]]> FIVEDIT 64 bits in Discord]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Fivedit - Download :: Reply by Baxajaun]]> 2025-04-27T05:53:38-06:00 2025-04-27T05:53:38-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45615&p=279204#p279204
Regards,]]>

Regards,]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Fivedit - Download :: Reply by cnavarro]]> 2025-04-27T07:49:01-06:00 2025-04-27T07:49:01-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45615&p=279205#p279205 https://learn.microsoft.com/es-es/visua ... stribution]]> https://learn.microsoft.com/es-es/visua ... stribution]]> <![CDATA[FiveWin for Harbour/xHarbour :: Freeze table rows :: Author Natter]]> 2025-04-29T02:25:44-06:00 2025-04-29T02:25:44-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45646&p=279231#p279231
Is it possible to fix (freeze) table rows in RichEdit ?]]>

Is it possible to fix (freeze) table rows in RichEdit ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Freeze table rows :: Reply by Antonio Linares]]> 2025-04-29T02:35:58-06:00 2025-04-29T02:35:58-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45646&p=279232#p279232
However, you can achieve a similar effect programmatically or through workarounds, depending on your application’s requirements.

Here are some approaches:

Custom Implementation in Your Application:
If you’re using RichEdit in a custom application (e.g., with C++, Delphi, or C#), you can simulate frozen rows by splitting the content into two RichEdit controls:

One control displays the "frozen" header rows (non-scrollable).
Another control below it contains the scrollable table content.
Synchronize the column widths and formatting between the two controls to maintain alignment.
Handle scrolling events to keep the header control static while the body scrolls.

RTF Table Formatting:

RichEdit’s RTF tables (using \trowd and related RTF codes) allow basic table creation but don’t support freezing rows natively.
You can manually ensure that header rows remain visible by programmatically keeping them at the top of the visible area when scrolling. This requires handling scroll events and adjusting the view, which can be complex and may not be seamless.

Alternative Controls:

If freezing table rows is a critical feature, consider using a more advanced control like a grid control (e.g., TGrid in Delphi, DataGridView in .NET, or third-party controls like DevExpress or Telerik) instead of RichEdit. These controls are designed for tabular data and often support frozen rows/columns natively.

Limitations:

RichEdit is primarily a text-editing control, not a spreadsheet or grid control. Its table support is limited to basic formatting and lacks advanced features like row/column locking.

Implementing a freeze-like feature in RichEdit requires significant custom code and may not provide a smooth user experience.]]>

However, you can achieve a similar effect programmatically or through workarounds, depending on your application’s requirements.

Here are some approaches:

Custom Implementation in Your Application:
If you’re using RichEdit in a custom application (e.g., with C++, Delphi, or C#), you can simulate frozen rows by splitting the content into two RichEdit controls:

One control displays the "frozen" header rows (non-scrollable).
Another control below it contains the scrollable table content.
Synchronize the column widths and formatting between the two controls to maintain alignment.
Handle scrolling events to keep the header control static while the body scrolls.

RTF Table Formatting:

RichEdit’s RTF tables (using \trowd and related RTF codes) allow basic table creation but don’t support freezing rows natively.
You can manually ensure that header rows remain visible by programmatically keeping them at the top of the visible area when scrolling. This requires handling scroll events and adjusting the view, which can be complex and may not be seamless.

Alternative Controls:

If freezing table rows is a critical feature, consider using a more advanced control like a grid control (e.g., TGrid in Delphi, DataGridView in .NET, or third-party controls like DevExpress or Telerik) instead of RichEdit. These controls are designed for tabular data and often support frozen rows/columns natively.

Limitations:

RichEdit is primarily a text-editing control, not a spreadsheet or grid control. Its table support is limited to basic formatting and lacks advanced features like row/column locking.

Implementing a freeze-like feature in RichEdit requires significant custom code and may not provide a smooth user experience.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Freeze table rows :: Reply by Natter]]> 2025-04-29T03:14:44-06:00 2025-04-29T03:14:44-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45646&p=279233#p279233 <![CDATA[FiveWin for Harbour/xHarbour :: DeepWiki :: Author Antonio Linares]]> 2025-04-26T23:02:30-06:00 2025-04-26T23:02:30-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45644&p=279203#p279203 https://deepwiki.com/harbour/core

FiveMac's review:
https://deepwiki.com/FiveTechSoft/fivemac

FiveLinux2's review:
https://deepwiki.com/FiveTechSoft/FiveLinux2

FiveLinux3's review:
https://deepwiki.com/FiveTechSoft/FiveLinux3

ModHarbour's review:
https://deepwiki.com/FiveTechSoft/mod_harbour]]>
https://deepwiki.com/harbour/core

FiveMac's review:
https://deepwiki.com/FiveTechSoft/fivemac

FiveLinux2's review:
https://deepwiki.com/FiveTechSoft/FiveLinux2

FiveLinux3's review:
https://deepwiki.com/FiveTechSoft/FiveLinux3

ModHarbour's review:
https://deepwiki.com/FiveTechSoft/mod_harbour]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: DeepWiki :: Reply by Antonio Linares]]> 2025-04-30T09:39:13-06:00 2025-04-30T09:39:13-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45644&p=279268#p279268 https://docs.devin.ai/get-started/devin-intro]]> https://docs.devin.ai/get-started/devin-intro]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by vilian]]> 2025-04-10T06:33:01-06:00 2025-04-10T06:33:01-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45548&p=278924#p278924 I really wanted update my FWH version to try webview2, but with this problem, I can't do it :(]]> I really wanted update my FWH version to try webview2, but with this problem, I can't do it :(]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by cnavarro]]> 2025-04-10T08:36:15-06:00 2025-04-10T08:36:15-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45548&p=278927#p278927 viewtopic.php?p=278689#p278689]]> viewtopic.php?p=278689#p278689]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by vilian]]> 2025-04-10T11:33:54-06:00 2025-04-10T11:33:54-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45548&p=278931#p278931 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by Enrico Maria Giordano]]> 2025-04-10T11:48:17-06:00 2025-04-10T11:48:17-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45548&p=278933#p278933 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by vilian]]> 2025-04-10T12:30:36-06:00 2025-04-10T12:30:36-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45548&p=278935#p278935 I sent it by email to Cristobal.]]> I sent it by email to Cristobal.]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by Enrico Maria Giordano]]> 2025-04-10T13:23:36-06:00 2025-04-10T13:23:36-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45548&p=278937#p278937 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by Antonio Linares]]> 2025-04-20T09:13:21-06:00 2025-04-20T09:13:21-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45548&p=279065#p279065
Thanks to Hakan Öztürk as has found the difference in the code :D

It seems as Mr. Rao changed a call to hb_valStrnToNum() into a call to hb_strnToNum()

According to Mr. Rao's notes:

Code: Select all | Expand

#ifdef REMOVED
/*
               hb_arraySetND( aRow, i + 1, ( mrow[ i ] == NULL ? 0.0 : hb_strVal( mrow[ i ], aLen[ i ] ) ) );
               break;  // loss of accuracy in case of bigint large numbers
*/

/*
               // nor working in case of double datatpe with large numbers
               if( ! hb_valStrnToNum( mrow[ i ], aLen[ i ], &lValue, &dValue, &iDec, &iWidth ) )
               {
                  hb_arraySetNL( aRow, i + 1, ( long ) lValue );
               }
               else
               {
                  hb_itemPutNDLen( itemTmp, dValue, iWidth, iDec );
                  hb_arraySetForward( aRow, i + 1, itemTmp );
               }

               break;
*/
#endif
The modified code uses this now:

Code: Select all | Expand

            case 'N':

               if ( ( nAt = ( int ) hb_strAtI( "e", 1, mrow[ i ], aLen[ i ] ) ) > 0 )
               {
                  dValue = hb_strVal( mrow[ i ], aLen[ i ] );
                  x = ( int ) hb_strVal( mrow[ i ] + nAt, aLen[ i ] - nAt );
                  dValue *= pow( ( double ) 10.0, ( double ) x );
                  hb_arraySetND( aRow, i + 1, dValue );
               }
               else
               {
                  if ( hb_strnToNum( mrow[ i ], aLen[ i ], &lValue, &dValue ) )
                  {
                     hb_arraySetND( aRow, i + 1, dValue );
                  }
                  else
                  {
                     hb_arraySetNLL( aRow, i + 1, lValue );
                  }
               }
               break;
We can revert this change and send you a modified lib for your testing. Please let me know if you want it for 32 or 64 bits ? Borland or MSVC ? many thanks!]]>

Thanks to Hakan Öztürk as has found the difference in the code :D

It seems as Mr. Rao changed a call to hb_valStrnToNum() into a call to hb_strnToNum()

According to Mr. Rao's notes:

Code: Select all | Expand

#ifdef REMOVED
/*
               hb_arraySetND( aRow, i + 1, ( mrow[ i ] == NULL ? 0.0 : hb_strVal( mrow[ i ], aLen[ i ] ) ) );
               break;  // loss of accuracy in case of bigint large numbers
*/

/*
               // nor working in case of double datatpe with large numbers
               if( ! hb_valStrnToNum( mrow[ i ], aLen[ i ], &lValue, &dValue, &iDec, &iWidth ) )
               {
                  hb_arraySetNL( aRow, i + 1, ( long ) lValue );
               }
               else
               {
                  hb_itemPutNDLen( itemTmp, dValue, iWidth, iDec );
                  hb_arraySetForward( aRow, i + 1, itemTmp );
               }

               break;
*/
#endif
The modified code uses this now:

Code: Select all | Expand

            case 'N':

               if ( ( nAt = ( int ) hb_strAtI( "e", 1, mrow[ i ], aLen[ i ] ) ) > 0 )
               {
                  dValue = hb_strVal( mrow[ i ], aLen[ i ] );
                  x = ( int ) hb_strVal( mrow[ i ] + nAt, aLen[ i ] - nAt );
                  dValue *= pow( ( double ) 10.0, ( double ) x );
                  hb_arraySetND( aRow, i + 1, dValue );
               }
               else
               {
                  if ( hb_strnToNum( mrow[ i ], aLen[ i ], &lValue, &dValue ) )
                  {
                     hb_arraySetND( aRow, i + 1, dValue );
                  }
                  else
                  {
                     hb_arraySetNLL( aRow, i + 1, lValue );
                  }
               }
               break;
We can revert this change and send you a modified lib for your testing. Please let me know if you want it for 32 or 64 bits ? Borland or MSVC ? many thanks!]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by vilian]]> 2025-04-22T05:04:45-06:00 2025-04-22T05:04:45-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45548&p=279097#p279097
I'm using Borland/32bits.]]>

I'm using Borland/32bits.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by ertan]]> 2025-04-22T06:34:44-06:00 2025-04-22T06:34:44-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45548&p=279098#p279098
Can you solved your lost connection problems?

Best Regards,

Ertan Hakan ÖZTÜRK
ertan_ozturk@yahoo.com]]>

Can you solved your lost connection problems?

Best Regards,

Ertan Hakan ÖZTÜRK
ertan_ozturk@yahoo.com]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by vilian]]> 2025-04-22T06:45:42-06:00 2025-04-22T06:45:42-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45548&p=279099#p279099 ]]> ]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by vilian]]> 2025-04-30T04:35:41-06:00 2025-04-30T04:35:41-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45548&p=279248#p279248
Antonio Linares wrote: Sun Apr 20, 2025 3:13 pm Dear Vilian,

Thanks to Hakan Öztürk as has found the difference in the code :D

It seems as Mr. Rao changed a call to hb_valStrnToNum() into a call to hb_strnToNum()

According to Mr. Rao's notes:

Code: Select all | Expand

#ifdef REMOVED
/*
               hb_arraySetND( aRow, i + 1, ( mrow[ i ] == NULL ? 0.0 : hb_strVal( mrow[ i ], aLen[ i ] ) ) );
               break;  // loss of accuracy in case of bigint large numbers
*/

/*
               // nor working in case of double datatpe with large numbers
               if( ! hb_valStrnToNum( mrow[ i ], aLen[ i ], &lValue, &dValue, &iDec, &iWidth ) )
               {
                  hb_arraySetNL( aRow, i + 1, ( long ) lValue );
               }
               else
               {
                  hb_itemPutNDLen( itemTmp, dValue, iWidth, iDec );
                  hb_arraySetForward( aRow, i + 1, itemTmp );
               }

               break;
*/
#endif
The modified code uses this now:

Code: Select all | Expand

            case 'N':

               if ( ( nAt = ( int ) hb_strAtI( "e", 1, mrow[ i ], aLen[ i ] ) ) > 0 )
               {
                  dValue = hb_strVal( mrow[ i ], aLen[ i ] );
                  x = ( int ) hb_strVal( mrow[ i ] + nAt, aLen[ i ] - nAt );
                  dValue *= pow( ( double ) 10.0, ( double ) x );
                  hb_arraySetND( aRow, i + 1, dValue );
               }
               else
               {
                  if ( hb_strnToNum( mrow[ i ], aLen[ i ], &lValue, &dValue ) )
                  {
                     hb_arraySetND( aRow, i + 1, dValue );
                  }
                  else
                  {
                     hb_arraySetNLL( aRow, i + 1, lValue );
                  }
               }
               break;
We can revert this change and send you a modified lib for your testing. Please let me know if you want it for 32 or 64 bits ? Borland or MSVC ? many thanks!
Good Morning Antonio,
When will it be available to me ?]]>
Antonio Linares wrote: Sun Apr 20, 2025 3:13 pm Dear Vilian,

Thanks to Hakan Öztürk as has found the difference in the code :D

It seems as Mr. Rao changed a call to hb_valStrnToNum() into a call to hb_strnToNum()

According to Mr. Rao's notes:

Code: Select all | Expand

#ifdef REMOVED
/*
               hb_arraySetND( aRow, i + 1, ( mrow[ i ] == NULL ? 0.0 : hb_strVal( mrow[ i ], aLen[ i ] ) ) );
               break;  // loss of accuracy in case of bigint large numbers
*/

/*
               // nor working in case of double datatpe with large numbers
               if( ! hb_valStrnToNum( mrow[ i ], aLen[ i ], &lValue, &dValue, &iDec, &iWidth ) )
               {
                  hb_arraySetNL( aRow, i + 1, ( long ) lValue );
               }
               else
               {
                  hb_itemPutNDLen( itemTmp, dValue, iWidth, iDec );
                  hb_arraySetForward( aRow, i + 1, itemTmp );
               }

               break;
*/
#endif
The modified code uses this now:

Code: Select all | Expand

            case 'N':

               if ( ( nAt = ( int ) hb_strAtI( "e", 1, mrow[ i ], aLen[ i ] ) ) > 0 )
               {
                  dValue = hb_strVal( mrow[ i ], aLen[ i ] );
                  x = ( int ) hb_strVal( mrow[ i ] + nAt, aLen[ i ] - nAt );
                  dValue *= pow( ( double ) 10.0, ( double ) x );
                  hb_arraySetND( aRow, i + 1, dValue );
               }
               else
               {
                  if ( hb_strnToNum( mrow[ i ], aLen[ i ], &lValue, &dValue ) )
                  {
                     hb_arraySetND( aRow, i + 1, dValue );
                  }
                  else
                  {
                     hb_arraySetNLL( aRow, i + 1, lValue );
                  }
               }
               break;
We can revert this change and send you a modified lib for your testing. Please let me know if you want it for 32 or 64 bits ? Borland or MSVC ? many thanks!
Good Morning Antonio,
When will it be available to me ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by Antonio Linares]]> 2025-04-30T06:47:21-06:00 2025-04-30T06:47:21-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45548&p=279250#p279250
You are using FWH 25.01, right ?

Borland 32 bits]]>

You are using FWH 25.01, right ?

Borland 32 bits]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by vilian]]> 2025-04-30T09:31:37-06:00 2025-04-30T09:31:37-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45548&p=279266#p279266 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by Antonio Linares]]> 2025-04-30T09:37:18-06:00 2025-04-30T09:37:18-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45548&p=279267#p279267 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by vilian]]> 2025-04-30T10:35:38-06:00 2025-04-30T10:35:38-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45548&p=279276#p279276 FWH2311 doesn't have this problem. I Wanted this fix for FWH 25.01, so i could move my program to this version.]]> FWH2311 doesn't have this problem. I Wanted this fix for FWH 25.01, so i could move my program to this version.]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by Antonio Linares]]> 2025-04-30T11:06:23-06:00 2025-04-30T11:06:23-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45548&p=279282#p279282
Please do this:

1. go to FWH 25.01 lib folder:
copy fiveh.lib fiveh.old

2. go to FWH 23.11 lib folder:
c:\bcc77\bin\tlib fiveh.lib * fwmaria.obj
copy fwmaria.obj to your FWH 25.01 lib folder

3. go to FWH 25.01 lib folder:
c:\bcc77\bin\tlib fiveh.lib -+ fwmaria.obj]]>

Please do this:

1. go to FWH 25.01 lib folder:
copy fiveh.lib fiveh.old

2. go to FWH 23.11 lib folder:
c:\bcc77\bin\tlib fiveh.lib * fwmaria.obj
copy fwmaria.obj to your FWH 25.01 lib folder

3. go to FWH 25.01 lib folder:
c:\bcc77\bin\tlib fiveh.lib -+ fwmaria.obj]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Natter]]> 2025-04-25T12:27:35-06:00 2025-04-25T12:27:35-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45610&p=279185#p279185 After selecting from the POPUP menu, all the buttons TBUTOON, BTNBMP, etc. cease to be clickable (however, they do not receive the disable status).
This can be solved by opening msg info(111). After clicking the mouse on the control, the clickability of all buttons will be restored.
What could be the reason for this behavior ?]]>
After selecting from the POPUP menu, all the buttons TBUTOON, BTNBMP, etc. cease to be clickable (however, they do not receive the disable status).
This can be solved by opening msg info(111). After clicking the mouse on the control, the clickability of all buttons will be restored.
What could be the reason for this behavior ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Antonio Linares]]> 2025-04-25T18:55:24-06:00 2025-04-25T18:55:24-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45610&p=279189#p279189
Could you provide a screenshot ?]]>

Could you provide a screenshot ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Natter]]> 2025-04-25T23:43:04-06:00 2025-04-25T23:43:04-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45610&p=279191#p279191 There is a panel (TPanel) on the shared window (wnd). There is a TGet on this panel with a button

Code: Select all | Expand

 
  local oCl
  private oWnd           

  oCl:=TGet():New(100, 100, "  ", oWnd:aControls[1], 500, 20, replicate("X", 35),, ;
                                                  CLR_BLACK, RGB(245, 245, 245),,,, .T.,,,, .T.)

  oBt:=TButton():New(0, oCl:nWidth-22,"...", oCl,, 20, oCl:nHeight-2,,,, .T.)
          oBt:bAction:={||Mnu_Tls()}
Clicking on the button opens the menu.

Code: Select all | Expand

procedure Mnu_Tls
local st, dim:=getcursorpos(), mas:={"One","Two","Three"}
local oMen, oCl

    MENU oMen POPUP  2007 
        for st=1 to len(mas)
          if st>1
            SEPARATOR
          endif
          MENUITEM oCl PROMPT mas[st]
          oCl:bAction:=&('{||oWnd:aControls[1]:aControls[1]:cText(" '+ mas[st]+' '")}')
        next 
    ENDMENU

    ACTIVATE POPUP oMen OF oWnd  AT dim[1], dim[2]
  return
The menu can no longer be called a second time - the "..." button it is not clickable. But if you write like this

Code: Select all | Expand

 oCl:bAction:=&('{||oWnd:aControls[1]:aControls[1]:cText(" '+ mas[st]+' '"), msginfo(123)}')
That's all right]]>
There is a panel (TPanel) on the shared window (wnd). There is a TGet on this panel with a button

Code: Select all | Expand

 
  local oCl
  private oWnd           

  oCl:=TGet():New(100, 100, "  ", oWnd:aControls[1], 500, 20, replicate("X", 35),, ;
                                                  CLR_BLACK, RGB(245, 245, 245),,,, .T.,,,, .T.)

  oBt:=TButton():New(0, oCl:nWidth-22,"...", oCl,, 20, oCl:nHeight-2,,,, .T.)
          oBt:bAction:={||Mnu_Tls()}
Clicking on the button opens the menu.

Code: Select all | Expand

procedure Mnu_Tls
local st, dim:=getcursorpos(), mas:={"One","Two","Three"}
local oMen, oCl

    MENU oMen POPUP  2007 
        for st=1 to len(mas)
          if st>1
            SEPARATOR
          endif
          MENUITEM oCl PROMPT mas[st]
          oCl:bAction:=&('{||oWnd:aControls[1]:aControls[1]:cText(" '+ mas[st]+' '")}')
        next 
    ENDMENU

    ACTIVATE POPUP oMen OF oWnd  AT dim[1], dim[2]
  return
The menu can no longer be called a second time - the "..." button it is not clickable. But if you write like this

Code: Select all | Expand

 oCl:bAction:=&('{||oWnd:aControls[1]:aControls[1]:cText(" '+ mas[st]+' '"), msginfo(123)}')
That's all right]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Antonio Linares]]> 2025-04-26T01:20:08-06:00 2025-04-26T01:20:08-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45610&p=279192#p279192 <![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Natter]]> 2025-04-29T06:52:52-06:00 2025-04-29T06:52:52-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45610&p=279236#p279236 <![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Antonio Linares]]> 2025-04-29T12:01:21-06:00 2025-04-29T12:01:21-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45610&p=279238#p279238 <![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Natter]]> 2025-04-29T12:59:54-06:00 2025-04-29T12:59:54-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45610&p=279239#p279239 ]]> ]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Antonio Linares]]> 2025-04-29T23:09:29-06:00 2025-04-29T23:09:29-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45610&p=279245#p279245
Please use MsgBeep() from the codeblock to test when it is called.]]>

Please use MsgBeep() from the codeblock to test when it is called.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Natter]]> 2025-05-01T02:17:33-06:00 2025-05-01T02:17:33-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45610&p=279287#p279287 Wine ?]]> Wine ?]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Antonio Linares]]> 2025-05-01T03:03:01-06:00 2025-05-01T03:03:01-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45610&p=279289#p279289 <![CDATA[FiveWin for Harbour/xHarbour :: new mingw 15.1 :: Author JoséQuintas]]> 2025-05-01T06:23:51-06:00 2025-05-01T06:23:51-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45650&p=279290#p279290
Since first time, I use harbour build in any mingw version.
From 4.7 to newer 15.1
It is needed to be mingw DWARF, and this is the default on winlibs.com

I am working with mingw 15.1 now, and using same fivewin than before.
It is working with NO problem.]]>

Since first time, I use harbour build in any mingw version.
From 4.7 to newer 15.1
It is needed to be mingw DWARF, and this is the default on winlibs.com

I am working with mingw 15.1 now, and using same fivewin than before.
It is working with NO problem.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: new mingw 15.1 :: Reply by karinha]]> 2025-05-01T10:39:04-06:00 2025-05-01T10:39:04-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45650&p=279291#p279291 .bat / lnk, .bat / .mak, etc?

Onde descargar o MINGW? Url?

Mister Quintas, if it's not too much to ask, could you teach us how to compile FIVEWIN with MINGW?
.bat / lnk, .bat / .mak, etc?

Where can I download MINGW? Url?

Gracias, tks.

Regards, saludos.]]>
.bat / lnk, .bat / .mak, etc?

Onde descargar o MINGW? Url?

Mister Quintas, if it's not too much to ask, could you teach us how to compile FIVEWIN with MINGW?
.bat / lnk, .bat / .mak, etc?

Where can I download MINGW? Url?

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: oAuth2 :: Author Randal]]> 2025-05-01T13:14:57-06:00 2025-05-01T13:14:57-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45651&p=279293#p279293
I'm using FWH 2023.06 and xHarbour.

Where can I find the HttpPost function?

Can I use Curl with these versions and if so, what do I need?

Thanks,
Randal]]>

I'm using FWH 2023.06 and xHarbour.

Where can I find the HttpPost function?

Can I use Curl with these versions and if so, what do I need?

Thanks,
Randal]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: oAuth2 :: Reply by Antonio Linares]]> 2025-05-01T15:10:17-06:00 2025-05-01T15:10:17-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45651&p=279295#p279295
In FWH 25.01 there is a new Class TOAuth and a Class TGmail that inherits from TOAuth, both developed by Lailton and a samples\gmail\testgmail.prg example]]>

In FWH 25.01 there is a new Class TOAuth and a Class TGmail that inherits from TOAuth, both developed by Lailton and a samples\gmail\testgmail.prg example]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Db and cloud :: Author damianodec]]> 2025-05-01T14:09:23-06:00 2025-05-01T14:09:23-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45652&p=279294#p279294 A my customer (as400 Db2 server) now is in cloud.
My app that export data each morning read db from sql server and write to as400 by oledb connection.
Before cloud export data (50.000 records) in about 10 minutes, now export time is about 1 hour.
Lan connection is very good e internet is very fast.
How can I improve export time?
Damiano]]>
A my customer (as400 Db2 server) now is in cloud.
My app that export data each morning read db from sql server and write to as400 by oledb connection.
Before cloud export data (50.000 records) in about 10 minutes, now export time is about 1 hour.
Lan connection is very good e internet is very fast.
How can I improve export time?
Damiano]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Db and cloud :: Reply by Antonio Linares]]> 2025-05-01T15:12:13-06:00 2025-05-01T15:12:13-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45652&p=279296#p279296
Grok 3 answer:

The significant increase in export time after moving your AS400 DB2 server to the cloud is likely due to factors such as network latency, cloud infrastructure configuration, or inefficiencies in the data transfer process. Below are steps to diagnose and improve the export time for your application, which reads from SQL Server and writes to the AS400 DB2 server via an OLEDB connection.
1. Diagnose the Bottleneck
To optimize performance, first identify where the bottleneck lies—network, database, or application.
Network Latency and Bandwidth:
Even with a "very fast" internet connection, cloud environments introduce latency due to geographic distance or network hops. Measure the round-trip time (RTT) to the cloud server using tools like ping or tracert.
Check if the cloud provider’s network performance aligns with your expectations (e.g., dedicated vs. shared bandwidth).
Verify if there are any VPN or firewall configurations slowing down the connection.
Database Performance:
Check the cloud DB2 server's resource allocation (CPU, memory, I/O). The cloud instance may have lower performance than the on-premises AS400 hardware.
Run performance diagnostics on the DB2 server (e.g., WRKSYSSTS or DB2 performance tools) to check for resource contention or locking issues.
Ensure indexes on the target DB2 tables are optimized for the write operations.
Application and OLEDB:
Profile the application to confirm whether the slowdown is in reading from SQL Server, processing data, or writing to DB2.
Verify if the OLEDB driver is up-to-date and optimized for cloud connectivity. Older drivers may not handle cloud environments efficiently.
Check if the application is performing row-by-row inserts, which are slow over high-latency connections.
2. Optimize Data Transfer
Based on the diagnosis, consider these strategies to reduce export time:
a. Batch Processing
Problem: If your application is inserting records one-by-one (row-by-row) via OLEDB, each insert incurs network latency, significantly slowing down the process.
Solution:
Modify the application to use batch inserts. Group multiple records (e.g., 100–1000 rows) into a single OLEDB transaction or parameterized query.
Example: Instead of INSERT INTO table VALUES (...) for each row, use a bulk insert or multi-row insert syntax supported by DB2.
If the OLEDB driver supports it, enable batching in the connection settings.
b. Bulk Data Transfer
Problem: Individual inserts are inefficient for large datasets like 50,000 records.
Solution:
Use DB2’s bulk load utilities, such as IMPORT or LOAD, to transfer data in bulk.
Export data from SQL Server to a flat file (e.g., CSV) and use DB2’s IMPORT command or a cloud-compatible ETL tool to load the file into DB2.
If direct file transfer is not feasible, consider using a staging table in DB2 and then moving data to the final table with a single INSERT ... SELECT query.
c. Optimize OLEDB Connection
Problem: The OLEDB connection may not be tuned for cloud performance.
Solution:
Use the latest IBM i Access Client Solutions or IBM DB2 OLEDB driver, which may offer better performance for cloud environments.
Adjust connection properties, such as ConnectionTimeout, CommandTimeout, or PacketSize, to optimize for cloud latency.
Enable connection pooling to reduce overhead for repeated connections.
d. Compress Data
Problem: Transferring 50,000 records over the network may be slowed by data volume.
Solution:
Compress the data before transfer (e.g., zip the CSV file if using bulk load).
If the application supports it, enable data compression in the OLEDB driver or network layer.
3. Optimize Cloud Infrastructure
The cloud environment may not be configured optimally for your workload.
Upgrade Cloud Instance:
Ensure the cloud DB2 instance has sufficient CPU, memory, and I/O capacity. Compare the cloud instance’s specs to the on-premises AS400 hardware.
If using a shared cloud instance, consider upgrading to a dedicated instance to avoid resource contention.
Geographic Proximity:
Deploy the DB2 server in a cloud region closer to your application’s location to reduce latency.
If your application is on-premises, consider a hybrid setup where critical workloads remain closer to the application.
Network Optimization:
Use a direct connection (e.g., AWS Direct Connect, Azure ExpressRoute) to the cloud provider to reduce latency and improve bandwidth.
If using a VPN, ensure it’s configured for high performance (e.g., optimized MTU settings).
4. Alternative Approaches
If the above optimizations don’t sufficiently reduce export time, consider these alternatives:
ETL Tools:
Use an ETL tool like IBM DataStage, Talend, or Informatica to handle data transfer. These tools are optimized for large-scale data movement and can leverage cloud-native features.
Configure the ETL tool to run in the cloud, closer to the DB2 server, to minimize network latency.
Cloud-Native Integration:
If the SQL Server is also in the cloud, use cloud-native integration services (e.g., AWS Glue, Azure Data Factory) to move data between SQL Server and DB2.
These services can handle large datasets efficiently and reduce the dependency on OLEDB.
Asynchronous Processing:
If real-time exports aren’t required, schedule the export as a background job on the cloud server using a script or stored procedure, reducing the impact of network latency.
5. Test and Monitor
Benchmark Changes: After implementing changes, measure the export time to quantify improvements.
Monitor Performance: Use DB2’s performance monitoring tools (e.g., IBM i Navigator, SQL Performance Center) and cloud provider metrics to track CPU, I/O, and network usage during exports.
Iterate: Start with the simplest changes (e.g., batch inserts) and progressively implement more complex solutions (e.g., bulk load or ETL tools) if needed.
Example Action Plan
Immediate:
Check network latency to the cloud server.
Profile the application to confirm whether the bottleneck is in reading, processing, or writing.
Enable batch inserts in the application (e.g., 500 rows per batch).
Short-Term:
Update the OLEDB driver and optimize connection settings.
Test bulk loading with a CSV file and DB2’s IMPORT command.
Verify the cloud DB2 instance’s resource allocation.
Long-Term:
Consider an ETL tool or cloud-native integration service.
Explore direct cloud connectivity options (e.g., ExpressRoute).
Reevaluate the cloud region or instance type.
Expected Outcome
With batch inserts or bulk loading, you could reduce the export time significantly, potentially approaching the original 10-minute mark. For example, batching 50,000 records into 100 batches of 500 rows could cut network overhead by orders of magnitude. Bulk loading via IMPORT could be even faster, depending on the cloud setup.
If you provide more details (e.g., cloud provider, DB2 version, OLEDB driver version, or application code snippet), I can tailor the recommendations further. Would you like assistance with a specific step, such as writing a batch insert query or configuring a bulk load?]]>

Grok 3 answer:

The significant increase in export time after moving your AS400 DB2 server to the cloud is likely due to factors such as network latency, cloud infrastructure configuration, or inefficiencies in the data transfer process. Below are steps to diagnose and improve the export time for your application, which reads from SQL Server and writes to the AS400 DB2 server via an OLEDB connection.
1. Diagnose the Bottleneck
To optimize performance, first identify where the bottleneck lies—network, database, or application.
Network Latency and Bandwidth:
Even with a "very fast" internet connection, cloud environments introduce latency due to geographic distance or network hops. Measure the round-trip time (RTT) to the cloud server using tools like ping or tracert.
Check if the cloud provider’s network performance aligns with your expectations (e.g., dedicated vs. shared bandwidth).
Verify if there are any VPN or firewall configurations slowing down the connection.
Database Performance:
Check the cloud DB2 server's resource allocation (CPU, memory, I/O). The cloud instance may have lower performance than the on-premises AS400 hardware.
Run performance diagnostics on the DB2 server (e.g., WRKSYSSTS or DB2 performance tools) to check for resource contention or locking issues.
Ensure indexes on the target DB2 tables are optimized for the write operations.
Application and OLEDB:
Profile the application to confirm whether the slowdown is in reading from SQL Server, processing data, or writing to DB2.
Verify if the OLEDB driver is up-to-date and optimized for cloud connectivity. Older drivers may not handle cloud environments efficiently.
Check if the application is performing row-by-row inserts, which are slow over high-latency connections.
2. Optimize Data Transfer
Based on the diagnosis, consider these strategies to reduce export time:
a. Batch Processing
Problem: If your application is inserting records one-by-one (row-by-row) via OLEDB, each insert incurs network latency, significantly slowing down the process.
Solution:
Modify the application to use batch inserts. Group multiple records (e.g., 100–1000 rows) into a single OLEDB transaction or parameterized query.
Example: Instead of INSERT INTO table VALUES (...) for each row, use a bulk insert or multi-row insert syntax supported by DB2.
If the OLEDB driver supports it, enable batching in the connection settings.
b. Bulk Data Transfer
Problem: Individual inserts are inefficient for large datasets like 50,000 records.
Solution:
Use DB2’s bulk load utilities, such as IMPORT or LOAD, to transfer data in bulk.
Export data from SQL Server to a flat file (e.g., CSV) and use DB2’s IMPORT command or a cloud-compatible ETL tool to load the file into DB2.
If direct file transfer is not feasible, consider using a staging table in DB2 and then moving data to the final table with a single INSERT ... SELECT query.
c. Optimize OLEDB Connection
Problem: The OLEDB connection may not be tuned for cloud performance.
Solution:
Use the latest IBM i Access Client Solutions or IBM DB2 OLEDB driver, which may offer better performance for cloud environments.
Adjust connection properties, such as ConnectionTimeout, CommandTimeout, or PacketSize, to optimize for cloud latency.
Enable connection pooling to reduce overhead for repeated connections.
d. Compress Data
Problem: Transferring 50,000 records over the network may be slowed by data volume.
Solution:
Compress the data before transfer (e.g., zip the CSV file if using bulk load).
If the application supports it, enable data compression in the OLEDB driver or network layer.
3. Optimize Cloud Infrastructure
The cloud environment may not be configured optimally for your workload.
Upgrade Cloud Instance:
Ensure the cloud DB2 instance has sufficient CPU, memory, and I/O capacity. Compare the cloud instance’s specs to the on-premises AS400 hardware.
If using a shared cloud instance, consider upgrading to a dedicated instance to avoid resource contention.
Geographic Proximity:
Deploy the DB2 server in a cloud region closer to your application’s location to reduce latency.
If your application is on-premises, consider a hybrid setup where critical workloads remain closer to the application.
Network Optimization:
Use a direct connection (e.g., AWS Direct Connect, Azure ExpressRoute) to the cloud provider to reduce latency and improve bandwidth.
If using a VPN, ensure it’s configured for high performance (e.g., optimized MTU settings).
4. Alternative Approaches
If the above optimizations don’t sufficiently reduce export time, consider these alternatives:
ETL Tools:
Use an ETL tool like IBM DataStage, Talend, or Informatica to handle data transfer. These tools are optimized for large-scale data movement and can leverage cloud-native features.
Configure the ETL tool to run in the cloud, closer to the DB2 server, to minimize network latency.
Cloud-Native Integration:
If the SQL Server is also in the cloud, use cloud-native integration services (e.g., AWS Glue, Azure Data Factory) to move data between SQL Server and DB2.
These services can handle large datasets efficiently and reduce the dependency on OLEDB.
Asynchronous Processing:
If real-time exports aren’t required, schedule the export as a background job on the cloud server using a script or stored procedure, reducing the impact of network latency.
5. Test and Monitor
Benchmark Changes: After implementing changes, measure the export time to quantify improvements.
Monitor Performance: Use DB2’s performance monitoring tools (e.g., IBM i Navigator, SQL Performance Center) and cloud provider metrics to track CPU, I/O, and network usage during exports.
Iterate: Start with the simplest changes (e.g., batch inserts) and progressively implement more complex solutions (e.g., bulk load or ETL tools) if needed.
Example Action Plan
Immediate:
Check network latency to the cloud server.
Profile the application to confirm whether the bottleneck is in reading, processing, or writing.
Enable batch inserts in the application (e.g., 500 rows per batch).
Short-Term:
Update the OLEDB driver and optimize connection settings.
Test bulk loading with a CSV file and DB2’s IMPORT command.
Verify the cloud DB2 instance’s resource allocation.
Long-Term:
Consider an ETL tool or cloud-native integration service.
Explore direct cloud connectivity options (e.g., ExpressRoute).
Reevaluate the cloud region or instance type.
Expected Outcome
With batch inserts or bulk loading, you could reduce the export time significantly, potentially approaching the original 10-minute mark. For example, batching 50,000 records into 100 batches of 500 rows could cut network overhead by orders of magnitude. Bulk loading via IMPORT could be even faster, depending on the cloud setup.
If you provide more details (e.g., cloud provider, DB2 version, OLEDB driver version, or application code snippet), I can tailor the recommendations further. Would you like assistance with a specific step, such as writing a batch insert query or configuring a bulk load?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Click outside the modal window :: Author Natter]]> 2025-05-02T04:34:49-06:00 2025-05-02T04:34:49-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45653&p=279297#p279297
From the main window A, I open a new modal window B. If you click on window A, window B will twitch 2-3 times.
What is this event and can it be handled?]]>

From the main window A, I open a new modal window B. If you click on window A, window B will twitch 2-3 times.
What is this event and can it be handled?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Click outside the modal window :: Reply by Antonio Linares]]> 2025-05-02T05:05:29-06:00 2025-05-02T05:05:29-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45653&p=279298#p279298
Have you tried with oWnd:bLostFocus ?]]>

Have you tried with oWnd:bLostFocus ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Click outside the modal window :: Reply by Natter]]> 2025-05-02T10:39:14-06:00 2025-05-02T10:39:14-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45653&p=279300#p279300 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Click outside the modal window :: Reply by karinha]]> 2025-05-02T11:38:09-06:00 2025-05-02T11:38:09-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45653&p=279304#p279304
Regards, saludos.]]>

Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Click outside the modal window :: Reply by Natter]]> 2025-05-02T12:21:20-06:00 2025-05-02T12:21:20-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45653&p=279305#p279305

Code: Select all | Expand

#include "FiveWin.ch"

function Main()
private oA

   DEFINE DIALOG oA  FROM 2, 2 TO 30, 60  TITLE "First dialog"

   oA:bRClicked = { | nRow, nCol, nFlags | New_Dlg() }

   ACTIVATE DIALOG oA CENTERED
return nil

function New_Dlg
local  oB

   DEFINE DIALOG oB  OF oA    FROM 2, 2 TO 20, 50   TITLE "Second dialog"

   ACTIVATE DIALOG oB CENTERED
return nil
]]>

Code: Select all | Expand

#include "FiveWin.ch"

function Main()
private oA

   DEFINE DIALOG oA  FROM 2, 2 TO 30, 60  TITLE "First dialog"

   oA:bRClicked = { | nRow, nCol, nFlags | New_Dlg() }

   ACTIVATE DIALOG oA CENTERED
return nil

function New_Dlg
local  oB

   DEFINE DIALOG oB  OF oA    FROM 2, 2 TO 20, 50   TITLE "Second dialog"

   ACTIVATE DIALOG oB CENTERED
return nil
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Click outside the modal window :: Reply by karinha]]> 2025-05-02T12:52:28-06:00 2025-05-02T12:52:28-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45653&p=279306#p279306

Code: Select all | Expand

#include "FiveWin.ch"

// STATIC oDlg, oDlg2 // .or.

MEMVAR oDlg, oDlg2

FUNCTION Main()

   LOCAL oGet, oGet2, oBtn, Capt := Space( 10 ), Capt2 := " "

   DEFINE DIALOG oDlg FROM 2, 2 TO 30, 60 TITLE "First dialog"

   oDlg:lHelpIcon := .F.

   oDlg:bRClicked = {| nRow, nCol, nFlags | New_Dlg() }

   ACTIVATE DIALOG oDlg CENTERED 

RETURN NIL

FUNCTION New_Dlg()

   DEFINE DIALOG oDlg2 OF oDlg FROM 2, 2 TO 20, 50 TITLE "Second dialog"

   oDlg2:lHelpIcon := .F.

   ACTIVATE DIALOG oDlg2 CENTERED

RETURN NIL

// FIN / END
Regards, saludos.]]>

Code: Select all | Expand

#include "FiveWin.ch"

// STATIC oDlg, oDlg2 // .or.

MEMVAR oDlg, oDlg2

FUNCTION Main()

   LOCAL oGet, oGet2, oBtn, Capt := Space( 10 ), Capt2 := " "

   DEFINE DIALOG oDlg FROM 2, 2 TO 30, 60 TITLE "First dialog"

   oDlg:lHelpIcon := .F.

   oDlg:bRClicked = {| nRow, nCol, nFlags | New_Dlg() }

   ACTIVATE DIALOG oDlg CENTERED 

RETURN NIL

FUNCTION New_Dlg()

   DEFINE DIALOG oDlg2 OF oDlg FROM 2, 2 TO 20, 50 TITLE "Second dialog"

   oDlg2:lHelpIcon := .F.

   ACTIVATE DIALOG oDlg2 CENTERED

RETURN NIL

// FIN / END
Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: New Image scroll class :: Author Silvio.Falconi]]> 2025-04-20T17:49:33-06:00 2025-04-27T17:37:49-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45634&p=279075#p279075 From an old Otto's Idea

I created this class because every year at school we have graduation day and on the screen in the auditorium I had to display all the sponsors who help us organize the event every year. With this class I can do it easily without resorting to existing applications on the market.

Image

The TScrollImg class is a custom control for FiveWin/Harbour that allows you to create a scrollable image gallery (banner) inside a Windows application. Images can be associated with URLs, allowing users to open websites with a click. The control is designed to be fluid, without flickering, and supports flexible configurations to adapt to different needs.

Main Features
  • Image scrolling: Images scroll horizontally (left or right) with a configurable speed.
    URL association: Each image can have an associated URL, which opens in the default browser with a click.
    Visual feedback: The cursor becomes a hand when it passes over an image with a valid URL.
    Customization: Supports background colors, borders, sizes and scroll modes.
    Backwards compatibility: Works with simple image arrays (without URLs) or with associated URLs.
    Optimization: Use double buffering to eliminate flickering during animation
the example you see is a comprehensive test of all the features: transparent, with brush, without brush, with url and with codeblock. This example will be provided as an accessory.


Configure the aBanners Array
The aBanners array defines the images to display. It can be in 3 formats:

Simple (images only):
LOCAL aBanners := {"Bosch.png", "Brother.png", "Canon.png"}
In this case, the images scroll but are not clickable (no URL associated).

With URLs (images and links):
LOCAL aBanners := {{"Bosch.png", "www.bosch.it"}, {"Brother.png", "www.brother.it"}}
The images are clickable, and a click opens the URL in the browser.

With codeblock (images and codeblock):
local aBanners := { ;
{ "Bosch.png", "www.bosch.it", .F. },;
{ "Brother.png", "www.brother.it", .F. },;
{ "Canon.png", {|| MsgInfo("select one category") }, .T. }}
The images are clickable, and a click eval the codeblock . w
We could then create a scroll of images of the categories and open an xbrowse with the products of that category

User Interaction
Scrolling: The images scroll automatically based on nMode and nSpeed.
Cursor: When the mouse hovers over an image with a URL, the cursor changes to a hand, indicating that it is clickable.
Click: Clicking an image with a URL opens the associated website in the default browser. or run a codeblock
the animation starts automatically but by means of a button you can change the direction, the speed, the space between the images

Usage

Code: Select all | Expand

@ 10, 10 SCROLLIMG oScroll ;
      PATH cImagePath ;
      BANNERS aBanners ;
      SPEED 2 ;
      MODE 1 ;
      SIZE 300, 30 ;
      BORDER ;
      COLORBORDER nRGB(150,150,150) ;
      OF oDlg




I will send to Antonio.]]>
From an old Otto's Idea

I created this class because every year at school we have graduation day and on the screen in the auditorium I had to display all the sponsors who help us organize the event every year. With this class I can do it easily without resorting to existing applications on the market.

Image

The TScrollImg class is a custom control for FiveWin/Harbour that allows you to create a scrollable image gallery (banner) inside a Windows application. Images can be associated with URLs, allowing users to open websites with a click. The control is designed to be fluid, without flickering, and supports flexible configurations to adapt to different needs.

Main Features
  • Image scrolling: Images scroll horizontally (left or right) with a configurable speed.
    URL association: Each image can have an associated URL, which opens in the default browser with a click.
    Visual feedback: The cursor becomes a hand when it passes over an image with a valid URL.
    Customization: Supports background colors, borders, sizes and scroll modes.
    Backwards compatibility: Works with simple image arrays (without URLs) or with associated URLs.
    Optimization: Use double buffering to eliminate flickering during animation
the example you see is a comprehensive test of all the features: transparent, with brush, without brush, with url and with codeblock. This example will be provided as an accessory.


Configure the aBanners Array
The aBanners array defines the images to display. It can be in 3 formats:

Simple (images only):
LOCAL aBanners := {"Bosch.png", "Brother.png", "Canon.png"}
In this case, the images scroll but are not clickable (no URL associated).

With URLs (images and links):
LOCAL aBanners := {{"Bosch.png", "www.bosch.it"}, {"Brother.png", "www.brother.it"}}
The images are clickable, and a click opens the URL in the browser.

With codeblock (images and codeblock):
local aBanners := { ;
{ "Bosch.png", "www.bosch.it", .F. },;
{ "Brother.png", "www.brother.it", .F. },;
{ "Canon.png", {|| MsgInfo("select one category") }, .T. }}
The images are clickable, and a click eval the codeblock . w
We could then create a scroll of images of the categories and open an xbrowse with the products of that category

User Interaction
Scrolling: The images scroll automatically based on nMode and nSpeed.
Cursor: When the mouse hovers over an image with a URL, the cursor changes to a hand, indicating that it is clickable.
Click: Clicking an image with a URL opens the associated website in the default browser. or run a codeblock
the animation starts automatically but by means of a button you can change the direction, the speed, the space between the images

Usage

Code: Select all | Expand

@ 10, 10 SCROLLIMG oScroll ;
      PATH cImagePath ;
      BANNERS aBanners ;
      SPEED 2 ;
      MODE 1 ;
      SIZE 300, 30 ;
      BORDER ;
      COLORBORDER nRGB(150,150,150) ;
      OF oDlg




I will send to Antonio.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by Silvio.Falconi]]> 2025-04-25T14:49:05-06:00 2025-04-25T14:49:05-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45634&p=279188#p279188 <![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by richard-service]]> 2025-04-26T10:32:09-06:00 2025-04-26T10:32:09-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45634&p=279196#p279196
Silvio.Falconi wrote: Sun Apr 20, 2025 11:49 pm From an old Otto's Idea

I created this class because every year at school we have graduation day and on the screen in the auditorium I had to display all the sponsors who help us organize the event every year. With this class I can do it easily without resorting to existing applications on the market.

Image

The TScrollImg class is a custom control for FiveWin/Harbour that allows you to create a scrollable image gallery (banner) inside a Windows application. Images can be associated with URLs, allowing users to open websites with a click. The control is designed to be fluid, without flickering, and supports flexible configurations to adapt to different needs.

Main Features
  • Image scrolling: Images scroll horizontally (left or right) with a configurable speed.
    URL association: Each image can have an associated URL, which opens in the default browser with a click.
    Visual feedback: The cursor becomes a hand when it passes over an image with a valid URL.
    Customization: Supports background colors, borders, sizes and scroll modes.
    Backwards compatibility: Works with simple image arrays (without URLs) or with associated URLs.
    Optimization: Use double buffering to eliminate flickering during animation

Configure the aBanners Array
The aBanners array defines the images to display. It can be in two formats:

Simple (images only):
LOCAL aBanners := {"Bosch.png", "Brother.png", "Canon.png"}
In this case, the images scroll but are not clickable (no URL associated).

With URLs (images and links):
LOCAL aBanners := {{"Bosch.png", "www.bosch.it"}, {"Brother.png", "www.brother.it"}}
The images are clickable, and a click opens the URL in the browser.

User Interaction
Scrolling: The images scroll automatically based on nMode and nSpeed.
Cursor: When the mouse hovers over an image with a URL, the cursor changes to a hand, indicating that it is clickable.
Click: Clicking an image with a URL opens the associated website in the default browser.

Usage

Code: Select all | Expand

@ 10, 10 SCROLLIMG oScroll ;
      PATH cImagePath ;
      BANNERS aBanners ;
      SPEED 2 ;
      MODE 1 ;
      SIZE 300, 30 ;
      BORDER ;
      
      
      
      COLORBORDER nRGB(150,150,150) ;
      OF oDlg




I will send to Antonio.
Dear Silvio,

Could you please make it REDEFINE command

Code: Select all | Expand

ReDefine CROLLIMG oScroll ID 300 OF oDlg
.....
]]>
Silvio.Falconi wrote: Sun Apr 20, 2025 11:49 pm From an old Otto's Idea

I created this class because every year at school we have graduation day and on the screen in the auditorium I had to display all the sponsors who help us organize the event every year. With this class I can do it easily without resorting to existing applications on the market.

Image

The TScrollImg class is a custom control for FiveWin/Harbour that allows you to create a scrollable image gallery (banner) inside a Windows application. Images can be associated with URLs, allowing users to open websites with a click. The control is designed to be fluid, without flickering, and supports flexible configurations to adapt to different needs.

Main Features
  • Image scrolling: Images scroll horizontally (left or right) with a configurable speed.
    URL association: Each image can have an associated URL, which opens in the default browser with a click.
    Visual feedback: The cursor becomes a hand when it passes over an image with a valid URL.
    Customization: Supports background colors, borders, sizes and scroll modes.
    Backwards compatibility: Works with simple image arrays (without URLs) or with associated URLs.
    Optimization: Use double buffering to eliminate flickering during animation

Configure the aBanners Array
The aBanners array defines the images to display. It can be in two formats:

Simple (images only):
LOCAL aBanners := {"Bosch.png", "Brother.png", "Canon.png"}
In this case, the images scroll but are not clickable (no URL associated).

With URLs (images and links):
LOCAL aBanners := {{"Bosch.png", "www.bosch.it"}, {"Brother.png", "www.brother.it"}}
The images are clickable, and a click opens the URL in the browser.

User Interaction
Scrolling: The images scroll automatically based on nMode and nSpeed.
Cursor: When the mouse hovers over an image with a URL, the cursor changes to a hand, indicating that it is clickable.
Click: Clicking an image with a URL opens the associated website in the default browser.

Usage

Code: Select all | Expand

@ 10, 10 SCROLLIMG oScroll ;
      PATH cImagePath ;
      BANNERS aBanners ;
      SPEED 2 ;
      MODE 1 ;
      SIZE 300, 30 ;
      BORDER ;
      
      
      
      COLORBORDER nRGB(150,150,150) ;
      OF oDlg




I will send to Antonio.
Dear Silvio,

Could you please make it REDEFINE command

Code: Select all | Expand

ReDefine CROLLIMG oScroll ID 300 OF oDlg
.....
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by Silvio.Falconi]]> 2025-04-27T12:39:29-06:00 2025-04-27T12:39:29-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45634&p=279211#p279211 No Problems.

Image

sample:

Code: Select all | Expand

 
 
 #include "FiveWin.ch"
#include "scrollimg.ch"

function Main()

local oDlg, oScroll
local cImagePath    := cFilePath( GetModuleFileName( GetInstance() ) ) + "Bitmaps\"
local aBanners := { ;
      { "Bosch.png", "www.bosch.it" },;
      { "Brother.png", "www.brother.it" },;
      { "Canon.png", "www.canon.it" },;
      { "De-Longhi.png", "www.delonghi.com" },;
      { "ELECTROLUX-REX.png", "www.electrolux.it" },;
      { "HOTPOINT.png", "www.hotpoint.it" },;
      { "INDESIT.png", "www.indesit.it" },;
      { "KENSINGTON.png", "www.kensington.com" },;
      { "LEXMARK.png", "www.lexmark.com" },;
      { "LOGITECH.png", "www.logitech.com" },;
      { "MSI.png", "www.msi.com" },;
      { "OKI.png", "www.oki.com" },;
      { "PURO.png", "www.puro.it" },;
      { "RICOH.png", "www.ricoh.it" }}


   DEFINE DIALOG oDlg RESOURCE "Test"


REDEFINE SCROLLIMG oScroll ;
              ID 300 ;
              OF oDlg  ;
              PATH cImagePath ;
              BANNERS aBanners ;
              BORDER ;
              COLORBORDER CLR_YELLOW

  ACTIVATE DIALOG oDlg

return nil

]]>
No Problems.

Image

sample:

Code: Select all | Expand

 
 
 #include "FiveWin.ch"
#include "scrollimg.ch"

function Main()

local oDlg, oScroll
local cImagePath    := cFilePath( GetModuleFileName( GetInstance() ) ) + "Bitmaps\"
local aBanners := { ;
      { "Bosch.png", "www.bosch.it" },;
      { "Brother.png", "www.brother.it" },;
      { "Canon.png", "www.canon.it" },;
      { "De-Longhi.png", "www.delonghi.com" },;
      { "ELECTROLUX-REX.png", "www.electrolux.it" },;
      { "HOTPOINT.png", "www.hotpoint.it" },;
      { "INDESIT.png", "www.indesit.it" },;
      { "KENSINGTON.png", "www.kensington.com" },;
      { "LEXMARK.png", "www.lexmark.com" },;
      { "LOGITECH.png", "www.logitech.com" },;
      { "MSI.png", "www.msi.com" },;
      { "OKI.png", "www.oki.com" },;
      { "PURO.png", "www.puro.it" },;
      { "RICOH.png", "www.ricoh.it" }}


   DEFINE DIALOG oDlg RESOURCE "Test"


REDEFINE SCROLLIMG oScroll ;
              ID 300 ;
              OF oDlg  ;
              PATH cImagePath ;
              BANNERS aBanners ;
              BORDER ;
              COLORBORDER CLR_YELLOW

  ACTIVATE DIALOG oDlg

return nil

]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by richard-service]]> 2025-04-27T19:27:08-06:00 2025-04-27T19:27:08-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45634&p=279214#p279214
Silvio.Falconi wrote: Sun Apr 27, 2025 6:39 pm No Problems.

Image

sample:

Code: Select all | Expand

 
 
 #include "FiveWin.ch"
#include "scrollimg.ch"

function Main()

local oDlg, oScroll
local cImagePath    := cFilePath( GetModuleFileName( GetInstance() ) ) + "Bitmaps\"
local aBanners := { ;
      { "Bosch.png", "www.bosch.it" },;
      { "Brother.png", "www.brother.it" },;
      { "Canon.png", "www.canon.it" },;
      { "De-Longhi.png", "www.delonghi.com" },;
      { "ELECTROLUX-REX.png", "www.electrolux.it" },;
      { "HOTPOINT.png", "www.hotpoint.it" },;
      { "INDESIT.png", "www.indesit.it" },;
      { "KENSINGTON.png", "www.kensington.com" },;
      { "LEXMARK.png", "www.lexmark.com" },;
      { "LOGITECH.png", "www.logitech.com" },;
      { "MSI.png", "www.msi.com" },;
      { "OKI.png", "www.oki.com" },;
      { "PURO.png", "www.puro.it" },;
      { "RICOH.png", "www.ricoh.it" }}


   DEFINE DIALOG oDlg RESOURCE "Test"


REDEFINE SCROLLIMG oScroll ;
              ID 300 ;
              OF oDlg  ;
              PATH cImagePath ;
              BANNERS aBanners ;
              BORDER ;
              COLORBORDER CLR_YELLOW

  ACTIVATE DIALOG oDlg

return nil

Dear Silvio,

Good job.
May I set Frame function disable? Show or Hide ...]]>
Silvio.Falconi wrote: Sun Apr 27, 2025 6:39 pm No Problems.

Image

sample:

Code: Select all | Expand

 
 
 #include "FiveWin.ch"
#include "scrollimg.ch"

function Main()

local oDlg, oScroll
local cImagePath    := cFilePath( GetModuleFileName( GetInstance() ) ) + "Bitmaps\"
local aBanners := { ;
      { "Bosch.png", "www.bosch.it" },;
      { "Brother.png", "www.brother.it" },;
      { "Canon.png", "www.canon.it" },;
      { "De-Longhi.png", "www.delonghi.com" },;
      { "ELECTROLUX-REX.png", "www.electrolux.it" },;
      { "HOTPOINT.png", "www.hotpoint.it" },;
      { "INDESIT.png", "www.indesit.it" },;
      { "KENSINGTON.png", "www.kensington.com" },;
      { "LEXMARK.png", "www.lexmark.com" },;
      { "LOGITECH.png", "www.logitech.com" },;
      { "MSI.png", "www.msi.com" },;
      { "OKI.png", "www.oki.com" },;
      { "PURO.png", "www.puro.it" },;
      { "RICOH.png", "www.ricoh.it" }}


   DEFINE DIALOG oDlg RESOURCE "Test"


REDEFINE SCROLLIMG oScroll ;
              ID 300 ;
              OF oDlg  ;
              PATH cImagePath ;
              BANNERS aBanners ;
              BORDER ;
              COLORBORDER CLR_YELLOW

  ACTIVATE DIALOG oDlg

return nil

Dear Silvio,

Good job.
May I set Frame function disable? Show or Hide ...]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by Silvio.Falconi]]> 2025-04-28T00:25:05-06:00 2025-04-28T00:25:05-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45634&p=279215#p279215
richard-service wrote: Mon Apr 28, 2025 1:27 am
Silvio.Falconi wrote: Sun Apr 27, 2025 6:39 pm No Problems.

Image

sample:

Code: Select all | Expand

 
 
 #include "FiveWin.ch"
#include "scrollimg.ch"

function Main()

local oDlg, oScroll
local cImagePath    := cFilePath( GetModuleFileName( GetInstance() ) ) + "Bitmaps\"
local aBanners := { ;
      { "Bosch.png", "www.bosch.it" },;
      { "Brother.png", "www.brother.it" },;
      { "Canon.png", "www.canon.it" },;
      { "De-Longhi.png", "www.delonghi.com" },;
      { "ELECTROLUX-REX.png", "www.electrolux.it" },;
      { "HOTPOINT.png", "www.hotpoint.it" },;
      { "INDESIT.png", "www.indesit.it" },;
      { "KENSINGTON.png", "www.kensington.com" },;
      { "LEXMARK.png", "www.lexmark.com" },;
      { "LOGITECH.png", "www.logitech.com" },;
      { "MSI.png", "www.msi.com" },;
      { "OKI.png", "www.oki.com" },;
      { "PURO.png", "www.puro.it" },;
      { "RICOH.png", "www.ricoh.it" }}


   DEFINE DIALOG oDlg RESOURCE "Test"


REDEFINE SCROLLIMG oScroll ;
              ID 300 ;
              OF oDlg  ;
              PATH cImagePath ;
              BANNERS aBanners ;
              BORDER ;
              COLORBORDER CLR_YELLOW

  ACTIVATE DIALOG oDlg

return nil

Dear Silvio,

Good job.
May I set Frame function disable? Show or Hide ...
I'm really confused, I don't understand your question...

What do you mean by frame?

Do you means Border?
there is a data lBorder if it is false the border does not show

There is no "frame" in the TscrollImage class...

I'm surprised you say you are better than me...

It's an object control

What's the problem?

I've never seen you make requests like that to anyone else.


Send me your images I can build a sample test for U


Image



Vertical up and down

Image]]>
richard-service wrote: Mon Apr 28, 2025 1:27 am
Silvio.Falconi wrote: Sun Apr 27, 2025 6:39 pm No Problems.

Image

sample:

Code: Select all | Expand

 
 
 #include "FiveWin.ch"
#include "scrollimg.ch"

function Main()

local oDlg, oScroll
local cImagePath    := cFilePath( GetModuleFileName( GetInstance() ) ) + "Bitmaps\"
local aBanners := { ;
      { "Bosch.png", "www.bosch.it" },;
      { "Brother.png", "www.brother.it" },;
      { "Canon.png", "www.canon.it" },;
      { "De-Longhi.png", "www.delonghi.com" },;
      { "ELECTROLUX-REX.png", "www.electrolux.it" },;
      { "HOTPOINT.png", "www.hotpoint.it" },;
      { "INDESIT.png", "www.indesit.it" },;
      { "KENSINGTON.png", "www.kensington.com" },;
      { "LEXMARK.png", "www.lexmark.com" },;
      { "LOGITECH.png", "www.logitech.com" },;
      { "MSI.png", "www.msi.com" },;
      { "OKI.png", "www.oki.com" },;
      { "PURO.png", "www.puro.it" },;
      { "RICOH.png", "www.ricoh.it" }}


   DEFINE DIALOG oDlg RESOURCE "Test"


REDEFINE SCROLLIMG oScroll ;
              ID 300 ;
              OF oDlg  ;
              PATH cImagePath ;
              BANNERS aBanners ;
              BORDER ;
              COLORBORDER CLR_YELLOW

  ACTIVATE DIALOG oDlg

return nil

Dear Silvio,

Good job.
May I set Frame function disable? Show or Hide ...
I'm really confused, I don't understand your question...

What do you mean by frame?

Do you means Border?
there is a data lBorder if it is false the border does not show

There is no "frame" in the TscrollImage class...

I'm surprised you say you are better than me...

It's an object control

What's the problem?

I've never seen you make requests like that to anyone else.


Send me your images I can build a sample test for U


Image



Vertical up and down

Image]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by richard-service]]> 2025-04-28T02:44:09-06:00 2025-04-28T02:44:09-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45634&p=279217#p279217
Silvio.Falconi wrote: Mon Apr 28, 2025 6:25 am
richard-service wrote: Mon Apr 28, 2025 1:27 am
Silvio.Falconi wrote: Sun Apr 27, 2025 6:39 pm No Problems.

Image

sample:

Code: Select all | Expand

 
 
 #include "FiveWin.ch"
#include "scrollimg.ch"

function Main()

local oDlg, oScroll
local cImagePath    := cFilePath( GetModuleFileName( GetInstance() ) ) + "Bitmaps\"
local aBanners := { ;
      { "Bosch.png", "www.bosch.it" },;
      { "Brother.png", "www.brother.it" },;
      { "Canon.png", "www.canon.it" },;
      { "De-Longhi.png", "www.delonghi.com" },;
      { "ELECTROLUX-REX.png", "www.electrolux.it" },;
      { "HOTPOINT.png", "www.hotpoint.it" },;
      { "INDESIT.png", "www.indesit.it" },;
      { "KENSINGTON.png", "www.kensington.com" },;
      { "LEXMARK.png", "www.lexmark.com" },;
      { "LOGITECH.png", "www.logitech.com" },;
      { "MSI.png", "www.msi.com" },;
      { "OKI.png", "www.oki.com" },;
      { "PURO.png", "www.puro.it" },;
      { "RICOH.png", "www.ricoh.it" }}


   DEFINE DIALOG oDlg RESOURCE "Test"


REDEFINE SCROLLIMG oScroll ;
              ID 300 ;
              OF oDlg  ;
              PATH cImagePath ;
              BANNERS aBanners ;
              BORDER ;
              COLORBORDER CLR_YELLOW

  ACTIVATE DIALOG oDlg

return nil

Dear Silvio,

Good job.
May I set Frame function disable? Show or Hide ...
I'm really confused, I don't understand your question...

What do you mean by frame?

Do you means Border?
there is a data lBorder if it is false the border does not show

There is no "frame" in the TscrollImage class...

I'm surprised you say you are better than me...

It's an object control

What's the problem?

I've never seen you make requests like that to anyone else.


Send me your images I can build a sample test for U


Image



Vertical up and down

Image
Yes, You do it Great...]]>
Silvio.Falconi wrote: Mon Apr 28, 2025 6:25 am
richard-service wrote: Mon Apr 28, 2025 1:27 am
Silvio.Falconi wrote: Sun Apr 27, 2025 6:39 pm No Problems.

Image

sample:

Code: Select all | Expand

 
 
 #include "FiveWin.ch"
#include "scrollimg.ch"

function Main()

local oDlg, oScroll
local cImagePath    := cFilePath( GetModuleFileName( GetInstance() ) ) + "Bitmaps\"
local aBanners := { ;
      { "Bosch.png", "www.bosch.it" },;
      { "Brother.png", "www.brother.it" },;
      { "Canon.png", "www.canon.it" },;
      { "De-Longhi.png", "www.delonghi.com" },;
      { "ELECTROLUX-REX.png", "www.electrolux.it" },;
      { "HOTPOINT.png", "www.hotpoint.it" },;
      { "INDESIT.png", "www.indesit.it" },;
      { "KENSINGTON.png", "www.kensington.com" },;
      { "LEXMARK.png", "www.lexmark.com" },;
      { "LOGITECH.png", "www.logitech.com" },;
      { "MSI.png", "www.msi.com" },;
      { "OKI.png", "www.oki.com" },;
      { "PURO.png", "www.puro.it" },;
      { "RICOH.png", "www.ricoh.it" }}


   DEFINE DIALOG oDlg RESOURCE "Test"


REDEFINE SCROLLIMG oScroll ;
              ID 300 ;
              OF oDlg  ;
              PATH cImagePath ;
              BANNERS aBanners ;
              BORDER ;
              COLORBORDER CLR_YELLOW

  ACTIVATE DIALOG oDlg

return nil

Dear Silvio,

Good job.
May I set Frame function disable? Show or Hide ...
I'm really confused, I don't understand your question...

What do you mean by frame?

Do you means Border?
there is a data lBorder if it is false the border does not show

There is no "frame" in the TscrollImage class...

I'm surprised you say you are better than me...

It's an object control

What's the problem?

I've never seen you make requests like that to anyone else.


Send me your images I can build a sample test for U


Image



Vertical up and down

Image
Yes, You do it Great...]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by Silvio.Falconi]]> 2025-04-28T06:41:32-06:00 2025-04-28T06:41:32-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45634&p=279218#p279218 <![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by RAMESHBABU]]> 2025-04-28T20:21:57-06:00 2025-04-28T20:21:57-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45634&p=279230#p279230
Thank for your your New Image Scrolling Class.
May I request you to please provide a prompt
attached to each Image as shown in the
followig picture ?

Image

- Ramesh Babu P]]>

Thank for your your New Image Scrolling Class.
May I request you to please provide a prompt
attached to each Image as shown in the
followig picture ?

Image

- Ramesh Babu P]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by Silvio.Falconi]]> 2025-04-29T06:13:38-06:00 2025-04-29T06:13:38-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45634&p=279235#p279235
RAMESHBABU wrote: Tue Apr 29, 2025 2:21 am Dear Silvio,

Thank for your your New Image Scrolling Class.
May I request you to please provide a prompt
attached to each Image as shown in the
followig picture ?

Image

- Ramesh Babu P

first release add also the tooltip
The length of the text must be equal to the width of the image

Image]]>
RAMESHBABU wrote: Tue Apr 29, 2025 2:21 am Dear Silvio,

Thank for your your New Image Scrolling Class.
May I request you to please provide a prompt
attached to each Image as shown in the
followig picture ?

Image

- Ramesh Babu P

first release add also the tooltip
The length of the text must be equal to the width of the image

Image]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by RAMESHBABU]]> 2025-04-29T19:53:56-06:00 2025-04-29T19:53:56-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45634&p=279243#p279243
first release add also the tooltip
The length of the text must be equal to the width of the image
Thank your very much for providing the text prompt and ToolTip. Its a nice
useful feature. :D

Regards,
- Ramesh Babu P]]>
first release add also the tooltip
The length of the text must be equal to the width of the image
Thank your very much for providing the text prompt and ToolTip. Its a nice
useful feature. :D

Regards,
- Ramesh Babu P]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by Silvio.Falconi]]> 2025-04-30T01:17:52-06:00 2025-04-30T01:17:52-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45634&p=279246#p279246
RAMESHBABU wrote: Wed Apr 30, 2025 1:53 am Dear Silvio,
first release add also the tooltip
The length of the text must be equal to the width of the image
Thank your very much for providing the text prompt and ToolTip. Its a nice
useful feature. :D

Regards,
- Ramesh Babu P
I added the ability to change the font when the text is longer than the image width
when a cycle of images ends everything is reset and starts again from the beginning


Image


in the video you will see a flickering but he assures you that in the original it is not perceptible
It's probably the GifScreenRecord application that creates this effect



then I could include these features:

1. Advanced animation effects
2. Speed ​​control via interface
3. Pause/resume with click or key
4. Text with visual effects
5. Manual navigation
6. Support for different image sizes
7. Progress indicator or counter
8. Support for video or dynamic content
9. Customizable themes or skins
10. State saving
11. making cappuccino with a brioche

Which could be useful?]]>
RAMESHBABU wrote: Wed Apr 30, 2025 1:53 am Dear Silvio,
first release add also the tooltip
The length of the text must be equal to the width of the image
Thank your very much for providing the text prompt and ToolTip. Its a nice
useful feature. :D

Regards,
- Ramesh Babu P
I added the ability to change the font when the text is longer than the image width
when a cycle of images ends everything is reset and starts again from the beginning


Image


in the video you will see a flickering but he assures you that in the original it is not perceptible
It's probably the GifScreenRecord application that creates this effect



then I could include these features:

1. Advanced animation effects
2. Speed ​​control via interface
3. Pause/resume with click or key
4. Text with visual effects
5. Manual navigation
6. Support for different image sizes
7. Progress indicator or counter
8. Support for video or dynamic content
9. Customizable themes or skins
10. State saving
11. making cappuccino with a brioche

Which could be useful?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by Silvio.Falconi]]> 2025-04-30T02:55:14-06:00 2025-04-30T02:55:14-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45634&p=279247#p279247
1. Advanced animation effects ( shadow on image)
2. Speed ​​control via interface
3. Pause/resume with click or key
10. load and State saving

When I over on an Image the class make a zoom of the image

add the possibility to change speed of a animation by buttons or key ( space, + and - )

add load and save state of animation

sample of file .ini

Code: Select all | Expand

[ScrollImg]
LeftImage01=    582.00
TopImage01=     31.00
LeftImage02=    732.00
TopImage02=     31.00
LeftImage03=    882.00
TopImage03=     31.00
LeftImage04=   1032.00
TopImage04=     31.00
LeftImage05=   1182.00
TopImage05=     31.00
LeftImage06=   1332.00
TopImage06=     31.00
LeftImage07=   1482.00
TopImage07=     31.00
LeftImage08=   1632.00
TopImage08=     31.00
LeftImage09=   1782.00
TopImage09=     31.00
LeftImage10=   1932.00
TopImage10=     31.00
LeftImage11=   2082.00
TopImage11=     31.00
LeftImage12=   2232.00
TopImage12=     31.00
LeftImage13=   2382.00
TopImage13=     31.00
LeftImage14=   2532.00
TopImage14=     31.00
Speed=  5.00
Paused=0
Running=1
CycleCounter=         0
]]>

1. Advanced animation effects ( shadow on image)
2. Speed ​​control via interface
3. Pause/resume with click or key
10. load and State saving

When I over on an Image the class make a zoom of the image

add the possibility to change speed of a animation by buttons or key ( space, + and - )

add load and save state of animation

sample of file .ini

Code: Select all | Expand

[ScrollImg]
LeftImage01=    582.00
TopImage01=     31.00
LeftImage02=    732.00
TopImage02=     31.00
LeftImage03=    882.00
TopImage03=     31.00
LeftImage04=   1032.00
TopImage04=     31.00
LeftImage05=   1182.00
TopImage05=     31.00
LeftImage06=   1332.00
TopImage06=     31.00
LeftImage07=   1482.00
TopImage07=     31.00
LeftImage08=   1632.00
TopImage08=     31.00
LeftImage09=   1782.00
TopImage09=     31.00
LeftImage10=   1932.00
TopImage10=     31.00
LeftImage11=   2082.00
TopImage11=     31.00
LeftImage12=   2232.00
TopImage12=     31.00
LeftImage13=   2382.00
TopImage13=     31.00
LeftImage14=   2532.00
TopImage14=     31.00
Speed=  5.00
Paused=0
Running=1
CycleCounter=         0
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by RAMESHBABU]]> 2025-04-30T23:02:27-06:00 2025-04-30T23:02:27-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45634&p=279285#p279285
Nice additions to the Class. :D
My best regards,

-Ramesh Babu P]]>

Nice additions to the Class. :D
My best regards,

-Ramesh Babu P]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by Silvio.Falconi]]> 2025-05-03T04:02:15-06:00 2025-05-03T04:02:15-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45634&p=279308#p279308 <![CDATA[FiveWin for Harbour/xHarbour :: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Author Antonio Linares]]> 2025-05-04T20:33:11-06:00 2025-05-04T20:33:11-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279315#p279315
May Mr. Rao rest in peace, leaving behind a legacy of love and compassion that will continue to inspire all of us who were fortunate enough to know him. He was a true example of fidelity and friendship, and his memory will remain in our hearts forever.

Rest in peace.]]>

May Mr. Rao rest in peace, leaving behind a legacy of love and compassion that will continue to inspire all of us who were fortunate enough to know him. He was a true example of fidelity and friendship, and his memory will remain in our hearts forever.

Rest in peace.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by hua]]> 2025-05-04T20:51:54-06:00 2025-05-04T20:51:54-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279316#p279316
This is a really shocking and sad news.
Condolence to his family
Will miss his participation in this forum]]>

This is a really shocking and sad news.
Condolence to his family
Will miss his participation in this forum]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by alerchster]]> 2025-05-04T21:12:30-06:00 2025-05-04T21:12:30-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279317#p279317 Condolence to his family.]]> Condolence to his family.]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by ertan]]> 2025-05-04T23:09:10-06:00 2025-05-04T23:09:10-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279318#p279318

Mr.Rao always in my memory,
Condolence to his family.]]>


Mr.Rao always in my memory,
Condolence to his family.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Carles]]> 2025-05-04T23:10:41-06:00 2025-05-04T23:10:41-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279319#p279319

One of the greats has left us

C.]]>


One of the greats has left us

C.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Maurizio]]> 2025-05-05T00:55:36-06:00 2025-05-05T00:55:36-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279320#p279320
It was an honor to have known and worked with him. His dedication and spirit will always be remembered with deep respect.

Maurizio]]>

It was an honor to have known and worked with him. His dedication and spirit will always be remembered with deep respect.

Maurizio]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Marc Venken]]> 2025-05-05T01:05:57-06:00 2025-05-05T01:05:57-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279321#p279321 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Horizon]]> 2025-05-05T01:08:13-06:00 2025-05-05T01:08:13-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279322#p279322 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Silvio.Falconi]]> 2025-05-05T01:10:42-06:00 2025-05-05T01:10:42-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279323#p279323 I hoped until the end that Nages could return among us,
his memory will always be alive in our souls!!]]>
I hoped until the end that Nages could return among us,
his memory will always be alive in our souls!!]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by MarcoBoschi]]> 2025-05-05T01:49:40-06:00 2025-05-05T01:49:40-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279324#p279324 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Enrico Maria Giordano]]> 2025-05-05T02:22:49-06:00 2025-05-05T02:22:49-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279325#p279325 ]]> ]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by D.Fernandez]]> 2025-05-05T03:39:30-06:00 2025-05-05T03:39:30-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279326#p279326 Always willing to help all of us. Rest in peace.
To family and friends, my deepest condolences.

Ruben Dario Fernandez]]>
Always willing to help all of us. Rest in peace.
To family and friends, my deepest condolences.

Ruben Dario Fernandez]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by paquitohm]]> 2025-05-05T03:43:56-06:00 2025-05-05T03:43:56-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279327#p279327 Sólo se nos adelantó. En la otra vida lo veremos.
D.E.P.]]>
Sólo se nos adelantó. En la otra vida lo veremos.
D.E.P.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by dutch]]> 2025-05-05T03:47:08-06:00 2025-05-05T03:47:08-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279328#p279328
I deeply regret and hope he will be in the heaven.

Rest In Peace,]]>

I deeply regret and hope he will be in the heaven.

Rest In Peace,]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by vilian]]> 2025-05-05T05:20:58-06:00 2025-05-05T05:20:58-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279329#p279329 Condolence to his family.]]> Condolence to his family.]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by cnavarro]]> 2025-05-05T05:34:30-06:00 2025-05-05T05:34:30-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279330#p279330 A great person, whom I have the honor of having met and shared his vast knowledge and simple vision of programming.
He leaves an irreplaceable void in our entire community.
His legacy will remain as an example and guide of a great teacher.
he sadness he leaves in my heart will be difficult to overcome.
Rest in peace.]]>
A great person, whom I have the honor of having met and shared his vast knowledge and simple vision of programming.
He leaves an irreplaceable void in our entire community.
His legacy will remain as an example and guide of a great teacher.
he sadness he leaves in my heart will be difficult to overcome.
Rest in peace.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by karinha]]> 2025-05-05T06:10:28-06:00 2025-05-05T06:10:28-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279332#p279332
I deeply regret and hope he will be in the heaven. A great loss for our community.

Rest In Peace,

Regards, saludos.]]>

I deeply regret and hope he will be in the heaven. A great loss for our community.

Rest In Peace,

Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by TomH]]> 2025-05-05T06:21:51-06:00 2025-05-05T06:21:51-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279333#p279333 Condolence to his family, May he rest in peace.]]> Condolence to his family, May he rest in peace.]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Giovany Vecchi]]> 2025-05-05T06:33:40-06:00 2025-05-05T06:33:40-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279334#p279334 Life teaches us the value of our journey. The satisfaction of being willing to help immortalizes our actions.]]> Life teaches us the value of our journey. The satisfaction of being willing to help immortalizes our actions.]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Baxajaun]]> 2025-05-05T06:42:58-06:00 2025-05-05T06:42:58-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279335#p279335 Rest in peace.
May the ground be light to you.
Descanse en paz.
Goian bego.]]>
Rest in peace.
May the ground be light to you.
Descanse en paz.
Goian bego.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by oliveiros junior]]> 2025-05-05T08:18:01-06:00 2025-05-05T08:18:01-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279337#p279337
Excellent teacher, always helping everyone with his knowledge and patience. My condolences to his family.

Rest in peace!

Oliveiros Junior]]>

Excellent teacher, always helping everyone with his knowledge and patience. My condolences to his family.

Rest in peace!

Oliveiros Junior]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by sysctrl2]]> 2025-05-05T09:44:42-06:00 2025-05-05T09:44:42-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279339#p279339 Mr. xBrowse
QEPD :(]]>
Mr. xBrowse
QEPD :(]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Ariel]]> 2025-05-05T10:14:06-06:00 2025-05-05T10:14:06-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279340#p279340 QPD, mis condolencias a su flia....]]> QPD, mis condolencias a su flia....]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Otto]]> 2025-05-05T10:33:37-06:00 2025-05-05T10:33:37-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279341#p279341
Image

We have not only lost an exceptionally pleasant person and a friend, but also a brilliant mind who played a key role in shaping our community.
Mr. Rao’s dedication, his clear thinking, and his tireless helpfulness have left a lasting mark on this forum. His absence will be deeply felt – in the code, in our exchanges, and in the spirit of our shared work.

As we mourn his loss, we also want to honor his legacy.
Now more than ever, it is up to all of us to carry on what he helped build. Let us keep his spirit alive – through mutual support, knowledge sharing, and the contributions of each individual, just as he always exemplified.

May his memory give us strength.
Rest in peace, Mr. Rao – we will continue. Your voice, your advice, and your quiet strength will be deeply missed. You remain in my heart, my friend.
A hug,
Otto

In remembrance, a video:
https://winhotel-sandbox.com/mrrao/mrrao_sillian.mp4

Image]]>

Image

We have not only lost an exceptionally pleasant person and a friend, but also a brilliant mind who played a key role in shaping our community.
Mr. Rao’s dedication, his clear thinking, and his tireless helpfulness have left a lasting mark on this forum. His absence will be deeply felt – in the code, in our exchanges, and in the spirit of our shared work.

As we mourn his loss, we also want to honor his legacy.
Now more than ever, it is up to all of us to carry on what he helped build. Let us keep his spirit alive – through mutual support, knowledge sharing, and the contributions of each individual, just as he always exemplified.

May his memory give us strength.
Rest in peace, Mr. Rao – we will continue. Your voice, your advice, and your quiet strength will be deeply missed. You remain in my heart, my friend.
A hug,
Otto

In remembrance, a video:
https://winhotel-sandbox.com/mrrao/mrrao_sillian.mp4

Image]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by karinha]]> 2025-05-05T10:46:35-06:00 2025-05-05T10:46:35-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279342#p279342
Regards, saludos.]]>

Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by cmsoft]]> 2025-05-05T12:40:50-06:00 2025-05-05T12:40:50-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279343#p279343 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by TimStone]]> 2025-05-05T14:31:01-06:00 2025-05-05T14:31:01-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279344#p279344
Although I share my condolences with his family, I also am saddened that Antonio has lost a close friend and collaborator.

May we all seek to be as generous in our serving others as Mr. Rao shared with us.

Tim.]]>

Although I share my condolences with his family, I also am saddened that Antonio has lost a close friend and collaborator.

May we all seek to be as generous in our serving others as Mr. Rao shared with us.

Tim.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Antonio Linares]]> 2025-05-05T14:38:29-06:00 2025-05-05T14:38:29-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279345#p279345
What do you think about it ? Would you be willing to help ?

I have asked his wife for her bank account number. I will post it here and you may feel free to help her. Remitly is the cheapest way to send her some money: https://www.remitly.com/

thank you]]>

What do you think about it ? Would you be willing to help ?

I have asked his wife for her bank account number. I will post it here and you may feel free to help her. Remitly is the cheapest way to send her some money: https://www.remitly.com/

thank you]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Willi Quintana]]> 2025-05-05T18:17:13-06:00 2025-05-05T18:17:13-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279347#p279347 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Cgallegoa]]> 2025-05-05T18:26:19-06:00 2025-05-05T18:26:19-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279348#p279348 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by richard-service]]> 2025-05-05T19:22:45-06:00 2025-05-05T19:22:45-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279350#p279350 My memory...

Mr. Rao
Rest in Peace]]>
My memory...

Mr. Rao
Rest in Peace]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Marcelo Roggeri]]> 2025-05-05T19:28:03-06:00 2025-05-05T19:28:03-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279351#p279351 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Antonio Linares]]> 2025-05-05T23:53:49-06:00 2025-05-05T23:53:49-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279353#p279353
K. Girija kumari. A/C no16281570001297. Customer id21083781]]>

K. Girija kumari. A/C no16281570001297. Customer id21083781]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by dutch]]> 2025-05-06T00:36:03-06:00 2025-05-06T00:36:03-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279354#p279354
Has she got Paypal account?
Antonio Linares wrote: Tue May 06, 2025 5:53 am Mr. Rao's wife bank account:

K. Girija kumari. A/C no16281570001297. Customer id21083781
]]>

Has she got Paypal account?
Antonio Linares wrote: Tue May 06, 2025 5:53 am Mr. Rao's wife bank account:

K. Girija kumari. A/C no16281570001297. Customer id21083781
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by driessen]]> 2025-05-06T01:23:38-06:00 2025-05-06T01:23:38-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279355#p279355 I am so greateful to him for all the help he offered to me and to many among us.
May he rest in peace.
My sincere condolances to his family and his friends.
He will be missed by many.
I am really shocked about this sad news.]]>
I am so greateful to him for all the help he offered to me and to many among us.
May he rest in peace.
My sincere condolances to his family and his friends.
He will be missed by many.
I am really shocked about this sad news.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Antonio Linares]]> 2025-05-06T01:47:41-06:00 2025-05-06T01:47:41-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279356#p279356
dutch wrote: Tue May 06, 2025 6:36 am Dear Antonio,

Has she got Paypal account?
Antonio Linares wrote: Tue May 06, 2025 5:53 am Mr. Rao's wife bank account:

K. Girija kumari. A/C no16281570001297. Customer id21083781
You may whatsapp her to +91 90100 44926]]>
dutch wrote: Tue May 06, 2025 6:36 am Dear Antonio,

Has she got Paypal account?
Antonio Linares wrote: Tue May 06, 2025 5:53 am Mr. Rao's wife bank account:

K. Girija kumari. A/C no16281570001297. Customer id21083781
You may whatsapp her to +91 90100 44926]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by acuellar]]> 2025-05-06T03:52:01-06:00 2025-05-06T03:52:01-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279359#p279359

We will miss him so much. A truly excellent contributor.

Rest in Peace, Mr. Rao.]]>


We will miss him so much. A truly excellent contributor.

Rest in Peace, Mr. Rao.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by carlos vargas]]> 2025-05-06T07:44:18-06:00 2025-05-06T07:44:18-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279363#p279363 Se nos va un grande.]]> Se nos va un grande.]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by wartiaga]]> 2025-05-06T13:22:15-06:00 2025-05-06T13:22:15-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279364#p279364 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by toninhofwi]]> 2025-05-06T16:16:07-06:00 2025-05-06T16:16:07-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279366#p279366 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by FiveWiDi]]> 2025-05-07T18:01:24-06:00 2025-05-07T18:01:24-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279370#p279370
Antonio Linares wrote: Tue May 06, 2025 5:53 am Mr. Rao's wife bank account:

K. Girija kumari. A/C no16281570001297. Customer id21083781
Alguién que pueda orientarme? Estos datos son de un banco? De cual? En India?

Lo voy a intentar desde Remitly.com pero no se por donde tirar.

Gracias,]]>
Antonio Linares wrote: Tue May 06, 2025 5:53 am Mr. Rao's wife bank account:

K. Girija kumari. A/C no16281570001297. Customer id21083781
Alguién que pueda orientarme? Estos datos son de un banco? De cual? En India?

Lo voy a intentar desde Remitly.com pero no se por donde tirar.

Gracias,]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by alex2002]]> 2025-05-08T13:50:58-06:00 2025-05-08T13:50:58-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45656&p=279372#p279372
Que o Espírito Santo possa confortar a todos.

Sempre via os seus posts, eram muito bons.]]>

Que o Espírito Santo possa confortar a todos.

Sempre via os seus posts, eram muito bons.]]>
<![CDATA[mod_harbour :: Re: tool for documentation :: Reply by Otto]]> 2025-05-01T02:23:25-06:00 2025-05-01T02:23:25-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=45&t=45376&p=279288#p279288 The documentation tool has been greatly enhanced. There’s now a search with filters in the TreeView and a content area that supports text highlighting. A fast full-text search covers the entire topic range. With a single click, a PDF can be generated directly from the content. Videos can also be embedded—especially useful in documentation such as home construction, where video content is becoming increasingly important. Additionally, content can be linked via QR code.

Shown here are notes taken during the installation of the Ubuntu PC for local AI applications. Having had no prior experience with Ubuntu, it was both exciting and surprising to see how much local AI can do right out of the box.
Best regards,
Otto
Image]]>
The documentation tool has been greatly enhanced. There’s now a search with filters in the TreeView and a content area that supports text highlighting. A fast full-text search covers the entire topic range. With a single click, a PDF can be generated directly from the content. Videos can also be embedded—especially useful in documentation such as home construction, where video content is becoming increasingly important. Additionally, content can be linked via QR code.

Shown here are notes taken during the installation of the Ubuntu PC for local AI applications. Having had no prior experience with Ubuntu, it was both exciting and surprising to see how much local AI can do right out of the box.
Best regards,
Otto
Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Donde descargar FiveEdit completo y ultima version SOLUCIONADO :: Reply by admsoporte]]> 2025-04-08T17:49:37-06:00 2025-04-08T17:49:37-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45613&p=278906#p278906
Saludos desde Mexico :D]]>

Saludos desde Mexico :D]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Presentamos HDBC – La Mejor Conexión a Bases de Datos para Harbour :: Reply by csincuir]]> 2025-04-09T06:07:22-06:00 2025-04-09T06:07:22-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45492&p=278913#p278913 Al igual que Lubin, yo he utilizado Eagle1 con MySQL desde sus primeras versiones y algunas veces Condor1 para trabajar con MSSql.
Por todo lo desarrollado con Eagle1 no hice la migración a HDO, y ahora con HDBC, aun no hay soporte para MySQL, que es lo que uso casi en un 100% en mis desarrollos.

Entonces, como pregunta de Lubin en su primer punto "Que tan difícil seria una migración de Eagle1 a esta versión HDBC..."?

Saludos cordiales.

Carlos]]>
Al igual que Lubin, yo he utilizado Eagle1 con MySQL desde sus primeras versiones y algunas veces Condor1 para trabajar con MSSql.
Por todo lo desarrollado con Eagle1 no hice la migración a HDO, y ahora con HDBC, aun no hay soporte para MySQL, que es lo que uso casi en un 100% en mis desarrollos.

Entonces, como pregunta de Lubin en su primer punto "Que tan difícil seria una migración de Eagle1 a esta versión HDBC..."?

Saludos cordiales.

Carlos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Presentamos HDBC – La Mejor Conexión a Bases de Datos para Harbour :: Reply by ramirezosvaldo2]]> 2025-04-09T08:27:43-06:00 2025-04-09T08:27:43-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45492&p=278915#p278915
Yo tambien soy seguidor de Manu,

https://forum.modharbour.app/viewtopic.php?f=23&t=140

Y que bueno que volvio, esperemos que podamos retomar lo pendiente del curso.

Saludos
Osvaldo Ramirez]]>

Yo tambien soy seguidor de Manu,

https://forum.modharbour.app/viewtopic.php?f=23&t=140

Y que bueno que volvio, esperemos que podamos retomar lo pendiente del curso.

Saludos
Osvaldo Ramirez]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Presentamos HDBC – La Mejor Conexión a Bases de Datos para Harbour :: Reply by xmanuel]]> 2025-04-09T09:54:08-06:00 2025-04-09T09:54:08-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45492&p=278916#p278916
Muchísimas gracias por sus amables palabras, ¡me reconfortan enormemente!

Para poner en contexto, Eagle1 es una librería que contiene una serie de clases especializadas en el acceso a MySQL, desarrollada en PRG utilizando wrappers en C.

HDO representa un avance significativo con respecto a Eagle1. Está desarrollada íntegramente en C estándar, incorporando un sistema de herencia propio basado en estructuras C. Además, incluye clases de utilidad adicionales implementadas en PRG que heredan de HDO. A diferencia de una librería especializada en una única base de datos, HDO permite trabajar con diversas bases de datos utilizando el mismo código fuente. Pero... ¿qué es HDBC?

HDBC es mi nueva creación, que consolida todos los años de estudio y la experiencia adquirida en el desarrollo de mis clases anteriores.

A continuación, enumero sus principales características:

Está desarrollada desde cero en C++, aplicando el paradigma de Programación Orientada a Objetos (POO).
Las clases para Harbour también están implementadas en C, utilizando su API correspondiente. Por lo tanto, se puede afirmar que está desarrollada en C/C++ al 100%.
Esta base C/C++ le confiere robustez, seguridad y velocidad.
Utiliza sentencias preparadas en el servidor, lo que implica las siguientes ventajas:
Rendimiento optimizado: La consulta SQL se analiza, compila y optimiza una única vez en el servidor de la base de datos, incluso para ejecuciones múltiples con diferentes parámetros. Esto reduce la sobrecarga de procesamiento en cada ejecución posterior, resultando en una mayor velocidad para consultas repetitivas.
Seguridad reforzada: Al separar la estructura de la consulta de los datos, las sentencias preparadas mitigan eficazmente el riesgo de ataques de inyección SQL. Los valores de los parámetros se envían al servidor de forma independiente y se tratan como datos, no como código ejecutable. Esto impide la inserción de código SQL malicioso a través de las entradas.
Tráfico de red reducido: En ejecuciones repetidas de la misma consulta, solo es necesario transmitir los parámetros, en lugar de la consulta SQL completa. Esto disminuye la cantidad de datos transferidos entre la aplicación y el servidor de la base de datos, mejorando la eficiencia de la red.
Código simplificado: El uso de marcadores de posición para los parámetros en las sentencias preparadas hace que el código sea más limpio y legible. Además, la gestión del escape y la validación de datos se delega al controlador de la base de datos, simplificando el desarrollo de la aplicación.
Reutilización de planes de ejecución: El servidor de la base de datos puede almacenar en caché los planes de ejecución de las sentencias preparadas. Esto permite que las ejecuciones posteriores de la misma sentencia sean aún más rápidas, al reutilizar el plan optimizado previamente. En resumen, las sentencias preparadas son cruciales para desarrollar aplicaciones de bases de datos seguras y de alto rendimiento, optimizando la eficiencia, la seguridad y la mantenibilidad.
Aglutina todos los años de estudio al respecto y la experiencia que he adquirido.
Su optimización es tal que podría servir como base para la creación de clases en PRG.
En consecuencia, aunque HDBC no es directamente compatible con Eagle1 o HDO, se podrían desarrollar clases para facilitar dicha compatibilidad.

Espero que sea de vuestro interés!!!

Saludos...]]>

Muchísimas gracias por sus amables palabras, ¡me reconfortan enormemente!

Para poner en contexto, Eagle1 es una librería que contiene una serie de clases especializadas en el acceso a MySQL, desarrollada en PRG utilizando wrappers en C.

HDO representa un avance significativo con respecto a Eagle1. Está desarrollada íntegramente en C estándar, incorporando un sistema de herencia propio basado en estructuras C. Además, incluye clases de utilidad adicionales implementadas en PRG que heredan de HDO. A diferencia de una librería especializada en una única base de datos, HDO permite trabajar con diversas bases de datos utilizando el mismo código fuente. Pero... ¿qué es HDBC?

HDBC es mi nueva creación, que consolida todos los años de estudio y la experiencia adquirida en el desarrollo de mis clases anteriores.

A continuación, enumero sus principales características:

Está desarrollada desde cero en C++, aplicando el paradigma de Programación Orientada a Objetos (POO).
Las clases para Harbour también están implementadas en C, utilizando su API correspondiente. Por lo tanto, se puede afirmar que está desarrollada en C/C++ al 100%.
Esta base C/C++ le confiere robustez, seguridad y velocidad.
Utiliza sentencias preparadas en el servidor, lo que implica las siguientes ventajas:
Rendimiento optimizado: La consulta SQL se analiza, compila y optimiza una única vez en el servidor de la base de datos, incluso para ejecuciones múltiples con diferentes parámetros. Esto reduce la sobrecarga de procesamiento en cada ejecución posterior, resultando en una mayor velocidad para consultas repetitivas.
Seguridad reforzada: Al separar la estructura de la consulta de los datos, las sentencias preparadas mitigan eficazmente el riesgo de ataques de inyección SQL. Los valores de los parámetros se envían al servidor de forma independiente y se tratan como datos, no como código ejecutable. Esto impide la inserción de código SQL malicioso a través de las entradas.
Tráfico de red reducido: En ejecuciones repetidas de la misma consulta, solo es necesario transmitir los parámetros, en lugar de la consulta SQL completa. Esto disminuye la cantidad de datos transferidos entre la aplicación y el servidor de la base de datos, mejorando la eficiencia de la red.
Código simplificado: El uso de marcadores de posición para los parámetros en las sentencias preparadas hace que el código sea más limpio y legible. Además, la gestión del escape y la validación de datos se delega al controlador de la base de datos, simplificando el desarrollo de la aplicación.
Reutilización de planes de ejecución: El servidor de la base de datos puede almacenar en caché los planes de ejecución de las sentencias preparadas. Esto permite que las ejecuciones posteriores de la misma sentencia sean aún más rápidas, al reutilizar el plan optimizado previamente. En resumen, las sentencias preparadas son cruciales para desarrollar aplicaciones de bases de datos seguras y de alto rendimiento, optimizando la eficiencia, la seguridad y la mantenibilidad.
Aglutina todos los años de estudio al respecto y la experiencia que he adquirido.
Su optimización es tal que podría servir como base para la creación de clases en PRG.
En consecuencia, aunque HDBC no es directamente compatible con Eagle1 o HDO, se podrían desarrollar clases para facilitar dicha compatibilidad.

Espero que sea de vuestro interés!!!

Saludos...]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Presentamos HDBC – La Mejor Conexión a Bases de Datos para Harbour :: Reply by lubin]]> 2025-04-09T12:14:12-06:00 2025-04-09T12:14:12-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45492&p=278919#p278919
Un saludo maestro, buena la explicación, y sin duda interesante proyecto HDBC por las características que mencionas mas tu experiencia en ello , y pienso que la implementación en las Db de Mysql seria muy atractivo para muchos de nosotros.

Trato de entender que también existe HDO también de tu autoria ? ... y tiene soporte actualizado para MySql y FW , la pregunta seria:

Si en mi caso solo voy a usar MYSQL seria suficiente tener el HDO? o es acaso que el HDBC me aportaría mayor operatividad y seguridad en MySQL ( independiente que tenga soporte para otros motores de DB ).

un abrazo
Lubin]]>

Un saludo maestro, buena la explicación, y sin duda interesante proyecto HDBC por las características que mencionas mas tu experiencia en ello , y pienso que la implementación en las Db de Mysql seria muy atractivo para muchos de nosotros.

Trato de entender que también existe HDO también de tu autoria ? ... y tiene soporte actualizado para MySql y FW , la pregunta seria:

Si en mi caso solo voy a usar MYSQL seria suficiente tener el HDO? o es acaso que el HDBC me aportaría mayor operatividad y seguridad en MySQL ( independiente que tenga soporte para otros motores de DB ).

un abrazo
Lubin]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Presentamos HDBC – La Mejor Conexión a Bases de Datos para Harbour :: Reply by russimicro]]> 2025-04-09T17:56:01-06:00 2025-04-09T17:56:01-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45492&p=278921#p278921
Uso eagle1 con xharbour... y mysql... que tan pronto se tendría versión para xharbour y mysql / mariadb

Gracias
JONSSON RUSSI]]>

Uso eagle1 con xharbour... y mysql... que tan pronto se tendría versión para xharbour y mysql / mariadb

Gracias
JONSSON RUSSI]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Presentamos HDBC – La Mejor Conexión a Bases de Datos para Harbour :: Reply by xmanuel]]> 2025-04-10T11:31:41-06:00 2025-04-10T11:31:41-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45492&p=278930#p278930 ¡Espero que estés muy bien! <
Quería comentarte que HDO funciona perfectamente con MySQL, pero HDBC todavía no. <
Mi intención es desarrollar un driver para HDBC, aunque esto dependerá del interés de los compañeros.
En su momento empecé con PostgreSQL debido al interés que había, pero al final creo que ese interés no fue suficiente. Por otro lado, HDBC es un intento de integrar C++ orientado a objetos con el API de Harbour, y he comprobado que es posible. Además, esta integración facilita considerablemente las cosas, mejora el rendimiento y aporta una mayor robustez a los programas desarrollados con HDBC.<

¡Quedo atento a cualquier comentario o sugerencia!]]>
¡Espero que estés muy bien! <
Quería comentarte que HDO funciona perfectamente con MySQL, pero HDBC todavía no. <
Mi intención es desarrollar un driver para HDBC, aunque esto dependerá del interés de los compañeros.
En su momento empecé con PostgreSQL debido al interés que había, pero al final creo que ese interés no fue suficiente. Por otro lado, HDBC es un intento de integrar C++ orientado a objetos con el API de Harbour, y he comprobado que es posible. Además, esta integración facilita considerablemente las cosas, mejora el rendimiento y aporta una mayor robustez a los programas desarrollados con HDBC.<

¡Quedo atento a cualquier comentario o sugerencia!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Presentamos HDBC – La Mejor Conexión a Bases de Datos para Harbour :: Reply by xmanuel]]> 2025-04-10T11:33:59-06:00 2025-04-10T11:33:59-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45492&p=278932#p278932
russimicro wrote: Wed Apr 09, 2025 11:56 pm Buena noche..

Uso eagle1 con xharbour... y mysql... que tan pronto se tendría versión para xharbour y mysql / mariadb

Gracias
JONSSON RUSSI
Hola Jonsson
De momento sólo funciona con Harbour... la portación también a xHarbour solo dependerá del interés!!!

Saludos]]>
russimicro wrote: Wed Apr 09, 2025 11:56 pm Buena noche..

Uso eagle1 con xharbour... y mysql... que tan pronto se tendría versión para xharbour y mysql / mariadb

Gracias
JONSSON RUSSI
Hola Jonsson
De momento sólo funciona con Harbour... la portación también a xHarbour solo dependerá del interés!!!

Saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: ENDPAGE( 0 ) :: Author karinha]]> 2025-04-09T10:11:48-06:00 2025-04-09T10:11:48-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45616&p=278918#p278918

Code: Select all | Expand

   Called from:  => ENDPAGE( 0 )
   Called from: PRINTER.prg => PAGEEND( 0 )
   Called from: LIMPJARD.prg => IMPRIMIR_ESCOPOS_LIMP( 4391 )
   Called from: LIMPJARD.prg => PEGA_DADOS_LIMP_IMPRESSAO( 2851 )
   Called from: LIMPJARD.prg => (b)IMP_TIPO_IMPRESSAO_LIMPEZA( 1227 )
   Called from: WINORCAM.prg => MAIN( 1281 )
Gracias, tks.]]>

Code: Select all | Expand

   Called from:  => ENDPAGE( 0 )
   Called from: PRINTER.prg => PAGEEND( 0 )
   Called from: LIMPJARD.prg => IMPRIMIR_ESCOPOS_LIMP( 4391 )
   Called from: LIMPJARD.prg => PEGA_DADOS_LIMP_IMPRESSAO( 2851 )
   Called from: LIMPJARD.prg => (b)IMP_TIPO_IMPRESSAO_LIMPEZA( 1227 )
   Called from: WINORCAM.prg => MAIN( 1281 )
Gracias, tks.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: ENDPAGE( 0 ) :: Reply by cmsoft]]> 2025-04-09T16:20:10-06:00 2025-04-09T16:20:10-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45616&p=278920#p278920 <![CDATA[FiveWin para Harbour/xHarbour :: Re: ENDPAGE( 0 ) :: Reply by cnavarro]]> 2025-04-09T18:14:34-06:00 2025-04-09T18:14:34-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45616&p=278922#p278922 Comprueba que los PAGE ... ENDPAGE están sincronizados, puede ser que tengas algún ENDPAGE que sobre]]> Comprueba que los PAGE ... ENDPAGE están sincronizados, puede ser que tengas algún ENDPAGE que sobre]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: ENDPAGE( 0 ) :: Reply by karinha]]> 2025-04-10T07:43:55-06:00 2025-04-10T07:43:55-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45616&p=278926#p278926

Code: Select all | Expand

// IMPRESSAO DOS PRODUTOS DA LIMPEZA DE JARDIM
FUNCTION IMPRIMIR_ESCOPOS_LIMP( DeOndePartiu, oDlgBtn )

   LOCAL oPrn, nMargin, nWidth, nColWidth, nRow, nCol, oImage
   LOCAL XDATALISTA, cAlias, cMemoria
   LOCAL oFont, oFontLogo, oFontDivi, oFontList, oFontCurs, oPen1, oPen2, ;
      oPen3, oFontSubl, ResLinha, ResColuna, cProposta, nLinha, nColuna, ;
      oFontBold, nTotalParc := 0.00, nTotalGeral := 0.00, nTotalProdu
   LOCAL nPulaLinha, oFontMin, oFontSub2, nPagina, oFontRua, nItem
   LOCAL cSublin, cImpSub, cFile // := "C:\ORCAMPDF\CHAMADO.PDF"

   PRIVATE WE1, WE2, WE3, LARGEXTEN2
   PUBLIC nValorVenda

   STOR SPAC( 70 ) TO WE1, WE2, WE3

   cFile := "C:\ORCAMPDF\" + "ORCAM" + ALLTRIM( nProposta ) + ".PDF"

   XDATALISTA := "São Paulo" + ", " + LTRIM( STR( DAY( DATE() ) ) )  + ;
                 " de "             + OemToAnsi( CMONTH( DATE() ) )  + ;
                 " de "             + LTRIM( STR( YEAR( DATE() ) ) ) + "."

   HB_GCALL( .F. ) // PARA LIMPAR A MEMORIA

   LCHDIR( cDirPleno )
   SET DEFAULT TO

   aPrn := GetPrinters()  // 02/08/2017 Teste para ver se avisa erro.

   IF Empty( aPrn ) // Empty( oPrn:hDC )
      MsgStop( "Nenhuma Impressora Encontrada", "Nenhuma Impressora Encontrada" )
      RETURN NIL
   ENDIF

   PRINTER oPrn PREVIEW MODAL // PARA TESTAR A IMPRESSORA ANTES DE IMPRIMIR

   IF EMPTY( oPrn:hDC ) // MODIFICADO EM: 05/05/2015 - Quebrou na Gilmaria.
      MsgInfo( "ALGUMA COISA OCORREU DE ERRADO COM A IMPRESSORA.", "LIGUE A IMPRESSORA." )
      oPrn:End()
      RETURN( .F. )
   ENDIF

   oPrn:End()

   IF .NOT. NETERR()

      SELECT( DBRECOMPOS )

   ELSE

      MsgInfo( "ERRO DE REDE. Verifique!", "Confirma " )

      LIBERA_TUDO()

      RETURN NIL

   ENDIF

   cProposta := nProposta  // PARA O INDICE TEMPORARIO TEM QUE SER ASSIM.

   INDEX ON PROPOCOD TAG 04 TO ORCATEMP FOR ( .NOT. EOF() ) .AND. ;
      ( DBRECOMPOS )->PROPOCOD >= cProposta                 .AND. ;
      ( DBRECOMPOS )->PROPOCOD <= cProposta MEMORY // TEMPORARY

   GO TOP

   IF EOF()

      MsgStop( OemToAnsi( "Nenhuma Proposta Localizada Para ImpressÆo" ), ;
               OemToAnsi( "Nenhuma Proposta Localizada Para ImpressÆo" ) )

      RETURN NIL

   ENDIF

   cAlias := ALIAS()

   oImage := ".\LOGO.jpg"  // tem que estar na pasta do plenoind

   IF DeOndePartiu = "DIRETONAIMP"         // DIRETO NA IMPRESSORA

      PRINT oPrn NAME "LIMPEZA_JARDIM"     // DIRETO NA IMP.

   ELSEIF DeOndePartiu = "COMPREVIEWFIVE"  // COM PREVIEW(Visualizacao)

      PRINT oPrn NAME "LIMPEZA_JARDIM" PREVIEW MODAL

   ELSEIF DeOndePartiu = "COMPREVIEWPDF"   // GERAR O ARQUIVO PDF.

      PRINT oPrn PREVIEW

   ENDIF

   DEFINE FONT oFontRua  NAME "Courier New" SIZE 0, - 10                OF oPrn
   DEFINE FONT oFontMin  NAME "Courier New" SIZE 0, - 10 BOLD           OF oPrn
   DEFINE FONT oFont     NAME "Courier New" SIZE 0, - 12                OF oPrn
   DEFINE FONT oFontBold NAME "Courier New" SIZE 0, - 12 BOLD           OF oPrn
   DEFINE FONT oFontSubl NAME "Courier New" SIZE 0, - 12 BOLD UnderLine OF oPrn
   DEFINE FONT oFontSub2 NAME "Courier New" SIZE 0, - 12 BOLD UnderLine OF oPrn

   //-> Caneta do Preview
   DEFINE PEN oPen1 WIDTH 4 COLOR CLR_BROWN OF oPrn
   DEFINE PEN oPen2 WIDTH 2 COLOR CLR_BROWN OF oPrn
   DEFINE PEN oPen3 WIDTH 5 COLOR CLR_BLACK OF oPrn
 
   oPrn:SetPage( 9 )   //-> A4 //9
   oPrn:SetPortrait()  //-> Vertical(Retrato)

   //- Como Imprimir em Centimetros sem errar e em qualquer Impressora
   ResLinha  := oPrn:nLogPixely()/2.54
   ResColuna := oPrn:nLogPixelx()/2.54

   nMargin   := Int( 0.1 * oPrn:nHorzRes() )
   nWidth    := 8 * nMargin
   nColWidth := Int( ( nWidth - nMargin ) / 2 )
   nPagina   := 1

   PAGE

   nRow      :=   1.50  // Linha
   nCol      := 650.00  // Coluna do Logo.jpg

   @  nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow

   nLinha  := 1.00
   nColuna := 18.00

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                        ;
      OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, ,    ;
      CLR_BLACK, , PAD_CENTER )

   nLinha  := 3.00  // era 2.50

   IF LEN( ALLTRIM( nProposta ) ) = 1
      nColuna := 4.35
   ELSEIF LEN( ALLTRIM( nProposta ) ) = 2
      nColuna := 4.45
   ELSEIF LEN( ALLTRIM( nProposta ) ) = 3
      nColuna := 4.55
   ELSEIF LEN( ALLTRIM( nProposta ) ) = 4 // OK
      nColuna := 4.65
   ELSEIF LEN( ALLTRIM( nProposta ) ) = 5 // OK
      nColuna := 4.75
   ELSEIF LEN( ALLTRIM( nProposta ) ) = 6 // OK
      nColuna := 4.85   // 5.00 -.15
   ELSEIF LEN( ALLTRIM( nProposta ) ) = 7 // OK
      nColuna := 4.95
   ELSEIF LEN( ALLTRIM( nProposta ) ) = 8 // OK
      nColuna := 5.05
   ELSEIF LEN( ALLTRIM( nProposta ) ) = 9 // OK
      nColuna := 5.15
   ELSEIF LEN( ALLTRIM( nProposta ) ) = 10 // OK
      nColuna := 5.25
   ELSE
      nColuna := 5.35
   ENDIF

   oPrn:Say( nLinha * ResLinha,  nColuna * ResColuna,                    ;
      "Orçamento Nº.: " + ALLTRIM( nProposta ), oFont, ,                 ;
      CLR_BLACK, , PAD_CENTER )

   oPrn:cmSay( nLinha, 19.00, "" + XDATALISTA, oFontRua, , CLR_BLACK, , PAD_RIGHT )

   nLinha  := nLinha += 0.80

   IF LEN( ALLTRIM( STR( nClienCod ) ) ) = 1
      nColuna := 7.48    // 7.50
   ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 2
      nColuna := 7.58   // 7.60
   ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 3
      nColuna := 7.68  // 7.70
   ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 4 // OK
      nColuna := 7.78   // 7.80
   ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 5
      nColuna := 7.83   // 7.85
   ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 6
      nColuna := 7.93  // 7.95
   ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 7
      nColuna := 8.03  // 8.05
   ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 8
      nColuna := 8.13  // 8.15
   ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 9
      nColuna := 8.23  // 8.25
   ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 10
      nColuna := 8.33  // 8.35
   ENDIF

   oPrn:Say( nLinha * ResLinha,  nColuna * ResColuna,                    ;
      + "CÓD.: " + ALLTRIM( STR( nClienCod ) ) + " - " + ClienPropo,     ;
      oFontRua, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.50
   nColuna :=  6.40 // 6.55

   oPrn:Say( nLinha * ResLinha,  nColuna * ResColuna,                    ;
      + EnderPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.50
   nColuna :=  5.15  // 5.30

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                     ;
      "BAIRRO: " + BairrPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )

   nColuna := nColuna += 6.50  // 5.05

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                     ;
      "CIDADE: " + CidadPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )

   nColuna := nColuna +=   4.50

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                     ;
      "UF: " + UFdaPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.60
   nColuna :=  2.85   // 2.95

   oPrn:Say(  nLinha * ResLinha, nColuna * ResColuna,                    ;
      "Att.: ", oFontRua, , CLR_BLACK, , PAD_CENTER )

   nColuna := 7.10

   oPrn:Say(  nLinha * ResLinha, nColuna * ResColuna,                    ;
      + cContatoCli, oFontRua, , CLR_BLACK, , PAD_CENTER )

   cOrcamento  := "REF.: " // + cTPSerNome  // NOME DO SERVICO

   nLinha := nLinha += 1.00
   nColuna :=  2.95 // "REF.:"   // 3.10

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                     ;
      + cOrcamento, oFontBold, , CLR_BLACK, , PAD_CENTER )

   nColuna :=  7.70  // 7.70

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                     ;
      + cTPSerNome, oFontBold, , CLR_BLACK, , PAD_CENTER )

   cSublin := "REF.: " + ALLTRIM( cTPSerNome ) // TIRAR BRANCOS P/ENCAIXAR
   cImpSub := LEN( cSublin ) + 1.2              // PARA SUBLINHADO.

   nLinha  := nLinha += 0.05 // Tiro os Brancos e Encaixo embaixo o SUBLINHADO
   nColuna := 2.20  // - 2.35 -.15

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
      REPLICATE( "_", cImpSub ), oFontBold , , CLR_BLACK, , PAD_LEFT )

   cConforme1 := "Conforme solicitação segue proposta abaixo:                                            "

   nLinha  := nLinha += 0.80
   nColuna := 13.20  // -.15

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
      + cConforme1, oFont, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.80
   nColuna :=  5.35

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
      + "01. ESCOPO DOS TRABALHOS:", oFontSub2, , CLR_BLACK, , PAD_CENTER )

   // PODAS AQUI
   nLinha  := nLinha += 0.60
   nColuna := 10.05  // 10.15 -.10

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
      + cPodas1, oFont, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.50
   nColuna := 10.05

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
      + cPodas2, oFont, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.50
   nColuna := 10.05

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
      + cPodas3, oFont, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.50
   nColuna := 10.05

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
      + cPodas4, oFont, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.50
   nColuna := 10.05

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
      + cPodas5, oFont, , CLR_BLACK, , PAD_CENTER )

   IF .NOT. EMPTY( cPodas6 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas6, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas7 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas7, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas8 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas8, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas9 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas9, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas10 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas10, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas11 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas11, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas12 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas12, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas13 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas13, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas14 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas14, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas15 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas15, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas16 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas16, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas17 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas17, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas18 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas18, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas19 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas19, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas20 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas20, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas21 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas21, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas22 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas22, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas23 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas23, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas24 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas24, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas25 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas25, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas26 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas26, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas27 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas27, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas28 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas28, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas29 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas29, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas30 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas30, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas31 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas31, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF nLinha >= 23.00 // PARA AS OBSERVACOES

      nLinha  := 27.00
      nColuna := 10.50

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
         + OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
         oFontMin, , CLR_GREEN, , PAD_CENTER )

      ENDPAGE

      PAGE  // NOVA PAGINA

      // oPrn:SayImage( nLinLogo, nColLogo, "LOGO.JPG", nLargLogo, nAltLogo )
      @  nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow

      ++nPagina

      nLinha  := 1.00
      nColuna := 18.00 // 17.50

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                        ;
         OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, ,    ;
         CLR_BLACK, , PAD_CENTER )

      nLinha  := 3.00  // 23 Linhas

   ELSE

      nLinha := nLinha += 0.70 // MUDEI EM: 23/09/2021 - Joao.

   ENDIF

   nTotalProdu := 0.00

   GO TOP

   WHILE( .NOT. EOF() )

      SYSREFRESH()

      nTotalProdu := nTotalProdu + ( cAlias )->VRVENDA *  ;
                                   ( cAlias )->PRODUQTDE

      SKIP

   ENDDO

   IF( nTotalProdu ) > 0.00
      lLigaProduto := .T.
   ENDIF

   GO TOP

   IF lLigaProduto // := .F.   // STATIC NO INICIO DO MODULO

      IF lImpFonte12 // := .T. // COURIER NEW 12 - 07/10/2021 Implementei.

         nColuna :=  2.10  // 3.20

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "C¢digo:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna :=  5.05 // 5.84

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Produto:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna := 11.90

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Un:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna := 13.20  // 13.10

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Qtd:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna := 15.30

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Valor Un:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna := 18.70  // 18.30

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Total:" ), oFont,, CLR_BLACK,, PAD_CENTER )

      ELSE // COURIR NEW 10 - 07/10/2021 - Joao

         nColuna :=  3.25

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "C¢digo:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna :=  5.84 // 5.84

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Produto:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna := 11.75

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Un:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna := 13.20

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Qtd:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna := 15.30

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Valor Un:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna := 18.70

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Total:" ), oFont,, CLR_BLACK,, PAD_CENTER )

      ENDIF

      nLinha  := nLinha += 0.60  // LINHA DOS PRODUTOS

   ENDIF

   GO TOP

   WHILE( .NOT. EOF() )

      SYSREFRESH()

      IF ( cAlias )->PRODUNOME = SPACE( 30 )  // NAO MOSTRA O PRODUTO

         SKIP

         LOOP

      ENDIF

      IF lImpFonte12 // := .T. // COURIER NEW 12

         nColuna :=   2.50 // 3.35

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
                   + ( cAlias )->PRODUCOD, oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna :=  7.80 // 8.00 - Estava oFontRua

         // ESCOPO DOS TRABALHOS AQUI. PRODUTOS DA LIMPEZA
         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + ( cAlias )->PRODUNOME, oFont, , CLR_BLACK, , PAD_CENTER )

         nColuna :=  13.00  // 12.50

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
             + ( cAlias )->PRODUUNID, oFont, , CLR_BLACK, , PAD_CENTER )

         nColuna :=  13.70

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + ALLTRIM( TRANS( ( cAlias )->PRODUQTDE, "@ 99999" ) ),             ;
            oFont,, CLR_BLACK,, PAD_RIGHT  )

         nColuna := 16.40  // 16.00

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + ALLTRIM( TRANS( ( cAlias )->VRVENDA, "@E 99,999.99" ) ),          ;
            oFont,, CLR_BLACK,, PAD_RIGHT  )

         nColuna := 19.50   // 19.05

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + ALLTRIM( TRANS( ( cAlias )->VRTOTAL, "@E 9,999,999.99" ) ),       ;
            oFont,, CLR_BLACK,, PAD_RIGHT  )

      ELSE // COURIER NEW 10

         nColuna :=   3.40 // 3.35

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
                   + ( cAlias )->PRODUCOD, oFontRua,, CLR_BLACK,, PAD_CENTER )

         nColuna :=  8.00

         // ESCOPO DOS TRABALHOS AQUI. PRODUTOS DA LIMPEZA
         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + ( cAlias )->PRODUNOME, oFontRua, , CLR_BLACK, , PAD_CENTER )

         nColuna :=  12.50  // 12.50

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
             + ( cAlias )->PRODUUNID, oFontRua, , CLR_BLACK, , PAD_CENTER )

         nColuna :=  13.70

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + ALLTRIM( TRANS( ( cAlias )->PRODUQTDE, "@ 99999" ) ),             ;
            oFontRua,, CLR_BLACK,, PAD_RIGHT  )

         nColuna := 16.30

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + ALLTRIM( TRANS( ( cAlias )->VRVENDA, "@E 99,999.99" ) ),          ;
            oFontRua,, CLR_BLACK,, PAD_RIGHT  )

         nColuna := 19.50

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + ALLTRIM( TRANS( ( cAlias )->VRTOTAL, "@E 9,999,999.99" ) ),       ;
            oFontRua,, CLR_BLACK,, PAD_RIGHT  )

      ENDIF // FIM DA COURIER NEW 10

      SKIP

      IF nLinha >= 23.00 // PARA AS OBSERVACOES/ ACHO QUE ENTRARA NO WHILE DOS PRODUTOS

         nLinha  := 27.00
         nColuna := 10.50

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
            + OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
            oFontMin, , CLR_GREEN, , PAD_CENTER )

         ENDPAGE

         PAGE  // NOVA PAGINA

         // CONFIGURACAO ESTA EM: AMBLOGO.DBF
         // oPrn:SayImage( nLinLogo, nColLogo, "LOGO.JPG", nLargLogo, nAltLogo )
         @  nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow

         ++nPagina

         nLinha  := 1.00
         nColuna := 18.00   // 18.00

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                     ;
            OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, , ;
            CLR_BLACK, , PAD_CENTER )

         nLinha  := 3.00

      ENDIF

      nLinha  := nLinha += 0.50

   ENDDO

   cProdutos := "Produtos:    "

   IF lLigaProduto // := .F.   // SE TIVER PRODUTOS

      IF nLinha # 3.00

         nLinha  := nLinha += 0.40

      ENDIF

      nColuna := 4.00

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
         + cProdutos, oFont, , CLR_BLACK, , PAD_CENTER )

      nColuna := 4.70   // 4.60

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
         REPLICATE( ".", 046 ), oFont, , CLR_BLACK, , PAD_LEFT )

      nColuna := 15.56

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
         + " ", oFont, , CLR_BLACK, , PAD_CENTER )

      nColuna := 19.50

      IF lImpFonte12 // := .T. // COURIER NEW 12 - 07/10/2021 Implementei.

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
            + ALLTRIM( TRANS( nTotalProdu, "@E 9,999,999.99" ) ),            ;
            oFont, , CLR_BLACK, , PAD_RIGHT  )

      ELSE

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
            + ALLTRIM( TRANS( nTotalProdu, "@E 9,999,999.99" ) ),            ;
            oFontRua, , CLR_BLACK, , PAD_RIGHT  )

      ENDIF

   ENDIF

   cMaoObra := "Mão de Obra: "

   IF( nVrUnSer ) > 0.00

      nLinha  := nLinha += 0.50
      nColuna := 4.00

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cMaoObra, oFont, , CLR_BLACK, , PAD_CENTER )

      nColuna := 5.45

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         REPLICATE( ".", 043 ), oFont, , CLR_BLACK, , PAD_LEFT )

      nColuna := 15.56

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + " ", oFont, , CLR_BLACK, , PAD_CENTER )

      nColuna := 19.50

      IF lImpFonte12 // := .T. // COURIER NEW 12 - 07/10/2021 Implementei.

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
            + ALLTRIM( TRANS( nVrUnSer, "@E 9,999,999.99" ) ),               ;
            oFont, , CLR_BLACK, , PAD_RIGHT  )

      ELSE

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
            + ALLTRIM( TRANS( nVrUnSer, "@E 9,999,999.99" ) ),               ;
            oFontRua, , CLR_BLACK, , PAD_RIGHT  )

      ENDIF

   ENDIF

   IF nDesconto > 0.00

      nLinha  := nLinha += 0.50
      nColuna := 3.60

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + OemToAnsi( "Desconto: " ), oFont, , CLR_BLACK, , PAD_CENTER )

      nColuna := 4.65

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         REPLICATE( ".", 046 ), oFont, , CLR_BLACK, , PAD_LEFT )

      nColuna := 19.50

      IF lImpFonte12 // := .T. // COURIER NEW 12 - 07/10/2021 Implementei.

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
            + ALLTRIM( TRANS( nDesconto, "@E 999,999.99" ) ),                ;
            oFont, , CLR_BLACK, , PAD_RIGHT  )

      ELSE

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
            + ALLTRIM( TRANS( nDesconto, "@E 999,999.99" ) ),                ;
            oFontRua, , CLR_BLACK, , PAD_RIGHT  )

      ENDIF

      nValorTotal := 0.00
      nDesconto   := 0.00  // INCLUIDO EM: 04/09/2019
      nTotalNfe   := 0.00

      GO TOP

      WHILE( .NOT. EOF() )

         SYSREFRESH()

         nDesconto := nDesconto + VRDESCONTO

         SKIP

      ENDDO

      GO TOP

      WHILE( .NOT. EOF() )

         SYSREFRESH()

         nTotalNfe := nTotalNfe + ( cAlias )->VRVENDA   * ;
                                  ( cAlias )->PRODUQTDE + ;
                                  ( cAlias )->VRUNSER

         SKIP

      ENDDO

      nValorTotal := nTotalNfe - nDesconto   // - nDesconto // somente se a Fernanda disser que sim

   ENDIF

   nLinha  := nLinha += 1.00
   nColuna := 3.45

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                         ;
      + OemToAnsi( "02. TOTAL:" ), oFontSub2, , CLR_BLACK, , PAD_CENTER )

   nVal   := nValorTotal   // lDin

   EXTENSO( nVal, 50, WE1, WE2, WE3 )

   nLinha  := nLinha += 0.70
   nColuna := 3.60  // 3.75

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                         ;
      + OemToAnsi( "R$ " ), oFont, , CLR_BLACK, , PAD_CENTER )

   nColuna := nColuna += 0.60

   IF WE2 # SPACE( 50 )

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + ALLTRIM( TRANS( nValorTotal, "@E 999,999,999.99" ) ) + " (" +     ;
         ALLTRIM( WE1 ), oFont, , CLR_BLACK, , PAD_LEFT )

      IF WE2 # SPACE( 50 )

         nLinha  := nLinha  += 0.50
         nColuna := nColuna += 2.60

         IF WE3 = SPACE( 50 )

            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
               + ALLTRIM( WE2 ) + ").", oFont, , CLR_BLACK, , PAD_LEFT )

         ELSE

            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
               + ALLTRIM( WE2 ), oFont, , CLR_BLACK, , PAD_LEFT )

         ENDIF

      ENDIF

      IF WE3 # SPACE( 50 )

         nLinha  := nLinha  += 0.50
         nColuna := nColuna += 2.60

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
            + ALLTRIM( WE3 ) + ").", oFont, , CLR_BLACK, , PAD_LEFT )

      ENDIF

   ELSE // - < QUE 50 CARACTERES.

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + ALLTRIM( TRANS( nValorTotal, "@E 999,999,999.99" ) ) + " (" +     ;
         ALLTRIM( WE1 ) + ").", oFont, , CLR_BLACK, , PAD_LEFT )

   ENDIF

   IF nLinha >= 23.00 // PARA AS OBSERVACOES/ ACHO QUE ENTRARA NO WHILE DOS PRODUTOS

      nLinha  := 27.00
      nColuna := 10.50

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
         + OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
         oFontMin, , CLR_GREEN, , PAD_CENTER )

      ENDPAGE

      PAGE  // NOVA PAGINA

      // CONFIGURACAO ESTA EM: AMBLOGO.DBF
      // oPrn:SayImage( nLinLogo, nColLogo, "LOGO.JPG", nLargLogo, nAltLogo )
      @  nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow

      ++nPagina

      nLinha  := 1.00
      nColuna := 18.00   // 18.00

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, ,  ;
         CLR_BLACK, , PAD_CENTER )

      nLinha  := 3.00

   ENDIF

   IF nLinha # 3.00

      nLinha  := nLinha += 0.80

   ENDIF

   nColuna := 5.61

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                         ;
      + OemToAnsi( "03. CONDIیES DE PAGAMENTO:" ),                          ;
      oFontSub2, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.60
   nColuna :=  3.20

   // cCondPagto pode alterar no dialogo, Lucia pediu edicao - OK
   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                         ;
      + cCondPagto, oFont, , CLR_BLACK, , PAD_LEFT )

   // OBSERVACOES AQUI - DEPENDENDO DO TAMANHO DO TEXTO FICA NA MESMA PAG. Joao
   IF .NOT. EMPTY( cObserva1 )

      nLinha  := nLinha += 0.80
      nColuna :=  4.075 // 4.15

      // ter opcao de alterar
      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + OemToAnsi( "04. OBSERVAۂO:" ),                                   ;
         oFontSub2, , CLR_BLACK, , PAD_CENTER )

      nLinha  := nLinha += 0.60
      nColuna := 10.95 // 11.05  -.10

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva1, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva2 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95 //10.55

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva2, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva3 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva3, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva4 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva4, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva5 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva5, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva6 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva6, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva7 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva7, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva8 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva8, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva9 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva9, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva10 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva10, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva11 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva11, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva12 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva12, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva13 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva13, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF nLinha >= 23.00 // PARA AS OBSERVACOES

      nLinha  := 27.00
      nColuna := 10.50

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
         + OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
         oFontMin, , CLR_GREEN, , PAD_CENTER )

      ENDPAGE

      PAGE  // NOVA PAGINA

      @  nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow

      ++nPagina

      nLinha  := 1.00
      nColuna := 18.00   // 18.00

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, ,  ;
         CLR_BLACK, , PAD_CENTER )

      nLinha  := 3.00

   ENDIF

   IF nLinha # 3.00

      nLinha  := nLinha += 0.50

   ENDIF

   IF .NOT. EMPTY( cObserva14 )

      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva14, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva15 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva15, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva16 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95   // 11.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva16, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF nLinha >= 23.00 // PARA AS OBSERVACOES/ ACHO QUE ENTRARA NO WHILE DOS PRODUTOS

      nLinha  := 27.00
      nColuna := 10.50

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
         + OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
         oFontMin, , CLR_GREEN, , PAD_CENTER )

      ENDPAGE

      PAGE  // NOVA PAGINA

      @  nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow

      ++nPagina

      nLinha  := 1.00
      nColuna := 18.00

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, ,  ;
         CLR_BLACK, , PAD_CENTER )

      nLinha  := 3.00

   ENDIF

   IF nLinha # 3.00

      nLinha  := nLinha += 1.00

   ENDIF
   // INCLUIDO EM: 24/09/2021 VALIDADE DA PROPOSTA. Leda pediu.
   IF .NOT. EMPTY( cValidade ) // Lucia ajudou a melhorar.

      nColuna := 4.88

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + OemToAnsi( "05. PRAZO DE VALIDADE" ),                             ;
         oFontSub2, , CLR_BLACK, , PAD_CENTER )

      nLinha  := nLinha += 0.60
      nColuna :=  9.60  // 9.70

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cValidade, oFont, , CLR_BLACK, , PAD_CENTER )

      nLinha  := nLinha += 1.00

   ENDIF

   nColuna := 12.90

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                         ;
      + OemToAnsi( "Sem mais,                                                                           " ), ;
      oFont, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.80
   nColuna :=  4.80 // 2.90

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, + cAssinaProp,          ;
      oFontBold, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.80
   nColuna :=   7.20 // 5.20

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                         ;
      + SUBST( WNOMEEMPRESA, 1, 20 ) + SPACE( 19 ),                          ;
      oFont, , CLR_BLACK, , PAD_CENTER )

   nLinha  := 27.00
   nColuna := 10.50

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
      + OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
      oFontMin, , CLR_GREEN, , PAD_CENTER )

   // Called from: PRINTER.prg => PAGEEND( 0 )  // 64 bits MEMORIA
   ENDPAGE

   ENDPRINT

   IF DeOndePartiu = "COMPREVIEWPDF"

      oDlgBtn:End()

      FWSavePreviewToPDF( oPrn, "LIMPEZA.PDF", .F. )

      PDF_SALVO_EM_ORCAMPDF()  // ESTA EM FUNCOES.PRG 23/11/2020 Joao

      HTMLVIEW( "C:\ORCAMPDF\LIMPEZA.PDF" )

   ENDIF

   oFont:End()
   oFontBold:End()
   oFontSubl:End()
   oFontMin:End()
   oFontSub2:End()
   oFontRua:End()

   oPen1:End()
   oPen2:End()
   oPen3:End()

   lFechaJan    := .F.
   lFechaWin    := .F.
   lLigaProduto := .F.

   OrdDestroy( "ORCATEMP" )

   lLigaProduto := .F.

RETURN NIL
Gracias, tks.

Regards, saludos.]]>

Code: Select all | Expand

// IMPRESSAO DOS PRODUTOS DA LIMPEZA DE JARDIM
FUNCTION IMPRIMIR_ESCOPOS_LIMP( DeOndePartiu, oDlgBtn )

   LOCAL oPrn, nMargin, nWidth, nColWidth, nRow, nCol, oImage
   LOCAL XDATALISTA, cAlias, cMemoria
   LOCAL oFont, oFontLogo, oFontDivi, oFontList, oFontCurs, oPen1, oPen2, ;
      oPen3, oFontSubl, ResLinha, ResColuna, cProposta, nLinha, nColuna, ;
      oFontBold, nTotalParc := 0.00, nTotalGeral := 0.00, nTotalProdu
   LOCAL nPulaLinha, oFontMin, oFontSub2, nPagina, oFontRua, nItem
   LOCAL cSublin, cImpSub, cFile // := "C:\ORCAMPDF\CHAMADO.PDF"

   PRIVATE WE1, WE2, WE3, LARGEXTEN2
   PUBLIC nValorVenda

   STOR SPAC( 70 ) TO WE1, WE2, WE3

   cFile := "C:\ORCAMPDF\" + "ORCAM" + ALLTRIM( nProposta ) + ".PDF"

   XDATALISTA := "São Paulo" + ", " + LTRIM( STR( DAY( DATE() ) ) )  + ;
                 " de "             + OemToAnsi( CMONTH( DATE() ) )  + ;
                 " de "             + LTRIM( STR( YEAR( DATE() ) ) ) + "."

   HB_GCALL( .F. ) // PARA LIMPAR A MEMORIA

   LCHDIR( cDirPleno )
   SET DEFAULT TO

   aPrn := GetPrinters()  // 02/08/2017 Teste para ver se avisa erro.

   IF Empty( aPrn ) // Empty( oPrn:hDC )
      MsgStop( "Nenhuma Impressora Encontrada", "Nenhuma Impressora Encontrada" )
      RETURN NIL
   ENDIF

   PRINTER oPrn PREVIEW MODAL // PARA TESTAR A IMPRESSORA ANTES DE IMPRIMIR

   IF EMPTY( oPrn:hDC ) // MODIFICADO EM: 05/05/2015 - Quebrou na Gilmaria.
      MsgInfo( "ALGUMA COISA OCORREU DE ERRADO COM A IMPRESSORA.", "LIGUE A IMPRESSORA." )
      oPrn:End()
      RETURN( .F. )
   ENDIF

   oPrn:End()

   IF .NOT. NETERR()

      SELECT( DBRECOMPOS )

   ELSE

      MsgInfo( "ERRO DE REDE. Verifique!", "Confirma " )

      LIBERA_TUDO()

      RETURN NIL

   ENDIF

   cProposta := nProposta  // PARA O INDICE TEMPORARIO TEM QUE SER ASSIM.

   INDEX ON PROPOCOD TAG 04 TO ORCATEMP FOR ( .NOT. EOF() ) .AND. ;
      ( DBRECOMPOS )->PROPOCOD >= cProposta                 .AND. ;
      ( DBRECOMPOS )->PROPOCOD <= cProposta MEMORY // TEMPORARY

   GO TOP

   IF EOF()

      MsgStop( OemToAnsi( "Nenhuma Proposta Localizada Para ImpressÆo" ), ;
               OemToAnsi( "Nenhuma Proposta Localizada Para ImpressÆo" ) )

      RETURN NIL

   ENDIF

   cAlias := ALIAS()

   oImage := ".\LOGO.jpg"  // tem que estar na pasta do plenoind

   IF DeOndePartiu = "DIRETONAIMP"         // DIRETO NA IMPRESSORA

      PRINT oPrn NAME "LIMPEZA_JARDIM"     // DIRETO NA IMP.

   ELSEIF DeOndePartiu = "COMPREVIEWFIVE"  // COM PREVIEW(Visualizacao)

      PRINT oPrn NAME "LIMPEZA_JARDIM" PREVIEW MODAL

   ELSEIF DeOndePartiu = "COMPREVIEWPDF"   // GERAR O ARQUIVO PDF.

      PRINT oPrn PREVIEW

   ENDIF

   DEFINE FONT oFontRua  NAME "Courier New" SIZE 0, - 10                OF oPrn
   DEFINE FONT oFontMin  NAME "Courier New" SIZE 0, - 10 BOLD           OF oPrn
   DEFINE FONT oFont     NAME "Courier New" SIZE 0, - 12                OF oPrn
   DEFINE FONT oFontBold NAME "Courier New" SIZE 0, - 12 BOLD           OF oPrn
   DEFINE FONT oFontSubl NAME "Courier New" SIZE 0, - 12 BOLD UnderLine OF oPrn
   DEFINE FONT oFontSub2 NAME "Courier New" SIZE 0, - 12 BOLD UnderLine OF oPrn

   //-> Caneta do Preview
   DEFINE PEN oPen1 WIDTH 4 COLOR CLR_BROWN OF oPrn
   DEFINE PEN oPen2 WIDTH 2 COLOR CLR_BROWN OF oPrn
   DEFINE PEN oPen3 WIDTH 5 COLOR CLR_BLACK OF oPrn
 
   oPrn:SetPage( 9 )   //-> A4 //9
   oPrn:SetPortrait()  //-> Vertical(Retrato)

   //- Como Imprimir em Centimetros sem errar e em qualquer Impressora
   ResLinha  := oPrn:nLogPixely()/2.54
   ResColuna := oPrn:nLogPixelx()/2.54

   nMargin   := Int( 0.1 * oPrn:nHorzRes() )
   nWidth    := 8 * nMargin
   nColWidth := Int( ( nWidth - nMargin ) / 2 )
   nPagina   := 1

   PAGE

   nRow      :=   1.50  // Linha
   nCol      := 650.00  // Coluna do Logo.jpg

   @  nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow

   nLinha  := 1.00
   nColuna := 18.00

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                        ;
      OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, ,    ;
      CLR_BLACK, , PAD_CENTER )

   nLinha  := 3.00  // era 2.50

   IF LEN( ALLTRIM( nProposta ) ) = 1
      nColuna := 4.35
   ELSEIF LEN( ALLTRIM( nProposta ) ) = 2
      nColuna := 4.45
   ELSEIF LEN( ALLTRIM( nProposta ) ) = 3
      nColuna := 4.55
   ELSEIF LEN( ALLTRIM( nProposta ) ) = 4 // OK
      nColuna := 4.65
   ELSEIF LEN( ALLTRIM( nProposta ) ) = 5 // OK
      nColuna := 4.75
   ELSEIF LEN( ALLTRIM( nProposta ) ) = 6 // OK
      nColuna := 4.85   // 5.00 -.15
   ELSEIF LEN( ALLTRIM( nProposta ) ) = 7 // OK
      nColuna := 4.95
   ELSEIF LEN( ALLTRIM( nProposta ) ) = 8 // OK
      nColuna := 5.05
   ELSEIF LEN( ALLTRIM( nProposta ) ) = 9 // OK
      nColuna := 5.15
   ELSEIF LEN( ALLTRIM( nProposta ) ) = 10 // OK
      nColuna := 5.25
   ELSE
      nColuna := 5.35
   ENDIF

   oPrn:Say( nLinha * ResLinha,  nColuna * ResColuna,                    ;
      "Orçamento Nº.: " + ALLTRIM( nProposta ), oFont, ,                 ;
      CLR_BLACK, , PAD_CENTER )

   oPrn:cmSay( nLinha, 19.00, "" + XDATALISTA, oFontRua, , CLR_BLACK, , PAD_RIGHT )

   nLinha  := nLinha += 0.80

   IF LEN( ALLTRIM( STR( nClienCod ) ) ) = 1
      nColuna := 7.48    // 7.50
   ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 2
      nColuna := 7.58   // 7.60
   ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 3
      nColuna := 7.68  // 7.70
   ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 4 // OK
      nColuna := 7.78   // 7.80
   ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 5
      nColuna := 7.83   // 7.85
   ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 6
      nColuna := 7.93  // 7.95
   ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 7
      nColuna := 8.03  // 8.05
   ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 8
      nColuna := 8.13  // 8.15
   ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 9
      nColuna := 8.23  // 8.25
   ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 10
      nColuna := 8.33  // 8.35
   ENDIF

   oPrn:Say( nLinha * ResLinha,  nColuna * ResColuna,                    ;
      + "CÓD.: " + ALLTRIM( STR( nClienCod ) ) + " - " + ClienPropo,     ;
      oFontRua, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.50
   nColuna :=  6.40 // 6.55

   oPrn:Say( nLinha * ResLinha,  nColuna * ResColuna,                    ;
      + EnderPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.50
   nColuna :=  5.15  // 5.30

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                     ;
      "BAIRRO: " + BairrPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )

   nColuna := nColuna += 6.50  // 5.05

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                     ;
      "CIDADE: " + CidadPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )

   nColuna := nColuna +=   4.50

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                     ;
      "UF: " + UFdaPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.60
   nColuna :=  2.85   // 2.95

   oPrn:Say(  nLinha * ResLinha, nColuna * ResColuna,                    ;
      "Att.: ", oFontRua, , CLR_BLACK, , PAD_CENTER )

   nColuna := 7.10

   oPrn:Say(  nLinha * ResLinha, nColuna * ResColuna,                    ;
      + cContatoCli, oFontRua, , CLR_BLACK, , PAD_CENTER )

   cOrcamento  := "REF.: " // + cTPSerNome  // NOME DO SERVICO

   nLinha := nLinha += 1.00
   nColuna :=  2.95 // "REF.:"   // 3.10

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                     ;
      + cOrcamento, oFontBold, , CLR_BLACK, , PAD_CENTER )

   nColuna :=  7.70  // 7.70

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                     ;
      + cTPSerNome, oFontBold, , CLR_BLACK, , PAD_CENTER )

   cSublin := "REF.: " + ALLTRIM( cTPSerNome ) // TIRAR BRANCOS P/ENCAIXAR
   cImpSub := LEN( cSublin ) + 1.2              // PARA SUBLINHADO.

   nLinha  := nLinha += 0.05 // Tiro os Brancos e Encaixo embaixo o SUBLINHADO
   nColuna := 2.20  // - 2.35 -.15

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
      REPLICATE( "_", cImpSub ), oFontBold , , CLR_BLACK, , PAD_LEFT )

   cConforme1 := "Conforme solicitação segue proposta abaixo:                                            "

   nLinha  := nLinha += 0.80
   nColuna := 13.20  // -.15

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
      + cConforme1, oFont, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.80
   nColuna :=  5.35

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
      + "01. ESCOPO DOS TRABALHOS:", oFontSub2, , CLR_BLACK, , PAD_CENTER )

   // PODAS AQUI
   nLinha  := nLinha += 0.60
   nColuna := 10.05  // 10.15 -.10

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
      + cPodas1, oFont, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.50
   nColuna := 10.05

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
      + cPodas2, oFont, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.50
   nColuna := 10.05

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
      + cPodas3, oFont, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.50
   nColuna := 10.05

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
      + cPodas4, oFont, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.50
   nColuna := 10.05

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
      + cPodas5, oFont, , CLR_BLACK, , PAD_CENTER )

   IF .NOT. EMPTY( cPodas6 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas6, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas7 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas7, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas8 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas8, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas9 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas9, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas10 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas10, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas11 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas11, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas12 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas12, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas13 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas13, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas14 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas14, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas15 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas15, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas16 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas16, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas17 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas17, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas18 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas18, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas19 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas19, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas20 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas20, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas21 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas21, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas22 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas22, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas23 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas23, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas24 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas24, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas25 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas25, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas26 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas26, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas27 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas27, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas28 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas28, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas29 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas29, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas30 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas30, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cPodas31 )

      nLinha  := nLinha += 0.50
      nColuna := 10.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
         + cPodas31, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF nLinha >= 23.00 // PARA AS OBSERVACOES

      nLinha  := 27.00
      nColuna := 10.50

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
         + OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
         oFontMin, , CLR_GREEN, , PAD_CENTER )

      ENDPAGE

      PAGE  // NOVA PAGINA

      // oPrn:SayImage( nLinLogo, nColLogo, "LOGO.JPG", nLargLogo, nAltLogo )
      @  nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow

      ++nPagina

      nLinha  := 1.00
      nColuna := 18.00 // 17.50

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                        ;
         OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, ,    ;
         CLR_BLACK, , PAD_CENTER )

      nLinha  := 3.00  // 23 Linhas

   ELSE

      nLinha := nLinha += 0.70 // MUDEI EM: 23/09/2021 - Joao.

   ENDIF

   nTotalProdu := 0.00

   GO TOP

   WHILE( .NOT. EOF() )

      SYSREFRESH()

      nTotalProdu := nTotalProdu + ( cAlias )->VRVENDA *  ;
                                   ( cAlias )->PRODUQTDE

      SKIP

   ENDDO

   IF( nTotalProdu ) > 0.00
      lLigaProduto := .T.
   ENDIF

   GO TOP

   IF lLigaProduto // := .F.   // STATIC NO INICIO DO MODULO

      IF lImpFonte12 // := .T. // COURIER NEW 12 - 07/10/2021 Implementei.

         nColuna :=  2.10  // 3.20

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "C¢digo:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna :=  5.05 // 5.84

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Produto:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna := 11.90

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Un:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna := 13.20  // 13.10

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Qtd:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna := 15.30

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Valor Un:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna := 18.70  // 18.30

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Total:" ), oFont,, CLR_BLACK,, PAD_CENTER )

      ELSE // COURIR NEW 10 - 07/10/2021 - Joao

         nColuna :=  3.25

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "C¢digo:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna :=  5.84 // 5.84

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Produto:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna := 11.75

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Un:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna := 13.20

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Qtd:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna := 15.30

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Valor Un:" ), oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna := 18.70

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + OemToAnsi( "Total:" ), oFont,, CLR_BLACK,, PAD_CENTER )

      ENDIF

      nLinha  := nLinha += 0.60  // LINHA DOS PRODUTOS

   ENDIF

   GO TOP

   WHILE( .NOT. EOF() )

      SYSREFRESH()

      IF ( cAlias )->PRODUNOME = SPACE( 30 )  // NAO MOSTRA O PRODUTO

         SKIP

         LOOP

      ENDIF

      IF lImpFonte12 // := .T. // COURIER NEW 12

         nColuna :=   2.50 // 3.35

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
                   + ( cAlias )->PRODUCOD, oFont,, CLR_BLACK,, PAD_CENTER )

         nColuna :=  7.80 // 8.00 - Estava oFontRua

         // ESCOPO DOS TRABALHOS AQUI. PRODUTOS DA LIMPEZA
         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + ( cAlias )->PRODUNOME, oFont, , CLR_BLACK, , PAD_CENTER )

         nColuna :=  13.00  // 12.50

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
             + ( cAlias )->PRODUUNID, oFont, , CLR_BLACK, , PAD_CENTER )

         nColuna :=  13.70

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + ALLTRIM( TRANS( ( cAlias )->PRODUQTDE, "@ 99999" ) ),             ;
            oFont,, CLR_BLACK,, PAD_RIGHT  )

         nColuna := 16.40  // 16.00

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + ALLTRIM( TRANS( ( cAlias )->VRVENDA, "@E 99,999.99" ) ),          ;
            oFont,, CLR_BLACK,, PAD_RIGHT  )

         nColuna := 19.50   // 19.05

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + ALLTRIM( TRANS( ( cAlias )->VRTOTAL, "@E 9,999,999.99" ) ),       ;
            oFont,, CLR_BLACK,, PAD_RIGHT  )

      ELSE // COURIER NEW 10

         nColuna :=   3.40 // 3.35

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
                   + ( cAlias )->PRODUCOD, oFontRua,, CLR_BLACK,, PAD_CENTER )

         nColuna :=  8.00

         // ESCOPO DOS TRABALHOS AQUI. PRODUTOS DA LIMPEZA
         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + ( cAlias )->PRODUNOME, oFontRua, , CLR_BLACK, , PAD_CENTER )

         nColuna :=  12.50  // 12.50

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
             + ( cAlias )->PRODUUNID, oFontRua, , CLR_BLACK, , PAD_CENTER )

         nColuna :=  13.70

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + ALLTRIM( TRANS( ( cAlias )->PRODUQTDE, "@ 99999" ) ),             ;
            oFontRua,, CLR_BLACK,, PAD_RIGHT  )

         nColuna := 16.30

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + ALLTRIM( TRANS( ( cAlias )->VRVENDA, "@E 99,999.99" ) ),          ;
            oFontRua,, CLR_BLACK,, PAD_RIGHT  )

         nColuna := 19.50

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
            + ALLTRIM( TRANS( ( cAlias )->VRTOTAL, "@E 9,999,999.99" ) ),       ;
            oFontRua,, CLR_BLACK,, PAD_RIGHT  )

      ENDIF // FIM DA COURIER NEW 10

      SKIP

      IF nLinha >= 23.00 // PARA AS OBSERVACOES/ ACHO QUE ENTRARA NO WHILE DOS PRODUTOS

         nLinha  := 27.00
         nColuna := 10.50

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
            + OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
            oFontMin, , CLR_GREEN, , PAD_CENTER )

         ENDPAGE

         PAGE  // NOVA PAGINA

         // CONFIGURACAO ESTA EM: AMBLOGO.DBF
         // oPrn:SayImage( nLinLogo, nColLogo, "LOGO.JPG", nLargLogo, nAltLogo )
         @  nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow

         ++nPagina

         nLinha  := 1.00
         nColuna := 18.00   // 18.00

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                     ;
            OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, , ;
            CLR_BLACK, , PAD_CENTER )

         nLinha  := 3.00

      ENDIF

      nLinha  := nLinha += 0.50

   ENDDO

   cProdutos := "Produtos:    "

   IF lLigaProduto // := .F.   // SE TIVER PRODUTOS

      IF nLinha # 3.00

         nLinha  := nLinha += 0.40

      ENDIF

      nColuna := 4.00

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
         + cProdutos, oFont, , CLR_BLACK, , PAD_CENTER )

      nColuna := 4.70   // 4.60

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
         REPLICATE( ".", 046 ), oFont, , CLR_BLACK, , PAD_LEFT )

      nColuna := 15.56

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
         + " ", oFont, , CLR_BLACK, , PAD_CENTER )

      nColuna := 19.50

      IF lImpFonte12 // := .T. // COURIER NEW 12 - 07/10/2021 Implementei.

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
            + ALLTRIM( TRANS( nTotalProdu, "@E 9,999,999.99" ) ),            ;
            oFont, , CLR_BLACK, , PAD_RIGHT  )

      ELSE

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
            + ALLTRIM( TRANS( nTotalProdu, "@E 9,999,999.99" ) ),            ;
            oFontRua, , CLR_BLACK, , PAD_RIGHT  )

      ENDIF

   ENDIF

   cMaoObra := "Mão de Obra: "

   IF( nVrUnSer ) > 0.00

      nLinha  := nLinha += 0.50
      nColuna := 4.00

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cMaoObra, oFont, , CLR_BLACK, , PAD_CENTER )

      nColuna := 5.45

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         REPLICATE( ".", 043 ), oFont, , CLR_BLACK, , PAD_LEFT )

      nColuna := 15.56

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + " ", oFont, , CLR_BLACK, , PAD_CENTER )

      nColuna := 19.50

      IF lImpFonte12 // := .T. // COURIER NEW 12 - 07/10/2021 Implementei.

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
            + ALLTRIM( TRANS( nVrUnSer, "@E 9,999,999.99" ) ),               ;
            oFont, , CLR_BLACK, , PAD_RIGHT  )

      ELSE

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
            + ALLTRIM( TRANS( nVrUnSer, "@E 9,999,999.99" ) ),               ;
            oFontRua, , CLR_BLACK, , PAD_RIGHT  )

      ENDIF

   ENDIF

   IF nDesconto > 0.00

      nLinha  := nLinha += 0.50
      nColuna := 3.60

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + OemToAnsi( "Desconto: " ), oFont, , CLR_BLACK, , PAD_CENTER )

      nColuna := 4.65

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         REPLICATE( ".", 046 ), oFont, , CLR_BLACK, , PAD_LEFT )

      nColuna := 19.50

      IF lImpFonte12 // := .T. // COURIER NEW 12 - 07/10/2021 Implementei.

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
            + ALLTRIM( TRANS( nDesconto, "@E 999,999.99" ) ),                ;
            oFont, , CLR_BLACK, , PAD_RIGHT  )

      ELSE

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
            + ALLTRIM( TRANS( nDesconto, "@E 999,999.99" ) ),                ;
            oFontRua, , CLR_BLACK, , PAD_RIGHT  )

      ENDIF

      nValorTotal := 0.00
      nDesconto   := 0.00  // INCLUIDO EM: 04/09/2019
      nTotalNfe   := 0.00

      GO TOP

      WHILE( .NOT. EOF() )

         SYSREFRESH()

         nDesconto := nDesconto + VRDESCONTO

         SKIP

      ENDDO

      GO TOP

      WHILE( .NOT. EOF() )

         SYSREFRESH()

         nTotalNfe := nTotalNfe + ( cAlias )->VRVENDA   * ;
                                  ( cAlias )->PRODUQTDE + ;
                                  ( cAlias )->VRUNSER

         SKIP

      ENDDO

      nValorTotal := nTotalNfe - nDesconto   // - nDesconto // somente se a Fernanda disser que sim

   ENDIF

   nLinha  := nLinha += 1.00
   nColuna := 3.45

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                         ;
      + OemToAnsi( "02. TOTAL:" ), oFontSub2, , CLR_BLACK, , PAD_CENTER )

   nVal   := nValorTotal   // lDin

   EXTENSO( nVal, 50, WE1, WE2, WE3 )

   nLinha  := nLinha += 0.70
   nColuna := 3.60  // 3.75

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                         ;
      + OemToAnsi( "R$ " ), oFont, , CLR_BLACK, , PAD_CENTER )

   nColuna := nColuna += 0.60

   IF WE2 # SPACE( 50 )

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + ALLTRIM( TRANS( nValorTotal, "@E 999,999,999.99" ) ) + " (" +     ;
         ALLTRIM( WE1 ), oFont, , CLR_BLACK, , PAD_LEFT )

      IF WE2 # SPACE( 50 )

         nLinha  := nLinha  += 0.50
         nColuna := nColuna += 2.60

         IF WE3 = SPACE( 50 )

            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
               + ALLTRIM( WE2 ) + ").", oFont, , CLR_BLACK, , PAD_LEFT )

         ELSE

            oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                ;
               + ALLTRIM( WE2 ), oFont, , CLR_BLACK, , PAD_LEFT )

         ENDIF

      ENDIF

      IF WE3 # SPACE( 50 )

         nLinha  := nLinha  += 0.50
         nColuna := nColuna += 2.60

         oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                   ;
            + ALLTRIM( WE3 ) + ").", oFont, , CLR_BLACK, , PAD_LEFT )

      ENDIF

   ELSE // - < QUE 50 CARACTERES.

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + ALLTRIM( TRANS( nValorTotal, "@E 999,999,999.99" ) ) + " (" +     ;
         ALLTRIM( WE1 ) + ").", oFont, , CLR_BLACK, , PAD_LEFT )

   ENDIF

   IF nLinha >= 23.00 // PARA AS OBSERVACOES/ ACHO QUE ENTRARA NO WHILE DOS PRODUTOS

      nLinha  := 27.00
      nColuna := 10.50

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
         + OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
         oFontMin, , CLR_GREEN, , PAD_CENTER )

      ENDPAGE

      PAGE  // NOVA PAGINA

      // CONFIGURACAO ESTA EM: AMBLOGO.DBF
      // oPrn:SayImage( nLinLogo, nColLogo, "LOGO.JPG", nLargLogo, nAltLogo )
      @  nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow

      ++nPagina

      nLinha  := 1.00
      nColuna := 18.00   // 18.00

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, ,  ;
         CLR_BLACK, , PAD_CENTER )

      nLinha  := 3.00

   ENDIF

   IF nLinha # 3.00

      nLinha  := nLinha += 0.80

   ENDIF

   nColuna := 5.61

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                         ;
      + OemToAnsi( "03. CONDIیES DE PAGAMENTO:" ),                          ;
      oFontSub2, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.60
   nColuna :=  3.20

   // cCondPagto pode alterar no dialogo, Lucia pediu edicao - OK
   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                         ;
      + cCondPagto, oFont, , CLR_BLACK, , PAD_LEFT )

   // OBSERVACOES AQUI - DEPENDENDO DO TAMANHO DO TEXTO FICA NA MESMA PAG. Joao
   IF .NOT. EMPTY( cObserva1 )

      nLinha  := nLinha += 0.80
      nColuna :=  4.075 // 4.15

      // ter opcao de alterar
      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + OemToAnsi( "04. OBSERVAۂO:" ),                                   ;
         oFontSub2, , CLR_BLACK, , PAD_CENTER )

      nLinha  := nLinha += 0.60
      nColuna := 10.95 // 11.05  -.10

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva1, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva2 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95 //10.55

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva2, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva3 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva3, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva4 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva4, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva5 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva5, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva6 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva6, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva7 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva7, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva8 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva8, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva9 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva9, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva10 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva10, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva11 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva11, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva12 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva12, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva13 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva13, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF nLinha >= 23.00 // PARA AS OBSERVACOES

      nLinha  := 27.00
      nColuna := 10.50

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
         + OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
         oFontMin, , CLR_GREEN, , PAD_CENTER )

      ENDPAGE

      PAGE  // NOVA PAGINA

      @  nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow

      ++nPagina

      nLinha  := 1.00
      nColuna := 18.00   // 18.00

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, ,  ;
         CLR_BLACK, , PAD_CENTER )

      nLinha  := 3.00

   ENDIF

   IF nLinha # 3.00

      nLinha  := nLinha += 0.50

   ENDIF

   IF .NOT. EMPTY( cObserva14 )

      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva14, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva15 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva15, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF .NOT. EMPTY( cObserva16 )

      nLinha  := nLinha += 0.50
      nColuna := 10.95   // 11.05

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cObserva16, oFont, , CLR_BLACK, , PAD_CENTER )

   ENDIF

   IF nLinha >= 23.00 // PARA AS OBSERVACOES/ ACHO QUE ENTRARA NO WHILE DOS PRODUTOS

      nLinha  := 27.00
      nColuna := 10.50

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
         + OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
         oFontMin, , CLR_GREEN, , PAD_CENTER )

      ENDPAGE

      PAGE  // NOVA PAGINA

      @  nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow

      ++nPagina

      nLinha  := 1.00
      nColuna := 18.00

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, ,  ;
         CLR_BLACK, , PAD_CENTER )

      nLinha  := 3.00

   ENDIF

   IF nLinha # 3.00

      nLinha  := nLinha += 1.00

   ENDIF
   // INCLUIDO EM: 24/09/2021 VALIDADE DA PROPOSTA. Leda pediu.
   IF .NOT. EMPTY( cValidade ) // Lucia ajudou a melhorar.

      nColuna := 4.88

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + OemToAnsi( "05. PRAZO DE VALIDADE" ),                             ;
         oFontSub2, , CLR_BLACK, , PAD_CENTER )

      nLinha  := nLinha += 0.60
      nColuna :=  9.60  // 9.70

      oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                      ;
         + cValidade, oFont, , CLR_BLACK, , PAD_CENTER )

      nLinha  := nLinha += 1.00

   ENDIF

   nColuna := 12.90

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                         ;
      + OemToAnsi( "Sem mais,                                                                           " ), ;
      oFont, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.80
   nColuna :=  4.80 // 2.90

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, + cAssinaProp,          ;
      oFontBold, , CLR_BLACK, , PAD_CENTER )

   nLinha  := nLinha += 0.80
   nColuna :=   7.20 // 5.20

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                         ;
      + SUBST( WNOMEEMPRESA, 1, 20 ) + SPACE( 19 ),                          ;
      oFont, , CLR_BLACK, , PAD_CENTER )

   nLinha  := 27.00
   nColuna := 10.50

   oPrn:Say( nLinha * ResLinha, nColuna * ResColuna,                  ;
      + OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
      oFontMin, , CLR_GREEN, , PAD_CENTER )

   // Called from: PRINTER.prg => PAGEEND( 0 )  // 64 bits MEMORIA
   ENDPAGE

   ENDPRINT

   IF DeOndePartiu = "COMPREVIEWPDF"

      oDlgBtn:End()

      FWSavePreviewToPDF( oPrn, "LIMPEZA.PDF", .F. )

      PDF_SALVO_EM_ORCAMPDF()  // ESTA EM FUNCOES.PRG 23/11/2020 Joao

      HTMLVIEW( "C:\ORCAMPDF\LIMPEZA.PDF" )

   ENDIF

   oFont:End()
   oFontBold:End()
   oFontSubl:End()
   oFontMin:End()
   oFontSub2:End()
   oFontRua:End()

   oPen1:End()
   oPen2:End()
   oPen3:End()

   lFechaJan    := .F.
   lFechaWin    := .F.
   lLigaProduto := .F.

   OrdDestroy( "ORCATEMP" )

   lLigaProduto := .F.

RETURN NIL
Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: ENDPAGE( 0 ) :: Reply by karinha]]> 2025-04-11T09:52:31-06:00 2025-04-11T09:52:31-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45616&p=278943#p278943
gracias, tks.

Regards, saludos.]]>

gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: ENDPAGE( 0 ) :: Reply by cmsoft]]> 2025-04-11T09:59:56-06:00 2025-04-11T09:59:56-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45616&p=278944#p278944 IMP_TIPO_IMPRESSAO_LIMPEZA( 1227 ) esa linea que hace?
Y esta otra? PEGA_DADOS_LIMP_IMPRESSAO( 2851 )
Porque esas funciones son las que te estan dando el error y en el prg que pasaste no se llaman en ningun lado]]>
IMP_TIPO_IMPRESSAO_LIMPEZA( 1227 ) esa linea que hace?
Y esta otra? PEGA_DADOS_LIMP_IMPRESSAO( 2851 )
Porque esas funciones son las que te estan dando el error y en el prg que pasaste no se llaman en ningun lado]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: ENDPAGE( 0 ) :: Reply by karinha]]> 2025-04-11T11:08:48-06:00 2025-04-11T11:08:48-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45616&p=278946#p278946
cmsoft wrote: Fri Apr 11, 2025 3:59 pm A mi mas me da idea de que es, como bien dice Cristobal, un ENDPRINT que no tiene el PRINT
IMP_TIPO_IMPRESSAO_LIMPEZA( 1227 ) esa linea que hace?
Y esta otra? PEGA_DADOS_LIMP_IMPRESSAO( 2851 )
Porque esas funciones son las que te estan dando el error y en el prg que pasaste no se llaman en ningun lado
IMP_TIPO_IMPRESSAO_LIMPEZA (1227) ¿qué es esta línea? -> Donde eliges el TIPO DE IMPRESIÓN.
¿Y este otro? PEGA_DADOS_LIMP_IMPRESSAO( 2851 ) -> OBTENER DATOS DEL CLIENTE.

Mira que publiqué el INFORME COMPLETO arriba, por favor échale un vistazo, puede que me haya perdido algo que no puedo ver, ¿de acuerdo?

Gracias, tks.

Regards, saludos.]]>
cmsoft wrote: Fri Apr 11, 2025 3:59 pm A mi mas me da idea de que es, como bien dice Cristobal, un ENDPRINT que no tiene el PRINT
IMP_TIPO_IMPRESSAO_LIMPEZA( 1227 ) esa linea que hace?
Y esta otra? PEGA_DADOS_LIMP_IMPRESSAO( 2851 )
Porque esas funciones son las que te estan dando el error y en el prg que pasaste no se llaman en ningun lado
IMP_TIPO_IMPRESSAO_LIMPEZA (1227) ¿qué es esta línea? -> Donde eliges el TIPO DE IMPRESIÓN.
¿Y este otro? PEGA_DADOS_LIMP_IMPRESSAO( 2851 ) -> OBTENER DATOS DEL CLIENTE.

Mira que publiqué el INFORME COMPLETO arriba, por favor échale un vistazo, puede que me haya perdido algo que no puedo ver, ¿de acuerdo?

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Consulta sobre XBrowser :: Reply by Enrrique Vertiz]]> 2025-04-12T04:36:20-06:00 2025-04-12T04:36:20-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45576&p=278956#p278956
No se con cuantos registros los han probado, tengo algunos casos con 500,000 registros para exportar, pero con este ejemplo, cerca de los 140,000 sale este error: Error Excel.Application:ACTIVESHEET/3 DISP_E_MEMBERNOTFOUND: PASTE
Uso el ultimo FW con Bcc77 y el ultimo xHb, la maquina tiene 32gb de RAM, alguna idea ??

Aqui el error completo

pplication
===========
Path and name: D:\Fwh\Fwh2501\samples\oscarxlsx.exe (32 bits)
Size: 4,240,896 bytes
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)
FiveWin version: FWH 25.01
C compiler version: Borland/Embarcadero C++ 7.7 (32-bit)
Windows 11 64 Bits, version: 6.2, Build 9200

Time from start: 0 hours 2 mins 0 secs
Error occurred at: 04/12/25, 04:45:09
Error description: Error Excel.Application:ACTIVESHEET/3 DISP_E_MEMBERNOTFOUND: PASTE
Args:

Stack Calls
===========
Called from: => TOLEAUTO:PASTE( 0 )
Called from: .\source\classes\xbrowse.prg => TXBROWSE:TOEXCEL( 11119 )
Called from: oscarxlsx.prg => EXPORT2EXCEL( 89 )
Called from: oscarxlsx.prg => (b)MAIN( 57 )
Called from: .\source\function\msgmeter.prg => (b)MSGMETER( 28 )
Called from: .\source\classes\dialog.prg => (b)TDIALOG:TDIALOG( 101 )
Called from: => TDIALOG:DISPLAY( 0 )
Called from: .\source\classes\dialog.prg => TDIALOG:HANDLEEVENT( 1234 )
Called from: => DIALOGBOXINDIRECT( 0 )
Called from: .\source\classes\dialog.prg => TDIALOG:ACTIVATE( 325 )
Called from: .\source\function\msgmeter.prg => MSGMETER( 31 )
Called from: oscarxlsx.prg => (b)MAIN( 57 )
Called from: .\source\classes\btnbmp.prg => TBTNBMP:CLICK( 816 )
Called from: .\source\classes\btnbmp.prg => TBTNBMP:LBUTTONUP( 1103 )
Called from: .\source\classes\control.prg => TCONTROL:HANDLEEVENT( 1867 )
Called from: .\source\classes\btnbmp.prg => TBTNBMP:HANDLEEVENT( 2145 )
Called from: .\source\classes\window.prg => _FWH( 1008 )
Called from: => WINRUN( 0 )
Called from: .\source\classes\window.prg => TWINDOW:ACTIVATE( 1137 )
Called from: oscarxlsx.prg => MAIN( 78 )]]>

No se con cuantos registros los han probado, tengo algunos casos con 500,000 registros para exportar, pero con este ejemplo, cerca de los 140,000 sale este error: Error Excel.Application:ACTIVESHEET/3 DISP_E_MEMBERNOTFOUND: PASTE
Uso el ultimo FW con Bcc77 y el ultimo xHb, la maquina tiene 32gb de RAM, alguna idea ??

Aqui el error completo

pplication
===========
Path and name: D:\Fwh\Fwh2501\samples\oscarxlsx.exe (32 bits)
Size: 4,240,896 bytes
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)
FiveWin version: FWH 25.01
C compiler version: Borland/Embarcadero C++ 7.7 (32-bit)
Windows 11 64 Bits, version: 6.2, Build 9200

Time from start: 0 hours 2 mins 0 secs
Error occurred at: 04/12/25, 04:45:09
Error description: Error Excel.Application:ACTIVESHEET/3 DISP_E_MEMBERNOTFOUND: PASTE
Args:

Stack Calls
===========
Called from: => TOLEAUTO:PASTE( 0 )
Called from: .\source\classes\xbrowse.prg => TXBROWSE:TOEXCEL( 11119 )
Called from: oscarxlsx.prg => EXPORT2EXCEL( 89 )
Called from: oscarxlsx.prg => (b)MAIN( 57 )
Called from: .\source\function\msgmeter.prg => (b)MSGMETER( 28 )
Called from: .\source\classes\dialog.prg => (b)TDIALOG:TDIALOG( 101 )
Called from: => TDIALOG:DISPLAY( 0 )
Called from: .\source\classes\dialog.prg => TDIALOG:HANDLEEVENT( 1234 )
Called from: => DIALOGBOXINDIRECT( 0 )
Called from: .\source\classes\dialog.prg => TDIALOG:ACTIVATE( 325 )
Called from: .\source\function\msgmeter.prg => MSGMETER( 31 )
Called from: oscarxlsx.prg => (b)MAIN( 57 )
Called from: .\source\classes\btnbmp.prg => TBTNBMP:CLICK( 816 )
Called from: .\source\classes\btnbmp.prg => TBTNBMP:LBUTTONUP( 1103 )
Called from: .\source\classes\control.prg => TCONTROL:HANDLEEVENT( 1867 )
Called from: .\source\classes\btnbmp.prg => TBTNBMP:HANDLEEVENT( 2145 )
Called from: .\source\classes\window.prg => _FWH( 1008 )
Called from: => WINRUN( 0 )
Called from: .\source\classes\window.prg => TWINDOW:ACTIVATE( 1137 )
Called from: oscarxlsx.prg => MAIN( 78 )]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Petición para hacer compatible EasyReport con Harupdf :: Reply by Antonio Linares]]> 2025-04-10T16:29:23-06:00 2025-04-10T16:29:23-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45604&p=278938#p278938
Ahi lo que se puede hacer es añadir el método SetCopies( nCopies ) a la Clase FWPDF y ver como continúa

Se puede implementar de momento como VIRTUAL]]>

Ahi lo que se puede hacer es añadir el método SetCopies( nCopies ) a la Clase FWPDF y ver como continúa

Se puede implementar de momento como VIRTUAL]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Petición para hacer compatible EasyReport con Harupdf :: Reply by leandro]]> 2025-04-10T17:29:40-06:00 2025-04-10T17:29:40-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45604&p=278939#p278939
y nos puedes ayudar con eso... por que el tema de la modificación de las clases no se me da.
Se puede implementar de momento como VIRTUAL
Es mas, no tengo ni idea que te refieres con esto.

Si eres un poco mas especifico ayudo en lo que se pueda, desde mi conocimiento, al menos haciendo pruebas :oops:]]>

y nos puedes ayudar con eso... por que el tema de la modificación de las clases no se me da.
Se puede implementar de momento como VIRTUAL
Es mas, no tengo ni idea que te refieres con esto.

Si eres un poco mas especifico ayudo en lo que se pueda, desde mi conocimiento, al menos haciendo pruebas :oops:]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Petición para hacer compatible EasyReport con Harupdf :: Reply by Antonio Linares]]> 2025-04-10T21:49:45-06:00 2025-04-10T21:49:45-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45604&p=278940#p278940 ]]> ]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Petición para hacer compatible EasyReport con Harupdf :: Reply by leandro]]> 2025-04-11T10:40:20-06:00 2025-04-11T10:40:20-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45604&p=278945#p278945
Implementado, te envío librerias para xHarbour 64 y Borland ?
Si porfa. :D]]>
Implementado, te envío librerias para xHarbour 64 y Borland ?
Si porfa. :D]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Petición para hacer compatible EasyReport con Harupdf :: Reply by Antonio Linares]]> 2025-04-11T14:43:25-06:00 2025-04-11T14:43:25-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45604&p=278952#p278952 ]]> ]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Petición para hacer compatible EasyReport con Harupdf :: Reply by leandro]]> 2025-04-12T09:34:32-06:00 2025-04-12T09:34:32-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45604&p=278959#p278959

Code: Select all | Expand

Application
===========
   Path and name: C:\fwh64_2501\samples\leandro5.exe (64 bits)
   Size: 6,702,592 bytes
   Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250219)
   FiveWin  version: FWH 25.01
   C compiler version: LLVM/Clang C 5.0.2 (64-bit)
   Windows 8 64 Bits, version: 6.2, Build 9200 

   Time from start: 0 hours 0 mins 0 secs 
   Error occurred at: 04/12/25, 10:32:53
   Error description: Warning BASE/1004  Message not found: FWPDF:HDCOUT

Stack Calls
===========
   Called from: source\rtl\tobject.prg => FWPDF:ERROR( 0 )
   Called from: source\rtl\tobject.prg => FWPDF:MSGNOTFOUND( 0 )
   Called from: source\rtl\tobject.prg => FWPDF:HDCOUT( 0 )
   Called from: .\source\classes\esreport.prg => FW_EREPORT:SAY( 805 )
   Called from: .\source\classes\esreport.prg => FW_EREPORT:PRINTITEM( 951 )
   Called from: .\source\classes\esreport.prg => (b)FW_EREPORT:PRINTITEMLIST( 1332 )
   Called from:  => AEVAL( 0 )
   Called from: .\source\classes\esreport.prg => FW_EREPORT:PRINTITEMLIST( 1332 )
   Called from: .\source\classes\esreport.prg => FW_EREPORT:AREASTART2( 756 )
   Called from: .\source\classes\esreport.prg => FW_EREPORT:AREASTART( 639 )
   Called from: leandro5.prg => MAIN( 24 )

System
======
   Hardware memory: 32510 megs

   Free System resources: 90 %
        GDI    resources: 90 %
        User   resources: 90 %

   Windows total applications running: 1
      1 ,                                                                                                     

Variables in use
================
   Procedure     Type   Value
   ==========================
   FWPDF:ERROR
     Param   1:    C    "Message not found"
     Param   2:    C    "FWPDF"
     Param   3:    C    "HDCOUT"
     Param   4:    N    1004
     Local   1:    U    
     Local   2:    O    Class: FWPDF
     Local   3:    N    13
   FWPDF:MSGNOTFOUND
     Param   1:    C    "HDCOUT"
     Local   1:    O    Class: FWPDF
   FWPDF:HDCOUT
   FW_EREPORT:SAY
     Param   1:    N    36.8504
     Param   2:    N    82.2047
     Param   3:    C    "Report with array"
     Param   4:    A    Len:    3
     Param   5:    N    155.9055
     Param   6:    N    10485760
     Param   7:    N    1
     Param   8:    N    0
     Local   1:    O    Class: FW_EREPORT
     Local   2:    U    
     Local   3:    A    Len:    3
   FW_EREPORT:PRINTITEM
     Param   1:    N    1
     Param   2:    N    101
     Param   3:    C    "Report with array"
     Param   4:    N    0
     Local   1:    L    .F.
     Local   2:    N    0
     Local   3:    O    Class: FW_EREPORT
     Local   4:    N    0
     Local   5:    A    Len:    3
     Local   6:    U    
     Local   7:    N    29
     Local   8:    U    
     Local   9:    N    13
     Local  10:    U    
     Local  11:    U    
     Local  12:    U    
     Local  13:    U    
     Local  14:    U    
     Local  15:    U    
     Local  16:    U    
     Local  17:    U    
     Local  18:    U    
     Local  19:    U    
     Local  20:    C    "Customer   "
     Local  21:    U    
     Local  22:    U    
     Local  23:    U    
     Local  24:    L    .F.
     Local  25:    C    "400"
     Local  26:    C    "TEXT|Customer   |101|1|1|1|3|9|55|7|8|1|2|1|0|0||0||||||||||||||0|0.20"
     Local  27:    O    Class: FWER_ITEM
     Local  28:    N    10
     Local  29:    N    10
     Local  30:    L    .F.
     Local  31:    N    1
   (b)FW_EREPORT:PRINTITEMLIST
     Param   1:    N    101
     Param   2:    N    1
   AEVAL
     Param   1:    A    Len:    2
     Param   2:    B    {|| ... }
   FW_EREPORT:PRINTITEMLIST
     Param   1:    N    1
     Param   2:    A    Len:    2
     Param   3:    A    Len:    2
     Local   1:    U    
     Local   2:    O    Class: FW_EREPORT
   FW_EREPORT:AREASTART2
     Param   1:    N    1
     Param   2:    L    .T.
     Param   3:    A    Len:    2
     Param   4:    A    Len:    2
     Param   5:    L    .F.
     Local   1:    O    Class: FW_EREPORT
     Local   2:    N    10
     Local   3:    N    10
     Local   4:    L    .F.
   FW_EREPORT:AREASTART
     Param   1:    N    1
     Param   2:    U    
     Param   3:    A    Len:    2
     Param   4:    A    Len:    2
     Param   5:    L    .F.
     Local   1:    O    Class: FW_EREPORT
     Local   2:    N    1
     Local   3:    N    1
     Local   4:    N    1
     Local   5:    N    0
     Local   6:    N    0
   MAIN
     Local   1:    O    Class: FW_EREPORT
     Local   2:    N    0
     Local   3:    N    0
     Local   4:    N    0
     Local   5:    N    0
     Local   6:    A    Len:  500

Linked RDDs
===========
   DBF
   DBFFPT
   DBFBLOB
   DBFCDX
   DBFNTX

DataBases in use
================

  1: => CUSTOMER                           RddName: DBFNTX
     ==============================
     RecNo    RecCount    BOF   EOF
          1          500      .F.   .F.

     Indexes in use                        TagName

     Relations in use

Classes in use:
===============
     1 ERROR
     2 HASHENTRY
     3 HBCLASS
     4 HBOBJECT
     5 TPRINTER
     6 FW_EREPORT
     7 TEXSTRUCT
     8 TFONT
     9 TWINDOW
    10 TDIALOG
    11 TBRUSH
    12 TCONTROL
    13 TSAY
    14 TBUTTON
    15 TREG32
    16 TRECT
    17 TPDF
    18 FWPDF
    19 FWER_ITEM

Memory Analysis
===============
      745 Static variables

   Dynamic memory consume:
      Actual  Value:          0 bytes
      Highest Value:          0 bytes

]]>

Code: Select all | Expand

Application
===========
   Path and name: C:\fwh64_2501\samples\leandro5.exe (64 bits)
   Size: 6,702,592 bytes
   Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250219)
   FiveWin  version: FWH 25.01
   C compiler version: LLVM/Clang C 5.0.2 (64-bit)
   Windows 8 64 Bits, version: 6.2, Build 9200 

   Time from start: 0 hours 0 mins 0 secs 
   Error occurred at: 04/12/25, 10:32:53
   Error description: Warning BASE/1004  Message not found: FWPDF:HDCOUT

Stack Calls
===========
   Called from: source\rtl\tobject.prg => FWPDF:ERROR( 0 )
   Called from: source\rtl\tobject.prg => FWPDF:MSGNOTFOUND( 0 )
   Called from: source\rtl\tobject.prg => FWPDF:HDCOUT( 0 )
   Called from: .\source\classes\esreport.prg => FW_EREPORT:SAY( 805 )
   Called from: .\source\classes\esreport.prg => FW_EREPORT:PRINTITEM( 951 )
   Called from: .\source\classes\esreport.prg => (b)FW_EREPORT:PRINTITEMLIST( 1332 )
   Called from:  => AEVAL( 0 )
   Called from: .\source\classes\esreport.prg => FW_EREPORT:PRINTITEMLIST( 1332 )
   Called from: .\source\classes\esreport.prg => FW_EREPORT:AREASTART2( 756 )
   Called from: .\source\classes\esreport.prg => FW_EREPORT:AREASTART( 639 )
   Called from: leandro5.prg => MAIN( 24 )

System
======
   Hardware memory: 32510 megs

   Free System resources: 90 %
        GDI    resources: 90 %
        User   resources: 90 %

   Windows total applications running: 1
      1 ,                                                                                                     

Variables in use
================
   Procedure     Type   Value
   ==========================
   FWPDF:ERROR
     Param   1:    C    "Message not found"
     Param   2:    C    "FWPDF"
     Param   3:    C    "HDCOUT"
     Param   4:    N    1004
     Local   1:    U    
     Local   2:    O    Class: FWPDF
     Local   3:    N    13
   FWPDF:MSGNOTFOUND
     Param   1:    C    "HDCOUT"
     Local   1:    O    Class: FWPDF
   FWPDF:HDCOUT
   FW_EREPORT:SAY
     Param   1:    N    36.8504
     Param   2:    N    82.2047
     Param   3:    C    "Report with array"
     Param   4:    A    Len:    3
     Param   5:    N    155.9055
     Param   6:    N    10485760
     Param   7:    N    1
     Param   8:    N    0
     Local   1:    O    Class: FW_EREPORT
     Local   2:    U    
     Local   3:    A    Len:    3
   FW_EREPORT:PRINTITEM
     Param   1:    N    1
     Param   2:    N    101
     Param   3:    C    "Report with array"
     Param   4:    N    0
     Local   1:    L    .F.
     Local   2:    N    0
     Local   3:    O    Class: FW_EREPORT
     Local   4:    N    0
     Local   5:    A    Len:    3
     Local   6:    U    
     Local   7:    N    29
     Local   8:    U    
     Local   9:    N    13
     Local  10:    U    
     Local  11:    U    
     Local  12:    U    
     Local  13:    U    
     Local  14:    U    
     Local  15:    U    
     Local  16:    U    
     Local  17:    U    
     Local  18:    U    
     Local  19:    U    
     Local  20:    C    "Customer   "
     Local  21:    U    
     Local  22:    U    
     Local  23:    U    
     Local  24:    L    .F.
     Local  25:    C    "400"
     Local  26:    C    "TEXT|Customer   |101|1|1|1|3|9|55|7|8|1|2|1|0|0||0||||||||||||||0|0.20"
     Local  27:    O    Class: FWER_ITEM
     Local  28:    N    10
     Local  29:    N    10
     Local  30:    L    .F.
     Local  31:    N    1
   (b)FW_EREPORT:PRINTITEMLIST
     Param   1:    N    101
     Param   2:    N    1
   AEVAL
     Param   1:    A    Len:    2
     Param   2:    B    {|| ... }
   FW_EREPORT:PRINTITEMLIST
     Param   1:    N    1
     Param   2:    A    Len:    2
     Param   3:    A    Len:    2
     Local   1:    U    
     Local   2:    O    Class: FW_EREPORT
   FW_EREPORT:AREASTART2
     Param   1:    N    1
     Param   2:    L    .T.
     Param   3:    A    Len:    2
     Param   4:    A    Len:    2
     Param   5:    L    .F.
     Local   1:    O    Class: FW_EREPORT
     Local   2:    N    10
     Local   3:    N    10
     Local   4:    L    .F.
   FW_EREPORT:AREASTART
     Param   1:    N    1
     Param   2:    U    
     Param   3:    A    Len:    2
     Param   4:    A    Len:    2
     Param   5:    L    .F.
     Local   1:    O    Class: FW_EREPORT
     Local   2:    N    1
     Local   3:    N    1
     Local   4:    N    1
     Local   5:    N    0
     Local   6:    N    0
   MAIN
     Local   1:    O    Class: FW_EREPORT
     Local   2:    N    0
     Local   3:    N    0
     Local   4:    N    0
     Local   5:    N    0
     Local   6:    A    Len:  500

Linked RDDs
===========
   DBF
   DBFFPT
   DBFBLOB
   DBFCDX
   DBFNTX

DataBases in use
================

  1: => CUSTOMER                           RddName: DBFNTX
     ==============================
     RecNo    RecCount    BOF   EOF
          1          500      .F.   .F.

     Indexes in use                        TagName

     Relations in use

Classes in use:
===============
     1 ERROR
     2 HASHENTRY
     3 HBCLASS
     4 HBOBJECT
     5 TPRINTER
     6 FW_EREPORT
     7 TEXSTRUCT
     8 TFONT
     9 TWINDOW
    10 TDIALOG
    11 TBRUSH
    12 TCONTROL
    13 TSAY
    14 TBUTTON
    15 TREG32
    16 TRECT
    17 TPDF
    18 FWPDF
    19 FWER_ITEM

Memory Analysis
===============
      745 Static variables

   Dynamic memory consume:
      Actual  Value:          0 bytes
      Highest Value:          0 bytes

]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Petición para hacer compatible EasyReport con Harupdf :: Reply by Antonio Linares]]> 2025-04-12T10:40:44-06:00 2025-04-12T10:40:44-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45604&p=278961#p278961
Esto llegó a funcionar anteriormente ??]]>

Esto llegó a funcionar anteriormente ??]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Petición para hacer compatible EasyReport con Harupdf :: Reply by leandro]]> 2025-04-12T11:16:17-06:00 2025-04-12T11:16:17-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45604&p=278963#p278963 por eso la solicitud para que se pueda usar desde Easy Report.]]> por eso la solicitud para que se pueda usar desde Easy Report.]]> <![CDATA[FiveWin para Harbour/xHarbour :: ID mariadb :: Author jair]]> 2025-04-16T09:20:26-06:00 2025-04-16T09:20:26-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45627&p=279012#p279012 <![CDATA[FiveWin para Harbour/xHarbour :: Re: ID mariadb :: Reply by cmsoft]]> 2025-04-16T09:43:10-06:00 2025-04-16T09:43:10-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45627&p=279014#p279014 Desde donde queres cambiarlos? Desde un programa Fivewin o desde la misma base de datos?
Si es desde la base de datos, puedes hacerlo simplemente modifcando la estructura de la tabla así.

Code: Select all | Expand

ALTER TABLE `mibase`.`mitabla`  AUTO_INCREMENT=500;
Esto altera el numero del autoincremental al numero que tu desees.
Si por el contrario, lo que quieres hacer es correr los autoincrementales que tiene una tabla a un numero mas grande puedes hacer:

Code: Select all | Expand

UPDATE mitabla SET id = id +60 ORDER BY id DESC
Esto pondrá todos los autoincrementales con su valor mas 60. El order by desc es necesario para que empiece a correr desde el ultimo, sino dará duplicado.
Espero sea eso lo que preguntabas, sino explica el caso y vemos como podemos ayudar]]>
Desde donde queres cambiarlos? Desde un programa Fivewin o desde la misma base de datos?
Si es desde la base de datos, puedes hacerlo simplemente modifcando la estructura de la tabla así.

Code: Select all | Expand

ALTER TABLE `mibase`.`mitabla`  AUTO_INCREMENT=500;
Esto altera el numero del autoincremental al numero que tu desees.
Si por el contrario, lo que quieres hacer es correr los autoincrementales que tiene una tabla a un numero mas grande puedes hacer:

Code: Select all | Expand

UPDATE mitabla SET id = id +60 ORDER BY id DESC
Esto pondrá todos los autoincrementales con su valor mas 60. El order by desc es necesario para que empiece a correr desde el ultimo, sino dará duplicado.
Espero sea eso lo que preguntabas, sino explica el caso y vemos como podemos ayudar]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: ID mariadb :: Reply by jair]]> 2025-04-16T11:07:40-06:00 2025-04-16T11:07:40-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45627&p=279015#p279015 <![CDATA[FiveWin para Harbour/xHarbour :: ButtonBmp() Bordes? :: Author karinha]]> 2025-04-10T11:27:46-06:00 2025-04-10T11:27:46-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45617&p=278929#p278929
Gracias, tks.

Regards, saludos.]]>

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: ButtonBmp() Bordes? :: Reply by cnavarro]]> 2025-04-10T12:06:52-06:00 2025-04-10T12:06:52-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45617&p=278934#p278934 Saludos]]> Saludos]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: ButtonBmp() Bordes? :: Reply by karinha]]> 2025-04-10T12:32:51-06:00 2025-04-10T12:32:51-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45617&p=278936#p278936
https://imgur.com/7K9B4Im

Image

Gracias, tks.

Regards, saludos.]]>

https://imgur.com/7K9B4Im

Image

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: ButtonBmp() Bordes? :: Reply by karinha]]> 2025-04-17T10:20:48-06:00 2025-04-17T10:20:48-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45617&p=279026#p279026
https://imgur.com/CZenNiU

Image

Gracias, tks.

Regards, saludos.]]>

https://imgur.com/CZenNiU

Image

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Borrar registros de una tabla :: Author acuellar]]> 2025-04-19T08:12:33-06:00 2025-04-19T08:12:33-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45630&p=279046#p279046
Lo hago así:

Code: Select all | Expand

cCOD:="123"
oSql:=oCn:RowSet( "SELECT * FROM  DATOS WHERE CODIGO = ? ORDER BY CODIGO",{cCOD})
oSql:GoTop()
Do While !oSql:Eof()
   oSql:Delete()
   oSql:Skip()
Enddo
No siempre borra todos :(

Existe otra manera de borrar sin recorrer toda la tabla filtrada?
Intenté con oSQL:ZAP() pero borra toda la tabla y lo que necesito es que borre lo filtrado]]>

Lo hago así:

Code: Select all | Expand

cCOD:="123"
oSql:=oCn:RowSet( "SELECT * FROM  DATOS WHERE CODIGO = ? ORDER BY CODIGO",{cCOD})
oSql:GoTop()
Do While !oSql:Eof()
   oSql:Delete()
   oSql:Skip()
Enddo
No siempre borra todos :(

Existe otra manera de borrar sin recorrer toda la tabla filtrada?
Intenté con oSQL:ZAP() pero borra toda la tabla y lo que necesito es que borre lo filtrado]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Borrar registros de una tabla :: Reply by Enrico Maria Giordano]]> 2025-04-19T09:03:39-06:00 2025-04-19T09:03:39-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45630&p=279047#p279047

Code: Select all | Expand

DELETE FROM DATOS WHERE CODIGO = '123'
]]>

Code: Select all | Expand

DELETE FROM DATOS WHERE CODIGO = '123'
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Borrar registros de una tabla :: Reply by Enrico Maria Giordano]]> 2025-04-19T09:05:39-06:00 2025-04-19T09:05:39-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45630&p=279048#p279048

Code: Select all | Expand

"DELETE FROM DATOS WHERE CODIGO = '" + cCod + "'"
]]>

Code: Select all | Expand

"DELETE FROM DATOS WHERE CODIGO = '" + cCod + "'"
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Borrar registros de una tabla :: Reply by acuellar]]> 2025-04-19T09:27:08-06:00 2025-04-19T09:27:08-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45630&p=279049#p279049
Thanks Enrico]]>

Thanks Enrico]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Borrar registros de una tabla :: Reply by sysctrl2]]> 2025-04-21T09:16:56-06:00 2025-04-21T09:16:56-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45630&p=279080#p279080

Code: Select all | Expand

FUNCTION testDelete()
   LOCAL cTabla := "datos" //%1
   LOCAL cCod := "123"     //%2
   LOCAL cQry := ""

   TEXT INTO cQry
      DELETE FROM %1
      WHERE codigo=%2
   ENDTEXT

   cQry := StrFormat( cQry, cTabla, ClipValue2SQL(cCod) )
   oCon:Execute( cQry )

RETURN (NIL)

]]>

Code: Select all | Expand

FUNCTION testDelete()
   LOCAL cTabla := "datos" //%1
   LOCAL cCod := "123"     //%2
   LOCAL cQry := ""

   TEXT INTO cQry
      DELETE FROM %1
      WHERE codigo=%2
   ENDTEXT

   cQry := StrFormat( cQry, cTabla, ClipValue2SQL(cCod) )
   oCon:Execute( cQry )

RETURN (NIL)

]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Lentitud al abrir las tablas :: Author abelcervantes]]> 2025-04-21T15:26:22-06:00 2025-04-21T15:26:22-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45636&p=279084#p279084
Tengo el problema que el proceso para abrir las tablas es muy lento.

FWCONNECT oCn HOST c_SQLHost USER c_SQLUsuar PASSWORD c_SQLPassw DB c_SQLBase

oTab := oCn:RowSet( 'select * from pedidos order by numero' )
oTPediDt := oCn:RowSet( 'select * from pedid_dt where numero = ? order by numero', { 0 } )

Ese proceso a veces tarda 10 segundos, en el mejor de los casos 5 segundos.
Espero sus sabios consejos.]]>

Tengo el problema que el proceso para abrir las tablas es muy lento.

FWCONNECT oCn HOST c_SQLHost USER c_SQLUsuar PASSWORD c_SQLPassw DB c_SQLBase

oTab := oCn:RowSet( 'select * from pedidos order by numero' )
oTPediDt := oCn:RowSet( 'select * from pedid_dt where numero = ? order by numero', { 0 } )

Ese proceso a veces tarda 10 segundos, en el mejor de los casos 5 segundos.
Espero sus sabios consejos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Lentitud al abrir las tablas :: Reply by sysctrl2]]> 2025-04-21T15:33:15-06:00 2025-04-21T15:33:15-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45636&p=279085#p279085 -usar LIMIT 1 en la busqueda
-crear indices en los campos llave]]>
-usar LIMIT 1 en la busqueda
-crear indices en los campos llave]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: emoticons e smiles en un get son posibles? :: Reply by karinha]]> 2025-04-18T07:16:58-06:00 2025-04-18T07:16:58-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45609&p=279041#p279041
https://en.wikipedia.org/wiki/List_of_emoticons

Regards, saludos.]]>

https://en.wikipedia.org/wiki/List_of_emoticons

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: emoticons e smiles en un get son posibles? :: Reply by cnavarro]]> 2025-04-19T20:58:06-06:00 2025-04-19T20:58:06-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45609&p=279053#p279053
karinha wrote: Mon Apr 07, 2025 1:09 pm
cnavarro wrote: Mon Apr 07, 2025 12:23 pm Estimado Joao
En los says, msginfo, etc. si es posible, pero en los gets, como bien sabes, todas las aplicaciones para incluirlo en un campo de tipo input ( get en harbour/fw ) usan un boton para que el usuario seleccione el emoji que desea, imagino que será para evitar tener que validar/analizar lo que se ha introducido y buscar las cadenas unicode que dan lugar al emoji
Tengo que hacer alguna prueba y te comento
Gracias amados maestro.

Regards, saludos.
Image]]>
karinha wrote: Mon Apr 07, 2025 1:09 pm
cnavarro wrote: Mon Apr 07, 2025 12:23 pm Estimado Joao
En los says, msginfo, etc. si es posible, pero en los gets, como bien sabes, todas las aplicaciones para incluirlo en un campo de tipo input ( get en harbour/fw ) usan un boton para que el usuario seleccione el emoji que desea, imagino que será para evitar tener que validar/analizar lo que se ha introducido y buscar las cadenas unicode que dan lugar al emoji
Tengo que hacer alguna prueba y te comento
Gracias amados maestro.

Regards, saludos.
Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: emoticons e smiles en un get son posibles? :: Reply by karinha]]> 2025-04-21T09:04:35-06:00 2025-04-21T09:04:35-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45609&p=279079#p279079
https://www.fontyukle.net/downloadfont/Emoticons

No funciona con SEGOE UI EMOJI, creo que el que tengo instalado no está completo, ¿donde puedo descargar el SEGOE UI EMOJI completo?

Code: Select all | Expand

// C:\FWH\SAMPLES\EMOJI.PRG

#include "FiveWin.Ch"

FUNCTION Main()

   LOCAL oDlg, oGet1, oGet2, oGet3, oGet4, nVar2 := 0, nVar3 := 0, ;
         dVar4 := Date(), oFont, oSay
   LOCAL cEmoj := Space( 100 )

   FW_SetUnicode( .T. )

   cEmoj := "Emoji:   8-) - }:-)  :angry: @};-                                                                    "

   // DEFINE FONT oFont NAME "Segoe UI Emoji" SIZE 0, -14 // No funciona

   // Link: https://www.fontyukle.net/downloadfont/Emoticons
   DEFINE FONT oFont NAME "Emoticons"         SIZE 0, -14 BOLD // Funciona

   DEFINE DIALOG oDlg FROM 0, 0 TO 400, 400 PIXEL

   @ 15, 15 GET oGet1 VAR cEmoj SIZE 200, 16 OF oDlg PIXEL FONT oFont

   @ 40, 15 GET oGet2 VAR nVar2 PICTURE "99999" SIZE 50, 12 OF oDlg PIXEL

   @ 65, 15 GET oGet3 VAR nVar3 PICTURE "99999.99" SIZE 50, 12 OF oDlg PIXEL right

   @ 90, 15 GET oSay  VAR cEmoj SIZE 150, 15 OF oDlg PIXEL FONT oFont NOBORDER

   ACTIVATE DIALOG oDlg CENTERED

RETURN NIL

// FIN / END
Regards, saludos.]]>

https://www.fontyukle.net/downloadfont/Emoticons

No funciona con SEGOE UI EMOJI, creo que el que tengo instalado no está completo, ¿donde puedo descargar el SEGOE UI EMOJI completo?

Code: Select all | Expand

// C:\FWH\SAMPLES\EMOJI.PRG

#include "FiveWin.Ch"

FUNCTION Main()

   LOCAL oDlg, oGet1, oGet2, oGet3, oGet4, nVar2 := 0, nVar3 := 0, ;
         dVar4 := Date(), oFont, oSay
   LOCAL cEmoj := Space( 100 )

   FW_SetUnicode( .T. )

   cEmoj := "Emoji:   8-) - }:-)  :angry: @};-                                                                    "

   // DEFINE FONT oFont NAME "Segoe UI Emoji" SIZE 0, -14 // No funciona

   // Link: https://www.fontyukle.net/downloadfont/Emoticons
   DEFINE FONT oFont NAME "Emoticons"         SIZE 0, -14 BOLD // Funciona

   DEFINE DIALOG oDlg FROM 0, 0 TO 400, 400 PIXEL

   @ 15, 15 GET oGet1 VAR cEmoj SIZE 200, 16 OF oDlg PIXEL FONT oFont

   @ 40, 15 GET oGet2 VAR nVar2 PICTURE "99999" SIZE 50, 12 OF oDlg PIXEL

   @ 65, 15 GET oGet3 VAR nVar3 PICTURE "99999.99" SIZE 50, 12 OF oDlg PIXEL right

   @ 90, 15 GET oSay  VAR cEmoj SIZE 150, 15 OF oDlg PIXEL FONT oFont NOBORDER

   ACTIVATE DIALOG oDlg CENTERED

RETURN NIL

// FIN / END
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: emoticons e smiles en un get son posibles? :: Reply by cnavarro]]> 2025-04-21T14:25:03-06:00 2025-04-21T14:25:03-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45609&p=279082#p279082 pero he probado

Code: Select all | Expand

// No funciona
DEFINE FONT oFont NAME "Segoe UI Emoji Normal" SIZE 0, -14
]]>
pero he probado

Code: Select all | Expand

// No funciona
DEFINE FONT oFont NAME "Segoe UI Emoji Normal" SIZE 0, -14
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: emoticons e smiles en un get son posibles? :: Reply by karinha]]> 2025-04-22T04:51:03-06:00 2025-04-22T04:51:03-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45609&p=279092#p279092 https://github.com/thedemons/merge_colo ... guiemj.ttf

NO FUNCIONA!

Code: Select all | Expand

// C:\FWH\SAMPLES\EMOJI.PRG

#include "FiveWin.Ch"

FUNCTION Main()

   LOCAL oDlg, oGet1, oGet2, oGet3, oGet4, nVar2 := 0, nVar3 := 0, ;
         dVar4 := Date(), oFont, oSay
   LOCAL cEmoj := Space( 100 )

   FW_SetUnicode( .T. )

   cEmoj := "Emoji:   8-) - }:-)  :angry: @};-                                                                    "

   // https://github.com/thedemons/merge_color_emoji_font/blob/main/seguiemj.ttf
   DEFINE FONT oFont NAME "Segoe UI Emoji Normal" SIZE 0, -14 // No funciona

   // Link: https://www.fontyukle.net/downloadfont/Emoticons
   // DEFINE FONT oFont NAME "Emoticons"         SIZE 0, -14 BOLD // Funciona

   DEFINE DIALOG oDlg FROM 0, 0 TO 400, 400 PIXEL

   @ 15, 15 GET oGet1 VAR cEmoj SIZE 200, 16 OF oDlg PIXEL FONT oFont

   @ 40, 15 GET oGet2 VAR nVar2 PICTURE "99999" SIZE 50, 12 OF oDlg PIXEL

   @ 65, 15 GET oGet3 VAR nVar3 PICTURE "99999.99" SIZE 50, 12 OF oDlg PIXEL right

   @ 90, 15 GET oSay  VAR cEmoj SIZE 150, 15 OF oDlg PIXEL FONT oFont NOBORDER

   ACTIVATE DIALOG oDlg CENTERED

   oFont:End()

RETURN NIL

// FIN / END
Regards, saludos.]]>
https://github.com/thedemons/merge_colo ... guiemj.ttf

NO FUNCIONA!

Code: Select all | Expand

// C:\FWH\SAMPLES\EMOJI.PRG

#include "FiveWin.Ch"

FUNCTION Main()

   LOCAL oDlg, oGet1, oGet2, oGet3, oGet4, nVar2 := 0, nVar3 := 0, ;
         dVar4 := Date(), oFont, oSay
   LOCAL cEmoj := Space( 100 )

   FW_SetUnicode( .T. )

   cEmoj := "Emoji:   8-) - }:-)  :angry: @};-                                                                    "

   // https://github.com/thedemons/merge_color_emoji_font/blob/main/seguiemj.ttf
   DEFINE FONT oFont NAME "Segoe UI Emoji Normal" SIZE 0, -14 // No funciona

   // Link: https://www.fontyukle.net/downloadfont/Emoticons
   // DEFINE FONT oFont NAME "Emoticons"         SIZE 0, -14 BOLD // Funciona

   DEFINE DIALOG oDlg FROM 0, 0 TO 400, 400 PIXEL

   @ 15, 15 GET oGet1 VAR cEmoj SIZE 200, 16 OF oDlg PIXEL FONT oFont

   @ 40, 15 GET oGet2 VAR nVar2 PICTURE "99999" SIZE 50, 12 OF oDlg PIXEL

   @ 65, 15 GET oGet3 VAR nVar3 PICTURE "99999.99" SIZE 50, 12 OF oDlg PIXEL right

   @ 90, 15 GET oSay  VAR cEmoj SIZE 150, 15 OF oDlg PIXEL FONT oFont NOBORDER

   ACTIVATE DIALOG oDlg CENTERED

   oFont:End()

RETURN NIL

// FIN / END
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: emoticons e smiles en un get son posibles? :: Reply by cnavarro]]> 2025-04-22T04:55:13-06:00 2025-04-22T04:55:13-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45609&p=279094#p279094 <![CDATA[FiveWin para Harbour/xHarbour :: Re: emoticons e smiles en un get son posibles? :: Reply by karinha]]> 2025-04-22T05:01:28-06:00 2025-04-22T05:01:28-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45609&p=279096#p279096
cnavarro wrote: Tue Apr 22, 2025 10:55 am No, ya te lo he mencionado en mi post anterior
Este funciona, pero todos los emojis son BLANCOS y NEGROS, terrible. jajajajajaja.

https://www.fontyukle.net/downloadfont/Emoticons

No importa, solo fue para probar. Gracias.

Regards, saludos.]]>
cnavarro wrote: Tue Apr 22, 2025 10:55 am No, ya te lo he mencionado en mi post anterior
Este funciona, pero todos los emojis son BLANCOS y NEGROS, terrible. jajajajajaja.

https://www.fontyukle.net/downloadfont/Emoticons

No importa, solo fue para probar. Gracias.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Consulta sobre Xbrowse :: Author jose_murugosa]]> 2025-04-22T07:36:49-06:00 2025-04-22T07:36:49-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45639&p=279102#p279102 En algunos casos cuando hago un xbrowse de un recordset o array, me aparece arriba una fila como de excel A,B,C,D,E..... por cada columna del array o rowset.
La pregunta es porque no me doy cuenta cual es la diferencia con aquellos en que no sale, ¿que me está faltando para evitar esta fila?

Gracias desde ya por vuestra ayuda.]]>
En algunos casos cuando hago un xbrowse de un recordset o array, me aparece arriba una fila como de excel A,B,C,D,E..... por cada columna del array o rowset.
La pregunta es porque no me doy cuenta cual es la diferencia con aquellos en que no sale, ¿que me está faltando para evitar esta fila?

Gracias desde ya por vuestra ayuda.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Consulta sobre Xbrowse :: Reply by cnavarro]]> 2025-04-22T08:16:27-06:00 2025-04-22T08:16:27-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45639&p=279107#p279107 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Consulta sobre Xbrowse :: Reply by jose_murugosa]]> 2025-04-22T09:45:32-06:00 2025-04-22T09:45:32-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45639&p=279115#p279115
jose_murugosa wrote: Tue Apr 22, 2025 1:36 pm Lo más seguro que es una consulta tonta, pero ...
En algunos casos cuando hago un xbrowse de un recordset o array, me aparece arriba una fila como de excel A,B,C,D,E..... por cada columna del array o rowset.
La pregunta es porque no me doy cuenta cual es la diferencia con aquellos en que no sale, ¿que me está faltando para evitar esta fila?

Gracias desde ya por vuestra ayuda.

Gracias por tu respuesta Cristóbal, creo que no me expresé bien, me refiero que cuando genero la excel a partir de la grilla, me pone una primera fila del excel con las letras A,B,C,D...
NO EN EL BROWSE SINO EN LA EXCEL QUE GENERO A PARTIR DEL MISMO.

adjunto imagen:

Image]]>
jose_murugosa wrote: Tue Apr 22, 2025 1:36 pm Lo más seguro que es una consulta tonta, pero ...
En algunos casos cuando hago un xbrowse de un recordset o array, me aparece arriba una fila como de excel A,B,C,D,E..... por cada columna del array o rowset.
La pregunta es porque no me doy cuenta cual es la diferencia con aquellos en que no sale, ¿que me está faltando para evitar esta fila?

Gracias desde ya por vuestra ayuda.

Gracias por tu respuesta Cristóbal, creo que no me expresé bien, me refiero que cuando genero la excel a partir de la grilla, me pone una primera fila del excel con las letras A,B,C,D...
NO EN EL BROWSE SINO EN LA EXCEL QUE GENERO A PARTIR DEL MISMO.

adjunto imagen:

Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Consulta sobre Xbrowse :: Reply by cnavarro]]> 2025-04-22T10:00:46-06:00 2025-04-22T10:00:46-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45639&p=279116#p279116 Por lo que veo en tu imagen, que antes no me había fijado bien, al crearte el Excel, te pone como titulos de las columnas que genera los headers de las columnas que tuvieras definidos en el xbrowse, al no tener tu headers definidos xbrowse te asigna "A", "B", ..., etc. que es justo lo que te aparece al crear la hoja excel]]> Por lo que veo en tu imagen, que antes no me había fijado bien, al crearte el Excel, te pone como titulos de las columnas que genera los headers de las columnas que tuvieras definidos en el xbrowse, al no tener tu headers definidos xbrowse te asigna "A", "B", ..., etc. que es justo lo que te aparece al crear la hoja excel]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Consulta sobre Xbrowse :: Reply by jose_murugosa]]> 2025-04-23T04:30:14-06:00 2025-04-23T04:30:14-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45639&p=279131#p279131
cnavarro wrote: Tue Apr 22, 2025 4:00 pm Y tiene headers personalizados tu xbrowse del que obtiene los datos ?, o son esos los headers "A", "B", etc
Por lo que veo en tu imagen, que antes no me había fijado bien, al crearte el Excel, te pone como titulos de las columnas que genera los headers de las columnas que tuvieras definidos en el xbrowse, al no tener tu headers definidos xbrowse te asigna "A", "B", ..., etc. que es justo lo que te aparece al crear la hoja excel
Ah, claro, eso debe ser, muchas gracias Cristóbal, como dije....'lo mas seguro es que se trata de una pregunta tonta' :D]]>
cnavarro wrote: Tue Apr 22, 2025 4:00 pm Y tiene headers personalizados tu xbrowse del que obtiene los datos ?, o son esos los headers "A", "B", etc
Por lo que veo en tu imagen, que antes no me había fijado bien, al crearte el Excel, te pone como titulos de las columnas que genera los headers de las columnas que tuvieras definidos en el xbrowse, al no tener tu headers definidos xbrowse te asigna "A", "B", ..., etc. que es justo lo que te aparece al crear la hoja excel
Ah, claro, eso debe ser, muchas gracias Cristóbal, como dije....'lo mas seguro es que se trata de una pregunta tonta' :D]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: España: Normativa sancionadora sistemas informáticos :: Reply by FiveWiDi]]> 2025-04-20T11:45:42-06:00 2025-04-20T11:45:42-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=40705&p=279072#p279072
A ver...
Estoy intentando encontrar la ley/reglamento/real decreto/loquesea en donde se vislumbre como se puede anular una factura.

Si Ustedes, hoy 20/04/2025 deben anular una factura por que se ha hecho mal. ¿Cómo lo hacen?

Muchas gracias,]]>

A ver...
Estoy intentando encontrar la ley/reglamento/real decreto/loquesea en donde se vislumbre como se puede anular una factura.

Si Ustedes, hoy 20/04/2025 deben anular una factura por que se ha hecho mal. ¿Cómo lo hacen?

Muchas gracias,]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: España: Normativa sancionadora sistemas informáticos :: Reply by Verhoven]]> 2025-04-21T04:56:54-06:00 2025-04-21T04:56:54-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=40705&p=279078#p279078 <![CDATA[FiveWin para Harbour/xHarbour :: Re: España: Normativa sancionadora sistemas informáticos :: Reply by paquitohm]]> 2025-04-21T09:35:23-06:00 2025-04-21T09:35:23-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=40705&p=279081#p279081
Si por anular te refieres a borrar (delete) un registro como se borra de una base de datos no se puede. Debes de generar una factura nueva que rectifique la erronea. El término rectificar no se refiere al significado intuitivo que tenemos de modificar. No es modificar. Es generar un nuevo registro enlazado con el original erroneo que en el conjunto de operaciones lo que hace es "rectificar" la factura original erronea. La aeat no quiere que borres nada, todo se queda grabado, permitiendo en una revisión poder ir hacia atrás per secula seculorum.
A riesgo de estar equivocado, no lo veo yo así. La anulación como operacion existe y es perfectamente válida, no ahora, sino desde siempre. Incluso se puede borrar en la base de datos quedando el hueco de la factura.

Ahora bien ¿ En qué condiciones se puede hacer esto ? Pues cuando el cliente te compra, le expides la factura y te dice que desiste de la compra y que no se lleva ni mercancia ni factura. Ahí, IMHO, tiene cabida la anulación. Ahora bien (bis) la agencia dice que de estas facturas anuladas no deberían haber muchas y cada uno se tome el "deberían" como quiera :roll:

Salu2

PD. La generación del xml siempre fue lo fácil. Lo otro es lo complicado]]>
Si por anular te refieres a borrar (delete) un registro como se borra de una base de datos no se puede. Debes de generar una factura nueva que rectifique la erronea. El término rectificar no se refiere al significado intuitivo que tenemos de modificar. No es modificar. Es generar un nuevo registro enlazado con el original erroneo que en el conjunto de operaciones lo que hace es "rectificar" la factura original erronea. La aeat no quiere que borres nada, todo se queda grabado, permitiendo en una revisión poder ir hacia atrás per secula seculorum.
A riesgo de estar equivocado, no lo veo yo así. La anulación como operacion existe y es perfectamente válida, no ahora, sino desde siempre. Incluso se puede borrar en la base de datos quedando el hueco de la factura.

Ahora bien ¿ En qué condiciones se puede hacer esto ? Pues cuando el cliente te compra, le expides la factura y te dice que desiste de la compra y que no se lleva ni mercancia ni factura. Ahí, IMHO, tiene cabida la anulación. Ahora bien (bis) la agencia dice que de estas facturas anuladas no deberían haber muchas y cada uno se tome el "deberían" como quiera :roll:

Salu2

PD. La generación del xml siempre fue lo fácil. Lo otro es lo complicado]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: España: Normativa sancionadora sistemas informáticos :: Reply by FiveWiDi]]> 2025-04-21T14:49:20-06:00 2025-04-21T14:49:20-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=40705&p=279083#p279083
Y Veri*factu se lo come con patatas.

Veri*factu parece ser que está para que se le informe de la actividad que se desarrolla entorno a la facturación, después tu haz lo que quieras que si las huellas no coinciden (y Hacienda pierde el control), ya iran a por ti.

Volviendo a la anulación.
Veri*factu la contempla.
Han dejado toda la responsabilidad a los usuarios que no son 'asesores fiscales'.
Los desarrolladores debemos permitir lo que dice la ley/reglamento, y Veri*factu permite anular.
La acción de facturar la hace el usuario, el desarrollador pone los medios que cumplen la ley/reglamento.
Es un "marrón".

Personalmente creo que hay casos que deben ser anulaciones:
-un cliente que tiene 3 empresas y se le ha facturado a la que no toca.
Por comodidad le haría una rectificativa, pero no es correcto y el cliente me lo puede exigir.

El problema está en cómo validar/controlar estos casos.]]>

Y Veri*factu se lo come con patatas.

Veri*factu parece ser que está para que se le informe de la actividad que se desarrolla entorno a la facturación, después tu haz lo que quieras que si las huellas no coinciden (y Hacienda pierde el control), ya iran a por ti.

Volviendo a la anulación.
Veri*factu la contempla.
Han dejado toda la responsabilidad a los usuarios que no son 'asesores fiscales'.
Los desarrolladores debemos permitir lo que dice la ley/reglamento, y Veri*factu permite anular.
La acción de facturar la hace el usuario, el desarrollador pone los medios que cumplen la ley/reglamento.
Es un "marrón".

Personalmente creo que hay casos que deben ser anulaciones:
-un cliente que tiene 3 empresas y se le ha facturado a la que no toca.
Por comodidad le haría una rectificativa, pero no es correcto y el cliente me lo puede exigir.

El problema está en cómo validar/controlar estos casos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: España: Normativa sancionadora sistemas informáticos :: Reply by quim_]]> 2025-04-24T02:28:08-06:00 2025-04-24T02:28:08-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=40705&p=279147#p279147
Pregunta
Revisando las FAQ del SII que indican e intentando aplicar a la lógica VeriFactu

Ejemplo 1: Disminución de la base imponible, Opcion 2 :
La modificación por sustitución supondría emitir una factura con base imponible de -1000 € y una factura rectificativa en la que se indicará que la base imponible es de 800 €.
* 1a. Factura, TipoFactura = F1
Desglose IVA: se indicará el importe que se rectifica con signo contrario (base imponible: (-1.000), cuota repercutida (-210)
* 2a. Factura, TipoFactura = Rx
TipoRectificativa = S
Desglose IVA: se indicará que la base imponible es de 800, cuota repercutida 168

Pueden indicar la diferencia entre aplicar lo anterior y lo siguiente :
* 1a. Anulacion de factura. Se emite factura por parte del SIF en negativo, pero se informa a VeriFactu como registro de anulación, no de alta (F1)
* 2a. Se emite una nueva factura, como alta inicial (F1) con los datos correctos
Respuesta
El procedimiento sería el mismo que el realizado en el SII. A pesar de que comúnmente se hable de anular una factura cuando estamos emitiendo una factura de abono o negativa para contrarrestar una anterior emitida con errores, lo que realmente se está realizando es emitir una nueva factura de tipo F1 con importes negativos.

Por lo cual, en VERIFACTU se realizaría el mismo proceso que en el SII:

1. Emisión de factura con importes negativos. Su registro de facturación será una alta inicial de tipo F1 con los importes negativos que correspondan.

2. Emisión de factura rectificativa. Su registro de facturación será una alta inicial de tipo RX con los importes que correspondan.


La generación de un RF de anulación está pensado como una forma ágil de dejar constancia que una factura expedida por error (siempre y cuando el ROF no obligue a actuar de otra forma, mediante facturas rectificativas) no debería haberse expedido y, por tanto, que dicha factura no tiene validez y no ha de tenerse en cuenta. Esta forma de actuar (cuando sea posible) no implica la expedición de nuevas facturas que "contrarresten o compensen" la factura expedida por error. No obstante, siempre prima el procedimiento establecido por el reglamento de obligaciones de facturación (un posible factor a tener en cuenta también es si la factura que se plantea anular se ha entregado o no al cliente). Por lo tanto, las anulaciones deberían ser casos excepcionales.
Creo que hay 2 temas a considerar
  1. El tratamiento que damos en nuestro SIF/ERP, es decir, cualquier factura emitida, entendiento por emitida cuando ya se ha numerado/fechado y no son modificables. El reglamento de facturación especifica que hay que conservar las facturas incluso si son erróneas
  2. La información enviada a la AEAT, que puede ser en forma de registro en negativo o de anulación. Para determinar que sea una anulación, personalmente voy a considerar estos 2 criterios :
    1. No se ha impreso/generado PDF, no se ha entregado al cliente
    2. No ha transcurrido más de 1 dia desde la fecha factura a la fecha de anulación. Es decir, la anulacion sólo para casos de errores inmediatos (el cliente rechaza la venta en el mismo momento de realizarse, la venta nunca ha existido, etc) casos muy puntuales y excepcionales
Por otra parte, el tema es bastante ambiguo y en mi opinión van a dejar la puerta bastante abierta para proceder de diversas formas. Mis clientes y creo que en general, no entienden demasiado bien la rectificación de 2 pasos que propone la AEAT y funcionan con el cargo/abono, si una factura es incorrecta, se genera otra en negativo que la anula y una nueva con los datos correctos. Supongo que publicarán pronto unas FAQ con toda la casuística acumulada con las preguntas que hemos realizado los usuarios, veremos ...]]>

Pregunta
Revisando las FAQ del SII que indican e intentando aplicar a la lógica VeriFactu

Ejemplo 1: Disminución de la base imponible, Opcion 2 :
La modificación por sustitución supondría emitir una factura con base imponible de -1000 € y una factura rectificativa en la que se indicará que la base imponible es de 800 €.
* 1a. Factura, TipoFactura = F1
Desglose IVA: se indicará el importe que se rectifica con signo contrario (base imponible: (-1.000), cuota repercutida (-210)
* 2a. Factura, TipoFactura = Rx
TipoRectificativa = S
Desglose IVA: se indicará que la base imponible es de 800, cuota repercutida 168

Pueden indicar la diferencia entre aplicar lo anterior y lo siguiente :
* 1a. Anulacion de factura. Se emite factura por parte del SIF en negativo, pero se informa a VeriFactu como registro de anulación, no de alta (F1)
* 2a. Se emite una nueva factura, como alta inicial (F1) con los datos correctos
Respuesta
El procedimiento sería el mismo que el realizado en el SII. A pesar de que comúnmente se hable de anular una factura cuando estamos emitiendo una factura de abono o negativa para contrarrestar una anterior emitida con errores, lo que realmente se está realizando es emitir una nueva factura de tipo F1 con importes negativos.

Por lo cual, en VERIFACTU se realizaría el mismo proceso que en el SII:

1. Emisión de factura con importes negativos. Su registro de facturación será una alta inicial de tipo F1 con los importes negativos que correspondan.

2. Emisión de factura rectificativa. Su registro de facturación será una alta inicial de tipo RX con los importes que correspondan.


La generación de un RF de anulación está pensado como una forma ágil de dejar constancia que una factura expedida por error (siempre y cuando el ROF no obligue a actuar de otra forma, mediante facturas rectificativas) no debería haberse expedido y, por tanto, que dicha factura no tiene validez y no ha de tenerse en cuenta. Esta forma de actuar (cuando sea posible) no implica la expedición de nuevas facturas que "contrarresten o compensen" la factura expedida por error. No obstante, siempre prima el procedimiento establecido por el reglamento de obligaciones de facturación (un posible factor a tener en cuenta también es si la factura que se plantea anular se ha entregado o no al cliente). Por lo tanto, las anulaciones deberían ser casos excepcionales.
Creo que hay 2 temas a considerar
  1. El tratamiento que damos en nuestro SIF/ERP, es decir, cualquier factura emitida, entendiento por emitida cuando ya se ha numerado/fechado y no son modificables. El reglamento de facturación especifica que hay que conservar las facturas incluso si son erróneas
  2. La información enviada a la AEAT, que puede ser en forma de registro en negativo o de anulación. Para determinar que sea una anulación, personalmente voy a considerar estos 2 criterios :
    1. No se ha impreso/generado PDF, no se ha entregado al cliente
    2. No ha transcurrido más de 1 dia desde la fecha factura a la fecha de anulación. Es decir, la anulacion sólo para casos de errores inmediatos (el cliente rechaza la venta en el mismo momento de realizarse, la venta nunca ha existido, etc) casos muy puntuales y excepcionales
Por otra parte, el tema es bastante ambiguo y en mi opinión van a dejar la puerta bastante abierta para proceder de diversas formas. Mis clientes y creo que en general, no entienden demasiado bien la rectificación de 2 pasos que propone la AEAT y funcionan con el cargo/abono, si una factura es incorrecta, se genera otra en negativo que la anula y una nueva con los datos correctos. Supongo que publicarán pronto unas FAQ con toda la casuística acumulada con las preguntas que hemos realizado los usuarios, veremos ...]]>
<![CDATA[FiveWin para Harbour/xHarbour :: xbrowse() problema con los decimales al enviar a Excel :: Author CARLOS ATUNCAR]]> 2025-04-22T15:25:39-06:00 2025-04-22T15:25:39-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45640&p=279122#p279122 ejemplo
443.4784 en excel sale 443.4800

alguna solución hay que configurar algo]]>
ejemplo
443.4784 en excel sale 443.4800

alguna solución hay que configurar algo]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: xbrowse() problema con los decimales al enviar a Excel :: Reply by cnavarro]]> 2025-04-22T20:42:49-06:00 2025-04-22T20:42:49-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45640&p=279124#p279124 <![CDATA[FiveWin para Harbour/xHarbour :: Re: xbrowse() problema con los decimales al enviar a Excel :: Reply by CARLOS ATUNCAR]]> 2025-04-23T21:04:45-06:00 2025-04-23T21:04:45-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45640&p=279143#p279143

Code: Select all | Expand

cMsg := "SELECT mesv,t AS Aux,vou,cuenta,SUM(debes) AS debe,SUM(habers) AS haber "
cMsg += "FROM voucher_mov "
cMsg += "WHERE empresa=? AND periodo=? AND mesv=? AND ((debes != TRUNCATE(debes, 2)) OR (habers != TRUNCATE(habers, 2))) "
cMsg += "GROUP BY mesv,t,vou,cuenta "
cMsg += "ORDER BY mesv,t,vou"

cQry := aServer:RowSet( cMsg ,{op:empresa,op:ano,op:mes} )

WaitOff( @oWait )
If cQry:lastrec()>0
   XBrowse( cQry,"ANALISIS DE ASIENTOS CON DECIMALES > 2 DIGITOS" )
Else
   MsgStop( "NO EXISTE OPERACIONES A REVISAR","STOP")
EndIf
cQry:End()
]]>

Code: Select all | Expand

cMsg := "SELECT mesv,t AS Aux,vou,cuenta,SUM(debes) AS debe,SUM(habers) AS haber "
cMsg += "FROM voucher_mov "
cMsg += "WHERE empresa=? AND periodo=? AND mesv=? AND ((debes != TRUNCATE(debes, 2)) OR (habers != TRUNCATE(habers, 2))) "
cMsg += "GROUP BY mesv,t,vou,cuenta "
cMsg += "ORDER BY mesv,t,vou"

cQry := aServer:RowSet( cMsg ,{op:empresa,op:ano,op:mes} )

WaitOff( @oWait )
If cQry:lastrec()>0
   XBrowse( cQry,"ANALISIS DE ASIENTOS CON DECIMALES > 2 DIGITOS" )
Else
   MsgStop( "NO EXISTE OPERACIONES A REVISAR","STOP")
EndIf
cQry:End()
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: xbrowse() problema con los decimales al enviar a Excel :: Reply by ertan]]> 2025-04-23T23:19:38-06:00 2025-04-23T23:19:38-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45640&p=279144#p279144
viewtopic.php?t=45548&start=15

I think you are facing the same problem,

Best regards,
Ertan Hakan ÖZTÜRK
ertan_ozturk@yahoo.com]]>

viewtopic.php?t=45548&start=15

I think you are facing the same problem,

Best regards,
Ertan Hakan ÖZTÜRK
ertan_ozturk@yahoo.com]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: xbrowse() problema con los decimales al enviar a Excel :: Reply by Antonio Linares]]> 2025-04-24T00:10:32-06:00 2025-04-24T00:10:32-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45640&p=279145#p279145
CARLOS ATUNCAR wrote: Tue Apr 22, 2025 9:25 pm tengo una pantalla en XBROWSE() donde hay dos columnas numericas con 4 posiciones en los decimales y al enviarlo al excel lo envia con 4 posiciones en los decimales pero redondeados a 2
ejemplo
443.4784 en excel sale 443.4800

alguna solución hay que configurar algo
Estas usando SET DECIMALS TO 4 ?]]>
CARLOS ATUNCAR wrote: Tue Apr 22, 2025 9:25 pm tengo una pantalla en XBROWSE() donde hay dos columnas numericas con 4 posiciones en los decimales y al enviarlo al excel lo envia con 4 posiciones en los decimales pero redondeados a 2
ejemplo
443.4784 en excel sale 443.4800

alguna solución hay que configurar algo
Estas usando SET DECIMALS TO 4 ?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: xbrowse() problema con los decimales al enviar a Excel :: Reply by cnavarro]]> 2025-04-24T08:38:23-06:00 2025-04-24T08:38:23-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45640&p=279154#p279154
CARLOS ATUNCAR wrote: Thu Apr 24, 2025 3:04 am Saludos cNavarro este es mi codigo usado

Code: Select all | Expand

cMsg := "SELECT mesv,t AS Aux,vou,cuenta,SUM(debes) AS debe,SUM(habers) AS haber "
cMsg += "FROM voucher_mov "
cMsg += "WHERE empresa=? AND periodo=? AND mesv=? AND ((debes != TRUNCATE(debes, 2)) OR (habers != TRUNCATE(habers, 2))) "
cMsg += "GROUP BY mesv,t,vou,cuenta "
cMsg += "ORDER BY mesv,t,vou"

cQry := aServer:RowSet( cMsg ,{op:empresa,op:ano,op:mes} )

WaitOff( @oWait )
If cQry:lastrec()>0
   XBrowse( cQry,"ANALISIS DE ASIENTOS CON DECIMALES > 2 DIGITOS" )
Else
   MsgStop( "NO EXISTE OPERACIONES A REVISAR","STOP")
EndIf
cQry:End()
Oye, el uso de la function TRUNCATE no te produce justo lo que dices que te ocurre?
o solo pretendes que te aparezcan los dos primeros decimales sin redondearlo, me refiero a usar esa function TRUNCATE ?]]>
CARLOS ATUNCAR wrote: Thu Apr 24, 2025 3:04 am Saludos cNavarro este es mi codigo usado

Code: Select all | Expand

cMsg := "SELECT mesv,t AS Aux,vou,cuenta,SUM(debes) AS debe,SUM(habers) AS haber "
cMsg += "FROM voucher_mov "
cMsg += "WHERE empresa=? AND periodo=? AND mesv=? AND ((debes != TRUNCATE(debes, 2)) OR (habers != TRUNCATE(habers, 2))) "
cMsg += "GROUP BY mesv,t,vou,cuenta "
cMsg += "ORDER BY mesv,t,vou"

cQry := aServer:RowSet( cMsg ,{op:empresa,op:ano,op:mes} )

WaitOff( @oWait )
If cQry:lastrec()>0
   XBrowse( cQry,"ANALISIS DE ASIENTOS CON DECIMALES > 2 DIGITOS" )
Else
   MsgStop( "NO EXISTE OPERACIONES A REVISAR","STOP")
EndIf
cQry:End()
Oye, el uso de la function TRUNCATE no te produce justo lo que dices que te ocurre?
o solo pretendes que te aparezcan los dos primeros decimales sin redondearlo, me refiero a usar esa function TRUNCATE ?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: xbrowse() problema con los decimales al enviar a Excel :: Reply by CARLOS ATUNCAR]]> 2025-04-24T17:44:41-06:00 2025-04-24T17:44:41-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45640&p=279165#p279165 <![CDATA[FiveWin para Harbour/xHarbour :: Re: xbrowse() problema con los decimales al enviar a Excel :: Reply by CARLOS ATUNCAR]]> 2025-04-24T17:46:03-06:00 2025-04-24T17:46:03-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45640&p=279166#p279166
Antonio Linares wrote: Thu Apr 24, 2025 6:10 am
CARLOS ATUNCAR wrote: Tue Apr 22, 2025 9:25 pm tengo una pantalla en XBROWSE() donde hay dos columnas numericas con 4 posiciones en los decimales y al enviarlo al excel lo envia con 4 posiciones en los decimales pero redondeados a 2
ejemplo
443.4784 en excel sale 443.4800

alguna solución hay que configurar algo
Estas usando SET DECIMALS TO 4 ?
no lo estoy usando pruebo haber si se soluciona]]>
Antonio Linares wrote: Thu Apr 24, 2025 6:10 am
CARLOS ATUNCAR wrote: Tue Apr 22, 2025 9:25 pm tengo una pantalla en XBROWSE() donde hay dos columnas numericas con 4 posiciones en los decimales y al enviarlo al excel lo envia con 4 posiciones en los decimales pero redondeados a 2
ejemplo
443.4784 en excel sale 443.4800

alguna solución hay que configurar algo
Estas usando SET DECIMALS TO 4 ?
no lo estoy usando pruebo haber si se soluciona]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: xbrowse() problema con los decimales al enviar a Excel :: Reply by cnavarro]]> 2025-04-24T20:01:02-06:00 2025-04-24T20:01:02-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45640&p=279169#p279169 viewtopic.php?p=279144#p279144]]> viewtopic.php?p=279144#p279144]]> <![CDATA[FiveWin para Harbour/xHarbour :: VISUAL FIVEWIN :: Author claudio.leiva]]> 2025-04-24T10:36:45-06:00 2025-04-24T10:36:45-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45643&p=279157#p279157 o algo parecido
no es indispensable que FIVEWIN lo tubiera.. ??

quedo atto. a los comentarios
saludos]]>
o algo parecido
no es indispensable que FIVEWIN lo tubiera.. ??

quedo atto. a los comentarios
saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: VISUAL FIVEWIN :: Reply by karinha]]> 2025-04-24T11:26:06-06:00 2025-04-24T11:26:06-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45643&p=279158#p279158
http://visualfivewin.blogspot.com/

Regards, saludos.]]>

http://visualfivewin.blogspot.com/

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: VISUAL FIVEWIN :: Reply by Antonio Linares]]> 2025-04-24T12:06:21-06:00 2025-04-24T12:06:21-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45643&p=279159#p279159

Le he enviado un email a Patrick

https://www.geocities.ws/ksfanhk/freeware.htm]]>


Le he enviado un email a Patrick

https://www.geocities.ws/ksfanhk/freeware.htm]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: VISUAL FIVEWIN :: Reply by Antonio Linares]]> 2025-04-24T12:18:12-06:00 2025-04-24T12:18:12-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45643&p=279160#p279160
https://github.com/FiveTechSoft/FWH_too ... /jkide.zip

Tal vez alguien tiene una versión más reciente ?

Gracias!]]>

https://github.com/FiveTechSoft/FWH_too ... /jkide.zip

Tal vez alguien tiene una versión más reciente ?

Gracias!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: VISUAL FIVEWIN :: Reply by claudio.leiva]]> 2025-04-24T13:09:11-06:00 2025-04-24T13:09:11-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45643&p=279162#p279162 tendremos que crear algo al los tiempos de HOY ?]]> tendremos que crear algo al los tiempos de HOY ?]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: VISUAL FIVEWIN :: Reply by Antonio Linares]]> 2025-04-24T21:16:48-06:00 2025-04-24T21:16:48-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45643&p=279171#p279171
Puedes ir probándola y agradecemos tu feedback]]>

Puedes ir probándola y agradecemos tu feedback]]>
<![CDATA[FiveWin para Harbour/xHarbour :: oFTP:Directory() no devuelve los archivos que existem :: Author Enrrique Vertiz]]> 2025-04-14T06:44:11-06:00 2025-04-14T06:44:11-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45621&p=278977#p278977
Me conecto a un FTP y trato de obtener el listado de los archivos, pero siempre me devuelve en blanco, pero la carpeta tiene 13 archivos y los veo con Filezilla, ojo si hace la conexion, pero no lista nada, que puede ser, alguna ayuda ??

oInternet := TInternet():New()
IF oInternet == NIL
MsgStop("No se pudo inicializar TInternet().", "Error")
RETURN NIL
ENDIF

// Añadir FTP_PASSIVE_MODE es crucial
oFTP := tFtp():New( "ftp.ejemplo.net", oInternet, "user", "clave", 134217728 )
IF oFTP == NIL .OR. oFTP:hFTP == NIL
MsgStop( "No se pudo conectar al servidor FTP.", "Error de Conexión" )
oInternet:End()
RETURN NIL
ENDIF

aFiles := oFTP:Directory( )

aqui el aFiles no lo llena con los datos de los archivos, no lo uso hace tiempo, pero antes si funcionaba, no se que ha cambiado.
Gracias]]>

Me conecto a un FTP y trato de obtener el listado de los archivos, pero siempre me devuelve en blanco, pero la carpeta tiene 13 archivos y los veo con Filezilla, ojo si hace la conexion, pero no lista nada, que puede ser, alguna ayuda ??

oInternet := TInternet():New()
IF oInternet == NIL
MsgStop("No se pudo inicializar TInternet().", "Error")
RETURN NIL
ENDIF

// Añadir FTP_PASSIVE_MODE es crucial
oFTP := tFtp():New( "ftp.ejemplo.net", oInternet, "user", "clave", 134217728 )
IF oFTP == NIL .OR. oFTP:hFTP == NIL
MsgStop( "No se pudo conectar al servidor FTP.", "Error de Conexión" )
oInternet:End()
RETURN NIL
ENDIF

aFiles := oFTP:Directory( )

aqui el aFiles no lo llena con los datos de los archivos, no lo uso hace tiempo, pero antes si funcionaba, no se que ha cambiado.
Gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by acuellar]]> 2025-04-14T08:29:43-06:00 2025-04-14T08:29:43-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45621&p=278978#p278978
Intenta así

Code: Select all | Expand

#include "FiveWin.ch"
*
function Main()
   aFiles:={}
   cusuario:="user"
   cpassword:="pass"
   cftpsite:="dominio.com"
   
        oCon:=Turl():New("ftp://"+cusuario+":"+cpassword+"@"+cftpsite)
        oFTP:= TIpClientFtp():New(oCon, .f.)
        oFTP:open()
        aFiles:=oFtp:ListFiles("data\*.*")
        If Len(aFiles)=0
          msgstop("No se pudo","Acceso FTP")
        Else
          xBrowse(aFiles)
        endif
        oftp:close()
Return nil
]]>

Intenta así

Code: Select all | Expand

#include "FiveWin.ch"
*
function Main()
   aFiles:={}
   cusuario:="user"
   cpassword:="pass"
   cftpsite:="dominio.com"
   
        oCon:=Turl():New("ftp://"+cusuario+":"+cpassword+"@"+cftpsite)
        oFTP:= TIpClientFtp():New(oCon, .f.)
        oFTP:open()
        aFiles:=oFtp:ListFiles("data\*.*")
        If Len(aFiles)=0
          msgstop("No se pudo","Acceso FTP")
        Else
          xBrowse(aFiles)
        endif
        oftp:close()
Return nil
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by Enrrique Vertiz]]> 2025-04-14T11:34:07-06:00 2025-04-14T11:34:07-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45621&p=278979#p278979
En esta linea: aFiles:=oFtp:ListFiles("*.*")
Me da este error (abajo adjunto), mientras reviso el foro (ya empece antes de escribir pero aun no encuentro nada) voy a revisar la clase de Javier Lloris creo que por ahi esta el camino ... tendras idea de como solucionarlo ?? trabajo con xHarbour y si estan enlazadas las librerias RTL y TIP de xHarbour ... gracias

Application
===========
Path and name: D:\Fwh\Fwh2501\samples\ftpdir03.exe (32 bits)
Size: 4,266,496 bytes
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)
FiveWin version: FWH 25.01
C compiler version: Borland/Embarcadero C++ 7.7 (32-bit)
Windows 11 64 Bits, version: 6.2, Build 9200

Time from start: 0 hours 0 mins 0 secs
Error occurred at: 04/14/25, 12:06:00
Error description: Error BASE/3012 Argument error: INETSENDALL
Args:
[ 1] = U
[ 2] = C PASV

[ 3] = N 6

Stack Calls
===========
Called from: => INETSENDALL( 0 )
Called from: source\tip\client.prg => TIPCLIENTFTP:INETSENDALL( 0 )
Called from: source\tip\ftpcln.prg => TIPCLIENTFTP:PASV( 0 )
Called from: source\tip\ftpcln.prg => TIPCLIENTFTP:LIST( 0 )
Called from: source\tip\ftpcln.prg => TIPCLIENTFTP:LISTFILES( 0 )
Called from: ftpdir03.prg => MAIN( 9 )]]>

En esta linea: aFiles:=oFtp:ListFiles("*.*")
Me da este error (abajo adjunto), mientras reviso el foro (ya empece antes de escribir pero aun no encuentro nada) voy a revisar la clase de Javier Lloris creo que por ahi esta el camino ... tendras idea de como solucionarlo ?? trabajo con xHarbour y si estan enlazadas las librerias RTL y TIP de xHarbour ... gracias

Application
===========
Path and name: D:\Fwh\Fwh2501\samples\ftpdir03.exe (32 bits)
Size: 4,266,496 bytes
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)
FiveWin version: FWH 25.01
C compiler version: Borland/Embarcadero C++ 7.7 (32-bit)
Windows 11 64 Bits, version: 6.2, Build 9200

Time from start: 0 hours 0 mins 0 secs
Error occurred at: 04/14/25, 12:06:00
Error description: Error BASE/3012 Argument error: INETSENDALL
Args:
[ 1] = U
[ 2] = C PASV

[ 3] = N 6

Stack Calls
===========
Called from: => INETSENDALL( 0 )
Called from: source\tip\client.prg => TIPCLIENTFTP:INETSENDALL( 0 )
Called from: source\tip\ftpcln.prg => TIPCLIENTFTP:PASV( 0 )
Called from: source\tip\ftpcln.prg => TIPCLIENTFTP:LIST( 0 )
Called from: source\tip\ftpcln.prg => TIPCLIENTFTP:LISTFILES( 0 )
Called from: ftpdir03.prg => MAIN( 9 )]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by Enrrique Vertiz]]> 2025-04-14T11:34:11-06:00 2025-04-14T11:34:11-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45621&p=278980#p278980
En esta linea: aFiles:=oFtp:ListFiles("*.*")
Me da este error (abajo adjunto), mientras reviso el foro (ya empece antes de escribir pero aun no encuentro nada) voy a revisar la clase de Javier Lloris creo que por ahi esta el camino ... tendras idea de como solucionarlo ?? trabajo con xHarbour y si estan enlazadas las librerias RTL y TIP de xHarbour ... gracias

Application
===========
Path and name: D:\Fwh\Fwh2501\samples\ftpdir03.exe (32 bits)
Size: 4,266,496 bytes
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)
FiveWin version: FWH 25.01
C compiler version: Borland/Embarcadero C++ 7.7 (32-bit)
Windows 11 64 Bits, version: 6.2, Build 9200

Time from start: 0 hours 0 mins 0 secs
Error occurred at: 04/14/25, 12:06:00
Error description: Error BASE/3012 Argument error: INETSENDALL
Args:
[ 1] = U
[ 2] = C PASV

[ 3] = N 6

Stack Calls
===========
Called from: => INETSENDALL( 0 )
Called from: source\tip\client.prg => TIPCLIENTFTP:INETSENDALL( 0 )
Called from: source\tip\ftpcln.prg => TIPCLIENTFTP:PASV( 0 )
Called from: source\tip\ftpcln.prg => TIPCLIENTFTP:LIST( 0 )
Called from: source\tip\ftpcln.prg => TIPCLIENTFTP:LISTFILES( 0 )
Called from: ftpdir03.prg => MAIN( 9 )]]>

En esta linea: aFiles:=oFtp:ListFiles("*.*")
Me da este error (abajo adjunto), mientras reviso el foro (ya empece antes de escribir pero aun no encuentro nada) voy a revisar la clase de Javier Lloris creo que por ahi esta el camino ... tendras idea de como solucionarlo ?? trabajo con xHarbour y si estan enlazadas las librerias RTL y TIP de xHarbour ... gracias

Application
===========
Path and name: D:\Fwh\Fwh2501\samples\ftpdir03.exe (32 bits)
Size: 4,266,496 bytes
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)
FiveWin version: FWH 25.01
C compiler version: Borland/Embarcadero C++ 7.7 (32-bit)
Windows 11 64 Bits, version: 6.2, Build 9200

Time from start: 0 hours 0 mins 0 secs
Error occurred at: 04/14/25, 12:06:00
Error description: Error BASE/3012 Argument error: INETSENDALL
Args:
[ 1] = U
[ 2] = C PASV

[ 3] = N 6

Stack Calls
===========
Called from: => INETSENDALL( 0 )
Called from: source\tip\client.prg => TIPCLIENTFTP:INETSENDALL( 0 )
Called from: source\tip\ftpcln.prg => TIPCLIENTFTP:PASV( 0 )
Called from: source\tip\ftpcln.prg => TIPCLIENTFTP:LIST( 0 )
Called from: source\tip\ftpcln.prg => TIPCLIENTFTP:LISTFILES( 0 )
Called from: ftpdir03.prg => MAIN( 9 )]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by acuellar]]> 2025-04-14T12:59:07-06:00 2025-04-14T12:59:07-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45621&p=278981#p278981
Utilizo MSVC22/BCC74 con Harbour x64]]>

Utilizo MSVC22/BCC74 con Harbour x64]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by Enrrique Vertiz]]> 2025-04-14T13:32:50-06:00 2025-04-14T13:32:50-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45621&p=278982#p278982 <![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by karinha]]> 2025-04-15T06:43:24-06:00 2025-04-15T06:43:24-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45621&p=278987#p278987
https://www.hamor.ro/distr_ext/Doc/xHb/ ... _f.en.html

http://www.pctoledo.com.br/forum/viewto ... =4&t=13656

https://github.com/harbour/core/blob/ma ... ftpcli.prg

https://github.com/harbour/core/blob/ma ... mtpcli.prg

Regards, saludos.]]>

https://www.hamor.ro/distr_ext/Doc/xHb/ ... _f.en.html

http://www.pctoledo.com.br/forum/viewto ... =4&t=13656

https://github.com/harbour/core/blob/ma ... ftpcli.prg

https://github.com/harbour/core/blob/ma ... mtpcli.prg

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by CARLOS ATUNCAR]]> 2025-04-15T08:59:55-06:00 2025-04-15T08:59:55-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45621&p=278989#p278989 <![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by Enrrique Vertiz]]> 2025-04-15T15:42:44-06:00 2025-04-15T15:42:44-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45621&p=278991#p278991
Gracias Carlos, pero me pasa con los 3 proveedores mas grandes aqui Movistar, Claro y Win, cubren el 90% (aprox) de las instalaciones ... ademas Filezilla si me deja y una prueba con Chilkat tambien.

Joao gracias por los links revisare 1x1 a ver si encuentro luz ...]]>

Gracias Carlos, pero me pasa con los 3 proveedores mas grandes aqui Movistar, Claro y Win, cubren el 90% (aprox) de las instalaciones ... ademas Filezilla si me deja y una prueba con Chilkat tambien.

Joao gracias por los links revisare 1x1 a ver si encuentro luz ...]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by cmsoft]]> 2025-04-16T06:15:24-06:00 2025-04-16T06:15:24-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45621&p=279000#p279000

Code: Select all | Expand

FUNCTION Main()
LOCAL  aFiles:={},   cusuario:="user@dominio.com",   cpassword:="pass",   cftpsite:="ftp://dominio.com", oUrl
oUrl := tUrl():New( cftpsite )
oUrl:cUserid := cusuario
oUrl:cPassword := cpassword
oFTP := tIPClientFtp():New( oUrl, .t. )
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .t.
oFtp:bTrace := {|| nil}
oFTP:Open()
IF oFtp <> NIL
   aFiles:=oFtp:ListFiles("data\*.*")
   xbrowse(aFiles)
ENDIF
RETURN nil
]]>

Code: Select all | Expand

FUNCTION Main()
LOCAL  aFiles:={},   cusuario:="user@dominio.com",   cpassword:="pass",   cftpsite:="ftp://dominio.com", oUrl
oUrl := tUrl():New( cftpsite )
oUrl:cUserid := cusuario
oUrl:cPassword := cpassword
oFTP := tIPClientFtp():New( oUrl, .t. )
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .t.
oFtp:bTrace := {|| nil}
oFTP:Open()
IF oFtp <> NIL
   aFiles:=oFtp:ListFiles("data\*.*")
   xbrowse(aFiles)
ENDIF
RETURN nil
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by Enrrique Vertiz]]> 2025-04-16T16:12:37-06:00 2025-04-16T16:12:37-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45621&p=279019#p279019
Cree un PRG solo con lo que me enviaste y me salio este mensaje:

Error BASE/1081 Operation not supported: TIPCLIENTFTP:New()

En esta linea:

oFTP := tIPClientFtp():New( oUrl, .t. )]]>

Cree un PRG solo con lo que me enviaste y me salio este mensaje:

Error BASE/1081 Operation not supported: TIPCLIENTFTP:New()

En esta linea:

oFTP := tIPClientFtp():New( oUrl, .t. )]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by cmsoft]]> 2025-04-17T13:00:45-06:00 2025-04-17T13:00:45-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45621&p=279032#p279032 En mi caso uso harbour y tengo que incluir la libreria hbtip
En xharbour desconozco si existe]]>
En mi caso uso harbour y tengo que incluir la libreria hbtip
En xharbour desconozco si existe]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by Enrrique Vertiz]]> 2025-04-17T14:01:17-06:00 2025-04-17T14:01:17-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45621&p=279034#p279034
Uso xHarbour y enlazo una LIB de nombre tip.lib, pero no tengo idea de si es lo mismo, gracias nuevamente.]]>

Uso xHarbour y enlazo una LIB de nombre tip.lib, pero no tengo idea de si es lo mismo, gracias nuevamente.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by cmsoft]]> 2025-04-17T14:55:55-06:00 2025-04-17T14:55:55-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45621&p=279036#p279036 No puedo probarlo porque no tengo xharbour, pero entiendo que sería algo asi:

Code: Select all | Expand

FUNCTION Main()
LOCAL  aFiles:={},   cusuario:="user@dominio.com",   cpassword:="pass",   cftpsite:="ftp://dominio.com", oUrl, oCredentials
oUrl := tUrl():New( cftpsite )
oCredentials := tIPCredentials():New()
oCredentials:cUserid := cusuario
oCredentials:cPassword := cpassword
oFTP := tIPClientFtp():New( oUrl, .t., oCredentials )
oFTP:nConnTimeout := 20000
oFTP:Open()
IF oFtp <> NIL
   aFiles:=oFtp:ListFiles("data\*.*")
   xbrowse(aFiles)
ENDIF
RETURN nil
No se si funcione, porque no lo probe, pero aca tenes el link por si te interesa mirar.
https://github.com/xHarbour-org/xharbou ... client.prg]]>
No puedo probarlo porque no tengo xharbour, pero entiendo que sería algo asi:

Code: Select all | Expand

FUNCTION Main()
LOCAL  aFiles:={},   cusuario:="user@dominio.com",   cpassword:="pass",   cftpsite:="ftp://dominio.com", oUrl, oCredentials
oUrl := tUrl():New( cftpsite )
oCredentials := tIPCredentials():New()
oCredentials:cUserid := cusuario
oCredentials:cPassword := cpassword
oFTP := tIPClientFtp():New( oUrl, .t., oCredentials )
oFTP:nConnTimeout := 20000
oFTP:Open()
IF oFtp <> NIL
   aFiles:=oFtp:ListFiles("data\*.*")
   xbrowse(aFiles)
ENDIF
RETURN nil
No se si funcione, porque no lo probe, pero aca tenes el link por si te interesa mirar.
https://github.com/xHarbour-org/xharbou ... client.prg]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by Enrrique Vertiz]]> 2025-04-17T16:59:30-06:00 2025-04-17T16:59:30-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45621&p=279039#p279039
Application
===========
Path and name: D:\Fwh\Fwh2501\samples\ftpdir04.exe (32 bits)
Size: 4,267,520 bytes
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)
FiveWin version: FWH 25.01
C compiler version: Borland/Embarcadero C++ 7.7 (32-bit)
Windows 11 64 Bits, version: 6.2, Build 9200

Time from start: 0 hours 0 mins 0 secs
Error occurred at: 04/17/25, 17:50:45
Error description: Error BASE/1081 Operation not supported: TIPCLIENTFTP:New()
Args:
[ 1] = O TIPCLIENTFTP
[ 2] = C


El codigo:

#include "FiveWin.ch"

FUNCTION Main()
LOCAL aFiles:={}, cusuario:="usuario", cpassword:="pass", cftpsite:="ftp.xxx.net", oUrl, oFtp, oCredentials
oUrl := tUrl():New( cftpsite )
oCredentials := tIPCredentials():New()
oCredentials:cUserid := cusuario
oCredentials:cPassword := cpassword
oFTP := tIPClientFtp():New( oUrl, .t., oCredentials )
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .t.
oFtp:bTrace := {|| nil}
oFTP:Open()
IF oFtp <> NIL
aFiles:=oFtp:ListFiles("*.*")
xbrowse(aFiles)
ENDIF
RETURN nil

Seguire viendo, porque si funciona en Hb y no en xHb]]>

Application
===========
Path and name: D:\Fwh\Fwh2501\samples\ftpdir04.exe (32 bits)
Size: 4,267,520 bytes
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)
FiveWin version: FWH 25.01
C compiler version: Borland/Embarcadero C++ 7.7 (32-bit)
Windows 11 64 Bits, version: 6.2, Build 9200

Time from start: 0 hours 0 mins 0 secs
Error occurred at: 04/17/25, 17:50:45
Error description: Error BASE/1081 Operation not supported: TIPCLIENTFTP:New()
Args:
[ 1] = O TIPCLIENTFTP
[ 2] = C


El codigo:

#include "FiveWin.ch"

FUNCTION Main()
LOCAL aFiles:={}, cusuario:="usuario", cpassword:="pass", cftpsite:="ftp.xxx.net", oUrl, oFtp, oCredentials
oUrl := tUrl():New( cftpsite )
oCredentials := tIPCredentials():New()
oCredentials:cUserid := cusuario
oCredentials:cPassword := cpassword
oFTP := tIPClientFtp():New( oUrl, .t., oCredentials )
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .t.
oFtp:bTrace := {|| nil}
oFTP:Open()
IF oFtp <> NIL
aFiles:=oFtp:ListFiles("*.*")
xbrowse(aFiles)
ENDIF
RETURN nil

Seguire viendo, porque si funciona en Hb y no en xHb]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by CARLOS ATUNCAR]]> 2025-04-22T10:07:05-06:00 2025-04-22T10:07:05-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45621&p=279117#p279117
Enrrique Vertiz wrote: Tue Apr 15, 2025 9:42 pm Saludos

Gracias Carlos, pero me pasa con los 3 proveedores mas grandes aqui Movistar, Claro y Win, cubren el 90% (aprox) de las instalaciones ... ademas Filezilla si me deja y una prueba con Chilkat tambien.

Joao gracias por los links revisare 1x1 a ver si encuentro luz ...
si los mismo sintomas tenia con wow y tuve que cambiar el metodo de actualizacion para los clientes con este proveedor a descargar desde la pagina un actualizador y hacer una reinstalacion para actualizar la aplicacion y me cambie a Claro y no tengo ese problema y no recomiendo ni wow, tu servidor ftp esta en una vps o hosting revisa si no esta bloqueado el ip, si gustas podemos probar desde mi pc por anydesk para descartar]]>
Enrrique Vertiz wrote: Tue Apr 15, 2025 9:42 pm Saludos

Gracias Carlos, pero me pasa con los 3 proveedores mas grandes aqui Movistar, Claro y Win, cubren el 90% (aprox) de las instalaciones ... ademas Filezilla si me deja y una prueba con Chilkat tambien.

Joao gracias por los links revisare 1x1 a ver si encuentro luz ...
si los mismo sintomas tenia con wow y tuve que cambiar el metodo de actualizacion para los clientes con este proveedor a descargar desde la pagina un actualizador y hacer una reinstalacion para actualizar la aplicacion y me cambie a Claro y no tengo ese problema y no recomiendo ni wow, tu servidor ftp esta en una vps o hosting revisa si no esta bloqueado el ip, si gustas podemos probar desde mi pc por anydesk para descartar]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by Enrrique Vertiz]]> 2025-04-22T15:22:25-06:00 2025-04-22T15:22:25-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45621&p=279121#p279121
Gracias, ya consegui hacerlo funcionar]]>

Gracias, ya consegui hacerlo funcionar]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by CARLOS ATUNCAR]]> 2025-04-24T17:55:54-06:00 2025-04-24T17:55:54-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45621&p=279167#p279167 <![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by Enrrique Vertiz]]> 2025-04-24T21:57:17-06:00 2025-04-24T21:57:17-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45621&p=279172#p279172
#include "FiveWin.ch"
#include "Struct.ch"

#define INTERNET_SERVICE_FTP 1
#define FTP_PORT 21

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

CLASS TFTP

DATA oInternet // TInternet container object
DATA cSite // URL address
DATA hFTP // handle of the FTP connection
DATA cUserName // user name to login
DATA cPassword // password to login

METHOD New( cFTPSite, oInternet, cUserName, cPassword ) CONSTRUCTOR // generic constructor

METHOD End() // generic destructor

METHOD DeleteFile( cFileName ) // deletes a remote FTP file

METHOD Directory( cMask ) // as Clipper Directory() but on a FTP site!

METHOD RenameFile( cOldFileName, cNewFileName ) // renames a file

METHOD SetCurrentDirectory( cDirName ) INLINE ;
FtpSetCurrentDirectory( ::hFTP, cDirName )

METHOD CreateDirectory( cDirName ) INLINE ;
FtpCreateDirectory( ::hFTP, cDirName )


ENDCLASS

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

//METHOD New( cFTPSite, oInternet, cUserName, cPassword ) CLASS TFTP
//
// ::oInternet = oInternet
// ::cSite = cFTPSite
// ::cUserName = cUserName
// ::cPassword = cPassword
//
// if oInternet:hSession != nil
// ::hFTP = InternetConnect( oInternet:hSession, cFTPSite, FTP_PORT,;
// ::cUserName, ::cPassword,;
// INTERNET_SERVICE_FTP, 0, 0 )
// AAdd( oInternet:aFTPs, Self )
// endif
//
//return Self

METHOD New( cFTPSite, oInternet, cUserName, cPassword, nFlags ) CLASS TFTP

DEFAULT nFlags := INTERNET_FLAG_PASSIVE

::oInternet = oInternet
::cSite = cFTPSite
::cUserName = cUserName
::cPassword = cPassword

if oInternet:hSession != nil
::hFTP = InternetConnect( oInternet:hSession, cFTPSite, FTP_PORT,;
::cUserName, ::cPassword,;
INTERNET_SERVICE_FTP, nFlags, 0 )
AAdd( oInternet:aFTPs, Self )
endif

return Self

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

METHOD End() CLASS TFTP

if ::hFTP != nil
InternetCloseHandle( ::hFTP )
::hFTP = nil
endif

return nil

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

METHOD DeleteFile( cFileName ) CLASS TFTP

return If( ::hFTP != nil, FtpDeleteFile( ::hFTP, cFileName ), .f. )

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

METHOD Directory( cMask ) CLASS TFTP

local hFTPDir, aFiles := {}
local oWin32FindData, cBuffer

DEFAULT cMask := "*.*"

STRUCT oWin32FindData
MEMBER nFileAttributes AS DWORD
MEMBER nCreationTime AS STRING LEN 8
MEMBER nLastReadAccess AS STRING LEN 8
MEMBER nLastWriteAccess AS STRING LEN 8
MEMBER nSizeHight AS DWORD
MEMBER nSizeLow AS DWORD
MEMBER nReserved0 AS DWORD
MEMBER nReserved1 AS DWORD
MEMBER cFileName AS STRING LEN 260
MEMBER cAltName AS STRING LEN 14
MEMBER dummy AS STRING LEN 50
ENDSTRUCT

if ::hFTP != nil
cBuffer = oWin32FindData:cBuffer
hFTPDir = FtpFindFirstFile( ::hFTP, cMask, @cBuffer, 0, 0 )
oWin32FindData:cBuffer = cBuffer
if ! Empty( oWin32FindData:cFileName )
AAdd( aFiles, { oWin32FindData:cFileName,;
oWin32FindData:nSizeLow,;
FileTimeToDate( oWin32FindData:nLastWriteAccess ),;
FileTimeToTime( oWin32FindData:nLastWriteAccess ) } )
while InternetFindNextFile( hFTPDir, @cBuffer )
oWin32FindData:cBuffer = cBuffer
AAdd( aFiles, { oWin32FindData:cFileName,;
oWin32FindData:nSizeLow,;
FileTimeToDate( oWin32FindData:nLastWriteAccess ),;
FileTimeToTime( oWin32FindData:nLastWriteAccess ) } )
end
endif
InternetCloseHandle( hFTPDir )
endif

return aFiles

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

METHOD RenameFile( cOldFileName, cNewFileName ) CLASS TFTP

return If( ::hFTP != nil, FtpRenameFile( ::hFTP, cOldFileName, cNewFileName ), .f. )]]>

#include "FiveWin.ch"
#include "Struct.ch"

#define INTERNET_SERVICE_FTP 1
#define FTP_PORT 21

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

CLASS TFTP

DATA oInternet // TInternet container object
DATA cSite // URL address
DATA hFTP // handle of the FTP connection
DATA cUserName // user name to login
DATA cPassword // password to login

METHOD New( cFTPSite, oInternet, cUserName, cPassword ) CONSTRUCTOR // generic constructor

METHOD End() // generic destructor

METHOD DeleteFile( cFileName ) // deletes a remote FTP file

METHOD Directory( cMask ) // as Clipper Directory() but on a FTP site!

METHOD RenameFile( cOldFileName, cNewFileName ) // renames a file

METHOD SetCurrentDirectory( cDirName ) INLINE ;
FtpSetCurrentDirectory( ::hFTP, cDirName )

METHOD CreateDirectory( cDirName ) INLINE ;
FtpCreateDirectory( ::hFTP, cDirName )


ENDCLASS

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

//METHOD New( cFTPSite, oInternet, cUserName, cPassword ) CLASS TFTP
//
// ::oInternet = oInternet
// ::cSite = cFTPSite
// ::cUserName = cUserName
// ::cPassword = cPassword
//
// if oInternet:hSession != nil
// ::hFTP = InternetConnect( oInternet:hSession, cFTPSite, FTP_PORT,;
// ::cUserName, ::cPassword,;
// INTERNET_SERVICE_FTP, 0, 0 )
// AAdd( oInternet:aFTPs, Self )
// endif
//
//return Self

METHOD New( cFTPSite, oInternet, cUserName, cPassword, nFlags ) CLASS TFTP

DEFAULT nFlags := INTERNET_FLAG_PASSIVE

::oInternet = oInternet
::cSite = cFTPSite
::cUserName = cUserName
::cPassword = cPassword

if oInternet:hSession != nil
::hFTP = InternetConnect( oInternet:hSession, cFTPSite, FTP_PORT,;
::cUserName, ::cPassword,;
INTERNET_SERVICE_FTP, nFlags, 0 )
AAdd( oInternet:aFTPs, Self )
endif

return Self

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

METHOD End() CLASS TFTP

if ::hFTP != nil
InternetCloseHandle( ::hFTP )
::hFTP = nil
endif

return nil

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

METHOD DeleteFile( cFileName ) CLASS TFTP

return If( ::hFTP != nil, FtpDeleteFile( ::hFTP, cFileName ), .f. )

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

METHOD Directory( cMask ) CLASS TFTP

local hFTPDir, aFiles := {}
local oWin32FindData, cBuffer

DEFAULT cMask := "*.*"

STRUCT oWin32FindData
MEMBER nFileAttributes AS DWORD
MEMBER nCreationTime AS STRING LEN 8
MEMBER nLastReadAccess AS STRING LEN 8
MEMBER nLastWriteAccess AS STRING LEN 8
MEMBER nSizeHight AS DWORD
MEMBER nSizeLow AS DWORD
MEMBER nReserved0 AS DWORD
MEMBER nReserved1 AS DWORD
MEMBER cFileName AS STRING LEN 260
MEMBER cAltName AS STRING LEN 14
MEMBER dummy AS STRING LEN 50
ENDSTRUCT

if ::hFTP != nil
cBuffer = oWin32FindData:cBuffer
hFTPDir = FtpFindFirstFile( ::hFTP, cMask, @cBuffer, 0, 0 )
oWin32FindData:cBuffer = cBuffer
if ! Empty( oWin32FindData:cFileName )
AAdd( aFiles, { oWin32FindData:cFileName,;
oWin32FindData:nSizeLow,;
FileTimeToDate( oWin32FindData:nLastWriteAccess ),;
FileTimeToTime( oWin32FindData:nLastWriteAccess ) } )
while InternetFindNextFile( hFTPDir, @cBuffer )
oWin32FindData:cBuffer = cBuffer
AAdd( aFiles, { oWin32FindData:cFileName,;
oWin32FindData:nSizeLow,;
FileTimeToDate( oWin32FindData:nLastWriteAccess ),;
FileTimeToTime( oWin32FindData:nLastWriteAccess ) } )
end
endif
InternetCloseHandle( hFTPDir )
endif

return aFiles

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

METHOD RenameFile( cOldFileName, cNewFileName ) CLASS TFTP

return If( ::hFTP != nil, FtpRenameFile( ::hFTP, cOldFileName, cNewFileName ), .f. )]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by Vikthor]]> 2025-04-15T17:42:57-06:00 2025-04-15T17:42:57-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45614&p=278992#p278992
¿ Hay algún manual de FivEdit ? ¿ Algún foro ?
cnavarro wrote: Tue Apr 08, 2025 10:30 pm Hola,
A partir de ahora, la descarga se podrá realizar en la siguiente url

https://github.com/cristobalnavarro/Tes ... ivedit.zip

Por favor informen de los problemas que puedan encontrar
Es posible que el explorador les indique "Descarga sospechosa", ignoren dicho mensaje debido a que el .zip contiene ficheros .exe y .dll
Saludos
]]>

¿ Hay algún manual de FivEdit ? ¿ Algún foro ?
cnavarro wrote: Tue Apr 08, 2025 10:30 pm Hola,
A partir de ahora, la descarga se podrá realizar en la siguiente url

https://github.com/cristobalnavarro/Tes ... ivedit.zip

Por favor informen de los problemas que puedan encontrar
Es posible que el explorador les indique "Descarga sospechosa", ignoren dicho mensaje debido a que el .zip contiene ficheros .exe y .dll
Saludos
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by cnavarro]]> 2025-04-15T22:48:51-06:00 2025-04-15T22:48:51-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45614&p=278994#p278994 En breve voy a publicar una nueva version de Fivedit con importantes novedades
Y, ya de paso, intentaré rescatar los videos que se hicieron en su momento, así como un foro para poder tener un mejor soporte del producto
Pero, tambien existe un servidor en discord al que os podéis apuntar
https://discord.gg/d2zyR8UY]]>
En breve voy a publicar una nueva version de Fivedit con importantes novedades
Y, ya de paso, intentaré rescatar los videos que se hicieron en su momento, así como un foro para poder tener un mejor soporte del producto
Pero, tambien existe un servidor en discord al que os podéis apuntar
https://discord.gg/d2zyR8UY]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by cnavarro]]> 2025-04-22T03:45:31-06:00 2025-04-22T03:45:31-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45614&p=279090#p279090 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by karinha]]> 2025-04-22T04:57:29-06:00 2025-04-22T04:57:29-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45614&p=279095#p279095
Regards, saludos.]]>

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by cnavarro]]> 2025-04-22T08:15:09-06:00 2025-04-22T08:15:09-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45614&p=279106#p279106 No puedo construir una version con Borland
Cual es el error que te da ?]]>
No puedo construir una version con Borland
Cual es el error que te da ?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by karinha]]> 2025-04-22T08:40:50-06:00 2025-04-22T08:40:50-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45614&p=279112#p279112
cnavarro wrote: Tue Apr 22, 2025 2:15 pm Estimado Joao
No puedo construir una version con Borland
Cual es el error que te da ?
https://imgur.com/BIEpra9

Image

Gracias,

Regards, saludos.]]>
cnavarro wrote: Tue Apr 22, 2025 2:15 pm Estimado Joao
No puedo construir una version con Borland
Cual es el error que te da ?
https://imgur.com/BIEpra9

Image

Gracias,

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by karinha]]> 2025-04-22T08:43:50-06:00 2025-04-22T08:43:50-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45614&p=279114#p279114

Code: Select all | Expand

Assinatura do problema:
  Nome do Evento de Problema:	APPCRASH
  Nome do Aplicativo:	fivedit.exe
  Versão do Aplicativo:	1.2.19.1
  Carimbo de Data/Hora do Aplicativo:	67685ef7
  Nome do Módulo de Falhas:	fivedit.exe
  Versão do Módulo de Falhas:	1.2.19.1
  Carimbo de Data/Hora do Módulo de Falhas:	67685ef7
  Código de Exceção:	c0000005
  Deslocamento de Exceção:	00170939
  Versão do sistema operacional:	6.1.7601.2.1.0.256.48
  Identificação da Localidade:	1046
  Informações Adicionais 1:	ae6e
  Informações Adicionais 2:	ae6eabe6810bdf4b1e76ea7fc685c8b1
  Informações Adicionais 3:	cc3c
  Informações Adicionais 4:	cc3ca0fc2d2d04aa014954e6cb57d46b

Leia nossa declaração de privacidade online:
  http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0416

Se a declaração de privacidade online não estiver disponível, leia nossa declaração de privacidade offline:
  C:\Windows\system32\pt-BR\erofflps.txt
Regards, saludos.]]>

Code: Select all | Expand

Assinatura do problema:
  Nome do Evento de Problema:	APPCRASH
  Nome do Aplicativo:	fivedit.exe
  Versão do Aplicativo:	1.2.19.1
  Carimbo de Data/Hora do Aplicativo:	67685ef7
  Nome do Módulo de Falhas:	fivedit.exe
  Versão do Módulo de Falhas:	1.2.19.1
  Carimbo de Data/Hora do Módulo de Falhas:	67685ef7
  Código de Exceção:	c0000005
  Deslocamento de Exceção:	00170939
  Versão do sistema operacional:	6.1.7601.2.1.0.256.48
  Identificação da Localidade:	1046
  Informações Adicionais 1:	ae6e
  Informações Adicionais 2:	ae6eabe6810bdf4b1e76ea7fc685c8b1
  Informações Adicionais 3:	cc3c
  Informações Adicionais 4:	cc3ca0fc2d2d04aa014954e6cb57d46b

Leia nossa declaração de privacidade online:
  http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0416

Se a declaração de privacidade online não estiver disponível, leia nossa declaração de privacidade offline:
  C:\Windows\system32\pt-BR\erofflps.txt
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by claudio.leiva]]> 2025-04-24T16:55:34-06:00 2025-04-24T16:55:34-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45614&p=279164#p279164
alguna solucion fivedit no corre en window7
no se porque
alguien tiene alguna idea..]]>

alguna solucion fivedit no corre en window7
no se porque
alguien tiene alguna idea..]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by cnavarro]]> 2025-04-24T19:57:15-06:00 2025-04-24T19:57:15-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45614&p=279168#p279168
claudio.leiva wrote: Thu Apr 24, 2025 10:55 pm buenas tardes

alguna solucion fivedit no corre en window7
no se porque
alguien tiene alguna idea..
Una pregunta, tienes instalado Visual Studio Community ? ( no te estoy diciendo que sea imprescindible, pero necesito saberlo para poder indicarte posibles soluciones )
Si no es asi, seguramente tengas que instalar los redistribuibles par VSC 2019 y para 2022
VSC 2019:
https://learn.microsoft.com/es-es/visua ... stribution]]>
claudio.leiva wrote: Thu Apr 24, 2025 10:55 pm buenas tardes

alguna solucion fivedit no corre en window7
no se porque
alguien tiene alguna idea..
Una pregunta, tienes instalado Visual Studio Community ? ( no te estoy diciendo que sea imprescindible, pero necesito saberlo para poder indicarte posibles soluciones )
Si no es asi, seguramente tengas que instalar los redistribuibles par VSC 2019 y para 2022
VSC 2019:
https://learn.microsoft.com/es-es/visua ... stribution]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by claudio.leiva]]> 2025-04-25T08:48:06-06:00 2025-04-25T08:48:06-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45614&p=279178#p279178 No estimado,, no lo tengo instalado..
pues no me deja en window7 32 bits,
saludos]]>
No estimado,, no lo tengo instalado..
pues no me deja en window7 32 bits,
saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by claudio.leiva]]> 2025-04-25T08:52:19-06:00 2025-04-25T08:52:19-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45614&p=279179#p279179 yo crei que era una herramienta independiente..
quedo atto.]]>
yo crei que era una herramienta independiente..
quedo atto.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by cnavarro]]> 2025-04-25T10:57:42-06:00 2025-04-25T10:57:42-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45614&p=279183#p279183 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by cnavarro]]> 2025-04-26T17:15:41-06:00 2025-04-26T17:15:41-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45614&p=279201#p279201 FIVEDIT 64 BITS, en Discord]]> FIVEDIT 64 BITS, en Discord]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by cnavarro]]> 2025-04-27T07:49:26-06:00 2025-04-27T07:49:26-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45614&p=279206#p279206 https://learn.microsoft.com/es-es/visua ... stribution]]> https://learn.microsoft.com/es-es/visua ... stribution]]> <![CDATA[FiveWin para Harbour/xHarbour :: Ejemplo chatptg :: Author jgabri]]> 2025-04-22T04:54:10-06:00 2025-04-22T04:54:10-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45638&p=279093#p279093
Alguien tiene algún ejemplo, funcionando con chatptg y chat.html ?

Un nsaludo y gracias

Borland bc77 - fwh 25.01 32 bits]]>

Alguien tiene algún ejemplo, funcionando con chatptg y chat.html ?

Un nsaludo y gracias

Borland bc77 - fwh 25.01 32 bits]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ejemplo chatptg :: Reply by Antonio Linares]]> 2025-04-22T08:23:41-06:00 2025-04-22T08:23:41-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45638&p=279109#p279109
webia.prg

Code: Select all | Expand

#include "FiveWin.ch"

REQUEST HB_CODEPAGE_ESWIN

function Main()

    local oWnd, oWebView
    local oGemini := TGemini():New()

    fw_SetUnicode( .F. )
    hb_SetCodePage( "ESWIN" )

    DEFINE WINDOW oWnd TITLE "Chat AI" SIZE 650, 800

    oWebView = TWebView2():New( oWnd )

    oWebView:SetHtml( hb_memoRead( "chat.html" ) )
    oWebView:bOnBind = { | aInfo, cAnswer | oGemini:Send( aInfo[ 1 ] ),;
                                            cAnswer := "sendResponse('" + hb_Utf8ToStr( oGemini:getValue() ) + "')",;
                                            cAnswer := StrTran( cAnswer, Chr( 10 ), "" ),;
                                            oWebView:Eval( cAnswer ) }

    ACTIVATE WINDOW oWnd CENTER ;
       ON RESIZE oWebView:SetSize( nWidth, nHeight )

    oGemini:End()

return nil    
]]>

webia.prg

Code: Select all | Expand

#include "FiveWin.ch"

REQUEST HB_CODEPAGE_ESWIN

function Main()

    local oWnd, oWebView
    local oGemini := TGemini():New()

    fw_SetUnicode( .F. )
    hb_SetCodePage( "ESWIN" )

    DEFINE WINDOW oWnd TITLE "Chat AI" SIZE 650, 800

    oWebView = TWebView2():New( oWnd )

    oWebView:SetHtml( hb_memoRead( "chat.html" ) )
    oWebView:bOnBind = { | aInfo, cAnswer | oGemini:Send( aInfo[ 1 ] ),;
                                            cAnswer := "sendResponse('" + hb_Utf8ToStr( oGemini:getValue() ) + "')",;
                                            cAnswer := StrTran( cAnswer, Chr( 10 ), "" ),;
                                            oWebView:Eval( cAnswer ) }

    ACTIVATE WINDOW oWnd CENTER ;
       ON RESIZE oWebView:SetSize( nWidth, nHeight )

    oGemini:End()

return nil    
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ejemplo chatptg :: Reply by jgabri]]> 2025-04-22T14:29:58-06:00 2025-04-22T14:29:58-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45638&p=279120#p279120 ]]> ]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Ejemplo chatptg :: Reply by JoseAlvarez]]> 2025-04-26T06:23:15-06:00 2025-04-26T06:23:15-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45638&p=279194#p279194
Disculpe mi total desconocimiento sobre este tema:

El código que muestra es para llamar a la IA desde nuestras aplicaciones? el llamado es de forma general o se puede adaptar a lo nuestro? o sea alimentar a la IA para que responda a los usuarios sus inquietudes sobre nuestra app? a partir de que version de FW se incluye?

Gracias!.]]>

Disculpe mi total desconocimiento sobre este tema:

El código que muestra es para llamar a la IA desde nuestras aplicaciones? el llamado es de forma general o se puede adaptar a lo nuestro? o sea alimentar a la IA para que responda a los usuarios sus inquietudes sobre nuestra app? a partir de que version de FW se incluye?

Gracias!.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ejemplo chatptg :: Reply by Antonio Linares]]> 2025-04-26T08:13:34-06:00 2025-04-26T08:13:34-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45638&p=279195#p279195
Las Clases de inteligencia artificial TOpenAI, TGemini y TOllama están disponibles desde FWH 25.01

Puedes hacerles cualquier tipo de preguntas o por ejemplo darle los datos de un balance de situación y pedirle que lo analice, que valore la evolución de ventas, que traduzca, que resuma, etc.]]>

Las Clases de inteligencia artificial TOpenAI, TGemini y TOllama están disponibles desde FWH 25.01

Puedes hacerles cualquier tipo de preguntas o por ejemplo darle los datos de un balance de situación y pedirle que lo analice, que valore la evolución de ventas, que traduzca, que resuma, etc.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ejemplo chatptg :: Reply by JoseAlvarez]]> 2025-04-26T13:34:40-06:00 2025-04-26T13:34:40-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45638&p=279199#p279199
Excelente.

Toca actualizar!]]>

Excelente.

Toca actualizar!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ejemplo chatptg :: Reply by jgabri]]> 2025-04-28T02:34:04-06:00 2025-04-28T02:34:04-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45638&p=279216#p279216 Ánimo a todos los grupos actualizar a última versión de fwh, fivewin no ha dado mucho y ahora tenemos que estar más unidos y avanzar.

Un saludo y mil gracias 🫂😊]]>
Ánimo a todos los grupos actualizar a última versión de fwh, fivewin no ha dado mucho y ahora tenemos que estar más unidos y avanzar.

Un saludo y mil gracias 🫂😊]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Combobox con marca visual de obligatoriedad :: Author paquitohm]]> 2025-04-24T04:26:25-06:00 2025-04-24T08:17:44-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279148#p279148
Quisiera que en un Combobox, cuando no tenga nada seleccionado, se pinte un triangulito significando "obligatorio seleccionar"
Le estaba metiendo mano a la clase Combobox pero no hay manera.


Esta caracteristica ya la tengo en Get y se ve asi:
Image

Alguna idea ? Gracias]]>

Quisiera que en un Combobox, cuando no tenga nada seleccionado, se pinte un triangulito significando "obligatorio seleccionar"
Le estaba metiendo mano a la clase Combobox pero no hay manera.


Esta caracteristica ya la tengo en Get y se ve asi:
Image

Alguna idea ? Gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by Antonio Linares]]> 2025-04-24T05:57:56-06:00 2025-04-24T05:57:56-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279150#p279150
Es un combobox editable ?]]>

Es un combobox editable ?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by karinha]]> 2025-04-24T06:52:54-06:00 2025-04-24T06:52:54-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279151#p279151
https://fivewin.com.br/index.php?/topic ... et/page/3/

Regards, saludos.]]>

https://fivewin.com.br/index.php?/topic ... et/page/3/

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by paquitohm]]> 2025-04-24T08:16:16-06:00 2025-04-24T09:18:36-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279152#p279152
Antonio Linares wrote: Thu Apr 24, 2025 11:57 am Paco,

Es un combobox editable ?
Antonio,

No es editable.

[ACTUALIZADO] Ya parece que me van saliendo cositas. Ahora despues informo mejor]]>
Antonio Linares wrote: Thu Apr 24, 2025 11:57 am Paco,

Es un combobox editable ?
Antonio,

No es editable.

[ACTUALIZADO] Ya parece que me van saliendo cositas. Ahora despues informo mejor]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by cnavarro]]> 2025-04-24T08:32:22-06:00 2025-04-24T08:32:22-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279153#p279153 La primera que intentaría sería en el objeto oCombo:oGet meterle un action { || .T- } que no hiciese nada y ponerle el bitmap que consideres, poniéndolo y quitándolo o cambiándolo según la validacion que consideres, lo único es que ese bitmap aparecería a la derecha ( en principio )
Dime qué te parece]]>
La primera que intentaría sería en el objeto oCombo:oGet meterle un action { || .T- } que no hiciese nada y ponerle el bitmap que consideres, poniéndolo y quitándolo o cambiándolo según la validacion que consideres, lo único es que ese bitmap aparecería a la derecha ( en principio )
Dime qué te parece]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by paquitohm]]> 2025-04-24T09:19:58-06:00 2025-04-24T09:19:58-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279155#p279155
cnavarro wrote: Thu Apr 24, 2025 2:32 pm Paquito, se me ocurren varias posibilidades
La primera que intentaría sería en el objeto oCombo:oGet meterle un action { || .T- } que no hiciese nada y ponerle el bitmap que consideres, poniéndolo y quitándolo o cambiándolo según la validacion que consideres, lo único es que ese bitmap aparecería a la derecha ( en principio )
Dime qué te parece
Gracias Cristóbal. Acabo de ver tu comentario. 17:19.
Ya me pinta el triangulito. Creo que con unos pocos ajustes tengo el temo. voy a ver. Ahora despues informaré]]>
cnavarro wrote: Thu Apr 24, 2025 2:32 pm Paquito, se me ocurren varias posibilidades
La primera que intentaría sería en el objeto oCombo:oGet meterle un action { || .T- } que no hiciese nada y ponerle el bitmap que consideres, poniéndolo y quitándolo o cambiándolo según la validacion que consideres, lo único es que ese bitmap aparecería a la derecha ( en principio )
Dime qué te parece
Gracias Cristóbal. Acabo de ver tu comentario. 17:19.
Ya me pinta el triangulito. Creo que con unos pocos ajustes tengo el temo. voy a ver. Ahora despues informaré]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by Antonio Linares]]> 2025-04-24T09:54:47-06:00 2025-04-24T09:54:47-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279156#p279156
Aqui tienes una primera prueba pero funciona a medias:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "Item 1"

    DEFINE DIALOG oDlg TITLE "ComboBox Example" SIZE 300, 200 PIXEL

    @ 2, 3 COMBOBOX oCmb VAR cSelected SIZE 100, 60 ;
        ITEMS { "Item 1", "Item 2", "Item 3" }

    __clsAddMsg( oCmb:ClassH, "Display", @Display(), HB_OO_MSG_METHOD,, 1 )

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ;

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL

static function Display()    

   local Self := QSelf() 

   FillRect( ::GetDC(), { 0, 0, 23, 23 }, TBrush():New( , CLR_RED ):hBrush )
   ::ReleaseDC()

return nil    
]]>

Aqui tienes una primera prueba pero funciona a medias:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "Item 1"

    DEFINE DIALOG oDlg TITLE "ComboBox Example" SIZE 300, 200 PIXEL

    @ 2, 3 COMBOBOX oCmb VAR cSelected SIZE 100, 60 ;
        ITEMS { "Item 1", "Item 2", "Item 3" }

    __clsAddMsg( oCmb:ClassH, "Display", @Display(), HB_OO_MSG_METHOD,, 1 )

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ;

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL

static function Display()    

   local Self := QSelf() 

   FillRect( ::GetDC(), { 0, 0, 23, 23 }, TBrush():New( , CLR_RED ):hBrush )
   ::ReleaseDC()

return nil    
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by paquitohm]]> 2025-04-25T02:44:26-06:00 2025-04-25T02:44:26-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279175#p279175 Unicamente conseguí mostrar el triangulito fuera del combobox

Image]]>
Unicamente conseguí mostrar el triangulito fuera del combobox

Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by paquitohm]]> 2025-04-25T05:15:39-06:00 2025-04-25T05:15:39-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279176#p279176


Image]]>



Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by cnavarro]]> 2025-04-25T08:20:29-06:00 2025-04-25T08:20:29-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279177#p279177 Quedo a tu disposicion si necesitas mas ayuda

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "    "

    DEFINE DIALOG oDlg TITLE "ComboBox Example" SIZE 300, 200 PIXEL

    @ 2, 3 COMBOBOX oCmb VAR cSelected SIZE 100, 60 ;
        ITEMS { "   ", "Item 1", "Item 2", "Item 3" }

   __clsAddMsg( oCmb:ClassH, "Display", @Display(), HB_OO_MSG_METHOD,, 1 )

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL


static function Display( o )    

   local Self := QSelf() 
   local hDC      := ::GetDC()
   local aRect    := GetClientRect( ::hWnd )

   if Empty( ::Varget() )
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_RED, 4 )
   else
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_GREEN, 4 )
   endif
  ::ReleaseDC()

return nil    

]]>
Quedo a tu disposicion si necesitas mas ayuda

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "    "

    DEFINE DIALOG oDlg TITLE "ComboBox Example" SIZE 300, 200 PIXEL

    @ 2, 3 COMBOBOX oCmb VAR cSelected SIZE 100, 60 ;
        ITEMS { "   ", "Item 1", "Item 2", "Item 3" }

   __clsAddMsg( oCmb:ClassH, "Display", @Display(), HB_OO_MSG_METHOD,, 1 )

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL


static function Display( o )    

   local Self := QSelf() 
   local hDC      := ::GetDC()
   local aRect    := GetClientRect( ::hWnd )

   if Empty( ::Varget() )
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_RED, 4 )
   else
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_GREEN, 4 )
   endif
  ::ReleaseDC()

return nil    

]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by paquitohm]]> 2025-04-25T10:07:43-06:00 2025-04-25T10:07:43-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279180#p279180
cnavarro wrote: Fri Apr 25, 2025 2:20 pm Paquito, al hilo de lo que ha hecho Antonio, mira este codigo ( en lugar del box, puedes pintar el bitmap o lo que consideres )
Quedo a tu disposicion si necesitas mas ayuda

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "    "

    DEFINE DIALOG oDlg TITLE "ComboBox Example" SIZE 300, 200 PIXEL

    @ 2, 3 COMBOBOX oCmb VAR cSelected SIZE 100, 60 ;
        ITEMS { "   ", "Item 1", "Item 2", "Item 3" }

   __clsAddMsg( oCmb:ClassH, "Display", @Display(), HB_OO_MSG_METHOD,, 1 )

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL


static function Display( o )    

   local Self := QSelf() 
   local hDC      := ::GetDC()
   local aRect    := GetClientRect( ::hWnd )

   if Empty( ::Varget() )
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_RED, 4 )
   else
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_GREEN, 4 )
   endif
  ::ReleaseDC()

return nil    

Gracias Cristobal, pero me temo que no vale. Se trataría de pintar dentro del combobox que es lo complicado. Fuera ya pude pintar el triangulo. Más arriba puse un ejemplo.
Esto es lo que me pinta con tu ejemplo:
Image]]>
cnavarro wrote: Fri Apr 25, 2025 2:20 pm Paquito, al hilo de lo que ha hecho Antonio, mira este codigo ( en lugar del box, puedes pintar el bitmap o lo que consideres )
Quedo a tu disposicion si necesitas mas ayuda

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "    "

    DEFINE DIALOG oDlg TITLE "ComboBox Example" SIZE 300, 200 PIXEL

    @ 2, 3 COMBOBOX oCmb VAR cSelected SIZE 100, 60 ;
        ITEMS { "   ", "Item 1", "Item 2", "Item 3" }

   __clsAddMsg( oCmb:ClassH, "Display", @Display(), HB_OO_MSG_METHOD,, 1 )

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL


static function Display( o )    

   local Self := QSelf() 
   local hDC      := ::GetDC()
   local aRect    := GetClientRect( ::hWnd )

   if Empty( ::Varget() )
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_RED, 4 )
   else
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_GREEN, 4 )
   endif
  ::ReleaseDC()

return nil    

Gracias Cristobal, pero me temo que no vale. Se trataría de pintar dentro del combobox que es lo complicado. Fuera ya pude pintar el triangulo. Más arriba puse un ejemplo.
Esto es lo que me pinta con tu ejemplo:
Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by paquitohm]]> 2025-04-25T10:27:34-06:00 2025-04-25T10:27:34-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279181#p279181
Me parece muy buena idea. Cuadro por fuera rojo y en mi caso le he puesto, en vez de verde, que lo apague cuando se seleccione algo. De esta manera puedo poner la variable "obligatorio" como un codeblock, lo cual mejora mi solucion de un bitmap. Me gustaba más el triangulito, pero así también se queda muy bien: Una marca de "obligatorio" característica y diferenciada de los Gets: Graficamente el usuario lo entiende: Distinto objeto, distinta marca de obligatoriedad.

Una solución elegante y rápida.

Gracias a ti y a Antonio ! :D]]>

Me parece muy buena idea. Cuadro por fuera rojo y en mi caso le he puesto, en vez de verde, que lo apague cuando se seleccione algo. De esta manera puedo poner la variable "obligatorio" como un codeblock, lo cual mejora mi solucion de un bitmap. Me gustaba más el triangulito, pero así también se queda muy bien: Una marca de "obligatorio" característica y diferenciada de los Gets: Graficamente el usuario lo entiende: Distinto objeto, distinta marca de obligatoriedad.

Una solución elegante y rápida.

Gracias a ti y a Antonio ! :D]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by cnavarro]]> 2025-04-25T10:56:23-06:00 2025-04-25T10:56:23-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279182#p279182
paquitohm wrote: Fri Apr 25, 2025 4:27 pm Vale Cristóbal, no había entendido tu solución. Disculpa

Me parece muy buena idea. Cuadro por fuera rojo y en mi caso le he puesto, en vez de verde, que lo apague cuando se seleccione algo. De esta manera puedo poner la variable "obligatorio" como un codeblock, lo cual mejora mi solucion de un bitmap. Me gustaba más el triangulito, pero así también se queda muy bien: Una marca de "obligatorio" característica y diferenciada de los Gets: Graficamente el usuario lo entiende: Distinto objeto, distinta marca de obligatoriedad.

Una solución elegante y rápida.

Gracias a ti y a Antonio ! :D
Si, esa era mi intencion con la solucion que te propuse, pero cuando tenga un rato miro de poner el bitmap dentro del combo, ya como tema de I+D]]>
paquitohm wrote: Fri Apr 25, 2025 4:27 pm Vale Cristóbal, no había entendido tu solución. Disculpa

Me parece muy buena idea. Cuadro por fuera rojo y en mi caso le he puesto, en vez de verde, que lo apague cuando se seleccione algo. De esta manera puedo poner la variable "obligatorio" como un codeblock, lo cual mejora mi solucion de un bitmap. Me gustaba más el triangulito, pero así también se queda muy bien: Una marca de "obligatorio" característica y diferenciada de los Gets: Graficamente el usuario lo entiende: Distinto objeto, distinta marca de obligatoriedad.

Una solución elegante y rápida.

Gracias a ti y a Antonio ! :D
Si, esa era mi intencion con la solucion que te propuse, pero cuando tenga un rato miro de poner el bitmap dentro del combo, ya como tema de I+D]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by paquitohm]]> 2025-04-25T11:10:15-06:00 2025-04-25T11:10:15-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279184#p279184
Recién veo que se me confunde un poco con la marca de focus del Get que consiste tambien en un recuadro rojo alrededor del get.

Pero de momento lo dejo asi. Quiza será cuestion de que busque otra marca o de que cambie el rojo de focus del get por un azul, pongamos por caso.
Image

Gracias]]>

Recién veo que se me confunde un poco con la marca de focus del Get que consiste tambien en un recuadro rojo alrededor del get.

Pero de momento lo dejo asi. Quiza será cuestion de que busque otra marca o de que cambie el rojo de focus del get por un azul, pongamos por caso.
Image

Gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by paquitohm]]> 2025-04-25T12:33:19-06:00 2025-04-25T12:33:19-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279186#p279186
Image]]>

Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by albeiroval]]> 2025-04-25T19:50:01-06:00 2025-04-25T19:50:01-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279190#p279190 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by cnavarro]]> 2025-04-26T05:27:43-06:00 2025-04-26T05:27:43-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279193#p279193
albeiroval wrote: Sat Apr 26, 2025 1:50 am Buen POST, se puede poner un ejemplo con TGET ?
Eso parece mas sencillo, prueba y me comentas

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "                            "

    DEFINE DIALOG oDlg TITLE "ComboBox Example" SIZE 300, 200 PIXEL

    @ 20, 20 GET oCmb VAR cSelected SIZE 110, 16 PIXEL 
   oCmb:bPainted := { || Display( oCmb ) }

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL


static function Display( o )    

   local hDC      := o:oWnd:GetDC()
   local aRect    := GetClientRect( o:hWnd )
   local oBtn

   if Empty( o:Varget() )
   RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                         CLR_RED, 4 )
   else
   RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                         CLR_GREEN, 4 )
   endif
  o:oWnd:ReleaseDC()

return nil    


]]>
albeiroval wrote: Sat Apr 26, 2025 1:50 am Buen POST, se puede poner un ejemplo con TGET ?
Eso parece mas sencillo, prueba y me comentas

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "                            "

    DEFINE DIALOG oDlg TITLE "ComboBox Example" SIZE 300, 200 PIXEL

    @ 20, 20 GET oCmb VAR cSelected SIZE 110, 16 PIXEL 
   oCmb:bPainted := { || Display( oCmb ) }

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL


static function Display( o )    

   local hDC      := o:oWnd:GetDC()
   local aRect    := GetClientRect( o:hWnd )
   local oBtn

   if Empty( o:Varget() )
   RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                         CLR_RED, 4 )
   else
   RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                         CLR_GREEN, 4 )
   endif
  o:oWnd:ReleaseDC()

return nil    


]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by karinha]]> 2025-04-26T11:10:31-06:00 2025-04-26T11:10:31-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279198#p279198
https://imgur.com/v3cXzp8

Image

Regards, saludos.]]>

https://imgur.com/v3cXzp8

Image

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by cnavarro]]> 2025-04-26T18:57:52-06:00 2025-04-26T18:57:52-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279202#p279202

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "                            "

    DEFINE DIALOG oDlg TITLE "TGet Example" SIZE 300, 200 PIXEL

    @ 20, 20 GET oCmb VAR cSelected SIZE 110, 16 PIXEL 
   oCmb:bPainted := { || Display( oCmb ) }

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL


static function Display( o )    

   local hDC      := o:oWnd:GetDC()
   local aRect    := GetClientRect( o:hWnd )
   local oBtn


   RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
             if( Empty( o:Varget() ), CLR_RED, o:oWnd:nClrPane ), ;
             if( Empty( o:Varget() ), 4, 4 ) )    // Esto ultimo es por si queremos poner otro color y cambiar el grueso de la linea
  o:oWnd:ReleaseDC()

return nil    

]]>

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "                            "

    DEFINE DIALOG oDlg TITLE "TGet Example" SIZE 300, 200 PIXEL

    @ 20, 20 GET oCmb VAR cSelected SIZE 110, 16 PIXEL 
   oCmb:bPainted := { || Display( oCmb ) }

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL


static function Display( o )    

   local hDC      := o:oWnd:GetDC()
   local aRect    := GetClientRect( o:hWnd )
   local oBtn


   RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
             if( Empty( o:Varget() ), CLR_RED, o:oWnd:nClrPane ), ;
             if( Empty( o:Varget() ), 4, 4 ) )    // Esto ultimo es por si queremos poner otro color y cambiar el grueso de la linea
  o:oWnd:ReleaseDC()

return nil    

]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by karinha]]> 2025-04-27T10:13:36-06:00 2025-04-27T10:13:36-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279207#p279207
https://imgur.com/sWV9foI

Image

Regards, saludos.]]>

https://imgur.com/sWV9foI

Image

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by karinha]]> 2025-04-27T10:15:30-06:00 2025-04-27T10:15:30-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279208#p279208

Code: Select all | Expand

// C:\GETBORDE\TESTGET3.PRG - 26/04/2025 - By Kapiaba the best.
// MODIFICADO EM: 27/04/2025 - Por: Joao Santos - Sao Paulo/Brazil.

#include "fivewin.ch"

FUNCTION Main()

   LOCAL oWnd, oMenu, oFont, oSkinB

   SetBalloon( .T. ) // Balloon shape required for tooltips

   oSkinB = TSkinButton():New()

   oSkinB:nClrBorder0_N := RGB( 249, 194, 179 )
   oSkinB:nClrBorder1_N := RGB( 181, 61, 29 )
   oSkinB:aClrNormal    := { { .50, nRGB( 210, 235, 216 ), nRGB(   0,  73, 138 ) } }

   SkinButtons( oSkinB )

   DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 00, -14 BOLD

   MENU oMenu 2007

      MenuItem "From Resource" ACTION FromrES( oWnd )

      MENUITEM "&Salida" ACTION( oWnd:End() )

   ENDMENU

   DEFINE WINDOW oWnd TITLE "Test Button Get Transparent" MENU oMenu PIXEL

   oWnd:SetFont( oFont )

   ACTIVATE WINDOW oWnd MAXIMIZED

   oFont:End()

RETURN NIL

FUNCTION FromRes( oWnd )

   LOCAL oDlg, oGet1, oGet2, oGet3, oGet4, cVar1, cVar2, cVar3, cVar4, oFont
   LOCAL oBtnDisp, lActive := .F., cLinares, oGet, oFont2, oBtnVisu, oSay
   LOCAL oSaida, oFnt, oCbx, cItem := "", aGrad

   cVar1 := 0
   cVar2 := 0
   cVar3 := 0
   cVar4 := 0
   cLinares := SPACE(50)

   cLinares := oEmToAnsi( "USER: ANTONIO LI¥ARES CA¥AS" )

   aGrad := { { .50, nRGB( 210, 235, 216 ), nRGB( 255, 255, 255 ) } }

   DEFINE FONT oFnt   NAME "Ms Sans Serif" SIZE 00, -12 BOLD
   DEFINE FONT oFont  NAME "Ms Sans Serif" SIZE 00, -14 BOLD
   DEFINE FONT oFont2 NAME "Ms Sans Serif" SIZE 00, -18 BOLD

   DEFINE DIALOG oDlg RESOURCE "fromres" OF oWnd GRADIENT aGrad FONT oFont

   oDlg:lHelpIcon := .F.

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   REDEFINE SAY ID 401 OF oDlg COLORS METRO_AMBER,  CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 402 OF oDlg COLORS METRO_PINK,   CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 403 OF oDlg COLORS METRO_COBALT, CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 430 OF oDlg COLORS CLR_BLACK,    CLR_WHITE UPDATE FONT oFnt  TRANSPARENT

   REDEFINE GET oGet1 VAR cVar1 id 100 bitmap "on" UPDATE ;
      ACTION( msginfo( "With Transparent" ) ) of oDlg

   oGet1:lBtnTransparent := .T.       // transparent button get oGet1

   REDEFINE GET oGet2 VAR cVar2 id 101 bitmap "on"UPDATE  ;
      ACTION( msginfo( "Without Transparent" ) ) of oDlg

   oGet2:lBtnTransparent := .T.       // transparent button get oGet1

   REDEFINE GET oGet3 VAR cVar3 id 102 bitmap "chkyes" UPDATE ;
      ACTION( msginfo( "With Adjust-Transparent" ) )   ;
      COLOR CLR_BLACK, CLR_CYAN of oDlg

   oGet3:disable()
   oGet3:lBtnTransparent := .T.       // transparent button get oGet3
   oGet3:lAdjustBtn      := .T.       // Button Get Adjust Witdh oGet3
   oGet3:lDisColors      := .F.       // Deactive disable color
   oGet3:nClrTextDis     := CLR_WHITE // Color text disable status
   oGet3:nClrPaneDis     := CLR_BLUE  // Color Pane disable status

   REDEFINE GET oGet4 VAR cVar4 id 103 bitmap "chkyes" UPDATE ;
      ACTION( if( lActive, oGet3:disable(), oGet3:enable() ), ;
                  lActive := !lActive, oDlg:Update() ) of oDlg

   oGet4:lAdjustBtn := .T.

   REDEFINE GET oGet VAR cLinares ID 4001 OF oDlg PICTURE "@!" UPDATE        ;
      COLORS METRO_ORANGE, CLR_WHITE FONT oFont2

   REDEFINE BITMAP oBtnVisu ID 122 RESOURCE "FIVEWIN" TRANSPARENT OF oDlg

   REDEFINE BUTTONBMP oSaida ID 301 OF oDlg RESOURCE "EXIT" TEXTRIGHT        ;
      ACTION ( oDlg:End() ) CANCEL

   oSaida:cTooltip := { "Click no Botão Para Sair",                          ;
                        "Saida - Exit - Cancelar ", 1, CLR_WHITE, CLR_CYAN }

   oGet:bPainted := { || Display( oGet ) }

   REDEFINE BITMAP oBtnDisp ID 121 RESOURCE "HOME"    TRANSPARENT OF oDlg

   REDEFINE COMBOBOX oCbx VAR cItem ITEMS { "Testing", "this", "ComboBox" } ;
      HEIGHTGET 24 ID 210 OF oDlg COLOR "W*/R+"                             ;
      VALID ( MsgBeep(), .t. )

   oCbx:bPainted := { || Display2( oCbx ) }

   ACTIVATE DIALOG oDlg CENTERED

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   oFont:End()
   oFont2:End()
   oFnt:End()

RETURN NIL

STATIC FUNCTION Display( o )  // CON GET FUNCIONA PERFECTO!

   LOCAL hDC      := o:oWnd:GetDC()
   LOCAL aRect    := GetClientRect( o:hWnd )
   LOCAL oBtn

   IF Empty( o:Varget() )

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 6, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_RED, 4 )
   ELSE

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 22, o:nTop + aRect[ 1 ] - 4, o:nLeft + aRect[ 4 ] + 6, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_GREEN, 4 )

   ENDIF

   o:oWnd:ReleaseDC()

RETURN NIL

STATIC FUNCTION Display2( o ) // CON COMBOBOX, NO FUNCIONA!

   local hDC      := o:oWnd:GetDC()
   local aRect    := GetClientRect( o:hWnd )
   local oBtn

   if Empty( o:Varget() )

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_RED, 4 )
   else

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 16, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_GREEN, 4 )

   endif

   o:oWnd:ReleaseDC()

RETURN NIL

// FIN / END - kapiabafwh@gmail.com
Regards, saludos.]]>

Code: Select all | Expand

// C:\GETBORDE\TESTGET3.PRG - 26/04/2025 - By Kapiaba the best.
// MODIFICADO EM: 27/04/2025 - Por: Joao Santos - Sao Paulo/Brazil.

#include "fivewin.ch"

FUNCTION Main()

   LOCAL oWnd, oMenu, oFont, oSkinB

   SetBalloon( .T. ) // Balloon shape required for tooltips

   oSkinB = TSkinButton():New()

   oSkinB:nClrBorder0_N := RGB( 249, 194, 179 )
   oSkinB:nClrBorder1_N := RGB( 181, 61, 29 )
   oSkinB:aClrNormal    := { { .50, nRGB( 210, 235, 216 ), nRGB(   0,  73, 138 ) } }

   SkinButtons( oSkinB )

   DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 00, -14 BOLD

   MENU oMenu 2007

      MenuItem "From Resource" ACTION FromrES( oWnd )

      MENUITEM "&Salida" ACTION( oWnd:End() )

   ENDMENU

   DEFINE WINDOW oWnd TITLE "Test Button Get Transparent" MENU oMenu PIXEL

   oWnd:SetFont( oFont )

   ACTIVATE WINDOW oWnd MAXIMIZED

   oFont:End()

RETURN NIL

FUNCTION FromRes( oWnd )

   LOCAL oDlg, oGet1, oGet2, oGet3, oGet4, cVar1, cVar2, cVar3, cVar4, oFont
   LOCAL oBtnDisp, lActive := .F., cLinares, oGet, oFont2, oBtnVisu, oSay
   LOCAL oSaida, oFnt, oCbx, cItem := "", aGrad

   cVar1 := 0
   cVar2 := 0
   cVar3 := 0
   cVar4 := 0
   cLinares := SPACE(50)

   cLinares := oEmToAnsi( "USER: ANTONIO LI¥ARES CA¥AS" )

   aGrad := { { .50, nRGB( 210, 235, 216 ), nRGB( 255, 255, 255 ) } }

   DEFINE FONT oFnt   NAME "Ms Sans Serif" SIZE 00, -12 BOLD
   DEFINE FONT oFont  NAME "Ms Sans Serif" SIZE 00, -14 BOLD
   DEFINE FONT oFont2 NAME "Ms Sans Serif" SIZE 00, -18 BOLD

   DEFINE DIALOG oDlg RESOURCE "fromres" OF oWnd GRADIENT aGrad FONT oFont

   oDlg:lHelpIcon := .F.

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   REDEFINE SAY ID 401 OF oDlg COLORS METRO_AMBER,  CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 402 OF oDlg COLORS METRO_PINK,   CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 403 OF oDlg COLORS METRO_COBALT, CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 430 OF oDlg COLORS CLR_BLACK,    CLR_WHITE UPDATE FONT oFnt  TRANSPARENT

   REDEFINE GET oGet1 VAR cVar1 id 100 bitmap "on" UPDATE ;
      ACTION( msginfo( "With Transparent" ) ) of oDlg

   oGet1:lBtnTransparent := .T.       // transparent button get oGet1

   REDEFINE GET oGet2 VAR cVar2 id 101 bitmap "on"UPDATE  ;
      ACTION( msginfo( "Without Transparent" ) ) of oDlg

   oGet2:lBtnTransparent := .T.       // transparent button get oGet1

   REDEFINE GET oGet3 VAR cVar3 id 102 bitmap "chkyes" UPDATE ;
      ACTION( msginfo( "With Adjust-Transparent" ) )   ;
      COLOR CLR_BLACK, CLR_CYAN of oDlg

   oGet3:disable()
   oGet3:lBtnTransparent := .T.       // transparent button get oGet3
   oGet3:lAdjustBtn      := .T.       // Button Get Adjust Witdh oGet3
   oGet3:lDisColors      := .F.       // Deactive disable color
   oGet3:nClrTextDis     := CLR_WHITE // Color text disable status
   oGet3:nClrPaneDis     := CLR_BLUE  // Color Pane disable status

   REDEFINE GET oGet4 VAR cVar4 id 103 bitmap "chkyes" UPDATE ;
      ACTION( if( lActive, oGet3:disable(), oGet3:enable() ), ;
                  lActive := !lActive, oDlg:Update() ) of oDlg

   oGet4:lAdjustBtn := .T.

   REDEFINE GET oGet VAR cLinares ID 4001 OF oDlg PICTURE "@!" UPDATE        ;
      COLORS METRO_ORANGE, CLR_WHITE FONT oFont2

   REDEFINE BITMAP oBtnVisu ID 122 RESOURCE "FIVEWIN" TRANSPARENT OF oDlg

   REDEFINE BUTTONBMP oSaida ID 301 OF oDlg RESOURCE "EXIT" TEXTRIGHT        ;
      ACTION ( oDlg:End() ) CANCEL

   oSaida:cTooltip := { "Click no Botão Para Sair",                          ;
                        "Saida - Exit - Cancelar ", 1, CLR_WHITE, CLR_CYAN }

   oGet:bPainted := { || Display( oGet ) }

   REDEFINE BITMAP oBtnDisp ID 121 RESOURCE "HOME"    TRANSPARENT OF oDlg

   REDEFINE COMBOBOX oCbx VAR cItem ITEMS { "Testing", "this", "ComboBox" } ;
      HEIGHTGET 24 ID 210 OF oDlg COLOR "W*/R+"                             ;
      VALID ( MsgBeep(), .t. )

   oCbx:bPainted := { || Display2( oCbx ) }

   ACTIVATE DIALOG oDlg CENTERED

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   oFont:End()
   oFont2:End()
   oFnt:End()

RETURN NIL

STATIC FUNCTION Display( o )  // CON GET FUNCIONA PERFECTO!

   LOCAL hDC      := o:oWnd:GetDC()
   LOCAL aRect    := GetClientRect( o:hWnd )
   LOCAL oBtn

   IF Empty( o:Varget() )

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 6, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_RED, 4 )
   ELSE

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 22, o:nTop + aRect[ 1 ] - 4, o:nLeft + aRect[ 4 ] + 6, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_GREEN, 4 )

   ENDIF

   o:oWnd:ReleaseDC()

RETURN NIL

STATIC FUNCTION Display2( o ) // CON COMBOBOX, NO FUNCIONA!

   local hDC      := o:oWnd:GetDC()
   local aRect    := GetClientRect( o:hWnd )
   local oBtn

   if Empty( o:Varget() )

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_RED, 4 )
   else

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 16, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_GREEN, 4 )

   endif

   o:oWnd:ReleaseDC()

RETURN NIL

// FIN / END - kapiabafwh@gmail.com
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by Armando]]> 2025-04-27T10:18:36-06:00 2025-04-27T10:18:36-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279209#p279209
Siguiendo este post, me surge la idea, (seguramente ya existe la solución), se puede cambiar el color del marco cuando
tenga el foco?, cómo?, para todos los controles.

Esto es para que el usuario vea donde esta el foco.

Saludos]]>

Siguiendo este post, me surge la idea, (seguramente ya existe la solución), se puede cambiar el color del marco cuando
tenga el foco?, cómo?, para todos los controles.

Esto es para que el usuario vea donde esta el foco.

Saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by karinha]]> 2025-04-27T10:25:14-06:00 2025-04-27T10:25:14-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279210#p279210
https://mega.nz/file/EFkmhJxS#KaPLU6fWt ... q900wjVAFU

Regards, saludos.]]>

https://mega.nz/file/EFkmhJxS#KaPLU6fWt ... q900wjVAFU

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by cnavarro]]> 2025-04-27T17:01:46-06:00 2025-04-27T17:01:46-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279212#p279212
karinha wrote: Sun Apr 27, 2025 4:13 pm Master Navarro, con GET, funciona PERFECTO! Con COMBOBOX, NO FUNCIONA!

https://imgur.com/sWV9foI

Image

Regards, saludos.

Joao, evidentemente no funciona con combobox, el control TCombobox no tiene el method Paint, por lo que no puedes usar el bPainted, tienes que usar la técnica que utilizo en:
viewtopic.php?p=279177#p279177]]>
karinha wrote: Sun Apr 27, 2025 4:13 pm Master Navarro, con GET, funciona PERFECTO! Con COMBOBOX, NO FUNCIONA!

https://imgur.com/sWV9foI

Image

Regards, saludos.

Joao, evidentemente no funciona con combobox, el control TCombobox no tiene el method Paint, por lo que no puedes usar el bPainted, tienes que usar la técnica que utilizo en:
viewtopic.php?p=279177#p279177]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by cnavarro]]> 2025-04-27T17:04:49-06:00 2025-04-27T17:04:49-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279213#p279213
Armando wrote: Sun Apr 27, 2025 4:18 pm Saludos a todo el foro:

Siguiendo este post, me surge la idea, (seguramente ya existe la solución), se puede cambiar el color del marco cuando
tenga el foco?, cómo?, para todos los controles.

Esto es para que el usuario vea donde esta el foco.

Saludos
Solo existe para los GETS

Code: Select all | Expand

     // Ponerlo al principio de tu app
      SetGetColorFocus( 16776960 )    // Color: CLR_CYAN, Rgb( 200, 200, 200 ) o el que consideres
]]>
Armando wrote: Sun Apr 27, 2025 4:18 pm Saludos a todo el foro:

Siguiendo este post, me surge la idea, (seguramente ya existe la solución), se puede cambiar el color del marco cuando
tenga el foco?, cómo?, para todos los controles.

Esto es para que el usuario vea donde esta el foco.

Saludos
Solo existe para los GETS

Code: Select all | Expand

     // Ponerlo al principio de tu app
      SetGetColorFocus( 16776960 )    // Color: CLR_CYAN, Rgb( 200, 200, 200 ) o el que consideres
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by karinha]]> 2025-04-28T07:49:25-06:00 2025-04-28T07:49:25-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279219#p279219
https://imgur.com/ODg5GEM

Image

Muchas gracias.

Regards, saludos.]]>

https://imgur.com/ODg5GEM

Image

Muchas gracias.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by karinha]]> 2025-04-28T07:57:25-06:00 2025-04-28T07:57:25-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279220#p279220

Code: Select all | Expand

// C:\GETBORDE\TESTGET3.PRG - 26/04/2025 - By Kapiaba the best of the World.
// MODIFICADO EM: 28/04/2025 - Por: Joao Santos - Sao Paulo/Brazil.

#Include "FiveWin.ch"

#define METRO_VERDE13 nRGB(  34, 177,  76 )
#define CLR_VSBAR     nRGB( 207, 214, 228 )
#define CLR_VSMAR     nRGB(   0,  73, 138 )

FUNCTION Main()

   LOCAL oWnd, oMenu, oFont, oSkinB, oIco

   SetBalloon( .T. ) // Balloon shape required for tooltips

   oSkinB = TSkinButton():New()

   oSkinB:nClrBorder0_N := RGB( 249, 194, 179 )
   oSkinB:nClrBorder1_N := RGB( 181, 61, 29 )
   oSkinB:aClrNormal    := { { .50, nRGB( 210, 235, 216 ), nRGB(   0,  73, 138 ) } }

   SkinButtons( oSkinB )

   DEFINE ICON oIco   RESOURCE "ICONE05"  // EN: TESTGET3.RES
   DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 00, -14 BOLD

   MENU oMenu 2007

      MenuItem "From Resource" ACTION FromrES( oWnd )

      MENUITEM "&Salida" ACTION( oWnd:End() )

   ENDMENU

   DEFINE WINDOW oWnd TITLE "Test Button Get Transparent" MENU oMenu PIXEL   ;
      ICON oIco MDI

   oWnd:SetFont( oFont )

   ACTIVATE WINDOW oWnd MAXIMIZED

   oFont:End()

RETURN NIL

FUNCTION FromRes( oWnd )

   LOCAL oDlg, oGet1, oGet2, oGet3, oGet4, cVar1, cVar2, cVar3, cVar4, oFont
   LOCAL oBtnDisp, lActive := .F., cLinares, oGet, oFont2, oBtnVisu, oSay
   LOCAL oSaida, oFnt, oCbx, cItem := "", aGrad, oBtnFive, oIco

   cVar1 := 0
   cVar2 := 0
   cVar3 := 0
   cVar4 := 0
   cLinares := SPACE(50)

   cLinares := OemToAnsi( "USER: ANTONIO LI¥ARES CA¥AS" )

   aGrad := { { .50, nRGB( 210, 235, 216 ), nRGB( 255, 255, 255 ) } }

   DEFINE ICON oIco   RESOURCE "ICONE05"  // EN: TESTGET3.RES
   DEFINE FONT oFnt   NAME "Ms Sans Serif" SIZE 00, -12 BOLD
   DEFINE FONT oFont  NAME "Ms Sans Serif" SIZE 00, -14 BOLD
   DEFINE FONT oFont2 NAME "Ms Sans Serif" SIZE 00, -18 BOLD

   DEFINE DIALOG oDlg RESOURCE "fromres" OF oWnd GRADIENT aGrad ICON oIco    ;
      FONT oFont

   oDlg:lHelpIcon := .F.

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   REDEFINE SAY ID 401 OF oDlg COLORS METRO_AMBER,   CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 402 OF oDlg COLORS METRO_PINK,    CLR_WHITE UPDATE FONT oFnt  TRANSPARENT
   REDEFINE SAY ID 403 OF oDlg COLORS METRO_COBALT,  CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 404 OF oDlg COLORS METRO_VERDE13, CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 430 OF oDlg COLORS CLR_VSMAR,     CLR_WHITE UPDATE FONT oFnt  TRANSPARENT

   REDEFINE GET oGet1 VAR cVar1 id 100 bitmap "on" UPDATE ;
      ACTION( MsgInfo( "With Transparent" ) ) of oDlg

   oGet1:lBtnTransparent := .T.       // transparent button get oGet1

   REDEFINE GET oGet2 VAR cVar2 id 101 bitmap "on"UPDATE  ;
      ACTION( MsgInfo( "Without Transparent" ) ) of oDlg

   oGet2:lBtnTransparent := .T.       // transparent button get oGet1

   REDEFINE GET oGet3 VAR cVar3 id 102 bitmap "chkyes" UPDATE ;
      ACTION( MsgInfo( "With Adjust-Transparent" ) )   ;
      COLOR CLR_BLACK, CLR_CYAN of oDlg

   oGet3:disable()
   oGet3:lBtnTransparent := .T.       // transparent button get oGet3
   oGet3:lAdjustBtn      := .T.       // Button Get Adjust Witdh oGet3
   oGet3:lDisColors      := .F.       // Deactive disable color
   oGet3:nClrTextDis     := CLR_WHITE // Color text disable status
   oGet3:nClrPaneDis     := CLR_BLUE  // Color Pane disable status

   REDEFINE GET oGet4 VAR cVar4 id 103 bitmap "chkyes" UPDATE ;
      ACTION( if( lActive, oGet3:disable(), oGet3:enable() ), ;
                  lActive := !lActive, oDlg:Update() ) of oDlg

   oGet4:lAdjustBtn := .T.

   REDEFINE GET oGet VAR cLinares ID 4001 OF oDlg PICTURE "@!" UPDATE        ;
      COLORS METRO_ORANGE, CLR_WHITE FONT oFont2

   oGet:bPainted := { || Display( oGet ) }

   REDEFINE BITMAP oBtnDisp ID 121 RESOURCE "HOME"     TRANSPARENT OF oDlg
   REDEFINE BITMAP oBtnVisu ID 122 RESOURCE "FIVEWIN"  TRANSPARENT OF oDlg
   REDEFINE BITMAP oBtnFive ID 123 RESOURCE "FIVETECH" TRANSPARENT OF oDlg

   REDEFINE BUTTONBMP oSaida ID 301 OF oDlg RESOURCE "EXIT" TEXTRIGHT        ;
      ACTION ( oDlg:End() ) CANCEL

   oSaida:cTooltip := { "Click no Botão Para Sair",                          ;
                        "Saida - Exit - Cancelar ", 1, CLR_WHITE, CLR_CYAN }

   REDEFINE COMBOBOX oCbx VAR cItem ITEMS { "Testing", "this", "ComboBox" } ;
      HEIGHTGET 24 ID 210 OF oDlg COLOR "W*/R+"                             ;
      VALID ( MsgBeep(), .t. )

   __clsAddMsg( oCbx:ClassH, "Display", @Display2(), HB_OO_MSG_METHOD,, 1 )

   ACTIVATE DIALOG oDlg CENTERED

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   oFont:End()
   oFont2:End()
   oFnt:End()

RETURN NIL

STATIC FUNCTION Display( o )  // CON GET FUNCIONA PERFECTO!

   LOCAL hDC      := o:oWnd:GetDC()
   LOCAL aRect    := GetClientRect( o:hWnd )
   LOCAL oBtn

   IF Empty( o:Varget() )

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 6, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_RED, 4 )
   ELSE

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 22, o:nTop + aRect[ 1 ] - 4, o:nLeft + aRect[ 4 ] + 6, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_GREEN, 4 )

   ENDIF

   o:oWnd:ReleaseDC()

RETURN NIL

STATIC FUNCTION Display2( o ) // CON COMBOBOX, FUNCIONA PERFECTO!

   LOCAL Self := QSelf()
   LOCAL hDC      := ::GetDC()
   LOCAL aRect    := GetClientRect( ::hWnd )

   IF Empty( ::Varget() )

      RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
          METRO_ORANGE, 4 )

   ELSE

      RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
          METRO_ORANGE, 4 )

   ENDIF

   ::ReleaseDC()

RETURN NIL

// FIN / END - kapiabafwh@gmail.com
Regards, saludos.]]>

Code: Select all | Expand

// C:\GETBORDE\TESTGET3.PRG - 26/04/2025 - By Kapiaba the best of the World.
// MODIFICADO EM: 28/04/2025 - Por: Joao Santos - Sao Paulo/Brazil.

#Include "FiveWin.ch"

#define METRO_VERDE13 nRGB(  34, 177,  76 )
#define CLR_VSBAR     nRGB( 207, 214, 228 )
#define CLR_VSMAR     nRGB(   0,  73, 138 )

FUNCTION Main()

   LOCAL oWnd, oMenu, oFont, oSkinB, oIco

   SetBalloon( .T. ) // Balloon shape required for tooltips

   oSkinB = TSkinButton():New()

   oSkinB:nClrBorder0_N := RGB( 249, 194, 179 )
   oSkinB:nClrBorder1_N := RGB( 181, 61, 29 )
   oSkinB:aClrNormal    := { { .50, nRGB( 210, 235, 216 ), nRGB(   0,  73, 138 ) } }

   SkinButtons( oSkinB )

   DEFINE ICON oIco   RESOURCE "ICONE05"  // EN: TESTGET3.RES
   DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 00, -14 BOLD

   MENU oMenu 2007

      MenuItem "From Resource" ACTION FromrES( oWnd )

      MENUITEM "&Salida" ACTION( oWnd:End() )

   ENDMENU

   DEFINE WINDOW oWnd TITLE "Test Button Get Transparent" MENU oMenu PIXEL   ;
      ICON oIco MDI

   oWnd:SetFont( oFont )

   ACTIVATE WINDOW oWnd MAXIMIZED

   oFont:End()

RETURN NIL

FUNCTION FromRes( oWnd )

   LOCAL oDlg, oGet1, oGet2, oGet3, oGet4, cVar1, cVar2, cVar3, cVar4, oFont
   LOCAL oBtnDisp, lActive := .F., cLinares, oGet, oFont2, oBtnVisu, oSay
   LOCAL oSaida, oFnt, oCbx, cItem := "", aGrad, oBtnFive, oIco

   cVar1 := 0
   cVar2 := 0
   cVar3 := 0
   cVar4 := 0
   cLinares := SPACE(50)

   cLinares := OemToAnsi( "USER: ANTONIO LI¥ARES CA¥AS" )

   aGrad := { { .50, nRGB( 210, 235, 216 ), nRGB( 255, 255, 255 ) } }

   DEFINE ICON oIco   RESOURCE "ICONE05"  // EN: TESTGET3.RES
   DEFINE FONT oFnt   NAME "Ms Sans Serif" SIZE 00, -12 BOLD
   DEFINE FONT oFont  NAME "Ms Sans Serif" SIZE 00, -14 BOLD
   DEFINE FONT oFont2 NAME "Ms Sans Serif" SIZE 00, -18 BOLD

   DEFINE DIALOG oDlg RESOURCE "fromres" OF oWnd GRADIENT aGrad ICON oIco    ;
      FONT oFont

   oDlg:lHelpIcon := .F.

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   REDEFINE SAY ID 401 OF oDlg COLORS METRO_AMBER,   CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 402 OF oDlg COLORS METRO_PINK,    CLR_WHITE UPDATE FONT oFnt  TRANSPARENT
   REDEFINE SAY ID 403 OF oDlg COLORS METRO_COBALT,  CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 404 OF oDlg COLORS METRO_VERDE13, CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 430 OF oDlg COLORS CLR_VSMAR,     CLR_WHITE UPDATE FONT oFnt  TRANSPARENT

   REDEFINE GET oGet1 VAR cVar1 id 100 bitmap "on" UPDATE ;
      ACTION( MsgInfo( "With Transparent" ) ) of oDlg

   oGet1:lBtnTransparent := .T.       // transparent button get oGet1

   REDEFINE GET oGet2 VAR cVar2 id 101 bitmap "on"UPDATE  ;
      ACTION( MsgInfo( "Without Transparent" ) ) of oDlg

   oGet2:lBtnTransparent := .T.       // transparent button get oGet1

   REDEFINE GET oGet3 VAR cVar3 id 102 bitmap "chkyes" UPDATE ;
      ACTION( MsgInfo( "With Adjust-Transparent" ) )   ;
      COLOR CLR_BLACK, CLR_CYAN of oDlg

   oGet3:disable()
   oGet3:lBtnTransparent := .T.       // transparent button get oGet3
   oGet3:lAdjustBtn      := .T.       // Button Get Adjust Witdh oGet3
   oGet3:lDisColors      := .F.       // Deactive disable color
   oGet3:nClrTextDis     := CLR_WHITE // Color text disable status
   oGet3:nClrPaneDis     := CLR_BLUE  // Color Pane disable status

   REDEFINE GET oGet4 VAR cVar4 id 103 bitmap "chkyes" UPDATE ;
      ACTION( if( lActive, oGet3:disable(), oGet3:enable() ), ;
                  lActive := !lActive, oDlg:Update() ) of oDlg

   oGet4:lAdjustBtn := .T.

   REDEFINE GET oGet VAR cLinares ID 4001 OF oDlg PICTURE "@!" UPDATE        ;
      COLORS METRO_ORANGE, CLR_WHITE FONT oFont2

   oGet:bPainted := { || Display( oGet ) }

   REDEFINE BITMAP oBtnDisp ID 121 RESOURCE "HOME"     TRANSPARENT OF oDlg
   REDEFINE BITMAP oBtnVisu ID 122 RESOURCE "FIVEWIN"  TRANSPARENT OF oDlg
   REDEFINE BITMAP oBtnFive ID 123 RESOURCE "FIVETECH" TRANSPARENT OF oDlg

   REDEFINE BUTTONBMP oSaida ID 301 OF oDlg RESOURCE "EXIT" TEXTRIGHT        ;
      ACTION ( oDlg:End() ) CANCEL

   oSaida:cTooltip := { "Click no Botão Para Sair",                          ;
                        "Saida - Exit - Cancelar ", 1, CLR_WHITE, CLR_CYAN }

   REDEFINE COMBOBOX oCbx VAR cItem ITEMS { "Testing", "this", "ComboBox" } ;
      HEIGHTGET 24 ID 210 OF oDlg COLOR "W*/R+"                             ;
      VALID ( MsgBeep(), .t. )

   __clsAddMsg( oCbx:ClassH, "Display", @Display2(), HB_OO_MSG_METHOD,, 1 )

   ACTIVATE DIALOG oDlg CENTERED

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   oFont:End()
   oFont2:End()
   oFnt:End()

RETURN NIL

STATIC FUNCTION Display( o )  // CON GET FUNCIONA PERFECTO!

   LOCAL hDC      := o:oWnd:GetDC()
   LOCAL aRect    := GetClientRect( o:hWnd )
   LOCAL oBtn

   IF Empty( o:Varget() )

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 6, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_RED, 4 )
   ELSE

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 22, o:nTop + aRect[ 1 ] - 4, o:nLeft + aRect[ 4 ] + 6, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_GREEN, 4 )

   ENDIF

   o:oWnd:ReleaseDC()

RETURN NIL

STATIC FUNCTION Display2( o ) // CON COMBOBOX, FUNCIONA PERFECTO!

   LOCAL Self := QSelf()
   LOCAL hDC      := ::GetDC()
   LOCAL aRect    := GetClientRect( ::hWnd )

   IF Empty( ::Varget() )

      RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
          METRO_ORANGE, 4 )

   ELSE

      RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
          METRO_ORANGE, 4 )

   ENDIF

   ::ReleaseDC()

RETURN NIL

// FIN / END - kapiabafwh@gmail.com
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by karinha]]> 2025-04-28T08:04:19-06:00 2025-04-28T08:04:19-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279221#p279221
https://mega.nz/file/5IUlxYpL#m5Kfhm2GL ... -Ytgd3ubaU

Regards, saludos.]]>

https://mega.nz/file/5IUlxYpL#m5Kfhm2GL ... -Ytgd3ubaU

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by sysctrl2]]> 2025-04-28T10:36:09-06:00 2025-04-28T10:36:09-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279224#p279224 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by sysctrl2]]> 2025-04-28T10:46:30-06:00 2025-04-28T10:46:30-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279225#p279225
se puede ? :lol:]]>

se puede ? :lol:]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by karinha]]> 2025-04-28T10:53:01-06:00 2025-04-28T10:53:01-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45642&p=279226#p279226
sysctrl2 wrote: Mon Apr 28, 2025 4:46 pm El rectángulo de color solo debería de aparecer en el GET activo :shock:
se puede ? :lol:
tal vez:

Code: Select all | Expand

   oGet:lActive
Regards, saludos.]]>
sysctrl2 wrote: Mon Apr 28, 2025 4:46 pm El rectángulo de color solo debería de aparecer en el GET activo :shock:
se puede ? :lol:
tal vez:

Code: Select all | Expand

   oGet:lActive
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: COMPILAR MAKE :: Author claudio.leiva]]> 2025-04-28T09:35:20-06:00 2025-04-28T09:35:20-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45645&p=279222#p279222 yo molestandote nuevamente
compilar con MAKE.. directo.. hay un ejemplo en la carpeta visual de fivewin
se llama go.bat.. y no me sale...

alguien me puede explicar con peras y manzanas como se compila con MAKE.
yo uso buildh.bat y va bien
pero quiero saber como se hace con MAKE
porfass.]]>
yo molestandote nuevamente
compilar con MAKE.. directo.. hay un ejemplo en la carpeta visual de fivewin
se llama go.bat.. y no me sale...

alguien me puede explicar con peras y manzanas como se compila con MAKE.
yo uso buildh.bat y va bien
pero quiero saber como se hace con MAKE
porfass.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-28T10:12:55-06:00 2025-04-28T10:12:55-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45645&p=279223#p279223
https://mega.nz/file/ZMFVBCQC#EhWqJ7Fj- ... DEDXXlLFmc

Regards, saludos.]]>

https://mega.nz/file/ZMFVBCQC#EhWqJ7Fj- ... DEDXXlLFmc

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-28T14:23:21-06:00 2025-04-28T14:23:21-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45645&p=279227#p279227

Code: Select all | Expand

#VisualFW Borland make, (c) FiveTech Software 2005-2025

HBDIR=c:\XHBBCC77
BCDIR=C:\BCC77
FWDIR=C:\FWH

#change these paths as needed
.path.OBJ = .\obj
.path.PRG = ..\acbrreal
.path.CH  = $(FWDIR)\include;$(HBDIR)\include
.path.C   = .\
.path.rc  = .\   

#important: Use Uppercase for filenames extensions!

PRGS =         \
.\ACBRREAL.PRG \
.\FUNCOES.PRG  \
.\ABERTURA.PRG \
.\OUTL2007.PRG \
.\RMAILAMB.PRG \
.\ENVIADOS.PRG \
.\DSAY.PRG     \
.\CONTROL.PRG  \
.\ERRSYSW.PRG  \
.\MSGRUN.PRG   \

OBJ = $(PRGS:.PRG=.OBJ)
OBJS = $(OBJ:.\=.\obj\)

#PROJECT    : TEST.exe
PROJECT    : ACBRREAL.exe

#TEST.exe : $(OBJS)
ACBRREAL.exe : $(OBJS)
  @echo off
    
  @echo -L$(BCDIR)\lib;$(BCDIR)\lib\psdk + > b32.bc   
  @echo $(BCDIR)\lib\c0w32.obj + >> b32.bc
  @echo $(OBJS), + >> b32.bc
  @echo ACBRREAL.exe, + >> b32.bc
  @echo TEST.map, + >> b32.bc
# fivewin
  @echo $(FWDIR)\lib\Fivehx.lib + >> b32.bc 
  @echo $(FWDIR)\lib\FiveHC.lib + >> b32.bc  
  @echo $(FWDIR)\lib\libmysql.lib + >> b32.bc
  @echo $(FWDIR)\lib\pgsql.lib + >> b32.bc  
  @echo $(FWDIR)\lib\libpq.lib + >> b32.bc
# xharbour
  @echo $(HBDIR)\lib\hbhpdf.lib + >> b32.bc
  @echo $(HBDIR)\lib\libharu.lib + >> b32.bc
  @echo $(HBDIR)\lib\png.lib + >> b32.bc
  @echo $(HBDIR)\lib\rtl.lib + >> b32.bc
  @echo $(HBDIR)\lib\vm.lib + >> b32.bc
  @echo $(HBDIR)\lib\gtgui.lib + >> b32.bc
  @echo $(HBDIR)\lib\lang.lib + >> b32.bc
  @echo $(HBDIR)\lib\macro.lib + >> b32.bc
  @echo $(HBDIR)\lib\rdd.lib + >> b32.bc
  @echo $(HBDIR)\lib\dbfntx.lib + >> b32.bc
  @echo $(HBDIR)\lib\dbfcdx.lib + >> b32.bc
  @echo $(HBDIR)\lib\dbffpt.lib + >> b32.bc
  @echo $(HBDIR)\lib\hbsix.lib + >> b32.bc
  @echo $(HBDIR)\lib\debug.lib + >> b32.bc
  @echo $(HBDIR)\lib\common.lib + >> b32.bc
  @echo $(HBDIR)\lib\codepage.lib + >> b32.bc
  @echo $(HBDIR)\lib\pp.lib + >> b32.bc
  @echo $(HBDIR)\lib\pcrepos.lib + >> b32.bc
  @echo $(HBDIR)\lib\ct.lib + >> b32.bc
  @echo $(HBDIR)\lib\zlib.lib + >> b32.bc
  @echo $(HBDIR)\lib\hbzip.lib + >> b32.bc
  @echo $(HBDIR)\lib\libmisc.lib + >> b32.bc
  @echo $(HBDIR)\lib\tip.lib + >> b32.bc
  @echo $(HBDIR)\lib\hbzebra.lib + >> b32.bc
#  BCC77
  @echo $(BCDIR)\lib\cw32.lib + >> b32.bc
  @echo $(BCDIR)\lib\import32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\uuid.lib + >> b32.bc
  @echo $(BCDIR)\lib\ws2_32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\odbc32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\rasapi32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\nddeapi.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\msimg32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\psapi.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\uxtheme.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\gdiplus.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\iphlpapi.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\shell32.lib, >> b32.bc
   
#  @echo TEST.RES  + >> b32.bc
  @echo ACBRREAL.RES + >> b32.bc
  @echo IMAGENS.RES  + >> b32.bc
  @echo IMAGEN2.RES  + >> b32.bc
  @echo IMAGENS4.RES + >> b32.bc
  @echo EMAIL.RES    + >> b32.bc

  $(BCDIR)\bin\BRC32.EXE -R XPLOOK.RC
   
  $(BCDIR)\bin\ilink32 -Gn -aa -Tpe -s @b32.bc
#  del b32.bc

.PRG.OBJ:
  $(HBDIR)\bin\harbour $< /N /Oobj\ /I$(FWDIR)\include;$(HBDIR)\include
  $(BCDIR)\bin\bcc32 -c -tWM -I$(HBDIR)\include -oobj\$& obj\$&.c

.C.OBJ:
  @echo -c -tWM -D__HARBOUR__ > tmp
  @echo -I$(HBDIR)\include;$(FWDIR)\include >> tmp
  $(BCDIR)\bin\bcc32 -oobj\$& @tmp $&.c
  del tmp
Regards, saludos.]]>

Code: Select all | Expand

#VisualFW Borland make, (c) FiveTech Software 2005-2025

HBDIR=c:\XHBBCC77
BCDIR=C:\BCC77
FWDIR=C:\FWH

#change these paths as needed
.path.OBJ = .\obj
.path.PRG = ..\acbrreal
.path.CH  = $(FWDIR)\include;$(HBDIR)\include
.path.C   = .\
.path.rc  = .\   

#important: Use Uppercase for filenames extensions!

PRGS =         \
.\ACBRREAL.PRG \
.\FUNCOES.PRG  \
.\ABERTURA.PRG \
.\OUTL2007.PRG \
.\RMAILAMB.PRG \
.\ENVIADOS.PRG \
.\DSAY.PRG     \
.\CONTROL.PRG  \
.\ERRSYSW.PRG  \
.\MSGRUN.PRG   \

OBJ = $(PRGS:.PRG=.OBJ)
OBJS = $(OBJ:.\=.\obj\)

#PROJECT    : TEST.exe
PROJECT    : ACBRREAL.exe

#TEST.exe : $(OBJS)
ACBRREAL.exe : $(OBJS)
  @echo off
    
  @echo -L$(BCDIR)\lib;$(BCDIR)\lib\psdk + > b32.bc   
  @echo $(BCDIR)\lib\c0w32.obj + >> b32.bc
  @echo $(OBJS), + >> b32.bc
  @echo ACBRREAL.exe, + >> b32.bc
  @echo TEST.map, + >> b32.bc
# fivewin
  @echo $(FWDIR)\lib\Fivehx.lib + >> b32.bc 
  @echo $(FWDIR)\lib\FiveHC.lib + >> b32.bc  
  @echo $(FWDIR)\lib\libmysql.lib + >> b32.bc
  @echo $(FWDIR)\lib\pgsql.lib + >> b32.bc  
  @echo $(FWDIR)\lib\libpq.lib + >> b32.bc
# xharbour
  @echo $(HBDIR)\lib\hbhpdf.lib + >> b32.bc
  @echo $(HBDIR)\lib\libharu.lib + >> b32.bc
  @echo $(HBDIR)\lib\png.lib + >> b32.bc
  @echo $(HBDIR)\lib\rtl.lib + >> b32.bc
  @echo $(HBDIR)\lib\vm.lib + >> b32.bc
  @echo $(HBDIR)\lib\gtgui.lib + >> b32.bc
  @echo $(HBDIR)\lib\lang.lib + >> b32.bc
  @echo $(HBDIR)\lib\macro.lib + >> b32.bc
  @echo $(HBDIR)\lib\rdd.lib + >> b32.bc
  @echo $(HBDIR)\lib\dbfntx.lib + >> b32.bc
  @echo $(HBDIR)\lib\dbfcdx.lib + >> b32.bc
  @echo $(HBDIR)\lib\dbffpt.lib + >> b32.bc
  @echo $(HBDIR)\lib\hbsix.lib + >> b32.bc
  @echo $(HBDIR)\lib\debug.lib + >> b32.bc
  @echo $(HBDIR)\lib\common.lib + >> b32.bc
  @echo $(HBDIR)\lib\codepage.lib + >> b32.bc
  @echo $(HBDIR)\lib\pp.lib + >> b32.bc
  @echo $(HBDIR)\lib\pcrepos.lib + >> b32.bc
  @echo $(HBDIR)\lib\ct.lib + >> b32.bc
  @echo $(HBDIR)\lib\zlib.lib + >> b32.bc
  @echo $(HBDIR)\lib\hbzip.lib + >> b32.bc
  @echo $(HBDIR)\lib\libmisc.lib + >> b32.bc
  @echo $(HBDIR)\lib\tip.lib + >> b32.bc
  @echo $(HBDIR)\lib\hbzebra.lib + >> b32.bc
#  BCC77
  @echo $(BCDIR)\lib\cw32.lib + >> b32.bc
  @echo $(BCDIR)\lib\import32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\uuid.lib + >> b32.bc
  @echo $(BCDIR)\lib\ws2_32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\odbc32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\rasapi32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\nddeapi.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\msimg32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\psapi.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\uxtheme.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\gdiplus.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\iphlpapi.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\shell32.lib, >> b32.bc
   
#  @echo TEST.RES  + >> b32.bc
  @echo ACBRREAL.RES + >> b32.bc
  @echo IMAGENS.RES  + >> b32.bc
  @echo IMAGEN2.RES  + >> b32.bc
  @echo IMAGENS4.RES + >> b32.bc
  @echo EMAIL.RES    + >> b32.bc

  $(BCDIR)\bin\BRC32.EXE -R XPLOOK.RC
   
  $(BCDIR)\bin\ilink32 -Gn -aa -Tpe -s @b32.bc
#  del b32.bc

.PRG.OBJ:
  $(HBDIR)\bin\harbour $< /N /Oobj\ /I$(FWDIR)\include;$(HBDIR)\include
  $(BCDIR)\bin\bcc32 -c -tWM -I$(HBDIR)\include -oobj\$& obj\$&.c

.C.OBJ:
  @echo -c -tWM -D__HARBOUR__ > tmp
  @echo -I$(HBDIR)\include;$(FWDIR)\include >> tmp
  $(BCDIR)\bin\bcc32 -oobj\$& @tmp $&.c
  del tmp
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-28T14:28:48-06:00 2025-04-28T14:28:48-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45645&p=279228#p279228

Code: Select all | Expand

IF EXIST *.MAP DEL  *.MAP
IF EXIST *.TDS DEL  *.TDS
IF EXIST *.C   DEL  *.C
IF EXIST *.EXE DEL  *.EXE

@if not exist obj md obj
c:\bcc77\bin\make -ftest.mak

if exist ACBRREAL.exe C:\PECOMPACT\PEC2 /NB /EMP:Y /TM:Y /CR:Y /MC ACBRREAL.EXE

if exist ACBRREAL.exe ACBRREAL
Regards, saludos.]]>

Code: Select all | Expand

IF EXIST *.MAP DEL  *.MAP
IF EXIST *.TDS DEL  *.TDS
IF EXIST *.C   DEL  *.C
IF EXIST *.EXE DEL  *.EXE

@if not exist obj md obj
c:\bcc77\bin\make -ftest.mak

if exist ACBRREAL.exe C:\PECOMPACT\PEC2 /NB /EMP:Y /TM:Y /CR:Y /MC ACBRREAL.EXE

if exist ACBRREAL.exe ACBRREAL
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by claudio.leiva]]> 2025-04-28T14:50:56-06:00 2025-04-28T14:50:56-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45645&p=279229#p279229
Muito obrigado, vou ver o arquivo e comento.

saludos]]>

Muito obrigado, vou ver o arquivo e comento.

saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by russimicro]]> 2025-04-30T06:22:08-06:00 2025-04-30T06:22:08-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45645&p=279249#p279249
Obtengo este error al trabajar con el ejemplo : // c:\fwh24_10\samples\report

Fatal: Unable to open file 'UUID.LIB'

HBDIR=c:\harbour_2025
BCDIR=c:\bcc77
FWDIR=c:\fwh24_10


if not exist obj mkdir obj
c:\bcc77\bin\make -frepdem32.mak
IF ERRORLEVEL 0 repdemo.exe]]>

Obtengo este error al trabajar con el ejemplo : // c:\fwh24_10\samples\report

Fatal: Unable to open file 'UUID.LIB'

HBDIR=c:\harbour_2025
BCDIR=c:\bcc77
FWDIR=c:\fwh24_10


if not exist obj mkdir obj
c:\bcc77\bin\make -frepdem32.mak
IF ERRORLEVEL 0 repdemo.exe]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-30T06:53:04-06:00 2025-04-30T06:53:04-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45645&p=279251#p279251
Regards, saludos.]]>

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by russimicro]]> 2025-04-30T06:55:16-06:00 2025-04-30T06:55:16-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45645&p=279252#p279252

Code: Select all | Expand

HBDIR=c:\harbour_2025
BCDIR=c:\bcc77
FWDIR=c:\fwh24_10

#change these paths as needed
.path.OBJ = .\obj
.path.PRG = .\
.path.CH  = $(FWDIR)\include;$(HBDIR)\include
.path.C   = .\
.path.rc  = .\

#important: Use Uppercase for filenames extensions!

PRGS = \
.\REPDEMO.PRG \
.\REP02.PRG \
.\REP03.PRG \
.\REP12.PRG \
.\REP05.PRG \
.\REP04.PRG \
.\REP09.PRG \
.\REP07.PRG \
.\REP15.PRG \
.\REP08.PRG \
.\REP06.PRG \
.\REP10.PRG \
.\REP13.PRG \
.\REP11.PRG \
.\REP21.PRG \
.\REP20.PRG \
.\REP16.PRG \
.\REP19.PRG \
.\REP17.PRG \
.\REP14.PRG \
.\REP18.PRG \
.\REP01.PRG \
.\REP22.PRG \
.\REP23.PRG

OBJ = $(PRGS:.PRG=.OBJ)
OBJS = $(OBJ:.\=.\obj\)

PROJECT    : REPDEMO.EXE 

REPDEMO.EXE : $(OBJS) REPDEMO.RES ..\..\lib\FiveH.lib ..\..\lib\FiveHC.lib
   echo off
   echo $(BCDIR)\lib\c0w32.obj + > b32.bc
   echo $(OBJS), + >> b32.bc
   echo repdemo.exe, + >> b32.bc
   echo repdemo.map, + >> b32.bc
   echo $(FWDIR)\lib\FiveH.lib $(FWDIR)\lib\FiveHC.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbrtl.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbvm.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\gtgui.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hblang.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbmacro.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbrdd.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\rddntx.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\rddcdx.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\rddfpt.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbsix.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbdebug.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbcommon.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbpp.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbpcre.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbwin.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbcpage.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbct.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbcplr.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\png.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbzlib.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbziparc.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbmzip.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbzlib.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\minizip.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\xhb.lib + >> b32.bc
   
   
   rem Uncomment these two lines to use Advantage RDD
   rem echo $(HBDIR)\lib\win\bcc\rddads.lib + >> b32.bc
   rem echo $(HBDIR)\lib\win\bcc\Ace32.lib + >> b32.bc

   echo $(BCDIR)\lib\cw32.lib + >> b32.bc
   echo $(BCDIR)\lib\import32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\odbc32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\nddeapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\iphlpapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\msimg32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\psapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\shell32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\rasapi32.lib, >> b32.bc

   IF EXIST repdemo.res echo repdemo.res >> b32.bc
   $(BCDIR)\bin\ilink32 -Gn -aa -Tpe -s @b32.bc
   del b32.bc

.PRG.OBJ:
  $(HBDIR)\bin\win\bcc\harbour $< /N /W /Oobj\ /I$(FWDIR)\include;$(HBDIR)\include
  $(BCDIR)\bin\bcc32 -c -tWM -I$(HBDIR)\include -oobj\$& obj\$&.c

.C.OBJ:
  echo -c -tWM -D__HARBOUR__ > tmp
  echo -I$(HBDIR)\include;$(FWDIR)\include >> tmp
  $(BCDIR)\bin\bcc32 -oobj\$& @tmp $&.c
  del tmp

REPDEMO.RES : REPDEMO.RC
  $(BCDIR)\bin\brc32.exe -r -I$(BCDIR)\include repdemo.rc
]]>

Code: Select all | Expand

HBDIR=c:\harbour_2025
BCDIR=c:\bcc77
FWDIR=c:\fwh24_10

#change these paths as needed
.path.OBJ = .\obj
.path.PRG = .\
.path.CH  = $(FWDIR)\include;$(HBDIR)\include
.path.C   = .\
.path.rc  = .\

#important: Use Uppercase for filenames extensions!

PRGS = \
.\REPDEMO.PRG \
.\REP02.PRG \
.\REP03.PRG \
.\REP12.PRG \
.\REP05.PRG \
.\REP04.PRG \
.\REP09.PRG \
.\REP07.PRG \
.\REP15.PRG \
.\REP08.PRG \
.\REP06.PRG \
.\REP10.PRG \
.\REP13.PRG \
.\REP11.PRG \
.\REP21.PRG \
.\REP20.PRG \
.\REP16.PRG \
.\REP19.PRG \
.\REP17.PRG \
.\REP14.PRG \
.\REP18.PRG \
.\REP01.PRG \
.\REP22.PRG \
.\REP23.PRG

OBJ = $(PRGS:.PRG=.OBJ)
OBJS = $(OBJ:.\=.\obj\)

PROJECT    : REPDEMO.EXE 

REPDEMO.EXE : $(OBJS) REPDEMO.RES ..\..\lib\FiveH.lib ..\..\lib\FiveHC.lib
   echo off
   echo $(BCDIR)\lib\c0w32.obj + > b32.bc
   echo $(OBJS), + >> b32.bc
   echo repdemo.exe, + >> b32.bc
   echo repdemo.map, + >> b32.bc
   echo $(FWDIR)\lib\FiveH.lib $(FWDIR)\lib\FiveHC.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbrtl.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbvm.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\gtgui.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hblang.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbmacro.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbrdd.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\rddntx.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\rddcdx.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\rddfpt.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbsix.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbdebug.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbcommon.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbpp.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbpcre.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbwin.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbcpage.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbct.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbcplr.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\png.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbzlib.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbziparc.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbmzip.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbzlib.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\minizip.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\xhb.lib + >> b32.bc
   
   
   rem Uncomment these two lines to use Advantage RDD
   rem echo $(HBDIR)\lib\win\bcc\rddads.lib + >> b32.bc
   rem echo $(HBDIR)\lib\win\bcc\Ace32.lib + >> b32.bc

   echo $(BCDIR)\lib\cw32.lib + >> b32.bc
   echo $(BCDIR)\lib\import32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\odbc32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\nddeapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\iphlpapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\msimg32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\psapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\shell32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\rasapi32.lib, >> b32.bc

   IF EXIST repdemo.res echo repdemo.res >> b32.bc
   $(BCDIR)\bin\ilink32 -Gn -aa -Tpe -s @b32.bc
   del b32.bc

.PRG.OBJ:
  $(HBDIR)\bin\win\bcc\harbour $< /N /W /Oobj\ /I$(FWDIR)\include;$(HBDIR)\include
  $(BCDIR)\bin\bcc32 -c -tWM -I$(HBDIR)\include -oobj\$& obj\$&.c

.C.OBJ:
  echo -c -tWM -D__HARBOUR__ > tmp
  echo -I$(HBDIR)\include;$(FWDIR)\include >> tmp
  $(BCDIR)\bin\bcc32 -oobj\$& @tmp $&.c
  del tmp

REPDEMO.RES : REPDEMO.RC
  $(BCDIR)\bin\brc32.exe -r -I$(BCDIR)\include repdemo.rc
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by russimicro]]> 2025-04-30T06:56:01-06:00 2025-04-30T06:56:01-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45645&p=279253#p279253

Code: Select all | Expand

if not exist obj mkdir obj
c:\bcc77\bin\make -f repdem32.mak
IF ERRORLEVEL 0 repdemo.exe
]]>

Code: Select all | Expand

if not exist obj mkdir obj
c:\bcc77\bin\make -f repdem32.mak
IF ERRORLEVEL 0 repdemo.exe
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-30T07:38:17-06:00 2025-04-30T07:38:17-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45645&p=279255#p279255
https://imgur.com/rKA9PvS

Image

Gracias, tks.

Regards, saludos.]]>

https://imgur.com/rKA9PvS

Image

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-30T08:20:13-06:00 2025-04-30T08:20:13-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45645&p=279256#p279256

Code: Select all | Expand

#VisualFW Borland make, (c) FiveTech Software 2005-2025 - Modificado: Kapiaba.

HBDIR=c:\HBBCC77
BCDIR=c:\BCC77
FWDIR=C:\fwh...

#change these paths as needed
.path.OBJ = .\obj
.path.PRG = ..\repdemo
.path.CH  = $(FWDIR)\include;$(HBDIR)\include
.path.C   = .\
.path.rc  = .\

#important: Use Uppercase for filenames extensions!

PRGS = \
.\REPDEMO.PRG \
.\REP02.PRG \
.\REP03.PRG \
.\REP12.PRG \
.\REP05.PRG \
.\REP04.PRG \
.\REP09.PRG \
.\REP07.PRG \
.\REP15.PRG \
.\REP08.PRG \
.\REP06.PRG \
.\REP10.PRG \
.\REP13.PRG \
.\REP11.PRG \
.\REP21.PRG \
.\REP20.PRG \
.\REP16.PRG \
.\REP19.PRG \
.\REP17.PRG \
.\REP14.PRG \
.\REP18.PRG \
.\REP01.PRG \
.\REP22.PRG \
.\REP23.PRG

OBJ = $(PRGS:.PRG=.OBJ)
OBJS = $(OBJ:.\=.\obj\)

PROJECT    : REPDEMO.EXE 

REPDEMO.EXE : $(OBJS) REPDEMO.RES $(FWDIR)\lib\FiveH.lib $(FWDIR)\lib\FiveHC.lib
   echo off
   echo $(BCDIR)\lib\c0w32.obj + > b32.bc
   echo $(OBJS), + >> b32.bc
   echo repdemo.exe, + >> b32.bc
   echo repdemo.map, + >> b32.bc
   echo $(FWDIR)\lib\FiveH.lib $(FWDIR)\lib\FiveHC.lib + >> b32.bc
   echo $(HBDIR)\lib\hbrtl.lib + >> b32.bc
   echo $(HBDIR)\lib\hbvm.lib + >> b32.bc
   echo $(HBDIR)\lib\gtgui.lib + >> b32.bc
   echo $(HBDIR)\lib\hblang.lib + >> b32.bc
   echo $(HBDIR)\lib\hbmacro.lib + >> b32.bc
   echo $(HBDIR)\lib\hbrdd.lib + >> b32.bc
   echo $(HBDIR)\lib\rddntx.lib + >> b32.bc
   echo $(HBDIR)\lib\rddcdx.lib + >> b32.bc
   echo $(HBDIR)\lib\rddfpt.lib + >> b32.bc
   echo $(HBDIR)\lib\hbsix.lib + >> b32.bc
   echo $(HBDIR)\lib\hbdebug.lib + >> b32.bc
   echo $(HBDIR)\lib\hbcommon.lib + >> b32.bc
   echo $(HBDIR)\lib\hbpp.lib + >> b32.bc
   echo $(HBDIR)\lib\hbpcre.lib + >> b32.bc
   echo $(HBDIR)\lib\hbwin.lib + >> b32.bc
   echo $(HBDIR)\lib\hbcpage.lib + >> b32.bc
   echo $(HBDIR)\lib\hbct.lib + >> b32.bc
   echo $(HBDIR)\lib\hbcplr.lib + >> b32.bc
   echo $(HBDIR)\lib\png.lib + >> b32.bc
   echo $(HBDIR)\lib\hbzlib.lib + >> b32.bc
   echo $(HBDIR)\lib\hbziparc.lib + >> b32.bc
   echo $(HBDIR)\lib\hbmzip.lib + >> b32.bc
   echo $(HBDIR)\lib\hbzlib.lib + >> b32.bc
   echo $(HBDIR)\lib\minizip.lib + >> b32.bc
   echo $(HBDIR)\lib\xhb.lib + >> b32.bc
   
#  BCC77
   echo $(BCDIR)\lib\cw32.lib + >> b32.bc
   echo $(BCDIR)\lib\import32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\uuid.lib + >> b32.bc
   echo $(BCDIR)\lib\ws2_32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\odbc32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\rasapi32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\nddeapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\msimg32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\psapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\uxtheme.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\gdiplus.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\iphlpapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\shell32.lib, >> b32.bc

   IF EXIST repdemo.res echo repdemo.res >> b32.bc
   $(BCDIR)\bin\ilink32 -Gn -aa -Tpe -s @b32.bc

   del b32.bc

.PRG.OBJ:
  $(HBDIR)\bin\harbour $< /N /W /Oobj\ /I$(FWDIR)\include;$(HBDIR)\include
  $(BCDIR)\bin\bcc32 -c -tWM -I$(HBDIR)\include -oobj\$& obj\$&.c

.C.OBJ:
  echo -c -tWM -D__HARBOUR__ > tmp
  echo -I$(HBDIR)\include;$(FWDIR)\include >> tmp
  $(BCDIR)\bin\bcc32 -oobj\$& @tmp $&.c

  del tmp

REPDEMO.RES : REPDEMO.RC
  $(BCDIR)\bin\brc32.exe -r -I$(BCDIR)\include repdemo.rc
Regards, saludos.]]>

Code: Select all | Expand

#VisualFW Borland make, (c) FiveTech Software 2005-2025 - Modificado: Kapiaba.

HBDIR=c:\HBBCC77
BCDIR=c:\BCC77
FWDIR=C:\fwh...

#change these paths as needed
.path.OBJ = .\obj
.path.PRG = ..\repdemo
.path.CH  = $(FWDIR)\include;$(HBDIR)\include
.path.C   = .\
.path.rc  = .\

#important: Use Uppercase for filenames extensions!

PRGS = \
.\REPDEMO.PRG \
.\REP02.PRG \
.\REP03.PRG \
.\REP12.PRG \
.\REP05.PRG \
.\REP04.PRG \
.\REP09.PRG \
.\REP07.PRG \
.\REP15.PRG \
.\REP08.PRG \
.\REP06.PRG \
.\REP10.PRG \
.\REP13.PRG \
.\REP11.PRG \
.\REP21.PRG \
.\REP20.PRG \
.\REP16.PRG \
.\REP19.PRG \
.\REP17.PRG \
.\REP14.PRG \
.\REP18.PRG \
.\REP01.PRG \
.\REP22.PRG \
.\REP23.PRG

OBJ = $(PRGS:.PRG=.OBJ)
OBJS = $(OBJ:.\=.\obj\)

PROJECT    : REPDEMO.EXE 

REPDEMO.EXE : $(OBJS) REPDEMO.RES $(FWDIR)\lib\FiveH.lib $(FWDIR)\lib\FiveHC.lib
   echo off
   echo $(BCDIR)\lib\c0w32.obj + > b32.bc
   echo $(OBJS), + >> b32.bc
   echo repdemo.exe, + >> b32.bc
   echo repdemo.map, + >> b32.bc
   echo $(FWDIR)\lib\FiveH.lib $(FWDIR)\lib\FiveHC.lib + >> b32.bc
   echo $(HBDIR)\lib\hbrtl.lib + >> b32.bc
   echo $(HBDIR)\lib\hbvm.lib + >> b32.bc
   echo $(HBDIR)\lib\gtgui.lib + >> b32.bc
   echo $(HBDIR)\lib\hblang.lib + >> b32.bc
   echo $(HBDIR)\lib\hbmacro.lib + >> b32.bc
   echo $(HBDIR)\lib\hbrdd.lib + >> b32.bc
   echo $(HBDIR)\lib\rddntx.lib + >> b32.bc
   echo $(HBDIR)\lib\rddcdx.lib + >> b32.bc
   echo $(HBDIR)\lib\rddfpt.lib + >> b32.bc
   echo $(HBDIR)\lib\hbsix.lib + >> b32.bc
   echo $(HBDIR)\lib\hbdebug.lib + >> b32.bc
   echo $(HBDIR)\lib\hbcommon.lib + >> b32.bc
   echo $(HBDIR)\lib\hbpp.lib + >> b32.bc
   echo $(HBDIR)\lib\hbpcre.lib + >> b32.bc
   echo $(HBDIR)\lib\hbwin.lib + >> b32.bc
   echo $(HBDIR)\lib\hbcpage.lib + >> b32.bc
   echo $(HBDIR)\lib\hbct.lib + >> b32.bc
   echo $(HBDIR)\lib\hbcplr.lib + >> b32.bc
   echo $(HBDIR)\lib\png.lib + >> b32.bc
   echo $(HBDIR)\lib\hbzlib.lib + >> b32.bc
   echo $(HBDIR)\lib\hbziparc.lib + >> b32.bc
   echo $(HBDIR)\lib\hbmzip.lib + >> b32.bc
   echo $(HBDIR)\lib\hbzlib.lib + >> b32.bc
   echo $(HBDIR)\lib\minizip.lib + >> b32.bc
   echo $(HBDIR)\lib\xhb.lib + >> b32.bc
   
#  BCC77
   echo $(BCDIR)\lib\cw32.lib + >> b32.bc
   echo $(BCDIR)\lib\import32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\uuid.lib + >> b32.bc
   echo $(BCDIR)\lib\ws2_32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\odbc32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\rasapi32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\nddeapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\msimg32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\psapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\uxtheme.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\gdiplus.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\iphlpapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\shell32.lib, >> b32.bc

   IF EXIST repdemo.res echo repdemo.res >> b32.bc
   $(BCDIR)\bin\ilink32 -Gn -aa -Tpe -s @b32.bc

   del b32.bc

.PRG.OBJ:
  $(HBDIR)\bin\harbour $< /N /W /Oobj\ /I$(FWDIR)\include;$(HBDIR)\include
  $(BCDIR)\bin\bcc32 -c -tWM -I$(HBDIR)\include -oobj\$& obj\$&.c

.C.OBJ:
  echo -c -tWM -D__HARBOUR__ > tmp
  echo -I$(HBDIR)\include;$(FWDIR)\include >> tmp
  $(BCDIR)\bin\bcc32 -oobj\$& @tmp $&.c

  del tmp

REPDEMO.RES : REPDEMO.RC
  $(BCDIR)\bin\brc32.exe -r -I$(BCDIR)\include repdemo.rc
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-30T08:22:02-06:00 2025-04-30T08:22:02-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45645&p=279257#p279257

Code: Select all | Expand

IF EXIST C:\REPDEMO\OBJ\*.OBJ DEL C:\REPDEMO\OBJ\*.OBJ
IF EXIST *.MAP DEL  *.MAP
IF EXIST *.TDS DEL  *.TDS
IF EXIST *.C   DEL  *.C
IF EXIST C:\REPDEMO\OBJ\*.C DEL C:\REPDEMO\OBJ\*.C
IF EXIST *.LOG DEL  *.LOG
IF EXIST *.EXE DEL  *.EXE

if not exist obj mkdir obj

c:\bcc77\bin\make -frepdem32.mak

REM if exist REPDEMO.exe C:\PECOMPACT\PEC2 /NB /EMP:Y /TM:Y /CR:Y /MC REPDEMO.EXE

IF ERRORLEVEL 0 REPDEMO.exe
Regards, saludos.]]>

Code: Select all | Expand

IF EXIST C:\REPDEMO\OBJ\*.OBJ DEL C:\REPDEMO\OBJ\*.OBJ
IF EXIST *.MAP DEL  *.MAP
IF EXIST *.TDS DEL  *.TDS
IF EXIST *.C   DEL  *.C
IF EXIST C:\REPDEMO\OBJ\*.C DEL C:\REPDEMO\OBJ\*.C
IF EXIST *.LOG DEL  *.LOG
IF EXIST *.EXE DEL  *.EXE

if not exist obj mkdir obj

c:\bcc77\bin\make -frepdem32.mak

REM if exist REPDEMO.exe C:\PECOMPACT\PEC2 /NB /EMP:Y /TM:Y /CR:Y /MC REPDEMO.EXE

IF ERRORLEVEL 0 REPDEMO.exe
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-30T08:26:55-06:00 2025-04-30T08:26:55-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45645&p=279258#p279258
https://mega.nz/file/QcE1hIJT#-I2XM65sF ... KZ3ClUjTtA

Regards, saludos.]]>

https://mega.nz/file/QcE1hIJT#-I2XM65sF ... KZ3ClUjTtA

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by russimicro]]> 2025-04-30T08:58:14-06:00 2025-04-30T08:58:14-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45645&p=279259#p279259
Turbo Incremental Link 6.97 Copyright (c) 1997-2022 Embarcadero Technologies, Inc.
Fatal: Unable to open file 'UUID.LIB'

me puedes compartir el harbour que usas

Gracias]]>

Turbo Incremental Link 6.97 Copyright (c) 1997-2022 Embarcadero Technologies, Inc.
Fatal: Unable to open file 'UUID.LIB'

me puedes compartir el harbour que usas

Gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-30T09:03:37-06:00 2025-04-30T09:03:37-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45645&p=279260#p279260
viewtopic.php?p=277699#p277699

Mejor, dowload completo:

https://mega.nz/file/tUFRQCRL#XMH9seQZm ... koghRHVTP4

Regards, saludos.]]>

viewtopic.php?p=277699#p277699

Mejor, dowload completo:

https://mega.nz/file/tUFRQCRL#XMH9seQZm ... koghRHVTP4

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by russimicro]]> 2025-04-30T09:14:57-06:00 2025-04-30T09:14:57-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45645&p=279261#p279261 BCDIR=c:\bcc77
FWDIR=c:\fwh24_10

Fatal: Unable to open file 'UUID.LIB'

sera del bcc77

Favor compartir el que usas

Gracias]]>
BCDIR=c:\bcc77
FWDIR=c:\fwh24_10

Fatal: Unable to open file 'UUID.LIB'

sera del bcc77

Favor compartir el que usas

Gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by russimicro]]> 2025-04-30T09:26:45-06:00 2025-04-30T09:26:45-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45645&p=279263#p279263 ya se solucionó...el error era la versión de borland.. que tenía... ya estoy con la que pasaste

ya funciona con su harbour y con la version harbour_2025

muchas gracias]]>
ya se solucionó...el error era la versión de borland.. que tenía... ya estoy con la que pasaste

ya funciona con su harbour y con la version harbour_2025

muchas gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-30T09:28:31-06:00 2025-04-30T09:28:31-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45645&p=279264#p279264
russimicro wrote: Wed Apr 30, 2025 3:26 pm ok...
ya se solucionó...el error era la versión de borland.. que tenía... ya estoy con la que pasaste

ya funciona con su harbour y con la version 2025

muchas gracias
Excelente!

Regards, saludos.]]>
russimicro wrote: Wed Apr 30, 2025 3:26 pm ok...
ya se solucionó...el error era la versión de borland.. que tenía... ya estoy con la que pasaste

ya funciona con su harbour y con la version 2025

muchas gracias
Excelente!

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Trabajar Wrapper Java desde C :: Reply by jose_murugosa]]> 2025-04-29T12:00:39-06:00 2025-04-29T12:00:39-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45467&p=279237#p279237 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Trabajar Wrapper Java desde C :: Reply by sysctrl2]]> 2025-04-29T19:09:18-06:00 2025-04-29T19:09:18-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45467&p=279240#p279240
JasperSoft es una plataforma de inteligencia empresarial (Business Intelligence o BI) especializada en la generación de informes y análisis de datos. Algunas de sus características principales incluyen:
1. Creación de informes: Permite diseñar, generar y distribuir informes con datos empresariales en múltiples formatos (PDF, Excel, HTML, etc.)
2. Análisis de datos: Ofrece herramientas para analizar grandes volúmenes de información y transformarlos en visualizaciones comprensibles
3. JasperReports Library: Es el motor de informes de código abierto que sirve como base de la plataforma
4. JasperReports Server: Una aplicación web que permite gestionar informes, paneles y análisis
5. Jaspersoft Studio: Una herramienta de diseño visual para crear informes personalizados

Esta plataforma es especialmente útil para empresas que necesitan organizar y visualizar sus datos de manera estructurada, facilitando la toma de decisiones basadas en información.]]>

JasperSoft es una plataforma de inteligencia empresarial (Business Intelligence o BI) especializada en la generación de informes y análisis de datos. Algunas de sus características principales incluyen:
1. Creación de informes: Permite diseñar, generar y distribuir informes con datos empresariales en múltiples formatos (PDF, Excel, HTML, etc.)
2. Análisis de datos: Ofrece herramientas para analizar grandes volúmenes de información y transformarlos en visualizaciones comprensibles
3. JasperReports Library: Es el motor de informes de código abierto que sirve como base de la plataforma
4. JasperReports Server: Una aplicación web que permite gestionar informes, paneles y análisis
5. Jaspersoft Studio: Una herramienta de diseño visual para crear informes personalizados

Esta plataforma es especialmente útil para empresas que necesitan organizar y visualizar sus datos de manera estructurada, facilitando la toma de decisiones basadas en información.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Trabajar Wrapper Java desde C :: Reply by sysctrl2]]> 2025-04-29T19:14:13-06:00 2025-04-29T19:14:13-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45467&p=279241#p279241 :roll: :lol:]]> :roll: :lol:]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Trabajar Wrapper Java desde C :: Reply by sysctrl2]]> 2025-04-29T19:49:02-06:00 2025-04-29T19:49:02-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45467&p=279242#p279242 no será difícil aprender !
Image]]>
no será difícil aprender !
Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Trabajar Wrapper Java desde C :: Reply by Antonio Linares]]> 2025-04-29T23:08:00-06:00 2025-04-29T23:08:00-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45467&p=279244#p279244
A ver si podemos construirlo:
https://github.com/xHarbour-org/xharbou ... ual-Report]]>

A ver si podemos construirlo:
https://github.com/xHarbour-org/xharbou ... ual-Report]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Trabajar Wrapper Java desde C :: Reply by claudio.leiva]]> 2025-04-30T09:51:21-06:00 2025-04-30T09:51:21-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45467&p=279270#p279270 Master,, podes poner como descargarlos... no doy con el hilo
saludos]]>
Master,, podes poner como descargarlos... no doy con el hilo
saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Trabajar Wrapper Java desde C :: Reply by Antonio Linares]]> 2025-04-30T09:54:47-06:00 2025-04-30T09:54:47-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45467&p=279271#p279271 https://github.com/xHarbour-org/xharbou ... s/main.zip

Estoy al habla con Ron Pinkas para que nos ayude a construir todo correctamente]]>
https://github.com/xHarbour-org/xharbou ... s/main.zip

Estoy al habla con Ron Pinkas para que nos ayude a construir todo correctamente]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Trabajar Wrapper Java desde C :: Reply by sysctrl2]]> 2025-04-30T09:56:22-06:00 2025-04-30T09:56:22-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45467&p=279272#p279272 ]]> ]]> <![CDATA[FiveWin para Harbour/xHarbour :: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Author FiveWiDi]]> 2025-04-30T07:35:23-06:00 2025-04-30T07:35:23-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45647&p=279254#p279254
Si quiero ver un fichero *** XML *** así:

XBROWSER ( cFileXML ) TITLE cTitle

se abre una ventana donde su muestra el contenido del fichero (perfecto), pero el título de la ventana no logro que sea el que yo quiero ( TITLE ), muestra siempre como título de la ventana el nombre completo del fichero.

¿Estoy haciendo algo mal?

******************************************************
Editado:
Hay alguna manera en SETUP de cambiar el título de la ventana?

Cómo?

#xtranslate XBROWSER [<uData>] ;
[ TITLE <cTitle> ] ;
[ <autosort:AUTOSORT> ] ;
[ SETUP <fnSetUp> ] ;
[ COLUMNS <aCols,...> ] ;
[ SELECT <fnSelect> ] ;
[ <excel: CALC> ];
[ <fastedit: FASTEDIT> ];
[ VALID <uValid> ] ;
[ [SHOW] <sl: RECID,SLNUM> ] ;
[ <nomodal: NOMODAL> ] ;
[ <autofit: AUTOFIT> ] ;
=> ;
XBrowse( [<uData>], [<cTitle>], [<.autosort.>], ;
[\{|oBrw|<fnSetUp>\}], [\{<aCols>\}], ;
[\{|oBrw,oCol|<fnSelect>\}],!<.excel.>, <.fastedit.>, [\{|oBrw|<uValid>\}], ;
<(sl)>, <.nomodal.>, <.autofit.> )



Gracias,]]>

Si quiero ver un fichero *** XML *** así:

XBROWSER ( cFileXML ) TITLE cTitle

se abre una ventana donde su muestra el contenido del fichero (perfecto), pero el título de la ventana no logro que sea el que yo quiero ( TITLE ), muestra siempre como título de la ventana el nombre completo del fichero.

¿Estoy haciendo algo mal?

******************************************************
Editado:
Hay alguna manera en SETUP de cambiar el título de la ventana?

Cómo?

#xtranslate XBROWSER [<uData>] ;
[ TITLE <cTitle> ] ;
[ <autosort:AUTOSORT> ] ;
[ SETUP <fnSetUp> ] ;
[ COLUMNS <aCols,...> ] ;
[ SELECT <fnSelect> ] ;
[ <excel: CALC> ];
[ <fastedit: FASTEDIT> ];
[ VALID <uValid> ] ;
[ [SHOW] <sl: RECID,SLNUM> ] ;
[ <nomodal: NOMODAL> ] ;
[ <autofit: AUTOFIT> ] ;
=> ;
XBrowse( [<uData>], [<cTitle>], [<.autosort.>], ;
[\{|oBrw|<fnSetUp>\}], [\{<aCols>\}], ;
[\{|oBrw,oCol|<fnSelect>\}],!<.excel.>, <.fastedit.>, [\{|oBrw|<uValid>\}], ;
<(sl)>, <.nomodal.>, <.autofit.> )



Gracias,]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Reply by Antonio Linares]]> 2025-04-30T09:31:20-06:00 2025-04-30T09:31:20-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45647&p=279265#p279265
Prueba con:

XBROWSER ( cFileXML ) SETUP xsetup( oBrw )

function xsetup( oBrw )

oBrw:oWnd:SetText( "nuevo titulo" )

return nil]]>

Prueba con:

XBROWSER ( cFileXML ) SETUP xsetup( oBrw )

function xsetup( oBrw )

oBrw:oWnd:SetText( "nuevo titulo" )

return nil]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Reply by FiveWiDi]]> 2025-04-30T09:45:31-06:00 2025-04-30T09:45:31-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45647&p=279269#p279269
Antonio Linares wrote: Wed Apr 30, 2025 3:31 pm Carlos,

Prueba con:

XBROWSER ( cFileXML ) SETUP xsetup( oBrw )

function xsetup( oBrw )

oBrw:oWnd:SetText( "nuevo titulo" )

return nil
Muchas gracias Antonio,

Pero no ha funcionado, no peta pero no cambia el Title de la ventana.
Es que no encuentro como gestiona el mostrar el contenido de un XML y no sé como meterle mano.

Para próximas versiones quizás sería interesante que XBrowse() devolviera su oWnd.

A ve si se te ocurre otra manera de como modifcar el Title. No es grave pero a mi usuario le facilita las cosas.]]>
Antonio Linares wrote: Wed Apr 30, 2025 3:31 pm Carlos,

Prueba con:

XBROWSER ( cFileXML ) SETUP xsetup( oBrw )

function xsetup( oBrw )

oBrw:oWnd:SetText( "nuevo titulo" )

return nil
Muchas gracias Antonio,

Pero no ha funcionado, no peta pero no cambia el Title de la ventana.
Es que no encuentro como gestiona el mostrar el contenido de un XML y no sé como meterle mano.

Para próximas versiones quizás sería interesante que XBrowse() devolviera su oWnd.

A ve si se te ocurre otra manera de como modifcar el Title. No es grave pero a mi usuario le facilita las cosas.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Reply by Antonio Linares]]> 2025-04-30T09:59:51-06:00 2025-04-30T09:59:51-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45647&p=279273#p279273
Prueba asi:

Code: Select all | Expand

function xsetup( oBrw )

   oBrw:oWnd:bInit = { || oBrw:oWnd:SetText( "Titulo" ) }

return nil
]]>

Prueba asi:

Code: Select all | Expand

function xsetup( oBrw )

   oBrw:oWnd:bInit = { || oBrw:oWnd:SetText( "Titulo" ) }

return nil
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Reply by FiveWiDi]]> 2025-04-30T10:10:45-06:00 2025-04-30T10:10:45-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45647&p=279274#p279274
Antonio Linares wrote: Wed Apr 30, 2025 3:59 pm Carlos,

Prueba asi:

Code: Select all | Expand

function xsetup( oBrw )

   oBrw:oWnd:bInit = { || oBrw:oWnd:SetText( "Titulo" ) }

return nil
No hay manera.

Debe leer el XML y después le debe aplicar el Title (buenos eso imagino).

Con un doble click en algún lugar de la ventana se podría forzar el cambio del Title?

Recordemos que se está visualizando un XML (creo que en un Tree).]]>
Antonio Linares wrote: Wed Apr 30, 2025 3:59 pm Carlos,

Prueba asi:

Code: Select all | Expand

function xsetup( oBrw )

   oBrw:oWnd:bInit = { || oBrw:oWnd:SetText( "Titulo" ) }

return nil
No hay manera.

Debe leer el XML y después le debe aplicar el Title (buenos eso imagino).

Con un doble click en algún lugar de la ventana se podría forzar el cambio del Title?

Recordemos que se está visualizando un XML (creo que en un Tree).]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Reply by Antonio Linares]]> 2025-04-30T10:40:31-06:00 2025-04-30T10:40:31-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45647&p=279277#p279277
Este código funciona bien aqui desde la carpeta FWH\samples:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   XBROWSER memoRead( "test.xml" ) SETUP xsetup( oBrw )

return nil

function xsetup( oBrw )

   oBrw:oWnd:bInit = { || oBrw:oWnd:SetText( "Titulo" ) }

return nil
Puedes proporcionarme tu XML ?]]>

Este código funciona bien aqui desde la carpeta FWH\samples:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   XBROWSER memoRead( "test.xml" ) SETUP xsetup( oBrw )

return nil

function xsetup( oBrw )

   oBrw:oWnd:bInit = { || oBrw:oWnd:SetText( "Titulo" ) }

return nil
Puedes proporcionarme tu XML ?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Reply by FiveWiDi]]> 2025-04-30T10:52:27-06:00 2025-04-30T10:52:27-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45647&p=279278#p279278
Este es el XML:

<!-- Date: 27-04-2025 Time: 22:05:04 -->
<!-- DESKTOP-SPO2CAU -->
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sum="https://www2.agenciatributaria.gob.es/s ... stroLR.xsd" xmlns:sum1="https://www2.agenciatributaria.gob.es/s ... macion.xsd" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soapenv:Header/>
<soapenv:Body>
<sum:RegFactuSistemaFacturacion>
<sum:Cabecera>
<sum1:ObligadoEmision>
<sum1:NombreRazon>LIMON, S.L.</sum1:NombreRazon>
<sum1:NIF>B62195999</sum1:NIF>
</sum1:ObligadoEmision>
</sum:Cabecera>
<sum:RegistroFactura>
<sum1:RegistroAlta>
<sum1:IDVersion>1.0</sum1:IDVersion>
<sum1:IDFactura>
<sum1:IDEmisorFactura>B62195999</sum1:IDEmisorFactura>
<sum1:NumSerieFactura>2025-000-000338</sum1:NumSerieFactura>
<sum1:FechaExpedicionFactura>27-04-2025</sum1:FechaExpedicionFactura>
</sum1:IDFactura>
<sum1:RefExterna>VFR-20250427-220356-255</sum1:RefExterna>
<sum1:NombreRazonEmisor>LIMON, S.L.</sum1:NombreRazonEmisor>
<sum1:Subsanacion>S</sum1:Subsanacion>
<sum1:RechazoPrevio>X</sum1:RechazoPrevio>
<sum1:TipoFactura>F1</sum1:TipoFactura>
<sum1:DescripcionOperacion>Ventas/Prestación de servicios.</sum1:DescripcionOperacion>
<sum1:FacturaSimplificadaArt7273>N</sum1:FacturaSimplificadaArt7273>
<sum1:FacturaSinIdentifDestinatarioArt61d>N</sum1:FacturaSinIdentifDestinatarioArt61d>
<sum1:Macrodato>N</sum1:Macrodato>
<sum1:Destinatarios>
<sum1:IDDestinatario>
<sum1:NombreRazon>HHJJ</sum1:NombreRazon>
<sum1:NIF>B81431999</sum1:NIF>
</sum1:IDDestinatario>
</sum1:Destinatarios>
<sum1:Cupon>N</sum1:Cupon>
<sum1:Desglose>
<sum1:DetalleDesglose>
<sum1:Impuesto>01</sum1:Impuesto>
<sum1:ClaveRegimen>01</sum1:ClaveRegimen>
<sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
<sum1:TipoImpositivo>21.00</sum1:TipoImpositivo>
<sum1:BaseImponibleOimporteNoSujeto>100.00</sum1:BaseImponibleOimporteNoSujeto>
<sum1:CuotaRepercutida>21.00</sum1:CuotaRepercutida>
</sum1:DetalleDesglose>
</sum1:Desglose>
<sum1:CuotaTotal>21.00</sum1:CuotaTotal>
<sum1:ImporteTotal>121.00</sum1:ImporteTotal>
<sum1:Encadenamiento>
<sum1:RegistroAnterior>
<sum1:IDEmisorFactura>B62195999</sum1:IDEmisorFactura>
<sum1:NumSerieFactura>2024-000-000238</sum1:NumSerieFactura>
<sum1:FechaExpedicionFactura>01-11-2024</sum1:FechaExpedicionFactura>
<sum1:Huella>86BDE649CD4194261357D3E37E9F93BE1AB2C7FB3603BFFAE22CFA03D1FABB09</sum1:Huella>
</sum1:RegistroAnterior>
</sum1:Encadenamiento>
<sum1:SistemaInformatico>
<sum1:NombreRazon>LIMON, S.L.</sum1:NombreRazon>
<sum1:NIF>B62195999</sum1:NIF>
<sum1:NombreSistemaInformatico>BECFACT</sum1:NombreSistemaInformatico>
<sum1:IdSistemaInformatico>BF</sum1:IdSistemaInformatico>
<sum1:Version>Beta 1.0</sum1:Version>
<sum1:NumeroInstalacion>BETA01.00</sum1:NumeroInstalacion>
<sum1:TipoUsoPosibleSoloVerifactu>S</sum1:TipoUsoPosibleSoloVerifactu>
<sum1:TipoUsoPosibleMultiOT>N</sum1:TipoUsoPosibleMultiOT>
<sum1:IndicadorMultiplesOT>N</sum1:IndicadorMultiplesOT>
</sum1:SistemaInformatico>
<sum1:FechaHoraHusoGenRegistro>2025-04-27T22:03:56+02:00</sum1:FechaHoraHusoGenRegistro>
<sum1:TipoHuella>01</sum1:TipoHuella>
<sum1:Huella>141E61740CE04E6BC6FC1877965CAB8A3D7E3329C39C53BA3E9B9D596AEE0EC7</sum1:Huella>
</sum1:RegistroAlta>
</sum:RegistroFactura>
</sum:RegFactuSistemaFacturacion>
</soapenv:Body>
</soapenv:Envelope>]]>

Este es el XML:

<!-- Date: 27-04-2025 Time: 22:05:04 -->
<!-- DESKTOP-SPO2CAU -->
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sum="https://www2.agenciatributaria.gob.es/s ... stroLR.xsd" xmlns:sum1="https://www2.agenciatributaria.gob.es/s ... macion.xsd" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soapenv:Header/>
<soapenv:Body>
<sum:RegFactuSistemaFacturacion>
<sum:Cabecera>
<sum1:ObligadoEmision>
<sum1:NombreRazon>LIMON, S.L.</sum1:NombreRazon>
<sum1:NIF>B62195999</sum1:NIF>
</sum1:ObligadoEmision>
</sum:Cabecera>
<sum:RegistroFactura>
<sum1:RegistroAlta>
<sum1:IDVersion>1.0</sum1:IDVersion>
<sum1:IDFactura>
<sum1:IDEmisorFactura>B62195999</sum1:IDEmisorFactura>
<sum1:NumSerieFactura>2025-000-000338</sum1:NumSerieFactura>
<sum1:FechaExpedicionFactura>27-04-2025</sum1:FechaExpedicionFactura>
</sum1:IDFactura>
<sum1:RefExterna>VFR-20250427-220356-255</sum1:RefExterna>
<sum1:NombreRazonEmisor>LIMON, S.L.</sum1:NombreRazonEmisor>
<sum1:Subsanacion>S</sum1:Subsanacion>
<sum1:RechazoPrevio>X</sum1:RechazoPrevio>
<sum1:TipoFactura>F1</sum1:TipoFactura>
<sum1:DescripcionOperacion>Ventas/Prestación de servicios.</sum1:DescripcionOperacion>
<sum1:FacturaSimplificadaArt7273>N</sum1:FacturaSimplificadaArt7273>
<sum1:FacturaSinIdentifDestinatarioArt61d>N</sum1:FacturaSinIdentifDestinatarioArt61d>
<sum1:Macrodato>N</sum1:Macrodato>
<sum1:Destinatarios>
<sum1:IDDestinatario>
<sum1:NombreRazon>HHJJ</sum1:NombreRazon>
<sum1:NIF>B81431999</sum1:NIF>
</sum1:IDDestinatario>
</sum1:Destinatarios>
<sum1:Cupon>N</sum1:Cupon>
<sum1:Desglose>
<sum1:DetalleDesglose>
<sum1:Impuesto>01</sum1:Impuesto>
<sum1:ClaveRegimen>01</sum1:ClaveRegimen>
<sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
<sum1:TipoImpositivo>21.00</sum1:TipoImpositivo>
<sum1:BaseImponibleOimporteNoSujeto>100.00</sum1:BaseImponibleOimporteNoSujeto>
<sum1:CuotaRepercutida>21.00</sum1:CuotaRepercutida>
</sum1:DetalleDesglose>
</sum1:Desglose>
<sum1:CuotaTotal>21.00</sum1:CuotaTotal>
<sum1:ImporteTotal>121.00</sum1:ImporteTotal>
<sum1:Encadenamiento>
<sum1:RegistroAnterior>
<sum1:IDEmisorFactura>B62195999</sum1:IDEmisorFactura>
<sum1:NumSerieFactura>2024-000-000238</sum1:NumSerieFactura>
<sum1:FechaExpedicionFactura>01-11-2024</sum1:FechaExpedicionFactura>
<sum1:Huella>86BDE649CD4194261357D3E37E9F93BE1AB2C7FB3603BFFAE22CFA03D1FABB09</sum1:Huella>
</sum1:RegistroAnterior>
</sum1:Encadenamiento>
<sum1:SistemaInformatico>
<sum1:NombreRazon>LIMON, S.L.</sum1:NombreRazon>
<sum1:NIF>B62195999</sum1:NIF>
<sum1:NombreSistemaInformatico>BECFACT</sum1:NombreSistemaInformatico>
<sum1:IdSistemaInformatico>BF</sum1:IdSistemaInformatico>
<sum1:Version>Beta 1.0</sum1:Version>
<sum1:NumeroInstalacion>BETA01.00</sum1:NumeroInstalacion>
<sum1:TipoUsoPosibleSoloVerifactu>S</sum1:TipoUsoPosibleSoloVerifactu>
<sum1:TipoUsoPosibleMultiOT>N</sum1:TipoUsoPosibleMultiOT>
<sum1:IndicadorMultiplesOT>N</sum1:IndicadorMultiplesOT>
</sum1:SistemaInformatico>
<sum1:FechaHoraHusoGenRegistro>2025-04-27T22:03:56+02:00</sum1:FechaHoraHusoGenRegistro>
<sum1:TipoHuella>01</sum1:TipoHuella>
<sum1:Huella>141E61740CE04E6BC6FC1877965CAB8A3D7E3329C39C53BA3E9B9D596AEE0EC7</sum1:Huella>
</sum1:RegistroAlta>
</sum:RegistroFactura>
</sum:RegFactuSistemaFacturacion>
</soapenv:Body>
</soapenv:Envelope>]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Reply by FiveWiDi]]> 2025-04-30T10:55:15-06:00 2025-04-30T10:55:15-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45647&p=279279#p279279
Así si funciona:

XBROWSER Memoread( cFileXML ) SETUP xsetup( oBrw )

Así no funciona:

XBROWSER ( cFileXML ) SETUP xsetup( oBrw )

Pero debe ser así:
XBROWSER ( cFileXML ) SETUP xsetup( oBrw )]]>

Así si funciona:

XBROWSER Memoread( cFileXML ) SETUP xsetup( oBrw )

Así no funciona:

XBROWSER ( cFileXML ) SETUP xsetup( oBrw )

Pero debe ser así:
XBROWSER ( cFileXML ) SETUP xsetup( oBrw )]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Reply by Antonio Linares]]> 2025-04-30T10:56:48-06:00 2025-04-30T10:56:48-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45647&p=279280#p279280 <![CDATA[FiveWin para Harbour/xHarbour :: Re: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Reply by FiveWiDi]]> 2025-04-30T11:10:31-06:00 2025-04-30T11:10:31-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45647&p=279283#p279283
Antonio Linares wrote: Wed Apr 30, 2025 4:56 pm Y como le das el valor a cFileXML ? Que valor tiene (nombre del fichero ó contenido del fichero) ?
Nombre, path completo, y se ve perfecto en un Tree (creo que es un Tree) que abre Xbrowse()]]>
Antonio Linares wrote: Wed Apr 30, 2025 4:56 pm Y como le das el valor a cFileXML ? Que valor tiene (nombre del fichero ó contenido del fichero) ?
Nombre, path completo, y se ve perfecto en un Tree (creo que es un Tree) que abre Xbrowse()]]>
<![CDATA[FiveWin para Harbour/xHarbour :: CURSOR EN RADIO NO FUNCIONA? :: Author karinha]]> 2025-04-30T11:02:34-06:00 2025-04-30T11:02:34-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45648&p=279281#p279281

Code: Select all | Expand

   DEFINE CURSOR oHand RESOURCE "Dedo"

   REDEFINE RADIO oRadMenu VAR nOpcaoRadio ID 201, 202 OF oDlg               ;
      COLOR CLR_BROWN, CLR_MARROM                                            ;
      ON CHANGE( TROCA_INDICE( nOpcaoRadio, cAlias, oLbx ),                  ;
                 oLbx:GoTop(), oLbx:Refresh(), oLbx:SetFocus() )

   oRadMenu:aItems[1]:cTooltip := "Por Nome   "
   oRadMenu:aItems[2]:cTooltip := "Por Código "

   oRadMenu:SetFont( oFnt )

   oRadMenu:oCursor := oHand  // NO FUNCIONA.
Gracias, tks.

Regards, saludos.]]>

Code: Select all | Expand

   DEFINE CURSOR oHand RESOURCE "Dedo"

   REDEFINE RADIO oRadMenu VAR nOpcaoRadio ID 201, 202 OF oDlg               ;
      COLOR CLR_BROWN, CLR_MARROM                                            ;
      ON CHANGE( TROCA_INDICE( nOpcaoRadio, cAlias, oLbx ),                  ;
                 oLbx:GoTop(), oLbx:Refresh(), oLbx:SetFocus() )

   oRadMenu:aItems[1]:cTooltip := "Por Nome   "
   oRadMenu:aItems[2]:cTooltip := "Por Código "

   oRadMenu:SetFont( oFnt )

   oRadMenu:oCursor := oHand  // NO FUNCIONA.
Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: CURSOR EN RADIO NO FUNCIONA? :: Reply by Antonio Linares]]> 2025-05-01T00:52:23-06:00 2025-05-01T00:52:23-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45648&p=279286#p279286
Pruba a signar el cursor a cada uno de los objetos radio:

oRadMenu:aItems[1]:oCursor = oHand]]>

Pruba a signar el cursor a cada uno de los objetos radio:

oRadMenu:aItems[1]:oCursor = oHand]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: CURSOR EN RADIO NO FUNCIONA? :: Reply by karinha]]> 2025-05-01T10:45:40-06:00 2025-05-01T10:45:40-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45648&p=279292#p279292
Antonio Linares wrote: Thu May 01, 2025 6:52 am Estimado Joao,

Pruba a signar el cursor a cada uno de los objetos radio:

oRadMenu:aItems[1]:oCursor = oHand
Querido Maestro, FUNCIONA PERFECTO! Muchas gracias!

Regards, saludos.]]>
Antonio Linares wrote: Thu May 01, 2025 6:52 am Estimado Joao,

Pruba a signar el cursor a cada uno de los objetos radio:

oRadMenu:aItems[1]:oCursor = oHand
Querido Maestro, FUNCIONA PERFECTO! Muchas gracias!

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: adscdx|dbfcdx y xbrowse :: Author Vikthor]]> 2025-04-30T19:27:10-06:00 2025-04-30T19:27:10-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45649&p=279284#p279284
Usando la clase xbrowse con archivos abiertos con el rdd dbfcdx, los datos son visualizados sin problema, sin embargo, cuando abro la misma tabla utilizando el driver adscdx no se muestra la información.

¿ Alguna sugerencia ?]]>

Usando la clase xbrowse con archivos abiertos con el rdd dbfcdx, los datos son visualizados sin problema, sin embargo, cuando abro la misma tabla utilizando el driver adscdx no se muestra la información.

¿ Alguna sugerencia ?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: adscdx|dbfcdx y xbrowse :: Reply by karinha]]> 2025-05-02T10:26:51-06:00 2025-05-02T10:26:51-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45649&p=279299#p279299
Skype/Teams:

giovany.vecchi

Regards, saludos.]]>

Skype/Teams:

giovany.vecchi

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: adscdx|dbfcdx y xbrowse :: Reply by Vikthor]]> 2025-05-02T10:41:37-06:00 2025-05-02T10:41:37-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45649&p=279301#p279301 <![CDATA[FiveWin para Harbour/xHarbour :: Re: adscdx|dbfcdx y xbrowse :: Reply by cnavarro]]> 2025-05-02T10:45:25-06:00 2025-05-02T10:45:25-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45649&p=279302#p279302
Vikthor wrote: Fri May 02, 2025 4:41 pm La apertura de las tablas se realiza sin problema e incluso las puedo monitorear en el server.
Vikthor, qué version de fivewin utilizas?]]>
Vikthor wrote: Fri May 02, 2025 4:41 pm La apertura de las tablas se realiza sin problema e incluso las puedo monitorear en el server.
Vikthor, qué version de fivewin utilizas?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: adscdx|dbfcdx y xbrowse :: Reply by karinha]]> 2025-05-02T11:22:00-06:00 2025-05-02T11:22:00-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45649&p=279303#p279303
Regards, saludos.]]>

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: adscdx|dbfcdx y xbrowse :: Reply by Vikthor]]> 2025-05-02T19:59:26-06:00 2025-05-02T19:59:26-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45649&p=279307#p279307 Database odbf y posteriormente en la defición del xbrowse se utiliza el objeto odbf.

Code: Select all | Expand

   database odbf

   define window ownd
   @ 0,0 xbrowse oBrw of oWnd ;
         object odbf ; 
         FONT oFont //;
//         rows { 10, 5, 30, 50, 100 } // Array of record numbers
   oBrw:CreateFromCode()
   oWnd:oClient := oBrw
   
   
Después revisé el código fuente de xbrowse y me dí cuenta que hay distintas fuentes de datos para visualizar el control.
Realicé los ajustes en el programa que estoy probando y la visualización de los datos ya es correcta.

Gracias por la atención.

cnavarro wrote: Fri May 02, 2025 4:45 pm
Vikthor wrote: Fri May 02, 2025 4:41 pm La apertura de las tablas se realiza sin problema e incluso las puedo monitorear en el server.
Vikthor, qué version de fivewin utilizas?
]]>
Database odbf y posteriormente en la defición del xbrowse se utiliza el objeto odbf.

Code: Select all | Expand

   database odbf

   define window ownd
   @ 0,0 xbrowse oBrw of oWnd ;
         object odbf ; 
         FONT oFont //;
//         rows { 10, 5, 30, 50, 100 } // Array of record numbers
   oBrw:CreateFromCode()
   oWnd:oClient := oBrw
   
   
Después revisé el código fuente de xbrowse y me dí cuenta que hay distintas fuentes de datos para visualizar el control.
Realicé los ajustes en el programa que estoy probando y la visualización de los datos ya es correcta.

Gracias por la atención.

cnavarro wrote: Fri May 02, 2025 4:45 pm
Vikthor wrote: Fri May 02, 2025 4:41 pm La apertura de las tablas se realiza sin problema e incluso las puedo monitorear en el server.
Vikthor, qué version de fivewin utilizas?
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: ttaskpanel 64 :: Author Patricio Avalos Aguirre]]> 2025-05-04T00:00:43-06:00 2025-05-04T00:00:43-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45655&p=279312#p279312
consulta alguien tiene la libreria tTaskPanel de Andres reyes funcionando en borland 64bit
al compilar me salen errores en las cabeceras stdafx.h y stdafx.h estos archivos estan en la carpeta include

Code: Select all | Expand

In file included from source\c_themeaux.c:50:
source/stdafx.h:49:9: warning: '__STDAFX_H__' is used as a header guard here, followed by #define of a different macro
      [-Wheader-guard]
#ifndef __STDAFX_H__
        ^~~~~~~~~~~~
source/stdafx.h:50:9: note: '__STADFX_H__' is defined here; did you mean '__STDAFX_H__'?
#define __STADFX_H__
        ^~~~~~~~~~~~
        __STDAFX_H__
source\c_themeaux.c:492:7: warning: implicit declaration of function 'ISCHAR' is invalid in C99
      [-Wimplicit-function-declaration]
  if( ISCHAR(1) )
      ^
source\c_themeaux.c:498:25: warning: implicit declaration of function 'ISNUM' is invalid in C99
      [-Wimplicit-function-declaration]
  else if( ISCHAR(2) || ISNUM(2) )
                        ^
source\c_themeaux.c:500:20: warning: cast to 'HINSTANCE' (aka 'struct HINSTANCE__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
    hInstance    = (HINSTANCE) hb_parnl(1);
                   ^
source\c_themeaux.c:528:20: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   SetScrollRange( ( HWND ) hb_parnl( 1 ),
                   ^
5 warnings generated.
source\c_dibbmp.c:
In file included from source\c_themegdi.c:50:
source/stdafx.h:49:9: warning: '__STDAFX_H__' is used as a header guard here, followed by #define of a different macro
      [-Wheader-guard]
#ifndef __STDAFX_H__
        ^~~~~~~~~~~~
source/stdafx.h:50:9: note: '__STADFX_H__' is defined here; did you mean '__STDAFX_H__'?
#define __STADFX_H__
        ^~~~~~~~~~~~
        __STDAFX_H__
source\c_themegdi.c:172:28: warning: cast to 'HDC' (aka 'struct HDC__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   HDC               hdc = (HDC) hb_parnl(1);
                           ^
source\c_themegdi.c:173:32: warning: cast to 'HBITMAP' (aka 'struct HBITMAP__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   HBITMAP           hBitmap = (HBITMAP) hb_parnl(6);
                               ^
source\c_themegdi.c:210:23: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   HWND        hWnd = (HWND) hb_parnl(1);
                      ^
source\c_themegdi.c:269:22: warning: cast to 'PTHEMEINFO' (aka 'THEMEINFO *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   PTHEMEINFO pti  = (PTHEMEINFO) hb_parnl(1);
                     ^
source\c_themegdi.c:270:22: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   HWND       hWnd = (HWND) hb_parnl(2);
]]>

consulta alguien tiene la libreria tTaskPanel de Andres reyes funcionando en borland 64bit
al compilar me salen errores en las cabeceras stdafx.h y stdafx.h estos archivos estan en la carpeta include

Code: Select all | Expand

In file included from source\c_themeaux.c:50:
source/stdafx.h:49:9: warning: '__STDAFX_H__' is used as a header guard here, followed by #define of a different macro
      [-Wheader-guard]
#ifndef __STDAFX_H__
        ^~~~~~~~~~~~
source/stdafx.h:50:9: note: '__STADFX_H__' is defined here; did you mean '__STDAFX_H__'?
#define __STADFX_H__
        ^~~~~~~~~~~~
        __STDAFX_H__
source\c_themeaux.c:492:7: warning: implicit declaration of function 'ISCHAR' is invalid in C99
      [-Wimplicit-function-declaration]
  if( ISCHAR(1) )
      ^
source\c_themeaux.c:498:25: warning: implicit declaration of function 'ISNUM' is invalid in C99
      [-Wimplicit-function-declaration]
  else if( ISCHAR(2) || ISNUM(2) )
                        ^
source\c_themeaux.c:500:20: warning: cast to 'HINSTANCE' (aka 'struct HINSTANCE__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
    hInstance    = (HINSTANCE) hb_parnl(1);
                   ^
source\c_themeaux.c:528:20: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   SetScrollRange( ( HWND ) hb_parnl( 1 ),
                   ^
5 warnings generated.
source\c_dibbmp.c:
In file included from source\c_themegdi.c:50:
source/stdafx.h:49:9: warning: '__STDAFX_H__' is used as a header guard here, followed by #define of a different macro
      [-Wheader-guard]
#ifndef __STDAFX_H__
        ^~~~~~~~~~~~
source/stdafx.h:50:9: note: '__STADFX_H__' is defined here; did you mean '__STDAFX_H__'?
#define __STADFX_H__
        ^~~~~~~~~~~~
        __STDAFX_H__
source\c_themegdi.c:172:28: warning: cast to 'HDC' (aka 'struct HDC__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   HDC               hdc = (HDC) hb_parnl(1);
                           ^
source\c_themegdi.c:173:32: warning: cast to 'HBITMAP' (aka 'struct HBITMAP__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   HBITMAP           hBitmap = (HBITMAP) hb_parnl(6);
                               ^
source\c_themegdi.c:210:23: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   HWND        hWnd = (HWND) hb_parnl(1);
                      ^
source\c_themegdi.c:269:22: warning: cast to 'PTHEMEINFO' (aka 'THEMEINFO *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   PTHEMEINFO pti  = (PTHEMEINFO) hb_parnl(1);
                     ^
source\c_themegdi.c:270:22: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   HWND       hWnd = (HWND) hb_parnl(2);
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: ttaskpanel 64 :: Reply by Antonio Linares]]> 2025-05-04T00:06:35-06:00 2025-05-04T00:06:35-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45655&p=279313#p279313
Cambia todos esos _parni( ... ) a _parnll( ... ) (DOBLE L)]]>

Cambia todos esos _parni( ... ) a _parnll( ... ) (DOBLE L)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: obtener un pdf via API ( SOLUCIONADO ) :: Author Patricio Avalos Aguirre]]> 2025-04-15T19:37:53-06:00 2025-04-17T15:35:58-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45623&p=278993#p278993
Estimados estoy obteniendo un pdf via api, pero me responde en un formato text
necesito convertirlo a pdf pero si lo graba directo como pdf me sale error en el archivo

alguna forma de poder grabarlo a pdf

se agradece cualquier ayuda

adjunto parte del archivo que devuelve
algo asi

Code: Select all | Expand

%PDF-1.7
%����
1 0 obj
<<
/Type /Catalog
/Pages 4 0 R
/MarkInfo<</Marked true>>
/Metadata 22 0 R
/OutputIntents 24 0 R
/StructTreeRoot 5 0 R
/PageMode /UseNone
/OCProperties << /OCGs [6 0 R] /D << /ON [6 0 R] /AS [<</Event /Print /OCGs [6 0 R] /Category [/Print]>>] >> >>
>>
endobj
]]>

Estimados estoy obteniendo un pdf via api, pero me responde en un formato text
necesito convertirlo a pdf pero si lo graba directo como pdf me sale error en el archivo

alguna forma de poder grabarlo a pdf

se agradece cualquier ayuda

adjunto parte del archivo que devuelve
algo asi

Code: Select all | Expand

%PDF-1.7
%����
1 0 obj
<<
/Type /Catalog
/Pages 4 0 R
/MarkInfo<</Marked true>>
/Metadata 22 0 R
/OutputIntents 24 0 R
/StructTreeRoot 5 0 R
/PageMode /UseNone
/OCProperties << /OCGs [6 0 R] /D << /ON [6 0 R] /AS [<</Event /Print /OCGs [6 0 R] /Category [/Print]>>] >> >>
>>
endobj
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by cnavarro]]> 2025-04-15T22:51:39-06:00 2025-04-15T22:51:39-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45623&p=278995#p278995 Todo indica que en tu request no está definido correctamente el "Content-Type:", que es el que indica lo que se espera del request
https://developer.mozilla.org/en-US/doc ... ntent-Type
Si no te aclaras y me das un poco más de informacion respecto a como haces el request podré ayudarte mejor]]>
Todo indica que en tu request no está definido correctamente el "Content-Type:", que es el que indica lo que se espera del request
https://developer.mozilla.org/en-US/doc ... ntent-Type
Si no te aclaras y me das un poco más de informacion respecto a como haces el request podré ayudarte mejor]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by karinha]]> 2025-04-16T09:13:34-06:00 2025-04-16T09:13:34-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45623&p=279011#p279011
https://www.fpdf.org/?go=script&id=75

Sinceramente no entendí tu pregunta.

Regards, saludos.]]>

https://www.fpdf.org/?go=script&id=75

Sinceramente no entendí tu pregunta.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by Lailton]]> 2025-04-16T18:45:05-06:00 2025-04-16T18:45:05-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45623&p=279020#p279020
Prueba con:

cBuffer es lo que te devolve

Code: Select all | Expand

hb_memoWrit( "file.pdf", cBuffer )
Patricio Avalos Aguirre wrote: Wed Apr 16, 2025 1:37 am hola a tod@s

Estimados estoy obteniendo un pdf via api, pero me responde en un formato text
necesito convertirlo a pdf pero si lo graba directo como pdf me sale error en el archivo

alguna forma de poder grabarlo a pdf

se agradece cualquier ayuda

adjunto parte del archivo que devuelve
algo asi

Code: Select all | Expand

%PDF-1.7
%����
1 0 obj
<<
/Type /Catalog
/Pages 4 0 R
/MarkInfo<</Marked true>>
/Metadata 22 0 R
/OutputIntents 24 0 R
/StructTreeRoot 5 0 R
/PageMode /UseNone
/OCProperties << /OCGs [6 0 R] /D << /ON [6 0 R] /AS [<</Event /Print /OCGs [6 0 R] /Category [/Print]>>] >> >>
>>
endobj
]]>

Prueba con:

cBuffer es lo que te devolve

Code: Select all | Expand

hb_memoWrit( "file.pdf", cBuffer )
Patricio Avalos Aguirre wrote: Wed Apr 16, 2025 1:37 am hola a tod@s

Estimados estoy obteniendo un pdf via api, pero me responde en un formato text
necesito convertirlo a pdf pero si lo graba directo como pdf me sale error en el archivo

alguna forma de poder grabarlo a pdf

se agradece cualquier ayuda

adjunto parte del archivo que devuelve
algo asi

Code: Select all | Expand

%PDF-1.7
%����
1 0 obj
<<
/Type /Catalog
/Pages 4 0 R
/MarkInfo<</Marked true>>
/Metadata 22 0 R
/OutputIntents 24 0 R
/StructTreeRoot 5 0 R
/PageMode /UseNone
/OCProperties << /OCGs [6 0 R] /D << /ON [6 0 R] /AS [<</Event /Print /OCGs [6 0 R] /Category [/Print]>>] >> >>
>>
endobj
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by Patricio Avalos Aguirre]]> 2025-04-17T07:17:17-06:00 2025-04-17T07:17:17-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45623&p=279025#p279025
layton al procesar me genera hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseText )y abrir el pdf error al procesar página. colorSpace no válido

cnavarro, el api tambien tiene en su web para ir probando y me da lo mismo
https://docs.skualo.cl/reference/obtener-pdf-documento

https://ibb.co/kVSbgSgB

Image

gracias por su ayuda :-)]]>

layton al procesar me genera hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseText )y abrir el pdf error al procesar página. colorSpace no válido

cnavarro, el api tambien tiene en su web para ir probando y me da lo mismo
https://docs.skualo.cl/reference/obtener-pdf-documento

https://ibb.co/kVSbgSgB

Image

gracias por su ayuda :-)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by Lailton]]> 2025-04-17T11:56:16-06:00 2025-04-17T11:56:16-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45623&p=279028#p279028

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseBody )
se no funcionar, prueba com asi:

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", hb_strToUtf8( oHttp:ResponseBody ) )
:)]]>

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseBody )
se no funcionar, prueba com asi:

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", hb_strToUtf8( oHttp:ResponseBody ) )
:)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by Patricio Avalos Aguirre]]> 2025-04-17T11:58:08-06:00 2025-04-17T11:58:08-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45623&p=279029#p279029
Te recomiendo hacer la prueba desde Postman, ya que lo que devuelve la api en ese endpoint es el archivo PDF como tal.

:mrgreen:]]>

Te recomiendo hacer la prueba desde Postman, ya que lo que devuelve la api en ese endpoint es el archivo PDF como tal.

:mrgreen:]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by Patricio Avalos Aguirre]]> 2025-04-17T12:14:00-06:00 2025-04-17T12:14:00-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45623&p=279030#p279030

Image]]>


Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by cmsoft]]> 2025-04-17T13:29:35-06:00 2025-04-17T13:29:35-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45623&p=279033#p279033 Pareciera que esta todo bien y lo que te devuelve es el pdf correcto.
Como grabas luego de obtener el texto?
Con lo que te comenta Lailton creo que deberia funcionar bien

Code: Select all | Expand

  hb_memowrit('mipdf.pdf',oHttp:ResponseBody)
   shellexecute(0,"open",hb_curdrive()+":\"+CurDir()+"\mipdf.pdf",,,1)
]]>
Pareciera que esta todo bien y lo que te devuelve es el pdf correcto.
Como grabas luego de obtener el texto?
Con lo que te comenta Lailton creo que deberia funcionar bien

Code: Select all | Expand

  hb_memowrit('mipdf.pdf',oHttp:ResponseBody)
   shellexecute(0,"open",hb_curdrive()+":\"+CurDir()+"\mipdf.pdf",,,1)
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by Lailton]]> 2025-04-17T14:35:27-06:00 2025-04-17T14:35:27-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45623&p=279035#p279035
Lailton wrote: Thu Apr 17, 2025 5:56 pm para PDF te recommendo usar asi:

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseBody )
se no funcionar, prueba com asi:

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", hb_strToUtf8( oHttp:ResponseBody ) )
:)
]]>
Lailton wrote: Thu Apr 17, 2025 5:56 pm para PDF te recommendo usar asi:

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseBody )
se no funcionar, prueba com asi:

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", hb_strToUtf8( oHttp:ResponseBody ) )
:)
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by Patricio Avalos Aguirre]]> 2025-04-17T15:35:31-06:00 2025-04-17T15:35:31-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45623&p=279037#p279037 Laiton funcionooo

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseBody )
]]>
Laiton funcionooo

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseBody )
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API ( SOLUCIONADO ) :: Reply by Lailton]]> 2025-04-17T20:02:50-06:00 2025-04-17T20:02:50-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45623&p=279040#p279040 ]]> ]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API ( SOLUCIONADO ) :: Reply by elmoiquique]]> 2025-04-30T10:26:58-06:00 2025-04-30T10:26:58-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45623&p=279275#p279275
Podrias colocar parte del programa donde envias la consulta y la respuesta, yo estoy en lo mismo pero no logro construir el PDF

Este es mi programa, te agradeceria tu ayuda

FUNCTION RDOCLPT(TS_TOKEN)
LOCAL oHttp,Doc,cxmLbody,oIni,nHandle
LOCAL ts_exit:=.t.,tw_servidor:='',ts_mj1:='',ts_modulo:=.f.
LOCAL ts_servidor:="https://sveqa.zofri.cl/sveProcDocWSN/Emision?WSDL"

if empty(ts_token)
msginfo('Debe Obtener un Token de Inicio para Autentificarse en Web Service','Token de Sesion')
return .f.
endif

cXmlBody:= '' +;
'<?xml version="1.0" encoding="utf-8"?>' + ;
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cl="cl.zofri.sve" xmlns:wsn="http://cl/zofri/sve/prd/wsn">'+;
' <soapenv:Header>'+;
' <cl:token>'+ts_token+'</cl:token>'+;
' </soapenv:Header>'+;
' <soapenv:Body>'+;
' <wsn:emisionDocumento>'+;
' <wsn:codigoAduaneroDoc>101-25-051206</wsn:codigoAduaneroDoc>'+;
' <wsn:tipoEmision>E</wsn:tipoEmision>'+;
' </wsn:emisionDocumento>'+;
' </soapenv:Body>'+;
'</soapenv:Envelope>'

TRY
oHttp := CreateObject( 'MSXML2.XMLHTTP.6.0' )
CATCH
oHttp := CreateObject( 'Microsoft.XMLHTTP' )
END
doc = CreateObject("MSXML2.DOMDocument.6.0")

oHttp:Open( "POST" , ts_servidor, .F. )
ohttp:SetRequestHeader( "Content-Type" , "text/xml; charset=utf-8" )
oHttp:SetRequestHeader( "Connection:", "Keep-Alive" )
doc:LoadXML( cXmlbody )

TRY
ohttp:Send( doc:xml )
CATCH
cErrorMsg:='No Se Pudo Enviar Documento XML...'+CRLF+CRLF+;
'Sin Conexion a Internet o Servidor Con Problemas'
msginfo(cErrorMsg,"Intente Nuevamente")
return .t.
END
// ?ohttp:status
//status 200 = OK
// 500 = ERROR

response = ohttp:responsetext

hb_memoWrit( "fileout.pdf", oHttp:ResponseBody )

//crear un archivo para leer tag
cFilename:="texto.xml"
MEMOWRIT( cfilename, response, .F. )
//leer archivo para extraer el factura pdf
CTXT:=MEMOREAD(CFILENAME)
pdfin:=at("%PDF-1.4",CTXT)
pdfend:=At("%EOF",CTXT)
largo:=pdfend-pdfin
Cresp:=substr(CTXT,pdfin,largo+4)

//SE CREA EL ARCHIVO PDF
CPDF:="TEXTO.PDF"
MEMOWRIT( cPdf, CRESP, .F. )

RETURN .T.
]]>

Podrias colocar parte del programa donde envias la consulta y la respuesta, yo estoy en lo mismo pero no logro construir el PDF

Este es mi programa, te agradeceria tu ayuda

FUNCTION RDOCLPT(TS_TOKEN)
LOCAL oHttp,Doc,cxmLbody,oIni,nHandle
LOCAL ts_exit:=.t.,tw_servidor:='',ts_mj1:='',ts_modulo:=.f.
LOCAL ts_servidor:="https://sveqa.zofri.cl/sveProcDocWSN/Emision?WSDL"

if empty(ts_token)
msginfo('Debe Obtener un Token de Inicio para Autentificarse en Web Service','Token de Sesion')
return .f.
endif

cXmlBody:= '' +;
'<?xml version="1.0" encoding="utf-8"?>' + ;
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cl="cl.zofri.sve" xmlns:wsn="http://cl/zofri/sve/prd/wsn">'+;
' <soapenv:Header>'+;
' <cl:token>'+ts_token+'</cl:token>'+;
' </soapenv:Header>'+;
' <soapenv:Body>'+;
' <wsn:emisionDocumento>'+;
' <wsn:codigoAduaneroDoc>101-25-051206</wsn:codigoAduaneroDoc>'+;
' <wsn:tipoEmision>E</wsn:tipoEmision>'+;
' </wsn:emisionDocumento>'+;
' </soapenv:Body>'+;
'</soapenv:Envelope>'

TRY
oHttp := CreateObject( 'MSXML2.XMLHTTP.6.0' )
CATCH
oHttp := CreateObject( 'Microsoft.XMLHTTP' )
END
doc = CreateObject("MSXML2.DOMDocument.6.0")

oHttp:Open( "POST" , ts_servidor, .F. )
ohttp:SetRequestHeader( "Content-Type" , "text/xml; charset=utf-8" )
oHttp:SetRequestHeader( "Connection:", "Keep-Alive" )
doc:LoadXML( cXmlbody )

TRY
ohttp:Send( doc:xml )
CATCH
cErrorMsg:='No Se Pudo Enviar Documento XML...'+CRLF+CRLF+;
'Sin Conexion a Internet o Servidor Con Problemas'
msginfo(cErrorMsg,"Intente Nuevamente")
return .t.
END
// ?ohttp:status
//status 200 = OK
// 500 = ERROR

response = ohttp:responsetext

hb_memoWrit( "fileout.pdf", oHttp:ResponseBody )

//crear un archivo para leer tag
cFilename:="texto.xml"
MEMOWRIT( cfilename, response, .F. )
//leer archivo para extraer el factura pdf
CTXT:=MEMOREAD(CFILENAME)
pdfin:=at("%PDF-1.4",CTXT)
pdfend:=At("%EOF",CTXT)
largo:=pdfend-pdfin
Cresp:=substr(CTXT,pdfin,largo+4)

//SE CREA EL ARCHIVO PDF
CPDF:="TEXTO.PDF"
MEMOWRIT( cPdf, CRESP, .F. )

RETURN .T.
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API ( SOLUCIONADO ) :: Reply by Patricio Avalos Aguirre]]> 2025-05-04T09:50:49-06:00 2025-05-04T09:50:49-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45623&p=279314#p279314

Code: Select all | Expand

cUrlSkualo := 'https://api.skualo.cl/'+_TOKENEMP_+'/documentos/'+cId+'/pdf'  //esta info es entregado por el api 

oDoc := CreateObject( "MSXML2.DOMDocument" )
oHttp := CreateObject( "MSXML2.XMLHTTP" )

	do case
	case cOpc = "A"
		ohttp:Open( "POST" ,cUrlSkualo, .F. )
	case cOpc = "M"
		ohttp:Open( 'PUT' ,cUrlSkualo, .F. )
	case cOpc = "L"
		ohttp:Open( 'GET' ,cUrlSkualo, .F. )
	otherwise
		MsgInfo( "Debe enviar Opcion " )
		return("")
endcase

if cFuncion $ "DTE;PDF"
	oHttp:SetRequestHeader("accept", "application/pdf" )
else
	oHttp:SetRequestHeader("accept", "application/json" )
	if cOpc <> "L"
		oHttp:SetRequestHeader("content-type", "application/json" )
	endif
endif

oHttp:SetRequestHeader("Authorization", "Bearer " + _TOKENEMP_ )

TRY
  oHttp:Send( jSon )
CATCH
  lOk := .f.
END

if lOk .and. oHttp:status = 200

	hb_jsonDecode( oHttp:ResponseText,@hReturn )

	if cFuncion = "GETPDF"
		cFilePdf := DRIVELOCAL+'\TEMPORAL\'+cPdf+'.pdf'
		//cPdf = tip_doc + num_doc

		hb_memowrit( cFilePdf, oHttp:ResponseBody )

		if left( cPdf,3) = "BEL"
			cPrinter := ViewUsu():Bel
		else
			cPrinter := ViewUsu():Fel
		endif

		if empty( cPrinter )
			cCmd := cSumatra + " "+cFilePdf
		else
			cCmd := cSumatra + ' -Print-to "' + alltrim( StrToken( cPrinter, 1, "," ) ) + '" -exit-on-print ' + cFilePdf
		endif

		MsgRun( "Imprimiendo archivo "+cFilePdf, "Espere..", { || winexec( cCmd, SW_HIDE )  } )

	else
		//hb_jsonDecode( oHttp:ResponseText,@hReturn )

		hReturn["status"]   	 := 200
		hReturn["statusText"] := "ok"
		hReturn["title"]   	 := "ok"
		hReturn["isError"]    := .f.
	endif

else
	if lOk // hizo la conexion pero skualo rechazo la solicitud
		hb_jsonDecode( oHttp:ResponseText,@hReturn )
		hReturn["status"]   	  := oHttp:status
		hReturn["statusText"]  := oHttp:statusText
		hReturn["title"]   	  := lower(hReturn["title"])
		hReturn["ErrorSkualo"] :=  {strtran(oHttp:ResponseText, ",", ","+CRLF ) }
		hReturn["JsonSkualo"]  :=  { json }
		hReturn["isError"]    := .t.
	else
		hReturn["status"]   	  := 400
		hReturn["title"]   	  := "error"
		hReturn["statusText"]  := "Error en la comunicación con Skualo"+CRLF+"hay q volver hacer la operación"
		hReturn["ErrorSkualo"] :=  {""}
		hReturn["JsonSkualo"]  :=  { json }
		hReturn["isError"]    := .t.
	endif
endif

return( hReturn )
//-----------------------------------------------------------------------------------------------------
]]>

Code: Select all | Expand

cUrlSkualo := 'https://api.skualo.cl/'+_TOKENEMP_+'/documentos/'+cId+'/pdf'  //esta info es entregado por el api 

oDoc := CreateObject( "MSXML2.DOMDocument" )
oHttp := CreateObject( "MSXML2.XMLHTTP" )

	do case
	case cOpc = "A"
		ohttp:Open( "POST" ,cUrlSkualo, .F. )
	case cOpc = "M"
		ohttp:Open( 'PUT' ,cUrlSkualo, .F. )
	case cOpc = "L"
		ohttp:Open( 'GET' ,cUrlSkualo, .F. )
	otherwise
		MsgInfo( "Debe enviar Opcion " )
		return("")
endcase

if cFuncion $ "DTE;PDF"
	oHttp:SetRequestHeader("accept", "application/pdf" )
else
	oHttp:SetRequestHeader("accept", "application/json" )
	if cOpc <> "L"
		oHttp:SetRequestHeader("content-type", "application/json" )
	endif
endif

oHttp:SetRequestHeader("Authorization", "Bearer " + _TOKENEMP_ )

TRY
  oHttp:Send( jSon )
CATCH
  lOk := .f.
END

if lOk .and. oHttp:status = 200

	hb_jsonDecode( oHttp:ResponseText,@hReturn )

	if cFuncion = "GETPDF"
		cFilePdf := DRIVELOCAL+'\TEMPORAL\'+cPdf+'.pdf'
		//cPdf = tip_doc + num_doc

		hb_memowrit( cFilePdf, oHttp:ResponseBody )

		if left( cPdf,3) = "BEL"
			cPrinter := ViewUsu():Bel
		else
			cPrinter := ViewUsu():Fel
		endif

		if empty( cPrinter )
			cCmd := cSumatra + " "+cFilePdf
		else
			cCmd := cSumatra + ' -Print-to "' + alltrim( StrToken( cPrinter, 1, "," ) ) + '" -exit-on-print ' + cFilePdf
		endif

		MsgRun( "Imprimiendo archivo "+cFilePdf, "Espere..", { || winexec( cCmd, SW_HIDE )  } )

	else
		//hb_jsonDecode( oHttp:ResponseText,@hReturn )

		hReturn["status"]   	 := 200
		hReturn["statusText"] := "ok"
		hReturn["title"]   	 := "ok"
		hReturn["isError"]    := .f.
	endif

else
	if lOk // hizo la conexion pero skualo rechazo la solicitud
		hb_jsonDecode( oHttp:ResponseText,@hReturn )
		hReturn["status"]   	  := oHttp:status
		hReturn["statusText"]  := oHttp:statusText
		hReturn["title"]   	  := lower(hReturn["title"])
		hReturn["ErrorSkualo"] :=  {strtran(oHttp:ResponseText, ",", ","+CRLF ) }
		hReturn["JsonSkualo"]  :=  { json }
		hReturn["isError"]    := .t.
	else
		hReturn["status"]   	  := 400
		hReturn["title"]   	  := "error"
		hReturn["statusText"]  := "Error en la comunicación con Skualo"+CRLF+"hay q volver hacer la operación"
		hReturn["ErrorSkualo"] :=  {""}
		hReturn["JsonSkualo"]  :=  { json }
		hReturn["isError"]    := .t.
	endif
endif

return( hReturn )
//-----------------------------------------------------------------------------------------------------
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: TSBROWSE - TSBUTTON 64 bits :: Reply by Patricio Avalos Aguirre]]> 2025-05-03T23:13:17-06:00 2025-05-03T23:13:17-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=44912&p=279310#p279310
alguien tiene corriendo la libreria tsbrowse9 del maestro Manuel Mercado
me sale muchos errores en un prg en C(TSBFuncs.c)

Code: Select all | Expand

..\source\function\TSBFuncs.c:
In file included from ..\source\function\TSBFuncs.c:14:
c:\fwh64\include\ClipApi.h:520:8: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
extern _mdAdd( LONG lClassHandle, PCLIPSYMBOL pMethodName, PCLIPFUNC pMethod );
~~~~~~ ^
..\source\function\TSBFuncs.c:48:23: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HWND hWnd        = (HWND) _parni( 1 ) ;
                      ^
..\source\function\TSBFuncs.c:49:23: warning: cast to 'HDC' (aka 'struct HDC__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HDC  hDC         = (HDC) _parni( 2 ) ;
                      ^
..\source\function\TSBFuncs.c:58:23: warning: cast to 'HFONT' (aka 'struct HFONT__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HFONT hFont      = (HFONT) _parni( 10 ) ;
                      ^
..\source\function\TSBFuncs.c:59:23: warning: cast to 'HBITMAP' (aka 'struct HBITMAP__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HBITMAP hBitMap  = (HBITMAP) _parni( 11 ) ;
                      ^
..\source\function\TSBFuncs.c:74:23: warning: cast to 'HBRUSH' (aka 'struct HBRUSH__ *') from smaller integer type
      'LONG' (aka 'long') [-Wint-to-pointer-cast]
   HBRUSH wBrush    = (HBRUSH) _parnl( 26 ) ;
                      ^
..\source\function\TSBFuncs.c:381:23: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HWND hWnd        = (HWND) _parni( 1 ) ;
                      ^
..\source\function\TSBFuncs.c:383:23: warning: cast to 'HFONT' (aka 'struct HFONT__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HFONT hFont      = (HFONT) _parni( 3 ) ;
                      ^
..\source\function\TSBFuncs.c:417:17: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HWND hWnd  = (HWND) _parni( 1 ) ;
                ^
..\source\function\TSBFuncs.c:448:14: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
        HWND hWnd = ( HWND ) _parni( 1 ) ;
                    ^
..\source\function\TSBFuncs.c:482:18: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HWND  hWnd  = (HWND) _parni( 1 ) ;
                 ^
..\source\function\TSBFuncs.c:483:18: warning: cast to 'HFONT' (aka 'struct HFONT__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HFONT hFont = (HFONT) _parni( 2 ) ;
                 ^
..\source\function\TSBFuncs.c:522:14: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
        HWND hWnd = ( HWND ) _parni( 1 ) ;
                    ^
..\source\function\TSBFuncs.c:547:20: warning: cast to 'HBITMAP' (aka 'struct HBITMAP__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HBITMAP hBmp  = (HBITMAP) _parni( 1 ) ;
                   ^
..\source\function\TSBFuncs.c:563:20: warning: cast to 'HBITMAP' (aka 'struct HBITMAP__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HBITMAP hBmp  = (HBITMAP) _parni( 1 ) ;
   
]]>

alguien tiene corriendo la libreria tsbrowse9 del maestro Manuel Mercado
me sale muchos errores en un prg en C(TSBFuncs.c)

Code: Select all | Expand

..\source\function\TSBFuncs.c:
In file included from ..\source\function\TSBFuncs.c:14:
c:\fwh64\include\ClipApi.h:520:8: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
extern _mdAdd( LONG lClassHandle, PCLIPSYMBOL pMethodName, PCLIPFUNC pMethod );
~~~~~~ ^
..\source\function\TSBFuncs.c:48:23: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HWND hWnd        = (HWND) _parni( 1 ) ;
                      ^
..\source\function\TSBFuncs.c:49:23: warning: cast to 'HDC' (aka 'struct HDC__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HDC  hDC         = (HDC) _parni( 2 ) ;
                      ^
..\source\function\TSBFuncs.c:58:23: warning: cast to 'HFONT' (aka 'struct HFONT__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HFONT hFont      = (HFONT) _parni( 10 ) ;
                      ^
..\source\function\TSBFuncs.c:59:23: warning: cast to 'HBITMAP' (aka 'struct HBITMAP__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HBITMAP hBitMap  = (HBITMAP) _parni( 11 ) ;
                      ^
..\source\function\TSBFuncs.c:74:23: warning: cast to 'HBRUSH' (aka 'struct HBRUSH__ *') from smaller integer type
      'LONG' (aka 'long') [-Wint-to-pointer-cast]
   HBRUSH wBrush    = (HBRUSH) _parnl( 26 ) ;
                      ^
..\source\function\TSBFuncs.c:381:23: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HWND hWnd        = (HWND) _parni( 1 ) ;
                      ^
..\source\function\TSBFuncs.c:383:23: warning: cast to 'HFONT' (aka 'struct HFONT__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HFONT hFont      = (HFONT) _parni( 3 ) ;
                      ^
..\source\function\TSBFuncs.c:417:17: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HWND hWnd  = (HWND) _parni( 1 ) ;
                ^
..\source\function\TSBFuncs.c:448:14: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
        HWND hWnd = ( HWND ) _parni( 1 ) ;
                    ^
..\source\function\TSBFuncs.c:482:18: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HWND  hWnd  = (HWND) _parni( 1 ) ;
                 ^
..\source\function\TSBFuncs.c:483:18: warning: cast to 'HFONT' (aka 'struct HFONT__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HFONT hFont = (HFONT) _parni( 2 ) ;
                 ^
..\source\function\TSBFuncs.c:522:14: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
        HWND hWnd = ( HWND ) _parni( 1 ) ;
                    ^
..\source\function\TSBFuncs.c:547:20: warning: cast to 'HBITMAP' (aka 'struct HBITMAP__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HBITMAP hBmp  = (HBITMAP) _parni( 1 ) ;
                   ^
..\source\function\TSBFuncs.c:563:20: warning: cast to 'HBITMAP' (aka 'struct HBITMAP__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HBITMAP hBmp  = (HBITMAP) _parni( 1 ) ;
   
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: TSBROWSE - TSBUTTON 64 bits :: Reply by Antonio Linares]]> 2025-05-03T23:58:33-06:00 2025-05-03T23:58:33-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=44912&p=279311#p279311
Cambia todos esos _parni( ... ) a _parnll( ... ) (DOBLE L)]]>

Cambia todos esos _parni( ... ) a _parnll( ... ) (DOBLE L)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: TSBROWSE - TSBUTTON 64 bits :: Reply by cnavarro]]> 2025-05-05T05:40:20-06:00 2025-05-05T05:40:20-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=44912&p=279331#p279331 https://github.com/FiveTechSoft/FWH_too ... stobal.zip
https://github.com/FiveTechSoft/FWH_too ... uttonu.zip
https://github.com/FiveTechSoft/FWH_too ... browse.zip]]>
https://github.com/FiveTechSoft/FWH_too ... stobal.zip
https://github.com/FiveTechSoft/FWH_too ... uttonu.zip
https://github.com/FiveTechSoft/FWH_too ... browse.zip]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: TSBROWSE - TSBUTTON 64 bits :: Reply by Patricio Avalos Aguirre]]> 2025-05-05T07:54:17-06:00 2025-05-05T07:54:17-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=44912&p=279336#p279336
es una versión antigua la que esta ahí
*=============================================================================
* TSBrowse.ch Version 4.0 1/Jan/2002
* Creating Browse From resources
*=============================================================================
contra esta :-)
=============================================================================
* TSBrowse.ch Version 9.0 1/Nov/2009
* Creating Browse From resources
*=============================================================================]]>

es una versión antigua la que esta ahí
*=============================================================================
* TSBrowse.ch Version 4.0 1/Jan/2002
* Creating Browse From resources
*=============================================================================
contra esta :-)
=============================================================================
* TSBrowse.ch Version 9.0 1/Nov/2009
* Creating Browse From resources
*=============================================================================]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Mr RAO, descansa en paz :: Author Willi Quintana]]> 2025-05-05T18:04:18-06:00 2025-05-05T18:04:18-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45657&p=279346#p279346 Sr. Rao descansa en paz,]]> Sr. Rao descansa en paz,]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by Cgallegoa]]> 2025-05-05T18:28:25-06:00 2025-05-05T18:28:25-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45657&p=279349#p279349 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by groiss]]> 2025-05-05T22:59:59-06:00 2025-05-05T22:59:59-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45657&p=279352#p279352 D.E.P.]]> D.E.P.]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by Sebastián Almirón]]> 2025-05-06T03:09:22-06:00 2025-05-06T03:09:22-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45657&p=279357#p279357 D.E.P.]]> D.E.P.]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by acuellar]]> 2025-05-06T04:07:03-06:00 2025-05-06T04:07:03-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45657&p=279360#p279360

Lo extrañaremos mucho. Realmente un excelente coloborador.

Descanza en Paz Mr. Rao]]>


Lo extrañaremos mucho. Realmente un excelente coloborador.

Descanza en Paz Mr. Rao]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by wilsongamboa]]> 2025-05-06T04:46:38-06:00 2025-05-06T04:46:38-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45657&p=279361#p279361 Wilson Gamboa]]> Wilson Gamboa]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by jose_murugosa]]> 2025-05-06T04:47:54-06:00 2025-05-06T04:47:54-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45657&p=279362#p279362 Se lo extrañará muchísimo.]]> Se lo extrañará muchísimo.]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by carito]]> 2025-05-06T16:07:22-06:00 2025-05-06T16:07:22-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45657&p=279365#p279365
Fue una persona muy generosa, siempre dispuesto a ayudar.

Que Dios ayude a su familia a superar este triste momento.
Que descanse en Paz.]]>

Fue una persona muy generosa, siempre dispuesto a ayudar.

Que Dios ayude a su familia a superar este triste momento.
Que descanse en Paz.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by xmanuel]]> 2025-05-07T16:46:21-06:00 2025-05-07T16:46:21-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45657&p=279368#p279368 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by FiveWiDi]]> 2025-05-07T17:37:59-06:00 2025-05-07T17:37:59-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45657&p=279369#p279369 Triste e impactado.
D.E.P.]]>
Triste e impactado.
D.E.P.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by ruben Dario]]> 2025-05-08T12:06:32-06:00 2025-05-08T12:06:32-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45657&p=279371#p279371 <![CDATA[Utilities / Utilidades :: Método 42 / Method 42 :: Author Antonio Linares]]> 2025-05-03T15:39:30-06:00 2025-05-03T15:39:30-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=17&t=45654&p=279309#p279309 https://www.42madrid.com/
https://www.42malaga.com
https://42.fr/

El método 42 es un enfoque innovador y disruptivo para aprender programación, desarrollado por la École 42, una escuela de programación fundada en París en 2013 por Xavier Niel. Este método se basa en un modelo educativo sin profesores, sin clases tradicionales y con un fuerte énfasis en el aprendizaje autónomo, colaborativo y práctico. A continuación, te explico en qué consiste:
Pilares del método 42
Aprendizaje autónomo (peer-to-peer learning):
No hay profesores ni clases magistrales. Los estudiantes aprenden resolviendo proyectos prácticos de programación de dificultad progresiva.

Se fomenta la autoaprendizaje: los estudiantes investigan, experimentan y buscan soluciones por sí mismos, utilizando recursos como documentación, foros y la comunidad de compañeros.

Proyectos prácticos:
El currículo se basa en proyectos que simulan problemas reales de programación. Estos proyectos cubren temas como algoritmos, estructuras de datos, programación en C, sistemas Unix, desarrollo web, inteligencia artificial, entre otros.

Los proyectos deben completarse en un orden específico, y cada uno desbloquea el siguiente al ser aprobado.

Evaluación por pares:
Los estudiantes evalúan el trabajo de sus compañeros y son evaluados por ellos. Este sistema fomenta la crítica constructiva y el aprendizaje colaborativo.

También hay correcciones automáticas mediante pruebas unitarias (llamadas "moulinette" en 42), que verifican si el código cumple con los requisitos.

Gamificación:
El proceso de aprendizaje está gamificado. Los estudiantes ganan puntos de experiencia al completar proyectos, lo que les permite avanzar en un sistema de niveles.

Esto crea un entorno motivador donde el progreso es visible y competitivo, pero enfocado en el crecimiento personal.

Sin requisitos académicos previos:
No se necesita un título o experiencia previa en programación para ingresar. La selección se basa en pruebas de lógica y aptitud (como la Piscine, un bootcamp intensivo de un mes).

Esto hace que el método sea accesible a personas de diversos orígenes.

Entorno colaborativo 24/7:
Los campus de 42 están abiertos 24 horas al día, 7 días a la semana, lo que permite a los estudiantes trabajar a su propio ritmo.

Se fomenta el trabajo en equipo, especialmente en proyectos grupales, donde los estudiantes aprenden a colaborar y gestionar conflictos.

Sin costo:
La formación en las escuelas 42 es gratuita, lo que elimina barreras económicas y democratiza el acceso a la educación en programación.

La Piscine: el rito de iniciación
Un elemento clave del método 42 es la Piscine (en francés, "piscina"), un proceso de selección intensivo de 4 semanas donde los candidatos se sumergen en un entorno de aprendizaje acelerado. Durante la Piscine:
Los participantes trabajan en ejercicios diarios de programación.

Se enfrentan a plazos estrictos y alta presión.

Se evalúa no solo su capacidad técnica, sino también su resiliencia, creatividad y habilidades sociales.

Solo los mejores son admitidos al programa completo.

Filosofía del método
El método 42 se basa en la idea de que cualquiera con motivación y disciplina puede convertirse en un programador competente. Al eliminar las estructuras educativas tradicionales, busca:
Fomentar la resolución de problemas en lugar de la memorización.

Desarrollar habilidades blandas como la colaboración, la comunicación y la adaptabilidad.

Preparar a los estudiantes para la industria tecnológica, donde la capacidad de aprender continuamente es crucial.

Ventajas del método 42
Práctico y relevante: Los proyectos están diseñados para reflejar desafíos reales del mundo laboral.

Flexibilidad: Los estudiantes avanzan a su propio ritmo.

Comunidad fuerte: La colaboración entre pares crea una red de apoyo y aprendizaje.

Reconocimiento en la industria: Los graduados de 42 son muy valorados por empresas tecnológicas debido a su enfoque práctico y habilidades sólidas.

Desafíos del método
Alta exigencia: La autonomía y la falta de guía formal pueden ser abrumadoras para algunos.

Intensidad: La Piscine y el programa principal requieren dedicación extrema.

No es para todos: Quienes prefieren un entorno estructurado con profesores pueden encontrar el método desorientador.

Presencia global
El modelo 42 se ha expandido a nivel mundial, con campus en ciudades como Silicon Valley, Madrid, Berlín, Tokio, São Paulo y más. En cada lugar, se adapta al contexto local, pero mantiene los principios fundamentales.
En resumen, el método 42 es un enfoque revolucionario que combina aprendizaje autónomo, colaboración, gamificación y proyectos prácticos para formar programadores altamente capacitados. Es ideal para personas motivadas, curiosas y dispuestas a enfrentar desafíos sin una estructura educativa tradicional. Si estás interesado en probarlo, revisa si hay un campus de 42 en tu país o explora su proceso de admisión en su sitio oficial.]]>
https://www.42madrid.com/
https://www.42malaga.com
https://42.fr/

El método 42 es un enfoque innovador y disruptivo para aprender programación, desarrollado por la École 42, una escuela de programación fundada en París en 2013 por Xavier Niel. Este método se basa en un modelo educativo sin profesores, sin clases tradicionales y con un fuerte énfasis en el aprendizaje autónomo, colaborativo y práctico. A continuación, te explico en qué consiste:
Pilares del método 42
Aprendizaje autónomo (peer-to-peer learning):
No hay profesores ni clases magistrales. Los estudiantes aprenden resolviendo proyectos prácticos de programación de dificultad progresiva.

Se fomenta la autoaprendizaje: los estudiantes investigan, experimentan y buscan soluciones por sí mismos, utilizando recursos como documentación, foros y la comunidad de compañeros.

Proyectos prácticos:
El currículo se basa en proyectos que simulan problemas reales de programación. Estos proyectos cubren temas como algoritmos, estructuras de datos, programación en C, sistemas Unix, desarrollo web, inteligencia artificial, entre otros.

Los proyectos deben completarse en un orden específico, y cada uno desbloquea el siguiente al ser aprobado.

Evaluación por pares:
Los estudiantes evalúan el trabajo de sus compañeros y son evaluados por ellos. Este sistema fomenta la crítica constructiva y el aprendizaje colaborativo.

También hay correcciones automáticas mediante pruebas unitarias (llamadas "moulinette" en 42), que verifican si el código cumple con los requisitos.

Gamificación:
El proceso de aprendizaje está gamificado. Los estudiantes ganan puntos de experiencia al completar proyectos, lo que les permite avanzar en un sistema de niveles.

Esto crea un entorno motivador donde el progreso es visible y competitivo, pero enfocado en el crecimiento personal.

Sin requisitos académicos previos:
No se necesita un título o experiencia previa en programación para ingresar. La selección se basa en pruebas de lógica y aptitud (como la Piscine, un bootcamp intensivo de un mes).

Esto hace que el método sea accesible a personas de diversos orígenes.

Entorno colaborativo 24/7:
Los campus de 42 están abiertos 24 horas al día, 7 días a la semana, lo que permite a los estudiantes trabajar a su propio ritmo.

Se fomenta el trabajo en equipo, especialmente en proyectos grupales, donde los estudiantes aprenden a colaborar y gestionar conflictos.

Sin costo:
La formación en las escuelas 42 es gratuita, lo que elimina barreras económicas y democratiza el acceso a la educación en programación.

La Piscine: el rito de iniciación
Un elemento clave del método 42 es la Piscine (en francés, "piscina"), un proceso de selección intensivo de 4 semanas donde los candidatos se sumergen en un entorno de aprendizaje acelerado. Durante la Piscine:
Los participantes trabajan en ejercicios diarios de programación.

Se enfrentan a plazos estrictos y alta presión.

Se evalúa no solo su capacidad técnica, sino también su resiliencia, creatividad y habilidades sociales.

Solo los mejores son admitidos al programa completo.

Filosofía del método
El método 42 se basa en la idea de que cualquiera con motivación y disciplina puede convertirse en un programador competente. Al eliminar las estructuras educativas tradicionales, busca:
Fomentar la resolución de problemas en lugar de la memorización.

Desarrollar habilidades blandas como la colaboración, la comunicación y la adaptabilidad.

Preparar a los estudiantes para la industria tecnológica, donde la capacidad de aprender continuamente es crucial.

Ventajas del método 42
Práctico y relevante: Los proyectos están diseñados para reflejar desafíos reales del mundo laboral.

Flexibilidad: Los estudiantes avanzan a su propio ritmo.

Comunidad fuerte: La colaboración entre pares crea una red de apoyo y aprendizaje.

Reconocimiento en la industria: Los graduados de 42 son muy valorados por empresas tecnológicas debido a su enfoque práctico y habilidades sólidas.

Desafíos del método
Alta exigencia: La autonomía y la falta de guía formal pueden ser abrumadoras para algunos.

Intensidad: La Piscine y el programa principal requieren dedicación extrema.

No es para todos: Quienes prefieren un entorno estructurado con profesores pueden encontrar el método desorientador.

Presencia global
El modelo 42 se ha expandido a nivel mundial, con campus en ciudades como Silicon Valley, Madrid, Berlín, Tokio, São Paulo y más. En cada lugar, se adapta al contexto local, pero mantiene los principios fundamentales.
En resumen, el método 42 es un enfoque revolucionario que combina aprendizaje autónomo, colaboración, gamificación y proyectos prácticos para formar programadores altamente capacitados. Es ideal para personas motivadas, curiosas y dispuestas a enfrentar desafíos sin una estructura educativa tradicional. Si estás interesado en probarlo, revisa si hay un campus de 42 en tu país o explora su proceso de admisión en su sitio oficial.]]>
<![CDATA[Utilities / Utilidades :: Re: Método 42 / Method 42 :: Reply by Antonio Linares]]> 2025-05-05T09:42:53-06:00 2025-05-05T09:42:53-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=17&t=45654&p=279338#p279338

Image

Image]]>


Image

Image]]>
<![CDATA[Off Topic / Otros temas :: Re: VeFa32 - Verifactu :: Reply by paquitohm]]> 2025-04-10T00:41:56-06:00 2025-04-10T00:41:56-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=19&t=45519&p=278923#p278923
FiveWiDi wrote: Tue Apr 08, 2025 2:51 pm
Cualquier cosa rara/inexplicable que veais

Pues ahora que lo dices. Veo inexplicable que tu post tiene más de 2.400 visitas y nadie se haya dignado hacer un comentario.]]>
FiveWiDi wrote: Tue Apr 08, 2025 2:51 pm
Cualquier cosa rara/inexplicable que veais

Pues ahora que lo dices. Veo inexplicable que tu post tiene más de 2.400 visitas y nadie se haya dignado hacer un comentario.]]>
<![CDATA[Off Topic / Otros temas :: Re: VeFa32 - Verifactu :: Reply by FiveWiDi]]> 2025-04-10T06:35:49-06:00 2025-04-10T06:35:49-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=19&t=45519&p=278925#p278925
paquitohm wrote: Thu Apr 10, 2025 6:41 am
FiveWiDi wrote: Tue Apr 08, 2025 2:51 pm
Cualquier cosa rara/inexplicable que veais

Pues ahora que lo dices. Veo inexplicable que tu post tiene más de 2.400 visitas y nadie se haya dignado hacer un comentario.
Sinceramente no sé ni como se mira el número de visitas.

Estas cifra quiere decir que es un tema que interesa a muchísima gente, pues afectará a un porcentaje elevado de las pequeñas y medianas empresas, a los profesionales y a los autónomos, y de rebote a los que les dan servicio en los SIF que utilicen.
Y es por eso la gente entra a ver si hay algo interesante o que le aporte algo.

Que nadie dice nada? Pues tampoco lo espero ni lo busco, pero se agradece que te digan "esto funciona" e incluso que "esto se hace mejor de otra manera".

El caso es que yo en este foro he aprendido mucho, he tomado ideas, ejemplos y utilidades.
Y como este de Veri*factu es un tema que estoy trabajando, pues he pensado que una de las maneras de dar las gracias es compartir experiencia y conocimiento.

Pero si, me alegro de tener estas visitas.]]>
paquitohm wrote: Thu Apr 10, 2025 6:41 am
FiveWiDi wrote: Tue Apr 08, 2025 2:51 pm
Cualquier cosa rara/inexplicable que veais

Pues ahora que lo dices. Veo inexplicable que tu post tiene más de 2.400 visitas y nadie se haya dignado hacer un comentario.
Sinceramente no sé ni como se mira el número de visitas.

Estas cifra quiere decir que es un tema que interesa a muchísima gente, pues afectará a un porcentaje elevado de las pequeñas y medianas empresas, a los profesionales y a los autónomos, y de rebote a los que les dan servicio en los SIF que utilicen.
Y es por eso la gente entra a ver si hay algo interesante o que le aporte algo.

Que nadie dice nada? Pues tampoco lo espero ni lo busco, pero se agradece que te digan "esto funciona" e incluso que "esto se hace mejor de otra manera".

El caso es que yo en este foro he aprendido mucho, he tomado ideas, ejemplos y utilidades.
Y como este de Veri*factu es un tema que estoy trabajando, pues he pensado que una de las maneras de dar las gracias es compartir experiencia y conocimiento.

Pero si, me alegro de tener estas visitas.]]>
<![CDATA[Off Topic / Otros temas :: Re: VeFa32 - Verifactu :: Reply by paquitohm]]> 2025-04-10T10:35:32-06:00 2025-04-10T10:35:32-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=19&t=45519&p=278928#p278928
Me ha parecido que utilizas una tabla para las bases imponibles.
Yo habia pensado poner 6 tuplas de campos en la tabla superior (Tipo IVA, Base, Cuota)

Estoy en ese punto del diseño cuando las tareas me lo permiten. Ahora mismo es el caso.
Tu VeFa32, su existencia, me ha dado la idea de aislarlo todo bien aislado y asi quiza me ahorro pasar usuarios DOS a Win porque en algunos casos, en algunos clientes, el Verifactu no es una oportunidad sino una incomodiad.

Una sugerencia: La respuesta, ademas de en el portapapeles grabala en una carpeta c:\Respuesta\UltimaRespuesta.xml donde el programa llamador podrá encontrar ese archivo para hacer con el lo que quiera.

Pido perdon porque las vistas que conté son de todo el grupo y no de este hilo.

PD. El VF lo he enfocado desde el punto de vista de operaciones permitidas. Veremos como sale. Lo que mas me pone es el hecho de que se supone que la mayoria de dudas operacionales no tendrian que ser tales porque eso existe desde tiempo inmemoria en el reglamento de facturacion. Pero va a resultar que somos nosotros los que vamos a tener que dar asistencia para enseñar al usuario a hacer las operaciones correctas (altas, subsanaciones, anulaciones). Por cierto: Estas usando las anulaciones en tu programa

Salu2]]>

Me ha parecido que utilizas una tabla para las bases imponibles.
Yo habia pensado poner 6 tuplas de campos en la tabla superior (Tipo IVA, Base, Cuota)

Estoy en ese punto del diseño cuando las tareas me lo permiten. Ahora mismo es el caso.
Tu VeFa32, su existencia, me ha dado la idea de aislarlo todo bien aislado y asi quiza me ahorro pasar usuarios DOS a Win porque en algunos casos, en algunos clientes, el Verifactu no es una oportunidad sino una incomodiad.

Una sugerencia: La respuesta, ademas de en el portapapeles grabala en una carpeta c:\Respuesta\UltimaRespuesta.xml donde el programa llamador podrá encontrar ese archivo para hacer con el lo que quiera.

Pido perdon porque las vistas que conté son de todo el grupo y no de este hilo.

PD. El VF lo he enfocado desde el punto de vista de operaciones permitidas. Veremos como sale. Lo que mas me pone es el hecho de que se supone que la mayoria de dudas operacionales no tendrian que ser tales porque eso existe desde tiempo inmemoria en el reglamento de facturacion. Pero va a resultar que somos nosotros los que vamos a tener que dar asistencia para enseñar al usuario a hacer las operaciones correctas (altas, subsanaciones, anulaciones). Por cierto: Estas usando las anulaciones en tu programa

Salu2]]>
<![CDATA[Off Topic / Otros temas :: Re: VeFa32 - Verifactu :: Reply by FiveWiDi]]> 2025-04-11T01:54:16-06:00 2025-04-11T01:54:16-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=19&t=45519&p=278941#p278941
paquitohm wrote: Thu Apr 10, 2025 4:35 pm Me ha parecido que utilizas una tabla para las bases imponibles.
Yo habia pensado poner 6 tuplas de campos en la tabla superior (Tipo IVA, Base, Cuota)
No, lo que tengo es una tabla auxiliar de las facturas que entre otros tiene estos campos:

TIPUFACT <> Caràcter <> 1 <> 0 <> Tipus Factura (C-ompres V-endes)
IDFACTUR <> Caràcter <> 25 <> 0 <> Identificació factura
CODIPERS <> Caràcter <> 12 <> 0 <> Codi proveidor/client
TIPUIMPO <> Numèric <> 1 <> 0 <> Tipus Import (1-B.I., 2-Altres NO IVA, 3-IVA No Dedu., 4-IVA, 5-IRPF, 9-Total
IMPORT__ <> Numèric <> 10 <> 2 <> Import
PERCENTA <> Numèric <> 10 <> 4 <> Percentatge IVA/IRPF
BASECALC <> Numèric <> 10 <> 2 <> Base pel càlcul

De esta manera estoy desvinculado del tipo de IVA/IRPF que se vaya a utilizar. Es heredado de un sistema contable sencillo que hice. Me sirve para las declaraciones trimestrales/anuales, 340, etc. El inconveniente es que el usuario puede teclear el valor de IVA/IRPF que desee sin que se valide nada.
paquitohm wrote: Thu Apr 10, 2025 4:35 pm Tu VeFa32, su existencia, me ha dado la idea de aislarlo todo bien aislado y asi quiza me ahorro pasar usuarios DOS a Win porque en algunos casos, en algunos clientes, el Verifactu no es una oportunidad sino una incomodiad.
Si, esa era mi intención también, pero empecé integrándolo en un sistema que hace varias cosas, y por falta de tiempo no he sido capaz después de aislarlo. Lo he resuelto con una chapuza, VeFa32 tiene un menú específico para él y permite hacer lo que tiene el menú.
paquitohm wrote: Thu Apr 10, 2025 4:35 pm Una sugerencia: La respuesta, ademas de en el portapapeles grabala en una carpeta c:\Respuesta\UltimaRespuesta.xml donde el programa llamador podrá encontrar ese archivo para hacer con el lo que quiera.
Me parece buena idea, de hecho guardo los XML de envío/respuesta a/de Veri*factu.
paquitohm wrote: Thu Apr 10, 2025 4:35 pm PD. El VF lo he enfocado desde el punto de vista de operaciones permitidas. Veremos como sale. Lo que mas me pone es el hecho de que se supone que la mayoria de dudas operacionales no tendrian que ser tales porque eso existe desde tiempo inmemoria en el reglamento de facturacion. Pero va a resultar que somos nosotros los que vamos a tener que dar asistencia para enseñar al usuario a hacer las operaciones correctas (altas, subsanaciones, anulaciones). Por cierto: Estas usando las anulaciones en tu programa
Yo lo he enfocado de manera que sea el SIF que tenga sus controles/limitaciones adecuadas a la ley, y que VeFa32 sólo se dedique a enviar y gestionar lo que le provee el SIF.
'...dudas operacionales no tendrian ...', exacto, pero el mercado estaba como estaba y se permitía que el usuario pidiera la luna. Ahora tocará crear consciencia del cambio, por ejemplo para situaciones 'no permitidas' que aparezca un mensaje (y si es necesario 2 ó 3) indiándo que en el 2026 no se podrá hacer. Eso lo he visto en un SIF, han empezado con validaciones de datos de clientes y si no pasan el filtro avisa pero de momento permite continuar.

Seguimos,]]>
paquitohm wrote: Thu Apr 10, 2025 4:35 pm Me ha parecido que utilizas una tabla para las bases imponibles.
Yo habia pensado poner 6 tuplas de campos en la tabla superior (Tipo IVA, Base, Cuota)
No, lo que tengo es una tabla auxiliar de las facturas que entre otros tiene estos campos:

TIPUFACT <> Caràcter <> 1 <> 0 <> Tipus Factura (C-ompres V-endes)
IDFACTUR <> Caràcter <> 25 <> 0 <> Identificació factura
CODIPERS <> Caràcter <> 12 <> 0 <> Codi proveidor/client
TIPUIMPO <> Numèric <> 1 <> 0 <> Tipus Import (1-B.I., 2-Altres NO IVA, 3-IVA No Dedu., 4-IVA, 5-IRPF, 9-Total
IMPORT__ <> Numèric <> 10 <> 2 <> Import
PERCENTA <> Numèric <> 10 <> 4 <> Percentatge IVA/IRPF
BASECALC <> Numèric <> 10 <> 2 <> Base pel càlcul

De esta manera estoy desvinculado del tipo de IVA/IRPF que se vaya a utilizar. Es heredado de un sistema contable sencillo que hice. Me sirve para las declaraciones trimestrales/anuales, 340, etc. El inconveniente es que el usuario puede teclear el valor de IVA/IRPF que desee sin que se valide nada.
paquitohm wrote: Thu Apr 10, 2025 4:35 pm Tu VeFa32, su existencia, me ha dado la idea de aislarlo todo bien aislado y asi quiza me ahorro pasar usuarios DOS a Win porque en algunos casos, en algunos clientes, el Verifactu no es una oportunidad sino una incomodiad.
Si, esa era mi intención también, pero empecé integrándolo en un sistema que hace varias cosas, y por falta de tiempo no he sido capaz después de aislarlo. Lo he resuelto con una chapuza, VeFa32 tiene un menú específico para él y permite hacer lo que tiene el menú.
paquitohm wrote: Thu Apr 10, 2025 4:35 pm Una sugerencia: La respuesta, ademas de en el portapapeles grabala en una carpeta c:\Respuesta\UltimaRespuesta.xml donde el programa llamador podrá encontrar ese archivo para hacer con el lo que quiera.
Me parece buena idea, de hecho guardo los XML de envío/respuesta a/de Veri*factu.
paquitohm wrote: Thu Apr 10, 2025 4:35 pm PD. El VF lo he enfocado desde el punto de vista de operaciones permitidas. Veremos como sale. Lo que mas me pone es el hecho de que se supone que la mayoria de dudas operacionales no tendrian que ser tales porque eso existe desde tiempo inmemoria en el reglamento de facturacion. Pero va a resultar que somos nosotros los que vamos a tener que dar asistencia para enseñar al usuario a hacer las operaciones correctas (altas, subsanaciones, anulaciones). Por cierto: Estas usando las anulaciones en tu programa
Yo lo he enfocado de manera que sea el SIF que tenga sus controles/limitaciones adecuadas a la ley, y que VeFa32 sólo se dedique a enviar y gestionar lo que le provee el SIF.
'...dudas operacionales no tendrian ...', exacto, pero el mercado estaba como estaba y se permitía que el usuario pidiera la luna. Ahora tocará crear consciencia del cambio, por ejemplo para situaciones 'no permitidas' que aparezca un mensaje (y si es necesario 2 ó 3) indiándo que en el 2026 no se podrá hacer. Eso lo he visto en un SIF, han empezado con validaciones de datos de clientes y si no pasan el filtro avisa pero de momento permite continuar.

Seguimos,]]>
<![CDATA[Off Topic / Otros temas :: Re: VeFa32 - Verifactu :: Reply by paquitohm]]> 2025-04-11T05:51:13-06:00 2025-04-11T05:51:13-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=19&t=45519&p=278942#p278942
Yo lo he enfocado de manera que sea el SIF que tenga sus controles/limitaciones adecuadas a la ley, y que VeFa32 sólo se dedique a enviar y gestionar lo que le provee el SIF.
'...dudas operacionales no tendrian ...', exacto, pero el mercado estaba como estaba y se permitía que el usuario pidiera la luna. Ahora tocará crear consciencia del cambio, por ejemplo para situaciones 'no permitidas' que aparezca un mensaje (y si es necesario 2 ó 3) indiándo que en el 2026 no se podrá hacer. Eso lo he visto en un SIF, han empezado con validaciones de datos de clientes y si no pasan el filtro avisa pero de momento permite continuar.
Entiendo que unas minimas validaciones tendras que poner en el conector VeFa32 para evitar que otros SIFs lo alimenten erroneamente.


Otra:

Como te comentaba antes el lio lo tengo ahora mismo pensando en como el usuario va a responder. ¿ Dejar al usuario que manipule F1, F2, F3,R1,R2,R3,R4,R5 ? Pufff.... La verdad es que conforme se anda se van resolviendo los temas... o eso creo]]>
Yo lo he enfocado de manera que sea el SIF que tenga sus controles/limitaciones adecuadas a la ley, y que VeFa32 sólo se dedique a enviar y gestionar lo que le provee el SIF.
'...dudas operacionales no tendrian ...', exacto, pero el mercado estaba como estaba y se permitía que el usuario pidiera la luna. Ahora tocará crear consciencia del cambio, por ejemplo para situaciones 'no permitidas' que aparezca un mensaje (y si es necesario 2 ó 3) indiándo que en el 2026 no se podrá hacer. Eso lo he visto en un SIF, han empezado con validaciones de datos de clientes y si no pasan el filtro avisa pero de momento permite continuar.
Entiendo que unas minimas validaciones tendras que poner en el conector VeFa32 para evitar que otros SIFs lo alimenten erroneamente.


Otra:

Como te comentaba antes el lio lo tengo ahora mismo pensando en como el usuario va a responder. ¿ Dejar al usuario que manipule F1, F2, F3,R1,R2,R3,R4,R5 ? Pufff.... La verdad es que conforme se anda se van resolviendo los temas... o eso creo]]>
<![CDATA[Off Topic / Otros temas :: Re: VeFa32 - Verifactu :: Reply by paquitohm]]> 2025-04-11T12:34:29-06:00 2025-04-11T12:34:29-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=19&t=45519&p=278947#p278947
Pues a falta de implementa la operativa alimentacion de la tabla, la estructura que me queda es esta.
Ya ves que en mi caso las bases van en el mismo registro y tb. se utiliza para albergar la parte de respuesta del detalle.
Dime por favor si vieras algo raro.

Code: Select all | Expand

// Las marcadas con XX probablemente son prescindibles porque son datos generales de Verifactu o del SIF 
aStruct := {;
   ;
   ; // ** ENVIO ALTA o ANULACION ** //
   ;
   ; // Comunes
   {"CMIDVers", "C", 3,   0},;  // RegistroAltaBase/RegistroAnulacion IDVersion
   {"CMSignat", "C", 250, 0},;  // RegistroAltaBase/RegistroAnulacion Signature
   {"CMRefExt", "C", 60,  0},;  // RegistroAltaBase/RegistroAnulacion RefExterna
   {"CMRecPre", "C", 1,   0},;  // RegistroAltaBase/RegistroAnulacion RechazoPrevio
   {"CMFHoReg", "C", 20,  0},;  // RegistroAltaBase/RegistroAnulacion FechaHoraHusoGenRegistro
   {"CMTipHue", "C", 2,   0},;  // RegistroAltaBase/RegistroAnulacion TipoHuella
   ;
   ; // RegistroAltaBase
   {"RANomRaz", "C", 120, 0},;  // NombreRazonEmisor
   {"RAOpeAlt", "C", 10,  0},;  // cOperacionAlta
   {"RASubSan", "C", 1,   0},;  // Subsanacion
   {"RATipFac", "C", 2,   0},;  // TipoFactura
   {"RATipRec", "C", 1,   0},;  // TipoRectificativa
   {"RAFecOpe", "D", 8,   0},;  // FechaOperacion
   {"RADesOpe", "C", 250, 0},;  // DescripcionOperacion
   {"RAFSimpl", "C", 1,   0},;  // FacturaSimplificadaArt7273
   {"RAFSinId", "C", 1,   0},;  // FacturaSinIdentifDestinatarioArt61d
   {"RAMacroD", "C", 1,   0},;  // Macrodato
   {"RAEmiTer", "C", 1,   0},;  // EmitidaPorTerceroODestinatario
   {"RACupon", "C", 250,  0},;  // Cupon
   {"RACuoTot", "N", 12,  2},;  // CuotaTotal
   {"RAImpTot", "N", 12,  2},;  // ImporteTotal
   {"RANumAcu", "C", 15,  0},;  // XX NumRegistroAcuerdoFacturacion
   {"RAIDSist", "C", 16,  0},;  // XX IdAcuerdoSistemaInformatico
   ;
   ; // RegistroAnulacion
   {"RNOpeAnu", "C", 10,  0},;  // cOperacionAnulacion
   {"RNSinReg", "C", 1,   0},;  // SinRegistroPrevio
   {"RNGenPor", "C", 1,   0},;  // GeneradoPor
   ;
   ; // IDFacturaExpedida
   {"IFIDEmis", "C", MAX_NIF, 0},;  // IDEmisorFactura
   {"IFNumSer", "C", 60,  0},;  // NumSerieFactura
   {"IFFecExp", "D", 8,   0},;  // FechaExpedicionFactura
   ;
   ; // RegistroAnterior
   {"RGIDEmis", "C", 9,   0},;  // IDEmisorFactura
   {"RGNumSer", "C", 60,  0},;  // NumSerieFactura
   {"RGFecExp", "D", 8,   0},;  // FechaExpedicionFactura
   {"RGHuelll", "C", 64,  0},;  // Huella
   ;
   ; // DesgloseRectificacion
   {"DRBasRec", "N", 12,  2},;  // BaseRectificada
   {"DRCuoRec", "N", 12,  2},;  // CuotaRectificada
   {"DRCuRRec", "N", 12,  2},;  // CuotaRecargoRectificado
   ;
   ; // DetalleDesglose
   {"DDTipImp1", "C", 10, 0},;  // Impuesto (1)
   {"DDTipImp2", "C", 10, 0},;  // Impuesto (2)
   {"DDTipImp3", "C", 10, 0},;  // Impuesto (3)
   {"DDTipImp4", "C", 10, 0},;  // Impuesto (4)
   {"DDTipImp5", "C", 10, 0},;  // Impuesto (5)
   {"DDTipImp6", "C", 10, 0},;  // Impuesto (6)
   {"DDClaReg1", "C", 2,  0},;  // ClaveRegimen (1)
   {"DDClaReg2", "C", 2,  0},;  // ClaveRegimen (2)
   {"DDClaReg3", "C", 2,  0},;  // ClaveRegimen (3)
   {"DDClaReg4", "C", 2,  0},;  // ClaveRegimen (4)
   {"DDClaReg5", "C", 2,  0},;  // ClaveRegimen (5)
   {"DDClaReg6", "C", 2,  0},;  // ClaveRegimen (6)
   {"DDCalOpe1", "C", 2,  0},;  // CalificacionOperacion (1)
   {"DDCalOpe2", "C", 2,  0},;  // CalificacionOperacion (2)
   {"DDCalOpe3", "C", 2,  0},;  // CalificacionOperacion (3)
   {"DDCalOpe4", "C", 2,  0},;  // CalificacionOperacion (4)
   {"DDCalOpe5", "C", 2,  0},;  // CalificacionOperacion (5)
   {"DDCalOpe6", "C", 2,  0},;  // CalificacionOperacion (6)
   {"DDExenta1", "C", 2,  0},;  // OperacionExenta (1)
   {"DDExenta2", "C", 2,  0},;  // OperacionExenta (2)
   {"DDExenta3", "C", 2,  0},;  // OperacionExenta (3)
   {"DDExenta4", "C", 2,  0},;  // OperacionExenta (4)
   {"DDExenta5", "C", 2,  0},;  // OperacionExenta (5)
   {"DDExenta6", "C", 2,  0},;  // OperacionExenta (6)
   {"DDTipImp1", "N", 5,  2},;  // TipoImpositivo (1)
   {"DDTipImp2", "N", 5,  2},;  // TipoImpositivo (2)
   {"DDTipImp3", "N", 5,  2},;  // TipoImpositivo (3)
   {"DDTipImp4", "N", 5,  2},;  // TipoImpositivo (4)
   {"DDTipImp5", "N", 5,  2},;  // TipoImpositivo (5)
   {"DDTipImp6", "N", 5,  2},;  // TipoImpositivo (6)
   {"DDBasImp1", "N", 12, 2},;  // BaseImponible (1)
   {"DDBasImp2", "N", 12, 2},;  // BaseImponible (2)
   {"DDBasImp3", "N", 12, 2},;  // BaseImponible (3)
   {"DDBasImp4", "N", 12, 2},;  // BaseImponible (4)
   {"DDBasImp5", "N", 12, 2},;  // BaseImponible (5)
   {"DDBasImp6", "N", 12, 2},;  // BaseImponible (6)
   {"DDBImACo1", "N", 12, 2},;  // BaseImponibleACoste (1)
   {"DDBImACo2", "N", 12, 2},;  // BaseImponibleACoste (2)
   {"DDBImACo3", "N", 12, 2},;  // BaseImponibleACoste (3)
   {"DDBImACo4", "N", 12, 2},;  // BaseImponibleACoste (4)
   {"DDBImACo5", "N", 12, 2},;  // BaseImponibleACoste (5)
   {"DDBImACo6", "N", 12, 2},;  // BaseImponibleACoste (6)
   {"DDCuoRep1", "N", 12, 2},;  // CuotaRepercutida (1)
   {"DDCuoRep2", "N", 12, 2},;  // CuotaRepercutida (2)
   {"DDCuoRep3", "N", 12, 2},;  // CuotaRepercutida (3)
   {"DDCuoRep4", "N", 12, 2},;  // CuotaRepercutida (4)
   {"DDCuoRep5", "N", 12, 2},;  // CuotaRepercutida (5)
   {"DDCuoRep6", "N", 12, 2},;  // CuotaRepercutida (6)
   {"DDTipRec1", "N", 5,  2},;  // TipoRecargoEquivalencia (1)
   {"DDTipRec2", "N", 5,  2},;  // TipoRecargoEquivalencia (2)
   {"DDTipRec3", "N", 5,  2},;  // TipoRecargoEquivalencia (3)
   {"DDTipRec4", "N", 5,  2},;  // TipoRecargoEquivalencia (4)
   {"DDTipRec5", "N", 5,  2},;  // TipoRecargoEquivalencia (5)
   {"DDTipRec6", "N", 5,  2},;  // TipoRecargoEquivalencia (6)
   {"DDCuoRec1", "N", 12, 2},;  // CuotaRecargoEquivalencia (1)
   {"DDCuoRec2", "N", 12, 2},;  // CuotaRecargoEquivalencia (2)
   {"DDCuoRec3", "N", 12, 2},;  // CuotaRecargoEquivalencia (3)
   {"DDCuoRec4", "N", 12, 2},;  // CuotaRecargoEquivalencia (4)
   {"DDCuoRec5", "N", 12, 2},;  // CuotaRecargoEquivalencia (5)
   {"DDCuoRec6", "N", 12, 2},;  // CuotaRecargoEquivalencia (6)
   ;
   ; // Encadenamiento
   {"ENPriReg", "C", 1,   0},;  // PrimerRegistro
   ;
   ;
   ; // ** RESPUESTA ** //
   ;
   {"RSIDEmis", "C", MAX_NIF, 0},;  // IDEmisorFactura
   {"RSNumSer", "C", 10,  0},;      // NumSerieFactura
   {"RSFecExp", "D", 8,   0},;      // FechaExpedicionFactura
   {"RSTipOpe", "C", 10,  0},;      // TipoOperacion
   {"RSEstado", "C", 20,  0},;      // Estado
   {"RSCodErr", "N", 4,   0},;      // CodigoError
   {"RSDesErr", "C", 40,  0} ;      // DescripcionError
}
Salu2]]>

Pues a falta de implementa la operativa alimentacion de la tabla, la estructura que me queda es esta.
Ya ves que en mi caso las bases van en el mismo registro y tb. se utiliza para albergar la parte de respuesta del detalle.
Dime por favor si vieras algo raro.

Code: Select all | Expand

// Las marcadas con XX probablemente son prescindibles porque son datos generales de Verifactu o del SIF 
aStruct := {;
   ;
   ; // ** ENVIO ALTA o ANULACION ** //
   ;
   ; // Comunes
   {"CMIDVers", "C", 3,   0},;  // RegistroAltaBase/RegistroAnulacion IDVersion
   {"CMSignat", "C", 250, 0},;  // RegistroAltaBase/RegistroAnulacion Signature
   {"CMRefExt", "C", 60,  0},;  // RegistroAltaBase/RegistroAnulacion RefExterna
   {"CMRecPre", "C", 1,   0},;  // RegistroAltaBase/RegistroAnulacion RechazoPrevio
   {"CMFHoReg", "C", 20,  0},;  // RegistroAltaBase/RegistroAnulacion FechaHoraHusoGenRegistro
   {"CMTipHue", "C", 2,   0},;  // RegistroAltaBase/RegistroAnulacion TipoHuella
   ;
   ; // RegistroAltaBase
   {"RANomRaz", "C", 120, 0},;  // NombreRazonEmisor
   {"RAOpeAlt", "C", 10,  0},;  // cOperacionAlta
   {"RASubSan", "C", 1,   0},;  // Subsanacion
   {"RATipFac", "C", 2,   0},;  // TipoFactura
   {"RATipRec", "C", 1,   0},;  // TipoRectificativa
   {"RAFecOpe", "D", 8,   0},;  // FechaOperacion
   {"RADesOpe", "C", 250, 0},;  // DescripcionOperacion
   {"RAFSimpl", "C", 1,   0},;  // FacturaSimplificadaArt7273
   {"RAFSinId", "C", 1,   0},;  // FacturaSinIdentifDestinatarioArt61d
   {"RAMacroD", "C", 1,   0},;  // Macrodato
   {"RAEmiTer", "C", 1,   0},;  // EmitidaPorTerceroODestinatario
   {"RACupon", "C", 250,  0},;  // Cupon
   {"RACuoTot", "N", 12,  2},;  // CuotaTotal
   {"RAImpTot", "N", 12,  2},;  // ImporteTotal
   {"RANumAcu", "C", 15,  0},;  // XX NumRegistroAcuerdoFacturacion
   {"RAIDSist", "C", 16,  0},;  // XX IdAcuerdoSistemaInformatico
   ;
   ; // RegistroAnulacion
   {"RNOpeAnu", "C", 10,  0},;  // cOperacionAnulacion
   {"RNSinReg", "C", 1,   0},;  // SinRegistroPrevio
   {"RNGenPor", "C", 1,   0},;  // GeneradoPor
   ;
   ; // IDFacturaExpedida
   {"IFIDEmis", "C", MAX_NIF, 0},;  // IDEmisorFactura
   {"IFNumSer", "C", 60,  0},;  // NumSerieFactura
   {"IFFecExp", "D", 8,   0},;  // FechaExpedicionFactura
   ;
   ; // RegistroAnterior
   {"RGIDEmis", "C", 9,   0},;  // IDEmisorFactura
   {"RGNumSer", "C", 60,  0},;  // NumSerieFactura
   {"RGFecExp", "D", 8,   0},;  // FechaExpedicionFactura
   {"RGHuelll", "C", 64,  0},;  // Huella
   ;
   ; // DesgloseRectificacion
   {"DRBasRec", "N", 12,  2},;  // BaseRectificada
   {"DRCuoRec", "N", 12,  2},;  // CuotaRectificada
   {"DRCuRRec", "N", 12,  2},;  // CuotaRecargoRectificado
   ;
   ; // DetalleDesglose
   {"DDTipImp1", "C", 10, 0},;  // Impuesto (1)
   {"DDTipImp2", "C", 10, 0},;  // Impuesto (2)
   {"DDTipImp3", "C", 10, 0},;  // Impuesto (3)
   {"DDTipImp4", "C", 10, 0},;  // Impuesto (4)
   {"DDTipImp5", "C", 10, 0},;  // Impuesto (5)
   {"DDTipImp6", "C", 10, 0},;  // Impuesto (6)
   {"DDClaReg1", "C", 2,  0},;  // ClaveRegimen (1)
   {"DDClaReg2", "C", 2,  0},;  // ClaveRegimen (2)
   {"DDClaReg3", "C", 2,  0},;  // ClaveRegimen (3)
   {"DDClaReg4", "C", 2,  0},;  // ClaveRegimen (4)
   {"DDClaReg5", "C", 2,  0},;  // ClaveRegimen (5)
   {"DDClaReg6", "C", 2,  0},;  // ClaveRegimen (6)
   {"DDCalOpe1", "C", 2,  0},;  // CalificacionOperacion (1)
   {"DDCalOpe2", "C", 2,  0},;  // CalificacionOperacion (2)
   {"DDCalOpe3", "C", 2,  0},;  // CalificacionOperacion (3)
   {"DDCalOpe4", "C", 2,  0},;  // CalificacionOperacion (4)
   {"DDCalOpe5", "C", 2,  0},;  // CalificacionOperacion (5)
   {"DDCalOpe6", "C", 2,  0},;  // CalificacionOperacion (6)
   {"DDExenta1", "C", 2,  0},;  // OperacionExenta (1)
   {"DDExenta2", "C", 2,  0},;  // OperacionExenta (2)
   {"DDExenta3", "C", 2,  0},;  // OperacionExenta (3)
   {"DDExenta4", "C", 2,  0},;  // OperacionExenta (4)
   {"DDExenta5", "C", 2,  0},;  // OperacionExenta (5)
   {"DDExenta6", "C", 2,  0},;  // OperacionExenta (6)
   {"DDTipImp1", "N", 5,  2},;  // TipoImpositivo (1)
   {"DDTipImp2", "N", 5,  2},;  // TipoImpositivo (2)
   {"DDTipImp3", "N", 5,  2},;  // TipoImpositivo (3)
   {"DDTipImp4", "N", 5,  2},;  // TipoImpositivo (4)
   {"DDTipImp5", "N", 5,  2},;  // TipoImpositivo (5)
   {"DDTipImp6", "N", 5,  2},;  // TipoImpositivo (6)
   {"DDBasImp1", "N", 12, 2},;  // BaseImponible (1)
   {"DDBasImp2", "N", 12, 2},;  // BaseImponible (2)
   {"DDBasImp3", "N", 12, 2},;  // BaseImponible (3)
   {"DDBasImp4", "N", 12, 2},;  // BaseImponible (4)
   {"DDBasImp5", "N", 12, 2},;  // BaseImponible (5)
   {"DDBasImp6", "N", 12, 2},;  // BaseImponible (6)
   {"DDBImACo1", "N", 12, 2},;  // BaseImponibleACoste (1)
   {"DDBImACo2", "N", 12, 2},;  // BaseImponibleACoste (2)
   {"DDBImACo3", "N", 12, 2},;  // BaseImponibleACoste (3)
   {"DDBImACo4", "N", 12, 2},;  // BaseImponibleACoste (4)
   {"DDBImACo5", "N", 12, 2},;  // BaseImponibleACoste (5)
   {"DDBImACo6", "N", 12, 2},;  // BaseImponibleACoste (6)
   {"DDCuoRep1", "N", 12, 2},;  // CuotaRepercutida (1)
   {"DDCuoRep2", "N", 12, 2},;  // CuotaRepercutida (2)
   {"DDCuoRep3", "N", 12, 2},;  // CuotaRepercutida (3)
   {"DDCuoRep4", "N", 12, 2},;  // CuotaRepercutida (4)
   {"DDCuoRep5", "N", 12, 2},;  // CuotaRepercutida (5)
   {"DDCuoRep6", "N", 12, 2},;  // CuotaRepercutida (6)
   {"DDTipRec1", "N", 5,  2},;  // TipoRecargoEquivalencia (1)
   {"DDTipRec2", "N", 5,  2},;  // TipoRecargoEquivalencia (2)
   {"DDTipRec3", "N", 5,  2},;  // TipoRecargoEquivalencia (3)
   {"DDTipRec4", "N", 5,  2},;  // TipoRecargoEquivalencia (4)
   {"DDTipRec5", "N", 5,  2},;  // TipoRecargoEquivalencia (5)
   {"DDTipRec6", "N", 5,  2},;  // TipoRecargoEquivalencia (6)
   {"DDCuoRec1", "N", 12, 2},;  // CuotaRecargoEquivalencia (1)
   {"DDCuoRec2", "N", 12, 2},;  // CuotaRecargoEquivalencia (2)
   {"DDCuoRec3", "N", 12, 2},;  // CuotaRecargoEquivalencia (3)
   {"DDCuoRec4", "N", 12, 2},;  // CuotaRecargoEquivalencia (4)
   {"DDCuoRec5", "N", 12, 2},;  // CuotaRecargoEquivalencia (5)
   {"DDCuoRec6", "N", 12, 2},;  // CuotaRecargoEquivalencia (6)
   ;
   ; // Encadenamiento
   {"ENPriReg", "C", 1,   0},;  // PrimerRegistro
   ;
   ;
   ; // ** RESPUESTA ** //
   ;
   {"RSIDEmis", "C", MAX_NIF, 0},;  // IDEmisorFactura
   {"RSNumSer", "C", 10,  0},;      // NumSerieFactura
   {"RSFecExp", "D", 8,   0},;      // FechaExpedicionFactura
   {"RSTipOpe", "C", 10,  0},;      // TipoOperacion
   {"RSEstado", "C", 20,  0},;      // Estado
   {"RSCodErr", "N", 4,   0},;      // CodigoError
   {"RSDesErr", "C", 40,  0} ;      // DescripcionError
}
Salu2]]>
<![CDATA[Off Topic / Otros temas :: Re: VeFa32 - Verifactu :: Reply by FiveWiDi]]> 2025-04-11T13:33:39-06:00 2025-04-11T13:33:39-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=19&t=45519&p=278948#p278948
paquitohm wrote: Thu Apr 10, 2025 4:35 pmUna sugerencia: La respuesta, ademas de en el portapapeles grabala en una carpeta c:\Respuesta\UltimaRespuesta.xml donde el programa llamador podrá encontrar ese archivo para hacer con el lo que quiera.
Hecho, en la versión del 15/04/2025 estará disponible.
VeFa32 tiene una carpeta específica para los Xml enviados y los de respuesta; ahora además tendrá una subcarpeta para cada año.

Seguimos,]]>
paquitohm wrote: Thu Apr 10, 2025 4:35 pmUna sugerencia: La respuesta, ademas de en el portapapeles grabala en una carpeta c:\Respuesta\UltimaRespuesta.xml donde el programa llamador podrá encontrar ese archivo para hacer con el lo que quiera.
Hecho, en la versión del 15/04/2025 estará disponible.
VeFa32 tiene una carpeta específica para los Xml enviados y los de respuesta; ahora además tendrá una subcarpeta para cada año.

Seguimos,]]>
<![CDATA[Off Topic / Otros temas :: Re: VeFa32 - Verifactu :: Reply by FiveWiDi]]> 2025-04-11T14:32:44-06:00 2025-04-11T14:32:44-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=19&t=45519&p=278950#p278950
paquitohm wrote: Fri Apr 11, 2025 11:51 amEntiendo que unas minimas validaciones tendras que poner en el conector VeFa32 para evitar que otros SIFs lo alimenten erroneamente.
Sólo hago 2 cosas:
-'limpio' el NIF (dejo sólo letras y cifras)
-busco si en VeFa32 ya existen datos de esa factura, si es así 'machaco' sus datos por lo que envía el SIF (dudo que el SIF guarde versiones de las facturas, VeFa32 tampoco), y serán éstos los que se enviaran a Veri*factu (1)

(1) si el SIF envía datos de una misma factura a VeFa32 más de una vez:
-Si es antes del envío de VeFa32 a Veri*factu (VeFa32 envia a Veri*factu cada 'n' segundos), se enviará la última información proporcionada por el SIF.
-Si VeFa32 ya ha enviado a Veri*factu en un momento anterior, se volverá a enviar-->>es responsabilidad del SIF indicar a VeFa32 que se trata de una subsanación. Si no lo indica Veri*factu lo rechazará y el usuario/SIF deberá reaccionar según convenga.

VeFa32 es una utilidad para enviar datos y recoger información. Si hiciera más cosas estaría limitando la libertad del programador del SIF para hacer o arreglar o adaptar lo que crea necesario. Si hay un error debe estar en el SIF, así la rapidez de respuesta recae en el desarrollador del SIF: facturar y Veri*factu son procesos críticos. Además así VeFa32 es transparente y da confianza al integrador del SIF, sabe que VeFa32 no hará cosas que no debe.

paquitohm wrote: Fri Apr 11, 2025 11:51 amComo te comentaba antes el lio lo tengo ahora mismo pensando en como el usuario va a responder. ¿ Dejar al usuario que manipule F1, F2, F3,R1,R2,R3,R4,R5 ? Pufff.... La verdad es que conforme se anda se van resolviendo los temas... o eso creo
No dejo que el usuario manipule (ahora que lo dices, permitiré que envíe a VeFa32 el tipo factura, y si no lo hace aplicaré la función que detallo).
De momento sólo contemplo los tipos F1, F2, R1, R5.

Utilizo esta función, creo que se corresponde de lo que se desprende de la documentación de Veri*factu:

Code: Select all | Expand

FUNCTION cTipuVFFactura( AMPAARRA, lESRECTIF, cSINDESTI, cSIMPLIFI )

// En base a los valores recibidos indicará que tipo de factura es.

Local cTipuFactura := ""

// He dejado el orden SINDESTIno, SIMPLIFIcada, el RESTO, porqué en Verifactu si se interpreta que es SIMPLIFICADA se entiende que es ¡¡¡CON!!! destinatario.

If cSINDESTI = "S"
    If lESRECTIF
	    cTipuFactura := "R5"
      Else
        cTipuFactura := "F2"
	EndIf
ElseIf cSIMPLIFI = "S"
    If lESRECTIF
	    cTipuFactura := "R1"
      Else
        cTipuFactura := "F1"
	EndIf
Else
    If lESRECTIF
        cTipuFactura := "R1"
      Else
        cTipuFactura := "F1"
	EndIf
EndIf

Return cTipuFactura
Seguimos]]>
paquitohm wrote: Fri Apr 11, 2025 11:51 amEntiendo que unas minimas validaciones tendras que poner en el conector VeFa32 para evitar que otros SIFs lo alimenten erroneamente.
Sólo hago 2 cosas:
-'limpio' el NIF (dejo sólo letras y cifras)
-busco si en VeFa32 ya existen datos de esa factura, si es así 'machaco' sus datos por lo que envía el SIF (dudo que el SIF guarde versiones de las facturas, VeFa32 tampoco), y serán éstos los que se enviaran a Veri*factu (1)

(1) si el SIF envía datos de una misma factura a VeFa32 más de una vez:
-Si es antes del envío de VeFa32 a Veri*factu (VeFa32 envia a Veri*factu cada 'n' segundos), se enviará la última información proporcionada por el SIF.
-Si VeFa32 ya ha enviado a Veri*factu en un momento anterior, se volverá a enviar-->>es responsabilidad del SIF indicar a VeFa32 que se trata de una subsanación. Si no lo indica Veri*factu lo rechazará y el usuario/SIF deberá reaccionar según convenga.

VeFa32 es una utilidad para enviar datos y recoger información. Si hiciera más cosas estaría limitando la libertad del programador del SIF para hacer o arreglar o adaptar lo que crea necesario. Si hay un error debe estar en el SIF, así la rapidez de respuesta recae en el desarrollador del SIF: facturar y Veri*factu son procesos críticos. Además así VeFa32 es transparente y da confianza al integrador del SIF, sabe que VeFa32 no hará cosas que no debe.

paquitohm wrote: Fri Apr 11, 2025 11:51 amComo te comentaba antes el lio lo tengo ahora mismo pensando en como el usuario va a responder. ¿ Dejar al usuario que manipule F1, F2, F3,R1,R2,R3,R4,R5 ? Pufff.... La verdad es que conforme se anda se van resolviendo los temas... o eso creo
No dejo que el usuario manipule (ahora que lo dices, permitiré que envíe a VeFa32 el tipo factura, y si no lo hace aplicaré la función que detallo).
De momento sólo contemplo los tipos F1, F2, R1, R5.

Utilizo esta función, creo que se corresponde de lo que se desprende de la documentación de Veri*factu:

Code: Select all | Expand

FUNCTION cTipuVFFactura( AMPAARRA, lESRECTIF, cSINDESTI, cSIMPLIFI )

// En base a los valores recibidos indicará que tipo de factura es.

Local cTipuFactura := ""

// He dejado el orden SINDESTIno, SIMPLIFIcada, el RESTO, porqué en Verifactu si se interpreta que es SIMPLIFICADA se entiende que es ¡¡¡CON!!! destinatario.

If cSINDESTI = "S"
    If lESRECTIF
	    cTipuFactura := "R5"
      Else
        cTipuFactura := "F2"
	EndIf
ElseIf cSIMPLIFI = "S"
    If lESRECTIF
	    cTipuFactura := "R1"
      Else
        cTipuFactura := "F1"
	EndIf
Else
    If lESRECTIF
        cTipuFactura := "R1"
      Else
        cTipuFactura := "F1"
	EndIf
EndIf

Return cTipuFactura
Seguimos]]>
<![CDATA[Off Topic / Otros temas :: Re: VeFa32 - Verifactu :: Reply by FiveWiDi]]> 2025-04-11T16:50:43-06:00 2025-04-11T16:50:43-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=19&t=45519&p=278953#p278953
paquitohm wrote: Fri Apr 11, 2025 6:34 pmDime por favor si vieras algo raro.
El caso es que yo intento tener en tablas lo necesario y poco más y parto de que Hacienda una vez se le envíe el registro y responda el OK, le dará igual que yo guarde o no información del REGISTRO enviado. Se puede obtener la información enviada consultando a Hacienda. Por tanto incluso me podria permitir eliminar la tabla de lo enviado y empezar de cero, sólo necesitaría el último registro enviado para el tema de datos del registro anterior. Tal como suena.

Ojo, sólo trabajo Veri*factu On line, es decir envío a Veri*factu al 'momento' (con un margen de segundos y/o minutos).

En algún Webinar se ha dicho sobre el tema y además respondido en mail de consultas a Veri*factu: una vez enviado el registro es Hacienda quién lo tiene en custodia y ya no me pedirá información al respecto de ese registro. Por tanto, la conservación de los datos es prescindible.

En su lugar, los datos que si conservaré (con copias y lo que haga falta, como cualquier SIF) ya están en las tablas de facturas, y los conservaré ni que sea para reimprimirlas o calcular informaciones/liquidaciones trimestrales/anuales.

Dicho esto.
En VeFa32 utilizo 3 tablas para gestionar el envío/respuesta a/de Veri*factu:

Code: Select all | Expand

Para los datos de los XML enviados.
===================================
Nombre base:     VERFAC
Descripción:     VF-XML Veri*Factu

Nombre campo <> Tipo     <> Lon <> Decim. <> Descripción
============ <> ======== <> === <> ====== <> ==========
*CODIVEFA*     <> Carácter <>  12 <>    0   <> Código VeFa32 Xml único
IDVERFAC     <> Carácter <>  25 <>    0   <> Identificación VeFa32 (referencia única; da nombre al XML)
VF_ESTAT     <> Numérico <>   3 <>    0   <> Estado Verifactu (5-En revisión, 10-Iniciado, 15-XML generado, 20-Acabado, 30-Acabado con error,...)
INCIDENC     <> Carácter <>   1 <>    0   <> Tiene Incidencia previa (Si, No)
ESTAENVI     <> Carácter <>  50 <>    0   <> Estado Envío (respuesta Veri*factu:Correcto, ParcialmenteCorrecto, Incorrecto)
TIPUENVI     <> Numérico <>   2 <>    0   <> Tipo Envío (10-Voluntario 20-Requerimiento)
TISTENVI     <> Carácter <>  30 <>    0   <> Time Stamp Envío
DATENVVF     <> Fecha    <>   8 <>    0   <> Fecha Envío
HORENVVF     <> Carácter <>   8 <>    0   <> Hora Envío
FITXENVI     <> Carácter <>  40 <>    0   <> Fichero Envío
DATRECVF     <> Fecha    <>   8 <>    0   <> Fecha recepción
HORRECVF     <> Carácter <>   8 <>    0   <> Hora recepción
FITXRESP     <> Carácter <>  50 <>    0   <> Fichero respuesta
CSVRESPO     <> Carácter <>  25 <>    0   <> CSV recibido respuesta
NUMEREGI     <> Numérico <>   5 <>    0   <> Registros tratados VFREGI


Para los registros con datos de las facturas.
=============================================
Nombre base:     VFREGI
Descripción:     VF-Reg. Verifactu

Nombre campo <> Tipo     <> Lon <> Decim. <> Descripción
============ <> ======== <> === <> ====== <> ==========
*CODIVFRE*     <> Carácter <>  12 <>    0   <> Código Regi.VeFa32 (código único)
IDVFREGI     <> Carácter <>  25 <>    0   <> Identif.Reg.VeFa32 (referencia única)

VFCODFAC     <> Carácter <>  20 <>    0   <> Código Fact.SIF (código factura enviado en XML)
NIF          <> Carácter <>  20 <>    0   <> N.I.F. destinatario factura
DATAFACT     <> Fecha    <>   8 <>    0   <> Fecha Factura
IMPOTOTA     <> Numérico <>  15 <>    6   <> Importe TOTAL factura

*CODIVEFA*     <> Carácter <>  12 <>    0   <> Código VeFa32    (código del registro DBF VERFAC)
IDPETICI     <> Carácter <>  40 <>    0   <> Id 'Petición' (se captura al consultar a Hacienda)
TIPUREGI     <> Numérico <>   3 <>    0   <> Tipo Registro (10-alta, 110-Anulación, ...)
ESTAREGI     <> Carácter <>  25 <>    0   <> Respuesta de Veri*factu (Correcto, AceptadoConErrores, Incorrecto,...)
SUBSANAC     <> Carácter <>   1 <>    0   <> Es Subsanación (Si, No)
REBUPREV     <> Carácter <>   1 <>    0   <> Es Rechazo previo (Si, No)
NOREGPRE     <> Carácter <>   1 <>    0   <> NO Tiene Reg. previo (Si, No)
SIMPLIFI     <> Carácter <>   1 <>    0   <> Simplificada (S-N)
SINDESTI     <> Carácter <>   1 <>    0   <> Sin destinatario (S-N)
VFCADHUE     <> Carácter <> 300 <>    0   <> Cadena cálculo Huella (para saber con que datos se ha calculado la huella)
VFHUELLA     <> Carácter <>  75 <>    0   <> Huella-Verifactu
AVFCODFA     <> Carácter <>  20 <>    0   <> Fact.Anterior.Código Fact.Completo
ADATAFAC     <> Fecha    <>   8 <>    0   <> Fact.Anterior.Fecha Factura
VFHUEANT     <> Carácter <>  75 <>    0   <> Reg.Fact.Anterior Huella
VF_ESTAT     <> Numérico <>   3 <>    0   <> Estado Verifactu (5-En revisión, 10-Iniciado, 15-XML generado, 20-Acabado, 30-Acabado con error,...)
INTENT__     <> Numérico <>   3 <>    0   <> Núm.Intento envío (VeFa32 puede hacer reenvíos automáticos)
IDFACTUR     <> Carácter <>  25 <>    0   <> Identificación única factura (del SIF)
ORIGEN__     <> Numérico <>   2 <>    0   <> Origen del registro. (manual, VeFA32, importado Hacienda, ...)
DATVERHI     <> Fecha    <>   8 <>    0   <> Fecha Verificación Hacienda (fecha de la consulta a Hacienda)


Para los errores recibidos de Veri*factu.
=========================================
Nombre base:     VFERRO
Descripción:     VF-Errores Reg.Verifactu

Nombre campo <> Tipo     <> Lon <> Decim. <> Descripción
============ <> ======== <> === <> ====== <> ==========
*CODIVEFA*     <> Carácter <>  12 <>    0   <> Código envío VeFa32
*CODIVFRE*     <> Carácter <>  12 <>    0   <> Código Registro VeFa32
VFCODFAC     <> Carácter <>  20 <>    0   <> Código Factura SIF
CODIERRO     <> Carácter <>  12 <>    0   <> Código Error
DESCERRO     <> Carácter <> 250 <>    0   <> Descr.Error

Los campos entre asteriscos permiten vincular las tablas entre si.

El resto de información que no esté en estas tablas estará a piñon o calculada en el XML (por ejemplo IDVERSION o tipo factura), o estará en las de facturas (por ejemplo si es rectificativa, los tipos IVA/IRPF, bases de cálculo, cuotas IVA/IRPF, etc).

Se debe tener en cuenta que si se modifica una factura ya enviada a Veri*factu, se debe generar un registro y enviarlo a Veri*factu.

Code: Select all | Expand

// Las marcadas con XX probablemente son prescindibles porque son datos generales de Verifactu o del SIF 
aStruct := {;
   ;
   ; // ** ENVIO ALTA o ANULACION ** //
   ;
   ; // Comunes
   No lo guardo {"CMIDVers", "C", 3,   0},;  // RegistroAltaBase/RegistroAnulacion IDVersion
   No lo guardo {"CMSignat", "C", 250, 0},;  // RegistroAltaBase/RegistroAnulacion Signature
   {"CMRefExt", "C", 60,  0},;  // RegistroAltaBase/RegistroAnulacion RefExterna
   {"CMRecPre", "C", 1,   0},;  // RegistroAltaBase/RegistroAnulacion RechazoPrevio
   Lo cojo de la factura {"CMFHoReg", "C", 20,  0},;  // RegistroAltaBase/RegistroAnulacion FechaHoraHusoGenRegistro
   No lo guardo {"CMTipHue", "C", 2,   0},;  // RegistroAltaBase/RegistroAnulacion TipoHuella
   ;
   ; // RegistroAltaBase
   Está en el sistema {"RANomRaz", "C", 120, 0},;  // NombreRazonEmisor
   ¿? {"RAOpeAlt", "C", 10,  0},;  // cOperacionAlta
   {"RASubSan", "C", 1,   0},;  // Subsanacion
   Lo calculo {"RATipFac", "C", 2,   0},;  // TipoFactura
   Está en factura {"RATipRec", "C", 1,   0},;  // TipoRectificativa
   ¿? {"RAFecOpe", "D", 8,   0},;  // FechaOperacion
   La pongo a piñon {"RADesOpe", "C", 250, 0},;  // DescripcionOperacion
   {"RAFSimpl", "C", 1,   0},;  // FacturaSimplificadaArt7273
   {"RAFSinId", "C", 1,   0},;  // FacturaSinIdentifDestinatarioArt61d
   Lo pongo a piñon {"RAMacroD", "C", 1,   0},;  // Macrodato
   No lo contemplo {"RAEmiTer", "C", 1,   0},;  // EmitidaPorTerceroODestinatario
   Lo pongo a piñon{"RACupon", "C", 250,  0},;  // Cupon
   {"RACuoTot", "N", 12,  2},;  // CuotaTotal
   {"RAImpTot", "N", 12,  2},;  // ImporteTotal
   No lo contemplo {"RANumAcu", "C", 15,  0},;  // XX NumRegistroAcuerdoFacturacion
   No lo contemplo{"RAIDSist", "C", 16,  0},;  // XX IdAcuerdoSistemaInformatico
   ;
   ; // RegistroAnulacion
   ¿? {"RNOpeAnu", "C", 10,  0},;  // cOperacionAnulacion
   {"RNSinReg", "C", 1,   0},;  // SinRegistroPrevio
   {"RNGenPor", "C", 1,   0},;  // GeneradoPor
   ;
   ; // IDFacturaExpedida
   Está en el sistema {"IFIDEmis", "C", MAX_NIF, 0},;  // IDEmisorFactura
   {"IFNumSer", "C", 60,  0},;  // NumSerieFactura
   {"IFFecExp", "D", 8,   0},;  // FechaExpedicionFactura
   ;
   ; // RegistroAnterior
   Está en el sistema {"RGIDEmis", "C", 9,   0},;  // IDEmisorFactura
   {"RGNumSer", "C", 60,  0},;  // NumSerieFactura
   {"RGFecExp", "D", 8,   0},;  // FechaExpedicionFactura
   {"RGHuelll", "C", 64,  0},;  // Huella
   ;
   ; // DesgloseRectificacion
   Hoy por hoy sólo permito rectificativas por diferencia
   No permito rectificativas por substitución
   No lo contemplo {"DRBasRec", "N", 12,  2},;  // BaseRectificada
   No lo contemplo {"DRCuoRec", "N", 12,  2},;  // CuotaRectificada
   No lo contemplo {"DRCuRRec", "N", 12,  2},;  // CuotaRecargoRectificado
   ;
   ; // DetalleDesglose
   Lo tengo en facturas
   {"DDTipImp1", "C", 10, 0},;  // Impuesto (1)
   {"DDTipImp2", "C", 10, 0},;  // Impuesto (2)
   {"DDTipImp3", "C", 10, 0},;  // Impuesto (3)
   {"DDTipImp4", "C", 10, 0},;  // Impuesto (4)
   {"DDTipImp5", "C", 10, 0},;  // Impuesto (5)
   {"DDTipImp6", "C", 10, 0},;  // Impuesto (6)
   {"DDClaReg1", "C", 2,  0},;  // ClaveRegimen (1)
   {"DDClaReg2", "C", 2,  0},;  // ClaveRegimen (2)
   {"DDClaReg3", "C", 2,  0},;  // ClaveRegimen (3)
   {"DDClaReg4", "C", 2,  0},;  // ClaveRegimen (4)
   {"DDClaReg5", "C", 2,  0},;  // ClaveRegimen (5)
   {"DDClaReg6", "C", 2,  0},;  // ClaveRegimen (6)
   {"DDCalOpe1", "C", 2,  0},;  // CalificacionOperacion (1)
   {"DDCalOpe2", "C", 2,  0},;  // CalificacionOperacion (2)
   {"DDCalOpe3", "C", 2,  0},;  // CalificacionOperacion (3)
   {"DDCalOpe4", "C", 2,  0},;  // CalificacionOperacion (4)
   {"DDCalOpe5", "C", 2,  0},;  // CalificacionOperacion (5)
   {"DDCalOpe6", "C", 2,  0},;  // CalificacionOperacion (6)
   {"DDExenta1", "C", 2,  0},;  // OperacionExenta (1)
   {"DDExenta2", "C", 2,  0},;  // OperacionExenta (2)
   {"DDExenta3", "C", 2,  0},;  // OperacionExenta (3)
   {"DDExenta4", "C", 2,  0},;  // OperacionExenta (4)
   {"DDExenta5", "C", 2,  0},;  // OperacionExenta (5)
   {"DDExenta6", "C", 2,  0},;  // OperacionExenta (6)
   {"DDTipImp1", "N", 5,  2},;  // TipoImpositivo (1)
   {"DDTipImp2", "N", 5,  2},;  // TipoImpositivo (2)
   {"DDTipImp3", "N", 5,  2},;  // TipoImpositivo (3)
   {"DDTipImp4", "N", 5,  2},;  // TipoImpositivo (4)
   {"DDTipImp5", "N", 5,  2},;  // TipoImpositivo (5)
   {"DDTipImp6", "N", 5,  2},;  // TipoImpositivo (6)
   {"DDBasImp1", "N", 12, 2},;  // BaseImponible (1)
   {"DDBasImp2", "N", 12, 2},;  // BaseImponible (2)
   {"DDBasImp3", "N", 12, 2},;  // BaseImponible (3)
   {"DDBasImp4", "N", 12, 2},;  // BaseImponible (4)
   {"DDBasImp5", "N", 12, 2},;  // BaseImponible (5)
   {"DDBasImp6", "N", 12, 2},;  // BaseImponible (6)
   {"DDBImACo1", "N", 12, 2},;  // BaseImponibleACoste (1)
   {"DDBImACo2", "N", 12, 2},;  // BaseImponibleACoste (2)
   {"DDBImACo3", "N", 12, 2},;  // BaseImponibleACoste (3)
   {"DDBImACo4", "N", 12, 2},;  // BaseImponibleACoste (4)
   {"DDBImACo5", "N", 12, 2},;  // BaseImponibleACoste (5)
   {"DDBImACo6", "N", 12, 2},;  // BaseImponibleACoste (6)
   {"DDCuoRep1", "N", 12, 2},;  // CuotaRepercutida (1)
   {"DDCuoRep2", "N", 12, 2},;  // CuotaRepercutida (2)
   {"DDCuoRep3", "N", 12, 2},;  // CuotaRepercutida (3)
   {"DDCuoRep4", "N", 12, 2},;  // CuotaRepercutida (4)
   {"DDCuoRep5", "N", 12, 2},;  // CuotaRepercutida (5)
   {"DDCuoRep6", "N", 12, 2},;  // CuotaRepercutida (6)
   {"DDTipRec1", "N", 5,  2},;  // TipoRecargoEquivalencia (1)
   {"DDTipRec2", "N", 5,  2},;  // TipoRecargoEquivalencia (2)
   {"DDTipRec3", "N", 5,  2},;  // TipoRecargoEquivalencia (3)
   {"DDTipRec4", "N", 5,  2},;  // TipoRecargoEquivalencia (4)
   {"DDTipRec5", "N", 5,  2},;  // TipoRecargoEquivalencia (5)
   {"DDTipRec6", "N", 5,  2},;  // TipoRecargoEquivalencia (6)
   {"DDCuoRec1", "N", 12, 2},;  // CuotaRecargoEquivalencia (1)
   {"DDCuoRec2", "N", 12, 2},;  // CuotaRecargoEquivalencia (2)
   {"DDCuoRec3", "N", 12, 2},;  // CuotaRecargoEquivalencia (3)
   {"DDCuoRec4", "N", 12, 2},;  // CuotaRecargoEquivalencia (4)
   {"DDCuoRec5", "N", 12, 2},;  // CuotaRecargoEquivalencia (5)
   {"DDCuoRec6", "N", 12, 2},;  // CuotaRecargoEquivalencia (6)
   ;
   ; // Encadenamiento
   Lo calculo al momento de generar el XML.
   {"ENPriReg", "C", 1,   0},;  // PrimerRegistro
   ;
   ;
   ; // ** RESPUESTA ** //
   ;
   Prefiero capturar la Referencia Externa que se corresponderá a un registro enviado.
    {"RSIDEmis", "C", MAX_NIF, 0},;  // IDEmisorFactura
   {"RSNumSer", "C", 10,  0},;      // NumSerieFactura
   {"RSFecExp", "D", 8,   0},;      // FechaExpedicionFactura
   {"RSTipOpe", "C", 10,  0},;      // TipoOperacion
   {"RSEstado", "C", 20,  0},;      // Estado

   No es correcto, puede haber más de un error por factura en la respuesta (en teoría).
   {"RSCodErr", "N", 4,   0},;      // CodigoError
   {"RSDesErr", "C", 40,  0} ;      // DescripcionError
}
Lo que para ti es una estructura de muchos campos, para mi es VFREGI + las tablas con datos de facturas.

Después cuando se genera el XML se crea un registro en VERFAC y se vincula a los registros VFREGI que contiene el XML.

Cuando Veri*factu responde se actualiza VERFAC, VFREGI y si es el caso VFERRO.]]>
paquitohm wrote: Fri Apr 11, 2025 6:34 pmDime por favor si vieras algo raro.
El caso es que yo intento tener en tablas lo necesario y poco más y parto de que Hacienda una vez se le envíe el registro y responda el OK, le dará igual que yo guarde o no información del REGISTRO enviado. Se puede obtener la información enviada consultando a Hacienda. Por tanto incluso me podria permitir eliminar la tabla de lo enviado y empezar de cero, sólo necesitaría el último registro enviado para el tema de datos del registro anterior. Tal como suena.

Ojo, sólo trabajo Veri*factu On line, es decir envío a Veri*factu al 'momento' (con un margen de segundos y/o minutos).

En algún Webinar se ha dicho sobre el tema y además respondido en mail de consultas a Veri*factu: una vez enviado el registro es Hacienda quién lo tiene en custodia y ya no me pedirá información al respecto de ese registro. Por tanto, la conservación de los datos es prescindible.

En su lugar, los datos que si conservaré (con copias y lo que haga falta, como cualquier SIF) ya están en las tablas de facturas, y los conservaré ni que sea para reimprimirlas o calcular informaciones/liquidaciones trimestrales/anuales.

Dicho esto.
En VeFa32 utilizo 3 tablas para gestionar el envío/respuesta a/de Veri*factu:

Code: Select all | Expand

Para los datos de los XML enviados.
===================================
Nombre base:     VERFAC
Descripción:     VF-XML Veri*Factu

Nombre campo <> Tipo     <> Lon <> Decim. <> Descripción
============ <> ======== <> === <> ====== <> ==========
*CODIVEFA*     <> Carácter <>  12 <>    0   <> Código VeFa32 Xml único
IDVERFAC     <> Carácter <>  25 <>    0   <> Identificación VeFa32 (referencia única; da nombre al XML)
VF_ESTAT     <> Numérico <>   3 <>    0   <> Estado Verifactu (5-En revisión, 10-Iniciado, 15-XML generado, 20-Acabado, 30-Acabado con error,...)
INCIDENC     <> Carácter <>   1 <>    0   <> Tiene Incidencia previa (Si, No)
ESTAENVI     <> Carácter <>  50 <>    0   <> Estado Envío (respuesta Veri*factu:Correcto, ParcialmenteCorrecto, Incorrecto)
TIPUENVI     <> Numérico <>   2 <>    0   <> Tipo Envío (10-Voluntario 20-Requerimiento)
TISTENVI     <> Carácter <>  30 <>    0   <> Time Stamp Envío
DATENVVF     <> Fecha    <>   8 <>    0   <> Fecha Envío
HORENVVF     <> Carácter <>   8 <>    0   <> Hora Envío
FITXENVI     <> Carácter <>  40 <>    0   <> Fichero Envío
DATRECVF     <> Fecha    <>   8 <>    0   <> Fecha recepción
HORRECVF     <> Carácter <>   8 <>    0   <> Hora recepción
FITXRESP     <> Carácter <>  50 <>    0   <> Fichero respuesta
CSVRESPO     <> Carácter <>  25 <>    0   <> CSV recibido respuesta
NUMEREGI     <> Numérico <>   5 <>    0   <> Registros tratados VFREGI


Para los registros con datos de las facturas.
=============================================
Nombre base:     VFREGI
Descripción:     VF-Reg. Verifactu

Nombre campo <> Tipo     <> Lon <> Decim. <> Descripción
============ <> ======== <> === <> ====== <> ==========
*CODIVFRE*     <> Carácter <>  12 <>    0   <> Código Regi.VeFa32 (código único)
IDVFREGI     <> Carácter <>  25 <>    0   <> Identif.Reg.VeFa32 (referencia única)

VFCODFAC     <> Carácter <>  20 <>    0   <> Código Fact.SIF (código factura enviado en XML)
NIF          <> Carácter <>  20 <>    0   <> N.I.F. destinatario factura
DATAFACT     <> Fecha    <>   8 <>    0   <> Fecha Factura
IMPOTOTA     <> Numérico <>  15 <>    6   <> Importe TOTAL factura

*CODIVEFA*     <> Carácter <>  12 <>    0   <> Código VeFa32    (código del registro DBF VERFAC)
IDPETICI     <> Carácter <>  40 <>    0   <> Id 'Petición' (se captura al consultar a Hacienda)
TIPUREGI     <> Numérico <>   3 <>    0   <> Tipo Registro (10-alta, 110-Anulación, ...)
ESTAREGI     <> Carácter <>  25 <>    0   <> Respuesta de Veri*factu (Correcto, AceptadoConErrores, Incorrecto,...)
SUBSANAC     <> Carácter <>   1 <>    0   <> Es Subsanación (Si, No)
REBUPREV     <> Carácter <>   1 <>    0   <> Es Rechazo previo (Si, No)
NOREGPRE     <> Carácter <>   1 <>    0   <> NO Tiene Reg. previo (Si, No)
SIMPLIFI     <> Carácter <>   1 <>    0   <> Simplificada (S-N)
SINDESTI     <> Carácter <>   1 <>    0   <> Sin destinatario (S-N)
VFCADHUE     <> Carácter <> 300 <>    0   <> Cadena cálculo Huella (para saber con que datos se ha calculado la huella)
VFHUELLA     <> Carácter <>  75 <>    0   <> Huella-Verifactu
AVFCODFA     <> Carácter <>  20 <>    0   <> Fact.Anterior.Código Fact.Completo
ADATAFAC     <> Fecha    <>   8 <>    0   <> Fact.Anterior.Fecha Factura
VFHUEANT     <> Carácter <>  75 <>    0   <> Reg.Fact.Anterior Huella
VF_ESTAT     <> Numérico <>   3 <>    0   <> Estado Verifactu (5-En revisión, 10-Iniciado, 15-XML generado, 20-Acabado, 30-Acabado con error,...)
INTENT__     <> Numérico <>   3 <>    0   <> Núm.Intento envío (VeFa32 puede hacer reenvíos automáticos)
IDFACTUR     <> Carácter <>  25 <>    0   <> Identificación única factura (del SIF)
ORIGEN__     <> Numérico <>   2 <>    0   <> Origen del registro. (manual, VeFA32, importado Hacienda, ...)
DATVERHI     <> Fecha    <>   8 <>    0   <> Fecha Verificación Hacienda (fecha de la consulta a Hacienda)


Para los errores recibidos de Veri*factu.
=========================================
Nombre base:     VFERRO
Descripción:     VF-Errores Reg.Verifactu

Nombre campo <> Tipo     <> Lon <> Decim. <> Descripción
============ <> ======== <> === <> ====== <> ==========
*CODIVEFA*     <> Carácter <>  12 <>    0   <> Código envío VeFa32
*CODIVFRE*     <> Carácter <>  12 <>    0   <> Código Registro VeFa32
VFCODFAC     <> Carácter <>  20 <>    0   <> Código Factura SIF
CODIERRO     <> Carácter <>  12 <>    0   <> Código Error
DESCERRO     <> Carácter <> 250 <>    0   <> Descr.Error

Los campos entre asteriscos permiten vincular las tablas entre si.

El resto de información que no esté en estas tablas estará a piñon o calculada en el XML (por ejemplo IDVERSION o tipo factura), o estará en las de facturas (por ejemplo si es rectificativa, los tipos IVA/IRPF, bases de cálculo, cuotas IVA/IRPF, etc).

Se debe tener en cuenta que si se modifica una factura ya enviada a Veri*factu, se debe generar un registro y enviarlo a Veri*factu.

Code: Select all | Expand

// Las marcadas con XX probablemente son prescindibles porque son datos generales de Verifactu o del SIF 
aStruct := {;
   ;
   ; // ** ENVIO ALTA o ANULACION ** //
   ;
   ; // Comunes
   No lo guardo {"CMIDVers", "C", 3,   0},;  // RegistroAltaBase/RegistroAnulacion IDVersion
   No lo guardo {"CMSignat", "C", 250, 0},;  // RegistroAltaBase/RegistroAnulacion Signature
   {"CMRefExt", "C", 60,  0},;  // RegistroAltaBase/RegistroAnulacion RefExterna
   {"CMRecPre", "C", 1,   0},;  // RegistroAltaBase/RegistroAnulacion RechazoPrevio
   Lo cojo de la factura {"CMFHoReg", "C", 20,  0},;  // RegistroAltaBase/RegistroAnulacion FechaHoraHusoGenRegistro
   No lo guardo {"CMTipHue", "C", 2,   0},;  // RegistroAltaBase/RegistroAnulacion TipoHuella
   ;
   ; // RegistroAltaBase
   Está en el sistema {"RANomRaz", "C", 120, 0},;  // NombreRazonEmisor
   ¿? {"RAOpeAlt", "C", 10,  0},;  // cOperacionAlta
   {"RASubSan", "C", 1,   0},;  // Subsanacion
   Lo calculo {"RATipFac", "C", 2,   0},;  // TipoFactura
   Está en factura {"RATipRec", "C", 1,   0},;  // TipoRectificativa
   ¿? {"RAFecOpe", "D", 8,   0},;  // FechaOperacion
   La pongo a piñon {"RADesOpe", "C", 250, 0},;  // DescripcionOperacion
   {"RAFSimpl", "C", 1,   0},;  // FacturaSimplificadaArt7273
   {"RAFSinId", "C", 1,   0},;  // FacturaSinIdentifDestinatarioArt61d
   Lo pongo a piñon {"RAMacroD", "C", 1,   0},;  // Macrodato
   No lo contemplo {"RAEmiTer", "C", 1,   0},;  // EmitidaPorTerceroODestinatario
   Lo pongo a piñon{"RACupon", "C", 250,  0},;  // Cupon
   {"RACuoTot", "N", 12,  2},;  // CuotaTotal
   {"RAImpTot", "N", 12,  2},;  // ImporteTotal
   No lo contemplo {"RANumAcu", "C", 15,  0},;  // XX NumRegistroAcuerdoFacturacion
   No lo contemplo{"RAIDSist", "C", 16,  0},;  // XX IdAcuerdoSistemaInformatico
   ;
   ; // RegistroAnulacion
   ¿? {"RNOpeAnu", "C", 10,  0},;  // cOperacionAnulacion
   {"RNSinReg", "C", 1,   0},;  // SinRegistroPrevio
   {"RNGenPor", "C", 1,   0},;  // GeneradoPor
   ;
   ; // IDFacturaExpedida
   Está en el sistema {"IFIDEmis", "C", MAX_NIF, 0},;  // IDEmisorFactura
   {"IFNumSer", "C", 60,  0},;  // NumSerieFactura
   {"IFFecExp", "D", 8,   0},;  // FechaExpedicionFactura
   ;
   ; // RegistroAnterior
   Está en el sistema {"RGIDEmis", "C", 9,   0},;  // IDEmisorFactura
   {"RGNumSer", "C", 60,  0},;  // NumSerieFactura
   {"RGFecExp", "D", 8,   0},;  // FechaExpedicionFactura
   {"RGHuelll", "C", 64,  0},;  // Huella
   ;
   ; // DesgloseRectificacion
   Hoy por hoy sólo permito rectificativas por diferencia
   No permito rectificativas por substitución
   No lo contemplo {"DRBasRec", "N", 12,  2},;  // BaseRectificada
   No lo contemplo {"DRCuoRec", "N", 12,  2},;  // CuotaRectificada
   No lo contemplo {"DRCuRRec", "N", 12,  2},;  // CuotaRecargoRectificado
   ;
   ; // DetalleDesglose
   Lo tengo en facturas
   {"DDTipImp1", "C", 10, 0},;  // Impuesto (1)
   {"DDTipImp2", "C", 10, 0},;  // Impuesto (2)
   {"DDTipImp3", "C", 10, 0},;  // Impuesto (3)
   {"DDTipImp4", "C", 10, 0},;  // Impuesto (4)
   {"DDTipImp5", "C", 10, 0},;  // Impuesto (5)
   {"DDTipImp6", "C", 10, 0},;  // Impuesto (6)
   {"DDClaReg1", "C", 2,  0},;  // ClaveRegimen (1)
   {"DDClaReg2", "C", 2,  0},;  // ClaveRegimen (2)
   {"DDClaReg3", "C", 2,  0},;  // ClaveRegimen (3)
   {"DDClaReg4", "C", 2,  0},;  // ClaveRegimen (4)
   {"DDClaReg5", "C", 2,  0},;  // ClaveRegimen (5)
   {"DDClaReg6", "C", 2,  0},;  // ClaveRegimen (6)
   {"DDCalOpe1", "C", 2,  0},;  // CalificacionOperacion (1)
   {"DDCalOpe2", "C", 2,  0},;  // CalificacionOperacion (2)
   {"DDCalOpe3", "C", 2,  0},;  // CalificacionOperacion (3)
   {"DDCalOpe4", "C", 2,  0},;  // CalificacionOperacion (4)
   {"DDCalOpe5", "C", 2,  0},;  // CalificacionOperacion (5)
   {"DDCalOpe6", "C", 2,  0},;  // CalificacionOperacion (6)
   {"DDExenta1", "C", 2,  0},;  // OperacionExenta (1)
   {"DDExenta2", "C", 2,  0},;  // OperacionExenta (2)
   {"DDExenta3", "C", 2,  0},;  // OperacionExenta (3)
   {"DDExenta4", "C", 2,  0},;  // OperacionExenta (4)
   {"DDExenta5", "C", 2,  0},;  // OperacionExenta (5)
   {"DDExenta6", "C", 2,  0},;  // OperacionExenta (6)
   {"DDTipImp1", "N", 5,  2},;  // TipoImpositivo (1)
   {"DDTipImp2", "N", 5,  2},;  // TipoImpositivo (2)
   {"DDTipImp3", "N", 5,  2},;  // TipoImpositivo (3)
   {"DDTipImp4", "N", 5,  2},;  // TipoImpositivo (4)
   {"DDTipImp5", "N", 5,  2},;  // TipoImpositivo (5)
   {"DDTipImp6", "N", 5,  2},;  // TipoImpositivo (6)
   {"DDBasImp1", "N", 12, 2},;  // BaseImponible (1)
   {"DDBasImp2", "N", 12, 2},;  // BaseImponible (2)
   {"DDBasImp3", "N", 12, 2},;  // BaseImponible (3)
   {"DDBasImp4", "N", 12, 2},;  // BaseImponible (4)
   {"DDBasImp5", "N", 12, 2},;  // BaseImponible (5)
   {"DDBasImp6", "N", 12, 2},;  // BaseImponible (6)
   {"DDBImACo1", "N", 12, 2},;  // BaseImponibleACoste (1)
   {"DDBImACo2", "N", 12, 2},;  // BaseImponibleACoste (2)
   {"DDBImACo3", "N", 12, 2},;  // BaseImponibleACoste (3)
   {"DDBImACo4", "N", 12, 2},;  // BaseImponibleACoste (4)
   {"DDBImACo5", "N", 12, 2},;  // BaseImponibleACoste (5)
   {"DDBImACo6", "N", 12, 2},;  // BaseImponibleACoste (6)
   {"DDCuoRep1", "N", 12, 2},;  // CuotaRepercutida (1)
   {"DDCuoRep2", "N", 12, 2},;  // CuotaRepercutida (2)
   {"DDCuoRep3", "N", 12, 2},;  // CuotaRepercutida (3)
   {"DDCuoRep4", "N", 12, 2},;  // CuotaRepercutida (4)
   {"DDCuoRep5", "N", 12, 2},;  // CuotaRepercutida (5)
   {"DDCuoRep6", "N", 12, 2},;  // CuotaRepercutida (6)
   {"DDTipRec1", "N", 5,  2},;  // TipoRecargoEquivalencia (1)
   {"DDTipRec2", "N", 5,  2},;  // TipoRecargoEquivalencia (2)
   {"DDTipRec3", "N", 5,  2},;  // TipoRecargoEquivalencia (3)
   {"DDTipRec4", "N", 5,  2},;  // TipoRecargoEquivalencia (4)
   {"DDTipRec5", "N", 5,  2},;  // TipoRecargoEquivalencia (5)
   {"DDTipRec6", "N", 5,  2},;  // TipoRecargoEquivalencia (6)
   {"DDCuoRec1", "N", 12, 2},;  // CuotaRecargoEquivalencia (1)
   {"DDCuoRec2", "N", 12, 2},;  // CuotaRecargoEquivalencia (2)
   {"DDCuoRec3", "N", 12, 2},;  // CuotaRecargoEquivalencia (3)
   {"DDCuoRec4", "N", 12, 2},;  // CuotaRecargoEquivalencia (4)
   {"DDCuoRec5", "N", 12, 2},;  // CuotaRecargoEquivalencia (5)
   {"DDCuoRec6", "N", 12, 2},;  // CuotaRecargoEquivalencia (6)
   ;
   ; // Encadenamiento
   Lo calculo al momento de generar el XML.
   {"ENPriReg", "C", 1,   0},;  // PrimerRegistro
   ;
   ;
   ; // ** RESPUESTA ** //
   ;
   Prefiero capturar la Referencia Externa que se corresponderá a un registro enviado.
    {"RSIDEmis", "C", MAX_NIF, 0},;  // IDEmisorFactura
   {"RSNumSer", "C", 10,  0},;      // NumSerieFactura
   {"RSFecExp", "D", 8,   0},;      // FechaExpedicionFactura
   {"RSTipOpe", "C", 10,  0},;      // TipoOperacion
   {"RSEstado", "C", 20,  0},;      // Estado

   No es correcto, puede haber más de un error por factura en la respuesta (en teoría).
   {"RSCodErr", "N", 4,   0},;      // CodigoError
   {"RSDesErr", "C", 40,  0} ;      // DescripcionError
}
Lo que para ti es una estructura de muchos campos, para mi es VFREGI + las tablas con datos de facturas.

Después cuando se genera el XML se crea un registro en VERFAC y se vincula a los registros VFREGI que contiene el XML.

Cuando Veri*factu responde se actualiza VERFAC, VFREGI y si es el caso VFERRO.]]>
<![CDATA[Off Topic / Otros temas :: Re: VeFa32 - Verifactu :: Reply by FiveWiDi]]> 2025-04-19T07:37:08-06:00 2025-04-19T07:37:08-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=19&t=45519&p=279045#p279045
paquitohm wrote: Thu Apr 10, 2025 4:35 pmEstas usando las anulaciones en tu programa.
Si, las contemplo. Genero el registro de anulación i se enviará con el resto de registros.
Pero lo genero desde el propio VeFa32. Entiendo que se trata de un error y por tanto se gestiona desde VeFa32.

Otro caso sería la 'anulación' de una factura.
Eso yo prefiero resolverlo con una rectificativa con signo contrario.
De esta manera quién debe manejar y obtener información de las facturas, deberá tratarlas TODAS por igual; se evita la duda de 'qué hacer con esta factura que se anuló', pues nada se suma con las otras y el resultado será '0,00'.

Me plantearé que desde el SIF se de la instrución de anular un registro.

Seguimos,]]>
paquitohm wrote: Thu Apr 10, 2025 4:35 pmEstas usando las anulaciones en tu programa.
Si, las contemplo. Genero el registro de anulación i se enviará con el resto de registros.
Pero lo genero desde el propio VeFa32. Entiendo que se trata de un error y por tanto se gestiona desde VeFa32.

Otro caso sería la 'anulación' de una factura.
Eso yo prefiero resolverlo con una rectificativa con signo contrario.
De esta manera quién debe manejar y obtener información de las facturas, deberá tratarlas TODAS por igual; se evita la duda de 'qué hacer con esta factura que se anuló', pues nada se suma con las otras y el resultado será '0,00'.

Me plantearé que desde el SIF se de la instrución de anular un registro.

Seguimos,]]>
<![CDATA[Off Topic / Otros temas :: Re: VeFa32 - Verifactu :: Reply by paquitohm]]> 2025-04-20T09:36:25-06:00 2025-04-20T09:36:25-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=19&t=45519&p=279066#p279066
Perdona por el retraso.

De alguna manera la agencia quiere que creemos un registro de la factura. Asi pues entiendo que pudiera ser conveniente que toda la informacion, incluso aunque pareciera redundante, estuviera unificada en un mismo registro en una misma tabla.

Por otra parte. Te importa si sigo conversando contigo de estos temas por privado-email ? Tengo algunas cosas que comentarte y queria que fuera por privado. Si no lo ves conveniente, sin problema. En mi caso por este medio no voy a seguir mucho más

Salu2]]>

Perdona por el retraso.

De alguna manera la agencia quiere que creemos un registro de la factura. Asi pues entiendo que pudiera ser conveniente que toda la informacion, incluso aunque pareciera redundante, estuviera unificada en un mismo registro en una misma tabla.

Por otra parte. Te importa si sigo conversando contigo de estos temas por privado-email ? Tengo algunas cosas que comentarte y queria que fuera por privado. Si no lo ves conveniente, sin problema. En mi caso por este medio no voy a seguir mucho más

Salu2]]>
<![CDATA[Off Topic / Otros temas :: Re: VeFa32 - Verifactu :: Reply by FiveWiDi]]> 2025-04-20T11:38:46-06:00 2025-04-20T11:38:46-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=19&t=45519&p=279071#p279071
paquitohm wrote: Sun Apr 20, 2025 3:36 pm Felices Pascuas Carlos.
Igualmente
paquitohm wrote: Sun Apr 20, 2025 3:36 pm De alguna manera la agencia quiere que creemos un registro de la factura.
Si y no.
Yo entiendo que lo que busca Hacienda es saber que se están haciendo las cosas de manera correcta y demostrable (huella digital con vinculación al registro anterior), y si fuera necesario poder reproducir (trazabilidad) que se ha hecho con las facturas.

Una vez hacienda ha recibido nuestros registros (modo Veri*factu), Hacienda ya no nos pedirá nada, la ley no nos obliga a guardar estos registros (a los del modo NO Veri*factu sí que les obliga), y tal como me han respondido de Hacienda son ellos una vez han recibido los registros quién los tiene en custodia.
De ahí mi atrevimiento a decir que puedo borrar las tablas de los registros (mientras conserve información del último enviado, claro).
paquitohm wrote: Sun Apr 20, 2025 3:36 pm Asi pues entiendo que pudiera ser conveniente que toda la informacion, incluso aunque pareciera redundante, estuviera unificada en un mismo registro en una misma tabla.
Si, por que no? Pero es una opción no una obligación.
Si quiero los registros enviados, la solución por la que opto es consultar a Hacienda por los registros enviados. Lo que yo le envíe me lo devuelve en la consulta, me lo pone fácil en esta aspecto.
Y ojo! Es imprescindible poder consultar/importar (al menos) el último registro enviado a Veri*factu. Forma parte del plan de contingencia ante una catástrofe.
paquitohm wrote: Sun Apr 20, 2025 3:36 pm Por otra parte. Te importa si sigo conversando contigo de estos temas por privado-email ? Tengo algunas cosas que comentarte y queria que fuera por privado. Si no lo ves conveniente, sin problema. En mi caso por este medio no voy a seguir mucho más
En absoluto, creo que es lo correcto.
siperono@gelbla.com

Seguimos.]]>
paquitohm wrote: Sun Apr 20, 2025 3:36 pm Felices Pascuas Carlos.
Igualmente
paquitohm wrote: Sun Apr 20, 2025 3:36 pm De alguna manera la agencia quiere que creemos un registro de la factura.
Si y no.
Yo entiendo que lo que busca Hacienda es saber que se están haciendo las cosas de manera correcta y demostrable (huella digital con vinculación al registro anterior), y si fuera necesario poder reproducir (trazabilidad) que se ha hecho con las facturas.

Una vez hacienda ha recibido nuestros registros (modo Veri*factu), Hacienda ya no nos pedirá nada, la ley no nos obliga a guardar estos registros (a los del modo NO Veri*factu sí que les obliga), y tal como me han respondido de Hacienda son ellos una vez han recibido los registros quién los tiene en custodia.
De ahí mi atrevimiento a decir que puedo borrar las tablas de los registros (mientras conserve información del último enviado, claro).
paquitohm wrote: Sun Apr 20, 2025 3:36 pm Asi pues entiendo que pudiera ser conveniente que toda la informacion, incluso aunque pareciera redundante, estuviera unificada en un mismo registro en una misma tabla.
Si, por que no? Pero es una opción no una obligación.
Si quiero los registros enviados, la solución por la que opto es consultar a Hacienda por los registros enviados. Lo que yo le envíe me lo devuelve en la consulta, me lo pone fácil en esta aspecto.
Y ojo! Es imprescindible poder consultar/importar (al menos) el último registro enviado a Veri*factu. Forma parte del plan de contingencia ante una catástrofe.
paquitohm wrote: Sun Apr 20, 2025 3:36 pm Por otra parte. Te importa si sigo conversando contigo de estos temas por privado-email ? Tengo algunas cosas que comentarte y queria que fuera por privado. Si no lo ves conveniente, sin problema. En mi caso por este medio no voy a seguir mucho más
En absoluto, creo que es lo correcto.
siperono@gelbla.com

Seguimos.]]>
<![CDATA[latest AI news :: vscode MCP support is already available! :: Author Antonio Linares]]> 2025-04-16T03:30:25-06:00 2025-04-16T03:30:25-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45624&p=278998#p278998 <![CDATA[latest AI news :: Re: vscode MCP support is already available! :: Reply by Antonio Linares]]> 2025-04-16T13:35:21-06:00 2025-04-16T13:35:21-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45624&p=279017#p279017
go64.bat

Code: Select all | Expand

@setlocal
call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
c:\harbour\bin\win\msvc64\hbmk2 hbmcp.hbp -comp=msvc64
@endlocal
hbmcp.hbp

Code: Select all | Expand

hbmcp.prg

-lgdiplus
-lole32
-lOleDlg
-lversion
-lucrt
-luxtheme

xhb.hbc
hbct.hbc
hbwin.hbc
hbmzip.hbc
hbziparc.hbc
hbfoxpro.hbc

-ldflag=/NODEFAULTLIB:msvcrt 
-ldflag+=/NODEFAULTLIB:libucrt
hbmcp.prg

Code: Select all | Expand

PROCEDURE Main()

    LOCAL cInput, cResponse

    // Bucle para leer continuamente desde stdin
    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
            EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        // Procesar el mensaje
        hb_memoWrit( "c:\temp\stdin.txt", cInput )
        cResponse := ProcessMessage( cInput )
        IF !Empty( cResponse )
            StdOut( cResponse )
        ENDIF
    END

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hJson := hb_jsonDecode( cInput )
    IF HB_ISHASH( hJson ) .AND. "method" $ hJson .AND. "id" $ hJson
        cMethod := hJson[ "method" ]
        cId := ExtractId( cInput )

        // Manejar el método "initialize"
        IF cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2025-03-26",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + ;
                '}' + hb_eol()

        // Manejar el método "tools/list"
        ELSEIF cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        // Manejar el método "tools/call"
        ELSEIF cMethod == "tools/call"
            hParams := hJson[ "params" ]
            IF HB_ISHASH( hParams ) .AND. "name" $ hParams .AND. "arguments" $ hParams
                cToolName := hParams[ "name" ]
                IF cToolName == "get_time" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + hb_DateTime() + '"' + ;
                        '}' + hb_eol()
                ELSEIF cToolName == "hb_version" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener la versión de Harbour
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + StrTran( Version(), '"', '\"' ) + '"' + ;
                        '}' + hb_eol()
                ELSEIF cToolName == "hb_compiler" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener el nombre del compilador
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + StrTran( hb_Compiler(), '"', '\"' ) + '"' + ;
                        '}' + hb_eol()
                ELSE
                    // Error: herramienta no encontrada o argumentos inválidos
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"error":{' + ;
                        '"code":-32602,' + ;
                        '"message":"Invalid params"' + ;
                        '}' + ;
                        '}' + hb_eol()
                ENDIF
            ELSE
                // Error: parámetros inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

        // Manejar métodos no soportados
        ELSE
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"error":{' + ;
                '"code":-32601,' + ;
                '"message":"Method not found"' + ;
                '}' + ;
                '}' + hb_eol()
        ENDIF
    ELSE
        // JSON inválido o sin método/ID
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":null,' + ;
            '"error":{' + ;
            '"code":-32700,' + ;
            '"message":"Parse error"' + ;
            '}' + ;
            '}' + hb_eol()
    ENDIF

RETURN cResponse

// Función para extraer el ID parseando el JSON con hb_jsonDecode()
STATIC FUNCTION ExtractId( cInput )
    LOCAL hJson, cId := '"1"'  // Valor por defecto si falla el parseo
    LOCAL xId

    // Decodificar el JSON en un hash
    hJson := hb_jsonDecode( cInput )
    IF HB_ISHASH( hJson ) .AND. "id" $ hJson
        xId := hJson[ "id" ]
        IF HB_ISSTRING( xId )
            // Si el id es string, incluir comillas
            cId := '"' + xId + '"'
        ELSEIF HB_ISNUMERIC( xId )
            // Si el id es numérico, convertir a string sin comillas
            cId := hb_ntos( xId )
        ELSEIF xId == NIL
            // Si el id es null, retornar "null"
            cId := "null"
        ENDIF
    ENDIF

RETURN cId

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>

go64.bat

Code: Select all | Expand

@setlocal
call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
c:\harbour\bin\win\msvc64\hbmk2 hbmcp.hbp -comp=msvc64
@endlocal
hbmcp.hbp

Code: Select all | Expand

hbmcp.prg

-lgdiplus
-lole32
-lOleDlg
-lversion
-lucrt
-luxtheme

xhb.hbc
hbct.hbc
hbwin.hbc
hbmzip.hbc
hbziparc.hbc
hbfoxpro.hbc

-ldflag=/NODEFAULTLIB:msvcrt 
-ldflag+=/NODEFAULTLIB:libucrt
hbmcp.prg

Code: Select all | Expand

PROCEDURE Main()

    LOCAL cInput, cResponse

    // Bucle para leer continuamente desde stdin
    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
            EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        // Procesar el mensaje
        hb_memoWrit( "c:\temp\stdin.txt", cInput )
        cResponse := ProcessMessage( cInput )
        IF !Empty( cResponse )
            StdOut( cResponse )
        ENDIF
    END

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hJson := hb_jsonDecode( cInput )
    IF HB_ISHASH( hJson ) .AND. "method" $ hJson .AND. "id" $ hJson
        cMethod := hJson[ "method" ]
        cId := ExtractId( cInput )

        // Manejar el método "initialize"
        IF cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2025-03-26",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + ;
                '}' + hb_eol()

        // Manejar el método "tools/list"
        ELSEIF cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        // Manejar el método "tools/call"
        ELSEIF cMethod == "tools/call"
            hParams := hJson[ "params" ]
            IF HB_ISHASH( hParams ) .AND. "name" $ hParams .AND. "arguments" $ hParams
                cToolName := hParams[ "name" ]
                IF cToolName == "get_time" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + hb_DateTime() + '"' + ;
                        '}' + hb_eol()
                ELSEIF cToolName == "hb_version" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener la versión de Harbour
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + StrTran( Version(), '"', '\"' ) + '"' + ;
                        '}' + hb_eol()
                ELSEIF cToolName == "hb_compiler" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener el nombre del compilador
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + StrTran( hb_Compiler(), '"', '\"' ) + '"' + ;
                        '}' + hb_eol()
                ELSE
                    // Error: herramienta no encontrada o argumentos inválidos
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"error":{' + ;
                        '"code":-32602,' + ;
                        '"message":"Invalid params"' + ;
                        '}' + ;
                        '}' + hb_eol()
                ENDIF
            ELSE
                // Error: parámetros inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

        // Manejar métodos no soportados
        ELSE
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"error":{' + ;
                '"code":-32601,' + ;
                '"message":"Method not found"' + ;
                '}' + ;
                '}' + hb_eol()
        ENDIF
    ELSE
        // JSON inválido o sin método/ID
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":null,' + ;
            '"error":{' + ;
            '"code":-32700,' + ;
            '"message":"Parse error"' + ;
            '}' + ;
            '}' + hb_eol()
    ENDIF

RETURN cResponse

// Función para extraer el ID parseando el JSON con hb_jsonDecode()
STATIC FUNCTION ExtractId( cInput )
    LOCAL hJson, cId := '"1"'  // Valor por defecto si falla el parseo
    LOCAL xId

    // Decodificar el JSON en un hash
    hJson := hb_jsonDecode( cInput )
    IF HB_ISHASH( hJson ) .AND. "id" $ hJson
        xId := hJson[ "id" ]
        IF HB_ISSTRING( xId )
            // Si el id es string, incluir comillas
            cId := '"' + xId + '"'
        ELSEIF HB_ISNUMERIC( xId )
            // Si el id es numérico, convertir a string sin comillas
            cId := hb_ntos( xId )
        ELSEIF xId == NIL
            // Si el id es null, retornar "null"
            cId := "null"
        ENDIF
    ENDIF

RETURN cId

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>
<![CDATA[latest AI news :: Re: vscode MCP support is already available! :: Reply by Antonio Linares]]> 2025-04-16T13:36:44-06:00 2025-04-16T13:36:44-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45624&p=279018#p279018

Code: Select all | Expand

    "mcp": {
        "servers": {
            "Harbour": {
                "type": "stdio",
                "command": "c:\\temp\\hbmcp.exe",
                "args": []
            }
        }
    }
Image]]>

Code: Select all | Expand

    "mcp": {
        "servers": {
            "Harbour": {
                "type": "stdio",
                "command": "c:\\temp\\hbmcp.exe",
                "args": []
            }
        }
    }
Image]]>
<![CDATA[latest AI news :: Re: vscode MCP support is already available! :: Reply by Antonio Linares]]> 2025-04-17T00:40:46-06:00 2025-04-17T00:40:46-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45624&p=279021#p279021
hbmcp.prg

Code: Select all | Expand

#define LogFile( cKey, cValue ) hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + cKey + cValue )

PROCEDURE Main()

    LOCAL cInput, cResponse

    // Bucle para leer continuamente desde stdin
    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
            EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        // Procesar el mensaje
        hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + "in: " + cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + "out: " + cResponse )
            StdOut( cResponse )
        ENDIF
    END

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId := "1", cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    LogFile( "method: ", cMethod )
    // if hb_HHasKey( hJson, "id" )
    //     cId = hJson[ "id" ]
    // else
    //     cId = "null"  // Si no hay id, asignar null
    // endif
    LogFile( "id: ", cId )

    do case
        case cMethod == "initialize"
            LogFile( "initialize: ", cMethod )
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2025-03-26",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"result":{' + ;
                    '"protocolVersion":"2025-03-26",' + ;
                    '"capabilities":{' + ;
                    '"tools":{},' + ;
                    '"resources":{},' + ;
                    '"prompts":{}' + ;
                    '}' + ;
                    '}' + ;
                    '}' + hb_eol()

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            hParams := hJson[ "params" ]
            IF HB_ISHASH( hParams ) .AND. "name" $ hParams .AND. "arguments" $ hParams
                cToolName := hParams[ "name" ]
                IF cToolName == "get_time" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + hb_DateTime() + '"' + ;
                        '}' + hb_eol()
                ELSEIF cToolName == "hb_version" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener la versión de Harbour
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + StrTran( Version(), '"', '\"' ) + '"' + ;
                        '}' + hb_eol()
                ELSEIF cToolName == "hb_compiler" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener el nombre del compilador
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + StrTran( hb_Compiler(), '"', '\"' ) + '"' + ;
                        '}' + hb_eol()
                ELSE
                    // Error: herramienta no encontrada o argumentos inválidos
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"error":{' + ;
                        '"code":-32602,' + ;
                        '"message":"Invalid params"' + ;
                        '}' + ;
                        '}' + hb_eol()
                ENDIF
            ELSE
                // Error: parámetros inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32601,' + ;
            '"message":"Method not found"' + ;
            '}' + ;
            '}' + hb_eol()
    endcase

    hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + "response: " + cResponse )

RETURN cResponse

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>

hbmcp.prg

Code: Select all | Expand

#define LogFile( cKey, cValue ) hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + cKey + cValue )

PROCEDURE Main()

    LOCAL cInput, cResponse

    // Bucle para leer continuamente desde stdin
    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
            EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        // Procesar el mensaje
        hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + "in: " + cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + "out: " + cResponse )
            StdOut( cResponse )
        ENDIF
    END

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId := "1", cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    LogFile( "method: ", cMethod )
    // if hb_HHasKey( hJson, "id" )
    //     cId = hJson[ "id" ]
    // else
    //     cId = "null"  // Si no hay id, asignar null
    // endif
    LogFile( "id: ", cId )

    do case
        case cMethod == "initialize"
            LogFile( "initialize: ", cMethod )
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2025-03-26",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"result":{' + ;
                    '"protocolVersion":"2025-03-26",' + ;
                    '"capabilities":{' + ;
                    '"tools":{},' + ;
                    '"resources":{},' + ;
                    '"prompts":{}' + ;
                    '}' + ;
                    '}' + ;
                    '}' + hb_eol()

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            hParams := hJson[ "params" ]
            IF HB_ISHASH( hParams ) .AND. "name" $ hParams .AND. "arguments" $ hParams
                cToolName := hParams[ "name" ]
                IF cToolName == "get_time" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + hb_DateTime() + '"' + ;
                        '}' + hb_eol()
                ELSEIF cToolName == "hb_version" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener la versión de Harbour
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + StrTran( Version(), '"', '\"' ) + '"' + ;
                        '}' + hb_eol()
                ELSEIF cToolName == "hb_compiler" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener el nombre del compilador
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + StrTran( hb_Compiler(), '"', '\"' ) + '"' + ;
                        '}' + hb_eol()
                ELSE
                    // Error: herramienta no encontrada o argumentos inválidos
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"error":{' + ;
                        '"code":-32602,' + ;
                        '"message":"Invalid params"' + ;
                        '}' + ;
                        '}' + hb_eol()
                ENDIF
            ELSE
                // Error: parámetros inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32601,' + ;
            '"message":"Method not found"' + ;
            '}' + ;
            '}' + hb_eol()
    endcase

    hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + "response: " + cResponse )

RETURN cResponse

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>
<![CDATA[latest AI news :: Re: vscode MCP support is already available! :: Reply by Antonio Linares]]> 2025-04-17T15:51:29-06:00 2025-04-17T15:51:29-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45624&p=279038#p279038

hbmcp.prg

Code: Select all | Expand

#define LogFile( cKey, cValue ) hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + cKey + cValue )

PROCEDURE Main()

    LOCAL cInput, cResponse

    // Bucle para leer continuamente desde stdin
    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        // Procesar el mensaje
        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    LogFile( "method: ", cMethod )
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            LogFile( "initialize: ", cMethod )
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2025-03-26",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"result":{' + ;
                    '"protocolVersion":"2025-03-26",' + ;
                    '"capabilities":{' + ;
                    '"tools":{},' + ;
                    '"resources":{},' + ;
                    '"prompts":{}' + ;
                    '}' + ;
                    '}' + ;
                    '}' + hb_eol()

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>


hbmcp.prg

Code: Select all | Expand

#define LogFile( cKey, cValue ) hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + cKey + cValue )

PROCEDURE Main()

    LOCAL cInput, cResponse

    // Bucle para leer continuamente desde stdin
    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        // Procesar el mensaje
        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    LogFile( "method: ", cMethod )
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            LogFile( "initialize: ", cMethod )
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2025-03-26",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"result":{' + ;
                    '"protocolVersion":"2025-03-26",' + ;
                    '"capabilities":{' + ;
                    '"tools":{},' + ;
                    '"resources":{},' + ;
                    '"prompts":{}' + ;
                    '}' + ;
                    '}' + ;
                    '}' + hb_eol()

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>
<![CDATA[latest AI news :: Re: vscode MCP support is already available! :: Reply by Antonio Linares]]> 2025-04-20T00:35:44-06:00 2025-04-20T00:35:44-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45624&p=279055#p279055
hbmcp.prg

Code: Select all | Expand

#include "fileio.ch"

PROCEDURE Main()

    LOCAL cInput, cResponse

    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2025-03-26",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"result":{' + ;
                    '"protocolVersion":"2025-03-26",' + ;
                    '"capabilities":{' + ;
                    '"tools":{},' + ;
                    '"resources":{},' + ;
                    '"prompts":{}' + ;
                    '}' + ;
                    '}' + ;
                    '}' + hb_eol()

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

FUNCTION LogFile( cKey, cValue )
    LOCAL nHandle, lSuccess
    // Considerar hacer la ruta configurable
    if ! File( "c:\temp\hbmcp.log" )
       // Crear el archivo si no existe
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE + FO_CREAT )
    else
       // Abrir el archivo para añadir contenido
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE )
    endif
    IF nHandle > 0
       FSeek( nHandle, 0, FS_END ) // Mover el puntero al final del archivo
       lSuccess = fWrite( nHandle, cKey + cValue + hb_eol() )
       fclose( nHandle )
       RETURN lSuccess // Opcional: retornar éxito/fallo
    ENDIF
 RETURN .F.

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>

hbmcp.prg

Code: Select all | Expand

#include "fileio.ch"

PROCEDURE Main()

    LOCAL cInput, cResponse

    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2025-03-26",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"result":{' + ;
                    '"protocolVersion":"2025-03-26",' + ;
                    '"capabilities":{' + ;
                    '"tools":{},' + ;
                    '"resources":{},' + ;
                    '"prompts":{}' + ;
                    '}' + ;
                    '}' + ;
                    '}' + hb_eol()

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

FUNCTION LogFile( cKey, cValue )
    LOCAL nHandle, lSuccess
    // Considerar hacer la ruta configurable
    if ! File( "c:\temp\hbmcp.log" )
       // Crear el archivo si no existe
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE + FO_CREAT )
    else
       // Abrir el archivo para añadir contenido
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE )
    endif
    IF nHandle > 0
       FSeek( nHandle, 0, FS_END ) // Mover el puntero al final del archivo
       lSuccess = fWrite( nHandle, cKey + cValue + hb_eol() )
       fclose( nHandle )
       RETURN lSuccess // Opcional: retornar éxito/fallo
    ENDIF
 RETURN .F.

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>
<![CDATA[latest AI news :: Re: vscode MCP support is already available! :: Reply by Antonio Linares]]> 2025-04-20T01:25:32-06:00 2025-04-20T01:25:32-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45624&p=279056#p279056

hbmcp.prg

Code: Select all | Expand

#include "fileio.ch"

PROCEDURE Main()

    LOCAL cInput, cResponse

    ErrorBlock( { | oError| LogFile( "error: ", oError:Description ) } )

    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2024-11-05",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '},' + ;
                '"serverInfo":{"name":"Harbour-xbase","version":"0.0.2"}' + ;  
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := hb_eol()

        case cMethod == "resources/list"    
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2024-11-05",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '},' + ;
                '"serverInfo":{"name":"Harbour-xbase","version":"0.0.2"}' + ;  
                '}' + ;
                '}' + hb_eol()

        case cMethod == "prompts/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + hb_eol()        

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

FUNCTION LogFile( cKey, cValue )
    LOCAL nHandle, lSuccess
    // Considerar hacer la ruta configurable
    if ! File( "c:\temp\hbmcp.log" )
       // Crear el archivo si no existe
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE + FO_CREAT )
    else
       // Abrir el archivo para añadir contenido
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE )
    endif
    IF nHandle > 0
       FSeek( nHandle, 0, FS_END ) // Mover el puntero al final del archivo
       lSuccess = fWrite( nHandle, cKey + cValue + hb_eol() )
       fclose( nHandle )
       RETURN lSuccess // Opcional: retornar éxito/fallo
    ENDIF
 RETURN .F.

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>


hbmcp.prg

Code: Select all | Expand

#include "fileio.ch"

PROCEDURE Main()

    LOCAL cInput, cResponse

    ErrorBlock( { | oError| LogFile( "error: ", oError:Description ) } )

    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2024-11-05",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '},' + ;
                '"serverInfo":{"name":"Harbour-xbase","version":"0.0.2"}' + ;  
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := hb_eol()

        case cMethod == "resources/list"    
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2024-11-05",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '},' + ;
                '"serverInfo":{"name":"Harbour-xbase","version":"0.0.2"}' + ;  
                '}' + ;
                '}' + hb_eol()

        case cMethod == "prompts/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + hb_eol()        

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

FUNCTION LogFile( cKey, cValue )
    LOCAL nHandle, lSuccess
    // Considerar hacer la ruta configurable
    if ! File( "c:\temp\hbmcp.log" )
       // Crear el archivo si no existe
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE + FO_CREAT )
    else
       // Abrir el archivo para añadir contenido
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE )
    endif
    IF nHandle > 0
       FSeek( nHandle, 0, FS_END ) // Mover el puntero al final del archivo
       lSuccess = fWrite( nHandle, cKey + cValue + hb_eol() )
       fclose( nHandle )
       RETURN lSuccess // Opcional: retornar éxito/fallo
    ENDIF
 RETURN .F.

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>
<![CDATA[latest AI news :: Re: vscode MCP support is already available! :: Reply by Antonio Linares]]> 2025-04-20T02:24:42-06:00 2025-04-20T02:24:42-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45624&p=279059#p279059 :D :D

hbmcp.prg

Code: Select all | Expand

#include "fileio.ch"

PROCEDURE Main()

    LOCAL cInput, cResponse

    ErrorBlock( { | oError| LogFile( "error: ", oError:Description ) } )

    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2024-11-05",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '},' + ;
                '"serverInfo":{"name":"Harbour-xbase","version":"0.0.2"}' + ;  
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := hb_eol()

        case cMethod == "resources/list"    
            cResponse := ;
                '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{"code":-32601,"message":"Method not found"}' + ;
                '}' + hb_eol()           

        case cMethod == "prompts/list"
            cResponse := ;
                '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{"code":-32601,"message":"Method not found"}' + ;
                '}' + hb_eol()           

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format. Useful for logging or timestamping operations within the Harbour runtime environment.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment. Use this to verify compatibility or for debugging purposes.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment. Helpful for diagnosing build-related issues.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()
            
        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

FUNCTION LogFile( cKey, cValue )
    LOCAL nHandle, lSuccess
    // Considerar hacer la ruta configurable
    if ! File( "c:\temp\hbmcp.log" )
       // Crear el archivo si no existe
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE + FO_CREAT )
    else
       // Abrir el archivo para añadir contenido
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE )
    endif
    IF nHandle > 0
       FSeek( nHandle, 0, FS_END ) // Mover el puntero al final del archivo
       lSuccess = fWrite( nHandle, cKey + cValue + hb_eol() )
       fclose( nHandle )
       RETURN lSuccess // Opcional: retornar éxito/fallo
    ENDIF
 RETURN .F.

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>
:D :D

hbmcp.prg

Code: Select all | Expand

#include "fileio.ch"

PROCEDURE Main()

    LOCAL cInput, cResponse

    ErrorBlock( { | oError| LogFile( "error: ", oError:Description ) } )

    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2024-11-05",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '},' + ;
                '"serverInfo":{"name":"Harbour-xbase","version":"0.0.2"}' + ;  
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := hb_eol()

        case cMethod == "resources/list"    
            cResponse := ;
                '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{"code":-32601,"message":"Method not found"}' + ;
                '}' + hb_eol()           

        case cMethod == "prompts/list"
            cResponse := ;
                '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{"code":-32601,"message":"Method not found"}' + ;
                '}' + hb_eol()           

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format. Useful for logging or timestamping operations within the Harbour runtime environment.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment. Use this to verify compatibility or for debugging purposes.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment. Helpful for diagnosing build-related issues.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()
            
        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

FUNCTION LogFile( cKey, cValue )
    LOCAL nHandle, lSuccess
    // Considerar hacer la ruta configurable
    if ! File( "c:\temp\hbmcp.log" )
       // Crear el archivo si no existe
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE + FO_CREAT )
    else
       // Abrir el archivo para añadir contenido
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE )
    endif
    IF nHandle > 0
       FSeek( nHandle, 0, FS_END ) // Mover el puntero al final del archivo
       lSuccess = fWrite( nHandle, cKey + cValue + hb_eol() )
       fclose( nHandle )
       RETURN lSuccess // Opcional: retornar éxito/fallo
    ENDIF
 RETURN .F.

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>
<![CDATA[latest AI news :: Re: vscode MCP support is already available! :: Reply by Antonio Linares]]> 2025-04-20T07:54:57-06:00 2025-04-20T07:54:57-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45624&p=279063#p279063

Image

Image]]>


Image

Image]]>
<![CDATA[latest AI news :: Re: vscode MCP support is already available! :: Reply by Antonio Linares]]> 2025-04-20T13:07:34-06:00 2025-04-20T13:07:34-06:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45624&p=279074#p279074
hbmcp.prg

Code: Select all | Expand

#include "fileio.ch"

PROCEDURE Main()

    LOCAL cInput, cResponse

    ErrorBlock( { | oError| LogFile( "error: ", oError:Description ) } )

    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName
    LOCAL cCode, xResult, cResult

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2024-11-05",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '},' + ;
                '"serverInfo":{"name":"Harbour-xbase","version":"0.0.2"}' + ;  
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := hb_eol()

        case cMethod == "resources/list"    
            cResponse := ;
                '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{"code":-32601,"message":"Method not found"}' + ;
                '}' + hb_eol()           

        case cMethod == "prompts/list"
            cResponse := ;
                '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{"code":-32601,"message":"Method not found"}' + ;
                '}' + hb_eol()           

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in HH:MM:SS format. Useful for logging or timestamping operations within the Harbour runtime environment.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment. Use this to verify compatibility or for debugging purposes.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment. Helpful for diagnosing build-related issues.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;  // Nueva herramienta hb_macro
                '"name":"hb_macro",' + ;
                '"description":"Executes a Harbour macro expression provided as a string and returns the result as a string. Useful for dynamic code execution within the Harbour runtime environment.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{"code":{"type":"string"}},' + ;
                '"required":["code"],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_macro"
                // Nueva herramienta: ejecutar macro y devolver resultado como cadena
                // Verificar que el parámetro "code" existe y es una cadena
                IF hb_HHasKey( hJson[ "params" ], "arguments" ) .AND. ;
                   hb_HHasKey( hJson[ "params" ][ "arguments" ], "code" ) .AND. ;
                   ValType( hJson[ "params" ][ "arguments" ][ "code" ] ) == "C"
                    cCode := hJson[ "params" ][ "arguments" ][ "code" ]
                    // Ejecutar la macro y convertir el resultado a cadena
                    BEGIN SEQUENCE
                        xResult := &( cCode )
                        cResult := hb_ValToExp( xResult )
                        cResponse := ;
                            '{' + ;
                            '"jsonrpc":"2.0",' + ;
                            '"id":' + cId + ',' + ;
                            '"result":{"content":[{"type":"text","text":"' + cResult + '"}]}' + ;
                            '}' + hb_eol()
                        cResponse := StrTran( cResponse, '""', '"' )
                    RECOVER
                        // En caso de error en la macro, devolver un error JSON-RPC
                        cResponse := ;
                            '{' + ;
                            '"jsonrpc":"2.0",' + ;
                            '"id":' + cId + ',' + ;
                            '"error":{"code":-32602,"message":"Invalid macro expression"}' + ;
                            '}' + hb_eol()
                    END SEQUENCE
                ELSE
                    // Error: parámetro "code" no proporcionado o inválido
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"error":{"code":-32602,"message":"Missing or invalid code parameter"}' + ;
                        '}' + hb_eol()
                ENDIF                    
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

FUNCTION LogFile( cKey, cValue )
    LOCAL nHandle, lSuccess
    // Considerar hacer la ruta configurable
    if ! File( "c:\temp\hbmcp.log" )
       // Crear el archivo si no existe
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE + FO_CREAT )
    else
       // Abrir el archivo para añadir contenido
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE )
    endif
    IF nHandle > 0
       FSeek( nHandle, 0, FS_END ) // Mover el puntero al final del archivo
       lSuccess = fWrite( nHandle, cKey + cValue + hb_eol() )
       fclose( nHandle )
       RETURN lSuccess // Opcional: retornar éxito/fallo
    ENDIF
 RETURN .F.

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>

hbmcp.prg

Code: Select all | Expand

#include "fileio.ch"

PROCEDURE Main()

    LOCAL cInput, cResponse

    ErrorBlock( { | oError| LogFile( "error: ", oError:Description ) } )

    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName
    LOCAL cCode, xResult, cResult

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2024-11-05",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '},' + ;
                '"serverInfo":{"name":"Harbour-xbase","version":"0.0.2"}' + ;  
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := hb_eol()

        case cMethod == "resources/list"    
            cResponse := ;
                '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{"code":-32601,"message":"Method not found"}' + ;
                '}' + hb_eol()           

        case cMethod == "prompts/list"
            cResponse := ;
                '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{"code":-32601,"message":"Method not found"}' + ;
                '}' + hb_eol()           

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in HH:MM:SS format. Useful for logging or timestamping operations within the Harbour runtime environment.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment. Use this to verify compatibility or for debugging purposes.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment. Helpful for diagnosing build-related issues.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;  // Nueva herramienta hb_macro
                '"name":"hb_macro",' + ;
                '"description":"Executes a Harbour macro expression provided as a string and returns the result as a string. Useful for dynamic code execution within the Harbour runtime environment.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{"code":{"type":"string"}},' + ;
                '"required":["code"],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_macro"
                // Nueva herramienta: ejecutar macro y devolver resultado como cadena
                // Verificar que el parámetro "code" existe y es una cadena
                IF hb_HHasKey( hJson[ "params" ], "arguments" ) .AND. ;
                   hb_HHasKey( hJson[ "params" ][ "arguments" ], "code" ) .AND. ;
                   ValType( hJson[ "params" ][ "arguments" ][ "code" ] ) == "C"
                    cCode := hJson[ "params" ][ "arguments" ][ "code" ]
                    // Ejecutar la macro y convertir el resultado a cadena
                    BEGIN SEQUENCE
                        xResult := &( cCode )
                        cResult := hb_ValToExp( xResult )
                        cResponse := ;
                            '{' + ;
                            '"jsonrpc":"2.0",' + ;
                            '"id":' + cId + ',' + ;
                            '"result":{"content":[{"type":"text","text":"' + cResult + '"}]}' + ;
                            '}' + hb_eol()
                        cResponse := StrTran( cResponse, '""', '"' )
                    RECOVER
                        // En caso de error en la macro, devolver un error JSON-RPC
                        cResponse := ;
                            '{' + ;
                            '"jsonrpc":"2.0",' + ;
                            '"id":' + cId + ',' + ;
                            '"error":{"code":-32602,"message":"Invalid macro expression"}' + ;
                            '}' + hb_eol()
                    END SEQUENCE
                ELSE
                    // Error: parámetro "code" no proporcionado o inválido
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"error":{"code":-32602,"message":"Missing or invalid code parameter"}' + ;
                        '}' + hb_eol()
                ENDIF                    
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

FUNCTION LogFile( cKey, cValue )
    LOCAL nHandle, lSuccess
    // Considerar hacer la ruta configurable
    if ! File( "c:\temp\hbmcp.log" )
       // Crear el archivo si no existe
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE + FO_CREAT )
    else
       // Abrir el archivo para añadir contenido
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE )
    endif
    IF nHandle > 0
       FSeek( nHandle, 0, FS_END ) // Mover el puntero al final del archivo
       lSuccess = fWrite( nHandle, cKey + cValue + hb_eol() )
       fclose( nHandle )
       RETURN lSuccess // Opcional: retornar éxito/fallo
    ENDIF
 RETURN .F.

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>