Code: Select all | Expand
//----------------------------------------------------------------------------//
// Clase: TGroq
// Desarrollado por: Carlos Sincuir
// Version FWH: 25.01
// Obtenga su API key desde https://console.groq.com/login
//----------------------------------------------------------------------------//
#include "FiveWin.ch"
#include "hbcurl.ch"
function Main()
local oChat := TGroq():New("tuApiKey")
oChat:Send( "Hola, quien eres ?" )
? oChat:GetValue()
oChat:End()
return nil
//----------------------------------------------------------------------------//
CLASS TGroq
DATA cKey INIT ""
DATA cModel INIT "llama3-70b-8192"
DATA cResponse
DATA cUrl INIT ""
DATA cUploadUrl INIT ""
DATA hCurl
DATA nError INIT 0
DATA nHttpCode INIT 0
DATA nTemperature INIT 0
METHOD New( cKey, cModel )
METHOD Send( cPrompt )
METHOD End()
METHOD GetValue()
ENDCLASS
//----------------------------------------------------------------------------//
METHOD New( cKey, cModel ) CLASS TGroq
if Empty( cKey )
::cKey = GetEnv( "GROQ_API_KEY" )
else
::cKey = cKey
endif
if ! Empty( cModel )
::cModel = cModel
endif
if Val( SubStr( Curl_Version_Info()[ 1 ], 1, RAt( ".", Curl_Version_Info()[ 1 ] ) - 1 ) ) - 8.10 > 0.2
MsgAlert( "Please use an updated curl DLL" )
endif
::cUrl = "https://api.groq.com/openai/v1/chat/completions"
::hCurl = curl_easy_init()
return Self
//----------------------------------------------------------------------------//
METHOD End() CLASS TGroq
curl_easy_cleanup( ::hCurl )
::hCurl = nil
return nil
//----------------------------------------------------------------------------//
METHOD GetValue() CLASS TGroq
local uValue, hResponse
if ! Empty( ::cResponse )
uValue = hb_jsonDecode( ::cResponse, @hResponse )
endif
if hb_isHash( hResponse )
TRY
uValue = hResponse[ "choices" ][ 1 ][ "message" ][ "content" ]
CATCH
TRY
uValue = hResponse[ "error" ][ "message" ]
CATCH
uValue = "Error, no response"
END
END
endif
return uValue
//----------------------------------------------------------------------------//
METHOD Send( cPrompt ) CLASS TGroq
local aHeaders, cJson, hRequest, hMessages
curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, .T. )
curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cUrl )
aHeaders := { "Content-Type: application/json",;
"Authorization: Bearer " + ::cKey } // Tu API key de Groq
curl_easy_setopt( ::hCurl, HB_CURLOPT_HTTPHEADER, aHeaders )
curl_easy_setopt( ::hCurl, HB_CURLOPT_USERNAME, "" )
curl_easy_setopt( ::hCurl, HB_CURLOPT_DL_BUFF_SETUP )
curl_easy_setopt( ::hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
// Estructura del JSON para Groq
hMessages := { { "role" => "user", "content" => cPrompt } }
hRequest := { "model" => ::cModel,;
"temperature" => ::nTemperature,;
"messages" => hMessages }
cJson := hb_jsonEncode( hRequest )
curl_easy_setopt( ::hCurl, HB_CURLOPT_POSTFIELDS, cJson )
::nError := curl_easy_perform( ::hCurl )
curl_easy_getinfo( ::hCurl, HB_CURLINFO_RESPONSE_CODE, @::nHttpCode )
if ::nError == HB_CURLE_OK
::cResponse := curl_easy_dl_buff_get( ::hCurl )
else
::cResponse := "Error code " + Str( ::nError )
endif
return ::cResponse
//----------------------------------------------------------------------------//
Code: Select all | Expand
//----------------------------------------------------------------------------//
// Clase: TGroq
// Desarrollado por: Carlos Sincuir
// Version FWH: 25.01
// Obtenga su API key desde https://console.groq.com/login
//----------------------------------------------------------------------------//
#include "FiveWin.ch"
#include "hbcurl.ch"
function Main()
local oChat := TGroq():New("tuApiKey")
oChat:Send( "Hola, quien eres ?" )
? oChat:GetValue()
oChat:End()
return nil
//----------------------------------------------------------------------------//
CLASS TGroq
DATA cKey INIT ""
DATA cModel INIT "llama3-70b-8192"
DATA cResponse
DATA cUrl INIT ""
DATA cUploadUrl INIT ""
DATA hCurl
DATA nError INIT 0
DATA nHttpCode INIT 0
DATA nTemperature INIT 0
METHOD New( cKey, cModel )
METHOD Send( cPrompt )
METHOD End()
METHOD GetValue()
ENDCLASS
//----------------------------------------------------------------------------//
METHOD New( cKey, cModel ) CLASS TGroq
if Empty( cKey )
::cKey = GetEnv( "GROQ_API_KEY" )
else
::cKey = cKey
endif
if ! Empty( cModel )
::cModel = cModel
endif
if Val( SubStr( Curl_Version_Info()[ 1 ], 1, RAt( ".", Curl_Version_Info()[ 1 ] ) - 1 ) ) - 8.10 > 0.2
MsgAlert( "Please use an updated curl DLL" )
endif
::cUrl = "https://api.groq.com/openai/v1/chat/completions"
::hCurl = curl_easy_init()
return Self
//----------------------------------------------------------------------------//
METHOD End() CLASS TGroq
curl_easy_cleanup( ::hCurl )
::hCurl = nil
return nil
//----------------------------------------------------------------------------//
METHOD GetValue() CLASS TGroq
local uValue, hResponse
if ! Empty( ::cResponse )
uValue = hb_jsonDecode( ::cResponse, @hResponse )
endif
if hb_isHash( hResponse )
TRY
uValue = hResponse[ "choices" ][ 1 ][ "message" ][ "content" ]
CATCH
TRY
uValue = hResponse[ "error" ][ "message" ]
CATCH
uValue = "Error, no response"
END
END
endif
return uValue
//----------------------------------------------------------------------------//
METHOD Send( cPrompt ) CLASS TGroq
local aHeaders, cJson, hRequest, hMessages
curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, .T. )
curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cUrl )
aHeaders := { "Content-Type: application/json",;
"Authorization: Bearer " + ::cKey } // Tu API key de Groq
curl_easy_setopt( ::hCurl, HB_CURLOPT_HTTPHEADER, aHeaders )
curl_easy_setopt( ::hCurl, HB_CURLOPT_USERNAME, "" )
curl_easy_setopt( ::hCurl, HB_CURLOPT_DL_BUFF_SETUP )
curl_easy_setopt( ::hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
// Estructura del JSON para Groq
hMessages := { { "role" => "user", "content" => cPrompt } }
hRequest := { "model" => ::cModel,;
"temperature" => ::nTemperature,;
"messages" => hMessages }
cJson := hb_jsonEncode( hRequest )
curl_easy_setopt( ::hCurl, HB_CURLOPT_POSTFIELDS, cJson )
::nError := curl_easy_perform( ::hCurl )
curl_easy_getinfo( ::hCurl, HB_CURLINFO_RESPONSE_CODE, @::nHttpCode )
if ::nError == HB_CURLE_OK
::cResponse := curl_easy_dl_buff_get( ::hCurl )
else
::cResponse := "Error code " + Str( ::nError )
endif
return ::cResponse
//----------------------------------------------------------------------------//
Code: Select all | Expand
@ 10, 550 COMBOBOX oBrw:oSortCbx VAR oBrw:cSortOrder;
SIZE 150,400 PIXEL OF oDlg HEIGHTGET 18 STYLE CBS_DROPDOWN
Code: Select all | Expand
@ 10, 550 COMBOBOX oBrw:oSortCbx VAR oBrw:cSortOrder;
SIZE 150,400 PIXEL OF oDlg HEIGHTGET 18 STYLE CBS_DROPDOWN
Code: Select all | Expand
@ 10, 550 COMBOBOX oBrw:oSortCbx VAR oBrw:cSortOrder;
SIZE 150,400 PIXEL OF oDlg HEIGHTGET 18 STYLE CBS_DROPDOWN
Code: Select all | Expand
@ 10, 550 COMBOBOX oBrw:oSortCbx VAR oBrw:cSortOrder;
SIZE 150,400 PIXEL OF oDlg HEIGHTGET 18 STYLE CBS_DROPDOWN
Code: Select all | Expand
function Usage1()
local oDlg, oBrw
local cSeek:=Space(100)
local oGet
USE CUSTOMER NEW VIA "DBFCDX"
SET ORDER TO TAG FIRST
GO TOP
DEFINE DIALOG oDlg SIZE 800,400 PIXEL TRUEPIXEL RESIZABLE
@ 10, 165 GET oGet VAR cSeek SIZE 200,19 PIXEL OF oDlg PICTURE "@!"
@ 60,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
DATASOURCE ALIAS() ;
COLUMNS "FIRST","LAST","STREET", "CITY" ;
HEADERS "NAME","SURNAME","ADDRESS", "TOWN" ;
AUTOSORT ;
NOBORDER LINES
WITH OBJECT oBrw
:nMarqueeStyle := 2
:nColorBox := CLR_HRED
:lHScroll := .f.
:lIncrFilter := .t.
:bOnSort := { |b,oCol| oBrw:Seek( "" ), ;
oBrw:cFilterFld := oCol:cExpr, ;
oBrw:SetFocus() }
:oSeek := oGet
:CreateFromCode()
END
@ 10,20 COMBOBOX oBrw:oSortCbx VAR oBrw:cSortOrder SIZE 100,400 PIXEL OF oDlg
ACTIVATE DIALOG oDlg CENTERED
CLOSE DATA
return nil
on @ 10,20 COMBOBOX oBrw:oSortCbx VAR oBrw:cSortOrder SIZE 100,400 PIXEL OF oDlgCode: Select all | Expand
function Usage1()
local oDlg, oBrw
local cSeek:=Space(100)
local oGet
USE CUSTOMER NEW VIA "DBFCDX"
SET ORDER TO TAG FIRST
GO TOP
DEFINE DIALOG oDlg SIZE 800,400 PIXEL TRUEPIXEL RESIZABLE
@ 10, 165 GET oGet VAR cSeek SIZE 200,19 PIXEL OF oDlg PICTURE "@!"
@ 60,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
DATASOURCE ALIAS() ;
COLUMNS "FIRST","LAST","STREET", "CITY" ;
HEADERS "NAME","SURNAME","ADDRESS", "TOWN" ;
AUTOSORT ;
NOBORDER LINES
WITH OBJECT oBrw
:nMarqueeStyle := 2
:nColorBox := CLR_HRED
:lHScroll := .f.
:lIncrFilter := .t.
:bOnSort := { |b,oCol| oBrw:Seek( "" ), ;
oBrw:cFilterFld := oCol:cExpr, ;
oBrw:SetFocus() }
:oSeek := oGet
:CreateFromCode()
END
@ 10,20 COMBOBOX oBrw:oSortCbx VAR oBrw:cSortOrder SIZE 100,400 PIXEL OF oDlg
ACTIVATE DIALOG oDlg CENTERED
CLOSE DATA
return nil
on @ 10,20 COMBOBOX oBrw:oSortCbx VAR oBrw:cSortOrder SIZE 100,400 PIXEL OF oDlgCode: Select all | Expand
#include "fivewin.ch"
REQUEST DBFCDX
function Main()
local aData
FERASE( "CUSTOMER.CDX" )
USE CUSTOMER NEW EXCLUSIVE VIA "DBFCDX"
aData := FW_DbfToArray( "FIRST,LAST,STREET", , { || RECNO() < 11 } )
GO TOP
FW_CdxCreate()
CLOSE CUSTOMER
Usage1()
return nil
function USAGE1()
local oDlg, oBrw
local cSeek:=Space(100)
local oGet
USE CUSTOMER NEW VIA "DBFCDX"
SET ORDER TO TAG FIRST
GO TOP
DEFINE DIALOG oDlg SIZE 800,400 PIXEL TRUEPIXEL RESIZABLE
@ 10, 5 GET oGet VAR cSeek SIZE 200,19 PIXEL OF oDlg PICTURE "@!"
@ 60,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
DATASOURCE "CUST" ;
COLUMNS "FIRST","LAST","STREET", "CITY" ;
HEADERS "NAME","SURNAME","ADDRESS", "TOWN" ;
AUTOSORT ;
NOBORDER LINES
WITH OBJECT oBrw
:nMarqueeStyle := 2
:nColorBox := CLR_HRED
:lHScroll := .f.
:lIncrFilter := .t.
:bOnSort := { |b,oCol| oBrw:Seek( "" ), ;
oBrw:cFilterFld := oCol:cExpr, ;
oBrw:SetFocus() }
:oSeek := oGet
:CreateFromCode()
END
@ 10,300 COMBOBOX oBrw:oSortCbx VAR oBrw:cSortOrder SIZE 100,400 PIXEL OF oDlg
ACTIVATE DIALOG oDlg CENTERED
CLOSE DATA
return ni
Code: Select all | Expand
#include "fivewin.ch"
REQUEST DBFCDX
function Main()
local aData
FERASE( "CUSTOMER.CDX" )
USE CUSTOMER NEW EXCLUSIVE VIA "DBFCDX"
aData := FW_DbfToArray( "FIRST,LAST,STREET", , { || RECNO() < 11 } )
GO TOP
FW_CdxCreate()
CLOSE CUSTOMER
Usage1()
return nil
function USAGE1()
local oDlg, oBrw
local cSeek:=Space(100)
local oGet
USE CUSTOMER NEW VIA "DBFCDX"
SET ORDER TO TAG FIRST
GO TOP
DEFINE DIALOG oDlg SIZE 800,400 PIXEL TRUEPIXEL RESIZABLE
@ 10, 5 GET oGet VAR cSeek SIZE 200,19 PIXEL OF oDlg PICTURE "@!"
@ 60,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
DATASOURCE "CUST" ;
COLUMNS "FIRST","LAST","STREET", "CITY" ;
HEADERS "NAME","SURNAME","ADDRESS", "TOWN" ;
AUTOSORT ;
NOBORDER LINES
WITH OBJECT oBrw
:nMarqueeStyle := 2
:nColorBox := CLR_HRED
:lHScroll := .f.
:lIncrFilter := .t.
:bOnSort := { |b,oCol| oBrw:Seek( "" ), ;
oBrw:cFilterFld := oCol:cExpr, ;
oBrw:SetFocus() }
:oSeek := oGet
:CreateFromCode()
END
@ 10,300 COMBOBOX oBrw:oSortCbx VAR oBrw:cSortOrder SIZE 100,400 PIXEL OF oDlg
ACTIVATE DIALOG oDlg CENTERED
CLOSE DATA
return ni
Code: Select all | Expand
#include "fivewin.ch"
PROCEDURE ze_fwTextMsg
LOCAL oDlgMsg, nCont, bOldError
hb_ThreadStart( { || oDlgMsg := DlgTextMsgClass():New(), oDlgMsg:Execute() } )
bOldError := ErrorBlock()
ErrorBlock( { | e | oDlgMsg:lCanClose := .T., oDlgMsg:End(), iif( bOldError == Nil, Nil, Eval( bOldError, e ) ) } )
Inkey(2)
FOR nCont = 1 TO 50
oDlgMsg:ShowText( "Test " + Ltrim( Str( nCont ) ) )
oDlgMsg:nGAtual += 2
oDlgMsg:ShowMeter( oDlgMsg:nGAtual )
Inkey(0.5)
NEXT
? oDlgMsg / 3 // force error
oDlgMsg:lCanClose := .T.
oDlgMsg:End()
RETURN
CREATE CLASS DlgTextMsgClass
VAR xDlg
VAR oBrowse
VAR oGet
VAR oSay1
VAR oSay2
VAR oMeter
VAR aText INIT { "." }
VAR cText
VAR cText1 INIT ""
VAR cText2 INIT ""
VAR nMaxRow INIT 10
VAR nStyle INIT 2
VAR lCanClose INIT .F.
VAR lGraph INIT .T.
VAR nGAtual INIT 0
VAR nGTotal INIT 100
VAR nGSecStart INIT 0
VAR nGSecNow INIT 0
METHOD Execute()
METHOD ShowText( cText )
METHOD ShowMeter( nValue )
METHOD End() INLINE ::xDlg:End()
ENDCLASS
METHOD Execute() CLASS DlgTextMsgClass
LOCAL nDlgWidth, nDlgHeight // xStatusbar,
LOCAL xControl, oCol
::nGSecStart := Int( Seconds() )
nDlgWidth := AppWindowInfo()[1]
nDlgHeight := AppWindowInfo()[2]
::nMaxRow := Int( nDlgHeight / ( AppFontSize() + 2 ) - 2 )
DEFINE DIALOG ::xDlg FROM 0, 0 TO nDlgHeight, nDlgWidth PIXEL ;
FONT AppFont() ;
TITLE "TextScroll" // COLOR COLOR_WHITE, CLR_JPA
::xDlg:SetIcon( TIcon():New(,,"APPICON" ) )
::xDlg:bValid := { || ::lCanClose }
IF ::lGraph
@ nDlgHeight - 80, 40 SAY ::oSay1 VAR ::cText1 OF ::xDlg PIXEL ;
SIZE 500, AppFontSize() FONT AppFont() COLOR CLR_BLACK, CLR_WHITE // TRANSPARENT BORDER
@ nDlgHeight - 80, nDlgWidth - 550 SAY ::oSay2 VAR ::cText2 OF ::xDlg PIXEL ;
SIZE 500, AppFontSize() FONT AppFont() RIGHT COLOR CLR_BLACK, CLR_WHITE // TRANSPARENT BORDER
@ nDlgHeight - 60, 40 METER ::oMeter VAR ::nGAtual ;
SIZE nDlgWidth - 80, AppFontSize() * 2 PIXEL OF ::xDlg ;
COLOR CLR_HGRAY, CLR_BLACK ;
BARCOLOR CLR_MAGENTA, CLR_WHITE ;
TOTAL ::nGTotal FONT AppFont() BORDER CLR_BLACK UPDATE
ENDIF
IF ::nStyle == 1
@ 10, 10 GET ::oGet VAR ::cText MEMO OF ::xDlg PIXEL ;
SIZE nDlgWidth - AppFontSize(), nDlgHeight - AppFontSize() - iif( ::lGraph, 100, 0 ) ;
FONT AppFont() COLOR CLR_BLACK, CLR_WHITE // TRANSPARENT BORDER
ENDIF
//::xGet:Disable()
//Don't works for GET MEMO
//::xGet:lDisColors := .F.
//::xGet:nClrTextDis := RGB2N(20,20,20)
IF ::nStyle == 2
@ 10, 10 XBROWSE xControl ;
ARRAY { "" } ;
SIZE nDlgWidth - AppFontSize(), nDlgHeight - AppFontSize() - iif( ::lGraph, 100, 0 ) ;
FONT AppFont() PIXEL
oCol := xControl:AddCol()
oCol:cHeader := "Text"
oCol:bStrData := { || xControl:aArrayData[ xControl:nArrayAt ] }
xControl:lFitGridHeight := .T. // adjust extra space to header/footer
xControl:nStretchCol := STRETCHCOL_WIDEST
xControl:CreateFromCode()
::oBrowse := xControl
ENDIF
ACTIVATE DIALOG ::xDlg CENTERED
//ON INIT ( (Self), guistatusBarCreate( ::xDlg, @xStatusbar, "" ) )
RETURN Nil
METHOD ShowText( cText ) CLASS DlgTextMsgClass
LOCAL cItem
IF Len( ::aText ) = ::nMaxRow
ADel( ::aText, 1 )
::aText[ Len( ::aText ) ] := cText
ELSE
AAdd( ::aText, cText )
ENDIF
::cText := ""
FOR EACH cItem IN ::aText
::cText += cItem + hb_Eol()
NEXT
IF ::nStyle == 1
::oSay:VarPut( ::cText )
::oSay:Refresh()
ENDIF
IF ::nStyle == 2
::oBrowse:SetArray( ::aText )
::oBrowse:nArrayAt := Len( ::aText )
::oBrowse:Refresh()
ENDIF
RETURN Nil
METHOD ShowMeter( nValue ) CLASS DlgTextMsgClass
LOCAL nSecElapsed, nSecRemaining
IF ::nGSecNow != Int( Seconds() )
::nGSecNow := Seconds()
::nGAtual := nValue
nSecElapsed := ::nGSecNow - ::nGSecStart
DO WHILE nSecElapsed < 0
nSecElapsed += ( 24 * 3600 )
ENDDO
nSecRemaining := nSecElapsed / ::nGAtual * ( ::nGTotal - ::nGAtual )
::oSay1:VarPut( "Proc." + Ltrim( Str( ::nGAtual, 15, 0 ) ) + "/" + ;
Ltrim( Str( ::nGTotal, 15, 0 ) ) + ;
" Gasto " + SecText( nSecElapsed ) )
::oSay1:Refresh()
::oSay2:VarPut( "Falta " + SecText( nSecRemaining ) )
::oSay2:Refresh()
::xDlg:Update()
ENDIF
RETURN Nil
STATIC FUNCTION SecText( nS )
LOCAL nH, nM
nM := Int( nS / 60 )
nS -= ( nM * 60 )
nH := Int( nM / 60 )
nM -= ( nH * 60 )
RETURN ;
Ltrim( Str( nH, 2 ) ) + "h " + ;
Ltrim( Str( nM, 2 ) ) + "m " + ;
Ltrim( Str( nS, 2 ) ) + "s"
//STATIC FUNCTION guiStatusBarCreate( xDlg, xStatusbar, cText )
//DEFINE STATUSBAR xStatusBar PROMPT cText OF xDlg
//xDlg:Refresh()
//RETURN xStatusBar
Code: Select all | Expand
? oDlgMsg / 3 // force error
Code: Select all | Expand
bOldError := ErrorBlock()
ErrorBlock( { | e | oDlgMsg:lCanClose := .T., oDlgMsg:End(), iif( bOldError == Nil, Nil, Eval( bOldError, e ) ) } )
Code: Select all | Expand
#include "fivewin.ch"
PROCEDURE ze_fwTextMsg
LOCAL oDlgMsg, nCont, bOldError
hb_ThreadStart( { || oDlgMsg := DlgTextMsgClass():New(), oDlgMsg:Execute() } )
bOldError := ErrorBlock()
ErrorBlock( { | e | oDlgMsg:lCanClose := .T., oDlgMsg:End(), iif( bOldError == Nil, Nil, Eval( bOldError, e ) ) } )
Inkey(2)
FOR nCont = 1 TO 50
oDlgMsg:ShowText( "Test " + Ltrim( Str( nCont ) ) )
oDlgMsg:nGAtual += 2
oDlgMsg:ShowMeter( oDlgMsg:nGAtual )
Inkey(0.5)
NEXT
? oDlgMsg / 3 // force error
oDlgMsg:lCanClose := .T.
oDlgMsg:End()
RETURN
CREATE CLASS DlgTextMsgClass
VAR xDlg
VAR oBrowse
VAR oGet
VAR oSay1
VAR oSay2
VAR oMeter
VAR aText INIT { "." }
VAR cText
VAR cText1 INIT ""
VAR cText2 INIT ""
VAR nMaxRow INIT 10
VAR nStyle INIT 2
VAR lCanClose INIT .F.
VAR lGraph INIT .T.
VAR nGAtual INIT 0
VAR nGTotal INIT 100
VAR nGSecStart INIT 0
VAR nGSecNow INIT 0
METHOD Execute()
METHOD ShowText( cText )
METHOD ShowMeter( nValue )
METHOD End() INLINE ::xDlg:End()
ENDCLASS
METHOD Execute() CLASS DlgTextMsgClass
LOCAL nDlgWidth, nDlgHeight // xStatusbar,
LOCAL xControl, oCol
::nGSecStart := Int( Seconds() )
nDlgWidth := AppWindowInfo()[1]
nDlgHeight := AppWindowInfo()[2]
::nMaxRow := Int( nDlgHeight / ( AppFontSize() + 2 ) - 2 )
DEFINE DIALOG ::xDlg FROM 0, 0 TO nDlgHeight, nDlgWidth PIXEL ;
FONT AppFont() ;
TITLE "TextScroll" // COLOR COLOR_WHITE, CLR_JPA
::xDlg:SetIcon( TIcon():New(,,"APPICON" ) )
::xDlg:bValid := { || ::lCanClose }
IF ::lGraph
@ nDlgHeight - 80, 40 SAY ::oSay1 VAR ::cText1 OF ::xDlg PIXEL ;
SIZE 500, AppFontSize() FONT AppFont() COLOR CLR_BLACK, CLR_WHITE // TRANSPARENT BORDER
@ nDlgHeight - 80, nDlgWidth - 550 SAY ::oSay2 VAR ::cText2 OF ::xDlg PIXEL ;
SIZE 500, AppFontSize() FONT AppFont() RIGHT COLOR CLR_BLACK, CLR_WHITE // TRANSPARENT BORDER
@ nDlgHeight - 60, 40 METER ::oMeter VAR ::nGAtual ;
SIZE nDlgWidth - 80, AppFontSize() * 2 PIXEL OF ::xDlg ;
COLOR CLR_HGRAY, CLR_BLACK ;
BARCOLOR CLR_MAGENTA, CLR_WHITE ;
TOTAL ::nGTotal FONT AppFont() BORDER CLR_BLACK UPDATE
ENDIF
IF ::nStyle == 1
@ 10, 10 GET ::oGet VAR ::cText MEMO OF ::xDlg PIXEL ;
SIZE nDlgWidth - AppFontSize(), nDlgHeight - AppFontSize() - iif( ::lGraph, 100, 0 ) ;
FONT AppFont() COLOR CLR_BLACK, CLR_WHITE // TRANSPARENT BORDER
ENDIF
//::xGet:Disable()
//Don't works for GET MEMO
//::xGet:lDisColors := .F.
//::xGet:nClrTextDis := RGB2N(20,20,20)
IF ::nStyle == 2
@ 10, 10 XBROWSE xControl ;
ARRAY { "" } ;
SIZE nDlgWidth - AppFontSize(), nDlgHeight - AppFontSize() - iif( ::lGraph, 100, 0 ) ;
FONT AppFont() PIXEL
oCol := xControl:AddCol()
oCol:cHeader := "Text"
oCol:bStrData := { || xControl:aArrayData[ xControl:nArrayAt ] }
xControl:lFitGridHeight := .T. // adjust extra space to header/footer
xControl:nStretchCol := STRETCHCOL_WIDEST
xControl:CreateFromCode()
::oBrowse := xControl
ENDIF
ACTIVATE DIALOG ::xDlg CENTERED
//ON INIT ( (Self), guistatusBarCreate( ::xDlg, @xStatusbar, "" ) )
RETURN Nil
METHOD ShowText( cText ) CLASS DlgTextMsgClass
LOCAL cItem
IF Len( ::aText ) = ::nMaxRow
ADel( ::aText, 1 )
::aText[ Len( ::aText ) ] := cText
ELSE
AAdd( ::aText, cText )
ENDIF
::cText := ""
FOR EACH cItem IN ::aText
::cText += cItem + hb_Eol()
NEXT
IF ::nStyle == 1
::oSay:VarPut( ::cText )
::oSay:Refresh()
ENDIF
IF ::nStyle == 2
::oBrowse:SetArray( ::aText )
::oBrowse:nArrayAt := Len( ::aText )
::oBrowse:Refresh()
ENDIF
RETURN Nil
METHOD ShowMeter( nValue ) CLASS DlgTextMsgClass
LOCAL nSecElapsed, nSecRemaining
IF ::nGSecNow != Int( Seconds() )
::nGSecNow := Seconds()
::nGAtual := nValue
nSecElapsed := ::nGSecNow - ::nGSecStart
DO WHILE nSecElapsed < 0
nSecElapsed += ( 24 * 3600 )
ENDDO
nSecRemaining := nSecElapsed / ::nGAtual * ( ::nGTotal - ::nGAtual )
::oSay1:VarPut( "Proc." + Ltrim( Str( ::nGAtual, 15, 0 ) ) + "/" + ;
Ltrim( Str( ::nGTotal, 15, 0 ) ) + ;
" Gasto " + SecText( nSecElapsed ) )
::oSay1:Refresh()
::oSay2:VarPut( "Falta " + SecText( nSecRemaining ) )
::oSay2:Refresh()
::xDlg:Update()
ENDIF
RETURN Nil
STATIC FUNCTION SecText( nS )
LOCAL nH, nM
nM := Int( nS / 60 )
nS -= ( nM * 60 )
nH := Int( nM / 60 )
nM -= ( nH * 60 )
RETURN ;
Ltrim( Str( nH, 2 ) ) + "h " + ;
Ltrim( Str( nM, 2 ) ) + "m " + ;
Ltrim( Str( nS, 2 ) ) + "s"
//STATIC FUNCTION guiStatusBarCreate( xDlg, xStatusbar, cText )
//DEFINE STATUSBAR xStatusBar PROMPT cText OF xDlg
//xDlg:Refresh()
//RETURN xStatusBar
Code: Select all | Expand
? oDlgMsg / 3 // force error
Code: Select all | Expand
bOldError := ErrorBlock()
ErrorBlock( { | e | oDlgMsg:lCanClose := .T., oDlgMsg:End(), iif( bOldError == Nil, Nil, Eval( bOldError, e ) ) } )
Code: Select all | Expand
function SysWait( nLong )
local nSeconds
DEFAULT nLong := .1
nSeconds := Seconds() + nLong
while Seconds() < nSeconds
SysRefresh()
end
return .t.
Code: Select all | Expand
function SysWait( nLong )
local nSeconds
DEFAULT nLong := .1
nSeconds := Seconds() + nLong
while Seconds() < nSeconds
SysRefresh()
end
return .t.
Code: Select all | Expand
function SysWait( nLong )
local nStart
DEFAULT nLong := .1
nStart := HB_MilliSeconds() // Milliseconds since app start or system epoch
while (HB_MilliSeconds() - nStart) < (nLong * 1000) // Convert seconds to milliseconds
SysRefresh()
end
return .T.
Code: Select all | Expand
function SysWait( nLong )
local nStart
DEFAULT nLong := .1
nStart := HB_MilliSeconds() // Milliseconds since app start or system epoch
while (HB_MilliSeconds() - nStart) < (nLong * 1000) // Convert seconds to milliseconds
SysRefresh()
end
return .T.
Code: Select all | Expand
function SysWait( nLong )
local nStart
DEFAULT nLong := .1
nStart := HB_MilliSeconds() // Milliseconds since app start or system epoch
while (HB_MilliSeconds() - nStart) < (nLong * 1000) // Convert seconds to milliseconds
SysRefresh()
end
return .T.
Code: Select all | Expand
function SysWait( nLong )
local nStart
DEFAULT nLong := .1
nStart := HB_MilliSeconds() // Milliseconds since app start or system epoch
while (HB_MilliSeconds() - nStart) < (nLong * 1000) // Convert seconds to milliseconds
SysRefresh()
end
return .T.
]]>Is Jaspersoft Becoming Obsolete Due to AI?
Yes, if you want a modern, flexible, and interactive solution.
No, if you need classic, pre-defined reports for large enterprises.
What is Jaspersoft?
Jaspersoft is a Business Intelligence (BI) platform specializing in reporting, data analysis, and dashboards. It is primarily used to generate and distribute reports from various data sources and is one of the leading open-source solutions in this field.
Key Features of Jaspersoft
JasperReports – A powerful reporting engine for creating reports in multiple formats (PDF, HTML, Excel, CSV, XML, etc.).
JasperReports Server – A web application for managing, automating, and distributing reports.
JasperSoft Studio – A graphical tool for designing and creating reports (replacing the older iReport Designer).
Ad-hoc Reporting – Users can create reports flexibly via a web interface without programming knowledge.
Support for Multiple Data Sources – Compatible with SQL databases, NoSQL databases, cloud services, Excel files, etc.
Integration into Custom Applications – Jaspersoft can be embedded as a reporting solution in existing software.
Use Cases
Enterprises: Creating business reports and dashboards
Web Applications: Dynamic reporting within web apps
Data Analysis: Transforming raw data into visually understandable reports
ERP and CRM Systems: Enhancing systems with professional reporting functions
Jaspersoft is available as an open-source version (Community Edition) and in commercial editions with extended features. The commercial version is distributed by TIBCO Software.
Question:
As a developer, what advantages does Jaspersoft offer for my software compared to a custom solution using HTML as the reporting language?
Comparison: Jaspersoft vs. Custom HTML Reporting Solution
Advantages of Jaspersoft:
Ready-to-Use Reporting Engine:
Saves development time by eliminating the need to build your own reporting logic.
Offers features such as grouping, aggregations, charts, and export to PDF/Excel.
Visual Design:
Reports can be designed using JasperSoft Studio’s drag-and-drop interface.
Reduces the need for manual HTML/CSS/JS coding.
Data Connectivity and Processing:
Supports multiple data sources (SQL, NoSQL, web APIs, CSV, XML).
Built-in functions for calculations, summaries, pivot tables, etc.
Export Functionality:
Reports can be exported directly to PDF, Excel, CSV, Word, XML, or JSON.
A custom HTML solution would require additional development for conversions.
Automated Report Generation:
Reports can be scheduled and sent via email.
A custom HTML-based solution would require manual coding for this functionality.
Access Control:
Jaspersoft offers user and role-based access management.
A custom solution would require manual implementation.
Advantages of a Custom HTML Reporting Solution:
Maximum Flexibility:
You can build exactly what you need without the overhead of a BI tool.
Design, interactivity, and presentation can be fully customized.
Integration with Web Technologies:
If your application is already based on HTML/JS, reports can be seamlessly integrated.
HTML reports can be enhanced with JavaScript, Chart.js, D3.js, or Tailwind CSS.
Less Dependency on Third-Party Software:
No external BI engine or libraries required.
No licensing costs or update issues with commercial versions.
Better Mobile Adaptability:
HTML reports are inherently responsive, whereas PDF reports often have fixed layouts.
Live filtering and interactive elements are easier to implement.
Performance Advantage for Small Reports:
Jaspersoft generates numerous XML files, adding overhead.
A lightweight HTML solution can be faster for small data sets.
When is Each Option Better?
Criterion Jaspersoft Custom HTML Solution
Simple Reports (Invoices, Lists, Tables)Well-suited
Well-suited
Complex Reports with Charts & AggregationsAlready integrated
Requires custom development
Dynamic, Interactive Reports (Live Filtering, Drill-Downs)More static
Easily achievable with JS
Export to Multiple Formats (PDF, Excel, CSV)Out-of-the-box
Requires additional tools
Automated Reports (Scheduled Jobs, Email Dispatch)Built-in
Needs manual programming
Mobile Optimization & Responsive DesignMore static
Ideal for web apps
Dependency on Third-Party SoftwareYes (TIBCO Jaspersoft)
None
Conclusion:
If you need complex, static reports with export capabilities, Jaspersoft is a quick, ready-made solution.
If you need flexible, interactive reports for a web application, HTML with JS is the better choice.
For exporting HTML reports, you could use Puppeteer (Headless Chrome) to convert HTML pages into PDFs.
What is your specific use case? I can give you more targeted advice.
Question:
Are Jaspersoft’s advantages still relevant today—considering AI-powered report generation—or does it now hinder progress?
AI-Powered Development vs. Jaspersoft
1. Automated Report Generation with AI
Modern AI tools like ChatGPT (with code generation), Copilot, or AI assistants in BI tools can already:
Generate HTML/CSS/JavaScript for custom reports
Automate and optimize SQL queries
Analyze data and create visualizations (e.g., with Chart.js, D3.js)
Dynamically generate reports with minimal input
Conclusion: Jaspersoft’s traditional “drag-and-drop” approach is becoming less relevant as AI simplifies direct report generation in HTML, PDF, or Excel.
2. Flexibility vs. Jaspersoft’s Overhead
Jaspersoft is based on XML structures and templates, often leading to unnecessary complexity.
AI can directly generate HTML reports, avoiding the need to deal with Jaspersoft’s templates and syntax.
Modern HTML reports are more interactive than Jaspersoft’s mostly static PDFs.
Conclusion: AI can generate HTML reports more quickly and flexibly, eliminating the need for a heavy BI tool.
3. Adaptability and Evolution
Using Jaspersoft requires learning the framework and adapting to its limitations.
With an AI-powered custom solution, reports could be modified using natural language, e.g.:
“Create a sales report by region as a bar chart.”
“Add a table with the top customers from the last quarter.”
Conclusion: AI makes reporting more dynamic and adaptable, whereas Jaspersoft relies on static templates.
4. Performance and Scalability
Jaspersoft requires a dedicated server instance, adding overhead.
AI-generated HTML/PDF reports can run directly within a web app without an additional server.
Modern databases (e.g., ClickHouse, DuckDB) allow direct AI-powered queries, reducing the need for separate BI tools.
Conclusion: Using AI with HTML + direct database queries is more efficient than Jaspersoft.
Is Jaspersoft Becoming Obsolete Due to AI?
Yes, if you want a modern, flexible, and interactive solution.
No, if you need classic, pre-defined reports for large enterprises.
Your Advantage as a Developer:
You can use AI to generate HTML reports faster.
The solution is more flexible than Jaspersoft and avoids unnecessary overhead.
Web technologies (HTML, JS, SQL) are easier to adapt than Jaspersoft’s XML-based format.
Final Thought: AI significantly reduces Jaspersoft’s advantages. A custom AI-powered HTML/PDF reporting solution is more future-proof.
]]>Is Jaspersoft Becoming Obsolete Due to AI?
Yes, if you want a modern, flexible, and interactive solution.
No, if you need classic, pre-defined reports for large enterprises.
What is Jaspersoft?
Jaspersoft is a Business Intelligence (BI) platform specializing in reporting, data analysis, and dashboards. It is primarily used to generate and distribute reports from various data sources and is one of the leading open-source solutions in this field.
Key Features of Jaspersoft
JasperReports – A powerful reporting engine for creating reports in multiple formats (PDF, HTML, Excel, CSV, XML, etc.).
JasperReports Server – A web application for managing, automating, and distributing reports.
JasperSoft Studio – A graphical tool for designing and creating reports (replacing the older iReport Designer).
Ad-hoc Reporting – Users can create reports flexibly via a web interface without programming knowledge.
Support for Multiple Data Sources – Compatible with SQL databases, NoSQL databases, cloud services, Excel files, etc.
Integration into Custom Applications – Jaspersoft can be embedded as a reporting solution in existing software.
Use Cases
Enterprises: Creating business reports and dashboards
Web Applications: Dynamic reporting within web apps
Data Analysis: Transforming raw data into visually understandable reports
ERP and CRM Systems: Enhancing systems with professional reporting functions
Jaspersoft is available as an open-source version (Community Edition) and in commercial editions with extended features. The commercial version is distributed by TIBCO Software.
Question:
As a developer, what advantages does Jaspersoft offer for my software compared to a custom solution using HTML as the reporting language?
Comparison: Jaspersoft vs. Custom HTML Reporting Solution
Advantages of Jaspersoft:
Ready-to-Use Reporting Engine:
Saves development time by eliminating the need to build your own reporting logic.
Offers features such as grouping, aggregations, charts, and export to PDF/Excel.
Visual Design:
Reports can be designed using JasperSoft Studio’s drag-and-drop interface.
Reduces the need for manual HTML/CSS/JS coding.
Data Connectivity and Processing:
Supports multiple data sources (SQL, NoSQL, web APIs, CSV, XML).
Built-in functions for calculations, summaries, pivot tables, etc.
Export Functionality:
Reports can be exported directly to PDF, Excel, CSV, Word, XML, or JSON.
A custom HTML solution would require additional development for conversions.
Automated Report Generation:
Reports can be scheduled and sent via email.
A custom HTML-based solution would require manual coding for this functionality.
Access Control:
Jaspersoft offers user and role-based access management.
A custom solution would require manual implementation.
Advantages of a Custom HTML Reporting Solution:
Maximum Flexibility:
You can build exactly what you need without the overhead of a BI tool.
Design, interactivity, and presentation can be fully customized.
Integration with Web Technologies:
If your application is already based on HTML/JS, reports can be seamlessly integrated.
HTML reports can be enhanced with JavaScript, Chart.js, D3.js, or Tailwind CSS.
Less Dependency on Third-Party Software:
No external BI engine or libraries required.
No licensing costs or update issues with commercial versions.
Better Mobile Adaptability:
HTML reports are inherently responsive, whereas PDF reports often have fixed layouts.
Live filtering and interactive elements are easier to implement.
Performance Advantage for Small Reports:
Jaspersoft generates numerous XML files, adding overhead.
A lightweight HTML solution can be faster for small data sets.
When is Each Option Better?
Criterion Jaspersoft Custom HTML Solution
Simple Reports (Invoices, Lists, Tables)Well-suited
Well-suited
Complex Reports with Charts & AggregationsAlready integrated
Requires custom development
Dynamic, Interactive Reports (Live Filtering, Drill-Downs)More static
Easily achievable with JS
Export to Multiple Formats (PDF, Excel, CSV)Out-of-the-box
Requires additional tools
Automated Reports (Scheduled Jobs, Email Dispatch)Built-in
Needs manual programming
Mobile Optimization & Responsive DesignMore static
Ideal for web apps
Dependency on Third-Party SoftwareYes (TIBCO Jaspersoft)
None
Conclusion:
If you need complex, static reports with export capabilities, Jaspersoft is a quick, ready-made solution.
If you need flexible, interactive reports for a web application, HTML with JS is the better choice.
For exporting HTML reports, you could use Puppeteer (Headless Chrome) to convert HTML pages into PDFs.
What is your specific use case? I can give you more targeted advice.
Question:
Are Jaspersoft’s advantages still relevant today—considering AI-powered report generation—or does it now hinder progress?
AI-Powered Development vs. Jaspersoft
1. Automated Report Generation with AI
Modern AI tools like ChatGPT (with code generation), Copilot, or AI assistants in BI tools can already:
Generate HTML/CSS/JavaScript for custom reports
Automate and optimize SQL queries
Analyze data and create visualizations (e.g., with Chart.js, D3.js)
Dynamically generate reports with minimal input
Conclusion: Jaspersoft’s traditional “drag-and-drop” approach is becoming less relevant as AI simplifies direct report generation in HTML, PDF, or Excel.
2. Flexibility vs. Jaspersoft’s Overhead
Jaspersoft is based on XML structures and templates, often leading to unnecessary complexity.
AI can directly generate HTML reports, avoiding the need to deal with Jaspersoft’s templates and syntax.
Modern HTML reports are more interactive than Jaspersoft’s mostly static PDFs.
Conclusion: AI can generate HTML reports more quickly and flexibly, eliminating the need for a heavy BI tool.
3. Adaptability and Evolution
Using Jaspersoft requires learning the framework and adapting to its limitations.
With an AI-powered custom solution, reports could be modified using natural language, e.g.:
“Create a sales report by region as a bar chart.”
“Add a table with the top customers from the last quarter.”
Conclusion: AI makes reporting more dynamic and adaptable, whereas Jaspersoft relies on static templates.
4. Performance and Scalability
Jaspersoft requires a dedicated server instance, adding overhead.
AI-generated HTML/PDF reports can run directly within a web app without an additional server.
Modern databases (e.g., ClickHouse, DuckDB) allow direct AI-powered queries, reducing the need for separate BI tools.
Conclusion: Using AI with HTML + direct database queries is more efficient than Jaspersoft.
Is Jaspersoft Becoming Obsolete Due to AI?
Yes, if you want a modern, flexible, and interactive solution.
No, if you need classic, pre-defined reports for large enterprises.
Your Advantage as a Developer:
You can use AI to generate HTML reports faster.
The solution is more flexible than Jaspersoft and avoids unnecessary overhead.
Web technologies (HTML, JS, SQL) are easier to adapt than Jaspersoft’s XML-based format.
Final Thought: AI significantly reduces Jaspersoft’s advantages. A custom AI-powered HTML/PDF reporting solution is more future-proof.
Code: Select all | Expand
#include "fivewin.ch"
function Main()
local oDlg, oFont, oBrw
local cSection :="Cust"
local cIniUser := cFilePath( GetModuleFileName( GetInstance() ) ) + "test.ini"
local cState := GetPvProfString(cSection, "State","", cIniuser) // load state from disk
USE CUSTOMER
DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-15
DEFINE DIALOG oDlg SIZE 700,400 PIXEL TRUEPIXEL FONT oFont ;
TITLE "Ctrl + MouseWheel Scroll to ZOOM/UNZOOM"
@ 20,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
DATASOURCE ALIAS() AUTOCOLS ;
CELL LINES NOBORDER
WITH OBJECT oBrw
:CreateFromCode()
END
oBrw:RestoreState( cState ) // set the old state saved
ACTIVATE DIALOG oDlg CENTERED ;
VALID (oBrw:nLen := 0 ,;
WritePProString(cSection,"State",oBrw:SaveState(),cIniUser)) // save the state into disk
RELEASE FONT oFont
return nil
Code: Select all | Expand
@ 103 , 10 XBROWSE oBrw ;
OF oDlg ;
SIZE -10 , 390 ;
PIXEL ;
DATASOURCE oDbf ;
COLUMNS aCols ;
AUTOSORT ;
FONT oFontNormal ;
NOBORDER ;
CELL ;
LINES ;
UPDATE
MyStyleBrowse(oBrw)
WITH OBJECT oBrw
:CreateFromCode()
END
Function MyStyleBrowse(oBrw)
local nColorHeader := DLG_nColorDlg
local nColorFooter := DLG_nColorDlg
local nColorPigiama := RGB(235,243,245)
WITH OBJECT oBrw
:nRowHeight := 25
:l2007 := .F.
:l2015 := .T.
:lRecordSelector := .F.
:nColDividerStyle := LINESTYLE_LIGHTGRAY
:nRowDividerStyle := LINESTYLE_LIGHTGRAY
:nStretchCol := STRETCHCOL_WIDEST
:nMarqueeStyle := MARQSTYLE_HIGHLROW
:lDisplayZeros := .f.
:lAllowRowSizing := .F.
:lAllowColSwapping := .F.
:lAllowColHiding := .F.
:lAllowSizings := .F.
:lDrawBorder := .t.
:nClrBorder := Rgb(195,195,185)
:lDrawBorderIn := .F.
:bRecSelHeader := ""
* :bClrSelFocus := { || {,rgb(255,255,224)}}
:bClrRowFocus := { || {, rgb(255,255,224)}}
* :nRecSelColor := nRgb( 245,244,234)
:bClrHeader := {|| { ,nColorHeader } }
:bClrFooter := {|| { ,nColorFooter } }
:bClrStd := { || { CLR_BLACK, If( oBrw:KeyNo % 2 == 0, CLR_WHITE,nColorPigiama ) } }
END
return nil
Code: Select all | Expand
#include "fivewin.ch"
function Main()
local oDlg, oFont, oBrw
local cSection :="Cust"
local cIniUser := cFilePath( GetModuleFileName( GetInstance() ) ) + "test.ini"
local cState := GetPvProfString(cSection, "State","", cIniuser) // load state from disk
USE CUSTOMER
DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-15
DEFINE DIALOG oDlg SIZE 700,400 PIXEL TRUEPIXEL FONT oFont ;
TITLE "Ctrl + MouseWheel Scroll to ZOOM/UNZOOM"
@ 20,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
DATASOURCE ALIAS() AUTOCOLS ;
CELL LINES NOBORDER
WITH OBJECT oBrw
:CreateFromCode()
END
oBrw:RestoreState( cState ) // set the old state saved
ACTIVATE DIALOG oDlg CENTERED ;
VALID (oBrw:nLen := 0 ,;
WritePProString(cSection,"State",oBrw:SaveState(),cIniUser)) // save the state into disk
RELEASE FONT oFont
return nil
Code: Select all | Expand
@ 103 , 10 XBROWSE oBrw ;
OF oDlg ;
SIZE -10 , 390 ;
PIXEL ;
DATASOURCE oDbf ;
COLUMNS aCols ;
AUTOSORT ;
FONT oFontNormal ;
NOBORDER ;
CELL ;
LINES ;
UPDATE
MyStyleBrowse(oBrw)
WITH OBJECT oBrw
:CreateFromCode()
END
Function MyStyleBrowse(oBrw)
local nColorHeader := DLG_nColorDlg
local nColorFooter := DLG_nColorDlg
local nColorPigiama := RGB(235,243,245)
WITH OBJECT oBrw
:nRowHeight := 25
:l2007 := .F.
:l2015 := .T.
:lRecordSelector := .F.
:nColDividerStyle := LINESTYLE_LIGHTGRAY
:nRowDividerStyle := LINESTYLE_LIGHTGRAY
:nStretchCol := STRETCHCOL_WIDEST
:nMarqueeStyle := MARQSTYLE_HIGHLROW
:lDisplayZeros := .f.
:lAllowRowSizing := .F.
:lAllowColSwapping := .F.
:lAllowColHiding := .F.
:lAllowSizings := .F.
:lDrawBorder := .t.
:nClrBorder := Rgb(195,195,185)
:lDrawBorderIn := .F.
:bRecSelHeader := ""
* :bClrSelFocus := { || {,rgb(255,255,224)}}
:bClrRowFocus := { || {, rgb(255,255,224)}}
* :nRecSelColor := nRgb( 245,244,234)
:bClrHeader := {|| { ,nColorHeader } }
:bClrFooter := {|| { ,nColorFooter } }
:bClrStd := { || { CLR_BLACK, If( oBrw:KeyNo % 2 == 0, CLR_WHITE,nColorPigiama ) } }
END
return nil
Code: Select all | Expand
// Using Windows 7 row selection colors in xbrowse
#include 'fivewin.ch'
#include 'xbrowse.ch'
STATIC nLastFontSize := 0
STATIC aLastColWidths := {}
STATIC nLastRowHeight := 0
STATIC c_path
function Main()
local oDlg, oBrw, oFont
c_path := cFilePath(GetModuleFileName( GetInstance() ) )
SET DATE ITALIAN
SET CENTURY ON
FwNumFormat( 'E', .t. )
USE CUSTOMER ALIAS CUST
DEFINE FONT oFont NAME 'Tahoma' SIZE 0, -16
DEFINE DIALOG oDlg SIZE 640,440 PIXEL ;
FONT oFont TITLE 'XBrowse Windows 7 Bars' ;
COLOR CLR_BLACK,RGB(250,250,250)
@ 0,20 ;
BUTTON "SaveZoomSetting" ;
ACTION SaveZoomSetting( oBrw ) ;
OF oDlg ;
PIXEL
@ 0,120 ;
BUTTON "LoadZoomSettings" ;
ACTION LoadZoomSettings( oBrw ) ;
OF oDlg ;
PIXEL
@ 20,20 XBROWSE oBrw OF oDlg SIZE -10,-20 PIXEL ;
COLUMNS "First", "State", "Age", "HireDate", "Salary" ;
ALIAS 'CUST' NOBORDER
oBrw:lRecordSelector := .f.
oBrw:nMarqueeStyle := MARQSTYLE_HIGHLWIN7
WITH OBJECT oBrw:InsCol( 1 )
:cHeader := " "
:bEditValue := { || If( AScan( oBrw:aSelected, oBrw:BookMark ) > 0, .t., nil ) }
:SetCheck()
:nHeadBmpNo := { || If( Len( oBrw:aSelected ) == oBrw:nLen, 1, 2 ) }
:bLClickHeader := { |r,c,f,oCol| If( Len( oBrw:aSelected ) == oBrw:nLen, ;
oBrw:SelectNone(), oBrw:SelectAll() ) }
END
oBrw:CreateFromCode()
ACTIVATE DIALOG oDlg CENTERED
RELEASE FONT oFont
return nil
FUNCTION SaveZoomSetting( oBrw )
LOCAL cIniFile := c_Path + "PROJECT.INI"
LOCAL nZoom, i
local cFontText
FontToText( oBrw:oFont )
MEMOWRIT( 'fontsave.txt', cFontText )
// Schriftgröße speichern
WritePProString( "Settings","FontSize", Str( Abs( oBrw:oFont:nHeight ) ), cIniFile )
// Zeilenhöhe speichern
WritePProString ( "Settings", "RowHeight", Str( oBrw:nRowHeight ) , cIniFile )
// Spaltenbreiten speichern
FOR i := 1 TO Len( oBrw:aCols )
WritePProString( "Columns", "Col" + Str(i), Str( oBrw:aCols[i]:nWidth ) , cIniFile )
NEXT
RETURN NIL
FUNCTION LoadZoomSettings( oBrw )
LOCAL cIniFile := c_Path + "PROJECT.INI"
LOCAL i, nWidth
// Schriftgröße setzen
LOCAL nFontSize := Val( GetPvProfString( "Settings", "FontSize", "12" , cIniFile ) )
oBrw:oFont := FontFromText( MemoRead( 'FONTSAVE.TXT' ) )
// Zeilenhöhe setzen
oBrw:nRowHeight := Val( GetPvProfString( "Settings", "RowHeight", "20" , cIniFile ))
// Spaltenbreiten wiederherstellen
FOR i := 1 TO Len( oBrw:aCols )
nWidth := Val( GetPvProfString( "Columns", "Col" + Str(i), Str(oBrw:aCols[i]:nWidth) , cIniFile ))
oBrw:aCols[i]:nWidth := nWidth
NEXT
oBrw:Refresh()
RETURN NIL
function FontToText( oFont )
return FW_ValToExp( { ;
oFont:cFaceName, 0, oFont:nInpHeight, .f., oFont:lBold, oFont:nEscapement, ;
oFont:nOrientation, nil, oFont:lItalic, oFont:lUnderline, oFont:lStrikeOut, ;
oFont:nCharSet, oFont:nOutPrecision, oFont:nClipPrecision, oFont:nQuality, ;
nil, oFont:nPitchFamily } )
//----------------------------------------------------------------------------//
function FontFromText( cText )
return HB_ExecFromArray( TFont(), "NEW", &cText )
//----------------------------------------------------------------------------//
Code: Select all | Expand
// Using Windows 7 row selection colors in xbrowse
#include 'fivewin.ch'
#include 'xbrowse.ch'
STATIC nLastFontSize := 0
STATIC aLastColWidths := {}
STATIC nLastRowHeight := 0
STATIC c_path
function Main()
local oDlg, oBrw, oFont
c_path := cFilePath(GetModuleFileName( GetInstance() ) )
SET DATE ITALIAN
SET CENTURY ON
FwNumFormat( 'E', .t. )
USE CUSTOMER ALIAS CUST
DEFINE FONT oFont NAME 'Tahoma' SIZE 0, -16
DEFINE DIALOG oDlg SIZE 640,440 PIXEL ;
FONT oFont TITLE 'XBrowse Windows 7 Bars' ;
COLOR CLR_BLACK,RGB(250,250,250)
@ 0,20 ;
BUTTON "SaveZoomSetting" ;
ACTION SaveZoomSetting( oBrw ) ;
OF oDlg ;
PIXEL
@ 0,120 ;
BUTTON "LoadZoomSettings" ;
ACTION LoadZoomSettings( oBrw ) ;
OF oDlg ;
PIXEL
@ 20,20 XBROWSE oBrw OF oDlg SIZE -10,-20 PIXEL ;
COLUMNS "First", "State", "Age", "HireDate", "Salary" ;
ALIAS 'CUST' NOBORDER
oBrw:lRecordSelector := .f.
oBrw:nMarqueeStyle := MARQSTYLE_HIGHLWIN7
WITH OBJECT oBrw:InsCol( 1 )
:cHeader := " "
:bEditValue := { || If( AScan( oBrw:aSelected, oBrw:BookMark ) > 0, .t., nil ) }
:SetCheck()
:nHeadBmpNo := { || If( Len( oBrw:aSelected ) == oBrw:nLen, 1, 2 ) }
:bLClickHeader := { |r,c,f,oCol| If( Len( oBrw:aSelected ) == oBrw:nLen, ;
oBrw:SelectNone(), oBrw:SelectAll() ) }
END
oBrw:CreateFromCode()
ACTIVATE DIALOG oDlg CENTERED
RELEASE FONT oFont
return nil
FUNCTION SaveZoomSetting( oBrw )
LOCAL cIniFile := c_Path + "PROJECT.INI"
LOCAL nZoom, i
local cFontText
FontToText( oBrw:oFont )
MEMOWRIT( 'fontsave.txt', cFontText )
// Schriftgröße speichern
WritePProString( "Settings","FontSize", Str( Abs( oBrw:oFont:nHeight ) ), cIniFile )
// Zeilenhöhe speichern
WritePProString ( "Settings", "RowHeight", Str( oBrw:nRowHeight ) , cIniFile )
// Spaltenbreiten speichern
FOR i := 1 TO Len( oBrw:aCols )
WritePProString( "Columns", "Col" + Str(i), Str( oBrw:aCols[i]:nWidth ) , cIniFile )
NEXT
RETURN NIL
FUNCTION LoadZoomSettings( oBrw )
LOCAL cIniFile := c_Path + "PROJECT.INI"
LOCAL i, nWidth
// Schriftgröße setzen
LOCAL nFontSize := Val( GetPvProfString( "Settings", "FontSize", "12" , cIniFile ) )
oBrw:oFont := FontFromText( MemoRead( 'FONTSAVE.TXT' ) )
// Zeilenhöhe setzen
oBrw:nRowHeight := Val( GetPvProfString( "Settings", "RowHeight", "20" , cIniFile ))
// Spaltenbreiten wiederherstellen
FOR i := 1 TO Len( oBrw:aCols )
nWidth := Val( GetPvProfString( "Columns", "Col" + Str(i), Str(oBrw:aCols[i]:nWidth) , cIniFile ))
oBrw:aCols[i]:nWidth := nWidth
NEXT
oBrw:Refresh()
RETURN NIL
function FontToText( oFont )
return FW_ValToExp( { ;
oFont:cFaceName, 0, oFont:nInpHeight, .f., oFont:lBold, oFont:nEscapement, ;
oFont:nOrientation, nil, oFont:lItalic, oFont:lUnderline, oFont:lStrikeOut, ;
oFont:nCharSet, oFont:nOutPrecision, oFont:nClipPrecision, oFont:nQuality, ;
nil, oFont:nPitchFamily } )
//----------------------------------------------------------------------------//
function FontFromText( cText )
return HB_ExecFromArray( TFont(), "NEW", &cText )
//----------------------------------------------------------------------------//
Code: Select all | Expand
// Using Windows 7 row selection colors in xbrowse
#include 'fivewin.ch'
#include 'xbrowse.ch'
STATIC nLastFontSize := 0
STATIC aLastColWidths := {}
STATIC nLastRowHeight := 0
STATIC c_path
function Main()
local oDlg, oBrw, oFont
c_path := cFilePath(GetModuleFileName( GetInstance() ) )
SET DATE ITALIAN
SET CENTURY ON
FwNumFormat( 'E', .t. )
USE CUSTOMER ALIAS CUST
DEFINE FONT oFont NAME 'Tahoma' SIZE 0, -16
DEFINE DIALOG oDlg SIZE 640,440 PIXEL ;
FONT oFont TITLE 'XBrowse Windows 7 Bars' ;
COLOR CLR_BLACK,RGB(250,250,250)
@ 0,20 ;
BUTTON "SaveZoomSetting" ;
ACTION SaveZoomSetting( oBrw ) ;
OF oDlg ;
PIXEL
@ 0,120 ;
BUTTON "LoadZoomSettings" ;
ACTION LoadZoomSettings( oBrw ) ;
OF oDlg ;
PIXEL
@ 20,20 XBROWSE oBrw OF oDlg SIZE -10,-20 PIXEL ;
COLUMNS "First", "State", "Age", "HireDate", "Salary" ;
ALIAS 'CUST' NOBORDER
oBrw:lRecordSelector := .f.
oBrw:nMarqueeStyle := MARQSTYLE_HIGHLWIN7
WITH OBJECT oBrw:InsCol( 1 )
:cHeader := " "
:bEditValue := { || If( AScan( oBrw:aSelected, oBrw:BookMark ) > 0, .t., nil ) }
:SetCheck()
:nHeadBmpNo := { || If( Len( oBrw:aSelected ) == oBrw:nLen, 1, 2 ) }
:bLClickHeader := { |r,c,f,oCol| If( Len( oBrw:aSelected ) == oBrw:nLen, ;
oBrw:SelectNone(), oBrw:SelectAll() ) }
END
oBrw:CreateFromCode()
ACTIVATE DIALOG oDlg CENTERED
RELEASE FONT oFont
return nil
FUNCTION SaveZoomSetting( oBrw )
LOCAL cIniFile := c_Path + "PROJECT.INI"
LOCAL nZoom, i
local cFontText
FontToText( oBrw:oFont )
MEMOWRIT( 'fontsave.txt', cFontText )
// Schriftgröße speichern
WritePProString( "Settings","FontSize", Str( Abs( oBrw:oFont:nHeight ) ), cIniFile )
// Zeilenhöhe speichern
WritePProString ( "Settings", "RowHeight", Str( oBrw:nRowHeight ) , cIniFile )
// Spaltenbreiten speichern
FOR i := 1 TO Len( oBrw:aCols )
WritePProString( "Columns", "Col" + Str(i), Str( oBrw:aCols[i]:nWidth ) , cIniFile )
NEXT
RETURN NIL
FUNCTION LoadZoomSettings( oBrw )
LOCAL cIniFile := c_Path + "PROJECT.INI"
LOCAL i, nWidth
// Schriftgröße setzen
LOCAL nFontSize := Val( GetPvProfString( "Settings", "FontSize", "12" , cIniFile ) )
oBrw:oFont := FontFromText( MemoRead( 'FONTSAVE.TXT' ) )
// Zeilenhöhe setzen
oBrw:nRowHeight := Val( GetPvProfString( "Settings", "RowHeight", "20" , cIniFile ))
// Spaltenbreiten wiederherstellen
FOR i := 1 TO Len( oBrw:aCols )
nWidth := Val( GetPvProfString( "Columns", "Col" + Str(i), Str(oBrw:aCols[i]:nWidth) , cIniFile ))
oBrw:aCols[i]:nWidth := nWidth
NEXT
oBrw:Refresh()
RETURN NIL
function FontToText( oFont )
return FW_ValToExp( { ;
oFont:cFaceName, 0, oFont:nInpHeight, .f., oFont:lBold, oFont:nEscapement, ;
oFont:nOrientation, nil, oFont:lItalic, oFont:lUnderline, oFont:lStrikeOut, ;
oFont:nCharSet, oFont:nOutPrecision, oFont:nClipPrecision, oFont:nQuality, ;
nil, oFont:nPitchFamily } )
//----------------------------------------------------------------------------//
function FontFromText( cText )
return HB_ExecFromArray( TFont(), "NEW", &cText )
//----------------------------------------------------------------------------//
Code: Select all | Expand
// Using Windows 7 row selection colors in xbrowse
#include 'fivewin.ch'
#include 'xbrowse.ch'
STATIC nLastFontSize := 0
STATIC aLastColWidths := {}
STATIC nLastRowHeight := 0
STATIC c_path
function Main()
local oDlg, oBrw, oFont
c_path := cFilePath(GetModuleFileName( GetInstance() ) )
SET DATE ITALIAN
SET CENTURY ON
FwNumFormat( 'E', .t. )
USE CUSTOMER ALIAS CUST
DEFINE FONT oFont NAME 'Tahoma' SIZE 0, -16
DEFINE DIALOG oDlg SIZE 640,440 PIXEL ;
FONT oFont TITLE 'XBrowse Windows 7 Bars' ;
COLOR CLR_BLACK,RGB(250,250,250)
@ 0,20 ;
BUTTON "SaveZoomSetting" ;
ACTION SaveZoomSetting( oBrw ) ;
OF oDlg ;
PIXEL
@ 0,120 ;
BUTTON "LoadZoomSettings" ;
ACTION LoadZoomSettings( oBrw ) ;
OF oDlg ;
PIXEL
@ 20,20 XBROWSE oBrw OF oDlg SIZE -10,-20 PIXEL ;
COLUMNS "First", "State", "Age", "HireDate", "Salary" ;
ALIAS 'CUST' NOBORDER
oBrw:lRecordSelector := .f.
oBrw:nMarqueeStyle := MARQSTYLE_HIGHLWIN7
WITH OBJECT oBrw:InsCol( 1 )
:cHeader := " "
:bEditValue := { || If( AScan( oBrw:aSelected, oBrw:BookMark ) > 0, .t., nil ) }
:SetCheck()
:nHeadBmpNo := { || If( Len( oBrw:aSelected ) == oBrw:nLen, 1, 2 ) }
:bLClickHeader := { |r,c,f,oCol| If( Len( oBrw:aSelected ) == oBrw:nLen, ;
oBrw:SelectNone(), oBrw:SelectAll() ) }
END
oBrw:CreateFromCode()
ACTIVATE DIALOG oDlg CENTERED
RELEASE FONT oFont
return nil
FUNCTION SaveZoomSetting( oBrw )
LOCAL cIniFile := c_Path + "PROJECT.INI"
LOCAL nZoom, i
local cFontText
FontToText( oBrw:oFont )
MEMOWRIT( 'fontsave.txt', cFontText )
// Schriftgröße speichern
WritePProString( "Settings","FontSize", Str( Abs( oBrw:oFont:nHeight ) ), cIniFile )
// Zeilenhöhe speichern
WritePProString ( "Settings", "RowHeight", Str( oBrw:nRowHeight ) , cIniFile )
// Spaltenbreiten speichern
FOR i := 1 TO Len( oBrw:aCols )
WritePProString( "Columns", "Col" + Str(i), Str( oBrw:aCols[i]:nWidth ) , cIniFile )
NEXT
RETURN NIL
FUNCTION LoadZoomSettings( oBrw )
LOCAL cIniFile := c_Path + "PROJECT.INI"
LOCAL i, nWidth
// Schriftgröße setzen
LOCAL nFontSize := Val( GetPvProfString( "Settings", "FontSize", "12" , cIniFile ) )
oBrw:oFont := FontFromText( MemoRead( 'FONTSAVE.TXT' ) )
// Zeilenhöhe setzen
oBrw:nRowHeight := Val( GetPvProfString( "Settings", "RowHeight", "20" , cIniFile ))
// Spaltenbreiten wiederherstellen
FOR i := 1 TO Len( oBrw:aCols )
nWidth := Val( GetPvProfString( "Columns", "Col" + Str(i), Str(oBrw:aCols[i]:nWidth) , cIniFile ))
oBrw:aCols[i]:nWidth := nWidth
NEXT
oBrw:Refresh()
RETURN NIL
function FontToText( oFont )
return FW_ValToExp( { ;
oFont:cFaceName, 0, oFont:nInpHeight, .f., oFont:lBold, oFont:nEscapement, ;
oFont:nOrientation, nil, oFont:lItalic, oFont:lUnderline, oFont:lStrikeOut, ;
oFont:nCharSet, oFont:nOutPrecision, oFont:nClipPrecision, oFont:nQuality, ;
nil, oFont:nPitchFamily } )
//----------------------------------------------------------------------------//
function FontFromText( cText )
return HB_ExecFromArray( TFont(), "NEW", &cText )
//----------------------------------------------------------------------------//
Code: Select all | Expand
DEFINE DIALOG oDlg SIZE nWd, nHt PIXEL TRUEPIXEL; //FONT oFont
COLOR CLR_BLACK, DLG_nColorDlg ;
STYLE nOR( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, ;
WS_MINIMIZEBOX) ICON oIcon
Code: Select all | Expand
DEFINE DIALOG oDlg SIZE nWd, nHt PIXEL TRUEPIXEL; //FONT oFont
COLOR CLR_BLACK, DLG_nColorDlg ;
STYLE nOR( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, ;
WS_MINIMIZEBOX) ICON oIcon
Code: Select all | Expand
REDEFINE GET o VAR ::oDbf:VarCNKey ID 104 OF oDlg BITMAP "Search16"
o:bAction := { || x := MyPopMnu( oDlg, o:nTop, o:nLeft, ::aContractors ) }
Code: Select all | Expand
REDEFINE GET o VAR ::oDbf:VarCNKey ID 104 OF oDlg BITMAP "Search16"
o:bAction := { || x := MyPopMnu( oDlg, o:nTop, o:nLeft, ::aContractors ) }
Code: Select all | Expand
//----------------------------------------------------------------------------//
Function MyPopMnu( oWnd, nR, nC, aChoices, aHeaders )
local oPop, oMenuItem
MENU oPop POPUP 2015 ;
SELECT aChoices COLUMNS 1, 2 HEADERS aHeaders ACTION {|x| oMenuItem := x }
ENDMENU
ACTIVATE MENU oPop AT nR, nC OF oWnd
Return oMenuItem
Code: Select all | Expand
//----------------------------------------------------------------------------//
Function MyPopMnu( oWnd, nR, nC, aChoices, aHeaders )
local oPop, oMenuItem
MENU oPop POPUP 2015 ;
SELECT aChoices COLUMNS 1, 2 HEADERS aHeaders ACTION {|x| oMenuItem := x }
ENDMENU
ACTIVATE MENU oPop AT nR, nC OF oWnd
Return oMenuItem
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oPrn
PRINTER oPrn
PAGE
oPrn:Say( "Hello World!" )
ENDPAGE
ENDPRINTER
return nil
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oPrn
PRINTER oPrn
PAGE
oPrn:Say( "Hello World!" )
ENDPAGE
ENDPRINTER
return nil
]]>Harbour is an open-source and cross-platform compiler that inherits and modernizes the Clipper language, born in the 80s for database-based management applications (especially in DOS). Harbour is designed to be 100% backwards compatible with Clipper, but adds modern features such as:
Support for current operating systems (Windows, Linux, macOS, etc.).
Object-oriented programming (OOP).
Native management of .DBF files (dBase database).
Integration with external libraries and C/C++ code.
Ability to create GUI (graphical user interfaces) and web applications through extensions.
FiveWin, on the other hand, is a commercial library developed by Antonio Linares (the same founder of Harbour) that extends Harbour to create GUI applications on Windows. It is famous for its simplicity and power in bringing the old Clipper code into a modern graphical environment, exploiting the Windows API. With FiveWin you can:
Create windows, dialogs, menus and graphical controls with just a few lines of code.
Maintain compatibility with existing Clipper code.
Develop desktop applications that look native on Windows.
How they work together
Harbour is the "engine" that compiles the code, while FiveWin is the "toolbox" for adding graphical functionality. A Harbour program with FiveWin might look like this (basic example):
harbour
#include "FiveWin.ch"
FUNCTION Main()
LOCAL oWnd
DEFINE WINDOW oWnd TITLE "Hello FiveWin!"
ACTIVATE WINDOW oWnd
RETURN NIL
This code creates a simple window with the title "Hello FiveWin!". Harbour compiles the source into an executable, and FiveWin provides the classes and functions (such as DEFINE WINDOW) for the graphical interface.
Current status (2025)
In 2025, Harbour is still alive thanks to a community of passionate developers, even if it is not mainstream like Python or JavaScript. FiveWin, while commercial, continues to be updated and is mostly used by those who maintain or modernize old Clipper applications. On X, there are still active discussions about Harbour, with users sharing snippets and solutions to integrate it with modern technologies like SQL or web frameworks (e.g. mod_harbour for Apache).
Strengths and limitations
Harbour strengths: Portability, speed (thanks to C compilation), native database management, open-source community.
FiveWin strengths: Ease of creating GUIs on Windows, integration with Harbour, technical support from FiveTech.
Limitations: Narrow niche, sometimes fragmented documentation (especially for Harbour), less appealing to new developers than trendy languages.
Imagine having to develop a fast, reliable and decent GUI management application, without spending a fortune or spending months learning a new ecosystem. Harbour with FiveWin is your secret weapon. If you have ever used Clipper or worked with .DBF databases, you will immediately feel at home: the code is intuitive, the syntax is familiar, and you can reuse what you already know. Harbour is open-source and free, so you don't have to shell out thousands of euros for licenses like with other tools. Then there is FiveWin: with a few lines you can create windows, buttons and menus on Windows, without going crazy with complicated modern frameworks like Qt or Electron. It is lightweight, fast, and gets straight to the point. Compared to trendy languages like Python or C#, it saves you hours of configuration and dependencies: compile, run, and it works. And if you have an old Clipper system to update? With Harbour/FiveWin you can bring it into 2025 without throwing away years of work. It's not a fad, it's a practical solution that saves you time and money."
Targeted examples for specific contexts
Experienced Clipper developer
Argument: "You've spent years perfecting Clipper code for management systems that are still running in companies. Why throw it all away and start over with Python or Java, learning endless libraries, when with Harbour you can take that code, compile it as is, and with FiveWin add a modern graphical interface? It's like giving a second life to your projects, without losing your know-how."
Small business with limited budget
Argument: "Do you want custom software without spending 1000 euros for Xbase++ or paying monthly subscriptions for cloud platforms? Harbour is free, FiveWin is cheap and gives you a solid desktop application that runs on Windows with no recurring costs. Write the code once, and you're done: no servers to maintain or frameworks to update every six months."
Developer considering Python or C#
Argument: "Python is great for AI and C# for enterprise apps, but for a management system with a .DBF database and a graphical interface? You get lost in configurations, external libraries and overhead. With Harbour/FiveWin you get straight to the point: you manage data with native commands like USE and INDEX, and with FiveWin you have a GUI ready in 10 lines. It's faster to develop and lighter to run. Why complicate your life?
]]>Harbour is an open-source and cross-platform compiler that inherits and modernizes the Clipper language, born in the 80s for database-based management applications (especially in DOS). Harbour is designed to be 100% backwards compatible with Clipper, but adds modern features such as:
Support for current operating systems (Windows, Linux, macOS, etc.).
Object-oriented programming (OOP).
Native management of .DBF files (dBase database).
Integration with external libraries and C/C++ code.
Ability to create GUI (graphical user interfaces) and web applications through extensions.
FiveWin, on the other hand, is a commercial library developed by Antonio Linares (the same founder of Harbour) that extends Harbour to create GUI applications on Windows. It is famous for its simplicity and power in bringing the old Clipper code into a modern graphical environment, exploiting the Windows API. With FiveWin you can:
Create windows, dialogs, menus and graphical controls with just a few lines of code.
Maintain compatibility with existing Clipper code.
Develop desktop applications that look native on Windows.
How they work together
Harbour is the "engine" that compiles the code, while FiveWin is the "toolbox" for adding graphical functionality. A Harbour program with FiveWin might look like this (basic example):
harbour
#include "FiveWin.ch"
FUNCTION Main()
LOCAL oWnd
DEFINE WINDOW oWnd TITLE "Hello FiveWin!"
ACTIVATE WINDOW oWnd
RETURN NIL
This code creates a simple window with the title "Hello FiveWin!". Harbour compiles the source into an executable, and FiveWin provides the classes and functions (such as DEFINE WINDOW) for the graphical interface.
Current status (2025)
In 2025, Harbour is still alive thanks to a community of passionate developers, even if it is not mainstream like Python or JavaScript. FiveWin, while commercial, continues to be updated and is mostly used by those who maintain or modernize old Clipper applications. On X, there are still active discussions about Harbour, with users sharing snippets and solutions to integrate it with modern technologies like SQL or web frameworks (e.g. mod_harbour for Apache).
Strengths and limitations
Harbour strengths: Portability, speed (thanks to C compilation), native database management, open-source community.
FiveWin strengths: Ease of creating GUIs on Windows, integration with Harbour, technical support from FiveTech.
Limitations: Narrow niche, sometimes fragmented documentation (especially for Harbour), less appealing to new developers than trendy languages.
Imagine having to develop a fast, reliable and decent GUI management application, without spending a fortune or spending months learning a new ecosystem. Harbour with FiveWin is your secret weapon. If you have ever used Clipper or worked with .DBF databases, you will immediately feel at home: the code is intuitive, the syntax is familiar, and you can reuse what you already know. Harbour is open-source and free, so you don't have to shell out thousands of euros for licenses like with other tools. Then there is FiveWin: with a few lines you can create windows, buttons and menus on Windows, without going crazy with complicated modern frameworks like Qt or Electron. It is lightweight, fast, and gets straight to the point. Compared to trendy languages like Python or C#, it saves you hours of configuration and dependencies: compile, run, and it works. And if you have an old Clipper system to update? With Harbour/FiveWin you can bring it into 2025 without throwing away years of work. It's not a fad, it's a practical solution that saves you time and money."
Targeted examples for specific contexts
Experienced Clipper developer
Argument: "You've spent years perfecting Clipper code for management systems that are still running in companies. Why throw it all away and start over with Python or Java, learning endless libraries, when with Harbour you can take that code, compile it as is, and with FiveWin add a modern graphical interface? It's like giving a second life to your projects, without losing your know-how."
Small business with limited budget
Argument: "Do you want custom software without spending 1000 euros for Xbase++ or paying monthly subscriptions for cloud platforms? Harbour is free, FiveWin is cheap and gives you a solid desktop application that runs on Windows with no recurring costs. Write the code once, and you're done: no servers to maintain or frameworks to update every six months."
Developer considering Python or C#
Argument: "Python is great for AI and C# for enterprise apps, but for a management system with a .DBF database and a graphical interface? You get lost in configurations, external libraries and overhead. With Harbour/FiveWin you get straight to the point: you manage data with native commands like USE and INDEX, and with FiveWin you have a GUI ready in 10 lines. It's faster to develop and lighter to run. Why complicate your life?
Code: Select all | Expand
PROCEDURE ze_fwTextMsg
LOCAL oDlgMsg
oDlgMsg := DlgTextMsgClass():New()
oDlgMsg:bCodeBlock := { || ThisTest( oDlgMsg ) }
oDlgMsg:Execute()
Code: Select all | Expand
CREATE CLASS DlgTextMsgClass
VAR xDlg
...
VAR bCodeBlock
METHOD Execute()
Code: Select all | Expand
METHOD Execute() CLASS DlgTextMsgClass
...
IF ::bCodeBlock == Nil
ACTIVATE DIALOG ::xDlg CENTERED
ELSE
ACTIVATE DIALOG ::xDlg CENTERED ;
ON INIT ( (Self), Eval( ::bCodeBlock ) )
ENDIF
...
Code: Select all | Expand
PROCEDURE ze_fwTextMsg
LOCAL oDlgMsg
oDlgMsg := DlgTextMsgClass():New()
oDlgMsg:bCodeBlock := { || ThisTest( oDlgMsg ) }
oDlgMsg:Execute()
Code: Select all | Expand
CREATE CLASS DlgTextMsgClass
VAR xDlg
...
VAR bCodeBlock
METHOD Execute()
Code: Select all | Expand
METHOD Execute() CLASS DlgTextMsgClass
...
IF ::bCodeBlock == Nil
ACTIVATE DIALOG ::xDlg CENTERED
ELSE
ACTIVATE DIALOG ::xDlg CENTERED ;
ON INIT ( (Self), Eval( ::bCodeBlock ) )
ENDIF
...
Code: Select all | Expand
METHOD Execute() CLASS DlgTextMsgClass
local oThis := Self
...
IF ::bCodeBlock == Nil
ACTIVATE DIALOG ::xDlg CENTERED
ELSE
ACTIVATE DIALOG ::xDlg CENTERED ;
ON INIT ( (Self), Eval( oThis:bCodeBlock ) )
ENDIF
...
Code: Select all | Expand
METHOD Execute() CLASS DlgTextMsgClass
local oThis := Self
...
IF ::bCodeBlock == Nil
ACTIVATE DIALOG ::xDlg CENTERED
ELSE
ACTIVATE DIALOG ::xDlg CENTERED ;
ON INIT ( (Self), Eval( oThis:bCodeBlock ) )
ENDIF
...
Code: Select all | Expand
IF ::bCodeBlock != Nil
::xDlg:bInit := ::bCodeBlock
ENDIF
ACTIVATE DIALOG ::xDLG CENTERED
Code: Select all | Expand
[{|Self|<uInit>}]
Code: Select all | Expand
IF ::bCodeBlock != Nil
::xDlg:bInit := ::bCodeBlock
ENDIF
ACTIVATE DIALOG ::xDLG CENTERED
Code: Select all | Expand
[{|Self|<uInit>}]
]]>*-----------------------------------*
FUNCTION SaveImage( cFile, cNewFile )
local oImage
local aImg, nQuality
nQuality := iif(filesize(cFile)>200000,15, iif(filesize(cFile)>150000, 20, 25 ))
if filesize(cFile) >= 32768 // 65536
oImage := GdiBmp():New( cFile )
oImage:Resize( oImage:GetWidth()/1.3, oImage:GetHeight()/1.3 )
oImage:Save( cNewFile )
oImage:End()
aImg := Fw_ReadImage( nil, cFile )
FW_SaveImage( aImg[ 1 ], cNewFile, nQuality )
PalBmpFree( aImg )
Memory( -1 )
end
Return nil
]]>*-----------------------------------*
FUNCTION SaveImage( cFile, cNewFile )
local oImage
local aImg, nQuality
nQuality := iif(filesize(cFile)>200000,15, iif(filesize(cFile)>150000, 20, 25 ))
if filesize(cFile) >= 32768 // 65536
oImage := GdiBmp():New( cFile )
oImage:Resize( oImage:GetWidth()/1.3, oImage:GetHeight()/1.3 )
oImage:Save( cNewFile )
oImage:End()
aImg := Fw_ReadImage( nil, cFile )
FW_SaveImage( aImg[ 1 ], cNewFile, nQuality )
PalBmpFree( aImg )
Memory( -1 )
end
Return nil
]]>Antonio Linares wrote: Tue Mar 04, 2025 6:23 pm Dear Dutch,
Please replace Memory( -1 ) with:
SysRefresh()
hb_gcAll()
]]>Antonio Linares wrote: Tue Mar 04, 2025 6:23 pm Dear Dutch,
Please replace Memory( -1 ) with:
SysRefresh()
hb_gcAll()
Code: Select all | Expand
/* oImage := GdiBmp():New( cFile )
oImage:Resize( oImage:GetWidth()/1.3, oImage:GetHeight()/1.3 )
oImage:Save( cNewFile )
oImage:End()
*/
Code: Select all | Expand
/* oImage := GdiBmp():New( cFile )
oImage:Resize( oImage:GetWidth()/1.3, oImage:GetHeight()/1.3 )
oImage:Save( cNewFile )
oImage:End()
*/
Code: Select all | Expand
#include "fivewin.ch"
Function Main()
// SaveImage( "olga1.jpg", "olga2.jpg", "olga3.jpg" )
SaveImage( "fivedit.jpg", "fivedit2.jpg", "fivedit3.jpg" )
Return nil
FUNCTION SaveImage( cFile, cNewFile, cOtherFile )
local oImage
local aImg
local nQuality
nQuality := iif(filesize(cFile)>200000,15, iif(filesize(cFile)>150000, 20, 25 ))
// if filesize(cFile) >= 32768 // 65536
oImage := GdiBmp():New( cFile )
// ? oImage:GetWidth()
oImage:Resize( oImage:GetWidth()/1.3, oImage:GetHeight()/1.3 )
oImage:Save( cNewFile )
oImage:End()
aImg := Fw_ReadImage( nil, cFile )
// xbrowse( aImg )
FW_SaveImage( aImg[ 1 ], cOtherFile, nQuality )
PalBmpFree( aImg )
// Memory( -1 )
// end
Return nil
Code: Select all | Expand
#include "fivewin.ch"
Function Main()
// SaveImage( "olga1.jpg", "olga2.jpg", "olga3.jpg" )
SaveImage( "fivedit.jpg", "fivedit2.jpg", "fivedit3.jpg" )
Return nil
FUNCTION SaveImage( cFile, cNewFile, cOtherFile )
local oImage
local aImg
local nQuality
nQuality := iif(filesize(cFile)>200000,15, iif(filesize(cFile)>150000, 20, 25 ))
// if filesize(cFile) >= 32768 // 65536
oImage := GdiBmp():New( cFile )
// ? oImage:GetWidth()
oImage:Resize( oImage:GetWidth()/1.3, oImage:GetHeight()/1.3 )
oImage:Save( cNewFile )
oImage:End()
aImg := Fw_ReadImage( nil, cFile )
// xbrowse( aImg )
FW_SaveImage( aImg[ 1 ], cOtherFile, nQuality )
PalBmpFree( aImg )
// Memory( -1 )
// end
Return nil
]]>Antonio Linares wrote: Wed Mar 05, 2025 6:53 am Dear Dutch,
many thanks for your feedback.
Ok, first lets try to identify where the memory leak comes from.
Please comment out this section and run your code again:waiting for your newsCode: Select all | Expand
/* oImage := GdiBmp():New( cFile ) oImage:Resize( oImage:GetWidth()/1.3, oImage:GetHeight()/1.3 ) oImage:Save( cNewFile ) oImage:End() */
]]>Antonio Linares wrote: Wed Mar 05, 2025 6:53 am Dear Dutch,
many thanks for your feedback.
Ok, first lets try to identify where the memory leak comes from.
Please comment out this section and run your code again:waiting for your newsCode: Select all | Expand
/* oImage := GdiBmp():New( cFile ) oImage:Resize( oImage:GetWidth()/1.3, oImage:GetHeight()/1.3 ) oImage:Save( cNewFile ) oImage:End() */
Code: Select all | Expand
do while !oRs:eof()
Downloadfile( oRs:image, cFile ) // function download file from oRs (blob in MariaDb)
SaveImage( cFile, cNewFile )
oRs:Skip()
end
]]>cnavarro wrote: Wed Mar 05, 2025 10:44 am Dear Dutch
This code run ok for me
I have tried many files and have not found any problems
I have not needed to clear the memory
Can you send me one of the files you are using for testing?
Code: Select all | Expand
#include "fivewin.ch" Function Main() // SaveImage( "olga1.jpg", "olga2.jpg", "olga3.jpg" ) SaveImage( "fivedit.jpg", "fivedit2.jpg", "fivedit3.jpg" ) Return nil FUNCTION SaveImage( cFile, cNewFile, cOtherFile ) local oImage local aImg local nQuality nQuality := iif(filesize(cFile)>200000,15, iif(filesize(cFile)>150000, 20, 25 )) // if filesize(cFile) >= 32768 // 65536 oImage := GdiBmp():New( cFile ) // ? oImage:GetWidth() oImage:Resize( oImage:GetWidth()/1.3, oImage:GetHeight()/1.3 ) oImage:Save( cNewFile ) oImage:End() aImg := Fw_ReadImage( nil, cFile ) // xbrowse( aImg ) FW_SaveImage( aImg[ 1 ], cOtherFile, nQuality ) PalBmpFree( aImg ) // Memory( -1 ) // end Return nil
Code: Select all | Expand
do while !oRs:eof()
Downloadfile( oRs:image, cFile ) // function download file from oRs (blob in MariaDb)
SaveImage( cFile, cNewFile )
oRs:Skip()
end
]]>cnavarro wrote: Wed Mar 05, 2025 10:44 am Dear Dutch
This code run ok for me
I have tried many files and have not found any problems
I have not needed to clear the memory
Can you send me one of the files you are using for testing?
Code: Select all | Expand
#include "fivewin.ch" Function Main() // SaveImage( "olga1.jpg", "olga2.jpg", "olga3.jpg" ) SaveImage( "fivedit.jpg", "fivedit2.jpg", "fivedit3.jpg" ) Return nil FUNCTION SaveImage( cFile, cNewFile, cOtherFile ) local oImage local aImg local nQuality nQuality := iif(filesize(cFile)>200000,15, iif(filesize(cFile)>150000, 20, 25 )) // if filesize(cFile) >= 32768 // 65536 oImage := GdiBmp():New( cFile ) // ? oImage:GetWidth() oImage:Resize( oImage:GetWidth()/1.3, oImage:GetHeight()/1.3 ) oImage:Save( cNewFile ) oImage:End() aImg := Fw_ReadImage( nil, cFile ) // xbrowse( aImg ) FW_SaveImage( aImg[ 1 ], cOtherFile, nQuality ) PalBmpFree( aImg ) // Memory( -1 ) // end Return nil
Code: Select all | Expand
// C:\FWH\SAMPLES\DUTCH1.PRG
#include "FiveWin.ch"
FUNCTION Main()
LOCAL cFile := "..\BitMaps\OLGA1.jpg"
LOCAL cNewFile := "C:\TMP\OLGANEW.jpg"
HB_GCALL( .F. )
CLEAR MEMORY // Optional
SaveImage( cFile, cNewFile )
RETURN NIL
FUNCTION SaveImage( cFile, cNewFile )
LOCAL oImage
LOCAL aImg, nQuality
nQuality := IIF( Filesize( cFile ) > 200000, 15, ;
IIF( Filesize( cFile ) > 150000, 20, 25 ) )
IF Filesize( cFile ) >= 32768 // 65536
oImage := GdiBmp():New( cFile )
oImage:Resize( oImage:GetWidth() / 1.3, oImage:GetHeight() / 1.3 )
oImage:Save( cNewFile )
oImage:End()
SYSREFRESH()
aImg := Fw_ReadImage( NIL, cFile )
FW_SaveImage( aImg[ 1 ], cNewFile, nQuality )
PalBmpFree( aImg )
ENDIF
HB_GCALL( .T. )
CLEAR MEMORY
IF FILE( "C:\TMP\OLGANEW.JPG" )
? "Listo, Done! check your image file if it is not corrupt!"
ENDIF
RETURN NIL
// FIN / END
Regards, saludos.]]>Code: Select all | Expand
// C:\FWH\SAMPLES\DUTCH1.PRG
#include "FiveWin.ch"
FUNCTION Main()
LOCAL cFile := "..\BitMaps\OLGA1.jpg"
LOCAL cNewFile := "C:\TMP\OLGANEW.jpg"
HB_GCALL( .F. )
CLEAR MEMORY // Optional
SaveImage( cFile, cNewFile )
RETURN NIL
FUNCTION SaveImage( cFile, cNewFile )
LOCAL oImage
LOCAL aImg, nQuality
nQuality := IIF( Filesize( cFile ) > 200000, 15, ;
IIF( Filesize( cFile ) > 150000, 20, 25 ) )
IF Filesize( cFile ) >= 32768 // 65536
oImage := GdiBmp():New( cFile )
oImage:Resize( oImage:GetWidth() / 1.3, oImage:GetHeight() / 1.3 )
oImage:Save( cNewFile )
oImage:End()
SYSREFRESH()
aImg := Fw_ReadImage( NIL, cFile )
FW_SaveImage( aImg[ 1 ], cNewFile, nQuality )
PalBmpFree( aImg )
ENDIF
HB_GCALL( .T. )
CLEAR MEMORY
IF FILE( "C:\TMP\OLGANEW.JPG" )
? "Listo, Done! check your image file if it is not corrupt!"
ENDIF
RETURN NIL
// FIN / END
Regards, saludos.]]>Thank you in advance,]]>#include 'FiveWin.ch'
static oWnd, oServer
static cCurDir, cTempPath
*-------------------------*
Function Main
local oBtn, oErr
Public oFont
Public cDatabase
cDatabase := 'backup'
FW_SetUnicode( .T. )
MYSQL_TinyIntAsLogical( .T. )
SET EPOCH TO year(date())-90
SET DATE FORMAT TO 'DD/MM/YY'
SET TIME FORMAT TO 'hh:mm:ss'
SET DATE BRITISH
TRY
FWCONNECT oServer HOST '127.0.0.1' USER 'admin' PASSWORD 'nimda' DATABASE cDatabase PORT 3306
CATCH oErr
MsgStop( hb_dumpvar( oErr ) )
return nil
END
oFont := TFont():New( 'Tahoma',, -14, .F., .F., 0, 0, 400, .F., .F., .F., 222, 3, 2, 1, , 34 )
cCurDir := curdrive()+':\'+curdir()+'\'
if !lIsDir(cCurDir+'TEMP')
lMkDir(cCurDir+'TEMP')
endif
cTempPath := cCurDir+'TEMP\'
DEFINE WINDOW oWnd FROM 0, 0 TO 400, 600 PIXEL TITLE 'Test Resize Image'
oWnd:SetFont( oFont )
@ 100, 100 BUTTON oBtn PROMPT 'Run Now' SIZE 80, 40 PIXEL ACTION ReSizeGstImg() // TestBrow() //
ACTIVATE WINDOW oWNd CENTER
return nil
//*------------------------*
//Procedure TestBrow
//local GSI
//GSI := oServer:RowSet('SELECT * FROM gstimg ')
//
//XBROWSER GSI
//
//GSI:Close()
//return
*---------------------------*
Procedure ReSizeGstImg()
local nStart, nEnd
nStart := nEnd := 0
GetImgId( @nStart, @nEnd )
if nStart > 0 .and. nEnd > nStart
if MsgYesNo('Start Resize Guest Image?')
MsgMeter2( {|oMeter, oText, oDlg, lEnd| ResizeImgNow( oMeter, nStart, nEnd ) }, 'Guest', "Resize Process" )
MsgWait("Resize Guest Image complete",,2)
end
end
return
*---------------------------------------------*
Procedure ResizeImgNow(oMeter, nStart, nEnd )
local GSI
local cTempFile, cTmpFile, cFileName, nTry, nTotalRec, nPer, n
nPer := 9
n := 0
GSI := oServer:RowSet('SELECT * FROM gstimg WHERE gsi_id>='+ltrim(str(nStart))+' and gsi_id<='+ltrim(str(nEnd)))
if (nTotalRec := GSI:KeyCount()) > 0
do while !GSI:eof()
n++
cTmpFile := cTempPath+ltrim(str(GSI:gsi_id))+'B.JPG'
cTempFile := cTempPath+ltrim(str(GSI:gsi_id))+'A.JPG'
DownloadFile( GSI, 'gsi_image1', cTempFile )
if file(cTempFile)
if filesize(cTempFile) > 32768
nTry := 0
Saveimage( cTempFile, cTmpFile )
Memory( -1 )
cFileName := StrTran( cTmpFile, '\', '/' )
oServer:Execute('UPDATE gstimg SET gsi_image1=LOAD_FILE("'+cFileName+'") WHERE gsi_id='+ltrim(str(GSI:gsi_id)))
end
end
GSI:Skip()
if ((n*100)/nTotalRec) > nPer
nPer += 10
oMeter:SetPos( nPer )
end
SysRefresh()
end
GSI:Close()
end
return
*-----------------------------------*
FUNCTION SaveImage( cFile, cNewFile )
local oImage
local aImg, nQuality, nMultiple
nQuality := iif(filesize(cFile)>200000,15, iif(filesize(cFile)>150000, 20, 25 ))
oImage := GdiBmp():New( cFile )
nMultiple:= 1-round((oImage:GetWidth()-800)/(oImage:GetWidth()),2)
oImage:Resize( oImage:GetWidth()*nMultiple, oImage:GetHeight()*nMultiple )
oImage:Save( cNewFile )
oImage:End()
aImg := Fw_ReadImage( nil, cNewFile )
FW_SaveImage( aImg[ 1 ], cNewFile, nQuality )
PalBmpFree( aImg )
return nil
*---------------------------------*
Procedure GetImgId( nStart, nEnd )
local oDlg, oGet[2], oSay, oBtn
local nNum1, nNum2, lSave
lSave := .F.
nNum1 := 0
nNum2 := 0
DEFINE DIALOG oDlg FROM 0, 0 TO 100, 320 PIXEL TITLE 'Guest Image Id' ;
FONT MEMVAR->oFont
oDlg:lHelpIcon := .F.
@ 12,10 SAY oSay PROMPT 'Start Id' SIZE 50, 13 PIXEL OF oDlg
@ 30,10 SAY oSay PROMPT 'End Id' SIZE 50, 13 PIXEL OF oDlg
@ 10,60 GET oGet[1] VAR nNum1 SIZE 50, 13 PIXEL OF oDlg VALID nNum1 > 0 ;
PICTURE '9999999999' ;
RIGHT
@ 28,60 GET oGet[2] VAR nNum2 SIZE 50, 13 PIXEL OF oDlg VALID nNum2 > 0 .and. nNum2 > nNum1;
PICTURE '9999999999' ;
RIGHT
@ 10,115 BUTTON oBtn PROMPT 'Save' SIZE 40, 30 PIXEL OF oDlg ;
ACTION (lSave := .T. , oDlg:End())
ACTIVATE DIALOG oDlg CENTER
if lSave
nStart:= nNum1
nEnd := nNum2
else
nStart:= 0
nEnd := 0
end
return
*---------------------------------------------------------------------------*
Procedure DownloadFile( oRs, cFieldName, cFileName )
local nBufSize, cBuffer, hTarget, oFile, cDateTime
cDateTime := ''
if file(cFileName)
ferase(cFileName)
end
if !empty(oRs:FieldGet(cFieldName)) .and. !file(cFileName)
Memory( -1 )
nBufSize:=10485760
cBuffer:=Space(nBufSize)
hTarget := FCreate(cFileName)
oFile := oRs:FieldGet(cFieldName)
FWrite( hTarget, oFile )
FClose( hTarget )
end
return
*----------------------------------------------------*
function MsgMeter2( bAction, cMsg, cTitle, lBoton )
local oDlg, oMeter, oBtn //, oFont
local lEnd := .f., lCancel := .f.
local nVal := 0
DEFAULT bAction := { || nil },;
cMsg := "Progressing...", cTitle := "Progress Bar",;
lBoton := .f.
Private oText
DEFINE DIALOG oDlg FROM 1, 1 TO 120, 340 PIXEL TITLE cTitle ;
FONT MEMVAR->oFont
oDlg:lHelpIcon := .F.
@ 10, 10 SAY oText VAR cMsg SIZE 130, 9 OF oDlg PIXEL
@ 30, 10 PROGRESS oMeter SIZE 150, 12 OF oDlg PIXEL
if lBoton
@ 50, 200 BUTTON oBtn PROMPT "Cancel" OF oDlg ;
ACTION ( lEnd:= .t., lCancel:= .t. ) SIZE 40, 15 PIXEL
endif
oDlg:bStart = { || Eval( bAction, oMeter, oText, oDlg, @lEnd, oBtn ),;
lEnd := .t., oDlg:End() }
ACTIVATE DIALOG oDlg CENTERED ;
ON INIT (oMeter:SetRange( 0, 100 ), oMeter:SetStep( 1 )) ;
VALID lEnd
return lCancel
Thank you in advance,]]>#include 'FiveWin.ch'
static oWnd, oServer
static cCurDir, cTempPath
*-------------------------*
Function Main
local oBtn, oErr
Public oFont
Public cDatabase
cDatabase := 'backup'
FW_SetUnicode( .T. )
MYSQL_TinyIntAsLogical( .T. )
SET EPOCH TO year(date())-90
SET DATE FORMAT TO 'DD/MM/YY'
SET TIME FORMAT TO 'hh:mm:ss'
SET DATE BRITISH
TRY
FWCONNECT oServer HOST '127.0.0.1' USER 'admin' PASSWORD 'nimda' DATABASE cDatabase PORT 3306
CATCH oErr
MsgStop( hb_dumpvar( oErr ) )
return nil
END
oFont := TFont():New( 'Tahoma',, -14, .F., .F., 0, 0, 400, .F., .F., .F., 222, 3, 2, 1, , 34 )
cCurDir := curdrive()+':\'+curdir()+'\'
if !lIsDir(cCurDir+'TEMP')
lMkDir(cCurDir+'TEMP')
endif
cTempPath := cCurDir+'TEMP\'
DEFINE WINDOW oWnd FROM 0, 0 TO 400, 600 PIXEL TITLE 'Test Resize Image'
oWnd:SetFont( oFont )
@ 100, 100 BUTTON oBtn PROMPT 'Run Now' SIZE 80, 40 PIXEL ACTION ReSizeGstImg() // TestBrow() //
ACTIVATE WINDOW oWNd CENTER
return nil
//*------------------------*
//Procedure TestBrow
//local GSI
//GSI := oServer:RowSet('SELECT * FROM gstimg ')
//
//XBROWSER GSI
//
//GSI:Close()
//return
*---------------------------*
Procedure ReSizeGstImg()
local nStart, nEnd
nStart := nEnd := 0
GetImgId( @nStart, @nEnd )
if nStart > 0 .and. nEnd > nStart
if MsgYesNo('Start Resize Guest Image?')
MsgMeter2( {|oMeter, oText, oDlg, lEnd| ResizeImgNow( oMeter, nStart, nEnd ) }, 'Guest', "Resize Process" )
MsgWait("Resize Guest Image complete",,2)
end
end
return
*---------------------------------------------*
Procedure ResizeImgNow(oMeter, nStart, nEnd )
local GSI
local cTempFile, cTmpFile, cFileName, nTry, nTotalRec, nPer, n
nPer := 9
n := 0
GSI := oServer:RowSet('SELECT * FROM gstimg WHERE gsi_id>='+ltrim(str(nStart))+' and gsi_id<='+ltrim(str(nEnd)))
if (nTotalRec := GSI:KeyCount()) > 0
do while !GSI:eof()
n++
cTmpFile := cTempPath+ltrim(str(GSI:gsi_id))+'B.JPG'
cTempFile := cTempPath+ltrim(str(GSI:gsi_id))+'A.JPG'
DownloadFile( GSI, 'gsi_image1', cTempFile )
if file(cTempFile)
if filesize(cTempFile) > 32768
nTry := 0
Saveimage( cTempFile, cTmpFile )
Memory( -1 )
cFileName := StrTran( cTmpFile, '\', '/' )
oServer:Execute('UPDATE gstimg SET gsi_image1=LOAD_FILE("'+cFileName+'") WHERE gsi_id='+ltrim(str(GSI:gsi_id)))
end
end
GSI:Skip()
if ((n*100)/nTotalRec) > nPer
nPer += 10
oMeter:SetPos( nPer )
end
SysRefresh()
end
GSI:Close()
end
return
*-----------------------------------*
FUNCTION SaveImage( cFile, cNewFile )
local oImage
local aImg, nQuality, nMultiple
nQuality := iif(filesize(cFile)>200000,15, iif(filesize(cFile)>150000, 20, 25 ))
oImage := GdiBmp():New( cFile )
nMultiple:= 1-round((oImage:GetWidth()-800)/(oImage:GetWidth()),2)
oImage:Resize( oImage:GetWidth()*nMultiple, oImage:GetHeight()*nMultiple )
oImage:Save( cNewFile )
oImage:End()
aImg := Fw_ReadImage( nil, cNewFile )
FW_SaveImage( aImg[ 1 ], cNewFile, nQuality )
PalBmpFree( aImg )
return nil
*---------------------------------*
Procedure GetImgId( nStart, nEnd )
local oDlg, oGet[2], oSay, oBtn
local nNum1, nNum2, lSave
lSave := .F.
nNum1 := 0
nNum2 := 0
DEFINE DIALOG oDlg FROM 0, 0 TO 100, 320 PIXEL TITLE 'Guest Image Id' ;
FONT MEMVAR->oFont
oDlg:lHelpIcon := .F.
@ 12,10 SAY oSay PROMPT 'Start Id' SIZE 50, 13 PIXEL OF oDlg
@ 30,10 SAY oSay PROMPT 'End Id' SIZE 50, 13 PIXEL OF oDlg
@ 10,60 GET oGet[1] VAR nNum1 SIZE 50, 13 PIXEL OF oDlg VALID nNum1 > 0 ;
PICTURE '9999999999' ;
RIGHT
@ 28,60 GET oGet[2] VAR nNum2 SIZE 50, 13 PIXEL OF oDlg VALID nNum2 > 0 .and. nNum2 > nNum1;
PICTURE '9999999999' ;
RIGHT
@ 10,115 BUTTON oBtn PROMPT 'Save' SIZE 40, 30 PIXEL OF oDlg ;
ACTION (lSave := .T. , oDlg:End())
ACTIVATE DIALOG oDlg CENTER
if lSave
nStart:= nNum1
nEnd := nNum2
else
nStart:= 0
nEnd := 0
end
return
*---------------------------------------------------------------------------*
Procedure DownloadFile( oRs, cFieldName, cFileName )
local nBufSize, cBuffer, hTarget, oFile, cDateTime
cDateTime := ''
if file(cFileName)
ferase(cFileName)
end
if !empty(oRs:FieldGet(cFieldName)) .and. !file(cFileName)
Memory( -1 )
nBufSize:=10485760
cBuffer:=Space(nBufSize)
hTarget := FCreate(cFileName)
oFile := oRs:FieldGet(cFieldName)
FWrite( hTarget, oFile )
FClose( hTarget )
end
return
*----------------------------------------------------*
function MsgMeter2( bAction, cMsg, cTitle, lBoton )
local oDlg, oMeter, oBtn //, oFont
local lEnd := .f., lCancel := .f.
local nVal := 0
DEFAULT bAction := { || nil },;
cMsg := "Progressing...", cTitle := "Progress Bar",;
lBoton := .f.
Private oText
DEFINE DIALOG oDlg FROM 1, 1 TO 120, 340 PIXEL TITLE cTitle ;
FONT MEMVAR->oFont
oDlg:lHelpIcon := .F.
@ 10, 10 SAY oText VAR cMsg SIZE 130, 9 OF oDlg PIXEL
@ 30, 10 PROGRESS oMeter SIZE 150, 12 OF oDlg PIXEL
if lBoton
@ 50, 200 BUTTON oBtn PROMPT "Cancel" OF oDlg ;
ACTION ( lEnd:= .t., lCancel:= .t. ) SIZE 40, 15 PIXEL
endif
oDlg:bStart = { || Eval( bAction, oMeter, oText, oDlg, @lEnd, oBtn ),;
lEnd := .t., oDlg:End() }
ACTIVATE DIALOG oDlg CENTERED ;
ON INIT (oMeter:SetRange( 0, 100 ), oMeter:SetStep( 1 )) ;
VALID lEnd
return lCancel
]]>Antonio Linares wrote: Wed Mar 05, 2025 5:54 pm Dear Dutch,
Could you please comment this line and try it again ? Trying to locate the memory leak, thanks
// keep commented the above code
aImg := Fw_ReadImage( nil, cFile )
// FW_SaveImage( aImg[ 1 ], cNewFile, nQuality )
PalBmpFree( aImg )
]]>Antonio Linares wrote: Wed Mar 05, 2025 5:54 pm Dear Dutch,
Could you please comment this line and try it again ? Trying to locate the memory leak, thanks
// keep commented the above code
aImg := Fw_ReadImage( nil, cFile )
// FW_SaveImage( aImg[ 1 ], cNewFile, nQuality )
PalBmpFree( aImg )
]]>Antonio Linares wrote: Thu Mar 06, 2025 7:44 am Dear Dutch,
I am emailing you a modified fivehc.lib
Please try your code with it
many thanks
]]>Antonio Linares wrote: Thu Mar 06, 2025 7:44 am Dear Dutch,
I am emailing you a modified fivehc.lib
Please try your code with it
many thanks
]]>Antonio Linares wrote: Fri Mar 07, 2025 6:12 am Dear Dutch,
I have built and test your app using Harbour and xHarbour and FWH 25.01
I have sent you everything to test it. It seems to work fine.
waiting for your feedback, thanks
]]>Antonio Linares wrote: Fri Mar 07, 2025 6:12 am Dear Dutch,
I have built and test your app using Harbour and xHarbour and FWH 25.01
I have sent you everything to test it. It seems to work fine.
waiting for your feedback, thanks
Code: Select all | Expand
Stack Calls
===========
Called from: backupsql.prg => AEVAL( 0 )
Called from: .\source\internal\fwmaria.prg => FWMARIACONNECTION:BACKUPTABLE( 9754 )
Called from: .\source\internal\fwmaria.prg => FWMARIACONNECTION:BACKUP( 9652 )
Code: Select all | Expand
Stack Calls
===========
Called from: backupsql.prg => AEVAL( 0 )
Called from: .\source\internal\fwmaria.prg => FWMARIACONNECTION:BACKUPTABLE( 9754 )
Called from: .\source\internal\fwmaria.prg => FWMARIACONNECTION:BACKUP( 9652 )
Code: Select all | Expand
oCn:Backup( { cTable }, cDest )
Code: Select all | Expand
oCn:Backup( { cTable }, cDest )
Code: Select all | Expand
aCols := ::Execute( "SHOW FULL COLUMNS FROM " + cTable )
is not return an array but nil or other value.Code: Select all | Expand
aCols := ::Execute( "SHOW FULL COLUMNS FROM " + cTable )
is not return an array but nil or other value.Code: Select all | Expand
oCn := maria_Connect( ... )
oCn:lShowErrors := .t.
oCn:lLogErr := .t.
oCn:BackUp( <db>, <dst> )
? "done"
return nil
Please let me know if you see any errors before the above AEVAL(0) error.Code: Select all | Expand
oCn := maria_Connect( ... )
oCn:lShowErrors := .t.
oCn:lLogErr := .t.
oCn:BackUp( <db>, <dst> )
? "done"
return nil
Please let me know if you see any errors before the above AEVAL(0) error.Code: Select all | Expand
::cError = "Table 'mastronipe.worksheet' doesn't exist"
Code: Select all | Expand
03/07/25 09:21:44: FWMARIACONNECTION:EXECUTE_SQL( 6791 )
cCallStack( "<-", 3 ) = "FWMARIACONNECTION:EXECUTE( 7163 )
<-FWMARIACONNECTION:BACKUPTABLE( 9752 )
<-FWMARIACONNECTION:BACKUP( 9652 )
<-COPIA_1( 239 )
<-(b)COPIA( 137 )
<-(b)MSGMETERX( 410 )
<-(b)TDIALOG( 99 )<-TDIALOG:DISPLAY( 0 )
<-TDIALOG:HANDLEEVENT( 1208 )
<-DIALOGBOXINDIRECT( 0 )
<-TDIALOG:ACTIVATE( 309 )
<-MSGMETERX( 415 )
<-COPIA( 140 )
<-MAIN( 114 )" cSql = "SHOW FULL COLUMNS FROM `worksheet`"
uRet = ::nError = 1146
::cError = "Table 'mastronipe.worksheet' doesn't exist"
::cSqlInfo = ""
03/07/25 09:26:37: FWMARIACONNECTION:EXECUTE_SQL( 6791 )
cCallStack( "<-", 3 ) = "FWMARIACONNECTION:EXECUTE( 7163 )<-FWMARIACONNECTION:BACKUPTABLE( 9752 )
<-FWMARIACONNECTION:BACKUP( 9652 )<-COPIA_1( 239 )<-(b)COPIA( 137 )<-(b)MSGMETERX( 410 )<-(b)TDIALOG( 99 )<-TDIALOG:DISPLAY( 0 )<-TDIALOG:HANDLEEVENT( 1208 )<-DIALOGBOXINDIRECT( 0 )<-TDIALOG:ACTIVATE( 309 )<-MSGMETERX( 415 )<-COPIA( 140 )<-MAIN( 114 )" cSql = "SHOW FULL COLUMNS FROM `worksheet`" uRet = ::nError = 1146 ::cError = "Table 'mastronipe.worksheet' doesn't exist" ::cSqlInfo = ""
Code: Select all | Expand
::cError = "Table 'mastronipe.worksheet' doesn't exist"
Code: Select all | Expand
03/07/25 09:21:44: FWMARIACONNECTION:EXECUTE_SQL( 6791 )
cCallStack( "<-", 3 ) = "FWMARIACONNECTION:EXECUTE( 7163 )
<-FWMARIACONNECTION:BACKUPTABLE( 9752 )
<-FWMARIACONNECTION:BACKUP( 9652 )
<-COPIA_1( 239 )
<-(b)COPIA( 137 )
<-(b)MSGMETERX( 410 )
<-(b)TDIALOG( 99 )<-TDIALOG:DISPLAY( 0 )
<-TDIALOG:HANDLEEVENT( 1208 )
<-DIALOGBOXINDIRECT( 0 )
<-TDIALOG:ACTIVATE( 309 )
<-MSGMETERX( 415 )
<-COPIA( 140 )
<-MAIN( 114 )" cSql = "SHOW FULL COLUMNS FROM `worksheet`"
uRet = ::nError = 1146
::cError = "Table 'mastronipe.worksheet' doesn't exist"
::cSqlInfo = ""
03/07/25 09:26:37: FWMARIACONNECTION:EXECUTE_SQL( 6791 )
cCallStack( "<-", 3 ) = "FWMARIACONNECTION:EXECUTE( 7163 )<-FWMARIACONNECTION:BACKUPTABLE( 9752 )
<-FWMARIACONNECTION:BACKUP( 9652 )<-COPIA_1( 239 )<-(b)COPIA( 137 )<-(b)MSGMETERX( 410 )<-(b)TDIALOG( 99 )<-TDIALOG:DISPLAY( 0 )<-TDIALOG:HANDLEEVENT( 1208 )<-DIALOGBOXINDIRECT( 0 )<-TDIALOG:ACTIVATE( 309 )<-MSGMETERX( 415 )<-COPIA( 140 )<-MAIN( 114 )" cSql = "SHOW FULL COLUMNS FROM `worksheet`" uRet = ::nError = 1146 ::cError = "Table 'mastronipe.worksheet' doesn't exist" ::cSqlInfo = ""
Code: Select all | Expand
oCn:Backup( "mastronipe", <cDest>)</code>
?
Also what is the result of
[code]cType := nil
? oCn:TableExists( "worksheet", "mastronipe", @cType )
? cType
Code: Select all | Expand
oCn:Backup( "mastronipe", <cDest>)</code>
?
Also what is the result of
[code]cType := nil
? oCn:TableExists( "worksheet", "mastronipe", @cType )
? cType
Code: Select all | Expand
/*========================================================================
S I S R E V INFORMATICA LTDA.
Prestando serviços com qualidade desde 1993
CNPJ: 02.623.572/0001-52
CNPJ: 02.623.572/0002-33
========================================================================
Sistema..: S i s r e v - Win 5.0
Autor(es): Ariovaldo da Costa Foliene
Aplicação: TSisrevIA
Notas....: Inteligência artificial com ChatGPT
Data.....: 06-03-2025
========================================================================
========================================================================
*/
#include "fivewin.ch"
#include "Objects.ch"
Function Main()
local cAPI_URL := "https://api.openai.com/v1/chat/completions"
local cAPI_KEY := "my key"
local cXML := '"'+MemoRead("C:\Users\Ari\Desktop\35250302623572000152550010000000041326996985nfe.xml")+'"'
local cResponse, cResult, hHttp, cJSON, cRequest
cRequest := '"'
cRequest += 'Você é um Analista de Notas Fiscais, que informará'
cRequest += ' erros, na tributação e formatação geral do XML que vou encamihar, observando as'
cRequest += ' da NF-e do Brasil para todos os estado, me alertando quando tem problemas de regras '
cRequest += ' calculos errados, localizar e informar em que parte do XML apresanta os erros, a fim de '
cRequest += ' evitar multas e cobranças indevidas, e quando for surgerir algumas revisões já '
cRequest += ' verifica o que devo fazer exatamente, reposta precisa e objetiva'
cRequest += '"'
// Construindo JSON manualmente
cJSON := ;
'{ "model": "gpt-3.5-turbo", "messages": [' + ;
'{ "role": "system", "content": ' + cRequest + ' },' + ;
'{ "role": "user" , "content": "Olá com quem eu falo ?" } ] }'
// '{ "role": "user" , "content": ' + hb_jsonEncode( cXML ) + ' } ] }'
// Criar objeto HTTP
hHttp := CREATEOBJECT( "Msxml2.XMLHTTP" )
hHttp:Open( "POST", cAPI_URL, .F. )
hHttp:SetRequestHeader( "Content-Type" , "application/json" )
hHttp:SetRequestHeader( "Authorization", "Bearer " + cAPI_KEY )
// Enviar requisição
hHttp:Send( cJSON )
// Capturar resposta
IF hHttp:Status = 200
cResponse := hHttp:ResponseText
cResult := ParseJSONResponse( cResponse )
? "Resposta do ChatGPT:", cResult
ELSE
? "Erro na requisicao:", hHttp:Status, hHttp:StatusText
? "Resposta completa:", hHttp:ResponseText
ENDIF
Return nil
// Função para interpretar o JSON da resposta
Function ParseJSONResponse( cJSON )
local hResponse := hb_jsonDecode( cJSON )
local cMessage := ""
IF ! Empty( hResponse ) .AND. HB_HHasKey( hResponse, "choices" )
cMessage := hResponse[ "choices" ][1][ "message" ][ "content" ]
ELSE
cMessage := "Erro na resposta da API"
ENDIF
RETURN cMessage
Code: Select all | Expand
/*========================================================================
S I S R E V INFORMATICA LTDA.
Prestando serviços com qualidade desde 1993
CNPJ: 02.623.572/0001-52
CNPJ: 02.623.572/0002-33
========================================================================
Sistema..: S i s r e v - Win 5.0
Autor(es): Ariovaldo da Costa Foliene
Aplicação: TSisrevIA
Notas....: Inteligência artificial com ChatGPT
Data.....: 06-03-2025
========================================================================
========================================================================
*/
#include "fivewin.ch"
#include "Objects.ch"
Function Main()
local cAPI_URL := "https://api.openai.com/v1/chat/completions"
local cAPI_KEY := "my key"
local cXML := '"'+MemoRead("C:\Users\Ari\Desktop\35250302623572000152550010000000041326996985nfe.xml")+'"'
local cResponse, cResult, hHttp, cJSON, cRequest
cRequest := '"'
cRequest += 'Você é um Analista de Notas Fiscais, que informará'
cRequest += ' erros, na tributação e formatação geral do XML que vou encamihar, observando as'
cRequest += ' da NF-e do Brasil para todos os estado, me alertando quando tem problemas de regras '
cRequest += ' calculos errados, localizar e informar em que parte do XML apresanta os erros, a fim de '
cRequest += ' evitar multas e cobranças indevidas, e quando for surgerir algumas revisões já '
cRequest += ' verifica o que devo fazer exatamente, reposta precisa e objetiva'
cRequest += '"'
// Construindo JSON manualmente
cJSON := ;
'{ "model": "gpt-3.5-turbo", "messages": [' + ;
'{ "role": "system", "content": ' + cRequest + ' },' + ;
'{ "role": "user" , "content": "Olá com quem eu falo ?" } ] }'
// '{ "role": "user" , "content": ' + hb_jsonEncode( cXML ) + ' } ] }'
// Criar objeto HTTP
hHttp := CREATEOBJECT( "Msxml2.XMLHTTP" )
hHttp:Open( "POST", cAPI_URL, .F. )
hHttp:SetRequestHeader( "Content-Type" , "application/json" )
hHttp:SetRequestHeader( "Authorization", "Bearer " + cAPI_KEY )
// Enviar requisição
hHttp:Send( cJSON )
// Capturar resposta
IF hHttp:Status = 200
cResponse := hHttp:ResponseText
cResult := ParseJSONResponse( cResponse )
? "Resposta do ChatGPT:", cResult
ELSE
? "Erro na requisicao:", hHttp:Status, hHttp:StatusText
? "Resposta completa:", hHttp:ResponseText
ENDIF
Return nil
// Função para interpretar o JSON da resposta
Function ParseJSONResponse( cJSON )
local hResponse := hb_jsonDecode( cJSON )
local cMessage := ""
IF ! Empty( hResponse ) .AND. HB_HHasKey( hResponse, "choices" )
cMessage := hResponse[ "choices" ][1][ "message" ][ "content" ]
ELSE
cMessage := "Erro na resposta da API"
ENDIF
RETURN cMessage
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oCur, oDlg, oBrw
DEFINE CURSOR oCur DRAG
DEFINE DIALOG oDlg SIZE 600,250 PIXEL
@ 20,20 XBROWSE oBrw SIZE 100,-20 PIXEL OF oDlg ;
DATASOURCE { "One", "Two", "Three" } ;
CELL LINES NOBORDER
WITH OBJECT oBrw
:nStretchCol := 1
:oDragCursor := oCur
:bDragBegin := { || SetDropInfo( oBrw:aCols[ 1 ]:Value ) }
:CreateFromCode()
END
oDlg:bDropOver := { |u,r,c,f| MsgInfo( "no drop here" ) }
ACTIVATE DIALOG oDlg CENTERED
return nil
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oCur, oDlg, oBrw
DEFINE CURSOR oCur DRAG
DEFINE DIALOG oDlg SIZE 600,250 PIXEL
@ 20,20 XBROWSE oBrw SIZE 100,-20 PIXEL OF oDlg ;
DATASOURCE { "One", "Two", "Three" } ;
CELL LINES NOBORDER
WITH OBJECT oBrw
:nStretchCol := 1
:oDragCursor := oCur
:bDragBegin := { || SetDropInfo( oBrw:aCols[ 1 ]:Value ) }
:CreateFromCode()
END
oDlg:bDropOver := { |u,r,c,f| MsgInfo( "no drop here" ) }
ACTIVATE DIALOG oDlg CENTERED
return nil
Code: Select all | Expand
METHOD LButtonUp( nRow, nCol, nFlags ) CLASS TXBrowse
local nCaptured
local nRowAdvanced, nTimeScrolled, nVelocity, nRowToAdvance
local nRatio, n, cMsg := ""
if ::lDrag
return ::Super:LButtonUp( nRow, nCol, nFlags )
endif
// if nRow <= ::nTopBarHeight HERE !!!
// return 0 HERE !!!
// endif HERE !!!
Code: Select all | Expand
METHOD LButtonUp( nRow, nCol, nFlags ) CLASS TXBrowse
local nCaptured
local nRowAdvanced, nTimeScrolled, nVelocity, nRowToAdvance
local nRatio, n, cMsg := ""
if ::lDrag
return ::Super:LButtonUp( nRow, nCol, nFlags )
endif
// if nRow <= ::nTopBarHeight HERE !!!
// return 0 HERE !!!
// endif HERE !!!
Code: Select all | Expand
Error: Unresolved external '_HB_FUN_ISRECORDSET' referenced from D:\FWH2304\LIB\FIVEHX.LIB|drxl
]]>Antonio Linares wrote: Fri Mar 07, 2025 3:07 pm Fixed bug, in Class TXBrowse Method LButtonUp:
Code: Select all | Expand
METHOD LButtonUp( nRow, nCol, nFlags ) CLASS TXBrowse local nCaptured local nRowAdvanced, nTimeScrolled, nVelocity, nRowToAdvance local nRatio, n, cMsg := "" if ::lDrag return ::Super:LButtonUp( nRow, nCol, nFlags ) endif // if nRow <= ::nTopBarHeight HERE !!! // return 0 HERE !!! // endif HERE !!!
Code: Select all | Expand
Error: Unresolved external '_HB_FUN_ISRECORDSET' referenced from D:\FWH2304\LIB\FIVEHX.LIB|drxl
]]>Antonio Linares wrote: Fri Mar 07, 2025 3:07 pm Fixed bug, in Class TXBrowse Method LButtonUp:
Code: Select all | Expand
METHOD LButtonUp( nRow, nCol, nFlags ) CLASS TXBrowse local nCaptured local nRowAdvanced, nTimeScrolled, nVelocity, nRowToAdvance local nRatio, n, cMsg := "" if ::lDrag return ::Super:LButtonUp( nRow, nCol, nFlags ) endif // if nRow <= ::nTopBarHeight HERE !!! // return 0 HERE !!! // endif HERE !!!
]]>Antonio Linares wrote: Fri Mar 07, 2025 4:10 pm Dear Dutch,
I have just emailed you the latest FWH libs for you to test them
many thanks for your feedback
]]>Antonio Linares wrote: Fri Mar 07, 2025 4:10 pm Dear Dutch,
I have just emailed you the latest FWH libs for you to test them
many thanks for your feedback
Code: Select all | Expand
@ oBrw:nBottom+5, 5 BUTTONBAR oBar SIZE 90,200 BUTTONSIZE 90,24 OF oDlg
Code: Select all | Expand
Error occurred at: 03/08/25, 12:22:05
Error description: Error FiveWin/6 Cannot create window or control:
Class: TBAR
Caption:
System Error: Impossibile creare una finestra secondaria di primo livello.
Stack Calls
===========
Called from: .\source\classes\window.prg => WNDCREATEERROR( 898 )
Called from: .\source\classes\window.prg => TBAR:CREATE( 881 )
Called from: .\source\classes\bar.prg => TBAR:NEWAT( 500 )
Code: Select all | Expand
@ oBrw:nBottom+5, 5 BUTTONBAR oBar SIZE 90,200 BUTTONSIZE 90,24 OF oDlg
Code: Select all | Expand
Error occurred at: 03/08/25, 12:22:05
Error description: Error FiveWin/6 Cannot create window or control:
Class: TBAR
Caption:
System Error: Impossibile creare una finestra secondaria di primo livello.
Stack Calls
===========
Called from: .\source\classes\window.prg => WNDCREATEERROR( 898 )
Called from: .\source\classes\window.prg => TBAR:CREATE( 881 )
Called from: .\source\classes\bar.prg => TBAR:NEWAT( 500 )
Code: Select all | Expand
function Main()
local oDlg, oBrw, oFont
local oDbf
local oBar
DEFINE DIALOG oDlg SIZE 640,300 PIXEL TRUEPIXEL; //FONT oFont
TITLE cTitle COLOR CLR_BLACK, DLG_nColorDlg ;
STYLE nOR( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, ;
WS_MINIMIZEBOX)
@ 40, 10 XBROWSE oBrw OF oDlg SIZE oDlg:nWidth-20,200 PIXEL ; // -10,-40
AUTOCOLS DATASOURCE oDbf NOBORDER
WITH OBJECT oBrw
:CreateFromCode()
END
ACTIVATE DIALOG oDlg CENTERED ;
ON INIT ( Btnbar(0,oBar,oDlg,oDbf,oBrw),;
Btnbar(1,oDlg:oBar,oDlg,oDbf,oBrw) )
RELEASE FONT oFont
return nil
Static Function Btnbar(nBar,oBar,oDlg,oDbf,oBrw)
local n
local aBtnMenu
local x
if Valtype( oBar ) = "O"
For x := Len( oBar:aControls ) to 1 step - 1
oBar:Del( x )
Next x
endif
Do case
Case nBar = 0
@ oBrw:nBottom+6, 10 BUTTONBAR oBar SIZE 450,22 BUTTONSIZE 90,24 OF oDlg
oBar:bClrGrad := { | lPressed | If( ! lPressed,;
{ { 1, DLG_nColorBar1, DLG_nColorBar1} },;
{ { 1, DLG_nColorBar2, DLG_nColorBar2} } ) }
case nbar = 1
aBtnMenu := array(6)
DEFINE BUTTON aBtnMenu[1] OF oBar PROMPT "Nuovo" RESOURCE "NEW_SMALLBRW" LEFT;
ACTION NIL
DEFINE BUTTON aBtnMenu[2] OF oBar PROMPT "Modifica" RESOURCE "MOD_SMALLBRW" LEFT;
ACTION NIL
DEFINE BUTTON aBtnMenu[3] OF oBar PROMPT "Elimina" RESOURCE "CAN_SMALLBRW" LEFT;
ACTION NIL
DEFINE BUTTON aBtnMenu[4] OF oBar PROMPT "Duplica" RESOURCE "DPL_SMALLBRW" LEFT;
ACTION NIL
DEFINE BUTTON aBtnMenu[5] OF oBar PROMPT "Elimina" RESOURCE "CAN_SMALLBRW" LEFT;
ACTION NIL
DEFINE BUTTON aBtnMenu[6] OF oBar PROMPT "Stampa" RESOURCE "PRN_SMALLBRW" LEFT;
ACTION NIL
case nbar = 2
DEFINE BUTTON aBtnMenu[1] OF oBar PROMPT "Elimina" RESOURCE "CAN_SMALLBRW" LEFT;
ACTION NIL
DEFINE BUTTON aBtnMenu[2] OF oBar PROMPT "Stampa" RESOURCE "PRN_SMALLBRW" LEFT;
ACTION NIL
endcase
return nil
Code: Select all | Expand
function Main()
local oDlg, oBrw, oFont
local oDbf
local oBar
DEFINE DIALOG oDlg SIZE 640,300 PIXEL TRUEPIXEL; //FONT oFont
TITLE cTitle COLOR CLR_BLACK, DLG_nColorDlg ;
STYLE nOR( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, ;
WS_MINIMIZEBOX)
@ 40, 10 XBROWSE oBrw OF oDlg SIZE oDlg:nWidth-20,200 PIXEL ; // -10,-40
AUTOCOLS DATASOURCE oDbf NOBORDER
WITH OBJECT oBrw
:CreateFromCode()
END
ACTIVATE DIALOG oDlg CENTERED ;
ON INIT ( Btnbar(0,oBar,oDlg,oDbf,oBrw),;
Btnbar(1,oDlg:oBar,oDlg,oDbf,oBrw) )
RELEASE FONT oFont
return nil
Static Function Btnbar(nBar,oBar,oDlg,oDbf,oBrw)
local n
local aBtnMenu
local x
if Valtype( oBar ) = "O"
For x := Len( oBar:aControls ) to 1 step - 1
oBar:Del( x )
Next x
endif
Do case
Case nBar = 0
@ oBrw:nBottom+6, 10 BUTTONBAR oBar SIZE 450,22 BUTTONSIZE 90,24 OF oDlg
oBar:bClrGrad := { | lPressed | If( ! lPressed,;
{ { 1, DLG_nColorBar1, DLG_nColorBar1} },;
{ { 1, DLG_nColorBar2, DLG_nColorBar2} } ) }
case nbar = 1
aBtnMenu := array(6)
DEFINE BUTTON aBtnMenu[1] OF oBar PROMPT "Nuovo" RESOURCE "NEW_SMALLBRW" LEFT;
ACTION NIL
DEFINE BUTTON aBtnMenu[2] OF oBar PROMPT "Modifica" RESOURCE "MOD_SMALLBRW" LEFT;
ACTION NIL
DEFINE BUTTON aBtnMenu[3] OF oBar PROMPT "Elimina" RESOURCE "CAN_SMALLBRW" LEFT;
ACTION NIL
DEFINE BUTTON aBtnMenu[4] OF oBar PROMPT "Duplica" RESOURCE "DPL_SMALLBRW" LEFT;
ACTION NIL
DEFINE BUTTON aBtnMenu[5] OF oBar PROMPT "Elimina" RESOURCE "CAN_SMALLBRW" LEFT;
ACTION NIL
DEFINE BUTTON aBtnMenu[6] OF oBar PROMPT "Stampa" RESOURCE "PRN_SMALLBRW" LEFT;
ACTION NIL
case nbar = 2
DEFINE BUTTON aBtnMenu[1] OF oBar PROMPT "Elimina" RESOURCE "CAN_SMALLBRW" LEFT;
ACTION NIL
DEFINE BUTTON aBtnMenu[2] OF oBar PROMPT "Stampa" RESOURCE "PRN_SMALLBRW" LEFT;
ACTION NIL
endcase
return nil
Code: Select all | Expand
case nbar = 1
aBtnMenu := array(6)
DEFINE BUTTON aBtnMenu[1] OF oBar PROMPT "Nuovo" RESOURCE "NEW_SMALLBRW" LEFT;
ACTION NIL
Code: Select all | Expand
case nbar = 1
aBtnMenu := array(6)
DEFINE BUTTON aBtnMenu[1] OF oBar PROMPT "Nuovo" RESOURCE "NEW_SMALLBRW" LEFT;
ACTION NIL
Code: Select all | Expand
case nbar = 1
aBtnMenu := array(6)
DEFINE BUTTON aBtnMenu[1] OF oBar PROMPT "Nuovo" RESOURCE "NEW_SMALLBRW" LEFT;
ACTION NIL
Code: Select all | Expand
#include 'fivewin.ch'
#include 'xbrowse.ch'
#include "constant.ch"
Function test()
local oDlg,oDbf,oFont
local oBar
local nBottom := 27.2
local nRight := 89
local nWd := Max( nRight * DLG_CHARPIX_W, 180 )
local nHt := nBottom * DLG_CHARPIX_H
DEFINE DIALOG oDlg SIZE nWd, nHt PIXEL TRUEPIXEL;
TiTle "test"
oDlg:lHelpIcon := .F.
@ 90, 10 Button "Second bar" size 100,18 PIXEL OF oDlg action Btnbar(2,oDlg:oBar,oDlg)
@ 90, 200 Button "First bar" size 100,18 PIXEL OF oDlg action Btnbar(1,oDlg:oBar,oDlg)
ACTIVATE DIALOG oDlg CENTER ;
ON INIT ( Btnbar(0,oBar,oDlg), Btnbar(1,oDlg:oBar,oDlg) )
RETURN NIL
//----------------------------------------------------------------------------//
Function Btnbar(nBar,oBar,oDlg) // ,aBtnBar
local aBtnBar
local x
if Valtype( oBar ) = "O"
For x := Len( oBar:aControls ) to 1 step - 1
oBar:Del( x )
Next x
endif
Do case
case nbar = 0
// DEFINE BUTTONBAR oBar OF oDlg SIZE 80,70 TOP NOBORDER 2015 old buttonbar
oBar:=Tbar():NewAt( 100, 10, 450, 22, 90, 24, oDlg, .f.,;
, , .t., .f., .f., .t., .f., ;
, , , , , .t.)
case nbar = 1
aBtnBar := array(6)
DEFINE BUTTON aBtnBar[1] OF oBar PROMPT "New" action msginfo()
DEFINE BUTTON aBtnBar[2] OF oBar PROMPT "Modify" action msginfo()
DEFINE BUTTON aBtnBar[3] OF oBar PROMPT "Duplicate" action msginfo()
DEFINE BUTTON aBtnBar[4] OF oBar PROMPT "Del" action msginfo()
DEFINE BUTTON aBtnBar[5] OF oBar PROMPT "Print" action msginfo()
DEFINE BUTTON aBtnBar[6] OF oBar PROMPT "Help" action msginfo("Help")
case nbar = 2
aBtnBar := array(2)
DEFINE BUTTON aBtnBar[1] OF oBar PROMPT "Del" action msginfo("Del")
DEFINE BUTTON aBtnBar[2] OF oBar PROMPT "Print" action msginfo("Print")
endcase
return oBar
Code: Select all | Expand
Error occurred at: 03/08/25, 16:12:24
Error description: Error BASE/1004 No exported method: ISKINDOF
Args:
[ 1] = U
[ 2] = C TBAR
Stack Calls
===========
Called from: .\source\classes\bar.prg => ISKINDOF( 0 )
Called from: .\source\classes\btnbmp.prg => TBTNBMP:NEWBAR( 504 )
Called from: test.prg => BTNBAR( 71 )
Code: Select all | Expand
oBar:=Tbar():NewAt( 100, 10, 450, 22, 90, 24, oDlg, .f.,;
, , .t., .f., .f., .t., .f., ;
, aGrad, , , , .t.)
Code: Select all | Expand
case nbar = 1
aBtnMenu := array(6)
DEFINE BUTTON aBtnMenu[1] OF oBar PROMPT "Nuovo" RESOURCE "NEW_SMALLBRW" LEFT;
ACTION NIL
Code: Select all | Expand
#include 'fivewin.ch'
#include 'xbrowse.ch'
#include "constant.ch"
Function test()
local oDlg,oDbf,oFont
local oBar
local nBottom := 27.2
local nRight := 89
local nWd := Max( nRight * DLG_CHARPIX_W, 180 )
local nHt := nBottom * DLG_CHARPIX_H
DEFINE DIALOG oDlg SIZE nWd, nHt PIXEL TRUEPIXEL;
TiTle "test"
oDlg:lHelpIcon := .F.
@ 90, 10 Button "Second bar" size 100,18 PIXEL OF oDlg action Btnbar(2,oDlg:oBar,oDlg)
@ 90, 200 Button "First bar" size 100,18 PIXEL OF oDlg action Btnbar(1,oDlg:oBar,oDlg)
ACTIVATE DIALOG oDlg CENTER ;
ON INIT ( Btnbar(0,oBar,oDlg), Btnbar(1,oDlg:oBar,oDlg) )
RETURN NIL
//----------------------------------------------------------------------------//
Function Btnbar(nBar,oBar,oDlg) // ,aBtnBar
local aBtnBar
local x
if Valtype( oBar ) = "O"
For x := Len( oBar:aControls ) to 1 step - 1
oBar:Del( x )
Next x
endif
Do case
case nbar = 0
// DEFINE BUTTONBAR oBar OF oDlg SIZE 80,70 TOP NOBORDER 2015 old buttonbar
oBar:=Tbar():NewAt( 100, 10, 450, 22, 90, 24, oDlg, .f.,;
, , .t., .f., .f., .t., .f., ;
, , , , , .t.)
case nbar = 1
aBtnBar := array(6)
DEFINE BUTTON aBtnBar[1] OF oBar PROMPT "New" action msginfo()
DEFINE BUTTON aBtnBar[2] OF oBar PROMPT "Modify" action msginfo()
DEFINE BUTTON aBtnBar[3] OF oBar PROMPT "Duplicate" action msginfo()
DEFINE BUTTON aBtnBar[4] OF oBar PROMPT "Del" action msginfo()
DEFINE BUTTON aBtnBar[5] OF oBar PROMPT "Print" action msginfo()
DEFINE BUTTON aBtnBar[6] OF oBar PROMPT "Help" action msginfo("Help")
case nbar = 2
aBtnBar := array(2)
DEFINE BUTTON aBtnBar[1] OF oBar PROMPT "Del" action msginfo("Del")
DEFINE BUTTON aBtnBar[2] OF oBar PROMPT "Print" action msginfo("Print")
endcase
return oBar
Code: Select all | Expand
Error occurred at: 03/08/25, 16:12:24
Error description: Error BASE/1004 No exported method: ISKINDOF
Args:
[ 1] = U
[ 2] = C TBAR
Stack Calls
===========
Called from: .\source\classes\bar.prg => ISKINDOF( 0 )
Called from: .\source\classes\btnbmp.prg => TBTNBMP:NEWBAR( 504 )
Called from: test.prg => BTNBAR( 71 )
Code: Select all | Expand
oBar:=Tbar():NewAt( 100, 10, 450, 22, 90, 24, oDlg, .f.,;
, , .t., .f., .f., .t., .f., ;
, aGrad, , , , .t.)
Code: Select all | Expand
#include "fivewin.ch"
function Main()
local oDlg, oBrw, oBar1, oBar2, aRow, aData := Array( 8, 6 )
for each aRow in aData
AEval( aRow, { |u,i| aRow[ i ] := HB_RandomInt( 100,500 ) } )
next
DEFINE DIALOG oDlg SIZE 600,400 PIXEL TRUEPIXEL
@ 20, 20 XBROWSE oBrw SIZE 480,200 PIXEL OF oDlg ;
DATASOURCE aData AUTOCOLS CELL LINES NOBORDER
oBrw:CreateFromCode()
oDlg:bInit := <||
oBar1:= TBar():NewAt( oBrw:nbottom+1, oBrw:nLeft, oBrw:nWidth-120, 25, 80, 25, oDlg, .f.,;
, , .F., .f., .f., .t., .f., ;
, , , , , .t. )
oBar1:l2013 := .t.
DEFINE BUTTON OF oBar1 PROMPT "ONE" CENTER
DEFINE BUTTON OF oBar1 PROMPT "TWO" CENTER
DEFINE BUTTON OF oBar1 PROMPT "THREE" CENTER
oBar1:bClrGrad := { | lPressed | If( ! lPressed,;
{ { 1, RGB( 250,250,245), RGB( 250,250,245)} },;
{ { 1, RGB( 245,245,235), RGB( 245,245,235)} } ) }
oBar1:Hide()
oBar2:= TBar():NewAt( oBrw:nbottom+1, oBrw:nLeft, oBrw:nWidth-120, 25, 80, 25, oDlg, .f.,;
, , .F., .f., .f., .t., .f., ;
, , , , , .t. )
oBar2:l2013 := .t.
DEFINE BUTTON OF oBar2 PROMPT "JAN" CENTER
DEFINE BUTTON OF oBar2 PROMPT "FEB" CENTER
DEFINE BUTTON OF oBar2 PROMPT "MARCH" CENTER
oBar2:bClrGrad := { | lPressed | If( ! lPressed,;
{ { 1, RGB( 250,250,245), RGB( 250,250,245)} },;
{ { 1, RGB( 245,245,235), RGB( 245,245,235)} } ) }
return nil
>
@ 280, 20 BUTTON "FIRST BAR" SIZE 150,40 PIXEL OF oDlg ;
WHEN oBar2:lVisible ACTION ( oBar2:Hide(), oBar1:Show() )
@ 280,200 BUTTON "SECOND BAR" SIZE 150,40 PIXEL OF oDlg ;
WHEN oBar1:lVisible ACTION ( oBar1:Hide(), oBar2:Show() )
ACTIVATE DIALOG oDlg CENTERED
return nil
Code: Select all | Expand
#include "fivewin.ch"
function Main()
local oDlg, oBrw, oBar1, oBar2, aRow, aData := Array( 8, 6 )
for each aRow in aData
AEval( aRow, { |u,i| aRow[ i ] := HB_RandomInt( 100,500 ) } )
next
DEFINE DIALOG oDlg SIZE 600,400 PIXEL TRUEPIXEL
@ 20, 20 XBROWSE oBrw SIZE 480,200 PIXEL OF oDlg ;
DATASOURCE aData AUTOCOLS CELL LINES NOBORDER
oBrw:CreateFromCode()
oDlg:bInit := <||
oBar1:= TBar():NewAt( oBrw:nbottom+1, oBrw:nLeft, oBrw:nWidth-120, 25, 80, 25, oDlg, .f.,;
, , .F., .f., .f., .t., .f., ;
, , , , , .t. )
oBar1:l2013 := .t.
DEFINE BUTTON OF oBar1 PROMPT "ONE" CENTER
DEFINE BUTTON OF oBar1 PROMPT "TWO" CENTER
DEFINE BUTTON OF oBar1 PROMPT "THREE" CENTER
oBar1:bClrGrad := { | lPressed | If( ! lPressed,;
{ { 1, RGB( 250,250,245), RGB( 250,250,245)} },;
{ { 1, RGB( 245,245,235), RGB( 245,245,235)} } ) }
oBar1:Hide()
oBar2:= TBar():NewAt( oBrw:nbottom+1, oBrw:nLeft, oBrw:nWidth-120, 25, 80, 25, oDlg, .f.,;
, , .F., .f., .f., .t., .f., ;
, , , , , .t. )
oBar2:l2013 := .t.
DEFINE BUTTON OF oBar2 PROMPT "JAN" CENTER
DEFINE BUTTON OF oBar2 PROMPT "FEB" CENTER
DEFINE BUTTON OF oBar2 PROMPT "MARCH" CENTER
oBar2:bClrGrad := { | lPressed | If( ! lPressed,;
{ { 1, RGB( 250,250,245), RGB( 250,250,245)} },;
{ { 1, RGB( 245,245,235), RGB( 245,245,235)} } ) }
return nil
>
@ 280, 20 BUTTON "FIRST BAR" SIZE 150,40 PIXEL OF oDlg ;
WHEN oBar2:lVisible ACTION ( oBar2:Hide(), oBar1:Show() )
@ 280,200 BUTTON "SECOND BAR" SIZE 150,40 PIXEL OF oDlg ;
WHEN oBar1:lVisible ACTION ( oBar1:Hide(), oBar2:Show() )
ACTIVATE DIALOG oDlg CENTERED
return nil
Code: Select all | Expand
oBrw:aBtnBrow[3]:baction:= { || oBrw:aBtnBrow[3]:ShowPopUp( { | oBtn | Contextual_Menu(oBtn,oBrw,oDbf,cIniUser,cSection,oDlg,oBrw:aBtnBrow[4],.t.,.t.,@lmore) } ) }
oBrw:aBtnBrow[5]:baction:= { || oBrw:aBtnBrow[5]:ShowPopUp( { | oBtn | ColonneMenu( oBtn,oBrw,oDbf,oDlg,cSection,cIniUser ) } ) }
Code: Select all | Expand
oBrw:aBtnBrow[3]:baction:= { || oBrw:aBtnBrow[3]:ShowPopUp( { | oBtn | Contextual_Menu(oBtn,oBrw,oDbf,cIniUser,cSection,oDlg,oBrw:aBtnBrow[4],.t.,.t.,@lmore) } ) }
oBrw:aBtnBrow[5]:baction:= { || oBrw:aBtnBrow[5]:ShowPopUp( { | oBtn | ColonneMenu( oBtn,oBrw,oDbf,oDlg,cSection,cIniUser ) } ) }
y en General/Include Paths:#include <winresrc.h>
#include <windows.h>
#include <commctrl.h>
#ifndef WC_TABCONTROL
#define WC_TABCONTROL "SysTabControl32"
#endif
#ifndef MONTHCAL_CLASS
#define MONTHCAL_CLASS "SysMonthCal32"
#endif
#ifndef DATETIMEPICK_CLASS
#define DATETIMEPICK_CLASS "SysDateTimePick32"
#endif
#include "RESOURCE_HEADER"
%RESOURCES%
y en General/Include Paths:#include <winresrc.h>
#include <windows.h>
#include <commctrl.h>
#ifndef WC_TABCONTROL
#define WC_TABCONTROL "SysTabControl32"
#endif
#ifndef MONTHCAL_CLASS
#define MONTHCAL_CLASS "SysMonthCal32"
#endif
#ifndef DATETIMEPICK_CLASS
#define DATETIMEPICK_CLASS "SysDateTimePick32"
#endif
#include "RESOURCE_HEADER"
%RESOURCES%
Code: Select all | Expand
METHOD New( ncArea, cFile, cDriver, lShared, lReadOnly, cPassword )
METHOD Open( cAlias, cFile, cDriver, lShared, lReadOnly, cPassword )
when I must use Open and when I must use New ?]]>Code: Select all | Expand
METHOD New( ncArea, cFile, cDriver, lShared, lReadOnly, cPassword )
METHOD Open( cAlias, cFile, cDriver, lShared, lReadOnly, cPassword )
when I must use Open and when I must use New ?]]>Code: Select all | Expand
CLASS TXData from TDatabase
DATA cDbfPath init ".\DATA\"
ENDCLASS
CLASS TCust from TXData
METHOD New()
ENDCLASS
METHOD New( lShared ) CLASS TCust
Default lShared := .t.
::super:New(,::cDbfPath + "customers" ,"DBFCDX", lShared)
if ::use()
::setOrder(1)
::gotop()
endif
RETURN Self
Code: Select all | Expand
CLASS TXData from TDatabase
DATA cDbfPath init ".\DATA\"
ENDCLASS
CLASS TCust from TXData
METHOD New()
ENDCLASS
METHOD New( lShared ) CLASS TCust
Default lShared := .t.
::super:New(,::cDbfPath + "customers" ,"DBFCDX", lShared)
if ::use()
::setOrder(1)
::gotop()
endif
RETURN Self
Code: Select all | Expand
2025-03-11 18:43:04 LogFile: Reopening file due to size limit breaking
2025-03-11 18:43:42 INFO: Main thread terminated
2025-03-11 18:43:42 -- CompuRMT end --
2025-03-11 18:43:55 -- CompuRMT start --
2025-03-11 18:44:03 CRITICAL: *****The program has caused an internal error. Framestack:
*****Called from: ADEL(0) in Module:
*****Called from: FWDELRESOURCE(37) in Module: .\source\function\checkres.prg
*****Called from: DELETEOBJECT(0) in Module:
*****Called from: PALBMPFREE(2430) in Module: SOURCE\CLASSES\TSBUTTON.PRG
*****Called from: TSBUTTON:FREEBITMAPS(1043) in Module: SOURCE\CLASSES\TSBUTTON.PRG
*****Called from: TSBUTTON:DESTROY(955) in Module: SOURCE\CLASSES\TSBUTTON.PRG
*****Called from: TWINDOW:HANDLEEVENT(0) in Module:
*****Called from: TCONTROL:HANDLEEVENT(1877) in Module: .\source\classes\control.prg
*****Called from: TSBUTTON:HANDLEEVENT(1323) in Module: SOURCE\CLASSES\TSBUTTON.PRG
*****Called from: _FWH(259) in Module: .\source\classes\window.prg
*****Called from: DIALOGBOXINDIRECTW(0) in Module:
*****Called from: TDIALOG:ACTIVATE(325) in Module: .\source\classes\dialog.prg
*****Called from: LOGABERT(1115) in Module: .\PRG\CompuRmt.PRG
*****Called from: (b)MAIN(673) in Module: .\PRG\CompuRmt.PRG
*****Called from: TWINDOW:ACTIVATE(1120) in Module: .\source\classes\window.prg
*****Called from: MAIN(673) in Module: .\PRG\CompuRmt.PRG
*****Internal address: 0x75F061
*****Low-level code: 0/FFFFFFFFC0000005: Memory read/write access violation
2025-03-11 18:45:01 INFO: Main thread terminated
2025-03-11 18:45:01 -- CompuRMT end --
Code: Select all | Expand
Empresa
========
Empresa:.01 -Filial:.01
Fantasia:.EMPRESA TESTE
Real:.EMPRESA TESTE
Telefone:.
Email:.
Cidade:.SH/PR
Application
===========
Path and name: Y:\Sistemas\Sig_Win\CompuRMT.exe (32 bits)
Size: ********* bytes
Time from start: 0 hours 0 mins 10 secs
Error occurred at: 11/03/25, 18:44:05
Error description:
Stack Calls
===========
Called from: => ADEL(0)
Called from: .\source\function\checkres.prg => FWDELRESOURCE(37)
Called from: => DELETEOBJECT(0)
Called from: SOURCE\CLASSES\TSBUTTON.PRG => PALBMPFREE(2430)
Called from: SOURCE\CLASSES\TSBUTTON.PRG => TSBUTTON:FREEBITMAPS(1043)
Called from: SOURCE\CLASSES\TSBUTTON.PRG => TSBUTTON:DESTROY(955)
Called from: => TWINDOW:HANDLEEVENT(0)
Called from: .\source\classes\control.prg => TCONTROL:HANDLEEVENT(1877)
Called from: SOURCE\CLASSES\TSBUTTON.PRG => TSBUTTON:HANDLEEVENT(1323)
Called from: .\source\classes\window.prg => _FWH(259)
Called from: => DIALOGBOXINDIRECTW(0)
Called from: .\source\classes\dialog.prg => TDIALOG:ACTIVATE(325)
Called from: .\PRG\CompuRmt.PRG => LOGABERT(1115)
Called from: .\PRG\CompuRmt.PRG => (b)MAIN(673)
Called from: .\source\classes\window.prg => TWINDOW:ACTIVATE(1120)
Called from: .\PRG\CompuRmt.PRG => MAIN(673)
System
======
CPU type: Intel(R) Core(TM) i7-4810MQ CPU @ 2.80GHz 2794 Mhz
Hardware memory: 16290 megs
Free System resources: 90 %
GDI resources: 90 %
User resources: 90 %
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)
Windows version: 6.2, Build 9200
Variables in use
================
Procedure Type Value
==========================
ADEL
Param 1: A Len: 42
Len: 3
1 C :FONT:
2 N : -1106633967:
3 C :MAIN(68):
------------------------------------------------------
Len: 3
1 C :FONT:
2 N :1762266102:
3 C :MAIN(208):
------------------------------------------------------
Len: 3
1 C :FONT:
2 N : -1526068133:
3 C :MAIN(210):
------------------------------------------------------
Len: 3
1 C :FONT:
2 N :-905307912:
3 C :MAIN(211):
------------------------------------------------------
Len: 3
1 C :FONT:
2 N :-150329767:
3 C :MAIN(212):
------------------------------------------------------
Len: 3
1 C :ICON:
2 N : 299567517:
3 C :MAIN(549):
------------------------------------------------------
Len: 3
1 C :BMP:
2 N :-653980546:
3 C :TBRUSH:NEW(204)->MAIN(551):
------------------------------------------------------
Len: 3
1 C :BRUSH:
2 N :1661998542:
3 C :MAIN(551):
------------------------------------------------------
Len: 3
1 C :BMP:
2 N : -1660611456:
3 C :TBRUSH:NEW(215)->MAIN(552):
------------------------------------------------------
Len: 3
1 C :BRUSH:
2 N :1745884871:
3 C :MAIN(552):
------------------------------------------------------
Len: 3
1 C :FONT:
2 N :-989195964:
3 C :MAIN(553):
------------------------------------------------------
Len: 3
1 C :FONT:
2 N :2131366787:
3 C :TWINDOW:GETFONT(3174)->TWINDOW:NEW(984)->MAIN(557):
------------------------------------------------------
Len: 3
1 C :BRUSH:
2 N : 923797512:
3 C :TBAR:SETCOLOR(2942)->TBAR:SETGRADIENTS(288)->TBAR:NEW(192)->MAIN(568):
------------------------------------------------------
Len: 3
1 C :BRUSH:
2 N :-955246096:
3 C :TDIALOG:SETCOLOR(2942)->TDIALOG:NEW(223)->MAIN(594):
------------------------------------------------------
Len: 3
1 C :BRUSH:
2 N :1594890758:
3 C :TMSGBAR:SETCOLOR(2942)->TMSGBAR:DEFAULT(296)->TMSGBAR:NEW(185)->MAIN(604):
------------------------------------------------------
Len: 3
1 C :BMP:
2 N :-502983143:
3 C :TMSGBAR:PAINTBAR(727)->TMSGBAR:PAINT(669)->(b)TMSGBAR:TMSGBAR(72)->TMSGBAR:DISPLAY(0)->TMSGBAR:HANDLEEVENT(1843)->_FWH(1008)->UPDATEWINDOW(0)->TWINDOW:ACTIVATE(1111)->MAIN(673):
------------------------------------------------------
Array Muito Grande Passivo De erro.
Param 2: N 18
Local 1: U NIL
Local 2: U NIL
FWDELRESOURCE
Param 1: N -1341645292
Local 1: N 18
DELETEOBJECT
Param 1: N -1341645292
PALBMPFREE
Param 1: N 331266
Param 2: N -1341645292
TSBUTTON:FREEBITMAPS
Local 1: N 31
Local 2: O Class: TSBUTTON
Local 3: N 1
Local 4: L T
Local 5: C ""
TSBUTTON:DESTROY
Local 1: O Class: TSBUTTON
TWINDOW:HANDLEEVENT
Param 1: N 2
Param 2: N 0
Param 3: N 0
TCONTROL:HANDLEEVENT
Param 1: N 2
Param 2: N 0
Param 3: N 0
Local 1: O Class: TSBUTTON
Local 2: U NIL
TSBUTTON:HANDLEEVENT
Param 1: N 2
Param 2: N 0
Param 3: N 0
Local 1: O Class: TSBUTTON
_FWH
Param 1: N 0
Param 2: N 2
Param 3: N 0
Param 4: N 0
Param 5: N 25
Local 1: O Class: TSBUTTON
DIALOGBOXINDIRECTW
Param 1: N 5570560
Param 2: C "€ Ó ° L o g i n d e A b e r t u r a . ‚V - § n T I M A G E P 7 L
o T S T S A Y D a t a B a s e : € P 7 - p E D I T 1 1 / 0 3 / 2 5 P 7 ,
q T S T S A Y S e n h a : € P 7 ( (
r E D I T A D M 0 3 1 1 2 5 P d <
s T S T S A Y U s u a r i o : € P d ( ]
t E D I T P 7 7 œ
u T S T S A Y S e l e c i o n e a E m p r e s a : ¡P 7 A Œ Œ v C O M B O B O X P 7 P D
w T S T S A Y A m b i e n t e : ¡P 7 Z Œ Œ x C O M B O B O X € P U ‘ $ y B U T T O N € P ‚ ‘ $ z B U T T O N P 7 k – { S T A T I C P 7 z Œ
| m s c t l s _ p r o g r e s s 3 2 P x „
} S T A T I C 0 % "
Param 3: N 6489384
Param 4: O Class: TDIALOG
TDIALOG:ACTIVATE
Param 1: U NIL
Param 2: U NIL
Param 3: B {|| Block }
Param 4: L T
Param 5: U NIL
Param 6: L T
Param 7: B {|| Block }
Param 8: U NIL
Param 9: U NIL
Param 10: U NIL
Param 11: U NIL
Param 12: L F
Param 13: O Class: TDIALOG
Param 14: U NIL
Param 15: U NIL
Local 1: O Class: TDIALOG
Local 2: N 6489384
Local 3: U
Local 4: O Class: TDIALOG
LOGABERT
Param 1: L F
Param 2: L T
Param 3: L T
Param 4: L T
Param 5: L F
Param 6: L T
Local 1: L T
Local 2: L F
Local 3: O Class: TDIALOG
Local 4: U NIL
Local 5: U NIL
Local 6: U NIL
Local 7: U NIL
Local 8: U NIL
Local 9: U NIL
Local 10: C ""
Local 11: A Len: 0
Local 12: C ""
(b)MAIN
Param 1: O Class: TWINDOW
TWINDOW:ACTIVATE
Param 1: C "MAXIMIZED"
Param 2: U NIL
Param 3: U NIL
Param 4: U NIL
Param 5: U NIL
Param 6: U NIL
Param 7: B {|| Block }
Param 8: B {|| Block }
Param 9: U NIL
Param 10: U NIL
Param 11: U NIL
Param 12: U NIL
Param 13: U NIL
Param 14: U NIL
Param 15: U NIL
Param 16: U NIL
Param 17: B {|| Block }
Param 18: U NIL
Param 19: U NIL
Param 20: L F
Param 21: U NIL
Local 1: O Class: TWINDOW
Local 2: U NIL
Local 3: U NIL
MAIN
Local 1: U NIL
Local 2: U NIL
Local 3: U NIL
Local 4: U NIL
Local 5: U NIL
Local 6: U NIL
Local 7: C "Release {dt}{h}: {11/03/25}{18:43:54}"
Local 8: C "xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)"
Local 9: C "FWH 25.01"
Local 10: N 656
Local 11: L T
Local 12: L F
Local 13: L T
Local 14: O Class: TCURSOR
Local 15: C "10740"
Local 16: C "ReleasePAF .003.000"
Local 17: C "ReleasePDV .003.321"
Local 18: C "ReleaseNFe .003.029"
Local 19: C "ReleaseSql .003.015"
Local 20: A Len: 0
Local 21: A Len: 0
Local 22: U NIL
Local 23: O Class: TFONT
Linked RDDs
===========
DBF
DBFFPT
SIXCDX
DBFBLOB
DBFCDX
DBFNTX
ADS
ADT
ADSVFP
ADSCDX
ADSNTX
DataBases in use
================
1: MNT <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
4 3 .F. .T.
Indexes in use TagName
=> CODUSUARIO+INICONEXAO TAG_MNT_01
USUREDE TAG_MNT_02
HOST TAG_MNT_03
IP TAG_MNT_04
INICONEXAO TAG_MNT_05
AMBIENTE+USUREDE TAG_MNT_06
NOMUSUARIO TAG_MNT_07
FUNCAO TAG_MNT_08
ROTINA TAG_MNT_09
SETOR TAG_MNT_10
DEPARTAMEN TAG_MNT_11
COD_FIL TAG_MNT_12
EMPRESA TAG_MNT_13
MODULO TAG_MNT_14
Relations in use
2: HLP <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
20 28 .F. .F.
Indexes in use TagName
=> VARIAVEL TAG_TOP_01
ALIAS+VARIAVEL TAG_TOP_02
FUNNAME+VARIAVEL TAG_TOP_03
Relations in use
3: TOP <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 4 .F. .F.
Indexes in use TagName
=> ID TAG_TOP_01
Relations in use
4: USU <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 3 .F. .F.
Indexes in use TagName
=> CodUsu TAG_USU_01
NomUsu TAG_USU_02
SenUsu TAG_USU_03
Relations in use
5: SM0 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 1 .F. .F.
Indexes in use TagName
=> M0_CODIGO+M0_CODFIL TAG_EMP_01
Relations in use
6: MOD <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
16 17 .F. .F.
Indexes in use TagName
ID TAG_MOD_01
NOME TAG_MOD_02
=> DESC TAG_MOD_03
Relations in use
7: PER <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
24 23 .F. .T.
Indexes in use TagName
=> CODUSU+CODEMP+CODFIL+MODULO TAG_PER_01
CODUSU+CODEMP+CODFIL+ARQMNU TAG_PER_02
Relations in use
8: SX1 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 2 .F. .F.
Indexes in use TagName
=> X1_GRUPO+X1_ORDEM TAG_SX1_01
X1_GRUPO+X1_VARIAVL+X1_ORDEM TAG_SX1_02
X1_GRUPO+X1_VARIAVL+X1_VAR01 TAG_SX1_03
Relations in use
9: SX2 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
6 240 .F. .F.
Indexes in use TagName
=> X2_CHAVE TAG_SX2_01
X2_ARQUIVO TAG_SX2_02
Relations in use
10: SX3 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
5489 5944 .F. .F.
Indexes in use TagName
=> X3_ARQUIVO+X3_ORDEM TAG_SX3_01
X3_CAMPO+X3_ARQUIVO TAG_SX3_02
X3_ARQUIVO+X3_FOLDER TAG_SX3_03
X3_ARQUIVO+X3_CAMPO TAG_SX3_04
Relations in use
11: SX4 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> X4_FILIAL+DTOS(X4_DATA)+X4_CODUSU TAG_SX4_01
X4_FILIAL+DTOS(X4_DATA)+X4_NOMUSU TAG_SX4_02
X4_FILIAL+DTOS(X4_DTCOMP)+X4_CODUSU
TAG_SX4_03
X4_FILIAL+X4_CODUSU+DTOS(X4_DATA)+X4_HORA
TAG_SX4_04
X4_FILIAL+DTOS(X4_DATA)+X4_HORA TAG_SX4_05
X4_FILIAL+X4_CODUSU+DTOS(X4_DTCOMP)+X4_HRCOMP
TAG_SX4_06
X4_FILIAL+DTOS(X4_DTCOMP)+X4_HRCOMP
TAG_SX4_07
X4_FILIAL+X4_NOMUSU TAG_SX4_08
Relations in use
12: SX6 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
201 451 .F. .F.
Indexes in use TagName
=> X6_VAR TAG_SX6_01
Relations in use
13: SX7 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 938 .F. .F.
Indexes in use TagName
=> X7_CAMPO+X7_SEQUENC TAG_SX6_01
Relations in use
14: SIX <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
876 950 .F. .F.
Indexes in use TagName
=> INDICE+ORDEM TAG_SIX_01
CHAVE TAG_SIX_02
Relations in use
15: SIY <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
2 108 .F. .F.
Indexes in use TagName
=> INDICE+ORDEM+CAMPO TAG_SIY_01
Relations in use
16: SXA <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
34 48 .F. .F.
Indexes in use TagName
=> XA_ALIAS+XA_ORDEM TAG_SXA_01
Relations in use
17: SXB <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
949 1113 .F. .F.
Indexes in use TagName
=> XB_ALIAS+XB_TIPO+XB_SEQ+XB_COLUNA TAG_SXB_01
XB_ALIAS+XB_TIPO+XB_COLUNA+XB_SEQ TAG_SXB_02
Relations in use
18: SXC <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
12 61 .F. .F.
Indexes in use TagName
=> XC_CAMPO+XC_RAMO+XC_SEGMENT TAG_SXC_01
Relations in use
19: SXE <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 5 .F. .F.
Indexes in use TagName
Relations in use
20: SXF <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> XF_FILIAL+XF_MODULO+XF_USUARIO+XF_TIPO+DESCEND(DTOS(XF_DATA))+DESCEND(XF_HORA)
TAG_SXF_01
XF_FILIAL+XF_MODULO+XF_USUARIO+XF_TIPO+XF_FUNCAO+XF_PARAMET
TAG_SXF_02
XF_FILIAL+XF_MODULO+XF_USUARIO+XF_FUNCAO+XF_PARAMET+XF_TIPO
TAG_SXF_03
Relations in use
21: LOG <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> CALIAS+DTOS(DATA) TAG_LOG_01
USU +CALIAS+DTOS(DATA) TAG_LOG_02
DTOS(DATA) TAG_LOG_03
USU + DTOS(DATA) TAG_LOG_04
UPPER( MODU ) + DTOS(DATA) TAG_LOG_05
USU + UPPER( MODU ) + DTOS(DATA) TAG_LOG_06
Relations in use
22: => SXG <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
132 414 .F. .F.
Indexes in use TagName
=> XG_MODULO+XG_ORDEM+XG_CODUSU TAG_SXG_01
XG_CODUSU+XG_FUNCAO TAG_SXG_02
XG_MODULO+XG_CODUSU+XG_ORDEM TAG_SXG_03
Relations in use
--- Conteudo do registro corrente --------------------------
XG_MODULO: 99
XG_ORDEM: 01
XG_TITULO: Atualizacao
XG_FUNCAO: P_CfgB120()
XG_PROPRI: S
XG_USADO: S
XG_TIPO: R
XG_GROUP: N
XG_BITMAP: BOT_ATUALIZACAO
XG_CODUSU: 000
------------------------------------------------------------
23: SM2 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
4 4 .F. .F.
Indexes in use TagName
=> Upper(M2_FILIAL+DESCEND(DTOS(M2_DATA))+DESCEND(M2_SEQ))
SM201001
Upper(M2_FILIAL+DTOS(M2_DATA)) SM201002
Relations in use
24: SX5 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 2813 .F. .F.
Indexes in use TagName
=> Upper(X5_FILIAL+X5_TABELA+X5_CHAVE)
SX501001
Upper(X5_FILIAL+X5_TABELA+substr(X5_DESCRI,1,100))
SX501002
Relations in use
25: AGE <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(GE_FILIAL+GE_TIPO+DESCEND(DTOS(GE_DTAGE)))
AGE01001
Upper(GE_FILIAL+GE_TIPO+DESCEND(DTOS(GE_DTCAD)))
AGE01002
Upper(GE_FILIAL+GE_NOMCLI) AGE01003
Upper(GE_FILIAL+GE_CODCLI) AGE01004
Upper(GE_FILIAL+GE_TIPO+DTOS(GE_DTAGE))
AGE01005
Relations in use
26: TEL <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(EL_FILIAL+EL_NOMEFON) TEL01001
Upper(EL_FILIAL+EL_FONEFON) TEL01002
Upper(EL_FILIAL+EL_FANTASI) TEL01003
Upper(EL_FILIAL+EL_CODFON) TEL01004
Relations in use
27: SA1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 1 .F. .F.
Indexes in use TagName
=> Upper(A1_FILIAL+A1_CODCLI) SA101001
Upper(A1_FILIAL+A1_NOMCLI) SA101002
Upper(A1_FILIAL+STRZERO(MONTH(A1_DTNASCL),2)+STRZERO(DAY(A1_DTNASCL),2)+A1_NOMCLI)
SA101003
Upper(A1_FILIAL+(STRZERO(MONTH(A1_DTNASCO),2)+STRZERO(DAY(A1_DTNASCO),2)))
SA101004
Upper(A1_FILIAL+A1_CIDCLI+A1_NOMCLI)
SA101005
Upper(A1_FILIAL+DTOS(A1_DTCAD)) SA101006
Upper(A1_FILIAL+A1_FANTASI) SA101007
Upper(A1_FILIAL+A1_CICLI) SA101008
Upper(A1_FILIAL+A1_CODVEND+A1_CODCLI)
SA101009
Upper(A1_FILIAL+A1_CODVEND+A1_NOMCLI)
SA101010
Upper(A1_FILIAL+A1_ROTA) SA101011
Upper(A1_FILIAL+A1_UFCLI+A1_CODCLI)
SA101012
Upper(A1_FILIAL+A1_UFCLI+A1_NOMCLI)
SA101013
Upper(A1_FILIAL+A1_CODCLI+A1_EXPORTA)
SA101014
Upper(A1_FILIAL+A1_UFCLI+A1_CIDCLI+A1_NOMCLI)
SA101015
Relations in use
28: SF5 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 2 .F. .F.
Indexes in use TagName
=> Upper(F5_FILIAL+F5_CODIGO) SF501001
Upper(F5_FILIAL+F5_DESC) SF501002
Relations in use
29: SB1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(B1_FILIAL+B1_CODPRO) SB101001
Upper(B1_FILIAL+B1_DESPRO) SB101002
Upper(B1_FILIAL+B1_GRUPRO+B1_SGRUPRO+B1_CODPRO)
SB101003
Upper(B1_FILIAL+B1_GRUPRO+B1_SGRUPRO+B1_DESPRO)
SB101004
Upper(B1_FILIAL+B1_GRUPRO+B1_SGRUPRO+B1_MARCA+B1_DESPRO)
SB101005
Upper(B1_FILIAL+B1_GRUPRO+B1_SGRUPRO+B1_REF)
SB101006
Upper(B1_FILIAL+B1_MARCA+B1_DESPRO+B1_REF)
SB101007
Upper(B1_FILIAL+B1_CODBARR) SB101008
Upper(B1_FILIAL+B1_REF) SB101009
Upper(B1_FILIAL+DTOS(B1_DTCAD)) SB101010
Upper(B1_FILIAL+B1_TIPO+B1_GRUPRO+B1_SGRUPRO+B1_CODPRO)
SB101011
Upper(B1_FILIAL+B1_TAMANHO+B1_DESPRO)
SB101012
Upper(B1_FILIAL+B1_CODGRAD) SB101013
Upper(B1_FILIAL+B1_TECRAPI) SB101014
Upper(B1_FILIAL+B1_CODEMBA) SB101015
Relations in use
30: SFB <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 26 .F. .F.
Indexes in use TagName
=> Upper(FB_FILIAL+FB_COD+FB_CODECF) SFB01001
Upper(FB_FILIAL+FB_CODECF+FB_COD) SFB01002
Upper(FB_FILIAL+FB_DESC) SFB01003
Relations in use
31: SA3 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 1 .F. .F.
Indexes in use TagName
=> Upper(A3_FILIAL+A3_CODVEN) SA301001
Upper(A3_FILIAL+A3_NOME) SA301002
Upper(A3_FILIAL+STRZERO(MONTH(A3_DTNASC),2)+STRZERO(DAY(A3_DTNASC),2)+A3_NOME)
SA301003
Upper(A3_FILIAL+A3_GERENTE) SA301004
A3_CODVEN SA39999
Relations in use
32: SAF <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(AF_FILIAL+AF_CODVEN) SAF01001
Relations in use
33: SF2 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(F2_FILIAL+F2_TIPIMP+F2_SERIE+F2_DOC+F2_CLIENTE+DTOS(F2_DTEMISS))
SF201001
Upper(F2_FILIAL+F2_TIPIMP+F2_SERIE+F2_DOC+F2_VEND+DTOS(F2_DTEMISS))
SF201002
Upper(F2_FILIAL+F2_TIPIMP+F2_SERIE+F2_DOC+F2_TRANSP+DTOS(F2_DTEMISS))
SF201003
Upper(F2_FILIAL+DTOS(F2_DTEMISS)+F2_CLIENTE+F2_SERIE+F2_DOC)
SF201004
Upper(F2_FILIAL+DTOS(F2_DTEMISS)+F2_VEND+F2_SERIE+F2_DOC)
SF201005
Upper(F2_FILIAL+F2_CLIENTE+F2_SERIE+F2_DOC+DTOS(F2_DTEMISS))
SF201006
Upper(F2_FILIAL+F2_CLIENTE+DTOS(F2_DTEMISS)+F2_SERIE+F2_DOC)
SF201007
Upper(F2_FILIAL+F2_VEND+F2_SERIE+F2_DOC+DTOS(F2_DTEMISS))
SF201008
Upper(F2_FILIAL+F2_VEND+DTOS(F2_DTEMISS)+F2_SERIE+F2_DOC)
SF201009
Upper(F2_FILIAL+DTOS(F2_DTENTRE)+F2_HORA)
SF201010
Upper(F2_FILIAL+F2_TIPIMP+F2_SERIE+DESCEND(F2_DOC))
SF201011
Upper(F2_FILIAL+F2_NOMCLI+DTOS(F2_DTEMISS)+F2_TIPIMP+F2_SERIE+F2_DOC)
SF201012
Upper(F2_FILIAL+F2_NFEID) SF201013
Upper(F2_FILIAL+F2_NSERECF+F2_LIMFECF+F2_CUPFIS)
SF201014
Upper(F2_FILIAL+F2_PEDIDO) SF201015
Relations in use
34: NFS <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(NFS_FILIAL+NFS_SERIE+NFS_DOC)
NFS01001
Upper(NFS_FILIAL+NFS_CHNFE) NFS01002
Upper(NFS_FILIAL+NFS_SITUAC+NFS_SERIE+NFS_DOC)
NFS01003
Upper(NFS_FILIAL+NFS_STATUS+NFS_SERIE+NFS_DOC)
NFS01004
Upper(NFS_FILIAL+NFS_TIPDOC+NFS_SERIE+NFS_DOC+NFS_CLIFOR)
NFS01005
Upper(NFS_FILIAL+NFS_STATUS+NFS_SERIE+descend(NFS_DOC))
NFS01006
Upper(NFS_FILIAL+NFS_SERIE+descend(NFS_DOC))
NFS01007
Upper(NFS_FILIAL+NFS_SITUAC+NFS_SERIE+descend(NFS_DOC))
NFS01008
Upper(NFS_FILIAL+NFS_MODEMI+NFS_SITUAC+NFS_SERIE+NFS_DOC)
NFS01009
Upper(NFS_FILIAL+DTOS(NFS_DIGITA)+NFS_SERIE+NFS_DOC)
NFS01010
Upper(NFS_FILIAL+NFS_SERIE+DTOS(NFS_AUTORI)+NFS_DOC)
NFS01011
Relations in use
35: SD2 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(D2_FILIAL+D2_TIPIMP+D2_SERIE+D2_DOC+D2_ITEM)
SD201001
Upper(D2_FILIAL+D2_TIPIMP+D2_SERIE+D2_DOC+DTOS(D2_DTEMISS))
SD201002
Upper(D2_FILIAL+D2_TIPIMP+D2_SERIE+D2_DOC+D2_CLIENTE+D2_ITEM)
SD201003
Upper(D2_FILIAL+D2_TIPIMP+D2_SERIE+D2_DOC+D2_PRODUTO+D2_ALMOX+D2_LOTE)
SD201004
Upper(D2_FILIAL+DTOS(D2_DTEMISS)+D2_SERIE+D2_DOC)
SD201005
Upper(D2_FILIAL+D2_CLIENTE+D2_SERIE+D2_DOC)
SD201006
Upper(D2_FILIAL+D2_PRODUTO+D2_SERIE+D2_DOC)
SD201007
Upper(D2_FILIAL+D2_PEDIDO+D2_SERIE+D2_DOC+D2_ITEM)
SD201008
Upper(D2_FILIAL+D2_TPIMORI+D2_SERORI+D2_NFORI+D2_CLIENTE+D2_PRODUTO+D2_ALMOX+D2_LOTE)
SD201009
Upper(D2_FILIAL+D2_NSERECF+D2_LIMFECF+D2_CUPFIS+D2_ITEM)
SD201010
Upper(D2_FILIAL+D2_TIPIMP+DTOS(D2_DTEMISS))
SD201011
Upper(D2_FILIAL+D2_PRODUTO+DESCEND(DTOS(D2_DTEMISS)))
SD201012
Relations in use
36: SDM <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(DM_FILIAL+DM_TIPIMP+DM_SERIE+DM_DOC+DM_ITEM)
SDM01001
Relations in use
37: FE1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(FE_FILIAL+FE_MESANO) FE101001
Upper(FE_FILIAL+FE_ANO) FE101002
Relations in use
38: SB9 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(B9_FILIAL+B9_CODPRO+B9_ALMOX+B9_GRADE)
SB901001
Upper(B9_FILIAL+B9_DESPRO) SB901002
Upper(B9_FILIAL+B9_CODBARR) SB901003
Upper(B9_FILIAL+B9_CODPRO+B9_COLUNA+B9_LINHA)
SB901004
Relations in use
39: SF4 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 99 .F. .F.
Indexes in use TagName
=> Upper(F4_FILIAL+F4_CODFISC) SF401001
Upper(F4_FILIAL+F4_CFOP) SF401002
Upper(F4_FILIAL+F4_DESFISC) SF401003
Upper(F4_FILIAL+F4_SCFOP) SF401004
Relations in use
40: PCC <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 562 .F. .F.
Indexes in use TagName
=> Upper(CC_FILIAL+CC_CONTA) PCC01001
Upper(CC_FILIAL+CC_DESCON) PCC01002
Upper(CC_FILIAL+CC_CODIGO) PCC01003
Relations in use
41: SB2 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(B2_FILIAL+B2_CODPRO+B2_ALMOX)
SB201001
Upper(B2_FILIAL+B2_DESPRO+B2_ALMOX)
SB201002
Upper(B2_FILIAL+B2_ALMOX+B2_CODPRO)
SB201003
Upper(B2_FILIAL+B2_ALMOX+B2_DESPRO)
SB201004
Upper(B2_FILIAL+B2_GRADE) SB201005
Relations in use
42: SD3 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(D3_FILIAL+D3_COD+D3_TM) SD301001
Upper(D3_FILIAL+D3_COD+D3_ALMOX+D3_LOTE+DTOS(D3_EMISSAO))
SD301002
Upper(D3_FILIAL+D3_COD+D3_OP+D3_SEQ)
SD301003
Upper(D3_FILIAL+D3_COD+D3_OP+D3_DOC)
SD301004
Upper(D3_FILIAL+D3_DESC) SD301005
Upper(D3_FILIAL+D3_TM+D3_TIPIMP+D3_SERIE+D3_DOC+D3_CLIFOR+D3_COD+D3_ALMOX+D3_LOTE+D3_SEQ)
SD301006
Upper(D3_FILIAL+D3_TIPIMP+D3_SERIE+D3_DOC+D3_CLIFOR+D3_COD+D3_ALMOX+D3_LOTE+D3_SEQ)
SD301007
Upper(D3_FILIAL+D3_COD+DTOS(D3_EMISSAO))
SD301008
Upper(D3_FILIAL+D3_TIPIMP+D3_SERIE+D3_DOC+D3_COD+D3_ALMOX+D3_LOTE+D3_ROTINA)
SD301009
Upper(D3_FILIAL+DTOS(D3_EMISSAO)+D3_VENCOMP+D3_COD)
SD301010
Upper(D3_FILIAL+D3_REF+D3_ALMOX+D3_VENCOMP+DTOS(D3_EMISSAO))
SD301011
Upper(D3_FILIAL+D3_COD+D3_CLIFOR+DTOS(D3_EMISSAO))
SD301012
Upper(D3_FILIAL+D3_TIPIMP+D3_SERIE+D3_DOC+D3_CLIFOR+D3_COD+D3_SEQ)
SD301013
Upper(D3_FILIAL+D3_TM+D3_TIPIMP+D3_SERIE+D3_DOC+D3_COD+D3_ALMOX+D3_LOTE+D3_SEQ)
SD301014
Upper(D3_FILIAL+D3_TIPIMP+D3_SERIE+D3_DOC+D3_COD+D3_ALMOX+D3_LOTE+D3_SEQ)
SD301015
Relations in use
43: SE1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(E1_FILIAL+E1_PREFIXO+E1_NUMDUP+E1_NUMPARC+E1_CODCLI+E1_CODHIST+E1_CODTIPO+DTOS(E1_DTEMIS))
SE101001
Upper(E1_FILIAL+E1_PREFIXO+E1_NUMDUP+E1_CODCLI)
SE101002
Upper(E1_FILIAL+E1_CODCLI+E1_PREFIXO+E1_NUMDUP+E1_NUMPARC+DTOS(E1_DTVENC))
SE101003
Upper(E1_FILIAL+E1_CODCLI+DTOS(E1_DTPAGO)+DTOS(E1_DTVENC))
SE101004
Upper(E1_FILIAL+E1_CODCLI+DTOS(E1_DTVENC))
SE101005
Upper(E1_FILIAL+E1_CODCLI+DTOS(E1_DTEMIS))
SE101006
Upper(E1_FILIAL+DTOS(E1_DTPAGO)+E1_CODTIPO)
SE101007
Upper(E1_FILIAL+DTOS(E1_DTVENC)+E1_CODTIPO)
SE101008
Upper(E1_FILIAL+DTOS(E1_DTEMIS)+E1_CODCLI)
SE101009
Upper(E1_FILIAL+E1_SITUA+DTOS(E1_DTVENC))
SE101010
Upper(E1_FILIAL+E1_VENDEDO+DTOS(E1_DTPAGO))
SE101011
Upper(E1_FILIAL+E1_NOME+DTOS(E1_DTEMIS))
SE101012
Upper(E1_FILIAL+E1_CHAVDES) SE101013
Upper(E1_FILIAL+E1_COMITIT) SE101014
Upper(E1_FILIAL+E1_BOLETON) SE101015
Relations in use
44: SF1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(F1_FILIAL+F1_TIPIMP+F1_SERIE+F1_DOC+F1_FORNECE+DTOS(F1_DTEMISS))
SF101001
Upper(F1_FILIAL+F1_TIPIMP+F1_SERIE+F1_DOC+F1_COMP+DTOS(F1_DTEMISS))
SF101002
Upper(F1_FILIAL+F1_TIPIMP+F1_SERIE+F1_DOC+F1_TRANSP+DTOS(F1_DTEMISS))
SF101003
Upper(F1_FILIAL+DTOS(F1_DTEMISS)+F1_FORNECE+F1_SERIE+F1_DOC)
SF101004
Upper(F1_FILIAL+DTOS(F1_DTEMISS)+F1_COMP+F1_SERIE+F1_DOC)
SF101005
Upper(F1_FILIAL+F1_FORNECE+F1_SERIE+F1_DOC+DTOS(F1_DTEMISS))
SF101006
Upper(F1_FILIAL+F1_FORNECE+DTOS(F1_DTEMISS)+F1_SERIE+F1_DOC)
SF101007
Upper(F1_FILIAL+F1_COMP+F1_SERIE+F1_DOC+DTOS(F1_DTEMISS))
SF101008
Upper(F1_FILIAL+F1_COMP+DTOS(F1_DTEMISS)+F1_SERIE+F1_DOC)
SF101009
Upper(F1_FILIAL+DTOS(F1_DTENTRE)+F1_HORA)
SF101010
Upper(F1_FILIAL+F1_TIPIMP+F1_SERIE+DESCEND(F1_DOC))
SF101011
Upper(F1_FILIAL+F1_NOMFOR+DTOS(F1_DTENTRE)+F1_TIPIMP+F1_SERIE+F1_DOC)
SF101012
Upper(F1_FILIAL+F1_NFEID) SF101013
Upper(F1_FILIAL+DTOS(F1_DTENTRE)+F1_FORNECE+F1_SERIE+F1_DOC)
SF101014
Upper(F1_FILIAL+F1_TIPIMP+F1_DOC) SF101015
Relations in use
45: SD1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+D1_ITEM)
SD101001
Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+DTOS(D1_DTEMISS))
SD101002
Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+D1_FORNECE+D1_ITEM)
SD101003
Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+D1_PRODUTO+D1_ALMOX+D1_LOTE)
SD101004
Upper(D1_FILIAL+DTOS(D1_DTEMISS)+D1_SERIE+D1_DOC+D1_FORNECE)
SD101005
Upper(D1_FILIAL+D1_FORNECE+D1_SERIE+D1_DOC+DTOS(D1_DTEMISS))
SD101006
Upper(D1_FILIAL+D1_PRODUTO+D1_SERIE+D1_DOC+DTOS(D1_DTEMISS))
SD101007
Upper(D1_FILIAL+D1_PEDIDO+D1_SERIE+D1_DOC+D1_ITEM)
SD101008
Upper(D1_FILIAL+D1_TPIMORI+D1_SERORI+D1_NFORI+D1_FORNECE+D1_PRODUTO+D1_ALMOX+D1_LOTE)
SD101009
Upper(D1_FILIAL+DTOS(D1_DTENTRE)+D1_SERIE+D1_DOC+D1_FORNECE)
SD101010
Upper(D1_FILIAL+D1_PRODUTO+DESCEND(DTOS(D1_DTEMISS)))
SD101011
Upper(D1_FILIAL+DTOS(D1_DTENTRE)+D1_PRODUTO)
SD101012
Upper(D1_FILIAL+D1_FORNECE+D1_PRODUTO+DESCEND(DTOS(D1_DTEMISS)))
SD101013
Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+D1_FORNECE+D1_PRODUTO+D1_ITEM)
SD101014
Relations in use
46: LSN <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
4 68 .F. .F.
Indexes in use TagName
=> Upper(SN_FILIAL+SN_TIPIMP+SN_SERIE+SN_NUMERO)
LSN01001
Upper(SN_FILIAL+SN_TIPIMP+SN_NUMERO+SN_SERIE)
LSN01002
Upper(SN_FILIAL+SN_SERIE+SN_TIPIMP+SN_NUMERO)
LSN01003
Upper(SN_FILIAL+SN_SERIE+SN_NUMERO+SN_TIPIMP)
LSN01004
Relations in use
Classes in use:
===============
1 ERROR
2 HASHENTRY
3 HBCLASS
4 HBOBJECT
5 HB_LOGGER
6 HB_LOGCHANNEL
7 HB_LOGCONSOLE
8 HB_LOGFILE
9 TFONT
10 TINI
11 TIMMERSIG
12 TWINDOW
13 TDIALOG
14 TBRUSH
15 TCONTROL
16 TBITMAP
17 TREG32
18 TRECT
19 OTBLOG
20 TCURSOR
21 TICON
22 TBAR
23 TSBUTTON
24 TCHECKBOX
25 TMSGBAR
26 TMSGITEM
27 TSTSAY
28 TSLINES
29 TIMAGE
30 TVGET
31 GET
32 TGET
33 TCLIPGET
34 TCOMBOBOX
35 TSAY
36 TPROGRESS
37 TIPCLIENT
38 TIPCLIENTHTTP
39 TURL
40 TBTNBMP
41 TFRXCFG
42 TFILE
43 TTXTFILE
44 TXMLDOCUMENT
45 TXMLNODE
46 TXMLITERATOR
47 TXMLITERATORSCAN
48 TMENU
49 TMENUITEM
50 TSTRUCT
Memory Analysis
===============
2419 Static variables
Dynamic memory consume:
Actual Value: 0 bytes
Highest Value: 0 bytes
Versao do sistema
=================
Versao : 7.10
Release : 10740
Data Compilaçao: 06-05-2024 14:02:02
SVN : 7969
Disco : Y: Total : 465.75 GB Livre : 75.09 GB
CNPJEmp :
PLANOSIS : 1
UpdateAuto : N
Code: Select all | Expand
2025-03-11 18:43:04 LogFile: Reopening file due to size limit breaking
2025-03-11 18:43:42 INFO: Main thread terminated
2025-03-11 18:43:42 -- CompuRMT end --
2025-03-11 18:43:55 -- CompuRMT start --
2025-03-11 18:44:03 CRITICAL: *****The program has caused an internal error. Framestack:
*****Called from: ADEL(0) in Module:
*****Called from: FWDELRESOURCE(37) in Module: .\source\function\checkres.prg
*****Called from: DELETEOBJECT(0) in Module:
*****Called from: PALBMPFREE(2430) in Module: SOURCE\CLASSES\TSBUTTON.PRG
*****Called from: TSBUTTON:FREEBITMAPS(1043) in Module: SOURCE\CLASSES\TSBUTTON.PRG
*****Called from: TSBUTTON:DESTROY(955) in Module: SOURCE\CLASSES\TSBUTTON.PRG
*****Called from: TWINDOW:HANDLEEVENT(0) in Module:
*****Called from: TCONTROL:HANDLEEVENT(1877) in Module: .\source\classes\control.prg
*****Called from: TSBUTTON:HANDLEEVENT(1323) in Module: SOURCE\CLASSES\TSBUTTON.PRG
*****Called from: _FWH(259) in Module: .\source\classes\window.prg
*****Called from: DIALOGBOXINDIRECTW(0) in Module:
*****Called from: TDIALOG:ACTIVATE(325) in Module: .\source\classes\dialog.prg
*****Called from: LOGABERT(1115) in Module: .\PRG\CompuRmt.PRG
*****Called from: (b)MAIN(673) in Module: .\PRG\CompuRmt.PRG
*****Called from: TWINDOW:ACTIVATE(1120) in Module: .\source\classes\window.prg
*****Called from: MAIN(673) in Module: .\PRG\CompuRmt.PRG
*****Internal address: 0x75F061
*****Low-level code: 0/FFFFFFFFC0000005: Memory read/write access violation
2025-03-11 18:45:01 INFO: Main thread terminated
2025-03-11 18:45:01 -- CompuRMT end --
Code: Select all | Expand
Empresa
========
Empresa:.01 -Filial:.01
Fantasia:.EMPRESA TESTE
Real:.EMPRESA TESTE
Telefone:.
Email:.
Cidade:.SH/PR
Application
===========
Path and name: Y:\Sistemas\Sig_Win\CompuRMT.exe (32 bits)
Size: ********* bytes
Time from start: 0 hours 0 mins 10 secs
Error occurred at: 11/03/25, 18:44:05
Error description:
Stack Calls
===========
Called from: => ADEL(0)
Called from: .\source\function\checkres.prg => FWDELRESOURCE(37)
Called from: => DELETEOBJECT(0)
Called from: SOURCE\CLASSES\TSBUTTON.PRG => PALBMPFREE(2430)
Called from: SOURCE\CLASSES\TSBUTTON.PRG => TSBUTTON:FREEBITMAPS(1043)
Called from: SOURCE\CLASSES\TSBUTTON.PRG => TSBUTTON:DESTROY(955)
Called from: => TWINDOW:HANDLEEVENT(0)
Called from: .\source\classes\control.prg => TCONTROL:HANDLEEVENT(1877)
Called from: SOURCE\CLASSES\TSBUTTON.PRG => TSBUTTON:HANDLEEVENT(1323)
Called from: .\source\classes\window.prg => _FWH(259)
Called from: => DIALOGBOXINDIRECTW(0)
Called from: .\source\classes\dialog.prg => TDIALOG:ACTIVATE(325)
Called from: .\PRG\CompuRmt.PRG => LOGABERT(1115)
Called from: .\PRG\CompuRmt.PRG => (b)MAIN(673)
Called from: .\source\classes\window.prg => TWINDOW:ACTIVATE(1120)
Called from: .\PRG\CompuRmt.PRG => MAIN(673)
System
======
CPU type: Intel(R) Core(TM) i7-4810MQ CPU @ 2.80GHz 2794 Mhz
Hardware memory: 16290 megs
Free System resources: 90 %
GDI resources: 90 %
User resources: 90 %
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)
Windows version: 6.2, Build 9200
Variables in use
================
Procedure Type Value
==========================
ADEL
Param 1: A Len: 42
Len: 3
1 C :FONT:
2 N : -1106633967:
3 C :MAIN(68):
------------------------------------------------------
Len: 3
1 C :FONT:
2 N :1762266102:
3 C :MAIN(208):
------------------------------------------------------
Len: 3
1 C :FONT:
2 N : -1526068133:
3 C :MAIN(210):
------------------------------------------------------
Len: 3
1 C :FONT:
2 N :-905307912:
3 C :MAIN(211):
------------------------------------------------------
Len: 3
1 C :FONT:
2 N :-150329767:
3 C :MAIN(212):
------------------------------------------------------
Len: 3
1 C :ICON:
2 N : 299567517:
3 C :MAIN(549):
------------------------------------------------------
Len: 3
1 C :BMP:
2 N :-653980546:
3 C :TBRUSH:NEW(204)->MAIN(551):
------------------------------------------------------
Len: 3
1 C :BRUSH:
2 N :1661998542:
3 C :MAIN(551):
------------------------------------------------------
Len: 3
1 C :BMP:
2 N : -1660611456:
3 C :TBRUSH:NEW(215)->MAIN(552):
------------------------------------------------------
Len: 3
1 C :BRUSH:
2 N :1745884871:
3 C :MAIN(552):
------------------------------------------------------
Len: 3
1 C :FONT:
2 N :-989195964:
3 C :MAIN(553):
------------------------------------------------------
Len: 3
1 C :FONT:
2 N :2131366787:
3 C :TWINDOW:GETFONT(3174)->TWINDOW:NEW(984)->MAIN(557):
------------------------------------------------------
Len: 3
1 C :BRUSH:
2 N : 923797512:
3 C :TBAR:SETCOLOR(2942)->TBAR:SETGRADIENTS(288)->TBAR:NEW(192)->MAIN(568):
------------------------------------------------------
Len: 3
1 C :BRUSH:
2 N :-955246096:
3 C :TDIALOG:SETCOLOR(2942)->TDIALOG:NEW(223)->MAIN(594):
------------------------------------------------------
Len: 3
1 C :BRUSH:
2 N :1594890758:
3 C :TMSGBAR:SETCOLOR(2942)->TMSGBAR:DEFAULT(296)->TMSGBAR:NEW(185)->MAIN(604):
------------------------------------------------------
Len: 3
1 C :BMP:
2 N :-502983143:
3 C :TMSGBAR:PAINTBAR(727)->TMSGBAR:PAINT(669)->(b)TMSGBAR:TMSGBAR(72)->TMSGBAR:DISPLAY(0)->TMSGBAR:HANDLEEVENT(1843)->_FWH(1008)->UPDATEWINDOW(0)->TWINDOW:ACTIVATE(1111)->MAIN(673):
------------------------------------------------------
Array Muito Grande Passivo De erro.
Param 2: N 18
Local 1: U NIL
Local 2: U NIL
FWDELRESOURCE
Param 1: N -1341645292
Local 1: N 18
DELETEOBJECT
Param 1: N -1341645292
PALBMPFREE
Param 1: N 331266
Param 2: N -1341645292
TSBUTTON:FREEBITMAPS
Local 1: N 31
Local 2: O Class: TSBUTTON
Local 3: N 1
Local 4: L T
Local 5: C ""
TSBUTTON:DESTROY
Local 1: O Class: TSBUTTON
TWINDOW:HANDLEEVENT
Param 1: N 2
Param 2: N 0
Param 3: N 0
TCONTROL:HANDLEEVENT
Param 1: N 2
Param 2: N 0
Param 3: N 0
Local 1: O Class: TSBUTTON
Local 2: U NIL
TSBUTTON:HANDLEEVENT
Param 1: N 2
Param 2: N 0
Param 3: N 0
Local 1: O Class: TSBUTTON
_FWH
Param 1: N 0
Param 2: N 2
Param 3: N 0
Param 4: N 0
Param 5: N 25
Local 1: O Class: TSBUTTON
DIALOGBOXINDIRECTW
Param 1: N 5570560
Param 2: C "€ Ó ° L o g i n d e A b e r t u r a . ‚V - § n T I M A G E P 7 L
o T S T S A Y D a t a B a s e : € P 7 - p E D I T 1 1 / 0 3 / 2 5 P 7 ,
q T S T S A Y S e n h a : € P 7 ( (
r E D I T A D M 0 3 1 1 2 5 P d <
s T S T S A Y U s u a r i o : € P d ( ]
t E D I T P 7 7 œ
u T S T S A Y S e l e c i o n e a E m p r e s a : ¡P 7 A Œ Œ v C O M B O B O X P 7 P D
w T S T S A Y A m b i e n t e : ¡P 7 Z Œ Œ x C O M B O B O X € P U ‘ $ y B U T T O N € P ‚ ‘ $ z B U T T O N P 7 k – { S T A T I C P 7 z Œ
| m s c t l s _ p r o g r e s s 3 2 P x „
} S T A T I C 0 % "
Param 3: N 6489384
Param 4: O Class: TDIALOG
TDIALOG:ACTIVATE
Param 1: U NIL
Param 2: U NIL
Param 3: B {|| Block }
Param 4: L T
Param 5: U NIL
Param 6: L T
Param 7: B {|| Block }
Param 8: U NIL
Param 9: U NIL
Param 10: U NIL
Param 11: U NIL
Param 12: L F
Param 13: O Class: TDIALOG
Param 14: U NIL
Param 15: U NIL
Local 1: O Class: TDIALOG
Local 2: N 6489384
Local 3: U
Local 4: O Class: TDIALOG
LOGABERT
Param 1: L F
Param 2: L T
Param 3: L T
Param 4: L T
Param 5: L F
Param 6: L T
Local 1: L T
Local 2: L F
Local 3: O Class: TDIALOG
Local 4: U NIL
Local 5: U NIL
Local 6: U NIL
Local 7: U NIL
Local 8: U NIL
Local 9: U NIL
Local 10: C ""
Local 11: A Len: 0
Local 12: C ""
(b)MAIN
Param 1: O Class: TWINDOW
TWINDOW:ACTIVATE
Param 1: C "MAXIMIZED"
Param 2: U NIL
Param 3: U NIL
Param 4: U NIL
Param 5: U NIL
Param 6: U NIL
Param 7: B {|| Block }
Param 8: B {|| Block }
Param 9: U NIL
Param 10: U NIL
Param 11: U NIL
Param 12: U NIL
Param 13: U NIL
Param 14: U NIL
Param 15: U NIL
Param 16: U NIL
Param 17: B {|| Block }
Param 18: U NIL
Param 19: U NIL
Param 20: L F
Param 21: U NIL
Local 1: O Class: TWINDOW
Local 2: U NIL
Local 3: U NIL
MAIN
Local 1: U NIL
Local 2: U NIL
Local 3: U NIL
Local 4: U NIL
Local 5: U NIL
Local 6: U NIL
Local 7: C "Release {dt}{h}: {11/03/25}{18:43:54}"
Local 8: C "xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)"
Local 9: C "FWH 25.01"
Local 10: N 656
Local 11: L T
Local 12: L F
Local 13: L T
Local 14: O Class: TCURSOR
Local 15: C "10740"
Local 16: C "ReleasePAF .003.000"
Local 17: C "ReleasePDV .003.321"
Local 18: C "ReleaseNFe .003.029"
Local 19: C "ReleaseSql .003.015"
Local 20: A Len: 0
Local 21: A Len: 0
Local 22: U NIL
Local 23: O Class: TFONT
Linked RDDs
===========
DBF
DBFFPT
SIXCDX
DBFBLOB
DBFCDX
DBFNTX
ADS
ADT
ADSVFP
ADSCDX
ADSNTX
DataBases in use
================
1: MNT <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
4 3 .F. .T.
Indexes in use TagName
=> CODUSUARIO+INICONEXAO TAG_MNT_01
USUREDE TAG_MNT_02
HOST TAG_MNT_03
IP TAG_MNT_04
INICONEXAO TAG_MNT_05
AMBIENTE+USUREDE TAG_MNT_06
NOMUSUARIO TAG_MNT_07
FUNCAO TAG_MNT_08
ROTINA TAG_MNT_09
SETOR TAG_MNT_10
DEPARTAMEN TAG_MNT_11
COD_FIL TAG_MNT_12
EMPRESA TAG_MNT_13
MODULO TAG_MNT_14
Relations in use
2: HLP <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
20 28 .F. .F.
Indexes in use TagName
=> VARIAVEL TAG_TOP_01
ALIAS+VARIAVEL TAG_TOP_02
FUNNAME+VARIAVEL TAG_TOP_03
Relations in use
3: TOP <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 4 .F. .F.
Indexes in use TagName
=> ID TAG_TOP_01
Relations in use
4: USU <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 3 .F. .F.
Indexes in use TagName
=> CodUsu TAG_USU_01
NomUsu TAG_USU_02
SenUsu TAG_USU_03
Relations in use
5: SM0 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 1 .F. .F.
Indexes in use TagName
=> M0_CODIGO+M0_CODFIL TAG_EMP_01
Relations in use
6: MOD <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
16 17 .F. .F.
Indexes in use TagName
ID TAG_MOD_01
NOME TAG_MOD_02
=> DESC TAG_MOD_03
Relations in use
7: PER <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
24 23 .F. .T.
Indexes in use TagName
=> CODUSU+CODEMP+CODFIL+MODULO TAG_PER_01
CODUSU+CODEMP+CODFIL+ARQMNU TAG_PER_02
Relations in use
8: SX1 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 2 .F. .F.
Indexes in use TagName
=> X1_GRUPO+X1_ORDEM TAG_SX1_01
X1_GRUPO+X1_VARIAVL+X1_ORDEM TAG_SX1_02
X1_GRUPO+X1_VARIAVL+X1_VAR01 TAG_SX1_03
Relations in use
9: SX2 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
6 240 .F. .F.
Indexes in use TagName
=> X2_CHAVE TAG_SX2_01
X2_ARQUIVO TAG_SX2_02
Relations in use
10: SX3 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
5489 5944 .F. .F.
Indexes in use TagName
=> X3_ARQUIVO+X3_ORDEM TAG_SX3_01
X3_CAMPO+X3_ARQUIVO TAG_SX3_02
X3_ARQUIVO+X3_FOLDER TAG_SX3_03
X3_ARQUIVO+X3_CAMPO TAG_SX3_04
Relations in use
11: SX4 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> X4_FILIAL+DTOS(X4_DATA)+X4_CODUSU TAG_SX4_01
X4_FILIAL+DTOS(X4_DATA)+X4_NOMUSU TAG_SX4_02
X4_FILIAL+DTOS(X4_DTCOMP)+X4_CODUSU
TAG_SX4_03
X4_FILIAL+X4_CODUSU+DTOS(X4_DATA)+X4_HORA
TAG_SX4_04
X4_FILIAL+DTOS(X4_DATA)+X4_HORA TAG_SX4_05
X4_FILIAL+X4_CODUSU+DTOS(X4_DTCOMP)+X4_HRCOMP
TAG_SX4_06
X4_FILIAL+DTOS(X4_DTCOMP)+X4_HRCOMP
TAG_SX4_07
X4_FILIAL+X4_NOMUSU TAG_SX4_08
Relations in use
12: SX6 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
201 451 .F. .F.
Indexes in use TagName
=> X6_VAR TAG_SX6_01
Relations in use
13: SX7 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 938 .F. .F.
Indexes in use TagName
=> X7_CAMPO+X7_SEQUENC TAG_SX6_01
Relations in use
14: SIX <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
876 950 .F. .F.
Indexes in use TagName
=> INDICE+ORDEM TAG_SIX_01
CHAVE TAG_SIX_02
Relations in use
15: SIY <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
2 108 .F. .F.
Indexes in use TagName
=> INDICE+ORDEM+CAMPO TAG_SIY_01
Relations in use
16: SXA <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
34 48 .F. .F.
Indexes in use TagName
=> XA_ALIAS+XA_ORDEM TAG_SXA_01
Relations in use
17: SXB <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
949 1113 .F. .F.
Indexes in use TagName
=> XB_ALIAS+XB_TIPO+XB_SEQ+XB_COLUNA TAG_SXB_01
XB_ALIAS+XB_TIPO+XB_COLUNA+XB_SEQ TAG_SXB_02
Relations in use
18: SXC <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
12 61 .F. .F.
Indexes in use TagName
=> XC_CAMPO+XC_RAMO+XC_SEGMENT TAG_SXC_01
Relations in use
19: SXE <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 5 .F. .F.
Indexes in use TagName
Relations in use
20: SXF <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> XF_FILIAL+XF_MODULO+XF_USUARIO+XF_TIPO+DESCEND(DTOS(XF_DATA))+DESCEND(XF_HORA)
TAG_SXF_01
XF_FILIAL+XF_MODULO+XF_USUARIO+XF_TIPO+XF_FUNCAO+XF_PARAMET
TAG_SXF_02
XF_FILIAL+XF_MODULO+XF_USUARIO+XF_FUNCAO+XF_PARAMET+XF_TIPO
TAG_SXF_03
Relations in use
21: LOG <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> CALIAS+DTOS(DATA) TAG_LOG_01
USU +CALIAS+DTOS(DATA) TAG_LOG_02
DTOS(DATA) TAG_LOG_03
USU + DTOS(DATA) TAG_LOG_04
UPPER( MODU ) + DTOS(DATA) TAG_LOG_05
USU + UPPER( MODU ) + DTOS(DATA) TAG_LOG_06
Relations in use
22: => SXG <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
132 414 .F. .F.
Indexes in use TagName
=> XG_MODULO+XG_ORDEM+XG_CODUSU TAG_SXG_01
XG_CODUSU+XG_FUNCAO TAG_SXG_02
XG_MODULO+XG_CODUSU+XG_ORDEM TAG_SXG_03
Relations in use
--- Conteudo do registro corrente --------------------------
XG_MODULO: 99
XG_ORDEM: 01
XG_TITULO: Atualizacao
XG_FUNCAO: P_CfgB120()
XG_PROPRI: S
XG_USADO: S
XG_TIPO: R
XG_GROUP: N
XG_BITMAP: BOT_ATUALIZACAO
XG_CODUSU: 000
------------------------------------------------------------
23: SM2 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
4 4 .F. .F.
Indexes in use TagName
=> Upper(M2_FILIAL+DESCEND(DTOS(M2_DATA))+DESCEND(M2_SEQ))
SM201001
Upper(M2_FILIAL+DTOS(M2_DATA)) SM201002
Relations in use
24: SX5 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 2813 .F. .F.
Indexes in use TagName
=> Upper(X5_FILIAL+X5_TABELA+X5_CHAVE)
SX501001
Upper(X5_FILIAL+X5_TABELA+substr(X5_DESCRI,1,100))
SX501002
Relations in use
25: AGE <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(GE_FILIAL+GE_TIPO+DESCEND(DTOS(GE_DTAGE)))
AGE01001
Upper(GE_FILIAL+GE_TIPO+DESCEND(DTOS(GE_DTCAD)))
AGE01002
Upper(GE_FILIAL+GE_NOMCLI) AGE01003
Upper(GE_FILIAL+GE_CODCLI) AGE01004
Upper(GE_FILIAL+GE_TIPO+DTOS(GE_DTAGE))
AGE01005
Relations in use
26: TEL <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(EL_FILIAL+EL_NOMEFON) TEL01001
Upper(EL_FILIAL+EL_FONEFON) TEL01002
Upper(EL_FILIAL+EL_FANTASI) TEL01003
Upper(EL_FILIAL+EL_CODFON) TEL01004
Relations in use
27: SA1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 1 .F. .F.
Indexes in use TagName
=> Upper(A1_FILIAL+A1_CODCLI) SA101001
Upper(A1_FILIAL+A1_NOMCLI) SA101002
Upper(A1_FILIAL+STRZERO(MONTH(A1_DTNASCL),2)+STRZERO(DAY(A1_DTNASCL),2)+A1_NOMCLI)
SA101003
Upper(A1_FILIAL+(STRZERO(MONTH(A1_DTNASCO),2)+STRZERO(DAY(A1_DTNASCO),2)))
SA101004
Upper(A1_FILIAL+A1_CIDCLI+A1_NOMCLI)
SA101005
Upper(A1_FILIAL+DTOS(A1_DTCAD)) SA101006
Upper(A1_FILIAL+A1_FANTASI) SA101007
Upper(A1_FILIAL+A1_CICLI) SA101008
Upper(A1_FILIAL+A1_CODVEND+A1_CODCLI)
SA101009
Upper(A1_FILIAL+A1_CODVEND+A1_NOMCLI)
SA101010
Upper(A1_FILIAL+A1_ROTA) SA101011
Upper(A1_FILIAL+A1_UFCLI+A1_CODCLI)
SA101012
Upper(A1_FILIAL+A1_UFCLI+A1_NOMCLI)
SA101013
Upper(A1_FILIAL+A1_CODCLI+A1_EXPORTA)
SA101014
Upper(A1_FILIAL+A1_UFCLI+A1_CIDCLI+A1_NOMCLI)
SA101015
Relations in use
28: SF5 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 2 .F. .F.
Indexes in use TagName
=> Upper(F5_FILIAL+F5_CODIGO) SF501001
Upper(F5_FILIAL+F5_DESC) SF501002
Relations in use
29: SB1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(B1_FILIAL+B1_CODPRO) SB101001
Upper(B1_FILIAL+B1_DESPRO) SB101002
Upper(B1_FILIAL+B1_GRUPRO+B1_SGRUPRO+B1_CODPRO)
SB101003
Upper(B1_FILIAL+B1_GRUPRO+B1_SGRUPRO+B1_DESPRO)
SB101004
Upper(B1_FILIAL+B1_GRUPRO+B1_SGRUPRO+B1_MARCA+B1_DESPRO)
SB101005
Upper(B1_FILIAL+B1_GRUPRO+B1_SGRUPRO+B1_REF)
SB101006
Upper(B1_FILIAL+B1_MARCA+B1_DESPRO+B1_REF)
SB101007
Upper(B1_FILIAL+B1_CODBARR) SB101008
Upper(B1_FILIAL+B1_REF) SB101009
Upper(B1_FILIAL+DTOS(B1_DTCAD)) SB101010
Upper(B1_FILIAL+B1_TIPO+B1_GRUPRO+B1_SGRUPRO+B1_CODPRO)
SB101011
Upper(B1_FILIAL+B1_TAMANHO+B1_DESPRO)
SB101012
Upper(B1_FILIAL+B1_CODGRAD) SB101013
Upper(B1_FILIAL+B1_TECRAPI) SB101014
Upper(B1_FILIAL+B1_CODEMBA) SB101015
Relations in use
30: SFB <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 26 .F. .F.
Indexes in use TagName
=> Upper(FB_FILIAL+FB_COD+FB_CODECF) SFB01001
Upper(FB_FILIAL+FB_CODECF+FB_COD) SFB01002
Upper(FB_FILIAL+FB_DESC) SFB01003
Relations in use
31: SA3 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 1 .F. .F.
Indexes in use TagName
=> Upper(A3_FILIAL+A3_CODVEN) SA301001
Upper(A3_FILIAL+A3_NOME) SA301002
Upper(A3_FILIAL+STRZERO(MONTH(A3_DTNASC),2)+STRZERO(DAY(A3_DTNASC),2)+A3_NOME)
SA301003
Upper(A3_FILIAL+A3_GERENTE) SA301004
A3_CODVEN SA39999
Relations in use
32: SAF <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(AF_FILIAL+AF_CODVEN) SAF01001
Relations in use
33: SF2 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(F2_FILIAL+F2_TIPIMP+F2_SERIE+F2_DOC+F2_CLIENTE+DTOS(F2_DTEMISS))
SF201001
Upper(F2_FILIAL+F2_TIPIMP+F2_SERIE+F2_DOC+F2_VEND+DTOS(F2_DTEMISS))
SF201002
Upper(F2_FILIAL+F2_TIPIMP+F2_SERIE+F2_DOC+F2_TRANSP+DTOS(F2_DTEMISS))
SF201003
Upper(F2_FILIAL+DTOS(F2_DTEMISS)+F2_CLIENTE+F2_SERIE+F2_DOC)
SF201004
Upper(F2_FILIAL+DTOS(F2_DTEMISS)+F2_VEND+F2_SERIE+F2_DOC)
SF201005
Upper(F2_FILIAL+F2_CLIENTE+F2_SERIE+F2_DOC+DTOS(F2_DTEMISS))
SF201006
Upper(F2_FILIAL+F2_CLIENTE+DTOS(F2_DTEMISS)+F2_SERIE+F2_DOC)
SF201007
Upper(F2_FILIAL+F2_VEND+F2_SERIE+F2_DOC+DTOS(F2_DTEMISS))
SF201008
Upper(F2_FILIAL+F2_VEND+DTOS(F2_DTEMISS)+F2_SERIE+F2_DOC)
SF201009
Upper(F2_FILIAL+DTOS(F2_DTENTRE)+F2_HORA)
SF201010
Upper(F2_FILIAL+F2_TIPIMP+F2_SERIE+DESCEND(F2_DOC))
SF201011
Upper(F2_FILIAL+F2_NOMCLI+DTOS(F2_DTEMISS)+F2_TIPIMP+F2_SERIE+F2_DOC)
SF201012
Upper(F2_FILIAL+F2_NFEID) SF201013
Upper(F2_FILIAL+F2_NSERECF+F2_LIMFECF+F2_CUPFIS)
SF201014
Upper(F2_FILIAL+F2_PEDIDO) SF201015
Relations in use
34: NFS <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(NFS_FILIAL+NFS_SERIE+NFS_DOC)
NFS01001
Upper(NFS_FILIAL+NFS_CHNFE) NFS01002
Upper(NFS_FILIAL+NFS_SITUAC+NFS_SERIE+NFS_DOC)
NFS01003
Upper(NFS_FILIAL+NFS_STATUS+NFS_SERIE+NFS_DOC)
NFS01004
Upper(NFS_FILIAL+NFS_TIPDOC+NFS_SERIE+NFS_DOC+NFS_CLIFOR)
NFS01005
Upper(NFS_FILIAL+NFS_STATUS+NFS_SERIE+descend(NFS_DOC))
NFS01006
Upper(NFS_FILIAL+NFS_SERIE+descend(NFS_DOC))
NFS01007
Upper(NFS_FILIAL+NFS_SITUAC+NFS_SERIE+descend(NFS_DOC))
NFS01008
Upper(NFS_FILIAL+NFS_MODEMI+NFS_SITUAC+NFS_SERIE+NFS_DOC)
NFS01009
Upper(NFS_FILIAL+DTOS(NFS_DIGITA)+NFS_SERIE+NFS_DOC)
NFS01010
Upper(NFS_FILIAL+NFS_SERIE+DTOS(NFS_AUTORI)+NFS_DOC)
NFS01011
Relations in use
35: SD2 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(D2_FILIAL+D2_TIPIMP+D2_SERIE+D2_DOC+D2_ITEM)
SD201001
Upper(D2_FILIAL+D2_TIPIMP+D2_SERIE+D2_DOC+DTOS(D2_DTEMISS))
SD201002
Upper(D2_FILIAL+D2_TIPIMP+D2_SERIE+D2_DOC+D2_CLIENTE+D2_ITEM)
SD201003
Upper(D2_FILIAL+D2_TIPIMP+D2_SERIE+D2_DOC+D2_PRODUTO+D2_ALMOX+D2_LOTE)
SD201004
Upper(D2_FILIAL+DTOS(D2_DTEMISS)+D2_SERIE+D2_DOC)
SD201005
Upper(D2_FILIAL+D2_CLIENTE+D2_SERIE+D2_DOC)
SD201006
Upper(D2_FILIAL+D2_PRODUTO+D2_SERIE+D2_DOC)
SD201007
Upper(D2_FILIAL+D2_PEDIDO+D2_SERIE+D2_DOC+D2_ITEM)
SD201008
Upper(D2_FILIAL+D2_TPIMORI+D2_SERORI+D2_NFORI+D2_CLIENTE+D2_PRODUTO+D2_ALMOX+D2_LOTE)
SD201009
Upper(D2_FILIAL+D2_NSERECF+D2_LIMFECF+D2_CUPFIS+D2_ITEM)
SD201010
Upper(D2_FILIAL+D2_TIPIMP+DTOS(D2_DTEMISS))
SD201011
Upper(D2_FILIAL+D2_PRODUTO+DESCEND(DTOS(D2_DTEMISS)))
SD201012
Relations in use
36: SDM <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(DM_FILIAL+DM_TIPIMP+DM_SERIE+DM_DOC+DM_ITEM)
SDM01001
Relations in use
37: FE1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(FE_FILIAL+FE_MESANO) FE101001
Upper(FE_FILIAL+FE_ANO) FE101002
Relations in use
38: SB9 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(B9_FILIAL+B9_CODPRO+B9_ALMOX+B9_GRADE)
SB901001
Upper(B9_FILIAL+B9_DESPRO) SB901002
Upper(B9_FILIAL+B9_CODBARR) SB901003
Upper(B9_FILIAL+B9_CODPRO+B9_COLUNA+B9_LINHA)
SB901004
Relations in use
39: SF4 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 99 .F. .F.
Indexes in use TagName
=> Upper(F4_FILIAL+F4_CODFISC) SF401001
Upper(F4_FILIAL+F4_CFOP) SF401002
Upper(F4_FILIAL+F4_DESFISC) SF401003
Upper(F4_FILIAL+F4_SCFOP) SF401004
Relations in use
40: PCC <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 562 .F. .F.
Indexes in use TagName
=> Upper(CC_FILIAL+CC_CONTA) PCC01001
Upper(CC_FILIAL+CC_DESCON) PCC01002
Upper(CC_FILIAL+CC_CODIGO) PCC01003
Relations in use
41: SB2 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(B2_FILIAL+B2_CODPRO+B2_ALMOX)
SB201001
Upper(B2_FILIAL+B2_DESPRO+B2_ALMOX)
SB201002
Upper(B2_FILIAL+B2_ALMOX+B2_CODPRO)
SB201003
Upper(B2_FILIAL+B2_ALMOX+B2_DESPRO)
SB201004
Upper(B2_FILIAL+B2_GRADE) SB201005
Relations in use
42: SD3 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(D3_FILIAL+D3_COD+D3_TM) SD301001
Upper(D3_FILIAL+D3_COD+D3_ALMOX+D3_LOTE+DTOS(D3_EMISSAO))
SD301002
Upper(D3_FILIAL+D3_COD+D3_OP+D3_SEQ)
SD301003
Upper(D3_FILIAL+D3_COD+D3_OP+D3_DOC)
SD301004
Upper(D3_FILIAL+D3_DESC) SD301005
Upper(D3_FILIAL+D3_TM+D3_TIPIMP+D3_SERIE+D3_DOC+D3_CLIFOR+D3_COD+D3_ALMOX+D3_LOTE+D3_SEQ)
SD301006
Upper(D3_FILIAL+D3_TIPIMP+D3_SERIE+D3_DOC+D3_CLIFOR+D3_COD+D3_ALMOX+D3_LOTE+D3_SEQ)
SD301007
Upper(D3_FILIAL+D3_COD+DTOS(D3_EMISSAO))
SD301008
Upper(D3_FILIAL+D3_TIPIMP+D3_SERIE+D3_DOC+D3_COD+D3_ALMOX+D3_LOTE+D3_ROTINA)
SD301009
Upper(D3_FILIAL+DTOS(D3_EMISSAO)+D3_VENCOMP+D3_COD)
SD301010
Upper(D3_FILIAL+D3_REF+D3_ALMOX+D3_VENCOMP+DTOS(D3_EMISSAO))
SD301011
Upper(D3_FILIAL+D3_COD+D3_CLIFOR+DTOS(D3_EMISSAO))
SD301012
Upper(D3_FILIAL+D3_TIPIMP+D3_SERIE+D3_DOC+D3_CLIFOR+D3_COD+D3_SEQ)
SD301013
Upper(D3_FILIAL+D3_TM+D3_TIPIMP+D3_SERIE+D3_DOC+D3_COD+D3_ALMOX+D3_LOTE+D3_SEQ)
SD301014
Upper(D3_FILIAL+D3_TIPIMP+D3_SERIE+D3_DOC+D3_COD+D3_ALMOX+D3_LOTE+D3_SEQ)
SD301015
Relations in use
43: SE1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(E1_FILIAL+E1_PREFIXO+E1_NUMDUP+E1_NUMPARC+E1_CODCLI+E1_CODHIST+E1_CODTIPO+DTOS(E1_DTEMIS))
SE101001
Upper(E1_FILIAL+E1_PREFIXO+E1_NUMDUP+E1_CODCLI)
SE101002
Upper(E1_FILIAL+E1_CODCLI+E1_PREFIXO+E1_NUMDUP+E1_NUMPARC+DTOS(E1_DTVENC))
SE101003
Upper(E1_FILIAL+E1_CODCLI+DTOS(E1_DTPAGO)+DTOS(E1_DTVENC))
SE101004
Upper(E1_FILIAL+E1_CODCLI+DTOS(E1_DTVENC))
SE101005
Upper(E1_FILIAL+E1_CODCLI+DTOS(E1_DTEMIS))
SE101006
Upper(E1_FILIAL+DTOS(E1_DTPAGO)+E1_CODTIPO)
SE101007
Upper(E1_FILIAL+DTOS(E1_DTVENC)+E1_CODTIPO)
SE101008
Upper(E1_FILIAL+DTOS(E1_DTEMIS)+E1_CODCLI)
SE101009
Upper(E1_FILIAL+E1_SITUA+DTOS(E1_DTVENC))
SE101010
Upper(E1_FILIAL+E1_VENDEDO+DTOS(E1_DTPAGO))
SE101011
Upper(E1_FILIAL+E1_NOME+DTOS(E1_DTEMIS))
SE101012
Upper(E1_FILIAL+E1_CHAVDES) SE101013
Upper(E1_FILIAL+E1_COMITIT) SE101014
Upper(E1_FILIAL+E1_BOLETON) SE101015
Relations in use
44: SF1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(F1_FILIAL+F1_TIPIMP+F1_SERIE+F1_DOC+F1_FORNECE+DTOS(F1_DTEMISS))
SF101001
Upper(F1_FILIAL+F1_TIPIMP+F1_SERIE+F1_DOC+F1_COMP+DTOS(F1_DTEMISS))
SF101002
Upper(F1_FILIAL+F1_TIPIMP+F1_SERIE+F1_DOC+F1_TRANSP+DTOS(F1_DTEMISS))
SF101003
Upper(F1_FILIAL+DTOS(F1_DTEMISS)+F1_FORNECE+F1_SERIE+F1_DOC)
SF101004
Upper(F1_FILIAL+DTOS(F1_DTEMISS)+F1_COMP+F1_SERIE+F1_DOC)
SF101005
Upper(F1_FILIAL+F1_FORNECE+F1_SERIE+F1_DOC+DTOS(F1_DTEMISS))
SF101006
Upper(F1_FILIAL+F1_FORNECE+DTOS(F1_DTEMISS)+F1_SERIE+F1_DOC)
SF101007
Upper(F1_FILIAL+F1_COMP+F1_SERIE+F1_DOC+DTOS(F1_DTEMISS))
SF101008
Upper(F1_FILIAL+F1_COMP+DTOS(F1_DTEMISS)+F1_SERIE+F1_DOC)
SF101009
Upper(F1_FILIAL+DTOS(F1_DTENTRE)+F1_HORA)
SF101010
Upper(F1_FILIAL+F1_TIPIMP+F1_SERIE+DESCEND(F1_DOC))
SF101011
Upper(F1_FILIAL+F1_NOMFOR+DTOS(F1_DTENTRE)+F1_TIPIMP+F1_SERIE+F1_DOC)
SF101012
Upper(F1_FILIAL+F1_NFEID) SF101013
Upper(F1_FILIAL+DTOS(F1_DTENTRE)+F1_FORNECE+F1_SERIE+F1_DOC)
SF101014
Upper(F1_FILIAL+F1_TIPIMP+F1_DOC) SF101015
Relations in use
45: SD1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+D1_ITEM)
SD101001
Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+DTOS(D1_DTEMISS))
SD101002
Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+D1_FORNECE+D1_ITEM)
SD101003
Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+D1_PRODUTO+D1_ALMOX+D1_LOTE)
SD101004
Upper(D1_FILIAL+DTOS(D1_DTEMISS)+D1_SERIE+D1_DOC+D1_FORNECE)
SD101005
Upper(D1_FILIAL+D1_FORNECE+D1_SERIE+D1_DOC+DTOS(D1_DTEMISS))
SD101006
Upper(D1_FILIAL+D1_PRODUTO+D1_SERIE+D1_DOC+DTOS(D1_DTEMISS))
SD101007
Upper(D1_FILIAL+D1_PEDIDO+D1_SERIE+D1_DOC+D1_ITEM)
SD101008
Upper(D1_FILIAL+D1_TPIMORI+D1_SERORI+D1_NFORI+D1_FORNECE+D1_PRODUTO+D1_ALMOX+D1_LOTE)
SD101009
Upper(D1_FILIAL+DTOS(D1_DTENTRE)+D1_SERIE+D1_DOC+D1_FORNECE)
SD101010
Upper(D1_FILIAL+D1_PRODUTO+DESCEND(DTOS(D1_DTEMISS)))
SD101011
Upper(D1_FILIAL+DTOS(D1_DTENTRE)+D1_PRODUTO)
SD101012
Upper(D1_FILIAL+D1_FORNECE+D1_PRODUTO+DESCEND(DTOS(D1_DTEMISS)))
SD101013
Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+D1_FORNECE+D1_PRODUTO+D1_ITEM)
SD101014
Relations in use
46: LSN <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
4 68 .F. .F.
Indexes in use TagName
=> Upper(SN_FILIAL+SN_TIPIMP+SN_SERIE+SN_NUMERO)
LSN01001
Upper(SN_FILIAL+SN_TIPIMP+SN_NUMERO+SN_SERIE)
LSN01002
Upper(SN_FILIAL+SN_SERIE+SN_TIPIMP+SN_NUMERO)
LSN01003
Upper(SN_FILIAL+SN_SERIE+SN_NUMERO+SN_TIPIMP)
LSN01004
Relations in use
Classes in use:
===============
1 ERROR
2 HASHENTRY
3 HBCLASS
4 HBOBJECT
5 HB_LOGGER
6 HB_LOGCHANNEL
7 HB_LOGCONSOLE
8 HB_LOGFILE
9 TFONT
10 TINI
11 TIMMERSIG
12 TWINDOW
13 TDIALOG
14 TBRUSH
15 TCONTROL
16 TBITMAP
17 TREG32
18 TRECT
19 OTBLOG
20 TCURSOR
21 TICON
22 TBAR
23 TSBUTTON
24 TCHECKBOX
25 TMSGBAR
26 TMSGITEM
27 TSTSAY
28 TSLINES
29 TIMAGE
30 TVGET
31 GET
32 TGET
33 TCLIPGET
34 TCOMBOBOX
35 TSAY
36 TPROGRESS
37 TIPCLIENT
38 TIPCLIENTHTTP
39 TURL
40 TBTNBMP
41 TFRXCFG
42 TFILE
43 TTXTFILE
44 TXMLDOCUMENT
45 TXMLNODE
46 TXMLITERATOR
47 TXMLITERATORSCAN
48 TMENU
49 TMENUITEM
50 TSTRUCT
Memory Analysis
===============
2419 Static variables
Dynamic memory consume:
Actual Value: 0 bytes
Highest Value: 0 bytes
Versao do sistema
=================
Versao : 7.10
Release : 10740
Data Compilaçao: 06-05-2024 14:02:02
SVN : 7969
Disco : Y: Total : 465.75 GB Livre : 75.09 GB
CNPJEmp :
PLANOSIS : 1
UpdateAuto : N
Code: Select all | Expand
::xDlg:bKeyDown := { | nKey | ;
iif( nKey == VK_ESCAPE, ::lHitEsc := .T., Nil ), ;
MsgExclamation( iif( ::lHitEsc, "ESC", "other" ) ) }
Code: Select all | Expand
::xDlg:bKeyDown := { | nKey | ;
iif( nKey == VK_ESCAPE, ::lHitEsc := .T., Nil ), ;
MsgExclamation( iif( ::lHitEsc, "ESC", "other" ) ) }
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oDlg
SetDialogEsc( .F. )
DEFINE DIALOG oDlg
oDlg:bKeyDown = { | nKey | MsgInfo( "Key: " + Str( nKey ) ) }
ACTIVATE DIALOG oDlg CENTERED VALID ( ShowCallStack(), .T. )
return nil
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oDlg
SetDialogEsc( .F. )
DEFINE DIALOG oDlg
oDlg:bKeyDown = { | nKey | MsgInfo( "Key: " + Str( nKey ) ) }
ACTIVATE DIALOG oDlg CENTERED VALID ( ShowCallStack(), .T. )
return nil
SetDialogEsc( .F. ) is working fine with me.SetDialogEsc( .F. ) should allow you to handle it, but it is not. We have to review it:
SetDialogEsc( .F. ) is working fine with me.SetDialogEsc( .F. ) should allow you to handle it, but it is not. We have to review it:
ACTIVATE DIALOG oDlg VALID ... // logical valueSilvio.Falconi wrote: Tue Mar 11, 2025 10:01 am I would be interested in blocking esc or there must be a function that when a user presses ESc the procedure must check (in case of inserting/modifying records) that the user has not modified the get/combobox/radio controls etc and the procedure must tell the user "do I have to close anyway without saving?", is there a function that does this?
Code: Select all | Expand
VALID EXit( .f., , , oDlg )
static FUNCTION Exit( lEsc, lAsk, cMsg, oDlg )
DEFAULT lEsc := .f., lAsk := .f., cMsg := ""
if getkeystate( VK_ESCAPE )
Return( lEsc )
endif
//aGet
lAsk := DlgModified( oDlg )
// ? lAsk
If lAsk
If Empty( cMsg )
cMsg := "Do you want to exit this operation?...?"
End
If !MsgNoyes(cMsg,"Confirm Please...")
Return .f.
End
End
return .T.
static function DlgModified( oDlg )
return AScan( oDlg:aControls, { |o| o:IsKindOf( "TGET" ) .and. o:lChanged } ) > 0
ACTIVATE DIALOG oDlg VALID ... // logical valueSilvio.Falconi wrote: Tue Mar 11, 2025 10:01 am I would be interested in blocking esc or there must be a function that when a user presses ESc the procedure must check (in case of inserting/modifying records) that the user has not modified the get/combobox/radio controls etc and the procedure must tell the user "do I have to close anyway without saving?", is there a function that does this?
Code: Select all | Expand
VALID EXit( .f., , , oDlg )
static FUNCTION Exit( lEsc, lAsk, cMsg, oDlg )
DEFAULT lEsc := .f., lAsk := .f., cMsg := ""
if getkeystate( VK_ESCAPE )
Return( lEsc )
endif
//aGet
lAsk := DlgModified( oDlg )
// ? lAsk
If lAsk
If Empty( cMsg )
cMsg := "Do you want to exit this operation?...?"
End
If !MsgNoyes(cMsg,"Confirm Please...")
Return .f.
End
End
return .T.
static function DlgModified( oDlg )
return AScan( oDlg:aControls, { |o| o:IsKindOf( "TGET" ) .and. o:lChanged } ) > 0
Your above example is not working as expected Enabling/Disabling Esc Key functionality.Is the above example working fine for you ? Do you get the VK_ESCAPE MsgInfo() ?
Your above example is not working as expected Enabling/Disabling Esc Key functionality.Is the above example working fine for you ? Do you get the VK_ESCAPE MsgInfo() ?
Code: Select all | Expand
VAR lHitESC INIT .F.
I use like Inkey(), to end process firstCode: Select all | Expand
DO WHILE ! class:lHitEsc .AND. ! :eof()
:MoveNext()
ENDDO
:CloseRecordset()
IF class:lHitEsc
Dialog:Close()
ENDIF
Code: Select all | Expand
VAR lHitESC INIT .F.
I use like Inkey(), to end process firstCode: Select all | Expand
DO WHILE ! class:lHitEsc .AND. ! :eof()
:MoveNext()
ENDDO
:CloseRecordset()
IF class:lHitEsc
Dialog:Close()
ENDIF
Code: Select all | Expand
function KeyPress( KeyAscii )
IF KeyAscii = ESC
KeyAscii = 0
ENDIF
RETURN
Code: Select all | Expand
dialog:bKeyDown := { | nkey | routine( @nKey ), nKey }
Code: Select all | Expand
function KeyPress( KeyAscii )
IF KeyAscii = ESC
KeyAscii = 0
ENDIF
RETURN
Code: Select all | Expand
dialog:bKeyDown := { | nkey | routine( @nKey ), nKey }
Code: Select all | Expand
::xDlg:bValid := { || iif( GetKeyState( VK_ESCAPE ), ::lHitEsc := .T., Nil ), ::lCanClose }
Code: Select all | Expand
::xDlg:bValid := { || iif( GetKeyState( VK_ESCAPE ), ::lHitEsc := .T., Nil ), ::lCanClose }
Code: Select all | Expand
/*========================================================================
SISREV INFORMATICA LTDA.
Prestando serviços com qualidade desde 1993
CNPJ: 02.623.572/0001-52
CNPJ: 02.623.572/0002-33
www.sisrev.com.br
========================================================================
Sistema..: Sisrev-Win 5.0
Autor(es): Ariovaldo da Costa Foliene
Aplicação: TVWeb
Notas....: Abre as páginas do Sisrev-Web - Microsoft Edge WebView2
Data.....: 10-03-2025
========================================================================
TVisual--+
|
+--TVisualForm--+
|
+--TVWeb.prg
========================================================================
*/
#include "fivewin.ch"
#include "Objects.ch"
#include "\sis\fsql901\include\rede.ch"
* ========================================================================
CLASS TVWeb FROM TVisualForm
* ========================================================================
DATA cPage
DATA oWebView
METHOD New() CONSTRUCTOR
METHOD AddControl()
METHOD BuildMenu()
END CLASS
* ========================================================================
METHOD New( xcPage, xcNome ) CLASS TVWeb
* ========================================================================
#ifdef __XHARBOUR__
TVWebMsg() ; return Self
#endif
DEFAULT xcPage := ""
DEFAULT xcNome := Empresas(1)
::Super:New("rel")
::cNome := xcNome
::cPage := "http://localhost:3000/" + xcPage // nodejs
::lToolBar := FALSE
::lTask := FALSE
::lRastrear := FALSE
::AddControl()
::oWebView:oWnd:bValid := {|| ::oWebView:Terminate(),;
WndMain():Show() ,;
WndMain():SetFocus(), TRUE }
return Self
* ========================================================================
METHOD AddControl() CLASS TVWeb
* ========================================================================
#ifndef __XHARBOUR__
::oWebView:= TWebView2():New()
::oWebView:SetTitle( WebTitle("Sisrev-Web") )
::oWebView:SetUserAgent( WebAgent() )
::oWebView:oWnd:bResized := {|| ::oWebView:oWnd:Maximize() }
::oWebView:oWnd:SetMenu( ::BuildMenu() )
::oWebView:oWnd:SetColor( CLR_BLACK ,nRGB( 231, 242, 255 ) )
::oWebView:oWnd:l2007 := .T.
::oWebView:SetSize( WndWidth( ::oWebView:oWnd:hWnd ) - 15, WndHeight( ::oWebView:oWnd:hWnd ) - 58 )
::oWebView:Navigate( ::cPage )
::oWebView:OpenDevToolsWindow(.F.)
::oWebView:ShowDownloads(.F.)
::oWebView:oWnd:bInit := {|| ::oWebView:oWnd:Maximize() }
::oWebView:Run()
::oWebView:Destroy()
WndMain():Hide()
#endif
return nil
* =========================================================================
METHOD BuildMenu() CLASS TVWeb
* =========================================================================
local oMenu
MENU oMenu
MENUITEM "Fechar" ACTION ::oWebView:oWnd:End()
ENDMENU
return oMenu
* =========================================================================
Function TVWebMsg()
return Msg("** Esta funcionidade disponível para HarBour **")
* =========================================================================
* =========================================================================
Function WebAgent()
* =========================================================================
return "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"
Code: Select all | Expand
/*========================================================================
SISREV INFORMATICA LTDA.
Prestando serviços com qualidade desde 1993
CNPJ: 02.623.572/0001-52
CNPJ: 02.623.572/0002-33
www.sisrev.com.br
========================================================================
Sistema..: Sisrev-Win 5.0
Autor(es): Ariovaldo da Costa Foliene
Aplicação: TVWeb
Notas....: Abre as páginas do Sisrev-Web - Microsoft Edge WebView2
Data.....: 10-03-2025
========================================================================
TVisual--+
|
+--TVisualForm--+
|
+--TVWeb.prg
========================================================================
*/
#include "fivewin.ch"
#include "Objects.ch"
#include "\sis\fsql901\include\rede.ch"
* ========================================================================
CLASS TVWeb FROM TVisualForm
* ========================================================================
DATA cPage
DATA oWebView
METHOD New() CONSTRUCTOR
METHOD AddControl()
METHOD BuildMenu()
END CLASS
* ========================================================================
METHOD New( xcPage, xcNome ) CLASS TVWeb
* ========================================================================
#ifdef __XHARBOUR__
TVWebMsg() ; return Self
#endif
DEFAULT xcPage := ""
DEFAULT xcNome := Empresas(1)
::Super:New("rel")
::cNome := xcNome
::cPage := "http://localhost:3000/" + xcPage // nodejs
::lToolBar := FALSE
::lTask := FALSE
::lRastrear := FALSE
::AddControl()
::oWebView:oWnd:bValid := {|| ::oWebView:Terminate(),;
WndMain():Show() ,;
WndMain():SetFocus(), TRUE }
return Self
* ========================================================================
METHOD AddControl() CLASS TVWeb
* ========================================================================
#ifndef __XHARBOUR__
::oWebView:= TWebView2():New()
::oWebView:SetTitle( WebTitle("Sisrev-Web") )
::oWebView:SetUserAgent( WebAgent() )
::oWebView:oWnd:bResized := {|| ::oWebView:oWnd:Maximize() }
::oWebView:oWnd:SetMenu( ::BuildMenu() )
::oWebView:oWnd:SetColor( CLR_BLACK ,nRGB( 231, 242, 255 ) )
::oWebView:oWnd:l2007 := .T.
::oWebView:SetSize( WndWidth( ::oWebView:oWnd:hWnd ) - 15, WndHeight( ::oWebView:oWnd:hWnd ) - 58 )
::oWebView:Navigate( ::cPage )
::oWebView:OpenDevToolsWindow(.F.)
::oWebView:ShowDownloads(.F.)
::oWebView:oWnd:bInit := {|| ::oWebView:oWnd:Maximize() }
::oWebView:Run()
::oWebView:Destroy()
WndMain():Hide()
#endif
return nil
* =========================================================================
METHOD BuildMenu() CLASS TVWeb
* =========================================================================
local oMenu
MENU oMenu
MENUITEM "Fechar" ACTION ::oWebView:oWnd:End()
ENDMENU
return oMenu
* =========================================================================
Function TVWebMsg()
return Msg("** Esta funcionidade disponível para HarBour **")
* =========================================================================
* =========================================================================
Function WebAgent()
* =========================================================================
return "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"
Code: Select all | Expand
::oWebView:= TWebView2():New()
::oWebView:SetTitle( WebTitle("Sisrev-Web") )
::oWebView:SetUserAgent( WebAgent() )
::oWebView:oWnd:bResized := {|| ::oWebView:oWnd:Maximize() }
::oWebView:oWnd:SetMenu( ::BuildMenu() )
::oWebView:oWnd:SetColor( CLR_BLACK ,nRGB( 231, 242, 255 ) )
::oWebView:oWnd:l2007 := .T.
::oWebView:SetSize( WndWidth( ::oWebView:oWnd:hWnd ) - 15,;
WndHeight( ::oWebView:oWnd:hWnd ) - 58 )
::oWebView:Navigate( ::cPage )
::oWebView:bOnBind := { |cJson| ExecWeb(cJson) } <<<< ----------------------- aqui
::oWebView:OpenDevToolsWindow(.F.)
::oWebView:ShowDownloads(.F.)
::oWebView:oWnd:bInit := {|| ::oWebView:oWnd:Maximize() }
::oWebView:Run()
::oWebView:Destroy()
Code: Select all | Expand
<form id="formbut" name="formbut" autocomplete="on" accept-charset="UTF-8" onsubmit="return validateForm()">
<div>
<a href="#" id="barrasuperior" class="easyui-linkbutton easyui-tooltip" data-options="iconAlign:'top',iconCls:'fechar',content:'Fechar',width:'100',height:'65'" onclick="$('#win').window('close')">Fechar</a>
<a href="#" id="barrasuperior" class="easyui-linkbutton easyui-tooltip" data-options="iconAlign:'top',iconCls:'start',content:'OK-confirma opção',width:'100',height:'65'" onclick="javascript:Retorno();">Executar</a>
</div>
<input type="hidden" id="Usuario" name="Usuario" value="33">
<input type="hidden" id="cNomTBL" name="cNomTBL" value="">
<input type="hidden" id="nQual" name="nQual" value="2">
<input type="hidden" id="cNome" name="cNome" value="<b>Centro de Relatórios</b>">
<input type="hidden" id="cSubTitle" name="cSubTitle" value="">
<input type="hidden" id="Classe" name="Classe" value="TVBREL">
<input type="hidden" id="registro" name="registro" value="">
<input type="hidden" id="cDg" name="cDg" value="">
<!-- DataGridRelWeb -->
<table id="dg" class="easyui-datagrid" pagination="true" singleSelect="true" remoteSort="false" striped="true" norap fitcolumns="true" pageSize="20"
pagePosition="top" autoRowHeight="false" emptyMsg="Não foi encontrado registros" pageList="[10,15,20,25,30,35,40,50,100]"
style="width:auto;height:auto;" url="/sisrev/json/tvbreldiversos.json" method="get">
<thead>
<tr>
<th data-options="field:'CK' , checkbox:true"></th>
<th data-options="field:'Num', width:10, align:'center'">Opção</th>
<th data-options="field:'Descricao', sortable:true, width:100"><b>Descrição</b></th>
</tr>
</thead>
</table>
<script>
$('#dg').datagrid({
onClickRow:function(index,row){
SendToFWH('TVBREL():TVBLISOPC('+row.Num+',"'+row.Descricao+'")') <<<<< ------------------ aqui
}
})
</script>
<script>
$(function(){
var dg = $('#dg').datagrid();
dg.datagrid('enableFilter');})
</script>
</form>
Code: Select all | Expand
* ========================================================================
Function ExecWeb( cData )
* ========================================================================
if ValType( cData ) == "A"
cData := HB_VALTOEXP(cData) /* converts any data type to STR Value */
cData := strtran( cData, "{", "")
cData := strtran( cData, "}", "")
cData := strtran( cData, "'", "")
Endif
OnGet( "&classe=" + cData )
return nil
Code: Select all | Expand
::oWebView:= TWebView2():New()
::oWebView:SetTitle( WebTitle("Sisrev-Web") )
::oWebView:SetUserAgent( WebAgent() )
::oWebView:oWnd:bResized := {|| ::oWebView:oWnd:Maximize() }
::oWebView:oWnd:SetMenu( ::BuildMenu() )
::oWebView:oWnd:SetColor( CLR_BLACK ,nRGB( 231, 242, 255 ) )
::oWebView:oWnd:l2007 := .T.
::oWebView:SetSize( WndWidth( ::oWebView:oWnd:hWnd ) - 15,;
WndHeight( ::oWebView:oWnd:hWnd ) - 58 )
::oWebView:Navigate( ::cPage )
::oWebView:bOnBind := { |cJson| ExecWeb(cJson) } <<<< ----------------------- aqui
::oWebView:OpenDevToolsWindow(.F.)
::oWebView:ShowDownloads(.F.)
::oWebView:oWnd:bInit := {|| ::oWebView:oWnd:Maximize() }
::oWebView:Run()
::oWebView:Destroy()
Code: Select all | Expand
<form id="formbut" name="formbut" autocomplete="on" accept-charset="UTF-8" onsubmit="return validateForm()">
<div>
<a href="#" id="barrasuperior" class="easyui-linkbutton easyui-tooltip" data-options="iconAlign:'top',iconCls:'fechar',content:'Fechar',width:'100',height:'65'" onclick="$('#win').window('close')">Fechar</a>
<a href="#" id="barrasuperior" class="easyui-linkbutton easyui-tooltip" data-options="iconAlign:'top',iconCls:'start',content:'OK-confirma opção',width:'100',height:'65'" onclick="javascript:Retorno();">Executar</a>
</div>
<input type="hidden" id="Usuario" name="Usuario" value="33">
<input type="hidden" id="cNomTBL" name="cNomTBL" value="">
<input type="hidden" id="nQual" name="nQual" value="2">
<input type="hidden" id="cNome" name="cNome" value="<b>Centro de Relatórios</b>">
<input type="hidden" id="cSubTitle" name="cSubTitle" value="">
<input type="hidden" id="Classe" name="Classe" value="TVBREL">
<input type="hidden" id="registro" name="registro" value="">
<input type="hidden" id="cDg" name="cDg" value="">
<!-- DataGridRelWeb -->
<table id="dg" class="easyui-datagrid" pagination="true" singleSelect="true" remoteSort="false" striped="true" norap fitcolumns="true" pageSize="20"
pagePosition="top" autoRowHeight="false" emptyMsg="Não foi encontrado registros" pageList="[10,15,20,25,30,35,40,50,100]"
style="width:auto;height:auto;" url="/sisrev/json/tvbreldiversos.json" method="get">
<thead>
<tr>
<th data-options="field:'CK' , checkbox:true"></th>
<th data-options="field:'Num', width:10, align:'center'">Opção</th>
<th data-options="field:'Descricao', sortable:true, width:100"><b>Descrição</b></th>
</tr>
</thead>
</table>
<script>
$('#dg').datagrid({
onClickRow:function(index,row){
SendToFWH('TVBREL():TVBLISOPC('+row.Num+',"'+row.Descricao+'")') <<<<< ------------------ aqui
}
})
</script>
<script>
$(function(){
var dg = $('#dg').datagrid();
dg.datagrid('enableFilter');})
</script>
</form>
Code: Select all | Expand
* ========================================================================
Function ExecWeb( cData )
* ========================================================================
if ValType( cData ) == "A"
cData := HB_VALTOEXP(cData) /* converts any data type to STR Value */
cData := strtran( cData, "{", "")
cData := strtran( cData, "}", "")
cData := strtran( cData, "'", "")
Endif
OnGet( "&classe=" + cData )
return nil
Code: Select all | Expand
**==========================================================================
STATIC FUNCTION GetPngMC(oImage)
**==========================================================================
LOCAL cFile,cStrBmp
cFile := cGetFile( "Bitmap (*.bmp)| *.bmp|" + ;
"DIB (*.dib)| *.dib|" + ;
"PCX (*.pcx)| *.pcx|" + ;
"JPEG (*.jpg)| *.jpg|" + ;
"GIF (*.gif)| *.gif|" + ;
"TARGA (*.tga)| *.tga|" + ;
"RLE (*.rle)| *.rle|" + ;
"All Files (*.*)| *.*" ;
,"Selecione o arquivo", 4 )
IF !Empty(cFile) .and. File(cFile)
oImage:LoadBmp( cFile )
//redimenciona o tamanho da foto 256 x 194 pixel
oImage:hBitmap := ResizeBmp( oImage:hBitmap, 256, 194, .T. ) //redimensiona
cStrBmp := BmpToStr(oImage:hBitmap) //transf de img para string
oImage:Refresh()
// 0 -> Bmp // 2 -> Jpg // 13 -> Png
oImage:SaveImage(cNome, 13, 75)
ENDIF
RETURN NIL
Code: Select all | Expand
**==========================================================================
STATIC FUNCTION GetPngMC(oImage)
**==========================================================================
LOCAL cFile,cStrBmp
cFile := cGetFile( "Bitmap (*.bmp)| *.bmp|" + ;
"DIB (*.dib)| *.dib|" + ;
"PCX (*.pcx)| *.pcx|" + ;
"JPEG (*.jpg)| *.jpg|" + ;
"GIF (*.gif)| *.gif|" + ;
"TARGA (*.tga)| *.tga|" + ;
"RLE (*.rle)| *.rle|" + ;
"All Files (*.*)| *.*" ;
,"Selecione o arquivo", 4 )
IF !Empty(cFile) .and. File(cFile)
oImage:LoadBmp( cFile )
//redimenciona o tamanho da foto 256 x 194 pixel
oImage:hBitmap := ResizeBmp( oImage:hBitmap, 256, 194, .T. ) //redimensiona
cStrBmp := BmpToStr(oImage:hBitmap) //transf de img para string
oImage:Refresh()
// 0 -> Bmp // 2 -> Jpg // 13 -> Png
oImage:SaveImage(cNome, 13, 75)
ENDIF
RETURN NIL
Code: Select all | Expand
//----------------------------------------------------------------------------//
METHOD RotateImage( nAngle ) CLASS TImage
local hDib := DibFromBitmap( ::hBitmap )
local cTempFile := cTempFile( , "BMP" )
local lSaved, hBmp
local hOldBmp := ::hBitmap
local hOldPal := ::hPalette
DibWrite( cTempFile, hDib )
GloBalFree( hDib )
hBmp = FIROTATEIMG( cTempFile, nAngle, Self ) // New Last parameter
FErase( cTempFile )
.../...
//----------------------------------------------------------------------------//
Function FIROTATEIMG( cSrcFile, nAngle, oImg ) // Look new last parameter
local nSrcFormat, hDib, hDib2, lOk
local nFormat, hInfoH, hInfo, hBits, hWnd, hDC, hBmp := 0
nSrcFormat := FIGETFILETYPE( cSrcFile, 0 )
hDib := FILOAD( nSrcFormat, cSrcFile, 0 )
IF hDib <> 0
hDib2 := FIRotate( hDib, nAngle )
// New
if !hb_IsNumeric( hDib2 ) .or. hDib2 == 0
hDib2 := FIRotateClassic( hDib, nAngle )
endif
IF hb_IsNumeric( hDib2 ) .and. hDib2 <> 0
hInfoH := FIGETINFOHEADER( hDib2 )
hInfo := FIGETINFO( hDib2 )
hBits := FIGETBITS( hDib2 )
hWnd := oImg:oWnd:hWnd // GETDESKTOPWINDOW()
.../...
//----------------------------------------------------------------------------//
DLL32 FUNCTION FIRotate( hDib AS LONG, nAngle AS _DOUBLE, nColor AS LONG ) AS LONG ;
PASCAL FROM If( IsExe64(), "FreeImage_Rotate", "_FreeImage_Rotate@16" ) ;
LIB hLib
// New Function
DLL32 FUNCTION FIRotateClassic( hDib AS LONG, nAngle AS _DOUBLE ) AS LONG ;
PASCAL FROM If( IsExe64(), "FreeImage_RotateClassic", "_FreeImage_RotateClassic@12" ) ;
LIB hLib
Code: Select all | Expand
//----------------------------------------------------------------------------//
METHOD RotateImage( nAngle ) CLASS TImage
local hDib := DibFromBitmap( ::hBitmap )
local cTempFile := cTempFile( , "BMP" )
local lSaved, hBmp
local hOldBmp := ::hBitmap
local hOldPal := ::hPalette
DibWrite( cTempFile, hDib )
GloBalFree( hDib )
hBmp = FIROTATEIMG( cTempFile, nAngle, Self ) // New Last parameter
FErase( cTempFile )
.../...
//----------------------------------------------------------------------------//
Function FIROTATEIMG( cSrcFile, nAngle, oImg ) // Look new last parameter
local nSrcFormat, hDib, hDib2, lOk
local nFormat, hInfoH, hInfo, hBits, hWnd, hDC, hBmp := 0
nSrcFormat := FIGETFILETYPE( cSrcFile, 0 )
hDib := FILOAD( nSrcFormat, cSrcFile, 0 )
IF hDib <> 0
hDib2 := FIRotate( hDib, nAngle )
// New
if !hb_IsNumeric( hDib2 ) .or. hDib2 == 0
hDib2 := FIRotateClassic( hDib, nAngle )
endif
IF hb_IsNumeric( hDib2 ) .and. hDib2 <> 0
hInfoH := FIGETINFOHEADER( hDib2 )
hInfo := FIGETINFO( hDib2 )
hBits := FIGETBITS( hDib2 )
hWnd := oImg:oWnd:hWnd // GETDESKTOPWINDOW()
.../...
//----------------------------------------------------------------------------//
DLL32 FUNCTION FIRotate( hDib AS LONG, nAngle AS _DOUBLE, nColor AS LONG ) AS LONG ;
PASCAL FROM If( IsExe64(), "FreeImage_Rotate", "_FreeImage_Rotate@16" ) ;
LIB hLib
// New Function
DLL32 FUNCTION FIRotateClassic( hDib AS LONG, nAngle AS _DOUBLE ) AS LONG ;
PASCAL FROM If( IsExe64(), "FreeImage_RotateClassic", "_FreeImage_RotateClassic@12" ) ;
LIB hLib
Code: Select all | Expand
#include "FiveWin.ch"
static oDlg, oBtn1, oBtn2, oImg1, oImg2, oImg, lTodo := .F.
//----------------------------------------------------------------------------//
function Main( cImgName1, cPath )
DEFAULT cImgName1 := "d:\fwh\fwhteam\samples\splash.jpg"
if Empty( cPath )
DEFINE DIALOG oDlg SIZE 414, 702 // 844
@ 30, 1 IMAGE oImg1 FILENAME cImgName1 SIZE 207, 300 OF oDlg PIXEL //ADJUST SCROLL
ACTIVATE DIALOG oDlg ;
ON INIT ( oDlg:SetPos( 0, ScreenWidth() - oDlg:nWidth + 2 ), BuildButtonBar() )
endif
return nil
//----------------------------------------------------------------------------//
function BuildButtonBar()
local oBar, hTemp, uTemp
DEFINE BUTTONBAR oBar SIZE 60, 60 OF oDlg //2007
DEFINE BUTTON OF oBar RESOURCE "Replace" TOOLTIP "Rotar" ;
PROMPT "Rotate" ACTION ( oImg1:hBitMap := oImg1:RotateImage( 90.00 ), oImg1:Refresh() )
DEFINE BUTTON OF oBar RESOURCE "print" TOOLTIP "Imprimir" ;
PROMPT "Imprimir" ACTION ( ImgPrint( @oImg1, @oImg2, @oDlg ) )
DEFINE BUTTON OF oBar RESOURCE "exit" TOOLTIP "Salir" ;
PROMPT "Salir" ACTION oDlg:End()
return nil
//----------------------------------------------------------------------------//
STATIC FUNCTION ImgPrint( oImg1, oImg2, oDlg )
local oPrn
PRINT oPrn PREVIEW
PAGE
@ 0, 0 PRINT TO oPrn IMAGE oImg1:cBmpFile SIZE 8.5, 11 INCHES NOTRANSPARENT //STRETCH
ENDPAGE
ENDPRINT
RETURN ( .T. )
//----------------------------------------------------------------------------//
Code: Select all | Expand
#include "FiveWin.ch"
static oDlg, oBtn1, oBtn2, oImg1, oImg2, oImg, lTodo := .F.
//----------------------------------------------------------------------------//
function Main( cImgName1, cPath )
DEFAULT cImgName1 := "d:\fwh\fwhteam\samples\splash.jpg"
if Empty( cPath )
DEFINE DIALOG oDlg SIZE 414, 702 // 844
@ 30, 1 IMAGE oImg1 FILENAME cImgName1 SIZE 207, 300 OF oDlg PIXEL //ADJUST SCROLL
ACTIVATE DIALOG oDlg ;
ON INIT ( oDlg:SetPos( 0, ScreenWidth() - oDlg:nWidth + 2 ), BuildButtonBar() )
endif
return nil
//----------------------------------------------------------------------------//
function BuildButtonBar()
local oBar, hTemp, uTemp
DEFINE BUTTONBAR oBar SIZE 60, 60 OF oDlg //2007
DEFINE BUTTON OF oBar RESOURCE "Replace" TOOLTIP "Rotar" ;
PROMPT "Rotate" ACTION ( oImg1:hBitMap := oImg1:RotateImage( 90.00 ), oImg1:Refresh() )
DEFINE BUTTON OF oBar RESOURCE "print" TOOLTIP "Imprimir" ;
PROMPT "Imprimir" ACTION ( ImgPrint( @oImg1, @oImg2, @oDlg ) )
DEFINE BUTTON OF oBar RESOURCE "exit" TOOLTIP "Salir" ;
PROMPT "Salir" ACTION oDlg:End()
return nil
//----------------------------------------------------------------------------//
STATIC FUNCTION ImgPrint( oImg1, oImg2, oDlg )
local oPrn
PRINT oPrn PREVIEW
PAGE
@ 0, 0 PRINT TO oPrn IMAGE oImg1:cBmpFile SIZE 8.5, 11 INCHES NOTRANSPARENT //STRETCH
ENDPAGE
ENDPRINT
RETURN ( .T. )
//----------------------------------------------------------------------------//
Code: Select all | Expand
REDEFINE CHECKBOX oLabor:glstxf ID 1040 OF oDgl MESSAGE "Is this service normally taxable for your clients ?" UPDATE
Code: Select all | Expand
CONTROL "Fixed prices ?",1049,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,470,110,80,13
Code: Select all | Expand
REDEFINE CHECKBOX oLabor:glstxf ID 1040 OF oDgl MESSAGE "Is this service normally taxable for your clients ?" UPDATE
Code: Select all | Expand
CONTROL "Fixed prices ?",1049,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,470,110,80,13
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oDlg, lValue := .F.
SetDlgGradient( { { 1, RGB( 199, 216, 237 ), RGB( 237, 242, 248 ) } } )
DEFINE DIALOG oDlg RESOURCE "Test"
REDEFINE CHECKBOX lValue ID 10 OF oDlg
ACTIVATE DIALOG oDlg CENTERED
return nil
Code: Select all | Expand
#include <winresrc.h>
#include <windows.h>
#ifndef WC_TABCONTROL
#define WC_TABCONTROL "SysTabControl32"
#endif
#ifndef MONTHCAL_CLASS
#define MONTHCAL_CLASS "SysMonthCal32"
#endif
#ifndef DATETIMEPICK_CLASS
#define DATETIMEPICK_CLASS "SysDateTimePick32"
#endif
//
// Dialog resources
//
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
Test DIALOG 0, 0, 294, 156
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "Ms Shell Dlg"
{
AUTOCHECKBOX "Check", 10, 93, 60, 118, 23, 0, WS_EX_LEFT
}
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oDlg, lValue := .F.
SetDlgGradient( { { 1, RGB( 199, 216, 237 ), RGB( 237, 242, 248 ) } } )
DEFINE DIALOG oDlg RESOURCE "Test"
REDEFINE CHECKBOX lValue ID 10 OF oDlg
ACTIVATE DIALOG oDlg CENTERED
return nil
Code: Select all | Expand
#include <winresrc.h>
#include <windows.h>
#ifndef WC_TABCONTROL
#define WC_TABCONTROL "SysTabControl32"
#endif
#ifndef MONTHCAL_CLASS
#define MONTHCAL_CLASS "SysMonthCal32"
#endif
#ifndef DATETIMEPICK_CLASS
#define DATETIMEPICK_CLASS "SysDateTimePick32"
#endif
//
// Dialog resources
//
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
Test DIALOG 0, 0, 294, 156
STYLE DS_3DLOOK | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_POPUP | WS_SYSMENU
CAPTION "Dialog"
FONT 8, "Ms Shell Dlg"
{
AUTOCHECKBOX "Check", 10, 93, 60, 118, 23, 0, WS_EX_LEFT
}
]]>I understand your frustration with the sudden networking issues you're experiencing, especially as they coincide with Microsoft's 2025 Q1 updates. Given that you're using Microsoft Peer-to-Peer networking (likely relying on SMB - Server Message Block - for file sharing) and that this setup has worked reliably for decades with FiveWin (FWH) and your applications, it’s reasonable to suspect that recent Windows updates—particularly those related to Windows Server 2025 or client-side updates—are introducing changes affecting visibility or connectivity to the server. Let’s break this down and explore potential causes and resolutions based on the information available and common networking behavior in Windows.
Potential Cause: SMB or Permissions Changes in 2025 Q1 Updates
Microsoft has been incrementally tightening security around SMB and networking protocols over the years, and with Windows Server 2025 (released November 1, 2024) and associated client updates rolling out in Q1 2025, it’s plausible that changes to SMB configuration, default security settings, or network discovery mechanisms are at play. Here are some likely culprits:
SMB Protocol Hardening: Windows Server 2025 includes enhanced SMB security features (e.g., SMB over QUIC, hardened firewall defaults, and protections against attacks). Even if your server isn’t yet on 2025, client machines receiving updates might enforce stricter SMB requirements (e.g., requiring encryption or signing) that your server doesn’t meet.
Network Discovery or Permissions: Updates might have altered default settings for network discovery, firewall rules, or the "Everyone" share permissions, making the server invisible in Windows Explorer despite being fully shared.
Deprecation of Legacy Features: Microsoft has a history of phasing out older, less secure networking components (e.g., SMBv1 was disabled by default years ago). Peer-to-Peer networking relying on older mechanisms might be impacted if a 2025 update further restricts legacy support.
Group Policy or Update Bugs: The unexpected upgrades to Windows Server 2025 reported in November 2024 (due to third-party tools or misclassified updates) suggest that Q1 updates might introduce similar quirks, like altered permissions or connectivity settings.
Since your setup has password protection off and "Everyone" granted Read/Write access, it’s unlikely a credential issue, but rather a discovery or protocol compatibility problem triggered by the update.
Steps to Diagnose and Resolve
Here’s a structured approach to troubleshoot and potentially fix this, keeping your Peer-to-Peer setup intact:
1. Verify Server Visibility
Ping the Server: From an affected workstation, open a Command Prompt and type ping [server IP] (e.g., ping 192.168.1.100). If it responds, the server is reachable, and the issue is likely at the SMB or Explorer level.
Manual Connection: In Windows Explorer, try manually connecting to the server by typing \\servername or \\serverIP in the address bar. If it works, the server is still accessible, but network discovery is failing.
2. Check SMB Settings
Server SMB Configuration: On the server, open PowerShell as Administrator and run:
Get-SmbServerConfiguration
Look for EnableSMB1Protocol (should be False), RequireSecuritySignature, and EncryptData. If EncryptData is True and clients don’t support it, this could block access.
Client SMB Configuration: On an affected workstation, run:
Get-SmbClientConfiguration
Check if RequireSecuritySignature or EncryptData is enabled post-update. If so, and the server doesn’t match, connectivity fails.
Temporary Fix: On the server, disable encryption (if it’s safe in your environment) with:
Set-SmbServerConfiguration -EncryptData $false
Restart the "Server" service (Restart-Service LanmanServer) and test.
3. Review Network Discovery and Firewall
Network Discovery: On both server and workstation, go to Control Panel > Network and Sharing Center > Advanced sharing settings. Ensure "Turn on network discovery" and "Turn on file and printer sharing" are enabled for the current network profile (Private or Public).
Firewall Rules: Updates might have reset firewall settings. Check Windows Defender Firewall:
Allow "File and Printer Sharing (SMB-In)" on the server.
Allow outbound SMB (ports 445, 139) on the client.
Command to check: netsh advfirewall firewall show rule name="File and Printer Sharing (SMB-In)"
4. Investigate Update Impact
Installed Updates: On an affected workstation, go to Settings > Windows Update > Update history. Look for updates installed around the time the issue began (likely KB numbers from January or February 2025, e.g., KB5051987 from February 11, 2025). Cross-reference with Microsoft’s update catalog or release notes for networking changes.
Server Updates: If the server received updates, check its update history too. Windows Server 2025’s February 11, 2025, update (KB5051987) resolved some networking issues (e.g., iSCSI boot errors), but others might persist.
5. Permissions and Sharing
Reapply Share Permissions: On the server, right-click the shared folder, go to Properties > Sharing > Advanced Sharing, and re-verify "Share this folder" with "Everyone" permissions. Then, under Security tab, ensure "Everyone" has Full Control.
Check Effective Permissions: Updates might enforce stricter NTFS permissions over share permissions. Use the "Effective Access" tool in the Security tab to confirm "Everyone" still has access.
6. Roll Back or Test Updates
Uninstall Updates: If a specific update correlates with the issue, uninstall it from an affected workstation via Settings > Windows Update > Update history > Uninstall updates. Test connectivity afterward.
Pause Updates: Temporarily pause updates (Settings > Windows Update > Pause for 1 week) to prevent further changes while troubleshooting.
7. Resources and Further Checks
Microsoft Documentation: Check "Resolved issues in Windows Server 2025" or "Windows Server 2025 update history" on Microsoft Learn/Support for notes on networking fixes (e.g., February 11, 2025, KB5051987 resolved some issues, but new ones could emerge).
Event Viewer: On the workstation, open Event Viewer (eventvwr.msc), go to Windows Logs > System, and filter for errors related to "Server," "SMB," or "Network" around the time of failure.
X Search: I can search X posts for real-time reports of similar issues. Would you like me to do this?
Hypothesis and Recommendation
Given the timing with 2025 Q1 updates and your description, I suspect a client-side update (e.g., Windows 10/11 receiving January/February 2025 patches) is enforcing SMB encryption or signing that your server (possibly still on an older version like Windows Server 2019/2022) doesn’t support by default. Alternatively, network discovery might be disrupted by tightened firewall rules or a bug in the update rollout.
Start with steps 1-3: verify reachability, check SMB settings, and ensure discovery/firewall are intact. If that doesn’t resolve it, pinpoint the update (step 4) and consider rolling back or adjusting server settings to match client expectations (e.g., enabling SMB signing if required).
Community Input
Since you’re asking for knowledge from others, I’d encourage you to share specifics (e.g., server OS version, client OS version, exact update KB installed) to get tailored advice. I don’t have direct FiveWin community insights here, but the issue aligns with broader Windows networking changes, not FWH itself.
]]>I understand your frustration with the sudden networking issues you're experiencing, especially as they coincide with Microsoft's 2025 Q1 updates. Given that you're using Microsoft Peer-to-Peer networking (likely relying on SMB - Server Message Block - for file sharing) and that this setup has worked reliably for decades with FiveWin (FWH) and your applications, it’s reasonable to suspect that recent Windows updates—particularly those related to Windows Server 2025 or client-side updates—are introducing changes affecting visibility or connectivity to the server. Let’s break this down and explore potential causes and resolutions based on the information available and common networking behavior in Windows.
Potential Cause: SMB or Permissions Changes in 2025 Q1 Updates
Microsoft has been incrementally tightening security around SMB and networking protocols over the years, and with Windows Server 2025 (released November 1, 2024) and associated client updates rolling out in Q1 2025, it’s plausible that changes to SMB configuration, default security settings, or network discovery mechanisms are at play. Here are some likely culprits:
SMB Protocol Hardening: Windows Server 2025 includes enhanced SMB security features (e.g., SMB over QUIC, hardened firewall defaults, and protections against attacks). Even if your server isn’t yet on 2025, client machines receiving updates might enforce stricter SMB requirements (e.g., requiring encryption or signing) that your server doesn’t meet.
Network Discovery or Permissions: Updates might have altered default settings for network discovery, firewall rules, or the "Everyone" share permissions, making the server invisible in Windows Explorer despite being fully shared.
Deprecation of Legacy Features: Microsoft has a history of phasing out older, less secure networking components (e.g., SMBv1 was disabled by default years ago). Peer-to-Peer networking relying on older mechanisms might be impacted if a 2025 update further restricts legacy support.
Group Policy or Update Bugs: The unexpected upgrades to Windows Server 2025 reported in November 2024 (due to third-party tools or misclassified updates) suggest that Q1 updates might introduce similar quirks, like altered permissions or connectivity settings.
Since your setup has password protection off and "Everyone" granted Read/Write access, it’s unlikely a credential issue, but rather a discovery or protocol compatibility problem triggered by the update.
Steps to Diagnose and Resolve
Here’s a structured approach to troubleshoot and potentially fix this, keeping your Peer-to-Peer setup intact:
1. Verify Server Visibility
Ping the Server: From an affected workstation, open a Command Prompt and type ping [server IP] (e.g., ping 192.168.1.100). If it responds, the server is reachable, and the issue is likely at the SMB or Explorer level.
Manual Connection: In Windows Explorer, try manually connecting to the server by typing \\servername or \\serverIP in the address bar. If it works, the server is still accessible, but network discovery is failing.
2. Check SMB Settings
Server SMB Configuration: On the server, open PowerShell as Administrator and run:
Get-SmbServerConfiguration
Look for EnableSMB1Protocol (should be False), RequireSecuritySignature, and EncryptData. If EncryptData is True and clients don’t support it, this could block access.
Client SMB Configuration: On an affected workstation, run:
Get-SmbClientConfiguration
Check if RequireSecuritySignature or EncryptData is enabled post-update. If so, and the server doesn’t match, connectivity fails.
Temporary Fix: On the server, disable encryption (if it’s safe in your environment) with:
Set-SmbServerConfiguration -EncryptData $false
Restart the "Server" service (Restart-Service LanmanServer) and test.
3. Review Network Discovery and Firewall
Network Discovery: On both server and workstation, go to Control Panel > Network and Sharing Center > Advanced sharing settings. Ensure "Turn on network discovery" and "Turn on file and printer sharing" are enabled for the current network profile (Private or Public).
Firewall Rules: Updates might have reset firewall settings. Check Windows Defender Firewall:
Allow "File and Printer Sharing (SMB-In)" on the server.
Allow outbound SMB (ports 445, 139) on the client.
Command to check: netsh advfirewall firewall show rule name="File and Printer Sharing (SMB-In)"
4. Investigate Update Impact
Installed Updates: On an affected workstation, go to Settings > Windows Update > Update history. Look for updates installed around the time the issue began (likely KB numbers from January or February 2025, e.g., KB5051987 from February 11, 2025). Cross-reference with Microsoft’s update catalog or release notes for networking changes.
Server Updates: If the server received updates, check its update history too. Windows Server 2025’s February 11, 2025, update (KB5051987) resolved some networking issues (e.g., iSCSI boot errors), but others might persist.
5. Permissions and Sharing
Reapply Share Permissions: On the server, right-click the shared folder, go to Properties > Sharing > Advanced Sharing, and re-verify "Share this folder" with "Everyone" permissions. Then, under Security tab, ensure "Everyone" has Full Control.
Check Effective Permissions: Updates might enforce stricter NTFS permissions over share permissions. Use the "Effective Access" tool in the Security tab to confirm "Everyone" still has access.
6. Roll Back or Test Updates
Uninstall Updates: If a specific update correlates with the issue, uninstall it from an affected workstation via Settings > Windows Update > Update history > Uninstall updates. Test connectivity afterward.
Pause Updates: Temporarily pause updates (Settings > Windows Update > Pause for 1 week) to prevent further changes while troubleshooting.
7. Resources and Further Checks
Microsoft Documentation: Check "Resolved issues in Windows Server 2025" or "Windows Server 2025 update history" on Microsoft Learn/Support for notes on networking fixes (e.g., February 11, 2025, KB5051987 resolved some issues, but new ones could emerge).
Event Viewer: On the workstation, open Event Viewer (eventvwr.msc), go to Windows Logs > System, and filter for errors related to "Server," "SMB," or "Network" around the time of failure.
X Search: I can search X posts for real-time reports of similar issues. Would you like me to do this?
Hypothesis and Recommendation
Given the timing with 2025 Q1 updates and your description, I suspect a client-side update (e.g., Windows 10/11 receiving January/February 2025 patches) is enforcing SMB encryption or signing that your server (possibly still on an older version like Windows Server 2019/2022) doesn’t support by default. Alternatively, network discovery might be disrupted by tightened firewall rules or a bug in the update rollout.
Start with steps 1-3: verify reachability, check SMB settings, and ensure discovery/firewall are intact. If that doesn’t resolve it, pinpoint the update (step 4) and consider rolling back or adjusting server settings to match client expectations (e.g., enabling SMB signing if required).
Community Input
Since you’re asking for knowledge from others, I’d encourage you to share specifics (e.g., server OS version, client OS version, exact update KB installed) to get tailored advice. I don’t have direct FiveWin community insights here, but the issue aligns with broader Windows networking changes, not FWH itself.
]]>Check SMB Protocol Settings
Microsoft has been deprecating older versions of the SMB (Server Message Block) protocol, which could be causing connectivity issues.
Ensure that SMBv1 is disabled (for security reasons) but that SMBv2 and SMBv3 are enabled.
Open PowerShell or Command Prompt as Administrator and run:
shell
Copy
Get-SmbServerConfiguration | Select EnableSMB1Protocol, EnableSMB2Protocol
If SMBv2 is disabled, enable it with:
shell
Copy
Set-SmbServerConfiguration -EnableSMB2Protocol $true
Verify that all machines are using compatible SMB versions.
]]>Check SMB Protocol Settings
Microsoft has been deprecating older versions of the SMB (Server Message Block) protocol, which could be causing connectivity issues.
Ensure that SMBv1 is disabled (for security reasons) but that SMBv2 and SMBv3 are enabled.
Open PowerShell or Command Prompt as Administrator and run:
shell
Copy
Get-SmbServerConfiguration | Select EnableSMB1Protocol, EnableSMB2Protocol
If SMBv2 is disabled, enable it with:
shell
Copy
Set-SmbServerConfiguration -EnableSMB2Protocol $true
Verify that all machines are using compatible SMB versions.
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oDlg, oGet, cText := "test"
DEFINE DIALOG oDlg
@ 2, 2 GET oGet VAR cText ACTION ( oGet:Enable(), cText := "hello", oGet:Refresh(), oGet:Disable() ) SIZE 80, 20 READONLY
ACTIVATE DIALOG oDlg CENTERED
return nil
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oDlg, oGet, cText := "test"
DEFINE DIALOG oDlg
@ 2, 2 GET oGet VAR cText ACTION ( oGet:Enable(), cText := "hello", oGet:Refresh(), oGet:Disable() ) SIZE 80, 20 READONLY
ACTIVATE DIALOG oDlg CENTERED
return nil
Code: Select all | Expand
METHOD VarPut( uVal ) INLINE If( ValType( ::bSetGet ) == "B", ; // .and. ! ::lReadOnly,; // Remark for use VarPut with READONLY
Eval( ::bSetGet, uVal ),)
]]>Antonio Linares wrote: Fri Mar 14, 2025 8:52 am Dear Dutch,
Here you have a working example:Code: Select all | Expand
#include "FiveWin.ch" function Main() local oDlg, oGet, cText := "test" DEFINE DIALOG oDlg @ 2, 2 GET oGet VAR cText ACTION ( oGet:Enable(), cText := "hello", oGet:Refresh(), oGet:Disable() ) SIZE 80, 20 READONLY ACTIVATE DIALOG oDlg CENTERED return nil
Code: Select all | Expand
METHOD VarPut( uVal ) INLINE If( ValType( ::bSetGet ) == "B", ; // .and. ! ::lReadOnly,; // Remark for use VarPut with READONLY
Eval( ::bSetGet, uVal ),)
]]>Antonio Linares wrote: Fri Mar 14, 2025 8:52 am Dear Dutch,
Here you have a working example:Code: Select all | Expand
#include "FiveWin.ch" function Main() local oDlg, oGet, cText := "test" DEFINE DIALOG oDlg @ 2, 2 GET oGet VAR cText ACTION ( oGet:Enable(), cText := "hello", oGet:Refresh(), oGet:Disable() ) SIZE 80, 20 READONLY ACTIVATE DIALOG oDlg CENTERED return nil
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oDlg, oGet, cText := "test"
DEFINE DIALOG oDlg
@ 2, 2 GET oGet VAR cText ACTION ( oGet:lReadOnly := .F., oGet:VarPut( "hello" ), oGet:lReadOnly := .T. ) SIZE 80, 20 READONLY
ACTIVATE DIALOG oDlg CENTERED
return nil
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oDlg, oGet, cText := "test"
DEFINE DIALOG oDlg
@ 2, 2 GET oGet VAR cText ACTION ( oGet:lReadOnly := .F., oGet:VarPut( "hello" ), oGet:lReadOnly := .T. ) SIZE 80, 20 READONLY
ACTIVATE DIALOG oDlg CENTERED
return nil
Code: Select all | Expand
#include "FiveWin.ch"
#include "hbcurl.ch"
//----------------------------------------------------------------------------//
CLASS TEmbeddings
DATA cModel
DATA cPrompt
DATA cResponse
DATA cUrl
DATA cKey
DATA hCurl
DATA nError INIT 0
DATA nHttpCode INIT 0
DATA aEmbeddings
METHOD New( cModel, cKey )
METHOD Distance( aVector2, lCosine )
METHOD DistanceFrom( oEmbeddings ) INLINE ::Distance( oEmbeddings:aEmbeddings )
METHOD End()
METHOD GetEmbeddings( cPrompt )
METHOD IsOpenAI() INLINE ( "openai" $ Lower( ::cModel ) .or. "text-embedding-" $ ::cModel )
OPERATOR "-" ARG oEmbeddings INLINE ::DistanceFrom( oEmbeddings )
DESTRUCTOR Destroy()
ENDCLASS
//----------------------------------------------------------------------------//
METHOD New( cModel, cKey ) CLASS TEmbeddings
DEFAULT cModel := "sentence-transformers/all-MiniLM-L6-v2" // Default to Hugging Face
DEFAULT cKey := hb_GetEnv( "HF_API_KEY" ) // Try Hugging Face first
if Empty( cKey )
cKey := hb_GetEnv( "OPENAI_API_KEY" ) // If no HF_API_KEY, try OPENAI_API_KEY
endif
::cModel = cModel
::cKey = cKey
::hCurl = curl_easy_init()
// Set the endpoint based on the model
if ::IsOpenAI()
::cUrl = "https://api.openai.com/v1/embeddings"
else
::cUrl = "https://api-inference.huggingface.co/pipeline/feature-extraction/" + ::cModel // Feature extraction for embeddings
endif
if Empty( ::cKey )
MsgAlert( "API key is required! Set it via parameter or HF_API_KEY/OPENAI_API_KEY environment variables." )
endif
return Self
//----------------------------------------------------------------------------//
METHOD End() CLASS TEmbeddings
curl_easy_cleanup( ::hCurl )
::hCurl = nil
return nil
//----------------------------------------------------------------------------//
METHOD GetEmbeddings( cPrompt ) CLASS TEmbeddings
local aHeaders, cJson, hRequest := { => }, hResponse, uValue
if ! Empty( cPrompt )
::cPrompt = cPrompt
endif
curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, .T. )
curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cUrl )
aHeaders := { ;
"Content-Type: application/json", ;
"Authorization: Bearer " + ::cKey ;
}
curl_easy_setopt( ::hCurl, HB_CURLOPT_HTTPHEADER, aHeaders )
curl_easy_setopt( ::hCurl, HB_CURLOPT_USERNAME, '' )
curl_easy_setopt( ::hCurl, HB_CURLOPT_DL_BUFF_SETUP )
curl_easy_setopt( ::hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
if ::IsOpenAI()
hRequest[ "model" ] = ::cModel
hRequest[ "input" ] = ::cPrompt // OpenAI uses "input" instead of "inputs"
else
// Hugging Face: Correct structure for feature-extraction pipeline
hRequest[ "inputs" ] = ::cPrompt
endif
cJson = hb_jsonEncode( hRequest )
curl_easy_setopt( ::hCurl, HB_CURLOPT_POSTFIELDS, cJson )
::nError = curl_easy_perform( ::hCurl )
curl_easy_getinfo( ::hCurl, HB_CURLINFO_RESPONSE_CODE, @::nHttpCode )
if ::nError == HB_CURLE_OK
::cResponse = curl_easy_dl_buff_get( ::hCurl )
else
::cResponse := "Error code " + Str( ::nError )
endif
hb_jsonDecode( ::cResponse, @hResponse )
if ::IsOpenAI()
TRY
uValue = hResponse[ "data" ][ 1 ][ "embedding" ] // OpenAI returns embeddings in "data[0].embedding"
::aEmbeddings = uValue
CATCH
uValue = hResponse[ "error" ][ "message" ]
::aEmbeddings = nil
END
else // Hugging Face
TRY
uValue = hResponse // HF feature-extraction returns the vector directly as an array
::aEmbeddings = uValue
CATCH
uValue = hResponse[ "error" ]
::aEmbeddings = nil
END
endif
return uValue
//----------------------------------------------------------------------------//
PROCEDURE Destroy() CLASS TEmbeddings
if ::hCurl != nil
::End()
endif
return
//----------------------------------------------------------------------------//
METHOD Distance( aVector2, lCosine ) CLASS TEmbeddings
local nDistance, nSum, nNorm1, nNorm2, nDotProduct, nI
DEFAULT lCosine := .T. // Default to cosine distance
if Empty( ::aEmbeddings )
return -1 // Error: No embeddings stored in ::aEmbeddings
endif
if Len( ::aEmbeddings ) != Len( aVector2 )
return -1 // Error: vectors must have the same length
endif
if lCosine
// Calculate dot product and norms for cosine similarity
nDotProduct := 0
nNorm1 := 0
nNorm2 := 0
for nI := 1 to Len( ::aEmbeddings )
nDotProduct += ::aEmbeddings[nI] * aVector2[nI]
nNorm1 += ::aEmbeddings[nI] ^ 2
nNorm2 += aVector2[nI] ^ 2
next
nNorm1 := Sqrt( nNorm1 )
nNorm2 := Sqrt( nNorm2 )
// Avoid division by zero
if nNorm1 == 0 .OR. nNorm2 == 0
return 1 // Maximum distance if one vector is zero
endif
// Cosine similarity and distance
nDistance := 1 - ( nDotProduct / ( nNorm1 * nNorm2 ) )
else
// Euclidean distance
nSum := 0
for nI := 1 to Len( ::aEmbeddings )
nSum += ( ::aEmbeddings[nI] - aVector2[nI] ) ^ 2
next
nDistance := Sqrt( nSum )
endif
return nDistance
//----------------------------------------------------------------------------//
Code: Select all | Expand
// Please remember to set HF_API_KEY=hf_... or OPENAI_API_KEY=... in your environment
#include "FiveWin.ch"
function Main()
local oEmbeddings1 := TEmbeddings():New()
local oEmbeddings2 := TEmbeddings():New()
local oEmbeddings3 := TEmbeddings():New()
oEmbeddings1:GetEmbeddings( "Me siento muy bien" )
oEmbeddings2:GetEmbeddings( "¿ Como estás ?" )
oEmbeddings3:GetEmbeddings( "he visto a Pepe" )
? oEmbeddings1 - oEmbeddings2
? oEmbeddings1 - oEmbeddings3
return nil
Code: Select all | Expand
// Please remember to set HF_API_KEY=hf_... or OPENAI_API_KEY=... in your environment
#include "FiveWin.ch"
function Main()
local oEmbeddings := TEmbeddings():New()
local cJson, cSentence := "Hello how are you ?"
oEmbeddings:GetEmbeddings( cSentence )
cJson = hb_jsonEncode( oEmbeddings:aEmbeddings )
if ! File( "embeddings.dbf" )
DbCreate( "embeddings", { { "id", "+", 4, 0 },;
{ "sentence", "M", 10, 0 },;
{ "vectors", "M", 10 , 0 } } )
endif
USE embeddings
APPEND BLANK
REPLACE sentence WITH cSentence
REPLACE vectors WITH cJson
XBrowse()
USE
return nil
Code: Select all | Expand
#include "FiveWin.ch"
#include "hbcurl.ch"
//----------------------------------------------------------------------------//
CLASS TEmbeddings
DATA cModel
DATA cPrompt
DATA cResponse
DATA cUrl
DATA cKey
DATA hCurl
DATA nError INIT 0
DATA nHttpCode INIT 0
DATA aEmbeddings
METHOD New( cModel, cKey )
METHOD Distance( aVector2, lCosine )
METHOD DistanceFrom( oEmbeddings ) INLINE ::Distance( oEmbeddings:aEmbeddings )
METHOD End()
METHOD GetEmbeddings( cPrompt )
METHOD IsOpenAI() INLINE ( "openai" $ Lower( ::cModel ) .or. "text-embedding-" $ ::cModel )
OPERATOR "-" ARG oEmbeddings INLINE ::DistanceFrom( oEmbeddings )
DESTRUCTOR Destroy()
ENDCLASS
//----------------------------------------------------------------------------//
METHOD New( cModel, cKey ) CLASS TEmbeddings
DEFAULT cModel := "sentence-transformers/all-MiniLM-L6-v2" // Default to Hugging Face
DEFAULT cKey := hb_GetEnv( "HF_API_KEY" ) // Try Hugging Face first
if Empty( cKey )
cKey := hb_GetEnv( "OPENAI_API_KEY" ) // If no HF_API_KEY, try OPENAI_API_KEY
endif
::cModel = cModel
::cKey = cKey
::hCurl = curl_easy_init()
// Set the endpoint based on the model
if ::IsOpenAI()
::cUrl = "https://api.openai.com/v1/embeddings"
else
::cUrl = "https://api-inference.huggingface.co/pipeline/feature-extraction/" + ::cModel // Feature extraction for embeddings
endif
if Empty( ::cKey )
MsgAlert( "API key is required! Set it via parameter or HF_API_KEY/OPENAI_API_KEY environment variables." )
endif
return Self
//----------------------------------------------------------------------------//
METHOD End() CLASS TEmbeddings
curl_easy_cleanup( ::hCurl )
::hCurl = nil
return nil
//----------------------------------------------------------------------------//
METHOD GetEmbeddings( cPrompt ) CLASS TEmbeddings
local aHeaders, cJson, hRequest := { => }, hResponse, uValue
if ! Empty( cPrompt )
::cPrompt = cPrompt
endif
curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, .T. )
curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cUrl )
aHeaders := { ;
"Content-Type: application/json", ;
"Authorization: Bearer " + ::cKey ;
}
curl_easy_setopt( ::hCurl, HB_CURLOPT_HTTPHEADER, aHeaders )
curl_easy_setopt( ::hCurl, HB_CURLOPT_USERNAME, '' )
curl_easy_setopt( ::hCurl, HB_CURLOPT_DL_BUFF_SETUP )
curl_easy_setopt( ::hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
if ::IsOpenAI()
hRequest[ "model" ] = ::cModel
hRequest[ "input" ] = ::cPrompt // OpenAI uses "input" instead of "inputs"
else
// Hugging Face: Correct structure for feature-extraction pipeline
hRequest[ "inputs" ] = ::cPrompt
endif
cJson = hb_jsonEncode( hRequest )
curl_easy_setopt( ::hCurl, HB_CURLOPT_POSTFIELDS, cJson )
::nError = curl_easy_perform( ::hCurl )
curl_easy_getinfo( ::hCurl, HB_CURLINFO_RESPONSE_CODE, @::nHttpCode )
if ::nError == HB_CURLE_OK
::cResponse = curl_easy_dl_buff_get( ::hCurl )
else
::cResponse := "Error code " + Str( ::nError )
endif
hb_jsonDecode( ::cResponse, @hResponse )
if ::IsOpenAI()
TRY
uValue = hResponse[ "data" ][ 1 ][ "embedding" ] // OpenAI returns embeddings in "data[0].embedding"
::aEmbeddings = uValue
CATCH
uValue = hResponse[ "error" ][ "message" ]
::aEmbeddings = nil
END
else // Hugging Face
TRY
uValue = hResponse // HF feature-extraction returns the vector directly as an array
::aEmbeddings = uValue
CATCH
uValue = hResponse[ "error" ]
::aEmbeddings = nil
END
endif
return uValue
//----------------------------------------------------------------------------//
PROCEDURE Destroy() CLASS TEmbeddings
if ::hCurl != nil
::End()
endif
return
//----------------------------------------------------------------------------//
METHOD Distance( aVector2, lCosine ) CLASS TEmbeddings
local nDistance, nSum, nNorm1, nNorm2, nDotProduct, nI
DEFAULT lCosine := .T. // Default to cosine distance
if Empty( ::aEmbeddings )
return -1 // Error: No embeddings stored in ::aEmbeddings
endif
if Len( ::aEmbeddings ) != Len( aVector2 )
return -1 // Error: vectors must have the same length
endif
if lCosine
// Calculate dot product and norms for cosine similarity
nDotProduct := 0
nNorm1 := 0
nNorm2 := 0
for nI := 1 to Len( ::aEmbeddings )
nDotProduct += ::aEmbeddings[nI] * aVector2[nI]
nNorm1 += ::aEmbeddings[nI] ^ 2
nNorm2 += aVector2[nI] ^ 2
next
nNorm1 := Sqrt( nNorm1 )
nNorm2 := Sqrt( nNorm2 )
// Avoid division by zero
if nNorm1 == 0 .OR. nNorm2 == 0
return 1 // Maximum distance if one vector is zero
endif
// Cosine similarity and distance
nDistance := 1 - ( nDotProduct / ( nNorm1 * nNorm2 ) )
else
// Euclidean distance
nSum := 0
for nI := 1 to Len( ::aEmbeddings )
nSum += ( ::aEmbeddings[nI] - aVector2[nI] ) ^ 2
next
nDistance := Sqrt( nSum )
endif
return nDistance
//----------------------------------------------------------------------------//
Code: Select all | Expand
// Please remember to set HF_API_KEY=hf_... or OPENAI_API_KEY=... in your environment
#include "FiveWin.ch"
function Main()
local oEmbeddings1 := TEmbeddings():New()
local oEmbeddings2 := TEmbeddings():New()
local oEmbeddings3 := TEmbeddings():New()
oEmbeddings1:GetEmbeddings( "Me siento muy bien" )
oEmbeddings2:GetEmbeddings( "¿ Como estás ?" )
oEmbeddings3:GetEmbeddings( "he visto a Pepe" )
? oEmbeddings1 - oEmbeddings2
? oEmbeddings1 - oEmbeddings3
return nil
Code: Select all | Expand
// Please remember to set HF_API_KEY=hf_... or OPENAI_API_KEY=... in your environment
#include "FiveWin.ch"
function Main()
local oEmbeddings := TEmbeddings():New()
local cJson, cSentence := "Hello how are you ?"
oEmbeddings:GetEmbeddings( cSentence )
cJson = hb_jsonEncode( oEmbeddings:aEmbeddings )
if ! File( "embeddings.dbf" )
DbCreate( "embeddings", { { "id", "+", 4, 0 },;
{ "sentence", "M", 10, 0 },;
{ "vectors", "M", 10 , 0 } } )
endif
USE embeddings
APPEND BLANK
REPLACE sentence WITH cSentence
REPLACE vectors WITH cJson
XBrowse()
USE
return nil
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oWnd, oWebView
DEFINE WINDOW oWnd TITLE "Dashboard"
oWebView = TWebView2():New( oWnd )
oWebView:SetHtml( memoRead( "dashboard.html" ) )
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON RESIZE oWebView:SetSize( nWidth, nHeight )
return nil
dashboard.html
Code: Select all | Expand
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Professional Dashboard with Charts</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: Arial, sans-serif;
}
body {
background: #f0f2f5;
color: #333;
line-height: 1.6;
}
.container {
display: flex;
min-height: 100vh;
}
.sidebar {
width: 250px;
background: #2c3e50;
color: white;
position: fixed;
height: 100%;
padding: 20px;
}
.sidebar h2 {
font-size: 24px;
margin-bottom: 30px;
text-align: center;
}
.sidebar ul {
list-style: none;
}
.sidebar ul li {
margin: 20px 0;
}
.sidebar ul li a {
color: white;
text-decoration: none;
display: flex;
align-items: center;
padding: 10px;
border-radius: 5px;
transition: background 0.3s;
}
.sidebar ul li a:hover {
background: #34495e;
}
.sidebar ul li a i {
margin-right: 10px;
font-size: 18px;
}
.main-content {
flex: 1;
margin-left: 250px;
padding: 20px;
}
.dashboard-container {
max-width: 1400px;
margin: 0 auto;
}
.header {
background: #2c3e50;
color: white;
padding: 20px;
border-radius: 10px;
margin-bottom: 20px;
}
.header h1 {
font-size: 24px;
}
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
}
.card {
background: white;
border-radius: 10px;
padding: 20px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
transition: transform 0.3s;
}
.card:hover {
transform: translateY(-5px);
}
.card h3 {
margin-bottom: 15px;
color: #2c3e50;
}
.stats-card {
display: flex;
align-items: center;
gap: 15px;
}
.stats-icon {
width: 50px;
height: 50px;
background: #3498db;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 24px;
}
.chart-container {
height: 200px;
position: relative;
}
.progress-bar {
width: 100%;
height: 20px;
background: #eee;
border-radius: 10px;
overflow: hidden;
margin-top: 10px;
}
.progress {
height: 100%;
background: #2ecc71;
width: 0;
}
.progress-75 { width: 75%; }
.progress-50 { width: 50%; }
.progress-25 { width: 25%; }
@media (max-width: 768px) {
.sidebar {
width: 200px;
}
.main-content {
margin-left: 200px;
}
.grid-container {
grid-template-columns: 1fr;
}
}
@media (max-width: 480px) {
.sidebar {
width: 70px;
}
.sidebar h2,
.sidebar ul li a span {
display: none;
}
.main-content {
margin-left: 70px;
}
}
</style>
</head>
<body>
<div class="container">
<div class="sidebar">
<h2>Menu</h2>
<ul>
<li><a href="#"><i>🏠</i><span>Dashboard</span></a></li>
<li><a href="#"><i>📊</i><span>Analytics</span></a></li>
<li><a href="#"><i>👥</i><span>Users</span></a></li>
<li><a href="#"><i>⚙️</i><span>Settings</span></a></li>
<li><a href="#"><i>🚪</i><span>Logout</span></a></li>
</ul>
</div>
<div class="main-content">
<div class="dashboard-container">
<div class="header">
<h1>Dashboard Overview</h1>
</div>
<div class="grid-container">
<div class="card stats-card">
<div class="stats-icon">📊</div>
<div>
<h3>Revenue</h3>
<p>$24,500</p>
</div>
</div>
<div class="card stats-card">
<div class="stats-icon">👥</div>
<div>
<h3>Users</h3>
<p>1,234</p>
</div>
</div>
<div class="card stats-card">
<div class="stats-icon">⭐</div>
<div>
<h3>Rating</h3>
<p>4.8/5</p>
</div>
</div>
<div class="card">
<h3>Sales Trend (Monthly)</h3>
<div class="chart-container">
<canvas id="salesChart"></canvas>
</div>
</div>
<div class="card">
<h3>Project Progress</h3>
<p>Development</p>
<div class="progress-bar"><div class="progress progress-75"></div></div>
<p>Design</p>
<div class="progress-bar"><div class="progress progress-50"></div></div>
<p>Testing</p>
<div class="progress-bar"><div class="progress progress-25"></div></div>
</div>
<div class="card">
<h3>User Distribution</h3>
<div class="chart-container">
<canvas id="userChart"></canvas>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
// Sales Trend Line Chart
const salesCtx = document.getElementById('salesChart').getContext('2d');
new Chart(salesCtx, {
type: 'line',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
datasets: [{
label: 'Sales ($)',
data: [12000, 19000, 15000, 25000, 22000, 30000],
borderColor: '#3498db',
backgroundColor: 'rgba(52, 152, 219, 0.2)',
fill: true,
tension: 0.4
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: true
}
}
}
});
// User Distribution Bar Chart
const userCtx = document.getElementById('userChart').getContext('2d');
new Chart(userCtx, {
type: 'bar',
data: {
labels: ['New', 'Returning', 'Inactive'],
datasets: [{
label: 'Users',
data: [500, 600, 134],
backgroundColor: [
'#2ecc71',
'#3498db',
'#e74c3c'
]
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
</body>
</html>
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oWnd, oWebView
DEFINE WINDOW oWnd TITLE "Dashboard"
oWebView = TWebView2():New( oWnd )
oWebView:SetHtml( memoRead( "dashboard.html" ) )
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON RESIZE oWebView:SetSize( nWidth, nHeight )
return nil
dashboard.html
Code: Select all | Expand
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Professional Dashboard with Charts</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: Arial, sans-serif;
}
body {
background: #f0f2f5;
color: #333;
line-height: 1.6;
}
.container {
display: flex;
min-height: 100vh;
}
.sidebar {
width: 250px;
background: #2c3e50;
color: white;
position: fixed;
height: 100%;
padding: 20px;
}
.sidebar h2 {
font-size: 24px;
margin-bottom: 30px;
text-align: center;
}
.sidebar ul {
list-style: none;
}
.sidebar ul li {
margin: 20px 0;
}
.sidebar ul li a {
color: white;
text-decoration: none;
display: flex;
align-items: center;
padding: 10px;
border-radius: 5px;
transition: background 0.3s;
}
.sidebar ul li a:hover {
background: #34495e;
}
.sidebar ul li a i {
margin-right: 10px;
font-size: 18px;
}
.main-content {
flex: 1;
margin-left: 250px;
padding: 20px;
}
.dashboard-container {
max-width: 1400px;
margin: 0 auto;
}
.header {
background: #2c3e50;
color: white;
padding: 20px;
border-radius: 10px;
margin-bottom: 20px;
}
.header h1 {
font-size: 24px;
}
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
}
.card {
background: white;
border-radius: 10px;
padding: 20px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
transition: transform 0.3s;
}
.card:hover {
transform: translateY(-5px);
}
.card h3 {
margin-bottom: 15px;
color: #2c3e50;
}
.stats-card {
display: flex;
align-items: center;
gap: 15px;
}
.stats-icon {
width: 50px;
height: 50px;
background: #3498db;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 24px;
}
.chart-container {
height: 200px;
position: relative;
}
.progress-bar {
width: 100%;
height: 20px;
background: #eee;
border-radius: 10px;
overflow: hidden;
margin-top: 10px;
}
.progress {
height: 100%;
background: #2ecc71;
width: 0;
}
.progress-75 { width: 75%; }
.progress-50 { width: 50%; }
.progress-25 { width: 25%; }
@media (max-width: 768px) {
.sidebar {
width: 200px;
}
.main-content {
margin-left: 200px;
}
.grid-container {
grid-template-columns: 1fr;
}
}
@media (max-width: 480px) {
.sidebar {
width: 70px;
}
.sidebar h2,
.sidebar ul li a span {
display: none;
}
.main-content {
margin-left: 70px;
}
}
</style>
</head>
<body>
<div class="container">
<div class="sidebar">
<h2>Menu</h2>
<ul>
<li><a href="#"><i>🏠</i><span>Dashboard</span></a></li>
<li><a href="#"><i>📊</i><span>Analytics</span></a></li>
<li><a href="#"><i>👥</i><span>Users</span></a></li>
<li><a href="#"><i>⚙️</i><span>Settings</span></a></li>
<li><a href="#"><i>🚪</i><span>Logout</span></a></li>
</ul>
</div>
<div class="main-content">
<div class="dashboard-container">
<div class="header">
<h1>Dashboard Overview</h1>
</div>
<div class="grid-container">
<div class="card stats-card">
<div class="stats-icon">📊</div>
<div>
<h3>Revenue</h3>
<p>$24,500</p>
</div>
</div>
<div class="card stats-card">
<div class="stats-icon">👥</div>
<div>
<h3>Users</h3>
<p>1,234</p>
</div>
</div>
<div class="card stats-card">
<div class="stats-icon">⭐</div>
<div>
<h3>Rating</h3>
<p>4.8/5</p>
</div>
</div>
<div class="card">
<h3>Sales Trend (Monthly)</h3>
<div class="chart-container">
<canvas id="salesChart"></canvas>
</div>
</div>
<div class="card">
<h3>Project Progress</h3>
<p>Development</p>
<div class="progress-bar"><div class="progress progress-75"></div></div>
<p>Design</p>
<div class="progress-bar"><div class="progress progress-50"></div></div>
<p>Testing</p>
<div class="progress-bar"><div class="progress progress-25"></div></div>
</div>
<div class="card">
<h3>User Distribution</h3>
<div class="chart-container">
<canvas id="userChart"></canvas>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
// Sales Trend Line Chart
const salesCtx = document.getElementById('salesChart').getContext('2d');
new Chart(salesCtx, {
type: 'line',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
datasets: [{
label: 'Sales ($)',
data: [12000, 19000, 15000, 25000, 22000, 30000],
borderColor: '#3498db',
backgroundColor: 'rgba(52, 152, 219, 0.2)',
fill: true,
tension: 0.4
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: true
}
}
}
});
// User Distribution Bar Chart
const userCtx = document.getElementById('userChart').getContext('2d');
new Chart(userCtx, {
type: 'bar',
data: {
labels: ['New', 'Returning', 'Inactive'],
datasets: [{
label: 'Users',
data: [500, 600, 134],
backgroundColor: [
'#2ecc71',
'#3498db',
'#e74c3c'
]
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
</body>
</html>
Code: Select all | Expand
METHOD AddGraph (cNombre, cTitulo, cTipo, aColumnsData, aData, cColor)
METHOD AddGraph (cNombre, cTitulo, cTipo, aColumnsData, aData, cColor,cSubTitulo) // Cambiar aca
Local cGraph, cFuncion, cId, i
cGraph := cNombre+'();//AgregarChar'
::cHtml := strtran(::cHtml,"//AgregarChar",cGraph)
cFuncion := "function "+cNombre+"() { "+;
"var data = google.visualization.arrayToDataTable(["+;
" ['"+aColumnsData[1]+"', '"+aColumnsData[2]+"'], "
for i := 1 to len(aData)
cFuncion := cFuncion + "['"+aData[i,1]+"', "+STR(aData[i,2])+"],"
next i
cFuncion := cFuncion + " ]);"+;
"var options = { "+;
" title: '"+cSubTitulo+"',"+; //Cambiar Aca
" widht: '100%',"+;
" height: 300, "+;
" is3D: true "+;
"};"+;
"var chart = new google.visualization."+cTipo+"(document.getElementById('"+cNombre+"'));"+;
"chart.draw(datos, opciones);"+;
"}"+;
"//FuncionGrafico"
::cHtml := strtran(::cHtml,"//FuncionGrafico",cFuncion)
cId := '<div class="bg-white shadow-md p-6 rounded-lg">'+;
'<h2 class="text-xl font-bold mb-4 text-'+cColor+'-500">'+cTitulo+'</h2>'+;
'<div id="'+cNombre+'"></div>'+;
'</div>'+;
'<!-- idgrafico -->'
::cHtml := strtran(::cHtml,"<!-- idgrafico -->",cId)
return Self
]]>Code: Select all | Expand
METHOD AddGraph (cNombre, cTitulo, cTipo, aColumnsData, aData, cColor)
METHOD AddGraph (cNombre, cTitulo, cTipo, aColumnsData, aData, cColor,cSubTitulo) // Cambiar aca
Local cGraph, cFuncion, cId, i
cGraph := cNombre+'();//AgregarChar'
::cHtml := strtran(::cHtml,"//AgregarChar",cGraph)
cFuncion := "function "+cNombre+"() { "+;
"var data = google.visualization.arrayToDataTable(["+;
" ['"+aColumnsData[1]+"', '"+aColumnsData[2]+"'], "
for i := 1 to len(aData)
cFuncion := cFuncion + "['"+aData[i,1]+"', "+STR(aData[i,2])+"],"
next i
cFuncion := cFuncion + " ]);"+;
"var options = { "+;
" title: '"+cSubTitulo+"',"+; //Cambiar Aca
" widht: '100%',"+;
" height: 300, "+;
" is3D: true "+;
"};"+;
"var chart = new google.visualization."+cTipo+"(document.getElementById('"+cNombre+"'));"+;
"chart.draw(datos, opciones);"+;
"}"+;
"//FuncionGrafico"
::cHtml := strtran(::cHtml,"//FuncionGrafico",cFuncion)
cId := '<div class="bg-white shadow-md p-6 rounded-lg">'+;
'<h2 class="text-xl font-bold mb-4 text-'+cColor+'-500">'+cTitulo+'</h2>'+;
'<div id="'+cNombre+'"></div>'+;
'</div>'+;
'<!-- idgrafico -->'
::cHtml := strtran(::cHtml,"<!-- idgrafico -->",cId)
return Self
]]>Code: Select all | Expand
oRep:bPostGroup := { || oRep:Line(oRep:nRow + 5, 0, oRep:nRow + 5, oRep:nWidth, 1, CLR_BLACK) }
Code: Select all | Expand
oRep:bPostGroup := { || oRep:Line(oRep:nRow + 5, 0, oRep:nRow + 5, oRep:nWidth, 1, CLR_BLACK) }
Code: Select all | Expand
oRep:bStartGroup := { |oGroup| oRep:Say(oRep:nMargin, Replicate("-", oRep:nWidth / 10), 1, RPT_LEFT, oRep:nRow + 5, , , CLR_BLACK),;
oRep:nRow := oRep:nRow + 10 }
Code: Select all | Expand
oRep:bStartGroup := { |oGroup| oRep:Say(oRep:nMargin, Replicate("-", oRep:nWidth / 10), 1, RPT_LEFT, oRep:nRow + 5, , , CLR_BLACK),;
oRep:nRow := oRep:nRow + 10 }
Code: Select all | Expand
WITH OBJECT oBrw
:bChange := {|| RefreshCont(aBtnBrow[4], oBrw)}
:lHScroll := .F.
:CreateFromCode()
END
Code: Select all | Expand
WITH OBJECT oBrw
:bChange := {|| RefreshCont(aBtnBrow[4], oBrw)}
:lHScroll := .F.
:CreateFromCode()
END
did you run the App under Windows 10 ?Silvio.Falconi wrote: Wed Mar 19, 2025 7:53 pm Sorry not run ok here I use a lenovo Ideapad Miix 320 10 inch
did you run the App under Windows 10 ?Silvio.Falconi wrote: Wed Mar 19, 2025 7:53 pm Sorry not run ok here I use a lenovo Ideapad Miix 320 10 inch
The help file describes 7160 error as:Connection failed: [iAnywhere Solutions][Advantage SQL][ASA] Error 7160: Unable to find or load one of the OpenSSL libraries. axServerConnect
Obviously the connect function is not finding the appropriate SSL .dlls but I have no idea which version is it that works or where to place these files.Problem: Advantage Database Server was not able to load the OpenSSL libraries. In order to use AES encryption or TLS communications, you must have the FIPS Encryption Security Option available.
Solution: If the libraries are available, verify that they are in a path location that the server can access.
The help file describes 7160 error as:Connection failed: [iAnywhere Solutions][Advantage SQL][ASA] Error 7160: Unable to find or load one of the OpenSSL libraries. axServerConnect
Obviously the connect function is not finding the appropriate SSL .dlls but I have no idea which version is it that works or where to place these files.Problem: Advantage Database Server was not able to load the OpenSSL libraries. In order to use AES encryption or TLS communications, you must have the FIPS Encryption Security Option available.
Solution: If the libraries are available, verify that they are in a path location that the server can access.
Place the OpenSSL DLLs in a location where the system or ADSODBC driver can find them. Here are some common locations to check:
The same directory as the ODBC driver (adsodbc.dll).
A system-wide location like C:\Windows\System32\ for 64-bit or C:\Windows\SysWow64\ for 32-bit.
Alternatively, you can add the directory containing the OpenSSL DLLs to your system's PATH environment variable.
Ensure that you're using a version of OpenSSL that's compatible with Advantage Database Server (ADS) 10.10. The OpenSSL libraries should match the version that ADS expects for encryption (AES, TLS, etc.).
Advantage Database typically uses OpenSSL 1.0.x, so using a newer or incompatible version (like OpenSSL 1.1.x or OpenSSL 3.x) could cause issues.
]]>For ADS 10.10, you need OpenSSL libraries in the 0.9.8 series (similar to what's used in ADS 11.10)
Place the OpenSSL DLLs in a location where the system or ADSODBC driver can find them. Here are some common locations to check:
The same directory as the ODBC driver (adsodbc.dll).
A system-wide location like C:\Windows\System32\ for 64-bit or C:\Windows\SysWow64\ for 32-bit.
Alternatively, you can add the directory containing the OpenSSL DLLs to your system's PATH environment variable.
Ensure that you're using a version of OpenSSL that's compatible with Advantage Database Server (ADS) 10.10. The OpenSSL libraries should match the version that ADS expects for encryption (AES, TLS, etc.).
Advantage Database typically uses OpenSSL 1.0.x, so using a newer or incompatible version (like OpenSSL 1.1.x or OpenSSL 3.x) could cause issues.
]]>For ADS 10.10, you need OpenSSL libraries in the 0.9.8 series (similar to what's used in ADS 11.10)
Code: Select all | Expand
$mysqli = new mysqli("localhost", "user", "password", "database");
$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $username); // 's' means string
$username = "rcrespo";
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
print_r($row);
}
Code: Select all | Expand
$mysqli = new mysqli("localhost", "user", "password", "database");
$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $username); // 's' means string
$username = "rcrespo";
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
print_r($row);
}
Code: Select all | Expand
cSql := "SHOW FULL TABLES IN `?` LIKE ?"
oMysql:Execute( cSql, { npar1, npar2 } ) // Example with two parameters
Code: Select all | Expand
cSql := "SHOW FULL TABLES IN `?` LIKE ?"
oMysql:Execute( cSql, { npar1, npar2 } ) // Example with two parameters
Code: Select all | Expand
DEFINE WINDOW oWnd TITLE "Dashboard "
*** Paneles
oPanelWeb := TPanel():New( 0, 281, oWnd:nHeight, oWnd:nWidth, oWnd )
oPanelWeb:blclicked := {|| msginfo("test")} <---------
oWebView := TWebView2():New(oPanelWeb)
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:SetHtml( MiHtml(1) )
oWebView:Run()
ACTIVATE WINDOW oWnd MAXIMIZED ON RESIZE
Code: Select all | Expand
DEFINE WINDOW oWnd TITLE "Dashboard "
*** Paneles
oPanelWeb := TPanel():New( 0, 281, oWnd:nHeight, oWnd:nWidth, oWnd )
oPanelWeb:blclicked := {|| msginfo("test")} <---------
oWebView := TWebView2():New(oPanelWeb)
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:SetHtml( MiHtml(1) )
oWebView:Run()
ACTIVATE WINDOW oWnd MAXIMIZED ON RESIZE
Code: Select all | Expand
// C:\FWH\SAMPLES\BIRAPAN.PRG
#include "FiveWin.ch"
STATIC oWnd, OPANELWEB, OWEBVIEW
FUNCTION Main()
DEFINE WINDOW oWnd TITLE "Dashboard " // ** Paneles
oPanelWeb := TPanel():New( 0, 281, oWnd:nHeight, oWnd:nWidth, oWnd )
WITH OBJECT oPanelWeb
oWnd:bRClicked := { || ( FUNDOBIRA() ) } // Mouse Direito
oWnd:bLClicked := { || ( FUNDOBIRA() ) } // Mouse Esquerdo
END
oWebView := TWebView2():New( oPanelWeb )
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:SetHtml( MiHtml( 1 ) ) // ?? Mostre isso Bira, fiquei curioso.
oWebView:Run()
ACTIVATE WINDOW oWnd MAXIMIZED // ON RESIZE ??
RETURN NIL
FUNCTION FUNDOBIRA()
? [AQUI ESTOU BIRA]
RETURN NIL
// FIN / END - kapiabafwh@gmail.com
Code: Select all | Expand
// C:\FWH\SAMPLES\BIRAPAN.PRG
#include "FiveWin.ch"
STATIC oWnd, OPANELWEB, OWEBVIEW
FUNCTION Main()
DEFINE WINDOW oWnd TITLE "Dashboard " // ** Paneles
oPanelWeb := TPanel():New( 0, 281, oWnd:nHeight, oWnd:nWidth, oWnd )
WITH OBJECT oPanelWeb
oWnd:bRClicked := { || ( FUNDOBIRA() ) } // Mouse Direito
oWnd:bLClicked := { || ( FUNDOBIRA() ) } // Mouse Esquerdo
END
oWebView := TWebView2():New( oPanelWeb )
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:SetHtml( MiHtml( 1 ) ) // ?? Mostre isso Bira, fiquei curioso.
oWebView:Run()
ACTIVATE WINDOW oWnd MAXIMIZED // ON RESIZE ??
RETURN NIL
FUNCTION FUNDOBIRA()
? [AQUI ESTOU BIRA]
RETURN NIL
// FIN / END - kapiabafwh@gmail.com
Code: Select all | Expand
if ( "index.html" $ cParam .and. "#" $ cParam )
cCommand := SubStr( cParam, At( "#", cParam ) + 1 )
if !Empty( cCommand )
&cCommand
end if
Code: Select all | Expand
<ul class="post-content-button">
<li class="post-contenido-button"><img src="img/gc_document_text_user.png" class="imagen"></li>
<li class="post-contenido-button"><font class="tituloboton"><a href="index.html#AppFacCli()">Añadir nueva factura</a></font></li>
</ul>
Code: Select all | Expand
if ( "index.html" $ cParam .and. "#" $ cParam )
cCommand := SubStr( cParam, At( "#", cParam ) + 1 )
if !Empty( cCommand )
&cCommand
end if
Code: Select all | Expand
<ul class="post-content-button">
<li class="post-contenido-button"><img src="img/gc_document_text_user.png" class="imagen"></li>
<li class="post-contenido-button"><font class="tituloboton"><a href="index.html#AppFacCli()">Añadir nueva factura</a></font></li>
</ul>
Code: Select all | Expand
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<title>Test TWebView</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f0f0f0;
}
.post-content-button {
list-style: none;
padding: 0;
display: flex;
align-items: center;
background-color: #ffffff;
border: 1px solid #ccc;
border-radius: 5px;
box-shadow: 2px 2px 5px rgba(0,0,0,0.1);
}
.post-contenido-button {
margin: 10px;
}
.imagen {
width: 24px;
height: 24px;
vertical-align: middle;
}
.tituloboton {
font-size: 16px;
color: #333;
}
a {
text-decoration: none;
color: #0078d7;
}
a:hover {
text-decoration: underline;
color: #005bb5;
}
</style>
</head>
<body>
<ul class="post-content-button">
<li class="post-contenido-button">
<img src="img/test.png" class="imagen" alt="Image">
</li>
<li class="post-contenido-button">
<font class="tituloboton">
<a href="#" onclick="callHarbourFunction('AppFacCli'); return false;">Añadir nueva factura</a>
</font>
</li>
</ul>
<script>
function callHarbourFunction(funcName) {
if (window.chrome && window.chrome.webview) {
window.chrome.webview.postMessage(funcName);
alert("Messaggio inviato a Harbour: " + funcName);
} else {
alert("WebView2 non è disponibile!");
}
}
</script>
</body>
</html>
Code: Select all | Expand
#include "FiveWin.ch"
FUNCTION Main()
LOCAL oWebView := TWebView():New( 0, 0, 800, 600 ) // Create the WebView control
LOCAL cHtml := MemoRead("mihtml.html") // Upload your HTML
// Set up binding to receive messages from the web
oWebView:bOnBind := {|cMessage| ExecuteFunction(cMessage) }
// Load the HTML
oWebView:SetHtml(cHtml)
oWebView:Run()
RETURN NIL
FUNCTION ExecuteFunction(cFuncName)
IF cFuncName == "AppFacCli"
AppFacCli() // Call your Harbour function
ENDIF
RETURN NIL
FUNCTION AppFacCli()
MsgInfo("here your harbour/fwh codes!")
RETURN NIL
Code: Select all | Expand
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<title>Test TWebView</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-color: #f0f0f0;
}
.post-content-button {
list-style: none;
padding: 0;
display: flex;
align-items: center;
background-color: #ffffff;
border: 1px solid #ccc;
border-radius: 5px;
box-shadow: 2px 2px 5px rgba(0,0,0,0.1);
}
.post-contenido-button {
margin: 10px;
}
.imagen {
width: 24px;
height: 24px;
vertical-align: middle;
}
.tituloboton {
font-size: 16px;
color: #333;
}
a {
text-decoration: none;
color: #0078d7;
}
a:hover {
text-decoration: underline;
color: #005bb5;
}
</style>
</head>
<body>
<ul class="post-content-button">
<li class="post-contenido-button">
<img src="img/test.png" class="imagen" alt="Image">
</li>
<li class="post-contenido-button">
<font class="tituloboton">
<a href="#" onclick="callHarbourFunction('AppFacCli'); return false;">Añadir nueva factura</a>
</font>
</li>
</ul>
<script>
function callHarbourFunction(funcName) {
if (window.chrome && window.chrome.webview) {
window.chrome.webview.postMessage(funcName);
alert("Messaggio inviato a Harbour: " + funcName);
} else {
alert("WebView2 non è disponibile!");
}
}
</script>
</body>
</html>
Code: Select all | Expand
#include "FiveWin.ch"
FUNCTION Main()
LOCAL oWebView := TWebView():New( 0, 0, 800, 600 ) // Create the WebView control
LOCAL cHtml := MemoRead("mihtml.html") // Upload your HTML
// Set up binding to receive messages from the web
oWebView:bOnBind := {|cMessage| ExecuteFunction(cMessage) }
// Load the HTML
oWebView:SetHtml(cHtml)
oWebView:Run()
RETURN NIL
FUNCTION ExecuteFunction(cFuncName)
IF cFuncName == "AppFacCli"
AppFacCli() // Call your Harbour function
ENDIF
RETURN NIL
FUNCTION AppFacCli()
MsgInfo("here your harbour/fwh codes!")
RETURN NIL
Code: Select all | Expand
#include "FiveWin.ch"
FUNCTION Main()
LOCAL oWebView := TWebView():New()
oWebView:SetHtml( Html() )
oWebView:SetTitle( "Test AppFacCli" )
oWebView:SetSize( 800, 600 )
oWebView:Bind( "SendToFWH" )
oWebView:bOnBind := {|cJson, cCalls| ExecuteFunction(cJson, cCalls, oWebView) }
oWebView:Run()
oWebView:Destroy()
RETURN NIL
FUNCTION ExecuteFunction(cJson, cCalls, oWebView)
LOCAL hData
// Decodifica il JSON ricevuto dal JavaScript
hb_jsonDecode(cJson, @hData)
// Controlla il contenuto del JSON
IF hb_HHasKey(hData, "function") .AND. hData["function"] == "AppFacCli"
AppFacCli()
oWebView:Return(cCalls, 0, "{ 'result': 'AppFacCli eseguita con successo!' }")
ELSE
oWebView:Return(cCalls, 0, "{ 'result': 'Funzione non riconosciuta' }")
ENDIF
RETURN NIL
FUNCTION AppFacCli()
MsgInfo("my codes!")
RETURN NIL
FUNCTION Html()
LOCAL cHtml
TEXT INTO cHtml
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<title>Test TWebView</title>
<style>
body { font-family: Arial, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background-color: #f0f0f0; }
.post-content-button { list-style: none; padding: 0; display: flex; align-items: center; background-color: #ffffff; border: 1px solid #ccc; border-radius: 5px; box-shadow: 2px 2px 5px rgba(0,0,0,0.1); }
.post-contenido-button { margin: 10px; }
.imagen { width: 24px; height: 24px; vertical-align: middle; }
.tituloboton { font-size: 16px; color: #333; }
a { text-decoration: none; color: #0078d7; }
a:hover { text-decoration: underline; color: #005bb5; }
</style>
</head>
<body>
<ul class="post-content-button">
<li class="post-contenido-button"><img src="img/test.png" class="imagen" alt="Icona"></li>
<li class="post-contenido-button">
<font class="tituloboton">
<a href="#" onclick="callHarbourFunction('AppFacCli'); return false;">Añadir nueva factura</a>
</font>
</li>
</ul>
<script>
function callHarbourFunction(funcName) {
var data = { function: funcName };
var s = SendToFWH(data).then(s => {
alert(s.result);
}).catch(err => {
alert("Errore: " + err);
});
}
</script>
</body>
</html>
ENDTEXT
RETURN cHtm
Code: Select all | Expand
#include "FiveWin.ch"
FUNCTION Main()
LOCAL oWebView := TWebView():New()
oWebView:SetHtml( Html() )
oWebView:SetTitle( "Test AppFacCli" )
oWebView:SetSize( 800, 600 )
oWebView:Bind( "SendToFWH" )
oWebView:bOnBind := {|cJson, cCalls| ExecuteFunction(cJson, cCalls, oWebView) }
oWebView:Run()
oWebView:Destroy()
RETURN NIL
FUNCTION ExecuteFunction(cJson, cCalls, oWebView)
LOCAL hData
// Decodifica il JSON ricevuto dal JavaScript
hb_jsonDecode(cJson, @hData)
// Controlla il contenuto del JSON
IF hb_HHasKey(hData, "function") .AND. hData["function"] == "AppFacCli"
AppFacCli()
oWebView:Return(cCalls, 0, "{ 'result': 'AppFacCli eseguita con successo!' }")
ELSE
oWebView:Return(cCalls, 0, "{ 'result': 'Funzione non riconosciuta' }")
ENDIF
RETURN NIL
FUNCTION AppFacCli()
MsgInfo("my codes!")
RETURN NIL
FUNCTION Html()
LOCAL cHtml
TEXT INTO cHtml
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<title>Test TWebView</title>
<style>
body { font-family: Arial, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background-color: #f0f0f0; }
.post-content-button { list-style: none; padding: 0; display: flex; align-items: center; background-color: #ffffff; border: 1px solid #ccc; border-radius: 5px; box-shadow: 2px 2px 5px rgba(0,0,0,0.1); }
.post-contenido-button { margin: 10px; }
.imagen { width: 24px; height: 24px; vertical-align: middle; }
.tituloboton { font-size: 16px; color: #333; }
a { text-decoration: none; color: #0078d7; }
a:hover { text-decoration: underline; color: #005bb5; }
</style>
</head>
<body>
<ul class="post-content-button">
<li class="post-contenido-button"><img src="img/test.png" class="imagen" alt="Icona"></li>
<li class="post-contenido-button">
<font class="tituloboton">
<a href="#" onclick="callHarbourFunction('AppFacCli'); return false;">Añadir nueva factura</a>
</font>
</li>
</ul>
<script>
function callHarbourFunction(funcName) {
var data = { function: funcName };
var s = SendToFWH(data).then(s => {
alert(s.result);
}).catch(err => {
alert("Errore: " + err);
});
}
</script>
</body>
</html>
ENDTEXT
RETURN cHtm
Code: Select all | Expand
#include "FiveWin.ch"
FUNCTION Main()
LOCAL oWebView := TWebView():New()
oWebView:SetHtml( Html() )
oWebView:SetTitle( "Test AppFacCli" )
oWebView:SetSize( 800, 600 )
oWebView:Bind( "SendToFWH" )
oWebView:bOnBind := {|cJson, cCalls| ExecuteFunction(cJson, cCalls, oWebView) }
oWebView:Run()
oWebView:Destroy()
RETURN NIL
FUNCTION ExecuteFunction(cJson, cCalls, oWebView)
LOCAL hData, cFuncName
// Debug: mostra il JSON ricevuto
MsgInfo("JSON ricevuto: " + cJson)
// Decodifica il JSON
hb_jsonDecode(cJson, @hData)
// Se hData è un array, prendi il primo elemento
IF ValType(hData) == "A" .AND. Len(hData) > 0
hData := hData[1]
ENDIF
// Estrai il nome della funzione
cFuncName := hb_HGetDef(hData, "function", "Nessuna funzione")
MsgInfo("Funzione estratta: " + cFuncName)
// Esegui la funzione corrispondente
IF Upper(cFuncName) == "APPFACCLI"
AppFacCli()
oWebView:Return(cCalls, 0, "{ 'result': 'AppFacCli eseguita con successo!' }")
ELSE
oWebView:Return(cCalls, 0, "{ 'result': 'Funzione non riconosciuta: " + cFuncName + "' }")
ENDIF
RETURN NIL
FUNCTION AppFacCli()
MsgInfo("my codes!")
RETURN NIL
Function RightClickEvent() // this is opened when I click on right click of the mouse into webview
MsgInfo("right click!")
return nil
FUNCTION Html()
LOCAL cHtml
TEXT INTO cHtml
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<title>Test TWebView</title>
<style>
body { font-family: Arial, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background-color: #f0f0f0; }
.post-content-button { list-style: none; padding: 0; display: flex; align-items: center; background-color: #ffffff; border: 1px solid #ccc; border-radius: 5px; box-shadow: 2px 2px 5px rgba(0,0,0,0.1); }
.post-contenido-button { margin: 10px; }
.imagen { width: 24px; height: 24px; vertical-align: middle; }
.tituloboton { font-size: 16px; color: #333; }
a { text-decoration: none; color: #0078d7; }
a:hover { text-decoration: underline; color: #005bb5; }
</style>
</head>
<body>
<ul class="post-content-button">
<li class="post-contenido-button"><img src="img/test.png" class="imagen" alt="Icona"></li>
<li class="post-contenido-button">
<font class="tituloboton">
<a href="#" onclick="callHarbourFunction('AppFacCli'); return false;">Aggiungi nuova fattura</a>
</font>
</li>
</ul>
<script>
// Funzione per chiamare Harbour
function callHarbourFunction(funcName) {
var data = { function: funcName };
SendToFWH(data).then(s => {
alert(s.result);
}).catch(err => {
alert("Errore: " + err);
});
}
// Intercetta il clic destro e invia l'evento a Harbour
document.addEventListener("contextmenu", function(event) {
event.preventDefault(); // Evita il menu di default del browser
var data = { function: "RightClickEvent" };
SendToFWH(data);
});
</script>
</body>
</html>
ENDTEXT
RETURN cHtml
Code: Select all | Expand
#include "FiveWin.ch"
FUNCTION Main()
LOCAL oWebView := TWebView():New()
oWebView:SetHtml( Html() )
oWebView:SetTitle( "Test AppFacCli" )
oWebView:SetSize( 800, 600 )
oWebView:Bind( "SendToFWH" )
oWebView:bOnBind := {|cJson, cCalls| ExecuteFunction(cJson, cCalls, oWebView) }
oWebView:Run()
oWebView:Destroy()
RETURN NIL
FUNCTION ExecuteFunction(cJson, cCalls, oWebView)
LOCAL hData, cFuncName
// Debug: mostra il JSON ricevuto
MsgInfo("JSON ricevuto: " + cJson)
// Decodifica il JSON
hb_jsonDecode(cJson, @hData)
// Se hData è un array, prendi il primo elemento
IF ValType(hData) == "A" .AND. Len(hData) > 0
hData := hData[1]
ENDIF
// Estrai il nome della funzione
cFuncName := hb_HGetDef(hData, "function", "Nessuna funzione")
MsgInfo("Funzione estratta: " + cFuncName)
// Esegui la funzione corrispondente
IF Upper(cFuncName) == "APPFACCLI"
AppFacCli()
oWebView:Return(cCalls, 0, "{ 'result': 'AppFacCli eseguita con successo!' }")
ELSE
oWebView:Return(cCalls, 0, "{ 'result': 'Funzione non riconosciuta: " + cFuncName + "' }")
ENDIF
RETURN NIL
FUNCTION AppFacCli()
MsgInfo("my codes!")
RETURN NIL
Function RightClickEvent() // this is opened when I click on right click of the mouse into webview
MsgInfo("right click!")
return nil
FUNCTION Html()
LOCAL cHtml
TEXT INTO cHtml
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<title>Test TWebView</title>
<style>
body { font-family: Arial, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background-color: #f0f0f0; }
.post-content-button { list-style: none; padding: 0; display: flex; align-items: center; background-color: #ffffff; border: 1px solid #ccc; border-radius: 5px; box-shadow: 2px 2px 5px rgba(0,0,0,0.1); }
.post-contenido-button { margin: 10px; }
.imagen { width: 24px; height: 24px; vertical-align: middle; }
.tituloboton { font-size: 16px; color: #333; }
a { text-decoration: none; color: #0078d7; }
a:hover { text-decoration: underline; color: #005bb5; }
</style>
</head>
<body>
<ul class="post-content-button">
<li class="post-contenido-button"><img src="img/test.png" class="imagen" alt="Icona"></li>
<li class="post-contenido-button">
<font class="tituloboton">
<a href="#" onclick="callHarbourFunction('AppFacCli'); return false;">Aggiungi nuova fattura</a>
</font>
</li>
</ul>
<script>
// Funzione per chiamare Harbour
function callHarbourFunction(funcName) {
var data = { function: funcName };
SendToFWH(data).then(s => {
alert(s.result);
}).catch(err => {
alert("Errore: " + err);
});
}
// Intercetta il clic destro e invia l'evento a Harbour
document.addEventListener("contextmenu", function(event) {
event.preventDefault(); // Evita il menu di default del browser
var data = { function: "RightClickEvent" };
SendToFWH(data);
});
</script>
</body>
</html>
ENDTEXT
RETURN cHtml
PAUL SIMM wrote:Is there any way I can change the error message "Lost Connection to MySql server during query" to only log the error to a text file end return false to the calling fintion. At the moment the error is a MsgInfo and the process which is automatic with a Timer blocks the aplication.
This code do'snt do this
oCon:Execute(cQwery)
if oCon:nError != 0
MSGWAIT("Error executando query","Line 10961")
oCon:Close()
RETURN .F.
endif
I used to work with Eagle I could define what to do when an MySql error occured with this funcion.
FUNCTION MyMsgError(cArg1,cArg2 )
MSGWAIT(cArg1,cArg2+" Web2Reco")
YMENSCEN(cArg1+ " "+cArg2) //log error
RETURN NIL
******************************************************************************
Code: Select all | Expand
HB_FUNC(SQLPING)
{
_retnl((long) mysql_ping( (MYSQL *)_parnl(1) ) );
}
Code: Select all | Expand
METHOD Ping() INLINE sqlping( ::nSocket )
PAUL SIMM wrote:Is there any way I can change the error message "Lost Connection to MySql server during query" to only log the error to a text file end return false to the calling fintion. At the moment the error is a MsgInfo and the process which is automatic with a Timer blocks the aplication.
This code do'snt do this
oCon:Execute(cQwery)
if oCon:nError != 0
MSGWAIT("Error executando query","Line 10961")
oCon:Close()
RETURN .F.
endif
I used to work with Eagle I could define what to do when an MySql error occured with this funcion.
FUNCTION MyMsgError(cArg1,cArg2 )
MSGWAIT(cArg1,cArg2+" Web2Reco")
YMENSCEN(cArg1+ " "+cArg2) //log error
RETURN NIL
******************************************************************************
Code: Select all | Expand
HB_FUNC(SQLPING)
{
_retnl((long) mysql_ping( (MYSQL *)_parnl(1) ) );
}
Code: Select all | Expand
METHOD Ping() INLINE sqlping( ::nSocket )
Code: Select all | Expand
<div class="quick-item" onclick="callHarbourFunction('Clienti')">
<img src="{IMGCLIENTI}" alt="Clienti">
<span>Clienti</span>
</div>
Code: Select all | Expand
<script>
function callHarbourFunction(funcName) {
var data = { function: funcName };
var s = SendToFWH(data).then(s => {
alert(s.result);
}).catch(err => {
alert("Errore: " + err);
});
}
</script>
Code: Select all | Expand
<div class="quick-item" onclick="callHarbourFunction('Clienti')">
<img src="{IMGCLIENTI}" alt="Clienti">
<span>Clienti</span>
</div>
Code: Select all | Expand
<script>
function callHarbourFunction(funcName) {
var data = { function: funcName };
var s = SendToFWH(data).then(s => {
alert(s.result);
}).catch(err => {
alert("Errore: " + err);
});
}
</script>
Code: Select all | Expand
FUNCTION Extract(cString)
LOCAL aData
LOCAL cValue
aData := (cString)
cValue := aData[1]["function"]
RETURN cValue
Code: Select all | Expand
Function ExecuteFunction(hData, oWebView)
local cFuncName := Extract(hData)
DO CASE
CASE cFuncName == "Bacheca"
Bacheca(oWebView)
CASE cFuncName = "Clienti"
Clienti()
ENDCASE
RETURN NIL
Code: Select all | Expand
FUNCTION Extract(cString)
LOCAL aData
LOCAL cValue
aData := (cString)
cValue := aData[1]["function"]
RETURN cValue
Code: Select all | Expand
Function ExecuteFunction(hData, oWebView)
local cFuncName := Extract(hData)
DO CASE
CASE cFuncName == "Bacheca"
Bacheca(oWebView)
CASE cFuncName = "Clienti"
Clienti()
ENDCASE
RETURN NIL
Code: Select all | Expand
#include "windows.h"
#include "hbapi.h"
HB_FUNC( HB_DEBUG_STRING )
{
OutputDebugString( hb_parcx( 1 ) );
}
Code: Select all | Expand
hb_debug_string( "your string message" )
Code: Select all | Expand
#include "windows.h"
#include "hbapi.h"
HB_FUNC( HB_DEBUG_STRING )
{
OutputDebugString( hb_parcx( 1 ) );
}
Code: Select all | Expand
hb_debug_string( "your string message" )
Code: Select all | Expand
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<title>Menu</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
<link rel="stylesheet" href="/easyui/themes/color.css">
<link rel="stylesheet" href="/easyui/themes/metro/easyui.css">
<script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
<script src="https://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>
<script>
function ExecMenu(opcao){
alert("Executando ExecMenu: " + opcao); <<<< ----- ok
window.chrome.webview.postmessage(opcao); <<<< ---- :-( não funciona
SendToFWH( opcao ); <<<< ---- :-( não funciona
}
</script>
<style>
body {
font-family: "Segoe UI", sans-serif;
padding: 20px;
background: #f4f6f9;
}
.menu-card {
padding: 0;
padding-bottom: 12px;
background: #fff;
border: 1px solid #d0d7de;
border-radius: 6px;
box-shadow: 0 1px 3px rgba(0,0,0,0.05);
margin-bottom: 20px;
}
h3.menu-titulo {
margin: 0;
padding: 8px 12px;
background-color: 'f6f6f6;
color: '0078d4;
font-size: 16px;
font-weight: bold;
border-bottom: 1px solid 'ddd;
border-radius: 6px 6px 0 0;
}
ul {
margin: 2px 0;
padding: 0;
}
li, li a {
list-style: none;
margin: 0;
padding: 0;
border: none;
line-height: 1.2;
}
.menu-card li {
cursor: pointer;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.menu-card li:hover {
background: #B0E2FF;
}
li a {
color: #0078d4;
text-decoration: underline;
display: block;
padding: 2px 2px;
}
li a:hover {
text-decoration: none;
}
li span {
display: inline-flex;
align-items: center;
gap: 6px;
}
li img, li i {
vertical-align: middle;
display: inline-block;
margin-right: 6px;
}
</style>
</head>
<body>
<div class="menu-container" style="display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 16px;">
<div class="menu-card" style="background:#fff; border:1px solid #d0d7de; border-radius:6px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.05);">
<h3 style="margin:0; color: white; font-size:16px; border-bottom:1px solid #eee; border-radius: 6px 6px 0 0;border-bottom: 1px solid #ddd; font-weight: bold;padding: 8px 12px;padding-bottom:4px; background-color: #004080;">Arquivos</h3>
<ul style="list-style:none; padding:0; margin:0; white-space: nowrap;">
<li><span><i class="fas fa-dollar-sign" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVPla000():New( ::oWnd )'); return false;">Captura lista de preços</a></span></li>
<li><span><i class="fas fa-box" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVFrm087():New(::oWnd)'); return false;">Gerar arquivo de produtos (Global)</a></span></li>
<li><span><i class="fas fa-envelope" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('EnviaLista()'); return false;">Enviar lista de preco por email</a></span></li>
<li><span><i class="fas fa-cog" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TCfg():New(::oWnd)'); return false;">Configurações Gerais</a></span></li>
<li><span><i class="fas fa-user" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVFrm046():New(::oWnd, ::oWnd:oMenu)'); return false;">Vendedor/Usuário/Representante</a></span></li>
<li><span><i class="fas fa-user-lock" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVFrm124():New(::oWnd)'); return false;">Ligar/Desligar direitos para vários usuários</a></span></li>
</ul>
</div>
<div class="menu-card" style="background:#fff; border:1px solid #d0d7de; border-radius:6px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.05);">
<h3 style="margin:0; color: white; font-size:16px; border-bottom:1px solid #eee; border-radius: 6px 6px 0 0;border-bottom: 1px solid #ddd; font-weight: bold;padding: 8px 12px;padding-bottom:4px; background-color: #004080;">Processos especiais</h3>
<ul style="list-style:none; padding:0; margin:0;">
<li><span><i class="fas fa-database" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('Msg("Solicite informações para restaurar copias de segurança")'); return false;">Restaurar Cópias de Segurança</a></span></li>
<li><span><i class="fas fa-table" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TCheckTab():New(.T., ::oWnd)'); return false;">Conferência das tabelas</a></span></li>
<li><span><i class="fas fa-table" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgMeter({|oMeter| RecnoTab(oMeter) },"aguarde","processando")'); return false;">Recupera tabela-especial</a></span></li>
<li><span><i class="fas fa-exchange-alt" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TrocaTbl()'); return false;">Troca de tabela - manutenção</a></span></li>
<li><span><i class="fas fa-upload" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TMigra():New(.T.,,,.T.)'); return false;">Carrega tabela de dados - manutenção</a></span></li>
<li><span><i class="fas fa-file-archive" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TBackup():New(2, ::oWnd)'); return false;">Backup dos Arquivos XML-NFe</a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TBackup():New(3, ::oWnd)'); return false;">Enviar todos os XML-NFe por Cliente</a></span></li>
<li><span><i class="fas fa-terminal" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('ManutencaoQuery()'); return false;">Manutenção por query</a></span></li>
<li><span><i class="fas fa-wrench" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('ManutencaoPorFuncao()'); return false;">Manutenção por função</a></span></li>
<li><span><i class="fas fa-terminal" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('CriaManutencaoQuery()'); return false;">Cria Manutenção por query</a></span></li>
<li><span><i class="fas fa-tools" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('CriaManutencaoPorFuncao()'); return false;">Cria Manutenção por função</a></span></li>
<li><span><i class="fas fa-folder-open" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVFrm086():New()'); return false;">Organizar Arquivos</a></span></li>
<li><span><i class="fas fa-file-medical" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('ManTableFrm086()'); return false;">Manutenção arquivos - corrigir integridade</a></span></li>
<li><span><i class="fas fa-tools" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('Reparar()'); return false;">Manutenção de tabela</a></span></li>
<li><span><i class="fas fa-circle" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TCheckDic():Ler(::oWnd)'); return false;">Registros de eventos</a></span></li>
<li><span><i class="fas fa-history" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TCheckDic():LerPed(::oWnd)'); return false;">Histórico de pedidos de venda</a></span></li>
<li><span><i class="fas fa-history" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TCheckDic():LerPedComp(::oWnd)'); return false;">Histórico de pedidos de compra</a></span></li>
<li><span><i class="fas fa-history" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TCheckDic():LerPedCompDiversos(::oWnd)'); return false;">Histórico de pedidos de compra - diversos</a></span></li>
<li><span><i class="fas fa-receipt" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TCheckDic():VerDuplicata(1,::oWnd)'); return false;">Histórico de duplicatas - Contas a pagar</a></span></li>
<li><span><i class="fas fa-receipt" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TCheckDic():VerDuplicata(2,::oWnd)'); return false;">Histórico de duplicatas - Contas a receber</a></span></li>
<li><span><i class="fas fa-share-square" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('SuporteSis()'); return false;">Enviar informações do sistema</a></span></li>
<li><span><i class="fas fa-user" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TUser():New(::oWnd)'); return false;">Usuários conectados</a></span></li>
<li><span><i class="fas fa-database" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TSysInfo():New(::oWnd)'); return false;">Informações do MySQL</a></span></li>
<li><span><i class="fas fa-cloud-upload-alt" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgRun("Verificando versão no Servidor FTP", "Sisrev Informática Ltda.", {|oMsg| ChamaGoFTP()} )'); return false;">Atualizar versão do Sistema por FTP</a></span></li>
<li><span><i class="fas fa-cloud-upload-alt" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVMan233():New(::oWnd)'); return false;">Atualizar NFe_Util por FTP</a></span></li>
<li><span><i class="fas fa-cloud-upload-alt" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVMan234():New(::oWnd)'); return false;">Atualizar Fontes do Danfe por FTP</a></span></li>
<li><span><i class="fas fa-sync" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgRun("Verificando versão no Servidor Web", "Sisrev Informática Ltda.", {|oMsg| ChamaGoWeb(1)} )'); return false;">Atualizar versão via Servidor Web</a></span></li>
<li><span><i class="fas fa-sync-alt" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgRun("Verificando versão no Servidor Web", "Sisrev Informática Ltda.", {|oMsg| ChamaGoWeb(2)} )'); return false;">Substituir versão (mesmo número) via Servidor Web</a></span></li>
</ul></div>
<div class="menu-card" style="background:#fff; border:1px solid #d0d7de; border-radius:6px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.05);">
<h3 style="margin:0; color: white; font-size:16px; border-bottom:1px solid #eee; border-radius: 6px 6px 0 0;border-bottom: 1px solid #ddd; font-weight: bold;padding: 8px 12px;padding-bottom:4px; background-color: #004080;">Arquivos de contabilidade</h3>
<ul style="list-style:none; padding:0; margin:0;">
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TFolhaMNovo():New(.F.)'); return false;">Gerar arquivo Folhamatic layout 1.9 </a></span></li>
<li><span><i class="fas fa-file-invoice-dollar" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVMan210():New(::oWnd)'); return false;">Gerar arquivo de recebimentos</a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TFolha20():New(.T.)'); return false;">Gerar arquivo Folhamatic layout 2.0 (2009) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TContMatic():New(1)'); return false;">Gerar arquivo Contmatic (Entradas/Saidas) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TContMatic():New(2)'); return false;">Gerar arquivo Contmatic (Lançtos.Contabeis: Pagos/Recebidos) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgMeter( {|oMeter|TSintegra2009():TxtInventario_Contmatic(oMeter)},"Processando","Aguarde")'); return false;">Gerar arquivo Contmatic (Inventário) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TFolhaMCompra():New()'); return false;">Gerar arquivo Folhamatic layout 2.0 (Notas de Compras) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TFolha20():New(.T., .T.)'); return false;">Gerar arquivo Folhamatic layout 2.0.06 </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TFolhaMCompra():New(.T.)'); return false;">Gerar arquivo Folhamatic layout 2.0.06 (Notas de Compras) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVArq001():New()'); return false;">Gerar arquivo Prosoft (Lançtos.Contabeis: Pagos/Recebidos) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgMeter( {|oMeter|TSintegra2009():TxtInventario_Prosoft(oMeter)},"Processando","Aguarde")'); return false;">Gerar arquivo Prosoft (Inventário) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVArq002():New()'); return false;">Gerar arquivo Questor (Lançtos.Contabeis: Pagos/Recebidos) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVArq003():New()'); return false;">Gerar arquivo Folhamatic (Lançtos.Contabeis: Pagos/Recebidos) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVArq004():New()'); return false;">Gerar Arquivo para o Sistema Domínio (Lançamentos Contábeis: Pagos/Recebidos) </a></span></li>
<li><span><i class="fas fa-folder" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgMeter({|oMeter| TNfeMonitor():GeraNfe(oMeter,1)},"Processando","Aguarde")'); return false;">Arquivos NFe (gera XML das notas-saídas)</a></span></li>
<li><span><i class="fas fa-file-code" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgMeter({|oMeter| TNfeMonitor():GeraNfe(oMeter,2)},"Processando","Aguarde")'); return false;">Arquivos NFe (gera XML das notas-por cliente)</a></span></li>
<li><span><i class="fas fa-file-import" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgMeter({|oMeter| TNfeMonitor():GeraNfeEnt(oMeter,1)},"Processando","Aguarde")'); return false;">Arquivos NFe (gera XML das notas-entradas)</a></span></li>
<li><span><i class="fas fa-file-import" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgMeter({|oMeter| TNfeMonitor():GeraNfeEnt(oMeter,2)},"Processando","Aguarde")'); return false;">Arquivos NFe (gera XML das notas-entradas-por fornecedor)</a></span></li>
<li><span><i class="fas fa-file-invoice" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVRLis256():New(::oWnd)'); return false;">Relatório de Conferência de XML de Notas de Entrada</a></span></li>
<li><span><i class="fas fa-file-signature" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgMeter({|oMeter| TNFeMonitor():GeraCartas(oMeter)},"Processando","Aguarde")'); return false;">Arquivos de Carta de Correção (gera XML das cartas)</a></span></li>
<li><span><i class="fas fa-table" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TEContab():New(2)'); return false;">Tabela de Produtos para Sistema E-Contab </a></span></li>
<li><span><i class="fas fa-file-invoice-dollar" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVRlis260():New(::oWnd)'); return false;">Escritório '1 - 100 clientes (contabilidade)</a></span></li>
<li><span><i class="fas fa-file-invoice-dollar" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVRlis261():New(::oWnd)'); return false;">Escritório '2 - 100 fornecedores (contabilidade)</a></span></li>
<li><span><i class="fas fa-box" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVRlis262():New(::oWnd)'); return false;">Escritório '3 - 100 produtos (saídas)(contabilidade)</a></span></li>
<li><span><i class="fas fa-box" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVRlis263():New(::oWnd)'); return false;">Escritório '4 - 100 produtos (entrada)(contabilidade)</a></span></li>
</ul></div>
<div class="menu-card" style="background:#fff; border:1px solid #d0d7de; border-radius:6px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.05);">
<h3 style="margin:0; color: white; font-size:16px; border-bottom:1px solid #eee; border-radius: 6px 6px 0 0;border-bottom: 1px solid #ddd; font-weight: bold;padding: 8px 12px;padding-bottom:4px; background-color: #004080;">Arquivos Fiscais</h3>
<ul style="list-style:none; padding:0; margin:0;">
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TSintegra2009():New()'); return false;">Gerar Sintegra 2009 (a partir 01-05-2009)</a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TSintegra2009():Registro88()'); return false;">Gerar Sintegra 2009 (registro 88)</a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgMeter( {|oMeter|TSintegra2009():Processa74(oMeter,,,,,,,.T.)},"Processando","Aguarde")'); return false;">Gerar Sintegra 2009 (somente - registro 74)</a></span></li>
<li><span><i class="fas fa-file-invoice" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVFrm040():New()'); return false;">SPED Fiscal - Cadastro do Contador</a></span></li>
<li><span><i class="fas fa-file-invoice" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVFrm045():New(::oWnd)'); return false;">SPED Fiscal - Gerar arquivo fiscal</a></span></li>
<li><span><i class="fas fa-folder" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVFrm044():New(::oWnd)'); return false;">SPED PIS/COFINS - Gerar arquivo</a></span></li>
</ul></div>
</div>
</body>
</html>
Code: Select all | Expand
/*========================================================================
SISREV INFORMATICA LTDA.
Prestando serviços com qualidade desde 1993
CNPJ: 02.623.572/0001-52
CNPJ: 02.623.572/0002-33
www.sisrev.com.br
========================================================================
Sistema..: Sisrev-Win 5.0
Autor(es): Ariovaldo da Costa Foliene
Aplicação: TVWeb
Notas....: Abre as páginas do Sisrev-Web - Microsoft Edge WebView2
Data.....: 10-03-2025
========================================================================
TVisual--+
|
+--TVisualForm--+
|
+--TVWeb.prg
========================================================================
*/
#include "fivewin.ch"
#include "Objects.ch"
#include "\sis\fsql901\include\rede.ch"
STATIC oWV
* ========================================================================
CLASS TVWeb FROM TVisualForm
* ========================================================================
DATA cPage, oWebView
METHOD New() CONSTRUCTOR
METHOD AddControl()
METHOD BuildMenu()
END CLASS
* ========================================================================
METHOD New( xcPage, xcNome ) CLASS TVWeb
* ========================================================================
#ifdef __XHARBOUR__
TVWebMsg() ; return Self
#endif
DEFAULT xcPage := ""
DEFAULT xcNome := Empresas(1)
::Super:New("rel")
::cNome := xcNome
::cPage := "http://localhost:3000/" + xcPage
::lToolBar := FALSE
::lTask := FALSE
::lRastrear := FALSE
::AddControl()
::oWebView:oWnd:bValid := {|| ::oWebView:Terminate(),;
WndMain():Show() ,;
WndMain():SetFocus() ,;
TRUE }
return Self
* ========================================================================
METHOD AddControl() CLASS TVWeb
* ========================================================================
#ifndef __XHARBOUR__
::oWebView:= TWebView2():New()
::oWebView:SetTitle( WebTitle("Sisrev-Web" + ::cNome ) )
::oWebView:oWnd:bResized := {|| ::oWebView:oWnd:Maximize() }
::oWebView:oWnd:SetMenu( ::BuildMenu() )
::oWebView:oWnd:SetColor( CLR_BLACK ,nRGB( 231, 242, 255 ) )
::oWebView:oWnd:l2007 := .T.
::oWebView:SetSize( WndWidth( ::oWebView:oWnd:hWnd ) - 15,;
WndHeight( ::oWebView:oWnd:hWnd ) - 58 )
::oWebView:SetUserAgent( WebAgent())
::oWebView:Navigate( ::cPage )
::oWebView:bOnBind := { |cJson| ExecWeb(cJson) }
::oWebView:OpenDevToolsWindow(.F.)
::oWebView:ShowDownloads(.F.)
::oWebView:oWnd:bInit := {|| ::oWebView:oWnd:Maximize() }
::oWebView:Run()
::oWebView:Destroy()
WndMain():Hide()
#endif
return nil
* ========================================================================
Function ExecWeb( cData )
* ========================================================================
local cEndPoint := ""
if ValType( cData ) == "A"
#ifdef __HARBOUR__
cData := HB_VALTOEXP(cData) /* converts any data type to STR Value */
cData := strtran( cData, "{", "")
cData := strtran( cData, "}", "")
cData := strtran( cData, "'", "")
#endif
Endif
cEndPoint:= substr( cData, aT(":", cData ) + 1 , 100 )
cData := strtran("#classe=" + cData +"#EndPoint="+cEndPoint, "#", "&" )
OnGet( cData )
return nil
* =========================================================================
Function StartTVWeb(cFileName)
* =========================================================================
if IfExist(oWV)
oWV:oWebView:Navigate("http://localhost:3000/" + cFileName)
Else
oWV := TVWeb():New(cFileName)
Endif
return nil
* =========================================================================
METHOD BuildMenu() CLASS TVWeb
* =========================================================================
local oMenu
MENU oMenu
MENUITEM "Fechar" ACTION ::oWebView:oWnd:End()
ENDMENU
return oMenu
* =========================================================================
Function TVWebMsg()
return Msg("** Esta funcionidade somente para HarBour **")
* =========================================================================
* =========================================================================
Function WebAgent()
* =========================================================================
return "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"
Code: Select all | Expand
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<title>Menu</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
<link rel="stylesheet" href="/easyui/themes/color.css">
<link rel="stylesheet" href="/easyui/themes/metro/easyui.css">
<script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
<script src="https://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>
<script>
function ExecMenu(opcao){
alert("Executando ExecMenu: " + opcao); <<<< ----- ok
window.chrome.webview.postmessage(opcao); <<<< ---- :-( não funciona
SendToFWH( opcao ); <<<< ---- :-( não funciona
}
</script>
<style>
body {
font-family: "Segoe UI", sans-serif;
padding: 20px;
background: #f4f6f9;
}
.menu-card {
padding: 0;
padding-bottom: 12px;
background: #fff;
border: 1px solid #d0d7de;
border-radius: 6px;
box-shadow: 0 1px 3px rgba(0,0,0,0.05);
margin-bottom: 20px;
}
h3.menu-titulo {
margin: 0;
padding: 8px 12px;
background-color: 'f6f6f6;
color: '0078d4;
font-size: 16px;
font-weight: bold;
border-bottom: 1px solid 'ddd;
border-radius: 6px 6px 0 0;
}
ul {
margin: 2px 0;
padding: 0;
}
li, li a {
list-style: none;
margin: 0;
padding: 0;
border: none;
line-height: 1.2;
}
.menu-card li {
cursor: pointer;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.menu-card li:hover {
background: #B0E2FF;
}
li a {
color: #0078d4;
text-decoration: underline;
display: block;
padding: 2px 2px;
}
li a:hover {
text-decoration: none;
}
li span {
display: inline-flex;
align-items: center;
gap: 6px;
}
li img, li i {
vertical-align: middle;
display: inline-block;
margin-right: 6px;
}
</style>
</head>
<body>
<div class="menu-container" style="display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 16px;">
<div class="menu-card" style="background:#fff; border:1px solid #d0d7de; border-radius:6px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.05);">
<h3 style="margin:0; color: white; font-size:16px; border-bottom:1px solid #eee; border-radius: 6px 6px 0 0;border-bottom: 1px solid #ddd; font-weight: bold;padding: 8px 12px;padding-bottom:4px; background-color: #004080;">Arquivos</h3>
<ul style="list-style:none; padding:0; margin:0; white-space: nowrap;">
<li><span><i class="fas fa-dollar-sign" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVPla000():New( ::oWnd )'); return false;">Captura lista de preços</a></span></li>
<li><span><i class="fas fa-box" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVFrm087():New(::oWnd)'); return false;">Gerar arquivo de produtos (Global)</a></span></li>
<li><span><i class="fas fa-envelope" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('EnviaLista()'); return false;">Enviar lista de preco por email</a></span></li>
<li><span><i class="fas fa-cog" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TCfg():New(::oWnd)'); return false;">Configurações Gerais</a></span></li>
<li><span><i class="fas fa-user" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVFrm046():New(::oWnd, ::oWnd:oMenu)'); return false;">Vendedor/Usuário/Representante</a></span></li>
<li><span><i class="fas fa-user-lock" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVFrm124():New(::oWnd)'); return false;">Ligar/Desligar direitos para vários usuários</a></span></li>
</ul>
</div>
<div class="menu-card" style="background:#fff; border:1px solid #d0d7de; border-radius:6px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.05);">
<h3 style="margin:0; color: white; font-size:16px; border-bottom:1px solid #eee; border-radius: 6px 6px 0 0;border-bottom: 1px solid #ddd; font-weight: bold;padding: 8px 12px;padding-bottom:4px; background-color: #004080;">Processos especiais</h3>
<ul style="list-style:none; padding:0; margin:0;">
<li><span><i class="fas fa-database" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('Msg("Solicite informações para restaurar copias de segurança")'); return false;">Restaurar Cópias de Segurança</a></span></li>
<li><span><i class="fas fa-table" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TCheckTab():New(.T., ::oWnd)'); return false;">Conferência das tabelas</a></span></li>
<li><span><i class="fas fa-table" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgMeter({|oMeter| RecnoTab(oMeter) },"aguarde","processando")'); return false;">Recupera tabela-especial</a></span></li>
<li><span><i class="fas fa-exchange-alt" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TrocaTbl()'); return false;">Troca de tabela - manutenção</a></span></li>
<li><span><i class="fas fa-upload" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TMigra():New(.T.,,,.T.)'); return false;">Carrega tabela de dados - manutenção</a></span></li>
<li><span><i class="fas fa-file-archive" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TBackup():New(2, ::oWnd)'); return false;">Backup dos Arquivos XML-NFe</a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TBackup():New(3, ::oWnd)'); return false;">Enviar todos os XML-NFe por Cliente</a></span></li>
<li><span><i class="fas fa-terminal" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('ManutencaoQuery()'); return false;">Manutenção por query</a></span></li>
<li><span><i class="fas fa-wrench" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('ManutencaoPorFuncao()'); return false;">Manutenção por função</a></span></li>
<li><span><i class="fas fa-terminal" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('CriaManutencaoQuery()'); return false;">Cria Manutenção por query</a></span></li>
<li><span><i class="fas fa-tools" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('CriaManutencaoPorFuncao()'); return false;">Cria Manutenção por função</a></span></li>
<li><span><i class="fas fa-folder-open" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVFrm086():New()'); return false;">Organizar Arquivos</a></span></li>
<li><span><i class="fas fa-file-medical" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('ManTableFrm086()'); return false;">Manutenção arquivos - corrigir integridade</a></span></li>
<li><span><i class="fas fa-tools" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('Reparar()'); return false;">Manutenção de tabela</a></span></li>
<li><span><i class="fas fa-circle" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TCheckDic():Ler(::oWnd)'); return false;">Registros de eventos</a></span></li>
<li><span><i class="fas fa-history" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TCheckDic():LerPed(::oWnd)'); return false;">Histórico de pedidos de venda</a></span></li>
<li><span><i class="fas fa-history" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TCheckDic():LerPedComp(::oWnd)'); return false;">Histórico de pedidos de compra</a></span></li>
<li><span><i class="fas fa-history" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TCheckDic():LerPedCompDiversos(::oWnd)'); return false;">Histórico de pedidos de compra - diversos</a></span></li>
<li><span><i class="fas fa-receipt" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TCheckDic():VerDuplicata(1,::oWnd)'); return false;">Histórico de duplicatas - Contas a pagar</a></span></li>
<li><span><i class="fas fa-receipt" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TCheckDic():VerDuplicata(2,::oWnd)'); return false;">Histórico de duplicatas - Contas a receber</a></span></li>
<li><span><i class="fas fa-share-square" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('SuporteSis()'); return false;">Enviar informações do sistema</a></span></li>
<li><span><i class="fas fa-user" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TUser():New(::oWnd)'); return false;">Usuários conectados</a></span></li>
<li><span><i class="fas fa-database" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TSysInfo():New(::oWnd)'); return false;">Informações do MySQL</a></span></li>
<li><span><i class="fas fa-cloud-upload-alt" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgRun("Verificando versão no Servidor FTP", "Sisrev Informática Ltda.", {|oMsg| ChamaGoFTP()} )'); return false;">Atualizar versão do Sistema por FTP</a></span></li>
<li><span><i class="fas fa-cloud-upload-alt" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVMan233():New(::oWnd)'); return false;">Atualizar NFe_Util por FTP</a></span></li>
<li><span><i class="fas fa-cloud-upload-alt" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVMan234():New(::oWnd)'); return false;">Atualizar Fontes do Danfe por FTP</a></span></li>
<li><span><i class="fas fa-sync" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgRun("Verificando versão no Servidor Web", "Sisrev Informática Ltda.", {|oMsg| ChamaGoWeb(1)} )'); return false;">Atualizar versão via Servidor Web</a></span></li>
<li><span><i class="fas fa-sync-alt" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgRun("Verificando versão no Servidor Web", "Sisrev Informática Ltda.", {|oMsg| ChamaGoWeb(2)} )'); return false;">Substituir versão (mesmo número) via Servidor Web</a></span></li>
</ul></div>
<div class="menu-card" style="background:#fff; border:1px solid #d0d7de; border-radius:6px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.05);">
<h3 style="margin:0; color: white; font-size:16px; border-bottom:1px solid #eee; border-radius: 6px 6px 0 0;border-bottom: 1px solid #ddd; font-weight: bold;padding: 8px 12px;padding-bottom:4px; background-color: #004080;">Arquivos de contabilidade</h3>
<ul style="list-style:none; padding:0; margin:0;">
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TFolhaMNovo():New(.F.)'); return false;">Gerar arquivo Folhamatic layout 1.9 </a></span></li>
<li><span><i class="fas fa-file-invoice-dollar" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVMan210():New(::oWnd)'); return false;">Gerar arquivo de recebimentos</a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TFolha20():New(.T.)'); return false;">Gerar arquivo Folhamatic layout 2.0 (2009) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TContMatic():New(1)'); return false;">Gerar arquivo Contmatic (Entradas/Saidas) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TContMatic():New(2)'); return false;">Gerar arquivo Contmatic (Lançtos.Contabeis: Pagos/Recebidos) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgMeter( {|oMeter|TSintegra2009():TxtInventario_Contmatic(oMeter)},"Processando","Aguarde")'); return false;">Gerar arquivo Contmatic (Inventário) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TFolhaMCompra():New()'); return false;">Gerar arquivo Folhamatic layout 2.0 (Notas de Compras) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TFolha20():New(.T., .T.)'); return false;">Gerar arquivo Folhamatic layout 2.0.06 </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TFolhaMCompra():New(.T.)'); return false;">Gerar arquivo Folhamatic layout 2.0.06 (Notas de Compras) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVArq001():New()'); return false;">Gerar arquivo Prosoft (Lançtos.Contabeis: Pagos/Recebidos) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgMeter( {|oMeter|TSintegra2009():TxtInventario_Prosoft(oMeter)},"Processando","Aguarde")'); return false;">Gerar arquivo Prosoft (Inventário) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVArq002():New()'); return false;">Gerar arquivo Questor (Lançtos.Contabeis: Pagos/Recebidos) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVArq003():New()'); return false;">Gerar arquivo Folhamatic (Lançtos.Contabeis: Pagos/Recebidos) </a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVArq004():New()'); return false;">Gerar Arquivo para o Sistema Domínio (Lançamentos Contábeis: Pagos/Recebidos) </a></span></li>
<li><span><i class="fas fa-folder" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgMeter({|oMeter| TNfeMonitor():GeraNfe(oMeter,1)},"Processando","Aguarde")'); return false;">Arquivos NFe (gera XML das notas-saídas)</a></span></li>
<li><span><i class="fas fa-file-code" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgMeter({|oMeter| TNfeMonitor():GeraNfe(oMeter,2)},"Processando","Aguarde")'); return false;">Arquivos NFe (gera XML das notas-por cliente)</a></span></li>
<li><span><i class="fas fa-file-import" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgMeter({|oMeter| TNfeMonitor():GeraNfeEnt(oMeter,1)},"Processando","Aguarde")'); return false;">Arquivos NFe (gera XML das notas-entradas)</a></span></li>
<li><span><i class="fas fa-file-import" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgMeter({|oMeter| TNfeMonitor():GeraNfeEnt(oMeter,2)},"Processando","Aguarde")'); return false;">Arquivos NFe (gera XML das notas-entradas-por fornecedor)</a></span></li>
<li><span><i class="fas fa-file-invoice" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVRLis256():New(::oWnd)'); return false;">Relatório de Conferência de XML de Notas de Entrada</a></span></li>
<li><span><i class="fas fa-file-signature" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgMeter({|oMeter| TNFeMonitor():GeraCartas(oMeter)},"Processando","Aguarde")'); return false;">Arquivos de Carta de Correção (gera XML das cartas)</a></span></li>
<li><span><i class="fas fa-table" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TEContab():New(2)'); return false;">Tabela de Produtos para Sistema E-Contab </a></span></li>
<li><span><i class="fas fa-file-invoice-dollar" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVRlis260():New(::oWnd)'); return false;">Escritório '1 - 100 clientes (contabilidade)</a></span></li>
<li><span><i class="fas fa-file-invoice-dollar" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVRlis261():New(::oWnd)'); return false;">Escritório '2 - 100 fornecedores (contabilidade)</a></span></li>
<li><span><i class="fas fa-box" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVRlis262():New(::oWnd)'); return false;">Escritório '3 - 100 produtos (saídas)(contabilidade)</a></span></li>
<li><span><i class="fas fa-box" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVRlis263():New(::oWnd)'); return false;">Escritório '4 - 100 produtos (entrada)(contabilidade)</a></span></li>
</ul></div>
<div class="menu-card" style="background:#fff; border:1px solid #d0d7de; border-radius:6px; padding:12px; box-shadow:0 1px 3px rgba(0,0,0,0.05);">
<h3 style="margin:0; color: white; font-size:16px; border-bottom:1px solid #eee; border-radius: 6px 6px 0 0;border-bottom: 1px solid #ddd; font-weight: bold;padding: 8px 12px;padding-bottom:4px; background-color: #004080;">Arquivos Fiscais</h3>
<ul style="list-style:none; padding:0; margin:0;">
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TSintegra2009():New()'); return false;">Gerar Sintegra 2009 (a partir 01-05-2009)</a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TSintegra2009():Registro88()'); return false;">Gerar Sintegra 2009 (registro 88)</a></span></li>
<li><span><i class="fas fa-file-export" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('MsgMeter( {|oMeter|TSintegra2009():Processa74(oMeter,,,,,,,.T.)},"Processando","Aguarde")'); return false;">Gerar Sintegra 2009 (somente - registro 74)</a></span></li>
<li><span><i class="fas fa-file-invoice" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVFrm040():New()'); return false;">SPED Fiscal - Cadastro do Contador</a></span></li>
<li><span><i class="fas fa-file-invoice" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVFrm045():New(::oWnd)'); return false;">SPED Fiscal - Gerar arquivo fiscal</a></span></li>
<li><span><i class="fas fa-folder" style="margin-right:6px;"></i><a href="#" onclick="javascript:ExecMenu('TVFrm044():New(::oWnd)'); return false;">SPED PIS/COFINS - Gerar arquivo</a></span></li>
</ul></div>
</div>
</body>
</html>
Code: Select all | Expand
/*========================================================================
SISREV INFORMATICA LTDA.
Prestando serviços com qualidade desde 1993
CNPJ: 02.623.572/0001-52
CNPJ: 02.623.572/0002-33
www.sisrev.com.br
========================================================================
Sistema..: Sisrev-Win 5.0
Autor(es): Ariovaldo da Costa Foliene
Aplicação: TVWeb
Notas....: Abre as páginas do Sisrev-Web - Microsoft Edge WebView2
Data.....: 10-03-2025
========================================================================
TVisual--+
|
+--TVisualForm--+
|
+--TVWeb.prg
========================================================================
*/
#include "fivewin.ch"
#include "Objects.ch"
#include "\sis\fsql901\include\rede.ch"
STATIC oWV
* ========================================================================
CLASS TVWeb FROM TVisualForm
* ========================================================================
DATA cPage, oWebView
METHOD New() CONSTRUCTOR
METHOD AddControl()
METHOD BuildMenu()
END CLASS
* ========================================================================
METHOD New( xcPage, xcNome ) CLASS TVWeb
* ========================================================================
#ifdef __XHARBOUR__
TVWebMsg() ; return Self
#endif
DEFAULT xcPage := ""
DEFAULT xcNome := Empresas(1)
::Super:New("rel")
::cNome := xcNome
::cPage := "http://localhost:3000/" + xcPage
::lToolBar := FALSE
::lTask := FALSE
::lRastrear := FALSE
::AddControl()
::oWebView:oWnd:bValid := {|| ::oWebView:Terminate(),;
WndMain():Show() ,;
WndMain():SetFocus() ,;
TRUE }
return Self
* ========================================================================
METHOD AddControl() CLASS TVWeb
* ========================================================================
#ifndef __XHARBOUR__
::oWebView:= TWebView2():New()
::oWebView:SetTitle( WebTitle("Sisrev-Web" + ::cNome ) )
::oWebView:oWnd:bResized := {|| ::oWebView:oWnd:Maximize() }
::oWebView:oWnd:SetMenu( ::BuildMenu() )
::oWebView:oWnd:SetColor( CLR_BLACK ,nRGB( 231, 242, 255 ) )
::oWebView:oWnd:l2007 := .T.
::oWebView:SetSize( WndWidth( ::oWebView:oWnd:hWnd ) - 15,;
WndHeight( ::oWebView:oWnd:hWnd ) - 58 )
::oWebView:SetUserAgent( WebAgent())
::oWebView:Navigate( ::cPage )
::oWebView:bOnBind := { |cJson| ExecWeb(cJson) }
::oWebView:OpenDevToolsWindow(.F.)
::oWebView:ShowDownloads(.F.)
::oWebView:oWnd:bInit := {|| ::oWebView:oWnd:Maximize() }
::oWebView:Run()
::oWebView:Destroy()
WndMain():Hide()
#endif
return nil
* ========================================================================
Function ExecWeb( cData )
* ========================================================================
local cEndPoint := ""
if ValType( cData ) == "A"
#ifdef __HARBOUR__
cData := HB_VALTOEXP(cData) /* converts any data type to STR Value */
cData := strtran( cData, "{", "")
cData := strtran( cData, "}", "")
cData := strtran( cData, "'", "")
#endif
Endif
cEndPoint:= substr( cData, aT(":", cData ) + 1 , 100 )
cData := strtran("#classe=" + cData +"#EndPoint="+cEndPoint, "#", "&" )
OnGet( cData )
return nil
* =========================================================================
Function StartTVWeb(cFileName)
* =========================================================================
if IfExist(oWV)
oWV:oWebView:Navigate("http://localhost:3000/" + cFileName)
Else
oWV := TVWeb():New(cFileName)
Endif
return nil
* =========================================================================
METHOD BuildMenu() CLASS TVWeb
* =========================================================================
local oMenu
MENU oMenu
MENUITEM "Fechar" ACTION ::oWebView:oWnd:End()
ENDMENU
return oMenu
* =========================================================================
Function TVWebMsg()
return Msg("** Esta funcionidade somente para HarBour **")
* =========================================================================
* =========================================================================
Function WebAgent()
* =========================================================================
return "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"
Code: Select all | Expand
function Main()
local oWnd, oWebView
local cHtml := Html()
DEFINE WINDOW oWnd TITLE "Dashboard"
oWebView = TWebView2():New( oWnd )
oWebView:SetHtml( memoRead(cHtml ) )
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON RESIZE oWebView:SetSize( nWidth, nHeight )
return nil
Code: Select all | Expand
function Main()
local oWnd, oWebView
local cHtml := Html()
DEFINE WINDOW oWnd TITLE "Dashboard"
oWebView = TWebView2():New( oWnd )
oWebView:SetHtml( memoRead(cHtml ) )
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON RESIZE oWebView:SetSize( nWidth, nHeight )
return nil
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oWnd, oWebView
DEFINE WINDOW oWnd TITLE "Dashboard"
oWebView = TWebView2():New( oWnd )
oWebView:SetHtml( dash() )
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON RESIZE oWebView:SetSize( nWidth, nHeight )
return nil
function dash()
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>Professional Dashboard with Charts</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: Arial, sans-serif;
}
body {
background: #f0f2f5;
color: #333;
line-height: 1.6;
}
.container {
display: flex;
min-height: 100vh;
}
.sidebar {
width: 250px;
background: #2c3e50;
color: white;
position: fixed;
height: 100%;
padding: 20px;
}
.sidebar h2 {
font-size: 24px;
margin-bottom: 30px;
text-align: center;
}
.sidebar ul {
list-style: none;
}
.sidebar ul li {
margin: 20px 0;
}
.sidebar ul li a {
color: white;
text-decoration: none;
display: flex;
align-items: center;
padding: 10px;
border-radius: 5px;
transition: background 0.3s;
}
.sidebar ul li a:hover {
background: #34495e;
}
.sidebar ul li a i {
margin-right: 10px;
font-size: 18px;
}
.main-content {
flex: 1;
margin-left: 250px;
padding: 20px;
}
.dashboard-container {
max-width: 1400px;
margin: 0 auto;
}
.header {
background: #2c3e50;
color: white;
padding: 20px;
border-radius: 10px;
margin-bottom: 20px;
}
.header h1 {
font-size: 24px;
}
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
}
.card {
background: white;
border-radius: 10px;
padding: 20px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
transition: transform 0.3s;
}
.card:hover {
transform: translateY(-5px);
}
.card h3 {
margin-bottom: 15px;
color: #2c3e50;
}
.stats-card {
display: flex;
align-items: center;
gap: 15px;
}
.stats-icon {
width: 50px;
height: 50px;
background: #3498db;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 24px;
}
.chart-container {
height: 200px;
position: relative;
}
.progress-bar {
width: 100%;
height: 20px;
background: #eee;
border-radius: 10px;
overflow: hidden;
margin-top: 10px;
}
.progress {
height: 100%;
background: #2ecc71;
width: 0;
}
.progress-75 { width: 75%; }
.progress-50 { width: 50%; }
.progress-25 { width: 25%; }
@media (max-width: 768px) {
.sidebar {
width: 200px;
}
.main-content {
margin-left: 200px;
}
.grid-container {
grid-template-columns: 1fr;
}
}
@media (max-width: 480px) {
.sidebar {
width: 70px;
}
.sidebar h2,
.sidebar ul li a span {
display: none;
}
.main-content {
margin-left: 70px;
}
}
</style>
</head>
<body>
<div class="container">
<div class="sidebar">
<h2>Menu</h2>
<ul>
<li><a href="#"><i>🏠</i><span>Dashboard</span></a></li>
<li><a href="#"><i>📊</i><span>Analytics</span></a></li>
<li><a href="#"><i>👥</i><span>Users</span></a></li>
<li><a href="#"><i>⚙️</i><span>Settings</span></a></li>
<li><a href="#"><i>🚪</i><span>Logout</span></a></li>
</ul>
</div>
<div class="main-content">
<div class="dashboard-container">
<div class="header">
<h1>Dashboard Overview</h1>
</div>
<div class="grid-container">
<div class="card stats-card">
<div class="stats-icon">📊</div>
<div>
<h3>Revenue</h3>
<p>$24,500</p>
</div>
</div>
<div class="card stats-card">
<div class="stats-icon">👥</div>
<div>
<h3>Users</h3>
<p>1,234</p>
</div>
</div>
<div class="card stats-card">
<div class="stats-icon">⭐</div>
<div>
<h3>Rating</h3>
<p>4.8/5</p>
</div>
</div>
<div class="card">
<h3>Sales Trend (Monthly)</h3>
<div class="chart-container">
<canvas id="salesChart"></canvas>
</div>
</div>
<div class="card">
<h3>Project Progress</h3>
<p>Development</p>
<div class="progress-bar"><div class="progress progress-75"></div></div>
<p>Design</p>
<div class="progress-bar"><div class="progress progress-50"></div></div>
<p>Testing</p>
<div class="progress-bar"><div class="progress progress-25"></div></div>
</div>
<div class="card">
<h3>User Distribution</h3>
<div class="chart-container">
<canvas id="userChart"></canvas>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
// Sales Trend Line Chart
const salesCtx = document.getElementById('salesChart').getContext('2d');
new Chart(salesCtx, {
type: 'line',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
datasets: [{
label: 'Sales ($)',
data: [12000, 19000, 15000, 25000, 22000, 30000],
borderColor: '#3498db',
backgroundColor: 'rgba(52, 152, 219, 0.2)',
fill: true,
tension: 0.4
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: true
}
}
}
});
// User Distribution Bar Chart
const userCtx = document.getElementById('userChart').getContext('2d');
new Chart(userCtx, {
type: 'bar',
data: {
labels: ['New', 'Returning', 'Inactive'],
datasets: [{
label: 'Users',
data: [500, 600, 134],
backgroundColor: [
'#2ecc71',
'#3498db',
'#e74c3c'
]
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
</body>
</html>
ENDTEXT
RETURN cHtml
]]>Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oWnd, oWebView
DEFINE WINDOW oWnd TITLE "Dashboard"
oWebView = TWebView2():New( oWnd )
oWebView:SetHtml( dash() )
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON RESIZE oWebView:SetSize( nWidth, nHeight )
return nil
function dash()
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>Professional Dashboard with Charts</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: Arial, sans-serif;
}
body {
background: #f0f2f5;
color: #333;
line-height: 1.6;
}
.container {
display: flex;
min-height: 100vh;
}
.sidebar {
width: 250px;
background: #2c3e50;
color: white;
position: fixed;
height: 100%;
padding: 20px;
}
.sidebar h2 {
font-size: 24px;
margin-bottom: 30px;
text-align: center;
}
.sidebar ul {
list-style: none;
}
.sidebar ul li {
margin: 20px 0;
}
.sidebar ul li a {
color: white;
text-decoration: none;
display: flex;
align-items: center;
padding: 10px;
border-radius: 5px;
transition: background 0.3s;
}
.sidebar ul li a:hover {
background: #34495e;
}
.sidebar ul li a i {
margin-right: 10px;
font-size: 18px;
}
.main-content {
flex: 1;
margin-left: 250px;
padding: 20px;
}
.dashboard-container {
max-width: 1400px;
margin: 0 auto;
}
.header {
background: #2c3e50;
color: white;
padding: 20px;
border-radius: 10px;
margin-bottom: 20px;
}
.header h1 {
font-size: 24px;
}
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
}
.card {
background: white;
border-radius: 10px;
padding: 20px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
transition: transform 0.3s;
}
.card:hover {
transform: translateY(-5px);
}
.card h3 {
margin-bottom: 15px;
color: #2c3e50;
}
.stats-card {
display: flex;
align-items: center;
gap: 15px;
}
.stats-icon {
width: 50px;
height: 50px;
background: #3498db;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 24px;
}
.chart-container {
height: 200px;
position: relative;
}
.progress-bar {
width: 100%;
height: 20px;
background: #eee;
border-radius: 10px;
overflow: hidden;
margin-top: 10px;
}
.progress {
height: 100%;
background: #2ecc71;
width: 0;
}
.progress-75 { width: 75%; }
.progress-50 { width: 50%; }
.progress-25 { width: 25%; }
@media (max-width: 768px) {
.sidebar {
width: 200px;
}
.main-content {
margin-left: 200px;
}
.grid-container {
grid-template-columns: 1fr;
}
}
@media (max-width: 480px) {
.sidebar {
width: 70px;
}
.sidebar h2,
.sidebar ul li a span {
display: none;
}
.main-content {
margin-left: 70px;
}
}
</style>
</head>
<body>
<div class="container">
<div class="sidebar">
<h2>Menu</h2>
<ul>
<li><a href="#"><i>🏠</i><span>Dashboard</span></a></li>
<li><a href="#"><i>📊</i><span>Analytics</span></a></li>
<li><a href="#"><i>👥</i><span>Users</span></a></li>
<li><a href="#"><i>⚙️</i><span>Settings</span></a></li>
<li><a href="#"><i>🚪</i><span>Logout</span></a></li>
</ul>
</div>
<div class="main-content">
<div class="dashboard-container">
<div class="header">
<h1>Dashboard Overview</h1>
</div>
<div class="grid-container">
<div class="card stats-card">
<div class="stats-icon">📊</div>
<div>
<h3>Revenue</h3>
<p>$24,500</p>
</div>
</div>
<div class="card stats-card">
<div class="stats-icon">👥</div>
<div>
<h3>Users</h3>
<p>1,234</p>
</div>
</div>
<div class="card stats-card">
<div class="stats-icon">⭐</div>
<div>
<h3>Rating</h3>
<p>4.8/5</p>
</div>
</div>
<div class="card">
<h3>Sales Trend (Monthly)</h3>
<div class="chart-container">
<canvas id="salesChart"></canvas>
</div>
</div>
<div class="card">
<h3>Project Progress</h3>
<p>Development</p>
<div class="progress-bar"><div class="progress progress-75"></div></div>
<p>Design</p>
<div class="progress-bar"><div class="progress progress-50"></div></div>
<p>Testing</p>
<div class="progress-bar"><div class="progress progress-25"></div></div>
</div>
<div class="card">
<h3>User Distribution</h3>
<div class="chart-container">
<canvas id="userChart"></canvas>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
// Sales Trend Line Chart
const salesCtx = document.getElementById('salesChart').getContext('2d');
new Chart(salesCtx, {
type: 'line',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
datasets: [{
label: 'Sales ($)',
data: [12000, 19000, 15000, 25000, 22000, 30000],
borderColor: '#3498db',
backgroundColor: 'rgba(52, 152, 219, 0.2)',
fill: true,
tension: 0.4
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: true
}
}
}
});
// User Distribution Bar Chart
const userCtx = document.getElementById('userChart').getContext('2d');
new Chart(userCtx, {
type: 'bar',
data: {
labels: ['New', 'Returning', 'Inactive'],
datasets: [{
label: 'Users',
data: [500, 600, 134],
backgroundColor: [
'#2ecc71',
'#3498db',
'#e74c3c'
]
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
</body>
</html>
ENDTEXT
RETURN cHtml
]]>Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oWnd, oWebView
DEFINE WINDOW oWnd TITLE "Dashboard"
oWebView = TWebView2():New( oWnd )
oWebView:SetHtml( dash() )
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON RESIZE oWebView:SetSize( nWidth, nHeight )
return nil
function dash()
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>Professional Dashboard with Charts</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: Arial, sans-serif;
}
body {
background: #f0f2f5;
color: #333;
line-height: 1.6;
}
.container {
display: flex;
min-height: 100vh;
}
.sidebar {
width: 250px;
background: #2c3e50;
color: white;
position: fixed;
height: 100%;
padding: 20px;
}
.sidebar h2 {
font-size: 24px;
margin-bottom: 30px;
text-align: center;
}
.sidebar ul {
list-style: none;
}
.sidebar ul li {
margin: 20px 0;
}
.sidebar ul li a {
color: white;
text-decoration: none;
display: flex;
align-items: center;
padding: 10px;
border-radius: 5px;
transition: background 0.3s;
}
.sidebar ul li a:hover {
background: #34495e;
}
.sidebar ul li a i {
margin-right: 10px;
font-size: 18px;
}
.main-content {
flex: 1;
margin-left: 250px;
padding: 20px;
}
.dashboard-container {
max-width: 1400px;
margin: 0 auto;
}
.header {
background: #2c3e50;
color: white;
padding: 20px;
border-radius: 10px;
margin-bottom: 20px;
}
.header h1 {
font-size: 24px;
}
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
}
.card {
background: white;
border-radius: 10px;
padding: 20px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
transition: transform 0.3s;
}
.card:hover {
transform: translateY(-5px);
}
.card h3 {
margin-bottom: 15px;
color: #2c3e50;
}
.stats-card {
display: flex;
align-items: center;
gap: 15px;
}
.stats-icon {
width: 50px;
height: 50px;
background: #3498db;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 24px;
}
.chart-container {
height: 200px;
position: relative;
}
.progress-bar {
width: 100%;
height: 20px;
background: #eee;
border-radius: 10px;
overflow: hidden;
margin-top: 10px;
}
.progress {
height: 100%;
background: #2ecc71;
width: 0;
}
.progress-75 { width: 75%; }
.progress-50 { width: 50%; }
.progress-25 { width: 25%; }
@media (max-width: 768px) {
.sidebar {
width: 200px;
}
.main-content {
margin-left: 200px;
}
.grid-container {
grid-template-columns: 1fr;
}
}
@media (max-width: 480px) {
.sidebar {
width: 70px;
}
.sidebar h2,
.sidebar ul li a span {
display: none;
}
.main-content {
margin-left: 70px;
}
}
</style>
</head>
<body>
<div class="container">
<div class="sidebar">
<h2>Menu</h2>
<ul>
<li><a href="#"><i>🏠</i><span>Dashboard</span></a></li>
<li><a href="#"><i>📊</i><span>Analytics</span></a></li>
<li><a href="#"><i>👥</i><span>Users</span></a></li>
<li><a href="#"><i>⚙️</i><span>Settings</span></a></li>
<li><a href="#"><i>🚪</i><span>Logout</span></a></li>
</ul>
</div>
<div class="main-content">
<div class="dashboard-container">
<div class="header">
<h1>Dashboard Overview</h1>
</div>
<div class="grid-container">
<div class="card stats-card">
<div class="stats-icon">📊</div>
<div>
<h3>Revenue</h3>
<p>$24,500</p>
</div>
</div>
<div class="card stats-card">
<div class="stats-icon">👥</div>
<div>
<h3>Users</h3>
<p>1,234</p>
</div>
</div>
<div class="card stats-card">
<div class="stats-icon">⭐</div>
<div>
<h3>Rating</h3>
<p>4.8/5</p>
</div>
</div>
<div class="card">
<h3>Sales Trend (Monthly)</h3>
<div class="chart-container">
<canvas id="salesChart"></canvas>
</div>
</div>
<div class="card">
<h3>Project Progress</h3>
<p>Development</p>
<div class="progress-bar"><div class="progress progress-75"></div></div>
<p>Design</p>
<div class="progress-bar"><div class="progress progress-50"></div></div>
<p>Testing</p>
<div class="progress-bar"><div class="progress progress-25"></div></div>
</div>
<div class="card">
<h3>User Distribution</h3>
<div class="chart-container">
<canvas id="userChart"></canvas>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
// Sales Trend Line Chart
const salesCtx = document.getElementById('salesChart').getContext('2d');
new Chart(salesCtx, {
type: 'line',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
datasets: [{
label: 'Sales ($)',
data: [12000, 19000, 15000, 25000, 22000, 30000],
borderColor: '#3498db',
backgroundColor: 'rgba(52, 152, 219, 0.2)',
fill: true,
tension: 0.4
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: true
}
}
}
});
// User Distribution Bar Chart
const userCtx = document.getElementById('userChart').getContext('2d');
new Chart(userCtx, {
type: 'bar',
data: {
labels: ['New', 'Returning', 'Inactive'],
datasets: [{
label: 'Users',
data: [500, 600, 134],
backgroundColor: [
'#2ecc71',
'#3498db',
'#e74c3c'
]
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
</body>
</html>
ENDTEXT
RETURN cHtml
Code: Select all | Expand
DEFINE BUTTONBAR oBar _3D SIZE 80, 70 OF oWnd 2015
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oWnd, oWebView
DEFINE WINDOW oWnd TITLE "Dashboard"
oWebView = TWebView2():New( oWnd )
oWebView:SetHtml( dash() )
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON RESIZE oWebView:SetSize( nWidth, nHeight )
return nil
function dash()
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>Professional Dashboard with Charts</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: Arial, sans-serif;
}
body {
background: #f0f2f5;
color: #333;
line-height: 1.6;
}
.container {
display: flex;
min-height: 100vh;
}
.sidebar {
width: 250px;
background: #2c3e50;
color: white;
position: fixed;
height: 100%;
padding: 20px;
}
.sidebar h2 {
font-size: 24px;
margin-bottom: 30px;
text-align: center;
}
.sidebar ul {
list-style: none;
}
.sidebar ul li {
margin: 20px 0;
}
.sidebar ul li a {
color: white;
text-decoration: none;
display: flex;
align-items: center;
padding: 10px;
border-radius: 5px;
transition: background 0.3s;
}
.sidebar ul li a:hover {
background: #34495e;
}
.sidebar ul li a i {
margin-right: 10px;
font-size: 18px;
}
.main-content {
flex: 1;
margin-left: 250px;
padding: 20px;
}
.dashboard-container {
max-width: 1400px;
margin: 0 auto;
}
.header {
background: #2c3e50;
color: white;
padding: 20px;
border-radius: 10px;
margin-bottom: 20px;
}
.header h1 {
font-size: 24px;
}
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
}
.card {
background: white;
border-radius: 10px;
padding: 20px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
transition: transform 0.3s;
}
.card:hover {
transform: translateY(-5px);
}
.card h3 {
margin-bottom: 15px;
color: #2c3e50;
}
.stats-card {
display: flex;
align-items: center;
gap: 15px;
}
.stats-icon {
width: 50px;
height: 50px;
background: #3498db;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 24px;
}
.chart-container {
height: 200px;
position: relative;
}
.progress-bar {
width: 100%;
height: 20px;
background: #eee;
border-radius: 10px;
overflow: hidden;
margin-top: 10px;
}
.progress {
height: 100%;
background: #2ecc71;
width: 0;
}
.progress-75 { width: 75%; }
.progress-50 { width: 50%; }
.progress-25 { width: 25%; }
@media (max-width: 768px) {
.sidebar {
width: 200px;
}
.main-content {
margin-left: 200px;
}
.grid-container {
grid-template-columns: 1fr;
}
}
@media (max-width: 480px) {
.sidebar {
width: 70px;
}
.sidebar h2,
.sidebar ul li a span {
display: none;
}
.main-content {
margin-left: 70px;
}
}
</style>
</head>
<body>
<div class="container">
<div class="sidebar">
<h2>Menu</h2>
<ul>
<li><a href="#"><i>🏠</i><span>Dashboard</span></a></li>
<li><a href="#"><i>📊</i><span>Analytics</span></a></li>
<li><a href="#"><i>👥</i><span>Users</span></a></li>
<li><a href="#"><i>⚙️</i><span>Settings</span></a></li>
<li><a href="#"><i>🚪</i><span>Logout</span></a></li>
</ul>
</div>
<div class="main-content">
<div class="dashboard-container">
<div class="header">
<h1>Dashboard Overview</h1>
</div>
<div class="grid-container">
<div class="card stats-card">
<div class="stats-icon">📊</div>
<div>
<h3>Revenue</h3>
<p>$24,500</p>
</div>
</div>
<div class="card stats-card">
<div class="stats-icon">👥</div>
<div>
<h3>Users</h3>
<p>1,234</p>
</div>
</div>
<div class="card stats-card">
<div class="stats-icon">⭐</div>
<div>
<h3>Rating</h3>
<p>4.8/5</p>
</div>
</div>
<div class="card">
<h3>Sales Trend (Monthly)</h3>
<div class="chart-container">
<canvas id="salesChart"></canvas>
</div>
</div>
<div class="card">
<h3>Project Progress</h3>
<p>Development</p>
<div class="progress-bar"><div class="progress progress-75"></div></div>
<p>Design</p>
<div class="progress-bar"><div class="progress progress-50"></div></div>
<p>Testing</p>
<div class="progress-bar"><div class="progress progress-25"></div></div>
</div>
<div class="card">
<h3>User Distribution</h3>
<div class="chart-container">
<canvas id="userChart"></canvas>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
// Sales Trend Line Chart
const salesCtx = document.getElementById('salesChart').getContext('2d');
new Chart(salesCtx, {
type: 'line',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],
datasets: [{
label: 'Sales ($)',
data: [12000, 19000, 15000, 25000, 22000, 30000],
borderColor: '#3498db',
backgroundColor: 'rgba(52, 152, 219, 0.2)',
fill: true,
tension: 0.4
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: true
}
}
}
});
// User Distribution Bar Chart
const userCtx = document.getElementById('userChart').getContext('2d');
new Chart(userCtx, {
type: 'bar',
data: {
labels: ['New', 'Returning', 'Inactive'],
datasets: [{
label: 'Users',
data: [500, 600, 134],
backgroundColor: [
'#2ecc71',
'#3498db',
'#e74c3c'
]
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
</body>
</html>
ENDTEXT
RETURN cHtml
Code: Select all | Expand
DEFINE BUTTONBAR oBar _3D SIZE 80, 70 OF oWnd 2015
Code: Select all | Expand
oWnd:oClient := oWebView
Code: Select all | Expand
oWnd:oClient := oWebView
Code: Select all | Expand
oWnd:oClient := oWebView
Code: Select all | Expand
rror occurred at: 03/27/25, 09:06:38
Error description: Error BASE/1004 Message not found: TWEBVIEW2:ADJCLIENT
Args:
[ 1] = O TWEBVIEW2
Stack Calls
===========
Called from: ../../../tobject.prg => __ERRRT_SBASE( 0 )
Called from: ../../../tobject.prg => TWEBVIEW2:ERROR( 0 )
Called from: ../../../tobject.prg => (b)HBOBJECT( 0 )
Called from: ../../../tobject.prg => TWEBVIEW2:MSGNOTFOUND( 0 )
Called from: ../../../tobject.prg => TWEBVIEW2:ADJCLIENT( 0 )
Called from: .\source\classes\window.prg => TWINDOW:RESIZE( 2432 )
Called from: .\source\classes\window.prg => TWINDOW:HANDLEEVENT( 0 )
Called from: .\source\classes\window.prg => _FWH( 3719 )
Code: Select all | Expand
function Main()
local oWnd, oWebView
local oBar
DEFINE WINDOW oWnd TITLE "Dashboard"
oWebView := TWebView2():New( oWnd )
//oWebView:SetHtml( Html() )
// oWebView:bOnBind := {|hData| ExecuteFunction(hData, oWebView) }
// oWebView:oWnd:SetMenu( BuildMenu(oWebView) )
oWebView:oWnd:SetColor( CLR_BLACK, nRGB( 231, 242, 255 ) )
oWebView:oWnd:l2007 := .T.
oWebView:SetSize( WndWidth( oWebView:oWnd:hWnd ) - 15, WndHeight( oWebView:oWnd:hWnd ) - 58 )
oWnd:oclient:= oWebView
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON RESIZE ( oWebView:SetSize( nWidth, nHeight ))
return nil
Code: Select all | Expand
oWnd:oClient := oWebView
Code: Select all | Expand
rror occurred at: 03/27/25, 09:06:38
Error description: Error BASE/1004 Message not found: TWEBVIEW2:ADJCLIENT
Args:
[ 1] = O TWEBVIEW2
Stack Calls
===========
Called from: ../../../tobject.prg => __ERRRT_SBASE( 0 )
Called from: ../../../tobject.prg => TWEBVIEW2:ERROR( 0 )
Called from: ../../../tobject.prg => (b)HBOBJECT( 0 )
Called from: ../../../tobject.prg => TWEBVIEW2:MSGNOTFOUND( 0 )
Called from: ../../../tobject.prg => TWEBVIEW2:ADJCLIENT( 0 )
Called from: .\source\classes\window.prg => TWINDOW:RESIZE( 2432 )
Called from: .\source\classes\window.prg => TWINDOW:HANDLEEVENT( 0 )
Called from: .\source\classes\window.prg => _FWH( 3719 )
Code: Select all | Expand
function Main()
local oWnd, oWebView
local oBar
DEFINE WINDOW oWnd TITLE "Dashboard"
oWebView := TWebView2():New( oWnd )
//oWebView:SetHtml( Html() )
// oWebView:bOnBind := {|hData| ExecuteFunction(hData, oWebView) }
// oWebView:oWnd:SetMenu( BuildMenu(oWebView) )
oWebView:oWnd:SetColor( CLR_BLACK, nRGB( 231, 242, 255 ) )
oWebView:oWnd:l2007 := .T.
oWebView:SetSize( WndWidth( oWebView:oWnd:hWnd ) - 15, WndHeight( oWebView:oWnd:hWnd ) - 58 )
oWnd:oclient:= oWebView
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON RESIZE ( oWebView:SetSize( nWidth, nHeight ))
return nil
Code: Select all | Expand
function Main()
local oWnd, oWebView
local oBar
DEFINE WINDOW oWnd TITLE "Invoicing"
BuildMainBar(oWnd)
oWebView := TWebView2():New( oWnd:oClient )
oWebView:SetHtml( Html() )
oWebView:bOnBind := {|hData| ExecuteFunction(hData, oWebView) }
oWebView:oWnd:SetMenu( BuildMenu(oWebView) )
oWebView:oWnd:SetColor( CLR_BLACK, nRGB( 231, 242, 255 ) )
oWebView:SetSize( WndWidth( oWebView:oWnd:hWnd ) - 15, WndHeight( oWebView:oWnd:hWnd ) - 58 )
DEFINE MSGBAR PROMPT "Invoicing app" ;
OF oWnd 2015 KEYBOARD DATE
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON RESIZE ( oWebView:SetSize( nWidth, nHeight ))
return nil
static function BuildMainBar(oWnd)
local oBar
DEFINE BUTTONBAR oBar OF oWnd 2015 SIZE 70, 60 //70
DEFINE BUTTON OF oBar PROMPT "Invoices" RESOURCE "code" ;
ACTION NIL
DEFINE BUTTON OF oBar PROMPT "Clients" RESOURCE "clients" ;
ACTION NIL
DEFINE BUTTON OF oBar PROMPT "Items" RESOURCE "relation" ;
ACTION NIL
DEFINE BUTTON OF oBar PROMPT "Exit" RESOURCE "exit" ;
ACTION oWnd:End()
return nil
Function BuildMenu(oWebView)
local oMenu
MENU oMenu
MENUITEM "Uscita" ACTION oWebView:oWnd:End()
ENDMENU
return oMenu
Code: Select all | Expand
function Main()
local oWnd, oWebView
local oBar
DEFINE WINDOW oWnd TITLE "Invoicing"
BuildMainBar(oWnd)
oWebView := TWebView2():New( oWnd:oClient )
oWebView:SetHtml( Html() )
oWebView:bOnBind := {|hData| ExecuteFunction(hData, oWebView) }
oWebView:oWnd:SetMenu( BuildMenu(oWebView) )
oWebView:oWnd:SetColor( CLR_BLACK, nRGB( 231, 242, 255 ) )
oWebView:SetSize( WndWidth( oWebView:oWnd:hWnd ) - 15, WndHeight( oWebView:oWnd:hWnd ) - 58 )
DEFINE MSGBAR PROMPT "Invoicing app" ;
OF oWnd 2015 KEYBOARD DATE
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON RESIZE ( oWebView:SetSize( nWidth, nHeight ))
return nil
static function BuildMainBar(oWnd)
local oBar
DEFINE BUTTONBAR oBar OF oWnd 2015 SIZE 70, 60 //70
DEFINE BUTTON OF oBar PROMPT "Invoices" RESOURCE "code" ;
ACTION NIL
DEFINE BUTTON OF oBar PROMPT "Clients" RESOURCE "clients" ;
ACTION NIL
DEFINE BUTTON OF oBar PROMPT "Items" RESOURCE "relation" ;
ACTION NIL
DEFINE BUTTON OF oBar PROMPT "Exit" RESOURCE "exit" ;
ACTION oWnd:End()
return nil
Function BuildMenu(oWebView)
local oMenu
MENU oMenu
MENUITEM "Uscita" ACTION oWebView:oWnd:End()
ENDMENU
return oMenu
Code: Select all | Expand
function Main()
local oWnd, oWebView
local oBar
DEFINE WINDOW oWnd TITLE "Invoicing"
BuildMainBar(oWnd)
oWebView := TWebView2():New( oWnd )
oWebView:SetHtml( Html() )
oWebView:bOnBind := {|hData| ExecuteFunction(hData, oWebView) }
oWebView:oWnd:SetMenu( BuildMenu(oWebView) )
oWebView:oWnd:SetColor( CLR_BLACK, nRGB( 231, 242, 255 ) )
DEFINE MSGBAR PROMPT "Invoicing app" ;
OF oWnd 2015 KEYBOARD DATE
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON RESIZE ( oWebView:SetSize( WndWidth( oWebView:oWnd:hWnd ) - 15,;
WndHeight( oWebView:oWnd:hWnd ) - 58 ) )
return nil
Code: Select all | Expand
function Main()
local oWnd, oWebView
local oBar
DEFINE WINDOW oWnd TITLE "Invoicing"
BuildMainBar(oWnd)
oWebView := TWebView2():New( oWnd )
oWebView:SetHtml( Html() )
oWebView:bOnBind := {|hData| ExecuteFunction(hData, oWebView) }
oWebView:oWnd:SetMenu( BuildMenu(oWebView) )
oWebView:oWnd:SetColor( CLR_BLACK, nRGB( 231, 242, 255 ) )
DEFINE MSGBAR PROMPT "Invoicing app" ;
OF oWnd 2015 KEYBOARD DATE
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON RESIZE ( oWebView:SetSize( WndWidth( oWebView:oWnd:hWnd ) - 15,;
WndHeight( oWebView:oWnd:hWnd ) - 58 ) )
return nil
Code: Select all | Expand
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON RESIZE ( oWebView:SetSize( WndWidth( oWebView:oWnd:hWnd ) - 15,;
WndHeight( oWebView:oWnd:hWnd ) - 80 ) )
Code: Select all | Expand
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON RESIZE ( oWebView:SetSize( WndWidth( oWebView:oWnd:hWnd ) - 15,;
WndHeight( oWebView:oWnd:hWnd ) - 80 ) )
Code: Select all | Expand
called from:
.\..\..\VC2022\bin\Hostx64\x64\nmake -fscuolaC64.mak
HBDIR=.\..\..\Hb64vC22
FWDIR=.\..\..\fwh642501
VCDIR=.\..\..\VC2022
VC32DIR=.\..\..\VC2017
SDKDIR=.\..\..\VC2022\sdk
PRGS = scuola.prg functscl.prg TcBrowse.prg #tmGet.prg Combo_Box.prg
.SUFFIXES: .prg .c .obj .rc .res
scuola64.exe : $(PRGS:.prg=.obj) scuola64.res
@echo $(PRGS:.prg=.obj) > msvc.tmp
@echo $(FWDIR)\lib\FiveH64.lib >> msvc.tmp
@echo $(FWDIR)\lib\FiveHC64.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbrtl.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbvm.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\gtgui.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hblang.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbmacro.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbrdd.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\rddntx.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\rddcdx.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\rddfpt.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbsix.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbdebug.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbcommon.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbpp.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbwin.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbcplr.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\xhb.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbpcre.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbct.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbcpage.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbzlib.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\png.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbzlib.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbziparc.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbmzip.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\minizip.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\LIBCMT.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\OLDNAMES.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\gdi32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\winspool.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\comctl32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\comdlg32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\advapi32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\shell32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\ole32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\oleaut32.lib >> msvc.tmp
# @echo $(VC32DIR)\Lib\uuid.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\odbc32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\odbccp32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\iphlpapi.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\mpr.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\version.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\wsock32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\msimg32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\oledlg.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\psapi.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\gdiplus.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\winmm.lib >> msvc.tmp
# @echo $(VC32DIR)\Lib\amd64\libcmt.lib >> msvc.tmp
# @echo $(VC32DIR)\Lib\amd64\oldnames.lib >> msvc.tmp
# @echo $(VC32DIR)\Lib\amd64\libvcruntime.lib >> msvc.tmp
# @echo $(VC32DIR)\kit\lib\ucrt\x64\libucrt.lib >> msvc.tmp
IF EXIST scuola64.res echo scuola64.res >> msvc.tmp
# copiare .\..\..\VC2015\bin\cvtres.exe nella cartella x86_amd64
$(VCDIR)\bin\Hostx64\x64\link @msvc.tmp /nologo /subsystem:windows /NODEFAULTLIB:msvcrt > link.log
@type link.log
@del $(PRGS:.prg=.obj)
$(PRGS:.prg=.obj) : $(PRGS:.prg=.c)
$(PRGS:.prg=.c) : $(PRGS)
# scuola64.res : scuola64.rc
# $(VC32DIR)\bin\rc.exe -r -d__FLAT__ scuola64.rc
.prg.c:
$(HBDIR)\bin\win\msvc64\harbour $< /n /i$(FWDIR)\include;$(HBDIR)\include -gc3 -p -p+
#-gc3 come parametro di harbour genera codice C e non pcode.
.c.obj:
# $(VCDIR)\bin\x86_amd64\cl.exe -c -TC -W3 -I$(HBDIR)\include -I$(SDKDIR)\include -I$(VCDIR)\include -I$(VCDIR)\kit\include\ucrt $<
$(VCDIR)\bin\Hostx64\x64\cl.exe -c -TC -W3 -I$(HBDIR)\include -I$(SDKDIR)\include -I$(VCDIR)\include -I$(VCDIR)\kit\include\ucrt -I$(FWDIR)\include $<
Code: Select all | Expand
called from:
.\..\..\VC2022\bin\Hostx64\x64\nmake -fscuolaC64.mak
HBDIR=.\..\..\Hb64vC22
FWDIR=.\..\..\fwh642501
VCDIR=.\..\..\VC2022
VC32DIR=.\..\..\VC2017
SDKDIR=.\..\..\VC2022\sdk
PRGS = scuola.prg functscl.prg TcBrowse.prg #tmGet.prg Combo_Box.prg
.SUFFIXES: .prg .c .obj .rc .res
scuola64.exe : $(PRGS:.prg=.obj) scuola64.res
@echo $(PRGS:.prg=.obj) > msvc.tmp
@echo $(FWDIR)\lib\FiveH64.lib >> msvc.tmp
@echo $(FWDIR)\lib\FiveHC64.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbrtl.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbvm.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\gtgui.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hblang.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbmacro.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbrdd.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\rddntx.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\rddcdx.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\rddfpt.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbsix.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbdebug.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbcommon.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbpp.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbwin.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbcplr.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\xhb.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbpcre.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbct.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbcpage.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbzlib.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\png.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbzlib.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbziparc.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbmzip.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\minizip.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\LIBCMT.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\OLDNAMES.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\gdi32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\winspool.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\comctl32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\comdlg32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\advapi32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\shell32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\ole32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\oleaut32.lib >> msvc.tmp
# @echo $(VC32DIR)\Lib\uuid.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\odbc32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\odbccp32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\iphlpapi.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\mpr.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\version.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\wsock32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\msimg32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\oledlg.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\psapi.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\gdiplus.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\winmm.lib >> msvc.tmp
# @echo $(VC32DIR)\Lib\amd64\libcmt.lib >> msvc.tmp
# @echo $(VC32DIR)\Lib\amd64\oldnames.lib >> msvc.tmp
# @echo $(VC32DIR)\Lib\amd64\libvcruntime.lib >> msvc.tmp
# @echo $(VC32DIR)\kit\lib\ucrt\x64\libucrt.lib >> msvc.tmp
IF EXIST scuola64.res echo scuola64.res >> msvc.tmp
# copiare .\..\..\VC2015\bin\cvtres.exe nella cartella x86_amd64
$(VCDIR)\bin\Hostx64\x64\link @msvc.tmp /nologo /subsystem:windows /NODEFAULTLIB:msvcrt > link.log
@type link.log
@del $(PRGS:.prg=.obj)
$(PRGS:.prg=.obj) : $(PRGS:.prg=.c)
$(PRGS:.prg=.c) : $(PRGS)
# scuola64.res : scuola64.rc
# $(VC32DIR)\bin\rc.exe -r -d__FLAT__ scuola64.rc
.prg.c:
$(HBDIR)\bin\win\msvc64\harbour $< /n /i$(FWDIR)\include;$(HBDIR)\include -gc3 -p -p+
#-gc3 come parametro di harbour genera codice C e non pcode.
.c.obj:
# $(VCDIR)\bin\x86_amd64\cl.exe -c -TC -W3 -I$(HBDIR)\include -I$(SDKDIR)\include -I$(VCDIR)\include -I$(VCDIR)\kit\include\ucrt $<
$(VCDIR)\bin\Hostx64\x64\cl.exe -c -TC -W3 -I$(HBDIR)\include -I$(SDKDIR)\include -I$(VCDIR)\include -I$(VCDIR)\kit\include\ucrt -I$(FWDIR)\include $<
Code: Select all | Expand
HBDIR=.\..\..\Hb64vC22
FWDIR=.\..\..\fwh642501
VCDIR=.\..\..\VC2022
VC32DIR=.\..\..\VC2017
SDKDIR=.\..\..\VC2022\sdk
PRGS = scuola.prg functscl.prg TcBrowse.prg #tmGet.prg Combo_Box.prg
.SUFFIXES: .prg .c .obj .rc .res
scuola64.exe : $(PRGS:.prg=.obj) scuola64.res
@echo $(PRGS:.prg=.obj) > msvc.tmp
@echo $(FWDIR)\lib\FiveH64.lib >> msvc.tmp
@echo $(FWDIR)\lib\FiveHC64.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbrtl.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbvm.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\gtgui.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hblang.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbmacro.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbrdd.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\rddntx.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\rddcdx.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\rddfpt.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbsix.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbdebug.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbcommon.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbpp.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbwin.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbcplr.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\xhb.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbpcre.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbct.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbcpage.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbzlib.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\png.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbzlib.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbziparc.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbmzip.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\minizip.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\gdi32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\winspool.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\comctl32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\comdlg32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\advapi32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\shell32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\ole32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\oleaut32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\odbc32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\odbccp32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\iphlpapi.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\mpr.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\version.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\wsock32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\msimg32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\oledlg.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\psapi.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\gdiplus.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\winmm.lib >> msvc.tmp
@echo .\lib\oldnames.lib >> msvc.tmp
@echo .\lib\ucrt.lib >> msvc.tmp
@echo .\lib\uuid.lib >> msvc.tmp
@echo .\lib\libcmt.lib >> msvc.tmp
# @echo $(VC32DIR)\Lib\amd64\libvcruntime.lib >> msvc.tmp
# @echo $(VC32DIR)\kit\lib\ucrt\x64\libucrt.lib >> msvc.tmp
IF EXIST scuola64.res echo scuola64.res >> msvc.tmp
# copiare .\..\..\VC2015\bin\cvtres.exe nella cartella x86_amd64
$(VCDIR)\bin\Hostx64\x64\link @msvc.tmp /nologo /subsystem:windows /NODEFAULTLIB:libucrt /NODEFAULTLIB:msvcrt > link.log
@type link.log
@del $(PRGS:.prg=.obj)
$(PRGS:.prg=.obj) : $(PRGS:.prg=.c)
$(PRGS:.prg=.c) : $(PRGS)
# scuola64.res : scuola64.rc
# $(VC32DIR)\bin\rc.exe -r -d__FLAT__ scuola64.rc
.prg.c:
$(HBDIR)\bin\win\msvc64\harbour $< /n /i$(FWDIR)\include;$(HBDIR)\include -gc3 -p -p+
#-gc3 come parametro di harbour genera codice C e non pcode.
.c.obj:
# $(VCDIR)\bin\x86_amd64\cl.exe -c -TC -W3 -I$(HBDIR)\include -I$(SDKDIR)\include -I$(VCDIR)\include -I$(VCDIR)\kit\include\ucrt $<
$(VCDIR)\bin\Hostx64\x64\cl.exe -c -TC -W3 -I$(HBDIR)\include -I$(SDKDIR)\include -I$(VCDIR)\include -I$(VCDIR)\kit\include\ucrt -I$(FWDIR)\include $<
Code: Select all | Expand
HBDIR=.\..\..\Hb64vC22
FWDIR=.\..\..\fwh642501
VCDIR=.\..\..\VC2022
VC32DIR=.\..\..\VC2017
SDKDIR=.\..\..\VC2022\sdk
PRGS = scuola.prg functscl.prg TcBrowse.prg #tmGet.prg Combo_Box.prg
.SUFFIXES: .prg .c .obj .rc .res
scuola64.exe : $(PRGS:.prg=.obj) scuola64.res
@echo $(PRGS:.prg=.obj) > msvc.tmp
@echo $(FWDIR)\lib\FiveH64.lib >> msvc.tmp
@echo $(FWDIR)\lib\FiveHC64.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbrtl.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbvm.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\gtgui.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hblang.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbmacro.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbrdd.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\rddntx.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\rddcdx.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\rddfpt.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbsix.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbdebug.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbcommon.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbpp.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbwin.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbcplr.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\xhb.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbpcre.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbct.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbcpage.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbzlib.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\png.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbzlib.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbziparc.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\hbmzip.lib >> msvc.tmp
@echo $(HBDIR)\lib\win\msvc64\minizip.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\gdi32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\winspool.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\comctl32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\comdlg32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\advapi32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\shell32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\ole32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\oleaut32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\odbc32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\odbccp32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\iphlpapi.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\mpr.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\version.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\wsock32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\msimg32.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\oledlg.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\psapi.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\gdiplus.lib >> msvc.tmp
@echo $(VC32DIR)\Lib\winmm.lib >> msvc.tmp
@echo .\lib\oldnames.lib >> msvc.tmp
@echo .\lib\ucrt.lib >> msvc.tmp
@echo .\lib\uuid.lib >> msvc.tmp
@echo .\lib\libcmt.lib >> msvc.tmp
# @echo $(VC32DIR)\Lib\amd64\libvcruntime.lib >> msvc.tmp
# @echo $(VC32DIR)\kit\lib\ucrt\x64\libucrt.lib >> msvc.tmp
IF EXIST scuola64.res echo scuola64.res >> msvc.tmp
# copiare .\..\..\VC2015\bin\cvtres.exe nella cartella x86_amd64
$(VCDIR)\bin\Hostx64\x64\link @msvc.tmp /nologo /subsystem:windows /NODEFAULTLIB:libucrt /NODEFAULTLIB:msvcrt > link.log
@type link.log
@del $(PRGS:.prg=.obj)
$(PRGS:.prg=.obj) : $(PRGS:.prg=.c)
$(PRGS:.prg=.c) : $(PRGS)
# scuola64.res : scuola64.rc
# $(VC32DIR)\bin\rc.exe -r -d__FLAT__ scuola64.rc
.prg.c:
$(HBDIR)\bin\win\msvc64\harbour $< /n /i$(FWDIR)\include;$(HBDIR)\include -gc3 -p -p+
#-gc3 come parametro di harbour genera codice C e non pcode.
.c.obj:
# $(VCDIR)\bin\x86_amd64\cl.exe -c -TC -W3 -I$(HBDIR)\include -I$(SDKDIR)\include -I$(VCDIR)\include -I$(VCDIR)\kit\include\ucrt $<
$(VCDIR)\bin\Hostx64\x64\cl.exe -c -TC -W3 -I$(HBDIR)\include -I$(SDKDIR)\include -I$(VCDIR)\include -I$(VCDIR)\kit\include\ucrt -I$(FWDIR)\include $<
Code: Select all | Expand
content of file: msvc.tmp
scuola.obj functscl.obj TcBrowse.obj
.\..\..\fwh642501\lib\FiveH64.lib
.\..\..\fwh642501\lib\FiveHC64.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbrtl.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbvm.lib
.\..\..\Hb64vC22\lib\win\msvc64\gtgui.lib
.\..\..\Hb64vC22\lib\win\msvc64\hblang.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbmacro.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbrdd.lib
.\..\..\Hb64vC22\lib\win\msvc64\rddntx.lib
.\..\..\Hb64vC22\lib\win\msvc64\rddcdx.lib
.\..\..\Hb64vC22\lib\win\msvc64\rddfpt.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbsix.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbdebug.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbcommon.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbpp.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbwin.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbcplr.lib
.\..\..\Hb64vC22\lib\win\msvc64\xhb.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbpcre.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbct.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbcpage.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbzlib.lib
.\..\..\Hb64vC22\lib\win\msvc64\png.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbzlib.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbziparc.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbmzip.lib
.\..\..\Hb64vC22\lib\win\msvc64\minizip.lib
.\..\..\VC2017\Lib\gdi32.lib
.\..\..\VC2017\Lib\winspool.lib
.\..\..\VC2017\Lib\comctl32.lib
.\..\..\VC2017\Lib\comdlg32.lib
.\..\..\VC2017\Lib\advapi32.lib
.\..\..\VC2017\Lib\shell32.lib
.\..\..\VC2017\Lib\ole32.lib
.\..\..\VC2017\Lib\oleaut32.lib
.\..\..\VC2017\Lib\odbc32.lib
.\..\..\VC2017\Lib\odbccp32.lib
.\..\..\VC2017\Lib\iphlpapi.lib
.\..\..\VC2017\Lib\mpr.lib
.\..\..\VC2017\Lib\version.lib
.\..\..\VC2017\Lib\wsock32.lib
.\..\..\VC2017\Lib\msimg32.lib
.\..\..\VC2017\Lib\oledlg.lib
.\..\..\VC2017\Lib\psapi.lib
.\..\..\VC2017\Lib\gdiplus.lib
.\..\..\VC2017\Lib\winmm.lib
.\..\..\VC2017\Lib\libvcruntime.lib
.\..\..\VC2017\lib\libucrt.lib
.\lib\oldnames.lib
.\lib\ucrt.lib
.\lib\uuid.lib
.\lib\libcmt.lib
scuola64.res
Code: Select all | Expand
content of file: msvc.tmp
scuola.obj functscl.obj TcBrowse.obj
.\..\..\fwh642501\lib\FiveH64.lib
.\..\..\fwh642501\lib\FiveHC64.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbrtl.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbvm.lib
.\..\..\Hb64vC22\lib\win\msvc64\gtgui.lib
.\..\..\Hb64vC22\lib\win\msvc64\hblang.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbmacro.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbrdd.lib
.\..\..\Hb64vC22\lib\win\msvc64\rddntx.lib
.\..\..\Hb64vC22\lib\win\msvc64\rddcdx.lib
.\..\..\Hb64vC22\lib\win\msvc64\rddfpt.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbsix.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbdebug.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbcommon.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbpp.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbwin.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbcplr.lib
.\..\..\Hb64vC22\lib\win\msvc64\xhb.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbpcre.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbct.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbcpage.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbzlib.lib
.\..\..\Hb64vC22\lib\win\msvc64\png.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbzlib.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbziparc.lib
.\..\..\Hb64vC22\lib\win\msvc64\hbmzip.lib
.\..\..\Hb64vC22\lib\win\msvc64\minizip.lib
.\..\..\VC2017\Lib\gdi32.lib
.\..\..\VC2017\Lib\winspool.lib
.\..\..\VC2017\Lib\comctl32.lib
.\..\..\VC2017\Lib\comdlg32.lib
.\..\..\VC2017\Lib\advapi32.lib
.\..\..\VC2017\Lib\shell32.lib
.\..\..\VC2017\Lib\ole32.lib
.\..\..\VC2017\Lib\oleaut32.lib
.\..\..\VC2017\Lib\odbc32.lib
.\..\..\VC2017\Lib\odbccp32.lib
.\..\..\VC2017\Lib\iphlpapi.lib
.\..\..\VC2017\Lib\mpr.lib
.\..\..\VC2017\Lib\version.lib
.\..\..\VC2017\Lib\wsock32.lib
.\..\..\VC2017\Lib\msimg32.lib
.\..\..\VC2017\Lib\oledlg.lib
.\..\..\VC2017\Lib\psapi.lib
.\..\..\VC2017\Lib\gdiplus.lib
.\..\..\VC2017\Lib\winmm.lib
.\..\..\VC2017\Lib\libvcruntime.lib
.\..\..\VC2017\lib\libucrt.lib
.\lib\oldnames.lib
.\lib\ucrt.lib
.\lib\uuid.lib
.\lib\libcmt.lib
scuola64.res
Code: Select all | Expand
hbrtl.lib(vfile.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbwin.lib(win_misc_1.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbct.lib(trig.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbrtl.lib(hbi18n1.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbrtl.lib(gttone.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbrtl.lib(itemseri.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcplr.lib(gencc.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbpcre.lib(pcrecomp.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbct.lib(dattime3.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbct.lib(ctmath2.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcplr.lib(harboury.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcplr.lib(complex.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcplr.lib(genc.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcplr.lib(exproptb.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcommon.lib(expropt1.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcommon.lib(expropt2.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbwin.lib(olecore.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcplr.lib(hbmain.obj) : error LNK2001: simbolo esterno _fltused non risolto
rddfpt.lib(dbffpt1.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcommon.lib(hbstr.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcommon.lib(hbdate.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcommon.lib(hbprintf.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbrdd.lib(sdf1.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbrdd.lib(dbf1.obj) : error LNK2001: simbolo esterno _fltused non risolto
rddntx.lib(dbfntx1.obj) : error LNK2001: simbolo esterno _fltused non risolto
rddcdx.lib(dbfcdx1.obj) : error LNK2001: simbolo esterno _fltused non risolto
FiveHC64.lib(richedit.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(richedi5.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(tabctrlw.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(tabctrl.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(getdir.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(fwunicode.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(icons.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(nonclient.obj) : error LNK2001: simbolo esterno memset non risolto
FiveH64.lib(getsysin.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(dlg2chr.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(winexec.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(getfile.obj) : error LNK2001: simbolo esterno memset non risolto
..............................
minizip.lib(ioapi.obj) : error LNK2019: riferimento al simbolo esterno __imp__ftelli64 non risolto nella funzione ftell64_file_func
hbrtl.lib(gttone.obj) : error LNK2019: riferimento al simbolo esterno __imp_Beep non risolto nella funzione hb_gt_wNtTone
hbrtl.lib(itemseri.obj) : error LNK2019: riferimento al simbolo esterno _byteswap_uint64 non risolto nella funzione _hb_get_rev_uint64
hbvm.lib(dynlibhb.obj) : error LNK2019: riferimento al simbolo esterno __imp_LoadLibraryW non risolto nella funzione hb_libLoad
hbpp.lib(ppcore.obj) : error LNK2019: riferimento al simbolo esterno __imp_fputs non risolto nella funzione hb_pp_dumpEnd
hbwin.lib(win_misc_1.obj) : error LNK2019: riferimento al simbolo esterno __imp_QueryPerformanceFrequency non risolto nella funzione HB_FUN_WIN_QPCOUNTER2SEC
hbwin.lib(win_misc_1.obj) : error LNK2019: riferimento al simbolo esterno __imp_CreateEventW non risolto nella funzione HB_FUN_WIN_SYSREFRESH
hbwin.lib(win_misc_1.obj) : error LNK2019: riferimento al simbolo esterno __imp_FindResourceW non risolto nella funzione HB_FUN_WIN_LOADRESOURCE
hbwin.lib(win_misc_1.obj) : error LNK2019: riferimento al simbolo esterno __imp_MsgWaitForMultipleObjects non risolto nella funzione HB_FUN_WIN_SYSREFRESH
hbwin.lib(wapi_shellapi.obj) : error LNK2019: riferimento al simbolo esterno __imp_ShellExecuteExW non risolto nella funzione HB_FUN_WAPI_SHELLEXECUTE_WAIT
hbwin.lib(win_regc.obj) : error LNK2019: riferimento al simbolo esterno __imp_RegCreateKeyExW non risolto nella funzione HB_FUN_WIN_REGCREATEKEYEX
hbwin.lib(win_regc.obj) : error LNK2019: riferimento al simbolo esterno __imp_RegDeleteKeyW non risolto nella funzione HB_FUN_WIN_REGDELETEKEY
hbwin.lib(win_regc.obj) : error LNK2019: riferimento al simbolo esterno __imp_RegDeleteValueW non risolto nella funzione HB_FUN_WIN_REGDELETEVALUE
hbwin.lib(win_regc.obj) : error LNK2019: riferimento al simbolo esterno __imp_RegOpenKeyExW non risolto nella funzione HB_FUN_WIN_REGOPENKEYEX
hbwin.lib(win_regc.obj) : error LNK2019: riferimento al simbolo esterno __imp_RegQueryValueExW non risolto nella funzione HB_FUN_WIN_REGQUERYVALUEEX
hbwin.lib(win_regc.obj) : error LNK2019: riferimento al simbolo esterno __imp_RegSetValueExW non risolto nella funzione HB_FUN_WIN_REGSETVALUEEX
.\..\..\VC2017\Lib\gdi32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\winspool.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\comctl32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\comdlg32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\advapi32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\shell32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\ole32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\oleaut32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\odbc32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\odbccp32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\iphlpapi.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\mpr.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\version.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\wsock32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\msimg32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\oledlg.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\psapi.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\gdiplus.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\winmm.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\libvcruntime.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\lib\libucrt.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\lib\ucrt.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\lib\libcmt.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
scuola.exe : fatal error LNK1120: 1008 esterni non risolti
Code: Select all | Expand
hbrtl.lib(vfile.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbwin.lib(win_misc_1.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbct.lib(trig.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbrtl.lib(hbi18n1.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbrtl.lib(gttone.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbrtl.lib(itemseri.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcplr.lib(gencc.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbpcre.lib(pcrecomp.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbct.lib(dattime3.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbct.lib(ctmath2.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcplr.lib(harboury.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcplr.lib(complex.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcplr.lib(genc.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcplr.lib(exproptb.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcommon.lib(expropt1.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcommon.lib(expropt2.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbwin.lib(olecore.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcplr.lib(hbmain.obj) : error LNK2001: simbolo esterno _fltused non risolto
rddfpt.lib(dbffpt1.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcommon.lib(hbstr.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcommon.lib(hbdate.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbcommon.lib(hbprintf.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbrdd.lib(sdf1.obj) : error LNK2001: simbolo esterno _fltused non risolto
hbrdd.lib(dbf1.obj) : error LNK2001: simbolo esterno _fltused non risolto
rddntx.lib(dbfntx1.obj) : error LNK2001: simbolo esterno _fltused non risolto
rddcdx.lib(dbfcdx1.obj) : error LNK2001: simbolo esterno _fltused non risolto
FiveHC64.lib(richedit.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(richedi5.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(tabctrlw.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(tabctrl.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(getdir.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(fwunicode.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(icons.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(nonclient.obj) : error LNK2001: simbolo esterno memset non risolto
FiveH64.lib(getsysin.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(dlg2chr.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(winexec.obj) : error LNK2001: simbolo esterno memset non risolto
FiveHC64.lib(getfile.obj) : error LNK2001: simbolo esterno memset non risolto
..............................
minizip.lib(ioapi.obj) : error LNK2019: riferimento al simbolo esterno __imp__ftelli64 non risolto nella funzione ftell64_file_func
hbrtl.lib(gttone.obj) : error LNK2019: riferimento al simbolo esterno __imp_Beep non risolto nella funzione hb_gt_wNtTone
hbrtl.lib(itemseri.obj) : error LNK2019: riferimento al simbolo esterno _byteswap_uint64 non risolto nella funzione _hb_get_rev_uint64
hbvm.lib(dynlibhb.obj) : error LNK2019: riferimento al simbolo esterno __imp_LoadLibraryW non risolto nella funzione hb_libLoad
hbpp.lib(ppcore.obj) : error LNK2019: riferimento al simbolo esterno __imp_fputs non risolto nella funzione hb_pp_dumpEnd
hbwin.lib(win_misc_1.obj) : error LNK2019: riferimento al simbolo esterno __imp_QueryPerformanceFrequency non risolto nella funzione HB_FUN_WIN_QPCOUNTER2SEC
hbwin.lib(win_misc_1.obj) : error LNK2019: riferimento al simbolo esterno __imp_CreateEventW non risolto nella funzione HB_FUN_WIN_SYSREFRESH
hbwin.lib(win_misc_1.obj) : error LNK2019: riferimento al simbolo esterno __imp_FindResourceW non risolto nella funzione HB_FUN_WIN_LOADRESOURCE
hbwin.lib(win_misc_1.obj) : error LNK2019: riferimento al simbolo esterno __imp_MsgWaitForMultipleObjects non risolto nella funzione HB_FUN_WIN_SYSREFRESH
hbwin.lib(wapi_shellapi.obj) : error LNK2019: riferimento al simbolo esterno __imp_ShellExecuteExW non risolto nella funzione HB_FUN_WAPI_SHELLEXECUTE_WAIT
hbwin.lib(win_regc.obj) : error LNK2019: riferimento al simbolo esterno __imp_RegCreateKeyExW non risolto nella funzione HB_FUN_WIN_REGCREATEKEYEX
hbwin.lib(win_regc.obj) : error LNK2019: riferimento al simbolo esterno __imp_RegDeleteKeyW non risolto nella funzione HB_FUN_WIN_REGDELETEKEY
hbwin.lib(win_regc.obj) : error LNK2019: riferimento al simbolo esterno __imp_RegDeleteValueW non risolto nella funzione HB_FUN_WIN_REGDELETEVALUE
hbwin.lib(win_regc.obj) : error LNK2019: riferimento al simbolo esterno __imp_RegOpenKeyExW non risolto nella funzione HB_FUN_WIN_REGOPENKEYEX
hbwin.lib(win_regc.obj) : error LNK2019: riferimento al simbolo esterno __imp_RegQueryValueExW non risolto nella funzione HB_FUN_WIN_REGQUERYVALUEEX
hbwin.lib(win_regc.obj) : error LNK2019: riferimento al simbolo esterno __imp_RegSetValueExW non risolto nella funzione HB_FUN_WIN_REGSETVALUEEX
.\..\..\VC2017\Lib\gdi32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\winspool.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\comctl32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\comdlg32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\advapi32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\shell32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\ole32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\oleaut32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\odbc32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\odbccp32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\iphlpapi.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\mpr.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\version.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\wsock32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\msimg32.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\oledlg.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\psapi.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\gdiplus.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\winmm.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\Lib\libvcruntime.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\..\..\VC2017\lib\libucrt.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\lib\ucrt.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
.\lib\libcmt.lib : warning LNK4272: il tipo 'x86' del computer della libreria in conflitto con il tipo 'x64' del computer di destinazione
scuola.exe : fatal error LNK1120: 1008 esterni non risolti
]]>VC32DIR=.\..\..\VC2017
]]>VC32DIR=.\..\..\VC2017
Code: Select all | Expand
┌────────────────────────────────────────────────────────────────────────────┐
│ FWH 64 for Harbour 25.01 (VS64bits) Jan. 2025 Harbour development power │▄
│ (c) FiveTech 1993-2025 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 │█
└────────────────────────────────────────────────────────────────────────────┘█
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
Error in script usage. The correct usage is:
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" [option]
or
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" [option] store
or
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" [option] [version number]
or
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" [option] store [version number]
where [option] is: x86 | amd64 | arm | x86_amd64 | x86_arm | amd64_x86 | amd64_arm
where [version number] is either the full Windows 10 SDK version number or "8.1" to use the windows 8.1 SDK
:
The store parameter sets environment variables to support
store (rather than desktop) development.
:
For example:
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_arm store
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 10.0.10240.0
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_arm store 10.0.10240.0
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 8.1
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 store 8.1
:
Please make sure either Visual Studio or C++ Build SKU is installed.
Compiling...
Harbour 3.2.0dev (r2502110321)
Copyright (c) 1999-2024, https://harbour.github.io/
Compiling 'tutor01.prg' and generating preprocessed output to 'tutor01.ppo'...
Lines 5031, Functions/Procedures 1
Generating C source output to 'tutor01.c'... Done.
"cl" non è riconosciuto come comando interno o esterno,
un programma eseguibile o un file batch.
"rc" non è riconosciuto come comando interno o esterno,
un programma eseguibile o un file batch.
"link" non è riconosciuto come comando interno o esterno,
un programma eseguibile o un file batch.
* Linking errors *
c:\fwh64\samples>
Code: Select all | Expand
┌────────────────────────────────────────────────────────────────────────────┐
│ FWH 64 for Harbour 25.01 (VS64bits) Jan. 2025 Harbour development power │▄
│ (c) FiveTech 1993-2025 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 │█
└────────────────────────────────────────────────────────────────────────────┘█
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
Error in script usage. The correct usage is:
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" [option]
or
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" [option] store
or
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" [option] [version number]
or
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" [option] store [version number]
where [option] is: x86 | amd64 | arm | x86_amd64 | x86_arm | amd64_x86 | amd64_arm
where [version number] is either the full Windows 10 SDK version number or "8.1" to use the windows 8.1 SDK
:
The store parameter sets environment variables to support
store (rather than desktop) development.
:
For example:
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_arm store
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64 10.0.10240.0
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_arm store 10.0.10240.0
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 8.1
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 store 8.1
:
Please make sure either Visual Studio or C++ Build SKU is installed.
Compiling...
Harbour 3.2.0dev (r2502110321)
Copyright (c) 1999-2024, https://harbour.github.io/
Compiling 'tutor01.prg' and generating preprocessed output to 'tutor01.ppo'...
Lines 5031, Functions/Procedures 1
Generating C source output to 'tutor01.c'... Done.
"cl" non è riconosciuto come comando interno o esterno,
un programma eseguibile o un file batch.
"rc" non è riconosciuto come comando interno o esterno,
un programma eseguibile o un file batch.
"link" non è riconosciuto come comando interno o esterno,
un programma eseguibile o un file batch.
* Linking errors *
c:\fwh64\samples>
Excuse me, so the path that contains that definition is correct?
VC32DIR=.\..\..\VC2017
Excuse me, so the path that contains that definition is correct?
VC32DIR=.\..\..\VC2017
Code: Select all | Expand
<div class="quick-item" onclick="callHarbourFunction('Clienti')">
<img src="img/clienti.png" alt="Clienti">
<div>Clienti</div>
</div>
Code: Select all | Expand
cFolder := cFilePath( GetModuleFileName( GetInstance() ) ) + "img/"
Code: Select all | Expand
<div class="quick-item" onclick="callHarbourFunction('Clienti')">
<img src="img/clienti.png" alt="Clienti">
<div>Clienti</div>
</div>
Code: Select all | Expand
cFolder := cFilePath( GetModuleFileName( GetInstance() ) ) + "img/"
Code: Select all | Expand
function image2base64( cFile )
return "data:image/png;base64," + hb_base64encode( hb_memoRead( cFile ) )
Code: Select all | Expand
function image2base64( cFile )
return "data:image/png;base64," + hb_base64encode( hb_memoRead( cFile ) )
Code: Select all | Expand
function image2base64( cFile )
return "data:image/png;base64," + hb_base64encode( hb_memoRead( cFile ) )
Code: Select all | Expand
function image2base64( cFile )
return "data:image/png;base64," + hb_base64encode( hb_memoRead( cFile ) )
Code: Select all | Expand
cHtml := hb_StrReplace( cHtml, "{cImgHome}", cImgHome )
Code: Select all | Expand
cHtml := hb_StrReplace( cHtml, "{cImgHome}", cImgHome )
Code: Select all | Expand
cImgHome := "data:image/png;base64," + hb_base64encode( hb_memoRead( 'c:\fwh21\bitmaps\pngs\2.png' ) )
oDashBoard:cHtml := '<!DOCTYPE html> '+;
'<html lang="it"> '+;
'<span class="section-title"><img src="'+cImgHome+'" alt="Home"> home</span>'+;
'</body>'+;
'</html>'
Code: Select all | Expand
'..\bitmaps\pngs\2.png'
Code: Select all | Expand
cImgHome := "data:image/png;base64," + hb_base64encode( hb_memoRead( 'c:\fwh21\bitmaps\pngs\2.png' ) )
oDashBoard:cHtml := '<!DOCTYPE html> '+;
'<html lang="it"> '+;
'<span class="section-title"><img src="'+cImgHome+'" alt="Home"> home</span>'+;
'</body>'+;
'</html>'
Code: Select all | Expand
'..\bitmaps\pngs\2.png'
Code: Select all | Expand
cImgHome := "data:image/png;base64," + hb_base64encode( hb_memoRead( 'c:\fwh21\bitmaps\pngs\2.png' ) )
oDashBoard:cHtml := '<!DOCTYPE html> '+;
'<html lang="it"> '+;
'<span class="section-title"><img src="'+cImgHome+'" alt="Home"> home</span>'+;
'</body>'+;
'</html>'
Code: Select all | Expand
'..\bitmaps\pngs\2.png'
Code: Select all | Expand
cImgHome := "data:image/png;base64," + hb_base64encode( hb_memoRead( 'c:\fwh21\bitmaps\pngs\2.png' ) )
oDashBoard:cHtml := '<!DOCTYPE html> '+;
'<html lang="it"> '+;
'<span class="section-title"><img src="'+cImgHome+'" alt="Home"> home</span>'+;
'</body>'+;
'</html>'
Code: Select all | Expand
'..\bitmaps\pngs\2.png'
Code: Select all | Expand
Function html()
LOCAL cHtml
cImgHome := "data:image/png;base64," + hb_base64encode( hb_memoRead( 'c:\work\fwh\bitmaps\pngs\2.png' ) )
TEXT INTO cHtml
<!DOCTYPE html>
<html lang="it">
<span class="section-title">
<img src=cImgHome alt="Home"> home</span>
</body>
</html>
ENDTEXT
return cHtml
Code: Select all | Expand
Function html()
cImgHome := "data:image/png;base64," +;
hb_base64encode( hb_memoRead( 'c:\work\fwh\bitmaps\pngs\2.png' ) )
cHtml := '<!DOCTYPE html> '+;
'<html lang="it"> '+'<span class="section-title"><img src="'+cImgHome+'" alt="Home"> home</span>'+;
'</body>'+;
'</html>'
return cHtml
Code: Select all | Expand
Function html()
LOCAL cHtml
cImgHome := "data:image/png;base64," + hb_base64encode( hb_memoRead( 'c:\work\fwh\bitmaps\pngs\2.png' ) )
TEXT INTO cHtml
<!DOCTYPE html>
<html lang="it">
<span class="section-title">
<img src=cImgHome alt="Home"> home</span>
</body>
</html>
ENDTEXT
return cHtml
Code: Select all | Expand
Function html()
cImgHome := "data:image/png;base64," +;
hb_base64encode( hb_memoRead( 'c:\work\fwh\bitmaps\pngs\2.png' ) )
cHtml := '<!DOCTYPE html> '+;
'<html lang="it"> '+'<span class="section-title"><img src="'+cImgHome+'" alt="Home"> home</span>'+;
'</body>'+;
'</html>'
return cHtml
Code: Select all | Expand
Function html()
LOCAL cHtml
cImgHome := "data:image/png;base64," + hb_base64encode( hb_memoRead( 'c:\work\fwh\bitmaps\pngs\2.png' ) )
TEXT INTO cHtml
<!DOCTYPE html>
<html lang="it">
<span class="section-title">
<img src=&cImgHome alt="Home"> home</span>
</body>
</html>
ENDTEXT
msginfo(cHtml)
return cHtml
Code: Select all | Expand
Function html()
LOCAL cHtml
cImgHome := "data:image/png;base64," + hb_base64encode( hb_memoRead( 'c:\work\fwh\bitmaps\pngs\2.png' ) )
TEXT INTO cHtml
<!DOCTYPE html>
<html lang="it">
<span class="section-title">
<img src=&cImgHome alt="Home"> home</span>
</body>
</html>
ENDTEXT
msginfo(cHtml)
return cHtml
Code: Select all | Expand
#include "fivewin.ch"
FUNCTION Main()
LOCAL cHtml
LOCAL oWebView := TWebView2():New()
// Genera il contenuto HTML con immagini Base64
cHtml := Html()
// Carica l'HTML direttamente in memoria
oWebView:SetHtml( cHtml )
oWebView:SetTitle( "Dashboard" )
oWebView:SetSize( 1024, 768 )
oWebView:Run()
oWebView:Destroy()
RETURN NIL
Function html()
local cImagesPath := cFilePath( GetModuleFileName( GetInstance() ) )+"\img\"
local cImgHome := "data:image/png;base64," + hb_base64encode( hb_memoRead( cImagesPath+'home.png' ) )
local cHtml
TEXT INTO cHtml
<!DOCTYPE html>
<html lang="it">
<span class="section-title">
<img src="'"+cImgHome+"'" alt="Home"> home</span>
</body>
</html>
ENDTEXT
return cHtml
Code: Select all | Expand
#include "fivewin.ch"
FUNCTION Main()
LOCAL cHtml
LOCAL oWebView := TWebView2():New()
// Genera il contenuto HTML con immagini Base64
cHtml := Html()
// Carica l'HTML direttamente in memoria
oWebView:SetHtml( cHtml )
oWebView:SetTitle( "Dashboard" )
oWebView:SetSize( 1024, 768 )
oWebView:Run()
oWebView:Destroy()
RETURN NIL
Function html()
local cImagesPath := cFilePath( GetModuleFileName( GetInstance() ) )+"\img\"
local cImgHome := "data:image/png;base64," + hb_base64encode( hb_memoRead( cImagesPath+'home.png' ) )
local cHtml
TEXT INTO cHtml
<!DOCTYPE html>
<html lang="it">
<span class="section-title">
<img src="'"+cImgHome+"'" alt="Home"> home</span>
</body>
</html>
ENDTEXT
return cHtml
Code: Select all | Expand
#include "fivewin.ch"
FUNCTION Main()
LOCAL cHtml
LOCAL oWebView := TWebView2():New()
// Genera il contenuto HTML con immagini Base64
cHtml := Html()
// Carica l'HTML direttamente in memoria
oWebView:SetHtml( cHtml )
oWebView:SetTitle( "Dashboard" )
oWebView:SetSize( 1024, 768 )
oWebView:Run()
oWebView:Destroy()
RETURN NIL
Function Html()
local cImagesPath := cFilePath( GetModuleFileName( GetInstance() ) ) + "\img\"
local cImgHome := "data:image/png;base64," + hb_base64encode( hb_memoRead( cImagesPath + "home.png" ) )
local cHtml
// Usa TEXT INTO per la parte statica dell'HTML
TEXT INTO cHtml
<!DOCTYPE html>
<html lang="it">
<head>
<title>Dashboard</title>
</head>
<body>
<span class="section-title">
<img src="{IMGSRC}" alt="Home"> home
</span>
</body>
</html>
ENDTEXT
// Sostituisci il segnaposto {IMGSRC} con il valore di cImgHome
cHtml := StrTran( cHtml, "{IMGSRC}", cImgHome )
return cHtml
Code: Select all | Expand
#include "fivewin.ch"
FUNCTION Main()
LOCAL cHtml
LOCAL oWebView := TWebView2():New()
// Genera il contenuto HTML con immagini Base64
cHtml := Html()
// Carica l'HTML direttamente in memoria
oWebView:SetHtml( cHtml )
oWebView:SetTitle( "Dashboard" )
oWebView:SetSize( 1024, 768 )
oWebView:Run()
oWebView:Destroy()
RETURN NIL
Function Html()
local cImagesPath := cFilePath( GetModuleFileName( GetInstance() ) ) + "\img\"
local cImgHome := "data:image/png;base64," + hb_base64encode( hb_memoRead( cImagesPath + "home.png" ) )
local cHtml
// Usa TEXT INTO per la parte statica dell'HTML
TEXT INTO cHtml
<!DOCTYPE html>
<html lang="it">
<head>
<title>Dashboard</title>
</head>
<body>
<span class="section-title">
<img src="{IMGSRC}" alt="Home"> home
</span>
</body>
</html>
ENDTEXT
// Sostituisci il segnaposto {IMGSRC} con il valore di cImgHome
cHtml := StrTran( cHtml, "{IMGSRC}", cImgHome )
return cHtml
Code: Select all | Expand
Function html()
LOCAL cHtml
cImgHome := "data:image/png;base64," + hb_base64encode( hb_memoRead( 'c:\work\fwh\bitmaps\pngs\2.png' ) )
TEXT INTO cHtml
<!DOCTYPE html>
<html lang="it">
<span class="section-title">
<img src="cImgHome" alt="Home"> home</span>
</body>
</html>
ENDTEXT
cHtml := REPLACE(cHml, "cImgHome",cImgHome) //Reemplazar el literal por el contenido de la variable
return cHtml
Code: Select all | Expand
Function html()
LOCAL cHtml
cImgHome := "data:image/png;base64," + hb_base64encode( hb_memoRead( 'c:\work\fwh\bitmaps\pngs\2.png' ) )
TEXT INTO cHtml
<!DOCTYPE html>
<html lang="it">
<span class="section-title">
<img src="cImgHome" alt="Home"> home</span>
</body>
</html>
ENDTEXT
cHtml := REPLACE(cHml, "cImgHome",cImgHome) //Reemplazar el literal por el contenido de la variable
return cHtml
Code: Select all | Expand
hImages["IMGHOME"] := "data:image/png;base64," + hb_base64encode( hb_memoRead( cImagesPath + "home.png" ) )
Code: Select all | Expand
hImages["IMGHOME"] := "data:image/png;base64," + hb_base64encode( hb_memoRead( cImagesPath + "home.png" ) )
Code: Select all | Expand
#include "fivewin.ch"
function Main()
local oWnd, oWebView
DEFINE WINDOW oWnd TITLE "Invoicing"
BuildMainBar(oWnd)
oWebView := TWebView2():New( oWnd )
oWebView:SetHtml( Html() )
SET MESSAGE OF oWnd TO "Invoicing app" CENTER NOINSET
ACTIVATE WINDOW oWnd ;
ON RESIZE ( oWebView:SetSize( WndWidth( oWebView:oWnd:hWnd ) - 17,;
WndHeight( oWebView:oWnd:hWnd ) - 80 ) )
RETURN NIL
Function Html()
LOCAL hImages := LoadImages() // Carica l'hash delle immagini
LOCAL cHtml
LOCAL cKey
TEXT INTO cHtml
<!DOCTYPE html>
<html>
<head>
<title>Identify</title>
<style>
body {
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
background-color: #F2F2F2;
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
}
.container {
max-width: 400px;
margin: 0 auto;
padding: 40px;
background-color: #FFFFFF;
border-radius: 5px;
display: flex;
flex-direction: column;
align-items: center;
box-shadow: 0px 0px 44px rgba(0, 0, 0, 0.7) !important;
overflow:none !important;
}
.logo {
margin-bottom: 40px;
display: flex;
align-items: center;
}
.logo img {
max-width: 100%;
height: auto;
}
.btn {
display: inline-block;
padding: 12px 24px;
background-color: #4CAF50;
color: #FFFFFF;
font-size: 16px;
text-decoration: none;
border-radius: 5px;
transition: background-color 0.3s ease;
}
.btn:hover {
background-color: #45A049;
}
.form-group {
margin-bottom: 20px;
}
.form-group label {
display: block;
font-size: 16px;
font-weight: bold;
margin-bottom: 5px;
color: #333333;
}
.form-group input {
width: 100%;
padding: 12px;
font-size: 16px;
border-radius: 5px;
border: 1px solid #CCCCCC;
}
.btn {
display: inline-block;
padding: 12px 24px;
background-color: #4CAF50;
color: #FFFFFF;
font-size: 16px;
text-decoration: none;
border-radius: 5px;
transition: background-color 0.3s ease;
}
.btn:hover {
background-color: #45A049;
}
body {
background-color: #3498db;
}
.btn {
background-color: #2980b9;
}
.btn:hover {
background-color: #1a5276;
.logo {
margin-bottom: 40px;
}
.logo img {
max-width: 100%;
height: auto;
}
}
.myinput {
width: auto !important;
}
.mybtn {
text-align:center;
}
</style>
</head>
<body>
<div class="container">
<div class="logo">
<img src="{IMGHOME}" alt="Home">
</div>
</div>
</body>
</html>
ENDTEXT
FOR EACH cKey IN hImages:Keys
cHtml := StrTran(cHtml, "{" + cKey + "}", hImages[cKey])
NEXT
return cHtml
Function LoadImages()
LOCAL hImages := {=>}
hImages["IMGHOME"] := "data:image/png;base64," + hb_base64encode( hb_memoRead( "DASH_HOME" ) )
RETURN hImages
static function BuildMainBar(oWnd)
local oBar
DEFINE BUTTONBAR oBar OF oWnd 2015 SIZE 90, 60
return nil
Code: Select all | Expand
1 24 "WindowsXP.Manifest"
DASH_HOME 10 "dashboard/home.png"
Code: Select all | Expand
#include "fivewin.ch"
function Main()
local oWnd, oWebView
DEFINE WINDOW oWnd TITLE "Invoicing"
BuildMainBar(oWnd)
oWebView := TWebView2():New( oWnd )
oWebView:SetHtml( Html() )
SET MESSAGE OF oWnd TO "Invoicing app" CENTER NOINSET
ACTIVATE WINDOW oWnd ;
ON RESIZE ( oWebView:SetSize( WndWidth( oWebView:oWnd:hWnd ) - 17,;
WndHeight( oWebView:oWnd:hWnd ) - 80 ) )
RETURN NIL
Function Html()
LOCAL hImages := LoadImages() // Carica l'hash delle immagini
LOCAL cHtml
LOCAL cKey
TEXT INTO cHtml
<!DOCTYPE html>
<html>
<head>
<title>Identify</title>
<style>
body {
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
background-color: #F2F2F2;
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
}
.container {
max-width: 400px;
margin: 0 auto;
padding: 40px;
background-color: #FFFFFF;
border-radius: 5px;
display: flex;
flex-direction: column;
align-items: center;
box-shadow: 0px 0px 44px rgba(0, 0, 0, 0.7) !important;
overflow:none !important;
}
.logo {
margin-bottom: 40px;
display: flex;
align-items: center;
}
.logo img {
max-width: 100%;
height: auto;
}
.btn {
display: inline-block;
padding: 12px 24px;
background-color: #4CAF50;
color: #FFFFFF;
font-size: 16px;
text-decoration: none;
border-radius: 5px;
transition: background-color 0.3s ease;
}
.btn:hover {
background-color: #45A049;
}
.form-group {
margin-bottom: 20px;
}
.form-group label {
display: block;
font-size: 16px;
font-weight: bold;
margin-bottom: 5px;
color: #333333;
}
.form-group input {
width: 100%;
padding: 12px;
font-size: 16px;
border-radius: 5px;
border: 1px solid #CCCCCC;
}
.btn {
display: inline-block;
padding: 12px 24px;
background-color: #4CAF50;
color: #FFFFFF;
font-size: 16px;
text-decoration: none;
border-radius: 5px;
transition: background-color 0.3s ease;
}
.btn:hover {
background-color: #45A049;
}
body {
background-color: #3498db;
}
.btn {
background-color: #2980b9;
}
.btn:hover {
background-color: #1a5276;
.logo {
margin-bottom: 40px;
}
.logo img {
max-width: 100%;
height: auto;
}
}
.myinput {
width: auto !important;
}
.mybtn {
text-align:center;
}
</style>
</head>
<body>
<div class="container">
<div class="logo">
<img src="{IMGHOME}" alt="Home">
</div>
</div>
</body>
</html>
ENDTEXT
FOR EACH cKey IN hImages:Keys
cHtml := StrTran(cHtml, "{" + cKey + "}", hImages[cKey])
NEXT
return cHtml
Function LoadImages()
LOCAL hImages := {=>}
hImages["IMGHOME"] := "data:image/png;base64," + hb_base64encode( hb_memoRead( "DASH_HOME" ) )
RETURN hImages
static function BuildMainBar(oWnd)
local oBar
DEFINE BUTTONBAR oBar OF oWnd 2015 SIZE 90, 60
return nil
Code: Select all | Expand
1 24 "WindowsXP.Manifest"
DASH_HOME 10 "dashboard/home.png"
Code: Select all | Expand
#pragma BEGINDUMP
#include <windows.h>
HB_FUNC( SIZEOFRESOURCE )
{
HMODULE hModule = (HMODULE) hb_parnl(1);
HRSRC hResInfo = (HRSRC) hb_parnl(2);
hb_retnl(SizeofResource(hModule, hResInfo));
}
HB_FUNC( FINDRESOURCE )
{
HMODULE hModule = (HMODULE) hb_parnl(1);
LPCSTR lpName = (LPCSTR) hb_parc(2);
LPCSTR lpType = (LPCSTR) hb_parc(3);
hb_retnl((LONG_PTR) FindResource(hModule, lpName, lpType));
}
HB_FUNC( LOADRESOURCE )
{
HMODULE hModule = (HMODULE) hb_parnl(1);
HRSRC hResInfo = (HRSRC) hb_parnl(2);
hb_retnl((LONG_PTR) LoadResource(hModule, hResInfo));
}
HB_FUNC( LOCKRESOURCE )
{
HGLOBAL hResData = (HGLOBAL) hb_parnl(1);
hb_retnl((LONG_PTR) LockResource(hResData));
}
#pragma ENDDUMP
Code: Select all | Expand
#pragma BEGINDUMP
#include <windows.h>
HB_FUNC( SIZEOFRESOURCE )
{
HMODULE hModule = (HMODULE) hb_parnl(1);
HRSRC hResInfo = (HRSRC) hb_parnl(2);
hb_retnl(SizeofResource(hModule, hResInfo));
}
HB_FUNC( FINDRESOURCE )
{
HMODULE hModule = (HMODULE) hb_parnl(1);
LPCSTR lpName = (LPCSTR) hb_parc(2);
LPCSTR lpType = (LPCSTR) hb_parc(3);
hb_retnl((LONG_PTR) FindResource(hModule, lpName, lpType));
}
HB_FUNC( LOADRESOURCE )
{
HMODULE hModule = (HMODULE) hb_parnl(1);
HRSRC hResInfo = (HRSRC) hb_parnl(2);
hb_retnl((LONG_PTR) LoadResource(hModule, hResInfo));
}
HB_FUNC( LOCKRESOURCE )
{
HGLOBAL hResData = (HGLOBAL) hb_parnl(1);
hb_retnl((LONG_PTR) LockResource(hResData));
}
#pragma ENDDUMP
Code: Select all | Expand
FUNCTION LoadResourceToBase64(cResourceName)
LOCAL cResourceData := crestostr(cResourceName, RT_RCDATA) // Legge la risorsa come stringa
LOCAL cBase64
IF EMPTY(cResourceData)
MsgStop("Error: Unable to read file'" + cResourceName + "'.")
RETURN NIL
ENDIF
//MsgInfo("Resource '" + cResourceName + "' read correctly.")
// Converte i dati della risorsa in Base64
cBase64 := hb_base64encode(cResourceData, LEN(cResourceData))
IF EMPTY(cBase64)
MsgStop("Error: Base64 conversion failed.")
RETURN NIL
ENDIF
//MsgInfo("Base64 conversion completed.")
RETURN "data:image/png;base64," + cBase64
FUNCTION LoadImageFromFile(cFilePath)
LOCAL cFileContent := hb_MemoRead(cFilePath)
LOCAL cBase64
IF EMPTY(cFileContent)
MsgStop("Error: Unable to read file '" + cFilePath + "'.")
RETURN NIL
ENDIF
cBase64 := hb_base64encode(cFileContent, LEN(cFileContent))
RETURN "data:image/png;base64," + cBase64
Code: Select all | Expand
FUNCTION LoadResourceToBase64(cResourceName)
LOCAL cResourceData := crestostr(cResourceName, RT_RCDATA) // Legge la risorsa come stringa
LOCAL cBase64
IF EMPTY(cResourceData)
MsgStop("Error: Unable to read file'" + cResourceName + "'.")
RETURN NIL
ENDIF
//MsgInfo("Resource '" + cResourceName + "' read correctly.")
// Converte i dati della risorsa in Base64
cBase64 := hb_base64encode(cResourceData, LEN(cResourceData))
IF EMPTY(cBase64)
MsgStop("Error: Base64 conversion failed.")
RETURN NIL
ENDIF
//MsgInfo("Base64 conversion completed.")
RETURN "data:image/png;base64," + cBase64
FUNCTION LoadImageFromFile(cFilePath)
LOCAL cFileContent := hb_MemoRead(cFilePath)
LOCAL cBase64
IF EMPTY(cFileContent)
MsgStop("Error: Unable to read file '" + cFilePath + "'.")
RETURN NIL
ENDIF
cBase64 := hb_base64encode(cFileContent, LEN(cFileContent))
RETURN "data:image/png;base64," + cBase64
Code: Select all | Expand
FUNCTION LoadResourceToBase64(cResourceName, cMimeType)
LOCAL cResourceData := crestostr(cResourceName, RT_RCDATA) // Read the resource as a string
LOCAL cBase64
IF EMPTY(cResourceData)
MsgStop("Error: Unable to read resource '" + cResourceName + "'.")
RETURN NIL
ENDIF
MsgInfo("Resource '" + cResourceName + "' loaded successfully.")
// Convert resource data to Base64
cBase64 := hb_base64encode(cResourceData, LEN(cResourceData))
IF EMPTY(cBase64)
MsgStop("Error: Base64 conversion failed.")
RETURN NIL
ENDIF
MsgInfo("Base64 conversion completed.")
// Return the Base64 string with the correct MIME type
RETURN "data:" + cMimeType + ";base64," + cBase64
Code: Select all | Expand
FUNCTION LoadResourceToBase64(cResourceName, cMimeType)
LOCAL cResourceData := crestostr(cResourceName, RT_RCDATA) // Read the resource as a string
LOCAL cBase64
IF EMPTY(cResourceData)
MsgStop("Error: Unable to read resource '" + cResourceName + "'.")
RETURN NIL
ENDIF
MsgInfo("Resource '" + cResourceName + "' loaded successfully.")
// Convert resource data to Base64
cBase64 := hb_base64encode(cResourceData, LEN(cResourceData))
IF EMPTY(cBase64)
MsgStop("Error: Base64 conversion failed.")
RETURN NIL
ENDIF
MsgInfo("Base64 conversion completed.")
// Return the Base64 string with the correct MIME type
RETURN "data:" + cMimeType + ";base64," + cBase64
Code: Select all | Expand
function Main()
LOCAL oRs,oCn,oError,oQry,cQryMat
SET DATE BRIT
SET CENTURY ON
CursorWait()
oCn := Maria_Connect( aStr[1] )
oRs := oCn:Query("SELECT nfiscal,cmat,qte,qtedig FROM consumo WHERE nfiscal LIKE '000005829%'")
cQryMat := ""
DO WHILE .NOT. oRs:Eof()
cQryMat += "'"+oRs:cmat+"',"
? oRs:qte,oRs:qtedig,oRs:cmat
oRs:Skip()
ENDDO
oRs:GoTop()
RETURN NIL
Code: Select all | Expand
function Main()
LOCAL oRs,oCn,oError,oQry,cQryMat
SET DATE BRIT
SET CENTURY ON
CursorWait()
oCn := Maria_Connect( aStr[1] )
oRs := oCn:Query("SELECT nfiscal,cmat,qte,qtedig FROM consumo WHERE nfiscal LIKE '000005829%'")
cQryMat := ""
DO WHILE .NOT. oRs:Eof()
cQryMat += "'"+oRs:cmat+"',"
? oRs:qte,oRs:qtedig,oRs:cmat
oRs:Skip()
ENDDO
oRs:GoTop()
RETURN NIL
Code: Select all | Expand
function Main()
LOCAL nVal1,nVal2,nRes
SET DATE BRIT
SET CENTURY ON
nVal1 := 2.3432
nVal2 := 2.3923
nRes := nVal1 * nVal2
? nRes
RETURN NIL
Code: Select all | Expand
function Main()
LOCAL nVal1,nVal2,nRes
SET DATE BRIT
SET CENTURY ON
nVal1 := 2.3432
nVal2 := 2.3923
nRes := nVal1 * nVal2
? nRes
RETURN NIL
Code: Select all | Expand
oRs := oCn:Query("SELECT nfiscal,cmat,qte,qtedig,valor FROM consumo WHERE nfiscal LIKE '00023332601%'")
? oRs:qte,oRs:valor,oRs:qte*oRs:valor
In FWH2311 shows this:Code: Select all | Expand
oRs := oCn:Query("SELECT nfiscal,cmat,qte,qtedig,valor FROM consumo WHERE nfiscal LIKE '00023332601%'")
? oRs:qte,oRs:valor,oRs:qte*oRs:valor
In FWH2311 shows this:Code: Select all | Expand
oRs := oCn:Query("SELECT nfiscal,cmat,qte,qtedig,valor FROM consumo WHERE nfiscal LIKE '00023332601%'")
? oRs:qte,oRs:valor,oRs:qte*oRs:valor
]]>1) Good morning your point about the numeric fields is correct This is an unfortunate bug I'll try to fix it as soon as I can
Code: Select all | Expand
oRs := oCn:Query("SELECT nfiscal,cmat,qte,qtedig,valor FROM consumo WHERE nfiscal LIKE '00023332601%'")
? oRs:qte,oRs:valor,oRs:qte*oRs:valor
]]>1) Good morning your point about the numeric fields is correct This is an unfortunate bug I'll try to fix it as soon as I can
Code: Select all | Expand
oRs := oCn:Query("SELECT nfiscal,cmat,qte,qtedig,valor FROM consumo WHERE nfiscal LIKE '00023332601%'")
? oRs:qte,oRs:valor,oRs:qte*oRs:valor
1) Good morning your point about the numeric fields is correct This is an unfortunate bug I'll try to fix it as soon as I can
Code: Select all | Expand
oRs := oCn:Query("SELECT nfiscal,cmat,qte,qtedig,valor FROM consumo WHERE nfiscal LIKE '00023332601%'")
? oRs:qte,oRs:valor,oRs:qte*oRs:valor
1) Good morning your point about the numeric fields is correct This is an unfortunate bug I'll try to fix it as soon as I can
Code: Select all | Expand
DELIMITER //
CREATE FUNCTION CurrentLease(
pPropID CHAR( 25 ), pDate DATE
)
RETURNS CHAR( 13 ) DETERMINISTIC
BEGIN
DECLARE cLease CHAR( 13 ) DEFAULT '' ;
SELECT leaseID INTO cLease
FROM leases
WHERE propertyID = pPropID
AND StartDate <= pDate
AND ( IsMtoM OR EndDate IS NULL OR EndDate >= pDate )
ORDER BY startdate DESC
LIMIT 1 ;
RETURN( cLease ) ;
END //
DELIMITER ;
The sql executes fine using HeidiSQL connected to the same db and creates the function.Code: Select all | Expand
DELIMITER //
CREATE FUNCTION CurrentLease(
pPropID CHAR( 25 ), pDate DATE
)
RETURNS CHAR( 13 ) DETERMINISTIC
BEGIN
DECLARE cLease CHAR( 13 ) DEFAULT '' ;
SELECT leaseID INTO cLease
FROM leases
WHERE propertyID = pPropID
AND StartDate <= pDate
AND ( IsMtoM OR EndDate IS NULL OR EndDate >= pDate )
ORDER BY startdate DESC
LIMIT 1 ;
RETURN( cLease ) ;
END //
DELIMITER ;
The sql executes fine using HeidiSQL connected to the same db and creates the function.]]>You're correct that pdftk has limitations when it comes to handling UTF-8 characters, especially for languages like Romanian that use diacritics (e.g., ă, î, ș, ț). This is a known issue with pdftk, as it doesn't fully support UTF-8 encoding for form filling, often resulting in garbled or missing characters. Since you're working with FiveWin and Harbour, and considering the tPdf class, let’s explore your options for filling PDF form fields with UTF-8 support directly from your program.
The tPdf Class in FiveWin/Harbour
The tPdf class in FiveWin (a library for Harbour and Clipper) is primarily designed for generating PDF files from scratch, not for manipulating existing PDFs or filling form fields in pre-existing documents. It’s a lightweight tool based on basic PDF generation principles, similar to early versions of libraries like FPDF. From the available documentation and examples (typically found in the FiveWin distribution or community forums), tPdf lacks built-in methods for:
Loading an existing PDF.
Interacting with form fields (e.g., filling text fields or setting checkboxes).
Handling AcroForms (the PDF form structure).
The examples provided with tPdf (e.g., creating text, lines, or simple graphics) focus on generating new PDFs rather than editing existing ones. As a result, tPdf is not suitable for your use case of filling form fields in an existing PDF with UTF-8 support.
Alternative Approaches
Since tPdf doesn’t meet your needs, here are some viable alternatives to achieve your goal directly from your Harbour/FiveWin program:
1. Use a Different PDF Library with Form-Filling Capabilities
You can integrate a more capable PDF library into your Harbour/FiveWin application. Here are two options that support form filling and UTF-8:
TCPDF (via PHP Integration)
TCPDF is a PHP library that supports UTF-8 and can fill PDF forms. While Harbour doesn’t natively interface with PHP, you could:
Write a small PHP script using TCPDF to handle the PDF manipulation.
Call this script from Harbour using EXECUTE or RUN to pass data (e.g., via a temporary file or command-line arguments).
TCPDF’s setFormField() method allows you to fill text fields and checkboxes in an existing PDF, and it supports UTF-8 with appropriate font embedding (e.g., DejaVu Sans).
Challenges: Requires setting up a PHP environment and handling inter-process communication, which adds complexity.
iText (via Java or C# Integration)
iText is a powerful PDF library (available in Java and C#) that supports form filling with full UTF-8 support. You could:
Create a small Java or C# utility to process the PDF.
Call it from Harbour using a system command or a DLL interface (if you compile it to a native library).
iText’s AcroFields class can fill text fields and checkboxes while preserving UTF-8 characters.
Challenges: Requires Java or .NET setup and bridging Harbour to another language.
2. Use a Command-Line Tool with Better UTF-8 Support
Instead of pdftk, you could switch to a tool that handles UTF-8 better and call it from your Harbour program:
QPDF
QPDF is a command-line tool that can manipulate PDFs, including filling forms via its form-filling capabilities (though it’s less straightforward than pdftk). It has better UTF-8 support when paired with a proper FDF (Form Data Format) file. You’d need to:
Generate an FDF file with UTF-8 encoded data from Harbour.
Use QPDF to merge the FDF into the PDF.
Example Workflow:
harbour
cFDF := 'FDF content with UTF-8 data'
hb_MemoWrit("data.fdf", cFDF)
RUN 'qpdf --replace-input input.pdf --fill-form data.fdf output.pdf'
pdftk-java
This is a maintained fork of pdftk with improved UTF-8 support. It might handle Romanian characters better than the original pdftk. You can test it by calling it from Harbour:
harbour
RUN 'pdftk-java input.pdf fill_form data.fdf output output.pdf'
3. Extend tPdf or Write Custom Code
If you’re comfortable with Harbour and PDF internals, you could extend tPdf or write a custom solution:
Parse the existing PDF manually (PDF is a text-based format at its core).
Locate the AcroForm fields (text fields and checkboxes are defined in the PDF structure).
Modify their values with UTF-8 encoded strings.
Rebuild the PDF stream.
This approach requires deep knowledge of the PDF specification (ISO 32000) and is time-intensive. Libraries like tPdf don’t provide this level of manipulation out of the box, so you’d essentially be building a mini PDF editor.
4. Use a Harbour-Compatible Library
There’s no widely known Harbour-native library for PDF form filling with UTF-8 support, but you could explore:
Haru (libHaru): A C library for PDF generation with some editing capabilities. It supports UTF-8 but doesn’t natively handle form filling. You’d need to wrap it in Harbour via a C interface.
Custom FFI: Use Harbour’s foreign function interface (FFI) to call a C/C++ library like Poppler or MuPDF, which can manipulate PDFs and handle UTF-8.
Recommendation
Given your constraints and the need for simplicity:
Short-Term Solution: Switch to pdftk-java or QPDF. Test if they handle Romanian UTF-8 characters correctly when called from Harbour. This keeps your workflow similar to what you’re already doing.
Long-Term Solution: Integrate TCPDF via a PHP script. It’s well-documented, supports UTF-8 fully (with font embedding), and can fill forms in existing PDFs. You’d call it from Harbour like this:
harbour
cCmd := 'php fill_pdf.php input.pdf "field1=ăîșț" "checkbox1=on" output.pdf'
RUN cCmd
Conclusion
The tPdf class in FiveWin/Harbour isn’t designed for your use case. For direct form filling with UTF-8 support, you’ll need to either leverage an external tool (like pdftk-java or QPDF) or integrate a more capable library (like TCPDF or iText). The easiest path is to test pdftk-java first, as it’s a drop-in replacement for pdftk with potential UTF-8 improvements. If that fails, TCPDF via PHP is a robust, Harbour-compatible option. Let me know if you’d like help crafting a specific implementation!
]]>You're correct that pdftk has limitations when it comes to handling UTF-8 characters, especially for languages like Romanian that use diacritics (e.g., ă, î, ș, ț). This is a known issue with pdftk, as it doesn't fully support UTF-8 encoding for form filling, often resulting in garbled or missing characters. Since you're working with FiveWin and Harbour, and considering the tPdf class, let’s explore your options for filling PDF form fields with UTF-8 support directly from your program.
The tPdf Class in FiveWin/Harbour
The tPdf class in FiveWin (a library for Harbour and Clipper) is primarily designed for generating PDF files from scratch, not for manipulating existing PDFs or filling form fields in pre-existing documents. It’s a lightweight tool based on basic PDF generation principles, similar to early versions of libraries like FPDF. From the available documentation and examples (typically found in the FiveWin distribution or community forums), tPdf lacks built-in methods for:
Loading an existing PDF.
Interacting with form fields (e.g., filling text fields or setting checkboxes).
Handling AcroForms (the PDF form structure).
The examples provided with tPdf (e.g., creating text, lines, or simple graphics) focus on generating new PDFs rather than editing existing ones. As a result, tPdf is not suitable for your use case of filling form fields in an existing PDF with UTF-8 support.
Alternative Approaches
Since tPdf doesn’t meet your needs, here are some viable alternatives to achieve your goal directly from your Harbour/FiveWin program:
1. Use a Different PDF Library with Form-Filling Capabilities
You can integrate a more capable PDF library into your Harbour/FiveWin application. Here are two options that support form filling and UTF-8:
TCPDF (via PHP Integration)
TCPDF is a PHP library that supports UTF-8 and can fill PDF forms. While Harbour doesn’t natively interface with PHP, you could:
Write a small PHP script using TCPDF to handle the PDF manipulation.
Call this script from Harbour using EXECUTE or RUN to pass data (e.g., via a temporary file or command-line arguments).
TCPDF’s setFormField() method allows you to fill text fields and checkboxes in an existing PDF, and it supports UTF-8 with appropriate font embedding (e.g., DejaVu Sans).
Challenges: Requires setting up a PHP environment and handling inter-process communication, which adds complexity.
iText (via Java or C# Integration)
iText is a powerful PDF library (available in Java and C#) that supports form filling with full UTF-8 support. You could:
Create a small Java or C# utility to process the PDF.
Call it from Harbour using a system command or a DLL interface (if you compile it to a native library).
iText’s AcroFields class can fill text fields and checkboxes while preserving UTF-8 characters.
Challenges: Requires Java or .NET setup and bridging Harbour to another language.
2. Use a Command-Line Tool with Better UTF-8 Support
Instead of pdftk, you could switch to a tool that handles UTF-8 better and call it from your Harbour program:
QPDF
QPDF is a command-line tool that can manipulate PDFs, including filling forms via its form-filling capabilities (though it’s less straightforward than pdftk). It has better UTF-8 support when paired with a proper FDF (Form Data Format) file. You’d need to:
Generate an FDF file with UTF-8 encoded data from Harbour.
Use QPDF to merge the FDF into the PDF.
Example Workflow:
harbour
cFDF := 'FDF content with UTF-8 data'
hb_MemoWrit("data.fdf", cFDF)
RUN 'qpdf --replace-input input.pdf --fill-form data.fdf output.pdf'
pdftk-java
This is a maintained fork of pdftk with improved UTF-8 support. It might handle Romanian characters better than the original pdftk. You can test it by calling it from Harbour:
harbour
RUN 'pdftk-java input.pdf fill_form data.fdf output output.pdf'
3. Extend tPdf or Write Custom Code
If you’re comfortable with Harbour and PDF internals, you could extend tPdf or write a custom solution:
Parse the existing PDF manually (PDF is a text-based format at its core).
Locate the AcroForm fields (text fields and checkboxes are defined in the PDF structure).
Modify their values with UTF-8 encoded strings.
Rebuild the PDF stream.
This approach requires deep knowledge of the PDF specification (ISO 32000) and is time-intensive. Libraries like tPdf don’t provide this level of manipulation out of the box, so you’d essentially be building a mini PDF editor.
4. Use a Harbour-Compatible Library
There’s no widely known Harbour-native library for PDF form filling with UTF-8 support, but you could explore:
Haru (libHaru): A C library for PDF generation with some editing capabilities. It supports UTF-8 but doesn’t natively handle form filling. You’d need to wrap it in Harbour via a C interface.
Custom FFI: Use Harbour’s foreign function interface (FFI) to call a C/C++ library like Poppler or MuPDF, which can manipulate PDFs and handle UTF-8.
Recommendation
Given your constraints and the need for simplicity:
Short-Term Solution: Switch to pdftk-java or QPDF. Test if they handle Romanian UTF-8 characters correctly when called from Harbour. This keeps your workflow similar to what you’re already doing.
Long-Term Solution: Integrate TCPDF via a PHP script. It’s well-documented, supports UTF-8 fully (with font embedding), and can fill forms in existing PDFs. You’d call it from Harbour like this:
harbour
cCmd := 'php fill_pdf.php input.pdf "field1=ăîșț" "checkbox1=on" output.pdf'
RUN cCmd
Conclusion
The tPdf class in FiveWin/Harbour isn’t designed for your use case. For direct form filling with UTF-8 support, you’ll need to either leverage an external tool (like pdftk-java or QPDF) or integrate a more capable library (like TCPDF or iText). The easiest path is to test pdftk-java first, as it’s a drop-in replacement for pdftk with potential UTF-8 improvements. If that fails, TCPDF via PHP is a robust, Harbour-compatible option. Let me know if you’d like help crafting a specific implementation!
Code: Select all | Expand
FUNCTION HB_Default( xVar, xValue )
IF ValType( xVar ) != ValType( xValue )
xVar := xValue
ENDIF
RETURN NIL
Code: Select all | Expand
FUNCTION HB_Default( xVar, xValue )
IF ValType( xVar ) != ValType( xValue )
xVar := xValue
ENDIF
RETURN NIL
Code: Select all | Expand
//----------------------------------------------------------------------------//
// Clase: TGroq
// Desarrollado por: Carlos Sincuir
// Version FWH: 25.01
// Obtenga su API key desde https://console.groq.com/login
//----------------------------------------------------------------------------//
#include "FiveWin.ch"
#include "hbcurl.ch"
function Main()
local oChat := TGroq():New("tuApiKey")
oChat:Send( "Hola, quien eres ?" )
? oChat:GetValue()
oChat:End()
return nil
//----------------------------------------------------------------------------//
CLASS TGroq
DATA cKey INIT ""
DATA cModel INIT "llama3-70b-8192"
DATA cResponse
DATA cUrl INIT ""
DATA cUploadUrl INIT ""
DATA hCurl
DATA nError INIT 0
DATA nHttpCode INIT 0
DATA nTemperature INIT 0
METHOD New( cKey, cModel )
METHOD Send( cPrompt )
METHOD End()
METHOD GetValue()
ENDCLASS
//----------------------------------------------------------------------------//
METHOD New( cKey, cModel ) CLASS TGroq
if Empty( cKey )
::cKey = GetEnv( "GROQ_API_KEY" )
else
::cKey = cKey
endif
if ! Empty( cModel )
::cModel = cModel
endif
if Val( SubStr( Curl_Version_Info()[ 1 ], 1, RAt( ".", Curl_Version_Info()[ 1 ] ) - 1 ) ) - 8.10 > 0.2
MsgAlert( "Please use an updated curl DLL" )
endif
::cUrl = "https://api.groq.com/openai/v1/chat/completions"
::hCurl = curl_easy_init()
return Self
//----------------------------------------------------------------------------//
METHOD End() CLASS TGroq
curl_easy_cleanup( ::hCurl )
::hCurl = nil
return nil
//----------------------------------------------------------------------------//
METHOD GetValue() CLASS TGroq
local uValue, hResponse
if ! Empty( ::cResponse )
uValue = hb_jsonDecode( ::cResponse, @hResponse )
endif
if hb_isHash( hResponse )
TRY
uValue = hResponse[ "choices" ][ 1 ][ "message" ][ "content" ]
CATCH
TRY
uValue = hResponse[ "error" ][ "message" ]
CATCH
uValue = "Error, no response"
END
END
endif
return uValue
//----------------------------------------------------------------------------//
METHOD Send( cPrompt ) CLASS TGroq
local aHeaders, cJson, hRequest, hMessages
curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, .T. )
curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cUrl )
aHeaders := { "Content-Type: application/json",;
"Authorization: Bearer " + ::cKey } // Tu API key de Groq
curl_easy_setopt( ::hCurl, HB_CURLOPT_HTTPHEADER, aHeaders )
curl_easy_setopt( ::hCurl, HB_CURLOPT_USERNAME, "" )
curl_easy_setopt( ::hCurl, HB_CURLOPT_DL_BUFF_SETUP )
curl_easy_setopt( ::hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
// Estructura del JSON para Groq
hMessages := { { "role" => "user", "content" => cPrompt } }
hRequest := { "model" => ::cModel,;
"temperature" => ::nTemperature,;
"messages" => hMessages }
cJson := hb_jsonEncode( hRequest )
curl_easy_setopt( ::hCurl, HB_CURLOPT_POSTFIELDS, cJson )
::nError := curl_easy_perform( ::hCurl )
curl_easy_getinfo( ::hCurl, HB_CURLINFO_RESPONSE_CODE, @::nHttpCode )
if ::nError == HB_CURLE_OK
::cResponse := curl_easy_dl_buff_get( ::hCurl )
else
::cResponse := "Error code " + Str( ::nError )
endif
return ::cResponse
//----------------------------------------------------------------------------//
Code: Select all | Expand
//----------------------------------------------------------------------------//
// Clase: TGroq
// Desarrollado por: Carlos Sincuir
// Version FWH: 25.01
// Obtenga su API key desde https://console.groq.com/login
//----------------------------------------------------------------------------//
#include "FiveWin.ch"
#include "hbcurl.ch"
function Main()
local oChat := TGroq():New("tuApiKey")
oChat:Send( "Hola, quien eres ?" )
? oChat:GetValue()
oChat:End()
return nil
//----------------------------------------------------------------------------//
CLASS TGroq
DATA cKey INIT ""
DATA cModel INIT "llama3-70b-8192"
DATA cResponse
DATA cUrl INIT ""
DATA cUploadUrl INIT ""
DATA hCurl
DATA nError INIT 0
DATA nHttpCode INIT 0
DATA nTemperature INIT 0
METHOD New( cKey, cModel )
METHOD Send( cPrompt )
METHOD End()
METHOD GetValue()
ENDCLASS
//----------------------------------------------------------------------------//
METHOD New( cKey, cModel ) CLASS TGroq
if Empty( cKey )
::cKey = GetEnv( "GROQ_API_KEY" )
else
::cKey = cKey
endif
if ! Empty( cModel )
::cModel = cModel
endif
if Val( SubStr( Curl_Version_Info()[ 1 ], 1, RAt( ".", Curl_Version_Info()[ 1 ] ) - 1 ) ) - 8.10 > 0.2
MsgAlert( "Please use an updated curl DLL" )
endif
::cUrl = "https://api.groq.com/openai/v1/chat/completions"
::hCurl = curl_easy_init()
return Self
//----------------------------------------------------------------------------//
METHOD End() CLASS TGroq
curl_easy_cleanup( ::hCurl )
::hCurl = nil
return nil
//----------------------------------------------------------------------------//
METHOD GetValue() CLASS TGroq
local uValue, hResponse
if ! Empty( ::cResponse )
uValue = hb_jsonDecode( ::cResponse, @hResponse )
endif
if hb_isHash( hResponse )
TRY
uValue = hResponse[ "choices" ][ 1 ][ "message" ][ "content" ]
CATCH
TRY
uValue = hResponse[ "error" ][ "message" ]
CATCH
uValue = "Error, no response"
END
END
endif
return uValue
//----------------------------------------------------------------------------//
METHOD Send( cPrompt ) CLASS TGroq
local aHeaders, cJson, hRequest, hMessages
curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, .T. )
curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cUrl )
aHeaders := { "Content-Type: application/json",;
"Authorization: Bearer " + ::cKey } // Tu API key de Groq
curl_easy_setopt( ::hCurl, HB_CURLOPT_HTTPHEADER, aHeaders )
curl_easy_setopt( ::hCurl, HB_CURLOPT_USERNAME, "" )
curl_easy_setopt( ::hCurl, HB_CURLOPT_DL_BUFF_SETUP )
curl_easy_setopt( ::hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
// Estructura del JSON para Groq
hMessages := { { "role" => "user", "content" => cPrompt } }
hRequest := { "model" => ::cModel,;
"temperature" => ::nTemperature,;
"messages" => hMessages }
cJson := hb_jsonEncode( hRequest )
curl_easy_setopt( ::hCurl, HB_CURLOPT_POSTFIELDS, cJson )
::nError := curl_easy_perform( ::hCurl )
curl_easy_getinfo( ::hCurl, HB_CURLINFO_RESPONSE_CODE, @::nHttpCode )
if ::nError == HB_CURLE_OK
::cResponse := curl_easy_dl_buff_get( ::hCurl )
else
::cResponse := "Error code " + Str( ::nError )
endif
return ::cResponse
//----------------------------------------------------------------------------//
Code: Select all | Expand
#if ( FW_VersionNo >= 22060 )
tWindow():lHtml := FALSE
#endif
tPreview():lListViewHide := TRUE
tPreview():bSetUp := { |oPreview, oWnd| oWnd:oMenu:End() }
]]>Code: Select all | Expand
#if ( FW_VersionNo >= 22060 )
tWindow():lHtml := FALSE
#endif
tPreview():lListViewHide := TRUE
tPreview():bSetUp := { |oPreview, oWnd| oWnd:oMenu:End() }
]]>Code: Select all | Expand
'__chkstk_noalloc'
It is in cw32.lib.]]>Code: Select all | Expand
'__chkstk_noalloc'
It is in cw32.lib.]]>Code: Select all | Expand
?op:icons // en este punto esta visible
NetUse( op:temp+"kardeing",.F.,"tmp" )
Set Filter to tmp->flag != "B"
tmp->(DbGoTop())
aCols := {;
{"codigo" ,"Codigo" ,NIL, 80 ,AL_LEFT},;
{"op" ,"Op" ,NIL, 80 ,AL_LEFT},;
{"partida" ,"Partida" ,NIL, 80 ,AL_LEFT},;
{"po" ,"PO" ,NIL, 80 ,AL_LEFT},;
{"estilo" ,"Estilo" ,NIL, 80 ,AL_LEFT},;
{"colores" ,"Colores" ,NIL, 80 ,AL_LEFT},;
{"talla" ,"Talla" ,NIL, 80 ,AL_LEFT},;
{"cantidad","Cantidad",NIL, 80 ,AL_LEFT};
}
?op:icons // ya no esta visible
Code: Select all | Expand
LOCAL lForever
DEFAULT nSeconds TO NET_SECS
lForever := ( nSeconds == 0 )
coun := At( ".",cDatabase )
If coun>0
xx:= cDatabase
Else
xx:=cDatabase+".dbf"
EndIf
If !file(xx)
MsgStop("base de datos "+cdatabase+" no existe","Error de Apertura")
DbcloseAll()
SET RESOURCES TO
SET 3DLOOK OFF
CLEAR MEMORY
Quit
Return .f.
EndIf
DO WHILE ( lForever .OR. ( nSeconds > 0 ) )
?op:icons,"user" // aun esta visible
If dbUseArea(.T.,,cDatabase,(cAlias),lOpenMode,.F.)
?op:icons,"user2" /// Ya no esta visible
RETURN ( .T. )
Else
?op:icons,"user4"
ENDIF
MsgAlert(OemToAnsi("Archivo "+cFileName(cDataBase)+" bloqueado por otro Usuario"),;
"Compartir")
?op:icons,"user2"
ENDDO
?op:icons,"user3"
[
Code: Select all | Expand
?op:icons // en este punto esta visible
NetUse( op:temp+"kardeing",.F.,"tmp" )
Set Filter to tmp->flag != "B"
tmp->(DbGoTop())
aCols := {;
{"codigo" ,"Codigo" ,NIL, 80 ,AL_LEFT},;
{"op" ,"Op" ,NIL, 80 ,AL_LEFT},;
{"partida" ,"Partida" ,NIL, 80 ,AL_LEFT},;
{"po" ,"PO" ,NIL, 80 ,AL_LEFT},;
{"estilo" ,"Estilo" ,NIL, 80 ,AL_LEFT},;
{"colores" ,"Colores" ,NIL, 80 ,AL_LEFT},;
{"talla" ,"Talla" ,NIL, 80 ,AL_LEFT},;
{"cantidad","Cantidad",NIL, 80 ,AL_LEFT};
}
?op:icons // ya no esta visible
Code: Select all | Expand
LOCAL lForever
DEFAULT nSeconds TO NET_SECS
lForever := ( nSeconds == 0 )
coun := At( ".",cDatabase )
If coun>0
xx:= cDatabase
Else
xx:=cDatabase+".dbf"
EndIf
If !file(xx)
MsgStop("base de datos "+cdatabase+" no existe","Error de Apertura")
DbcloseAll()
SET RESOURCES TO
SET 3DLOOK OFF
CLEAR MEMORY
Quit
Return .f.
EndIf
DO WHILE ( lForever .OR. ( nSeconds > 0 ) )
?op:icons,"user" // aun esta visible
If dbUseArea(.T.,,cDatabase,(cAlias),lOpenMode,.F.)
?op:icons,"user2" /// Ya no esta visible
RETURN ( .T. )
Else
?op:icons,"user4"
ENDIF
MsgAlert(OemToAnsi("Archivo "+cFileName(cDataBase)+" bloqueado por otro Usuario"),;
"Compartir")
?op:icons,"user2"
ENDDO
?op:icons,"user3"
[
Code: Select all | Expand
Application
===========
Path and name: D:\Proyectos32bits\TallerPro\TallerPro\Bin\TallerPro.Exe (32 bits)
Size: 4,836,352 bytes
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20241008)
FiveWin version: FWH 24.07
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 9 secs
Error occurred at: 01/03/2025, 11:07:38
Error description: Error BASE/1004 Class: 'CHARACTER' has no exported method: RESTORE
Args:
[ 1] = C
[ 2] = A {{"CARPETA","D:\Proyectos32bits\TallerPro\TallerPro\Bin\"},{"TEMP","D:\Proyectos32bits\TallerP ... } length: 19
Stack Calls
===========
Called from: => RESTORE( 0 )
Called from: Source\function.prg => NETUSE( 59 )
Called from: Source\guiaingresos.prg => ADDREG( 238 )
Called from: Source\guiaingresos.prg => (b)BRWBTNBAR( 137 )
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( 2143 )
Called from: .\source\classes\window.prg => _FWH( 1003 )
Called from: => WINRUN( 0 )
Called from: .\source\classes\window.prg => TMDIFRAME:ACTIVATE( 1117 )
Called from: Source\menu.prg => MAIN( 175 )
System
======
CPU type: AMD Ryzen 5 5600GT with Radeon Graphics 3593 Mhz
Hardware memory: 15740 megs
Free System resources: 90 %
GDI resources: 90 %
User resources: 90 %
Windows total applications running: 1
1 GDI+ Window (AMDRSServ.exe),
Variables in use
================
Procedure Type Value
==========================
RESTORE
Param 1: A Len: 19
Local 1: A Len: 1
Local 2: U
Local 3: U
NETUSE
Param 1: C "D:\Proyectos32bits\TallerPro\TallerPro\Bin\temp\kardeing"
Param 2: L .F.
Param 3: C "tmp"
Local 1: N 2
Local 2: L .F.
Local 3: A Len: 19
este es el cambio para restaurarCode: Select all | Expand
aSave := oP:Save() // guardamos las variables
DO WHILE ( lForever .OR. ( nSeconds > 0 ) )
If dbUseArea(.T.,,cDatabase,(cAlias),lOpenMode,.F.)
oP:Restore( aSave )
?op:icons,"user2"
RETURN ( .T. )
Else
?op:icons,"user4"
ENDIF
MsgAlert(OemToAnsi("Archivo "+cFileName(cDataBase)+" bloqueado por otro Usuario"),;
"Compartir")
?op:icons,"user2"
ENDDO
Code: Select all | Expand
Application
===========
Path and name: D:\Proyectos32bits\TallerPro\TallerPro\Bin\TallerPro.Exe (32 bits)
Size: 4,836,352 bytes
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20241008)
FiveWin version: FWH 24.07
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 9 secs
Error occurred at: 01/03/2025, 11:07:38
Error description: Error BASE/1004 Class: 'CHARACTER' has no exported method: RESTORE
Args:
[ 1] = C
[ 2] = A {{"CARPETA","D:\Proyectos32bits\TallerPro\TallerPro\Bin\"},{"TEMP","D:\Proyectos32bits\TallerP ... } length: 19
Stack Calls
===========
Called from: => RESTORE( 0 )
Called from: Source\function.prg => NETUSE( 59 )
Called from: Source\guiaingresos.prg => ADDREG( 238 )
Called from: Source\guiaingresos.prg => (b)BRWBTNBAR( 137 )
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( 2143 )
Called from: .\source\classes\window.prg => _FWH( 1003 )
Called from: => WINRUN( 0 )
Called from: .\source\classes\window.prg => TMDIFRAME:ACTIVATE( 1117 )
Called from: Source\menu.prg => MAIN( 175 )
System
======
CPU type: AMD Ryzen 5 5600GT with Radeon Graphics 3593 Mhz
Hardware memory: 15740 megs
Free System resources: 90 %
GDI resources: 90 %
User resources: 90 %
Windows total applications running: 1
1 GDI+ Window (AMDRSServ.exe),
Variables in use
================
Procedure Type Value
==========================
RESTORE
Param 1: A Len: 19
Local 1: A Len: 1
Local 2: U
Local 3: U
NETUSE
Param 1: C "D:\Proyectos32bits\TallerPro\TallerPro\Bin\temp\kardeing"
Param 2: L .F.
Param 3: C "tmp"
Local 1: N 2
Local 2: L .F.
Local 3: A Len: 19
este es el cambio para restaurarCode: Select all | Expand
aSave := oP:Save() // guardamos las variables
DO WHILE ( lForever .OR. ( nSeconds > 0 ) )
If dbUseArea(.T.,,cDatabase,(cAlias),lOpenMode,.F.)
oP:Restore( aSave )
?op:icons,"user2"
RETURN ( .T. )
Else
?op:icons,"user4"
ENDIF
MsgAlert(OemToAnsi("Archivo "+cFileName(cDataBase)+" bloqueado por otro Usuario"),;
"Compartir")
?op:icons,"user2"
ENDDO
Code: Select all | Expand
/* -----------------------------------------------------------------------------
* TPublic()
* Clase para el reemplazo de Variables Publicas
* Version 2.2b - 01/04/2003
*
* Andrade A. Daniel
* Rosario - Santa Fe - Argentina
*
* andrade_2knews@hotmail.com
* http://www.dbwide.com.ar
*
* Aportes: [ER] Eduardo Rizzolo
* [WA] Wilson Alves - wolverine@sercomtel.com.br 18/05/2002
* [JJMG] Juan J. Mendez Gonzalez
*
* DATAS
* -----------------------------------------------------------------------------
* aVars - Arreglo de variables
* cName - Nombre ultima variable accedida
* nPos - Valor ultimo variable accedida
* lAutomatic - Asignación automatica, por defecto TRUE [WA]
*
* METODOS
* -----------------------------------------------------------------------------
* New() - Contructor
* Add() - Agrega/define nueva variable
* Del() - Borra variable
* Get() - Accede a una veriable directamente
* Set() - Define nuevo valor directamente
* GetPos() - Obtener la posición en el array
* Release() - Borra todas las variables
* IsDef() - Chequea si una variable fue definida
* Clone() - Clona la DATA aVars
* nCount() - Devuelve cantidad de variables definidas
* Save() - Salva DATA aVars
* Restore() - Restaura DATA aVars
*
* NOTA
* -----------------------------------------------------------------------------
* Para acceder al valor de una variable, se puede hacer de 2 formas,
* una directa usando oPub:Get("Codigo") o por Prueba/Error oPub:Codigo,
* este último es mas simple de usar pero más lento.
*
* Para definir un nuevo valor a una variable tambien puede ser por 2 formas,
* directamente por oPub:Set("Codigo", "ABC" ), o por Prueba/Error
* oPub:Codigo := "ABC".
*
* Atencion: Los metodos Get() y Set() no controlan si la variable existe,
* para ganar en velocidad.
*
* Las variables definidas NO son case sensitive.
*
* MODIFICACIONES Y AGREGADOS
* -----------------------------------------------------------------------------
* 2.2b Correción Bug en metodo Add() sobre FWH.
* 2.2a Modificado para não restringir o número de variáveis em [x]Harbour [WA]
* 2.2 Modificada para funcionar en [x]Harbour
*
* 2.1 Se guarda el Nombre y Posición de la última variable accedida para incrementar
* la velocidad. (Implementado por Eduardo Rizzolo)
*
* EJEMPLO
* -----------------------------------------------------------------------------
* FUNCTION Test()
* local oP := TPublic():New(), aSave, nPos
*
* oP:Add("Codigo") // Defino variable sin valor inicial
* oP:Add("Precio", 1.15) // Defino variable con valor inicial
* oP:Add("Cantidad", 10 )
* oP:Add("TOTAL" )
*
* // Acceso a variables por prueba/error
* oP:Total := oP:Precio * oP:Cantidad
*
* // Definicion y Acceso a variables directamente
* oP:Set("Total", oP:Get("precio") * oP:Get("CANTIDAD") )
*
* oP:Del("Total") // Borro una variable
* ? oP:IsDef("TOTAL") // Varifico si existe una variable
*
* nPos := oP:GetPos("Total") // Obtengo la posición en el array
* oP:aVars[nPos,2] := 0 // Modifico el Valor en el array directo
*
* aSave := oP:Save() // Guardo las Variables
* oP:Release() // Borro TODAS las variables
* oP:Restore( aSave ) // Restauro las variables
*
* oP:End() // Termino
*
* RETURN NIL
*
* EXEMPLO (Asignación Automática)
*
* FUNCTION MAIN()
* LOCAL oP:=TPublic():New(.T.)
*
* op:nome := "Wilson Alves"
* op:Endereco := "Rua dos Cravos,75"
* op:Cidade := "Londrina-PR"
* op:Celular := "9112-5495"
* op:Empresa := "WCW Software"
*
* ? op:Nome,op:Endereco,op:Cidade,op:celular,op:empresa
*
* op:End()
* RETURN NIL
*
*/
# include "FiveWin.ch"
#ifdef __HARBOUR__
# xtranslate BYNAME <V> [, <VN> ] => ::<V> := <V> [; ::<VN> := <VN> ]
# xtranslate BYNAME <V> DEFAULT <Val> => ::<V> := BYDEFAULT <V>, <Val>
# xtranslate BYNAME <V> IFNONIL => if <V> != NIL ; ::<V> := <V> ; endif
# xtranslate BYDEFAULT <V>, <Val> => if( <V> == NIL, <Val>, <V> )
#endif
/*
* TPublic()
*/
CLASS TPublic
DATA lAutomatic AS LOGICAL INIT .T. // [WA]
DATA aVars AS ARRAY INIT NIL
DATA nPos AS NUMERIC INIT 0 READONLY // [ER]
DATA cName AS CHARACTER INIT "" READONLY // [ER]
METHOD New( lAutomatic )
METHOD End() INLINE ::Release()
METHOD Add( cName, xValue )
METHOD Del( cName )
METHOD Get( cName )
METHOD Set( cName, xValue )
METHOD GetPos( cName )
METHOD Release()
METHOD IsDef( cName )
METHOD Clone() INLINE aClone( ::aClone )
METHOD nCount() INLINE Len( ::aVars )
METHOD Save() INLINE aClone( ::aVars )
METHOD Restore( aVars ) INLINE ::aVars := aClone( aVars )
#ifdef __HARBOUR__
ERROR HANDLER OnError( uParam1 )
#else
ERROR HANDLER OnError( cMsg, nError )
#endif
ENDCLASS
/*
* TPublic:New()
*/
METHOD New( lAutomatic ) CLASS TPublic // [WA]
::aVars := {}
BYNAME lAutomatic DEFAULT .T. // [WA]
RETURN Self
/*
* TPublic:Add()
*/
METHOD Add( cName, xValue ) CLASS TPublic // [ER]
if cName != NIL
if (::nPos := aScan( ::aVars, { |e,n| e[1] == AllTrim(Upper(cName)) } )) != 0
::aVars[::nPos,2] := xValue
#ifndef __HARBOUR__ // [WA]
elseif Len(::aVars) < 4000 // [JJMG]
aAdd( ::aVars, { AllTrim(Upper(cName)), xValue } )
::nPos := Len(::aVars)
else
MsgAlert("Demasiadas variables definidas para la Clase TPublic()")
#else
else
aAdd( ::aVars, { AllTrim(Upper(cName)), xValue } )
::nPos := Len(::aVars)
#endif // [WA]
endif
::cName := cName
endif
RETURN Self
/*
* TPublic:Del()
*/
METHOD Del( cName ) CLASS TPublic
local nPos
if cName != NIL
if (nPos := aScan( ::aVars, { |e,n| e[1] == AllTrim(Upper(cName)) } )) != 0
aDel( ::aVars, nPos )
::aVars := aSize( ::aVars, Len(::aVars) - 1 )
::nPos := 0
::cName := ""
endif
endif
RETURN Self
/*
* TPublic:Get()
*/
METHOD Get( cName ) CLASS TPublic // [by ER]
if cName != ::cName
::nPos := aScan( ::aVars, { |e,n| e[1] == AllTrim(Upper(cName)) } )
::cName := cName
endif
RETURN ::aVars[::nPos,2]
/*
* TPublic:Set()
*/
METHOD Set( cName, xValue ) CLASS TPublic // [by ER]
if cName != ::cName
::nPos := aScan( ::aVars, { |e,n| e[1] == AllTrim(Upper(cName)) } )
::cName := cName
endif
::aVars[::nPos,2] := xValue
RETURN Self
/*
* TPublic:GetPos() // [by ER]
*/
METHOD GetPos( cName ) CLASS TPublic
::cName := cName
RETURN ::nPos := aScan( ::aVars, { |e,n| e[1] == AllTrim(Upper(cName)) } )
/*
* TPublic:Release()
*/
METHOD Release() CLASS TPublic
ASIZE(::aVars,0)
::cName := ""
::nPos := 0
RETURN Self
/*
* TPublic:IsDef()
*/
METHOD IsDef( cName ) CLASS TPublic // [by ER]
local lOk := .F.
if cName != NIL
if (::nPos := aScan( ::aVars, { |e,n| e[1] == AllTrim(Upper(cName)) } )) != 0
::cName := cName
lOk := .T.
endif
endif
RETURN lOk
/*
* OnError()
*/
#ifdef __HARBOUR__
METHOD OnError( uParam1 ) CLASS TPublic
local cMsg := __GetMessage()
local nError := If( SubStr( cMsg, 1, 1 ) == "_", 1005, 1004 )
#else
METHOD OnError( cMsg, nError ) CLASS TPublic
local uParam1 := GetParam( 1, 1 )
#endif
cMsg := Upper( AllTrim( cMsg ))
if SubStr( cMsg, 1, 1 ) == "_"
cMsg := SubStr( cMsg, 2 )
if cMsg == Upper(::cName)
::aVars[::nPos,2] := uParam1
elseif ( ::nPos := aScan( ::aVars, { |e,n| e[1] == cMsg } ) ) != 0
::cName := cMsg
::aVars[::nPos,2] := uParam1
else
if !::lAutomatic // [WA]
_ClsSetError( _GenError( nError, ::ClassName(), cMsg ) )
::cName := ""
::nPos := 0
else
::add(cmsg)
::aVars[::nPos,2] := uParam1
endif
endif
else
if cMsg == Upper(::cName) // [by ER]
RETURN ::aVars[::nPos,2]
elseif ( ::nPos := aScan( ::aVars, { |e,n| e[1] == cMsg } ) ) != 0
::cName := cMsg
RETURN ::aVars[::nPos,2]
else
_ClsSetError( _GenError( nError, ::ClassName(), cMsg ) )
::cName := ""
::nPos := 0
endif
endif
RETURN NIL
// Andrade Daniel (2001-2003)
]]>Code: Select all | Expand
/* -----------------------------------------------------------------------------
* TPublic()
* Clase para el reemplazo de Variables Publicas
* Version 2.2b - 01/04/2003
*
* Andrade A. Daniel
* Rosario - Santa Fe - Argentina
*
* andrade_2knews@hotmail.com
* http://www.dbwide.com.ar
*
* Aportes: [ER] Eduardo Rizzolo
* [WA] Wilson Alves - wolverine@sercomtel.com.br 18/05/2002
* [JJMG] Juan J. Mendez Gonzalez
*
* DATAS
* -----------------------------------------------------------------------------
* aVars - Arreglo de variables
* cName - Nombre ultima variable accedida
* nPos - Valor ultimo variable accedida
* lAutomatic - Asignación automatica, por defecto TRUE [WA]
*
* METODOS
* -----------------------------------------------------------------------------
* New() - Contructor
* Add() - Agrega/define nueva variable
* Del() - Borra variable
* Get() - Accede a una veriable directamente
* Set() - Define nuevo valor directamente
* GetPos() - Obtener la posición en el array
* Release() - Borra todas las variables
* IsDef() - Chequea si una variable fue definida
* Clone() - Clona la DATA aVars
* nCount() - Devuelve cantidad de variables definidas
* Save() - Salva DATA aVars
* Restore() - Restaura DATA aVars
*
* NOTA
* -----------------------------------------------------------------------------
* Para acceder al valor de una variable, se puede hacer de 2 formas,
* una directa usando oPub:Get("Codigo") o por Prueba/Error oPub:Codigo,
* este último es mas simple de usar pero más lento.
*
* Para definir un nuevo valor a una variable tambien puede ser por 2 formas,
* directamente por oPub:Set("Codigo", "ABC" ), o por Prueba/Error
* oPub:Codigo := "ABC".
*
* Atencion: Los metodos Get() y Set() no controlan si la variable existe,
* para ganar en velocidad.
*
* Las variables definidas NO son case sensitive.
*
* MODIFICACIONES Y AGREGADOS
* -----------------------------------------------------------------------------
* 2.2b Correción Bug en metodo Add() sobre FWH.
* 2.2a Modificado para não restringir o número de variáveis em [x]Harbour [WA]
* 2.2 Modificada para funcionar en [x]Harbour
*
* 2.1 Se guarda el Nombre y Posición de la última variable accedida para incrementar
* la velocidad. (Implementado por Eduardo Rizzolo)
*
* EJEMPLO
* -----------------------------------------------------------------------------
* FUNCTION Test()
* local oP := TPublic():New(), aSave, nPos
*
* oP:Add("Codigo") // Defino variable sin valor inicial
* oP:Add("Precio", 1.15) // Defino variable con valor inicial
* oP:Add("Cantidad", 10 )
* oP:Add("TOTAL" )
*
* // Acceso a variables por prueba/error
* oP:Total := oP:Precio * oP:Cantidad
*
* // Definicion y Acceso a variables directamente
* oP:Set("Total", oP:Get("precio") * oP:Get("CANTIDAD") )
*
* oP:Del("Total") // Borro una variable
* ? oP:IsDef("TOTAL") // Varifico si existe una variable
*
* nPos := oP:GetPos("Total") // Obtengo la posición en el array
* oP:aVars[nPos,2] := 0 // Modifico el Valor en el array directo
*
* aSave := oP:Save() // Guardo las Variables
* oP:Release() // Borro TODAS las variables
* oP:Restore( aSave ) // Restauro las variables
*
* oP:End() // Termino
*
* RETURN NIL
*
* EXEMPLO (Asignación Automática)
*
* FUNCTION MAIN()
* LOCAL oP:=TPublic():New(.T.)
*
* op:nome := "Wilson Alves"
* op:Endereco := "Rua dos Cravos,75"
* op:Cidade := "Londrina-PR"
* op:Celular := "9112-5495"
* op:Empresa := "WCW Software"
*
* ? op:Nome,op:Endereco,op:Cidade,op:celular,op:empresa
*
* op:End()
* RETURN NIL
*
*/
# include "FiveWin.ch"
#ifdef __HARBOUR__
# xtranslate BYNAME <V> [, <VN> ] => ::<V> := <V> [; ::<VN> := <VN> ]
# xtranslate BYNAME <V> DEFAULT <Val> => ::<V> := BYDEFAULT <V>, <Val>
# xtranslate BYNAME <V> IFNONIL => if <V> != NIL ; ::<V> := <V> ; endif
# xtranslate BYDEFAULT <V>, <Val> => if( <V> == NIL, <Val>, <V> )
#endif
/*
* TPublic()
*/
CLASS TPublic
DATA lAutomatic AS LOGICAL INIT .T. // [WA]
DATA aVars AS ARRAY INIT NIL
DATA nPos AS NUMERIC INIT 0 READONLY // [ER]
DATA cName AS CHARACTER INIT "" READONLY // [ER]
METHOD New( lAutomatic )
METHOD End() INLINE ::Release()
METHOD Add( cName, xValue )
METHOD Del( cName )
METHOD Get( cName )
METHOD Set( cName, xValue )
METHOD GetPos( cName )
METHOD Release()
METHOD IsDef( cName )
METHOD Clone() INLINE aClone( ::aClone )
METHOD nCount() INLINE Len( ::aVars )
METHOD Save() INLINE aClone( ::aVars )
METHOD Restore( aVars ) INLINE ::aVars := aClone( aVars )
#ifdef __HARBOUR__
ERROR HANDLER OnError( uParam1 )
#else
ERROR HANDLER OnError( cMsg, nError )
#endif
ENDCLASS
/*
* TPublic:New()
*/
METHOD New( lAutomatic ) CLASS TPublic // [WA]
::aVars := {}
BYNAME lAutomatic DEFAULT .T. // [WA]
RETURN Self
/*
* TPublic:Add()
*/
METHOD Add( cName, xValue ) CLASS TPublic // [ER]
if cName != NIL
if (::nPos := aScan( ::aVars, { |e,n| e[1] == AllTrim(Upper(cName)) } )) != 0
::aVars[::nPos,2] := xValue
#ifndef __HARBOUR__ // [WA]
elseif Len(::aVars) < 4000 // [JJMG]
aAdd( ::aVars, { AllTrim(Upper(cName)), xValue } )
::nPos := Len(::aVars)
else
MsgAlert("Demasiadas variables definidas para la Clase TPublic()")
#else
else
aAdd( ::aVars, { AllTrim(Upper(cName)), xValue } )
::nPos := Len(::aVars)
#endif // [WA]
endif
::cName := cName
endif
RETURN Self
/*
* TPublic:Del()
*/
METHOD Del( cName ) CLASS TPublic
local nPos
if cName != NIL
if (nPos := aScan( ::aVars, { |e,n| e[1] == AllTrim(Upper(cName)) } )) != 0
aDel( ::aVars, nPos )
::aVars := aSize( ::aVars, Len(::aVars) - 1 )
::nPos := 0
::cName := ""
endif
endif
RETURN Self
/*
* TPublic:Get()
*/
METHOD Get( cName ) CLASS TPublic // [by ER]
if cName != ::cName
::nPos := aScan( ::aVars, { |e,n| e[1] == AllTrim(Upper(cName)) } )
::cName := cName
endif
RETURN ::aVars[::nPos,2]
/*
* TPublic:Set()
*/
METHOD Set( cName, xValue ) CLASS TPublic // [by ER]
if cName != ::cName
::nPos := aScan( ::aVars, { |e,n| e[1] == AllTrim(Upper(cName)) } )
::cName := cName
endif
::aVars[::nPos,2] := xValue
RETURN Self
/*
* TPublic:GetPos() // [by ER]
*/
METHOD GetPos( cName ) CLASS TPublic
::cName := cName
RETURN ::nPos := aScan( ::aVars, { |e,n| e[1] == AllTrim(Upper(cName)) } )
/*
* TPublic:Release()
*/
METHOD Release() CLASS TPublic
ASIZE(::aVars,0)
::cName := ""
::nPos := 0
RETURN Self
/*
* TPublic:IsDef()
*/
METHOD IsDef( cName ) CLASS TPublic // [by ER]
local lOk := .F.
if cName != NIL
if (::nPos := aScan( ::aVars, { |e,n| e[1] == AllTrim(Upper(cName)) } )) != 0
::cName := cName
lOk := .T.
endif
endif
RETURN lOk
/*
* OnError()
*/
#ifdef __HARBOUR__
METHOD OnError( uParam1 ) CLASS TPublic
local cMsg := __GetMessage()
local nError := If( SubStr( cMsg, 1, 1 ) == "_", 1005, 1004 )
#else
METHOD OnError( cMsg, nError ) CLASS TPublic
local uParam1 := GetParam( 1, 1 )
#endif
cMsg := Upper( AllTrim( cMsg ))
if SubStr( cMsg, 1, 1 ) == "_"
cMsg := SubStr( cMsg, 2 )
if cMsg == Upper(::cName)
::aVars[::nPos,2] := uParam1
elseif ( ::nPos := aScan( ::aVars, { |e,n| e[1] == cMsg } ) ) != 0
::cName := cMsg
::aVars[::nPos,2] := uParam1
else
if !::lAutomatic // [WA]
_ClsSetError( _GenError( nError, ::ClassName(), cMsg ) )
::cName := ""
::nPos := 0
else
::add(cmsg)
::aVars[::nPos,2] := uParam1
endif
endif
else
if cMsg == Upper(::cName) // [by ER]
RETURN ::aVars[::nPos,2]
elseif ( ::nPos := aScan( ::aVars, { |e,n| e[1] == cMsg } ) ) != 0
::cName := cMsg
RETURN ::aVars[::nPos,2]
else
_ClsSetError( _GenError( nError, ::ClassName(), cMsg ) )
::cName := ""
::nPos := 0
endif
endif
RETURN NIL
// Andrade Daniel (2001-2003)
]]>Code: Select all | Expand
function TmpPdf( oPrn )
local cFilePdf := cTempFile( '.\tmp\' , ".pdf" )
local cMsg := "Exportando a PDF: Aguarda un momento"
if !File( ".\tmp" )
lMkDir( ".\tmp" )
endif
MSGRUN( cMsg, "Usuario", {|| MSPrintToPDF( oPrn:aMeta, cFilePdf, .T. ) } ) //.t. show pdf
return nil
]]>Code: Select all | Expand
function TmpPdf( oPrn )
local cFilePdf := cTempFile( '.\tmp\' , ".pdf" )
local cMsg := "Exportando a PDF: Aguarda un momento"
if !File( ".\tmp" )
lMkDir( ".\tmp" )
endif
MSGRUN( cMsg, "Usuario", {|| MSPrintToPDF( oPrn:aMeta, cFilePdf, .T. ) } ) //.t. show pdf
return nil
]]>Code: Select all | Expand
METHOD SendEmail() CLASS TPreview
LOCAL oDlg,oFont,oIcono
LOCAL aSays := Array(03)
LOCAL aGets := ARRAY(07)
LOCAL acMails := {}
LOCAL aChks := ARRAY(06)
LOCAL oAceptar,oCancelar
LOCAL cName := If( ::oReport != nil, ::oReport:cName, ::oDevice:cDocument )
LOCAL aFiles := ::oDevice:aMeta[1]
// ? Len(aFiles) Me arroja 47
DEFINE FONT oFont NAME "MS Sans Serif" SIZE 0,-10
DEFINE ICON oIcono RESOURCE "AppLogo"
DEFINE DIALOG oDlg RESOURCE "CORREOS" FONT oFont ICON oIcono;
COLOR oApp:nClrText, oApp:nClrBack
REDEFINE SAY aSays[01] VAR "Dirección principal:" ID 11 OF oDlg;
COLOR oApp:nClrText, oApp:nClrBack FONT oFont
REDEFINE GROUP aSays[02] PROMPT "Con copia para *" ID 12 OF oDlg;
COLOR oApp:nClrText, oApp:nClrBack FONT oFont TRANSPARENT
REDEFINE SAY aSays[03] VAR "* Marque la(s) dirección(es) de correo opcional(es) a la(s) que desea enviarle(s) una copia" ID 13 OF oDlg;
COLOR oApp:nClrText, oApp:nClrBack FONT oFont
REDEFINE COMBOBOX aGets[01] VAR oApp:cToAddr ID 101 OF oDlg UPDATE;
PROMPTS acMails;
MESSAGE "Elija la dirección de correo principal"
aGets[01]:lIncSearch := (.T.)
REDEFINE CHECKBOX aGets[02] VAR aChks[01] ID 102 OF oDlg UPDATE;
MESSAGE "Active la casilla si desea enviar solo la primera página"
REDEFINE CHECKBOX aGets[03] VAR aChks[02] ID 103 OF oDlg UPDATE;
WHEN ! EMPTY(ALLTRIM(oApp:acMails[02]));
MESSAGE "Active la casilla si desea enviar copia del correo a esta dirección"
REDEFINE CHECKBOX aGets[04] VAR aChks[03] ID 104 OF oDlg UPDATE;
WHEN ! EMPTY(ALLTRIM(oApp:acMails[03]));
MESSAGE "Active la casilla si desea enviar copia del correo a esta dirección"
REDEFINE CHECKBOX aGets[05] VAR aChks[04] ID 105 OF oDlg UPDATE;
WHEN ! EMPTY(ALLTRIM(oApp:acMails[04]));
MESSAGE "Active la casilla si desea enviar copia del correo a esta dirección"
REDEFINE CHECKBOX aGets[06] VAR aChks[05] ID 106 OF oDlg UPDATE;
WHEN ! EMPTY(ALLTRIM(oApp:acMails[05]));
MESSAGE "Active la casilla si desea enviar copia del correo a esta dirección"
REDEFINE CHECKBOX aGets[07] VAR aChks[06] ID 107 OF oDlg UPDATE;
WHEN ! EMPTY(ALLTRIM(oApp:acMails[06]));
MESSAGE "Active la casilla si desea enviar copia del correo a esta dirección"
REDEFINE BTNBMP oAceptar PROMPT "&Enviar y salir" ID 901 OF oDlg UPDATE;
WHEN ! Empty(AllTrim(oApp:cToAddr));
RESOURCE "SiSave" LEFT ACTION (IIF(EnviarEmail(cName),oDlg:END(),""));
MESSAGE "Realiza los cambios en la tabla"
REDEFINE BTNBMP oCancelar PROMPT "&Salir sin enviar" ID 902 OF oDlg UPDATE;
RESOURCE "NoSave" LEFT ACTION oDlg:END();
MESSAGE "Cancela el proceso"
oCancelar:lCancel := .T.
oDlg:lHelpIcon := (.F.)
ACTIVATE DIALOG oDlg CENTERED ON PAINT (aGets[03]:SetText(oApp:acMails[02]),;
aGets[04]:SetText(oApp:acMails[03]),;
aGets[05]:SetText(oApp:acMails[04]),;
aGets[06]:SetText(oApp:acMails[05]),;
aGets[07]:SetText(oApp:acMails[06]),;
IIF(EMPTY(ALLTRIM(oApp:acMails[02])),aGets[03]:Hide(),),;
IIF(EMPTY(ALLTRIM(oApp:acMails[03])),aGets[04]:Hide(),),;
IIF(EMPTY(ALLTRIM(oApp:acMails[04])),aGets[05]:Hide(),),;
IIF(EMPTY(ALLTRIM(oApp:acMails[05])),aGets[06]:Hide(),),;
IIF(EMPTY(ALLTRIM(oApp:acMails[06])),aGets[07]:Hide(),))
oIcono:END()
oFont:END()
return nil
Code: Select all | Expand
function EnviarEMail(cPdfFile)
LOCAL nVez := 0
LOCAL aFiles := ::oDevice:aMeta[1]
// Limpiamos el arreglo de las paginas (aFiles)
FOR nVez := 2 TO LEN(aFiles)
aFiles[nVez] := ""
NEXT
// Pasamos los correos para enviarles copias
IF aCheck[02]
oApp:cCC := ALLTRIM(oApp:acMails[02])
ENDIF
IF aCheck[03]
oApp:cCC := oApp:cCC + "," + ALLTRIM(oApp:acMails[03])
ENDIF
IF aCheck[04]
oApp:cCC := oApp:cCC + "," + ALLTRIM(oApp:acMails[04])
ENDIF
IF aCheck[05]
oApp:cCC := oApp:cCC + "," + ALLTRIM(oApp:acMails[05])
ENDIF
IF aCheck[06]
oApp:cCC := oApp:cCC + " ," + ALLTRIM(oApp:acMails[06])
ENDIF
pdfFileName := AllTrim(pdfFileName)
pdfFileName := ALLTRIM(SUBSTR(pdfFileName,AT(":",pdfFileName) + 1))
cPdfFile := TRUENAME(ALLTRIM(oApp:cPathPdfs) + "\" + ALLTRIM(pdfFileName) + ".Pdf")
? cPdfFile
IF ! FILE(".\img2pdf.exe")
MsgStop("Falta el archivo Img2Pdf.Exe, no se pudo enviar el correo !",oApp:cAplicacion)
RETURN(.F.)
ENDIF
IF ! FILE(".\cImage.Dll")
MsgStop("Falta el archivo cImage.Dll, no se pudo enviar el correo !",oApp:cAplicacion)
RETURN(.F.)
ENDIF
IF ! FILE(".\ImgDll.Dll")
MsgStop("Falta el archivo ImgDll.Dll, no se pudo enviar el correo !",oApp:cAplicacion)
RETURN(.F.)
ENDIF
FOR nVez := 1 TO LEN(aFiles)
IF nVez == 1
/*
-r = Pone la resolución en el archivo PDF generado
-1 = Usa la resolución del archivo original
-o = Va seguido del nombre del archivo PDF que será generado
*/
WaitRun("img2pdf.exe -$ 55XSD423445544KWET56 -r -1 -o " +;
'"' + ALLTRIM(cPdfFile) + '"' + SPACE(01) +;
'"' + ALLTRIM(aFiles[nVez]) + '"',0) // El cero es para evitar la ventana del DOS
ELSE
/*
-p = Agrega a un archivo PDF existente
1 = significa que lo agrega al final del archivo existente
-r = Pone la resolución en el archivo PDF generado
-1 = Usa la resolución del archivo original
-o = Va seguido del nombre del archivo PDF que será generado
*/
WaitRun("img2pdf.exe -$ 55XSD423445544KWET56 -p 1 -r -1 -o " +;
'"' + ALLTRIM(cPdfFile) + '"' + SPACE(01) +;
'"' + ALLTRIM(aFiles[nVez]) + '"',0) // El cero es para evitar la ventana del DOS
ENDIF
NEXT
RETURN(.T.)
Code: Select all | Expand
Application
===========
Path and name: D:\SiaWin40\SiaWin40.Exe (32 bits)
Size: 6,311,424 bytes
Compiler version: Harbour 3.2.0dev (r1904111533)
FiveWin version: FWH 23.07
C compiler version: Borland/Embarcadero C++ 7.0 (32-bit)
Windows 11 64 Bits, version: 6.2, Build 9200
Time from start: 0 hours 0 mins 22 secs
Error occurred at: 01/03/2025, 09:29:57
Error description: Error BASE/1003 No existe la variable: SELF
Stack Calls
===========
Called from: Source\rpreview.prg => ENVIAREMAIL( 1967 )
Called from: Source\rpreview.prg => (b)TPREVIEW_SENDEMAIL( 1937 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:CLICK( 792 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:LBUTTONUP( 1083 )
Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1847 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:HANDLEEVENT( 2135 )
Called from: .\source\classes\WINDOW.PRG => _FWH( 3693 )
Called from: => DIALOGBOX( 0 )
Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 307 )
Called from: Source\rpreview.prg => TPREVIEW:SENDEMAIL( 1956 )
Called from: Source\rpreview.prg => (b)TPREVIEW_BUILDBUTTONBAR( 397 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:CLICK( 792 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:LBUTTONUP( 1083 )
Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1847 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:HANDLEEVENT( 2135 )
Called from: .\source\classes\WINDOW.PRG => _FWH( 3693 )
Called from: => SYSREFRESH( 0 )
Called from: .\source\function\MSGRUN.PRG => STOPUNTIL( 72 )
Called from: Source\rpreview.prg => TPREVIEW:ACTIVATE( 181 )
Called from: Source\rpreview.prg => RPREVIEW( 2051 )
Called from: Source\vrd.prg => VRD:END( 554 )
Called from: Source\SiaWin1a.Prg => IMPRIMIR( 4365 )
Called from: Source\SiaWin1a.Prg => (b)SIAWIN1A( 713 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:CLICK( 792 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:LBUTTONUP( 1083 )
Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1847 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:HANDLEEVENT( 2135 )
Called from: .\source\classes\WINDOW.PRG => _FWH( 3693 )
Called from: => WINRUN( 0 )
Called from: .\source\classes\WINDOW.PRG => TMDIFRAME:ACTIVATE( 1118 )
Called from: Source\SiaWin.Prg => MAIN( 168 )
System
Code: Select all | Expand
METHOD SendEmail() CLASS TPreview
LOCAL oDlg,oFont,oIcono
LOCAL aSays := Array(03)
LOCAL aGets := ARRAY(07)
LOCAL acMails := {}
LOCAL aChks := ARRAY(06)
LOCAL oAceptar,oCancelar
LOCAL cName := If( ::oReport != nil, ::oReport:cName, ::oDevice:cDocument )
LOCAL aFiles := ::oDevice:aMeta[1]
// ? Len(aFiles) Me arroja 47
DEFINE FONT oFont NAME "MS Sans Serif" SIZE 0,-10
DEFINE ICON oIcono RESOURCE "AppLogo"
DEFINE DIALOG oDlg RESOURCE "CORREOS" FONT oFont ICON oIcono;
COLOR oApp:nClrText, oApp:nClrBack
REDEFINE SAY aSays[01] VAR "Dirección principal:" ID 11 OF oDlg;
COLOR oApp:nClrText, oApp:nClrBack FONT oFont
REDEFINE GROUP aSays[02] PROMPT "Con copia para *" ID 12 OF oDlg;
COLOR oApp:nClrText, oApp:nClrBack FONT oFont TRANSPARENT
REDEFINE SAY aSays[03] VAR "* Marque la(s) dirección(es) de correo opcional(es) a la(s) que desea enviarle(s) una copia" ID 13 OF oDlg;
COLOR oApp:nClrText, oApp:nClrBack FONT oFont
REDEFINE COMBOBOX aGets[01] VAR oApp:cToAddr ID 101 OF oDlg UPDATE;
PROMPTS acMails;
MESSAGE "Elija la dirección de correo principal"
aGets[01]:lIncSearch := (.T.)
REDEFINE CHECKBOX aGets[02] VAR aChks[01] ID 102 OF oDlg UPDATE;
MESSAGE "Active la casilla si desea enviar solo la primera página"
REDEFINE CHECKBOX aGets[03] VAR aChks[02] ID 103 OF oDlg UPDATE;
WHEN ! EMPTY(ALLTRIM(oApp:acMails[02]));
MESSAGE "Active la casilla si desea enviar copia del correo a esta dirección"
REDEFINE CHECKBOX aGets[04] VAR aChks[03] ID 104 OF oDlg UPDATE;
WHEN ! EMPTY(ALLTRIM(oApp:acMails[03]));
MESSAGE "Active la casilla si desea enviar copia del correo a esta dirección"
REDEFINE CHECKBOX aGets[05] VAR aChks[04] ID 105 OF oDlg UPDATE;
WHEN ! EMPTY(ALLTRIM(oApp:acMails[04]));
MESSAGE "Active la casilla si desea enviar copia del correo a esta dirección"
REDEFINE CHECKBOX aGets[06] VAR aChks[05] ID 106 OF oDlg UPDATE;
WHEN ! EMPTY(ALLTRIM(oApp:acMails[05]));
MESSAGE "Active la casilla si desea enviar copia del correo a esta dirección"
REDEFINE CHECKBOX aGets[07] VAR aChks[06] ID 107 OF oDlg UPDATE;
WHEN ! EMPTY(ALLTRIM(oApp:acMails[06]));
MESSAGE "Active la casilla si desea enviar copia del correo a esta dirección"
REDEFINE BTNBMP oAceptar PROMPT "&Enviar y salir" ID 901 OF oDlg UPDATE;
WHEN ! Empty(AllTrim(oApp:cToAddr));
RESOURCE "SiSave" LEFT ACTION (IIF(EnviarEmail(cName),oDlg:END(),""));
MESSAGE "Realiza los cambios en la tabla"
REDEFINE BTNBMP oCancelar PROMPT "&Salir sin enviar" ID 902 OF oDlg UPDATE;
RESOURCE "NoSave" LEFT ACTION oDlg:END();
MESSAGE "Cancela el proceso"
oCancelar:lCancel := .T.
oDlg:lHelpIcon := (.F.)
ACTIVATE DIALOG oDlg CENTERED ON PAINT (aGets[03]:SetText(oApp:acMails[02]),;
aGets[04]:SetText(oApp:acMails[03]),;
aGets[05]:SetText(oApp:acMails[04]),;
aGets[06]:SetText(oApp:acMails[05]),;
aGets[07]:SetText(oApp:acMails[06]),;
IIF(EMPTY(ALLTRIM(oApp:acMails[02])),aGets[03]:Hide(),),;
IIF(EMPTY(ALLTRIM(oApp:acMails[03])),aGets[04]:Hide(),),;
IIF(EMPTY(ALLTRIM(oApp:acMails[04])),aGets[05]:Hide(),),;
IIF(EMPTY(ALLTRIM(oApp:acMails[05])),aGets[06]:Hide(),),;
IIF(EMPTY(ALLTRIM(oApp:acMails[06])),aGets[07]:Hide(),))
oIcono:END()
oFont:END()
return nil
Code: Select all | Expand
function EnviarEMail(cPdfFile)
LOCAL nVez := 0
LOCAL aFiles := ::oDevice:aMeta[1]
// Limpiamos el arreglo de las paginas (aFiles)
FOR nVez := 2 TO LEN(aFiles)
aFiles[nVez] := ""
NEXT
// Pasamos los correos para enviarles copias
IF aCheck[02]
oApp:cCC := ALLTRIM(oApp:acMails[02])
ENDIF
IF aCheck[03]
oApp:cCC := oApp:cCC + "," + ALLTRIM(oApp:acMails[03])
ENDIF
IF aCheck[04]
oApp:cCC := oApp:cCC + "," + ALLTRIM(oApp:acMails[04])
ENDIF
IF aCheck[05]
oApp:cCC := oApp:cCC + "," + ALLTRIM(oApp:acMails[05])
ENDIF
IF aCheck[06]
oApp:cCC := oApp:cCC + " ," + ALLTRIM(oApp:acMails[06])
ENDIF
pdfFileName := AllTrim(pdfFileName)
pdfFileName := ALLTRIM(SUBSTR(pdfFileName,AT(":",pdfFileName) + 1))
cPdfFile := TRUENAME(ALLTRIM(oApp:cPathPdfs) + "\" + ALLTRIM(pdfFileName) + ".Pdf")
? cPdfFile
IF ! FILE(".\img2pdf.exe")
MsgStop("Falta el archivo Img2Pdf.Exe, no se pudo enviar el correo !",oApp:cAplicacion)
RETURN(.F.)
ENDIF
IF ! FILE(".\cImage.Dll")
MsgStop("Falta el archivo cImage.Dll, no se pudo enviar el correo !",oApp:cAplicacion)
RETURN(.F.)
ENDIF
IF ! FILE(".\ImgDll.Dll")
MsgStop("Falta el archivo ImgDll.Dll, no se pudo enviar el correo !",oApp:cAplicacion)
RETURN(.F.)
ENDIF
FOR nVez := 1 TO LEN(aFiles)
IF nVez == 1
/*
-r = Pone la resolución en el archivo PDF generado
-1 = Usa la resolución del archivo original
-o = Va seguido del nombre del archivo PDF que será generado
*/
WaitRun("img2pdf.exe -$ 55XSD423445544KWET56 -r -1 -o " +;
'"' + ALLTRIM(cPdfFile) + '"' + SPACE(01) +;
'"' + ALLTRIM(aFiles[nVez]) + '"',0) // El cero es para evitar la ventana del DOS
ELSE
/*
-p = Agrega a un archivo PDF existente
1 = significa que lo agrega al final del archivo existente
-r = Pone la resolución en el archivo PDF generado
-1 = Usa la resolución del archivo original
-o = Va seguido del nombre del archivo PDF que será generado
*/
WaitRun("img2pdf.exe -$ 55XSD423445544KWET56 -p 1 -r -1 -o " +;
'"' + ALLTRIM(cPdfFile) + '"' + SPACE(01) +;
'"' + ALLTRIM(aFiles[nVez]) + '"',0) // El cero es para evitar la ventana del DOS
ENDIF
NEXT
RETURN(.T.)
Code: Select all | Expand
Application
===========
Path and name: D:\SiaWin40\SiaWin40.Exe (32 bits)
Size: 6,311,424 bytes
Compiler version: Harbour 3.2.0dev (r1904111533)
FiveWin version: FWH 23.07
C compiler version: Borland/Embarcadero C++ 7.0 (32-bit)
Windows 11 64 Bits, version: 6.2, Build 9200
Time from start: 0 hours 0 mins 22 secs
Error occurred at: 01/03/2025, 09:29:57
Error description: Error BASE/1003 No existe la variable: SELF
Stack Calls
===========
Called from: Source\rpreview.prg => ENVIAREMAIL( 1967 )
Called from: Source\rpreview.prg => (b)TPREVIEW_SENDEMAIL( 1937 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:CLICK( 792 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:LBUTTONUP( 1083 )
Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1847 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:HANDLEEVENT( 2135 )
Called from: .\source\classes\WINDOW.PRG => _FWH( 3693 )
Called from: => DIALOGBOX( 0 )
Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 307 )
Called from: Source\rpreview.prg => TPREVIEW:SENDEMAIL( 1956 )
Called from: Source\rpreview.prg => (b)TPREVIEW_BUILDBUTTONBAR( 397 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:CLICK( 792 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:LBUTTONUP( 1083 )
Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1847 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:HANDLEEVENT( 2135 )
Called from: .\source\classes\WINDOW.PRG => _FWH( 3693 )
Called from: => SYSREFRESH( 0 )
Called from: .\source\function\MSGRUN.PRG => STOPUNTIL( 72 )
Called from: Source\rpreview.prg => TPREVIEW:ACTIVATE( 181 )
Called from: Source\rpreview.prg => RPREVIEW( 2051 )
Called from: Source\vrd.prg => VRD:END( 554 )
Called from: Source\SiaWin1a.Prg => IMPRIMIR( 4365 )
Called from: Source\SiaWin1a.Prg => (b)SIAWIN1A( 713 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:CLICK( 792 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:LBUTTONUP( 1083 )
Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1847 )
Called from: .\source\classes\BTNBMP.PRG => TBTNBMP:HANDLEEVENT( 2135 )
Called from: .\source\classes\WINDOW.PRG => _FWH( 3693 )
Called from: => WINRUN( 0 )
Called from: .\source\classes\WINDOW.PRG => TMDIFRAME:ACTIVATE( 1118 )
Called from: Source\SiaWin.Prg => MAIN( 168 )
System
Para mí esto no tiene sentido.FiveWiDi wrote: Sat Mar 01, 2025 12:02 am En otra función lanzo un proceso en un Hilo independiente, esta función deberá cerrar la ventana del XBrowse.
Entonces el proceso que está trabajando en el hilo independiente, cuando intenta cerrar la ventana no puede cerrar el DBF.
¿Cómo puedo cerrar un DBF abierto en el hilo principal del programa, desde un hilo diferente?
Para mí esto no tiene sentido.FiveWiDi wrote: Sat Mar 01, 2025 12:02 am En otra función lanzo un proceso en un Hilo independiente, esta función deberá cerrar la ventana del XBrowse.
Entonces el proceso que está trabajando en el hilo independiente, cuando intenta cerrar la ventana no puede cerrar el DBF.
¿Cómo puedo cerrar un DBF abierto en el hilo principal del programa, desde un hilo diferente?
Code: Select all | Expand
//-----------------------------------------------------------------------------
// Harbour Data Base Connection (HDBC)
// Archivo: hdbc.hpp
// Clase virtual desde la se derivan todas
// Autor: Manu Exposito (2024)
// Notas:
//-----------------------------------------------------------------------------
#ifndef _HVDBC_HPP
#define _HVDBC_HPP
#pragma once
// De HDbc
#include "hvobject.hpp"
#include "hcompclass.hpp"
// Definicion anticipada de clases
class TVHDbc;
class TVHDbcStmt;
// De C++
#include <string>
//-----------------------------------------------------------------------------
// Clase TVHDbc: Gestion de la conexion y la base de datos
class TVHDbc : public TXVObject
{
public:
// Atributos
HB_UINT ATTR_TIMEOUT = 0; // Tiempo de espera
HB_UINT ATTR_ERRMODE = 1; // Lanaza exception
// Metodos
virtual void init() {}
virtual bool connect() = 0;
virtual bool isConnected() const = 0;
virtual void disconnect() = 0;
virtual bool reconnect() = 0;
virtual bool ping();
virtual TVHDbcStmt *prepare( const char *zSql ) const = 0;
virtual void query( const char *zSql, PHB_ITEM aColNames ) const;
virtual void tables() const = 0;
virtual void scalar( const char *zSql, HB_UINT columnIndex ) const;
virtual bool setAttribute( HB_UINT uiAttribute, PHB_ITEM xValue );
virtual PHB_ITEM getAttribute( HB_UINT uiAttribute ) const;
virtual bool beginTrans() const;
virtual bool commit() const;
virtual bool rollback() const;
virtual HB_INT exec( const char *szStmt ) const = 0;
virtual HB_INT errorCode() const noexcept = 0;
virtual const char *lastError() const noexcept = 0;
virtual HB_SIZE lastInsertId() const;
virtual std::string escapeStr( const std::string &inputStr ) = 0;
virtual std::string quote( const std::string &inputStr ) = 0;
virtual void *gethConn() const = 0;
protected:
private:
};
//-----------------------------------------------------------------------------
// Clase TVHDbcStmt: Gestion de sentencias
class TVHDbcStmt : public TXVObject
{
private:
HB_UINT uiColumnCount = 0;
HB_UINT uiParamCount = 0;
protected:
TBindList *listParam = nullptr;
TBindList *listColumn = nullptr;
int iRowCount = 0;
int iCurrentRow = -1;
public:
// Atributos
// Los ATTR_ poner en una estructura o en una enumeracion
HB_UINT ATTR_ERRMODE = 1; // Lanaza exception
// Metodos
virtual void close() = 0;
virtual bool closeCursor() = 0;
virtual void bindParam( HB_UINT index, PHB_ITEM xParam );
virtual void bindValue( HB_UINT index, PHB_ITEM xValue );
virtual void bindColumn( HB_UINT index, PHB_ITEM xColumn );
virtual bool bindParamC( const char *szIndex, PHB_ITEM xParam );
virtual bool bindValueC( const char *szIndex, PHB_ITEM xValue );
virtual HB_INT errorCode() const noexcept = 0;
virtual const char *lastError() const noexcept = 0;
virtual bool executeStmt() = 0;
virtual bool executeQuery() = 0;
virtual HB_SIZE affectedRows() const = 0;
virtual bool setAttribute( HB_UINT uiAttribute, PHB_ITEM xValue );
virtual PHB_ITEM getAttribute( HB_UINT uiAttribute ) const;
virtual bool isPrepared() const = 0;
virtual HB_SIZE rowCount() const = 0;
virtual bool fetchDirect() noexcept = 0;
virtual bool next(); // Va a la fila siguiente
virtual bool prev(); // Va a la fila anterior
virtual bool first(); // Va a la fila primera
virtual bool last(); // Va a la fila ultima
virtual bool moveTo( HB_SIZE ulRow ); // Va a la fila indicada
virtual bool move( HB_LONGLONG llSkip ); // Va a la fila iSkip siguiente o anterior (skip)
virtual void getBound() const;
virtual void getArray( PHB_ITEM aRec ) const;
virtual void getHash( PHB_ITEM hRec ) const;
virtual void getJson( PHB_ITEM cJson ) const;
virtual void getAllArray();
virtual void getAllArray( PHB_ITEM aRec );
virtual void getAllHash();
virtual void getAllJson();
virtual void columnGet( HB_UINT columnIndex = 1 ) const;
virtual const char *columnName( HB_UINT columnIndex ) const = 0;
virtual int columnLen( HB_UINT columnIndex ) const = 0;
virtual int columnNativeType( HB_UINT columnIndex ) const = 0;
virtual const char *columnType( HB_UINT columnIndex ) const = 0;
virtual void columnNames() const;
virtual void columnNames( PHB_ITEM aColNames ) const;
virtual bool nextRowset() = 0;
virtual void *gethStmt() const = 0;
virtual void getString( HB_UINT columnIndex ) const = 0;
virtual void getInteger( HB_UINT columnIndex ) const = 0;
virtual void getDouble( HB_UINT columnIndex ) const = 0;
virtual void getDate( HB_UINT columnIndex ) const = 0;
virtual void getDateTime( HB_UINT columnIndex ) const = 0;
virtual void getBool( HB_UINT columnIndex ) const = 0;
virtual void getBlob( HB_UINT columnIndex ) const = 0;
// Metodos inline
inline HB_UINT columnCount() const
{
return uiColumnCount;
}
inline void setColumnCount( HB_UINT uiColumns = 0 )
{
uiColumnCount = uiColumns;
}
inline HB_UINT paramCount() const
{
return uiParamCount;
}
inline void setParamCount( HB_UINT uiParams = 0 )
{
uiParamCount = uiParams;
}
virtual inline bool bof() const
{
return iRowCount == 0 || iCurrentRow == -1;
}
virtual inline bool eof() const
{
return iRowCount == 0 || iCurrentRow >= iRowCount;
}
protected:
virtual void setBindParam( HB_UINT index ) const = 0;
virtual void setBindColumn( HB_UINT columnIndex, PHB_ITEM xResult ) const = 0;
private:
};
class THResultSet : public TXVObject
{
private:
PHB_ITEM aData; // Array de arrays que contiene los datos
PHB_ITEM aColumnNames; // Array de nombres de columnas
HB_SIZE uiRowCount = 0; // Total de filas
HB_SIZE uiCurrentRow; // Índice de la fila actual (base 1)
HB_SIZE uiColumnCount = 0; // Numero de columnas
public:
// Constructor y destructor /* crear otro constructor especifico para usar en TStatement sin hacer los hb_itemCopy() */
THResultSet( PHB_ITEM data, PHB_ITEM columnNames );
THResultSet();
virtual ~THResultSet() override;
// Eliminar constructor de copia y operador de asignación
THResultSet( const THResultSet & ) = delete;
THResultSet &operator=( const THResultSet & ) = delete;
// Métodos de navegación
virtual bool next(); // Avanza a la siguiente fila
virtual bool previous(); // Retrocede a la fila anterior
virtual bool first(); // Va a la primera fila
virtual bool last(); // Va a la última fila
virtual bool moveTo( HB_SIZE row ); // Va a una fila específica
virtual bool move( HB_ISIZ offset ); // Mueve el cursor un número relativo de filas
// Métodos de estado del cursor
virtual bool bof() const; // Comprueba si estamos antes de la primera fila
virtual bool eof() const; // Comprueba si estamos después de la última fila
// Métodos de acceso a datos
virtual PHB_ITEM valueByPos( HB_SIZE index ) const; // Obtiene el valor de una columna
virtual PHB_ITEM valueByName( const char *colName ) const; // Obtiene el valor de una columna
virtual inline HB_SIZE getCurrentRow() const
{
return uiCurrentRow; // Obtiene el número de fila actual
}
virtual inline HB_SIZE getRowCount() const
{
return uiRowCount; // Obtiene el número total de filas
}
virtual inline void setRowCount( HB_SIZE uiNewRowCount = 0 )
{
uiRowCount = uiNewRowCount;
}
virtual inline void setColumnCount( HB_SIZE uiNewColumnCount = 0 )
{
uiColumnCount = uiNewColumnCount;
}
inline PHB_ITEM getData() const
{
return aData;
}
inline PHB_ITEM getColumnNames() const
{
return aColumnNames;
}
private:
// Métodos auxiliares
virtual HB_SIZE findColumnIndex( const char* columnName ) const; // Busca el índice de una columna por nombre
};
//-----------------------------------------------------------------------------
#endif // _HVDBC_HPP
//-----------------------------------------------------------------------------
Code: Select all | Expand
//-----------------------------------------------------------------------------
// Harbour Data Base Connection (HDBC)
// Archivo: hdbc.hpp
// Clase virtual desde la se derivan todas
// Autor: Manu Exposito (2024)
// Notas:
//-----------------------------------------------------------------------------
#ifndef _HVDBC_HPP
#define _HVDBC_HPP
#pragma once
// De HDbc
#include "hvobject.hpp"
#include "hcompclass.hpp"
// Definicion anticipada de clases
class TVHDbc;
class TVHDbcStmt;
// De C++
#include <string>
//-----------------------------------------------------------------------------
// Clase TVHDbc: Gestion de la conexion y la base de datos
class TVHDbc : public TXVObject
{
public:
// Atributos
HB_UINT ATTR_TIMEOUT = 0; // Tiempo de espera
HB_UINT ATTR_ERRMODE = 1; // Lanaza exception
// Metodos
virtual void init() {}
virtual bool connect() = 0;
virtual bool isConnected() const = 0;
virtual void disconnect() = 0;
virtual bool reconnect() = 0;
virtual bool ping();
virtual TVHDbcStmt *prepare( const char *zSql ) const = 0;
virtual void query( const char *zSql, PHB_ITEM aColNames ) const;
virtual void tables() const = 0;
virtual void scalar( const char *zSql, HB_UINT columnIndex ) const;
virtual bool setAttribute( HB_UINT uiAttribute, PHB_ITEM xValue );
virtual PHB_ITEM getAttribute( HB_UINT uiAttribute ) const;
virtual bool beginTrans() const;
virtual bool commit() const;
virtual bool rollback() const;
virtual HB_INT exec( const char *szStmt ) const = 0;
virtual HB_INT errorCode() const noexcept = 0;
virtual const char *lastError() const noexcept = 0;
virtual HB_SIZE lastInsertId() const;
virtual std::string escapeStr( const std::string &inputStr ) = 0;
virtual std::string quote( const std::string &inputStr ) = 0;
virtual void *gethConn() const = 0;
protected:
private:
};
//-----------------------------------------------------------------------------
// Clase TVHDbcStmt: Gestion de sentencias
class TVHDbcStmt : public TXVObject
{
private:
HB_UINT uiColumnCount = 0;
HB_UINT uiParamCount = 0;
protected:
TBindList *listParam = nullptr;
TBindList *listColumn = nullptr;
int iRowCount = 0;
int iCurrentRow = -1;
public:
// Atributos
// Los ATTR_ poner en una estructura o en una enumeracion
HB_UINT ATTR_ERRMODE = 1; // Lanaza exception
// Metodos
virtual void close() = 0;
virtual bool closeCursor() = 0;
virtual void bindParam( HB_UINT index, PHB_ITEM xParam );
virtual void bindValue( HB_UINT index, PHB_ITEM xValue );
virtual void bindColumn( HB_UINT index, PHB_ITEM xColumn );
virtual bool bindParamC( const char *szIndex, PHB_ITEM xParam );
virtual bool bindValueC( const char *szIndex, PHB_ITEM xValue );
virtual HB_INT errorCode() const noexcept = 0;
virtual const char *lastError() const noexcept = 0;
virtual bool executeStmt() = 0;
virtual bool executeQuery() = 0;
virtual HB_SIZE affectedRows() const = 0;
virtual bool setAttribute( HB_UINT uiAttribute, PHB_ITEM xValue );
virtual PHB_ITEM getAttribute( HB_UINT uiAttribute ) const;
virtual bool isPrepared() const = 0;
virtual HB_SIZE rowCount() const = 0;
virtual bool fetchDirect() noexcept = 0;
virtual bool next(); // Va a la fila siguiente
virtual bool prev(); // Va a la fila anterior
virtual bool first(); // Va a la fila primera
virtual bool last(); // Va a la fila ultima
virtual bool moveTo( HB_SIZE ulRow ); // Va a la fila indicada
virtual bool move( HB_LONGLONG llSkip ); // Va a la fila iSkip siguiente o anterior (skip)
virtual void getBound() const;
virtual void getArray( PHB_ITEM aRec ) const;
virtual void getHash( PHB_ITEM hRec ) const;
virtual void getJson( PHB_ITEM cJson ) const;
virtual void getAllArray();
virtual void getAllArray( PHB_ITEM aRec );
virtual void getAllHash();
virtual void getAllJson();
virtual void columnGet( HB_UINT columnIndex = 1 ) const;
virtual const char *columnName( HB_UINT columnIndex ) const = 0;
virtual int columnLen( HB_UINT columnIndex ) const = 0;
virtual int columnNativeType( HB_UINT columnIndex ) const = 0;
virtual const char *columnType( HB_UINT columnIndex ) const = 0;
virtual void columnNames() const;
virtual void columnNames( PHB_ITEM aColNames ) const;
virtual bool nextRowset() = 0;
virtual void *gethStmt() const = 0;
virtual void getString( HB_UINT columnIndex ) const = 0;
virtual void getInteger( HB_UINT columnIndex ) const = 0;
virtual void getDouble( HB_UINT columnIndex ) const = 0;
virtual void getDate( HB_UINT columnIndex ) const = 0;
virtual void getDateTime( HB_UINT columnIndex ) const = 0;
virtual void getBool( HB_UINT columnIndex ) const = 0;
virtual void getBlob( HB_UINT columnIndex ) const = 0;
// Metodos inline
inline HB_UINT columnCount() const
{
return uiColumnCount;
}
inline void setColumnCount( HB_UINT uiColumns = 0 )
{
uiColumnCount = uiColumns;
}
inline HB_UINT paramCount() const
{
return uiParamCount;
}
inline void setParamCount( HB_UINT uiParams = 0 )
{
uiParamCount = uiParams;
}
virtual inline bool bof() const
{
return iRowCount == 0 || iCurrentRow == -1;
}
virtual inline bool eof() const
{
return iRowCount == 0 || iCurrentRow >= iRowCount;
}
protected:
virtual void setBindParam( HB_UINT index ) const = 0;
virtual void setBindColumn( HB_UINT columnIndex, PHB_ITEM xResult ) const = 0;
private:
};
class THResultSet : public TXVObject
{
private:
PHB_ITEM aData; // Array de arrays que contiene los datos
PHB_ITEM aColumnNames; // Array de nombres de columnas
HB_SIZE uiRowCount = 0; // Total de filas
HB_SIZE uiCurrentRow; // Índice de la fila actual (base 1)
HB_SIZE uiColumnCount = 0; // Numero de columnas
public:
// Constructor y destructor /* crear otro constructor especifico para usar en TStatement sin hacer los hb_itemCopy() */
THResultSet( PHB_ITEM data, PHB_ITEM columnNames );
THResultSet();
virtual ~THResultSet() override;
// Eliminar constructor de copia y operador de asignación
THResultSet( const THResultSet & ) = delete;
THResultSet &operator=( const THResultSet & ) = delete;
// Métodos de navegación
virtual bool next(); // Avanza a la siguiente fila
virtual bool previous(); // Retrocede a la fila anterior
virtual bool first(); // Va a la primera fila
virtual bool last(); // Va a la última fila
virtual bool moveTo( HB_SIZE row ); // Va a una fila específica
virtual bool move( HB_ISIZ offset ); // Mueve el cursor un número relativo de filas
// Métodos de estado del cursor
virtual bool bof() const; // Comprueba si estamos antes de la primera fila
virtual bool eof() const; // Comprueba si estamos después de la última fila
// Métodos de acceso a datos
virtual PHB_ITEM valueByPos( HB_SIZE index ) const; // Obtiene el valor de una columna
virtual PHB_ITEM valueByName( const char *colName ) const; // Obtiene el valor de una columna
virtual inline HB_SIZE getCurrentRow() const
{
return uiCurrentRow; // Obtiene el número de fila actual
}
virtual inline HB_SIZE getRowCount() const
{
return uiRowCount; // Obtiene el número total de filas
}
virtual inline void setRowCount( HB_SIZE uiNewRowCount = 0 )
{
uiRowCount = uiNewRowCount;
}
virtual inline void setColumnCount( HB_SIZE uiNewColumnCount = 0 )
{
uiColumnCount = uiNewColumnCount;
}
inline PHB_ITEM getData() const
{
return aData;
}
inline PHB_ITEM getColumnNames() const
{
return aColumnNames;
}
private:
// Métodos auxiliares
virtual HB_SIZE findColumnIndex( const char* columnName ) const; // Busca el índice de una columna por nombre
};
//-----------------------------------------------------------------------------
#endif // _HVDBC_HPP
//-----------------------------------------------------------------------------
Code: Select all | Expand
///////////////////////////////////////////////////////////////////////////////
// Proyecto: hdbc
// Fichero: test008.prg
// Autor: Manu Exposito
// Fecha:
// Descripcion: Traspasa test.dbf de los ejemplos de Harbour a SQL.
// Si no existe la bases de datos la crea.
// Si no existe la tabla test la crea.
// Uso de bindParam
///////////////////////////////////////////////////////////////////////////////
//------------------------------------------------------------------------------
#include "hdbc.ch"
#include "postgresql_connect.ch"
#define ID_CARGA 500
//------------------------------------------------------------------------------
// Programa principal
procedure main()
local oDb, e
local cCreaTable
TEXT INTO cCreaTable
CREATE TABLE IF NOT EXISTS test
(
id SERIAL,
first VARCHAR( 20 ),
last VARCHAR( 20 ),
street VARCHAR( 30 ),
city VARCHAR( 30 ),
state VARCHAR( 2 ),
zip VARCHAR( 10 ),
hiredate DATE,
married BOOLEAN,
age INTEGER,
salary DECIMAL( 9, 2 ),
notes VARCHAR( 70 ),
PRIMARY KEY ( id )
)
ENDTEXT
cls
msg( "Traspaso de datos..." )
try
oDb := THDbc():new( _DRIVER_ )
oDb:connect( _CONN_STRING_ )
oDb:exec( cCreaTable )
traspasa( oDb )
catch e
eval( errorBlock(), e )
finally
oDb:disconnect()
msg( "Esto es todo!!!" )
end
return
//------------------------------------------------------------------------------
// Usa sentencias preparadas en el lado del servidor y transacciones.
static procedure traspasa( oDb )
local n := 0, nSec
local oInsert
local first, last, street, city, state, zip, hiredate, married, age, salary, notes
local cSentencia := "INSERT INTO test ( first, last, street, city, state, zip, " + ;
"hiredate, married, age, salary, notes ) " + ;
"VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11 );"
if file( "test.dbf" )
use test new
oInsert := oDb:prepareStatement( cSentencia ) // Crea el objeto y prepara la sentencia
// Vincula las variables harbour con cada una de las "?" por su posicion
oInsert:bindParam( 1, @first )
oInsert:bindParam( 2, @last )
oInsert:bindParam( 3, @street )
oInsert:bindParam( 4, @city )
oInsert:bindParam( 5, @state )
oInsert:bindParam( 6, @zip )
oInsert:bindParam( 7, @hiredate )
oInsert:bindParam( 8, @married )
oInsert:bindParam( 9, @age )
oInsert:bindParam( 10, @salary )
oInsert:bindParam( 11, @notes )
nSec := hb_milliSeconds()
oDb:beginTrans()
while n < ID_CARGA
while test->( !eof() )
first := test->first
last := test->last
street := test->street
city := test->city
state := test->state
zip := test->zip
hiredate := test->hiredate
married := test->married
age := test->age
salary := test->salary
notes := test->notes
oInsert:execute()
++n
test->( dbskip( 1 ) )
end
test->( DbGoTop() )
end
oDb:commit()
nSec := hb_milliSeconds() - nSec
msg( "Se han pasado " + Hb_NToS( n ) + " registros en " + Hb_NToS( nSec ) + " milisegundos", "Uso de bindParam" )
else
msg( "Fichero test.dbf no existe" )
endif
return
//------------------------------------------------------------------------------
Code: Select all | Expand
///////////////////////////////////////////////////////////////////////////////
// Proyecto: hdbc
// Fichero: test008.prg
// Autor: Manu Exposito
// Fecha:
// Descripcion: Traspasa test.dbf de los ejemplos de Harbour a SQL.
// Si no existe la bases de datos la crea.
// Si no existe la tabla test la crea.
// Uso de bindParam
///////////////////////////////////////////////////////////////////////////////
//------------------------------------------------------------------------------
#include "hdbc.ch"
#include "postgresql_connect.ch"
#define ID_CARGA 500
//------------------------------------------------------------------------------
// Programa principal
procedure main()
local oDb, e
local cCreaTable
TEXT INTO cCreaTable
CREATE TABLE IF NOT EXISTS test
(
id SERIAL,
first VARCHAR( 20 ),
last VARCHAR( 20 ),
street VARCHAR( 30 ),
city VARCHAR( 30 ),
state VARCHAR( 2 ),
zip VARCHAR( 10 ),
hiredate DATE,
married BOOLEAN,
age INTEGER,
salary DECIMAL( 9, 2 ),
notes VARCHAR( 70 ),
PRIMARY KEY ( id )
)
ENDTEXT
cls
msg( "Traspaso de datos..." )
try
oDb := THDbc():new( _DRIVER_ )
oDb:connect( _CONN_STRING_ )
oDb:exec( cCreaTable )
traspasa( oDb )
catch e
eval( errorBlock(), e )
finally
oDb:disconnect()
msg( "Esto es todo!!!" )
end
return
//------------------------------------------------------------------------------
// Usa sentencias preparadas en el lado del servidor y transacciones.
static procedure traspasa( oDb )
local n := 0, nSec
local oInsert
local first, last, street, city, state, zip, hiredate, married, age, salary, notes
local cSentencia := "INSERT INTO test ( first, last, street, city, state, zip, " + ;
"hiredate, married, age, salary, notes ) " + ;
"VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11 );"
if file( "test.dbf" )
use test new
oInsert := oDb:prepareStatement( cSentencia ) // Crea el objeto y prepara la sentencia
// Vincula las variables harbour con cada una de las "?" por su posicion
oInsert:bindParam( 1, @first )
oInsert:bindParam( 2, @last )
oInsert:bindParam( 3, @street )
oInsert:bindParam( 4, @city )
oInsert:bindParam( 5, @state )
oInsert:bindParam( 6, @zip )
oInsert:bindParam( 7, @hiredate )
oInsert:bindParam( 8, @married )
oInsert:bindParam( 9, @age )
oInsert:bindParam( 10, @salary )
oInsert:bindParam( 11, @notes )
nSec := hb_milliSeconds()
oDb:beginTrans()
while n < ID_CARGA
while test->( !eof() )
first := test->first
last := test->last
street := test->street
city := test->city
state := test->state
zip := test->zip
hiredate := test->hiredate
married := test->married
age := test->age
salary := test->salary
notes := test->notes
oInsert:execute()
++n
test->( dbskip( 1 ) )
end
test->( DbGoTop() )
end
oDb:commit()
nSec := hb_milliSeconds() - nSec
msg( "Se han pasado " + Hb_NToS( n ) + " registros en " + Hb_NToS( nSec ) + " milisegundos", "Uso de bindParam" )
else
msg( "Fichero test.dbf no existe" )
endif
return
//------------------------------------------------------------------------------
Code: Select all | Expand
hbct.lib(files.obj) : error LNK2005: _HB_FUN_FILESIZE already defined in
Code: Select all | Expand
hbct.lib(files.obj) : error LNK2005: _HB_FUN_FILESIZE already defined in
]]>REDEFINE RBBTN [ <oBtn> ] ;
[ ID <nID> ];
[ PROMPT <cCaption> ];
[ BITMAP <cBitmap> ] ;
[ ACTION <uAction> ] ;
[ <of: OF, DIALOG, WINDOW> <oWnd> ] ;
[ WHEN <WhenFunc> ] ;
[ <lBorder: BORDER> ] ;
[ <lRound: ROUND> [ <rs: RSIZE, ROUNDSIZE><nRound> ] ] ;
[ <lAdjust: ADJUST> ] ;
[ <layout: TOP, LEFT, BOTTOM, RIGHT, MOSTLEFT, MOSTRIGHT, CENTER> ] ;
[ <type: NORMAL, POPUP, SPLITPOPUP, SAYBUTTON> ] ;
[ <lGrouping: GROUPBUTTON> [<lFirstElm: FIRST>][ <lEndElm: END> ] ];
[ MENU <oPopup> ];
[ MESSAGE <cMsg> ] ;
[ TOOLTIP <cToolTip> ];
[ FONT <oFont> ];
[ <lTrans: TRANSPARENT> ];
[ GRADIANT <aGradiant> ];
[ LINECOLORS <nClrBoxIn>, <nClrBoxOut> ]
]]>REDEFINE RBBTN [ <oBtn> ] ;
[ ID <nID> ];
[ PROMPT <cCaption> ];
[ BITMAP <cBitmap> ] ;
[ ACTION <uAction> ] ;
[ <of: OF, DIALOG, WINDOW> <oWnd> ] ;
[ WHEN <WhenFunc> ] ;
[ <lBorder: BORDER> ] ;
[ <lRound: ROUND> [ <rs: RSIZE, ROUNDSIZE><nRound> ] ] ;
[ <lAdjust: ADJUST> ] ;
[ <layout: TOP, LEFT, BOTTOM, RIGHT, MOSTLEFT, MOSTRIGHT, CENTER> ] ;
[ <type: NORMAL, POPUP, SPLITPOPUP, SAYBUTTON> ] ;
[ <lGrouping: GROUPBUTTON> [<lFirstElm: FIRST>][ <lEndElm: END> ] ];
[ MENU <oPopup> ];
[ MESSAGE <cMsg> ] ;
[ TOOLTIP <cToolTip> ];
[ FONT <oFont> ];
[ <lTrans: TRANSPARENT> ];
[ GRADIANT <aGradiant> ];
[ LINECOLORS <nClrBoxIn>, <nClrBoxOut> ]
Code: Select all | Expand
#include "FiveWin.ch"
#include "Ribbon.ch"
function Main()
local oDlg, oPopup, oBtn
DEFINE DIALOG oDlg RESOURCE "Test"
REDEFINE RBBTN oBtn ID 100 OF oDlg SPLITPOPUP ;
MENU BuildPopup() ROUND ACTION MsgInfo( "click" ) ;
PROMPT "Class TRBtn" BITMAP "..\bitmaps\16x16\fivetech.bmp" LEFT
ACTIVATE DIALOG oDlg CENTERED
return nil
function BuildPopup()
local oPopup
MENU oPopup POPUP 2007
MENUITEM "One" ACTION MsgInfo( "One" ) FILE "..\bitmaps\16x16\fivetech.bmp"
MENUITEM "Two" ACTION MsgInfo( "Two" ) FILE "..\bitmaps\16x16\fivetech.bmp"
SEPARATOR
MENUITEM "Three" ACTION MsgInfo( "Three" ) FILE "..\bitmaps\16x16\fivetech.bmp"
ENDMENU
return oPopup
Code: Select all | Expand
#include "FiveWin.ch"
#include "Ribbon.ch"
function Main()
local oDlg, oPopup, oBtn
DEFINE DIALOG oDlg RESOURCE "Test"
REDEFINE RBBTN oBtn ID 100 OF oDlg SPLITPOPUP ;
MENU BuildPopup() ROUND ACTION MsgInfo( "click" ) ;
PROMPT "Class TRBtn" BITMAP "..\bitmaps\16x16\fivetech.bmp" LEFT
ACTIVATE DIALOG oDlg CENTERED
return nil
function BuildPopup()
local oPopup
MENU oPopup POPUP 2007
MENUITEM "One" ACTION MsgInfo( "One" ) FILE "..\bitmaps\16x16\fivetech.bmp"
MENUITEM "Two" ACTION MsgInfo( "Two" ) FILE "..\bitmaps\16x16\fivetech.bmp"
SEPARATOR
MENUITEM "Three" ACTION MsgInfo( "Three" ) FILE "..\bitmaps\16x16\fivetech.bmp"
ENDMENU
return oPopup
Code: Select all | Expand
METHOD LButtonUp( nRow, nCol ) CLASS TRBtn
.../...
// Modified to handle Codeblock as oPopup 2014-10-10
if oWnd:oPopup == nil
oWnd:oPopup = XEval( ::oPopup, Self )
oWnd:oPopup:Activate( ::nTop + ::nHeight(), ::nLeft, oWnd, .F. )
// ESTA ES LA LINEA QUE HAS DE MODIFICAR
if oWnd:ClassName() == "TRBGROUP" .and. oWnd:oGrPopup != nil
Eval( oWnd:oGrPopup:bLostFocus )
endif
endif
De todas formas miraré más profundamente el problema]]>Code: Select all | Expand
METHOD LButtonUp( nRow, nCol ) CLASS TRBtn
.../...
// Modified to handle Codeblock as oPopup 2014-10-10
if oWnd:oPopup == nil
oWnd:oPopup = XEval( ::oPopup, Self )
oWnd:oPopup:Activate( ::nTop + ::nHeight(), ::nLeft, oWnd, .F. )
// ESTA ES LA LINEA QUE HAS DE MODIFICAR
if oWnd:ClassName() == "TRBGROUP" .and. oWnd:oGrPopup != nil
Eval( oWnd:oGrPopup:bLostFocus )
endif
endif
De todas formas miraré más profundamente el problema]]>Code: Select all | Expand
#include <windows.h>
LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US
GMAIL DIALOGEX DISCARDABLE 6, 18, 346, 78
STYLE DS_SHELLFONT|WS_POPUP|DS_MODALFRAME|DS_3DLOOK|WS_CAPTION|WS_SYSMENU|WS_VISIBLE
CAPTION "GMAIL oAUTH"
FONT 8, "Tahoma"
{
CONTROL "Connect with Gmail", 4001, "Button", WS_TABSTOP, 103, 21, 140, 36
CONTROL "", 4002, "Static", SS_BITMAP|SS_CENTERIMAGE|WS_BORDER, 8, 8, 60, 60
CONTROL "This is a label:", 4003, "Static", WS_GROUP, 76, 8, 200, 8
CONTROL "This is a label:", 4004, "Static", WS_GROUP, 76, 24, 200, 8
CONTROL "Disconnect", 4005, "Button", WS_TABSTOP, 80, 52, 56, 14
CONTROL "Send Mail", 4006, "Button", WS_TABSTOP, 280, 4, 58, 20
}
Code: Select all | Expand
#include <windows.h>
LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US
GMAIL DIALOGEX DISCARDABLE 6, 18, 346, 78
STYLE DS_SHELLFONT|WS_POPUP|DS_MODALFRAME|DS_3DLOOK|WS_CAPTION|WS_SYSMENU|WS_VISIBLE
CAPTION "GMAIL oAUTH"
FONT 8, "Tahoma"
{
CONTROL "Connect with Gmail", 4001, "Button", WS_TABSTOP, 103, 21, 140, 36
CONTROL "", 4002, "Static", SS_BITMAP|SS_CENTERIMAGE|WS_BORDER, 8, 8, 60, 60
CONTROL "This is a label:", 4003, "Static", WS_GROUP, 76, 8, 200, 8
CONTROL "This is a label:", 4004, "Static", WS_GROUP, 76, 24, 200, 8
CONTROL "Disconnect", 4005, "Button", WS_TABSTOP, 80, 52, 56, 14
CONTROL "Send Mail", 4006, "Button", WS_TABSTOP, 280, 4, 58, 20
}
Code: Select all | Expand
set path=c:\bcc77\bin
c:\harbour\bin\win\bcc\hbmk2 testgmail.hbp -comp=bcc
Code: Select all | Expand
-gui
-Ic:\fwh\include
testgmail.prg
testgmail.rc
-Lc:\fwh\lib
-lFiveH
-lFiveHC
xhb.hbc
hbct.hbc
hbmzip.hbc
hbziparc.hbc
hbcurl.hbc
Code: Select all | Expand
set path=c:\bcc77\bin
c:\harbour\bin\win\bcc\hbmk2 testgmail.hbp -comp=bcc
Code: Select all | Expand
-gui
-Ic:\fwh\include
testgmail.prg
testgmail.rc
-Lc:\fwh\lib
-lFiveH
-lFiveHC
xhb.hbc
hbct.hbc
hbmzip.hbc
hbziparc.hbc
hbcurl.hbc
Code: Select all | Expand
shellexecute(0,"runas","..\openssl\bin\openssl x509 -in ..\dbf\certificado.pem -noout -enddate >..\dbf\fecha.txt","","",1)
Code: Select all | Expand
shellexecute(0,"runas","..\openssl\bin\openssl x509 -in ..\dbf\certificado.pem -noout -enddate >..\dbf\fecha.txt","","",1)
Code: Select all | Expand
vresultado:=waitrun("..\openssl\bin\openssl.exe x509 -in ..\dbf\b96370556.pem -noout -enddate >..\dbf\fecha.txt")
msgalert(vresultado)
Code: Select all | Expand
vresultado:=waitrun("..\openssl\bin\openssl.exe x509 -in ..\dbf\b96370556.pem -noout -enddate >..\dbf\fecha.txt")
msgalert(vresultado)
Code: Select all | Expand
cFileCer := "b96370556.pem"
cToTxt := "fecha.txt"
bBloc := {|cCer, cTxt| "openssl.exe x509 -in " + cCer + " -noout -enddate > " + cTxt }
WaitRun( (Eval(bBloc , cFileCer, cToTxt )), 0 )
saludos]]>Code: Select all | Expand
cFileCer := "b96370556.pem"
cToTxt := "fecha.txt"
bBloc := {|cCer, cTxt| "openssl.exe x509 -in " + cCer + " -noout -enddate > " + cTxt }
WaitRun( (Eval(bBloc , cFileCer, cToTxt )), 0 )
saludos]]>Code: Select all | Expand
cComando := cComando + '..\openssl\bin\openssl.exe x509 -in ..\dbf\certificado.pem -noout -enddate >..\dbf\fecha.txt'
memowrit( 'cert.bat', cComando )
WaitRun( 'cert.bat' , 0 )
]]>Code: Select all | Expand
cComando := cComando + '..\openssl\bin\openssl.exe x509 -in ..\dbf\certificado.pem -noout -enddate >..\dbf\fecha.txt'
memowrit( 'cert.bat', cComando )
WaitRun( 'cert.bat' , 0 )
]]>Code: Select all | Expand
10/03/25 14:52:15: EXCESS RELEASE OF FONT Ms Sans Serif[ hFont : 0] ( nCount : 0 )
<-TFONT:END(310) <-TCONTROL:DESTROY(2367) <-TGET:DESTROY(854) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1877) <-TGET:HANDLEEVENT(666) <-_FWH(259) <-DIALOGBOXINDIRECTW(0) <-TDIALOG:ACTIVATE(325)
------------------------------------------------------------
10/03/25 14:52:15: EXCESS RELEASE OF FONT Ms Sans Serif[ hFont : 0] ( nCount : 0 )
<-TFONT:END(310) <-TCONTROL:DESTROY(2367) <-TCOMBOBOX:DESTROY(1125) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1877) <-TCOMBOBOX:HANDLEEVENT(932) <-_FWH(259) <-DIALOGBOXINDIRECTW(0) <-TDIALOG:ACTIVATE(325)
------------------------------------------------------------
10/03/25 15:05:33: EXCESS RELEASE OF FONT Ms Sans Serif[ hFont : 0] ( nCount : 0 )
<-TFONT:END(310) <-TCONTROL:DESTROY(2367) <-TGET:DESTROY(854) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1877) <-TGET:HANDLEEVENT(666) <-_FWH(259) <-DIALOGBOXINDIRECTW(0) <-TDIALOG:ACTIVATE(325)
------------------------------------------------------------
10/03/25 15:05:33: EXCESS RELEASE OF FONT Ms Sans Serif[ hFont : 0] ( nCount : 0 )
<-TFONT:END(310) <-TCONTROL:DESTROY(2367) <-TCOMBOBOX:DESTROY(1125) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1877) <-TCOMBOBOX:HANDLEEVENT(932) <-_FWH(259) <-DIALOGBOXINDIRECTW(0) <-TDIALOG:ACTIVATE(325)
------------------------------------------------------------
Code: Select all | Expand
10/03/25 14:52:15: EXCESS RELEASE OF FONT Ms Sans Serif[ hFont : 0] ( nCount : 0 )
<-TFONT:END(310) <-TCONTROL:DESTROY(2367) <-TGET:DESTROY(854) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1877) <-TGET:HANDLEEVENT(666) <-_FWH(259) <-DIALOGBOXINDIRECTW(0) <-TDIALOG:ACTIVATE(325)
------------------------------------------------------------
10/03/25 14:52:15: EXCESS RELEASE OF FONT Ms Sans Serif[ hFont : 0] ( nCount : 0 )
<-TFONT:END(310) <-TCONTROL:DESTROY(2367) <-TCOMBOBOX:DESTROY(1125) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1877) <-TCOMBOBOX:HANDLEEVENT(932) <-_FWH(259) <-DIALOGBOXINDIRECTW(0) <-TDIALOG:ACTIVATE(325)
------------------------------------------------------------
10/03/25 15:05:33: EXCESS RELEASE OF FONT Ms Sans Serif[ hFont : 0] ( nCount : 0 )
<-TFONT:END(310) <-TCONTROL:DESTROY(2367) <-TGET:DESTROY(854) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1877) <-TGET:HANDLEEVENT(666) <-_FWH(259) <-DIALOGBOXINDIRECTW(0) <-TDIALOG:ACTIVATE(325)
------------------------------------------------------------
10/03/25 15:05:33: EXCESS RELEASE OF FONT Ms Sans Serif[ hFont : 0] ( nCount : 0 )
<-TFONT:END(310) <-TCONTROL:DESTROY(2367) <-TCOMBOBOX:DESTROY(1125) <-TWINDOW:HANDLEEVENT(0) <-TCONTROL:HANDLEEVENT(1877) <-TCOMBOBOX:HANDLEEVENT(932) <-_FWH(259) <-DIALOGBOXINDIRECTW(0) <-TDIALOG:ACTIVATE(325)
------------------------------------------------------------
Code: Select all | Expand
xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)
Copyright 1999-2024, http://www.xharbour.org http://www.harbour-project.org/
Code: Select all | Expand
xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)
Copyright 1999-2024, http://www.xharbour.org http://www.harbour-project.org/
Code: Select all | Expand
2025-03-11 09:20 UTC+0100 Enrico Maria Giordano <e.m.giordano@emagsoftware.it>
* include\hbver.ch
* Bumped to 2025
* include/hbver.h
* Bumped to 1.3.2
Code: Select all | Expand
2025-03-11 09:20 UTC+0100 Enrico Maria Giordano <e.m.giordano@emagsoftware.it>
* include\hbver.ch
* Bumped to 2025
* include/hbver.h
* Bumped to 1.3.2
Code: Select all | Expand
Empresa
========
Empresa:.01 -Filial:.01
Fantasia:.EMPRESA TESTE
Real:.EMPRESA TESTE
Telefone:.
Email:.
Cidade:.SH/PR
Application
===========
Path and name: Y:\Sistemas\Sig_Win\CompuRMT.exe (32 bits)
Size: ********* bytes
Time from start: 0 hours 0 mins 23 secs
Error occurred at: 12/03/25, 16:48:06
Error description:
Stack Calls
===========
Called from: .\source\classes\meter.prg => TMETER:PAINT(247)
Called from: .\source\classes\meter.prg => TMETER:DISPLAY(236)
Called from: .\source\classes\control.prg => TMETER:HANDLEEVENT(1843)
Called from: .\source\classes\window.prg => _FWH(14)
Called from: => SYSREFRESH(0)
Called from: .\source\internal\system.prg => SYSWAIT(13)
Called from: Y:\SISTEMAS\SIG_WIN\RPO\CompuUDM\UDMA900.RPO => CARGANCM2024(1699)
Called from: Y:\SISTEMAS\SIG_WIN\RPO\CompuUDM\UDMA900.RPO => CARGASVIAFTP(524)
Called from: .\PRG\CompuRmt.PRG => LOGABERT(1152)
Called from: .\PRG\CompuRmt.PRG => (b)MAIN(673)
Called from: .\source\classes\window.prg => TWINDOW:ACTIVATE(1120)
Called from: .\PRG\CompuRmt.PRG => MAIN(673)
System
======
CPU type: Intel(R) Core(TM) i7-4810MQ CPU @ 2.80GHz 2794 Mhz
Hardware memory: 16290 megs
Free System resources: 90 %
GDI resources: 90 %
User resources: 90 %
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)
Windows version: 6.2, Build 9200
Fivewin: FWH 25.01
Variables in use
================
Procedure Type Value
==========================
TMETER:PAINT
Local 1: O Class: TMETER
Local 2: N 0
Local 3: U NIL
Local 4: U
Local 5: U NIL
Local 6: C "Processando..."
Local 7: N 0
Local 8: N 0
Local 9: U NIL
Local 10: U NIL
TMETER:DISPLAY
Local 1: O Class: TMETER
TMETER:HANDLEEVENT
Param 1: N 15
Param 2: N 0
Param 3: N 0
Local 1: O Class: TMETER
Local 2: U NIL
_FWH
Param 1: N 0
Param 2: N 15
Param 3: N 0
Param 4: N 0
Param 5: N 15
Local 1: O Class: TMETER
SYSREFRESH
SYSWAIT
Param 1: N 1
Local 1: N 60487.82
CARGANCM2024
Local 1: L F
Local 2: L F
Local 3: A Len: 0
Local 4: A Len: 5
1 O :-_-{ TDIALOG Object }:
2 O :-_-{ TMETER Object }:
3 O :-_-{ TSTSAY Object }:
4 O :-_-{ TSAY Object }:
5 N : 0:
Local 5: N 0
Local 6: L F
Local 7: C "Y:\SISTEMAS\SIG_WIN\Dados\NCM010"
CARGASVIAFTP
Param 1: L T
Local 1: C ""
Local 2: L T
Local 3: A Len: 3
1 C :SM0:
2 N : 1:
3 N : 1:
Local 4: C "Y:\SISTEMAS\SIG_WIN\Dados\NCM010.dbf"
Local 5: C "Y:\SISTEMAS\SIG_WIN\Dados\NCM010"
Local 6: C "NCM"
Local 7: C "11/03/25"
Local 8: O Class: TINI
Local 9: N 6
Local 10: N 0
Local 11: N 6
Local 12: L T
Local 13: A Len: 6
1 C :ALQ:
2 C :ANP:
3 C :AVS:
4 C :CBF:
5 C :CES:
6 C :NCM:
Local 14: A Len: 6
1 L :F:
2 L :T:
3 L :F:
4 L :F:
5 L :F:
6 L :F:
Local 15: L T
LOGABERT
Param 1: L F
Param 2: L T
Param 3: L T
Param 4: L T
Param 5: L F
Param 6: L T
Local 1: L T
Local 2: L F
Local 3: O Class: TDIALOG
Local 4: U NIL
Local 5: U NIL
Local 6: U NIL
Local 7: N 0
Local 8: U NIL
Local 9: U NIL
Local 10: C ""
Local 11: A Len: 0
Local 12: C ""
(b)MAIN
Param 1: O Class: TWINDOW
TWINDOW:ACTIVATE
Param 1: C "MAXIMIZED"
Param 2: U NIL
Param 3: U NIL
Param 4: U NIL
Param 5: U NIL
Param 6: U NIL
Param 7: B {|| Block }
Param 8: B {|| Block }
Param 9: U NIL
Param 10: U NIL
Param 11: U NIL
Param 12: U NIL
Param 13: U NIL
Param 14: U NIL
Param 15: U NIL
Param 16: U NIL
Param 17: B {|| Block }
Param 18: U NIL
Param 19: U NIL
Param 20: L F
Param 21: U NIL
Local 1: O Class: TWINDOW
Local 2: U NIL
Local 3: U NIL
MAIN
Local 1: U NIL
Local 2: U NIL
Local 3: U NIL
Local 4: U NIL
Local 5: U NIL
Local 6: U NIL
Local 7: C "Release {dt}{h}: {12/03/25}{16:40:49}"
Local 8: C "xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)"
Local 9: C "FWH 25.01"
Local 10: N 680
Local 11: L T
Local 12: L F
Local 13: L T
Local 14: O Class: TCURSOR
Local 15: C "10740"
Local 16: C "ReleasePAF .003.000"
Local 17: C "ReleasePDV .003.321"
Local 18: C "ReleaseNFe .003.029"
Local 19: C "ReleaseSql .003.015"
Local 20: A Len: 0
Local 21: A Len: 0
Local 22: U NIL
Local 23: O Class: TFONT
Linked RDDs
===========
DBF
DBFFPT
SIXCDX
DBFBLOB
DBFCDX
DBFNTX
ADS
ADT
ADSVFP
ADSCDX
ADSNTX
DataBases in use
================
1: MNT <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
12 12 .F. .F.
Indexes in use TagName
=> CODUSUARIO+INICONEXAO TAG_MNT_01
USUREDE TAG_MNT_02
HOST TAG_MNT_03
IP TAG_MNT_04
INICONEXAO TAG_MNT_05
AMBIENTE+USUREDE TAG_MNT_06
NOMUSUARIO TAG_MNT_07
FUNCAO TAG_MNT_08
ROTINA TAG_MNT_09
SETOR TAG_MNT_10
DEPARTAMEN TAG_MNT_11
COD_FIL TAG_MNT_12
EMPRESA TAG_MNT_13
MODULO TAG_MNT_14
Relations in use
2: HLP <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
20 28 .F. .F.
Indexes in use TagName
=> VARIAVEL TAG_TOP_01
ALIAS+VARIAVEL TAG_TOP_02
FUNNAME+VARIAVEL TAG_TOP_03
Relations in use
3: TOP <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 4 .F. .F.
Indexes in use TagName
=> ID TAG_TOP_01
Relations in use
4: USU <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 3 .F. .F.
Indexes in use TagName
=> CodUsu TAG_USU_01
NomUsu TAG_USU_02
SenUsu TAG_USU_03
Relations in use
5: SM0 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 1 .F. .F.
Indexes in use TagName
=> M0_CODIGO+M0_CODFIL TAG_EMP_01
Relations in use
6: MOD <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
16 17 .F. .F.
Indexes in use TagName
ID TAG_MOD_01
NOME TAG_MOD_02
=> DESC TAG_MOD_03
Relations in use
7: PER <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
24 23 .F. .T.
Indexes in use TagName
=> CODUSU+CODEMP+CODFIL+MODULO TAG_PER_01
CODUSU+CODEMP+CODFIL+ARQMNU TAG_PER_02
Relations in use
8: SX1 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 2 .F. .F.
Indexes in use TagName
=> X1_GRUPO+X1_ORDEM TAG_SX1_01
X1_GRUPO+X1_VARIAVL+X1_ORDEM TAG_SX1_02
X1_GRUPO+X1_VARIAVL+X1_VAR01 TAG_SX1_03
Relations in use
9: SX2 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
241 240 .F. .T.
Indexes in use TagName
=> X2_CHAVE TAG_SX2_01
X2_ARQUIVO TAG_SX2_02
Relations in use
10: SX3 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
5489 5944 .F. .F.
Indexes in use TagName
=> X3_ARQUIVO+X3_ORDEM TAG_SX3_01
X3_CAMPO+X3_ARQUIVO TAG_SX3_02
X3_ARQUIVO+X3_FOLDER TAG_SX3_03
X3_ARQUIVO+X3_CAMPO TAG_SX3_04
Relations in use
11: SX4 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> X4_FILIAL+DTOS(X4_DATA)+X4_CODUSU TAG_SX4_01
X4_FILIAL+DTOS(X4_DATA)+X4_NOMUSU TAG_SX4_02
X4_FILIAL+DTOS(X4_DTCOMP)+X4_CODUSU
TAG_SX4_03
X4_FILIAL+X4_CODUSU+DTOS(X4_DATA)+X4_HORA
TAG_SX4_04
X4_FILIAL+DTOS(X4_DATA)+X4_HORA TAG_SX4_05
X4_FILIAL+X4_CODUSU+DTOS(X4_DTCOMP)+X4_HRCOMP
TAG_SX4_06
X4_FILIAL+DTOS(X4_DTCOMP)+X4_HRCOMP
TAG_SX4_07
X4_FILIAL+X4_NOMUSU TAG_SX4_08
Relations in use
12: SX6 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
201 451 .F. .F.
Indexes in use TagName
=> X6_VAR TAG_SX6_01
Relations in use
13: SX7 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 938 .F. .F.
Indexes in use TagName
=> X7_CAMPO+X7_SEQUENC TAG_SX6_01
Relations in use
14: SIX <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
876 950 .F. .F.
Indexes in use TagName
=> INDICE+ORDEM TAG_SIX_01
CHAVE TAG_SIX_02
Relations in use
15: SIY <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
2 108 .F. .F.
Indexes in use TagName
=> INDICE+ORDEM+CAMPO TAG_SIY_01
Relations in use
16: SXA <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
34 48 .F. .F.
Indexes in use TagName
=> XA_ALIAS+XA_ORDEM TAG_SXA_01
Relations in use
17: SXB <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
949 1113 .F. .F.
Indexes in use TagName
=> XB_ALIAS+XB_TIPO+XB_SEQ+XB_COLUNA TAG_SXB_01
XB_ALIAS+XB_TIPO+XB_COLUNA+XB_SEQ TAG_SXB_02
Relations in use
18: SXC <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
12 61 .F. .F.
Indexes in use TagName
=> XC_CAMPO+XC_RAMO+XC_SEGMENT TAG_SXC_01
Relations in use
19: SXE <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 5 .F. .F.
Indexes in use TagName
Relations in use
20: SXF <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> XF_FILIAL+XF_MODULO+XF_USUARIO+XF_TIPO+DESCEND(DTOS(XF_DATA))+DESCEND(XF_HORA)
TAG_SXF_01
XF_FILIAL+XF_MODULO+XF_USUARIO+XF_TIPO+XF_FUNCAO+XF_PARAMET
TAG_SXF_02
XF_FILIAL+XF_MODULO+XF_USUARIO+XF_FUNCAO+XF_PARAMET+XF_TIPO
TAG_SXF_03
Relations in use
21: LOG <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> CALIAS+DTOS(DATA) TAG_LOG_01
USU +CALIAS+DTOS(DATA) TAG_LOG_02
DTOS(DATA) TAG_LOG_03
USU + DTOS(DATA) TAG_LOG_04
UPPER( MODU ) + DTOS(DATA) TAG_LOG_05
USU + UPPER( MODU ) + DTOS(DATA) TAG_LOG_06
Relations in use
22: SXG <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
132 414 .F. .F.
Indexes in use TagName
=> XG_MODULO+XG_ORDEM+XG_CODUSU TAG_SXG_01
XG_CODUSU+XG_FUNCAO TAG_SXG_02
XG_MODULO+XG_CODUSU+XG_ORDEM TAG_SXG_03
Relations in use
23: SM2 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
4 4 .F. .F.
Indexes in use TagName
=> Upper(M2_FILIAL+DESCEND(DTOS(M2_DATA))+DESCEND(M2_SEQ))
SM201001
Upper(M2_FILIAL+DTOS(M2_DATA)) SM201002
Relations in use
24: SX5 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 2813 .F. .F.
Indexes in use TagName
=> Upper(X5_FILIAL+X5_TABELA+X5_CHAVE)
SX501001
Upper(X5_FILIAL+X5_TABELA+substr(X5_DESCRI,1,100))
SX501002
Relations in use
25: AGE <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(GE_FILIAL+GE_TIPO+DESCEND(DTOS(GE_DTAGE)))
AGE01001
Upper(GE_FILIAL+GE_TIPO+DESCEND(DTOS(GE_DTCAD)))
AGE01002
Upper(GE_FILIAL+GE_NOMCLI) AGE01003
Upper(GE_FILIAL+GE_CODCLI) AGE01004
Upper(GE_FILIAL+GE_TIPO+DTOS(GE_DTAGE))
AGE01005
Relations in use
26: TEL <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(EL_FILIAL+EL_NOMEFON) TEL01001
Upper(EL_FILIAL+EL_FONEFON) TEL01002
Upper(EL_FILIAL+EL_FANTASI) TEL01003
Upper(EL_FILIAL+EL_CODFON) TEL01004
Relations in use
27: SA1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 1 .F. .F.
Indexes in use TagName
=> Upper(A1_FILIAL+A1_CODCLI) SA101001
Upper(A1_FILIAL+A1_NOMCLI) SA101002
Upper(A1_FILIAL+STRZERO(MONTH(A1_DTNASCL),2)+STRZERO(DAY(A1_DTNASCL),2)+A1_NOMCLI)
SA101003
Upper(A1_FILIAL+(STRZERO(MONTH(A1_DTNASCO),2)+STRZERO(DAY(A1_DTNASCO),2)))
SA101004
Upper(A1_FILIAL+A1_CIDCLI+A1_NOMCLI)
SA101005
Upper(A1_FILIAL+DTOS(A1_DTCAD)) SA101006
Upper(A1_FILIAL+A1_FANTASI) SA101007
Upper(A1_FILIAL+A1_CICLI) SA101008
Upper(A1_FILIAL+A1_CODVEND+A1_CODCLI)
SA101009
Upper(A1_FILIAL+A1_CODVEND+A1_NOMCLI)
SA101010
Upper(A1_FILIAL+A1_ROTA) SA101011
Upper(A1_FILIAL+A1_UFCLI+A1_CODCLI)
SA101012
Upper(A1_FILIAL+A1_UFCLI+A1_NOMCLI)
SA101013
Upper(A1_FILIAL+A1_CODCLI+A1_EXPORTA)
SA101014
Upper(A1_FILIAL+A1_UFCLI+A1_CIDCLI+A1_NOMCLI)
SA101015
Relations in use
28: SF5 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 2 .F. .F.
Indexes in use TagName
=> Upper(F5_FILIAL+F5_CODIGO) SF501001
Upper(F5_FILIAL+F5_DESC) SF501002
Relations in use
29: SB1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(B1_FILIAL+B1_CODPRO) SB101001
Upper(B1_FILIAL+B1_DESPRO) SB101002
Upper(B1_FILIAL+B1_GRUPRO+B1_SGRUPRO+B1_CODPRO)
SB101003
Upper(B1_FILIAL+B1_GRUPRO+B1_SGRUPRO+B1_DESPRO)
SB101004
Upper(B1_FILIAL+B1_GRUPRO+B1_SGRUPRO+B1_MARCA+B1_DESPRO)
SB101005
Upper(B1_FILIAL+B1_GRUPRO+B1_SGRUPRO+B1_REF)
SB101006
Upper(B1_FILIAL+B1_MARCA+B1_DESPRO+B1_REF)
SB101007
Upper(B1_FILIAL+B1_CODBARR) SB101008
Upper(B1_FILIAL+B1_REF) SB101009
Upper(B1_FILIAL+DTOS(B1_DTCAD)) SB101010
Upper(B1_FILIAL+B1_TIPO+B1_GRUPRO+B1_SGRUPRO+B1_CODPRO)
SB101011
Upper(B1_FILIAL+B1_TAMANHO+B1_DESPRO)
SB101012
Upper(B1_FILIAL+B1_CODGRAD) SB101013
Upper(B1_FILIAL+B1_TECRAPI) SB101014
Upper(B1_FILIAL+B1_CODEMBA) SB101015
Relations in use
30: SFB <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 26 .F. .F.
Indexes in use TagName
=> Upper(FB_FILIAL+FB_COD+FB_CODECF) SFB01001
Upper(FB_FILIAL+FB_CODECF+FB_COD) SFB01002
Upper(FB_FILIAL+FB_DESC) SFB01003
Relations in use
31: SA3 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 1 .F. .F.
Indexes in use TagName
=> Upper(A3_FILIAL+A3_CODVEN) SA301001
Upper(A3_FILIAL+A3_NOME) SA301002
Upper(A3_FILIAL+STRZERO(MONTH(A3_DTNASC),2)+STRZERO(DAY(A3_DTNASC),2)+A3_NOME)
SA301003
Upper(A3_FILIAL+A3_GERENTE) SA301004
A3_CODVEN SA39999
Relations in use
32: SAF <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(AF_FILIAL+AF_CODVEN) SAF01001
Relations in use
33: SF2 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(F2_FILIAL+F2_TIPIMP+F2_SERIE+F2_DOC+F2_CLIENTE+DTOS(F2_DTEMISS))
SF201001
Upper(F2_FILIAL+F2_TIPIMP+F2_SERIE+F2_DOC+F2_VEND+DTOS(F2_DTEMISS))
SF201002
Upper(F2_FILIAL+F2_TIPIMP+F2_SERIE+F2_DOC+F2_TRANSP+DTOS(F2_DTEMISS))
SF201003
Upper(F2_FILIAL+DTOS(F2_DTEMISS)+F2_CLIENTE+F2_SERIE+F2_DOC)
SF201004
Upper(F2_FILIAL+DTOS(F2_DTEMISS)+F2_VEND+F2_SERIE+F2_DOC)
SF201005
Upper(F2_FILIAL+F2_CLIENTE+F2_SERIE+F2_DOC+DTOS(F2_DTEMISS))
SF201006
Upper(F2_FILIAL+F2_CLIENTE+DTOS(F2_DTEMISS)+F2_SERIE+F2_DOC)
SF201007
Upper(F2_FILIAL+F2_VEND+F2_SERIE+F2_DOC+DTOS(F2_DTEMISS))
SF201008
Upper(F2_FILIAL+F2_VEND+DTOS(F2_DTEMISS)+F2_SERIE+F2_DOC)
SF201009
Upper(F2_FILIAL+DTOS(F2_DTENTRE)+F2_HORA)
SF201010
Upper(F2_FILIAL+F2_TIPIMP+F2_SERIE+DESCEND(F2_DOC))
SF201011
Upper(F2_FILIAL+F2_NOMCLI+DTOS(F2_DTEMISS)+F2_TIPIMP+F2_SERIE+F2_DOC)
SF201012
Upper(F2_FILIAL+F2_NFEID) SF201013
Upper(F2_FILIAL+F2_NSERECF+F2_LIMFECF+F2_CUPFIS)
SF201014
Upper(F2_FILIAL+F2_PEDIDO) SF201015
Relations in use
34: NFS <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(NFS_FILIAL+NFS_SERIE+NFS_DOC)
NFS01001
Upper(NFS_FILIAL+NFS_CHNFE) NFS01002
Upper(NFS_FILIAL+NFS_SITUAC+NFS_SERIE+NFS_DOC)
NFS01003
Upper(NFS_FILIAL+NFS_STATUS+NFS_SERIE+NFS_DOC)
NFS01004
Upper(NFS_FILIAL+NFS_TIPDOC+NFS_SERIE+NFS_DOC+NFS_CLIFOR)
NFS01005
Upper(NFS_FILIAL+NFS_STATUS+NFS_SERIE+descend(NFS_DOC))
NFS01006
Upper(NFS_FILIAL+NFS_SERIE+descend(NFS_DOC))
NFS01007
Upper(NFS_FILIAL+NFS_SITUAC+NFS_SERIE+descend(NFS_DOC))
NFS01008
Upper(NFS_FILIAL+NFS_MODEMI+NFS_SITUAC+NFS_SERIE+NFS_DOC)
NFS01009
Upper(NFS_FILIAL+DTOS(NFS_DIGITA)+NFS_SERIE+NFS_DOC)
NFS01010
Upper(NFS_FILIAL+NFS_SERIE+DTOS(NFS_AUTORI)+NFS_DOC)
NFS01011
Relations in use
35: SD2 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(D2_FILIAL+D2_TIPIMP+D2_SERIE+D2_DOC+D2_ITEM)
SD201001
Upper(D2_FILIAL+D2_TIPIMP+D2_SERIE+D2_DOC+DTOS(D2_DTEMISS))
SD201002
Upper(D2_FILIAL+D2_TIPIMP+D2_SERIE+D2_DOC+D2_CLIENTE+D2_ITEM)
SD201003
Upper(D2_FILIAL+D2_TIPIMP+D2_SERIE+D2_DOC+D2_PRODUTO+D2_ALMOX+D2_LOTE)
SD201004
Upper(D2_FILIAL+DTOS(D2_DTEMISS)+D2_SERIE+D2_DOC)
SD201005
Upper(D2_FILIAL+D2_CLIENTE+D2_SERIE+D2_DOC)
SD201006
Upper(D2_FILIAL+D2_PRODUTO+D2_SERIE+D2_DOC)
SD201007
Upper(D2_FILIAL+D2_PEDIDO+D2_SERIE+D2_DOC+D2_ITEM)
SD201008
Upper(D2_FILIAL+D2_TPIMORI+D2_SERORI+D2_NFORI+D2_CLIENTE+D2_PRODUTO+D2_ALMOX+D2_LOTE)
SD201009
Upper(D2_FILIAL+D2_NSERECF+D2_LIMFECF+D2_CUPFIS+D2_ITEM)
SD201010
Upper(D2_FILIAL+D2_TIPIMP+DTOS(D2_DTEMISS))
SD201011
Upper(D2_FILIAL+D2_PRODUTO+DESCEND(DTOS(D2_DTEMISS)))
SD201012
Relations in use
36: SDM <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(DM_FILIAL+DM_TIPIMP+DM_SERIE+DM_DOC+DM_ITEM)
SDM01001
Relations in use
37: FE1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(FE_FILIAL+FE_MESANO) FE101001
Upper(FE_FILIAL+FE_ANO) FE101002
Relations in use
38: SB9 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(B9_FILIAL+B9_CODPRO+B9_ALMOX+B9_GRADE)
SB901001
Upper(B9_FILIAL+B9_DESPRO) SB901002
Upper(B9_FILIAL+B9_CODBARR) SB901003
Upper(B9_FILIAL+B9_CODPRO+B9_COLUNA+B9_LINHA)
SB901004
Relations in use
39: SF4 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 99 .F. .F.
Indexes in use TagName
=> Upper(F4_FILIAL+F4_CODFISC) SF401001
Upper(F4_FILIAL+F4_CFOP) SF401002
Upper(F4_FILIAL+F4_DESFISC) SF401003
Upper(F4_FILIAL+F4_SCFOP) SF401004
Relations in use
40: PCC <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 562 .F. .F.
Indexes in use TagName
=> Upper(CC_FILIAL+CC_CONTA) PCC01001
Upper(CC_FILIAL+CC_DESCON) PCC01002
Upper(CC_FILIAL+CC_CODIGO) PCC01003
Relations in use
41: SB2 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(B2_FILIAL+B2_CODPRO+B2_ALMOX)
SB201001
Upper(B2_FILIAL+B2_DESPRO+B2_ALMOX)
SB201002
Upper(B2_FILIAL+B2_ALMOX+B2_CODPRO)
SB201003
Upper(B2_FILIAL+B2_ALMOX+B2_DESPRO)
SB201004
Upper(B2_FILIAL+B2_GRADE) SB201005
Relations in use
42: SD3 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(D3_FILIAL+D3_COD+D3_TM) SD301001
Upper(D3_FILIAL+D3_COD+D3_ALMOX+D3_LOTE+DTOS(D3_EMISSAO))
SD301002
Upper(D3_FILIAL+D3_COD+D3_OP+D3_SEQ)
SD301003
Upper(D3_FILIAL+D3_COD+D3_OP+D3_DOC)
SD301004
Upper(D3_FILIAL+D3_DESC) SD301005
Upper(D3_FILIAL+D3_TM+D3_TIPIMP+D3_SERIE+D3_DOC+D3_CLIFOR+D3_COD+D3_ALMOX+D3_LOTE+D3_SEQ)
SD301006
Upper(D3_FILIAL+D3_TIPIMP+D3_SERIE+D3_DOC+D3_CLIFOR+D3_COD+D3_ALMOX+D3_LOTE+D3_SEQ)
SD301007
Upper(D3_FILIAL+D3_COD+DTOS(D3_EMISSAO))
SD301008
Upper(D3_FILIAL+D3_TIPIMP+D3_SERIE+D3_DOC+D3_COD+D3_ALMOX+D3_LOTE+D3_ROTINA)
SD301009
Upper(D3_FILIAL+DTOS(D3_EMISSAO)+D3_VENCOMP+D3_COD)
SD301010
Upper(D3_FILIAL+D3_REF+D3_ALMOX+D3_VENCOMP+DTOS(D3_EMISSAO))
SD301011
Upper(D3_FILIAL+D3_COD+D3_CLIFOR+DTOS(D3_EMISSAO))
SD301012
Upper(D3_FILIAL+D3_TIPIMP+D3_SERIE+D3_DOC+D3_CLIFOR+D3_COD+D3_SEQ)
SD301013
Upper(D3_FILIAL+D3_TM+D3_TIPIMP+D3_SERIE+D3_DOC+D3_COD+D3_ALMOX+D3_LOTE+D3_SEQ)
SD301014
Upper(D3_FILIAL+D3_TIPIMP+D3_SERIE+D3_DOC+D3_COD+D3_ALMOX+D3_LOTE+D3_SEQ)
SD301015
Relations in use
43: SE1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(E1_FILIAL+E1_PREFIXO+E1_NUMDUP+E1_NUMPARC+E1_CODCLI+E1_CODHIST+E1_CODTIPO+DTOS(E1_DTEMIS))
SE101001
Upper(E1_FILIAL+E1_PREFIXO+E1_NUMDUP+E1_CODCLI)
SE101002
Upper(E1_FILIAL+E1_CODCLI+E1_PREFIXO+E1_NUMDUP+E1_NUMPARC+DTOS(E1_DTVENC))
SE101003
Upper(E1_FILIAL+E1_CODCLI+DTOS(E1_DTPAGO)+DTOS(E1_DTVENC))
SE101004
Upper(E1_FILIAL+E1_CODCLI+DTOS(E1_DTVENC))
SE101005
Upper(E1_FILIAL+E1_CODCLI+DTOS(E1_DTEMIS))
SE101006
Upper(E1_FILIAL+DTOS(E1_DTPAGO)+E1_CODTIPO)
SE101007
Upper(E1_FILIAL+DTOS(E1_DTVENC)+E1_CODTIPO)
SE101008
Upper(E1_FILIAL+DTOS(E1_DTEMIS)+E1_CODCLI)
SE101009
Upper(E1_FILIAL+E1_SITUA+DTOS(E1_DTVENC))
SE101010
Upper(E1_FILIAL+E1_VENDEDO+DTOS(E1_DTPAGO))
SE101011
Upper(E1_FILIAL+E1_NOME+DTOS(E1_DTEMIS))
SE101012
Upper(E1_FILIAL+E1_CHAVDES) SE101013
Upper(E1_FILIAL+E1_COMITIT) SE101014
Upper(E1_FILIAL+E1_BOLETON) SE101015
Relations in use
44: SF1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(F1_FILIAL+F1_TIPIMP+F1_SERIE+F1_DOC+F1_FORNECE+DTOS(F1_DTEMISS))
SF101001
Upper(F1_FILIAL+F1_TIPIMP+F1_SERIE+F1_DOC+F1_COMP+DTOS(F1_DTEMISS))
SF101002
Upper(F1_FILIAL+F1_TIPIMP+F1_SERIE+F1_DOC+F1_TRANSP+DTOS(F1_DTEMISS))
SF101003
Upper(F1_FILIAL+DTOS(F1_DTEMISS)+F1_FORNECE+F1_SERIE+F1_DOC)
SF101004
Upper(F1_FILIAL+DTOS(F1_DTEMISS)+F1_COMP+F1_SERIE+F1_DOC)
SF101005
Upper(F1_FILIAL+F1_FORNECE+F1_SERIE+F1_DOC+DTOS(F1_DTEMISS))
SF101006
Upper(F1_FILIAL+F1_FORNECE+DTOS(F1_DTEMISS)+F1_SERIE+F1_DOC)
SF101007
Upper(F1_FILIAL+F1_COMP+F1_SERIE+F1_DOC+DTOS(F1_DTEMISS))
SF101008
Upper(F1_FILIAL+F1_COMP+DTOS(F1_DTEMISS)+F1_SERIE+F1_DOC)
SF101009
Upper(F1_FILIAL+DTOS(F1_DTENTRE)+F1_HORA)
SF101010
Upper(F1_FILIAL+F1_TIPIMP+F1_SERIE+DESCEND(F1_DOC))
SF101011
Upper(F1_FILIAL+F1_NOMFOR+DTOS(F1_DTENTRE)+F1_TIPIMP+F1_SERIE+F1_DOC)
SF101012
Upper(F1_FILIAL+F1_NFEID) SF101013
Upper(F1_FILIAL+DTOS(F1_DTENTRE)+F1_FORNECE+F1_SERIE+F1_DOC)
SF101014
Upper(F1_FILIAL+F1_TIPIMP+F1_DOC) SF101015
Relations in use
45: SD1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+D1_ITEM)
SD101001
Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+DTOS(D1_DTEMISS))
SD101002
Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+D1_FORNECE+D1_ITEM)
SD101003
Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+D1_PRODUTO+D1_ALMOX+D1_LOTE)
SD101004
Upper(D1_FILIAL+DTOS(D1_DTEMISS)+D1_SERIE+D1_DOC+D1_FORNECE)
SD101005
Upper(D1_FILIAL+D1_FORNECE+D1_SERIE+D1_DOC+DTOS(D1_DTEMISS))
SD101006
Upper(D1_FILIAL+D1_PRODUTO+D1_SERIE+D1_DOC+DTOS(D1_DTEMISS))
SD101007
Upper(D1_FILIAL+D1_PEDIDO+D1_SERIE+D1_DOC+D1_ITEM)
SD101008
Upper(D1_FILIAL+D1_TPIMORI+D1_SERORI+D1_NFORI+D1_FORNECE+D1_PRODUTO+D1_ALMOX+D1_LOTE)
SD101009
Upper(D1_FILIAL+DTOS(D1_DTENTRE)+D1_SERIE+D1_DOC+D1_FORNECE)
SD101010
Upper(D1_FILIAL+D1_PRODUTO+DESCEND(DTOS(D1_DTEMISS)))
SD101011
Upper(D1_FILIAL+DTOS(D1_DTENTRE)+D1_PRODUTO)
SD101012
Upper(D1_FILIAL+D1_FORNECE+D1_PRODUTO+DESCEND(DTOS(D1_DTEMISS)))
SD101013
Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+D1_FORNECE+D1_PRODUTO+D1_ITEM)
SD101014
Relations in use
46: LSN <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
4 68 .F. .F.
Indexes in use TagName
=> Upper(SN_FILIAL+SN_TIPIMP+SN_SERIE+SN_NUMERO)
LSN01001
Upper(SN_FILIAL+SN_TIPIMP+SN_NUMERO+SN_SERIE)
LSN01002
Upper(SN_FILIAL+SN_SERIE+SN_TIPIMP+SN_NUMERO)
LSN01003
Upper(SN_FILIAL+SN_SERIE+SN_NUMERO+SN_TIPIMP)
LSN01004
Relations in use
47: ALQ <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 729 .F. .F.
Indexes in use TagName
Upper(LQ_FILIAL+LQ_UFORIG+LQ_UFDEST)
ALQ01001
Upper(LQ_FILIAL+LQ_UFDEST+LQ_UFORIG)
ALQ01002
Relations in use
48: ANP <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 1032 .F. .F.
Indexes in use TagName
Upper(NP_FILIAL+NP_CODPROD) ANP01001
Relations in use
49: AVS <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 27328 .F. .F.
Indexes in use TagName
Upper(VS_FILIAL+VS_REGISTR) AVS01001
Upper(VS_FILIAL+VS_CMED) AVS01002
Upper(VS_FILIAL+VS_EAN1) AVS01003
Upper(VS_FILIAL+VS_EAN2) AVS01004
Upper(VS_FILIAL+VS_EAN3) AVS01005
Relations in use
50: CBF <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 484 .F. .F.
Indexes in use TagName
Upper(CBF_FILIAL+CBF_CBENEF) CBF01001
Relations in use
51: CES <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
961 2003 .F. .F.
Indexes in use TagName
Upper(ES_FILIAL+ES_COD) CES01001
Upper(ES_FILIAL+ES_NOM) CES01002
Relations in use
52: => NCM <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
42942 53736 .F. .F.
Indexes in use TagName
Upper(CM_FILIAL+CM_COD) NCM01001
Upper(CM_FILIAL+CM_NOM) NCM01002
Upper(CM_FILIAL+CM_IBPT_TP+CM_COD) NCM01003
Relations in use
--- Conteudo do registro corrente --------------------------
CM_EMPORI: 01
CM_FILIAL: 01
CM_FILORI: 01
CM_COD: 00000000
CM_NOM: PRODUTO NAO ESPECIFICADO NA LISTA DE NCM
CM_DESCEX:
CM_CESTCOD:
CM_CODICMS:
CM_ICMS: 0.00
CM_CODECF:
CM_REDALIQ: 0.00
CM_REDALII: 0.00
CM_ORIMERC:
CM_CODCST:
CM_CST:
CM_CODCSTE:
CM_CSTENT:
CM_ICMSDIF: 0.00
CM_CSTPISE:
CM_CSTCOFE:
CM_CSTPISS:
CM_CSTCOFS:
CM_REDPISE: 0.00
CM_REDCOFE: 0.00
CM_CODCREP:
CM_CODCREC:
CM_NATREC:
CM_ALIQ_TN: 7.85
CM_ALIQ_TI: 9.85
CM_ALIQ: 0.00
CM_DT_ULTA: / /
CM_ALIQ_ES: 18.00
CM_ALIQ_MU: 0.00
CM_IBPT_DI: 20/09/24
CM_IBPT_DF: 31/10/24
CM_IBPT_CH: AB35A7
CM_IBPT_VR: 24.2.C
CM_IBPT_FO: IBPT/empresometro.com.br
CM_UTRIB:
CM_IBPT_TP: 0
------------------------------------------------------------
Classes in use:
===============
1 ERROR
2 HASHENTRY
3 HBCLASS
4 HBOBJECT
5 HB_LOGGER
6 HB_LOGCHANNEL
7 HB_LOGCONSOLE
8 HB_LOGFILE
9 TFONT
10 TINI
11 TIMMERSIG
12 TWINDOW
13 TDIALOG
14 TBRUSH
15 TCONTROL
16 TBITMAP
17 TREG32
18 TRECT
19 OTBLOG
20 TCURSOR
21 TICON
22 TBAR
23 TSBUTTON
24 TCHECKBOX
25 TMSGBAR
26 TMSGITEM
27 TSTSAY
28 TSLINES
29 TIMAGE
30 TVGET
31 GET
32 TGET
33 TCLIPGET
34 TCOMBOBOX
35 TSAY
36 TPROGRESS
37 TIPCLIENT
38 TIPCLIENTHTTP
39 TURL
40 TBTNBMP
41 TFRXCFG
42 TXMLDOCUMENT
43 TXMLNODE
44 TXMLITERATOR
45 TXMLITERATORSCAN
46 TMENU
47 TMENUITEM
48 TFILE
49 TTXTFILE
50 TMETER
51 TSTRUCT
Memory Analysis
===============
2425 Static variables
Dynamic memory consume:
Actual Value: 0 bytes
Highest Value: 0 bytes
Versao do sistema
=================
Versao : 7.10
Release : 10740
Data Compilaçao: 06-05-2024 14:02:02
SVN : 7969
Disco : Y: Total : 465.75 GB Livre : 74.38 GB
CNPJEmp :
PLANOSIS : 1
UpdateAuto : N
Code: Select all | Expand
Empresa
========
Empresa:.01 -Filial:.01
Fantasia:.EMPRESA TESTE
Real:.EMPRESA TESTE
Telefone:.
Email:.
Cidade:.SH/PR
Application
===========
Path and name: Y:\Sistemas\Sig_Win\CompuRMT.exe (32 bits)
Size: ********* bytes
Time from start: 0 hours 0 mins 23 secs
Error occurred at: 12/03/25, 16:48:06
Error description:
Stack Calls
===========
Called from: .\source\classes\meter.prg => TMETER:PAINT(247)
Called from: .\source\classes\meter.prg => TMETER:DISPLAY(236)
Called from: .\source\classes\control.prg => TMETER:HANDLEEVENT(1843)
Called from: .\source\classes\window.prg => _FWH(14)
Called from: => SYSREFRESH(0)
Called from: .\source\internal\system.prg => SYSWAIT(13)
Called from: Y:\SISTEMAS\SIG_WIN\RPO\CompuUDM\UDMA900.RPO => CARGANCM2024(1699)
Called from: Y:\SISTEMAS\SIG_WIN\RPO\CompuUDM\UDMA900.RPO => CARGASVIAFTP(524)
Called from: .\PRG\CompuRmt.PRG => LOGABERT(1152)
Called from: .\PRG\CompuRmt.PRG => (b)MAIN(673)
Called from: .\source\classes\window.prg => TWINDOW:ACTIVATE(1120)
Called from: .\PRG\CompuRmt.PRG => MAIN(673)
System
======
CPU type: Intel(R) Core(TM) i7-4810MQ CPU @ 2.80GHz 2794 Mhz
Hardware memory: 16290 megs
Free System resources: 90 %
GDI resources: 90 %
User resources: 90 %
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)
Windows version: 6.2, Build 9200
Fivewin: FWH 25.01
Variables in use
================
Procedure Type Value
==========================
TMETER:PAINT
Local 1: O Class: TMETER
Local 2: N 0
Local 3: U NIL
Local 4: U
Local 5: U NIL
Local 6: C "Processando..."
Local 7: N 0
Local 8: N 0
Local 9: U NIL
Local 10: U NIL
TMETER:DISPLAY
Local 1: O Class: TMETER
TMETER:HANDLEEVENT
Param 1: N 15
Param 2: N 0
Param 3: N 0
Local 1: O Class: TMETER
Local 2: U NIL
_FWH
Param 1: N 0
Param 2: N 15
Param 3: N 0
Param 4: N 0
Param 5: N 15
Local 1: O Class: TMETER
SYSREFRESH
SYSWAIT
Param 1: N 1
Local 1: N 60487.82
CARGANCM2024
Local 1: L F
Local 2: L F
Local 3: A Len: 0
Local 4: A Len: 5
1 O :-_-{ TDIALOG Object }:
2 O :-_-{ TMETER Object }:
3 O :-_-{ TSTSAY Object }:
4 O :-_-{ TSAY Object }:
5 N : 0:
Local 5: N 0
Local 6: L F
Local 7: C "Y:\SISTEMAS\SIG_WIN\Dados\NCM010"
CARGASVIAFTP
Param 1: L T
Local 1: C ""
Local 2: L T
Local 3: A Len: 3
1 C :SM0:
2 N : 1:
3 N : 1:
Local 4: C "Y:\SISTEMAS\SIG_WIN\Dados\NCM010.dbf"
Local 5: C "Y:\SISTEMAS\SIG_WIN\Dados\NCM010"
Local 6: C "NCM"
Local 7: C "11/03/25"
Local 8: O Class: TINI
Local 9: N 6
Local 10: N 0
Local 11: N 6
Local 12: L T
Local 13: A Len: 6
1 C :ALQ:
2 C :ANP:
3 C :AVS:
4 C :CBF:
5 C :CES:
6 C :NCM:
Local 14: A Len: 6
1 L :F:
2 L :T:
3 L :F:
4 L :F:
5 L :F:
6 L :F:
Local 15: L T
LOGABERT
Param 1: L F
Param 2: L T
Param 3: L T
Param 4: L T
Param 5: L F
Param 6: L T
Local 1: L T
Local 2: L F
Local 3: O Class: TDIALOG
Local 4: U NIL
Local 5: U NIL
Local 6: U NIL
Local 7: N 0
Local 8: U NIL
Local 9: U NIL
Local 10: C ""
Local 11: A Len: 0
Local 12: C ""
(b)MAIN
Param 1: O Class: TWINDOW
TWINDOW:ACTIVATE
Param 1: C "MAXIMIZED"
Param 2: U NIL
Param 3: U NIL
Param 4: U NIL
Param 5: U NIL
Param 6: U NIL
Param 7: B {|| Block }
Param 8: B {|| Block }
Param 9: U NIL
Param 10: U NIL
Param 11: U NIL
Param 12: U NIL
Param 13: U NIL
Param 14: U NIL
Param 15: U NIL
Param 16: U NIL
Param 17: B {|| Block }
Param 18: U NIL
Param 19: U NIL
Param 20: L F
Param 21: U NIL
Local 1: O Class: TWINDOW
Local 2: U NIL
Local 3: U NIL
MAIN
Local 1: U NIL
Local 2: U NIL
Local 3: U NIL
Local 4: U NIL
Local 5: U NIL
Local 6: U NIL
Local 7: C "Release {dt}{h}: {12/03/25}{16:40:49}"
Local 8: C "xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)"
Local 9: C "FWH 25.01"
Local 10: N 680
Local 11: L T
Local 12: L F
Local 13: L T
Local 14: O Class: TCURSOR
Local 15: C "10740"
Local 16: C "ReleasePAF .003.000"
Local 17: C "ReleasePDV .003.321"
Local 18: C "ReleaseNFe .003.029"
Local 19: C "ReleaseSql .003.015"
Local 20: A Len: 0
Local 21: A Len: 0
Local 22: U NIL
Local 23: O Class: TFONT
Linked RDDs
===========
DBF
DBFFPT
SIXCDX
DBFBLOB
DBFCDX
DBFNTX
ADS
ADT
ADSVFP
ADSCDX
ADSNTX
DataBases in use
================
1: MNT <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
12 12 .F. .F.
Indexes in use TagName
=> CODUSUARIO+INICONEXAO TAG_MNT_01
USUREDE TAG_MNT_02
HOST TAG_MNT_03
IP TAG_MNT_04
INICONEXAO TAG_MNT_05
AMBIENTE+USUREDE TAG_MNT_06
NOMUSUARIO TAG_MNT_07
FUNCAO TAG_MNT_08
ROTINA TAG_MNT_09
SETOR TAG_MNT_10
DEPARTAMEN TAG_MNT_11
COD_FIL TAG_MNT_12
EMPRESA TAG_MNT_13
MODULO TAG_MNT_14
Relations in use
2: HLP <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
20 28 .F. .F.
Indexes in use TagName
=> VARIAVEL TAG_TOP_01
ALIAS+VARIAVEL TAG_TOP_02
FUNNAME+VARIAVEL TAG_TOP_03
Relations in use
3: TOP <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 4 .F. .F.
Indexes in use TagName
=> ID TAG_TOP_01
Relations in use
4: USU <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 3 .F. .F.
Indexes in use TagName
=> CodUsu TAG_USU_01
NomUsu TAG_USU_02
SenUsu TAG_USU_03
Relations in use
5: SM0 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 1 .F. .F.
Indexes in use TagName
=> M0_CODIGO+M0_CODFIL TAG_EMP_01
Relations in use
6: MOD <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
16 17 .F. .F.
Indexes in use TagName
ID TAG_MOD_01
NOME TAG_MOD_02
=> DESC TAG_MOD_03
Relations in use
7: PER <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
24 23 .F. .T.
Indexes in use TagName
=> CODUSU+CODEMP+CODFIL+MODULO TAG_PER_01
CODUSU+CODEMP+CODFIL+ARQMNU TAG_PER_02
Relations in use
8: SX1 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 2 .F. .F.
Indexes in use TagName
=> X1_GRUPO+X1_ORDEM TAG_SX1_01
X1_GRUPO+X1_VARIAVL+X1_ORDEM TAG_SX1_02
X1_GRUPO+X1_VARIAVL+X1_VAR01 TAG_SX1_03
Relations in use
9: SX2 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
241 240 .F. .T.
Indexes in use TagName
=> X2_CHAVE TAG_SX2_01
X2_ARQUIVO TAG_SX2_02
Relations in use
10: SX3 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
5489 5944 .F. .F.
Indexes in use TagName
=> X3_ARQUIVO+X3_ORDEM TAG_SX3_01
X3_CAMPO+X3_ARQUIVO TAG_SX3_02
X3_ARQUIVO+X3_FOLDER TAG_SX3_03
X3_ARQUIVO+X3_CAMPO TAG_SX3_04
Relations in use
11: SX4 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> X4_FILIAL+DTOS(X4_DATA)+X4_CODUSU TAG_SX4_01
X4_FILIAL+DTOS(X4_DATA)+X4_NOMUSU TAG_SX4_02
X4_FILIAL+DTOS(X4_DTCOMP)+X4_CODUSU
TAG_SX4_03
X4_FILIAL+X4_CODUSU+DTOS(X4_DATA)+X4_HORA
TAG_SX4_04
X4_FILIAL+DTOS(X4_DATA)+X4_HORA TAG_SX4_05
X4_FILIAL+X4_CODUSU+DTOS(X4_DTCOMP)+X4_HRCOMP
TAG_SX4_06
X4_FILIAL+DTOS(X4_DTCOMP)+X4_HRCOMP
TAG_SX4_07
X4_FILIAL+X4_NOMUSU TAG_SX4_08
Relations in use
12: SX6 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
201 451 .F. .F.
Indexes in use TagName
=> X6_VAR TAG_SX6_01
Relations in use
13: SX7 <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 938 .F. .F.
Indexes in use TagName
=> X7_CAMPO+X7_SEQUENC TAG_SX6_01
Relations in use
14: SIX <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
876 950 .F. .F.
Indexes in use TagName
=> INDICE+ORDEM TAG_SIX_01
CHAVE TAG_SIX_02
Relations in use
15: SIY <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
2 108 .F. .F.
Indexes in use TagName
=> INDICE+ORDEM+CAMPO TAG_SIY_01
Relations in use
16: SXA <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
34 48 .F. .F.
Indexes in use TagName
=> XA_ALIAS+XA_ORDEM TAG_SXA_01
Relations in use
17: SXB <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
949 1113 .F. .F.
Indexes in use TagName
=> XB_ALIAS+XB_TIPO+XB_SEQ+XB_COLUNA TAG_SXB_01
XB_ALIAS+XB_TIPO+XB_COLUNA+XB_SEQ TAG_SXB_02
Relations in use
18: SXC <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
12 61 .F. .F.
Indexes in use TagName
=> XC_CAMPO+XC_RAMO+XC_SEGMENT TAG_SXC_01
Relations in use
19: SXE <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 5 .F. .F.
Indexes in use TagName
Relations in use
20: SXF <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> XF_FILIAL+XF_MODULO+XF_USUARIO+XF_TIPO+DESCEND(DTOS(XF_DATA))+DESCEND(XF_HORA)
TAG_SXF_01
XF_FILIAL+XF_MODULO+XF_USUARIO+XF_TIPO+XF_FUNCAO+XF_PARAMET
TAG_SXF_02
XF_FILIAL+XF_MODULO+XF_USUARIO+XF_FUNCAO+XF_PARAMET+XF_TIPO
TAG_SXF_03
Relations in use
21: LOG <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> CALIAS+DTOS(DATA) TAG_LOG_01
USU +CALIAS+DTOS(DATA) TAG_LOG_02
DTOS(DATA) TAG_LOG_03
USU + DTOS(DATA) TAG_LOG_04
UPPER( MODU ) + DTOS(DATA) TAG_LOG_05
USU + UPPER( MODU ) + DTOS(DATA) TAG_LOG_06
Relations in use
22: SXG <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
132 414 .F. .F.
Indexes in use TagName
=> XG_MODULO+XG_ORDEM+XG_CODUSU TAG_SXG_01
XG_CODUSU+XG_FUNCAO TAG_SXG_02
XG_MODULO+XG_CODUSU+XG_ORDEM TAG_SXG_03
Relations in use
23: SM2 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
4 4 .F. .F.
Indexes in use TagName
=> Upper(M2_FILIAL+DESCEND(DTOS(M2_DATA))+DESCEND(M2_SEQ))
SM201001
Upper(M2_FILIAL+DTOS(M2_DATA)) SM201002
Relations in use
24: SX5 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 2813 .F. .F.
Indexes in use TagName
=> Upper(X5_FILIAL+X5_TABELA+X5_CHAVE)
SX501001
Upper(X5_FILIAL+X5_TABELA+substr(X5_DESCRI,1,100))
SX501002
Relations in use
25: AGE <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(GE_FILIAL+GE_TIPO+DESCEND(DTOS(GE_DTAGE)))
AGE01001
Upper(GE_FILIAL+GE_TIPO+DESCEND(DTOS(GE_DTCAD)))
AGE01002
Upper(GE_FILIAL+GE_NOMCLI) AGE01003
Upper(GE_FILIAL+GE_CODCLI) AGE01004
Upper(GE_FILIAL+GE_TIPO+DTOS(GE_DTAGE))
AGE01005
Relations in use
26: TEL <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(EL_FILIAL+EL_NOMEFON) TEL01001
Upper(EL_FILIAL+EL_FONEFON) TEL01002
Upper(EL_FILIAL+EL_FANTASI) TEL01003
Upper(EL_FILIAL+EL_CODFON) TEL01004
Relations in use
27: SA1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 1 .F. .F.
Indexes in use TagName
=> Upper(A1_FILIAL+A1_CODCLI) SA101001
Upper(A1_FILIAL+A1_NOMCLI) SA101002
Upper(A1_FILIAL+STRZERO(MONTH(A1_DTNASCL),2)+STRZERO(DAY(A1_DTNASCL),2)+A1_NOMCLI)
SA101003
Upper(A1_FILIAL+(STRZERO(MONTH(A1_DTNASCO),2)+STRZERO(DAY(A1_DTNASCO),2)))
SA101004
Upper(A1_FILIAL+A1_CIDCLI+A1_NOMCLI)
SA101005
Upper(A1_FILIAL+DTOS(A1_DTCAD)) SA101006
Upper(A1_FILIAL+A1_FANTASI) SA101007
Upper(A1_FILIAL+A1_CICLI) SA101008
Upper(A1_FILIAL+A1_CODVEND+A1_CODCLI)
SA101009
Upper(A1_FILIAL+A1_CODVEND+A1_NOMCLI)
SA101010
Upper(A1_FILIAL+A1_ROTA) SA101011
Upper(A1_FILIAL+A1_UFCLI+A1_CODCLI)
SA101012
Upper(A1_FILIAL+A1_UFCLI+A1_NOMCLI)
SA101013
Upper(A1_FILIAL+A1_CODCLI+A1_EXPORTA)
SA101014
Upper(A1_FILIAL+A1_UFCLI+A1_CIDCLI+A1_NOMCLI)
SA101015
Relations in use
28: SF5 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 2 .F. .F.
Indexes in use TagName
=> Upper(F5_FILIAL+F5_CODIGO) SF501001
Upper(F5_FILIAL+F5_DESC) SF501002
Relations in use
29: SB1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(B1_FILIAL+B1_CODPRO) SB101001
Upper(B1_FILIAL+B1_DESPRO) SB101002
Upper(B1_FILIAL+B1_GRUPRO+B1_SGRUPRO+B1_CODPRO)
SB101003
Upper(B1_FILIAL+B1_GRUPRO+B1_SGRUPRO+B1_DESPRO)
SB101004
Upper(B1_FILIAL+B1_GRUPRO+B1_SGRUPRO+B1_MARCA+B1_DESPRO)
SB101005
Upper(B1_FILIAL+B1_GRUPRO+B1_SGRUPRO+B1_REF)
SB101006
Upper(B1_FILIAL+B1_MARCA+B1_DESPRO+B1_REF)
SB101007
Upper(B1_FILIAL+B1_CODBARR) SB101008
Upper(B1_FILIAL+B1_REF) SB101009
Upper(B1_FILIAL+DTOS(B1_DTCAD)) SB101010
Upper(B1_FILIAL+B1_TIPO+B1_GRUPRO+B1_SGRUPRO+B1_CODPRO)
SB101011
Upper(B1_FILIAL+B1_TAMANHO+B1_DESPRO)
SB101012
Upper(B1_FILIAL+B1_CODGRAD) SB101013
Upper(B1_FILIAL+B1_TECRAPI) SB101014
Upper(B1_FILIAL+B1_CODEMBA) SB101015
Relations in use
30: SFB <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 26 .F. .F.
Indexes in use TagName
=> Upper(FB_FILIAL+FB_COD+FB_CODECF) SFB01001
Upper(FB_FILIAL+FB_CODECF+FB_COD) SFB01002
Upper(FB_FILIAL+FB_DESC) SFB01003
Relations in use
31: SA3 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 1 .F. .F.
Indexes in use TagName
=> Upper(A3_FILIAL+A3_CODVEN) SA301001
Upper(A3_FILIAL+A3_NOME) SA301002
Upper(A3_FILIAL+STRZERO(MONTH(A3_DTNASC),2)+STRZERO(DAY(A3_DTNASC),2)+A3_NOME)
SA301003
Upper(A3_FILIAL+A3_GERENTE) SA301004
A3_CODVEN SA39999
Relations in use
32: SAF <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(AF_FILIAL+AF_CODVEN) SAF01001
Relations in use
33: SF2 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(F2_FILIAL+F2_TIPIMP+F2_SERIE+F2_DOC+F2_CLIENTE+DTOS(F2_DTEMISS))
SF201001
Upper(F2_FILIAL+F2_TIPIMP+F2_SERIE+F2_DOC+F2_VEND+DTOS(F2_DTEMISS))
SF201002
Upper(F2_FILIAL+F2_TIPIMP+F2_SERIE+F2_DOC+F2_TRANSP+DTOS(F2_DTEMISS))
SF201003
Upper(F2_FILIAL+DTOS(F2_DTEMISS)+F2_CLIENTE+F2_SERIE+F2_DOC)
SF201004
Upper(F2_FILIAL+DTOS(F2_DTEMISS)+F2_VEND+F2_SERIE+F2_DOC)
SF201005
Upper(F2_FILIAL+F2_CLIENTE+F2_SERIE+F2_DOC+DTOS(F2_DTEMISS))
SF201006
Upper(F2_FILIAL+F2_CLIENTE+DTOS(F2_DTEMISS)+F2_SERIE+F2_DOC)
SF201007
Upper(F2_FILIAL+F2_VEND+F2_SERIE+F2_DOC+DTOS(F2_DTEMISS))
SF201008
Upper(F2_FILIAL+F2_VEND+DTOS(F2_DTEMISS)+F2_SERIE+F2_DOC)
SF201009
Upper(F2_FILIAL+DTOS(F2_DTENTRE)+F2_HORA)
SF201010
Upper(F2_FILIAL+F2_TIPIMP+F2_SERIE+DESCEND(F2_DOC))
SF201011
Upper(F2_FILIAL+F2_NOMCLI+DTOS(F2_DTEMISS)+F2_TIPIMP+F2_SERIE+F2_DOC)
SF201012
Upper(F2_FILIAL+F2_NFEID) SF201013
Upper(F2_FILIAL+F2_NSERECF+F2_LIMFECF+F2_CUPFIS)
SF201014
Upper(F2_FILIAL+F2_PEDIDO) SF201015
Relations in use
34: NFS <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(NFS_FILIAL+NFS_SERIE+NFS_DOC)
NFS01001
Upper(NFS_FILIAL+NFS_CHNFE) NFS01002
Upper(NFS_FILIAL+NFS_SITUAC+NFS_SERIE+NFS_DOC)
NFS01003
Upper(NFS_FILIAL+NFS_STATUS+NFS_SERIE+NFS_DOC)
NFS01004
Upper(NFS_FILIAL+NFS_TIPDOC+NFS_SERIE+NFS_DOC+NFS_CLIFOR)
NFS01005
Upper(NFS_FILIAL+NFS_STATUS+NFS_SERIE+descend(NFS_DOC))
NFS01006
Upper(NFS_FILIAL+NFS_SERIE+descend(NFS_DOC))
NFS01007
Upper(NFS_FILIAL+NFS_SITUAC+NFS_SERIE+descend(NFS_DOC))
NFS01008
Upper(NFS_FILIAL+NFS_MODEMI+NFS_SITUAC+NFS_SERIE+NFS_DOC)
NFS01009
Upper(NFS_FILIAL+DTOS(NFS_DIGITA)+NFS_SERIE+NFS_DOC)
NFS01010
Upper(NFS_FILIAL+NFS_SERIE+DTOS(NFS_AUTORI)+NFS_DOC)
NFS01011
Relations in use
35: SD2 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(D2_FILIAL+D2_TIPIMP+D2_SERIE+D2_DOC+D2_ITEM)
SD201001
Upper(D2_FILIAL+D2_TIPIMP+D2_SERIE+D2_DOC+DTOS(D2_DTEMISS))
SD201002
Upper(D2_FILIAL+D2_TIPIMP+D2_SERIE+D2_DOC+D2_CLIENTE+D2_ITEM)
SD201003
Upper(D2_FILIAL+D2_TIPIMP+D2_SERIE+D2_DOC+D2_PRODUTO+D2_ALMOX+D2_LOTE)
SD201004
Upper(D2_FILIAL+DTOS(D2_DTEMISS)+D2_SERIE+D2_DOC)
SD201005
Upper(D2_FILIAL+D2_CLIENTE+D2_SERIE+D2_DOC)
SD201006
Upper(D2_FILIAL+D2_PRODUTO+D2_SERIE+D2_DOC)
SD201007
Upper(D2_FILIAL+D2_PEDIDO+D2_SERIE+D2_DOC+D2_ITEM)
SD201008
Upper(D2_FILIAL+D2_TPIMORI+D2_SERORI+D2_NFORI+D2_CLIENTE+D2_PRODUTO+D2_ALMOX+D2_LOTE)
SD201009
Upper(D2_FILIAL+D2_NSERECF+D2_LIMFECF+D2_CUPFIS+D2_ITEM)
SD201010
Upper(D2_FILIAL+D2_TIPIMP+DTOS(D2_DTEMISS))
SD201011
Upper(D2_FILIAL+D2_PRODUTO+DESCEND(DTOS(D2_DTEMISS)))
SD201012
Relations in use
36: SDM <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(DM_FILIAL+DM_TIPIMP+DM_SERIE+DM_DOC+DM_ITEM)
SDM01001
Relations in use
37: FE1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(FE_FILIAL+FE_MESANO) FE101001
Upper(FE_FILIAL+FE_ANO) FE101002
Relations in use
38: SB9 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(B9_FILIAL+B9_CODPRO+B9_ALMOX+B9_GRADE)
SB901001
Upper(B9_FILIAL+B9_DESPRO) SB901002
Upper(B9_FILIAL+B9_CODBARR) SB901003
Upper(B9_FILIAL+B9_CODPRO+B9_COLUNA+B9_LINHA)
SB901004
Relations in use
39: SF4 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 99 .F. .F.
Indexes in use TagName
=> Upper(F4_FILIAL+F4_CODFISC) SF401001
Upper(F4_FILIAL+F4_CFOP) SF401002
Upper(F4_FILIAL+F4_DESFISC) SF401003
Upper(F4_FILIAL+F4_SCFOP) SF401004
Relations in use
40: PCC <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 562 .F. .F.
Indexes in use TagName
=> Upper(CC_FILIAL+CC_CONTA) PCC01001
Upper(CC_FILIAL+CC_DESCON) PCC01002
Upper(CC_FILIAL+CC_CODIGO) PCC01003
Relations in use
41: SB2 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(B2_FILIAL+B2_CODPRO+B2_ALMOX)
SB201001
Upper(B2_FILIAL+B2_DESPRO+B2_ALMOX)
SB201002
Upper(B2_FILIAL+B2_ALMOX+B2_CODPRO)
SB201003
Upper(B2_FILIAL+B2_ALMOX+B2_DESPRO)
SB201004
Upper(B2_FILIAL+B2_GRADE) SB201005
Relations in use
42: SD3 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(D3_FILIAL+D3_COD+D3_TM) SD301001
Upper(D3_FILIAL+D3_COD+D3_ALMOX+D3_LOTE+DTOS(D3_EMISSAO))
SD301002
Upper(D3_FILIAL+D3_COD+D3_OP+D3_SEQ)
SD301003
Upper(D3_FILIAL+D3_COD+D3_OP+D3_DOC)
SD301004
Upper(D3_FILIAL+D3_DESC) SD301005
Upper(D3_FILIAL+D3_TM+D3_TIPIMP+D3_SERIE+D3_DOC+D3_CLIFOR+D3_COD+D3_ALMOX+D3_LOTE+D3_SEQ)
SD301006
Upper(D3_FILIAL+D3_TIPIMP+D3_SERIE+D3_DOC+D3_CLIFOR+D3_COD+D3_ALMOX+D3_LOTE+D3_SEQ)
SD301007
Upper(D3_FILIAL+D3_COD+DTOS(D3_EMISSAO))
SD301008
Upper(D3_FILIAL+D3_TIPIMP+D3_SERIE+D3_DOC+D3_COD+D3_ALMOX+D3_LOTE+D3_ROTINA)
SD301009
Upper(D3_FILIAL+DTOS(D3_EMISSAO)+D3_VENCOMP+D3_COD)
SD301010
Upper(D3_FILIAL+D3_REF+D3_ALMOX+D3_VENCOMP+DTOS(D3_EMISSAO))
SD301011
Upper(D3_FILIAL+D3_COD+D3_CLIFOR+DTOS(D3_EMISSAO))
SD301012
Upper(D3_FILIAL+D3_TIPIMP+D3_SERIE+D3_DOC+D3_CLIFOR+D3_COD+D3_SEQ)
SD301013
Upper(D3_FILIAL+D3_TM+D3_TIPIMP+D3_SERIE+D3_DOC+D3_COD+D3_ALMOX+D3_LOTE+D3_SEQ)
SD301014
Upper(D3_FILIAL+D3_TIPIMP+D3_SERIE+D3_DOC+D3_COD+D3_ALMOX+D3_LOTE+D3_SEQ)
SD301015
Relations in use
43: SE1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(E1_FILIAL+E1_PREFIXO+E1_NUMDUP+E1_NUMPARC+E1_CODCLI+E1_CODHIST+E1_CODTIPO+DTOS(E1_DTEMIS))
SE101001
Upper(E1_FILIAL+E1_PREFIXO+E1_NUMDUP+E1_CODCLI)
SE101002
Upper(E1_FILIAL+E1_CODCLI+E1_PREFIXO+E1_NUMDUP+E1_NUMPARC+DTOS(E1_DTVENC))
SE101003
Upper(E1_FILIAL+E1_CODCLI+DTOS(E1_DTPAGO)+DTOS(E1_DTVENC))
SE101004
Upper(E1_FILIAL+E1_CODCLI+DTOS(E1_DTVENC))
SE101005
Upper(E1_FILIAL+E1_CODCLI+DTOS(E1_DTEMIS))
SE101006
Upper(E1_FILIAL+DTOS(E1_DTPAGO)+E1_CODTIPO)
SE101007
Upper(E1_FILIAL+DTOS(E1_DTVENC)+E1_CODTIPO)
SE101008
Upper(E1_FILIAL+DTOS(E1_DTEMIS)+E1_CODCLI)
SE101009
Upper(E1_FILIAL+E1_SITUA+DTOS(E1_DTVENC))
SE101010
Upper(E1_FILIAL+E1_VENDEDO+DTOS(E1_DTPAGO))
SE101011
Upper(E1_FILIAL+E1_NOME+DTOS(E1_DTEMIS))
SE101012
Upper(E1_FILIAL+E1_CHAVDES) SE101013
Upper(E1_FILIAL+E1_COMITIT) SE101014
Upper(E1_FILIAL+E1_BOLETON) SE101015
Relations in use
44: SF1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(F1_FILIAL+F1_TIPIMP+F1_SERIE+F1_DOC+F1_FORNECE+DTOS(F1_DTEMISS))
SF101001
Upper(F1_FILIAL+F1_TIPIMP+F1_SERIE+F1_DOC+F1_COMP+DTOS(F1_DTEMISS))
SF101002
Upper(F1_FILIAL+F1_TIPIMP+F1_SERIE+F1_DOC+F1_TRANSP+DTOS(F1_DTEMISS))
SF101003
Upper(F1_FILIAL+DTOS(F1_DTEMISS)+F1_FORNECE+F1_SERIE+F1_DOC)
SF101004
Upper(F1_FILIAL+DTOS(F1_DTEMISS)+F1_COMP+F1_SERIE+F1_DOC)
SF101005
Upper(F1_FILIAL+F1_FORNECE+F1_SERIE+F1_DOC+DTOS(F1_DTEMISS))
SF101006
Upper(F1_FILIAL+F1_FORNECE+DTOS(F1_DTEMISS)+F1_SERIE+F1_DOC)
SF101007
Upper(F1_FILIAL+F1_COMP+F1_SERIE+F1_DOC+DTOS(F1_DTEMISS))
SF101008
Upper(F1_FILIAL+F1_COMP+DTOS(F1_DTEMISS)+F1_SERIE+F1_DOC)
SF101009
Upper(F1_FILIAL+DTOS(F1_DTENTRE)+F1_HORA)
SF101010
Upper(F1_FILIAL+F1_TIPIMP+F1_SERIE+DESCEND(F1_DOC))
SF101011
Upper(F1_FILIAL+F1_NOMFOR+DTOS(F1_DTENTRE)+F1_TIPIMP+F1_SERIE+F1_DOC)
SF101012
Upper(F1_FILIAL+F1_NFEID) SF101013
Upper(F1_FILIAL+DTOS(F1_DTENTRE)+F1_FORNECE+F1_SERIE+F1_DOC)
SF101014
Upper(F1_FILIAL+F1_TIPIMP+F1_DOC) SF101015
Relations in use
45: SD1 <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
1 0 .T. .T.
Indexes in use TagName
=> Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+D1_ITEM)
SD101001
Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+DTOS(D1_DTEMISS))
SD101002
Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+D1_FORNECE+D1_ITEM)
SD101003
Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+D1_PRODUTO+D1_ALMOX+D1_LOTE)
SD101004
Upper(D1_FILIAL+DTOS(D1_DTEMISS)+D1_SERIE+D1_DOC+D1_FORNECE)
SD101005
Upper(D1_FILIAL+D1_FORNECE+D1_SERIE+D1_DOC+DTOS(D1_DTEMISS))
SD101006
Upper(D1_FILIAL+D1_PRODUTO+D1_SERIE+D1_DOC+DTOS(D1_DTEMISS))
SD101007
Upper(D1_FILIAL+D1_PEDIDO+D1_SERIE+D1_DOC+D1_ITEM)
SD101008
Upper(D1_FILIAL+D1_TPIMORI+D1_SERORI+D1_NFORI+D1_FORNECE+D1_PRODUTO+D1_ALMOX+D1_LOTE)
SD101009
Upper(D1_FILIAL+DTOS(D1_DTENTRE)+D1_SERIE+D1_DOC+D1_FORNECE)
SD101010
Upper(D1_FILIAL+D1_PRODUTO+DESCEND(DTOS(D1_DTEMISS)))
SD101011
Upper(D1_FILIAL+DTOS(D1_DTENTRE)+D1_PRODUTO)
SD101012
Upper(D1_FILIAL+D1_FORNECE+D1_PRODUTO+DESCEND(DTOS(D1_DTEMISS)))
SD101013
Upper(D1_FILIAL+D1_TIPIMP+D1_SERIE+D1_DOC+D1_FORNECE+D1_PRODUTO+D1_ITEM)
SD101014
Relations in use
46: LSN <Compartilhado> RddName: DBFCDX
==============================
RecNo RecCount BOF EOF
4 68 .F. .F.
Indexes in use TagName
=> Upper(SN_FILIAL+SN_TIPIMP+SN_SERIE+SN_NUMERO)
LSN01001
Upper(SN_FILIAL+SN_TIPIMP+SN_NUMERO+SN_SERIE)
LSN01002
Upper(SN_FILIAL+SN_SERIE+SN_TIPIMP+SN_NUMERO)
LSN01003
Upper(SN_FILIAL+SN_SERIE+SN_NUMERO+SN_TIPIMP)
LSN01004
Relations in use
47: ALQ <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 729 .F. .F.
Indexes in use TagName
Upper(LQ_FILIAL+LQ_UFORIG+LQ_UFDEST)
ALQ01001
Upper(LQ_FILIAL+LQ_UFDEST+LQ_UFORIG)
ALQ01002
Relations in use
48: ANP <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 1032 .F. .F.
Indexes in use TagName
Upper(NP_FILIAL+NP_CODPROD) ANP01001
Relations in use
49: AVS <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 27328 .F. .F.
Indexes in use TagName
Upper(VS_FILIAL+VS_REGISTR) AVS01001
Upper(VS_FILIAL+VS_CMED) AVS01002
Upper(VS_FILIAL+VS_EAN1) AVS01003
Upper(VS_FILIAL+VS_EAN2) AVS01004
Upper(VS_FILIAL+VS_EAN3) AVS01005
Relations in use
50: CBF <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
1 484 .F. .F.
Indexes in use TagName
Upper(CBF_FILIAL+CBF_CBENEF) CBF01001
Relations in use
51: CES <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
961 2003 .F. .F.
Indexes in use TagName
Upper(ES_FILIAL+ES_COD) CES01001
Upper(ES_FILIAL+ES_NOM) CES01002
Relations in use
52: => NCM <Compartilhado> RddName: SIXCDX
==============================
RecNo RecCount BOF EOF
42942 53736 .F. .F.
Indexes in use TagName
Upper(CM_FILIAL+CM_COD) NCM01001
Upper(CM_FILIAL+CM_NOM) NCM01002
Upper(CM_FILIAL+CM_IBPT_TP+CM_COD) NCM01003
Relations in use
--- Conteudo do registro corrente --------------------------
CM_EMPORI: 01
CM_FILIAL: 01
CM_FILORI: 01
CM_COD: 00000000
CM_NOM: PRODUTO NAO ESPECIFICADO NA LISTA DE NCM
CM_DESCEX:
CM_CESTCOD:
CM_CODICMS:
CM_ICMS: 0.00
CM_CODECF:
CM_REDALIQ: 0.00
CM_REDALII: 0.00
CM_ORIMERC:
CM_CODCST:
CM_CST:
CM_CODCSTE:
CM_CSTENT:
CM_ICMSDIF: 0.00
CM_CSTPISE:
CM_CSTCOFE:
CM_CSTPISS:
CM_CSTCOFS:
CM_REDPISE: 0.00
CM_REDCOFE: 0.00
CM_CODCREP:
CM_CODCREC:
CM_NATREC:
CM_ALIQ_TN: 7.85
CM_ALIQ_TI: 9.85
CM_ALIQ: 0.00
CM_DT_ULTA: / /
CM_ALIQ_ES: 18.00
CM_ALIQ_MU: 0.00
CM_IBPT_DI: 20/09/24
CM_IBPT_DF: 31/10/24
CM_IBPT_CH: AB35A7
CM_IBPT_VR: 24.2.C
CM_IBPT_FO: IBPT/empresometro.com.br
CM_UTRIB:
CM_IBPT_TP: 0
------------------------------------------------------------
Classes in use:
===============
1 ERROR
2 HASHENTRY
3 HBCLASS
4 HBOBJECT
5 HB_LOGGER
6 HB_LOGCHANNEL
7 HB_LOGCONSOLE
8 HB_LOGFILE
9 TFONT
10 TINI
11 TIMMERSIG
12 TWINDOW
13 TDIALOG
14 TBRUSH
15 TCONTROL
16 TBITMAP
17 TREG32
18 TRECT
19 OTBLOG
20 TCURSOR
21 TICON
22 TBAR
23 TSBUTTON
24 TCHECKBOX
25 TMSGBAR
26 TMSGITEM
27 TSTSAY
28 TSLINES
29 TIMAGE
30 TVGET
31 GET
32 TGET
33 TCLIPGET
34 TCOMBOBOX
35 TSAY
36 TPROGRESS
37 TIPCLIENT
38 TIPCLIENTHTTP
39 TURL
40 TBTNBMP
41 TFRXCFG
42 TXMLDOCUMENT
43 TXMLNODE
44 TXMLITERATOR
45 TXMLITERATORSCAN
46 TMENU
47 TMENUITEM
48 TFILE
49 TTXTFILE
50 TMETER
51 TSTRUCT
Memory Analysis
===============
2425 Static variables
Dynamic memory consume:
Actual Value: 0 bytes
Highest Value: 0 bytes
Versao do sistema
=================
Versao : 7.10
Release : 10740
Data Compilaçao: 06-05-2024 14:02:02
SVN : 7969
Disco : Y: Total : 465.75 GB Livre : 74.38 GB
CNPJEmp :
PLANOSIS : 1
UpdateAuto : N
Code: Select all | Expand
#include "hbcurl.ch"
function EnviarFactura( cUrl, cSignedXmlFile )
local hCurl, cSoapRequest, cSoapResponse, cFacturaXml
cFacturaXml = MemoRead( cSignedXmlFile )
// Crear la solicitud SOAP
cSoapRequest = ;
'<?xml version="1.0" encoding="UTF-8"?>' + ;
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:veri="http://www.aeat.es/VeriFactu">' + ;
'<soapenv:Header/>' + ;
'<soapenv:Body>' + ;
'<veri:EnviarFactura>' + ;
'<veri:FacturaXML><![CDATA[' + cFacturaXml + ']]></veri:FacturaXML>' + ;
'</veri:EnviarFactura>' + ;
'</soapenv:Body>' + ;
'</soapenv:Envelope>'
hCurl = curl_easy_init()
curl_easy_setopt( hCurl, HB_CURLOPT_URL, cUrl )
curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, cSoapRequest )
curl_easy_setopt( hCurl, HB_CURLOPT_HTTPHEADER, { "Content-Type: text/xml", "SOAPAction: EnviarFactura" } )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERT, "ruta_certificado.pem" )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERTPASSWD, "password_certificado" )
cSoapResponse = curl_easy_perform( hCurl )
if Empty( cSoapResponse )
MsgStop( "Error al enviar la factura." )
else
MsgInfo( "Respuesta del servidor: " + cSoapResponse )
endif
curl_easy_cleanup( hCurl )
return nil
Code: Select all | Expand
#include "hbcurl.ch"
function EnviarFactura( cUrl, cSignedXmlFile )
local hCurl, cSoapRequest, cSoapResponse, cFacturaXml
cFacturaXml = MemoRead( cSignedXmlFile )
// Crear la solicitud SOAP
cSoapRequest = ;
'<?xml version="1.0" encoding="UTF-8"?>' + ;
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:veri="http://www.aeat.es/VeriFactu">' + ;
'<soapenv:Header/>' + ;
'<soapenv:Body>' + ;
'<veri:EnviarFactura>' + ;
'<veri:FacturaXML><![CDATA[' + cFacturaXml + ']]></veri:FacturaXML>' + ;
'</veri:EnviarFactura>' + ;
'</soapenv:Body>' + ;
'</soapenv:Envelope>'
hCurl = curl_easy_init()
curl_easy_setopt( hCurl, HB_CURLOPT_URL, cUrl )
curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, cSoapRequest )
curl_easy_setopt( hCurl, HB_CURLOPT_HTTPHEADER, { "Content-Type: text/xml", "SOAPAction: EnviarFactura" } )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERT, "ruta_certificado.pem" )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERTPASSWD, "password_certificado" )
cSoapResponse = curl_easy_perform( hCurl )
if Empty( cSoapResponse )
MsgStop( "Error al enviar la factura." )
else
MsgInfo( "Respuesta del servidor: " + cSoapResponse )
endif
curl_easy_cleanup( hCurl )
return nil
Code: Select all | Expand
#include "FiveWin.ch"
#include "hbcurl.ch"
function main()
local cUrl := "https://vpfe.dian.gov.co/WcfDianCustomerServices.svc"
local cSignedXmlFile := "E:\TEMP\XML_FIRMADO\z006331767200025SP104100000250_fv_B64"
local cNomZip := "z006331767200025SP104100000250.zip"
EnviarFactura( cUrl, cSignedXmlFile,cNomZip )
return
function EnviarFactura( cUrl, cSignedXmlFile, cNomZip )
local hCurl, cSoapRequest, cSoapResponse, cFacturaXml
cFilCer := "E:\ZERUS\FIRMA_ELECTRONICA\CERT\CERTIFICADO_29.P12"
cClaCer := "DeexTz0tttreuQrTu2Lj0"
cFacturaXml = MemoRead( cSignedXmlFile )
// Crear la solicitud SOAP
cSoapRequest = ;
'<?xml version="1.0" encoding="UTF-8"?>' + ;
'<soapenv:Envelope xmlns:soapenv=http://www.w3.org/2003/05/soap-envelope xmlns:wcf=http://wcf.dian.colombia>' + ;
'<soapenv:Header/>'+;
'<soapenv:Body>' + ;
'<wcf:SendBillSync>' + ;
'<wcf:fileName>' + cNomZip +'</wcf:fileName>' + ;
'<wcf:contentFile>' + cFacturaXml + '</wcf:contentFile>' + ;
'</wcf:SendBillSync>' + ;
'</soapenv:Body>' + ;
'</soapenv:Envelope>'
HB_MEMOWRIT( "PRUEBA.XML", cSoapRequest )
hCurl = curl_easy_init()
curl_easy_setopt( hCurl, HB_CURLOPT_URL, cUrl )
curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, cSoapRequest )
curl_easy_setopt( hCurl, HB_CURLOPT_HTTPHEADER, { "Content-Type: application/soap+xml; charset=utf-8", "SOAPAction: http://wcf.dian.colombia/IWcfDianCustomerServices/SendBillSync" } )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERT, cFilCer )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERTPASSWD, cClaCer )
cSoapResponse = curl_easy_perform( hCurl )
if Empty( cSoapResponse )
MsgStop( "Error al enviar la factura." )
else
MsgInfo( "Respuesta del servidor: " + if(valtype(cSoapResponse)=="C",cSoapResponse,STR(cSoapResponse) ) )
endif
curl_easy_cleanup( hCurl )
return nil
Code: Select all | Expand
#include "FiveWin.ch"
#include "hbcurl.ch"
function main()
local cUrl := "https://vpfe.dian.gov.co/WcfDianCustomerServices.svc"
local cSignedXmlFile := "E:\TEMP\XML_FIRMADO\z006331767200025SP104100000250_fv_B64"
local cNomZip := "z006331767200025SP104100000250.zip"
EnviarFactura( cUrl, cSignedXmlFile,cNomZip )
return
function EnviarFactura( cUrl, cSignedXmlFile, cNomZip )
local hCurl, cSoapRequest, cSoapResponse, cFacturaXml
cFilCer := "E:\ZERUS\FIRMA_ELECTRONICA\CERT\CERTIFICADO_29.P12"
cClaCer := "DeexTz0tttreuQrTu2Lj0"
cFacturaXml = MemoRead( cSignedXmlFile )
// Crear la solicitud SOAP
cSoapRequest = ;
'<?xml version="1.0" encoding="UTF-8"?>' + ;
'<soapenv:Envelope xmlns:soapenv=http://www.w3.org/2003/05/soap-envelope xmlns:wcf=http://wcf.dian.colombia>' + ;
'<soapenv:Header/>'+;
'<soapenv:Body>' + ;
'<wcf:SendBillSync>' + ;
'<wcf:fileName>' + cNomZip +'</wcf:fileName>' + ;
'<wcf:contentFile>' + cFacturaXml + '</wcf:contentFile>' + ;
'</wcf:SendBillSync>' + ;
'</soapenv:Body>' + ;
'</soapenv:Envelope>'
HB_MEMOWRIT( "PRUEBA.XML", cSoapRequest )
hCurl = curl_easy_init()
curl_easy_setopt( hCurl, HB_CURLOPT_URL, cUrl )
curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, cSoapRequest )
curl_easy_setopt( hCurl, HB_CURLOPT_HTTPHEADER, { "Content-Type: application/soap+xml; charset=utf-8", "SOAPAction: http://wcf.dian.colombia/IWcfDianCustomerServices/SendBillSync" } )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERT, cFilCer )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERTPASSWD, cClaCer )
cSoapResponse = curl_easy_perform( hCurl )
if Empty( cSoapResponse )
MsgStop( "Error al enviar la factura." )
else
MsgInfo( "Respuesta del servidor: " + if(valtype(cSoapResponse)=="C",cSoapResponse,STR(cSoapResponse) ) )
endif
curl_easy_cleanup( hCurl )
return nil
Code: Select all | Expand
do while .not. eof()
if (odbf1:calias)->tdbf
acentidad:={}
dbselectarea(odbf:calias)
set order to 1
go top
do while .not. eof()
aadd(acentidad,(odbf:calias)->nombre+"-"+(odbf:calias)->codigo)
skip
enddo
else
acentidad:=""
acentidad:=(odbf1:calias)->nombre
endif
ritem +=1
AADD(acItem,{ ritem, acentidad })
dbselectarea(odbf1:calias)
skip
next
REDEFINE XBROWSE oLbx1 ID 4001 OF oFld:aDialogs[2];
COLUMNS 1,2;
HEADERS "Item","Descripcion";
COLSIZES 40,360;
PICTURE "","";
ARRAY acItem UPDATE FOOTERS LINES AUTOCOLS CELL AUTOSORT
Code: Select all | Expand
do while .not. eof()
if (odbf1:calias)->tdbf
acentidad:={}
dbselectarea(odbf:calias)
set order to 1
go top
do while .not. eof()
aadd(acentidad,(odbf:calias)->nombre+"-"+(odbf:calias)->codigo)
skip
enddo
else
acentidad:=""
acentidad:=(odbf1:calias)->nombre
endif
ritem +=1
AADD(acItem,{ ritem, acentidad })
dbselectarea(odbf1:calias)
skip
next
REDEFINE XBROWSE oLbx1 ID 4001 OF oFld:aDialogs[2];
COLUMNS 1,2;
HEADERS "Item","Descripcion";
COLSIZES 40,360;
PICTURE "","";
ARRAY acItem UPDATE FOOTERS LINES AUTOCOLS CELL AUTOSORT
Code: Select all | Expand
HB_SETCODEPAGE( "UTF8" )
]]>Code: Select all | Expand
HB_SETCODEPAGE( "UTF8" )
]]>Code: Select all | Expand
HB_SETCODEPAGE( "UTF8" )
FW_SetUnicode( .T. )
Buenas tardes Maestro Navarro, estos comandos hacen lo mismo, o son diferentes, o se deben utilizar ambos?Code: Select all | Expand
HB_SETCODEPAGE( "UTF8" )
FW_SetUnicode( .T. )
Buenas tardes Maestro Navarro, estos comandos hacen lo mismo, o son diferentes, o se deben utilizar ambos?]]>La diferencia entre UTF-8 y Unicode es fundamental, pero a menudo se confunden porque están estrechamente relacionados.
""Unicode:*** **Es un estándar de codificación de caracteres.
** Piensa en él como un diccionario gigante que asigna un numero único (llamado "punto de código") a cada carácter, símbolo, emoji, etc., de prácticamente todos los idiomas del mundo.* **Define qué caracteres existen y qué número los representa.
** Por ejemplo, la letra "A" mayúscula tiene el punto de código U+0041 == 65 DECIMAL. La letra "¤" tiene el punto de código U+00F1. Un emoji de una cara sonriente puede tener un punto de código como U+1F600.
* **No especifica cómo se almacenan esos números en la memoria o en un archivo.** Solo dice "este carácter es este número".**UTF-8:*** **Es una forma específica de codificar los puntos de código Unicode en bytes para almacenarlo o usarlos.** Es decir, es un esquema de codificación que te dice cómo representar esos números Unicode (los puntos de código) como secuencias de bytes (unos y ceros) que una computadora puede entender y almacenar.* **Es una codificación de ancho variable.** Esto significa que un carácter Unicode puede representarse con 1, 2, 3 o 4 bytes, dependiendo del punto de código. Los caracteres ASCII básicos (letras, números, símbolos comunes) se representan con 1 byte, lo que hace que UTF-8 sea compatible con ASCII. Los caracteres m s complejos (como los de idiomas asiáticos o emojis) requieren más bytes.* **Es la codificación más común para la web y muchos otros sistemas.
** Su eficiencia (para el inglés y otros idiomas occidentales) y su compatibilidad con ASCII la hacen muy popular.**En resumen:*** **Unicode es el "diccionario" de caracteres.** Define qué‚ caracteres existen y qué‚ número los representa.* **UTF-8 es una forma de "escribir" ese diccionario en un formato que las computadoras pueden entender.** Es una forma de convertir los números Unicode en bytes.**Analogía:**Imagina que Unicode es un libro de recetas que describe cómo hacer diferentes platos. UTF-8 es una forma específica de escribir esas recetas en un lenguaje que un chef (la computadora) pueda entender. Podrías tener otras formas de escribir las recetas (como UTF-16 o UTF-32), pero UTF-8 es una de las m s comunes y eficientes.**Otros esquemas de codificación Unicode:**Además de UTF-8, existen otras codificaciones Unicode, como:* **UTF-16:** Utiliza 2 o 4 bytes para representar cada carácter. Es común en algunos sistemas operativos (como Windows) y en Java.* **UTF-32:** Utiliza siempre 4 bytes para representar cada carácter. Es m s simple de implementar, pero menos eficiente en términos de espacio, ya que incluso los caracteres ASCII básicos ocupan 4 bytes.**Por qué‚ es importante entender la diferencia:**Si no se especifica la codificación correcta, los caracteres pueden mostrarse incorrectamente. Por ejemplo, si un archivo está codificado en UTF-8 pero se intenta leer como si estuviera en ASCII, los caracteres no ASCII (como las letras acentuadas) se mostrar n como símbolos extraños. Por eso, es crucial asegurarse de que la codificación utilizada para leer y escribir archivos coincida con la codificación real del archivo.
]]>La diferencia entre UTF-8 y Unicode es fundamental, pero a menudo se confunden porque están estrechamente relacionados.
""Unicode:*** **Es un estándar de codificación de caracteres.
** Piensa en él como un diccionario gigante que asigna un numero único (llamado "punto de código") a cada carácter, símbolo, emoji, etc., de prácticamente todos los idiomas del mundo.* **Define qué caracteres existen y qué número los representa.
** Por ejemplo, la letra "A" mayúscula tiene el punto de código U+0041 == 65 DECIMAL. La letra "¤" tiene el punto de código U+00F1. Un emoji de una cara sonriente puede tener un punto de código como U+1F600.
* **No especifica cómo se almacenan esos números en la memoria o en un archivo.** Solo dice "este carácter es este número".**UTF-8:*** **Es una forma específica de codificar los puntos de código Unicode en bytes para almacenarlo o usarlos.** Es decir, es un esquema de codificación que te dice cómo representar esos números Unicode (los puntos de código) como secuencias de bytes (unos y ceros) que una computadora puede entender y almacenar.* **Es una codificación de ancho variable.** Esto significa que un carácter Unicode puede representarse con 1, 2, 3 o 4 bytes, dependiendo del punto de código. Los caracteres ASCII básicos (letras, números, símbolos comunes) se representan con 1 byte, lo que hace que UTF-8 sea compatible con ASCII. Los caracteres m s complejos (como los de idiomas asiáticos o emojis) requieren más bytes.* **Es la codificación más común para la web y muchos otros sistemas.
** Su eficiencia (para el inglés y otros idiomas occidentales) y su compatibilidad con ASCII la hacen muy popular.**En resumen:*** **Unicode es el "diccionario" de caracteres.** Define qué‚ caracteres existen y qué‚ número los representa.* **UTF-8 es una forma de "escribir" ese diccionario en un formato que las computadoras pueden entender.** Es una forma de convertir los números Unicode en bytes.**Analogía:**Imagina que Unicode es un libro de recetas que describe cómo hacer diferentes platos. UTF-8 es una forma específica de escribir esas recetas en un lenguaje que un chef (la computadora) pueda entender. Podrías tener otras formas de escribir las recetas (como UTF-16 o UTF-32), pero UTF-8 es una de las m s comunes y eficientes.**Otros esquemas de codificación Unicode:**Además de UTF-8, existen otras codificaciones Unicode, como:* **UTF-16:** Utiliza 2 o 4 bytes para representar cada carácter. Es común en algunos sistemas operativos (como Windows) y en Java.* **UTF-32:** Utiliza siempre 4 bytes para representar cada carácter. Es m s simple de implementar, pero menos eficiente en términos de espacio, ya que incluso los caracteres ASCII básicos ocupan 4 bytes.**Por qué‚ es importante entender la diferencia:**Si no se especifica la codificación correcta, los caracteres pueden mostrarse incorrectamente. Por ejemplo, si un archivo está codificado en UTF-8 pero se intenta leer como si estuviera en ASCII, los caracteres no ASCII (como las letras acentuadas) se mostrar n como símbolos extraños. Por eso, es crucial asegurarse de que la codificación utilizada para leer y escribir archivos coincida con la codificación real del archivo.
Code: Select all | Expand
HB_SETCODEPAGE( "UTF8" )
Code: Select all | Expand
HB_SETCODEPAGE( "UTF8" )
Code: Select all | Expand
oOle := CreateObject( 'Microsoft.XMLHTTP' )
cContentType:="application/json"
cAuthorization:=""
cUrl:="https://superboleta.cl/?a=get-ventas&usuario=100428&xml=1&fecha=2024-07-09&key=aq91xQWD81.qw14&new=1"
oOle:Open( 'GET', cUrl, .f. )
oOle:SetRequestHeader( "Content-Type",cContentType)
if !empty(cAuthorization)
oOle:SetRequestHeader( "Authorization",cAuthorization)
end if
oOle:Send( )
cRet:=""
cRet := oOle:ResponseBody
Code: Select all | Expand
oOle := CreateObject( 'Microsoft.XMLHTTP' )
cContentType:="application/json"
cAuthorization:=""
cUrl:="https://superboleta.cl/?a=get-ventas&usuario=100428&xml=1&fecha=2024-07-09&key=aq91xQWD81.qw14&new=1"
oOle:Open( 'GET', cUrl, .f. )
oOle:SetRequestHeader( "Content-Type",cContentType)
if !empty(cAuthorization)
oOle:SetRequestHeader( "Authorization",cAuthorization)
end if
oOle:Send( )
cRet:=""
cRet := oOle:ResponseBody
Code: Select all | Expand
<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252"></head><body>[...]
Code: Select all | Expand
hData := {=>}
hb_jsondecode( responseText, @hData )
Code: Select all | Expand
<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252"></head><body>[...]
Code: Select all | Expand
hData := {=>}
hb_jsondecode( responseText, @hData )
Code: Select all | Expand
// C:\FWH..\SAMPLES\LAURENT.PRG - 17/03/2025 - kapiabafwh@gmail.com
#Include "FiveWin.ch"
FUNCTION Main()
LOCAL oServerWS, cUrl, aArray, x1, erro, oADODBStream, cRetorno
LOCAL cContentType := "application/json"
LOCAL cAuthorization := ""
cUrl:="https://superboleta.cl/?a=get-ventas&usuario=100428&xml=1&fecha=2024-07-09&key=aq91xQWD81.qw14&new=1"
#ifdef __XHARBOUR__ // PERFEITO COM XHARBOUR( I Like )
Try
Try
oServerWS := CreateObject( 'MSXML2.XMLHTTP' )
Catch
oServerWS := CreateObject( 'Microsoft.XMLHTTP' )
End
Catch
MsgInfo( 'Erro na Criação do Serviço' )
RETURN NIL
End
#else // PERFEITO COM HARBOUR. ( no Like. kkkkk )
Try
Try
oServerWS := win_OleCreateObject( 'MSXML2.XMLHTTP' )
Catch
oServerWS := win_OleCreateObject( 'Microsoft.XMLHTTP' )
End
Catch
MsgInfo( 'Erro na Criação do Serviço! Com Harbour', 'Atenção!' )
RETURN NIL
End
#endif
oServerWS:Open( 'GET', cUrl, .F. )
oServerWS:SetRequestHeader( "Content-Type", cContentType) // Adolfo
IF .NOT. EMPTY( cAuthorization )
oServerWS:SetRequestHeader( "Authorization", cAuthorization )
ENDIF
oServerWS:Send()
IF oServerWS:STATUS != 200
MsgStop( AllTrim( Str( oServerWS:Status ) ) + " - " + oServerWS:StatusText, "Erro" )
RETURN NIL
ENDIF
WHILE oServerWS:ReadyState != 4
SYSREFRESH()
oServerWS:WaitForResponse( 1000 )
END
cRetorno := oServerWS:ResponseBody()
// ? cRetorno
IF FILE( "ADOLFO.txt" )
ERASE ADOLFO.txt
ENDIF
MemoWrit('ADOLFO.txt', cRetorno)
RETURN NIL
// FIN / END
Code: Select all | Expand
// C:\FWH..\SAMPLES\LAURENT.PRG - 17/03/2025 - kapiabafwh@gmail.com
#Include "FiveWin.ch"
FUNCTION Main()
LOCAL oServerWS, cUrl, aArray, x1, erro, oADODBStream, cRetorno
LOCAL cContentType := "application/json"
LOCAL cAuthorization := ""
cUrl:="https://superboleta.cl/?a=get-ventas&usuario=100428&xml=1&fecha=2024-07-09&key=aq91xQWD81.qw14&new=1"
#ifdef __XHARBOUR__ // PERFEITO COM XHARBOUR( I Like )
Try
Try
oServerWS := CreateObject( 'MSXML2.XMLHTTP' )
Catch
oServerWS := CreateObject( 'Microsoft.XMLHTTP' )
End
Catch
MsgInfo( 'Erro na Criação do Serviço' )
RETURN NIL
End
#else // PERFEITO COM HARBOUR. ( no Like. kkkkk )
Try
Try
oServerWS := win_OleCreateObject( 'MSXML2.XMLHTTP' )
Catch
oServerWS := win_OleCreateObject( 'Microsoft.XMLHTTP' )
End
Catch
MsgInfo( 'Erro na Criação do Serviço! Com Harbour', 'Atenção!' )
RETURN NIL
End
#endif
oServerWS:Open( 'GET', cUrl, .F. )
oServerWS:SetRequestHeader( "Content-Type", cContentType) // Adolfo
IF .NOT. EMPTY( cAuthorization )
oServerWS:SetRequestHeader( "Authorization", cAuthorization )
ENDIF
oServerWS:Send()
IF oServerWS:STATUS != 200
MsgStop( AllTrim( Str( oServerWS:Status ) ) + " - " + oServerWS:StatusText, "Erro" )
RETURN NIL
ENDIF
WHILE oServerWS:ReadyState != 4
SYSREFRESH()
oServerWS:WaitForResponse( 1000 )
END
cRetorno := oServerWS:ResponseBody()
// ? cRetorno
IF FILE( "ADOLFO.txt" )
ERASE ADOLFO.txt
ENDIF
MemoWrit('ADOLFO.txt', cRetorno)
RETURN NIL
// FIN / END
Code: Select all | Expand
ACTION (cVar := "12345", oVar:Refresh(), EVAL( oVar:bLostFocus ) )
Code: Select all | Expand
ACTION (cVar := "12345", oVar:Refresh(), EVAL( oVar:bLostFocus ) )
Code: Select all | Expand
hbmk2 -help
Code: Select all | Expand
hbmk2 -help
c:\borland\bcc582\bin\ilink32 -Gn -aa -Tpe -s -v @b32.bc
Turbo Incremental Link 5.69 Copyright (c) 1997-2005 Borland
Warning: LINN32: Last line 1045 (415h) is less than first line 1045 (415h) for symbol "<null>" in module obj\Salidas.c
c:\borland\bcc582\bin\ilink32 -Gn -aa -Tpe -s -v @b32.bc
Turbo Incremental Link 5.69 Copyright (c) 1997-2005 Borland
Warning: LINN32: Last line 1045 (415h) is less than first line 1045 (415h) for symbol "<null>" in module obj\Salidas.c
Code: Select all | Expand
#include "FiveWin.ch"
#include "hbcurl.ch"
#include "xbrowse.ch"
function main()
local cUrl := "https://vpfe.dian.gov.co/WcfDianCustomerServices.svc"
local cSignedXmlFile := "E:\TEMP\XML_FIRMADO\z006331767200025SP104100000250_fv_B64"
local cNomZip := "z006331767200025SP104100000250.zip"
EnviarFactura( cUrl, cSignedXmlFile,cNomZip )
return
function EnviarFactura( cUrl, cSignedXmlFile, cNomZip )
local hCurl, cSoapRequest, cSoapResponse, cFacturaXml
local hResponse, uValue, nHttpCode
local cPasCer := "russoft"
cFilCer := "E:\ZERUS\FIRMA_ELECTRONICA\CERT\certificado_29.p12"
cClaCer := "cxxxxxxxxxxxxx"
cFacturaXml = MemoRead( cSignedXmlFile )
// Crear la solicitud SOAP
cSoapRequest = ;
'<?xml version="1.0" encoding="UTF-8"?>' + ;
'<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:wcf="http://wcf.dian.colombia">' + ;
'<soapenv:Header/>'+;
'<soapenv:Body>' + ;
'<wcf:SendBillSync>' + ;
'<wcf:fileName>' + cNomZip +'</wcf:fileName>' + ;
'<wcf:contentFile>' + cFacturaXml + '</wcf:contentFile>' + ;
'</wcf:SendBillSync>' + ;
'</soapenv:Body>' + ;
'</soapenv:Envelope>'
HB_MEMOWRIT( "PRUEBA.XML", cSoapRequest )
hCurl = curl_easy_init()
curl_easy_setopt( hCurl, HB_CURLOPT_URL, cUrl )
curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, cSoapRequest )
curl_easy_setopt( hCurl, HB_CURLOPT_HTTPHEADER, { "Content-Type: application/soap+xml; charset=utf-8", "SOAPAction: http://wcf.dian.colombia/IWcfDianCustomerServices/SendBillSync" } )
curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERT, cFilCer )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERTPASSWD, cClaCer )
cSoapResponse = curl_easy_perform( hCurl )
if Empty( cSoapResponse )
MsgStop( "Error al enviar la factura." )
else
MsgInfo( "Respuesta del servidor: " + if(valtype(cSoapResponse)=="C",cSoapResponse,STR(cSoapResponse) ) )
endif
curl_easy_cleanup( hCurl )
return nil
Code: Select all | Expand
#include "FiveWin.ch"
#include "hbcurl.ch"
#include "xbrowse.ch"
function main()
local cUrl := "https://vpfe.dian.gov.co/WcfDianCustomerServices.svc"
local cSignedXmlFile := "E:\TEMP\XML_FIRMADO\z006331767200025SP104100000250_fv_B64"
local cNomZip := "z006331767200025SP104100000250.zip"
EnviarFactura( cUrl, cSignedXmlFile,cNomZip )
return
function EnviarFactura( cUrl, cSignedXmlFile, cNomZip )
local hCurl, cSoapRequest, cSoapResponse, cFacturaXml
local hResponse, uValue, nHttpCode
local cPasCer := "russoft"
cFilCer := "E:\ZERUS\FIRMA_ELECTRONICA\CERT\certificado_29.p12"
cClaCer := "cxxxxxxxxxxxxx"
cFacturaXml = MemoRead( cSignedXmlFile )
// Crear la solicitud SOAP
cSoapRequest = ;
'<?xml version="1.0" encoding="UTF-8"?>' + ;
'<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:wcf="http://wcf.dian.colombia">' + ;
'<soapenv:Header/>'+;
'<soapenv:Body>' + ;
'<wcf:SendBillSync>' + ;
'<wcf:fileName>' + cNomZip +'</wcf:fileName>' + ;
'<wcf:contentFile>' + cFacturaXml + '</wcf:contentFile>' + ;
'</wcf:SendBillSync>' + ;
'</soapenv:Body>' + ;
'</soapenv:Envelope>'
HB_MEMOWRIT( "PRUEBA.XML", cSoapRequest )
hCurl = curl_easy_init()
curl_easy_setopt( hCurl, HB_CURLOPT_URL, cUrl )
curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, cSoapRequest )
curl_easy_setopt( hCurl, HB_CURLOPT_HTTPHEADER, { "Content-Type: application/soap+xml; charset=utf-8", "SOAPAction: http://wcf.dian.colombia/IWcfDianCustomerServices/SendBillSync" } )
curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERT, cFilCer )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERTPASSWD, cClaCer )
cSoapResponse = curl_easy_perform( hCurl )
if Empty( cSoapResponse )
MsgStop( "Error al enviar la factura." )
else
MsgInfo( "Respuesta del servidor: " + if(valtype(cSoapResponse)=="C",cSoapResponse,STR(cSoapResponse) ) )
endif
curl_easy_cleanup( hCurl )
return nil
Code: Select all | Expand
rem Public Certificate
C:\OpenSSL-Win32\bin\openssl pkcs12 -in cert.p12 -out cert.crt.pem -clcerts -nokeys
rem Private Key
C:\OpenSSL-Win32\bin\openssl pkcs12 -in cert.p12 -out cert.key.pem -nocerts -nodes
Code: Select all | Expand
curl_easy_setopt(curl, HB_CURLOPT_URL, "https://example.com/")
curl_easy_setopt(curl, HB_CURLOPT_SSLCERT, "cert.crt.pem")
curl_easy_setopt(curl, HB_CURLOPT_SSLKEY, "cert.key.pem")
curl_easy_setopt(curl, HB_CURLOPT_SSLKEYTYPE, "PEM")
curl_easy_setopt(curl, HB_CURLOPT_KEYPASSWD, "s3cret")
response = curl_easy_perform(curl)
curl_easy_cleanup(curl);
Code: Select all | Expand
rem Public Certificate
C:\OpenSSL-Win32\bin\openssl pkcs12 -in cert.p12 -out cert.crt.pem -clcerts -nokeys
rem Private Key
C:\OpenSSL-Win32\bin\openssl pkcs12 -in cert.p12 -out cert.key.pem -nocerts -nodes
Code: Select all | Expand
curl_easy_setopt(curl, HB_CURLOPT_URL, "https://example.com/")
curl_easy_setopt(curl, HB_CURLOPT_SSLCERT, "cert.crt.pem")
curl_easy_setopt(curl, HB_CURLOPT_SSLKEY, "cert.key.pem")
curl_easy_setopt(curl, HB_CURLOPT_SSLKEYTYPE, "PEM")
curl_easy_setopt(curl, HB_CURLOPT_KEYPASSWD, "s3cret")
response = curl_easy_perform(curl)
curl_easy_cleanup(curl);
Code: Select all | Expand
nError := curl_easy_perform( curl )
cResponse := curl_easy_dl_buff_get( curl )
Code: Select all | Expand
nError := curl_easy_perform( curl )
cResponse := curl_easy_dl_buff_get( curl )
Code: Select all | Expand
#include "hbcurl.ch"
PROCEDURE main()
local nError, cResponse
local cXmlStr := hb_memoread( "peticion.xml" )
local aHeader := {}
local cUrl := "https://..."
local cCertFile := "certificado.p12"
local cCertType := "P12" // o "PFX"
local cCertPass := "********"
local hCurl := curl_easy_init()
// Establecer cabeceras requeridas por el WS
aadd( aHeader, "Content-Type: application/xml;charset=UTF-8" )
aadd( aHeader, "Accept: text/xml" )
aadd( aHeader, "Cache-Control: no-cache" )
aadd( aHeader, "Pragma: no-cache" )
// Setear opciones
curl_easy_setopt( hCurl, HB_CURLOPT_HTTPHEADER, aHeader )
curl_easy_setopt( hCurl, HB_CURLOPT_URL, cUrl )
curl_easy_setopt( hCurl, HB_CURLOPT_TIMEOUT, 15 )
curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYHOST, .F. )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERT, cCertFile )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERTTYPE, cCertType )
curl_easy_setopt( hCurl, HB_CURLOPT_KEYPASSWD, cCertPass )
curl_easy_setopt( hCurl, HB_CURLOPT_POST, .T.)
curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, cXmlStr )
curl_easy_setopt( hCurl, HB_CURLOPT_DL_BUFF_SETUP )
// echo server, para depurar .T.
curl_easy_setopt( hCurl, HB_CURLOPT_VERBOSE, .F. )
// No reutilizar conexiones
curl_easy_setopt( hCurl, HB_CURLOPT_FRESH_CONNECT, .T.)
curl_easy_setopt( hCurl, HB_CURLOPT_FORBID_REUSE, .T.)
// Conexion
nError := curl_easy_perform( hCurl )
cResponse := curl_easy_dl_buff_get( hCurl )
if nError == 0
hb_memowrit( "respuesta.xml", cResponse )
else
? "Error :"+ curl_easy_strerror( nError ), nError
endif
curl_easy_cleanup( hCurl )
curl_global_cleanup()
return
Code: Select all | Expand
#include "hbcurl.ch"
PROCEDURE main()
local nError, cResponse
local cXmlStr := hb_memoread( "peticion.xml" )
local aHeader := {}
local cUrl := "https://..."
local cCertFile := "certificado.p12"
local cCertType := "P12" // o "PFX"
local cCertPass := "********"
local hCurl := curl_easy_init()
// Establecer cabeceras requeridas por el WS
aadd( aHeader, "Content-Type: application/xml;charset=UTF-8" )
aadd( aHeader, "Accept: text/xml" )
aadd( aHeader, "Cache-Control: no-cache" )
aadd( aHeader, "Pragma: no-cache" )
// Setear opciones
curl_easy_setopt( hCurl, HB_CURLOPT_HTTPHEADER, aHeader )
curl_easy_setopt( hCurl, HB_CURLOPT_URL, cUrl )
curl_easy_setopt( hCurl, HB_CURLOPT_TIMEOUT, 15 )
curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYHOST, .F. )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERT, cCertFile )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERTTYPE, cCertType )
curl_easy_setopt( hCurl, HB_CURLOPT_KEYPASSWD, cCertPass )
curl_easy_setopt( hCurl, HB_CURLOPT_POST, .T.)
curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, cXmlStr )
curl_easy_setopt( hCurl, HB_CURLOPT_DL_BUFF_SETUP )
// echo server, para depurar .T.
curl_easy_setopt( hCurl, HB_CURLOPT_VERBOSE, .F. )
// No reutilizar conexiones
curl_easy_setopt( hCurl, HB_CURLOPT_FRESH_CONNECT, .T.)
curl_easy_setopt( hCurl, HB_CURLOPT_FORBID_REUSE, .T.)
// Conexion
nError := curl_easy_perform( hCurl )
cResponse := curl_easy_dl_buff_get( hCurl )
if nError == 0
hb_memowrit( "respuesta.xml", cResponse )
else
? "Error :"+ curl_easy_strerror( nError ), nError
endif
curl_easy_cleanup( hCurl )
curl_global_cleanup()
return
Code: Select all | Expand
#include "hbcurl.ch"
PROCEDURE main()
local nError, cResponse
//local cXmlStr := hb_memoread( "peticion.xml" )
local aHeader := {}
local cUrl := "https://vpfe.dian.gov.co/WcfDianCustomerServices.svc"
local cCertFile := "CERTIFICADO.p12"
local cCertType := "P12" // o "PFX"
local cCertPass := "xxxxxxxxxxxxxx"
local cSignedXmlFile
local cNomZip := "z006331767200025SP104100000250.zip"
local cFacturaXml,cXmlStr
local hCurl := curl_easy_init()
cFacturaXml := "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"
// MemoRead( cSignedXmlFile )
// Crear la solicitud SOAP
cXmlStr = ;
'<?xml version="1.0" encoding="UTF-8"?>' + ;
'<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:wcf="http://wcf.dian.colombia">' + ;
'<soapenv:Header/>'+;
'<soapenv:Body>' + ;
'<wcf:SendBillSync>' + ;
'<wcf:fileName>' + cNomZip +'</wcf:fileName>' + ;
'<wcf:contentFile>' + cFacturaXml + '</wcf:contentFile>' + ;
'</wcf:SendBillSync>' + ;
'</soapenv:Body>' + ;
'</soapenv:Envelope>'
// Establecer cabeceras requeridas por el WS
// LOS HEADER COMENTADOS LOS USA EL APP "SOAP UI"
//aadd( aHeader, "Accept-Encoding: gzip,deflate" )
aadd( aHeader, "Content-Type: application/soap+xml; charset=utf-8" )
aadd( aHeader, "SOAPAction: http://wcf.dian.colombia/IWcfDianCustomerServices/SendBillSync" )
//aadd( aHeader, "Content-Length : "+ALLTRIM( STR(len(cXmlStr),12,0)) )
//aadd( aHeader, "Host: vpfe.dian.gov.co" )
//aadd( aHeader, "Connection: Keep-Alive" )
//aadd( aHeader, "User-Agent: Apache-HttpClient/4.5.5 (Java/17.0.12)" )
// Setear opciones
curl_easy_setopt( hCurl, HB_CURLOPT_HTTPHEADER, aHeader )
curl_easy_setopt( hCurl, HB_CURLOPT_URL, cUrl )
curl_easy_setopt( hCurl, HB_CURLOPT_TIMEOUT, 30 )
curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYHOST, .F. )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERT, cCertFile )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERTTYPE, cCertType )
curl_easy_setopt( hCurl, HB_CURLOPT_KEYPASSWD, cCertPass )
curl_easy_setopt( hCurl, HB_CURLOPT_POST, .T.)
curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, cXmlStr )
curl_easy_setopt( hCurl, HB_CURLOPT_DL_BUFF_SETUP )
// echo server, para depurar .T.
curl_easy_setopt( hCurl, HB_CURLOPT_VERBOSE, .F. )
// No reutilizar conexiones
curl_easy_setopt( hCurl, HB_CURLOPT_FRESH_CONNECT, .T.)
curl_easy_setopt( hCurl, HB_CURLOPT_FORBID_REUSE, .T.)
// Conexion
nError := curl_easy_perform( hCurl )
cResponse := curl_easy_dl_buff_get( hCurl )
alert(nError)
alert(cResponse)
if nError == 0
hb_memowrit( "respuesta.xml", cResponse )
else
? "Error :"+ curl_easy_strerror( nError ), nError
endif
curl_easy_cleanup( hCurl )
curl_global_cleanup()
return
Code: Select all | Expand
#include "hbcurl.ch"
PROCEDURE main()
local nError, cResponse
//local cXmlStr := hb_memoread( "peticion.xml" )
local aHeader := {}
local cUrl := "https://vpfe.dian.gov.co/WcfDianCustomerServices.svc"
local cCertFile := "CERTIFICADO.p12"
local cCertType := "P12" // o "PFX"
local cCertPass := "xxxxxxxxxxxxxx"
local cSignedXmlFile
local cNomZip := "z006331767200025SP104100000250.zip"
local cFacturaXml,cXmlStr
local hCurl := curl_easy_init()
cFacturaXml := "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"
// MemoRead( cSignedXmlFile )
// Crear la solicitud SOAP
cXmlStr = ;
'<?xml version="1.0" encoding="UTF-8"?>' + ;
'<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:wcf="http://wcf.dian.colombia">' + ;
'<soapenv:Header/>'+;
'<soapenv:Body>' + ;
'<wcf:SendBillSync>' + ;
'<wcf:fileName>' + cNomZip +'</wcf:fileName>' + ;
'<wcf:contentFile>' + cFacturaXml + '</wcf:contentFile>' + ;
'</wcf:SendBillSync>' + ;
'</soapenv:Body>' + ;
'</soapenv:Envelope>'
// Establecer cabeceras requeridas por el WS
// LOS HEADER COMENTADOS LOS USA EL APP "SOAP UI"
//aadd( aHeader, "Accept-Encoding: gzip,deflate" )
aadd( aHeader, "Content-Type: application/soap+xml; charset=utf-8" )
aadd( aHeader, "SOAPAction: http://wcf.dian.colombia/IWcfDianCustomerServices/SendBillSync" )
//aadd( aHeader, "Content-Length : "+ALLTRIM( STR(len(cXmlStr),12,0)) )
//aadd( aHeader, "Host: vpfe.dian.gov.co" )
//aadd( aHeader, "Connection: Keep-Alive" )
//aadd( aHeader, "User-Agent: Apache-HttpClient/4.5.5 (Java/17.0.12)" )
// Setear opciones
curl_easy_setopt( hCurl, HB_CURLOPT_HTTPHEADER, aHeader )
curl_easy_setopt( hCurl, HB_CURLOPT_URL, cUrl )
curl_easy_setopt( hCurl, HB_CURLOPT_TIMEOUT, 30 )
curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYHOST, .F. )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERT, cCertFile )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERTTYPE, cCertType )
curl_easy_setopt( hCurl, HB_CURLOPT_KEYPASSWD, cCertPass )
curl_easy_setopt( hCurl, HB_CURLOPT_POST, .T.)
curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, cXmlStr )
curl_easy_setopt( hCurl, HB_CURLOPT_DL_BUFF_SETUP )
// echo server, para depurar .T.
curl_easy_setopt( hCurl, HB_CURLOPT_VERBOSE, .F. )
// No reutilizar conexiones
curl_easy_setopt( hCurl, HB_CURLOPT_FRESH_CONNECT, .T.)
curl_easy_setopt( hCurl, HB_CURLOPT_FORBID_REUSE, .T.)
// Conexion
nError := curl_easy_perform( hCurl )
cResponse := curl_easy_dl_buff_get( hCurl )
alert(nError)
alert(cResponse)
if nError == 0
hb_memowrit( "respuesta.xml", cResponse )
else
? "Error :"+ curl_easy_strerror( nError ), nError
endif
curl_easy_cleanup( hCurl )
curl_global_cleanup()
return
Code: Select all | Expand
"Accept-Encoding:gzip" ]
"Content-Encoding:gzip" ]
"Content-Type:application/octet-stream;charset=UTF-8" ]
Code: Select all | Expand
"Accept-Encoding:gzip" ]
"Content-Encoding:gzip" ]
"Content-Type:application/octet-stream;charset=UTF-8" ]
Code: Select all | Expand
#include "hbcurl.ch"
PROCEDURE main()
local nError, cResponse
//local cXmlStr := hb_memoread( "peticion.xml" )
local aHeader := {}
local cUrl := "https://vpfe.dian.gov.co/WcfDianCustomerServices.svc"
local cCertFile := "CERTIFICADO.p12"
local cCertType := "P12" // o "PFX"
local cCertPass := "xxxxxxxxx"
local cNomZip := "z006331767200025SP104100000250.zip"
local cFacturaXml,cXmlStr := ""
local aHasRes := hash()
local cFilRes := ""
local cSignedXmlFile := "E:\TEMP\XML_FIRMADO\z006331767200025SP104100000250_fv_B64"
local hCurl
cFacturaXml = MemoRead( cSignedXmlFile )
// cFacturaXml := "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"
// Crear la solicitud SOAP
cXmlStr := ;
'<?xml version="1.0" encoding="UTF-8"?>' + ;
'<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wcf="http://wcf.dian.colombia">' + ;
'<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"><wsse:Security soap:mustUnderstand="true" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><wsu:Timestamp wsu:Id="TS-BD40368ECABC33A9ED174242532066842"><wsu:Created>2025-03-19T23:02:00.668Z</wsu:Created><wsu:Expires>2025-03-20T15:42:00.668Z</wsu:Expires></wsu:Timestamp><wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="X509-BD40368ECABC33A9ED174242532063237">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</wsse:BinarySecurityToken><ds:Signature Id="SIG-BD40368ECABC33A9ED174242532066441" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><ec:InclusiveNamespaces PrefixList="wsa soap wcf" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:CanonicalizationMethod><ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><ds:Reference URI="#id-BD40368ECABC33A9ED174242532063240"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><ec:InclusiveNamespaces PrefixList="soap wcf" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><ds:DigestValue>qJh6cLlCnqq3wbelPQpLrHWjF1DckDtAd6nImSnuk0A=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>QfUTEIbjYSlsBrTjWPwzciZvY/je5La75j8yZrRhxUDHqYHt/09erTS6o6Cd8kMFg4cLoleY1VF1P0xiFMLJCIQYvb9TKYmQPuV2y4vw2B7fAkKNRxSW5JRjeIaAWN3WZ3XjIZiKZMzNKXKVLuM6hKNQ1mtnKBHqc3QpRikmekRwpJ7hDACB+LCbwHQywG9aAdaKzELHO3zzc1khju1YvcRb+eN9Dll7I0CVSX7RUklUfdUtdcyumZPmsgRmPMAZp0PG9owrbOd24tLKDD8QJQM9duNrv+EghPzsBmhYe70CzVlJ7Q3JtiWPctn6O5+Skb2DIsSuyJ6+wkyMNXfdVQ==</ds:SignatureValue><ds:KeyInfo Id="KI-BD40368ECABC33A9ED174242532063238"><wsse:SecurityTokenReference wsu:Id="STR-BD40368ECABC33A9ED174242532063239"><wsse:Reference URI="#X509-BD40368ECABC33A9ED174242532063237" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/></wsse:SecurityTokenReference></ds:KeyInfo></ds:Signature></wsse:Security><wsa:Action>http://wcf.dian.colombia/IWcfDianCustomerServices/SendBillSync</wsa:Action><wsa:To wsu:Id="id-BD40368ECABC33A9ED174242532063240" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">https://vpfe.dian.gov.co/WcfDianCustomerServices.svc</wsa:To></soap:Header>'+;
'<soap:Body>' + ;
'<wcf:SendBillSync>' + ;
'<wcf:fileName>' + cNomZip +'</wcf:fileName>' + ;
'<wcf:contentFile>' + cFacturaXml + '</wcf:contentFile>' + ;
'</wcf:SendBillSync>' + ;
'</soap:Body>' + ;
'</soap:Envelope>'
// HB_MEMOWRIT( "PRUEBA.XML", cXmlStr )
// Establecer cabeceras requeridas por el WS
aadd( aHeader, "Content-Type: application/soap+xml; charset=UTF-8" )
aadd( aHeader, "SOAPaction=http://wcf.dian.colombia/IWcfDianCustomerServices/SendBillSync" )
aadd( aHeader, "Connection: Keep-Alive" )
aadd( aHeader, "Cache-Control: private" )
hCurl := curl_easy_init()
curl_easy_setopt( hCurl, HB_CURLOPT_URL, cUrl )
curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYPEER, .f. )
curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYHOST, .f. )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERT, cCertFile )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERTTYPE, cCertType )
curl_easy_setopt( hCurl, HB_CURLOPT_KEYPASSWD, cCertPass )
curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, cXmlStr )
curl_easy_setopt( hCurl, HB_CURLOPT_DL_BUFF_SETUP )
curl_easy_setopt( hCurl, HB_CURLOPT_HTTPHEADER, aHeader )
// echo server, para depurar .T.
curl_easy_setopt( hCurl, HB_CURLOPT_VERBOSE, .T. )
curl_easy_setopt( hCurl, HB_CURLOPT_ENCODING, "" )
curl_easy_setopt( hCurl, HB_CURLOPT_MAXREDIRS, 10 )
curl_easy_setopt( hCurl, HB_CURLOPT_CUSTOMREQUEST, "POST" )
// No reutilizar conexiones
curl_easy_setopt( hCurl, HB_CURLOPT_FRESH_CONNECT, .T.)
curl_easy_setopt( hCurl, HB_CURLOPT_FORBID_REUSE, .T.)
// Conexion
nError := curl_easy_perform( hCurl )
cResponse := curl_easy_dl_buff_get( hCurl )
if nError == 0
hb_memowrit( "respuesta.xml", cResponse )
else
MSGINFO( curl_easy_strerror( nError ) )
endif
curl_easy_cleanup( hCurl )
curl_global_cleanup()
return
Code: Select all | Expand
#include "hbcurl.ch"
PROCEDURE main()
local nError, cResponse
//local cXmlStr := hb_memoread( "peticion.xml" )
local aHeader := {}
local cUrl := "https://vpfe.dian.gov.co/WcfDianCustomerServices.svc"
local cCertFile := "CERTIFICADO.p12"
local cCertType := "P12" // o "PFX"
local cCertPass := "xxxxxxxxx"
local cNomZip := "z006331767200025SP104100000250.zip"
local cFacturaXml,cXmlStr := ""
local aHasRes := hash()
local cFilRes := ""
local cSignedXmlFile := "E:\TEMP\XML_FIRMADO\z006331767200025SP104100000250_fv_B64"
local hCurl
cFacturaXml = MemoRead( cSignedXmlFile )
// cFacturaXml := "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"
// Crear la solicitud SOAP
cXmlStr := ;
'<?xml version="1.0" encoding="UTF-8"?>' + ;
'<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:wcf="http://wcf.dian.colombia">' + ;
'<soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"><wsse:Security soap:mustUnderstand="true" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><wsu:Timestamp wsu:Id="TS-BD40368ECABC33A9ED174242532066842"><wsu:Created>2025-03-19T23:02:00.668Z</wsu:Created><wsu:Expires>2025-03-20T15:42:00.668Z</wsu:Expires></wsu:Timestamp><wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="X509-BD40368ECABC33A9ED174242532063237">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</wsse:BinarySecurityToken><ds:Signature Id="SIG-BD40368ECABC33A9ED174242532066441" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><ec:InclusiveNamespaces PrefixList="wsa soap wcf" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:CanonicalizationMethod><ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/><ds:Reference URI="#id-BD40368ECABC33A9ED174242532063240"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"><ec:InclusiveNamespaces PrefixList="soap wcf" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><ds:DigestValue>qJh6cLlCnqq3wbelPQpLrHWjF1DckDtAd6nImSnuk0A=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>QfUTEIbjYSlsBrTjWPwzciZvY/je5La75j8yZrRhxUDHqYHt/09erTS6o6Cd8kMFg4cLoleY1VF1P0xiFMLJCIQYvb9TKYmQPuV2y4vw2B7fAkKNRxSW5JRjeIaAWN3WZ3XjIZiKZMzNKXKVLuM6hKNQ1mtnKBHqc3QpRikmekRwpJ7hDACB+LCbwHQywG9aAdaKzELHO3zzc1khju1YvcRb+eN9Dll7I0CVSX7RUklUfdUtdcyumZPmsgRmPMAZp0PG9owrbOd24tLKDD8QJQM9duNrv+EghPzsBmhYe70CzVlJ7Q3JtiWPctn6O5+Skb2DIsSuyJ6+wkyMNXfdVQ==</ds:SignatureValue><ds:KeyInfo Id="KI-BD40368ECABC33A9ED174242532063238"><wsse:SecurityTokenReference wsu:Id="STR-BD40368ECABC33A9ED174242532063239"><wsse:Reference URI="#X509-BD40368ECABC33A9ED174242532063237" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/></wsse:SecurityTokenReference></ds:KeyInfo></ds:Signature></wsse:Security><wsa:Action>http://wcf.dian.colombia/IWcfDianCustomerServices/SendBillSync</wsa:Action><wsa:To wsu:Id="id-BD40368ECABC33A9ED174242532063240" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">https://vpfe.dian.gov.co/WcfDianCustomerServices.svc</wsa:To></soap:Header>'+;
'<soap:Body>' + ;
'<wcf:SendBillSync>' + ;
'<wcf:fileName>' + cNomZip +'</wcf:fileName>' + ;
'<wcf:contentFile>' + cFacturaXml + '</wcf:contentFile>' + ;
'</wcf:SendBillSync>' + ;
'</soap:Body>' + ;
'</soap:Envelope>'
// HB_MEMOWRIT( "PRUEBA.XML", cXmlStr )
// Establecer cabeceras requeridas por el WS
aadd( aHeader, "Content-Type: application/soap+xml; charset=UTF-8" )
aadd( aHeader, "SOAPaction=http://wcf.dian.colombia/IWcfDianCustomerServices/SendBillSync" )
aadd( aHeader, "Connection: Keep-Alive" )
aadd( aHeader, "Cache-Control: private" )
hCurl := curl_easy_init()
curl_easy_setopt( hCurl, HB_CURLOPT_URL, cUrl )
curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYPEER, .f. )
curl_easy_setopt( hCurl, HB_CURLOPT_SSL_VERIFYHOST, .f. )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERT, cCertFile )
curl_easy_setopt( hCurl, HB_CURLOPT_SSLCERTTYPE, cCertType )
curl_easy_setopt( hCurl, HB_CURLOPT_KEYPASSWD, cCertPass )
curl_easy_setopt( hCurl, HB_CURLOPT_POSTFIELDS, cXmlStr )
curl_easy_setopt( hCurl, HB_CURLOPT_DL_BUFF_SETUP )
curl_easy_setopt( hCurl, HB_CURLOPT_HTTPHEADER, aHeader )
// echo server, para depurar .T.
curl_easy_setopt( hCurl, HB_CURLOPT_VERBOSE, .T. )
curl_easy_setopt( hCurl, HB_CURLOPT_ENCODING, "" )
curl_easy_setopt( hCurl, HB_CURLOPT_MAXREDIRS, 10 )
curl_easy_setopt( hCurl, HB_CURLOPT_CUSTOMREQUEST, "POST" )
// No reutilizar conexiones
curl_easy_setopt( hCurl, HB_CURLOPT_FRESH_CONNECT, .T.)
curl_easy_setopt( hCurl, HB_CURLOPT_FORBID_REUSE, .T.)
// Conexion
nError := curl_easy_perform( hCurl )
cResponse := curl_easy_dl_buff_get( hCurl )
if nError == 0
hb_memowrit( "respuesta.xml", cResponse )
else
MSGINFO( curl_easy_strerror( nError ) )
endif
curl_easy_cleanup( hCurl )
curl_global_cleanup()
return
Code: Select all | Expand
<soap:Header
xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security soap:mustUnderstand="true"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Timestamp wsu:Id="TS-938EB38DEFEBD26652174243018444012">
<wsu:Created>2025-03-20T00:23:04.440Z</wsu:Created>
<wsu:Expires>2025-03-20T17:03:04.440Z</wsu:Expires>
</wsu:Timestamp>
<wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="X509-938EB38DEFEBD2665217424301843837">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</wsse:BinarySecurityToken>
<ds:Signature Id="SIG-938EB38DEFEBD26652174243018442611"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces PrefixList="wsa soap wcf"
xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:CanonicalizationMethod>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<ds:Reference URI="#id-938EB38DEFEBD26652174243018438610">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces PrefixList="soap wcf"
xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<ds:DigestValue>buQfAhluXZsKUO9HlDLCSFgl0MeGNpeG7bWGlApVNL8=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>GMgcY6ADnFAlGnWNQqOsOOQDd+WicYhZwabfkWsZlcNiUacKLvpr7+K1akLjls7ZaP6XNj/3LwQOcFWB+it5rwuVbyC7DMGNYDMVih99dz6HiChUggeTZdDO7t+G2e/VHr+BQobqsrhn1Pj4X/WbFu+MFPtwRralxyZvCe/SamkidyQb2aNyXXI6PHZsW507o7aGmAF/MFYAk4b/8xf6QXYnRrkYUWoAsOjAO2vzILl8Lk7ppBCbYa6Q4AUzdsCnDqr9iKgC+nXw40gQ0Q/EeOzV/oSQ9VQDkLcDrYvWG8hsjFYBmF4F+AGfwC5yovuljrvDM82sG+D3yNMcLv+Ofg==</ds:SignatureValue>
<ds:KeyInfo Id="KI-938EB38DEFEBD2665217424301843858">
<wsse:SecurityTokenReference wsu:Id="STR-938EB38DEFEBD2665217424301843859">
<wsse:Reference URI="#X509-938EB38DEFEBD2665217424301843837" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
</wsse:SecurityTokenReference>
</ds:KeyInfo>
</ds:Signature>
</wsse:Security>
<wsa:Action>http://wcf.dian.colombia/IWcfDianCustomerServices/SendBillSync</wsa:Action>
<wsa:To wsu:Id="id-938EB38DEFEBD26652174243018438610"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">https://vpfe.dian.gov.co/WcfDianCustomerServices.svc
</wsa:To>
</soap:Header>
]]>Code: Select all | Expand
<soap:Header
xmlns:wsa="http://www.w3.org/2005/08/addressing">
<wsse:Security soap:mustUnderstand="true"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Timestamp wsu:Id="TS-938EB38DEFEBD26652174243018444012">
<wsu:Created>2025-03-20T00:23:04.440Z</wsu:Created>
<wsu:Expires>2025-03-20T17:03:04.440Z</wsu:Expires>
</wsu:Timestamp>
<wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="X509-938EB38DEFEBD2665217424301843837">MIIHCDCCBfCgAwIBAgIIK+IT003JoQUwDQYJKoZIhvcNAQELBQAwgcUxJjAkBgNVBAMMHVNVQkNBIENBTUVSRklSTUEgQ09MT01CSUEgU0FTMRQwEgYDVQQFEws5MDEzMTIxMTItNDFAMD4GA1UECww3Q2VydGlmaWNhZG9zIFBhcmEgRmlybWEgRWxlY3Ryb25pY2EgQ2FtZXJmaXJtYSBDb2xvbWJpYTEgMB4GA1UECgwXQ0FNRVJGSVJNQSBDT0xPTUJJQSBTQVMxFDASBgNVBAcMC0JPR09UQSBELkMuMQswCQYDVQQGEwJDTzAeFw0yNDA3MjQxMzU4MzZaFw0yNjA3MjQxMzU4MzVaMIHLMRwwGgYDVQQJDBNDUkEgMzYgNDQgMzUgT0YgODAzMRMwEQYDVQQUEwozMTY1MjI5NTI4MSAwHgYDVQQDDBdNQVJUSEEgQ0FTVElMTE8gRlVFTlRFUzERMA8GA1UEBRMINjMzMTc2NzIxHDAaBgNVBAsME0ZhY3R1cmEgZWxlY3Ryb25pY2ExIDAeBgNVBAoMF01BUlRIQSBDQVNUSUxMTyBGVUVOVEVTMRQwEgYDVQQIDAtCdWNhcmFtYW5nYTELMAkGA1UEBhMCQ08wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCW4HEbz3N/QWH/5PrCol8/etMgghJizecnQbod7qY++ZKUPGKW1GUqsBIesoZ276W5UPPqtnCnc4zYKori/6SmrF7hthv7VpzWugdaULzQp+R4i2cG2Jcx+OcddRU6cxdYBoZD97FWjwqHKXZ2ahCh8tbzkFuPXlpN9F4zIIHG9p3BtOGuJhrCMdak905A8/6g7H1GLuud/txaCFIK1+kempBatMMiA1S4+EH+xWMYGtxIakolNLbapXh+uXcybmH68Ge4KraFZLCnUvgv1o7EC3PvQeXfZbnUxJ11BiCG+ZcrBeaJZpbVS1K7elVVjd1fpnEM95EK1qpmjUyDPXDXAgMBAAGjggLyMIIC7jAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFMCPn2uVGVZRNZ5UmMZ3l/0l2PbNMFsGCCsGAQUFBwEBBE8wTTBLBggrBgEFBQcwAYY/aHR0cDovL3BraWNvbC5jYW1lcmZpcm1hY29sb21iaWEuY28vZWpiY2EvcHVibGljd2ViL3N0YXR1cy9vY3NwMBUGA1UdEQQOMAyICisGAQQBgYcuHgswJwYDVR0lBCAwHgYIKwYBBQUHAwIGCCsGAQUFBwMEBggrBgEFBQcDATCCAe8GA1UdHwEB/wSCAeMwggHfMIIB26CCAQmgggEFhoIBAWh0dHA6Ly9wa2ljb2wuY2FtZXJmaXJtYWNvbG9tYmlhLmNvL2VqYmNhL3B1YmxpY3dlYi93ZWJkaXN0L2NlcnRkaXN0P2NtZD1jcmwmaXNzdWVyPUNOJTNEU1VCQ0ErQ0FNRVJGSVJNQStDT0xPTUJJQStTQVMlMkNTTiUzRDkwMTMxMjExMi00JTJDT1UlM0RDZXJ0aWZpY2Fkb3MrUGFyYStGaXJtYStFbGVjdHJvbmljYStDYW1lcmZpcm1hK0NvbG9tYmlhJTJDTyUzRENBTUVSRklSTUErQ09MT01CSUErU0FTJTJDTCUzREJPR09UQStELkMuJTJDQyUzRENPooHLpIHIMIHFMSYwJAYDVQQDDB1TVUJDQSBDQU1FUkZJUk1BIENPTE9NQklBIFNBUzELMAkGA1UEBhMCQ08xFDASBgNVBAcMC0JPR09UQSBELkMuMSAwHgYDVQQKDBdDQU1FUkZJUk1BIENPTE9NQklBIFNBUzFAMD4GA1UECww3Q2VydGlmaWNhZG9zIFBhcmEgRmlybWEgRWxlY3Ryb25pY2EgQ2FtZXJmaXJtYSBDb2xvbWJpYTEUMBIGA1UEBRMLOTAxMzEyMTEyLTQwHQYDVR0OBBYEFCJbrc3C7Y95FmzhU4xYMe8hb39tMA4GA1UdDwEB/wQEAwIF4DANBgkqhkiG9w0BAQsFAAOCAQEArsRQuXwBM6SOohj2vQ6XLoMmdn83vEkQN/NZ7NBpMHI0+Im+ij3mQxYcPJET6X2qljVt8v+dC4eNeANQ+cWTIzDcBuxnjIMFpHTchCGVPC1/XENLr66Ly+wXurDNBA5Zo2I4VATkIEG6d39PuM4SSmz+ZrGjiOz+A0FfQsq6wP+fp9TLHphR8U4wfk87NKLl8H1Vafo7YX7Fz9WCPeYMEjeeyiBEhdoXS/v7l1PEj7JfYodSJO/YhNJzcla6EAp63BV/JPMTQaOBlzp1SL8+YHDTUekIbMpL5iByY9KL/ooQvZm+R0rcvaAJCCgogmcytUj4LK9plcOiIgtpg3gVtQ==</wsse:BinarySecurityToken>
<ds:Signature Id="SIG-938EB38DEFEBD26652174243018442611"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces PrefixList="wsa soap wcf"
xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:CanonicalizationMethod>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<ds:Reference URI="#id-938EB38DEFEBD26652174243018438610">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces PrefixList="soap wcf"
xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
<ds:DigestValue>buQfAhluXZsKUO9HlDLCSFgl0MeGNpeG7bWGlApVNL8=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>GMgcY6ADnFAlGnWNQqOsOOQDd+WicYhZwabfkWsZlcNiUacKLvpr7+K1akLjls7ZaP6XNj/3LwQOcFWB+it5rwuVbyC7DMGNYDMVih99dz6HiChUggeTZdDO7t+G2e/VHr+BQobqsrhn1Pj4X/WbFu+MFPtwRralxyZvCe/SamkidyQb2aNyXXI6PHZsW507o7aGmAF/MFYAk4b/8xf6QXYnRrkYUWoAsOjAO2vzILl8Lk7ppBCbYa6Q4AUzdsCnDqr9iKgC+nXw40gQ0Q/EeOzV/oSQ9VQDkLcDrYvWG8hsjFYBmF4F+AGfwC5yovuljrvDM82sG+D3yNMcLv+Ofg==</ds:SignatureValue>
<ds:KeyInfo Id="KI-938EB38DEFEBD2665217424301843858">
<wsse:SecurityTokenReference wsu:Id="STR-938EB38DEFEBD2665217424301843859">
<wsse:Reference URI="#X509-938EB38DEFEBD2665217424301843837" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
</wsse:SecurityTokenReference>
</ds:KeyInfo>
</ds:Signature>
</wsse:Security>
<wsa:Action>http://wcf.dian.colombia/IWcfDianCustomerServices/SendBillSync</wsa:Action>
<wsa:To wsu:Id="id-938EB38DEFEBD26652174243018438610"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">https://vpfe.dian.gov.co/WcfDianCustomerServices.svc
</wsa:To>
</soap:Header>
]]>Code: Select all | Expand
FUNCTION CLILKAT(cFilNam, xDocB64)
LOCAL loXml
LOCAL lcSoapRequestBody
LOCAL lcEndpoint
LOCAL lcSoapAction
LOCAL lcContentType
LOCAL loHttp
LOCAL loResp
LOCAL loResponseXml
LOCAL lnStatusCode
LOCAL lcV_string
LOCAL lcIsValid
LOCAL lcStatusCode
LOCAL lcStatusDescription
LOCAL lcStatusMessage
LOCAL lcXmlBase64Bytes
LOCAL lcXmlBytes
LOCAL lcXmlDocumentKey
LOCAL lcXmlFileName
local cFilXml
* For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Xml')
loXml = CreateObject('Chilkat.Xml')
loXml:Tag = "soap:Envelope"
loXml:AddAttribute("xmlns:soap","http://www.w3.org/2003/05/soap-envelope")
loXml:AddAttribute("xmlns:wcf","http://wcf.dian.colombia")
loXml:UpdateChildContent("soap:Header","")
loXml:UpdateChildContent("soap:Body|wcf:SendBillSync|wcf:fileName",cFilNam)
loXml:UpdateChildContent("soap:Body|wcf:SendBillSync|wcf:contentFile",xDocB64)
* In a SOAP HTTP request, including the XML declaration (<?xml version="1.0" encoding="UTF-8"?>) in the XML body is generally not required.
loXml:EmitXmlDecl = 0
lcSoapRequestBody = loXml:GetXml()
lcEndpoint = "https://vpfe-hab.dian.gov.co/WcfDianCustomerServices.svc"
lcSoapAction = "http://wcf.dian.colombia/IWcfDianCustomerServices/SendBillSync"
* For SOAP requests, the standard Content-Type is usually set to "text/xml" or "application/soap+xml"
lcContentType = "application/soap+xml"
* For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Http')
loHttp = CreateObject('Chilkat.Http')
loHttp:ClearHeaders()
loHttp:SetRequestHeader("Content-Type",lcContentType)
loHttp:SetRequestHeader("SOAPAction",lcSoapAction)
loResp = loHttp:PostXml(lcEndpoint,lcSoapRequestBody,"utf-8")
IF (loHttp:LastMethodSuccess = 0)
alert( loHttp:LastErrorText)
alert( "Failed to send SOAP request." )
RELEASE loXml
RELEASE loHttp
CANCEL
ENDIF
* Get the XML response body.
* For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Xml')
loResponseXml = CreateObject('Chilkat.Xml')
loResp:GetBodyXml(loResponseXml)
lnStatusCode = loResp:StatusCode
alert( "response status code: " + STR(lnStatusCode) )
RELEASE loResp
cFilXml := loResponseXml:GetXml()
hb_memowrit( "respuestaCli.xml", cFilXml )
* If the status code does not indicate succcess, then show the response XML,
* which probably contains error information.
IF (lnStatusCode <> 200)
alert( cFilXml )
RELEASE loXml
RELEASE loHttp
RELEASE loResponseXml
CANCEL
ENDIF
* Parse the successful SOAP response XML.
* This is a sample of the response XML, but the namespace prefixes will be different.
* We can parse the result using "*" for the namespace prefixes (see below).
lcV_string = loResponseXml:GetChildContent("*:Body|*:SendBillSyncResponse|*:SendBillSyncResult|*:ErrorMessage|*:string")
lcIsValid = loResponseXml:GetChildContent("*:Body|*:SendBillSyncResponse|*:SendBillSyncResult|*:IsValid")
lcStatusCode = loResponseXml:GetChildContent("*:Body|*:SendBillSyncResponse|*:SendBillSyncResult|*:StatusCode")
lcStatusDescription = loResponseXml:GetChildContent("*:Body|*:SendBillSyncResponse|*:SendBillSyncResult|*:StatusDescription")
lcStatusMessage = loResponseXml:GetChildContent("*:Body|*:SendBillSyncResponse|*:SendBillSyncResult|*:StatusMessage")
lcXmlBase64Bytes = loResponseXml:GetChildContent("*:Body|*:SendBillSyncResponse|*:SendBillSyncResult|*:XmlBase64Bytes")
lcXmlBytes = loResponseXml:GetChildContent("*:Body|*:SendBillSyncResponse|*:SendBillSyncResult|*:XmlBytes")
lcXmlDocumentKey = loResponseXml:GetChildContent("*:Body|*:SendBillSyncResponse|*:SendBillSyncResult|*:XmlDocumentKey")
lcXmlFileName = loResponseXml:GetChildContent("*:Body|*:SendBillSyncResponse|*:SendBillSyncResult|*:XmlFileName")
RELEASE loXml
RELEASE loHttp
RELEASE loResponseXml
RETURN cFilXml
Code: Select all | Expand
FUNCTION CLILKAT(cFilNam, xDocB64)
LOCAL loXml
LOCAL lcSoapRequestBody
LOCAL lcEndpoint
LOCAL lcSoapAction
LOCAL lcContentType
LOCAL loHttp
LOCAL loResp
LOCAL loResponseXml
LOCAL lnStatusCode
LOCAL lcV_string
LOCAL lcIsValid
LOCAL lcStatusCode
LOCAL lcStatusDescription
LOCAL lcStatusMessage
LOCAL lcXmlBase64Bytes
LOCAL lcXmlBytes
LOCAL lcXmlDocumentKey
LOCAL lcXmlFileName
local cFilXml
* For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Xml')
loXml = CreateObject('Chilkat.Xml')
loXml:Tag = "soap:Envelope"
loXml:AddAttribute("xmlns:soap","http://www.w3.org/2003/05/soap-envelope")
loXml:AddAttribute("xmlns:wcf","http://wcf.dian.colombia")
loXml:UpdateChildContent("soap:Header","")
loXml:UpdateChildContent("soap:Body|wcf:SendBillSync|wcf:fileName",cFilNam)
loXml:UpdateChildContent("soap:Body|wcf:SendBillSync|wcf:contentFile",xDocB64)
* In a SOAP HTTP request, including the XML declaration (<?xml version="1.0" encoding="UTF-8"?>) in the XML body is generally not required.
loXml:EmitXmlDecl = 0
lcSoapRequestBody = loXml:GetXml()
lcEndpoint = "https://vpfe-hab.dian.gov.co/WcfDianCustomerServices.svc"
lcSoapAction = "http://wcf.dian.colombia/IWcfDianCustomerServices/SendBillSync"
* For SOAP requests, the standard Content-Type is usually set to "text/xml" or "application/soap+xml"
lcContentType = "application/soap+xml"
* For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Http')
loHttp = CreateObject('Chilkat.Http')
loHttp:ClearHeaders()
loHttp:SetRequestHeader("Content-Type",lcContentType)
loHttp:SetRequestHeader("SOAPAction",lcSoapAction)
loResp = loHttp:PostXml(lcEndpoint,lcSoapRequestBody,"utf-8")
IF (loHttp:LastMethodSuccess = 0)
alert( loHttp:LastErrorText)
alert( "Failed to send SOAP request." )
RELEASE loXml
RELEASE loHttp
CANCEL
ENDIF
* Get the XML response body.
* For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Xml')
loResponseXml = CreateObject('Chilkat.Xml')
loResp:GetBodyXml(loResponseXml)
lnStatusCode = loResp:StatusCode
alert( "response status code: " + STR(lnStatusCode) )
RELEASE loResp
cFilXml := loResponseXml:GetXml()
hb_memowrit( "respuestaCli.xml", cFilXml )
* If the status code does not indicate succcess, then show the response XML,
* which probably contains error information.
IF (lnStatusCode <> 200)
alert( cFilXml )
RELEASE loXml
RELEASE loHttp
RELEASE loResponseXml
CANCEL
ENDIF
* Parse the successful SOAP response XML.
* This is a sample of the response XML, but the namespace prefixes will be different.
* We can parse the result using "*" for the namespace prefixes (see below).
lcV_string = loResponseXml:GetChildContent("*:Body|*:SendBillSyncResponse|*:SendBillSyncResult|*:ErrorMessage|*:string")
lcIsValid = loResponseXml:GetChildContent("*:Body|*:SendBillSyncResponse|*:SendBillSyncResult|*:IsValid")
lcStatusCode = loResponseXml:GetChildContent("*:Body|*:SendBillSyncResponse|*:SendBillSyncResult|*:StatusCode")
lcStatusDescription = loResponseXml:GetChildContent("*:Body|*:SendBillSyncResponse|*:SendBillSyncResult|*:StatusDescription")
lcStatusMessage = loResponseXml:GetChildContent("*:Body|*:SendBillSyncResponse|*:SendBillSyncResult|*:StatusMessage")
lcXmlBase64Bytes = loResponseXml:GetChildContent("*:Body|*:SendBillSyncResponse|*:SendBillSyncResult|*:XmlBase64Bytes")
lcXmlBytes = loResponseXml:GetChildContent("*:Body|*:SendBillSyncResponse|*:SendBillSyncResult|*:XmlBytes")
lcXmlDocumentKey = loResponseXml:GetChildContent("*:Body|*:SendBillSyncResponse|*:SendBillSyncResult|*:XmlDocumentKey")
lcXmlFileName = loResponseXml:GetChildContent("*:Body|*:SendBillSyncResponse|*:SendBillSyncResult|*:XmlFileName")
RELEASE loXml
RELEASE loHttp
RELEASE loResponseXml
RETURN cFilXml
Code: Select all | Expand
FUNCTION Main()
LOCAL i
REQUEST DBFCDX
RddSetDefault( "DBFCDX" )
set DATE FRENCH
SET CENTURY ON
SET EPOCH TO Year( Date() ) - 40
USE C:\fwh\samples\customer NEW SHARED
XBROWSER "CUSTOMER" TITLE "Prueba" SETUP ;
( oBrw:bInit := { |o| ;
o:oWnd:oBar:aControls[ 8 ]:lGroup := .F., ;
o:oWnd:oBar:aControls[ 5 ]:Hide(), ;
o:oWnd:oBar:aControls[ 6 ]:Hide(), ;
o:oWnd:oBar:aControls[ 7 ]:Hide(), ;
o:oWnd:oBar:aControls[ 8 ]:Hide() } ;
)
RETURN nil
Code: Select all | Expand
FUNCTION Main()
LOCAL i
REQUEST DBFCDX
RddSetDefault( "DBFCDX" )
set DATE FRENCH
SET CENTURY ON
SET EPOCH TO Year( Date() ) - 40
USE C:\fwh\samples\customer NEW SHARED
XBROWSER "CUSTOMER" TITLE "Prueba" SETUP ;
( oBrw:bInit := { |o| ;
o:oWnd:oBar:aControls[ 8 ]:lGroup := .F., ;
o:oWnd:oBar:aControls[ 5 ]:Hide(), ;
o:oWnd:oBar:aControls[ 6 ]:Hide(), ;
o:oWnd:oBar:aControls[ 7 ]:Hide(), ;
o:oWnd:oBar:aControls[ 8 ]:Hide() } ;
)
RETURN nil
Code: Select all | Expand
// C:\FWH\SAMPLES\MURUGOS.PRG
#include "FiveWin.ch"
REQUEST DBFCDX
FUNCTION Main()
LOCAL i
rddSetDefault( "DBFCDX" )
SET DATE FRENCH
SET CENTURY ON
SET EPOCH TO Year( Date() ) - 40
USE ..\SAMPLES\CUSTOMER NEW SHARED
GO TOP
XBROWSER "CUSTOMER" TITLE "Prueba" SETUP ;
( oBrw:bInit := {| o | ;
o:oWnd:oBar:aControls[ 8 ]:lGroup := .F., ;
o:oWnd:oBar:aControls[ 5 ]:Hide(), ;
o:oWnd:oBar:aControls[ 6 ]:Hide(), ;
o:oWnd:oBar:aControls[ 7 ]:Hide(), ;
o:oWnd:oBar:aControls[ 8 ]:Hide(), ;
o:oWnd:oBar:Del( Len( o:oWnd:oBar:aControls ) ) } ; // aqui
)
RETURN NIL
// FIN / END - kapiabafwh@gmail.com
Code: Select all | Expand
// C:\FWH\SAMPLES\MURUGOS.PRG
#include "FiveWin.ch"
REQUEST DBFCDX
FUNCTION Main()
LOCAL i
rddSetDefault( "DBFCDX" )
SET DATE FRENCH
SET CENTURY ON
SET EPOCH TO Year( Date() ) - 40
USE ..\SAMPLES\CUSTOMER NEW SHARED
GO TOP
XBROWSER "CUSTOMER" TITLE "Prueba" SETUP ;
( oBrw:bInit := {| o | ;
o:oWnd:oBar:aControls[ 8 ]:lGroup := .F., ;
o:oWnd:oBar:aControls[ 5 ]:Hide(), ;
o:oWnd:oBar:aControls[ 6 ]:Hide(), ;
o:oWnd:oBar:aControls[ 7 ]:Hide(), ;
o:oWnd:oBar:aControls[ 8 ]:Hide(), ;
o:oWnd:oBar:Del( Len( o:oWnd:oBar:aControls ) ) } ; // aqui
)
RETURN NIL
// FIN / END - kapiabafwh@gmail.com
Code: Select all | Expand
// C:\FWH\SAMPLES\MURUGOS.PRG - Version 2.
#include "FiveWin.ch"
REQUEST DBFCDX
FUNCTION Main()
LOCAL i
rddSetDefault( "DBFCDX" )
SET DATE FRENCH
SET CENTURY ON
SET EPOCH TO Year( Date() ) - 40
USE ..\SAMPLES\CUSTOMER NEW SHARED
GO TOP
/*
XBROWSER "CUSTOMER" TITLE "Prueba" SETUP ;
( oBrw:bInit := {| o | ;
o:oWnd:oBar:aControls[ 8 ]:lGroup := .F., ;
o:oWnd:oBar:aControls[ 5 ]:Hide(), ;
o:oWnd:oBar:aControls[ 6 ]:Hide(), ;
o:oWnd:oBar:aControls[ 7 ]:Hide(), ;
o:oWnd:oBar:aControls[ 8 ]:Hide(), ;
o:oWnd:oBar:Del( Len( o:oWnd:oBar:aControls )) } ;
)
*/
// Otro modelo
XBROWSER "CUSTOMER" TITLE "Prueba" SETUP ;
( oBrw:bInit := {| o | ;
o:oWnd:oBar:aControls[ 8 ]:lGroup := .F., ;
o:oWnd:oBar:aControls[ 5 ]:Hide(), ;
o:oWnd:oBar:aControls[ 6 ]:Hide(), ;
o:oWnd:oBar:aControls[ 7 ]:Hide(), ;
o:oWnd:oBar:aControls[ 8 ]:Hide(), ;
o:oWnd:oBar:aControls[ 9 ]:Move( 0, o:oWnd:oBar:nWidth() -35 ) } ; // aqui
)
RETURN NIL
// FIN / END - kapiabafwh@gmail.com
Code: Select all | Expand
// C:\FWH\SAMPLES\MURUGOS.PRG - Version 2.
#include "FiveWin.ch"
REQUEST DBFCDX
FUNCTION Main()
LOCAL i
rddSetDefault( "DBFCDX" )
SET DATE FRENCH
SET CENTURY ON
SET EPOCH TO Year( Date() ) - 40
USE ..\SAMPLES\CUSTOMER NEW SHARED
GO TOP
/*
XBROWSER "CUSTOMER" TITLE "Prueba" SETUP ;
( oBrw:bInit := {| o | ;
o:oWnd:oBar:aControls[ 8 ]:lGroup := .F., ;
o:oWnd:oBar:aControls[ 5 ]:Hide(), ;
o:oWnd:oBar:aControls[ 6 ]:Hide(), ;
o:oWnd:oBar:aControls[ 7 ]:Hide(), ;
o:oWnd:oBar:aControls[ 8 ]:Hide(), ;
o:oWnd:oBar:Del( Len( o:oWnd:oBar:aControls )) } ;
)
*/
// Otro modelo
XBROWSER "CUSTOMER" TITLE "Prueba" SETUP ;
( oBrw:bInit := {| o | ;
o:oWnd:oBar:aControls[ 8 ]:lGroup := .F., ;
o:oWnd:oBar:aControls[ 5 ]:Hide(), ;
o:oWnd:oBar:aControls[ 6 ]:Hide(), ;
o:oWnd:oBar:aControls[ 7 ]:Hide(), ;
o:oWnd:oBar:aControls[ 8 ]:Hide(), ;
o:oWnd:oBar:aControls[ 9 ]:Move( 0, o:oWnd:oBar:nWidth() -35 ) } ; // aqui
)
RETURN NIL
// FIN / END - kapiabafwh@gmail.com
Code: Select all | Expand
#include "fivewin.ch"
FUNCTION Main()
LOCAL i
REQUEST DBFCDX
RddSetDefault( "DBFCDX" )
set DATE FRENCH
SET CENTURY ON
SET EPOCH TO Year( Date() ) - 40
USE d:\fwh\fwhteam\samples\customer NEW SHARED
XBROWSER "customer" TITLE "Prueba" SETUP ;
( oBrw:oWnd:bInit := { | o | ;
o:oBar:l2013 := .T., ;
o:oBar:l2010 := .F., ;
o:oBar:l2015 := .F., ;
o:oBar:aControls[ 5 ]:cTooltip := o:oBar:aControls[ 9 ]:cToolTip, ;
o:oBar:aControls[ 5 ]:bAction := o:oBar:aControls[ 9 ]:bAction, ;
o:oBar:aControls[ 5 ]:LoadBitmaps( FWBitmap( "Excel" ) ), ;
AEval( o:oBar:aControls, { | oBtt | oBtt:End() }, 6, 9 ), ;
ASize( o:oBar:aControls, 5 ), ;
AEval( o:oBar:aControls, { | oBtt | oBtt:Refresh() } ), ;
o:oBar:SetGradients(), ;
o:oBar:Refresh() ;
} )
RETURN nil
Code: Select all | Expand
#include "fivewin.ch"
FUNCTION Main()
LOCAL i
REQUEST DBFCDX
RddSetDefault( "DBFCDX" )
set DATE FRENCH
SET CENTURY ON
SET EPOCH TO Year( Date() ) - 40
USE d:\fwh\fwhteam\samples\customer NEW SHARED
XBROWSER "customer" TITLE "Prueba" SETUP ;
( oBrw:oWnd:bInit := { | o | ;
o:oBar:l2013 := .T., ;
o:oBar:l2010 := .F., ;
o:oBar:l2015 := .F., ;
o:oBar:aControls[ 5 ]:cTooltip := o:oBar:aControls[ 9 ]:cToolTip, ;
o:oBar:aControls[ 5 ]:bAction := o:oBar:aControls[ 9 ]:bAction, ;
o:oBar:aControls[ 5 ]:LoadBitmaps( FWBitmap( "Excel" ) ), ;
AEval( o:oBar:aControls, { | oBtt | oBtt:End() }, 6, 9 ), ;
ASize( o:oBar:aControls, 5 ), ;
AEval( o:oBar:aControls, { | oBtt | oBtt:Refresh() } ), ;
o:oBar:SetGradients(), ;
o:oBar:Refresh() ;
} )
RETURN nil
Code: Select all | Expand
// C:\FWH\SAMPLES\MURUGOS2.PRG
#Include "FiveWin.ch"
FUNCTION Main()
LOCAL i
REQUEST DBFCDX
rddSetDefault( "DBFCDX" )
SET DATE FRENCH
SET CENTURY ON
SET EPOCH TO Year( Date() ) - 40
USE ..\SAMPLES\CUSTOMER NEW SHARED
XBROWSER "CUSTOMER" TITLE "Prueba" SETUP ;
( oBrw:oWnd:bInit := {| o | ;
o:oBar:l2007 := .T., ;
o:oBar:l2013 := .F., ;
o:oBar:l2010 := .F., ;
o:oBar:l2015 := .F., ;
o:oBar:aControls[ 6 ]:Hide(), ;
o:oBar:aControls[ 7 ]:Hide(), ;
o:oBar:aControls[ 8 ]:Hide(), ;
o:oBar:aControls[ 9 ]:Hide(), ;
o:oBar:aControls[ 5 ]:cTooltip := o:oBar:aControls[ 9 ]:cToolTip, ;
o:oBar:aControls[ 5 ]:bAction := o:oBar:aControls[ 9 ]:bAction, ;
o:oBar:aControls[ 5 ]:LoadBitmaps( FWBitmap( "Excel" ) ), ;
AEval( o:oBar:aControls, {| oBtt | oBtt:End() }, 6, 9 ), ;
ASize( o:oBar:aControls, 5 ), ;
AEval( o:oBar:aControls, {| oBtt | oBtt:Refresh() } ), ;
o:oBar:SetGradients(), ;
o:oBar:Refresh() ;
} )
RETURN NIL
// FIN / END
Code: Select all | Expand
// C:\FWH\SAMPLES\MURUGOS2.PRG
#Include "FiveWin.ch"
FUNCTION Main()
LOCAL i
REQUEST DBFCDX
rddSetDefault( "DBFCDX" )
SET DATE FRENCH
SET CENTURY ON
SET EPOCH TO Year( Date() ) - 40
USE ..\SAMPLES\CUSTOMER NEW SHARED
XBROWSER "CUSTOMER" TITLE "Prueba" SETUP ;
( oBrw:oWnd:bInit := {| o | ;
o:oBar:l2007 := .T., ;
o:oBar:l2013 := .F., ;
o:oBar:l2010 := .F., ;
o:oBar:l2015 := .F., ;
o:oBar:aControls[ 6 ]:Hide(), ;
o:oBar:aControls[ 7 ]:Hide(), ;
o:oBar:aControls[ 8 ]:Hide(), ;
o:oBar:aControls[ 9 ]:Hide(), ;
o:oBar:aControls[ 5 ]:cTooltip := o:oBar:aControls[ 9 ]:cToolTip, ;
o:oBar:aControls[ 5 ]:bAction := o:oBar:aControls[ 9 ]:bAction, ;
o:oBar:aControls[ 5 ]:LoadBitmaps( FWBitmap( "Excel" ) ), ;
AEval( o:oBar:aControls, {| oBtt | oBtt:End() }, 6, 9 ), ;
ASize( o:oBar:aControls, 5 ), ;
AEval( o:oBar:aControls, {| oBtt | oBtt:Refresh() } ), ;
o:oBar:SetGradients(), ;
o:oBar:Refresh() ;
} )
RETURN NIL
// FIN / END
Code: Select all | Expand
#include "fivewin.ch"
FUNCTION Main()
LOCAL i
REQUEST DBFCDX
RddSetDefault( "DBFCDX" )
set DATE FRENCH
SET CENTURY ON
SET EPOCH TO Year( Date() ) - 40
USE c:\fwh\amples\customer NEW SHARED
XBROWSER "customer" TITLE "Prueba" SETUP ;
( oBrw:oWnd:bInit := { | o | ;
o:oBar:l2013 := .T., ;
o:oBar:l2010 := .F., ;
o:oBar:l2015 := .F., ;
o:oBar:aControls[ 5 ]:cTooltip := o:oBar:aControls[ 9 ]:cToolTip, ;
o:oBar:aControls[ 5 ]:bAction := o:oBar:aControls[ 9 ]:bAction, ;
o:oBar:aControls[ 5 ]:LoadBitmaps( FWBitmap( "Excel" ) ), ;
o:oBar:aControls[ 6 ]:cTooltip := "Exit", ;
o:oBar:aControls[ 6 ]:bAction := { | oBtt | oBtt:oWnd:oWnd:End() }, ;
o:oBar:aControls[ 6 ]:LoadBitmaps( FWBitmap( "exit2" ) ), ; // close16
o:oBar:aControls[ 6 ]:lRight := .T., ;
AEval( o:oBar:aControls, { | oBtt | oBtt:End() }, 7, 9 ), ;
ASize( o:oBar:aControls, 6 ), ;
AEval( o:oBar:aControls, { | oBtt | oBtt:Refresh() } ), ;
o:oBar:SetGradients(), ;
o:oBar:Refresh() ;
} )
RETURN nil
Code: Select all | Expand
#include "fivewin.ch"
FUNCTION Main()
LOCAL i
REQUEST DBFCDX
RddSetDefault( "DBFCDX" )
set DATE FRENCH
SET CENTURY ON
SET EPOCH TO Year( Date() ) - 40
USE c:\fwh\amples\customer NEW SHARED
XBROWSER "customer" TITLE "Prueba" SETUP ;
( oBrw:oWnd:bInit := { | o | ;
o:oBar:l2013 := .T., ;
o:oBar:l2010 := .F., ;
o:oBar:l2015 := .F., ;
o:oBar:aControls[ 5 ]:cTooltip := o:oBar:aControls[ 9 ]:cToolTip, ;
o:oBar:aControls[ 5 ]:bAction := o:oBar:aControls[ 9 ]:bAction, ;
o:oBar:aControls[ 5 ]:LoadBitmaps( FWBitmap( "Excel" ) ), ;
o:oBar:aControls[ 6 ]:cTooltip := "Exit", ;
o:oBar:aControls[ 6 ]:bAction := { | oBtt | oBtt:oWnd:oWnd:End() }, ;
o:oBar:aControls[ 6 ]:LoadBitmaps( FWBitmap( "exit2" ) ), ; // close16
o:oBar:aControls[ 6 ]:lRight := .T., ;
AEval( o:oBar:aControls, { | oBtt | oBtt:End() }, 7, 9 ), ;
ASize( o:oBar:aControls, 6 ), ;
AEval( o:oBar:aControls, { | oBtt | oBtt:Refresh() } ), ;
o:oBar:SetGradients(), ;
o:oBar:Refresh() ;
} )
RETURN nil
La instalación es sencilla:ruben Dario wrote:Saludos al forum,
Lo descargue el me genera un error que no esta el archivo .fvl . este archivo lo crea el sistema o falta, xq no lo crea
La instalación es sencilla:ruben Dario wrote:Saludos al forum,
Lo descargue el me genera un error que no esta el archivo .fvl . este archivo lo crea el sistema o falta, xq no lo crea
]]>cnavarro wrote: Sun Feb 12, 2023 3:37 am Hola Leandro
Actualiza a la última versión de FivEdit
https://bitbucket.org/fivetech/fivewin- ... ivedit.exe ( 31/01/2023 )
Prueba a descomprimir este fichero en la carpeta de instalación de FivEdit y me dices si se solucionó el problema
https://bitbucket.org/fivetech/fivewin- ... E_DLLS.zip
]]>cnavarro wrote: Sun Feb 12, 2023 3:37 am Hola Leandro
Actualiza a la última versión de FivEdit
https://bitbucket.org/fivetech/fivewin- ... ivedit.exe ( 31/01/2023 )
Prueba a descomprimir este fichero en la carpeta de instalación de FivEdit y me dices si se solucionó el problema
https://bitbucket.org/fivetech/fivewin- ... E_DLLS.zip
Code: Select all | Expand
// PARA DESLIGAR O OUTLOOK, SE ESTIVER ABERTO AINDA. Joao
WaitRun( "CMD /C TASKKILL.EXE /IM OutLook.exe /F", 0 )
Code: Select all | Expand
// PARA DESLIGAR O OUTLOOK, SE ESTIVER ABERTO AINDA. Joao
WaitRun( "CMD /C TASKKILL.EXE /IM OutLook.exe /F", 0 )
Code: Select all | Expand
// Método para verificar si Outlook está abierto
FUNCTION IsOutlookRunning()
LOCAL hWnd
// Buscar la ventana de Outlook
hWnd := FindWindow("OlMainFrame", NIL)
RETURN hWnd != 0
Code: Select all | Expand
FUNCTION CheckOutlookProcess()
LOCAL aProcessList, lOutlookRunning := .F.
LOCAL i
// Obtener lista de procesos
aProcessList := GetProcessList()
// Recorrer procesos buscando Outlook
FOR i := 1 TO LEN(aProcessList)
IF UPPER(aProcessList[i]) == "OUTLOOK.EXE"
lOutlookRunning := .T.
EXIT
ENDIF
NEXT
RETURN lOutlookRunning
Code: Select all | Expand
FUNCTION CheckOutlookProcess()
LOCAL aProcessList, lOutlookRunning := .F.
LOCAL i
// Obtener lista de procesos
aProcessList := GetProcessList()
// Recorrer procesos buscando Outlook
FOR i := 1 TO LEN(aProcessList)
IF UPPER(aProcessList[i]) == "OUTLOOK.EXE"
lOutlookRunning := .T.
EXIT
ENDIF
NEXT
RETURN lOutlookRunning
Code: Select all | Expand
// Método para verificar si Outlook está abierto
FUNCTION IsOutlookRunning()
LOCAL hWnd
// Buscar la ventana de Outlook
hWnd := FindWindow("OlMainFrame", NIL)
RETURN hWnd != 0
Code: Select all | Expand
FUNCTION CheckOutlookProcess()
LOCAL aProcessList, lOutlookRunning := .F.
LOCAL i
// Obtener lista de procesos
aProcessList := GetProcessList()
// Recorrer procesos buscando Outlook
FOR i := 1 TO LEN(aProcessList)
IF UPPER(aProcessList[i]) == "OUTLOOK.EXE"
lOutlookRunning := .T.
EXIT
ENDIF
NEXT
RETURN lOutlookRunning
Code: Select all | Expand
FUNCTION CheckOutlookProcess()
LOCAL aProcessList, lOutlookRunning := .F.
LOCAL i
// Obtener lista de procesos
aProcessList := GetProcessList()
// Recorrer procesos buscando Outlook
FOR i := 1 TO LEN(aProcessList)
IF UPPER(aProcessList[i]) == "OUTLOOK.EXE"
lOutlookRunning := .T.
EXIT
ENDIF
NEXT
RETURN lOutlookRunning
Code: Select all | Expand
// Método para verificar si Outlook está abierto
FUNCTION IsOutlookRunning()
LOCAL hWnd
// Buscar la ventana de Outlook
hWnd := FindWindow("OlMainFrame", NIL)
RETURN hWnd != 0
Code: Select all | Expand
// Método para verificar si Outlook está abierto
FUNCTION IsOutlookRunning()
LOCAL hWnd
// Buscar la ventana de Outlook
hWnd := FindWindow("OlMainFrame", NIL)
RETURN hWnd != 0
Code: Select all | Expand
Error: Unresolved external '_HB_FUN_GETPROCESSLIST' referenced from C:\ACBRREAL\
ACBRREAL.OBJ
Code: Select all | Expand
Error: Unresolved external '_HB_FUN_GETPROCESSLIST' referenced from C:\ACBRREAL\
ACBRREAL.OBJ
Code: Select all | Expand
/*
* Verificar se um Exe esta sendo executado e podendo at‚ derruba-lo
* Parametros: _cExe, _nKill
* Retorno: Retorno - .t. se estiver rodando
*
* Autor: toya
*/
#include "FiveWin.ch"
FUNCTION Main()
LOCAL _cExe := "OutLook.exe", _nKill := 2, lOk
lOk := EstaRodandoKillExe( _cExe, _nKill )
? lOk
RETURN NIL
// Is the executable running?
FUNCTION EstaRodandoKillExe( _cExe, _nKill )
LOCAL Retorno := .F.
LOCAL oScriptObj
LOCAL oWmiService
LOCAL oListaProcess
LOCAL oProcessos
hb_default( @_nKill, 0 )
oScriptObj := CREATEOBJECT( "wbemScripting.SwbemLocator" )
oWmiService := oScriptObj:ConnectServer()
oListaProcess := oWmiService:ExecQuery( "select * from Win32_Process where Name='" + _cExe + "'" )
FOR EACH oProcessos in oListaProcess
Retorno := .T.
IF _nKill == 2
oProcessos:Terminate() // mata o _cEXE
ENDIF
NEXT
RETURN( Retorno )
FUNCTION hb_default( xVar, xValue ) // Only xHarbour
IF ValType( xVar ) != ValType( xValue )
xVar := xValue
ENDIF
RETURN NIL
// FIN / END - kapiabafwh@gmail.com
Code: Select all | Expand
/*
* Verificar se um Exe esta sendo executado e podendo at‚ derruba-lo
* Parametros: _cExe, _nKill
* Retorno: Retorno - .t. se estiver rodando
*
* Autor: toya
*/
#include "FiveWin.ch"
FUNCTION Main()
LOCAL _cExe := "OutLook.exe", _nKill := 2, lOk
lOk := EstaRodandoKillExe( _cExe, _nKill )
? lOk
RETURN NIL
// Is the executable running?
FUNCTION EstaRodandoKillExe( _cExe, _nKill )
LOCAL Retorno := .F.
LOCAL oScriptObj
LOCAL oWmiService
LOCAL oListaProcess
LOCAL oProcessos
hb_default( @_nKill, 0 )
oScriptObj := CREATEOBJECT( "wbemScripting.SwbemLocator" )
oWmiService := oScriptObj:ConnectServer()
oListaProcess := oWmiService:ExecQuery( "select * from Win32_Process where Name='" + _cExe + "'" )
FOR EACH oProcessos in oListaProcess
Retorno := .T.
IF _nKill == 2
oProcessos:Terminate() // mata o _cEXE
ENDIF
NEXT
RETURN( Retorno )
FUNCTION hb_default( xVar, xValue ) // Only xHarbour
IF ValType( xVar ) != ValType( xValue )
xVar := xValue
ENDIF
RETURN NIL
// FIN / END - kapiabafwh@gmail.com
Code: Select all | Expand
winges25.prg => EXPOR( 286 )
Code: Select all | Expand
winges25.prg => EXPOR( 286 )
Code: Select all | Expand
// C:\FWH\SAMPLES\EXCELDBF.PRG
#include "FiveWin.ch"
FUNCTION Main()
LOCAL Archivo1, Archivo2
LOCAL _cExe := "Excel.exe", _nKill := 2, lOk
lOk := EstaRodandoKillExe( _cExe, _nKill )
IF( lOk )
// NADA A FAZER
ELSE // FORCA SE NAO FUNCIONAR
WaitRun( "CMD /C TASKKILL.EXE /IM Excel.exe /F", 0 )
ENDIF
Archivo1 := "C:\TMP\CUSTOMER.DBF"
XLS2DBF( Archivo1 )
RETURN NIL
FUNCTION XLS2DBF( cDbfName )
// Purpose: convert an Excel spreadsheet to a dBase III+ table
// but does not leave Excel open
LOCAL oExcel
LOCAL oWorkBook, oSheet, oError
TRY
oExcel := TOleAuto():New( "Excel.Application" )
CATCH
TRY
oExcel := CreateObject( "Excel.Application" )
CATCH oError
Alert( "ERROR! Excel not avialable. [" + Ole2TxtError()+ "]" + oError:description )
RETURN NIL
END
END
oWorkbook = oExcel:WorkBooks:Open( cDbfName )
oSheet = oExcel:ActiveSheet
oSheet:SaveAs( "C:\TMP\CUSTOMER.CSV", 6 ) // Segundo parâmetro informa o tipo de saída
oSheet:SaveAs( "C:\TMP\CUSTOMER.XLS", 56 ) // Segundo parâmetro informa o tipo de saída
oWorkBook:Close( .F. )
oExcel:Quit()
oSheet := NIL
oWorkBook := NIL
oExcel := NIL
RETURN NIL
/*
* Verificar se um Exe est sendo executado e podendo at‚ derruba-lo
* Parametros: _cExe, _nKill
* Retorno: Retorno - .t. se estiver rodando
*
* Autor: toya
*/
// Is the executable running? - 27/03/2025 - Thanks: Alessandro/Toya.
FUNCTION EstaRodandoKillExe( _cExe, _nKill )
LOCAL Retorno := .F.
LOCAL oScriptObj
LOCAL oWmiService
LOCAL oListaProcess
LOCAL oProcessos
hb_default( @_nKill, 0 )
oScriptObj := CREATEOBJECT( "wbemScripting.SwbemLocator" )
oWmiService := oScriptObj:ConnectServer()
oListaProcess := oWmiService:ExecQuery( "select * from Win32_Process where Name='" + _cExe + "'" )
FOR EACH oProcessos in oListaProcess
Retorno := .T.
IF _nKill == 2
oProcessos:Terminate() // mata o _cEXE
ENDIF
NEXT
RETURN( Retorno )
FUNCTION hb_default( xVar, xValue ) // Only xHarbour
IF ValType( xVar ) != ValType( xValue )
xVar := xValue
ENDIF
RETURN NIL
// FIN / END - kapiabafwh@gmail.com
Code: Select all | Expand
// C:\FWH\SAMPLES\EXCELDBF.PRG
#include "FiveWin.ch"
FUNCTION Main()
LOCAL Archivo1, Archivo2
LOCAL _cExe := "Excel.exe", _nKill := 2, lOk
lOk := EstaRodandoKillExe( _cExe, _nKill )
IF( lOk )
// NADA A FAZER
ELSE // FORCA SE NAO FUNCIONAR
WaitRun( "CMD /C TASKKILL.EXE /IM Excel.exe /F", 0 )
ENDIF
Archivo1 := "C:\TMP\CUSTOMER.DBF"
XLS2DBF( Archivo1 )
RETURN NIL
FUNCTION XLS2DBF( cDbfName )
// Purpose: convert an Excel spreadsheet to a dBase III+ table
// but does not leave Excel open
LOCAL oExcel
LOCAL oWorkBook, oSheet, oError
TRY
oExcel := TOleAuto():New( "Excel.Application" )
CATCH
TRY
oExcel := CreateObject( "Excel.Application" )
CATCH oError
Alert( "ERROR! Excel not avialable. [" + Ole2TxtError()+ "]" + oError:description )
RETURN NIL
END
END
oWorkbook = oExcel:WorkBooks:Open( cDbfName )
oSheet = oExcel:ActiveSheet
oSheet:SaveAs( "C:\TMP\CUSTOMER.CSV", 6 ) // Segundo parâmetro informa o tipo de saída
oSheet:SaveAs( "C:\TMP\CUSTOMER.XLS", 56 ) // Segundo parâmetro informa o tipo de saída
oWorkBook:Close( .F. )
oExcel:Quit()
oSheet := NIL
oWorkBook := NIL
oExcel := NIL
RETURN NIL
/*
* Verificar se um Exe est sendo executado e podendo at‚ derruba-lo
* Parametros: _cExe, _nKill
* Retorno: Retorno - .t. se estiver rodando
*
* Autor: toya
*/
// Is the executable running? - 27/03/2025 - Thanks: Alessandro/Toya.
FUNCTION EstaRodandoKillExe( _cExe, _nKill )
LOCAL Retorno := .F.
LOCAL oScriptObj
LOCAL oWmiService
LOCAL oListaProcess
LOCAL oProcessos
hb_default( @_nKill, 0 )
oScriptObj := CREATEOBJECT( "wbemScripting.SwbemLocator" )
oWmiService := oScriptObj:ConnectServer()
oListaProcess := oWmiService:ExecQuery( "select * from Win32_Process where Name='" + _cExe + "'" )
FOR EACH oProcessos in oListaProcess
Retorno := .T.
IF _nKill == 2
oProcessos:Terminate() // mata o _cEXE
ENDIF
NEXT
RETURN( Retorno )
FUNCTION hb_default( xVar, xValue ) // Only xHarbour
IF ValType( xVar ) != ValType( xValue )
xVar := xValue
ENDIF
RETURN NIL
// FIN / END - kapiabafwh@gmail.com
Code: Select all | Expand
/*
* TExcelScript():New()
*/
METHOD New() CLASS TExcelScript
/*
::oExcel := TOleAuto():New("Excel.Application")
::aExcelCols := {}
::oClip:=TClipBoard():New()
::oClip:Clear()
*/
IF ( ::oExcel := win_oleCreateObject( "Excel.Application" ) ) != NIL
::lOk := .T.
ELSE
ALERT( "Error: MS Excel not available. [" + win_oleErrorText()+ "]" )
ENDIF
RETURN( Self )
]]>jbrita wrote: Thu Mar 27, 2025 1:24 pm Hola colegas
necesito de su ayuda, genero un informe por excel 2007 y funciona bien, luego en otro computador hay un excel plus 2019 y se cae, este es error
Error occurred at: 27-03-2025, 09:52:23
Error description: Error excel.application:WORKBOOKS:ADD:WORKSHEETS/3 DISP_E_MEMBERNOTFOUND: _NAME
Args:
[ 1] = C
Stack Calls
===========
Called from: => TOLEAUTO:_NAME( 0 )
Called from: C:\SYSTEMA\BUS\PRG\winges25.prg => EXPOR( 286 )
Called from: C:\SYSTEMA\BUS\PRG\winges25.prg => (b)EXPORTARTODOS( 193 )
Called from: C:\SYSTEMA\BUS\PRG\msgrun.prg => (b)MSGRUN( 39 )
Called from: .\source\classes\DIALOG.PRG => (b)TDIALOG:TDIALOG( 87 )
alguna ayuda
Saludos
Code: Select all | Expand
/*
* TExcelScript():New()
*/
METHOD New() CLASS TExcelScript
/*
::oExcel := TOleAuto():New("Excel.Application")
::aExcelCols := {}
::oClip:=TClipBoard():New()
::oClip:Clear()
*/
IF ( ::oExcel := win_oleCreateObject( "Excel.Application" ) ) != NIL
::lOk := .T.
ELSE
ALERT( "Error: MS Excel not available. [" + win_oleErrorText()+ "]" )
ENDIF
RETURN( Self )
]]>jbrita wrote: Thu Mar 27, 2025 1:24 pm Hola colegas
necesito de su ayuda, genero un informe por excel 2007 y funciona bien, luego en otro computador hay un excel plus 2019 y se cae, este es error
Error occurred at: 27-03-2025, 09:52:23
Error description: Error excel.application:WORKBOOKS:ADD:WORKSHEETS/3 DISP_E_MEMBERNOTFOUND: _NAME
Args:
[ 1] = C
Stack Calls
===========
Called from: => TOLEAUTO:_NAME( 0 )
Called from: C:\SYSTEMA\BUS\PRG\winges25.prg => EXPOR( 286 )
Called from: C:\SYSTEMA\BUS\PRG\winges25.prg => (b)EXPORTARTODOS( 193 )
Called from: C:\SYSTEMA\BUS\PRG\msgrun.prg => (b)MSGRUN( 39 )
Called from: .\source\classes\DIALOG.PRG => (b)TDIALOG:TDIALOG( 87 )
alguna ayuda
Saludos
Code: Select all | Expand
/*
* TExcelScript():HowSheet()
*/
METHOD HowSheet() CLASS TExcelScript
LOCAL nSheets := ::oExcel:Sheets:Count()
LOCAL i
::aSheets := {}
FOR i := 1 TO nSheets
aadd( ::aSheets , ::oExcel:Sheets:Item( i ):Name )
NEXT
RETURN ( Nil )
METHOD NameSheet(cSheet,cName) INLINE ::oExcel:Sheets(cSheet):Name := cName
]]>jbrita wrote: Thu Mar 27, 2025 2:42 pm esa es la linea
oSheet:name:=AllTrim(cConvenio:HojaExcel) //286
saludos
Code: Select all | Expand
/*
* TExcelScript():HowSheet()
*/
METHOD HowSheet() CLASS TExcelScript
LOCAL nSheets := ::oExcel:Sheets:Count()
LOCAL i
::aSheets := {}
FOR i := 1 TO nSheets
aadd( ::aSheets , ::oExcel:Sheets:Item( i ):Name )
NEXT
RETURN ( Nil )
METHOD NameSheet(cSheet,cName) INLINE ::oExcel:Sheets(cSheet):Name := cName
]]>jbrita wrote: Thu Mar 27, 2025 2:42 pm esa es la linea
oSheet:name:=AllTrim(cConvenio:HojaExcel) //286
saludos
Code: Select all | Expand
#include "FiveWin.ch"
FUNCTION Main()
MYRUN( "/N Regsvr32 /s BARCODE.OCX" ) // TU .OCX
// O,
// Regsvr32 /s BARCODE.OCX
RETURN NIL
FUNCTION MYRUN( cComando )
LOCAL oShell, RET, lOk:=.T.
TRY
#IFDEF __XHARBOUR__
oShell := CreateObject( "WScript.Shell" )
#ELSE
oShell := Win_OleCreateObject( "WScript.Shell" )
#ENDIF
CATCH
TRY
#IFDEF __XHARBOUR__
oShell := CreateObject( "WScript.Shell" )
#ELSE
oShell := Win_OleCreateObject( "WScript.Shell" )
#ENDIF
CATCH
lOk:=.F.
END
END
IF lOk
TRY
//.F. = Nao espera a aplicacao fechar, .T. espera.
oShell:Run( "%comspec% /c " + cComando, 0, .T. )
CATCH
lOk:=.F.
END
oShell := NIL
ENDIF
//-- RET := oShell:Run( "%comspec% /c " + cComando, 0) //, .T. )
RETURN( lOk )
// FIN / END
/* // OCX.BAT
copy NombreOCX.ocx %SystemRoot%\system32\NombreOCX.ocx
regsvr32.exe /s NombreOCX.o
@echo off
IF EXIST %WinDir%\system\barcode.ocx goto ERRO
:MAIN
cls
echo Voce vai instalar barcode.ocx em seu sistema.
echo.
echo ATENÇÃO:
echo
echo
echo Pressione Ctrl+C para Cancelar, Enter para continuar
pause > Nul
echo.
echo Copiando arquivo...
copy barcode.ocx %WinDir%\system
echo.
echo Registrando arquivo...
cd %WinDir%\system
regsvr32/s barcode.ocx
echo.
echo barcode.ocx foi instalado no seu computador!
echo.
echo Agora, abra o access e veja em ActiveX Controles
goto END
:ERRO
echo.
echo.
echo.
echo barcode.ocx , ja encontra-se instalado no seu computador.
echo.
goto END
:END
*/
Regards, saludos]]>Code: Select all | Expand
#include "FiveWin.ch"
FUNCTION Main()
MYRUN( "/N Regsvr32 /s BARCODE.OCX" ) // TU .OCX
// O,
// Regsvr32 /s BARCODE.OCX
RETURN NIL
FUNCTION MYRUN( cComando )
LOCAL oShell, RET, lOk:=.T.
TRY
#IFDEF __XHARBOUR__
oShell := CreateObject( "WScript.Shell" )
#ELSE
oShell := Win_OleCreateObject( "WScript.Shell" )
#ENDIF
CATCH
TRY
#IFDEF __XHARBOUR__
oShell := CreateObject( "WScript.Shell" )
#ELSE
oShell := Win_OleCreateObject( "WScript.Shell" )
#ENDIF
CATCH
lOk:=.F.
END
END
IF lOk
TRY
//.F. = Nao espera a aplicacao fechar, .T. espera.
oShell:Run( "%comspec% /c " + cComando, 0, .T. )
CATCH
lOk:=.F.
END
oShell := NIL
ENDIF
//-- RET := oShell:Run( "%comspec% /c " + cComando, 0) //, .T. )
RETURN( lOk )
// FIN / END
/* // OCX.BAT
copy NombreOCX.ocx %SystemRoot%\system32\NombreOCX.ocx
regsvr32.exe /s NombreOCX.o
@echo off
IF EXIST %WinDir%\system\barcode.ocx goto ERRO
:MAIN
cls
echo Voce vai instalar barcode.ocx em seu sistema.
echo.
echo ATENÇÃO:
echo
echo
echo Pressione Ctrl+C para Cancelar, Enter para continuar
pause > Nul
echo.
echo Copiando arquivo...
copy barcode.ocx %WinDir%\system
echo.
echo Registrando arquivo...
cd %WinDir%\system
regsvr32/s barcode.ocx
echo.
echo barcode.ocx foi instalado no seu computador!
echo.
echo Agora, abra o access e veja em ActiveX Controles
goto END
:ERRO
echo.
echo.
echo.
echo barcode.ocx , ja encontra-se instalado no seu computador.
echo.
goto END
:END
*/
Regards, saludos]]>Code: Select all | Expand
local hBorland := LoadLibrary( "BWCC.dll" )
SET RESOURCES TO "autolay.dll" // Personal DLL
Code: Select all | Expand
local hBorland := LoadLibrary( "BWCC.dll" )
SET RESOURCES TO "autolay.dll" // Personal DLL
Code: Select all | Expand
CallDll32( "OpenComFiscal" , "WINFIS32.DLL" , nPort , 1 )
Code: Select all | Expand
CallDll32( "OpenComFiscal" , "WINFIS32.DLL" , nPort , 1 )
Code: Select all | Expand
// C:\FWH\SAMPLES\OSCARXLS.PRG
#include 'FiveWin.ch'
#include 'xBrowse.ch'
FUNCTION Main()
LOCAL oWnd, oBar, oBrw, nTotal := 0
/*
A. American format: "999,999,999.99"
E. European format: "999.999.999,99"
I. Indian format: "99,99,999.99"
*/
FwNumFormat( 'E', .T. ) // European Format
IF FILE( "TESTXLS.DBF" )
DELETEFILE( "TESTXLS.DBF" )
ENDIF
dbCreate( "TESTXLS", { { "DESCRIP", "C", 010, 000 }, ;
{ "VALOR1 ", "N", 010, 001 }, ;
{ "VALOR2 ", "N", 010, 002 }, ;
{ "VALOR3 ", "N", 010, 003 }, ;
{ "VALOR4 ", "N", 010, 004 }, ;
{ "VALOR5 ", "N", 010, 005 } } )
USE TESTXLS NEW ALIAS TESTXLS
GO TOP
FOR nTotal = 1 TO 33
APPEND BLANK
REPLACE DESCRIP WITH "Linea " + StrZero( nTotal, 2 )
REPLACE VALOR1 WITH 99999 * nTotal / 777
REPLACE VALOR2 WITH 99999 * nTotal / 777
REPLACE VALOR3 WITH 99999 * nTotal / 777
REPLACE VALOR4 WITH 99999 * nTotal / 777
REPLACE VALOR5 WITH 99999 * nTotal / 777
COMMIT
NEXT
GO TOP
DEFINE WINDOW oWnd
DEFINE BUTTONBAR oBar OF oWnd SIZE 80, 32 2007
DEFINE BUTTON OF oBar PROMPT 'Para &Excel' ;
ACTION MsgMeter( {| oMeter, oText, oDlg, lEnd | ;
Export2Excel( oBrw, oMeter, oText, oDlg, @lEnd ) } )
DEFINE BUTTON OF oBar PROMPT '&Salida' ACTION( WndMain():End() )
SET MESSAGE OF oWnd TO '' 2007
@ 0, 0 XBROWSE oBrw OF oWnd ALIAS 'TESTXLS' AUTOCOLS CELL LINES
oBrw:aCols[ 2 ]:bFooter = {|| Transform( Field->VALOR1, "@E 9.999.999,99" ) }
oBrw:aCols[ 3 ]:bFooter = {|| Transform( Field->VALOR2, "@E 9.999.999,99" ) }
oBrw:aCols[ 4 ]:bFooter = {|| Transform( Field->VALOR3, "@E 9.999.999,99" ) }
oBrw:aCols[ 5 ]:bFooter = {|| Transform( Field->VALOR4, "@E 9.999.999,99" ) }
oBrw:aCols[ 6 ]:bFooter = {|| Transform( Field->VALOR5, "@E 9.999.999,99" ) }
oBrw:MakeTotals()
oBrw:refresh()
oBrw:CreateFromCode()
oWnd:oClient := oBrw
ACTIVATE WINDOW oWnd MAXIMIZED
CLOSE DATA
RETURN NIL
STATIC FUNCTION Export2Excel( oBrw, oMeter, oText, oDlg, lEnd )
oBrw:ToExcel( {| n, t | oMeter:nTotal := t, ;
oMeter:Set( n ), ;
oText:SetText( Str( n ) + '/' + Str( t ) ), ;
oDlg:Update(), .T. } )
RETURN NIL
// FIN / END - kapiabafwh@gmail.com
Code: Select all | Expand
// C:\FWH\SAMPLES\OSCARXLS.PRG
#include 'FiveWin.ch'
#include 'xBrowse.ch'
FUNCTION Main()
LOCAL oWnd, oBar, oBrw, nTotal := 0
/*
A. American format: "999,999,999.99"
E. European format: "999.999.999,99"
I. Indian format: "99,99,999.99"
*/
FwNumFormat( 'E', .T. ) // European Format
IF FILE( "TESTXLS.DBF" )
DELETEFILE( "TESTXLS.DBF" )
ENDIF
dbCreate( "TESTXLS", { { "DESCRIP", "C", 010, 000 }, ;
{ "VALOR1 ", "N", 010, 001 }, ;
{ "VALOR2 ", "N", 010, 002 }, ;
{ "VALOR3 ", "N", 010, 003 }, ;
{ "VALOR4 ", "N", 010, 004 }, ;
{ "VALOR5 ", "N", 010, 005 } } )
USE TESTXLS NEW ALIAS TESTXLS
GO TOP
FOR nTotal = 1 TO 33
APPEND BLANK
REPLACE DESCRIP WITH "Linea " + StrZero( nTotal, 2 )
REPLACE VALOR1 WITH 99999 * nTotal / 777
REPLACE VALOR2 WITH 99999 * nTotal / 777
REPLACE VALOR3 WITH 99999 * nTotal / 777
REPLACE VALOR4 WITH 99999 * nTotal / 777
REPLACE VALOR5 WITH 99999 * nTotal / 777
COMMIT
NEXT
GO TOP
DEFINE WINDOW oWnd
DEFINE BUTTONBAR oBar OF oWnd SIZE 80, 32 2007
DEFINE BUTTON OF oBar PROMPT 'Para &Excel' ;
ACTION MsgMeter( {| oMeter, oText, oDlg, lEnd | ;
Export2Excel( oBrw, oMeter, oText, oDlg, @lEnd ) } )
DEFINE BUTTON OF oBar PROMPT '&Salida' ACTION( WndMain():End() )
SET MESSAGE OF oWnd TO '' 2007
@ 0, 0 XBROWSE oBrw OF oWnd ALIAS 'TESTXLS' AUTOCOLS CELL LINES
oBrw:aCols[ 2 ]:bFooter = {|| Transform( Field->VALOR1, "@E 9.999.999,99" ) }
oBrw:aCols[ 3 ]:bFooter = {|| Transform( Field->VALOR2, "@E 9.999.999,99" ) }
oBrw:aCols[ 4 ]:bFooter = {|| Transform( Field->VALOR3, "@E 9.999.999,99" ) }
oBrw:aCols[ 5 ]:bFooter = {|| Transform( Field->VALOR4, "@E 9.999.999,99" ) }
oBrw:aCols[ 6 ]:bFooter = {|| Transform( Field->VALOR5, "@E 9.999.999,99" ) }
oBrw:MakeTotals()
oBrw:refresh()
oBrw:CreateFromCode()
oWnd:oClient := oBrw
ACTIVATE WINDOW oWnd MAXIMIZED
CLOSE DATA
RETURN NIL
STATIC FUNCTION Export2Excel( oBrw, oMeter, oText, oDlg, lEnd )
oBrw:ToExcel( {| n, t | oMeter:nTotal := t, ;
oMeter:Set( n ), ;
oText:SetText( Str( n ) + '/' + Str( t ) ), ;
oDlg:Update(), .T. } )
RETURN NIL
// FIN / END - kapiabafwh@gmail.com
Code: Select all | Expand
local oBrw
local aTitCols
aTitCols := { "Kardex", "Descripcion", "codeArtic", "FechaMov", "Doc", "cantMov", "Razon Social", "Tipo Mov", "Exist", "Exist_K", "Status"}
XBrowser aKardex TITLE "Kardex" ;
Setup ( oBrw:cHeaders := aTitCols)
Code: Select all | Expand
local oBrw
local aTitCols
aTitCols := { "Kardex", "Descripcion", "codeArtic", "FechaMov", "Doc", "cantMov", "Razon Social", "Tipo Mov", "Exist", "Exist_K", "Status"}
XBrowser aKardex TITLE "Kardex" ;
Setup ( oBrw:cHeaders := aTitCols)
Code: Select all | Expand
| ^~~~~~~~
In file included from /usr/include/glib-2.0/glib/galloca.h:34,
from /usr/include/glib-2.0/glib.h:32,
from /usr/include/glib-2.0/gobject/gbinding.h:30:
/usr/include/glib-2.0/glib/gtypes.h:580:8: note: declared here
580 | struct _GTimeVal
| ^~~~~~~~~
source/winapi/printers.c:3:10: fatal error: libgnomeprint/gnome-print.h: No existe el archivo o el directorio
3 | #include <libgnomeprint/gnome-print.h>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile:97: objc/printers.o] Error 1
Code: Select all | Expand
| ^~~~~~~~
In file included from /usr/include/glib-2.0/glib/galloca.h:34,
from /usr/include/glib-2.0/glib.h:32,
from /usr/include/glib-2.0/gobject/gbinding.h:30:
/usr/include/glib-2.0/glib/gtypes.h:580:8: note: declared here
580 | struct _GTimeVal
| ^~~~~~~~~
source/winapi/printers.c:3:10: fatal error: libgnomeprint/gnome-print.h: No existe el archivo o el directorio
3 | #include <libgnomeprint/gnome-print.h>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile:97: objc/printers.o] Error 1
Code: Select all | Expand
┌────────────────────────────────────────────────────────────────────────────┐
│ FiveWin for xHb commercial 25.01 - Jan. 2025 Harbour development power │▄
│ (c) FiveTech 1993-2025 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 │█
└────────────────────────────────────────────────────────────────────────────┘█
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
Compiling...
xHarbour 1.3.2 Intl. (SimpLex) (Build 20250311)
Copyright 1999-2025, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'fivedbu2.prg' and generating preprocessed output to 'fivedbu2.ppo'...
Generating C source output to 'fivedbu2.c'...
Generating object output to 'fivedbu2.obj'...
fivedbu2.prg(3597): warning #2027: Missing prototype for '__get_std_stream'.
fivedbu2.prg(3598): warning #2027: Missing prototype for '_chdir'.
Done.
Lines 3594, Functions/Procedures 83, pCodes 20255
fivedbu2.prg(76) Warning W0001 Ambiguous reference: 'OSCRIPT'
fivedbu2.prg(82) Warning W0001 Ambiguous reference: 'OSCRIPT'
fivedbu2.prg(82) Warning W0001 Ambiguous reference: 'UPAR01'
fivedbu2.prg(82) Warning W0001 Ambiguous reference: 'UPAR02'
fivedbu2.prg(82) Warning W0001 Ambiguous reference: 'UPAR03'
fivedbu2.prg(84) Warning W0001 Ambiguous reference: 'OSCRIPT'
fivedbu2.prg(3593) Warning W0030 STATIC Function 'VIEWCODE2' defined but never used
fivedbu2.prg(3593) Warning W0030 STATIC Function 'BMPASLIST' defined but never used
fivedbu2.prg(3593) Warning W0030 STATIC Function 'CALIGNCONST' defined but never used
fivedbu2.prg(3593) Warning W0030 STATIC Function 'CEDITCONST' defined but never used
fivedbu2.prg(3593) Warning W0030 STATIC Function 'INITCAP' defined but never used
xLINK: warning: Symbol 'c:\fwh\lib\FiveHMX.lib(xbrcode.obj)->_HB_FUN_CFONTCODE previously defined at (fivedbu2.obj)' is multiply defined.
Creating object: fivedbu2.EXP
Creating library: fivedbu2.LIB
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSHBITMAPTOCLIPBOARD referenced from FiveHMX.lib(xbrowse.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_DRAWARROW referenced from FiveHMX.lib(window.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSCAPTURERECTWND referenced from FiveHMX.lib(window.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_DELETEIMAGE referenced from FiveHMX.lib(window.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_FONTSTYLE referenced from FiveHMX.lib(font.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_DELETEBRUSH referenced from FiveHMX.lib(brush.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_COLORBRUSH referenced from FiveHMX.lib(brush.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_IMAGEBRUSH referenced from FiveHMX.lib(brush.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_RATIO referenced from FiveHMX.lib(printer.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_HOLLOWTEXT referenced from FiveHMX.lib(printer.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_FILLRECT referenced from FiveHMX.lib(printer.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_DRAWTEXT referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_SAYIMAGE referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_RINGGRAD referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_CLONEIMAGE referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_GETHBITMAP referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_FROMHBITMAP referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_FROMRESOURCE referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_IMAGEFROMFILE referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_IMAGEFROMSTR referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_IMAGEINFO referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_ZOOM referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_NEWALPHABMP referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_SAVEIMAGE referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMGTOIMG24 referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGECREATETHUMB referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_IMG2BLOB referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_CROP referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_ROTATE referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_DRAWSHAPES referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_GRAD referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_PIE referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGETOCLIPBOARD referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_DRAWIMAGE referenced from FiveHMX.lib(ximage.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPMESURETXT referenced from FiveHMX.lib(menuitem.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSBMPEMPTY referenced from FiveHMX.lib(menuitem.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSNEWGRAPHICSIMG referenced from FiveHMX.lib(menuitem.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDRAWTEXT referenced from FiveHMX.lib(menuitem.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDELETEGRAPHICS referenced from FiveHMX.lib(menuitem.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSHIGHQUALITY referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSNORMALQUALITY referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDRAWLINE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDRAWRECT referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDRAWELLIPSE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDRAWARC referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDRAWPATH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSFILLPATH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSCLEARCOLOR referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSSETSMOOTHINGGRAPHICS referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSGRAPHTRASLATETRANSFORM referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSGRAPHROTATETRANSFORM referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSGRAPHSCALE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSNEWGRAPHICS referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_SETPAGEUNIT2PIXEL referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSNEWGRAPHICSWND referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSGRAPHICSFROMIMG referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDRAWIMAGE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDRAWTEXTFONT referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDRAWTEXTLF referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSISINREGION referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSCREATEREGIONFROMGPATH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDELETEPEN referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPENSETCLR referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSALIGN referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPENSETLINEJOIN referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSNOALIGN referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPENSIZE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSNEWPEN referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPENSTYLE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSNEWSOLIDBRUSH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDELETEBRUSH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSNEWGRADIENTBRUSH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSANGLEGRADIENTBRUSH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSSTARTUP referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSSHUTDOWN referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPATHADDARC referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPATHADDELLIPSE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPATHADDLINE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPATHADDRECTANGLE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPATHCLOSEFIGURE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPATHSTARTFIGURE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSROTATEPATH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSROTATECENTERPATH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSSCALEPATH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSTRANSLATEPATH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSCREATEPATH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPATHADDSTRING referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDELETEPATH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSCREATEIMAGEFROMRES referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEMATRIXTOGRAY referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEPIXGETALPHA referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEPIXGETBLUE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEGETPIXCOLOR referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPIXISCOLOR referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSCREATEHBITMAPIMAGE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEPIXGETGREEN referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSGETHEIGHTBITMAP referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEPIXGETRED referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSGETWIDTHBITMAP referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEIS32BITS referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEROTATEANGLE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGELOADPNGFROMSTR referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEROTATEFLIP referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGESET32BITS referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGESETPIXCOLOR referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEPIXTOGRAYCOLOR referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEMATRIXCUSTOM referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGESETPIXHCOLOR referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPIXELCOLORTOALPHA referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGESCALE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGELOADPNGFROMRESOURCES referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGELOADCACHEDFILE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGESAVEQUALITY referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGESAVE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEDISPOSE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGERESIZE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSEMFTOJPG referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGECROP referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSEMFTOBMP referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSLOADDIRECTIMAGE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMGGETFRAMECOUNT referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMGGETFRAME referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_SetWindowLongPtr referenced from FiveHCM.lib(ffdlgprc.obj)'.
xLINK: fatal error: 123 unresolved external(s).
* Linking executable errors *
C:\fwh\samples>
Code: Select all | Expand
┌────────────────────────────────────────────────────────────────────────────┐
│ FiveWin for xHb commercial 25.01 - Jan. 2025 Harbour development power │▄
│ (c) FiveTech 1993-2025 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 │█
└────────────────────────────────────────────────────────────────────────────┘█
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
Compiling...
xHarbour 1.3.2 Intl. (SimpLex) (Build 20250311)
Copyright 1999-2025, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'fivedbu2.prg' and generating preprocessed output to 'fivedbu2.ppo'...
Generating C source output to 'fivedbu2.c'...
Generating object output to 'fivedbu2.obj'...
fivedbu2.prg(3597): warning #2027: Missing prototype for '__get_std_stream'.
fivedbu2.prg(3598): warning #2027: Missing prototype for '_chdir'.
Done.
Lines 3594, Functions/Procedures 83, pCodes 20255
fivedbu2.prg(76) Warning W0001 Ambiguous reference: 'OSCRIPT'
fivedbu2.prg(82) Warning W0001 Ambiguous reference: 'OSCRIPT'
fivedbu2.prg(82) Warning W0001 Ambiguous reference: 'UPAR01'
fivedbu2.prg(82) Warning W0001 Ambiguous reference: 'UPAR02'
fivedbu2.prg(82) Warning W0001 Ambiguous reference: 'UPAR03'
fivedbu2.prg(84) Warning W0001 Ambiguous reference: 'OSCRIPT'
fivedbu2.prg(3593) Warning W0030 STATIC Function 'VIEWCODE2' defined but never used
fivedbu2.prg(3593) Warning W0030 STATIC Function 'BMPASLIST' defined but never used
fivedbu2.prg(3593) Warning W0030 STATIC Function 'CALIGNCONST' defined but never used
fivedbu2.prg(3593) Warning W0030 STATIC Function 'CEDITCONST' defined but never used
fivedbu2.prg(3593) Warning W0030 STATIC Function 'INITCAP' defined but never used
xLINK: warning: Symbol 'c:\fwh\lib\FiveHMX.lib(xbrcode.obj)->_HB_FUN_CFONTCODE previously defined at (fivedbu2.obj)' is multiply defined.
Creating object: fivedbu2.EXP
Creating library: fivedbu2.LIB
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSHBITMAPTOCLIPBOARD referenced from FiveHMX.lib(xbrowse.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_DRAWARROW referenced from FiveHMX.lib(window.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSCAPTURERECTWND referenced from FiveHMX.lib(window.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_DELETEIMAGE referenced from FiveHMX.lib(window.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_FONTSTYLE referenced from FiveHMX.lib(font.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_DELETEBRUSH referenced from FiveHMX.lib(brush.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_COLORBRUSH referenced from FiveHMX.lib(brush.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_IMAGEBRUSH referenced from FiveHMX.lib(brush.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_RATIO referenced from FiveHMX.lib(printer.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_HOLLOWTEXT referenced from FiveHMX.lib(printer.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_FILLRECT referenced from FiveHMX.lib(printer.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_DRAWTEXT referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_SAYIMAGE referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_RINGGRAD referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_CLONEIMAGE referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_GETHBITMAP referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_FROMHBITMAP referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_FROMRESOURCE referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_IMAGEFROMFILE referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_IMAGEFROMSTR referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_IMAGEINFO referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_ZOOM referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_NEWALPHABMP referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_SAVEIMAGE referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMGTOIMG24 referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGECREATETHUMB referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_IMG2BLOB referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_CROP referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_ROTATE referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_DRAWSHAPES referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_GRAD referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_PIE referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGETOCLIPBOARD referenced from FiveHMX.lib(imgtxtio.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIP_DRAWIMAGE referenced from FiveHMX.lib(ximage.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPMESURETXT referenced from FiveHMX.lib(menuitem.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSBMPEMPTY referenced from FiveHMX.lib(menuitem.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSNEWGRAPHICSIMG referenced from FiveHMX.lib(menuitem.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDRAWTEXT referenced from FiveHMX.lib(menuitem.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDELETEGRAPHICS referenced from FiveHMX.lib(menuitem.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSHIGHQUALITY referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSNORMALQUALITY referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDRAWLINE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDRAWRECT referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDRAWELLIPSE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDRAWARC referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDRAWPATH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSFILLPATH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSCLEARCOLOR referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSSETSMOOTHINGGRAPHICS referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSGRAPHTRASLATETRANSFORM referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSGRAPHROTATETRANSFORM referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSGRAPHSCALE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSNEWGRAPHICS referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_SETPAGEUNIT2PIXEL referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSNEWGRAPHICSWND referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSGRAPHICSFROMIMG referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDRAWIMAGE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDRAWTEXTFONT referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDRAWTEXTLF referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSISINREGION referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSCREATEREGIONFROMGPATH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDELETEPEN referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPENSETCLR referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSALIGN referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPENSETLINEJOIN referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSNOALIGN referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPENSIZE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSNEWPEN referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPENSTYLE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSNEWSOLIDBRUSH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDELETEBRUSH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSNEWGRADIENTBRUSH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSANGLEGRADIENTBRUSH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSSTARTUP referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSSHUTDOWN referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPATHADDARC referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPATHADDELLIPSE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPATHADDLINE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPATHADDRECTANGLE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPATHCLOSEFIGURE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPATHSTARTFIGURE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSROTATEPATH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSROTATECENTERPATH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSSCALEPATH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSTRANSLATEPATH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSCREATEPATH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPATHADDSTRING referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSDELETEPATH referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSCREATEIMAGEFROMRES referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEMATRIXTOGRAY referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEPIXGETALPHA referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEPIXGETBLUE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEGETPIXCOLOR referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPIXISCOLOR referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSCREATEHBITMAPIMAGE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEPIXGETGREEN referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSGETHEIGHTBITMAP referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEPIXGETRED referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSGETWIDTHBITMAP referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEIS32BITS referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEROTATEANGLE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGELOADPNGFROMSTR referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEROTATEFLIP referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGESET32BITS referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGESETPIXCOLOR referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEPIXTOGRAYCOLOR referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEMATRIXCUSTOM referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGESETPIXHCOLOR referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSPIXELCOLORTOALPHA referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGESCALE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGELOADPNGFROMRESOURCES referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGELOADCACHEDFILE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGESAVEQUALITY referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGESAVE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGEDISPOSE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGERESIZE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSEMFTOJPG referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMAGECROP referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSEMFTOBMP referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSLOADDIRECTIMAGE referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMGGETFRAMECOUNT referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_GDIPLUSIMGGETFRAME referenced from FiveHMX.lib(tgdiplus.obj)'.
xLINK: error: Unresolved external symbol '_SetWindowLongPtr referenced from FiveHCM.lib(ffdlgprc.obj)'.
xLINK: fatal error: 123 unresolved external(s).
* Linking executable errors *
C:\fwh\samples>
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oWnd, oWebView
DEFINE WINDOW oWnd TITLE "Agent Web" SIZE 1500, 1000
oWebView = TWebView2():New( oWnd )
oWebView:bOnNavigationCompleted = { | cUrl | oWebView:InjectJavascript( JSSearch() + ;
If( "search" $ cUrl, "WebResults();", "WebSearch( 'fivewin' );" ) ) }
oWebView:bOnBind = { | aData | XBrowse( aData[ 1 ] ) }
oWebView:Navigate( "https://www.google.com" )
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. )
ACTIVATE WINDOW oWnd CENTER ;
ON RESIZE oWebView:SetSize( nWidth, nHeight )
return nil
function JSSearch()
local cCode
TEXT INTO cCode
function WebSearch( cText )
{
document.getElementById( "APjFqb" ).value = cText;
document.querySelector( "input[name='btnK']" ).click();
}
function WebResults()
{
const divs = document.querySelectorAll('div.N54PNb.BToiNc.cvP2Ce');
let resultados = [];
for (const div of divs) {
// Obtener la URL
const link = div.querySelector('a.rTyHce.jgWGIe');
const url = link ? link.getAttribute('href') : '';
// Obtener el texto principal (título)
const linkDiv = div.querySelector('div[role="link"]');
const span = linkDiv ? linkDiv.querySelector('span') : null;
const textoPrincipal = span ? span.textContent.trim() : '';
// Obtener el texto descriptivo
const descripcionDiv = div.querySelector('div.VwiC3b.tZESfb.p4wth.r025kc.hJNv6b.Hdw6tb');
const descripcion = descripcionDiv ? descripcionDiv.textContent.trim() : '';
// Obtener el SVG como ícono
const svgElement = div.querySelector('svg');
const icono = svgElement ? svgElement.outerHTML : '<span class="default-icon">📍</span>';
if (url && url.trim() !== '') {
resultados.push([url, textoPrincipal, descripcion, icono]);
}
}
SendToFWH( resultados );
}
ENDTEXT
return cCode
]]>Code: Select all | Expand
#include "FiveWin.ch"
function Main()
local oWnd, oWebView
DEFINE WINDOW oWnd TITLE "Agent Web" SIZE 1500, 1000
oWebView = TWebView2():New( oWnd )
oWebView:bOnNavigationCompleted = { | cUrl | oWebView:InjectJavascript( JSSearch() + ;
If( "search" $ cUrl, "WebResults();", "WebSearch( 'fivewin' );" ) ) }
oWebView:bOnBind = { | aData | XBrowse( aData[ 1 ] ) }
oWebView:Navigate( "https://www.google.com" )
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. )
ACTIVATE WINDOW oWnd CENTER ;
ON RESIZE oWebView:SetSize( nWidth, nHeight )
return nil
function JSSearch()
local cCode
TEXT INTO cCode
function WebSearch( cText )
{
document.getElementById( "APjFqb" ).value = cText;
document.querySelector( "input[name='btnK']" ).click();
}
function WebResults()
{
const divs = document.querySelectorAll('div.N54PNb.BToiNc.cvP2Ce');
let resultados = [];
for (const div of divs) {
// Obtener la URL
const link = div.querySelector('a.rTyHce.jgWGIe');
const url = link ? link.getAttribute('href') : '';
// Obtener el texto principal (título)
const linkDiv = div.querySelector('div[role="link"]');
const span = linkDiv ? linkDiv.querySelector('span') : null;
const textoPrincipal = span ? span.textContent.trim() : '';
// Obtener el texto descriptivo
const descripcionDiv = div.querySelector('div.VwiC3b.tZESfb.p4wth.r025kc.hJNv6b.Hdw6tb');
const descripcion = descripcionDiv ? descripcionDiv.textContent.trim() : '';
// Obtener el SVG como ícono
const svgElement = div.querySelector('svg');
const icono = svgElement ? svgElement.outerHTML : '<span class="default-icon">📍</span>';
if (url && url.trim() !== '') {
resultados.push([url, textoPrincipal, descripcion, icono]);
}
}
SendToFWH( resultados );
}
ENDTEXT
return cCode
]]>Code: Select all | Expand
#include "FiveWin.ch"
REQUEST HB_CODEPAGE_ESWIN
function Main()
local oChat := TOLlama():New( "gemma3" )
fw_SetUnicode( .F. )
hb_SetCodePage( "ESWIN" )
oChat:SendImage( "c:/fwh/bitmaps/pngs/equation.png", "resuelve x" )
fw_memoEdit( hb_Utf8ToStr( oChat:GetValue() ) )
oChat:End()
return nil
]]>Aquí está la solución para encontrar x:
**Concepto:**
Este es un triángulo rectángulo, donde el lado de 6 cm y el lado de 8 cm son los catetos y x es la hipotenusa. Podemos usar el teorema de Pitágoras para encontrar la hipotenusa:
a² + b² = c²
donde a y b son los catetos y c es la hipotenusa.
**Solución:**
1. Sustituye los valores en la ecuación:
6² + 8² = x²
2. Calcula los cuadrados:
36 + 64 = x²
3. Suma los números:
100 = x²
4. Toma la raíz cuadrada de ambos lados:
x = ?100
x = 10
**Por lo tanto, x = 10 cm**
Code: Select all | Expand
#include "FiveWin.ch"
REQUEST HB_CODEPAGE_ESWIN
function Main()
local oChat := TOLlama():New( "gemma3" )
fw_SetUnicode( .F. )
hb_SetCodePage( "ESWIN" )
oChat:SendImage( "c:/fwh/bitmaps/pngs/equation.png", "resuelve x" )
fw_memoEdit( hb_Utf8ToStr( oChat:GetValue() ) )
oChat:End()
return nil
]]>Aquí está la solución para encontrar x:
**Concepto:**
Este es un triángulo rectángulo, donde el lado de 6 cm y el lado de 8 cm son los catetos y x es la hipotenusa. Podemos usar el teorema de Pitágoras para encontrar la hipotenusa:
a² + b² = c²
donde a y b son los catetos y c es la hipotenusa.
**Solución:**
1. Sustituye los valores en la ecuación:
6² + 8² = x²
2. Calcula los cuadrados:
36 + 64 = x²
3. Suma los números:
100 = x²
4. Toma la raíz cuadrada de ambos lados:
x = ?100
x = 10
**Por lo tanto, x = 10 cm**
]]><think>
Okay, the user wants me to create a mind map of everything I know. Hmm, where do I even start? Well, first I need
to remember that my knowledge is vast but structured in specific domains. Let's break it down.
I should categorize my knowledge into main sections. The user mentioned "todo lo que conoces" which means all the
things I know. Since I can't list every single thing, maybe group them into broader categories first. Like General
Knowledge, then more specialized areas such as Technology, Science, etc.
Wait, let me think of the primary branches. Maybe start with:
1. **General Knowledge**: This includes basic information about the world, like countries, history, famous people,
languages, and common facts.
2. **Technology & Computing**: Here I can cover programming, algorithms, software development, AI, cybersecurity,
etc.
3. **Science**: Physics, Chemistry, Biology, Mathematics, Earth Sciences... each of these could have sub-branches.
4. **Humanities & Social Sciences**: Literature, Philosophy, Psychology, Sociology, Economics...
5. **Arts & Entertainment**: Music, Film, Visual Arts, Performing Arts, etc.
6. **Health & Medicine**: Anatomy, Physiology, Diseases, Medical Ethics, Nutrition...
7. **Business & Management**: Business Models, Marketing, Finance, Leadership...
8. **Education**: Teaching Methods, Pedagogy, Educational Systems, Special Education...
9. **Environment & Sustainability**: Ecology, Climate Change, Renewable Energy, Conservation...
10. **Sports & Fitness**: Different sports categories, fitness techniques, nutrition for athletes...
Wait, but maybe some of these can be further broken down. For example, under Technology & Computing, I could have
sub-branches like Programming Languages (Python, JavaScript), Frameworks, Databases, etc.
Also, should there be a section on AI and Machine Learning specifically? Since that's my specialty. Maybe include
that under Technology or as its own branch?
I need to ensure each main category has relevant sub-topics without overlapping too much. Let me check if I missed
any important areas. What about Mathematics? That's part of Science, so maybe a sub-branch there.
How about History and Geography? Those are under General Knowledge. Maybe separate them into their own branches
for clarity?
Wait, the user might expect a more structured approach. Let me try to outline it step by step:
**Mind Map Structure:**
- **Main Branches**
1. **General Knowledge**
- Countries
- History (World Wars, Ancient Civilizations)
- Languages & Communication
- Famous People & Historical Figures
2. **Technology & Computing**
- Programming Languages (Python, JavaScript, etc.)
- Algorithms & Data Structures
- Software Development Life Cycle
- AI/Machine Learning
- Cybersecurity
3. **Science**
- Physics (Mechanics, Quantum Theory)
- Chemistry (Organic, Inorganic, Biochemistry)
- Biology (Genetics, Ecology)
- Mathematics (Calculus, Algebra, Statistics)
- Earth Sciences (Geology, Meteorology)
4. **Humanities & Social Sciences**
- Literature (Genres, Authors)
- Philosophy (Ethics, Logic, Metaphysics)
- Psychology (Developmental, Cognitive)
- Sociology
- Economics (Micro, Macro, Behavioral)
5. **Arts & Entertainment**
- Music (Genres, Instruments, Composers)
- Film (Directors, Genres, History of Cinema)
- Visual Arts (Painting, Sculpture, Artists)
- Performing Arts (Theatre, Dance, Comedy)
6. **Health & Medicine**
- Anatomy & Physiology
- Diseases & Pathology
- Medical Ethics
- Nutrition & Dietetics
7. **Business & Management**
- Business Models (Freemium, E-commerce)
- Marketing Strategies
- Finance (Investing, Accounting)
- Leadership & Team Dynamics
8. **Education**
- Teaching Methods (Project-Based Learning, Flipped Classroom)
- Pedagogy
- Educational Systems (Schools, Universities, Homeschooling)
9. **Environment & Sustainability**
- Ecology & Biodiversity
- Climate Change (Causes, Effects)
- Renewable Energy (Solar, Wind, Hydropower)
- Conservation Efforts
10. **Sports & Fitness**
- Team Sports (Football, Basketball)
- Individual Sports (Tennis, Swimming)
- Fitness Training (Strength, Cardiovascular)
- Nutrition for Athletes
Hmm, maybe I should also consider adding a section on AI and Machine Learning as its own branch since it's such a
significant area. Let me adjust that.
Wait, under Technology & Computing, there's already AI/ML. Maybe that's okay. The user might want to see specific
sub-topics like Natural Language Processing (NLP), Computer Vision, Neural Networks in the AI section.
Also, should I include Ethics across different areas? Like Ethical Hacking in Cybersecurity or Medical Ethics
under Health?
I think structuring each main branch with key sub-branches and then some notable examples or further subdivisions
would make it comprehensive without being too cluttered. The user might need this for study purposes or to
visualize knowledge domains, so clarity is important.
Is there any overlap I can minimize? For example, Mathematics is part of Science, but sometimes it's considered a
separate category. Maybe better under Science since it's foundational across many fields.
Also, check if all major areas are covered. What about Law and Government? Should that be under Humanities or its
own branch?
Law could fall under Social Sciences or as a sub-branch under Humanities & Social Sciences. Perhaps:
Under **Humanities & Social Sciences**:
- Political Science (Governments, International Relations)
- Law (Legal Systems, Human Rights)
That makes sense.
Alright, this structure should cover most areas the user is expecting. I'll present it in a mind map format with
the main branches and sub-branches, using bullet points for clarity.
</think>
**Mind Map: Todo lo que Conozco**
---
### **1. General Knowledge**
- **Geografía y Países**:
- Continentes, países, capitales.
- Datos curiosos (ej.: montañas más altas, ríos más largos).
- **Historia**:
- Antigüedad: Imperio Romano, Grecia Clásica.
- Edad Media: Cruzadas, Renacimiento.
- Siglos XX/XXI: Guerras Mundiales, Revoluciones.
- **Lenguajes y Comunicación**:
- Idiomas principales (inglés, español, chino).
- Orígenes lingüísticos (latín, indo-europeo).
- **Personajes Ilustres**:
- Científicos: Einstein, Curie.
- Lideres históricos: Mandela, Churchill.
- Inventores y Emprendedores: Tesla, Gates.
---
### **2. Tecnología e Informática**
- **Programación**:
- Lenguajes: Python, JavaScript, Java, C++.
- Frameworks: Django (Python), React (JavaScript).
- **Algoritmos y Estructuras de Datos**:
- Búsqueda binaria, árboles AVL, grafos.
- **Desarrollo de Software**:
- Metodologías Agile/Scrum.
- Testing y Despliegue (CI/CD).
- **Inteligencia Artificial (IA)**:
- Aprendizaje Automático: redes neuronales, regresión lineal.
- Aplicaciones: NLP, visión por computadora.
- **Ciberseguridad**:
- Cifrado (AES, RSA), ataques DDoS.
- Protección de datos y privacidad.
---
### **3. Ciencias**
- **Física**:
- Mecánica clásica: leyes de Newton.
- Física cuántica: partículas elementales.
- **Química**:
- Tabla periódica, reacciones químicas.
- Bioquímica: proteínas y ADN.
- **Biología**:
- Genética (teoría de Mendel), evolución Darwiniana.
- Ecología: cadenas alimentarias, biodiversidad.
- **Matemáticas**:
- Cálculo: derivadas e integrales.
- Álgebra lineal y estadística inferencial.
- **Ciencias de la Tierra**:
- Geología (terremotos), meteorología.
---
### **4. Humanidades y Ciencias Sociales**
- **Literatura**:
- Clásicos: Shakespeare, Cervantes.
- Géneros: poesía, novela histórica.
- **Filosofía**:
- Ética (Kant), lógica formal.
- Metafísica y pensamiento existencialista.
- **Psicología**:
- Desarrollo cognitivo (Piaget).
- Psicopatologías: ansiedad, TOC.
- **Sociología**:
- Teorías de Marx, Weber.
- Estructuras sociales y movimientos culturales.
- **Economía**:
- Microeconomía vs. Macroeconomía.
- Conceptos clave: inflación, PIB.
---
### **5. Arte y Entretenimiento**
- **Arte**:
- Movimientos: Renacimiento (Da Vinci), surrealismo (Dalí).
- Museos famosos: Louvre, MoMA.
- **Cine y Música**:
- Clásicos del cine: *Lo que el viento se llevó*.
- Estilos musicales: jazz, rock, clásico.
- **Literatura**:
- Best-sellers modernos: Tolkien (*Señor de los Anillos*).
- Premios literarios (Nobel, Pulitzer).
---
### **6. Salud y Medicina**
- **Anatomía Humana**:
- Sistemas corporales: nervioso, circulatorio.
- Órganos clave: cerebro, corazón.
- **Enfermedades**:
- Enfermedades infecciosas (COVID-19).
- Cáncer y terapias innovadoras.
- **Farmacología**:
- Función de los antibióticos.
- Desarrollo de vacunas.
---
### **7. Derecho y Política**
- **Sistemas Legales**:
- Sistema Common Law (EE.UU.) vs. Civil Law (Europa).
- Derechos humanos fundamentales.
- **Gobierno**:
- Tipos: repúblicas, monarquías constitucionales.
- Organismos internacionales (ONU, OEA).
---
### **8. Deportes**
- **Deportes Olímpicos**:
- Historia de los Juegos Olímpicos.
- Especies destacadas: fútbol, atletismo.
- **Grandes Competencias**:
- Copa Mundial FIFA, Tour de Francia.
---
### **9. Ciencia Espacial**
- **Historia del Espacio**:
- Primeros viajes (Gagarin, Armstrong).
- Estaciones espaciales: ISS.
- **Exoplanetas y Misiones**:
- Telescópio Hubble, misiones a Marte.
---
### **10. Ética y Filosofía de la Tecnología**
- **Ética en IA**: sesgos algorítmicos, robots autónomos.
- **Privacidad Digital**: leyes como GDPR (UE).
---
Este mapa resume los principales campos del conocimiento organizados por disciplinas clave. ¿Necesitas profundizar
en algún área específica?
]]><think>
Okay, the user wants me to create a mind map of everything I know. Hmm, where do I even start? Well, first I need
to remember that my knowledge is vast but structured in specific domains. Let's break it down.
I should categorize my knowledge into main sections. The user mentioned "todo lo que conoces" which means all the
things I know. Since I can't list every single thing, maybe group them into broader categories first. Like General
Knowledge, then more specialized areas such as Technology, Science, etc.
Wait, let me think of the primary branches. Maybe start with:
1. **General Knowledge**: This includes basic information about the world, like countries, history, famous people,
languages, and common facts.
2. **Technology & Computing**: Here I can cover programming, algorithms, software development, AI, cybersecurity,
etc.
3. **Science**: Physics, Chemistry, Biology, Mathematics, Earth Sciences... each of these could have sub-branches.
4. **Humanities & Social Sciences**: Literature, Philosophy, Psychology, Sociology, Economics...
5. **Arts & Entertainment**: Music, Film, Visual Arts, Performing Arts, etc.
6. **Health & Medicine**: Anatomy, Physiology, Diseases, Medical Ethics, Nutrition...
7. **Business & Management**: Business Models, Marketing, Finance, Leadership...
8. **Education**: Teaching Methods, Pedagogy, Educational Systems, Special Education...
9. **Environment & Sustainability**: Ecology, Climate Change, Renewable Energy, Conservation...
10. **Sports & Fitness**: Different sports categories, fitness techniques, nutrition for athletes...
Wait, but maybe some of these can be further broken down. For example, under Technology & Computing, I could have
sub-branches like Programming Languages (Python, JavaScript), Frameworks, Databases, etc.
Also, should there be a section on AI and Machine Learning specifically? Since that's my specialty. Maybe include
that under Technology or as its own branch?
I need to ensure each main category has relevant sub-topics without overlapping too much. Let me check if I missed
any important areas. What about Mathematics? That's part of Science, so maybe a sub-branch there.
How about History and Geography? Those are under General Knowledge. Maybe separate them into their own branches
for clarity?
Wait, the user might expect a more structured approach. Let me try to outline it step by step:
**Mind Map Structure:**
- **Main Branches**
1. **General Knowledge**
- Countries
- History (World Wars, Ancient Civilizations)
- Languages & Communication
- Famous People & Historical Figures
2. **Technology & Computing**
- Programming Languages (Python, JavaScript, etc.)
- Algorithms & Data Structures
- Software Development Life Cycle
- AI/Machine Learning
- Cybersecurity
3. **Science**
- Physics (Mechanics, Quantum Theory)
- Chemistry (Organic, Inorganic, Biochemistry)
- Biology (Genetics, Ecology)
- Mathematics (Calculus, Algebra, Statistics)
- Earth Sciences (Geology, Meteorology)
4. **Humanities & Social Sciences**
- Literature (Genres, Authors)
- Philosophy (Ethics, Logic, Metaphysics)
- Psychology (Developmental, Cognitive)
- Sociology
- Economics (Micro, Macro, Behavioral)
5. **Arts & Entertainment**
- Music (Genres, Instruments, Composers)
- Film (Directors, Genres, History of Cinema)
- Visual Arts (Painting, Sculpture, Artists)
- Performing Arts (Theatre, Dance, Comedy)
6. **Health & Medicine**
- Anatomy & Physiology
- Diseases & Pathology
- Medical Ethics
- Nutrition & Dietetics
7. **Business & Management**
- Business Models (Freemium, E-commerce)
- Marketing Strategies
- Finance (Investing, Accounting)
- Leadership & Team Dynamics
8. **Education**
- Teaching Methods (Project-Based Learning, Flipped Classroom)
- Pedagogy
- Educational Systems (Schools, Universities, Homeschooling)
9. **Environment & Sustainability**
- Ecology & Biodiversity
- Climate Change (Causes, Effects)
- Renewable Energy (Solar, Wind, Hydropower)
- Conservation Efforts
10. **Sports & Fitness**
- Team Sports (Football, Basketball)
- Individual Sports (Tennis, Swimming)
- Fitness Training (Strength, Cardiovascular)
- Nutrition for Athletes
Hmm, maybe I should also consider adding a section on AI and Machine Learning as its own branch since it's such a
significant area. Let me adjust that.
Wait, under Technology & Computing, there's already AI/ML. Maybe that's okay. The user might want to see specific
sub-topics like Natural Language Processing (NLP), Computer Vision, Neural Networks in the AI section.
Also, should I include Ethics across different areas? Like Ethical Hacking in Cybersecurity or Medical Ethics
under Health?
I think structuring each main branch with key sub-branches and then some notable examples or further subdivisions
would make it comprehensive without being too cluttered. The user might need this for study purposes or to
visualize knowledge domains, so clarity is important.
Is there any overlap I can minimize? For example, Mathematics is part of Science, but sometimes it's considered a
separate category. Maybe better under Science since it's foundational across many fields.
Also, check if all major areas are covered. What about Law and Government? Should that be under Humanities or its
own branch?
Law could fall under Social Sciences or as a sub-branch under Humanities & Social Sciences. Perhaps:
Under **Humanities & Social Sciences**:
- Political Science (Governments, International Relations)
- Law (Legal Systems, Human Rights)
That makes sense.
Alright, this structure should cover most areas the user is expecting. I'll present it in a mind map format with
the main branches and sub-branches, using bullet points for clarity.
</think>
**Mind Map: Todo lo que Conozco**
---
### **1. General Knowledge**
- **Geografía y Países**:
- Continentes, países, capitales.
- Datos curiosos (ej.: montañas más altas, ríos más largos).
- **Historia**:
- Antigüedad: Imperio Romano, Grecia Clásica.
- Edad Media: Cruzadas, Renacimiento.
- Siglos XX/XXI: Guerras Mundiales, Revoluciones.
- **Lenguajes y Comunicación**:
- Idiomas principales (inglés, español, chino).
- Orígenes lingüísticos (latín, indo-europeo).
- **Personajes Ilustres**:
- Científicos: Einstein, Curie.
- Lideres históricos: Mandela, Churchill.
- Inventores y Emprendedores: Tesla, Gates.
---
### **2. Tecnología e Informática**
- **Programación**:
- Lenguajes: Python, JavaScript, Java, C++.
- Frameworks: Django (Python), React (JavaScript).
- **Algoritmos y Estructuras de Datos**:
- Búsqueda binaria, árboles AVL, grafos.
- **Desarrollo de Software**:
- Metodologías Agile/Scrum.
- Testing y Despliegue (CI/CD).
- **Inteligencia Artificial (IA)**:
- Aprendizaje Automático: redes neuronales, regresión lineal.
- Aplicaciones: NLP, visión por computadora.
- **Ciberseguridad**:
- Cifrado (AES, RSA), ataques DDoS.
- Protección de datos y privacidad.
---
### **3. Ciencias**
- **Física**:
- Mecánica clásica: leyes de Newton.
- Física cuántica: partículas elementales.
- **Química**:
- Tabla periódica, reacciones químicas.
- Bioquímica: proteínas y ADN.
- **Biología**:
- Genética (teoría de Mendel), evolución Darwiniana.
- Ecología: cadenas alimentarias, biodiversidad.
- **Matemáticas**:
- Cálculo: derivadas e integrales.
- Álgebra lineal y estadística inferencial.
- **Ciencias de la Tierra**:
- Geología (terremotos), meteorología.
---
### **4. Humanidades y Ciencias Sociales**
- **Literatura**:
- Clásicos: Shakespeare, Cervantes.
- Géneros: poesía, novela histórica.
- **Filosofía**:
- Ética (Kant), lógica formal.
- Metafísica y pensamiento existencialista.
- **Psicología**:
- Desarrollo cognitivo (Piaget).
- Psicopatologías: ansiedad, TOC.
- **Sociología**:
- Teorías de Marx, Weber.
- Estructuras sociales y movimientos culturales.
- **Economía**:
- Microeconomía vs. Macroeconomía.
- Conceptos clave: inflación, PIB.
---
### **5. Arte y Entretenimiento**
- **Arte**:
- Movimientos: Renacimiento (Da Vinci), surrealismo (Dalí).
- Museos famosos: Louvre, MoMA.
- **Cine y Música**:
- Clásicos del cine: *Lo que el viento se llevó*.
- Estilos musicales: jazz, rock, clásico.
- **Literatura**:
- Best-sellers modernos: Tolkien (*Señor de los Anillos*).
- Premios literarios (Nobel, Pulitzer).
---
### **6. Salud y Medicina**
- **Anatomía Humana**:
- Sistemas corporales: nervioso, circulatorio.
- Órganos clave: cerebro, corazón.
- **Enfermedades**:
- Enfermedades infecciosas (COVID-19).
- Cáncer y terapias innovadoras.
- **Farmacología**:
- Función de los antibióticos.
- Desarrollo de vacunas.
---
### **7. Derecho y Política**
- **Sistemas Legales**:
- Sistema Common Law (EE.UU.) vs. Civil Law (Europa).
- Derechos humanos fundamentales.
- **Gobierno**:
- Tipos: repúblicas, monarquías constitucionales.
- Organismos internacionales (ONU, OEA).
---
### **8. Deportes**
- **Deportes Olímpicos**:
- Historia de los Juegos Olímpicos.
- Especies destacadas: fútbol, atletismo.
- **Grandes Competencias**:
- Copa Mundial FIFA, Tour de Francia.
---
### **9. Ciencia Espacial**
- **Historia del Espacio**:
- Primeros viajes (Gagarin, Armstrong).
- Estaciones espaciales: ISS.
- **Exoplanetas y Misiones**:
- Telescópio Hubble, misiones a Marte.
---
### **10. Ética y Filosofía de la Tecnología**
- **Ética en IA**: sesgos algorítmicos, robots autónomos.
- **Privacidad Digital**: leyes como GDPR (UE).
---
Este mapa resume los principales campos del conocimiento organizados por disciplinas clave. ¿Necesitas profundizar
en algún área específica?