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 }
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
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
LOCAL hImages := {=>}
hImages["IMGHOME"] := LoadResourceToBase64("DASH_HOME" )
Code: Select all | Expand
LOCAL hImages := {=>}
hImages["IMGHOME"] := LoadResourceToBase64("DASH_HOME" )
Code: Select all | Expand
#include "fivewin.ch"
static oWebView
function Main()
local oWnd
DEFINE WINDOW oWnd TITLE "Test External CSS"
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON INIT CreaWebView( oWnd ) ;
ON RESIZE if( hb_IsObject( oWebView ), oWebView:SetSize( nWidth, nHeight ), )
return nil
Function CreaWebView( oWnd )
oWebView = TWebView2():New( oWnd )
oWebView:OpenDevToolsWindow(.T.)
oWebView:Navigate( 'file:///d:/fwh/fwhteam/samples/vilian/index1.html' )
Return oWebView
Code: Select all | Expand
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WebView con CSS</title>
<script>
function loadCSS(url) {
const link = document.createElement('link');
link.rel = 'stylesheet';
link.href = url;
link.type = "text/css";
console.log( "Cargando CSS" );
link.onload = function() {
console.log(`Archivo CSS cargado: ${url}`);
};
link.onerror = function() {
console.error(`Error al cargar el archivo CSS: ${url}`);
};
// Simula un retraso para depuración
setTimeout(() => {
console.log('Verificando carga...');
}, 2000);
document.head.appendChild(link); // Agrega el CSS al <head>
}
// Uso
loadCSS('file:///d:/fwh/fwhteam/samples/vilian/styles.css');
</script>
</head>
<body>
<h1>Hola desde WebView</h1>
<p>Este texto está estilizado con CSS.</p>
</body>
</html>
Code: Select all | Expand
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
color: #333;
}
h1 {
color: #ff0000;
}
p {
color: #0000ff;
}
Code: Select all | Expand
#include "fivewin.ch"
static oWebView
function Main()
local oWnd
DEFINE WINDOW oWnd TITLE "Test External CSS"
ACTIVATE WINDOW oWnd MAXIMIZED ;
ON INIT CreaWebView( oWnd ) ;
ON RESIZE if( hb_IsObject( oWebView ), oWebView:SetSize( nWidth, nHeight ), )
return nil
Function CreaWebView( oWnd )
oWebView = TWebView2():New( oWnd )
oWebView:OpenDevToolsWindow(.T.)
oWebView:Navigate( 'file:///d:/fwh/fwhteam/samples/vilian/index1.html' )
Return oWebView
Code: Select all | Expand
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WebView con CSS</title>
<script>
function loadCSS(url) {
const link = document.createElement('link');
link.rel = 'stylesheet';
link.href = url;
link.type = "text/css";
console.log( "Cargando CSS" );
link.onload = function() {
console.log(`Archivo CSS cargado: ${url}`);
};
link.onerror = function() {
console.error(`Error al cargar el archivo CSS: ${url}`);
};
// Simula un retraso para depuración
setTimeout(() => {
console.log('Verificando carga...');
}, 2000);
document.head.appendChild(link); // Agrega el CSS al <head>
}
// Uso
loadCSS('file:///d:/fwh/fwhteam/samples/vilian/styles.css');
</script>
</head>
<body>
<h1>Hola desde WebView</h1>
<p>Este texto está estilizado con CSS.</p>
</body>
</html>
Code: Select all | Expand
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
color: #333;
}
h1 {
color: #ff0000;
}
p {
color: #0000ff;
}
Code: Select all | Expand
TEXT INTO cCss
html, body {
font-family: Tahoma, sans-serif;
background-color: #F5F5EB;
padding: 20px 5px 10px 5px;
margin: 0;
height: 100vh;
overflow: hidden;
}
.container {
display: flex;
Code: Select all | Expand
TEXT INTO cCss
html, body {
font-family: Tahoma, sans-serif;
background-color: #F5F5EB;
padding: 20px 5px 10px 5px;
margin: 0;
height: 100vh;
overflow: hidden;
}
.container {
display: flex;
]]>Silvio.Falconi wrote: Wed Feb 26, 2025 9:06 am My Office365 class
The Tgmail class I provided is specifically for integrating with the GMail API via OAuth2,
so it would not work directly for Office 365 (Outlook). However,
we can adapt it to also work with Office 365 (Microsoft Graph API),
which is the official API for interacting with Microsoft services, including Outlook and OneDrive.
Authentication via OAuth2:
To get the access_token, you will need to configure your application in the Azure Portal,
similar to how you did for GMail.
Microsoft Graph uses a similar authentication flow to GMail
but with different URLs and parameters.
Sending an email via Microsoft Graph:
The HTTP request to send the email will be directed to a different
URL than GMail, namely https://graph.microsoft.com/v1.0/me/sendMail.
Adapting the Tgmail class for Office 365 (Microsoft Graph API)
Below I show you how you can adapt the Tgmail class for Office 365.
The new class will be called Toffice365.
With this Toffice365 class, you can integrate your application with Office 365 (Microsoft Outlook) via OAuth2,
get an access_token,
and use it to send emails via the Microsoft Graph API.
Code: Select all | Expand
CLASS Toffice365 DATA cClientId // OAuth2 Client ID DATA cClientSecret // OAuth2 Client Secret DATA cRedirectUri // Redirect URI DATA cAccessToken // OAuth2 Access Token DATA cRefreshToken // OAuth2 Refresh Token DATA cAuthUrl // Authorization URL METHOD Init( cClientId, cClientSecret, cRedirectUri ) METHOD GetAuthorizationUrl() METHOD GetAccessToken( cCode ) METHOD SendEmail( cSubject, cBody, cRecipient ) ENDCLASS // Constructor for Toffice365 class METHOD Init( cClientId, cClientSecret, cRedirectUri ) ::cClientId := cClientId ::cClientSecret := cClientSecret ::cRedirectUri := cRedirectUri ::cAuthUrl := "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?" + ; "client_id=" + SELF:cClientId + ; "&response_type=code" + ; "&redirect_uri=" + SELF:cRedirectUri + ; "&scope=Mail.Send" RETURN NIL // Method to get the authorization URL METHOD GetAuthorizationUrl() RETURN ::cAuthUrl // Method to get access token using authorization code METHOD GetAccessToken( cCode ) LOCAL cUrl, cData, cResponse, cTokenUrl LOCAL aJson cTokenUrl := "https://login.microsoftonline.com/common/oauth2/v2.0/token" cData := "code=" + cCode + ; "&client_id=" + SELF:cClientId + ; "&client_secret=" + SELF:cClientSecret + ; "&redirect_uri=" + SELF:cRedirectUri + ; "&grant_type=authorization_code" // Request to get the token cResponse := HttpPostRequest( cTokenUrl, cData, "" ) IF !Empty(cResponse) aJson := JsonParse( cResponse ) ::cAccessToken := aJson[ "access_token" ] ::cRefreshToken := aJson[ "refresh_token" ] RETURN .T. ELSE RETURN .F. ENDIF // Method to send an email via Office 365 (Microsoft Graph) METHOD SendEmail( cSubject, cBody, cRecipient ) LOCAL cUrl, cMessage, cRaw, cResponse // Prepara il messaggio in formato MIME cRaw := '{"message": {' + ; '"subject": "' + cSubject + '",' + ; '"body": {"contentType": "Text", "content": "' + cBody + '"},' + ; '"toRecipients": [{"emailAddress": {"address": "' + cRecipient + '"}}]' + ; '}}' // URL to send message via Microsoft Graph cUrl := "https://graph.microsoft.com/v1.0/me/sendMail" // Send HTTP request with access token cResponse := HttpPostRequest( cUrl, cRaw, "Authorization: Bearer " + SELF:cAccessToken ) IF !Empty(cResponse) RETURN .T. ELSE RETURN .F. ENDIF RETURN NIL
SAMPLES as tgmail samples
Code: Select all | Expand
LOCAL oOffice365 oOffice365 := Toffice365():New() // Initializes with the client_id, client_secret and redirect_uri obtained from Azure Portal oOffice365:Init( "YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET", "YOUR_REDIRECT_URI" )
Code: Select all | Expand
LOCAL cAuthUrl cAuthUrl := oOffice365:GetAuthorizationUrl() MsgInfo( "Visita questo URL per autorizzare l'app: " + cAuthUrl, "Autorizzazione OAuth2" )
Code: Select all | Expand
LOCAL cCode, lSuccess cCode := "AUTHORIZATION_CODE_OBTAINED_FROM_USER" // Codice di autorizzazione lSuccess := oOffice365:GetAccessToken( cCode ) IF lSuccess MsgInfo( "Token di accesso ottenuto!", "Successo" ) ELSE MsgError( "Errore durante l'ottenimento del token.", "Errore" ) ENDIF
Code: Select all | Expand
LOCAL lSuccess lSuccess := oOffice365:SendEmail( "Test Email", "Ciao, questa è una prova di invio email!", "recipient@example.com" ) IF lSuccess MsgInfo( "Email inviata con successo!", "Successo" ) ELSE MsgError( "Errore durante l'invio dell'email.", "Errore" ) ENDIF
Functions
// Funzione per eseguire una richiesta HTTP POST
FUNCTION HttpPostRequest( cUrl, cData, cHeaders )
LOCAL cResponse
cResponse := HttpPost( cUrl, cData, cHeaders )
RETURN cResponse
]]>Silvio.Falconi wrote: Wed Feb 26, 2025 9:06 am My Office365 class
The Tgmail class I provided is specifically for integrating with the GMail API via OAuth2,
so it would not work directly for Office 365 (Outlook). However,
we can adapt it to also work with Office 365 (Microsoft Graph API),
which is the official API for interacting with Microsoft services, including Outlook and OneDrive.
Authentication via OAuth2:
To get the access_token, you will need to configure your application in the Azure Portal,
similar to how you did for GMail.
Microsoft Graph uses a similar authentication flow to GMail
but with different URLs and parameters.
Sending an email via Microsoft Graph:
The HTTP request to send the email will be directed to a different
URL than GMail, namely https://graph.microsoft.com/v1.0/me/sendMail.
Adapting the Tgmail class for Office 365 (Microsoft Graph API)
Below I show you how you can adapt the Tgmail class for Office 365.
The new class will be called Toffice365.
With this Toffice365 class, you can integrate your application with Office 365 (Microsoft Outlook) via OAuth2,
get an access_token,
and use it to send emails via the Microsoft Graph API.
Code: Select all | Expand
CLASS Toffice365 DATA cClientId // OAuth2 Client ID DATA cClientSecret // OAuth2 Client Secret DATA cRedirectUri // Redirect URI DATA cAccessToken // OAuth2 Access Token DATA cRefreshToken // OAuth2 Refresh Token DATA cAuthUrl // Authorization URL METHOD Init( cClientId, cClientSecret, cRedirectUri ) METHOD GetAuthorizationUrl() METHOD GetAccessToken( cCode ) METHOD SendEmail( cSubject, cBody, cRecipient ) ENDCLASS // Constructor for Toffice365 class METHOD Init( cClientId, cClientSecret, cRedirectUri ) ::cClientId := cClientId ::cClientSecret := cClientSecret ::cRedirectUri := cRedirectUri ::cAuthUrl := "https://login.microsoftonline.com/common/oauth2/v2.0/authorize?" + ; "client_id=" + SELF:cClientId + ; "&response_type=code" + ; "&redirect_uri=" + SELF:cRedirectUri + ; "&scope=Mail.Send" RETURN NIL // Method to get the authorization URL METHOD GetAuthorizationUrl() RETURN ::cAuthUrl // Method to get access token using authorization code METHOD GetAccessToken( cCode ) LOCAL cUrl, cData, cResponse, cTokenUrl LOCAL aJson cTokenUrl := "https://login.microsoftonline.com/common/oauth2/v2.0/token" cData := "code=" + cCode + ; "&client_id=" + SELF:cClientId + ; "&client_secret=" + SELF:cClientSecret + ; "&redirect_uri=" + SELF:cRedirectUri + ; "&grant_type=authorization_code" // Request to get the token cResponse := HttpPostRequest( cTokenUrl, cData, "" ) IF !Empty(cResponse) aJson := JsonParse( cResponse ) ::cAccessToken := aJson[ "access_token" ] ::cRefreshToken := aJson[ "refresh_token" ] RETURN .T. ELSE RETURN .F. ENDIF // Method to send an email via Office 365 (Microsoft Graph) METHOD SendEmail( cSubject, cBody, cRecipient ) LOCAL cUrl, cMessage, cRaw, cResponse // Prepara il messaggio in formato MIME cRaw := '{"message": {' + ; '"subject": "' + cSubject + '",' + ; '"body": {"contentType": "Text", "content": "' + cBody + '"},' + ; '"toRecipients": [{"emailAddress": {"address": "' + cRecipient + '"}}]' + ; '}}' // URL to send message via Microsoft Graph cUrl := "https://graph.microsoft.com/v1.0/me/sendMail" // Send HTTP request with access token cResponse := HttpPostRequest( cUrl, cRaw, "Authorization: Bearer " + SELF:cAccessToken ) IF !Empty(cResponse) RETURN .T. ELSE RETURN .F. ENDIF RETURN NIL
SAMPLES as tgmail samples
Code: Select all | Expand
LOCAL oOffice365 oOffice365 := Toffice365():New() // Initializes with the client_id, client_secret and redirect_uri obtained from Azure Portal oOffice365:Init( "YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET", "YOUR_REDIRECT_URI" )
Code: Select all | Expand
LOCAL cAuthUrl cAuthUrl := oOffice365:GetAuthorizationUrl() MsgInfo( "Visita questo URL per autorizzare l'app: " + cAuthUrl, "Autorizzazione OAuth2" )
Code: Select all | Expand
LOCAL cCode, lSuccess cCode := "AUTHORIZATION_CODE_OBTAINED_FROM_USER" // Codice di autorizzazione lSuccess := oOffice365:GetAccessToken( cCode ) IF lSuccess MsgInfo( "Token di accesso ottenuto!", "Successo" ) ELSE MsgError( "Errore durante l'ottenimento del token.", "Errore" ) ENDIF
Code: Select all | Expand
LOCAL lSuccess lSuccess := oOffice365:SendEmail( "Test Email", "Ciao, questa è una prova di invio email!", "recipient@example.com" ) IF lSuccess MsgInfo( "Email inviata con successo!", "Successo" ) ELSE MsgError( "Errore durante l'invio dell'email.", "Errore" ) ENDIF
Functions
// Funzione per eseguire una richiesta HTTP POST
FUNCTION HttpPostRequest( cUrl, cData, cHeaders )
LOCAL cResponse
cResponse := HttpPost( cUrl, cData, cHeaders )
RETURN cResponse
Code: Select all | Expand
:InjectJavascript( "document.addEventListener('contextmenu', function(e) { if (e.target.tagName !== 'A') { e.preventDefault(); } });" )
Code: Select all | Expand
:InjectJavascript( "document.addEventListener('keydown', function(e) { if (e.key === 'F5') { e.preventDefault(); window.location.reload(); } }); function refreshPage() { window.location.reload(); } document.addEventListener('DOMContentLoaded', function() { var refreshAreas = document.getElementsByClassName('refresh-area'); for (var i = 0; i < refreshAreas.length; i++) { refreshAreas[i].addEventListener('click', function() { refreshPage(); }); } });" )
Code: Select all | Expand
:InjectJavascript( "document.addEventListener('contextmenu', function(e) { if (e.target.tagName !== 'A') { e.preventDefault(); } });" )
Code: Select all | Expand
:InjectJavascript( "document.addEventListener('keydown', function(e) { if (e.key === 'F5') { e.preventDefault(); window.location.reload(); } }); function refreshPage() { window.location.reload(); } document.addEventListener('DOMContentLoaded', function() { var refreshAreas = document.getElementsByClassName('refresh-area'); for (var i = 0; i < refreshAreas.length; i++) { refreshAreas[i].addEventListener('click', function() { refreshPage(); }); } });" )
El User-Agent es un encabezado HTTP que los navegadores (u otros clientes HTTP) envían al servidor web para identificar el dispositivo, sistema operativo, navegador y versión que está realizando la solicitud. Este encabezado permite que el servidor adapte su respuesta según las capacidades del cliente.
Gracias al encabezado que se envia con el user-agent puedes determinar el comportamiento de la aplicacion, son muchas las utilidades que tiene.
]]>The User-Agent is an HTTP header that browsers (or other HTTP clients) send to the web server to identify the device, operating system, browser, and version making the request. This header allows the server to tailor its response based on the client's capabilities.
Thanks to the header sent with the user-agent, you can determine the application's behavior, and it has many uses.
El User-Agent es un encabezado HTTP que los navegadores (u otros clientes HTTP) envían al servidor web para identificar el dispositivo, sistema operativo, navegador y versión que está realizando la solicitud. Este encabezado permite que el servidor adapte su respuesta según las capacidades del cliente.
Gracias al encabezado que se envia con el user-agent puedes determinar el comportamiento de la aplicacion, son muchas las utilidades que tiene.
]]>The User-Agent is an HTTP header that browsers (or other HTTP clients) send to the web server to identify the device, operating system, browser, and version making the request. This header allows the server to tailor its response based on the client's capabilities.
Thanks to the header sent with the user-agent, you can determine the application's behavior, and it has many uses.
El User-Agent es un encabezado HTTP que los navegadores (u otros clientes HTTP) envían al servidor web para identificar el dispositivo, sistema operativo, navegador y versión que está realizando la solicitud. Este encabezado permite que el servidor adapte su respuesta según las capacidades del cliente.
Gracias al encabezado que se envia con el user-agent puedes determinar el comportamiento de la aplicacion, son muchas las utilidades que tiene.
The User-Agent is an HTTP header that browsers (or other HTTP clients) send to the web server to identify the device, operating system, browser, and version making the request. This header allows the server to tailor its response based on the client's capabilities.
Thanks to the header sent with the user-agent, you can determine the application's behavior, and it has many uses.
El User-Agent es un encabezado HTTP que los navegadores (u otros clientes HTTP) envían al servidor web para identificar el dispositivo, sistema operativo, navegador y versión que está realizando la solicitud. Este encabezado permite que el servidor adapte su respuesta según las capacidades del cliente.
Gracias al encabezado que se envia con el user-agent puedes determinar el comportamiento de la aplicacion, son muchas las utilidades que tiene.
The User-Agent is an HTTP header that browsers (or other HTTP clients) send to the web server to identify the device, operating system, browser, and version making the request. This header allows the server to tailor its response based on the client's capabilities.
Thanks to the header sent with the user-agent, you can determine the application's behavior, and it has many uses.
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
// Please change path
USE d:\fwh\fwhteam\samples\customer NEW SHARED
XBROWSER "customer" TITLE "Prueba Botones y Excel" SETUP ;
( oBrw:lFastEdit := .F., ;
oBrw:aCols[ 1 ]:nEditType := oBrw:aCols[ 3 ]:nEditType := EDIT_GET, ;
oBrw:bKeyChar := { | nKey, nFlags, oB, oCol | if( oCol:nEditType == 0, nil, ;
if( oCol:lEditable .and. oCol:IsEditKey( nKey ), oCol:Edit( nKey ), ) ) } ;
)
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
// Please change path
USE d:\fwh\fwhteam\samples\customer NEW SHARED
XBROWSER "customer" TITLE "Prueba Botones y Excel" SETUP ;
( oBrw:lFastEdit := .F., ;
oBrw:aCols[ 1 ]:nEditType := oBrw:aCols[ 3 ]:nEditType := EDIT_GET, ;
oBrw:bKeyChar := { | nKey, nFlags, oB, oCol | if( oCol:nEditType == 0, nil, ;
if( oCol:lEditable .and. oCol:IsEditKey( nKey ), oCol:Edit( nKey ), ) ) } ;
)
RETURN nil
]]>Code: Select all | Expand
TEXT INTO cHtml
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
Code: Select all | Expand
TEXT INTO cHtml
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
Code: Select all | Expand
TEXT INTO cHtml
_CodeUtf8Bom_
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
ENDTEXT
cHtml := Strtran(cHtml,_CodeUtf8Bom_,chr(239)+chr(187)+chr(191))
Code: Select all | Expand
TEXT INTO cHtml
_CodeUtf8Bom_
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
ENDTEXT
cHtml := Strtran(cHtml,_CodeUtf8Bom_,chr(239)+chr(187)+chr(191))
Error occurred at: 04/03/25, 09:18:56Giovany Vecchi wrote: Mon Mar 31, 2025 10:12 pm cHtml := Strtran(cHtml,_CodeUtf8Bom_,chr(239)+chr(187)+chr(191))
Error occurred at: 04/03/25, 09:18:56Giovany Vecchi wrote: Mon Mar 31, 2025 10:12 pm cHtml := Strtran(cHtml,_CodeUtf8Bom_,chr(239)+chr(187)+chr(191))
Code: Select all | Expand
meine raglogic.py
nano ~/ollama-rag/ragserver/raglogic.py
import chromadb
from chromadb.utils import embedding_functions
import requests
# Chroma vorbereiten
chroma_client = chromadb.Client()
collection = chroma_client.get_or_create_collection(
name="hotelwissen",
embedding_function=embedding_functions.DefaultEmbeddingFunction()
)
def frage_beantworten(frage: str) -> str:
result = collection.query(query_texts=[frage], n_results=3)
kontext = " ".join([doc for doc in result["documents"][0]])
payload = {
"model": "mistral",
"prompt": f"Beantworte folgende Frage basierend auf diesem Kontext:\n\n>
}
response = requests.post("http://localhost:11434/api/generate", json=payloa>
for line in response.iter_lines():
if line:
data = line.decode("utf-8")
if '"response":"' in data:
return data.split('"response":"')[1].split('"')[0]
return "Keine Antwort erhalten"
start.sh
cd ~/ollama-rag/ragserver
source venv/bin/activate
uvicorn main:app --host 127.0.0.1 --port 8000
otto-atzwanger@KI-Server:~$ nano ~/ollama-rag/ragserver/raglogic.py
otto-atzwanger@KI-Server:~$ cd ~/ollama-rag/ragserver
source venv/bin/activate
uvicorn main:app --host 127.0.0.1 --port 8000
INFO: Started server process [6402]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
Code: Select all | Expand
meine raglogic.py
nano ~/ollama-rag/ragserver/raglogic.py
import chromadb
from chromadb.utils import embedding_functions
import requests
# Chroma vorbereiten
chroma_client = chromadb.Client()
collection = chroma_client.get_or_create_collection(
name="hotelwissen",
embedding_function=embedding_functions.DefaultEmbeddingFunction()
)
def frage_beantworten(frage: str) -> str:
result = collection.query(query_texts=[frage], n_results=3)
kontext = " ".join([doc for doc in result["documents"][0]])
payload = {
"model": "mistral",
"prompt": f"Beantworte folgende Frage basierend auf diesem Kontext:\n\n>
}
response = requests.post("http://localhost:11434/api/generate", json=payloa>
for line in response.iter_lines():
if line:
data = line.decode("utf-8")
if '"response":"' in data:
return data.split('"response":"')[1].split('"')[0]
return "Keine Antwort erhalten"
start.sh
cd ~/ollama-rag/ragserver
source venv/bin/activate
uvicorn main:app --host 127.0.0.1 --port 8000
otto-atzwanger@KI-Server:~$ nano ~/ollama-rag/ragserver/raglogic.py
otto-atzwanger@KI-Server:~$ cd ~/ollama-rag/ragserver
source venv/bin/activate
uvicorn main:app --host 127.0.0.1 --port 8000
INFO: Started server process [6402]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
]]>File Details
How does it work to install a virtual box for Windows on a Linux PC? I need Windows Server.
Sure, I'll explain it step by step – so you want to run a virtual machine with Windows Server on a Linux computer (e.g., Ubuntu), for testing or as an RDP target. Here's the guide:
Requirements
A Linux PC with sufficient RAM (at least 8 GB recommended)
Installed Linux operating system (e.g., Ubuntu, Debian, Fedora …)
Windows Server ISO file (e.g., Windows Server 2019, 2022)
VirtualBox + Extension Pack
Step 1: Install VirtualBox
For Ubuntu/Debian:
bash
Kopieren
Bearbeiten
sudo apt update
sudo apt install virtualbox
For Fedora/RHEL-based:
bash
Kopieren
Bearbeiten
sudo dnf install virtualbox
Alternatively, you can get the latest version directly from Oracle’s website.
Step 2: Install Extension Pack
The Extension Pack is needed for USB 2.0/3.0, RDP, etc.
Download here: https://www.virtualbox.org/wiki/Downloads
Then install:
bash
Kopieren
Bearbeiten
sudo VBoxManage extpack install <path-to-.vbox-extpack-file>
Or via the GUI: Open VirtualBox → File → Preferences → Extensions.
Step 3: Create a VM for Windows Server
Start VirtualBox
Create new VM:
Name: e.g., WinServer2022
Type: Microsoft Windows
Version: Windows 2022 (64-bit), or depending on ISO
RAM: e.g., 4096 MB (or more, depending on system)
Hard disk: new virtual disk (e.g., 50 GB, VDI, dynamically allocated)
Then: Select VM → Settings → Storage → Insert ISO file as virtual CD/DVD
Step 4: Install Windows Server
Start the VM
Install Windows Server as you would on a real PC
At the end, activate Windows Server, set up RDP, etc.
Optional: Set up RDP access to the VM
If you want to access the VM via RDP:
Enable RDP in Windows Server
Set the network mode in VM settings to Bridged Adapter (so the VM gets its own IP address on the network)
Question: What is the minimum requirement for the customer's system to work reasonably well?
Answer: For reasonably smooth operation of a VirtualBox VM with Windows Server (e.g., for testing or RDP access), the host system (i.e., the customer’s Linux PC) should meet at least the following requirements:
Minimum Requirements for Host PC
Component Recommendation for productive use
CPU Quad-core processor, e.g., Intel i5 / AMD Ryzen 5 or better
RAM At least 16 GB (so that 4–8 GB can be allocated to the VM)
Storage SSD with at least 100 GB free, ideally NVMe
GPU (optional) Not required unless for graphics-heavy applications
Network Gigabit LAN or stable Wi-Fi for RDP connections
BIOS/UEFI Virtualization enabled (Intel VT-x / AMD-V)
Virtual Machine Configuration
Resource Minimum (for Windows Server 2019/2022)
RAM (VM) 4 GB (better: 6–8 GB)
CPU (VM) 2 virtual CPUs
HDD (VM) 50–80 GB dynamically allocated
Network Mode Bridged (for LAN-based RDP access)
What else is important?
SSD is mandatory – HDDs are too slow for virtual systems.
Cooling system: Ensure good airflow for continuous operation.
Power consumption: Mini-PCs (e.g., Intel NUC, Ryzen Mini PCs) are great if quiet and energy-efficient operation is desired.
Practical Tip
For small companies with 1–2 simultaneous RDP users, a low-cost mini-PC with Ryzen 5, 16 GB RAM, and 1 TB SSD is often sufficient. Windows Server runs stably in VirtualBox on such a system.
]]>File Details
How does it work to install a virtual box for Windows on a Linux PC? I need Windows Server.
Sure, I'll explain it step by step – so you want to run a virtual machine with Windows Server on a Linux computer (e.g., Ubuntu), for testing or as an RDP target. Here's the guide:
Requirements
A Linux PC with sufficient RAM (at least 8 GB recommended)
Installed Linux operating system (e.g., Ubuntu, Debian, Fedora …)
Windows Server ISO file (e.g., Windows Server 2019, 2022)
VirtualBox + Extension Pack
Step 1: Install VirtualBox
For Ubuntu/Debian:
bash
Kopieren
Bearbeiten
sudo apt update
sudo apt install virtualbox
For Fedora/RHEL-based:
bash
Kopieren
Bearbeiten
sudo dnf install virtualbox
Alternatively, you can get the latest version directly from Oracle’s website.
Step 2: Install Extension Pack
The Extension Pack is needed for USB 2.0/3.0, RDP, etc.
Download here: https://www.virtualbox.org/wiki/Downloads
Then install:
bash
Kopieren
Bearbeiten
sudo VBoxManage extpack install <path-to-.vbox-extpack-file>
Or via the GUI: Open VirtualBox → File → Preferences → Extensions.
Step 3: Create a VM for Windows Server
Start VirtualBox
Create new VM:
Name: e.g., WinServer2022
Type: Microsoft Windows
Version: Windows 2022 (64-bit), or depending on ISO
RAM: e.g., 4096 MB (or more, depending on system)
Hard disk: new virtual disk (e.g., 50 GB, VDI, dynamically allocated)
Then: Select VM → Settings → Storage → Insert ISO file as virtual CD/DVD
Step 4: Install Windows Server
Start the VM
Install Windows Server as you would on a real PC
At the end, activate Windows Server, set up RDP, etc.
Optional: Set up RDP access to the VM
If you want to access the VM via RDP:
Enable RDP in Windows Server
Set the network mode in VM settings to Bridged Adapter (so the VM gets its own IP address on the network)
Question: What is the minimum requirement for the customer's system to work reasonably well?
Answer: For reasonably smooth operation of a VirtualBox VM with Windows Server (e.g., for testing or RDP access), the host system (i.e., the customer’s Linux PC) should meet at least the following requirements:
Minimum Requirements for Host PC
Component Recommendation for productive use
CPU Quad-core processor, e.g., Intel i5 / AMD Ryzen 5 or better
RAM At least 16 GB (so that 4–8 GB can be allocated to the VM)
Storage SSD with at least 100 GB free, ideally NVMe
GPU (optional) Not required unless for graphics-heavy applications
Network Gigabit LAN or stable Wi-Fi for RDP connections
BIOS/UEFI Virtualization enabled (Intel VT-x / AMD-V)
Virtual Machine Configuration
Resource Minimum (for Windows Server 2019/2022)
RAM (VM) 4 GB (better: 6–8 GB)
CPU (VM) 2 virtual CPUs
HDD (VM) 50–80 GB dynamically allocated
Network Mode Bridged (for LAN-based RDP access)
What else is important?
SSD is mandatory – HDDs are too slow for virtual systems.
Cooling system: Ensure good airflow for continuous operation.
Power consumption: Mini-PCs (e.g., Intel NUC, Ryzen Mini PCs) are great if quiet and energy-efficient operation is desired.
Practical Tip
For small companies with 1–2 simultaneous RDP users, a low-cost mini-PC with Ryzen 5, 16 GB RAM, and 1 TB SSD is often sufficient. Windows Server runs stably in VirtualBox on such a system.
Code: Select all | Expand
([code], <span>, (, etc.)
Code: Select all | Expand
([code], <span>, (, etc.)
Code: Select all | Expand
oBrw:SetOrder( <column order> )
Code: Select all | Expand
oBrw:SetOrder( <column order> )
Code: Select all | Expand
SecondsFrom1970()
#pragma BEGINDUMP
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include "hbapi.h"
HB_FUNC( SECONDSFROM1970 )
{
unsigned long count;
time_t *tmppointer=NULL;
count = time( tmppointer ) ;
hb_retnl( count ) ;
}
#pragma ENDDUMP
Code: Select all | Expand
SecondsFrom1970()
#pragma BEGINDUMP
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include "hbapi.h"
HB_FUNC( SECONDSFROM1970 )
{
unsigned long count;
time_t *tmppointer=NULL;
count = time( tmppointer ) ;
hb_retnl( count ) ;
}
#pragma ENDDUMP
Code: Select all | Expand
#include "FiveWin.ch"
FUNCTION Main()
Test()
RETURN NIL
#pragma BEGINDUMP
#include <windows.h>
#include <shlobj.h>
#include <hbapi.h>
void test( void )
{
CoInitialize(NULL);
IProgressDialog* pProgress;
HRESULT hr = CoCreateInstance(CLSID_ProgressDialog, NULL, CLSCTX_INPROC_SERVER, IID_IProgressDialog, (void**)&pProgress);
if (SUCCEEDED(hr))
{
pProgress->SetTitle(L"Copying file...");
pProgress->StartProgressDialog(NULL, NULL, PROGDLG_NORMAL, NULL);
for (ULONG i = 0; i <= 100; i++)
{
pProgress->SetProgress(i, 100);
Sleep(50);
}
pProgress->StopProgressDialog();
pProgress->Release();
}
CoUninitialize();
}
HB_FUNC( TEST )
{
test();
}
#pragma ENDDUMP
Code: Select all | Expand
#include "FiveWin.ch"
FUNCTION Main()
Test()
RETURN NIL
#pragma BEGINDUMP
#include <windows.h>
#include <shlobj.h>
#include <hbapi.h>
void test( void )
{
CoInitialize(NULL);
IProgressDialog* pProgress;
HRESULT hr = CoCreateInstance(CLSID_ProgressDialog, NULL, CLSCTX_INPROC_SERVER, IID_IProgressDialog, (void**)&pProgress);
if (SUCCEEDED(hr))
{
pProgress->SetTitle(L"Copying file...");
pProgress->StartProgressDialog(NULL, NULL, PROGDLG_NORMAL, NULL);
for (ULONG i = 0; i <= 100; i++)
{
pProgress->SetProgress(i, 100);
Sleep(50);
}
pProgress->StopProgressDialog();
pProgress->Release();
}
CoUninitialize();
}
HB_FUNC( TEST )
{
test();
}
#pragma ENDDUMP
i also have NO Folder called /TP/c:\fwh64\samples\Iprogress>cl.exe -nologo -c -O2 -W4 -wd4127 /TP /I\include pprogres.c
Der Befehl "cl.exe" ist entweder falsch geschrieben oder konnte nicht gefunden werden.
i also have NO Folder called /TP/c:\fwh64\samples\Iprogress>cl.exe -nologo -c -O2 -W4 -wd4127 /TP /I\include pprogres.c
Der Befehl "cl.exe" ist entweder falsch geschrieben oder konnte nicht gefunden werden.
Code: Select all | Expand
c:\fwh64\samples\Iprogress>"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34808\bin\Hostx64\x64\cl.exe" -nologo -c -O2 -W4 -wd4127 /TP /I%hdir%\include pprogres.c pprogres.c
c:\harbour64\include\hbdefs.h(50): fatal error C1083: Datei (Include) kann nicht geöffnet werden: "stdarg.h": No such file or directory
c:\fwh64\samples\Iprogress>
Code: Select all | Expand
c:\fwh64\samples\Iprogress>"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34808\bin\Hostx64\x64\cl.exe" -nologo -c -O2 -W4 -wd4127 /TP /I%hdir%\include pprogres.c pprogres.c
c:\harbour64\include\hbdefs.h(50): fatal error C1083: Datei (Include) kann nicht geöffnet werden: "stdarg.h": No such file or directory
c:\fwh64\samples\Iprogress>
Code: Select all | Expand
cl -TP -W3 -O2 -c -I%hdir%\include -D_WIN64 -D__FLAT__ -I%fwdir%\include -I-I"%ProgramFiles(x86)%\Windows Kits"\10\Include\10.0.18362.0\ucrt %1.c
do i have wrong "Windows KIts" ?]]>[vcvarsall.bat] Environment initialized for: 'x64'
Compiling...
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Compiling 'pprogres.prg' and generating preprocessed output to 'pprogres.ppo'...
Lines 5061, Functions/Procedures 1
Generating C source output to 'pprogres.c'... Done.
Microsoft (R) C/C++-Optimierungscompiler Version 19.43.34809 für x64
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.
pprogres.c
c:\harbour64\include\hbdefs.h(51): fatal error C1083: Datei (Include) kann nicht geöffnet werden: "stdio.h": No such file or directory
LINK : fatal error LNK1181: Eingabedatei "pprogres.obj" kann nicht geöffnet werden.
* Linking errors *
c:\fwh64\samples\Iprogress>
Code: Select all | Expand
cl -TP -W3 -O2 -c -I%hdir%\include -D_WIN64 -D__FLAT__ -I%fwdir%\include -I-I"%ProgramFiles(x86)%\Windows Kits"\10\Include\10.0.18362.0\ucrt %1.c
do i have wrong "Windows KIts" ?]]>[vcvarsall.bat] Environment initialized for: 'x64'
Compiling...
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Compiling 'pprogres.prg' and generating preprocessed output to 'pprogres.ppo'...
Lines 5061, Functions/Procedures 1
Generating C source output to 'pprogres.c'... Done.
Microsoft (R) C/C++-Optimierungscompiler Version 19.43.34809 für x64
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.
pprogres.c
c:\harbour64\include\hbdefs.h(51): fatal error C1083: Datei (Include) kann nicht geöffnet werden: "stdio.h": No such file or directory
LINK : fatal error LNK1181: Eingabedatei "pprogres.obj" kann nicht geöffnet werden.
* Linking errors *
c:\fwh64\samples\Iprogress>
Code: Select all | Expand
call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
cl -TP -W3 -O2 -c -Ic:\harbour\include -D_WIN64 -D__FLAT__ -Ic:\fwh\include -I"%ProgramFiles(x86)%\Windows Kits"\10\Include\10.0.22621.0\ucrt\ pprogres.C
Code: Select all | Expand
link @msvc.tmp /nologo /subsystem:windows /NODEFAULTLIB:libucrt /NODEFAULTLIB:msvcrt
Code: Select all | Expand
call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
cl -TP -W3 -O2 -c -Ic:\harbour\include -D_WIN64 -D__FLAT__ -Ic:\fwh\include -I"%ProgramFiles(x86)%\Windows Kits"\10\Include\10.0.22621.0\ucrt\ pprogres.C
Code: Select all | Expand
link @msvc.tmp /nologo /subsystem:windows /NODEFAULTLIB:libucrt /NODEFAULTLIB:msvcrt
Code: Select all | Expand
@ 60,250 BTNBMP PROMPT "Clear Filter" ;
SIZE 100,40 PIXEL OF oDlg FLAT ;
ACTION ( oBrw:cAlias )->( DBCLEARFILTER(), oBrw:Refresh(), ClearFilter( oBrw ), oBrw:SetFocus() ) // Look
ACTIVATE DIALOG oDlg CENTERED
RELEASE FONT oFontB, oBoldB
return nil
//----------------------------------------------------------------------------//
// New code
// Function clean barget
//----------------------------------------------------------------------------//
static function ClearFilter( oBrw )
local n
for n := 1 to Len( oBrw:aCols )
WITH OBJECT oBrw:aCols[ n ]
if FieldType( n ) != 'L'
:uBarGetVal := uValBlank( fieldGet( n ) )
if FieldType( n ) == 'N'
:cBarGetPic := NumPict( FieldLen( n ), FieldDec( n ) )
endif
endif
if hb_IsObject( :oBarGet )
:oBarGet:Refresh()
endif
END
next
Return nil
//----------------------------------------------------------------------------//
Please note that the functions used for applying and removing filters depend on the RDD (data source) you are using in xbrowse, and therefore the initialization of the oGetBar will also be different. This example is created using a DBF.Code: Select all | Expand
@ 60,250 BTNBMP PROMPT "Clear Filter" ;
SIZE 100,40 PIXEL OF oDlg FLAT ;
ACTION ( oBrw:cAlias )->( DBCLEARFILTER(), oBrw:Refresh(), ClearFilter( oBrw ), oBrw:SetFocus() ) // Look
ACTIVATE DIALOG oDlg CENTERED
RELEASE FONT oFontB, oBoldB
return nil
//----------------------------------------------------------------------------//
// New code
// Function clean barget
//----------------------------------------------------------------------------//
static function ClearFilter( oBrw )
local n
for n := 1 to Len( oBrw:aCols )
WITH OBJECT oBrw:aCols[ n ]
if FieldType( n ) != 'L'
:uBarGetVal := uValBlank( fieldGet( n ) )
if FieldType( n ) == 'N'
:cBarGetPic := NumPict( FieldLen( n ), FieldDec( n ) )
endif
endif
if hb_IsObject( :oBarGet )
:oBarGet:Refresh()
endif
END
next
Return nil
//----------------------------------------------------------------------------//
Please note that the functions used for applying and removing filters depend on the RDD (data source) you are using in xbrowse, and therefore the initialization of the oGetBar will also be different. This example is created using a DBF.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
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
oWnd:oMsgBar:aItems[1]:Hide()
Code: Select all | Expand
oWnd:oMsgBar:aItems[1]:Hide()
Code: Select all | Expand
Publics by module
activex size = 6872
_HB_FUN_TACTIVEX _HB_FUN_THACTIVEX
adofuncs size = 49883
_HB_FUN_ADOCREATECOLSQL _HB_FUN_ADODEFAULT
_HB_FUN_ADONULL _HB_FUN_ADOROLLUPTREE
_HB_FUN_ADOROLLUPTREEBROWSE _HB_FUN_DBMSNUM
_HB_FUN_FIELDTYPEADOTODBF _HB_FUN_FWADOAPPENDBLANK
_HB_FUN_FWADOCREATETABLE _HB_FUN_FWADODELRECORD
_HB_FUN_FWADOFIELDDEC _HB_FUN_FWADOFIELDLEN
_HB_FUN_FWADOFIELDSIZE _HB_FUN_FWADOFIELDSTRUCT
_HB_FUN_FWADOFIELDTYPE _HB_FUN_FWADOLOADRECORD
_HB_FUN_FWADOMEMOSIZETHRESHOLD _HB_FUN_FWADOSAVERECORD
_HB_FUN_FWADOSTRUCT _HB_FUN_FW_ACEVER
_HB_FUN_FW_ADOADDCOL _HB_FUN_FW_ADOADDMODICOLSQL
_HB_FUN_FW_ADOAPPLYPARAMS _HB_FUN_FW_ADOCATALOGS
_HB_FUN_FW_ADOCONNECTIONSTRING _HB_FUN_FW_ADOCREATEINDEX
_HB_FUN_FW_ADOCREATETABLESQL _HB_FUN_FW_ADOCURRENTDB
_HB_FUN_FW_ADODATETIME _HB_FUN_FW_ADODROPINDEX
_HB_FUN_FW_ADOEXPORTTODBF _HB_FUN_FW_ADOFIELDUPDATEABLE
_HB_FUN_FW_ADOIMPORTFROMDBF _HB_FUN_FW_ADOINDEXES
_HB_FUN_FW_ADOMODIFYCOL _HB_FUN_FW_ADOPIVOTARRAY
_HB_FUN_FW_ADOPIVOTRS _HB_FUN_FW_ADOPRIMARYKEY
_HB_FUN_FW_ADOQUERYRESULT _HB_FUN_FW_ADORECONNECT
_HB_FUN_FW_ADORSTOCSV _HB_FUN_FW_ADORSTOHTML
_HB_FUN_FW_ADORSTOTEXT _HB_FUN_FW_ADOSELECTDB
_HB_FUN_FW_ADOTABLEEXISTS _HB_FUN_FW_ADOTABLES
_HB_FUN_FW_ADOTOEXCEL _HB_FUN_FW_ADOUNQUOTE
_HB_FUN_FW_ARRAYASRECORDSET _HB_FUN_FW_COMPACTMDB
_HB_FUN_FW_CREATEMDB _HB_FUN_FW_DATETOADO
_HB_FUN_FW_DATETOSQL _HB_FUN_FW_FILTER2WHERE
_HB_FUN_FW_FILTERDBF2ADO _HB_FUN_FW_GETADOERROR
_HB_FUN_FW_MSSQLDB _HB_FUN_FW_MSSQL_BACKUP
_HB_FUN_FW_MSSQL_RESTORE _HB_FUN_FW_ONADOERROR
_HB_FUN_FW_OPENADOCONNECTION _HB_FUN_FW_OPENADOEXCELBOOK
_HB_FUN_FW_OPENADOEXCELSHEET _HB_FUN_FW_OPENRECORDSET
_HB_FUN_FW_OPENTRECSET _HB_FUN_FW_QUOTEDCOLSQL
_HB_FUN_FW_RDBMSNAME _HB_FUN_FW_RECSETHEADERS
_HB_FUN_FW_REOPENRECORDSET _HB_FUN_FW_SHOWADOERROR
_HB_FUN_FW_VALTOSQL _HB_FUN_MSSQL_BULKIMPORTDBF
_HB_FUN_RSGETROWS _HB_FUN_RSTOHASH
_HB_FUN_RSTOJSON _HB_FUN_TADOCOMMAND
_HB_FUN_TRM _HB_FUN_UTYPETOBLANK
alert size = 3212
_HB_FUN_ALERT
autoget size = 11251
_HB_FUN_TAUTOGET _HB_FUN_TGETLIST
bar size = 25647
_HB_FUN_GRADIENT2000 _HB_FUN_TBAR
bartabs size = 2684
_HB_FUN_TBARTABS
bitmap size = 16799
_HB_FUN_PALBMPFREE _HB_FUN_PALBMPNEW
_HB_FUN_TBITMAP
block size = 1228
_HB_FUN_TBLOCK
browse size = 4408
_HB_FUN_BROWSE _HB_FUN_REPORT
brush size = 13063
_HB_FUN_GRADIENTBRUSH _HB_FUN_RESIZEBITMAP
_HB_FUN_TBRUSH
brushex size = 1312
_HB_FUN_TBRUSHEX
btnbmp size = 36407
_HB_FUN_TBTNBMP
btnflat size = 8231
_HB_FUN_TBTNFLAT
button size = 6912
_HB_FUN_TBUTTON
buttonb size = 6416
_HB_FUN_TBUTTONBMP
c5lib size = 8935
_HB_FUN_AC5BOX _HB_FUN_ASPLIT
_HB_FUN_C5BOX _HB_FUN_COLORES
_HB_FUN_CREAAROWRIGHT _HB_FUN_CREABITMAPEX
_HB_FUN_CREABITMAPEX2 _HB_FUN_CREAVGRIP
_HB_FUN_DLGCHANGESIZE _HB_FUN_DRAWMTEXT
_HB_FUN_FINDCHAR _HB_FUN_FONTUNDER
_HB_FUN_GENIMAGELIST _HB_FUN_GETBITMAP16
_HB_FUN_GETBITMAPSIZE _HB_FUN_GETDEFFONT
_HB_FUN_GETORIGINALORDEN _HB_FUN_ICON2BMP
_HB_FUN_LFN2SFNEX _HB_FUN_LOADACCESOS
_HB_FUN_LOADICONEX _HB_FUN_LOADIMAGEEX
_HB_FUN_LOADIMAGEEX2 _HB_FUN_LTHEMES
_HB_FUN_MEMOWRITEX _HB_FUN_RESTORESCREENFROMBMP
_HB_FUN_SAVESCREENASBMP _HB_FUN_STRCOUNT
_HB_FUN_XADRIVES _HB_FUN___MIRROW
c5tooltp size = 11531
_HB_FUN_TC5TOOLTIP
calinfo size = 6456
_HB_FUN_TCALINFO
callstac size = 2968
_HB_FUN_CCALLSTACK _HB_FUN_SHOWCALLSTACK
_HB_FUN_STACKVARS
chatgpt size = 2760
_HB_FUN_TCHATGPT
checkbox size = 7160
_HB_FUN_TCHECKBOX
checkres size = 1482
DelResource _HB_FUN_CHECKRES
_HB_FUN_FWADDRESOURCE _HB_FUN_FWDELRESOURCE
_HB_FUN_SETRESDEBUG _RegisterResource
clipbrd size = 4304
_HB_FUN_GETCLIPCONTENTFORMAT _HB_FUN_TCLIPBOARD
clipmore size = 492
_HB_FUN_RLNEW _HB_FUN_RLQUERY
combobox size = 20863
_HB_FUN_SETCBXCOLORFOCUS _HB_FUN_TCOMBOBOX
_HB_FUN_TDRAWITEMSTRUCT
combom size = 13759
_HB_FUN_TCOMBOMETRO
control size = 30079
_HB_FUN_GETGRIDSIZE _HB_FUN_SETGRIDSIZE
_HB_FUN_TCONTROL
crcard size = 2044
_HB_FUN_FW_VALIDCREDITCARD
cursor size = 3512
_HB_FUN_TCURSOR
database size = 39523
_HB_FUN_TDATABASE
datarow size = 47499
_HB_FUN_BTNCHOOSECOLOR _HB_FUN_EXTRACTBMP
_HB_FUN_FW_COPYRECORD _HB_FUN_FW_EDITHASH
_HB_FUN_FW_PASTERECORD _HB_FUN_FW_RECORD
_HB_FUN_MAKEBMPARRAY _HB_FUN_TDATAROW
_HB_FUN_XEDIT
dbcombo size = 9040
_HB_FUN_TDBCOMBO
dbffunc1 size = 2948
_HB_FUN_DBF_APPLYPARAMS _HB_FUN_DBF_NEEDSLOCK
_HB_FUN_DBROLLBACK _HB_FUN_DBROLLBACKALL
_HB_FUN_FIELDINEXPR _HB_FUN_FW_DBFTOARRAY
_HB_FUN_FW_DBFTOHASH _HB_FUN_FW_DBFTOHTML
_HB_FUN_FW_DBFTOJSON _HB_FUN_ORDERTAGINFO
dbffunc2 size = 16256
_HB_FUN_CONVERTTYPE _HB_FUN_DBFAPPEND
_HB_FUN_FW_ARRAYTODBF _HB_FUN_FW_ARRAYTODBFEX
_HB_FUN_FW_CDXCREATE _HB_FUN_FW_COPYDBFTO
_HB_FUN_FW_DBFILTERBLOCK _HB_FUN_FW_DBFLOOKUP
_HB_FUN_FW_DBFRENAMEFIELD _HB_FUN_FW_DBFSQLQUERY
_HB_FUN_FW_DBFSTRUCT _HB_FUN_FW_DBFTOEXCEL
_HB_FUN_FW_DBINSERT _HB_FUN_FW_EXCELTODBF
_HB_FUN_FW_FIELDSPUT _HB_FUN_FW_HASHTOREC
_HB_FUN_FW_INDEXINFO _HB_FUN_FW_RECTOHASH
_HB_FUN_FW_RECTOJSON _HB_FUN_FW_SAVEARRAYTODBF
_HB_FUN_FW_SETRECYCLEDELETED _HB_FUN_SPLITATAS
dbffunc9 size = 1808
_HB_FUN_GETRECYCLEDREC
dbgabout size = 1936
_HB_FUN_DBGABOUT
dbgalert size = 1948
_HB_FUN_DBGALERT
dbgmemo size = 1812
_HB_FUN_DBGMEMO
dbgprint size = 2100
_HB_FUN_DBGPRINT
dbgtable size = 2688
_HB_FUN_DBGTABLE
dbgtrace size = 2976
_HB_FUN_DBGTRACE
dbtools size = 1396
_HB_FUN_AGETWORKAREAS _HB_FUN_CGETNEWALIAS
_HB_FUN_CGETNEWALIASNAME _HB_FUN_DUPRECORD
_HB_FUN_GETORDNAMES
dde size = 2756
_HB_FUN_DDEACK _HB_FUN_DDETERMINATE
_HB_FUN_TDDE
ddeclien size = 4416
_HB_FUN_TDDECLIENT
dialog size = 23135
_HB_FUN_FW_SETTRUEPIXEL _HB_FUN_SETCENTERONPARENT
_HB_FUN_SETDIALOGESC _HB_FUN_SETDLGGRADIENT
_HB_FUN_TDIALOG
dlgfind size = 1896
_HB_FUN_DLGFINDTEXT _HB_FUN_TDLGFIND
dlgs32 size = 2296
_HB_FUN_CGETDIR32 _HB_FUN_CGETFILE32
_HB_FUN_NGETFILTER32
dostofwh size = 5760
_HB_FUN_ADDDOSMENUPROMPT _HB_FUN_EXECDOSMENUPROMPT
_HB_FUN_FW_DBEDIT _HB_FUN_FW_DOSCLEAR
_HB_FUN_FW_DOSDIALOG _HB_FUN_FW_DOSREAD
_HB_FUN_FW_SETCOLOR
dotnet_ size = 6284
_HB_FUN_CLRCREATEINSTANCE _HB_FUN_FW_DOTNET
_HB_FUN_FW_DOTNETERROR _HB_FUN_TDOTNET
drawbmp size = 860
_HB_FUN_DRAWTEXTTRANSPARENT _HB_FUN_DRAWTILED
_HB_FUN_DRAWTRANSPARENT
drxl size = 9939
_HB_FUN_CGETFILEXLSX _HB_FUN_CTEMPXLSX
_HB_FUN_DRXLSFORMAT _HB_FUN_DRXLSXLINKED
_HB_FUN_DRXLSXOBJ _HB_FUN_FWDRXLSX
_HB_FUN_USEDRXLSX _HB_FUN_USEXLSXLIB
_HB_FUN_XLSXLIBLINKED _HB_FUN_XLSXLIBOBJ
_HB_FUN_XLSXOBJ
edit size = 7819
_HB_FUN_TEDIT
editcell size = 1664
_HB_FUN_EDITCELL
epfunc size = 896
_HB_FUN_EP_GETTEMPPATH _HB_FUN_EP_LINKEDTOAPP
_HB_FUN_EP_SETPATH _HB_FUN_EP_TIDYUP
ereport size = 74819
_HB_FUN_AREACHANGE _HB_FUN_AREAHIDE
_HB_FUN_AREAPROPERTIES _HB_FUN_BARMENU
_HB_FUN_BETAVERSION _HB_FUN_CHECKSTYLE
_HB_FUN_CLICKLISTTREE _HB_FUN_CLIENTWINDOWS
_HB_FUN_DECLAREPUBLICS _HB_FUN_DEFINEFONTS
_HB_FUN_DELSELECTITEMS _HB_FUN_DRAWRULERHORZLINE
_HB_FUN_DRAWRULERVERTLINE _HB_FUN_ERBUILDMENU
_HB_FUN_EREPORT _HB_FUN_ERGETALLITEMS
_HB_FUN_ER_MDICHILD _HB_FUN_ER_MOUSEWHEEL
_HB_FUN_ER_SETCOLOR _HB_FUN_EXITEREPORT
_HB_FUN_FONTSANDCOLORS _HB_FUN_GENERATESOURCE
_HB_FUN_GETALLCOLORS _HB_FUN_GETCOLOR
_HB_FUN_GETCURRENTFONT _HB_FUN_GETFONTS
_HB_FUN_GETFONTTEXT _HB_FUN_GETPAPERSIZES
_HB_FUN_INIMAINWINDOW _HB_FUN_ITEMLIST
_HB_FUN_LISTTREES _HB_FUN_MDL2
_HB_FUN_MSGBARINFOS _HB_FUN_OPTIONS
_HB_FUN_PAINTGRID _HB_FUN_POPUPMENU
_HB_FUN_PREVIEWMENU _HB_FUN_PREVIEWREFRESH
_HB_FUN_REPORTSETTINGS _HB_FUN_SCROLLHORIZONT
_HB_FUN_SCROLLVERTICAL _HB_FUN_SELECTFONT
_HB_FUN_SET2COLOR _HB_FUN_SET3COLOR
_HB_FUN_SETAREAFORMULABTN _HB_FUN_SETGENERALSETTINGS
_HB_FUN_SETGRAPHTREEBMP _HB_FUN_SETMAINWND
_HB_FUN_SETSCROLLBAR _HB_FUN_SETTITLECOLOR
_HB_FUN_SETWINNULL _HB_FUN_SHOWAREASONBAR
_HB_FUN_SHOWCOLORCHOICE _HB_FUN_SHOWFONTCHOICE
_HB_FUN_STARTMESSAGE _HB_FUN_TEASYREPORT
_HB_FUN_TSCRIPT _HB_FUN_TTHISREPORT
_HB_FUN_WNDKEYDOWNACTION
erfile size = 22807
_HB_FUN_ASKSAVEFILES _HB_FUN_CHECKFILENAME
_HB_FUN_CREATEBACKUP _HB_FUN_CREATENEWREPORT
_HB_FUN_ER_NEWREPORT _HB_FUN_ER_SAVEAS
_HB_FUN_FILEINFOS _HB_FUN_MOVERECORD
_HB_FUN_OPENFILE _HB_FUN_SAVEASFILE
_HB_FUN_SAVEFILE _HB_FUN_SETNEWREPORTDEFAULTS
_HB_FUN_SETSAVE _HB_FUN_SETSAVEINFOS
eritems size = 45663
_HB_FUN_BARCODEPROPERTIES _HB_FUN_DEACTIVATEITEM
_HB_FUN_DELETEALLITEMS _HB_FUN_DELETEITEM
_HB_FUN_DELITEMWITHKEY _HB_FUN_DRAWBARCODE
_HB_FUN_DRAWGRAPHIC _HB_FUN_EDITSOURCECODE
_HB_FUN_ELEMENTACTIONS _HB_FUN_ER_SHOWITEM
_HB_FUN_GETCOLORBTN _HB_FUN_GETGRAPHINDEX
_HB_FUN_GETGRAPHNAME _HB_FUN_GETIMAGESIZE
_HB_FUN_GETITEMDLGPOS _HB_FUN_GETOVAR
_HB_FUN_GRAPHICPROPERTIES _HB_FUN_IMAGEPROPERTIES
_HB_FUN_ISGRAPHIC _HB_FUN_ITEMCOPY
_HB_FUN_ITEMPASTE _HB_FUN_ITEMPOPUPMENU
_HB_FUN_ITEMPROPERTIES _HB_FUN_KEYDOWNACTION
_HB_FUN_MSGBARITEM _HB_FUN_MULTIITEMPROPERTIES
_HB_FUN_NEWITEM _HB_FUN_SAVEBARITEM
_HB_FUN_SAVEGRAITEM _HB_FUN_SAVEIMGITEM
_HB_FUN_SAVEITEMGENERAL _HB_FUN_SAVETEXTITEM
_HB_FUN_SETFORMULABTN _HB_FUN_SETITEMDEFAULT
_HB_FUN_SETITEMDLG _HB_FUN_SETITEMSIZE
_HB_FUN_TEXTPROPERTIES _HB_FUN_UPDATEITEMS
eritems2 size = 2964
_HB_FUN_INVERTSELECTION _HB_FUN_MARKITEM
_HB_FUN_MOVESELECTION _HB_FUN_MSGSELECTED
_HB_FUN_REFRESHSELECTION _HB_FUN_SELECTALLITEMS
_HB_FUN_SELECTITEM _HB_FUN_STARTSELECTION
_HB_FUN_STOPSELECTION _HB_FUN_TOGGLEITEMSELECTION
_HB_FUN_UNSELECTALL
errsysw size = 9316
_HB_FUN_ERRORLINK _HB_FUN_ERRORSYS
_HB_FUN_FWERRORSYS _HB_FUN_FW_GT
_HB_FUN_GETCPU _HB_FUN_HB_GTSYS
_HB_FUN_SETERRORDIALOG _HB_FUN_SETERRORFILENAME
_HB_FUN_SETERRORPATH _HB_FUN_SETPOSTERRORACTION
ertools size = 34983
_HB_FUN_ADD2UNDO _HB_FUN_ADDTORECENTDOCS
_HB_FUN_ADELETE _HB_FUN_ALTPRINTREPORT
_HB_FUN_CHECKEXPRESSION _HB_FUN_CLEARUNDOREDO
_HB_FUN_CLOSEUNDO _HB_FUN_COPYTOEXPRESS
_HB_FUN_CREATEDBFSEXPRESSIONS _HB_FUN_CREATENEWFILE
_HB_FUN_DATABASES _HB_FUN_DELDBASE
_HB_FUN_DELETEAREA _HB_FUN_EDITLANGUAGE
_HB_FUN_ERCOPYFILE _HB_FUN_ER_CHECKPATH
_HB_FUN_ER_GETPIXEL _HB_FUN_EXPRESSIONS
_HB_FUN_GETBARCODES _HB_FUN_GETCMINCH
_HB_FUN_GETDBASE _HB_FUN_GETDBFIELD
_HB_FUN_GETDIVISIBLE _HB_FUN_GETEXPRFIELDS
_HB_FUN_GETFIELD _HB_FUN_GETFILE
_HB_FUN_GETLANGUAGE _HB_FUN_GETSOURCETOOLTIP
_HB_FUN_GL _HB_FUN_GOBOTTOM
_HB_FUN_INICOLOR _HB_FUN_INSERTAREA
_HB_FUN_ISDIVISIBLE _HB_FUN_ISINTERSECTRECT
_HB_FUN_ISPOINTINRECT _HB_FUN_ISSECONDPAGE
_HB_FUN_MAINCAPTION _HB_FUN_MULTIUNDOREDO
_HB_FUN_OPENDATABASES _HB_FUN_OPENLANGUAGE
_HB_FUN_OPENUNDO _HB_FUN_PRINTREPORT
_HB_FUN_REDO _HB_FUN_REFRESHREDO
_HB_FUN_REFRESHUNDO _HB_FUN_SAVEDATABASES
_HB_FUN_STRATNUM _HB_FUN_UNDO
_HB_FUN_UNDOEXPRESSION _HB_FUN_UNDOREDOMENU
_HB_FUN_VRD_MSGRUN
esreport size = 49423
_HB_FUN_ERSTART _HB_FUN_FWER_ITEM
_HB_FUN_FWER_PRREPORT _HB_FUN_FW_EREPORT
etc size = 808
_HB_FUN_FNADDBITMAP _HB_FUN___CHANGESTYLEWINDOW
expbuild size = 8480
_HB_FUN_CGETEXPRESSION _HB_FUN_FWARGSLIST
_HB_FUN_FWCHECKEXPRESSION _HB_FUN_FWEXPBUILDER
fget size = 71131
_HB_FUN_GTFTOTXT _HB_FUN_TFGET
_HB_FUN_TXTTOGTF
fileedit size = 12247
_HB_FUN_BROWSEITEMS _HB_FUN_CELLVARPUT
_HB_FUN_DBREPLACE _HB_FUN_DUPLICATE
_HB_FUN_EREDITCELL _HB_FUN_FEBUILDMENU
_HB_FUN_FEFILEEDIT _HB_FUN_FEGETFILE
_HB_FUN_FEOPENFILE _HB_FUN_FILEEDITABOUT
_HB_FUN_GETTYPE _HB_FUN_LASTENTRYNR
_HB_FUN_REPLACEITEMS
filename size = 7192
_HB_FUN_ADRIVES _HB_FUN_AFINDFILE
_HB_FUN_CFILEDISC _HB_FUN_CFILEEXT
_HB_FUN_CFILEMASK _HB_FUN_CFILENAME
_HB_FUN_CFILENOEXT _HB_FUN_CFILENOPATH
_HB_FUN_CFILEPATH _HB_FUN_CFILESETEXT
_HB_FUN_CFILESUBDIR _HB_FUN_CFILEUNC
_HB_FUN_CNEWFILENAME _HB_FUN_CRELATIVEPATH
_HB_FUN_CTEMPFILE _HB_FUN_CURDRIVE
_HB_FUN_FDATE _HB_FUN_FOLDEREXISTS
_HB_FUN_FSIZE _HB_FUN_FTIME
_HB_FUN_FW_MEMOWRIT _HB_FUN_FW_NETRMTNAME
_HB_FUN_GETIMAGE _HB_FUN_ISFILEEXT
_HB_FUN_LFILEISREMOTE _HB_FUN_LISDIR
_HB_FUN_LOGFILE _HB_FUN_LOGSTACK
_HB_FUN_MAPDRIVE _HB_FUN_MOVEFILE
_HB_FUN_REMOVEDIR _HB_FUN_SETFOLDERICON
_HB_FUN_SETLOGFILE
fldex size = 8085
_CalcPos _HB_FUN_CALPOS
_HB_FUN_CALPOSITION _RetriveFldInfo
_hb_FWarrayClone
fline size = 1380
_HB_FUN_TFLINE
folder size = 16391
_HB_FUN_TFOLDER
font size = 13215
_HB_FUN_FONTFROMTEXT _HB_FUN_FONTTOTEXT
_HB_FUN_FW_CHECKFONT _HB_FUN_GETUSEDFONTS
_HB_FUN_TFONT
ftranslate size = 3096
_HB_FUN_FW_TRANSLANG _HB_FUN_LISTLANGS
_HB_FUN_TRANSACTION
fwbarcod size = 14352
_HB_FUN_FWER_BARCODE _HB_FUN_FWER_BARCODE_CHKDIGIT
fwdbg size = 42467
_HB_FUN_DBGGETODBG _HB_FUN_DBGSETODBG
_HB_FUN_DBGSOALARM _HB_FUN_DBGSOALERT
_HB_FUN_DBGSOBLEEP _HB_FUN_DBGSOCLICK
_HB_FUN_DBGSOINFO _HB_FUN_DBGSOPUCK
_HB_FUN_TDBG _HB_FUN___DBGENTRY
fwdecode size = 3768
_HB_FUN_ARRTRANSPOSE _HB_FUN_ARRTRANSPOSEQ
_HB_FUN_ASHUFFLE _HB_FUN_FW_AREVERSE
_HB_FUN_FW_ARRGROUPSUM _HB_FUN_FW_ARRSUM
_HB_FUN_FW_ASORT _HB_FUN_FW_DECODE
_HB_FUN_FW_GREATEST _HB_FUN_FW_LEAST
_HB_FUN_FW_RAEVAL
fwerror size = 956
_HB_FUN__FWGENERROR _HB_FUN___LOWMEMERROR
fwmaria size = 159286
_HB_FUN_FRECSET _HB_FUN_FWMARIALIB_VERSION
_HB_FUN_FWMARIA_LCMESSAGES _HB_FUN_FWMARIA_SET_PAD_CHAR_TO_FULL_LENGTH
_HB_FUN_FW_DEMODB _HB_FUN_FW_XOR
_HB_FUN_INBRACKETS _HB_FUN_MARIA_CONNECT
_HB_FUN_MARIA_CONNECTERROR _HB_FUN_MARIA_EMBEDDED
_HB_FUN_MYSQL_BLOBASHEX _HB_FUN_MYSQL_CRYPT
_HB_FUN_MYSQL_CRYPTKEY _HB_FUN_MYSQL_ESCAPE_STRING
_HB_FUN_MYSQL_MAXPADLIMIT _HB_FUN_MYSQL_QUOTEDCOL
_HB_FUN_MYSQL_ROWSET _HB_FUN_MYSQL_STMT_BINDTEST
_HB_FUN_MYSQL_STMT_CLOSE _HB_FUN_MYSQL_STMT_EXECUTE
_HB_FUN_MYSQL_STMT_INIT _HB_FUN_MYSQL_STMT_PREPARE
_HB_FUN_MYSQL_TINYINTASLOGICAL _HB_FUN_MYSQL_UPDATEFROMTABLESQL
_HB_FUN_MYSQL_UPDATESUMMARYSQL _HB_FUN_STRICMPX
_fw_isbinarydata _result_items
fwmsword size = 11887
_HB_FUN_FWMSWORDDOC
fwmulti size = 1006
_HB_FUN_EXEID _HB_FUN_FW_SETMULTI
_HB_FUN_OPENMUTEX
fworm size = 15247
_HB_FUN_EXTRACTGROUPBY _HB_FUN_ORM_CONNECTION
_HB_FUN_ORM_TABLE
fwpdf size = 29239
_HB_FUN_FWHARU _HB_FUN_FWPDF
fwrowset size = 23593
_HB_FUN_FWM_BLANKVALUE _HB_FUN_FWROWSET
_HB_FUN_TRANS_DBFSQL _HB_FUN_TRANS_LIKETODBF
fwstack size = 1592
_HB_FUN_FWSTACK
fwxlsxlb size = 15979
_HB_FUN_TWORKBOOK _HB_FUN_XLSXLIB
fwzebra size = 4876
_HB_FUN_FWZEBRA _HB_FUN_FWZEBRA_BARCODE
gantt size = 8403
_HB_FUN_TGANTT _HB_FUN_TGANTTITEM
getfiles size = 920
_HB_FUN_AGETFILES _HB_FUN_AGETFILESA
getsysin size = 9248
_HB_FUN_BORLANDVERSION _HB_FUN_COLORSQTY
_HB_FUN_CWINVERSION _HB_FUN_DISPFONTPERSIZE
_HB_FUN_FW_ACTIVEMONITORS _HB_FUN_FW_GETALLMONITORS
_HB_FUN_FW_GETMONITOR _HB_FUN_FW_GETTHEMEMODE
_HB_FUN_FW_ISMOUSEPRESENT _HB_FUN_FW_ISTABLETMODE
_HB_FUN_FW_ISTOUCHSCREEN _HB_FUN_FW_SETMONITOR
_HB_FUN_FW_VIRTUALSCREEN _HB_FUN_GETCPUSPEED
_HB_FUN_GETSYSFONT _HB_FUN_ISDARKTHEME
_HB_FUN_ISWIN2000 _HB_FUN_ISWIN64
_HB_FUN_ISWIN7 _HB_FUN_ISWIN8
_HB_FUN_ISWINDOWS10 _HB_FUN_ISWINDOWS11
_HB_FUN_ISWINVISTA _HB_FUN_ISWINXP
_HB_FUN_LARGEFONTS _HB_FUN_SAVEDESKTOP
_HB_FUN_SCREENHEIGHT _HB_FUN_SCREENHEIGHTMM
_HB_FUN_SCREENSCALING _HB_FUN_SCREENSIZE
_HB_FUN_SCREENSIZE_NOSCALING _HB_FUN_SCREENWIDTH
_HB_FUN_SCREENWIDTHMM _HB_FUN_SCRRESOLUTION
_HB_FUN_SETDARKTHEME _HB_FUN_WINDOWS
_HB_FUN_WNDCENTEREX
gettasks size = 2784
_HB_FUN_GETTASKS _HB_FUN_GETWINDOWMODULEFILENAME
_HB_FUN_SETTASKMANAGER
gmail size = 5740
_HB_FUN_TGMAIL
group size = 5136
_HB_FUN_TGROUP
gtf size = 6940
_HB_FUN_GTFTORTF _HB_FUN_ISGTF
_HB_FUN_ISRTF _HB_FUN_RTFTOGTF
harbour size = 4379
_HB_FUN_ASEND _HB_FUN_ASLONG
_HB_FUN_ASLONGLONG _HB_FUN_ASPTR
_HB_FUN_CHILDLEVEL _HB_FUN_EXECUTE
_HB_FUN_FREELIB32 _HB_FUN_FREELIBRARY
_HB_FUN_FREOPEN_STDERR _HB_FUN_GETLASTERROR
_HB_FUN_GETLOCAL _HB_FUN_GETPARAM
_HB_FUN_GETPROCADDRESS _HB_FUN_HB_DBG_VMPARLLIST
_HB_FUN_HB_DBG_VMSTKLCOUNT _HB_FUN_HB_DBG_VMVARLGET
_HB_FUN_HB_DBG_VMVARSLEN _HB_FUN_LOADLIB32
_HB_FUN_LOADLIBRARY _HB_FUN_LOADVBX
_HB_FUN_LOCALCOUNT _HB_FUN_MEMMAX
_HB_FUN_MEMUSED _HB_FUN_NHEAPSIZE
_HB_FUN_NINITDSSIZE _HB_FUN_NSTACKSIZE
_HB_FUN_NSTATICS _HB_FUN_NSYMPSIZE
_HB_FUN_NTXPOS _HB_FUN_OCLONE
_HB_FUN_OLEGETPROPERTY _HB_FUN_OLEINVOKE
_HB_FUN_OLESETPROPERTY _HB_FUN_OSEND
_HB_FUN_PARAMCOUNT _HB_FUN_SETMULTIPLE
_HB_FUN_TVBCONTROL _HB_FUN_ULOADOBJECT
_HB_FUN_VBXCLASSNAME _HB_FUN_VBXEVENT
_HB_FUN_WINDOWSFIX _HB_FUN__CLSSETERROR
_HB_FUN__GENERROR
help32 size = 4424
_HB_FUN_HELPINDEX _HB_FUN_HELPPOPUP
_HB_FUN_HELPSEARCH _HB_FUN_HELPTOPIC
_HB_FUN_SETAUTOHELP _HB_FUN_SPWINHELP
_HB_FUN_SPWINHELPC _HB_FUN_WINHELP
helpchm size = 3071
_HB_FUN_CHMHELPINDEX _HB_FUN_CHMHELPPOPUP
_HB_FUN_CHMHELPSEARCH _HB_FUN_CHMHELPTOPIC
_HB_FUN_FREEHTMLDLL _HB_FUN_GETHELPPOPUP
_HB_FUN_HTMLPOP _HB_FUN_HTMLSEARCH
_HB_FUN_HTML_HELP _HB_FUN_SETHELPPOPUP
_hDLL _helpaddress
_pHTMLHELP
icon size = 3956
_HB_FUN_TICON
iget size = 2560
_HB_FUN_TICONGET
igroup size = 15835
_HB_FUN_TICONGROUP
image size = 16455
_HB_FUN_FICNV24 _HB_FUN_FICONVERTIMAGEFILE
_HB_FUN_FICONVTO32 _HB_FUN_FIGETBITS
_HB_FUN_FIGETFILETYPE _HB_FUN_FIGETINFO
_HB_FUN_FIGETINFOHEADER _HB_FUN_FIGETWIDTH
_HB_FUN_FIISTRANSPARENT _HB_FUN_FILOAD
_HB_FUN_FILOADFROMMEMORY _HB_FUN_FILOADIMG
_HB_FUN_FIMAKETHUMBNAIL _HB_FUN_FIROTATE
_HB_FUN_FIROTATEIMG _HB_FUN_FISAVE
_HB_FUN_FISETTRANSPARENT _HB_FUN_FITYPEFROMMEMORY
_HB_FUN_FIUNLOAD _HB_FUN_FI_CLOSEMEMORY
_HB_FUN_FI_GETFILETYPEFROMFILENAME _HB_FUN_FI_GETFILETYPEFROMMEMORY
_HB_FUN_FI_LOADFROMMEMORY _HB_FUN_FI_OPENMEMORY
_HB_FUN_FI_SAVETOMEMORY _HB_FUN_FI_SUPPORTSWRITING
_HB_FUN_FMAKETHUMBNAIL _HB_FUN_FREEIMAGEISLOADED
_HB_FUN_ISIMAGEDATA _HB_FUN_LOADFREEIMAGE
_HB_FUN_TIMAGE _HB_FUN_UNLOADFREEIMAGE
imageb64 size = 7500
_HB_FUN_TIMAGEBASE64
imgtxtio size = 51385
_HB_FUN_CALCTEXTWH _HB_FUN_CONTRASTCLR
_HB_FUN_DRAWBMPARRAY _HB_FUN_DRAWPROGRESSBAR
_HB_FUN_DRAWTEXTEXARRAY _HB_FUN_DUPLICATEIMAGE
_HB_FUN_ELLIPSE_RADIUS _HB_FUN_EMF2HBITMAP
_HB_FUN_EXTRACTBASE64IMAGE _HB_FUN_FILLRECTEX
_HB_FUN_FW_ANGLEARC _HB_FUN_FW_BARCODEBMP
_HB_FUN_FW_BMPMINUS _HB_FUN_FW_BMPPLUS
_HB_FUN_FW_BMPSTAR _HB_FUN_FW_BOX
_HB_FUN_FW_CLIPBOARDHASIMAGE _HB_FUN_FW_COPYTOCLIPBOARD
_HB_FUN_FW_CREATEBITMAP _HB_FUN_FW_DRAWIMAGE
_HB_FUN_FW_DRAWSHADOW _HB_FUN_FW_DRAWSHAPES
_HB_FUN_FW_ELLIPSHADOW _HB_FUN_FW_EMPTYCLIPBOARD
_HB_FUN_FW_GETCLIPBOARDDATA _HB_FUN_FW_HBITMAPTOFILE
_HB_FUN_FW_IMAGETOBLOB _HB_FUN_FW_MAKEYOURBITMAP
_HB_FUN_FW_PIECHART _HB_FUN_FW_READIMAGE
_HB_FUN_FW_RICHTEXTBMP _HB_FUN_FW_SAVEHBITMAP
_HB_FUN_FW_SAVEIMAGE _HB_FUN_FW_SAVEIMAGESAMETYPE
_HB_FUN_FW_SAVETHUMBNAIL _HB_FUN_FW_SAYBARCODE
_HB_FUN_FW_SAYHOLLOW _HB_FUN_FW_SAYTEXT
_HB_FUN_FW_SAYTEXTHILITE _HB_FUN_FW_SAYTEXTSPREAD
_HB_FUN_FW_STITCHIMAGES _HB_FUN_FW_TEXTTOBITMAP
_HB_FUN_FW_TRANSFORMBITMAP _HB_FUN_GDI32_HOLLOWTEXT
_HB_FUN_GETBMPHEIGHT _HB_FUN_GETBMPWIDTH
_HB_FUN_GRADARGB2RGB _HB_FUN_GRADIENTFILL
_HB_FUN_GRADIENTGDIP _HB_FUN_HICO2HBMP
_HB_FUN_HVALTOBRUSH _HB_FUN_HVALTOPEN
_HB_FUN_ISALPHACLR _HB_FUN_ISFILEIMAGETYPE
_HB_FUN_ISIMAGEEXT _HB_FUN_ISXHBCOM
_HB_FUN_JPEGDIM _HB_FUN_MEMORYBUFFERTYPE
_HB_FUN_MSGINFOSCROLL _HB_FUN_PCHARTOPTR
_HB_FUN_RESIZEIMAGEPTR _HB_FUN_RINGGRADIENTFILL
_HB_FUN_SAMEIMGEXT _HB_FUN_SAYTEXTATANGLE
_HB_FUN_SEGOEMDL2 _HB_FUN_SELECTCLIPPATH
_HB_FUN_SELECTCLIPRGN _HB_FUN_SETDEFAULTICONSIZE
_HB_FUN_TXTINRCT _HB_FUN_USEGDI
_HB_FUN_WEBIMAGE _HB_FUN_WEBPAGECONTENTS
_HB_FUN_WINDOWFROMDC _HB_FUN_WNDBMP
_HB_FUN_WRAPTOWIDTH
ini size = 2852
_HB_FUN_GETPVPRFSE _HB_FUN_TINI
internet size = 1580
_HB_FUN_TINTERNET
keys size = 376
_HB_FUN__SETKEY
linklist size = 5140
_HB_FUN_TLINKLIST
listbox size = 12095
_HB_FUN_TLISTBOX
loadval size = 444
_HB_FUN_LOADVALUE
longnam2 size = 3572
_HB_FUN_APIFINDCLS _HB_FUN_APIFINDFST
_HB_FUN_APIFINDNXT _HB_FUN_GETFULLPATHNAME
_HB_FUN_GETSHORTPATHNAME _HB_FUN_LFN2SFN
_HB_FUN_SFN2LFN
mariarec size = 4380
_HB_FUN_FWMARIARECORD
math size = 640
_HB_FUN_BINTOC _HB_FUN_BINTON
_HB_FUN_NTOBIN
matrices size = 10860
_HB_FUN_ADIFF _HB_FUN_FW_MATRIX
_HB_FUN_MATRIXINVERT _HB_FUN_MATRIXMULTIPLY
_HB_FUN_MATRIX_BOX
mdichild size = 7595
_HB_FUN_TMDICHILD
mdiclien size = 5304
_HB_FUN_TMDICLIENT
mdiframe size = 9371
_HB_FUN_GETWNDFRAME _HB_FUN_TMDIFRAME
mdirec size = 1324
_HB_FUN_MDIRECEDIT
memoedit size = 25087
_HB_FUN_BUILDRICHEDITBAR _HB_FUN_FW_MEMOEDIT
_HB_FUN_HTMLVIEW _HB_FUN_JSONBROWSE
_HB_FUN_JSONVIEW _HB_FUN_RICHEDIT
_HB_FUN_RICHEDIT5 _HB_FUN_SAVEFILESOURCE
_HB_FUN_SETUPSCINT _HB_FUN_SOURCECOMPILE
_HB_FUN_SOURCEEDIT _HB_FUN_SOURCEEDITOR
_HB_FUN_UTFEDIT
memstat size = 684
_HB_FUN_MEMSTAT
menu size = 49759
_HB_FUN_DELCHECK _HB_FUN_GETAAUXITEMS
_HB_FUN_GETALLITEMS _HB_FUN_GETBMPSITEMS
_HB_FUN_GETNHEIGHTITEM _HB_FUN_GETNHEIGHTSEP
_HB_FUN_GETNOLDHEIGHTITEM _HB_FUN_GETNWIDTHITEM
_HB_FUN_GETPOPUPS _HB_FUN_ITEMBITMAP
_HB_FUN_MENUCLONE _HB_FUN_RESBUILD
_HB_FUN_SEARCHID _HB_FUN_SEARCHITEM
_HB_FUN_TMENU
menuitem size = 21635
_HB_FUN_TMENUITEM _HB_FUN_TXTTOBMP
meter size = 13083
_HB_FUN_PAINTCIRCULARMETER _HB_FUN_PAINTCIRCULARMETEROLD
_HB_FUN_TMETER
metrcirc size = 12207
_HB_FUN_TPROGRESSWHEEL
metropnl size = 23443
_HB_FUN_TMETROBTN _HB_FUN_TMETROPANEL
mget size = 17911
_HB_FUN_SETMGETCOLORFOCUS _HB_FUN_TMULTIGET
mimeclip size = 3352
_HB_FUN_FFMIMEDEC _HB_FUN_FFMIMEENC
_HB_FUN_FMIMEDEC _HB_FUN_FMIMEENC
_HB_FUN_MAKEWIND _HB_FUN_MIMEEXT
_HB_FUN_REGQRYVALUEEX _HB_FUN_TESTTHIS
mru size = 4376
_HB_FUN_TMRU
msgbar size = 15851
_HB_FUN_GETMSGBARDEFAULT _HB_FUN_SETMSGBARDEFAULT
_HB_FUN_TIMEFROMSTART _HB_FUN_TMSGBAR
msgcalc size = 4276
_HB_FUN_MSGCALC
msgget size = 3596
_HB_FUN_MSGGET
msglist size = 1552
_HB_FUN_MSGLIST
msglogo size = 2108
_HB_FUN_MSGLOGO _HB_FUN_MSGSPLASH
msgmeter size = 6272
_HB_FUN_MSGDATE _HB_FUN_MSGMETER
msgrun size = 1592
_HB_FUN_MSGRUN _HB_FUN_MSGWAIT
_HB_FUN_STOPUNTIL _HB_FUN_WAITSECONDS
msgtbar size = 884
_HB_FUN_MSGTOOLBAR
netapi32 size = 3964
_HB_FUN_ISEXTERNALIP _HB_FUN_ISINTERNET
_HB_FUN_ISLOCALIP _HB_FUN_LOCALIP
_HB_FUN_NETBIOS _HB_FUN_NETSERIALNUMBER
_HB_FUN_PUBLICIP
now size = 6884
_HB_FUN_NOW _HB_FUN_NOWC
_IN6ADDR_ISANY _IN6ADDR_ISEQUAL
_IN6ADDR_ISLOOPBACK _IN6ADDR_ISUNSPECIFIED
_IN6ADDR_SETANY _IN6ADDR_SETLOOPBACK
_IN6_ADDR_EQUAL _IN6_IS_ADDR_ANYCAST
_IN6_IS_ADDR_EUI64 _IN6_IS_ADDR_GLOBAL
_IN6_IS_ADDR_LINKLOCAL _IN6_IS_ADDR_LOOPBACK
_IN6_IS_ADDR_MC_GLOBAL _IN6_IS_ADDR_MC_LINKLOCAL
_IN6_IS_ADDR_MC_NODELOCAL _IN6_IS_ADDR_MC_ORGLOCAL
_IN6_IS_ADDR_MC_SITELOCAL _IN6_IS_ADDR_MULTICAST
_IN6_IS_ADDR_SITELOCAL _IN6_IS_ADDR_SUBNET_RESERVED_ANYCAST
_IN6_IS_ADDR_SUBNET_ROUTER_ANYCAST _IN6_IS_ADDR_UNSPECIFIED
_IN6_IS_ADDR_V4COMPAT _IN6_IS_ADDR_V4MAPPED
_IN6_IS_ADDR_V4TRANSLATED _IN6_SET_ADDR_LOOPBACK
_IN6_SET_ADDR_UNSPECIFIED _WSAGetFailConnectOnIcmpError
_WSAGetIPUserMtu _WSAGetIcmpErrorInfo
_WSAGetRecvIPEcn _WSAGetUdpRecvMaxCoalescedSize
_WSAGetUdpSendMessageSize _WSASetFailConnectOnIcmpError
_WSASetIPUserMtu _WSASetRecvIPEcn
_WSASetUdpRecvMaxCoalescedSize _WSASetUdpSendMessageSize
_gai_strerrorA _gai_strerrorW
_getipv4sourcefilter _getsourcefilter
_idealsendbacklognotify _idealsendbacklogquery
_setipv4sourcefilter _setsourcefilter
num2word size = 3228
_HB_FUN_FW_N2WSETUP _HB_FUN_FW_NUMTOWORDS
oauth size = 10748
_HB_FUN_THTTPSERVER _HB_FUN_TOAUTH
objects size = 1472
_HB_FUN_ENDOBJECT _HB_FUN_SETOBJECT
_HB_FUN_TAPPLICATION
objfile size = 4116
_HB_FUN_TOBJFILE
odata size = 412
_HB_FUN_AODATA
odbc size = 2092
_HB_FUN_ODBCDSNENTRIES _HB_FUN_SQLCOL
_HB_FUN_SQLCOMMIT _HB_FUN_SQLDESCRIBECOL
_HB_FUN_SQLDRIVERCONNECT _HB_FUN_SQLFILE
_HB_FUN_SQLGETCURNAME _HB_FUN_SQLGETDATA
_HB_FUN_SQLGETINFO _HB_FUN_SQLINDEX
_HB_FUN_SQLPREPARE _HB_FUN_SQLSETCURNAME
olefuncs size = 8368
_HB_FUN_CONVERTTOOOURL _HB_FUN_DBF2EXCELNUMFORMAT
_HB_FUN_EXCELBOOKSAVEAS _HB_FUN_EXCELLANG
_HB_FUN_EXCELLANGID _HB_FUN_EXCELOBJ
_HB_FUN_EXCELSEPARATORS _HB_FUN_EXCELTRANSLATE
_HB_FUN_FILESYSOBJ _HB_FUN_FWGETOLEOBJECT
_HB_FUN_FW_TOGGLEDESKTOP _HB_FUN_GETEXCELBOOK
_HB_FUN_GETEXCELRANGE _HB_FUN_GETPROPERTYVALUE
_HB_FUN_HARBOURNEW _HB_FUN_MERGEDOCS
_HB_FUN_OFFICEEXTRACTIMAGE _HB_FUN_SUNCALCOBJ
_HB_FUN_WINHTTPOBJ _HB_FUN_WINWORDOBJ
_HB_FUN_WMISERVICE _HB_FUN_XLRANGEVALUE
outl2003 size = 11175
_HB_FUN_TOUTLOOK2003 _HB_FUN_TOUTLOOK2003GROUP
outl2010 size = 11159
_HB_FUN_TOUTLOOK2010 _HB_FUN_TOUTLOOK2010GROUP
outlook size = 11363
_HB_FUN_TOUTLOOK
pdmenu size = 20811
_HB_FUN_DELAMENUSAUX _HB_FUN_DELMENUFONT
_HB_FUN_FW_MEASUREITEM _HB_FUN_FW_MENUDRAW
_HB_FUN_GETACCTABLE _HB_FUN_GETAMENUS
_HB_FUN_GETAMENUSAUX _HB_FUN_GETMENUFONT
_HB_FUN_GETPARENTAUXMENUS _HB_FUN_ISCHARUNI
_HB_FUN_ISUTF8 _HB_FUN_LASTAUXMENU
_HB_FUN_LASTITEM _HB_FUN_LASTITEMPOS
_HB_FUN_LASTMENU _HB_FUN_LASTMENUITEMSCOUNT
_HB_FUN_MENUADDITEM _HB_FUN_MENUBEGIN
_HB_FUN_MENUDATA _HB_FUN_MENUEND
_HB_FUN_SETINITITEMSCHILDS _HB_FUN_SETOLDMENUS
_HB_FUN_SETSPACEMONOSP _HB_FUN_SETSPACEXTRAS
_HB_FUN_SETSPACEXTRASPOP
pdreport size = 1852
_HB_FUN_RPTADDCOLUMN _HB_FUN_RPTADDGROUP
_HB_FUN_RPTBEGIN _HB_FUN_RPTEND
pen size = 1584
_HB_FUN_TPEN
pgsuport size = 11424
_HB_FUN_FWPG_APPENDFROMALIAS _HB_FUN_FWPG_CREATETABLESQL
_HB_FUN_FWPG_CURRENTDB _HB_FUN_FWPG_EXECUTE
_HB_FUN_FWPG_FIELDGET _HB_FUN_FWPG_GOTOKEYVAL
_HB_FUN_FWPG_IMPORTFROMDBF _HB_FUN_FWPG_LISTDBS
_HB_FUN_FWPG_LISTSCHEMAS _HB_FUN_FWPG_METASTRUCT
_HB_FUN_FWPG_PRIMARYKEYS _HB_FUN_FWPG_PRIMARYORDER
_HB_FUN_FWPG_QUERYSETORDER _HB_FUN_FWPG_SKIPPER
_HB_FUN_FWPG_STRUCTURE _HB_FUN_FWPG_TABLENAMEFROMID
_HB_FUN_FWPG_XBRSAVEDATA _HB_FUN_FWPG_XBRSEEK
printer size = 36179
_HB_FUN_AGETPRINTERS _HB_FUN_HARUPDFDOC
_HB_FUN_ISHARULINKED _HB_FUN_MSPRINTTOPDF
_HB_FUN_PAGEBEGIN _HB_FUN_PAGEEND
_HB_FUN_PRINTBEGIN _HB_FUN_PRINTEND
_HB_FUN_PRINTQUEUE _HB_FUN_PRNGETFILETOSAVE
_HB_FUN_PRNLASTPAGE _HB_FUN_SAVEPREVIEWTOIMAGE
_HB_FUN_SETPRINTDEFAULT _HB_FUN_SETPRINTER
_HB_FUN_TPRINTER
prv2pdf size = 11286
_HB_FUN_FWJPGTOPDF _HB_FUN_FWSAVEPREVIEWTOPDF
_HB_FUN_FW_EMFTOPDF _HB_FUN_FW_I2PDF
_HB_FUN_TFW_PDF _HB_FUN_WORDPDF
_fp _iBufLen
_nDocLen
radio size = 7048
_HB_FUN_TRADIO
radmenu size = 5340
_HB_FUN_TRADMENU
random size = 1192
_HB_FUN_DECTOHEX _HB_FUN_NHEX
_HB_FUN_NRANDOM _HB_FUN_TIMEZONE
rcolumn size = 12531
_HB_FUN_TRCOLUMN
readxlsx size = 11259
_HB_FUN_FW_OPENXLSX _HB_FUN_FW_SHOWXLSX
_HB_FUN_TXLSXREADER
rebar size = 1848
_HB_FUN_TREBAR
rect size = 9352
_HB_FUN_ARRAYMATH _HB_FUN_POINTROWCOL
_HB_FUN_POINTXY _HB_FUN_TPOINT
_HB_FUN_TRECT
reg32 size = 3236
_HB_FUN_TREG32
report size = 35839
_HB_FUN_TREPORT
rfile size = 3740
_HB_FUN_TRFILE
rgroup size = 4500
_HB_FUN_TRGROUP
rline size = 3684
_HB_FUN_TRLINE
rpreview size = 39495
_HB_FUN_CONVERTTOWORDDOC _HB_FUN_RPREVIEW
_HB_FUN_RPREVUSERBTNS _HB_FUN_SETCUSTOMPRINTPREVIEW
_HB_FUN_TOWORDDOCVIAWRITER _HB_FUN_TPREVIEW
rtfbox size = 1420
_HB_FUN_RTFBOX
rtffile size = 2944
_HB_FUN_TRTFFILE
say size = 7236
_HB_FUN_TSAY
scintila size = 87123
_HB_FUN_CHOICEFONT _HB_FUN_FUNCHARB
_HB_FUN_GETLEXERS _HB_FUN_HCADFUNCTION
_HB_FUN_LOADFHB _HB_FUN_READFUNCFW
_HB_FUN_READFUNCFWC _HB_FUN_READFUNCHB
_HB_FUN_SETMIFONT _HB_FUN_TSCINTILLA
scrllbar size = 6624
_HB_FUN_TSCROLLBAR
scrlpanl size = 10707
_HB_FUN_TSCROLLPANEL
scrollm size = 9940
_HB_FUN_SMLARROW _HB_FUN_SMRARROW
_HB_FUN_TSCROLLMETRO
scrolmsg size = 4052
_HB_FUN_TSCROLLMSG
selector size = 10451
_HB_FUN_ATANG _HB_FUN_FWCOS
_HB_FUN_FWSIN _HB_FUN_TANG
_HB_FUN_TSELECTOR
shellapi size = 2508
_HB_FUN_COPYFILE _HB_FUN_OUTPUTDEBUGSTRING
_HB_FUN_SHELL_NOTIFYICON _HB_FUN_TASKADDICON
_HB_FUN_TASKCHANGEICON _HB_FUN_TASKDELICON
skin size = 9981
_HB_FUN_APPLYSETFILTER _HB_FUN_ISWIN98
_HB_FUN_SETFILTER _HB_FUN_SETTRANSPARENT
_HB_FUN_SKIN _HB_FUN_TSKIN
_SetFilter
skins size = 7164
_HB_FUN_BUTTONS2007 _HB_FUN_FWSKINBTNFOCUSED
_HB_FUN_FWSKINBTNKEYDOWN _HB_FUN_FWSKINBTNKEYUP
_HB_FUN_FWSKINBTNLBUTTONDOWN _HB_FUN_FWSKINBTNLBUTTONUP
_HB_FUN_FWSKINBTNMOUSELEAVE _HB_FUN_FWSKINBTNMOUSEMOVE
_HB_FUN_FWSKINBTNOBJ _HB_FUN_FWSKINBTNPAINT
_HB_FUN_SETSKINBTNDEFAULTCLRS _HB_FUN_SETSKINBUTTONSCOLORS
_HB_FUN_SKINBUTTONS
slider size = 10091
_HB_FUN_TSLIDER
sliderm size = 2776
_HB_FUN_TSLIDERMETRO
splitter size = 11863
_HB_FUN_TSPLITTER
sqlerror size = 2072
_HB_FUN_TSQLERROR
statusba size = 4304
_HB_FUN_TSTATUSBAR
strings size = 51580
_HB_FUN_FWADDLANGUAGE _HB_FUN_FWADDSTRING
_HB_FUN_FWEDITSTRINGS _HB_FUN_FWLANGUAGEID
_HB_FUN_FWLOADSTRINGS _HB_FUN_FWMISSINGSTRINGS
_HB_FUN_FWSAVESTRINGS _HB_FUN_FWSETLANGUAGE
_HB_FUN_FWSETSTRING _HB_FUN_FWSTRING
system size = 356
_HB_FUN_SYSWAIT
tabs size = 19483
_HB_FUN_TTABS
tacctbl size = 1752
_HB_FUN_TACCTABLE
tagcloud size = 5348
_HB_FUN_TTAGCLOUD
tanimate size = 4244
_HB_FUN_TANIMATE
tarrdata size = 39127
_HB_FUN_STR2STRUCT _HB_FUN_TARRAYDATA
tblockchain size = 5332
_HB_FUN_TBLOCKCHAIN
tbtnclr size = 13527
_HB_FUN_TBTNCLR _HB_FUN_TPICKERCOLOR
tcalenda size = 17119
_HB_FUN_TCALENDAR
tcalex size = 29615
_HB_FUN_CALEX_SETFIRSTDATE _HB_FUN_COLORDATA
_HB_FUN_DRAWBOX _HB_FUN_DRAWSPECIALBOX
_HB_FUN_TCALEX
tcbrowse size = 25155
_HB_FUN_TCBROWSE
tccolumn size = 4392
_HB_FUN_TCCOLUMN
tclipget size = 728
_HB_FUN_FWGETNEW _HB_FUN_TCLIPGET
tcomobj size = 1924
_HB_FUN_TCOMOBJECT
tcompone size = 3092
_HB_FUN_TCOMPONENT
tctrsock size = 2204
_HB_FUN_TCTRLSOCKET
tcvrflow size = 20867
_HB_FUN_TCOVER _HB_FUN_TCOVERFLOW
tdayv size = 7455
_HB_FUN_TDAYVIEW
tdbase size = 992
_HB_FUN_TDBASE
tdbfcomp size = 2888
_HB_FUN_TDBFCOMP
tdbfuncs size = 652
_HB_FUN_TDBF_DECRYPT _HB_FUN_TDBF_ENCRYPT
tdbodbc size = 23531
_HB_FUN_TDBODBC
tdbodbcd size = 17831
_HB_FUN_TDBODBCDIRECT
tddemlcl size = 3056
_HB_FUN_DDECLIENT _HB_FUN_TDDEMLCLIENT
tddemlsv size = 4004
_HB_FUN_DDESERVER _HB_FUN_TDDEMLSERVER
tdeepseek size = 2724
_HB_FUN_TDEEPSEEK
tdict size = 29499
_HB_FUN_LOGEVENT _HB_FUN_TDICT
tdockpnel size = 25547
_HB_FUN_TDOCKPNEL
tdosprn size = 6592
_HB_FUN_TDOSPRN
tdtpicke size = 11653
_HB_FUN_DTP_GETSTYLE _HB_FUN_DTP_SETSTYLE
_HB_FUN_TDATEPICK _read_datetime
tembeddings size = 4008
_HB_FUN_TEMBEDDINGS
tenhmeta size = 4852
_HB_FUN_TENHMETAFILE
tereport size = 61283
_HB_FUN_ADDNEWDATAS _HB_FUN_TEREPORT
texplbar size = 15635
_HB_FUN_TEXPLORERBAR _HB_FUN_TTASKPANEL
texplist size = 20171
_HB_FUN_TEXPLORERLIST _HB_FUN_TITEMLISTBAR
texstruc size = 3792
_HB_FUN_STRUCBEGIN _HB_FUN_STRUCEND
_HB_FUN_STRUCMEMBER _HB_FUN_TEXSTRUCT
tfield size = 1148
_HB_FUN_TFIELD
tfile size = 5484
_HB_FUN_TFILE
tfilegtf size = 3124
_HB_FUN_GTFFONT _HB_FUN_GTFFORMAT
_HB_FUN_SETGTFALIGN _HB_FUN_SETGTFCOLOR
_HB_FUN_SETGTFFONT _HB_FUN_SETGTFFORMAT
_HB_FUN_TFILEGTF
tfoldex size = 31359
_HB_FUN_TFOLDEREX
tform size = 4600
_HB_FUN_TFORM
tftp size = 3220
_HB_FUN_TFTP
tftpcli size = 5176
_HB_FUN_TFTPCLIENT
tftpfile size = 2148
_HB_FUN_TFTPFILE
tftpserv size = 6224
_HB_FUN_TFTPSERVER
tftpsess size = 944
_HB_FUN_TFTPSESSION
tgdiplus size = 25163
_HB_FUN_AEMF2IMAGES _HB_FUN_BRUSH
_HB_FUN_CGETBMPNAME _HB_FUN_DRAWIMAGEROTATECENTER
_HB_FUN_EMFTOIMG _HB_FUN_FRAMETIFF
_HB_FUN_GDIBMP _HB_FUN_GDIPLUSCONVER24TO32ALPHA
_HB_FUN_GDIPLUSCONVER24TO32ALPHAGRAY _HB_FUN_GDIPLUSCONVERTIMAGE
_HB_FUN_GDIPLUSRESIZEIMAGE _HB_FUN_GDIPLUSSAVETHUMBNAIL
_HB_FUN_GETIMGFROMLIST _HB_FUN_GETIMGFROMLISTH
_HB_FUN_GETIMGFROMLISTV _HB_FUN_GRAPHICS
_HB_FUN_HBMPFROMFILE _HB_FUN_HBMPFROMRES
_HB_FUN_IMAGEFROM10RESOURCE _HB_FUN_IMAGEPNGFROMSTR
_HB_FUN_LISPNG _HB_FUN_NEWEMFTOJPG
_HB_FUN_PATH _HB_FUN_PEN
_HB_FUN_REGION _HB_FUN_SAVEPREVIEWTOIMG
_HB_FUN_SAVEWINDOW _HB_FUN_TIFFTOJPG
tgemini size = 7352
_HB_FUN_TGEMINI
tget size = 57659
_HB_FUN_CHR16 _HB_FUN_FW_SETGETTIMEPART
_HB_FUN_FW_UTF8PADBYTE _HB_FUN_FW_UTF8PADCHAR
_HB_FUN_GETTEXTLIMITBYCHARS _HB_FUN_LENMINMAX
_HB_FUN_POPUPBROWSE _HB_FUN_SETGETCOLORFOCUS
_HB_FUN_TGET _HB_FUN_WIDESTRPUT
tgif size = 4176
_HB_FUN_TGIF
tgraph size = 55119
_HB_FUN_TGRAPH
tgselect size = 16687
_HB_FUN_CHOOSEGRADIENT _HB_FUN_TCHOOSEGRADIENT
_HB_FUN_TGSELECTOR _HB_FUN_TINK
theader size = 4068
_HB_FUN_THEADER
thtmlpag size = 1636
_HB_FUN_THTMLPAGE
timaglst size = 2392
_HB_FUN_TIMAGELIST
time size = 2036
_HB_FUN_TTIME
timer size = 2072
_HB_FUN_TIMEREVENT _HB_FUN_TTIMER
tindex size = 1784
_HB_FUN_TINDEX
tlayout size = 3744
_HB_FUN_TLAYOUT
tlex size = 2792
_HB_FUN_TLEX
tlib size = 920
_HB_FUN_TLIBFILE
tlistvie size = 8123
_HB_FUN_TLISTVIEW _HB_FUN_TLISTVIEWGROUP
_HB_FUN_TLISTVIEWITEM
tlocks size = 3424
_HB_FUN_TLOCKS
tmail size = 2448
_HB_FUN_TMAIL
tmci size = 2356
_HB_FUN_TMCI
tmcpserver size = 9152
_HB_FUN_CREATEMCPSERVER _HB_FUN_ERRORHANDLER
_HB_FUN_FREADLINE _HB_FUN_TMCPCONTEXT
_HB_FUN_TMCPPROMPT _HB_FUN_TMCPRESOURCE
_HB_FUN_TMCPSERVER _HB_FUN_TMCPTOOL
tmetafil size = 6601
_HB_FUN_GETEMFSIZE _HB_FUN_GETOBJECTTYPE
_HB_FUN_ISENHMETA _HB_FUN_ISHBITMAP
_HB_FUN_TMETAFILE
tmeterex size = 6900
_HB_FUN_TMETEREX
tmetro size = 4588
_HB_FUN_TMETRO
tmnucomp size = 2244
_HB_FUN_TMNUCOMP
tmonthv size = 12047
_HB_FUN_TMONTHVIEW
tmsgitem size = 9339
_HB_FUN_TMSGITEM
tneuralnet size = 4111
_HB_FUN_DSIGMOID _HB_FUN_MATH_E
_HB_FUN_SIGMOID _HB_FUN_TNEURALLAYER
_HB_FUN_TNEURALNETWORK _HB_FUN_TNEURON
tnewsins size = 17323
_HB_FUN_TNEWSINSTANCE
tnewssrv size = 4696
_HB_FUN_TNEWSSERVER
todbc size = 11479
_HB_FUN_TODBC
tollama size = 4136
_HB_FUN_TAGENT _HB_FUN_TOLLAMA
toolbar size = 7380
_HB_FUN_TTOOLBAR
topenai size = 4968
_HB_FUN_TOPENAI
tordinfo size = 2016
_HB_FUN_TORDINFO
tpages size = 5468
_HB_FUN_TPAGES
tpanel size = 5936
_HB_FUN_TPANEL
tparser size = 976
_HB_FUN_TPARSER
tpdf size = 12519
_HB_FUN_TPDF
tpop3 size = 4120
_HB_FUN_TPOP3
tprogres size = 3540
_HB_FUN_TPROGRESS
tproxy size = 2384
_HB_FUN_TPROXY
trackbar size = 3688
_HB_FUN_TTRACKBAR
tras size = 4760
_HB_FUN_TRAS
trating size = 6636
_HB_FUN_TRATING
trbgroup size = 18207
_HB_FUN_TRBGROUP
trbtn size = 26407
_HB_FUN_TRBTN
trdd size = 3684
_HB_FUN_RDDEVENT _HB_FUN_TRDD
_HB_FUN_VIRTUALRDD
trddodbc size = 6064
_HB_FUN_TRDDODBC
trecset size = 22155
_HB_FUN_ADOERRORASTEXT _HB_FUN_TRECSET
treeitem size = 9388
_HB_FUN_GETTREEBMPS _HB_FUN_TTREEITEM
trees size = 2372
_HB_FUN_SUMMARYDATAASTREE _HB_FUN_TREEBEGIN
_HB_FUN_TREEEND _HB_FUN_TREEFREE
_HB_FUN__TREEITEM
tribbon size = 41067
_HB_FUN_GRADIENTBMP _HB_FUN_TBACKSTAGE
_HB_FUN_TBACKSTAGEOPTION _HB_FUN_TQUICKACCESS
_HB_FUN_TRIBBONBAR
triched5 size = 48423
_HB_FUN_MNUCOLORS _HB_FUN_TRICHEDIT5
trichedi size = 26651
_HB_FUN_TRICHEDIT
trpanel size = 2332
_HB_FUN_TRPANEL
tsaybcod size = 4044
_HB_FUN_TSAYBARCODE
tselex size = 12027
_HB_FUN_TSELEX
tskinbtn size = 2304
_HB_FUN_TSKINBUTTON
tsmtp size = 14667
_HB_FUN_CFILENOPATHSMTP _HB_FUN_TSMTP
tsocket size = 6868
_HB_FUN_SHOWIP _HB_FUN_TSOCKET
tstruct size = 4048
_HB_FUN_THISSTRUCT _HB_FUN_TSTRUCT
tswitch size = 9327
_HB_FUN_TSWITCH
ttabctrl size = 4304
_HB_FUN_TTABCONTROL
ttitle size = 21199
_HB_FUN_TTITLE _HB_FUN_TTITLEIMG
_HB_FUN_TTITLETEXT
ttmpicke size = 5776
_HB_FUN_TTIMEPICK
ttoast size = 21155
_HB_FUN_TIPTIMEHIDE _HB_FUN_TIPTRANSFLICKER
_HB_FUN_TIPTRANSHIDE _HB_FUN_TIPTRANSSHOW
_HB_FUN_TTOAST
ttray size = 4580
_HB_FUN_GETNOTIFYICONDATA _HB_FUN_TTRAYICON
ttreevie size = 12739
_HB_FUN_TTREEVIEW
ttvitem size = 4528
_HB_FUN_TTVITEM
ttxtedit size = 33555
_HB_FUN_TTXTEDIT _HB_FUN_TTXTUNDO
ttxtfile size = 5112
_HB_FUN_TTXTFILE
twebcam size = 9295
_HB_FUN_GETVIDEOCAPDRIVER _HB_FUN_TWEBCAM
_HB_FUN__WEBCAM_EVENT
twebclie size = 2084
_HB_FUN_TWEBCLIENT
twebserv size = 9472
_HB_FUN_CLIENTIP _HB_FUN_GETQUERY
_HB_FUN_SERVERIP _HB_FUN_TWEBSERVER
_HB_FUN_UNESCAPE
twebsock size = 4824
_HB_FUN_TWEBSOCKETSERVER
twebview size = 5964
_HB_FUN_BUILDWEBVIEW _HB_FUN_ISWEBVIEWAVAILABLE
_HB_FUN_TWEBVIEW _HB_FUN_TWEBVIEWITEM
_HB_FUN_WEBVIEW _HB_FUN_WEBVIEWITEMREDEFINE
_HB_FUN_WEBVIEW_GETVALUES _HB_FUN_WEBVIEW_HANDLEEVENT
twebview2 size = 5936
_HB_FUN_FW_WEBVIEW _HB_FUN_TWEBVIEW2
_HB_FUN_WEBVIEW2_ONBIND _HB_FUN_WEBVIEW2_ONEVAL
_HB_FUN_WEBVIEW2_ONNAVIGATIONCOMPLETED
tweekv size = 8411
_HB_FUN_TWEEKVIEW
tyacc size = 4448
_HB_FUN_TYACC
uidialog size = 6852
_HB_FUN_DLGBARTITLEUI _HB_FUN_DLGVS
_HB_FUN_NCUANTAS _HB_FUN_TDIALOGUI
uiwindow size = 51843
_HB_FUN_CARGAIMGBTT _HB_FUN_CHANGECOLORBAR
_HB_FUN_CHANGECOLORIMG _HB_FUN_DRAWTXTROW
_HB_FUN_KEYBD_EVENT _HB_FUN_LOADIMGUI
_HB_FUN_SINB _HB_FUN_TWINDOWSUI
urllink size = 5628
_HB_FUN_TURLLINK
valblank size = 4830
_HB_FUN_ARRAYTOTEXT _HB_FUN_CCLRTOCODE
_HB_FUN_CVALTOCHAR _HB_FUN_FW_CLRTOHTML
_HB_FUN_FW_DEFAULT _HB_FUN_FW_READVAR
_HB_FUN_IFNIL _HB_FUN_NRGBADD
_HB_FUN_NRGBRESET _HB_FUN_UVALBLANK
_HB_FUN_XEVAL
valtostr size = 23285
_HB_FUN_ARRAYTOTEXTBOX _HB_FUN_ARRTOHASH
_HB_FUN_ARRTOJSON _HB_FUN_CNUM2EXPFORMAT
_HB_FUN_CNUMTOSTR _HB_FUN_COMPAREUNISTR
_HB_FUN_CURRENCYSYMBOL _HB_FUN_CVALTOSTR
_HB_FUN_DATETIMEFROMFILETIME _HB_FUN_DBF_FIELDPIC
_HB_FUN_EXPANDNUMPICT _HB_FUN_FITNUMPICTTOVAL
_HB_FUN_FWNUMFORMAT _HB_FUN_FW_ADDMONTH
_HB_FUN_FW_ADDTIME _HB_FUN_FW_AGE
_HB_FUN_FW_ALLTRIM _HB_FUN_FW_ARRAYASLIST
_HB_FUN_FW_ARRAYTOCSV _HB_FUN_FW_ARRAYTOHTML
_HB_FUN_FW_CONCAT _HB_FUN_FW_CONCAT_WS
_HB_FUN_FW_DATETOUNIX _HB_FUN_FW_DTOT
_HB_FUN_FW_JSONDECODE _HB_FUN_FW_LISTASARRAY
_HB_FUN_FW_LTRIM _HB_FUN_FW_MTHSLAPSED
_HB_FUN_FW_NEXTBIRTHDAY _HB_FUN_FW_PROPERCASE
_HB_FUN_FW_RTRIM _HB_FUN_FW_SETJSONHUMAN
_HB_FUN_FW_STOT _HB_FUN_FW_STUFF
_HB_FUN_FW_TABLESTYLEHTML _HB_FUN_FW_TIMEPART
_HB_FUN_FW_TIMEZONE _HB_FUN_FW_TIMEZONENAME
_HB_FUN_FW_TRANSFORM _HB_FUN_FW_TRIM
_HB_FUN_FW_TTOD _HB_FUN_FW_UNIXTODATE
_HB_FUN_FW_UTCTOLOCAL _HB_FUN_FW_UTF8LEFT
_HB_FUN_FW_UTF8RIGHT _HB_FUN_FW_UTF8STUFF
_HB_FUN_FW_UTF8SUBSTR _HB_FUN_FW_VALTOCSV
_HB_FUN_FW_VALTOEXP _HB_FUN_FW_VALTOHTML
_HB_FUN_FW_YMDLAPSED _HB_FUN_INTPICT
_HB_FUN_ISBINARYDATA _HB_FUN_ISROMANNUMBER
_HB_FUN_ISTEXTUNICODE _HB_FUN_MAKEIID
_HB_FUN_NSTRTONUM _HB_FUN_NUMPICT
_HB_FUN_NUMPICTADDCURRENCY _HB_FUN_NUMPICTFORVAL
_HB_FUN_STRBETWEEN _HB_FUN_TABLETOHTMLPAGE
_HB_FUN_UCHARTOVAL _HB_FUN_UTC_TIMESTAMP
_HB_FUN_UTF16TOUTF8 _HB_FUN_UTF8TOUTF16
_HB_FUN_WHEELSCROLL
valtostt size = 248
_HB_FUN_FW_DT2STR _HB_FUN_FW_STR2DT
video size = 2832
_HB_FUN_TVIDEO
vistamnu size = 22394
_HB_FUN_C5SETSCROLLINFO _HB_FUN_INTERSECTRECT
_HB_FUN_TVISTAMENU _HB_FUN_TVISTAMENUITEM
vrd size = 44247
_HB_FUN_DELFILE _HB_FUN_ENTRYNR
_HB_FUN_FULLPATHNAME _HB_FUN_GETINIENTRY
_HB_FUN_GETINISECTION _HB_FUN_GETPPSECTION
_HB_FUN_REGOPENKEYEXA _HB_FUN_REGQUERYVALUEEXA
_HB_FUN_VRD _HB_FUN_VRD_ATOKEN
_HB_FUN_VRD_ERSTART _HB_FUN_VRD_GETFIELD
_HB_FUN_VRD_GETFULLPATH _HB_FUN_VRD_GETGROUP
_HB_FUN_VRD_GETREGISTRY _HB_FUN_VRD_GL
_HB_FUN_VRD_LF2SF _HB_FUN_VRD_NEWSTRUCTURE
_HB_FUN_VRD_PRREPORT _HB_FUN_VRD_SETFIELD
_HB_FUN_VRD_STRCOUNT _HB_FUN_VRD_XTOC
vrdbcode size = 11700
_HB_FUN_VRDBARCODE
vrdini size = 3592
_HB_FUN_GETPROFSECT _HB_FUN_TINIER
vrditem size = 9016
_HB_FUN_VRDITEM
vstrfun1 size = 5496
_HB_FUN_FINDMATCH _HB_FUN_FIRSTWORD
_HB_FUN_FW_AT _HB_FUN_FW_EXPRNASBLOCK
_HB_FUN_FW_STRICMP _HB_FUN_FW_STRIPCOMMENTS
_HB_FUN_ISINLIST _HB_FUN_VALTYPEX
wbrowse size = 44751
_HB_FUN_TWBROWSE _HB_FUN__AFIELDS
webapp size = 9352
_HB_FUN_BUTTONHTML _HB_FUN_CHECKBOXHTML
_HB_FUN_CTRLSHTML _HB_FUN_EDITHTML
_HB_FUN_GETWEBAPP _HB_FUN_ISWEBAPP
_HB_FUN_SETWEBAPP _HB_FUN_STATICHTML
_HB_FUN_WA_ADDDIALOG _HB_FUN_WA_CONTROLLER
_HB_FUN_WA_EXISTDIALOG _HB_FUN_WA_GETDIALOGFROMID
_HB_FUN_WA_GETDIALOGFROMLINK _HB_FUN_WA_HEADER
_HB_FUN_WA_SHOWCODEDIALOGS _HB_FUN_WEBSERVER
webserver size = 5462
_HB_FUN_HBWEBSERVER _HB_FUN_HB_URLDECODE
_HB_FUN_OBJSETDATA _HB_FUN_OBJTOCHAR
window size = 66407
_HB_FUN_AREAD _HB_FUN_ASAVE
_HB_FUN_ATOTEXT _HB_FUN_BRWCLASSES
_HB_FUN_CLEARDATASLIST _HB_FUN_DBUFFEREND
_HB_FUN_DEVICETOUCHSPACE _HB_FUN_FW_TOUCHFRIENDLY
_HB_FUN_GETALLWIN _HB_FUN_GETDROPINFO
_HB_FUN_GETMSGLOG _HB_FUN_GETSETWINSYSLOG
_HB_FUN_GETWNDDEFAULT _HB_FUN_MSGLOG
_HB_FUN_NWINDOWS _HB_FUN_OREAD
_HB_FUN_OWNDFROMHWND _HB_FUN_SETALPHA
_HB_FUN_SETBALLOON _HB_FUN_SETDRAGBEGINWND
_HB_FUN_SETDROPINFO _HB_FUN_SETSKINS
_HB_FUN_SETWNDDEFAULT _HB_FUN_STARTFWLOG
_HB_FUN_TWINDOW _HB_FUN_WNDCREATEERROR
_HB_FUN_WNDMAIN _HB_FUN_WNDPARENTS
_HB_FUN__FWH
wininet size = 7844
_HB_FUN_FTPCREATEDIRECTORY _HB_FUN_FTPDELETEFILE
_HB_FUN_FTPFINDFIRSTFILE _HB_FUN_FTPGETFILE
_HB_FUN_FTPOPENFILE _HB_FUN_FTPPUTFILE
_HB_FUN_FTPRENAMEFILE _HB_FUN_FTPSETCURRENTDIRECTORY
_HB_FUN_INTERAUTHA _HB_FUN_INTERNETAT
_HB_FUN_INTERNETAU _HB_FUN_INTERNETCLOSEHANDLE
_HB_FUN_INTERNETCONNECT _HB_FUN_INTERNETDI
_HB_FUN_INTERNETFINDNEXTFILE _HB_FUN_INTERNETGO
_HB_FUN_INTERNETHA _HB_FUN_INTERNETOPEN
_HB_FUN_INTERNETREADFILE _HB_FUN_INTERNETSETFILEPOINTER
_HB_FUN_INTERNETST _HB_FUN_INTERNETWRITEFILE
_HB_FUN_INTRESPINF _HB_FUN_WININET
winrt size = 3796
_HB_FUN_ROGETACTIVATIONFACTORY _HB_FUN_ROINITIALIZE
_HB_FUN_ROUNINITIALIZE _HB_FUN_TOAST
_HB_FUN_WINDOWSCREATESTRING _HB_FUN_WINDOWSDELETESTRING
_HB_FUN_WINDOWSGETSTRINGRAWBUFFER _HB_FUN_WINRTSTRING
wqout size = 400
_HB_FUN_WQOUT
xbrcode size = 19199
_HB_FUN_CFONTCODE _HB_FUN_TXBRCODE
_HB_FUN_TXBRCOLCODE
xbrgetdt size = 7748
_HB_FUN_RESETCAL _HB_FUN_SETUPCOL
_HB_FUN_TDTXBROWSE _HB_FUN_XBRGETDATE
xbrowse size = 264311
_HB_FUN_CALCLINEWH _HB_FUN_CONTRASTCOLOR
_HB_FUN_DRAWHORZ _HB_FUN_DRAWPEN
_HB_FUN_DRAWVERT _HB_FUN_EXTRACTLINE
_HB_FUN_HASHTREE _HB_FUN_ISRECORDSET
_HB_FUN_PARSEXBRCOLSPEC _HB_FUN_SETKINETIC
_HB_FUN_SETXBROWSE _HB_FUN_TXBROWS
_HB_FUN_TXBROWSE _HB_FUN_TXBRWCOLUMN
_HB_FUN_XADS_KEYGOTO _HB_FUN_XBRADOSAVE
_HB_FUN_XBREDITMEMO _HB_FUN_XBRGETSELECTALL
_HB_FUN_XBRHEXEDIT _HB_FUN_XBRIMAGEEDIT
_HB_FUN_XBRJUSTIFY _HB_FUN_XBRNUMFORMAT
_HB_FUN_XBROWSABLEOBJ _HB_FUN_XBROWSENEW
_HB_FUN_XBRSQLRDDMODE _HB_FUN_XBRWSETDATASOURCE
_HB_FUN_XREPORT
xbrowser size = 10775
_HB_FUN_XBROWSE
xcbrowse size = 42219
_HB_FUN_CLICKOUTEND _HB_FUN_DAFMTOTXT
_HB_FUN_DRAWROWN _HB_FUN_GENMENUBLOCK
_HB_FUN_TXCBROWS _HB_FUN_TXCBROWSE
_HB_FUN_TXCBRWCOLUMN _HB_FUN_XBRWLINDET
_HB_FUN_XBRWTEXTFILE _HB_FUN_XCBROWSEMNU
_HB_FUN_XCBROWSENEW _HB_FUN_XCBROWSETREE
_HB_FUN_XMAKETREE _HB_FUN_XSUBTREE
_HB_FUN_XTOGGLEFOLDER
ximage size = 29213
_HB_FUN_ANGLE3PT _HB_FUN_ROTATEBMP
_HB_FUN_TXIMAGE _HB_FUN_WMF2EMFX
_HB_FUN_XIMAGE _HB_FUN_XIMAGEARRAY
xmlview size = 5224
_HB_FUN_FW_XMLVIEW _HB_FUN_XBROWSEXML
xpad size = 740
_HB_FUN_GETFREESYSTEMRESOURCES _HB_FUN_XPADC
_HB_FUN_XPADL _HB_FUN_XPADR
Code: Select all | Expand
Publics by module
activex size = 6872
_HB_FUN_TACTIVEX _HB_FUN_THACTIVEX
adofuncs size = 49883
_HB_FUN_ADOCREATECOLSQL _HB_FUN_ADODEFAULT
_HB_FUN_ADONULL _HB_FUN_ADOROLLUPTREE
_HB_FUN_ADOROLLUPTREEBROWSE _HB_FUN_DBMSNUM
_HB_FUN_FIELDTYPEADOTODBF _HB_FUN_FWADOAPPENDBLANK
_HB_FUN_FWADOCREATETABLE _HB_FUN_FWADODELRECORD
_HB_FUN_FWADOFIELDDEC _HB_FUN_FWADOFIELDLEN
_HB_FUN_FWADOFIELDSIZE _HB_FUN_FWADOFIELDSTRUCT
_HB_FUN_FWADOFIELDTYPE _HB_FUN_FWADOLOADRECORD
_HB_FUN_FWADOMEMOSIZETHRESHOLD _HB_FUN_FWADOSAVERECORD
_HB_FUN_FWADOSTRUCT _HB_FUN_FW_ACEVER
_HB_FUN_FW_ADOADDCOL _HB_FUN_FW_ADOADDMODICOLSQL
_HB_FUN_FW_ADOAPPLYPARAMS _HB_FUN_FW_ADOCATALOGS
_HB_FUN_FW_ADOCONNECTIONSTRING _HB_FUN_FW_ADOCREATEINDEX
_HB_FUN_FW_ADOCREATETABLESQL _HB_FUN_FW_ADOCURRENTDB
_HB_FUN_FW_ADODATETIME _HB_FUN_FW_ADODROPINDEX
_HB_FUN_FW_ADOEXPORTTODBF _HB_FUN_FW_ADOFIELDUPDATEABLE
_HB_FUN_FW_ADOIMPORTFROMDBF _HB_FUN_FW_ADOINDEXES
_HB_FUN_FW_ADOMODIFYCOL _HB_FUN_FW_ADOPIVOTARRAY
_HB_FUN_FW_ADOPIVOTRS _HB_FUN_FW_ADOPRIMARYKEY
_HB_FUN_FW_ADOQUERYRESULT _HB_FUN_FW_ADORECONNECT
_HB_FUN_FW_ADORSTOCSV _HB_FUN_FW_ADORSTOHTML
_HB_FUN_FW_ADORSTOTEXT _HB_FUN_FW_ADOSELECTDB
_HB_FUN_FW_ADOTABLEEXISTS _HB_FUN_FW_ADOTABLES
_HB_FUN_FW_ADOTOEXCEL _HB_FUN_FW_ADOUNQUOTE
_HB_FUN_FW_ARRAYASRECORDSET _HB_FUN_FW_COMPACTMDB
_HB_FUN_FW_CREATEMDB _HB_FUN_FW_DATETOADO
_HB_FUN_FW_DATETOSQL _HB_FUN_FW_FILTER2WHERE
_HB_FUN_FW_FILTERDBF2ADO _HB_FUN_FW_GETADOERROR
_HB_FUN_FW_MSSQLDB _HB_FUN_FW_MSSQL_BACKUP
_HB_FUN_FW_MSSQL_RESTORE _HB_FUN_FW_ONADOERROR
_HB_FUN_FW_OPENADOCONNECTION _HB_FUN_FW_OPENADOEXCELBOOK
_HB_FUN_FW_OPENADOEXCELSHEET _HB_FUN_FW_OPENRECORDSET
_HB_FUN_FW_OPENTRECSET _HB_FUN_FW_QUOTEDCOLSQL
_HB_FUN_FW_RDBMSNAME _HB_FUN_FW_RECSETHEADERS
_HB_FUN_FW_REOPENRECORDSET _HB_FUN_FW_SHOWADOERROR
_HB_FUN_FW_VALTOSQL _HB_FUN_MSSQL_BULKIMPORTDBF
_HB_FUN_RSGETROWS _HB_FUN_RSTOHASH
_HB_FUN_RSTOJSON _HB_FUN_TADOCOMMAND
_HB_FUN_TRM _HB_FUN_UTYPETOBLANK
alert size = 3212
_HB_FUN_ALERT
autoget size = 11251
_HB_FUN_TAUTOGET _HB_FUN_TGETLIST
bar size = 25647
_HB_FUN_GRADIENT2000 _HB_FUN_TBAR
bartabs size = 2684
_HB_FUN_TBARTABS
bitmap size = 16799
_HB_FUN_PALBMPFREE _HB_FUN_PALBMPNEW
_HB_FUN_TBITMAP
block size = 1228
_HB_FUN_TBLOCK
browse size = 4408
_HB_FUN_BROWSE _HB_FUN_REPORT
brush size = 13063
_HB_FUN_GRADIENTBRUSH _HB_FUN_RESIZEBITMAP
_HB_FUN_TBRUSH
brushex size = 1312
_HB_FUN_TBRUSHEX
btnbmp size = 36407
_HB_FUN_TBTNBMP
btnflat size = 8231
_HB_FUN_TBTNFLAT
button size = 6912
_HB_FUN_TBUTTON
buttonb size = 6416
_HB_FUN_TBUTTONBMP
c5lib size = 8935
_HB_FUN_AC5BOX _HB_FUN_ASPLIT
_HB_FUN_C5BOX _HB_FUN_COLORES
_HB_FUN_CREAAROWRIGHT _HB_FUN_CREABITMAPEX
_HB_FUN_CREABITMAPEX2 _HB_FUN_CREAVGRIP
_HB_FUN_DLGCHANGESIZE _HB_FUN_DRAWMTEXT
_HB_FUN_FINDCHAR _HB_FUN_FONTUNDER
_HB_FUN_GENIMAGELIST _HB_FUN_GETBITMAP16
_HB_FUN_GETBITMAPSIZE _HB_FUN_GETDEFFONT
_HB_FUN_GETORIGINALORDEN _HB_FUN_ICON2BMP
_HB_FUN_LFN2SFNEX _HB_FUN_LOADACCESOS
_HB_FUN_LOADICONEX _HB_FUN_LOADIMAGEEX
_HB_FUN_LOADIMAGEEX2 _HB_FUN_LTHEMES
_HB_FUN_MEMOWRITEX _HB_FUN_RESTORESCREENFROMBMP
_HB_FUN_SAVESCREENASBMP _HB_FUN_STRCOUNT
_HB_FUN_XADRIVES _HB_FUN___MIRROW
c5tooltp size = 11531
_HB_FUN_TC5TOOLTIP
calinfo size = 6456
_HB_FUN_TCALINFO
callstac size = 2968
_HB_FUN_CCALLSTACK _HB_FUN_SHOWCALLSTACK
_HB_FUN_STACKVARS
chatgpt size = 2760
_HB_FUN_TCHATGPT
checkbox size = 7160
_HB_FUN_TCHECKBOX
checkres size = 1482
DelResource _HB_FUN_CHECKRES
_HB_FUN_FWADDRESOURCE _HB_FUN_FWDELRESOURCE
_HB_FUN_SETRESDEBUG _RegisterResource
clipbrd size = 4304
_HB_FUN_GETCLIPCONTENTFORMAT _HB_FUN_TCLIPBOARD
clipmore size = 492
_HB_FUN_RLNEW _HB_FUN_RLQUERY
combobox size = 20863
_HB_FUN_SETCBXCOLORFOCUS _HB_FUN_TCOMBOBOX
_HB_FUN_TDRAWITEMSTRUCT
combom size = 13759
_HB_FUN_TCOMBOMETRO
control size = 30079
_HB_FUN_GETGRIDSIZE _HB_FUN_SETGRIDSIZE
_HB_FUN_TCONTROL
crcard size = 2044
_HB_FUN_FW_VALIDCREDITCARD
cursor size = 3512
_HB_FUN_TCURSOR
database size = 39523
_HB_FUN_TDATABASE
datarow size = 47499
_HB_FUN_BTNCHOOSECOLOR _HB_FUN_EXTRACTBMP
_HB_FUN_FW_COPYRECORD _HB_FUN_FW_EDITHASH
_HB_FUN_FW_PASTERECORD _HB_FUN_FW_RECORD
_HB_FUN_MAKEBMPARRAY _HB_FUN_TDATAROW
_HB_FUN_XEDIT
dbcombo size = 9040
_HB_FUN_TDBCOMBO
dbffunc1 size = 2948
_HB_FUN_DBF_APPLYPARAMS _HB_FUN_DBF_NEEDSLOCK
_HB_FUN_DBROLLBACK _HB_FUN_DBROLLBACKALL
_HB_FUN_FIELDINEXPR _HB_FUN_FW_DBFTOARRAY
_HB_FUN_FW_DBFTOHASH _HB_FUN_FW_DBFTOHTML
_HB_FUN_FW_DBFTOJSON _HB_FUN_ORDERTAGINFO
dbffunc2 size = 16256
_HB_FUN_CONVERTTYPE _HB_FUN_DBFAPPEND
_HB_FUN_FW_ARRAYTODBF _HB_FUN_FW_ARRAYTODBFEX
_HB_FUN_FW_CDXCREATE _HB_FUN_FW_COPYDBFTO
_HB_FUN_FW_DBFILTERBLOCK _HB_FUN_FW_DBFLOOKUP
_HB_FUN_FW_DBFRENAMEFIELD _HB_FUN_FW_DBFSQLQUERY
_HB_FUN_FW_DBFSTRUCT _HB_FUN_FW_DBFTOEXCEL
_HB_FUN_FW_DBINSERT _HB_FUN_FW_EXCELTODBF
_HB_FUN_FW_FIELDSPUT _HB_FUN_FW_HASHTOREC
_HB_FUN_FW_INDEXINFO _HB_FUN_FW_RECTOHASH
_HB_FUN_FW_RECTOJSON _HB_FUN_FW_SAVEARRAYTODBF
_HB_FUN_FW_SETRECYCLEDELETED _HB_FUN_SPLITATAS
dbffunc9 size = 1808
_HB_FUN_GETRECYCLEDREC
dbgabout size = 1936
_HB_FUN_DBGABOUT
dbgalert size = 1948
_HB_FUN_DBGALERT
dbgmemo size = 1812
_HB_FUN_DBGMEMO
dbgprint size = 2100
_HB_FUN_DBGPRINT
dbgtable size = 2688
_HB_FUN_DBGTABLE
dbgtrace size = 2976
_HB_FUN_DBGTRACE
dbtools size = 1396
_HB_FUN_AGETWORKAREAS _HB_FUN_CGETNEWALIAS
_HB_FUN_CGETNEWALIASNAME _HB_FUN_DUPRECORD
_HB_FUN_GETORDNAMES
dde size = 2756
_HB_FUN_DDEACK _HB_FUN_DDETERMINATE
_HB_FUN_TDDE
ddeclien size = 4416
_HB_FUN_TDDECLIENT
dialog size = 23135
_HB_FUN_FW_SETTRUEPIXEL _HB_FUN_SETCENTERONPARENT
_HB_FUN_SETDIALOGESC _HB_FUN_SETDLGGRADIENT
_HB_FUN_TDIALOG
dlgfind size = 1896
_HB_FUN_DLGFINDTEXT _HB_FUN_TDLGFIND
dlgs32 size = 2296
_HB_FUN_CGETDIR32 _HB_FUN_CGETFILE32
_HB_FUN_NGETFILTER32
dostofwh size = 5760
_HB_FUN_ADDDOSMENUPROMPT _HB_FUN_EXECDOSMENUPROMPT
_HB_FUN_FW_DBEDIT _HB_FUN_FW_DOSCLEAR
_HB_FUN_FW_DOSDIALOG _HB_FUN_FW_DOSREAD
_HB_FUN_FW_SETCOLOR
dotnet_ size = 6284
_HB_FUN_CLRCREATEINSTANCE _HB_FUN_FW_DOTNET
_HB_FUN_FW_DOTNETERROR _HB_FUN_TDOTNET
drawbmp size = 860
_HB_FUN_DRAWTEXTTRANSPARENT _HB_FUN_DRAWTILED
_HB_FUN_DRAWTRANSPARENT
drxl size = 9939
_HB_FUN_CGETFILEXLSX _HB_FUN_CTEMPXLSX
_HB_FUN_DRXLSFORMAT _HB_FUN_DRXLSXLINKED
_HB_FUN_DRXLSXOBJ _HB_FUN_FWDRXLSX
_HB_FUN_USEDRXLSX _HB_FUN_USEXLSXLIB
_HB_FUN_XLSXLIBLINKED _HB_FUN_XLSXLIBOBJ
_HB_FUN_XLSXOBJ
edit size = 7819
_HB_FUN_TEDIT
editcell size = 1664
_HB_FUN_EDITCELL
epfunc size = 896
_HB_FUN_EP_GETTEMPPATH _HB_FUN_EP_LINKEDTOAPP
_HB_FUN_EP_SETPATH _HB_FUN_EP_TIDYUP
ereport size = 74819
_HB_FUN_AREACHANGE _HB_FUN_AREAHIDE
_HB_FUN_AREAPROPERTIES _HB_FUN_BARMENU
_HB_FUN_BETAVERSION _HB_FUN_CHECKSTYLE
_HB_FUN_CLICKLISTTREE _HB_FUN_CLIENTWINDOWS
_HB_FUN_DECLAREPUBLICS _HB_FUN_DEFINEFONTS
_HB_FUN_DELSELECTITEMS _HB_FUN_DRAWRULERHORZLINE
_HB_FUN_DRAWRULERVERTLINE _HB_FUN_ERBUILDMENU
_HB_FUN_EREPORT _HB_FUN_ERGETALLITEMS
_HB_FUN_ER_MDICHILD _HB_FUN_ER_MOUSEWHEEL
_HB_FUN_ER_SETCOLOR _HB_FUN_EXITEREPORT
_HB_FUN_FONTSANDCOLORS _HB_FUN_GENERATESOURCE
_HB_FUN_GETALLCOLORS _HB_FUN_GETCOLOR
_HB_FUN_GETCURRENTFONT _HB_FUN_GETFONTS
_HB_FUN_GETFONTTEXT _HB_FUN_GETPAPERSIZES
_HB_FUN_INIMAINWINDOW _HB_FUN_ITEMLIST
_HB_FUN_LISTTREES _HB_FUN_MDL2
_HB_FUN_MSGBARINFOS _HB_FUN_OPTIONS
_HB_FUN_PAINTGRID _HB_FUN_POPUPMENU
_HB_FUN_PREVIEWMENU _HB_FUN_PREVIEWREFRESH
_HB_FUN_REPORTSETTINGS _HB_FUN_SCROLLHORIZONT
_HB_FUN_SCROLLVERTICAL _HB_FUN_SELECTFONT
_HB_FUN_SET2COLOR _HB_FUN_SET3COLOR
_HB_FUN_SETAREAFORMULABTN _HB_FUN_SETGENERALSETTINGS
_HB_FUN_SETGRAPHTREEBMP _HB_FUN_SETMAINWND
_HB_FUN_SETSCROLLBAR _HB_FUN_SETTITLECOLOR
_HB_FUN_SETWINNULL _HB_FUN_SHOWAREASONBAR
_HB_FUN_SHOWCOLORCHOICE _HB_FUN_SHOWFONTCHOICE
_HB_FUN_STARTMESSAGE _HB_FUN_TEASYREPORT
_HB_FUN_TSCRIPT _HB_FUN_TTHISREPORT
_HB_FUN_WNDKEYDOWNACTION
erfile size = 22807
_HB_FUN_ASKSAVEFILES _HB_FUN_CHECKFILENAME
_HB_FUN_CREATEBACKUP _HB_FUN_CREATENEWREPORT
_HB_FUN_ER_NEWREPORT _HB_FUN_ER_SAVEAS
_HB_FUN_FILEINFOS _HB_FUN_MOVERECORD
_HB_FUN_OPENFILE _HB_FUN_SAVEASFILE
_HB_FUN_SAVEFILE _HB_FUN_SETNEWREPORTDEFAULTS
_HB_FUN_SETSAVE _HB_FUN_SETSAVEINFOS
eritems size = 45663
_HB_FUN_BARCODEPROPERTIES _HB_FUN_DEACTIVATEITEM
_HB_FUN_DELETEALLITEMS _HB_FUN_DELETEITEM
_HB_FUN_DELITEMWITHKEY _HB_FUN_DRAWBARCODE
_HB_FUN_DRAWGRAPHIC _HB_FUN_EDITSOURCECODE
_HB_FUN_ELEMENTACTIONS _HB_FUN_ER_SHOWITEM
_HB_FUN_GETCOLORBTN _HB_FUN_GETGRAPHINDEX
_HB_FUN_GETGRAPHNAME _HB_FUN_GETIMAGESIZE
_HB_FUN_GETITEMDLGPOS _HB_FUN_GETOVAR
_HB_FUN_GRAPHICPROPERTIES _HB_FUN_IMAGEPROPERTIES
_HB_FUN_ISGRAPHIC _HB_FUN_ITEMCOPY
_HB_FUN_ITEMPASTE _HB_FUN_ITEMPOPUPMENU
_HB_FUN_ITEMPROPERTIES _HB_FUN_KEYDOWNACTION
_HB_FUN_MSGBARITEM _HB_FUN_MULTIITEMPROPERTIES
_HB_FUN_NEWITEM _HB_FUN_SAVEBARITEM
_HB_FUN_SAVEGRAITEM _HB_FUN_SAVEIMGITEM
_HB_FUN_SAVEITEMGENERAL _HB_FUN_SAVETEXTITEM
_HB_FUN_SETFORMULABTN _HB_FUN_SETITEMDEFAULT
_HB_FUN_SETITEMDLG _HB_FUN_SETITEMSIZE
_HB_FUN_TEXTPROPERTIES _HB_FUN_UPDATEITEMS
eritems2 size = 2964
_HB_FUN_INVERTSELECTION _HB_FUN_MARKITEM
_HB_FUN_MOVESELECTION _HB_FUN_MSGSELECTED
_HB_FUN_REFRESHSELECTION _HB_FUN_SELECTALLITEMS
_HB_FUN_SELECTITEM _HB_FUN_STARTSELECTION
_HB_FUN_STOPSELECTION _HB_FUN_TOGGLEITEMSELECTION
_HB_FUN_UNSELECTALL
errsysw size = 9316
_HB_FUN_ERRORLINK _HB_FUN_ERRORSYS
_HB_FUN_FWERRORSYS _HB_FUN_FW_GT
_HB_FUN_GETCPU _HB_FUN_HB_GTSYS
_HB_FUN_SETERRORDIALOG _HB_FUN_SETERRORFILENAME
_HB_FUN_SETERRORPATH _HB_FUN_SETPOSTERRORACTION
ertools size = 34983
_HB_FUN_ADD2UNDO _HB_FUN_ADDTORECENTDOCS
_HB_FUN_ADELETE _HB_FUN_ALTPRINTREPORT
_HB_FUN_CHECKEXPRESSION _HB_FUN_CLEARUNDOREDO
_HB_FUN_CLOSEUNDO _HB_FUN_COPYTOEXPRESS
_HB_FUN_CREATEDBFSEXPRESSIONS _HB_FUN_CREATENEWFILE
_HB_FUN_DATABASES _HB_FUN_DELDBASE
_HB_FUN_DELETEAREA _HB_FUN_EDITLANGUAGE
_HB_FUN_ERCOPYFILE _HB_FUN_ER_CHECKPATH
_HB_FUN_ER_GETPIXEL _HB_FUN_EXPRESSIONS
_HB_FUN_GETBARCODES _HB_FUN_GETCMINCH
_HB_FUN_GETDBASE _HB_FUN_GETDBFIELD
_HB_FUN_GETDIVISIBLE _HB_FUN_GETEXPRFIELDS
_HB_FUN_GETFIELD _HB_FUN_GETFILE
_HB_FUN_GETLANGUAGE _HB_FUN_GETSOURCETOOLTIP
_HB_FUN_GL _HB_FUN_GOBOTTOM
_HB_FUN_INICOLOR _HB_FUN_INSERTAREA
_HB_FUN_ISDIVISIBLE _HB_FUN_ISINTERSECTRECT
_HB_FUN_ISPOINTINRECT _HB_FUN_ISSECONDPAGE
_HB_FUN_MAINCAPTION _HB_FUN_MULTIUNDOREDO
_HB_FUN_OPENDATABASES _HB_FUN_OPENLANGUAGE
_HB_FUN_OPENUNDO _HB_FUN_PRINTREPORT
_HB_FUN_REDO _HB_FUN_REFRESHREDO
_HB_FUN_REFRESHUNDO _HB_FUN_SAVEDATABASES
_HB_FUN_STRATNUM _HB_FUN_UNDO
_HB_FUN_UNDOEXPRESSION _HB_FUN_UNDOREDOMENU
_HB_FUN_VRD_MSGRUN
esreport size = 49423
_HB_FUN_ERSTART _HB_FUN_FWER_ITEM
_HB_FUN_FWER_PRREPORT _HB_FUN_FW_EREPORT
etc size = 808
_HB_FUN_FNADDBITMAP _HB_FUN___CHANGESTYLEWINDOW
expbuild size = 8480
_HB_FUN_CGETEXPRESSION _HB_FUN_FWARGSLIST
_HB_FUN_FWCHECKEXPRESSION _HB_FUN_FWEXPBUILDER
fget size = 71131
_HB_FUN_GTFTOTXT _HB_FUN_TFGET
_HB_FUN_TXTTOGTF
fileedit size = 12247
_HB_FUN_BROWSEITEMS _HB_FUN_CELLVARPUT
_HB_FUN_DBREPLACE _HB_FUN_DUPLICATE
_HB_FUN_EREDITCELL _HB_FUN_FEBUILDMENU
_HB_FUN_FEFILEEDIT _HB_FUN_FEGETFILE
_HB_FUN_FEOPENFILE _HB_FUN_FILEEDITABOUT
_HB_FUN_GETTYPE _HB_FUN_LASTENTRYNR
_HB_FUN_REPLACEITEMS
filename size = 7192
_HB_FUN_ADRIVES _HB_FUN_AFINDFILE
_HB_FUN_CFILEDISC _HB_FUN_CFILEEXT
_HB_FUN_CFILEMASK _HB_FUN_CFILENAME
_HB_FUN_CFILENOEXT _HB_FUN_CFILENOPATH
_HB_FUN_CFILEPATH _HB_FUN_CFILESETEXT
_HB_FUN_CFILESUBDIR _HB_FUN_CFILEUNC
_HB_FUN_CNEWFILENAME _HB_FUN_CRELATIVEPATH
_HB_FUN_CTEMPFILE _HB_FUN_CURDRIVE
_HB_FUN_FDATE _HB_FUN_FOLDEREXISTS
_HB_FUN_FSIZE _HB_FUN_FTIME
_HB_FUN_FW_MEMOWRIT _HB_FUN_FW_NETRMTNAME
_HB_FUN_GETIMAGE _HB_FUN_ISFILEEXT
_HB_FUN_LFILEISREMOTE _HB_FUN_LISDIR
_HB_FUN_LOGFILE _HB_FUN_LOGSTACK
_HB_FUN_MAPDRIVE _HB_FUN_MOVEFILE
_HB_FUN_REMOVEDIR _HB_FUN_SETFOLDERICON
_HB_FUN_SETLOGFILE
fldex size = 8085
_CalcPos _HB_FUN_CALPOS
_HB_FUN_CALPOSITION _RetriveFldInfo
_hb_FWarrayClone
fline size = 1380
_HB_FUN_TFLINE
folder size = 16391
_HB_FUN_TFOLDER
font size = 13215
_HB_FUN_FONTFROMTEXT _HB_FUN_FONTTOTEXT
_HB_FUN_FW_CHECKFONT _HB_FUN_GETUSEDFONTS
_HB_FUN_TFONT
ftranslate size = 3096
_HB_FUN_FW_TRANSLANG _HB_FUN_LISTLANGS
_HB_FUN_TRANSACTION
fwbarcod size = 14352
_HB_FUN_FWER_BARCODE _HB_FUN_FWER_BARCODE_CHKDIGIT
fwdbg size = 42467
_HB_FUN_DBGGETODBG _HB_FUN_DBGSETODBG
_HB_FUN_DBGSOALARM _HB_FUN_DBGSOALERT
_HB_FUN_DBGSOBLEEP _HB_FUN_DBGSOCLICK
_HB_FUN_DBGSOINFO _HB_FUN_DBGSOPUCK
_HB_FUN_TDBG _HB_FUN___DBGENTRY
fwdecode size = 3768
_HB_FUN_ARRTRANSPOSE _HB_FUN_ARRTRANSPOSEQ
_HB_FUN_ASHUFFLE _HB_FUN_FW_AREVERSE
_HB_FUN_FW_ARRGROUPSUM _HB_FUN_FW_ARRSUM
_HB_FUN_FW_ASORT _HB_FUN_FW_DECODE
_HB_FUN_FW_GREATEST _HB_FUN_FW_LEAST
_HB_FUN_FW_RAEVAL
fwerror size = 956
_HB_FUN__FWGENERROR _HB_FUN___LOWMEMERROR
fwmaria size = 159286
_HB_FUN_FRECSET _HB_FUN_FWMARIALIB_VERSION
_HB_FUN_FWMARIA_LCMESSAGES _HB_FUN_FWMARIA_SET_PAD_CHAR_TO_FULL_LENGTH
_HB_FUN_FW_DEMODB _HB_FUN_FW_XOR
_HB_FUN_INBRACKETS _HB_FUN_MARIA_CONNECT
_HB_FUN_MARIA_CONNECTERROR _HB_FUN_MARIA_EMBEDDED
_HB_FUN_MYSQL_BLOBASHEX _HB_FUN_MYSQL_CRYPT
_HB_FUN_MYSQL_CRYPTKEY _HB_FUN_MYSQL_ESCAPE_STRING
_HB_FUN_MYSQL_MAXPADLIMIT _HB_FUN_MYSQL_QUOTEDCOL
_HB_FUN_MYSQL_ROWSET _HB_FUN_MYSQL_STMT_BINDTEST
_HB_FUN_MYSQL_STMT_CLOSE _HB_FUN_MYSQL_STMT_EXECUTE
_HB_FUN_MYSQL_STMT_INIT _HB_FUN_MYSQL_STMT_PREPARE
_HB_FUN_MYSQL_TINYINTASLOGICAL _HB_FUN_MYSQL_UPDATEFROMTABLESQL
_HB_FUN_MYSQL_UPDATESUMMARYSQL _HB_FUN_STRICMPX
_fw_isbinarydata _result_items
fwmsword size = 11887
_HB_FUN_FWMSWORDDOC
fwmulti size = 1006
_HB_FUN_EXEID _HB_FUN_FW_SETMULTI
_HB_FUN_OPENMUTEX
fworm size = 15247
_HB_FUN_EXTRACTGROUPBY _HB_FUN_ORM_CONNECTION
_HB_FUN_ORM_TABLE
fwpdf size = 29239
_HB_FUN_FWHARU _HB_FUN_FWPDF
fwrowset size = 23593
_HB_FUN_FWM_BLANKVALUE _HB_FUN_FWROWSET
_HB_FUN_TRANS_DBFSQL _HB_FUN_TRANS_LIKETODBF
fwstack size = 1592
_HB_FUN_FWSTACK
fwxlsxlb size = 15979
_HB_FUN_TWORKBOOK _HB_FUN_XLSXLIB
fwzebra size = 4876
_HB_FUN_FWZEBRA _HB_FUN_FWZEBRA_BARCODE
gantt size = 8403
_HB_FUN_TGANTT _HB_FUN_TGANTTITEM
getfiles size = 920
_HB_FUN_AGETFILES _HB_FUN_AGETFILESA
getsysin size = 9248
_HB_FUN_BORLANDVERSION _HB_FUN_COLORSQTY
_HB_FUN_CWINVERSION _HB_FUN_DISPFONTPERSIZE
_HB_FUN_FW_ACTIVEMONITORS _HB_FUN_FW_GETALLMONITORS
_HB_FUN_FW_GETMONITOR _HB_FUN_FW_GETTHEMEMODE
_HB_FUN_FW_ISMOUSEPRESENT _HB_FUN_FW_ISTABLETMODE
_HB_FUN_FW_ISTOUCHSCREEN _HB_FUN_FW_SETMONITOR
_HB_FUN_FW_VIRTUALSCREEN _HB_FUN_GETCPUSPEED
_HB_FUN_GETSYSFONT _HB_FUN_ISDARKTHEME
_HB_FUN_ISWIN2000 _HB_FUN_ISWIN64
_HB_FUN_ISWIN7 _HB_FUN_ISWIN8
_HB_FUN_ISWINDOWS10 _HB_FUN_ISWINDOWS11
_HB_FUN_ISWINVISTA _HB_FUN_ISWINXP
_HB_FUN_LARGEFONTS _HB_FUN_SAVEDESKTOP
_HB_FUN_SCREENHEIGHT _HB_FUN_SCREENHEIGHTMM
_HB_FUN_SCREENSCALING _HB_FUN_SCREENSIZE
_HB_FUN_SCREENSIZE_NOSCALING _HB_FUN_SCREENWIDTH
_HB_FUN_SCREENWIDTHMM _HB_FUN_SCRRESOLUTION
_HB_FUN_SETDARKTHEME _HB_FUN_WINDOWS
_HB_FUN_WNDCENTEREX
gettasks size = 2784
_HB_FUN_GETTASKS _HB_FUN_GETWINDOWMODULEFILENAME
_HB_FUN_SETTASKMANAGER
gmail size = 5740
_HB_FUN_TGMAIL
group size = 5136
_HB_FUN_TGROUP
gtf size = 6940
_HB_FUN_GTFTORTF _HB_FUN_ISGTF
_HB_FUN_ISRTF _HB_FUN_RTFTOGTF
harbour size = 4379
_HB_FUN_ASEND _HB_FUN_ASLONG
_HB_FUN_ASLONGLONG _HB_FUN_ASPTR
_HB_FUN_CHILDLEVEL _HB_FUN_EXECUTE
_HB_FUN_FREELIB32 _HB_FUN_FREELIBRARY
_HB_FUN_FREOPEN_STDERR _HB_FUN_GETLASTERROR
_HB_FUN_GETLOCAL _HB_FUN_GETPARAM
_HB_FUN_GETPROCADDRESS _HB_FUN_HB_DBG_VMPARLLIST
_HB_FUN_HB_DBG_VMSTKLCOUNT _HB_FUN_HB_DBG_VMVARLGET
_HB_FUN_HB_DBG_VMVARSLEN _HB_FUN_LOADLIB32
_HB_FUN_LOADLIBRARY _HB_FUN_LOADVBX
_HB_FUN_LOCALCOUNT _HB_FUN_MEMMAX
_HB_FUN_MEMUSED _HB_FUN_NHEAPSIZE
_HB_FUN_NINITDSSIZE _HB_FUN_NSTACKSIZE
_HB_FUN_NSTATICS _HB_FUN_NSYMPSIZE
_HB_FUN_NTXPOS _HB_FUN_OCLONE
_HB_FUN_OLEGETPROPERTY _HB_FUN_OLEINVOKE
_HB_FUN_OLESETPROPERTY _HB_FUN_OSEND
_HB_FUN_PARAMCOUNT _HB_FUN_SETMULTIPLE
_HB_FUN_TVBCONTROL _HB_FUN_ULOADOBJECT
_HB_FUN_VBXCLASSNAME _HB_FUN_VBXEVENT
_HB_FUN_WINDOWSFIX _HB_FUN__CLSSETERROR
_HB_FUN__GENERROR
help32 size = 4424
_HB_FUN_HELPINDEX _HB_FUN_HELPPOPUP
_HB_FUN_HELPSEARCH _HB_FUN_HELPTOPIC
_HB_FUN_SETAUTOHELP _HB_FUN_SPWINHELP
_HB_FUN_SPWINHELPC _HB_FUN_WINHELP
helpchm size = 3071
_HB_FUN_CHMHELPINDEX _HB_FUN_CHMHELPPOPUP
_HB_FUN_CHMHELPSEARCH _HB_FUN_CHMHELPTOPIC
_HB_FUN_FREEHTMLDLL _HB_FUN_GETHELPPOPUP
_HB_FUN_HTMLPOP _HB_FUN_HTMLSEARCH
_HB_FUN_HTML_HELP _HB_FUN_SETHELPPOPUP
_hDLL _helpaddress
_pHTMLHELP
icon size = 3956
_HB_FUN_TICON
iget size = 2560
_HB_FUN_TICONGET
igroup size = 15835
_HB_FUN_TICONGROUP
image size = 16455
_HB_FUN_FICNV24 _HB_FUN_FICONVERTIMAGEFILE
_HB_FUN_FICONVTO32 _HB_FUN_FIGETBITS
_HB_FUN_FIGETFILETYPE _HB_FUN_FIGETINFO
_HB_FUN_FIGETINFOHEADER _HB_FUN_FIGETWIDTH
_HB_FUN_FIISTRANSPARENT _HB_FUN_FILOAD
_HB_FUN_FILOADFROMMEMORY _HB_FUN_FILOADIMG
_HB_FUN_FIMAKETHUMBNAIL _HB_FUN_FIROTATE
_HB_FUN_FIROTATEIMG _HB_FUN_FISAVE
_HB_FUN_FISETTRANSPARENT _HB_FUN_FITYPEFROMMEMORY
_HB_FUN_FIUNLOAD _HB_FUN_FI_CLOSEMEMORY
_HB_FUN_FI_GETFILETYPEFROMFILENAME _HB_FUN_FI_GETFILETYPEFROMMEMORY
_HB_FUN_FI_LOADFROMMEMORY _HB_FUN_FI_OPENMEMORY
_HB_FUN_FI_SAVETOMEMORY _HB_FUN_FI_SUPPORTSWRITING
_HB_FUN_FMAKETHUMBNAIL _HB_FUN_FREEIMAGEISLOADED
_HB_FUN_ISIMAGEDATA _HB_FUN_LOADFREEIMAGE
_HB_FUN_TIMAGE _HB_FUN_UNLOADFREEIMAGE
imageb64 size = 7500
_HB_FUN_TIMAGEBASE64
imgtxtio size = 51385
_HB_FUN_CALCTEXTWH _HB_FUN_CONTRASTCLR
_HB_FUN_DRAWBMPARRAY _HB_FUN_DRAWPROGRESSBAR
_HB_FUN_DRAWTEXTEXARRAY _HB_FUN_DUPLICATEIMAGE
_HB_FUN_ELLIPSE_RADIUS _HB_FUN_EMF2HBITMAP
_HB_FUN_EXTRACTBASE64IMAGE _HB_FUN_FILLRECTEX
_HB_FUN_FW_ANGLEARC _HB_FUN_FW_BARCODEBMP
_HB_FUN_FW_BMPMINUS _HB_FUN_FW_BMPPLUS
_HB_FUN_FW_BMPSTAR _HB_FUN_FW_BOX
_HB_FUN_FW_CLIPBOARDHASIMAGE _HB_FUN_FW_COPYTOCLIPBOARD
_HB_FUN_FW_CREATEBITMAP _HB_FUN_FW_DRAWIMAGE
_HB_FUN_FW_DRAWSHADOW _HB_FUN_FW_DRAWSHAPES
_HB_FUN_FW_ELLIPSHADOW _HB_FUN_FW_EMPTYCLIPBOARD
_HB_FUN_FW_GETCLIPBOARDDATA _HB_FUN_FW_HBITMAPTOFILE
_HB_FUN_FW_IMAGETOBLOB _HB_FUN_FW_MAKEYOURBITMAP
_HB_FUN_FW_PIECHART _HB_FUN_FW_READIMAGE
_HB_FUN_FW_RICHTEXTBMP _HB_FUN_FW_SAVEHBITMAP
_HB_FUN_FW_SAVEIMAGE _HB_FUN_FW_SAVEIMAGESAMETYPE
_HB_FUN_FW_SAVETHUMBNAIL _HB_FUN_FW_SAYBARCODE
_HB_FUN_FW_SAYHOLLOW _HB_FUN_FW_SAYTEXT
_HB_FUN_FW_SAYTEXTHILITE _HB_FUN_FW_SAYTEXTSPREAD
_HB_FUN_FW_STITCHIMAGES _HB_FUN_FW_TEXTTOBITMAP
_HB_FUN_FW_TRANSFORMBITMAP _HB_FUN_GDI32_HOLLOWTEXT
_HB_FUN_GETBMPHEIGHT _HB_FUN_GETBMPWIDTH
_HB_FUN_GRADARGB2RGB _HB_FUN_GRADIENTFILL
_HB_FUN_GRADIENTGDIP _HB_FUN_HICO2HBMP
_HB_FUN_HVALTOBRUSH _HB_FUN_HVALTOPEN
_HB_FUN_ISALPHACLR _HB_FUN_ISFILEIMAGETYPE
_HB_FUN_ISIMAGEEXT _HB_FUN_ISXHBCOM
_HB_FUN_JPEGDIM _HB_FUN_MEMORYBUFFERTYPE
_HB_FUN_MSGINFOSCROLL _HB_FUN_PCHARTOPTR
_HB_FUN_RESIZEIMAGEPTR _HB_FUN_RINGGRADIENTFILL
_HB_FUN_SAMEIMGEXT _HB_FUN_SAYTEXTATANGLE
_HB_FUN_SEGOEMDL2 _HB_FUN_SELECTCLIPPATH
_HB_FUN_SELECTCLIPRGN _HB_FUN_SETDEFAULTICONSIZE
_HB_FUN_TXTINRCT _HB_FUN_USEGDI
_HB_FUN_WEBIMAGE _HB_FUN_WEBPAGECONTENTS
_HB_FUN_WINDOWFROMDC _HB_FUN_WNDBMP
_HB_FUN_WRAPTOWIDTH
ini size = 2852
_HB_FUN_GETPVPRFSE _HB_FUN_TINI
internet size = 1580
_HB_FUN_TINTERNET
keys size = 376
_HB_FUN__SETKEY
linklist size = 5140
_HB_FUN_TLINKLIST
listbox size = 12095
_HB_FUN_TLISTBOX
loadval size = 444
_HB_FUN_LOADVALUE
longnam2 size = 3572
_HB_FUN_APIFINDCLS _HB_FUN_APIFINDFST
_HB_FUN_APIFINDNXT _HB_FUN_GETFULLPATHNAME
_HB_FUN_GETSHORTPATHNAME _HB_FUN_LFN2SFN
_HB_FUN_SFN2LFN
mariarec size = 4380
_HB_FUN_FWMARIARECORD
math size = 640
_HB_FUN_BINTOC _HB_FUN_BINTON
_HB_FUN_NTOBIN
matrices size = 10860
_HB_FUN_ADIFF _HB_FUN_FW_MATRIX
_HB_FUN_MATRIXINVERT _HB_FUN_MATRIXMULTIPLY
_HB_FUN_MATRIX_BOX
mdichild size = 7595
_HB_FUN_TMDICHILD
mdiclien size = 5304
_HB_FUN_TMDICLIENT
mdiframe size = 9371
_HB_FUN_GETWNDFRAME _HB_FUN_TMDIFRAME
mdirec size = 1324
_HB_FUN_MDIRECEDIT
memoedit size = 25087
_HB_FUN_BUILDRICHEDITBAR _HB_FUN_FW_MEMOEDIT
_HB_FUN_HTMLVIEW _HB_FUN_JSONBROWSE
_HB_FUN_JSONVIEW _HB_FUN_RICHEDIT
_HB_FUN_RICHEDIT5 _HB_FUN_SAVEFILESOURCE
_HB_FUN_SETUPSCINT _HB_FUN_SOURCECOMPILE
_HB_FUN_SOURCEEDIT _HB_FUN_SOURCEEDITOR
_HB_FUN_UTFEDIT
memstat size = 684
_HB_FUN_MEMSTAT
menu size = 49759
_HB_FUN_DELCHECK _HB_FUN_GETAAUXITEMS
_HB_FUN_GETALLITEMS _HB_FUN_GETBMPSITEMS
_HB_FUN_GETNHEIGHTITEM _HB_FUN_GETNHEIGHTSEP
_HB_FUN_GETNOLDHEIGHTITEM _HB_FUN_GETNWIDTHITEM
_HB_FUN_GETPOPUPS _HB_FUN_ITEMBITMAP
_HB_FUN_MENUCLONE _HB_FUN_RESBUILD
_HB_FUN_SEARCHID _HB_FUN_SEARCHITEM
_HB_FUN_TMENU
menuitem size = 21635
_HB_FUN_TMENUITEM _HB_FUN_TXTTOBMP
meter size = 13083
_HB_FUN_PAINTCIRCULARMETER _HB_FUN_PAINTCIRCULARMETEROLD
_HB_FUN_TMETER
metrcirc size = 12207
_HB_FUN_TPROGRESSWHEEL
metropnl size = 23443
_HB_FUN_TMETROBTN _HB_FUN_TMETROPANEL
mget size = 17911
_HB_FUN_SETMGETCOLORFOCUS _HB_FUN_TMULTIGET
mimeclip size = 3352
_HB_FUN_FFMIMEDEC _HB_FUN_FFMIMEENC
_HB_FUN_FMIMEDEC _HB_FUN_FMIMEENC
_HB_FUN_MAKEWIND _HB_FUN_MIMEEXT
_HB_FUN_REGQRYVALUEEX _HB_FUN_TESTTHIS
mru size = 4376
_HB_FUN_TMRU
msgbar size = 15851
_HB_FUN_GETMSGBARDEFAULT _HB_FUN_SETMSGBARDEFAULT
_HB_FUN_TIMEFROMSTART _HB_FUN_TMSGBAR
msgcalc size = 4276
_HB_FUN_MSGCALC
msgget size = 3596
_HB_FUN_MSGGET
msglist size = 1552
_HB_FUN_MSGLIST
msglogo size = 2108
_HB_FUN_MSGLOGO _HB_FUN_MSGSPLASH
msgmeter size = 6272
_HB_FUN_MSGDATE _HB_FUN_MSGMETER
msgrun size = 1592
_HB_FUN_MSGRUN _HB_FUN_MSGWAIT
_HB_FUN_STOPUNTIL _HB_FUN_WAITSECONDS
msgtbar size = 884
_HB_FUN_MSGTOOLBAR
netapi32 size = 3964
_HB_FUN_ISEXTERNALIP _HB_FUN_ISINTERNET
_HB_FUN_ISLOCALIP _HB_FUN_LOCALIP
_HB_FUN_NETBIOS _HB_FUN_NETSERIALNUMBER
_HB_FUN_PUBLICIP
now size = 6884
_HB_FUN_NOW _HB_FUN_NOWC
_IN6ADDR_ISANY _IN6ADDR_ISEQUAL
_IN6ADDR_ISLOOPBACK _IN6ADDR_ISUNSPECIFIED
_IN6ADDR_SETANY _IN6ADDR_SETLOOPBACK
_IN6_ADDR_EQUAL _IN6_IS_ADDR_ANYCAST
_IN6_IS_ADDR_EUI64 _IN6_IS_ADDR_GLOBAL
_IN6_IS_ADDR_LINKLOCAL _IN6_IS_ADDR_LOOPBACK
_IN6_IS_ADDR_MC_GLOBAL _IN6_IS_ADDR_MC_LINKLOCAL
_IN6_IS_ADDR_MC_NODELOCAL _IN6_IS_ADDR_MC_ORGLOCAL
_IN6_IS_ADDR_MC_SITELOCAL _IN6_IS_ADDR_MULTICAST
_IN6_IS_ADDR_SITELOCAL _IN6_IS_ADDR_SUBNET_RESERVED_ANYCAST
_IN6_IS_ADDR_SUBNET_ROUTER_ANYCAST _IN6_IS_ADDR_UNSPECIFIED
_IN6_IS_ADDR_V4COMPAT _IN6_IS_ADDR_V4MAPPED
_IN6_IS_ADDR_V4TRANSLATED _IN6_SET_ADDR_LOOPBACK
_IN6_SET_ADDR_UNSPECIFIED _WSAGetFailConnectOnIcmpError
_WSAGetIPUserMtu _WSAGetIcmpErrorInfo
_WSAGetRecvIPEcn _WSAGetUdpRecvMaxCoalescedSize
_WSAGetUdpSendMessageSize _WSASetFailConnectOnIcmpError
_WSASetIPUserMtu _WSASetRecvIPEcn
_WSASetUdpRecvMaxCoalescedSize _WSASetUdpSendMessageSize
_gai_strerrorA _gai_strerrorW
_getipv4sourcefilter _getsourcefilter
_idealsendbacklognotify _idealsendbacklogquery
_setipv4sourcefilter _setsourcefilter
num2word size = 3228
_HB_FUN_FW_N2WSETUP _HB_FUN_FW_NUMTOWORDS
oauth size = 10748
_HB_FUN_THTTPSERVER _HB_FUN_TOAUTH
objects size = 1472
_HB_FUN_ENDOBJECT _HB_FUN_SETOBJECT
_HB_FUN_TAPPLICATION
objfile size = 4116
_HB_FUN_TOBJFILE
odata size = 412
_HB_FUN_AODATA
odbc size = 2092
_HB_FUN_ODBCDSNENTRIES _HB_FUN_SQLCOL
_HB_FUN_SQLCOMMIT _HB_FUN_SQLDESCRIBECOL
_HB_FUN_SQLDRIVERCONNECT _HB_FUN_SQLFILE
_HB_FUN_SQLGETCURNAME _HB_FUN_SQLGETDATA
_HB_FUN_SQLGETINFO _HB_FUN_SQLINDEX
_HB_FUN_SQLPREPARE _HB_FUN_SQLSETCURNAME
olefuncs size = 8368
_HB_FUN_CONVERTTOOOURL _HB_FUN_DBF2EXCELNUMFORMAT
_HB_FUN_EXCELBOOKSAVEAS _HB_FUN_EXCELLANG
_HB_FUN_EXCELLANGID _HB_FUN_EXCELOBJ
_HB_FUN_EXCELSEPARATORS _HB_FUN_EXCELTRANSLATE
_HB_FUN_FILESYSOBJ _HB_FUN_FWGETOLEOBJECT
_HB_FUN_FW_TOGGLEDESKTOP _HB_FUN_GETEXCELBOOK
_HB_FUN_GETEXCELRANGE _HB_FUN_GETPROPERTYVALUE
_HB_FUN_HARBOURNEW _HB_FUN_MERGEDOCS
_HB_FUN_OFFICEEXTRACTIMAGE _HB_FUN_SUNCALCOBJ
_HB_FUN_WINHTTPOBJ _HB_FUN_WINWORDOBJ
_HB_FUN_WMISERVICE _HB_FUN_XLRANGEVALUE
outl2003 size = 11175
_HB_FUN_TOUTLOOK2003 _HB_FUN_TOUTLOOK2003GROUP
outl2010 size = 11159
_HB_FUN_TOUTLOOK2010 _HB_FUN_TOUTLOOK2010GROUP
outlook size = 11363
_HB_FUN_TOUTLOOK
pdmenu size = 20811
_HB_FUN_DELAMENUSAUX _HB_FUN_DELMENUFONT
_HB_FUN_FW_MEASUREITEM _HB_FUN_FW_MENUDRAW
_HB_FUN_GETACCTABLE _HB_FUN_GETAMENUS
_HB_FUN_GETAMENUSAUX _HB_FUN_GETMENUFONT
_HB_FUN_GETPARENTAUXMENUS _HB_FUN_ISCHARUNI
_HB_FUN_ISUTF8 _HB_FUN_LASTAUXMENU
_HB_FUN_LASTITEM _HB_FUN_LASTITEMPOS
_HB_FUN_LASTMENU _HB_FUN_LASTMENUITEMSCOUNT
_HB_FUN_MENUADDITEM _HB_FUN_MENUBEGIN
_HB_FUN_MENUDATA _HB_FUN_MENUEND
_HB_FUN_SETINITITEMSCHILDS _HB_FUN_SETOLDMENUS
_HB_FUN_SETSPACEMONOSP _HB_FUN_SETSPACEXTRAS
_HB_FUN_SETSPACEXTRASPOP
pdreport size = 1852
_HB_FUN_RPTADDCOLUMN _HB_FUN_RPTADDGROUP
_HB_FUN_RPTBEGIN _HB_FUN_RPTEND
pen size = 1584
_HB_FUN_TPEN
pgsuport size = 11424
_HB_FUN_FWPG_APPENDFROMALIAS _HB_FUN_FWPG_CREATETABLESQL
_HB_FUN_FWPG_CURRENTDB _HB_FUN_FWPG_EXECUTE
_HB_FUN_FWPG_FIELDGET _HB_FUN_FWPG_GOTOKEYVAL
_HB_FUN_FWPG_IMPORTFROMDBF _HB_FUN_FWPG_LISTDBS
_HB_FUN_FWPG_LISTSCHEMAS _HB_FUN_FWPG_METASTRUCT
_HB_FUN_FWPG_PRIMARYKEYS _HB_FUN_FWPG_PRIMARYORDER
_HB_FUN_FWPG_QUERYSETORDER _HB_FUN_FWPG_SKIPPER
_HB_FUN_FWPG_STRUCTURE _HB_FUN_FWPG_TABLENAMEFROMID
_HB_FUN_FWPG_XBRSAVEDATA _HB_FUN_FWPG_XBRSEEK
printer size = 36179
_HB_FUN_AGETPRINTERS _HB_FUN_HARUPDFDOC
_HB_FUN_ISHARULINKED _HB_FUN_MSPRINTTOPDF
_HB_FUN_PAGEBEGIN _HB_FUN_PAGEEND
_HB_FUN_PRINTBEGIN _HB_FUN_PRINTEND
_HB_FUN_PRINTQUEUE _HB_FUN_PRNGETFILETOSAVE
_HB_FUN_PRNLASTPAGE _HB_FUN_SAVEPREVIEWTOIMAGE
_HB_FUN_SETPRINTDEFAULT _HB_FUN_SETPRINTER
_HB_FUN_TPRINTER
prv2pdf size = 11286
_HB_FUN_FWJPGTOPDF _HB_FUN_FWSAVEPREVIEWTOPDF
_HB_FUN_FW_EMFTOPDF _HB_FUN_FW_I2PDF
_HB_FUN_TFW_PDF _HB_FUN_WORDPDF
_fp _iBufLen
_nDocLen
radio size = 7048
_HB_FUN_TRADIO
radmenu size = 5340
_HB_FUN_TRADMENU
random size = 1192
_HB_FUN_DECTOHEX _HB_FUN_NHEX
_HB_FUN_NRANDOM _HB_FUN_TIMEZONE
rcolumn size = 12531
_HB_FUN_TRCOLUMN
readxlsx size = 11259
_HB_FUN_FW_OPENXLSX _HB_FUN_FW_SHOWXLSX
_HB_FUN_TXLSXREADER
rebar size = 1848
_HB_FUN_TREBAR
rect size = 9352
_HB_FUN_ARRAYMATH _HB_FUN_POINTROWCOL
_HB_FUN_POINTXY _HB_FUN_TPOINT
_HB_FUN_TRECT
reg32 size = 3236
_HB_FUN_TREG32
report size = 35839
_HB_FUN_TREPORT
rfile size = 3740
_HB_FUN_TRFILE
rgroup size = 4500
_HB_FUN_TRGROUP
rline size = 3684
_HB_FUN_TRLINE
rpreview size = 39495
_HB_FUN_CONVERTTOWORDDOC _HB_FUN_RPREVIEW
_HB_FUN_RPREVUSERBTNS _HB_FUN_SETCUSTOMPRINTPREVIEW
_HB_FUN_TOWORDDOCVIAWRITER _HB_FUN_TPREVIEW
rtfbox size = 1420
_HB_FUN_RTFBOX
rtffile size = 2944
_HB_FUN_TRTFFILE
say size = 7236
_HB_FUN_TSAY
scintila size = 87123
_HB_FUN_CHOICEFONT _HB_FUN_FUNCHARB
_HB_FUN_GETLEXERS _HB_FUN_HCADFUNCTION
_HB_FUN_LOADFHB _HB_FUN_READFUNCFW
_HB_FUN_READFUNCFWC _HB_FUN_READFUNCHB
_HB_FUN_SETMIFONT _HB_FUN_TSCINTILLA
scrllbar size = 6624
_HB_FUN_TSCROLLBAR
scrlpanl size = 10707
_HB_FUN_TSCROLLPANEL
scrollm size = 9940
_HB_FUN_SMLARROW _HB_FUN_SMRARROW
_HB_FUN_TSCROLLMETRO
scrolmsg size = 4052
_HB_FUN_TSCROLLMSG
selector size = 10451
_HB_FUN_ATANG _HB_FUN_FWCOS
_HB_FUN_FWSIN _HB_FUN_TANG
_HB_FUN_TSELECTOR
shellapi size = 2508
_HB_FUN_COPYFILE _HB_FUN_OUTPUTDEBUGSTRING
_HB_FUN_SHELL_NOTIFYICON _HB_FUN_TASKADDICON
_HB_FUN_TASKCHANGEICON _HB_FUN_TASKDELICON
skin size = 9981
_HB_FUN_APPLYSETFILTER _HB_FUN_ISWIN98
_HB_FUN_SETFILTER _HB_FUN_SETTRANSPARENT
_HB_FUN_SKIN _HB_FUN_TSKIN
_SetFilter
skins size = 7164
_HB_FUN_BUTTONS2007 _HB_FUN_FWSKINBTNFOCUSED
_HB_FUN_FWSKINBTNKEYDOWN _HB_FUN_FWSKINBTNKEYUP
_HB_FUN_FWSKINBTNLBUTTONDOWN _HB_FUN_FWSKINBTNLBUTTONUP
_HB_FUN_FWSKINBTNMOUSELEAVE _HB_FUN_FWSKINBTNMOUSEMOVE
_HB_FUN_FWSKINBTNOBJ _HB_FUN_FWSKINBTNPAINT
_HB_FUN_SETSKINBTNDEFAULTCLRS _HB_FUN_SETSKINBUTTONSCOLORS
_HB_FUN_SKINBUTTONS
slider size = 10091
_HB_FUN_TSLIDER
sliderm size = 2776
_HB_FUN_TSLIDERMETRO
splitter size = 11863
_HB_FUN_TSPLITTER
sqlerror size = 2072
_HB_FUN_TSQLERROR
statusba size = 4304
_HB_FUN_TSTATUSBAR
strings size = 51580
_HB_FUN_FWADDLANGUAGE _HB_FUN_FWADDSTRING
_HB_FUN_FWEDITSTRINGS _HB_FUN_FWLANGUAGEID
_HB_FUN_FWLOADSTRINGS _HB_FUN_FWMISSINGSTRINGS
_HB_FUN_FWSAVESTRINGS _HB_FUN_FWSETLANGUAGE
_HB_FUN_FWSETSTRING _HB_FUN_FWSTRING
system size = 356
_HB_FUN_SYSWAIT
tabs size = 19483
_HB_FUN_TTABS
tacctbl size = 1752
_HB_FUN_TACCTABLE
tagcloud size = 5348
_HB_FUN_TTAGCLOUD
tanimate size = 4244
_HB_FUN_TANIMATE
tarrdata size = 39127
_HB_FUN_STR2STRUCT _HB_FUN_TARRAYDATA
tblockchain size = 5332
_HB_FUN_TBLOCKCHAIN
tbtnclr size = 13527
_HB_FUN_TBTNCLR _HB_FUN_TPICKERCOLOR
tcalenda size = 17119
_HB_FUN_TCALENDAR
tcalex size = 29615
_HB_FUN_CALEX_SETFIRSTDATE _HB_FUN_COLORDATA
_HB_FUN_DRAWBOX _HB_FUN_DRAWSPECIALBOX
_HB_FUN_TCALEX
tcbrowse size = 25155
_HB_FUN_TCBROWSE
tccolumn size = 4392
_HB_FUN_TCCOLUMN
tclipget size = 728
_HB_FUN_FWGETNEW _HB_FUN_TCLIPGET
tcomobj size = 1924
_HB_FUN_TCOMOBJECT
tcompone size = 3092
_HB_FUN_TCOMPONENT
tctrsock size = 2204
_HB_FUN_TCTRLSOCKET
tcvrflow size = 20867
_HB_FUN_TCOVER _HB_FUN_TCOVERFLOW
tdayv size = 7455
_HB_FUN_TDAYVIEW
tdbase size = 992
_HB_FUN_TDBASE
tdbfcomp size = 2888
_HB_FUN_TDBFCOMP
tdbfuncs size = 652
_HB_FUN_TDBF_DECRYPT _HB_FUN_TDBF_ENCRYPT
tdbodbc size = 23531
_HB_FUN_TDBODBC
tdbodbcd size = 17831
_HB_FUN_TDBODBCDIRECT
tddemlcl size = 3056
_HB_FUN_DDECLIENT _HB_FUN_TDDEMLCLIENT
tddemlsv size = 4004
_HB_FUN_DDESERVER _HB_FUN_TDDEMLSERVER
tdeepseek size = 2724
_HB_FUN_TDEEPSEEK
tdict size = 29499
_HB_FUN_LOGEVENT _HB_FUN_TDICT
tdockpnel size = 25547
_HB_FUN_TDOCKPNEL
tdosprn size = 6592
_HB_FUN_TDOSPRN
tdtpicke size = 11653
_HB_FUN_DTP_GETSTYLE _HB_FUN_DTP_SETSTYLE
_HB_FUN_TDATEPICK _read_datetime
tembeddings size = 4008
_HB_FUN_TEMBEDDINGS
tenhmeta size = 4852
_HB_FUN_TENHMETAFILE
tereport size = 61283
_HB_FUN_ADDNEWDATAS _HB_FUN_TEREPORT
texplbar size = 15635
_HB_FUN_TEXPLORERBAR _HB_FUN_TTASKPANEL
texplist size = 20171
_HB_FUN_TEXPLORERLIST _HB_FUN_TITEMLISTBAR
texstruc size = 3792
_HB_FUN_STRUCBEGIN _HB_FUN_STRUCEND
_HB_FUN_STRUCMEMBER _HB_FUN_TEXSTRUCT
tfield size = 1148
_HB_FUN_TFIELD
tfile size = 5484
_HB_FUN_TFILE
tfilegtf size = 3124
_HB_FUN_GTFFONT _HB_FUN_GTFFORMAT
_HB_FUN_SETGTFALIGN _HB_FUN_SETGTFCOLOR
_HB_FUN_SETGTFFONT _HB_FUN_SETGTFFORMAT
_HB_FUN_TFILEGTF
tfoldex size = 31359
_HB_FUN_TFOLDEREX
tform size = 4600
_HB_FUN_TFORM
tftp size = 3220
_HB_FUN_TFTP
tftpcli size = 5176
_HB_FUN_TFTPCLIENT
tftpfile size = 2148
_HB_FUN_TFTPFILE
tftpserv size = 6224
_HB_FUN_TFTPSERVER
tftpsess size = 944
_HB_FUN_TFTPSESSION
tgdiplus size = 25163
_HB_FUN_AEMF2IMAGES _HB_FUN_BRUSH
_HB_FUN_CGETBMPNAME _HB_FUN_DRAWIMAGEROTATECENTER
_HB_FUN_EMFTOIMG _HB_FUN_FRAMETIFF
_HB_FUN_GDIBMP _HB_FUN_GDIPLUSCONVER24TO32ALPHA
_HB_FUN_GDIPLUSCONVER24TO32ALPHAGRAY _HB_FUN_GDIPLUSCONVERTIMAGE
_HB_FUN_GDIPLUSRESIZEIMAGE _HB_FUN_GDIPLUSSAVETHUMBNAIL
_HB_FUN_GETIMGFROMLIST _HB_FUN_GETIMGFROMLISTH
_HB_FUN_GETIMGFROMLISTV _HB_FUN_GRAPHICS
_HB_FUN_HBMPFROMFILE _HB_FUN_HBMPFROMRES
_HB_FUN_IMAGEFROM10RESOURCE _HB_FUN_IMAGEPNGFROMSTR
_HB_FUN_LISPNG _HB_FUN_NEWEMFTOJPG
_HB_FUN_PATH _HB_FUN_PEN
_HB_FUN_REGION _HB_FUN_SAVEPREVIEWTOIMG
_HB_FUN_SAVEWINDOW _HB_FUN_TIFFTOJPG
tgemini size = 7352
_HB_FUN_TGEMINI
tget size = 57659
_HB_FUN_CHR16 _HB_FUN_FW_SETGETTIMEPART
_HB_FUN_FW_UTF8PADBYTE _HB_FUN_FW_UTF8PADCHAR
_HB_FUN_GETTEXTLIMITBYCHARS _HB_FUN_LENMINMAX
_HB_FUN_POPUPBROWSE _HB_FUN_SETGETCOLORFOCUS
_HB_FUN_TGET _HB_FUN_WIDESTRPUT
tgif size = 4176
_HB_FUN_TGIF
tgraph size = 55119
_HB_FUN_TGRAPH
tgselect size = 16687
_HB_FUN_CHOOSEGRADIENT _HB_FUN_TCHOOSEGRADIENT
_HB_FUN_TGSELECTOR _HB_FUN_TINK
theader size = 4068
_HB_FUN_THEADER
thtmlpag size = 1636
_HB_FUN_THTMLPAGE
timaglst size = 2392
_HB_FUN_TIMAGELIST
time size = 2036
_HB_FUN_TTIME
timer size = 2072
_HB_FUN_TIMEREVENT _HB_FUN_TTIMER
tindex size = 1784
_HB_FUN_TINDEX
tlayout size = 3744
_HB_FUN_TLAYOUT
tlex size = 2792
_HB_FUN_TLEX
tlib size = 920
_HB_FUN_TLIBFILE
tlistvie size = 8123
_HB_FUN_TLISTVIEW _HB_FUN_TLISTVIEWGROUP
_HB_FUN_TLISTVIEWITEM
tlocks size = 3424
_HB_FUN_TLOCKS
tmail size = 2448
_HB_FUN_TMAIL
tmci size = 2356
_HB_FUN_TMCI
tmcpserver size = 9152
_HB_FUN_CREATEMCPSERVER _HB_FUN_ERRORHANDLER
_HB_FUN_FREADLINE _HB_FUN_TMCPCONTEXT
_HB_FUN_TMCPPROMPT _HB_FUN_TMCPRESOURCE
_HB_FUN_TMCPSERVER _HB_FUN_TMCPTOOL
tmetafil size = 6601
_HB_FUN_GETEMFSIZE _HB_FUN_GETOBJECTTYPE
_HB_FUN_ISENHMETA _HB_FUN_ISHBITMAP
_HB_FUN_TMETAFILE
tmeterex size = 6900
_HB_FUN_TMETEREX
tmetro size = 4588
_HB_FUN_TMETRO
tmnucomp size = 2244
_HB_FUN_TMNUCOMP
tmonthv size = 12047
_HB_FUN_TMONTHVIEW
tmsgitem size = 9339
_HB_FUN_TMSGITEM
tneuralnet size = 4111
_HB_FUN_DSIGMOID _HB_FUN_MATH_E
_HB_FUN_SIGMOID _HB_FUN_TNEURALLAYER
_HB_FUN_TNEURALNETWORK _HB_FUN_TNEURON
tnewsins size = 17323
_HB_FUN_TNEWSINSTANCE
tnewssrv size = 4696
_HB_FUN_TNEWSSERVER
todbc size = 11479
_HB_FUN_TODBC
tollama size = 4136
_HB_FUN_TAGENT _HB_FUN_TOLLAMA
toolbar size = 7380
_HB_FUN_TTOOLBAR
topenai size = 4968
_HB_FUN_TOPENAI
tordinfo size = 2016
_HB_FUN_TORDINFO
tpages size = 5468
_HB_FUN_TPAGES
tpanel size = 5936
_HB_FUN_TPANEL
tparser size = 976
_HB_FUN_TPARSER
tpdf size = 12519
_HB_FUN_TPDF
tpop3 size = 4120
_HB_FUN_TPOP3
tprogres size = 3540
_HB_FUN_TPROGRESS
tproxy size = 2384
_HB_FUN_TPROXY
trackbar size = 3688
_HB_FUN_TTRACKBAR
tras size = 4760
_HB_FUN_TRAS
trating size = 6636
_HB_FUN_TRATING
trbgroup size = 18207
_HB_FUN_TRBGROUP
trbtn size = 26407
_HB_FUN_TRBTN
trdd size = 3684
_HB_FUN_RDDEVENT _HB_FUN_TRDD
_HB_FUN_VIRTUALRDD
trddodbc size = 6064
_HB_FUN_TRDDODBC
trecset size = 22155
_HB_FUN_ADOERRORASTEXT _HB_FUN_TRECSET
treeitem size = 9388
_HB_FUN_GETTREEBMPS _HB_FUN_TTREEITEM
trees size = 2372
_HB_FUN_SUMMARYDATAASTREE _HB_FUN_TREEBEGIN
_HB_FUN_TREEEND _HB_FUN_TREEFREE
_HB_FUN__TREEITEM
tribbon size = 41067
_HB_FUN_GRADIENTBMP _HB_FUN_TBACKSTAGE
_HB_FUN_TBACKSTAGEOPTION _HB_FUN_TQUICKACCESS
_HB_FUN_TRIBBONBAR
triched5 size = 48423
_HB_FUN_MNUCOLORS _HB_FUN_TRICHEDIT5
trichedi size = 26651
_HB_FUN_TRICHEDIT
trpanel size = 2332
_HB_FUN_TRPANEL
tsaybcod size = 4044
_HB_FUN_TSAYBARCODE
tselex size = 12027
_HB_FUN_TSELEX
tskinbtn size = 2304
_HB_FUN_TSKINBUTTON
tsmtp size = 14667
_HB_FUN_CFILENOPATHSMTP _HB_FUN_TSMTP
tsocket size = 6868
_HB_FUN_SHOWIP _HB_FUN_TSOCKET
tstruct size = 4048
_HB_FUN_THISSTRUCT _HB_FUN_TSTRUCT
tswitch size = 9327
_HB_FUN_TSWITCH
ttabctrl size = 4304
_HB_FUN_TTABCONTROL
ttitle size = 21199
_HB_FUN_TTITLE _HB_FUN_TTITLEIMG
_HB_FUN_TTITLETEXT
ttmpicke size = 5776
_HB_FUN_TTIMEPICK
ttoast size = 21155
_HB_FUN_TIPTIMEHIDE _HB_FUN_TIPTRANSFLICKER
_HB_FUN_TIPTRANSHIDE _HB_FUN_TIPTRANSSHOW
_HB_FUN_TTOAST
ttray size = 4580
_HB_FUN_GETNOTIFYICONDATA _HB_FUN_TTRAYICON
ttreevie size = 12739
_HB_FUN_TTREEVIEW
ttvitem size = 4528
_HB_FUN_TTVITEM
ttxtedit size = 33555
_HB_FUN_TTXTEDIT _HB_FUN_TTXTUNDO
ttxtfile size = 5112
_HB_FUN_TTXTFILE
twebcam size = 9295
_HB_FUN_GETVIDEOCAPDRIVER _HB_FUN_TWEBCAM
_HB_FUN__WEBCAM_EVENT
twebclie size = 2084
_HB_FUN_TWEBCLIENT
twebserv size = 9472
_HB_FUN_CLIENTIP _HB_FUN_GETQUERY
_HB_FUN_SERVERIP _HB_FUN_TWEBSERVER
_HB_FUN_UNESCAPE
twebsock size = 4824
_HB_FUN_TWEBSOCKETSERVER
twebview size = 5964
_HB_FUN_BUILDWEBVIEW _HB_FUN_ISWEBVIEWAVAILABLE
_HB_FUN_TWEBVIEW _HB_FUN_TWEBVIEWITEM
_HB_FUN_WEBVIEW _HB_FUN_WEBVIEWITEMREDEFINE
_HB_FUN_WEBVIEW_GETVALUES _HB_FUN_WEBVIEW_HANDLEEVENT
twebview2 size = 5936
_HB_FUN_FW_WEBVIEW _HB_FUN_TWEBVIEW2
_HB_FUN_WEBVIEW2_ONBIND _HB_FUN_WEBVIEW2_ONEVAL
_HB_FUN_WEBVIEW2_ONNAVIGATIONCOMPLETED
tweekv size = 8411
_HB_FUN_TWEEKVIEW
tyacc size = 4448
_HB_FUN_TYACC
uidialog size = 6852
_HB_FUN_DLGBARTITLEUI _HB_FUN_DLGVS
_HB_FUN_NCUANTAS _HB_FUN_TDIALOGUI
uiwindow size = 51843
_HB_FUN_CARGAIMGBTT _HB_FUN_CHANGECOLORBAR
_HB_FUN_CHANGECOLORIMG _HB_FUN_DRAWTXTROW
_HB_FUN_KEYBD_EVENT _HB_FUN_LOADIMGUI
_HB_FUN_SINB _HB_FUN_TWINDOWSUI
urllink size = 5628
_HB_FUN_TURLLINK
valblank size = 4830
_HB_FUN_ARRAYTOTEXT _HB_FUN_CCLRTOCODE
_HB_FUN_CVALTOCHAR _HB_FUN_FW_CLRTOHTML
_HB_FUN_FW_DEFAULT _HB_FUN_FW_READVAR
_HB_FUN_IFNIL _HB_FUN_NRGBADD
_HB_FUN_NRGBRESET _HB_FUN_UVALBLANK
_HB_FUN_XEVAL
valtostr size = 23285
_HB_FUN_ARRAYTOTEXTBOX _HB_FUN_ARRTOHASH
_HB_FUN_ARRTOJSON _HB_FUN_CNUM2EXPFORMAT
_HB_FUN_CNUMTOSTR _HB_FUN_COMPAREUNISTR
_HB_FUN_CURRENCYSYMBOL _HB_FUN_CVALTOSTR
_HB_FUN_DATETIMEFROMFILETIME _HB_FUN_DBF_FIELDPIC
_HB_FUN_EXPANDNUMPICT _HB_FUN_FITNUMPICTTOVAL
_HB_FUN_FWNUMFORMAT _HB_FUN_FW_ADDMONTH
_HB_FUN_FW_ADDTIME _HB_FUN_FW_AGE
_HB_FUN_FW_ALLTRIM _HB_FUN_FW_ARRAYASLIST
_HB_FUN_FW_ARRAYTOCSV _HB_FUN_FW_ARRAYTOHTML
_HB_FUN_FW_CONCAT _HB_FUN_FW_CONCAT_WS
_HB_FUN_FW_DATETOUNIX _HB_FUN_FW_DTOT
_HB_FUN_FW_JSONDECODE _HB_FUN_FW_LISTASARRAY
_HB_FUN_FW_LTRIM _HB_FUN_FW_MTHSLAPSED
_HB_FUN_FW_NEXTBIRTHDAY _HB_FUN_FW_PROPERCASE
_HB_FUN_FW_RTRIM _HB_FUN_FW_SETJSONHUMAN
_HB_FUN_FW_STOT _HB_FUN_FW_STUFF
_HB_FUN_FW_TABLESTYLEHTML _HB_FUN_FW_TIMEPART
_HB_FUN_FW_TIMEZONE _HB_FUN_FW_TIMEZONENAME
_HB_FUN_FW_TRANSFORM _HB_FUN_FW_TRIM
_HB_FUN_FW_TTOD _HB_FUN_FW_UNIXTODATE
_HB_FUN_FW_UTCTOLOCAL _HB_FUN_FW_UTF8LEFT
_HB_FUN_FW_UTF8RIGHT _HB_FUN_FW_UTF8STUFF
_HB_FUN_FW_UTF8SUBSTR _HB_FUN_FW_VALTOCSV
_HB_FUN_FW_VALTOEXP _HB_FUN_FW_VALTOHTML
_HB_FUN_FW_YMDLAPSED _HB_FUN_INTPICT
_HB_FUN_ISBINARYDATA _HB_FUN_ISROMANNUMBER
_HB_FUN_ISTEXTUNICODE _HB_FUN_MAKEIID
_HB_FUN_NSTRTONUM _HB_FUN_NUMPICT
_HB_FUN_NUMPICTADDCURRENCY _HB_FUN_NUMPICTFORVAL
_HB_FUN_STRBETWEEN _HB_FUN_TABLETOHTMLPAGE
_HB_FUN_UCHARTOVAL _HB_FUN_UTC_TIMESTAMP
_HB_FUN_UTF16TOUTF8 _HB_FUN_UTF8TOUTF16
_HB_FUN_WHEELSCROLL
valtostt size = 248
_HB_FUN_FW_DT2STR _HB_FUN_FW_STR2DT
video size = 2832
_HB_FUN_TVIDEO
vistamnu size = 22394
_HB_FUN_C5SETSCROLLINFO _HB_FUN_INTERSECTRECT
_HB_FUN_TVISTAMENU _HB_FUN_TVISTAMENUITEM
vrd size = 44247
_HB_FUN_DELFILE _HB_FUN_ENTRYNR
_HB_FUN_FULLPATHNAME _HB_FUN_GETINIENTRY
_HB_FUN_GETINISECTION _HB_FUN_GETPPSECTION
_HB_FUN_REGOPENKEYEXA _HB_FUN_REGQUERYVALUEEXA
_HB_FUN_VRD _HB_FUN_VRD_ATOKEN
_HB_FUN_VRD_ERSTART _HB_FUN_VRD_GETFIELD
_HB_FUN_VRD_GETFULLPATH _HB_FUN_VRD_GETGROUP
_HB_FUN_VRD_GETREGISTRY _HB_FUN_VRD_GL
_HB_FUN_VRD_LF2SF _HB_FUN_VRD_NEWSTRUCTURE
_HB_FUN_VRD_PRREPORT _HB_FUN_VRD_SETFIELD
_HB_FUN_VRD_STRCOUNT _HB_FUN_VRD_XTOC
vrdbcode size = 11700
_HB_FUN_VRDBARCODE
vrdini size = 3592
_HB_FUN_GETPROFSECT _HB_FUN_TINIER
vrditem size = 9016
_HB_FUN_VRDITEM
vstrfun1 size = 5496
_HB_FUN_FINDMATCH _HB_FUN_FIRSTWORD
_HB_FUN_FW_AT _HB_FUN_FW_EXPRNASBLOCK
_HB_FUN_FW_STRICMP _HB_FUN_FW_STRIPCOMMENTS
_HB_FUN_ISINLIST _HB_FUN_VALTYPEX
wbrowse size = 44751
_HB_FUN_TWBROWSE _HB_FUN__AFIELDS
webapp size = 9352
_HB_FUN_BUTTONHTML _HB_FUN_CHECKBOXHTML
_HB_FUN_CTRLSHTML _HB_FUN_EDITHTML
_HB_FUN_GETWEBAPP _HB_FUN_ISWEBAPP
_HB_FUN_SETWEBAPP _HB_FUN_STATICHTML
_HB_FUN_WA_ADDDIALOG _HB_FUN_WA_CONTROLLER
_HB_FUN_WA_EXISTDIALOG _HB_FUN_WA_GETDIALOGFROMID
_HB_FUN_WA_GETDIALOGFROMLINK _HB_FUN_WA_HEADER
_HB_FUN_WA_SHOWCODEDIALOGS _HB_FUN_WEBSERVER
webserver size = 5462
_HB_FUN_HBWEBSERVER _HB_FUN_HB_URLDECODE
_HB_FUN_OBJSETDATA _HB_FUN_OBJTOCHAR
window size = 66407
_HB_FUN_AREAD _HB_FUN_ASAVE
_HB_FUN_ATOTEXT _HB_FUN_BRWCLASSES
_HB_FUN_CLEARDATASLIST _HB_FUN_DBUFFEREND
_HB_FUN_DEVICETOUCHSPACE _HB_FUN_FW_TOUCHFRIENDLY
_HB_FUN_GETALLWIN _HB_FUN_GETDROPINFO
_HB_FUN_GETMSGLOG _HB_FUN_GETSETWINSYSLOG
_HB_FUN_GETWNDDEFAULT _HB_FUN_MSGLOG
_HB_FUN_NWINDOWS _HB_FUN_OREAD
_HB_FUN_OWNDFROMHWND _HB_FUN_SETALPHA
_HB_FUN_SETBALLOON _HB_FUN_SETDRAGBEGINWND
_HB_FUN_SETDROPINFO _HB_FUN_SETSKINS
_HB_FUN_SETWNDDEFAULT _HB_FUN_STARTFWLOG
_HB_FUN_TWINDOW _HB_FUN_WNDCREATEERROR
_HB_FUN_WNDMAIN _HB_FUN_WNDPARENTS
_HB_FUN__FWH
wininet size = 7844
_HB_FUN_FTPCREATEDIRECTORY _HB_FUN_FTPDELETEFILE
_HB_FUN_FTPFINDFIRSTFILE _HB_FUN_FTPGETFILE
_HB_FUN_FTPOPENFILE _HB_FUN_FTPPUTFILE
_HB_FUN_FTPRENAMEFILE _HB_FUN_FTPSETCURRENTDIRECTORY
_HB_FUN_INTERAUTHA _HB_FUN_INTERNETAT
_HB_FUN_INTERNETAU _HB_FUN_INTERNETCLOSEHANDLE
_HB_FUN_INTERNETCONNECT _HB_FUN_INTERNETDI
_HB_FUN_INTERNETFINDNEXTFILE _HB_FUN_INTERNETGO
_HB_FUN_INTERNETHA _HB_FUN_INTERNETOPEN
_HB_FUN_INTERNETREADFILE _HB_FUN_INTERNETSETFILEPOINTER
_HB_FUN_INTERNETST _HB_FUN_INTERNETWRITEFILE
_HB_FUN_INTRESPINF _HB_FUN_WININET
winrt size = 3796
_HB_FUN_ROGETACTIVATIONFACTORY _HB_FUN_ROINITIALIZE
_HB_FUN_ROUNINITIALIZE _HB_FUN_TOAST
_HB_FUN_WINDOWSCREATESTRING _HB_FUN_WINDOWSDELETESTRING
_HB_FUN_WINDOWSGETSTRINGRAWBUFFER _HB_FUN_WINRTSTRING
wqout size = 400
_HB_FUN_WQOUT
xbrcode size = 19199
_HB_FUN_CFONTCODE _HB_FUN_TXBRCODE
_HB_FUN_TXBRCOLCODE
xbrgetdt size = 7748
_HB_FUN_RESETCAL _HB_FUN_SETUPCOL
_HB_FUN_TDTXBROWSE _HB_FUN_XBRGETDATE
xbrowse size = 264311
_HB_FUN_CALCLINEWH _HB_FUN_CONTRASTCOLOR
_HB_FUN_DRAWHORZ _HB_FUN_DRAWPEN
_HB_FUN_DRAWVERT _HB_FUN_EXTRACTLINE
_HB_FUN_HASHTREE _HB_FUN_ISRECORDSET
_HB_FUN_PARSEXBRCOLSPEC _HB_FUN_SETKINETIC
_HB_FUN_SETXBROWSE _HB_FUN_TXBROWS
_HB_FUN_TXBROWSE _HB_FUN_TXBRWCOLUMN
_HB_FUN_XADS_KEYGOTO _HB_FUN_XBRADOSAVE
_HB_FUN_XBREDITMEMO _HB_FUN_XBRGETSELECTALL
_HB_FUN_XBRHEXEDIT _HB_FUN_XBRIMAGEEDIT
_HB_FUN_XBRJUSTIFY _HB_FUN_XBRNUMFORMAT
_HB_FUN_XBROWSABLEOBJ _HB_FUN_XBROWSENEW
_HB_FUN_XBRSQLRDDMODE _HB_FUN_XBRWSETDATASOURCE
_HB_FUN_XREPORT
xbrowser size = 10775
_HB_FUN_XBROWSE
xcbrowse size = 42219
_HB_FUN_CLICKOUTEND _HB_FUN_DAFMTOTXT
_HB_FUN_DRAWROWN _HB_FUN_GENMENUBLOCK
_HB_FUN_TXCBROWS _HB_FUN_TXCBROWSE
_HB_FUN_TXCBRWCOLUMN _HB_FUN_XBRWLINDET
_HB_FUN_XBRWTEXTFILE _HB_FUN_XCBROWSEMNU
_HB_FUN_XCBROWSENEW _HB_FUN_XCBROWSETREE
_HB_FUN_XMAKETREE _HB_FUN_XSUBTREE
_HB_FUN_XTOGGLEFOLDER
ximage size = 29213
_HB_FUN_ANGLE3PT _HB_FUN_ROTATEBMP
_HB_FUN_TXIMAGE _HB_FUN_WMF2EMFX
_HB_FUN_XIMAGE _HB_FUN_XIMAGEARRAY
xmlview size = 5224
_HB_FUN_FW_XMLVIEW _HB_FUN_XBROWSEXML
xpad size = 740
_HB_FUN_GETFREESYSTEMRESOURCES _HB_FUN_XPADC
_HB_FUN_XPADL _HB_FUN_XPADR
Code: Select all | Expand
Publics by module
BMPREAD size = 347
_HB_FUN_FILEREAD _HB_FUN_READBITMAP
CTLHDLEH size = 6976
_HB_FUN_WNDHANDLEEVENT _regex
FFWNDRUN size = 400
_GetWndApp _HB_FUN_SETIDLEACT
_HB_FUN_WINRUN _HB_FUN___GENGPF
_SetWndApp __SetAcceleratorTable
_wLastKey
HARBOURC size = 622
_FW_GetUnicode _FrameProc
_HB_FUN_ALLOCCONSOLE _HB_FUN_DEBUGGER
_HB_FUN_FW_SETUNICODE _HB_FUN_GETSTDHANDLE
_HB_FUN_SETCONSOLETITLE _HB_FUN__LASTKEY
_LogFile ___FWH
LEGACYCP size = 0
SYSREFRE size = 530
_DdeRefresh _HB_FUN_DDEREFRESH
_HB_FUN_SYSREFRESH _SysRefresh
TOOLBARS size = 970
_HB_FUN_CREATETLBAR _HB_FUN_INITCOMMONCONTROLS
_HB_FUN_INITCOMMONCONTROLSEX _HB_FUN_TBADDBUTTON
_HB_FUN_TBADDMENU _HB_FUN_TBADDSEPARATOR
_HB_FUN_TBENABLEBUTTON _HB_FUN_TBGETRECT
_HB_FUN_TBSETTEXT _HB_FUN_TTNSETTEXT
TOOLTIP size = 322
_HB_FUN_CREATETOOLTIP
WNDRUN size = 6572
_GetWndProcInstance _HB_FUN_CANREGDIALOG
_HB_FUN_DEREGDIALOG _HB_FUN_GETWNDAPP
_HB_FUN_LWRUNNING _HB_FUN_REGDIALOG
_HB_FUN_SETWNDAPP _IsModelessDialog
_SetRunning _bWRunning
XPROC size = 152
_HB_FUN_XCHANGEPROC
__WNDPRO size = 149
_HB_FUN_WININSPECT __DbgWndProc
__WndProc _bDbgActive
_bDbgBreak
aat size = 201
_HB_FUN_AAT
accelera size = 422
_HB_FUN_LOADACCELERATORS _HB_FUN_SETACCTABLE
_HB_FUN_TRANSLATEACCELERATOR
actx size = 557
anigif size = 101
animate size = 160
_HB_FUN_ANIMOPEN _HB_FUN_ANIMOPENEX
_HB_FUN_ANIMPLAY
ansiup size = 227
_HB_FUN_ANSILOWER _HB_FUN_ANSIUPPER
_HB_FUN_CHARUPPER _HB_FUN_ISANSILOWER
_HB_FUN_ISANSIUPPER
arg size = 115
_HB_FUN_ARG _HB_FUN_CARGV
_HB_FUN_NARGC
atom size = 101
_HB_FUN_GLOBALADDATOM _HB_FUN_GLOBALDELATOM
_HB_FUN_GLOBALGETATOMNAME
b2bin size = 176
_HB_FUN_B2BIN _HB_FUN_BIN2D
_HB_FUN_C2HEX _HB_FUN_D2BIN
backgrnd size = 436
_HB_FUN_DitBackGrd
bartools size = 807
_BtnDisable _HB_FUN_BARADJUST
_HB_FUN_BTNDISABLE _RectDisable
bitmaps size = 34183
_HB_FUN_FWBITMAP _fwstrlwr
bmpdraw size = 4064
_DrawBitmap _DrawGray
_DrawGrayed _DrawMasked
_DuplicateBitmap _FWWaterMark
_HB_FUN_BMPALPHA _HB_FUN_BTNPAINT
_HB_FUN_COPYIMAGE _HB_FUN_CREATECOMPATIBLEBITMAP
_HB_FUN_DRAWBITMAP _HB_FUN_DRAWGRAY
_HB_FUN_DRAWMASKED _HB_FUN_DUPLICATEBITMAP
_HB_FUN_FWHBMPTOALPHA _HB_FUN_FWWATERMARK
_HB_FUN_RESIZEBMP _HB_FUN_SHADOWH
_HB_FUN_SHADOWV _HB_FUN_STRETCHBLT
bmps size = 14363
_HB_FUN_BMPEBCOLLAPSED _HB_FUN_BMPEBEXPANDED
_HB_FUN_BMPOLARROW _HB_FUN_BMPOLDOTS
_HB_FUN_CLOSELISTBAR _HB_FUN_CLOSEOVERLISTBAR
_HB_FUN_MSGBAR2007 _HB_FUN_OPENLISTBAR
_HB_FUN_OPENOVERLISTBAR _HB_FUN_QUICKAREAL
_HB_FUN_QUICKAREAM _HB_FUN_QUICKAREAR
bmptabs size = 10585
_HB_FUN_BMP_BACK _HB_FUN_BMP_BACKV
_HB_FUN_BMP_TABSEL _HB_FUN_BMP_TABSELL
_HB_FUN_BMP_TABSELLV _HB_FUN_BMP_TABSELR
_HB_FUN_BMP_TABSELRV _HB_FUN_BMP_TABSELV
_HB_FUN_BMP_TABUNSEL _HB_FUN_BMP_TABUNSELV
_HB_FUN_BMP_TABUNSL _HB_FUN_BMP_TABUNSLV
_HB_FUN_BMP_TABUNSR _HB_FUN_BMP_TABUNSRV
brushes size = 22037
_CircleGradient _CreateMemBitmap
_CreateMemBitmap2 _CreateMemBitmap3
_DiagonalGradient _Gradient
_HB_FUN_ABPAINT _HB_FUN_ATREEBMPS
_HB_FUN_BMP_ARROWBCK _HB_FUN_CIRCLEGRADIENT
_HB_FUN_CREATEHATCHBRUSH _HB_FUN_DIAGONALGRADIENT
_HB_FUN_EMF2WMF _HB_FUN_FIXSAYS
_HB_FUN_FWBRUSHES _HB_FUN_FWLOGOBITMAP
_HB_FUN_GETDRAWITEM _HB_FUN_GETDRAWMENU
_HB_FUN_GETMEAITEM _HB_FUN_GRADIENT
_HB_FUN_ISBREAK _HB_FUN_ISDIBITMAP
_HB_FUN_ISMENUITEM _HB_FUN_ISMISEPARATOR
_HB_FUN_ISSEPARATOR _HB_FUN_MISTEXT
_HB_FUN_MSGBAR2010 _HB_FUN_MSGBAR2015
_HB_FUN_PARENTIMAGE _HB_FUN_WMF2EMF
_HB_ISDIBitmap
c5cnew size = 28735
BrowseCallbackProc _BitmapFromCode
_C5GradientFill _C5_CloseThemeData
_C5_DrawThemeBackground _C5_IsAppThemed
_C5_IsThemeActive _C5_OpenThemeData
_DrawAlphaTransparentBitmap _DrawBitmapEx
_DrawBitmapTransparent _DrawGradientFill
_DrawMaskedColor _FillSolidRect
_FrameDotEx2 _GetFontMenu
_GradientFill0 _HB_FUN_ARROWDOWN
_HB_FUN_ARROWUP _HB_FUN_BMPARROWDOWNBLACK
_HB_FUN_BMPARROWDOWNNET _HB_FUN_BMPARROWDOWNWHITE
_HB_FUN_BMPARROWUPBLACK _HB_FUN_BMPARROWUPWHITE
_HB_FUN_BMPBLACKARROWS _HB_FUN_BMPBTNDBAR
_HB_FUN_BMPCARPETA _HB_FUN_BMPCDROM
_HB_FUN_BMPHDDISK _HB_FUN_BMPHEIGHT
_HB_FUN_BMPHTML _HB_FUN_BMPNETDRIVE
_HB_FUN_BMPTOGRAY _HB_FUN_BMPWHITEARROWS
_HB_FUN_BMPWIDTH _HB_FUN_BOX
_HB_FUN_BOXEX _HB_FUN_C5CURSORCATCH
_HB_FUN_C5CURSORHAND _HB_FUN_C5CURSORSEP
_HB_FUN_C5DEGRADA _HB_FUN_C5DRAWTEXT
_HB_FUN_C5LINE _HB_FUN_C5ROUNDBOX
_HB_FUN_C5ROUNDRECT _HB_FUN_C5_CLOSETHEMEDATA
_HB_FUN_C5_DRAWTHEMEBACKGROUND _HB_FUN_C5_DRAWTHEMEICON
_HB_FUN_C5_DRAWTHEMETEXT _HB_FUN_C5_EXTFLOODFILL
_HB_FUN_C5_GETCURRENTTHEMENAME _HB_FUN_C5_GETTHEMECOLOR
_HB_FUN_C5_GETTHEMEFONT _HB_FUN_C5_ISAPPTHEMED
_HB_FUN_C5_ISTHEMEACTIVE _HB_FUN_C5_OPENTHEMEDATA
_HB_FUN_CGETFILEEX _HB_FUN_CGETFOLDER
_HB_FUN_COMPATBMP _HB_FUN_COMPATDC
_HB_FUN_CREAFBOLD _HB_FUN_CREAFCAPT
_HB_FUN_CREAFUNDER _HB_FUN_CREATEBRUSHDOTTED
_HB_FUN_CREATECAPTIONFONT _HB_FUN_CREATEFONTBOLD
_HB_FUN_CREATEFONTUNDERLINE _HB_FUN_CREATEHGRIP
_HB_FUN_DEGRADASO _HB_FUN_DRAWALPHATRANSPARENTBITMAP
_HB_FUN_DRAWBITMAPEX _HB_FUN_DRAWEDGE
_HB_FUN_DRAWFRAMECONTROL _HB_FUN_DRAWGRADIENTFILL
_HB_FUN_DRAWIMAGEBLEND _HB_FUN_DRAWMASKEDCOLOR
_HB_FUN_DRAWSTATESTRING _HB_FUN_EQUALRECT
_HB_FUN_EXCLUDECLIPRECT _HB_FUN_FILLSOLIDRECT
_HB_FUN_FILLSOLIRC _HB_FUN_FRAMEDOTEX
_HB_FUN_FWDELETEFILE _HB_FUN_GETBMPICONEXT
_HB_FUN_GETCURRENTOBJECT _HB_FUN_GETDRAWITEMSTRUCT
_HB_FUN_GETSCROLLINFOPOS _HB_FUN_GETSIZETEXT
_HB_FUN_GETTEXTLEN _HB_FUN_HGRADIENTFILL
_HB_FUN_HORIZONTALGRADIENT _HB_FUN_ICONTOBMP
_HB_FUN_ICONTOGRAY _HB_FUN_IMAGELIST_ADD
_HB_FUN_IMAGELIST_ADDMASKED _HB_FUN_IMAGELIST_CREATE
_HB_FUN_IMAGELIST_DESTROY _HB_FUN_IMAGELIST_DRAW
_HB_FUN_IMAGELIST_GETICONSIZE _HB_FUN_IMAGELIST_LOADIMAGE
_HB_FUN_INTRECT _HB_FUN_LINEEX
_HB_FUN_MENUDRAWITEM2 _HB_FUN_MENUMEASUREITEM2
_HB_FUN_POW _HB_FUN_PTINRECT
_HB_FUN_REGISTERWINDOWMESSAGE _HB_FUN_ROUNDRECTEX
_HB_FUN_SETBRUSHORG _HB_FUN_SETEDITCLIENTRIGHT
_HB_FUN_SETMENUITEMBITMAPS _HB_FUN_SETSTRETCHBLTMODE
_HB_FUN_SHADERECT _HB_FUN_STARTTRACKMOUSELEAVE
_HB_FUN_TRANSPARENTBLT _HB_FUN_TRANSPARENTBLT2
_HB_FUN_VALIDATERECT _HB_FUN_VERTICALGRADIENT
_HB_FUN_VGRADIENTFILL _HorizontalGradient
_ShadeRect _StartTrackMouseLeave
_VerticalGradient
caldll32 size = 552
_GetCallProc32 _HB_FUN_GETHWND32
_HB_FUN_GETPROC32 _HB_FUN_GETVDMP16
_HB_FUN_GETVDMP32 _HB_FUN_LADDTOC
calendar size = 1574
_HB_FUN_GETDAYSTATE _HB_FUN_ISOVERDAY
_HB_FUN_MONTHCAL_GETCOLOR _HB_FUN_MONTHCAL_GETCURRENTVIEW
_HB_FUN_MONTHCAL_GETCURSEL _HB_FUN_MONTHCAL_GETFIRSTDAYOFWEEK
_HB_FUN_MONTHCAL_GETMAXSELCOUNT _HB_FUN_MONTHCAL_GETMINREQRECT
_HB_FUN_MONTHCAL_GETMONTHRANGE _HB_FUN_MONTHCAL_GETRANGE
_HB_FUN_MONTHCAL_GETSELRANGE _HB_FUN_MONTHCAL_GETTODAY
_HB_FUN_MONTHCAL_GETVIEWCHANGEVALUES _HB_FUN_MONTHCAL_SETCOLOR
_HB_FUN_MONTHCAL_SETCURRENTVIEW _HB_FUN_MONTHCAL_SETCURSEL
_HB_FUN_MONTHCAL_SETFIRSTDAYOFWEEK _HB_FUN_MONTHCAL_SETMAXSELCOUNT
_HB_FUN_MONTHCAL_SETRANGE _HB_FUN_MONTHCAL_SETSELRANGE
_HB_FUN_MONTHCAL_SETTODAY _HB_FUN_MONTHCAL_SIZERECTTOMIN
_HB_FUN_SETDAYSTATE
calexc size = 1908
_HB_FUN_HNEXTITEM _HB_FUN_HNEXTITEMO
_HB_FUN_HPREVITEM _HB_FUN_HPREVITEMO
_HB_FUN_POLYLINE _HB_FUN_RGBFILTER
calldll size = 816
_HB_FUN_FWCALLDLL
calldllc size = 0
caret size = 154
_HB_FUN_CREATECARET _HB_FUN_DESTROYCARET
_HB_FUN_GETCARETPOS _HB_FUN_HIDECARET
_HB_FUN_SETCARETPOS _HB_FUN_SHOWCARET
changepr size = 92
_HB_FUN_CHANGEPROC _HB_FUN_LINKDLG
_HB_FUN_RESTPROC
chr2data size = 65
_HB_FUN_CCHR2DATA
clpbrd size = 1050
_HB_FUN_CLOSECLIPBOARD _HB_FUN_EMPTYCLIPBOARD
_HB_FUN_GETCLPDATA _HB_FUN_GETPRIORITYCLIPBOARDFORMAT
_HB_FUN_OPENCLIPBOARD _HB_FUN_SETCLIPBOARDDATA
clrchoos size = 305
ComDlgHkColor _HB_FUN_CHOOSECOLOR
clt2scr size = 256
_HB_FUN_CLIENTTOSCREEN _HB_FUN_SCREENTOCLIENT
codegtf size = 641
_HB_FUN_CODETEXT _HB_FUN_DECODETEXT
color size = 2659
_HB_FUN_ARGB2RGB _HB_FUN_BGR2RGB
_HB_FUN_CLR2ARRAY _HB_FUN_GETBKCOLOR
_HB_FUN_GETSYSCOLOR _HB_FUN_GETTEXTCOLOR
_HB_FUN_HSLTORGB _HB_FUN_NARGB
_HB_FUN_NRGB _HB_FUN_RGBTOHSL
_HB_FUN_SETBKCOLOR _HB_FUN_SETBKMODE
_HB_FUN_SETSYSCOLORS _HB_FUN_SETTEXTCOLOR
_hashrgbtocolorref _hsl_to_rgb
_rgb_to_hsl
colorton size = 1009
_HB_FUN_LIGHTCOLOR _HB_FUN_NCOLORTON
_HB_FUN_NGETBACKRGB _HB_FUN_NGETFORERGB
_HB_FUN_NRGB2ARRAY _HB_FUN_NRGBBLUE
_HB_FUN_NRGBGREEN _HB_FUN_NRGBRED
_bColorToN _lColorToRGB
comm size = 1417
_CloseComm _EnableCommNotification
_FlushComm _GetCommError
_GetCommEventMask _HB_FUN_BUILDCOMMDCB
_HB_FUN_CLOSECOMM _HB_FUN_ENABLECOMMNOTIFICATION
_HB_FUN_ESCAPECOMMFUNCTION _HB_FUN_FLUSHCOMM
_HB_FUN_GETCOMMERROR _HB_FUN_OPENCOMM
_HB_FUN_READCOMM _HB_FUN_SETCOMMSTATE
_HB_FUN_WRITECOMM _OpenComm
_ReadComm _SetCommEventMask
_WriteComm
crc size = 1642
_HB_FUN_NCRCERROR _HB_FUN_NFILECRC
_HB_FUN_NSTRCRC
createpa size = 48
_HB_FUN_CREATEPATTERNBRUSH
createpe size = 40
_HB_FUN_CREATEPEN
createso size = 149
_HB_FUN_CREATESOLIDBRUSH _HB_FUN_SETBRUSHORGEX
creatwnd size = 207
_HB_FUN_CREATEWINDOW _HB_FUN_GETERRMSG
ctl3d size = 858
Ctl3dAutoSubClass Ctl3dEnabled
Ctl3dRegister Ctl3dSubClassDlgEx
Ctl3dSubclassCtl Ctl3dUnregister
Ctl3dUnsubclassCtl _HB_FUN_CTL3DAUTOS
_HB_FUN_CTL3DDLGEX _HB_FUN_CTL3DLOOK
_HB_FUN_CTL3DREGIS _HB_FUN_CTL3DUNREG
_HB_FUN_SET3DLOOK
ctrl2chr size = 643
_HB_FUN_CCTRL2CHR _HB_FUN_CTRLFONTFACENAME
_HB_FUN_CTRLFONTSIZE _HB_FUN_CTRLGETBACKCOLOR
_HB_FUN_CTRLGETTEXTCOLOR _HB_FUN_GETDIALOGBASEUNITS
ctrldraw size = 2059
_HB_FUN_BARINVERT _HB_FUN_CTRLDRAW
_HB_FUN_CTRLDRAWFOCUS _HB_FUN_LBXDRAWITEM
_HB_FUN_LBXMEASURE _HB_FUN_RECTDOTTED
cursors size = 4370
_CursorArrow _CursorWait
_HB_FUN_CREATEBMPCURSOR _HB_FUN_CURSOR
_HB_FUN_CURSORARROW _HB_FUN_CURSORCATCH
_HB_FUN_CURSORDRAG _HB_FUN_CURSORHAND
_HB_FUN_CURSORIBEAM _HB_FUN_CURSORNO
_HB_FUN_CURSORNS _HB_FUN_CURSOROPENHAND
_HB_FUN_CURSORSEARCH _HB_FUN_CURSORSIZE
_HB_FUN_CURSORSTOP _HB_FUN_CURSORWAIT
_HB_FUN_CURSORWE _HB_FUN_DESTROYCURSOR
_HB_FUN_GETCURSORDRAG _HB_FUN_GETCURSORHAND
_HB_FUN_GETCURSORPOS _HB_FUN_GETCURSORSEARCH
_HB_FUN_GETCURSORSTOP _HB_FUN_GETGUIRESOURCES
_HB_FUN_LOADCURSOR _HB_FUN_SETCURSORPOS
_HB_FUN_SHOWCURSOR _HB_FUN_WSETCURSOR
cvrflow size = 3844
_BackImg _BmpPer
_BmpPerspec _DrawReflex
_HB_FUN_BMPPER _HB_FUN_BMPPERSPEC
_HB_FUN_DRAWREFLEX
cwebview size = 1368
datepick size = 385
_HB_FUN_GETDATEPICK _HB_FUN_INITCOMMON
_HB_FUN_SETDATEPICK
datetime size = 201
_HB_FUN_FILETIMETODATE _HB_FUN_FILETIMETOTIME
_HB_FUN_SYSTIME
dbl2flt size = 186
_HB_FUN_NDBL2FLT _dbl2flt
dc size = 1788
_HB_FUN_BITBLT _HB_FUN_CREATECDC
_HB_FUN_CREATECOMPATIBLEDC _HB_FUN_CREATEDC
_HB_FUN_DBUFFERSTART _HB_FUN_DELETEDC
_HB_FUN_FWDISPBEGIN _HB_FUN_FWDISPEND
_HB_FUN_FWRESTSCREEN _HB_FUN_FWSAVESCREEN
_HB_FUN_GETDC _HB_FUN_GETWINDOWDC
_HB_FUN_RELEASEDC _HB_FUN_RESTOREDC
_HB_FUN_SAVEDC _HB_FUN_SETDIBITSTODEVICE
_HB_FUN_SETVIEWORG _HB_FUN_SETVIEWPORTEXT
_HB_FUN_SETWINDOWEXT
ddeml size = 1121
_ClientCallback _HB_FUN_CLIENTCALLBACK
_HB_FUN_DDEACCESSDATA _HB_FUN_DDECLIENTTRANSACTION
_HB_FUN_DDECMPSTRINGHANDLES _HB_FUN_DDECONNECT
_HB_FUN_DDECREATEDATAHANDLE _HB_FUN_DDECREATESTRINGHANDLE
_HB_FUN_DDEDISCONNECT _HB_FUN_DDEFREEDATAHANDLE
_HB_FUN_DDEFREESTRINGHANDLE _HB_FUN_DDEGETDATA
_HB_FUN_DDEGETLASTERROR _HB_FUN_DDEINITIALIZE
_HB_FUN_DDENAMESERVICE _HB_FUN_DDEQUERYSTRING
_HB_FUN_DDEUNINITIALIZE _HB_FUN_SERVERCALLBACK
_ServerCallback
ddexc size = 112
_HB_FUN_DDECOMMAND _HB_FUN_DDEGETCOMMAND
delobjec size = 103
_HB_FUN_DELETEOBJECT _HB_FUN_ISGDIOBJECT
_IsGDIObject
desktop size = 154
_HB_FUN_GETDESKTOPAREA _HB_FUN_GETDESKTOPWINDOW
_HB_FUN_SETDESKWALLPAPER
device size = 639
_HB_FUN_DEVICECAPABILITIES _HB_FUN_GETDEVICECAPS
_HB_FUN_GETDRIVETYPE _HB_FUN_GETLOGICALDRIVES
_HB_FUN_GETLOGICALDRIVESTRINGS _HB_FUN_SETROP2
dib size = 1348
_CreateDIBPalette _DibBits
_DibDraw _DibRead
_DibToStr _DibWrite
_HB_FUN_CREATEDIBITMAP _HB_FUN_DIBDRAW
_HB_FUN_DIBHEIGHT _HB_FUN_DIBPALETTE
_HB_FUN_DIBREAD _HB_FUN_DIBTOSTR
_HB_FUN_DIBWIDTH _HB_FUN_DIBWRITE
wDIBColors
dibbmp size = 1257
_DibFromBitmap _DibNumColors
_HB_FUN_ALPHAFILL _HB_FUN_BMPTOSTR
_HB_FUN_DIBFROMBITMAP _HB_FUN_HASALPHA
_isalphabmp _setalphabits
disk size = 104
_HB_FUN_GETDISKFREESPACEEX
dlg2chr size = 461
_HB_FUN_CDLG2CHR _HB_FUN_GETDLGBASEUNITS
dlgbox size = 851
_AnsiToWide _HB_FUN_DIALOGBOX
_HB_FUN_DIALOGBOXINDIRECT _HB_FUN_DIALOGBOXINDIRECTW
_HB_FUN_DIALOGBOXW
dll size = 0
dlogbox size = 708
_HB_FUN_CREATEDLG _HB_FUN_CREATEDLGINDIRECT
_HB_FUN_CREATEDLGINDIRECTW _HB_FUN_CREATEDLGW
_HB_FUN_ENDDIALOG _HB_FUN_NDLGBOX
_HB_FUN_SETOWNERDRAWITEMHEIGHT
dotnet size = 0
dots size = 729
_HB_FUN_DOTSADJUST
drawgrid size = 117
_HB_FUN_DRAWGRID
drawicon size = 1202
_HB_FUN_EXTDRAWICON _HB_FUN_GETPROMPTRECT
_MsgAdjust
drawing size = 1618
_HB_FUN_ARC _HB_FUN_CHORD
_HB_FUN_DRAWSTATE _HB_FUN_ELLIPSE
_HB_FUN_EXTFLOODFILL _HB_FUN_FLOODFILL
_HB_FUN_GETPIXEL _HB_FUN_LINETO
_HB_FUN_PIE _HB_FUN_POLYPOLYGON
_HB_FUN_RECTANGLE _HB_FUN_SETPIXEL
_HB_FUN_SETPOLYFILLMODE _MoveTo
drawitem size = 274
_HB_FUN_DRAWMSGITEM
drawsele size = 1118
_HB_FUN_DRAWSELECTOR
drawslid size = 4605
_HB_FUN_DRAWSLIDER
drives size = 201
_HB_FUN_GETCURDIR _HB_FUN_ISCDROM
_HB_FUN_ISDISKETTE _HB_FUN_SETCURDIR
_HB_FUN_SETCURDRIVE
dropfile size = 829
DropTarget_AddRef DropTarget_DragEnter
DropTarget_DragLeave DropTarget_DragOver
DropTarget_Drop DropTarget_QueryInterface
DropTarget_Release _DropTarget_Vtbl
_HB_FUN_DRAGACCEPTFILES _HB_FUN_DRAGFINISH
_HB_FUN_DRAGQUERYFILES _HB_FUN_DRAGQUERYPOINT
_HB_FUN_REGISTERDRAGDROP _HB_FUN_REVOKEDRAGDROP
encript size = 548
_HB_FUN_DECRYPT _HB_FUN_ENCRYPT
ffdlgprc size = 425
DialogWndProc DlgNoModalProc
_HB_FUN_ODLGFROMHWND _SetDlgNoModal
fgetclip size = 624
_HB_FUN_GETFCLIPDATA _HB_FUN_SETFCLIPDATA
fgetline size = 5353
_GetTextExtent _HB_FUN_CARETFLINE
_HB_FUN_DRAWFGETLINE _HB_FUN_FORMATFLINE
_HB_FUN_HEIGHTFLINE _HB_FUN_LENFLINE
_HB_FUN_WIDTHFLINE _HB_FUN__DRAWFGETLINE
files size = 865
_HB_FUN_FATTRIB _HB_FUN_FCOMMIT
_HB_FUN_GETFTIME _HB_FUN_SETFTIME
findtext size = 354
_HB_FUN_FINDTEXT
foldtool size = 3108
_HB_FUN_FOLDPAINT
fonts size = 3072
_HB_FUN_ADDFONTRESOURCE _HB_FUN_BASETEXT
_HB_FUN_CHOOSEFONT _HB_FUN_CREATEFONT
_HB_FUN_CREATEFONTAS _HB_FUN_GETFACEFONTMENU
_HB_FUN_GETFONTHEIGHT _HB_FUN_GETFONTINFO
_HB_FUN_GETFONTMENU _HB_FUN_GETFONTNAMES
_HB_FUN_GETFONTWIDTH _HB_FUN_GETHEIGHTFONTMENU
_HB_FUN_GETHEIGHTMENU _HB_FUN_GETHFONTFROMINFO
_HB_FUN_GETWIDTHFONTMENU _HB_FUN_GETWIDTHMENU
_HB_FUN_HFONTTOAFONT _HB_FUN_REMOVEFONTRESOURCE
ftext size = 683
_HB_FUN_CFREADLINE _HB_FUN_CSTRWORD
_HB_FUN_LGETTEXTLINE _HB_FUN_NTXTLINES
__TReadLn _bStrAt
fwarray size = 1346
_fwArrayAdd _fwArrayDel
_fwArrayFree _fwArrayGet
_fwArrayIns _fwArrayLen
_fwArrayLock _fwArrayNew
_fwArraySet _fwArraySize
_fwArrayTraverse _fwArrayUnlock
fwbmp size = 7176
_AlphaBlendNew _HB_FUN_CROPIMAGE
_HB_FUN_NBMPCOLORS _HB_FUN_NBMPHEIGHT
_HB_FUN_NBMPWIDTH _HB_FUN_PALBMPDRAW
_HB_FUN_PALBMPLOAD _HB_FUN_PALBMPREAD
_HB_FUN_PALBMPREALIZE _HB_FUN_PALBTNPAINT
_HB_FUN_TRANSBMP _MaskRegion
_TransBmp _TransBmpNew
_drawbmp_alpha _drawbmp_trans
_hPalBitmapDraw _hPalBitmapNew
fwcrc8 size = 326
_HB_FUN_FW_CRC8
fwgif size = 34168
FW_WndProc _FWGIFClass
_FWReadFile _HB_FUN_FWGIFEND
_HB_FUN_FWGIFISRUNNING _HB_FUN_FWGIFPLAY
_HB_FUN_FWGIFRESIZE _HB_FUN_FWGIFRESTART
_HB_FUN_FWGIFSTOP _HB_FUN_FWGIFWINDOW
_HB_FUN_FWIGNOREBCK _HB_FUN_FWSETGIFBRUSH
_HB_FUN_FWSETGIFSIZING _HB_FUN_GETGIFINFO
_hin _last_passed
_pass
fwmatrix size = 3858
_HB_FUN_MATRIX_ARRAY _HB_FUN_MATRIX_CALC
_HB_FUN_MATRIX_CREATE _HB_FUN_MATRIX_DETERMINANT
_HB_FUN_MATRIX_IDENTITY _HB_FUN_MATRIX_INVERT
_HB_FUN_MATRIX_MMULT _HB_FUN_MATRIX_RANDOM
_HB_FUN_MATRIX_REFLECT _HB_FUN_MATRIX_RELEASE
_HB_FUN_MATRIX_ROW _HB_FUN_MATRIX_SUMOFROWS
_HB_FUN_MATRIX_TRANSPOSE _HB_FUN_MATRIX_VAL
_array_determinant _calc
_matrix_adjunct _matrix_check
_matrix_clone _matrix_copyfrom
_matrix_determinant _matrix_identity
_matrix_invert _matrix_linear_calc
_matrix_mmult _matrix_new
_matrix_random _matrix_release
_matrix_scalar_calc _matrix_sigmoid
_matrix_sigmoid_derivative _matrix_sumofrows
_matrix_transpose
fwpalctl size = 742
_HB_FUN_PALCHGEVENT _HB_FUN_QRYNEWPALEVENT
_HB_FUN_SETFOREBMP _IsForePalette
_PalBmpRealize
fwpng size = 2899
_FillBitmap _HB_FUN_CONVERTEMF2PNG
_HB_FUN_FWOPENPNGFILE _HB_FUN_FWPNGFROMMEMORY
_HB_FUN_SAVE2PNGFILE _IsPng
_imgbuf_alloc _imgbuf_free
_imgbuf_init _pix
_pixel_at _save_png_to_file
fwstr size = 484
_fw_memmove _fw_strcat
_fw_strchr _fw_strcpy
_fw_strncmp _fw_strstr
_fw_wcslen
fwunicode size = 7189
_FW_AnsiToWide _FW_WideToAnsi
_HB_FUN_ANSITOUTF8 _HB_FUN_APPENDMENUW
_HB_FUN_CREATEWINDOWEXW _HB_FUN_DRAWTEXTW
_HB_FUN_EXTTEXTOUTW _HB_FUN_FW_CDPTRANSLATE
_HB_FUN_FW_LEFT _HB_FUN_FW_OEMTOUTF8
_HB_FUN_FW_RIGHT _HB_FUN_FW_SETCDP
_HB_FUN_FW_STRPEEK _HB_FUN_FW_STRTOUTF8
_HB_FUN_FW_SUBSTR _HB_FUN_FW_UTF8CHR
_HB_FUN_FW_UTF8LEN _HB_FUN_FW_UTF8TOOEM
_HB_FUN_FW_UTF8TOSTR _HB_FUN_GETACP
_HB_FUN_GETCLASSINFOW _HB_FUN_GETOEMCP
_HB_FUN_GETTEXTWIDTHW _HB_FUN_HBCDP
_HB_FUN_INSERTMENUW _HB_FUN_MENUDRAWITEMW
_HB_FUN_MSGINFOW _HB_FUN_MSGPAINTW
_HB_FUN_REGISTERCLASSW _HB_FUN_STRTOWIDE
_HB_FUN_TEXTOUTW _HB_FUN_UTF8TOANSI
_HB_FUN_WIDETOSTR _HB_FUN_WTEXTOUTW
_UTF16toUTF8 _UTF8toUTF16
_fw_parWide _fw_retWide
_hasbom8 _hbcdp_to_wincdp
_is2byteansi _is_utf8
_strlentowidestr _strpart
_strtowidestr _utf8part
_widestrlentostr _widestrtostr
gdipfwh size = 4071
gdiplus size = 2770
_gdiplusStartupInput _gdiplusToken
getdir size = 815
_HB_FUN_CGETDIR _HB_FUN_CGETDIRA
_HB_FUN_FW_FOLDERCHANGED
getdlgit size = 96
_HB_FUN_GETDLGCTRLID _HB_FUN_GETDLGITEM
_HB_FUN_NEXTDLGTAB
getfile size = 2126
ComDlgHkFile _HB_FUN_CGETFILE
_HB_FUN_CGETFILEA _HB_FUN_NGETFILEFILTER
getproca size = 219
_HB_FUN_GETPRADD _HB_FUN_GETPROCADD
_HB_FUN_SETPROCADDRESS
getstkob size = 82
_HB_FUN_GETSTOCKOBJECT _HB_FUN_SETBLACKPEN
_HB_FUN_SETWHITEPEN
gettext size = 918
_HB_FUN_GETWINDOWTEXT _HB_FUN_GETWINTXTLENGHT
_HB_FUN_MGETLINE _HB_FUN_MGETREPLACE
_HB_FUN_WINLOWER _HB_FUN_WINUPPER
_UTF16toANSI _UTF16toSTR8
_ispureAnsiAsWide
gettextw size = 400
_HB_FUN_GETTEXTHEIGHT _HB_FUN_GETTEXTWIDTH
getwnd size = 179
_HB_FUN_CHILDWINDOWFROMPOINT _HB_FUN_GETWINDOW
_HB_FUN_GETWINDOWTHREADPROCESSID _HB_FUN_GETWINDOWWORD
_HB_FUN_GETWNDTASK
handlist size = 1172
__fwAddGlobal __fwDelGlobal
__fwFreeAllGlobals __fwFreeAllLibrarys
__fwFreeLibInstance __fwFreeLibrary
__fwLoadLibrary
harddisk size = 233
_HB_FUN_NSERIALA _HB_FUN_NSERIALHD
_HB_FUN_VOLUMENAME
help size = 726
_HB_FUN_GETHELPFILE _HB_FUN_GETHELPTOPIC
_HB_FUN_HELPCTRLHWND _HB_FUN_HELPSETPOS
_HB_FUN_HELPSETTOPIC _HB_FUN_SETHELPFILE
_HB_FUN__SETHELPFI
hex2dec size = 226
_HB_FUN_HEXTODEC _fw_hextodec
hiloword size = 196
_HB_FUN_NHIBYTE _HB_FUN_NHIWORD
_HB_FUN_NLOBYTE _HB_FUN_NLOWORD
icons size = 4610
_DrawIconFocus _GetIconSize
_HB_FUN_BMPFROMICON _HB_FUN_BMPFROMICONEX
_HB_FUN_DESTROYICON _HB_FUN_DRAWICON
_HB_FUN_DRAWICONEX _HB_FUN_DRAWICONFOCUS
_HB_FUN_DUPLICATEICON _HB_FUN_EXTRACTICON
_HB_FUN_GETICONSIZE _HB_FUN_HASICONALPHA
_HB_FUN_HBMPFROMHICON _HB_FUN_ICON_READ
_HB_FUN_ICON_READEX _HB_FUN_ISHICON
_HB_FUN_LOADICON _HB_FUN_LOADIMAGEFILEICON
_HB_FUN_LOADIMAGERESICON _HB_FUN_NICONS
_hasIconAlpha
imagelis size = 639
_HB_FUN_ILADD _HB_FUN_ILADDICON
_HB_FUN_ILADDMASKED _HB_FUN_ILCREATE
_HB_FUN_ILDESTROY _HB_FUN_ILLOADIMAGE
_HB_FUN_ILSETBKCOLOR
instance size = 251
_GetInstance _HB_FUN_GETFOCUS
_HB_FUN_GETINSTANCE _HB_FUN_POSTQUITMESSAGE
_HB_FUN_SETFOCUS _HB_FUN_SETFOREGROUNDWINDOW
_HB_FUN_SHOWWINDOW _HB_FUN__SETFOCUS
joystick size = 504
_HB_FUN_JOYGETDEVCAPS _HB_FUN_JOYGETNUMDEVS
_HB_FUN_JOYGETPOS _HB_FUN_JOYGETTHRESHOLD
_HB_FUN_JOYRELEASECAPTURE _HB_FUN_JOYSETCAPTURE
_HB_FUN_JOYSETTHRESHOLD
keybrd size = 457
_HB_FUN_FW_SENDKEY _HB_FUN_GETASYNCKEY
_HB_FUN_GETKEYSTATE _HB_FUN_GETKEYTOGGLE
_HB_FUN_KEYTOGGLE _HB_FUN_SENDKEY
_HB_FUN____KEYBOARD _PostVirtualKeyEvent
lbx size = 282
_HB_FUN_LBXGETITEM _HB_FUN_LBXGETSELITEMS
_HB_FUN_MEASUREITEM
listview size = 1396
_HB_FUN_GETNMLISTVIEWITEM _HB_FUN_LVDELETEITEM
_HB_FUN_LVENABLEGROUPVIEW _HB_FUN_LVFINDITEM
_HB_FUN_LVGROUPSETSTATE _HB_FUN_LVINSERTGROUP
_HB_FUN_LVINSERTGROUPINLIST _HB_FUN_LVINSERTINLIST
_HB_FUN_LVINSERTITEM _HB_FUN_LVINSERTITEMGROUP
_HB_FUN_LVSETGROUP _HB_FUN_LVSETITEMSELECT
_HB_FUN_LVSETITEMTEXT _HB_FUN_LVSETSTYLE
loadbmp size = 169
_HB_FUN_CREATEMEMBITMAP _HB_FUN_HSYSBITMAP
_HB_FUN_LOADBITMAP
longname size = 84
_HB_FUN_LCLOSE _HB_FUN_LCREAT
_HB_FUN_LOPEN
lzexpand size = 112
_HB_FUN_LZCOPYFILE
makeintr size = 19
_HB_FUN_MAKEINTRESOURCE
makelong size = 48
_HB_FUN_NMAKELONG
mapi size = 3875
_HB_FUN_MAPIADDRESS _HB_FUN_MAPIDELETEMAIL
_HB_FUN_MAPIFINDNEXT _HB_FUN_MAPILOGOFF
_HB_FUN_MAPILOGON _HB_FUN_MAPIREADMAIL
_HB_FUN_MAPIRESOLVENAME _HB_FUN_MAPISENDDOCUMENTS
_HB_FUN_MAPISENDMAIL
mci size = 728
_HB_FUN_AUXGETCAPS _HB_FUN_AUXGETDEV
_HB_FUN_AUXGETVOL _HB_FUN_AUXSETVOL
_HB_FUN_MCIGETERRORSTRING _HB_FUN_MCISENDCOMMAND
_HB_FUN_MCISENDSTR _HB_FUN_NMCIOPEN
_HB_FUN_NMCIPLAY _HB_FUN_NMCIWINDOW
mdi size = 871
_HB_FUN_CMDISTRUCT _HB_FUN_CREATEMDIWINDOW
_HB_FUN_GETFRAMEPROC _HB_FUN_GETMDICHLPROC
_HB_FUN_MDICTRLADJUST _WndFrameProc
mem size = 401
_HB_FUN_GETFREESPACE _HB_FUN_GLOBALALLOC
_HB_FUN_GLOBALCOMPACT _HB_FUN_GLOBALDATA
_HB_FUN_GLOBALFREE _HB_FUN_GLOBALLOCK
_HB_FUN_GLOBALREALLOC _HB_FUN_GLOBALSIZE
_HB_FUN_GLOBALUNLOCK _HB_FUN_LOCALSHRINK
_HB_FUN_NEXTMEM _fwGlobalAlloc
_fwGlobalFree
menudraw size = 17080
_Bmp2Gray _Check2007
_Check2010 _Check2013
_Check2015 _CheckFw
_DelCheck2007 _DelCheck2010
_DelCheck2013 _DelCheck2015
_DelCheckFw _DelPointC
_FwBarMenu _FwBmpItem
_FwCharItem _FwCheckedItem
_FwNoSelectedItem _FwPromptItem
_FwSelectedItem _FwSeparatorItem
_HB_FUN_ALTFONTMIMENU _HB_FUN_ANCFONTMIMENU
_HB_FUN_BMP2GRAY _HB_FUN_CCOLORMENU
_HB_FUN_CCOLORSUBMENU _HB_FUN_CFONTMIMENU
_HB_FUN_CHGMENUMEA _HB_FUN_CHGMNUISR
_HB_FUN_COLORGETBACK _HB_FUN_DELCHECK2007
_HB_FUN_DELCHECK2010 _HB_FUN_DELCHECK2013
_HB_FUN_DELCHECK2015 _HB_FUN_DELCHECKFW
_HB_FUN_DELPOINTC _HB_FUN_GETDRAWISR
_HB_FUN_GETITEMTEXT _HB_FUN_GETPARENTITEM
_HB_FUN_HBITMAPITEM _HB_FUN_HBMPBACK
_HB_FUN_HB_FWBCODE _HB_FUN_HCHECK
_HB_FUN_HPOINT _HB_FUN_HSETBMPBACK
_HB_FUN_MENUDRAWFW _HB_FUN_MGETALLITEMS
_HB_FUN_MINFOMIMENU _HB_FUN_MITEMS
_HB_FUN_MITEMS2007 _HB_FUN_MITEMSFW
_HB_FUN_MSYSBITMAP _HB_FUN_NOCLOSEDLG
_HB_FUN_SET2007SKINMENU _HB_FUN_SET2010SKINMENU
_HB_FUN_SET2013SKINMENU _HB_FUN_SET2015SKINMENU
_HB_FUN_SETBITMAPITEM _HB_FUN_SETFWSKINMENU
_HB_FUN_SETITEMSTEXT _HB_FUN_SETOWNERMENU
_HPointC _SelectSkinMnu
_SysBitMap _getParentMenuItem
_hsetbmpback _set2007SkinMenu
_set2010SkinMenu _set2013SkinMenu
_set2015SkinMenu _setFwSkinMenu
menus size = 2006
_DrawCheck _DrawRadioCheck
_DrawRadioUncheck _DrawUncheck
_HB_FUN_APPENDMENU _HB_FUN_CHECKMENUITEM
_HB_FUN_CREATEMENU _HB_FUN_CREATEPOPUPMENU
_HB_FUN_DESTROYMENU _HB_FUN_DRAWMENUBAR
_HB_FUN_ENABLEMENUITEM _HB_FUN_FSETMENUDEFAULTITEM
_HB_FUN_FSETMENUITEMBITMAPS _HB_FUN_FWMODIFYMENU
_HB_FUN_GETMENU _HB_FUN_GETMENUSTATE
_HB_FUN_GETMENUSTRING _HB_FUN_GETMITEMCOUNT
_HB_FUN_GETMITEMID _HB_FUN_GETSUBMENU
_HB_FUN_GETSYSTEMMENU _HB_FUN_HILITEMENUITEM
_HB_FUN_INSERTMENU _HB_FUN_ISMENU
_HB_FUN_LOADMENU _HB_FUN_MODIFYMENU
_HB_FUN_RADIOMENUITEM _HB_FUN_REMOVEMENU
_HB_FUN_SETITEMBITMAPS _HB_FUN_SETMENU
_HB_FUN_SETMENUDEFAULTITEM _HB_FUN_TRACKPOPUP
_HB_FUN_TRACKPOPUPMENUEX _HB_FUN__GETMENUID
metafi32 size = 886
_HB_FUN_CLOSEENHMETAFILE _HB_FUN_CREATEENHMETAFILE
_HB_FUN_DELETEENHMETAFILE _HB_FUN_GETENHMETAFILE
_HB_FUN_PLAYENHMETAFILE _HB_FUN_XPLAYENHMETAFILE
metafile size = 795
_HB_FUN_CLOSEMETAFILE _HB_FUN_CREATEMETAFILE
_HB_FUN_DELETEMETAFILE _HB_FUN_GETMETABIT
_HB_FUN_GETMETAFILE _HB_FUN_GETPMETAFILE
_HB_FUN_PLAYMETAFILE _HB_FUN_PMETA
_SetMetaFileBits
metpaint size = 730
_HB_FUN_METERPAINT
mgetcrea size = 387
_HB_FUN_MGETCREATE
mime64 size = 1008
_HB_FUN_CMIMEDEC _HB_FUN_CMIMEENC
_at
mkdir size = 602
_HB_FUN_FILEW _HB_FUN_GETWINDOWSDIRECTORY
_HB_FUN_LCHDIR _HB_FUN_LCHDIRW
_HB_FUN_LISDIRW _HB_FUN_LLFNMKDIR
_HB_FUN_LLFNRMDIR _HB_FUN_LMKDIR
_HB_FUN_LMKDIRW _HB_FUN_LMKFULLPATH
_HB_FUN_LMKFULLPATHW _HB_FUN_LRMDIR
_HB_FUN_LRMDIRW
moveto size = 182
_HB_FUN_MOVEGET _HB_FUN_MOVETO
_HB_FUN_MOVETOEX
msgbeep size = 23
_HB_FUN_MESSAGEBEEP _HB_FUN_MSGBEEP
msgs size = 2119
MsgBoxHookProc _HB_FUN_CENTERMSGS
_HB_FUN_FWMESSAGEBOX _HB_FUN_MSGABOUT
_HB_FUN_MSGALERT _HB_FUN_MSGINFO
_HB_FUN_MSGNOYES _HB_FUN_MSGRETRYCANCEL
_HB_FUN_MSGSTOP _HB_FUN_MSGYESNO
_HB_FUN_MSGYESNOCANCEL _HB_FUN_NMSGBOX
_HB_FUN_SETASMSGBOX _HB_FUN_SETMSGLANGID
_HB_FUN_SHELLABOUT _HB_FUN_UNHOOKWINDOWSHOOKEX
_LToStr _MsgStr
_ValToChar
msgsapi size = 1025
_HB_FUN_FW_ISUTF8 _HB_FUN_POSTMESSAGE
_HB_FUN_SENDMESSAGE _HB_FUN_SENDWIDESTRINGMESSAGE
_SendMessageU _fw_parAnsi
_isutf8
msgtools size = 1094
_HB_FUN_MSGPAINT _HB_FUN_MSGPAINT3L
net size = 740
_HB_FUN_WNETADDCON _HB_FUN_WNETADDCONNECTION2
_HB_FUN_WNETADDCONNECTION2W _HB_FUN_WNETBROWSEDIALOG
_HB_FUN_WNETCONNECT _HB_FUN_WNETDELCONNECTION
_HB_FUN_WNETDISCONNECTDIALOG _HB_FUN_WNETERROR
_HB_FUN_WNETGETCONNECTION _HB_FUN_WNETGETERR
_HB_FUN_WNETGETUSER
netcrdid size = 809
_GetMACaddress _GetMACaddressEx
_HB_FUN_GETNETCARDID _HB_FUN_GETNETCARDINFO
nonclient size = 2567
_HB_FUN_COMBOSELTEXT _HB_FUN_DLGDIRLISTCOMBOBOX
_HB_FUN_GETALIGNPOPUP _HB_FUN_GETNONCLIENT
_HB_FUN_GETRECTCOMBOBTT _HB_FUN_GETRECTCOMBOEDIT
_HB_FUN_HWNDCOMBO _HB_FUN_HWNDCOMBOEDIT
_HB_FUN_HWNDCOMBOLIST _HB_FUN_ISTACTIL
_HB_FUN_NGETLISTBOXINFO _HB_FUN_NONCLIENT
_HB_FUN_SETADDTOOL _HB_FUN_SETALIGNPOPUP
_HB_FUN_SETNONCLIENT _HB_FUN_SETRECTCOMBOBTT
_HB_FUN_SETRECTCOMBOEDIT _HB_FUN_SETWHSCROLL
notify size = 89
_HB_FUN_GETNMHDRCODE _HB_FUN_GETNMHDRHWNDFROM
_HB_FUN_GETNMHDRIDFROM _HB_FUN_NMTREEVIEWACTION
_HB_FUN_NMTREEVIEWITEMNEW
ntxtools size = 175
_HB_FUN_CNTXKEY _HB_FUN_DELDBFMDX
numcword size = 3690
_HB_FUN_FW_NUMTOWORDC _HB_FUN_N2W_SETSTRINGS
_HB_FUN_N2W_SETUNITS _bAnd
_bIndian
ocx size = 164
_HB_FUN_COINITIALIZE _HB_FUN_REGISTERSERVER
_HB_FUN_UNREGISTERSERVER
odbc32x size = 2798
_HB_FUN_SQLALLOCCONNECT _HB_FUN_SQLALLOCENV
_HB_FUN_SQLALLOCSTMT _HB_FUN_SQLCANCEL
_HB_FUN_SQLCOLUMNS _HB_FUN_SQLCONNECT
_HB_FUN_SQLDESC32 _HB_FUN_SQLDISCONNECT
_HB_FUN_SQLDRVC32 _HB_FUN_SQLERROR
_HB_FUN_SQLEXECDIRECT _HB_FUN_SQLEXECUTE
_HB_FUN_SQLEXTENDEDFETCH _HB_FUN_SQLFETCH
_HB_FUN_SQLFREECONNECT _HB_FUN_SQLFREEENV
_HB_FUN_SQLFREESTMT _HB_FUN_SQLGETCONNECTOPTION
_HB_FUN_SQLGETCURSORNAME _HB_FUN_SQLGETD32
_HB_FUN_SQLGETDIAGREC _HB_FUN_SQLGETIN32
_HB_FUN_SQLGETSTMTOPTION _HB_FUN_SQLGETTEXTDATA
_HB_FUN_SQLNUMRESULTCOLS _HB_FUN_SQLPARAMDATA
_HB_FUN_SQLPREP32 _HB_FUN_SQLPRIMARYKEYS
_HB_FUN_SQLPUTDATA _HB_FUN_SQLROLLBACK
_HB_FUN_SQLROWCOUNT _HB_FUN_SQLSCOL
_HB_FUN_SQLSETCONNECTOPTION _HB_FUN_SQLSETCURSORNAME
_HB_FUN_SQLSETPARAM _HB_FUN_SQLSETPOS
_HB_FUN_SQLSETSTMT _HB_FUN_SQLSTATISTICS
_HB_FUN_SQLTABLES _HB_FUN_SQLTRANSACT
_aRowStatus
oemansi size = 455
_HB_FUN_ANSITOOEM _HB_FUN_ISANSI
_HB_FUN_ISOEM _HB_FUN_OEMTOANSI
_HB_FUN_makeLANGID
onoffbmp size = 2245
_HB_FUN_FWBMPOFF _HB_FUN_FWBMPON
or size = 472
_HB_FUN_I2HEX _HB_FUN_L2HEX
_HB_FUN_LAND _HB_FUN_LXOR
_HB_FUN_NAND _HB_FUN_NNOT
_HB_FUN_NOR _HB_FUN_NPTRWORD
_HB_FUN_NXOR _HB_FUN_PTRTONUM
_HB_FUN_UTOS
paint size = 79
_HB_FUN_BEGINPAINT _HB_FUN_ENDPAINT
peekmsg size = 87
_HB_FUN_PEEKMESSAGE _HB_FUN_WAITMESSAGE
peekpoke size = 42
_HB_FUN_PEEKBYTE _HB_FUN_PEEKWORD
_HB_FUN_POKEBYTE _HB_FUN_POKEWORD
point size = 210
_HB_FUN_DPTOLP _HB_FUN_LPTODP
printdc size = 4684
_HB_FUN_ABORTDOC _HB_FUN_COMDLGXERR
_HB_FUN_DRAFTMODE _HB_FUN_ENDDOC
_HB_FUN_ENDPAGE _HB_FUN_ENUMFONTFAMILIES
_HB_FUN_ESCAPE _HB_FUN_GETPRINTDC
_HB_FUN_GETPRINTDEFAULT _HB_FUN_IMPORTRAWFILE
_HB_FUN_ISCOLORPRINTER _HB_FUN_ISDUPLEXPRINTER
_HB_FUN_PAGEGETMARGINS _HB_FUN_PAGESETUP
_HB_FUN_PRINTERDCFROMNAME _HB_FUN_PRINTEREND
_HB_FUN_PRINTERESC _HB_FUN_PRINTERINIT
_HB_FUN_PRINTERSETUP _HB_FUN_PRNBINSOURCE
_HB_FUN_PRNDUPLEX _HB_FUN_PRNGETCOLLATE
_HB_FUN_PRNGETCOPIES _HB_FUN_PRNGETDRIVE
_HB_FUN_PRNGETNAME _HB_FUN_PRNGETORIENTATION
_HB_FUN_PRNGETPAGES _HB_FUN_PRNGETPAGNUMS
_HB_FUN_PRNGETPORT _HB_FUN_PRNGETSELECTION
_HB_FUN_PRNGETSIZE _HB_FUN_PRNLANDSCAPE
_HB_FUN_PRNOFFSET _HB_FUN_PRNPORTRAIT
_HB_FUN_PRNSETCOLLATE _HB_FUN_PRNSETCOPIES
_HB_FUN_PRNSETPAGE _HB_FUN_PRNSETSIZE
_HB_FUN_PRNSTATUS _HB_FUN_RESETDC
_HB_FUN_SPOOLFILE _HB_FUN_STARTDOC
_HB_FUN_STARTPAGE _HB_FUN_devMODE
prnsayrt size = 0
profile size = 522
_HB_FUN_DELINIENTRY _HB_FUN_DELINISECTION
_HB_FUN_GETPROFINT _HB_FUN_GETPROFSTRING
_HB_FUN_GETPVPROFINT _HB_FUN_GETPVPROFSTRING
_HB_FUN_WRITEPPROSTRING _HB_FUN_WRITEPROFSTRING
prop size = 182
_HB_FUN_GETPROP _HB_FUN_REMOVEPROP
_HB_FUN_SETPROP
prpsheet size = 416
_HB_FUN_PROPSHEET
rasapi size = 1141
_HB_FUN_RACONST _HB_FUN_RADIAL
_HB_FUN_RAENUMCONNECTIONS _HB_FUN_RAENUMENTRIES
_HB_FUN_RAGETCONST _HB_FUN_RAGETERROR
_HB_FUN_RAHANGUP
rebars size = 213
_HB_FUN_RBINSERTBAND _HB_FUN_SETREBARINFO
rebarsw size = 357
_HB_FUN_RBINSERTBANDAW _HB_FUN_SETREBARINFOAW
rects size = 1911
_FrameDot _HB_FUN_DRAWFOCUSELLIPSE
_HB_FUN_DRAWFOCUSRECT _HB_FUN_FILLRECT
_HB_FUN_FRAMEDOT _HB_FUN_GETCLIENTRECT
_HB_FUN_GETCOORS _HB_FUN_GETLABELDIM
_HB_FUN_GETWNDRECT _HB_FUN_INVALIDATERECT
_HB_FUN_INVERTRECT _HB_FUN_MAPDIALOGRECT
_HB_FUN_NCCSRIGHT _HB_FUN_ROUNDRECT
regclass size = 264
_HB_FUN_GETMODULEHANDLE _HB_FUN_REGISTERCLASS
_HB_FUN_SETCLASSWORD
regedit size = 876
_HB_FUN_REGCLOSEKEY _HB_FUN_REGCREATEKEY
_HB_FUN_REGDELETEKEY _HB_FUN_REGENUMKEY
_HB_FUN_REGENUMVALUE _HB_FUN_REGOPENKEY
_HB_FUN_REGOPENKEYEX _HB_FUN_REGQUERYVALUE
_HB_FUN_REGQUERYVALUEEX _HB_FUN_REGSETVALUE
_HB_FUN_REGSETVALUEEX
regions size = 1046
_HB_FUN_COMBINERGN _HB_FUN_CREATEELLIPTICRGN
_HB_FUN_CREATEELLIPTICRGNINDIRECT _HB_FUN_CREATEPOLYGONRGN
_HB_FUN_CREATERECTRGN _HB_FUN_CREATEROUNDRECTRGN
_HB_FUN_FRAMERGN _HB_FUN_INVALIDATERGN
_HB_FUN_SETWINDOWRGN
resource size = 757
_GetResources _HB_FUN_CRESTOSTR
_HB_FUN_ENUMRESOURCENAMES _HB_FUN_FINDICON
_HB_FUN_FINDRESOURCE _HB_FUN_FREERESOURCES
_HB_FUN_GETRESOURCES _HB_FUN_LOADHTML
_HB_FUN_LOADRESOURCE _HB_FUN_LOCKRESOURCE
_HB_FUN_RCDATATOFILE _HB_FUN_RESOURCEFREE
_HB_FUN_SETRESOURCES
ribbon size = 6849
_BitmapFromMem _Blur
_BrightImg _CreateBase
_CreateShadow _DoHBlur
_DoHorizontalBlur _DoVBlur
_DoVerticalBlur _HB_FUN_BEGINPATH
_HB_FUN_BLUR _HB_FUN_BRIGHTIMG
_HB_FUN_CREATEBASE _HB_FUN_CREATESHADOW
_HB_FUN_ENDPATH _HB_FUN_FILLPATH
_HB_FUN_FILLRGN _HB_FUN_GETTEXTEXTENTPOINT32
_HB_FUN_HDCBITMAP _HB_FUN_LITTLEARROW
_HB_FUN_MAKEBKBMP _HB_FUN_MAKEBKBMPEX
_HB_FUN_MAKEBKBRUSH _HB_FUN_MINIBTN
_HB_FUN_OFFSETRGN _HB_FUN_PARENTCAPTURE
_HB_FUN_PATHTOREGION _HB_FUN_RESIZEIMG
_HB_FUN_STROKEANDFILLPATH _HB_FUN_STROKEPATH
_HB_FUN_TI_DRAWREFLEX _MakeBkBmp
_MakeBkBmpEx _MakeBkBmpExHDC
_ParentCapture _PrepareInfoHeader
_ResizeImg _TI_DrawReflex
richedi5 size = 14450
_FillRichEditFromFile _HB_FUN_GETPARFORM5
_HB_FUN_REDLLVERSION5 _HB_FUN_REFINDTEXT5
_HB_FUN_REGETBACKCOLOR5 _HB_FUN_REGETBULLET5
_HB_FUN_REGETCHARFORMAT5 _HB_FUN_REGETDATETIME5
_HB_FUN_REGETHIGHLIGHT5 _HB_FUN_REGETINDENT5
_HB_FUN_REGETNMHDRLINK5 _HB_FUN_REGETNUMBERING5
_HB_FUN_REGETOLEINTERFACE5 _HB_FUN_REGETPARAFORMAT5
_HB_FUN_REGETPARAGRAPH5 _HB_FUN_REGETPARAGRAPHALL5
_HB_FUN_REGETSELECTION5 _HB_FUN_REGETTEXTCOLOR5
_HB_FUN_REGETZOOM5 _HB_FUN_REINSERTPICTURE5
_HB_FUN_REINSERTRTF5 _HB_FUN_REINSERTRTFFROMFILE5
_HB_FUN_RELASTLINEVISIBLE _HB_FUN_RELEN5
_HB_FUN_RELOADASRTF5 _HB_FUN_REPAGEBREAK5
_HB_FUN_REPASTESPECIAL5 _HB_FUN_REPREVIEW5
_HB_FUN_REPRINT5 _HB_FUN_REPRINTBOX5
_HB_FUN_RESAVEASRTF5 _HB_FUN_RESETATTRIBUTE5
_HB_FUN_RESETAUTOURLDETECT5 _HB_FUN_RESETBACKCOLOR5
_HB_FUN_RESETBULLET5 _HB_FUN_RESETCHARFORMAT5
_HB_FUN_RESETFONTNAME5 _HB_FUN_RESETFONTSIZE5
_HB_FUN_RESETHIGHLIGHT5 _HB_FUN_RESETINDENT5
_HB_FUN_RESETNUMBERING5 _HB_FUN_RESETOLECALLBACK5
_HB_FUN_RESETOLEINIT5 _HB_FUN_RESETOLEUNINIT5
_HB_FUN_RESETPARADELIMITER5 _HB_FUN_RESETPARAFORMAT5
_HB_FUN_RESETPARAGRAPH5 _HB_FUN_RESETPARAGRAPHALL5
_HB_FUN_RESETPOS5 _HB_FUN_RESETSELECTION5
_HB_FUN_RESETTEXTCOLOR5 _HB_FUN_RESETZOOM5
_HB_FUN_RTGETPARAFORMAT5 _HB_FUN_RTINSERTOBJECT5
_HB_FUN_RTINSERTTABLE5 _HB_FUN_RTSETPARAFORMAT5
_HB_FUN_SETPARFORM5 _InsertObject
richedit size = 8997
_HB_FUN_REDLLVERSION _HB_FUN_REFINDTEXT
_HB_FUN_REGETBULLET _HB_FUN_REGETCHARFORMAT
_HB_FUN_REGETDATETIME _HB_FUN_REGETHIGHLIGHT
_HB_FUN_REGETINDENT _HB_FUN_REGETNMHDRLINK
_HB_FUN_REGETNUMBERING _HB_FUN_REGETOLEINTERFACE
_HB_FUN_REGETPARAFORMAT _HB_FUN_REGETPARAGRAPH
_HB_FUN_REGETSELECTION _HB_FUN_REGETZOOM
_HB_FUN_REINSERTPICTURE _HB_FUN_RELEN
_HB_FUN_RELOADASRTF _HB_FUN_REPAGEBREAK
_HB_FUN_REPASTESPECIAL _HB_FUN_REPREVIEW
_HB_FUN_REPRINT _HB_FUN_REPRINTBOX
_HB_FUN_RESAVEASRTF _HB_FUN_RESETATTRIBUTE
_HB_FUN_RESETAUTOURLDETECT _HB_FUN_RESETBULLET
_HB_FUN_RESETCHARFORMAT _HB_FUN_RESETFONTNAME
_HB_FUN_RESETFONTSIZE _HB_FUN_RESETHIGHLIGHT
_HB_FUN_RESETINDENT _HB_FUN_RESETNUMBERING
_HB_FUN_RESETOLECALLBACK _HB_FUN_RESETOLEINIT
_HB_FUN_RESETOLEUNINIT _HB_FUN_RESETPARAFORMAT
_HB_FUN_RESETPARAGRAPH _HB_FUN_RESETPOS
_HB_FUN_RESETSELECTION _HB_FUN_RESETTEXTCOLOR
_HB_FUN_RESETZOOM
saveicon size = 1001
_HB_FUN_FW_SAVEHICONTOICO _SaveIcon3
scintilc size = 3602
_HB_FUN_ASIGNKEYS _HB_FUN_FINDAUTOCOMPLETE
_HB_FUN_GETANNOTALINESADDHDR _HB_FUN_GETCHARHDR
_HB_FUN_GETIDHDR _HB_FUN_GETLENHDR
_HB_FUN_GETLEVNOWHDR _HB_FUN_GETLEVPREVHDR
_HB_FUN_GETLINADDHDR _HB_FUN_GETLINEHDR
_HB_FUN_GETLISTCOMPLETIONHDR _HB_FUN_GETLISTHDR
_HB_FUN_GETLPARAM _HB_FUN_GETMARGHDR
_HB_FUN_GETMESSAGEHDR _HB_FUN_GETMODIFIER
_HB_FUN_GETMODTYPE _HB_FUN_GETPOSHDR
_HB_FUN_GETPOSIHDR _HB_FUN_GETTEXTHDR
_HB_FUN_GETTOKENHDR _HB_FUN_GETUPDATEDHDR
_HB_FUN_GETWNDHDR _HB_FUN_GETWPARAM
_HB_FUN_GETXHDR _HB_FUN_GETXPARAM
_HB_FUN_GETYHDR _HB_FUN_GETYPARAM
_HB_FUN_MYFUNC_DBLUE _HB_FUN_MYFUNC_F
_HB_FUN_MYFUNC_F16 _HB_FUN_MYFUNC_FBLUE
_HB_FUN_MYFUNC_MBLUE _HB_FUN_MYFUNC_MBLUE16
_HB_FUN_MYFUNC_VBLUE _HB_FUN_PONFOLD
_HB_FUN_PONFOLDCOMPACT _HB_FUN_SCIGETLINE
_HB_FUN_SCIGETSELTEXT _HB_FUN_SCIGETTEXT
_HB_FUN_SCIGETTEXTAT _HB_FUN_SCI_OPENFILE
_HB_FUN_SCNOTIFICATIONCH _HB_FUN_SCNOTIFICATIONCODE
_HB_FUN_SC_ADDTEXT _HB_FUN_SC_ISREADONLY
_HB_FUN_SEARCHBACKWARD _HB_FUN_SEARCHFORWARD
_SearchBackward _SearchForward
scroll size = 503
_HB_FUN_ENABLESCROLLBAR _HB_FUN_GETSCROLLPOS
_HB_FUN_GETSCROLLRANGE _HB_FUN_SETSCROLLINFO
_HB_FUN_SETSCROLLPOS _HB_FUN_SETSCROLLRANGE
_HB_FUN_SETSCROLLRANGEX
selobjec size = 31
_HB_FUN_SELECTOBJECT
sethandl size = 22
_HB_FUN_SETHANDLECOUNT
setmapmo size = 75
_HB_FUN_GETMAPMODE _HB_FUN_GETSYSMETRICS
_HB_FUN_SETMAPMODE
settext size = 88
_HB_FUN_SETWINDOWTEXT
sound size = 269
_HB_FUN_MSGSOUND _HB_FUN_SNDPLAYRESOURCE
_HB_FUN_SNDPLAYSOUND
str2hex size = 806
_HB_FUN_FW_URLENCODE _HB_FUN_HEX2STR
_HB_FUN_STR2HEX
string size = 67
_HB_FUN_LOADSTRING
strtoken size = 672
_HB_FUN_STRBYTE _HB_FUN_STRCAPFIRST
_HB_FUN_STRCHAR _HB_FUN_STRCHARCOUNT
_HB_FUN_STRCPY _HB_FUN_STRPTR
_HB_FUN_STRTOKEN _StrToken
tabctrl size = 939
_HB_FUN_TABCTRLADD _HB_FUN_TABCTRL_ADJUSTRECT
_HB_FUN_TABCTRL_GETCURSEL _HB_FUN_TABCTRL_HITTEST
_HB_FUN_TABCTRL_SETCURSEL _HB_FUN_TABDELALLITEMS
_HB_FUN_TABGETROWCOUNT _HB_FUN_TABSETITEM
tabctrlw size = 1242
_HB_FUN_TABCTRLADDW _HB_FUN_TABCTRL_ADJUSTRECTW
_HB_FUN_TABCTRL_GETCURSELW _HB_FUN_TABCTRL_HITTESTW
_HB_FUN_TABCTRL_SETCURSELW _HB_FUN_TABDELALLITEMSW
_HB_FUN_TABGETROWCOUNTW _HB_FUN_TABSETITEMW
tcbfuncs size = 1615
_HB_FUN_ATCBRWPOSRECT _HB_FUN_NTCWROW
_HB_FUN_TCBRWSCROLL _HB_FUN_TCDRAWCELL
text size = 2892
_DrawTextAW _DrawTextAW2
_DrawTextAWC _ExtTextOutAW
_HB_FUN_DRAWTEXT _HB_FUN_DRAWTEXTEX
_HB_FUN_EXTTEXTOUT _HB_FUN_GETTEXTALIGN
_HB_FUN_SETTEXTALIGN _HB_FUN_SETTEXTJUSTIFICATION
_HB_FUN_TEXTOUT _TextOutAW
_UTF8toUTF16W _fw_parRect
theaders size = 692
_HB_FUN_GETNMHEABUTTON _HB_FUN_GETNMHEAITEM
_HB_FUN_HEADERGET _HB_FUN_HEADERINS
_HB_FUN_HEADERLAYOUT _HB_FUN_HEADERSET
themes size = 4543
_DrawGripper _DrawPBack
_DrawRBGripper _HB_FUN_APPHASMANIFEST
_HB_FUN_CHECKFOCUS _HB_FUN_DRAWGRIPPER
_HB_FUN_DRAWHEADER _HB_FUN_DRAWPBACK
_HB_FUN_DRAWTABBODY _HB_FUN_DRAWTHEMED
_HB_FUN_EDBORDER _HB_FUN_FIXTHEMECONTROLS
_HB_FUN_ISAPPTHEMED _HB_FUN_ISCLASSIC
_HB_FUN_ISTHEMEACTIVE _HB_FUN_MAPWINDOWPOINT
_HB_FUN_SETWINDOWTHEME _HB_FUN_TBERASE
__HasManifest __IsAppThemed
timepick size = 221
_HB_FUN_GETTIMEPICK _HB_FUN_SETTIMEPICK
timers size = 93
_HB_FUN_GETTICKCOUNT _HB_FUN_KILLTIMER
_HB_FUN_SETTIMER
toolbarsw size = 1219
_HB_FUN_CREATETLBARAW _HB_FUN_INITCOMMONCONTROLSEXW
_HB_FUN_INITCOMMONCONTROLSW _HB_FUN_TBADDBUTTONAW
_HB_FUN_TBADDMENUAW _HB_FUN_TBADDSEPARATORAW
_HB_FUN_TBENABLEBUTTONAW _HB_FUN_TBGETRECTAW
_HB_FUN_TBSETTEXTAW _HB_FUN_TTNSETTEXTA
_HB_FUN_TTNSETTEXTW
toolhelp size = 39
_HB_FUN_INTERRUPTREGISTER _HB_FUN_INTERRUPTUNREGISTER
_HB_FUN_TERMINATEAPP _HB_FUN_TIMERCOUNT
tooltipa size = 608
_HB_FUN_CREATETOOLTIPANEW
tooltipw size = 904
_HB_FUN_CREATETOOLTIPWNEW
touch size = 897
_HB_FUN_AUTOROTATIONPREF _HB_FUN_GESTUREINFO
_HB_FUN_GETAUTOROTATIONSTATE _HB_FUN_ISEVENTBYTOUCH
_HB_FUN_USEALLGESTURES
treeview size = 1576
_HB_FUN_TVDELALLITEMS _HB_FUN_TVDELETEITEM
_HB_FUN_TVEDITLABEL _HB_FUN_TVGETCHECK
_HB_FUN_TVGETEDITCONTROL _HB_FUN_TVGETPARENT
_HB_FUN_TVGETSELECTED _HB_FUN_TVGETSELTEXT
_HB_FUN_TVGETTEXT _HB_FUN_TVHITTEST
_HB_FUN_TVINSERTITEM _HB_FUN_TVIPARAM
_HB_FUN_TVSELECT _HB_FUN_TVSETCHECK
_HB_FUN_TVSETCOLOR _HB_FUN_TVSETIMAGELIST
_HB_FUN_TVSETITEMBOLD _HB_FUN_TVSETITEMHEIGHT
_HB_FUN_TVSETITEMIMAGE _HB_FUN_TVSETITEMTEXT
_HB_FUN_TVSETTEXTIMAGE
urldownloadtofile size = 8
_downloading
wbrwline size = 408
_HB_FUN_ABRWPOSRECT
webcam size = 1018
_HB_FUN_CAPFILESETCAPTUREFILE _HB_FUN_WEBCAM_CAPTUREWINDOW
_HB_FUN_WEBCAM_DLGVIDEOFORMAT _HB_FUN_WEBCAM_DLGVIDEOSOURCE
_HB_FUN_WEBCAM_DRIVERCONNECT _HB_FUN_WEBCAM_DRIVERDISCONNECT
_HB_FUN_WEBCAM_FILESAVEDIB _HB_FUN_WEBCAM_GETDRIVERDESCRIPTION
_HB_FUN_WEBCAM_PREVIEW _HB_FUN_WEBCAM_PREVIEWRATE
_HB_FUN_WEBCAM_PREVIEWSCALE _HB_FUN___WEBCAM_CALLBACK
fpCallbackProc fpCallbackProc2
webview size = 1295
_HB_FUN_WEBVIEW_BIND _HB_FUN_WEBVIEW_CREATE
_HB_FUN_WEBVIEW_DESTROY _HB_FUN_WEBVIEW_DISPATCH
_HB_FUN_WEBVIEW_EVAL _HB_FUN_WEBVIEW_GETWINDOW
_HB_FUN_WEBVIEW_INIT _HB_FUN_WEBVIEW_NAVIGATE
_HB_FUN_WEBVIEW_OPENDEVTOOLSWINDOW _HB_FUN_WEBVIEW_RETURN
_HB_FUN_WEBVIEW_RUN _HB_FUN_WEBVIEW_SETHTML
_HB_FUN_WEBVIEW_SETSIZE _HB_FUN_WEBVIEW_SETTITLE
_HB_FUN_WEBVIEW_SETUSERAGENT _HB_FUN_WEBVIEW_TERMINATE
_HB_FUN_WEBVIEW_UNBIND _HB_FUN_WV_SENDTOFWH
webview2 size = 237
_HB_FUN_WEBVIEW2_END _HB_FUN_WEBVIEW2_EVAL
_HB_FUN_WEBVIEW2_NAVIGATE _HB_FUN_WEBVIEW2_NEW
_HB_FUN_WEBVIEW2_OPENDEVTOOLSWINDOW _HB_FUN_WEBVIEW2_SETHTML
_HB_FUN_WEBVIEW2_SETSIZE _HB_FUN_WEBVIEW2_SETUSERAGENT
_HB_FUN_WEBVIEW2_SHOWDOWNLOADS
win2000 size = 49
_HB_FUN_SETLAYEREDWINDOWATTRIBUTES
windows size = 431
_HB_FUN_DEFWINDOWPROC _HB_FUN_ENUMCHILDWINDOWS
_HB_FUN_ENUMWINDOWS _HB_FUN_GETCLASSLONG
_HB_FUN_GETPARENT _HB_FUN_LOCKWINDOWUPDATE
_HB_FUN_SETCLASSLONG _HB_FUN_SETPARENT
winexec size = 1308
_HB_FUN_EXITWINDOW _HB_FUN_EXITWND
_HB_FUN_GETMODULEFILENAME _HB_FUN_GETNUMTASKS
_HB_FUN_GETSYSDIR _HB_FUN_GETWINDIR
_HB_FUN_ISEXERUNNING _HB_FUN_SHELLEXECUTE
_HB_FUN_SHFILEOPERATION _HB_FUN_SHFILEOPERATIONW
_HB_FUN_SLEEP _HB_FUN_WAITRUN
_HB_FUN_WINEXEC
winrtc size = 964
_HB_FUN_WINRTEVENTHANDLER _HB_FUN_WINRTEVENTTOKEN
_HB_FUN_WINRTFIND _HB_FUN_WINRTMETHOD
winsock size = 1506
_HB_FUN_ACCEPT _HB_FUN_BINDTOPORT
_HB_FUN_CLOSESOCKET _HB_FUN_CONNECTTO
_HB_FUN_GETHOSTBYADDRESS _HB_FUN_GETHOSTBYNAME
_HB_FUN_GETHOSTNAME _HB_FUN_GETIP
_HB_FUN_GETPEERNAME _HB_FUN_GETPORT
_HB_FUN_GETSERVBYNAME _HB_FUN_HTONS
_HB_FUN_INET_ADDR _HB_FUN_LISTEN
_HB_FUN_RECV _HB_FUN_SENDBINARY
_HB_FUN_SETSOCKOPT _HB_FUN_SOCKET
_HB_FUN_SOCKETSELECT _HB_FUN_SOCKETSEND
_HB_FUN_WSAASYNCSELECT _HB_FUN_WSACLEANUP
_HB_FUN_WSAGETLASTERROR _HB_FUN_WSASTARTUP
wmouse size = 178
_HB_FUN_GETCAPTURE _HB_FUN_RELEASECAPTURE
_HB_FUN_SETCAPTURE _HB_FUN_TRACKMOUSEEVENT
wndboxes size = 1924
_HB_FUN_BARPAINT _HB_FUN_ROUNDBOX
_HB_FUN_WNDBOX _HB_FUN_WNDBOX2007
_HB_FUN_WNDBOXCLR _HB_FUN_WNDBOXIN
_HB_FUN_WNDBOXRAISED _HB_FUN_WNDINSET
_HB_FUN_WNDRAISED _RoundBox
_WindowBox _WindowBoxBlack
_WindowBoxIn _WindowBoxInBlack
_WindowInset _WindowRaised
_WndBox2007 _WndDrawBox
wndcente size = 631
_HB_FUN_GETVIEWPORTORGEX _HB_FUN_GETWINDOWORGEX
_HB_FUN_SETACTIVEWINDOW _HB_FUN_SETWINDOWORG
_HB_FUN_WNDCENTER
wnddestr size = 46
_HB_FUN_DESTROYWINDOW
wndis size = 1447
_HB_FUN_BORLANDC _HB_FUN_CALLWINDOWPROC
_HB_FUN_CLOSEWINDOW _HB_FUN_ENABLEWINDOW
_HB_FUN_FINDWINDOW _HB_FUN_GETACTIVEWINDOW
_HB_FUN_GETCLASSINFO _HB_FUN_GETFOREGROUNDWINDOW
_HB_FUN_GETTOPWINDOW _HB_FUN_GETVERSION
_HB_FUN_GETWINDOWLONG _HB_FUN_GETWINFLAGS
_HB_FUN_GETWINVER _HB_FUN_ISCHILD
_HB_FUN_ISDEFBUTTON _HB_FUN_ISEXE64
_HB_FUN_ISICONIC _HB_FUN_ISWIN95
_HB_FUN_ISWINDOW _HB_FUN_ISWINDOWENABLED
_HB_FUN_ISWINDOWUNICODE _HB_FUN_ISWINDOWVISIBLE
_HB_FUN_ISWINNT _HB_FUN_ISWOW64
_HB_FUN_ISZOOMED _HB_FUN_MSVC
_HB_FUN_SETWINDOWLONG _HB_FUN_SETWINDOWWORD
_HB_FUN_WINDOWFROMPOINT _IsWin95
_fnIsWow64Process
wndisove size = 121
_HB_FUN_ISOVERWND _HB_FUN_WNDHASSCROLLS
wndlines size = 604
_HB_FUN_WNDHLINERA _HB_FUN_WNDHRAISED
_HB_FUN_WNDVLINERA _HB_FUN_WNDVRAISED
_WindowHRaised _WindowVRaised
_WndDrawHLine _WndDrawVLine
wndmove size = 3131
_HB_FUN_BRINGWINDOWTOTOP _HB_FUN_MOVEWINDOW
_HB_FUN_SETMINMAX _HB_FUN_WNDADJBOTTOM
_HB_FUN_WNDADJCLIENT _HB_FUN_WNDADJLEFT
_HB_FUN_WNDADJRIGHT _HB_FUN_WNDADJTOP
_HB_FUN_WNDBOTTOM _HB_FUN_WNDCOPY
_HB_FUN_WNDHEIGHT _HB_FUN_WNDLEFT
_HB_FUN_WNDSETSIZE _HB_FUN_WNDTOP
_HB_FUN_WNDWIDTH
wndpos size = 196
_HB_FUN_GETWINDOWPLACEMENT _HB_FUN_SETWINDOWPLACEMENT
_HB_FUN_SETWINDOWPOS
wndprint size = 466
_HB_FUN_PRINTWINDOW _HB_FUN_WNDBITMAP
_HB_FUN_WNDPRINT
wndproc size = 436
_HB_FUN_REMOVEWINDOWPROC _HB_FUN_SETWINDOWPROC
wndrows size = 364
_GetWindowRow _GetWindowRows
_HB_FUN_NWROW _HB_FUN_NWROWS
wndsay size = 972
_HB_FUN_NWNDCHRHEIGHT _HB_FUN_WSAY
_HB_FUN_WSAYRECT
wndscrol size = 639
_HB_FUN_SCROLLWINDOW _HB_FUN_WBRWSCROLL
_HB_FUN_WSCROLL
wndupdat size = 52
_HB_FUN_GETCLASSNAME _HB_FUN_UPDATEWINDOW
xbrowsec size = 1465
_BmpDrawNoStretch _HB_FUN_BMPDRAWNOSTRETCH
_HB_FUN_FWBMPASC _HB_FUN_FWBMPDES
_HB_FUN_FWDARROW _HB_FUN_FWRARROW
_HB_FUN_XBRWSCROLLROW
xhb size = 0
xxproc size = 166
_HB_FUN_XXCHANGEPROC
]]>Code: Select all | Expand
Publics by module
BMPREAD size = 347
_HB_FUN_FILEREAD _HB_FUN_READBITMAP
CTLHDLEH size = 6976
_HB_FUN_WNDHANDLEEVENT _regex
FFWNDRUN size = 400
_GetWndApp _HB_FUN_SETIDLEACT
_HB_FUN_WINRUN _HB_FUN___GENGPF
_SetWndApp __SetAcceleratorTable
_wLastKey
HARBOURC size = 622
_FW_GetUnicode _FrameProc
_HB_FUN_ALLOCCONSOLE _HB_FUN_DEBUGGER
_HB_FUN_FW_SETUNICODE _HB_FUN_GETSTDHANDLE
_HB_FUN_SETCONSOLETITLE _HB_FUN__LASTKEY
_LogFile ___FWH
LEGACYCP size = 0
SYSREFRE size = 530
_DdeRefresh _HB_FUN_DDEREFRESH
_HB_FUN_SYSREFRESH _SysRefresh
TOOLBARS size = 970
_HB_FUN_CREATETLBAR _HB_FUN_INITCOMMONCONTROLS
_HB_FUN_INITCOMMONCONTROLSEX _HB_FUN_TBADDBUTTON
_HB_FUN_TBADDMENU _HB_FUN_TBADDSEPARATOR
_HB_FUN_TBENABLEBUTTON _HB_FUN_TBGETRECT
_HB_FUN_TBSETTEXT _HB_FUN_TTNSETTEXT
TOOLTIP size = 322
_HB_FUN_CREATETOOLTIP
WNDRUN size = 6572
_GetWndProcInstance _HB_FUN_CANREGDIALOG
_HB_FUN_DEREGDIALOG _HB_FUN_GETWNDAPP
_HB_FUN_LWRUNNING _HB_FUN_REGDIALOG
_HB_FUN_SETWNDAPP _IsModelessDialog
_SetRunning _bWRunning
XPROC size = 152
_HB_FUN_XCHANGEPROC
__WNDPRO size = 149
_HB_FUN_WININSPECT __DbgWndProc
__WndProc _bDbgActive
_bDbgBreak
aat size = 201
_HB_FUN_AAT
accelera size = 422
_HB_FUN_LOADACCELERATORS _HB_FUN_SETACCTABLE
_HB_FUN_TRANSLATEACCELERATOR
actx size = 557
anigif size = 101
animate size = 160
_HB_FUN_ANIMOPEN _HB_FUN_ANIMOPENEX
_HB_FUN_ANIMPLAY
ansiup size = 227
_HB_FUN_ANSILOWER _HB_FUN_ANSIUPPER
_HB_FUN_CHARUPPER _HB_FUN_ISANSILOWER
_HB_FUN_ISANSIUPPER
arg size = 115
_HB_FUN_ARG _HB_FUN_CARGV
_HB_FUN_NARGC
atom size = 101
_HB_FUN_GLOBALADDATOM _HB_FUN_GLOBALDELATOM
_HB_FUN_GLOBALGETATOMNAME
b2bin size = 176
_HB_FUN_B2BIN _HB_FUN_BIN2D
_HB_FUN_C2HEX _HB_FUN_D2BIN
backgrnd size = 436
_HB_FUN_DitBackGrd
bartools size = 807
_BtnDisable _HB_FUN_BARADJUST
_HB_FUN_BTNDISABLE _RectDisable
bitmaps size = 34183
_HB_FUN_FWBITMAP _fwstrlwr
bmpdraw size = 4064
_DrawBitmap _DrawGray
_DrawGrayed _DrawMasked
_DuplicateBitmap _FWWaterMark
_HB_FUN_BMPALPHA _HB_FUN_BTNPAINT
_HB_FUN_COPYIMAGE _HB_FUN_CREATECOMPATIBLEBITMAP
_HB_FUN_DRAWBITMAP _HB_FUN_DRAWGRAY
_HB_FUN_DRAWMASKED _HB_FUN_DUPLICATEBITMAP
_HB_FUN_FWHBMPTOALPHA _HB_FUN_FWWATERMARK
_HB_FUN_RESIZEBMP _HB_FUN_SHADOWH
_HB_FUN_SHADOWV _HB_FUN_STRETCHBLT
bmps size = 14363
_HB_FUN_BMPEBCOLLAPSED _HB_FUN_BMPEBEXPANDED
_HB_FUN_BMPOLARROW _HB_FUN_BMPOLDOTS
_HB_FUN_CLOSELISTBAR _HB_FUN_CLOSEOVERLISTBAR
_HB_FUN_MSGBAR2007 _HB_FUN_OPENLISTBAR
_HB_FUN_OPENOVERLISTBAR _HB_FUN_QUICKAREAL
_HB_FUN_QUICKAREAM _HB_FUN_QUICKAREAR
bmptabs size = 10585
_HB_FUN_BMP_BACK _HB_FUN_BMP_BACKV
_HB_FUN_BMP_TABSEL _HB_FUN_BMP_TABSELL
_HB_FUN_BMP_TABSELLV _HB_FUN_BMP_TABSELR
_HB_FUN_BMP_TABSELRV _HB_FUN_BMP_TABSELV
_HB_FUN_BMP_TABUNSEL _HB_FUN_BMP_TABUNSELV
_HB_FUN_BMP_TABUNSL _HB_FUN_BMP_TABUNSLV
_HB_FUN_BMP_TABUNSR _HB_FUN_BMP_TABUNSRV
brushes size = 22037
_CircleGradient _CreateMemBitmap
_CreateMemBitmap2 _CreateMemBitmap3
_DiagonalGradient _Gradient
_HB_FUN_ABPAINT _HB_FUN_ATREEBMPS
_HB_FUN_BMP_ARROWBCK _HB_FUN_CIRCLEGRADIENT
_HB_FUN_CREATEHATCHBRUSH _HB_FUN_DIAGONALGRADIENT
_HB_FUN_EMF2WMF _HB_FUN_FIXSAYS
_HB_FUN_FWBRUSHES _HB_FUN_FWLOGOBITMAP
_HB_FUN_GETDRAWITEM _HB_FUN_GETDRAWMENU
_HB_FUN_GETMEAITEM _HB_FUN_GRADIENT
_HB_FUN_ISBREAK _HB_FUN_ISDIBITMAP
_HB_FUN_ISMENUITEM _HB_FUN_ISMISEPARATOR
_HB_FUN_ISSEPARATOR _HB_FUN_MISTEXT
_HB_FUN_MSGBAR2010 _HB_FUN_MSGBAR2015
_HB_FUN_PARENTIMAGE _HB_FUN_WMF2EMF
_HB_ISDIBitmap
c5cnew size = 28735
BrowseCallbackProc _BitmapFromCode
_C5GradientFill _C5_CloseThemeData
_C5_DrawThemeBackground _C5_IsAppThemed
_C5_IsThemeActive _C5_OpenThemeData
_DrawAlphaTransparentBitmap _DrawBitmapEx
_DrawBitmapTransparent _DrawGradientFill
_DrawMaskedColor _FillSolidRect
_FrameDotEx2 _GetFontMenu
_GradientFill0 _HB_FUN_ARROWDOWN
_HB_FUN_ARROWUP _HB_FUN_BMPARROWDOWNBLACK
_HB_FUN_BMPARROWDOWNNET _HB_FUN_BMPARROWDOWNWHITE
_HB_FUN_BMPARROWUPBLACK _HB_FUN_BMPARROWUPWHITE
_HB_FUN_BMPBLACKARROWS _HB_FUN_BMPBTNDBAR
_HB_FUN_BMPCARPETA _HB_FUN_BMPCDROM
_HB_FUN_BMPHDDISK _HB_FUN_BMPHEIGHT
_HB_FUN_BMPHTML _HB_FUN_BMPNETDRIVE
_HB_FUN_BMPTOGRAY _HB_FUN_BMPWHITEARROWS
_HB_FUN_BMPWIDTH _HB_FUN_BOX
_HB_FUN_BOXEX _HB_FUN_C5CURSORCATCH
_HB_FUN_C5CURSORHAND _HB_FUN_C5CURSORSEP
_HB_FUN_C5DEGRADA _HB_FUN_C5DRAWTEXT
_HB_FUN_C5LINE _HB_FUN_C5ROUNDBOX
_HB_FUN_C5ROUNDRECT _HB_FUN_C5_CLOSETHEMEDATA
_HB_FUN_C5_DRAWTHEMEBACKGROUND _HB_FUN_C5_DRAWTHEMEICON
_HB_FUN_C5_DRAWTHEMETEXT _HB_FUN_C5_EXTFLOODFILL
_HB_FUN_C5_GETCURRENTTHEMENAME _HB_FUN_C5_GETTHEMECOLOR
_HB_FUN_C5_GETTHEMEFONT _HB_FUN_C5_ISAPPTHEMED
_HB_FUN_C5_ISTHEMEACTIVE _HB_FUN_C5_OPENTHEMEDATA
_HB_FUN_CGETFILEEX _HB_FUN_CGETFOLDER
_HB_FUN_COMPATBMP _HB_FUN_COMPATDC
_HB_FUN_CREAFBOLD _HB_FUN_CREAFCAPT
_HB_FUN_CREAFUNDER _HB_FUN_CREATEBRUSHDOTTED
_HB_FUN_CREATECAPTIONFONT _HB_FUN_CREATEFONTBOLD
_HB_FUN_CREATEFONTUNDERLINE _HB_FUN_CREATEHGRIP
_HB_FUN_DEGRADASO _HB_FUN_DRAWALPHATRANSPARENTBITMAP
_HB_FUN_DRAWBITMAPEX _HB_FUN_DRAWEDGE
_HB_FUN_DRAWFRAMECONTROL _HB_FUN_DRAWGRADIENTFILL
_HB_FUN_DRAWIMAGEBLEND _HB_FUN_DRAWMASKEDCOLOR
_HB_FUN_DRAWSTATESTRING _HB_FUN_EQUALRECT
_HB_FUN_EXCLUDECLIPRECT _HB_FUN_FILLSOLIDRECT
_HB_FUN_FILLSOLIRC _HB_FUN_FRAMEDOTEX
_HB_FUN_FWDELETEFILE _HB_FUN_GETBMPICONEXT
_HB_FUN_GETCURRENTOBJECT _HB_FUN_GETDRAWITEMSTRUCT
_HB_FUN_GETSCROLLINFOPOS _HB_FUN_GETSIZETEXT
_HB_FUN_GETTEXTLEN _HB_FUN_HGRADIENTFILL
_HB_FUN_HORIZONTALGRADIENT _HB_FUN_ICONTOBMP
_HB_FUN_ICONTOGRAY _HB_FUN_IMAGELIST_ADD
_HB_FUN_IMAGELIST_ADDMASKED _HB_FUN_IMAGELIST_CREATE
_HB_FUN_IMAGELIST_DESTROY _HB_FUN_IMAGELIST_DRAW
_HB_FUN_IMAGELIST_GETICONSIZE _HB_FUN_IMAGELIST_LOADIMAGE
_HB_FUN_INTRECT _HB_FUN_LINEEX
_HB_FUN_MENUDRAWITEM2 _HB_FUN_MENUMEASUREITEM2
_HB_FUN_POW _HB_FUN_PTINRECT
_HB_FUN_REGISTERWINDOWMESSAGE _HB_FUN_ROUNDRECTEX
_HB_FUN_SETBRUSHORG _HB_FUN_SETEDITCLIENTRIGHT
_HB_FUN_SETMENUITEMBITMAPS _HB_FUN_SETSTRETCHBLTMODE
_HB_FUN_SHADERECT _HB_FUN_STARTTRACKMOUSELEAVE
_HB_FUN_TRANSPARENTBLT _HB_FUN_TRANSPARENTBLT2
_HB_FUN_VALIDATERECT _HB_FUN_VERTICALGRADIENT
_HB_FUN_VGRADIENTFILL _HorizontalGradient
_ShadeRect _StartTrackMouseLeave
_VerticalGradient
caldll32 size = 552
_GetCallProc32 _HB_FUN_GETHWND32
_HB_FUN_GETPROC32 _HB_FUN_GETVDMP16
_HB_FUN_GETVDMP32 _HB_FUN_LADDTOC
calendar size = 1574
_HB_FUN_GETDAYSTATE _HB_FUN_ISOVERDAY
_HB_FUN_MONTHCAL_GETCOLOR _HB_FUN_MONTHCAL_GETCURRENTVIEW
_HB_FUN_MONTHCAL_GETCURSEL _HB_FUN_MONTHCAL_GETFIRSTDAYOFWEEK
_HB_FUN_MONTHCAL_GETMAXSELCOUNT _HB_FUN_MONTHCAL_GETMINREQRECT
_HB_FUN_MONTHCAL_GETMONTHRANGE _HB_FUN_MONTHCAL_GETRANGE
_HB_FUN_MONTHCAL_GETSELRANGE _HB_FUN_MONTHCAL_GETTODAY
_HB_FUN_MONTHCAL_GETVIEWCHANGEVALUES _HB_FUN_MONTHCAL_SETCOLOR
_HB_FUN_MONTHCAL_SETCURRENTVIEW _HB_FUN_MONTHCAL_SETCURSEL
_HB_FUN_MONTHCAL_SETFIRSTDAYOFWEEK _HB_FUN_MONTHCAL_SETMAXSELCOUNT
_HB_FUN_MONTHCAL_SETRANGE _HB_FUN_MONTHCAL_SETSELRANGE
_HB_FUN_MONTHCAL_SETTODAY _HB_FUN_MONTHCAL_SIZERECTTOMIN
_HB_FUN_SETDAYSTATE
calexc size = 1908
_HB_FUN_HNEXTITEM _HB_FUN_HNEXTITEMO
_HB_FUN_HPREVITEM _HB_FUN_HPREVITEMO
_HB_FUN_POLYLINE _HB_FUN_RGBFILTER
calldll size = 816
_HB_FUN_FWCALLDLL
calldllc size = 0
caret size = 154
_HB_FUN_CREATECARET _HB_FUN_DESTROYCARET
_HB_FUN_GETCARETPOS _HB_FUN_HIDECARET
_HB_FUN_SETCARETPOS _HB_FUN_SHOWCARET
changepr size = 92
_HB_FUN_CHANGEPROC _HB_FUN_LINKDLG
_HB_FUN_RESTPROC
chr2data size = 65
_HB_FUN_CCHR2DATA
clpbrd size = 1050
_HB_FUN_CLOSECLIPBOARD _HB_FUN_EMPTYCLIPBOARD
_HB_FUN_GETCLPDATA _HB_FUN_GETPRIORITYCLIPBOARDFORMAT
_HB_FUN_OPENCLIPBOARD _HB_FUN_SETCLIPBOARDDATA
clrchoos size = 305
ComDlgHkColor _HB_FUN_CHOOSECOLOR
clt2scr size = 256
_HB_FUN_CLIENTTOSCREEN _HB_FUN_SCREENTOCLIENT
codegtf size = 641
_HB_FUN_CODETEXT _HB_FUN_DECODETEXT
color size = 2659
_HB_FUN_ARGB2RGB _HB_FUN_BGR2RGB
_HB_FUN_CLR2ARRAY _HB_FUN_GETBKCOLOR
_HB_FUN_GETSYSCOLOR _HB_FUN_GETTEXTCOLOR
_HB_FUN_HSLTORGB _HB_FUN_NARGB
_HB_FUN_NRGB _HB_FUN_RGBTOHSL
_HB_FUN_SETBKCOLOR _HB_FUN_SETBKMODE
_HB_FUN_SETSYSCOLORS _HB_FUN_SETTEXTCOLOR
_hashrgbtocolorref _hsl_to_rgb
_rgb_to_hsl
colorton size = 1009
_HB_FUN_LIGHTCOLOR _HB_FUN_NCOLORTON
_HB_FUN_NGETBACKRGB _HB_FUN_NGETFORERGB
_HB_FUN_NRGB2ARRAY _HB_FUN_NRGBBLUE
_HB_FUN_NRGBGREEN _HB_FUN_NRGBRED
_bColorToN _lColorToRGB
comm size = 1417
_CloseComm _EnableCommNotification
_FlushComm _GetCommError
_GetCommEventMask _HB_FUN_BUILDCOMMDCB
_HB_FUN_CLOSECOMM _HB_FUN_ENABLECOMMNOTIFICATION
_HB_FUN_ESCAPECOMMFUNCTION _HB_FUN_FLUSHCOMM
_HB_FUN_GETCOMMERROR _HB_FUN_OPENCOMM
_HB_FUN_READCOMM _HB_FUN_SETCOMMSTATE
_HB_FUN_WRITECOMM _OpenComm
_ReadComm _SetCommEventMask
_WriteComm
crc size = 1642
_HB_FUN_NCRCERROR _HB_FUN_NFILECRC
_HB_FUN_NSTRCRC
createpa size = 48
_HB_FUN_CREATEPATTERNBRUSH
createpe size = 40
_HB_FUN_CREATEPEN
createso size = 149
_HB_FUN_CREATESOLIDBRUSH _HB_FUN_SETBRUSHORGEX
creatwnd size = 207
_HB_FUN_CREATEWINDOW _HB_FUN_GETERRMSG
ctl3d size = 858
Ctl3dAutoSubClass Ctl3dEnabled
Ctl3dRegister Ctl3dSubClassDlgEx
Ctl3dSubclassCtl Ctl3dUnregister
Ctl3dUnsubclassCtl _HB_FUN_CTL3DAUTOS
_HB_FUN_CTL3DDLGEX _HB_FUN_CTL3DLOOK
_HB_FUN_CTL3DREGIS _HB_FUN_CTL3DUNREG
_HB_FUN_SET3DLOOK
ctrl2chr size = 643
_HB_FUN_CCTRL2CHR _HB_FUN_CTRLFONTFACENAME
_HB_FUN_CTRLFONTSIZE _HB_FUN_CTRLGETBACKCOLOR
_HB_FUN_CTRLGETTEXTCOLOR _HB_FUN_GETDIALOGBASEUNITS
ctrldraw size = 2059
_HB_FUN_BARINVERT _HB_FUN_CTRLDRAW
_HB_FUN_CTRLDRAWFOCUS _HB_FUN_LBXDRAWITEM
_HB_FUN_LBXMEASURE _HB_FUN_RECTDOTTED
cursors size = 4370
_CursorArrow _CursorWait
_HB_FUN_CREATEBMPCURSOR _HB_FUN_CURSOR
_HB_FUN_CURSORARROW _HB_FUN_CURSORCATCH
_HB_FUN_CURSORDRAG _HB_FUN_CURSORHAND
_HB_FUN_CURSORIBEAM _HB_FUN_CURSORNO
_HB_FUN_CURSORNS _HB_FUN_CURSOROPENHAND
_HB_FUN_CURSORSEARCH _HB_FUN_CURSORSIZE
_HB_FUN_CURSORSTOP _HB_FUN_CURSORWAIT
_HB_FUN_CURSORWE _HB_FUN_DESTROYCURSOR
_HB_FUN_GETCURSORDRAG _HB_FUN_GETCURSORHAND
_HB_FUN_GETCURSORPOS _HB_FUN_GETCURSORSEARCH
_HB_FUN_GETCURSORSTOP _HB_FUN_GETGUIRESOURCES
_HB_FUN_LOADCURSOR _HB_FUN_SETCURSORPOS
_HB_FUN_SHOWCURSOR _HB_FUN_WSETCURSOR
cvrflow size = 3844
_BackImg _BmpPer
_BmpPerspec _DrawReflex
_HB_FUN_BMPPER _HB_FUN_BMPPERSPEC
_HB_FUN_DRAWREFLEX
cwebview size = 1368
datepick size = 385
_HB_FUN_GETDATEPICK _HB_FUN_INITCOMMON
_HB_FUN_SETDATEPICK
datetime size = 201
_HB_FUN_FILETIMETODATE _HB_FUN_FILETIMETOTIME
_HB_FUN_SYSTIME
dbl2flt size = 186
_HB_FUN_NDBL2FLT _dbl2flt
dc size = 1788
_HB_FUN_BITBLT _HB_FUN_CREATECDC
_HB_FUN_CREATECOMPATIBLEDC _HB_FUN_CREATEDC
_HB_FUN_DBUFFERSTART _HB_FUN_DELETEDC
_HB_FUN_FWDISPBEGIN _HB_FUN_FWDISPEND
_HB_FUN_FWRESTSCREEN _HB_FUN_FWSAVESCREEN
_HB_FUN_GETDC _HB_FUN_GETWINDOWDC
_HB_FUN_RELEASEDC _HB_FUN_RESTOREDC
_HB_FUN_SAVEDC _HB_FUN_SETDIBITSTODEVICE
_HB_FUN_SETVIEWORG _HB_FUN_SETVIEWPORTEXT
_HB_FUN_SETWINDOWEXT
ddeml size = 1121
_ClientCallback _HB_FUN_CLIENTCALLBACK
_HB_FUN_DDEACCESSDATA _HB_FUN_DDECLIENTTRANSACTION
_HB_FUN_DDECMPSTRINGHANDLES _HB_FUN_DDECONNECT
_HB_FUN_DDECREATEDATAHANDLE _HB_FUN_DDECREATESTRINGHANDLE
_HB_FUN_DDEDISCONNECT _HB_FUN_DDEFREEDATAHANDLE
_HB_FUN_DDEFREESTRINGHANDLE _HB_FUN_DDEGETDATA
_HB_FUN_DDEGETLASTERROR _HB_FUN_DDEINITIALIZE
_HB_FUN_DDENAMESERVICE _HB_FUN_DDEQUERYSTRING
_HB_FUN_DDEUNINITIALIZE _HB_FUN_SERVERCALLBACK
_ServerCallback
ddexc size = 112
_HB_FUN_DDECOMMAND _HB_FUN_DDEGETCOMMAND
delobjec size = 103
_HB_FUN_DELETEOBJECT _HB_FUN_ISGDIOBJECT
_IsGDIObject
desktop size = 154
_HB_FUN_GETDESKTOPAREA _HB_FUN_GETDESKTOPWINDOW
_HB_FUN_SETDESKWALLPAPER
device size = 639
_HB_FUN_DEVICECAPABILITIES _HB_FUN_GETDEVICECAPS
_HB_FUN_GETDRIVETYPE _HB_FUN_GETLOGICALDRIVES
_HB_FUN_GETLOGICALDRIVESTRINGS _HB_FUN_SETROP2
dib size = 1348
_CreateDIBPalette _DibBits
_DibDraw _DibRead
_DibToStr _DibWrite
_HB_FUN_CREATEDIBITMAP _HB_FUN_DIBDRAW
_HB_FUN_DIBHEIGHT _HB_FUN_DIBPALETTE
_HB_FUN_DIBREAD _HB_FUN_DIBTOSTR
_HB_FUN_DIBWIDTH _HB_FUN_DIBWRITE
wDIBColors
dibbmp size = 1257
_DibFromBitmap _DibNumColors
_HB_FUN_ALPHAFILL _HB_FUN_BMPTOSTR
_HB_FUN_DIBFROMBITMAP _HB_FUN_HASALPHA
_isalphabmp _setalphabits
disk size = 104
_HB_FUN_GETDISKFREESPACEEX
dlg2chr size = 461
_HB_FUN_CDLG2CHR _HB_FUN_GETDLGBASEUNITS
dlgbox size = 851
_AnsiToWide _HB_FUN_DIALOGBOX
_HB_FUN_DIALOGBOXINDIRECT _HB_FUN_DIALOGBOXINDIRECTW
_HB_FUN_DIALOGBOXW
dll size = 0
dlogbox size = 708
_HB_FUN_CREATEDLG _HB_FUN_CREATEDLGINDIRECT
_HB_FUN_CREATEDLGINDIRECTW _HB_FUN_CREATEDLGW
_HB_FUN_ENDDIALOG _HB_FUN_NDLGBOX
_HB_FUN_SETOWNERDRAWITEMHEIGHT
dotnet size = 0
dots size = 729
_HB_FUN_DOTSADJUST
drawgrid size = 117
_HB_FUN_DRAWGRID
drawicon size = 1202
_HB_FUN_EXTDRAWICON _HB_FUN_GETPROMPTRECT
_MsgAdjust
drawing size = 1618
_HB_FUN_ARC _HB_FUN_CHORD
_HB_FUN_DRAWSTATE _HB_FUN_ELLIPSE
_HB_FUN_EXTFLOODFILL _HB_FUN_FLOODFILL
_HB_FUN_GETPIXEL _HB_FUN_LINETO
_HB_FUN_PIE _HB_FUN_POLYPOLYGON
_HB_FUN_RECTANGLE _HB_FUN_SETPIXEL
_HB_FUN_SETPOLYFILLMODE _MoveTo
drawitem size = 274
_HB_FUN_DRAWMSGITEM
drawsele size = 1118
_HB_FUN_DRAWSELECTOR
drawslid size = 4605
_HB_FUN_DRAWSLIDER
drives size = 201
_HB_FUN_GETCURDIR _HB_FUN_ISCDROM
_HB_FUN_ISDISKETTE _HB_FUN_SETCURDIR
_HB_FUN_SETCURDRIVE
dropfile size = 829
DropTarget_AddRef DropTarget_DragEnter
DropTarget_DragLeave DropTarget_DragOver
DropTarget_Drop DropTarget_QueryInterface
DropTarget_Release _DropTarget_Vtbl
_HB_FUN_DRAGACCEPTFILES _HB_FUN_DRAGFINISH
_HB_FUN_DRAGQUERYFILES _HB_FUN_DRAGQUERYPOINT
_HB_FUN_REGISTERDRAGDROP _HB_FUN_REVOKEDRAGDROP
encript size = 548
_HB_FUN_DECRYPT _HB_FUN_ENCRYPT
ffdlgprc size = 425
DialogWndProc DlgNoModalProc
_HB_FUN_ODLGFROMHWND _SetDlgNoModal
fgetclip size = 624
_HB_FUN_GETFCLIPDATA _HB_FUN_SETFCLIPDATA
fgetline size = 5353
_GetTextExtent _HB_FUN_CARETFLINE
_HB_FUN_DRAWFGETLINE _HB_FUN_FORMATFLINE
_HB_FUN_HEIGHTFLINE _HB_FUN_LENFLINE
_HB_FUN_WIDTHFLINE _HB_FUN__DRAWFGETLINE
files size = 865
_HB_FUN_FATTRIB _HB_FUN_FCOMMIT
_HB_FUN_GETFTIME _HB_FUN_SETFTIME
findtext size = 354
_HB_FUN_FINDTEXT
foldtool size = 3108
_HB_FUN_FOLDPAINT
fonts size = 3072
_HB_FUN_ADDFONTRESOURCE _HB_FUN_BASETEXT
_HB_FUN_CHOOSEFONT _HB_FUN_CREATEFONT
_HB_FUN_CREATEFONTAS _HB_FUN_GETFACEFONTMENU
_HB_FUN_GETFONTHEIGHT _HB_FUN_GETFONTINFO
_HB_FUN_GETFONTMENU _HB_FUN_GETFONTNAMES
_HB_FUN_GETFONTWIDTH _HB_FUN_GETHEIGHTFONTMENU
_HB_FUN_GETHEIGHTMENU _HB_FUN_GETHFONTFROMINFO
_HB_FUN_GETWIDTHFONTMENU _HB_FUN_GETWIDTHMENU
_HB_FUN_HFONTTOAFONT _HB_FUN_REMOVEFONTRESOURCE
ftext size = 683
_HB_FUN_CFREADLINE _HB_FUN_CSTRWORD
_HB_FUN_LGETTEXTLINE _HB_FUN_NTXTLINES
__TReadLn _bStrAt
fwarray size = 1346
_fwArrayAdd _fwArrayDel
_fwArrayFree _fwArrayGet
_fwArrayIns _fwArrayLen
_fwArrayLock _fwArrayNew
_fwArraySet _fwArraySize
_fwArrayTraverse _fwArrayUnlock
fwbmp size = 7176
_AlphaBlendNew _HB_FUN_CROPIMAGE
_HB_FUN_NBMPCOLORS _HB_FUN_NBMPHEIGHT
_HB_FUN_NBMPWIDTH _HB_FUN_PALBMPDRAW
_HB_FUN_PALBMPLOAD _HB_FUN_PALBMPREAD
_HB_FUN_PALBMPREALIZE _HB_FUN_PALBTNPAINT
_HB_FUN_TRANSBMP _MaskRegion
_TransBmp _TransBmpNew
_drawbmp_alpha _drawbmp_trans
_hPalBitmapDraw _hPalBitmapNew
fwcrc8 size = 326
_HB_FUN_FW_CRC8
fwgif size = 34168
FW_WndProc _FWGIFClass
_FWReadFile _HB_FUN_FWGIFEND
_HB_FUN_FWGIFISRUNNING _HB_FUN_FWGIFPLAY
_HB_FUN_FWGIFRESIZE _HB_FUN_FWGIFRESTART
_HB_FUN_FWGIFSTOP _HB_FUN_FWGIFWINDOW
_HB_FUN_FWIGNOREBCK _HB_FUN_FWSETGIFBRUSH
_HB_FUN_FWSETGIFSIZING _HB_FUN_GETGIFINFO
_hin _last_passed
_pass
fwmatrix size = 3858
_HB_FUN_MATRIX_ARRAY _HB_FUN_MATRIX_CALC
_HB_FUN_MATRIX_CREATE _HB_FUN_MATRIX_DETERMINANT
_HB_FUN_MATRIX_IDENTITY _HB_FUN_MATRIX_INVERT
_HB_FUN_MATRIX_MMULT _HB_FUN_MATRIX_RANDOM
_HB_FUN_MATRIX_REFLECT _HB_FUN_MATRIX_RELEASE
_HB_FUN_MATRIX_ROW _HB_FUN_MATRIX_SUMOFROWS
_HB_FUN_MATRIX_TRANSPOSE _HB_FUN_MATRIX_VAL
_array_determinant _calc
_matrix_adjunct _matrix_check
_matrix_clone _matrix_copyfrom
_matrix_determinant _matrix_identity
_matrix_invert _matrix_linear_calc
_matrix_mmult _matrix_new
_matrix_random _matrix_release
_matrix_scalar_calc _matrix_sigmoid
_matrix_sigmoid_derivative _matrix_sumofrows
_matrix_transpose
fwpalctl size = 742
_HB_FUN_PALCHGEVENT _HB_FUN_QRYNEWPALEVENT
_HB_FUN_SETFOREBMP _IsForePalette
_PalBmpRealize
fwpng size = 2899
_FillBitmap _HB_FUN_CONVERTEMF2PNG
_HB_FUN_FWOPENPNGFILE _HB_FUN_FWPNGFROMMEMORY
_HB_FUN_SAVE2PNGFILE _IsPng
_imgbuf_alloc _imgbuf_free
_imgbuf_init _pix
_pixel_at _save_png_to_file
fwstr size = 484
_fw_memmove _fw_strcat
_fw_strchr _fw_strcpy
_fw_strncmp _fw_strstr
_fw_wcslen
fwunicode size = 7189
_FW_AnsiToWide _FW_WideToAnsi
_HB_FUN_ANSITOUTF8 _HB_FUN_APPENDMENUW
_HB_FUN_CREATEWINDOWEXW _HB_FUN_DRAWTEXTW
_HB_FUN_EXTTEXTOUTW _HB_FUN_FW_CDPTRANSLATE
_HB_FUN_FW_LEFT _HB_FUN_FW_OEMTOUTF8
_HB_FUN_FW_RIGHT _HB_FUN_FW_SETCDP
_HB_FUN_FW_STRPEEK _HB_FUN_FW_STRTOUTF8
_HB_FUN_FW_SUBSTR _HB_FUN_FW_UTF8CHR
_HB_FUN_FW_UTF8LEN _HB_FUN_FW_UTF8TOOEM
_HB_FUN_FW_UTF8TOSTR _HB_FUN_GETACP
_HB_FUN_GETCLASSINFOW _HB_FUN_GETOEMCP
_HB_FUN_GETTEXTWIDTHW _HB_FUN_HBCDP
_HB_FUN_INSERTMENUW _HB_FUN_MENUDRAWITEMW
_HB_FUN_MSGINFOW _HB_FUN_MSGPAINTW
_HB_FUN_REGISTERCLASSW _HB_FUN_STRTOWIDE
_HB_FUN_TEXTOUTW _HB_FUN_UTF8TOANSI
_HB_FUN_WIDETOSTR _HB_FUN_WTEXTOUTW
_UTF16toUTF8 _UTF8toUTF16
_fw_parWide _fw_retWide
_hasbom8 _hbcdp_to_wincdp
_is2byteansi _is_utf8
_strlentowidestr _strpart
_strtowidestr _utf8part
_widestrlentostr _widestrtostr
gdipfwh size = 4071
gdiplus size = 2770
_gdiplusStartupInput _gdiplusToken
getdir size = 815
_HB_FUN_CGETDIR _HB_FUN_CGETDIRA
_HB_FUN_FW_FOLDERCHANGED
getdlgit size = 96
_HB_FUN_GETDLGCTRLID _HB_FUN_GETDLGITEM
_HB_FUN_NEXTDLGTAB
getfile size = 2126
ComDlgHkFile _HB_FUN_CGETFILE
_HB_FUN_CGETFILEA _HB_FUN_NGETFILEFILTER
getproca size = 219
_HB_FUN_GETPRADD _HB_FUN_GETPROCADD
_HB_FUN_SETPROCADDRESS
getstkob size = 82
_HB_FUN_GETSTOCKOBJECT _HB_FUN_SETBLACKPEN
_HB_FUN_SETWHITEPEN
gettext size = 918
_HB_FUN_GETWINDOWTEXT _HB_FUN_GETWINTXTLENGHT
_HB_FUN_MGETLINE _HB_FUN_MGETREPLACE
_HB_FUN_WINLOWER _HB_FUN_WINUPPER
_UTF16toANSI _UTF16toSTR8
_ispureAnsiAsWide
gettextw size = 400
_HB_FUN_GETTEXTHEIGHT _HB_FUN_GETTEXTWIDTH
getwnd size = 179
_HB_FUN_CHILDWINDOWFROMPOINT _HB_FUN_GETWINDOW
_HB_FUN_GETWINDOWTHREADPROCESSID _HB_FUN_GETWINDOWWORD
_HB_FUN_GETWNDTASK
handlist size = 1172
__fwAddGlobal __fwDelGlobal
__fwFreeAllGlobals __fwFreeAllLibrarys
__fwFreeLibInstance __fwFreeLibrary
__fwLoadLibrary
harddisk size = 233
_HB_FUN_NSERIALA _HB_FUN_NSERIALHD
_HB_FUN_VOLUMENAME
help size = 726
_HB_FUN_GETHELPFILE _HB_FUN_GETHELPTOPIC
_HB_FUN_HELPCTRLHWND _HB_FUN_HELPSETPOS
_HB_FUN_HELPSETTOPIC _HB_FUN_SETHELPFILE
_HB_FUN__SETHELPFI
hex2dec size = 226
_HB_FUN_HEXTODEC _fw_hextodec
hiloword size = 196
_HB_FUN_NHIBYTE _HB_FUN_NHIWORD
_HB_FUN_NLOBYTE _HB_FUN_NLOWORD
icons size = 4610
_DrawIconFocus _GetIconSize
_HB_FUN_BMPFROMICON _HB_FUN_BMPFROMICONEX
_HB_FUN_DESTROYICON _HB_FUN_DRAWICON
_HB_FUN_DRAWICONEX _HB_FUN_DRAWICONFOCUS
_HB_FUN_DUPLICATEICON _HB_FUN_EXTRACTICON
_HB_FUN_GETICONSIZE _HB_FUN_HASICONALPHA
_HB_FUN_HBMPFROMHICON _HB_FUN_ICON_READ
_HB_FUN_ICON_READEX _HB_FUN_ISHICON
_HB_FUN_LOADICON _HB_FUN_LOADIMAGEFILEICON
_HB_FUN_LOADIMAGERESICON _HB_FUN_NICONS
_hasIconAlpha
imagelis size = 639
_HB_FUN_ILADD _HB_FUN_ILADDICON
_HB_FUN_ILADDMASKED _HB_FUN_ILCREATE
_HB_FUN_ILDESTROY _HB_FUN_ILLOADIMAGE
_HB_FUN_ILSETBKCOLOR
instance size = 251
_GetInstance _HB_FUN_GETFOCUS
_HB_FUN_GETINSTANCE _HB_FUN_POSTQUITMESSAGE
_HB_FUN_SETFOCUS _HB_FUN_SETFOREGROUNDWINDOW
_HB_FUN_SHOWWINDOW _HB_FUN__SETFOCUS
joystick size = 504
_HB_FUN_JOYGETDEVCAPS _HB_FUN_JOYGETNUMDEVS
_HB_FUN_JOYGETPOS _HB_FUN_JOYGETTHRESHOLD
_HB_FUN_JOYRELEASECAPTURE _HB_FUN_JOYSETCAPTURE
_HB_FUN_JOYSETTHRESHOLD
keybrd size = 457
_HB_FUN_FW_SENDKEY _HB_FUN_GETASYNCKEY
_HB_FUN_GETKEYSTATE _HB_FUN_GETKEYTOGGLE
_HB_FUN_KEYTOGGLE _HB_FUN_SENDKEY
_HB_FUN____KEYBOARD _PostVirtualKeyEvent
lbx size = 282
_HB_FUN_LBXGETITEM _HB_FUN_LBXGETSELITEMS
_HB_FUN_MEASUREITEM
listview size = 1396
_HB_FUN_GETNMLISTVIEWITEM _HB_FUN_LVDELETEITEM
_HB_FUN_LVENABLEGROUPVIEW _HB_FUN_LVFINDITEM
_HB_FUN_LVGROUPSETSTATE _HB_FUN_LVINSERTGROUP
_HB_FUN_LVINSERTGROUPINLIST _HB_FUN_LVINSERTINLIST
_HB_FUN_LVINSERTITEM _HB_FUN_LVINSERTITEMGROUP
_HB_FUN_LVSETGROUP _HB_FUN_LVSETITEMSELECT
_HB_FUN_LVSETITEMTEXT _HB_FUN_LVSETSTYLE
loadbmp size = 169
_HB_FUN_CREATEMEMBITMAP _HB_FUN_HSYSBITMAP
_HB_FUN_LOADBITMAP
longname size = 84
_HB_FUN_LCLOSE _HB_FUN_LCREAT
_HB_FUN_LOPEN
lzexpand size = 112
_HB_FUN_LZCOPYFILE
makeintr size = 19
_HB_FUN_MAKEINTRESOURCE
makelong size = 48
_HB_FUN_NMAKELONG
mapi size = 3875
_HB_FUN_MAPIADDRESS _HB_FUN_MAPIDELETEMAIL
_HB_FUN_MAPIFINDNEXT _HB_FUN_MAPILOGOFF
_HB_FUN_MAPILOGON _HB_FUN_MAPIREADMAIL
_HB_FUN_MAPIRESOLVENAME _HB_FUN_MAPISENDDOCUMENTS
_HB_FUN_MAPISENDMAIL
mci size = 728
_HB_FUN_AUXGETCAPS _HB_FUN_AUXGETDEV
_HB_FUN_AUXGETVOL _HB_FUN_AUXSETVOL
_HB_FUN_MCIGETERRORSTRING _HB_FUN_MCISENDCOMMAND
_HB_FUN_MCISENDSTR _HB_FUN_NMCIOPEN
_HB_FUN_NMCIPLAY _HB_FUN_NMCIWINDOW
mdi size = 871
_HB_FUN_CMDISTRUCT _HB_FUN_CREATEMDIWINDOW
_HB_FUN_GETFRAMEPROC _HB_FUN_GETMDICHLPROC
_HB_FUN_MDICTRLADJUST _WndFrameProc
mem size = 401
_HB_FUN_GETFREESPACE _HB_FUN_GLOBALALLOC
_HB_FUN_GLOBALCOMPACT _HB_FUN_GLOBALDATA
_HB_FUN_GLOBALFREE _HB_FUN_GLOBALLOCK
_HB_FUN_GLOBALREALLOC _HB_FUN_GLOBALSIZE
_HB_FUN_GLOBALUNLOCK _HB_FUN_LOCALSHRINK
_HB_FUN_NEXTMEM _fwGlobalAlloc
_fwGlobalFree
menudraw size = 17080
_Bmp2Gray _Check2007
_Check2010 _Check2013
_Check2015 _CheckFw
_DelCheck2007 _DelCheck2010
_DelCheck2013 _DelCheck2015
_DelCheckFw _DelPointC
_FwBarMenu _FwBmpItem
_FwCharItem _FwCheckedItem
_FwNoSelectedItem _FwPromptItem
_FwSelectedItem _FwSeparatorItem
_HB_FUN_ALTFONTMIMENU _HB_FUN_ANCFONTMIMENU
_HB_FUN_BMP2GRAY _HB_FUN_CCOLORMENU
_HB_FUN_CCOLORSUBMENU _HB_FUN_CFONTMIMENU
_HB_FUN_CHGMENUMEA _HB_FUN_CHGMNUISR
_HB_FUN_COLORGETBACK _HB_FUN_DELCHECK2007
_HB_FUN_DELCHECK2010 _HB_FUN_DELCHECK2013
_HB_FUN_DELCHECK2015 _HB_FUN_DELCHECKFW
_HB_FUN_DELPOINTC _HB_FUN_GETDRAWISR
_HB_FUN_GETITEMTEXT _HB_FUN_GETPARENTITEM
_HB_FUN_HBITMAPITEM _HB_FUN_HBMPBACK
_HB_FUN_HB_FWBCODE _HB_FUN_HCHECK
_HB_FUN_HPOINT _HB_FUN_HSETBMPBACK
_HB_FUN_MENUDRAWFW _HB_FUN_MGETALLITEMS
_HB_FUN_MINFOMIMENU _HB_FUN_MITEMS
_HB_FUN_MITEMS2007 _HB_FUN_MITEMSFW
_HB_FUN_MSYSBITMAP _HB_FUN_NOCLOSEDLG
_HB_FUN_SET2007SKINMENU _HB_FUN_SET2010SKINMENU
_HB_FUN_SET2013SKINMENU _HB_FUN_SET2015SKINMENU
_HB_FUN_SETBITMAPITEM _HB_FUN_SETFWSKINMENU
_HB_FUN_SETITEMSTEXT _HB_FUN_SETOWNERMENU
_HPointC _SelectSkinMnu
_SysBitMap _getParentMenuItem
_hsetbmpback _set2007SkinMenu
_set2010SkinMenu _set2013SkinMenu
_set2015SkinMenu _setFwSkinMenu
menus size = 2006
_DrawCheck _DrawRadioCheck
_DrawRadioUncheck _DrawUncheck
_HB_FUN_APPENDMENU _HB_FUN_CHECKMENUITEM
_HB_FUN_CREATEMENU _HB_FUN_CREATEPOPUPMENU
_HB_FUN_DESTROYMENU _HB_FUN_DRAWMENUBAR
_HB_FUN_ENABLEMENUITEM _HB_FUN_FSETMENUDEFAULTITEM
_HB_FUN_FSETMENUITEMBITMAPS _HB_FUN_FWMODIFYMENU
_HB_FUN_GETMENU _HB_FUN_GETMENUSTATE
_HB_FUN_GETMENUSTRING _HB_FUN_GETMITEMCOUNT
_HB_FUN_GETMITEMID _HB_FUN_GETSUBMENU
_HB_FUN_GETSYSTEMMENU _HB_FUN_HILITEMENUITEM
_HB_FUN_INSERTMENU _HB_FUN_ISMENU
_HB_FUN_LOADMENU _HB_FUN_MODIFYMENU
_HB_FUN_RADIOMENUITEM _HB_FUN_REMOVEMENU
_HB_FUN_SETITEMBITMAPS _HB_FUN_SETMENU
_HB_FUN_SETMENUDEFAULTITEM _HB_FUN_TRACKPOPUP
_HB_FUN_TRACKPOPUPMENUEX _HB_FUN__GETMENUID
metafi32 size = 886
_HB_FUN_CLOSEENHMETAFILE _HB_FUN_CREATEENHMETAFILE
_HB_FUN_DELETEENHMETAFILE _HB_FUN_GETENHMETAFILE
_HB_FUN_PLAYENHMETAFILE _HB_FUN_XPLAYENHMETAFILE
metafile size = 795
_HB_FUN_CLOSEMETAFILE _HB_FUN_CREATEMETAFILE
_HB_FUN_DELETEMETAFILE _HB_FUN_GETMETABIT
_HB_FUN_GETMETAFILE _HB_FUN_GETPMETAFILE
_HB_FUN_PLAYMETAFILE _HB_FUN_PMETA
_SetMetaFileBits
metpaint size = 730
_HB_FUN_METERPAINT
mgetcrea size = 387
_HB_FUN_MGETCREATE
mime64 size = 1008
_HB_FUN_CMIMEDEC _HB_FUN_CMIMEENC
_at
mkdir size = 602
_HB_FUN_FILEW _HB_FUN_GETWINDOWSDIRECTORY
_HB_FUN_LCHDIR _HB_FUN_LCHDIRW
_HB_FUN_LISDIRW _HB_FUN_LLFNMKDIR
_HB_FUN_LLFNRMDIR _HB_FUN_LMKDIR
_HB_FUN_LMKDIRW _HB_FUN_LMKFULLPATH
_HB_FUN_LMKFULLPATHW _HB_FUN_LRMDIR
_HB_FUN_LRMDIRW
moveto size = 182
_HB_FUN_MOVEGET _HB_FUN_MOVETO
_HB_FUN_MOVETOEX
msgbeep size = 23
_HB_FUN_MESSAGEBEEP _HB_FUN_MSGBEEP
msgs size = 2119
MsgBoxHookProc _HB_FUN_CENTERMSGS
_HB_FUN_FWMESSAGEBOX _HB_FUN_MSGABOUT
_HB_FUN_MSGALERT _HB_FUN_MSGINFO
_HB_FUN_MSGNOYES _HB_FUN_MSGRETRYCANCEL
_HB_FUN_MSGSTOP _HB_FUN_MSGYESNO
_HB_FUN_MSGYESNOCANCEL _HB_FUN_NMSGBOX
_HB_FUN_SETASMSGBOX _HB_FUN_SETMSGLANGID
_HB_FUN_SHELLABOUT _HB_FUN_UNHOOKWINDOWSHOOKEX
_LToStr _MsgStr
_ValToChar
msgsapi size = 1025
_HB_FUN_FW_ISUTF8 _HB_FUN_POSTMESSAGE
_HB_FUN_SENDMESSAGE _HB_FUN_SENDWIDESTRINGMESSAGE
_SendMessageU _fw_parAnsi
_isutf8
msgtools size = 1094
_HB_FUN_MSGPAINT _HB_FUN_MSGPAINT3L
net size = 740
_HB_FUN_WNETADDCON _HB_FUN_WNETADDCONNECTION2
_HB_FUN_WNETADDCONNECTION2W _HB_FUN_WNETBROWSEDIALOG
_HB_FUN_WNETCONNECT _HB_FUN_WNETDELCONNECTION
_HB_FUN_WNETDISCONNECTDIALOG _HB_FUN_WNETERROR
_HB_FUN_WNETGETCONNECTION _HB_FUN_WNETGETERR
_HB_FUN_WNETGETUSER
netcrdid size = 809
_GetMACaddress _GetMACaddressEx
_HB_FUN_GETNETCARDID _HB_FUN_GETNETCARDINFO
nonclient size = 2567
_HB_FUN_COMBOSELTEXT _HB_FUN_DLGDIRLISTCOMBOBOX
_HB_FUN_GETALIGNPOPUP _HB_FUN_GETNONCLIENT
_HB_FUN_GETRECTCOMBOBTT _HB_FUN_GETRECTCOMBOEDIT
_HB_FUN_HWNDCOMBO _HB_FUN_HWNDCOMBOEDIT
_HB_FUN_HWNDCOMBOLIST _HB_FUN_ISTACTIL
_HB_FUN_NGETLISTBOXINFO _HB_FUN_NONCLIENT
_HB_FUN_SETADDTOOL _HB_FUN_SETALIGNPOPUP
_HB_FUN_SETNONCLIENT _HB_FUN_SETRECTCOMBOBTT
_HB_FUN_SETRECTCOMBOEDIT _HB_FUN_SETWHSCROLL
notify size = 89
_HB_FUN_GETNMHDRCODE _HB_FUN_GETNMHDRHWNDFROM
_HB_FUN_GETNMHDRIDFROM _HB_FUN_NMTREEVIEWACTION
_HB_FUN_NMTREEVIEWITEMNEW
ntxtools size = 175
_HB_FUN_CNTXKEY _HB_FUN_DELDBFMDX
numcword size = 3690
_HB_FUN_FW_NUMTOWORDC _HB_FUN_N2W_SETSTRINGS
_HB_FUN_N2W_SETUNITS _bAnd
_bIndian
ocx size = 164
_HB_FUN_COINITIALIZE _HB_FUN_REGISTERSERVER
_HB_FUN_UNREGISTERSERVER
odbc32x size = 2798
_HB_FUN_SQLALLOCCONNECT _HB_FUN_SQLALLOCENV
_HB_FUN_SQLALLOCSTMT _HB_FUN_SQLCANCEL
_HB_FUN_SQLCOLUMNS _HB_FUN_SQLCONNECT
_HB_FUN_SQLDESC32 _HB_FUN_SQLDISCONNECT
_HB_FUN_SQLDRVC32 _HB_FUN_SQLERROR
_HB_FUN_SQLEXECDIRECT _HB_FUN_SQLEXECUTE
_HB_FUN_SQLEXTENDEDFETCH _HB_FUN_SQLFETCH
_HB_FUN_SQLFREECONNECT _HB_FUN_SQLFREEENV
_HB_FUN_SQLFREESTMT _HB_FUN_SQLGETCONNECTOPTION
_HB_FUN_SQLGETCURSORNAME _HB_FUN_SQLGETD32
_HB_FUN_SQLGETDIAGREC _HB_FUN_SQLGETIN32
_HB_FUN_SQLGETSTMTOPTION _HB_FUN_SQLGETTEXTDATA
_HB_FUN_SQLNUMRESULTCOLS _HB_FUN_SQLPARAMDATA
_HB_FUN_SQLPREP32 _HB_FUN_SQLPRIMARYKEYS
_HB_FUN_SQLPUTDATA _HB_FUN_SQLROLLBACK
_HB_FUN_SQLROWCOUNT _HB_FUN_SQLSCOL
_HB_FUN_SQLSETCONNECTOPTION _HB_FUN_SQLSETCURSORNAME
_HB_FUN_SQLSETPARAM _HB_FUN_SQLSETPOS
_HB_FUN_SQLSETSTMT _HB_FUN_SQLSTATISTICS
_HB_FUN_SQLTABLES _HB_FUN_SQLTRANSACT
_aRowStatus
oemansi size = 455
_HB_FUN_ANSITOOEM _HB_FUN_ISANSI
_HB_FUN_ISOEM _HB_FUN_OEMTOANSI
_HB_FUN_makeLANGID
onoffbmp size = 2245
_HB_FUN_FWBMPOFF _HB_FUN_FWBMPON
or size = 472
_HB_FUN_I2HEX _HB_FUN_L2HEX
_HB_FUN_LAND _HB_FUN_LXOR
_HB_FUN_NAND _HB_FUN_NNOT
_HB_FUN_NOR _HB_FUN_NPTRWORD
_HB_FUN_NXOR _HB_FUN_PTRTONUM
_HB_FUN_UTOS
paint size = 79
_HB_FUN_BEGINPAINT _HB_FUN_ENDPAINT
peekmsg size = 87
_HB_FUN_PEEKMESSAGE _HB_FUN_WAITMESSAGE
peekpoke size = 42
_HB_FUN_PEEKBYTE _HB_FUN_PEEKWORD
_HB_FUN_POKEBYTE _HB_FUN_POKEWORD
point size = 210
_HB_FUN_DPTOLP _HB_FUN_LPTODP
printdc size = 4684
_HB_FUN_ABORTDOC _HB_FUN_COMDLGXERR
_HB_FUN_DRAFTMODE _HB_FUN_ENDDOC
_HB_FUN_ENDPAGE _HB_FUN_ENUMFONTFAMILIES
_HB_FUN_ESCAPE _HB_FUN_GETPRINTDC
_HB_FUN_GETPRINTDEFAULT _HB_FUN_IMPORTRAWFILE
_HB_FUN_ISCOLORPRINTER _HB_FUN_ISDUPLEXPRINTER
_HB_FUN_PAGEGETMARGINS _HB_FUN_PAGESETUP
_HB_FUN_PRINTERDCFROMNAME _HB_FUN_PRINTEREND
_HB_FUN_PRINTERESC _HB_FUN_PRINTERINIT
_HB_FUN_PRINTERSETUP _HB_FUN_PRNBINSOURCE
_HB_FUN_PRNDUPLEX _HB_FUN_PRNGETCOLLATE
_HB_FUN_PRNGETCOPIES _HB_FUN_PRNGETDRIVE
_HB_FUN_PRNGETNAME _HB_FUN_PRNGETORIENTATION
_HB_FUN_PRNGETPAGES _HB_FUN_PRNGETPAGNUMS
_HB_FUN_PRNGETPORT _HB_FUN_PRNGETSELECTION
_HB_FUN_PRNGETSIZE _HB_FUN_PRNLANDSCAPE
_HB_FUN_PRNOFFSET _HB_FUN_PRNPORTRAIT
_HB_FUN_PRNSETCOLLATE _HB_FUN_PRNSETCOPIES
_HB_FUN_PRNSETPAGE _HB_FUN_PRNSETSIZE
_HB_FUN_PRNSTATUS _HB_FUN_RESETDC
_HB_FUN_SPOOLFILE _HB_FUN_STARTDOC
_HB_FUN_STARTPAGE _HB_FUN_devMODE
prnsayrt size = 0
profile size = 522
_HB_FUN_DELINIENTRY _HB_FUN_DELINISECTION
_HB_FUN_GETPROFINT _HB_FUN_GETPROFSTRING
_HB_FUN_GETPVPROFINT _HB_FUN_GETPVPROFSTRING
_HB_FUN_WRITEPPROSTRING _HB_FUN_WRITEPROFSTRING
prop size = 182
_HB_FUN_GETPROP _HB_FUN_REMOVEPROP
_HB_FUN_SETPROP
prpsheet size = 416
_HB_FUN_PROPSHEET
rasapi size = 1141
_HB_FUN_RACONST _HB_FUN_RADIAL
_HB_FUN_RAENUMCONNECTIONS _HB_FUN_RAENUMENTRIES
_HB_FUN_RAGETCONST _HB_FUN_RAGETERROR
_HB_FUN_RAHANGUP
rebars size = 213
_HB_FUN_RBINSERTBAND _HB_FUN_SETREBARINFO
rebarsw size = 357
_HB_FUN_RBINSERTBANDAW _HB_FUN_SETREBARINFOAW
rects size = 1911
_FrameDot _HB_FUN_DRAWFOCUSELLIPSE
_HB_FUN_DRAWFOCUSRECT _HB_FUN_FILLRECT
_HB_FUN_FRAMEDOT _HB_FUN_GETCLIENTRECT
_HB_FUN_GETCOORS _HB_FUN_GETLABELDIM
_HB_FUN_GETWNDRECT _HB_FUN_INVALIDATERECT
_HB_FUN_INVERTRECT _HB_FUN_MAPDIALOGRECT
_HB_FUN_NCCSRIGHT _HB_FUN_ROUNDRECT
regclass size = 264
_HB_FUN_GETMODULEHANDLE _HB_FUN_REGISTERCLASS
_HB_FUN_SETCLASSWORD
regedit size = 876
_HB_FUN_REGCLOSEKEY _HB_FUN_REGCREATEKEY
_HB_FUN_REGDELETEKEY _HB_FUN_REGENUMKEY
_HB_FUN_REGENUMVALUE _HB_FUN_REGOPENKEY
_HB_FUN_REGOPENKEYEX _HB_FUN_REGQUERYVALUE
_HB_FUN_REGQUERYVALUEEX _HB_FUN_REGSETVALUE
_HB_FUN_REGSETVALUEEX
regions size = 1046
_HB_FUN_COMBINERGN _HB_FUN_CREATEELLIPTICRGN
_HB_FUN_CREATEELLIPTICRGNINDIRECT _HB_FUN_CREATEPOLYGONRGN
_HB_FUN_CREATERECTRGN _HB_FUN_CREATEROUNDRECTRGN
_HB_FUN_FRAMERGN _HB_FUN_INVALIDATERGN
_HB_FUN_SETWINDOWRGN
resource size = 757
_GetResources _HB_FUN_CRESTOSTR
_HB_FUN_ENUMRESOURCENAMES _HB_FUN_FINDICON
_HB_FUN_FINDRESOURCE _HB_FUN_FREERESOURCES
_HB_FUN_GETRESOURCES _HB_FUN_LOADHTML
_HB_FUN_LOADRESOURCE _HB_FUN_LOCKRESOURCE
_HB_FUN_RCDATATOFILE _HB_FUN_RESOURCEFREE
_HB_FUN_SETRESOURCES
ribbon size = 6849
_BitmapFromMem _Blur
_BrightImg _CreateBase
_CreateShadow _DoHBlur
_DoHorizontalBlur _DoVBlur
_DoVerticalBlur _HB_FUN_BEGINPATH
_HB_FUN_BLUR _HB_FUN_BRIGHTIMG
_HB_FUN_CREATEBASE _HB_FUN_CREATESHADOW
_HB_FUN_ENDPATH _HB_FUN_FILLPATH
_HB_FUN_FILLRGN _HB_FUN_GETTEXTEXTENTPOINT32
_HB_FUN_HDCBITMAP _HB_FUN_LITTLEARROW
_HB_FUN_MAKEBKBMP _HB_FUN_MAKEBKBMPEX
_HB_FUN_MAKEBKBRUSH _HB_FUN_MINIBTN
_HB_FUN_OFFSETRGN _HB_FUN_PARENTCAPTURE
_HB_FUN_PATHTOREGION _HB_FUN_RESIZEIMG
_HB_FUN_STROKEANDFILLPATH _HB_FUN_STROKEPATH
_HB_FUN_TI_DRAWREFLEX _MakeBkBmp
_MakeBkBmpEx _MakeBkBmpExHDC
_ParentCapture _PrepareInfoHeader
_ResizeImg _TI_DrawReflex
richedi5 size = 14450
_FillRichEditFromFile _HB_FUN_GETPARFORM5
_HB_FUN_REDLLVERSION5 _HB_FUN_REFINDTEXT5
_HB_FUN_REGETBACKCOLOR5 _HB_FUN_REGETBULLET5
_HB_FUN_REGETCHARFORMAT5 _HB_FUN_REGETDATETIME5
_HB_FUN_REGETHIGHLIGHT5 _HB_FUN_REGETINDENT5
_HB_FUN_REGETNMHDRLINK5 _HB_FUN_REGETNUMBERING5
_HB_FUN_REGETOLEINTERFACE5 _HB_FUN_REGETPARAFORMAT5
_HB_FUN_REGETPARAGRAPH5 _HB_FUN_REGETPARAGRAPHALL5
_HB_FUN_REGETSELECTION5 _HB_FUN_REGETTEXTCOLOR5
_HB_FUN_REGETZOOM5 _HB_FUN_REINSERTPICTURE5
_HB_FUN_REINSERTRTF5 _HB_FUN_REINSERTRTFFROMFILE5
_HB_FUN_RELASTLINEVISIBLE _HB_FUN_RELEN5
_HB_FUN_RELOADASRTF5 _HB_FUN_REPAGEBREAK5
_HB_FUN_REPASTESPECIAL5 _HB_FUN_REPREVIEW5
_HB_FUN_REPRINT5 _HB_FUN_REPRINTBOX5
_HB_FUN_RESAVEASRTF5 _HB_FUN_RESETATTRIBUTE5
_HB_FUN_RESETAUTOURLDETECT5 _HB_FUN_RESETBACKCOLOR5
_HB_FUN_RESETBULLET5 _HB_FUN_RESETCHARFORMAT5
_HB_FUN_RESETFONTNAME5 _HB_FUN_RESETFONTSIZE5
_HB_FUN_RESETHIGHLIGHT5 _HB_FUN_RESETINDENT5
_HB_FUN_RESETNUMBERING5 _HB_FUN_RESETOLECALLBACK5
_HB_FUN_RESETOLEINIT5 _HB_FUN_RESETOLEUNINIT5
_HB_FUN_RESETPARADELIMITER5 _HB_FUN_RESETPARAFORMAT5
_HB_FUN_RESETPARAGRAPH5 _HB_FUN_RESETPARAGRAPHALL5
_HB_FUN_RESETPOS5 _HB_FUN_RESETSELECTION5
_HB_FUN_RESETTEXTCOLOR5 _HB_FUN_RESETZOOM5
_HB_FUN_RTGETPARAFORMAT5 _HB_FUN_RTINSERTOBJECT5
_HB_FUN_RTINSERTTABLE5 _HB_FUN_RTSETPARAFORMAT5
_HB_FUN_SETPARFORM5 _InsertObject
richedit size = 8997
_HB_FUN_REDLLVERSION _HB_FUN_REFINDTEXT
_HB_FUN_REGETBULLET _HB_FUN_REGETCHARFORMAT
_HB_FUN_REGETDATETIME _HB_FUN_REGETHIGHLIGHT
_HB_FUN_REGETINDENT _HB_FUN_REGETNMHDRLINK
_HB_FUN_REGETNUMBERING _HB_FUN_REGETOLEINTERFACE
_HB_FUN_REGETPARAFORMAT _HB_FUN_REGETPARAGRAPH
_HB_FUN_REGETSELECTION _HB_FUN_REGETZOOM
_HB_FUN_REINSERTPICTURE _HB_FUN_RELEN
_HB_FUN_RELOADASRTF _HB_FUN_REPAGEBREAK
_HB_FUN_REPASTESPECIAL _HB_FUN_REPREVIEW
_HB_FUN_REPRINT _HB_FUN_REPRINTBOX
_HB_FUN_RESAVEASRTF _HB_FUN_RESETATTRIBUTE
_HB_FUN_RESETAUTOURLDETECT _HB_FUN_RESETBULLET
_HB_FUN_RESETCHARFORMAT _HB_FUN_RESETFONTNAME
_HB_FUN_RESETFONTSIZE _HB_FUN_RESETHIGHLIGHT
_HB_FUN_RESETINDENT _HB_FUN_RESETNUMBERING
_HB_FUN_RESETOLECALLBACK _HB_FUN_RESETOLEINIT
_HB_FUN_RESETOLEUNINIT _HB_FUN_RESETPARAFORMAT
_HB_FUN_RESETPARAGRAPH _HB_FUN_RESETPOS
_HB_FUN_RESETSELECTION _HB_FUN_RESETTEXTCOLOR
_HB_FUN_RESETZOOM
saveicon size = 1001
_HB_FUN_FW_SAVEHICONTOICO _SaveIcon3
scintilc size = 3602
_HB_FUN_ASIGNKEYS _HB_FUN_FINDAUTOCOMPLETE
_HB_FUN_GETANNOTALINESADDHDR _HB_FUN_GETCHARHDR
_HB_FUN_GETIDHDR _HB_FUN_GETLENHDR
_HB_FUN_GETLEVNOWHDR _HB_FUN_GETLEVPREVHDR
_HB_FUN_GETLINADDHDR _HB_FUN_GETLINEHDR
_HB_FUN_GETLISTCOMPLETIONHDR _HB_FUN_GETLISTHDR
_HB_FUN_GETLPARAM _HB_FUN_GETMARGHDR
_HB_FUN_GETMESSAGEHDR _HB_FUN_GETMODIFIER
_HB_FUN_GETMODTYPE _HB_FUN_GETPOSHDR
_HB_FUN_GETPOSIHDR _HB_FUN_GETTEXTHDR
_HB_FUN_GETTOKENHDR _HB_FUN_GETUPDATEDHDR
_HB_FUN_GETWNDHDR _HB_FUN_GETWPARAM
_HB_FUN_GETXHDR _HB_FUN_GETXPARAM
_HB_FUN_GETYHDR _HB_FUN_GETYPARAM
_HB_FUN_MYFUNC_DBLUE _HB_FUN_MYFUNC_F
_HB_FUN_MYFUNC_F16 _HB_FUN_MYFUNC_FBLUE
_HB_FUN_MYFUNC_MBLUE _HB_FUN_MYFUNC_MBLUE16
_HB_FUN_MYFUNC_VBLUE _HB_FUN_PONFOLD
_HB_FUN_PONFOLDCOMPACT _HB_FUN_SCIGETLINE
_HB_FUN_SCIGETSELTEXT _HB_FUN_SCIGETTEXT
_HB_FUN_SCIGETTEXTAT _HB_FUN_SCI_OPENFILE
_HB_FUN_SCNOTIFICATIONCH _HB_FUN_SCNOTIFICATIONCODE
_HB_FUN_SC_ADDTEXT _HB_FUN_SC_ISREADONLY
_HB_FUN_SEARCHBACKWARD _HB_FUN_SEARCHFORWARD
_SearchBackward _SearchForward
scroll size = 503
_HB_FUN_ENABLESCROLLBAR _HB_FUN_GETSCROLLPOS
_HB_FUN_GETSCROLLRANGE _HB_FUN_SETSCROLLINFO
_HB_FUN_SETSCROLLPOS _HB_FUN_SETSCROLLRANGE
_HB_FUN_SETSCROLLRANGEX
selobjec size = 31
_HB_FUN_SELECTOBJECT
sethandl size = 22
_HB_FUN_SETHANDLECOUNT
setmapmo size = 75
_HB_FUN_GETMAPMODE _HB_FUN_GETSYSMETRICS
_HB_FUN_SETMAPMODE
settext size = 88
_HB_FUN_SETWINDOWTEXT
sound size = 269
_HB_FUN_MSGSOUND _HB_FUN_SNDPLAYRESOURCE
_HB_FUN_SNDPLAYSOUND
str2hex size = 806
_HB_FUN_FW_URLENCODE _HB_FUN_HEX2STR
_HB_FUN_STR2HEX
string size = 67
_HB_FUN_LOADSTRING
strtoken size = 672
_HB_FUN_STRBYTE _HB_FUN_STRCAPFIRST
_HB_FUN_STRCHAR _HB_FUN_STRCHARCOUNT
_HB_FUN_STRCPY _HB_FUN_STRPTR
_HB_FUN_STRTOKEN _StrToken
tabctrl size = 939
_HB_FUN_TABCTRLADD _HB_FUN_TABCTRL_ADJUSTRECT
_HB_FUN_TABCTRL_GETCURSEL _HB_FUN_TABCTRL_HITTEST
_HB_FUN_TABCTRL_SETCURSEL _HB_FUN_TABDELALLITEMS
_HB_FUN_TABGETROWCOUNT _HB_FUN_TABSETITEM
tabctrlw size = 1242
_HB_FUN_TABCTRLADDW _HB_FUN_TABCTRL_ADJUSTRECTW
_HB_FUN_TABCTRL_GETCURSELW _HB_FUN_TABCTRL_HITTESTW
_HB_FUN_TABCTRL_SETCURSELW _HB_FUN_TABDELALLITEMSW
_HB_FUN_TABGETROWCOUNTW _HB_FUN_TABSETITEMW
tcbfuncs size = 1615
_HB_FUN_ATCBRWPOSRECT _HB_FUN_NTCWROW
_HB_FUN_TCBRWSCROLL _HB_FUN_TCDRAWCELL
text size = 2892
_DrawTextAW _DrawTextAW2
_DrawTextAWC _ExtTextOutAW
_HB_FUN_DRAWTEXT _HB_FUN_DRAWTEXTEX
_HB_FUN_EXTTEXTOUT _HB_FUN_GETTEXTALIGN
_HB_FUN_SETTEXTALIGN _HB_FUN_SETTEXTJUSTIFICATION
_HB_FUN_TEXTOUT _TextOutAW
_UTF8toUTF16W _fw_parRect
theaders size = 692
_HB_FUN_GETNMHEABUTTON _HB_FUN_GETNMHEAITEM
_HB_FUN_HEADERGET _HB_FUN_HEADERINS
_HB_FUN_HEADERLAYOUT _HB_FUN_HEADERSET
themes size = 4543
_DrawGripper _DrawPBack
_DrawRBGripper _HB_FUN_APPHASMANIFEST
_HB_FUN_CHECKFOCUS _HB_FUN_DRAWGRIPPER
_HB_FUN_DRAWHEADER _HB_FUN_DRAWPBACK
_HB_FUN_DRAWTABBODY _HB_FUN_DRAWTHEMED
_HB_FUN_EDBORDER _HB_FUN_FIXTHEMECONTROLS
_HB_FUN_ISAPPTHEMED _HB_FUN_ISCLASSIC
_HB_FUN_ISTHEMEACTIVE _HB_FUN_MAPWINDOWPOINT
_HB_FUN_SETWINDOWTHEME _HB_FUN_TBERASE
__HasManifest __IsAppThemed
timepick size = 221
_HB_FUN_GETTIMEPICK _HB_FUN_SETTIMEPICK
timers size = 93
_HB_FUN_GETTICKCOUNT _HB_FUN_KILLTIMER
_HB_FUN_SETTIMER
toolbarsw size = 1219
_HB_FUN_CREATETLBARAW _HB_FUN_INITCOMMONCONTROLSEXW
_HB_FUN_INITCOMMONCONTROLSW _HB_FUN_TBADDBUTTONAW
_HB_FUN_TBADDMENUAW _HB_FUN_TBADDSEPARATORAW
_HB_FUN_TBENABLEBUTTONAW _HB_FUN_TBGETRECTAW
_HB_FUN_TBSETTEXTAW _HB_FUN_TTNSETTEXTA
_HB_FUN_TTNSETTEXTW
toolhelp size = 39
_HB_FUN_INTERRUPTREGISTER _HB_FUN_INTERRUPTUNREGISTER
_HB_FUN_TERMINATEAPP _HB_FUN_TIMERCOUNT
tooltipa size = 608
_HB_FUN_CREATETOOLTIPANEW
tooltipw size = 904
_HB_FUN_CREATETOOLTIPWNEW
touch size = 897
_HB_FUN_AUTOROTATIONPREF _HB_FUN_GESTUREINFO
_HB_FUN_GETAUTOROTATIONSTATE _HB_FUN_ISEVENTBYTOUCH
_HB_FUN_USEALLGESTURES
treeview size = 1576
_HB_FUN_TVDELALLITEMS _HB_FUN_TVDELETEITEM
_HB_FUN_TVEDITLABEL _HB_FUN_TVGETCHECK
_HB_FUN_TVGETEDITCONTROL _HB_FUN_TVGETPARENT
_HB_FUN_TVGETSELECTED _HB_FUN_TVGETSELTEXT
_HB_FUN_TVGETTEXT _HB_FUN_TVHITTEST
_HB_FUN_TVINSERTITEM _HB_FUN_TVIPARAM
_HB_FUN_TVSELECT _HB_FUN_TVSETCHECK
_HB_FUN_TVSETCOLOR _HB_FUN_TVSETIMAGELIST
_HB_FUN_TVSETITEMBOLD _HB_FUN_TVSETITEMHEIGHT
_HB_FUN_TVSETITEMIMAGE _HB_FUN_TVSETITEMTEXT
_HB_FUN_TVSETTEXTIMAGE
urldownloadtofile size = 8
_downloading
wbrwline size = 408
_HB_FUN_ABRWPOSRECT
webcam size = 1018
_HB_FUN_CAPFILESETCAPTUREFILE _HB_FUN_WEBCAM_CAPTUREWINDOW
_HB_FUN_WEBCAM_DLGVIDEOFORMAT _HB_FUN_WEBCAM_DLGVIDEOSOURCE
_HB_FUN_WEBCAM_DRIVERCONNECT _HB_FUN_WEBCAM_DRIVERDISCONNECT
_HB_FUN_WEBCAM_FILESAVEDIB _HB_FUN_WEBCAM_GETDRIVERDESCRIPTION
_HB_FUN_WEBCAM_PREVIEW _HB_FUN_WEBCAM_PREVIEWRATE
_HB_FUN_WEBCAM_PREVIEWSCALE _HB_FUN___WEBCAM_CALLBACK
fpCallbackProc fpCallbackProc2
webview size = 1295
_HB_FUN_WEBVIEW_BIND _HB_FUN_WEBVIEW_CREATE
_HB_FUN_WEBVIEW_DESTROY _HB_FUN_WEBVIEW_DISPATCH
_HB_FUN_WEBVIEW_EVAL _HB_FUN_WEBVIEW_GETWINDOW
_HB_FUN_WEBVIEW_INIT _HB_FUN_WEBVIEW_NAVIGATE
_HB_FUN_WEBVIEW_OPENDEVTOOLSWINDOW _HB_FUN_WEBVIEW_RETURN
_HB_FUN_WEBVIEW_RUN _HB_FUN_WEBVIEW_SETHTML
_HB_FUN_WEBVIEW_SETSIZE _HB_FUN_WEBVIEW_SETTITLE
_HB_FUN_WEBVIEW_SETUSERAGENT _HB_FUN_WEBVIEW_TERMINATE
_HB_FUN_WEBVIEW_UNBIND _HB_FUN_WV_SENDTOFWH
webview2 size = 237
_HB_FUN_WEBVIEW2_END _HB_FUN_WEBVIEW2_EVAL
_HB_FUN_WEBVIEW2_NAVIGATE _HB_FUN_WEBVIEW2_NEW
_HB_FUN_WEBVIEW2_OPENDEVTOOLSWINDOW _HB_FUN_WEBVIEW2_SETHTML
_HB_FUN_WEBVIEW2_SETSIZE _HB_FUN_WEBVIEW2_SETUSERAGENT
_HB_FUN_WEBVIEW2_SHOWDOWNLOADS
win2000 size = 49
_HB_FUN_SETLAYEREDWINDOWATTRIBUTES
windows size = 431
_HB_FUN_DEFWINDOWPROC _HB_FUN_ENUMCHILDWINDOWS
_HB_FUN_ENUMWINDOWS _HB_FUN_GETCLASSLONG
_HB_FUN_GETPARENT _HB_FUN_LOCKWINDOWUPDATE
_HB_FUN_SETCLASSLONG _HB_FUN_SETPARENT
winexec size = 1308
_HB_FUN_EXITWINDOW _HB_FUN_EXITWND
_HB_FUN_GETMODULEFILENAME _HB_FUN_GETNUMTASKS
_HB_FUN_GETSYSDIR _HB_FUN_GETWINDIR
_HB_FUN_ISEXERUNNING _HB_FUN_SHELLEXECUTE
_HB_FUN_SHFILEOPERATION _HB_FUN_SHFILEOPERATIONW
_HB_FUN_SLEEP _HB_FUN_WAITRUN
_HB_FUN_WINEXEC
winrtc size = 964
_HB_FUN_WINRTEVENTHANDLER _HB_FUN_WINRTEVENTTOKEN
_HB_FUN_WINRTFIND _HB_FUN_WINRTMETHOD
winsock size = 1506
_HB_FUN_ACCEPT _HB_FUN_BINDTOPORT
_HB_FUN_CLOSESOCKET _HB_FUN_CONNECTTO
_HB_FUN_GETHOSTBYADDRESS _HB_FUN_GETHOSTBYNAME
_HB_FUN_GETHOSTNAME _HB_FUN_GETIP
_HB_FUN_GETPEERNAME _HB_FUN_GETPORT
_HB_FUN_GETSERVBYNAME _HB_FUN_HTONS
_HB_FUN_INET_ADDR _HB_FUN_LISTEN
_HB_FUN_RECV _HB_FUN_SENDBINARY
_HB_FUN_SETSOCKOPT _HB_FUN_SOCKET
_HB_FUN_SOCKETSELECT _HB_FUN_SOCKETSEND
_HB_FUN_WSAASYNCSELECT _HB_FUN_WSACLEANUP
_HB_FUN_WSAGETLASTERROR _HB_FUN_WSASTARTUP
wmouse size = 178
_HB_FUN_GETCAPTURE _HB_FUN_RELEASECAPTURE
_HB_FUN_SETCAPTURE _HB_FUN_TRACKMOUSEEVENT
wndboxes size = 1924
_HB_FUN_BARPAINT _HB_FUN_ROUNDBOX
_HB_FUN_WNDBOX _HB_FUN_WNDBOX2007
_HB_FUN_WNDBOXCLR _HB_FUN_WNDBOXIN
_HB_FUN_WNDBOXRAISED _HB_FUN_WNDINSET
_HB_FUN_WNDRAISED _RoundBox
_WindowBox _WindowBoxBlack
_WindowBoxIn _WindowBoxInBlack
_WindowInset _WindowRaised
_WndBox2007 _WndDrawBox
wndcente size = 631
_HB_FUN_GETVIEWPORTORGEX _HB_FUN_GETWINDOWORGEX
_HB_FUN_SETACTIVEWINDOW _HB_FUN_SETWINDOWORG
_HB_FUN_WNDCENTER
wnddestr size = 46
_HB_FUN_DESTROYWINDOW
wndis size = 1447
_HB_FUN_BORLANDC _HB_FUN_CALLWINDOWPROC
_HB_FUN_CLOSEWINDOW _HB_FUN_ENABLEWINDOW
_HB_FUN_FINDWINDOW _HB_FUN_GETACTIVEWINDOW
_HB_FUN_GETCLASSINFO _HB_FUN_GETFOREGROUNDWINDOW
_HB_FUN_GETTOPWINDOW _HB_FUN_GETVERSION
_HB_FUN_GETWINDOWLONG _HB_FUN_GETWINFLAGS
_HB_FUN_GETWINVER _HB_FUN_ISCHILD
_HB_FUN_ISDEFBUTTON _HB_FUN_ISEXE64
_HB_FUN_ISICONIC _HB_FUN_ISWIN95
_HB_FUN_ISWINDOW _HB_FUN_ISWINDOWENABLED
_HB_FUN_ISWINDOWUNICODE _HB_FUN_ISWINDOWVISIBLE
_HB_FUN_ISWINNT _HB_FUN_ISWOW64
_HB_FUN_ISZOOMED _HB_FUN_MSVC
_HB_FUN_SETWINDOWLONG _HB_FUN_SETWINDOWWORD
_HB_FUN_WINDOWFROMPOINT _IsWin95
_fnIsWow64Process
wndisove size = 121
_HB_FUN_ISOVERWND _HB_FUN_WNDHASSCROLLS
wndlines size = 604
_HB_FUN_WNDHLINERA _HB_FUN_WNDHRAISED
_HB_FUN_WNDVLINERA _HB_FUN_WNDVRAISED
_WindowHRaised _WindowVRaised
_WndDrawHLine _WndDrawVLine
wndmove size = 3131
_HB_FUN_BRINGWINDOWTOTOP _HB_FUN_MOVEWINDOW
_HB_FUN_SETMINMAX _HB_FUN_WNDADJBOTTOM
_HB_FUN_WNDADJCLIENT _HB_FUN_WNDADJLEFT
_HB_FUN_WNDADJRIGHT _HB_FUN_WNDADJTOP
_HB_FUN_WNDBOTTOM _HB_FUN_WNDCOPY
_HB_FUN_WNDHEIGHT _HB_FUN_WNDLEFT
_HB_FUN_WNDSETSIZE _HB_FUN_WNDTOP
_HB_FUN_WNDWIDTH
wndpos size = 196
_HB_FUN_GETWINDOWPLACEMENT _HB_FUN_SETWINDOWPLACEMENT
_HB_FUN_SETWINDOWPOS
wndprint size = 466
_HB_FUN_PRINTWINDOW _HB_FUN_WNDBITMAP
_HB_FUN_WNDPRINT
wndproc size = 436
_HB_FUN_REMOVEWINDOWPROC _HB_FUN_SETWINDOWPROC
wndrows size = 364
_GetWindowRow _GetWindowRows
_HB_FUN_NWROW _HB_FUN_NWROWS
wndsay size = 972
_HB_FUN_NWNDCHRHEIGHT _HB_FUN_WSAY
_HB_FUN_WSAYRECT
wndscrol size = 639
_HB_FUN_SCROLLWINDOW _HB_FUN_WBRWSCROLL
_HB_FUN_WSCROLL
wndupdat size = 52
_HB_FUN_GETCLASSNAME _HB_FUN_UPDATEWINDOW
xbrowsec size = 1465
_BmpDrawNoStretch _HB_FUN_BMPDRAWNOSTRETCH
_HB_FUN_FWBMPASC _HB_FUN_FWBMPDES
_HB_FUN_FWDARROW _HB_FUN_FWRARROW
_HB_FUN_XBRWSCROLLROW
xhb size = 0
xxproc size = 166
_HB_FUN_XXCHANGEPROC
]]>Code: Select all | Expand
#include "fivewin.ch"
#define EM_LINESCROLL 182
#define EM_GETFIRSTVISIBLELINE 0x00CE
//----------------------------------------------------------------------------//
static cBccFolder := "c:\bcc77\" // your bcc folder here
static cMSVCFolder := "c:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34808\bin\Hostx64\x86\" // your msvc folder here
//----------------------------------------------------------------------------//
function Main()
local aFunc
local oDlg, nWd, oFont, oFixed, oBrw, oSay, oGet
local cModule, cFile, cText, cUpper
local aTemp := {}
local cSymbols := ""
SetMGetColorFocus()
aFunc := ReadFuncs()
if Empty( aFunc )
return nil
endif
AEval( aFunc, { | a | AAdd( aTemp, a[ 2 ] ) } )
ASort( aTemp )
// XBrowse( aTemp )
AEval( aTemp, { | cName | cSymbols += "extern " + cName + CRLF } )
hb_memoWrit( "symbols.txt", cSymbols )
// fw_memoEdit( cSymbols )
cModule := aFunc[ 1, 1 ]
cFile := ModuleToFile( cModule )
cText := If( Empty( cFile ), "", MemoRead( cFile ) )
DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-13
DEFINE FONT oFixed NAME "LUCIDA CONSOLE" SIZE 0,-14
nWd := Int( ScreenWidth() * 0.9 )
DEFINE DIALOG oDlg SIZE nWd,600 PIXEL TRUEPIXEL FONT oFont ;
TITLE FWVERSION + ": Functions and Classes"
@ 20,20 XBROWSE oBrw SIZE 400,-20 PIXEL OF oDlg ;
DATASOURCE aFunc COLUMNS 1,2 ;
HEADERS "MODULE", "FUNCTION" ;
COLSIZES "BBBBBBBBBB" ;
CELL LINES NOBORDER FOOTERS AUTOSORT
WITH OBJECT oBrw
:bRecSelData := { || oBrw:KeyNo }
:nRecSelWidth := "9999"
:bRecSelHeader := { || "SlNo" }
:bRecSelFooter := { || oBrw:nLen }
:lHScroll := .f.
:lSeekBar := .t.
:bClrEdits := { || { CLR_HRED, CLR_YELLOW } }
:lSeekWild := .t.
:nStretchCol := 2
:bChange := <||
if !( cModule == oBrw:aRow[ 1 ] )
cModule := oBrw:aRow[ 1 ]
cFile := ModuleToFile( cModule )
if Empty( cFile )
cText := ""
else
cText := MemoRead( cFile )
endif
cUpper := Upper( cText )
oSay:Refresh()
oGet:Refresh()
endif
LocateFunction( oBrw:aRow[ 2 ], cText, cUpper, oGet )
return nil
>
:CreateFromCode()
END
@ 20,420 SAY oSay PROMPT { || cFile } SIZE nWd - 440, 26 PIXEL CENTER OF oDlg ;
COLOR CLR_BLACK, oBrw:nRecSelColor
@ 50,420 GET oGet VAR cText MEMO SIZE nWd - 440, 530 PIXEL OF oDlg FONT oFixed
ACTIVATE DIALOG oDlg CENTERED ;
ON INIT LocateFunction( aFunc[ 1, 2 ], cText, cUpper, oGet )
RELEASE FONT oFont, oFixed
return nil
//----------------------------------------------------------------------------//
function ReadFuncs()
local cText, aLines, cLine, cFunc, cFunc1, cFunc2, n, i
local cModule := ""
local aFunc := {}
if "Borland" $ HB_Compiler() .and. ! lIsDir( cBccFolder )
MsgStop( cBccFolder + " not found" )
return nil
endif
if "Microsoft" $ HB_Compiler() .and. ! lIsDir( cMSVCFolder )
MsgStop( cMSVCFolder + " not found" )
return nil
endif
if ! File( "fiveh.lst" )
if File( cBccFolder + "bin\tlib.exe" )
WaitRun( cBccFolder + "bin\tlib.exe ..\lib\fiveh.lib, fiveh.lst" )
else
WaitRun( cMSVCFolder + "bin\lib.exe ..\lib\fiveh32.lib, fiveh32.lst" ) // MsgStop( cMSVCFolder + "bin\lib.exe ..\lib\fiveh32.lib, fiveh.lst" )
endif
SysWait( .2 )
endif
if File( "fiveh.lst" )
cText := MemoRead( "fiveh.lst" )
elseif File( "fiveh32.lst" )
cText := MemoRead( "fiveh32.lst" )
endif
aLines := AMERGE( aLines, HB_ATokens( cText, CRLF ) ) // aLines := HB_ATokens( cText, CRLF )
if ! File( "fivehc.lst" )
if File( cBccFolder + "bin\tlib.exe" )
WaitRun( cBccFolder + "bin\tlib.exe ..\lib\fivehc.lib, fivehc.lst" )
else
WaitRun( cMSVCFolder + "bin\lib.exe ..\lib\fivehc32.lib, fivehc32.lst" ) // MsgStop( cMSVCFolder + "bin\lib.exe ..\lib\fiveh32c.lib, fivehc.lst" )
endif
SysWait( .2 )
endif
if File( "fivehc.lst" )
cText := MemoRead( "fivehc.lst" )
elseif File( "fivehc32.lst" ) // elseif File( "fiveh32c.lst" )
cText := MemoRead( "fivehc32.lst" ) // cText := MemoRead( "fiveh32c.lst" )
endif
aLines := AMERGE( aLines, HB_ATokens( cText, CRLF ) )
for n := 2 to Len( aLines )
cLine := aLines[ n ]
if Empty( cLine )
LOOP
endif
if Left( cLine, 1 ) == Chr( 9 )
for i := 1 to 2
cFunc := TOKEN( cLine, , i )
if cFunc = "_HB_FUN_"
AAdd( aFunc, { cModule, AFTERATNUM( "_HB_FUN_", cFunc ) } )
else
EXIT
endif
next
else
cModule := AllTrim( TOKEN( cLine,,1 ) )
endif
next
ASort( aFunc, , , { |x,y| If( x[ 1 ] == y[ 1 ], x[ 2 ] < y[ 2 ], x[ 1 ] < y[ 1 ] ) } )
return aFunc
//----------------------------------------------------------------------------//
static function ModuleToFile( cModule )
local cSpec := "..\source\" + cModule + ".*"
local cFile := ""
local aDir
aDir := DirectoryRecurse( TrueName( cSpec ) )
if !Empty( aDir )
cFile := aDir[ 1, 1 ]
endif
return cFile
//----------------------------------------------------------------------------//
static function LocateFunction( cFunc, cText, cUpper, oGet )
local nRow := 1
local aSeek := {}
local nPos
if !Empty( cText )
DEFAULT cUpper := Upper( cText )
aSeek := { "FUNCTION " + cFunc + "(", ;
"FUNCTION " + cFunc + " ", ;
"CLASS " + cFunc, ;
"HB_FUNC( " + cFunc + " )", ;
"HB_FUNC (" + cFunc + ")" }
nPos := AAT( aSeek, cUpper )
if nPos > 0
nRow := OCCURS( CRLF, LEFT( cText, nPos ) )
endif
GetSetTopRow( oGet, nRow )
endif
return nRow
//----------------------------------------------------------------------------//
static function GetSetTopRow( oGet, nRow )
local nTopRow := oGet:SendMsg( EM_GETFIRSTVISIBLELINE )
oGet:SendMsg( EM_LINESCROLL, 0, nRow - nTopRow )
return nil
//----------------------------------------------------------------------------//
Code: Select all | Expand
#include "fivewin.ch"
#define EM_LINESCROLL 182
#define EM_GETFIRSTVISIBLELINE 0x00CE
//----------------------------------------------------------------------------//
static cBccFolder := "c:\bcc77\" // your bcc folder here
static cMSVCFolder := "c:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.43.34808\bin\Hostx64\x86\" // your msvc folder here
//----------------------------------------------------------------------------//
function Main()
local aFunc
local oDlg, nWd, oFont, oFixed, oBrw, oSay, oGet
local cModule, cFile, cText, cUpper
local aTemp := {}
local cSymbols := ""
SetMGetColorFocus()
aFunc := ReadFuncs()
if Empty( aFunc )
return nil
endif
AEval( aFunc, { | a | AAdd( aTemp, a[ 2 ] ) } )
ASort( aTemp )
// XBrowse( aTemp )
AEval( aTemp, { | cName | cSymbols += "extern " + cName + CRLF } )
hb_memoWrit( "symbols.txt", cSymbols )
// fw_memoEdit( cSymbols )
cModule := aFunc[ 1, 1 ]
cFile := ModuleToFile( cModule )
cText := If( Empty( cFile ), "", MemoRead( cFile ) )
DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-13
DEFINE FONT oFixed NAME "LUCIDA CONSOLE" SIZE 0,-14
nWd := Int( ScreenWidth() * 0.9 )
DEFINE DIALOG oDlg SIZE nWd,600 PIXEL TRUEPIXEL FONT oFont ;
TITLE FWVERSION + ": Functions and Classes"
@ 20,20 XBROWSE oBrw SIZE 400,-20 PIXEL OF oDlg ;
DATASOURCE aFunc COLUMNS 1,2 ;
HEADERS "MODULE", "FUNCTION" ;
COLSIZES "BBBBBBBBBB" ;
CELL LINES NOBORDER FOOTERS AUTOSORT
WITH OBJECT oBrw
:bRecSelData := { || oBrw:KeyNo }
:nRecSelWidth := "9999"
:bRecSelHeader := { || "SlNo" }
:bRecSelFooter := { || oBrw:nLen }
:lHScroll := .f.
:lSeekBar := .t.
:bClrEdits := { || { CLR_HRED, CLR_YELLOW } }
:lSeekWild := .t.
:nStretchCol := 2
:bChange := <||
if !( cModule == oBrw:aRow[ 1 ] )
cModule := oBrw:aRow[ 1 ]
cFile := ModuleToFile( cModule )
if Empty( cFile )
cText := ""
else
cText := MemoRead( cFile )
endif
cUpper := Upper( cText )
oSay:Refresh()
oGet:Refresh()
endif
LocateFunction( oBrw:aRow[ 2 ], cText, cUpper, oGet )
return nil
>
:CreateFromCode()
END
@ 20,420 SAY oSay PROMPT { || cFile } SIZE nWd - 440, 26 PIXEL CENTER OF oDlg ;
COLOR CLR_BLACK, oBrw:nRecSelColor
@ 50,420 GET oGet VAR cText MEMO SIZE nWd - 440, 530 PIXEL OF oDlg FONT oFixed
ACTIVATE DIALOG oDlg CENTERED ;
ON INIT LocateFunction( aFunc[ 1, 2 ], cText, cUpper, oGet )
RELEASE FONT oFont, oFixed
return nil
//----------------------------------------------------------------------------//
function ReadFuncs()
local cText, aLines, cLine, cFunc, cFunc1, cFunc2, n, i
local cModule := ""
local aFunc := {}
if "Borland" $ HB_Compiler() .and. ! lIsDir( cBccFolder )
MsgStop( cBccFolder + " not found" )
return nil
endif
if "Microsoft" $ HB_Compiler() .and. ! lIsDir( cMSVCFolder )
MsgStop( cMSVCFolder + " not found" )
return nil
endif
if ! File( "fiveh.lst" )
if File( cBccFolder + "bin\tlib.exe" )
WaitRun( cBccFolder + "bin\tlib.exe ..\lib\fiveh.lib, fiveh.lst" )
else
WaitRun( cMSVCFolder + "bin\lib.exe ..\lib\fiveh32.lib, fiveh32.lst" ) // MsgStop( cMSVCFolder + "bin\lib.exe ..\lib\fiveh32.lib, fiveh.lst" )
endif
SysWait( .2 )
endif
if File( "fiveh.lst" )
cText := MemoRead( "fiveh.lst" )
elseif File( "fiveh32.lst" )
cText := MemoRead( "fiveh32.lst" )
endif
aLines := AMERGE( aLines, HB_ATokens( cText, CRLF ) ) // aLines := HB_ATokens( cText, CRLF )
if ! File( "fivehc.lst" )
if File( cBccFolder + "bin\tlib.exe" )
WaitRun( cBccFolder + "bin\tlib.exe ..\lib\fivehc.lib, fivehc.lst" )
else
WaitRun( cMSVCFolder + "bin\lib.exe ..\lib\fivehc32.lib, fivehc32.lst" ) // MsgStop( cMSVCFolder + "bin\lib.exe ..\lib\fiveh32c.lib, fivehc.lst" )
endif
SysWait( .2 )
endif
if File( "fivehc.lst" )
cText := MemoRead( "fivehc.lst" )
elseif File( "fivehc32.lst" ) // elseif File( "fiveh32c.lst" )
cText := MemoRead( "fivehc32.lst" ) // cText := MemoRead( "fiveh32c.lst" )
endif
aLines := AMERGE( aLines, HB_ATokens( cText, CRLF ) )
for n := 2 to Len( aLines )
cLine := aLines[ n ]
if Empty( cLine )
LOOP
endif
if Left( cLine, 1 ) == Chr( 9 )
for i := 1 to 2
cFunc := TOKEN( cLine, , i )
if cFunc = "_HB_FUN_"
AAdd( aFunc, { cModule, AFTERATNUM( "_HB_FUN_", cFunc ) } )
else
EXIT
endif
next
else
cModule := AllTrim( TOKEN( cLine,,1 ) )
endif
next
ASort( aFunc, , , { |x,y| If( x[ 1 ] == y[ 1 ], x[ 2 ] < y[ 2 ], x[ 1 ] < y[ 1 ] ) } )
return aFunc
//----------------------------------------------------------------------------//
static function ModuleToFile( cModule )
local cSpec := "..\source\" + cModule + ".*"
local cFile := ""
local aDir
aDir := DirectoryRecurse( TrueName( cSpec ) )
if !Empty( aDir )
cFile := aDir[ 1, 1 ]
endif
return cFile
//----------------------------------------------------------------------------//
static function LocateFunction( cFunc, cText, cUpper, oGet )
local nRow := 1
local aSeek := {}
local nPos
if !Empty( cText )
DEFAULT cUpper := Upper( cText )
aSeek := { "FUNCTION " + cFunc + "(", ;
"FUNCTION " + cFunc + " ", ;
"CLASS " + cFunc, ;
"HB_FUNC( " + cFunc + " )", ;
"HB_FUNC (" + cFunc + ")" }
nPos := AAT( aSeek, cUpper )
if nPos > 0
nRow := OCCURS( CRLF, LEFT( cText, nPos ) )
endif
GetSetTopRow( oGet, nRow )
endif
return nRow
//----------------------------------------------------------------------------//
static function GetSetTopRow( oGet, nRow )
local nTopRow := oGet:SendMsg( EM_GETFIRSTVISIBLELINE )
oGet:SendMsg( EM_LINESCROLL, 0, nRow - nTopRow )
return nil
//----------------------------------------------------------------------------//
Code: Select all | Expand
#include "fivewin.ch"
REQUEST FWZEBRA // required for barcodes
function Main()
local oPrn, cText := "Texto a QR"
PRINT oPrn
PAGE
@ 2,2 PRINT TO oPrn TEXT cText AS BARCODE TYPE "QR" SIZE 2,2 INCHES
ENDPAGE
ENDPRINT
return nil
Code: Select all | Expand
#include "fivewin.ch"
REQUEST FWZEBRA // required for barcodes
function Main()
local oPrn, cText := "Texto a QR"
PRINT oPrn
PAGE
@ 2,2 PRINT TO oPrn TEXT cText AS BARCODE TYPE "QR" SIZE 2,2 INCHES
ENDPAGE
ENDPRINT
return nil
Code: Select all | Expand
@ 40,10 XBROWSE oBrw SIZE -10,-50 PIXEL ;
RECORDSET oRs ;
COLUMNS "cdcli", "rascl", "totale", "pezzi" ;
HEADERS "CLIENTE", "RAGIONE SOCIALE", "TOTALE EURO", "TOTALE PEZZI" ;
PICTURE NIL,NIL, "@ZE 99,999,999.99", "@ZE 99999,999.999" ;
FOOTERS ;
OF oDlg2
oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW
oBrw:nColDividerStyle := LINESTYLE_BLACK
oBrw:nRowDividerStyle := LINESTYLE_BLACK
oBrw:lColDividerComplete := .T.
oBrw:lRecordSelector := .t.
oBrw:lHScroll := .T.
oBrw:lVScroll := .T.
oBrw:lExcelCellWise := .t.
oBrw:bClrSelFocus = { || { 16777215, 15512898 } }
oBrw:bClrSel = { || { 16777215, 15512898 } }
oBrw:bClrStd := {|| {CLR_BLACK, iif( oBrw:Keyno() % 2 = 0, CLR_SFBRWP, CLR_SFBRWD ) } }
oBrw:CreateFromCode()
WITH OBJECT oBrw
:aCols[03]:nFooterType := AGGR_SUM
:aCols[04]:nFooterType := AGGR_SUM
:MakeTotals()
END
Code: Select all | Expand
@ 40,10 XBROWSE oBrw SIZE -10,-50 PIXEL ;
RECORDSET oRs ;
COLUMNS "cdcli", "rascl", "totale", "pezzi" ;
HEADERS "CLIENTE", "RAGIONE SOCIALE", "TOTALE EURO", "TOTALE PEZZI" ;
PICTURE NIL,NIL, "@ZE 99,999,999.99", "@ZE 99999,999.999" ;
FOOTERS ;
OF oDlg2
oBrw:nMarqueeStyle := MARQSTYLE_HIGHLROW
oBrw:nColDividerStyle := LINESTYLE_BLACK
oBrw:nRowDividerStyle := LINESTYLE_BLACK
oBrw:lColDividerComplete := .T.
oBrw:lRecordSelector := .t.
oBrw:lHScroll := .T.
oBrw:lVScroll := .T.
oBrw:lExcelCellWise := .t.
oBrw:bClrSelFocus = { || { 16777215, 15512898 } }
oBrw:bClrSel = { || { 16777215, 15512898 } }
oBrw:bClrStd := {|| {CLR_BLACK, iif( oBrw:Keyno() % 2 = 0, CLR_SFBRWP, CLR_SFBRWD ) } }
oBrw:CreateFromCode()
WITH OBJECT oBrw
:aCols[03]:nFooterType := AGGR_SUM
:aCols[04]:nFooterType := AGGR_SUM
:MakeTotals()
END
Code: Select all | Expand
'
:aCols[03]:cEditPicture:="99,999,999.99"
Code: Select all | Expand
'
:aCols[03]:cEditPicture:="99,999,999.99"
Code: Select all | Expand
#command @ <nRow>, <nCol> EDIT [ <oEdit> VAR ] <uVar> ;
[ <dlg: OF, WINDOW, DIALOG> <oWnd> ] ;
[ <lMemo: MEMO,TEXT,MULTILINE> ] ;
...
Code: Select all | Expand
#command @ <nRow>, <nCol> EDIT [ <oEdit> VAR ] <uVar> ;
[ <dlg: OF, WINDOW, DIALOG> <oWnd> ] ;
[ <lMemo: MEMO,TEXT,MULTILINE> ] ;
...
Code: Select all | Expand
REDEFINE GET oGet[17] VAR wTEXTO MULTILINE ID 217 OF oDlg ;
COLOR CLR_BLUE, CLR_WHITE UPDATE FONT oFont ;
ON CHANGE( SB_LimitText( oGet[17], oSay, oTransmite ) ) // By AleSB
oGet[17]:bGotFocus = { || oGet[17]:SetSel( 0, 0 ),;
oGet[17]:Goto( oGet[17]:GetLineCount() ),;
__Keyboard( Chr( VK_HOME ) ) }
Outro, Other:
REDEFINE GET oGet[4] VAR cDest ID 21 OF oDlgEnv MEMO ;
FONT oFont1 UPDATE COLORS nRgb(0,0,220),nRgb(253,252,213) ;
VALID( CHECA_GET_Dest( ALLTRIM( cDest ) ) )
oGet[4]:bLostFocus := { || oGet[4]:SetColor( CLR_BLACK, CLR_WHITE) }
oGet[4]:bGotFocus := { || oGet[4]:SetColor( CLR_BLACK, nRGB( 255,255,45 )), oGet[4]:setsel(0,0) }
oGet[4]:cToolTip := OemToAnsi( "Para: Contato(Email) Campo Obrigat¢rio" )
// Para que o GET com MEMO possa "pular" Para o Proximo GET. Afff!!
oGet[4]:bKeyDown:={|nKey|IF(nKey==VK_RETURN, VER_FOCO_GET4( oGet ),)}
FUNCTION VER_FOCO_GET4( oGet ) // GET 5 - 24/07/2013 - FWH13.06
// Posiciona o Cursor na 1a. Letra do Email Problemas no FOCO do MEMO
oGet[5]:SetFocus() // nao funciona com XFOCUS()
oGet[5]:bGotFocus := { || oGet[5]:SetPos(0), Nil }
RETURN( .T. )
FUNCTION VER_FOCO_GET5( oGet ) // GET 5 - 24/07/2013
// Posiciona o Cursor na 1a. Letra do Email Problemas no FOCO do MEMO
oGet[6]:SetFocus() // nao funciona com XFOCUS()
oGet[6]:bGotFocus := { || oGet[6]:SetPos(0), Nil }
RETURN( .T. )
FUNCTION VER_FOCO_GET6( oGet ) // GET 6 - 24/07/2013
// Posiciona o Cursor na 1a. Letra do Email Problemas no FOCO do MEMO
oGet[6]:bGotFocus := { || oGet[6]:SetPos(0), Nil }
oGet[5]:SetFocus() // nao funciona com XFOCUS()
oGet[5]:bGotFocus := { || oGet[5]:SetPos(0), Nil }
RETURN( .T. )
FUNCTION SB_LimitText( oGet, oSay, oTransmite )
///////////////////////////////////////////////////////////////////////////
// Autor..........: Peguei no Forum FiveWin Brasil //
// Modificaçoes...: Ale SB - Soft Camus //
// Descricao......: Restringe o Tamanho de um Texto. //
// Parametros ==> //
// - oGet : oBjeto Get. //
// - nSize : Tamanho que deve ter o Texto. //
// Dependencias ==> //
// Retorno ==> nil //
///////////////////////////////////////////////////////////////////////////
LOCAL nTam, nSize
DEFAULT nSize := 999 // maximo ‚ 1000 caracteres
nTam := LEN( ALLTRIM( oGet:cText ) )
IF nTam > nSize
MsgInfo( "A Mensagem da Carta já Alcançou o Tamanho Limite de " + ;
"1000 Caracteres Permitidos Pela Sefaz!", ;
"..:: Atenção ::.." )
oGet:cText := Substr(oGet:cText, 1, nTam-1)
RETURN( .F. )
ENDIF
// Mostra a qtde de caracteres digitados no SAY
oSay:VarPut( Strzero( nTam, 3, 0 ) )
oSay:Refresh()
IF nTam <= 14 // caracteres
lLigaBotao := .F.
// Botao da Transmissao
oTransmite:Disable()
oTransmite:Refresh()
ELSE
lLigaBotao := .T.
// Botao da Transmissao
oTransmite:Enable()
oTransmite:Refresh()
ENDIF
RETURN( .T. )
Code: Select all | Expand
REDEFINE GET oGet[17] VAR wTEXTO MULTILINE ID 217 OF oDlg ;
COLOR CLR_BLUE, CLR_WHITE UPDATE FONT oFont ;
ON CHANGE( SB_LimitText( oGet[17], oSay, oTransmite ) ) // By AleSB
oGet[17]:bGotFocus = { || oGet[17]:SetSel( 0, 0 ),;
oGet[17]:Goto( oGet[17]:GetLineCount() ),;
__Keyboard( Chr( VK_HOME ) ) }
Outro, Other:
REDEFINE GET oGet[4] VAR cDest ID 21 OF oDlgEnv MEMO ;
FONT oFont1 UPDATE COLORS nRgb(0,0,220),nRgb(253,252,213) ;
VALID( CHECA_GET_Dest( ALLTRIM( cDest ) ) )
oGet[4]:bLostFocus := { || oGet[4]:SetColor( CLR_BLACK, CLR_WHITE) }
oGet[4]:bGotFocus := { || oGet[4]:SetColor( CLR_BLACK, nRGB( 255,255,45 )), oGet[4]:setsel(0,0) }
oGet[4]:cToolTip := OemToAnsi( "Para: Contato(Email) Campo Obrigat¢rio" )
// Para que o GET com MEMO possa "pular" Para o Proximo GET. Afff!!
oGet[4]:bKeyDown:={|nKey|IF(nKey==VK_RETURN, VER_FOCO_GET4( oGet ),)}
FUNCTION VER_FOCO_GET4( oGet ) // GET 5 - 24/07/2013 - FWH13.06
// Posiciona o Cursor na 1a. Letra do Email Problemas no FOCO do MEMO
oGet[5]:SetFocus() // nao funciona com XFOCUS()
oGet[5]:bGotFocus := { || oGet[5]:SetPos(0), Nil }
RETURN( .T. )
FUNCTION VER_FOCO_GET5( oGet ) // GET 5 - 24/07/2013
// Posiciona o Cursor na 1a. Letra do Email Problemas no FOCO do MEMO
oGet[6]:SetFocus() // nao funciona com XFOCUS()
oGet[6]:bGotFocus := { || oGet[6]:SetPos(0), Nil }
RETURN( .T. )
FUNCTION VER_FOCO_GET6( oGet ) // GET 6 - 24/07/2013
// Posiciona o Cursor na 1a. Letra do Email Problemas no FOCO do MEMO
oGet[6]:bGotFocus := { || oGet[6]:SetPos(0), Nil }
oGet[5]:SetFocus() // nao funciona com XFOCUS()
oGet[5]:bGotFocus := { || oGet[5]:SetPos(0), Nil }
RETURN( .T. )
FUNCTION SB_LimitText( oGet, oSay, oTransmite )
///////////////////////////////////////////////////////////////////////////
// Autor..........: Peguei no Forum FiveWin Brasil //
// Modificaçoes...: Ale SB - Soft Camus //
// Descricao......: Restringe o Tamanho de um Texto. //
// Parametros ==> //
// - oGet : oBjeto Get. //
// - nSize : Tamanho que deve ter o Texto. //
// Dependencias ==> //
// Retorno ==> nil //
///////////////////////////////////////////////////////////////////////////
LOCAL nTam, nSize
DEFAULT nSize := 999 // maximo ‚ 1000 caracteres
nTam := LEN( ALLTRIM( oGet:cText ) )
IF nTam > nSize
MsgInfo( "A Mensagem da Carta já Alcançou o Tamanho Limite de " + ;
"1000 Caracteres Permitidos Pela Sefaz!", ;
"..:: Atenção ::.." )
oGet:cText := Substr(oGet:cText, 1, nTam-1)
RETURN( .F. )
ENDIF
// Mostra a qtde de caracteres digitados no SAY
oSay:VarPut( Strzero( nTam, 3, 0 ) )
oSay:Refresh()
IF nTam <= 14 // caracteres
lLigaBotao := .F.
// Botao da Transmissao
oTransmite:Disable()
oTransmite:Refresh()
ELSE
lLigaBotao := .T.
// Botao da Transmissao
oTransmite:Enable()
oTransmite:Refresh()
ENDIF
RETURN( .T. )
Code: Select all | Expand
oNew:=ocopy(oDlg_1:aControls[1])
aadd(oDlg_2:aControls, oNew)
oDlg_2:Refresh()
]]>Code: Select all | Expand
oNew:=ocopy(oDlg_1:aControls[1])
aadd(oDlg_2:aControls, oNew)
oDlg_2:Refresh()
]]>Code: Select all | Expand
#include "FiveWin.ch"
function Main()
USE customer
XBROWSER SETUP BrwSetup( oBrw )
return nil
function BrwSetup( oBrw )
local oDlg, oBrw2, hWnd
DEFINE DIALOG oDlg SIZE 800, 600
@ 1, 1 XBROWSE oBrw2 OF oDlg SIZE 600, 500
oBrw2:CreateFromCode()
ACTIVATE DIALOG oDlg CENTERED NOWAIT ;
ON INIT ( hWnd := oBrw2:hWnd, oBrw2 := OClone( oBrw ), oBrw2:hWnd := hWnd, oBrw2:oWnd := oDlg, .T. )
return nil
Code: Select all | Expand
#include "FiveWin.ch"
function Main()
USE customer
XBROWSER SETUP BrwSetup( oBrw )
return nil
function BrwSetup( oBrw )
local oDlg, oBrw2, hWnd
DEFINE DIALOG oDlg SIZE 800, 600
@ 1, 1 XBROWSE oBrw2 OF oDlg SIZE 600, 500
oBrw2:CreateFromCode()
ACTIVATE DIALOG oDlg CENTERED NOWAIT ;
ON INIT ( hWnd := oBrw2:hWnd, oBrw2 := OClone( oBrw ), oBrw2:hWnd := hWnd, oBrw2:oWnd := oDlg, .T. )
return nil
Code: Select all | Expand
oCtl:=ocopy(oDlg_1:aControls[1])
oDlg_2:AddControl(oCtl)
]]>Code: Select all | Expand
oCtl:=ocopy(oDlg_1:aControls[1])
oDlg_2:AddControl(oCtl)
]]>Code: Select all | Expand
oSkinB = TSkinButton():New()
oSkinB:nClrBorder0_N := RGB( 249, 194, 179 )
oSkinB:nClrBorder1_N := RGB( 181, 61, 29 )
oSkinB:aClrNormal := { { .50, nRGB( 210, 235, 216 ), nRGB( 199,182,231 ) } }
// 118, 96, 138 / 135, 121, 78
SkinButtons( oSkinB )
Code: Select all | Expand
oSkinB = TSkinButton():New()
oSkinB:nClrBorder0_N := RGB( 249, 194, 179 )
oSkinB:nClrBorder1_N := RGB( 181, 61, 29 )
oSkinB:aClrNormal := { { .50, nRGB( 210, 235, 216 ), nRGB( 199,182,231 ) } }
// 118, 96, 138 / 135, 121, 78
SkinButtons( oSkinB )
Code: Select all | Expand
DEFINE DIALOG oDlg RESOURCE "FOLDER" ;
TITLE "Gerenciamento dos Devedores - "+ ;
"Cadastro - Inclusão " + ;
"/ Alteração" ;
COLORS CLR_BLACK, nRGB( 193, 205, 205 ) ;
ICON oIco
ODLG:LHELPICON := .F.
REDEFINE FOLDER oFld ID 101 OF oDlg ;
PROMPT "&Dados Comerciais ", "&Complemento ", ;
"&Inadimplencia " ;
DIALOGS "FLD_GENERAL", "FLD_GENERAL_2", ;
"FLD_GENERAL_3" ;
BITMAPS "MFONE", "EXPLORER2", "COMP16" ;
TABCOLOR CLR_HBLUE ;
FOCUSCOLOR CLR_HRED ;
COLORS nRGB( 127, 127, 127 ), nRGB( 143, 188, 143 ) ;
ADJUST
oFld:oFont := FntArial
oFld:SetOption( 1 )
oFld:Show()
oFld:aEnable[ 1 ] := .T.
oFld:Refresh()
Regards, saludos.]]>Code: Select all | Expand
DEFINE DIALOG oDlg RESOURCE "FOLDER" ;
TITLE "Gerenciamento dos Devedores - "+ ;
"Cadastro - Inclusão " + ;
"/ Alteração" ;
COLORS CLR_BLACK, nRGB( 193, 205, 205 ) ;
ICON oIco
ODLG:LHELPICON := .F.
REDEFINE FOLDER oFld ID 101 OF oDlg ;
PROMPT "&Dados Comerciais ", "&Complemento ", ;
"&Inadimplencia " ;
DIALOGS "FLD_GENERAL", "FLD_GENERAL_2", ;
"FLD_GENERAL_3" ;
BITMAPS "MFONE", "EXPLORER2", "COMP16" ;
TABCOLOR CLR_HBLUE ;
FOCUSCOLOR CLR_HRED ;
COLORS nRGB( 127, 127, 127 ), nRGB( 143, 188, 143 ) ;
ADJUST
oFld:oFont := FntArial
oFld:SetOption( 1 )
oFld:Show()
oFld:aEnable[ 1 ] := .T.
oFld:Refresh()
Regards, saludos.]]>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 "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
// 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
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
#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
If File( "C:\SISTEMAS\DATA\BASE.DBF" )
Code: Select all | Expand
If File( "C:\SISTEMAS\DATA\BASE.DBF" )
Code: Select all | Expand
If File( "C:\SISTEMAS\DATA\BASE.DBF" )
Code: Select all | Expand
cQuery:= "SHOW TABLES FROM `"+tu_base_de_datos+"` LIKE 'nombre_de_la_tabla';"
Code: Select all | Expand
if oQuery:reccount()=0
Fnct_CrearTablas()
endif
Code: Select all | Expand
If File( "C:\SISTEMAS\DATA\BASE.DBF" )
Code: Select all | Expand
cQuery:= "SHOW TABLES FROM `"+tu_base_de_datos+"` LIKE 'nombre_de_la_tabla';"
Code: Select all | Expand
if oQuery:reccount()=0
Fnct_CrearTablas()
endif
Code: Select all | Expand
if oCn:TableExists( cTableName, cDbName )
]]>Code: Select all | Expand
if oCn:TableExists( cTableName, cDbName )
]]>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
]]>
]]>
]]>karinha wrote: Tue Apr 01, 2025 1:49 pmBuenos días Vikthor, ¿dónde puedo conseguir ejemplos sencillos para probar esta excelente clase que creaste?Vikthor wrote: Tue Apr 01, 2025 12:42 am La última versión de la clase TExcelS la puedes descargar del siguiente enlace.
https://github.com/Vikthor-Thomas/Harbo ... EXCELS.prg
Regards, saludos.
]]>karinha wrote: Tue Apr 01, 2025 1:49 pmBuenos días Vikthor, ¿dónde puedo conseguir ejemplos sencillos para probar esta excelente clase que creaste?Vikthor wrote: Tue Apr 01, 2025 12:42 am La última versión de la clase TExcelS la puedes descargar del siguiente enlace.
https://github.com/Vikthor-Thomas/Harbo ... EXCELS.prg
Regards, saludos.
Code: Select all | Expand
#include "FiveWin.ch"
//----------------------------------------------------------------------------//
function Main()
local oDlg, oRadMenu, oBrush
local nOption := 2
DEFINE DIALOG oDlg RESOURCE "Radios"
REDEFINE RADIO oRadMenu VAR nOption ID 110, 120, 130, 140, 150 OF oDlg ;
ON CHANGE MsgBeep()
REDEFINE BUTTON ID 100 OF oDlg ACTION oRadMenu:GoNext() ;
WHEN nOption == 3
REDEFINE BUTTON ID 102 OF oDlg ACTION oRadMenu:GoPrev()
ACTIVATE DIALOG oDlg CENTERED ;
ON INIT oRadMenu:aItems[ 1 ]:SetColor( CLR_GREEN, RGB( 240, 240, 240 ) )
return nil
//----------------------------------------------------------------------------//
Code: Select all | Expand
#include "FiveWin.ch"
//----------------------------------------------------------------------------//
function Main()
local oDlg, oRadMenu, oBrush
local nOption := 2
DEFINE DIALOG oDlg RESOURCE "Radios"
REDEFINE RADIO oRadMenu VAR nOption ID 110, 120, 130, 140, 150 OF oDlg ;
ON CHANGE MsgBeep()
REDEFINE BUTTON ID 100 OF oDlg ACTION oRadMenu:GoNext() ;
WHEN nOption == 3
REDEFINE BUTTON ID 102 OF oDlg ACTION oRadMenu:GoPrev()
ACTIVATE DIALOG oDlg CENTERED ;
ON INIT oRadMenu:aItems[ 1 ]:SetColor( CLR_GREEN, RGB( 240, 240, 240 ) )
return nil
//----------------------------------------------------------------------------//
Code: Select all | Expand
cPrint := RETORNA_SYSP("IMPRESORA_CODIGOS")
PRINT oPrn TO cPrint
IF Empty( oPrn:hDC )
MsgStop("Impresora de Etiquetas NO se Encuentra Lista","Alto..")
ENDPRINT
RETURN .T.
ENDIF
Select "MICODE"
DbGoTop()
DO WHILE !Eof()
Ren_ := .1
PAGE
oPrn:CmSay(Ren_,3.5,Dtoc(MICODE->FENT1),aLetras[15],,,,2)
Ren_+=0.4
cCadena := MICODE->ID
c_Code128(Ren_+=0.2,2,cCadena,oPrn,"C",,.T.,.04,.8)
oPrn:CmSay(Ren_+=0.8,3.5,cCadena,aLetras[19],,,,2)
Ren_+=0.5
oPrn:CmSay(Ren_,3.5,AllTrim(MICODE->MODELO)+" "+AllTrim(MICODE->TALLA),aLetras[15],,,,1)
Ren_+=0.4
oPrn:CmSay(Ren_,3.5,AllTrim(MICODE->COLOR),aLetras[15],,,,1)
ENDPAGE
Select "MICODE"
DbSkip()
ENDDO
ENDPRINT
Imprimo unos tickets con un codigo de barrasCode: Select all | Expand
REPORT oReporte Title "Entrada : "+ENTRADAG->ID,"Fecha : "+Dtoc(ENTRADAG->FECHA),"Marca : "+AllTrim(ENTRADAG->NOMBRE)+" "+IIF(!ENTRADAG->APLICA,">> ENTRADA SIN APLICAR AL INVENTARIO <<","") Left ;
Header AllTrim(EMPRESA->EMPRESA),"Sistema De Administracion","" Center ;
Footer "Pagina # "+str(oReporte:nPage,3)+" -- "+"Fecha :"+Dtoc(Date())+" Hora : "+Time();
Font aLetras[31],aLetras[33],aLetras[52];
Caption "Reportes Del Sistema de Administracion" Preview
Column Title "#" Data nRen__++ SIZE 4 PICTURE "999" SHADOW
Column Title "Modelo" Data (cCrea)->MODELO SIZE 8 SHADOW
Column Title "Color" Data (cCrea)->COLOR SIZE 20 SHADOW
FOR J := 1 TO LEN(bTallas)
cDet := "(cCrea)->TALLA"+AllTrim(Str(J))
cHea := '"'+AllTrim(bTallas[J])+'"'
Column Title &cHea Data &cDet SIZE 8 TOTAL SHADOW
NEXT
Column Title "Total" Data (cCrea)->TOTAL SIZE 6 TOTAL SHADOW
ENDREPORT
oReporte:cGrandTotal := "Totales ... "
oReporte:lBoxOnTotal := .T.
oReporte:lShadow := .T.
oReporte:lAutoLand := .F.
Activate Report oReporte ON STARTLINE AEval( oReporte:aColumns, { | o | o:lShadow := ! o:lShadow } )
Code: Select all | Expand
cPrint := RETORNA_SYSP("IMPRESORA_CODIGOS")
PRINT oPrn TO cPrint
IF Empty( oPrn:hDC )
MsgStop("Impresora de Etiquetas NO se Encuentra Lista","Alto..")
ENDPRINT
RETURN .T.
ENDIF
Select "MICODE"
DbGoTop()
DO WHILE !Eof()
Ren_ := .1
PAGE
oPrn:CmSay(Ren_,3.5,Dtoc(MICODE->FENT1),aLetras[15],,,,2)
Ren_+=0.4
cCadena := MICODE->ID
c_Code128(Ren_+=0.2,2,cCadena,oPrn,"C",,.T.,.04,.8)
oPrn:CmSay(Ren_+=0.8,3.5,cCadena,aLetras[19],,,,2)
Ren_+=0.5
oPrn:CmSay(Ren_,3.5,AllTrim(MICODE->MODELO)+" "+AllTrim(MICODE->TALLA),aLetras[15],,,,1)
Ren_+=0.4
oPrn:CmSay(Ren_,3.5,AllTrim(MICODE->COLOR),aLetras[15],,,,1)
ENDPAGE
Select "MICODE"
DbSkip()
ENDDO
ENDPRINT
Imprimo unos tickets con un codigo de barrasCode: Select all | Expand
REPORT oReporte Title "Entrada : "+ENTRADAG->ID,"Fecha : "+Dtoc(ENTRADAG->FECHA),"Marca : "+AllTrim(ENTRADAG->NOMBRE)+" "+IIF(!ENTRADAG->APLICA,">> ENTRADA SIN APLICAR AL INVENTARIO <<","") Left ;
Header AllTrim(EMPRESA->EMPRESA),"Sistema De Administracion","" Center ;
Footer "Pagina # "+str(oReporte:nPage,3)+" -- "+"Fecha :"+Dtoc(Date())+" Hora : "+Time();
Font aLetras[31],aLetras[33],aLetras[52];
Caption "Reportes Del Sistema de Administracion" Preview
Column Title "#" Data nRen__++ SIZE 4 PICTURE "999" SHADOW
Column Title "Modelo" Data (cCrea)->MODELO SIZE 8 SHADOW
Column Title "Color" Data (cCrea)->COLOR SIZE 20 SHADOW
FOR J := 1 TO LEN(bTallas)
cDet := "(cCrea)->TALLA"+AllTrim(Str(J))
cHea := '"'+AllTrim(bTallas[J])+'"'
Column Title &cHea Data &cDet SIZE 8 TOTAL SHADOW
NEXT
Column Title "Total" Data (cCrea)->TOTAL SIZE 6 TOTAL SHADOW
ENDREPORT
oReporte:cGrandTotal := "Totales ... "
oReporte:lBoxOnTotal := .T.
oReporte:lShadow := .T.
oReporte:lAutoLand := .F.
Activate Report oReporte ON STARTLINE AEval( oReporte:aColumns, { | o | o:lShadow := ! o:lShadow } )
Code: Select all | Expand
SetPrintDefault( cToPrinter )
PRINTER ::oPrn PREVIEW NAME 'SysCtrl ERP Report'
Code: Select all | Expand
SetPrintDefault( cToPrinter )
PRINTER ::oPrn PREVIEW NAME 'SysCtrl ERP Report'
Code: Select all | Expand
cPrint := RETORNA_SYSP("IMPRESORA_REPORTES")
PRINT oPrn TO cPrint
ENDPRINT
Code: Select all | Expand
cPrint := RETORNA_SYSP("IMPRESORA_REPORTES")
PRINT oPrn TO cPrint
ENDPRINT
Code: Select all | Expand
// C:\FWH\SAMPLES\IMPVARIA.PRG
#include "FiveWin.ch"
#include "Objects.ch"
#include "report.ch"
#define RGB_BLACK RGB( 0, 0, 0 )
#define RGB_RED RGB( 255, 0, 0 )
#define RGB_GREEN RGB( 0,255, 0 )
#define RGB_BLUE RGB( 0, 0,255 )
#define RGB_CYAN RGB( 0,255,255 )
#define RGB_YELLOW RGB( 255,255, 0 )
#define RGB_MAGENTA RGB( 255, 0,255 )
#define RGB_WHITE RGB( 255,255,255 )
#define FW_DONTCARE 0
#define FW_THIN 100
#define FW_EXTRALIGHT 200
#define FW_LIGHT 300
#define FW_NORMAL 400
#define FW_MEDIUM 500
#define FW_SEMIBOLD 600
#define FW_BOLD 700
#define FW_EXTRABOLD 800
#define FW_HEAVY 900
#define DMPAPER_A4 9
STATIC oReport
FUNCTION Main()
LOCAL oPrn, oPrint, oFnt, cPrinter := ""
LOCAL oDlg, oBrw
LOCAL aPrn := {}
LOCAL cDef, i := 1
SET _3DLOOK ON
#ifdef __HARBOUR__ // GetPrinters() and GetDefaultPrinter() do not work in Harbour
aPrn := aGetPrinters ()
cDef := DefaultPrinter()
#else // Harbour
aPrn := GetPrinters ()
cDef := GetDefaultPrinter()
#endif
IF Empty ( aPrn )
MsgAlert ( "No Printers found" )
RETURN NIL
ENDIF
DEFINE DIALOG oDlg FROM 2, 2 TO 21, 50 TITLE "Available Printers"
@ 1, 2 LISTBOX oBrw FIELDS aPrn[ i ] ;
HEADERS "Printer Array" ;
FIELDSIZES 200 ;
OF oDlg ;
SIZE 100, 100
oBrw:bGoTop = { || i := 1 }
oBrw:bGoBottom = { || i := Eval( oBrw:bLogicLen ) }
oBrw:bSkip = { | nWant, nOld | nOld := i, i += nWant, ;
i := Max( 1, Min( i, Eval( oBrw:bLogicLen ) ) ), ;
i - nOld }
oBrw:bLogicLen = { || Len( aPrn ) }
oBrw:cAlias = "Array" // Just put something
@ 7.8, 2 SAY "Default printer: " + cDef
@ 1, 20 BUTTON "Print (&FW)" OF oDlg ACTION TestCopias ( aPrn[i] )
@ 2, 20 BUTTON "Print (&xH)" OF oDlg ACTION Test2 ( aPrn[i] )
@ 3, 20 BUTTON "Print (&RP)" OF oDlg ACTION TestRPT ( aPrn[i] )
@ 4, 20 BUTTON "&End " OF oDlg ACTION( oDlg:End() )
ACTIVATE DIALOG oDlg CENTERED
RETURN NIL
FUNCTION TestCopias( cPrn ) // Imprimir varias copias
LOCAL nI, nCopias := 2
// SetCopies
FOR nI := 1 TO nCopias
TestPrint( cPrn )
NEXT
RETURN NIL
FUNCTION TestPrint( cPrn )
LOCAL oFnt, oPrint, aPrn
LOCAL cText := "Este é um texto de teste para impressão"
aPrn := GetPrinters()
PRINT oPrint NAME "Formulario" TO ( cPrn )
DEFINE FONT oFnt NAME "ARIAL" SIZE 0, -14 OF oPrint
// oPrint:SetCopies ( 2 ) // Nao funciona
oPrint:SetLandscape()
// oPrint:Setup () // check the settings
PAGE
oPrint:CmSay ( 1, 1, cText, oFnt )
ENDPAGE
ENDPRINT
oFnt:End()
RETURN NIL
FUNCTION Test2 ( cPrn )
LOCAL oPrinter
LOCAL aFonts, cFont, nFont
oPrinter := Win32Prn():new( cPrn ) // Create printer object and configure print job
oPrinter:landscape := .F.
oPrinter:formType := DMPAPER_A4
oPrinter:copies := 2 // <--- 2 copies !!
IF ! oPrinter:create() // Create device context
Alert( "Cannot create device context" )
QUIT
ENDIF
IF ! oPrinter:startDoc( "xHarbour test page" ) // Create print job
Alert( "Cannot create document" )
QUIT
ENDIF
oPrinter:textOut( "Text in default font" ) // Text in fixed font
oPrinter:bold( FW_EXTRABOLD )
oPrinter:textOut( oPrinter:fontName )
oPrinter:bold( FW_NORMAL )
oPrinter:newLine()
aFonts := oPrinter:getFonts()
nFont := AScan( aFonts, ;
{|a| "ARIAL" $ Upper( a[1] ) } )
cFont := aFonts[nFont,1]
oPrinter:setFont( cFont ) // Text in proportional font
oPrinter:textOut( "Text in Arial font" )
oPrinter:bold( FW_EXTRABOLD )
oPrinter:textOut( oPrinter:fontName )
oPrinter:bold( FW_NORMAL )
oPrinter:newLine()
oPrinter:setColor( RGB_YELLOW, RGB_BLUE ) // Colored text
oPrinter:textOut( "Yellow on Blue" )
oPrinter:newLine()
oPrinter:setPen( PS_DASH, 5, RGB_GREEN ) // Draw colored line across page
oPrinter:line( oPrinter:posX, ;
oPrinter:posY, ;
oPrinter:rightMargin, ;
oPrinter:posY )
oPrinter:endDoc() // Send output to printer
oPrinter:destroy() // Release GDI device context
RETURN NIL
FUNCTION DefaultPrinter()
LOCAL nPrn, nRet, sGetDefaultPrinter
nRet := PrinterSetUp()
nPrn := PrnGetName()
IF( nRet # 0 )
SetDefaultPrinter( PRNGETNAME() )
sGetDefaultPrinter := GetDefaultPrinter()
// ? PrnStatus( sGetDefaultPrinter )
IF PrnStatus( sGetDefaultPrinter ) = 4096
// Verifica se SPOOLER esta desligado e tenta liga-lo
MsgRun( sGetDefaultPrinter +": "+isprint( GetDefaultPrinter() ) + ;
" ou Spooler Desligado.", "Status da Impressora", ;
{|| WinExec( "NET START SPOOLER", 7 ) } )
ENDIF
//? GetPrinter()
ELSE
MsgAlert ( "No Printers found" )
RETURN( .F. )
ENDIF
RETURN( sGetDefaultPrinter ) // NIL
FUNCTION TESTRPT()
LOCAL oFont1, oFont2, aPrn, oPrn
DEFINE FONT oFont1 NAME "ARIAL" SIZE 0,-10
DEFINE FONT oFont2 NAME "ARIAL" SIZE 0,-10 BOLD
USE Customer
INDEX ON Customer->Last TO Customer
SET INDEX TO Customer
GO TOP
aPrn := GetPrinters()
IF Empty( aPrn ) // Empty( oPrn:hDC )
MsgStop( "Nenhuma Impressora Encontrada", "Nenhuma Impressora Encontrada" )
RETURN NIL
ENDIF
PRINTER oPrn PREVIEW MODAL // PARA TESTAR A IMPRESSORA ANTES DE IMPRIMIR
IF EMPTY( oPrn:hDC ) // MODIFICADO EM: 05/05/2015 - Quebrou na Gilmaria.
MsgInfo( "ALGUMA COISA OCORREU DE ERRADO COM A IMPRESSORA.", "LIGUE A IMPRESSORA." )
oPrn:End()
RETURN( .F. )
ENDIF
oPrn:End()
REPORT oReport ;
TITLE "*** LISTADO DE PRUEBA ***","",OemtoAnsi("FiveTech Software"),"" ;
FONT oFont1, oFont2 ;
HEADER "Fecha: "+dtoc(date()),"Hora: "+time() ;
FOOTER OemtoAnsi("P gina: ")+str(oReport:nPage,3) ;
PREVIEW // TO PRINTER
oReport:oDevice:lPrvModal := .T.
oReport:oDevice:SetPage(9) //-> Formato A4
COLUMN TITLE "ST" ;
DATA Customer->State
COLUMN TITLE "City" ;
DATA Customer->City
COLUMN TITLE "First Name","Last Name" ;
DATA Customer->First, Customer->Last
COLUMN TITLE " Salary" ;
DATA Customer->Salary ;
PICTURE "9,999,999" ;
SIZE 9 RIGHT ;
TOTAL
END REPORT
ACTIVATE REPORT oReport ON STARTPAGE Datos()
RETURN NIL
Function Datos()
local cText
cText := "Ancho hoja : "+str(oReport:nWidth)+CRLF
cText += "Ancho listado : "+str(oReport:nRptWidth)+CRLF
cText += "Margen Izquier: "+str(oReport:nLeftMargin)+CRLF
cText += "Margen Derecho: "+str(oReport:nRightMargin)+CRLF
cText += "Ancho del Font: "+str(oReport:aFont[1]:nWidth)+CRLF
cText += "Alto del Font: "+str(oReport:aFont[1]:nHeight)+CRLF
cText += "Ancho Standard: "+str(oReport:nSeparator)+CRLF
cText += "Ancho columna1: "+str(oReport:aColumns[1]:nWidth)+CRLF
cText += "Ancho columna2: "+str(oReport:aColumns[2]:nWidth)+CRLF
RETURN NIL
// FIM
Code: Select all | Expand
// C:\FWH\SAMPLES\IMPVARIA.PRG
#include "FiveWin.ch"
#include "Objects.ch"
#include "report.ch"
#define RGB_BLACK RGB( 0, 0, 0 )
#define RGB_RED RGB( 255, 0, 0 )
#define RGB_GREEN RGB( 0,255, 0 )
#define RGB_BLUE RGB( 0, 0,255 )
#define RGB_CYAN RGB( 0,255,255 )
#define RGB_YELLOW RGB( 255,255, 0 )
#define RGB_MAGENTA RGB( 255, 0,255 )
#define RGB_WHITE RGB( 255,255,255 )
#define FW_DONTCARE 0
#define FW_THIN 100
#define FW_EXTRALIGHT 200
#define FW_LIGHT 300
#define FW_NORMAL 400
#define FW_MEDIUM 500
#define FW_SEMIBOLD 600
#define FW_BOLD 700
#define FW_EXTRABOLD 800
#define FW_HEAVY 900
#define DMPAPER_A4 9
STATIC oReport
FUNCTION Main()
LOCAL oPrn, oPrint, oFnt, cPrinter := ""
LOCAL oDlg, oBrw
LOCAL aPrn := {}
LOCAL cDef, i := 1
SET _3DLOOK ON
#ifdef __HARBOUR__ // GetPrinters() and GetDefaultPrinter() do not work in Harbour
aPrn := aGetPrinters ()
cDef := DefaultPrinter()
#else // Harbour
aPrn := GetPrinters ()
cDef := GetDefaultPrinter()
#endif
IF Empty ( aPrn )
MsgAlert ( "No Printers found" )
RETURN NIL
ENDIF
DEFINE DIALOG oDlg FROM 2, 2 TO 21, 50 TITLE "Available Printers"
@ 1, 2 LISTBOX oBrw FIELDS aPrn[ i ] ;
HEADERS "Printer Array" ;
FIELDSIZES 200 ;
OF oDlg ;
SIZE 100, 100
oBrw:bGoTop = { || i := 1 }
oBrw:bGoBottom = { || i := Eval( oBrw:bLogicLen ) }
oBrw:bSkip = { | nWant, nOld | nOld := i, i += nWant, ;
i := Max( 1, Min( i, Eval( oBrw:bLogicLen ) ) ), ;
i - nOld }
oBrw:bLogicLen = { || Len( aPrn ) }
oBrw:cAlias = "Array" // Just put something
@ 7.8, 2 SAY "Default printer: " + cDef
@ 1, 20 BUTTON "Print (&FW)" OF oDlg ACTION TestCopias ( aPrn[i] )
@ 2, 20 BUTTON "Print (&xH)" OF oDlg ACTION Test2 ( aPrn[i] )
@ 3, 20 BUTTON "Print (&RP)" OF oDlg ACTION TestRPT ( aPrn[i] )
@ 4, 20 BUTTON "&End " OF oDlg ACTION( oDlg:End() )
ACTIVATE DIALOG oDlg CENTERED
RETURN NIL
FUNCTION TestCopias( cPrn ) // Imprimir varias copias
LOCAL nI, nCopias := 2
// SetCopies
FOR nI := 1 TO nCopias
TestPrint( cPrn )
NEXT
RETURN NIL
FUNCTION TestPrint( cPrn )
LOCAL oFnt, oPrint, aPrn
LOCAL cText := "Este é um texto de teste para impressão"
aPrn := GetPrinters()
PRINT oPrint NAME "Formulario" TO ( cPrn )
DEFINE FONT oFnt NAME "ARIAL" SIZE 0, -14 OF oPrint
// oPrint:SetCopies ( 2 ) // Nao funciona
oPrint:SetLandscape()
// oPrint:Setup () // check the settings
PAGE
oPrint:CmSay ( 1, 1, cText, oFnt )
ENDPAGE
ENDPRINT
oFnt:End()
RETURN NIL
FUNCTION Test2 ( cPrn )
LOCAL oPrinter
LOCAL aFonts, cFont, nFont
oPrinter := Win32Prn():new( cPrn ) // Create printer object and configure print job
oPrinter:landscape := .F.
oPrinter:formType := DMPAPER_A4
oPrinter:copies := 2 // <--- 2 copies !!
IF ! oPrinter:create() // Create device context
Alert( "Cannot create device context" )
QUIT
ENDIF
IF ! oPrinter:startDoc( "xHarbour test page" ) // Create print job
Alert( "Cannot create document" )
QUIT
ENDIF
oPrinter:textOut( "Text in default font" ) // Text in fixed font
oPrinter:bold( FW_EXTRABOLD )
oPrinter:textOut( oPrinter:fontName )
oPrinter:bold( FW_NORMAL )
oPrinter:newLine()
aFonts := oPrinter:getFonts()
nFont := AScan( aFonts, ;
{|a| "ARIAL" $ Upper( a[1] ) } )
cFont := aFonts[nFont,1]
oPrinter:setFont( cFont ) // Text in proportional font
oPrinter:textOut( "Text in Arial font" )
oPrinter:bold( FW_EXTRABOLD )
oPrinter:textOut( oPrinter:fontName )
oPrinter:bold( FW_NORMAL )
oPrinter:newLine()
oPrinter:setColor( RGB_YELLOW, RGB_BLUE ) // Colored text
oPrinter:textOut( "Yellow on Blue" )
oPrinter:newLine()
oPrinter:setPen( PS_DASH, 5, RGB_GREEN ) // Draw colored line across page
oPrinter:line( oPrinter:posX, ;
oPrinter:posY, ;
oPrinter:rightMargin, ;
oPrinter:posY )
oPrinter:endDoc() // Send output to printer
oPrinter:destroy() // Release GDI device context
RETURN NIL
FUNCTION DefaultPrinter()
LOCAL nPrn, nRet, sGetDefaultPrinter
nRet := PrinterSetUp()
nPrn := PrnGetName()
IF( nRet # 0 )
SetDefaultPrinter( PRNGETNAME() )
sGetDefaultPrinter := GetDefaultPrinter()
// ? PrnStatus( sGetDefaultPrinter )
IF PrnStatus( sGetDefaultPrinter ) = 4096
// Verifica se SPOOLER esta desligado e tenta liga-lo
MsgRun( sGetDefaultPrinter +": "+isprint( GetDefaultPrinter() ) + ;
" ou Spooler Desligado.", "Status da Impressora", ;
{|| WinExec( "NET START SPOOLER", 7 ) } )
ENDIF
//? GetPrinter()
ELSE
MsgAlert ( "No Printers found" )
RETURN( .F. )
ENDIF
RETURN( sGetDefaultPrinter ) // NIL
FUNCTION TESTRPT()
LOCAL oFont1, oFont2, aPrn, oPrn
DEFINE FONT oFont1 NAME "ARIAL" SIZE 0,-10
DEFINE FONT oFont2 NAME "ARIAL" SIZE 0,-10 BOLD
USE Customer
INDEX ON Customer->Last TO Customer
SET INDEX TO Customer
GO TOP
aPrn := GetPrinters()
IF Empty( aPrn ) // Empty( oPrn:hDC )
MsgStop( "Nenhuma Impressora Encontrada", "Nenhuma Impressora Encontrada" )
RETURN NIL
ENDIF
PRINTER oPrn PREVIEW MODAL // PARA TESTAR A IMPRESSORA ANTES DE IMPRIMIR
IF EMPTY( oPrn:hDC ) // MODIFICADO EM: 05/05/2015 - Quebrou na Gilmaria.
MsgInfo( "ALGUMA COISA OCORREU DE ERRADO COM A IMPRESSORA.", "LIGUE A IMPRESSORA." )
oPrn:End()
RETURN( .F. )
ENDIF
oPrn:End()
REPORT oReport ;
TITLE "*** LISTADO DE PRUEBA ***","",OemtoAnsi("FiveTech Software"),"" ;
FONT oFont1, oFont2 ;
HEADER "Fecha: "+dtoc(date()),"Hora: "+time() ;
FOOTER OemtoAnsi("P gina: ")+str(oReport:nPage,3) ;
PREVIEW // TO PRINTER
oReport:oDevice:lPrvModal := .T.
oReport:oDevice:SetPage(9) //-> Formato A4
COLUMN TITLE "ST" ;
DATA Customer->State
COLUMN TITLE "City" ;
DATA Customer->City
COLUMN TITLE "First Name","Last Name" ;
DATA Customer->First, Customer->Last
COLUMN TITLE " Salary" ;
DATA Customer->Salary ;
PICTURE "9,999,999" ;
SIZE 9 RIGHT ;
TOTAL
END REPORT
ACTIVATE REPORT oReport ON STARTPAGE Datos()
RETURN NIL
Function Datos()
local cText
cText := "Ancho hoja : "+str(oReport:nWidth)+CRLF
cText += "Ancho listado : "+str(oReport:nRptWidth)+CRLF
cText += "Margen Izquier: "+str(oReport:nLeftMargin)+CRLF
cText += "Margen Derecho: "+str(oReport:nRightMargin)+CRLF
cText += "Ancho del Font: "+str(oReport:aFont[1]:nWidth)+CRLF
cText += "Alto del Font: "+str(oReport:aFont[1]:nHeight)+CRLF
cText += "Ancho Standard: "+str(oReport:nSeparator)+CRLF
cText += "Ancho columna1: "+str(oReport:aColumns[1]:nWidth)+CRLF
cText += "Ancho columna2: "+str(oReport:aColumns[2]:nWidth)+CRLF
RETURN NIL
// FIM
Code: Select all | Expand
#include "fivewin.ch"
REQUEST FWZEBRA // required for barcodes
function Main()
local oPrn, cText := "Texto a QR"
PRINT oPrn
PAGE
@ 2,2 PRINT TO oPrn TEXT cText AS BARCODE TYPE "QR" SIZE 2,2 INCHES
ENDPAGE
ENDPRINT
return nil
Code: Select all | Expand
#include "fivewin.ch"
REQUEST FWZEBRA // required for barcodes
function Main()
local oPrn, cText := "Texto a QR"
PRINT oPrn
PAGE
@ 2,2 PRINT TO oPrn TEXT cText AS BARCODE TYPE "QR" SIZE 2,2 INCHES
ENDPAGE
ENDPRINT
return nil
Code: Select all | Expand
Start Length Name Class
0001:00401000 0001238C8H _TEXT CODE
0002:00525000 0000350D0H _DATA DATA
0003:0055A0D0 00000F694H _BSS BSS
0004:00000000 0000000A4H _TLS TLS
Esto ocurre en proyectos con puro harbour utilizando hbmk2 Code: Select all | Expand
Start Length Name Class
0001:00401000 0001238C8H _TEXT CODE
0002:00525000 0000350D0H _DATA DATA
0003:0055A0D0 00000F694H _BSS BSS
0004:00000000 0000000A4H _TLS TLS
Esto ocurre en proyectos con puro harbour utilizando hbmk2 Code: Select all | Expand
#-inc enable incremental build mode
-n -q0 -static -map
Code: Select all | Expand
#-inc enable incremental build mode
-n -q0 -static -map
Code: Select all | Expand
// The example shows a typical scenario for GetSecret().
// The user must enter a password which is not displayed on
// the screen
PROCEDURE Main
LOCAL cPassword := Space(20)
CLS
SET CONFIRM ON
cPassWord := ;
GetSecret( cPassword, 10, 10, .T., "Enter your password: ")
IF cPassWord <> "xHarbour"
Alert( "Access denied" )
QUIT
ENDIF
Alert( "Access granted" )
RETURN
Code: Select all | Expand
// The example shows a typical scenario for GetSecret().
// The user must enter a password which is not displayed on
// the screen
PROCEDURE Main
LOCAL cPassword := Space(20)
CLS
SET CONFIRM ON
cPassWord := ;
GetSecret( cPassword, 10, 10, .T., "Enter your password: ")
IF cPassWord <> "xHarbour"
Alert( "Access denied" )
QUIT
ENDIF
Alert( "Access granted" )
RETURN
Code: Select all | Expand
snh := getsecret( SPACE( 11 ), 5, 5, .T., "Digite a senha:" )
alert( snh )
Code: Select all | Expand
snh := getsecret( SPACE( 11 ), 5, 5, .T., "Digite a senha:" )
alert( snh )
Code: Select all | Expand
// 0 Indica que a biblioteca foi inicializada corretamente.
IF lRet = 0
IF FILE( "PRONTO.wav" )
SndPlaySound( "PRONTO.wav", 0 )
ENDIF
// SE FOR O TESTADOR DO CTI, NAO ENTRA AQUI. NAO PODE GRAVAR, POIS
// NFECOD2 NAO EXISTE AINDA, E SOMENTE UM TESTE DO ENVIADOR JUMA!
IF DeOndeVem != "TESTADOR"
// GRAVACAO DOS ENVIOS AQUI EM: EMAILENV.DBF - TUDO OK, GRAVA!
SELECT( DBEMAILENV ) // Gravar o Email/Xml enviado 19/03/2025 Joao
APPEND BLANK
RLOCK()
REPLACE EMAILENV->CODC WITH NFECOD2
REPLACE EMAILENV->CONTATO WITH cSubject+" - PARA: "+ ALLTRIM( cPara )
REPLACE EMAILENV->DATAENVIO WITH DATE()
REPLACE EMAILENV->HORAENVIO WITH TIME()
COMMIT // vai que...
UNLOCK
ENDIF
MsgWait( "MENSAGEM ENVIADA COM SUCESSO!", "Aguarde Um Momento Por Favor", 3.5 )
// -5 Indica que não foi possível localizar o arquivo INI informado
ELSEIF lRet = -5
MsgInfo( "Não foi possível localizar o arquivo INI.", "Error" )
// -6 Indica que não foi possível encontrar o diretório do arquivo INI.
ELSEIF lRet = -6
MsgInfo( "Não foi possível localizar o diretório do arquivo INI.", "Error" )
// -10 Indica que houve falhas na execução do método.
ELSEIF lRet = -10
MsgInfo( "Houve falha na execução do Envio do Email.", "Error" )
ELSE
IF DeOndeVem != "TESTADOR"
SELECT( DBEMAILENV ) // Gravar o Email/Xml enviado
APPEND BLANK
RLOCK()
REPLACE EMAILENV->CODC WITH NFECOD2
REPLACE EMAILENV->CONTATO WITH cSubject+ ;
OemToAnsi( " - NÇO ENVIADO" ) + ;
" - PARA: " + ;
ALLTRIM( cPara ) + " - FALHA " // Destinatario
REPLACE EMAILENV->DATAENVIO WITH DATE()
REPLACE EMAILENV->HORAENVIO WITH TIME()
COMMIT // vai que...
UNLOCK
ENDIF
MsgStop( "Falha ao Tentar Enviar E-mail Para o Cliente.", ;
"Falha ao Tentar Enviar E-mail Para o Cliente." )
ENDIF
Code: Select all | Expand
// 0 Indica que a biblioteca foi inicializada corretamente.
IF lRet = 0
IF FILE( "PRONTO.wav" )
SndPlaySound( "PRONTO.wav", 0 )
ENDIF
// SE FOR O TESTADOR DO CTI, NAO ENTRA AQUI. NAO PODE GRAVAR, POIS
// NFECOD2 NAO EXISTE AINDA, E SOMENTE UM TESTE DO ENVIADOR JUMA!
IF DeOndeVem != "TESTADOR"
// GRAVACAO DOS ENVIOS AQUI EM: EMAILENV.DBF - TUDO OK, GRAVA!
SELECT( DBEMAILENV ) // Gravar o Email/Xml enviado 19/03/2025 Joao
APPEND BLANK
RLOCK()
REPLACE EMAILENV->CODC WITH NFECOD2
REPLACE EMAILENV->CONTATO WITH cSubject+" - PARA: "+ ALLTRIM( cPara )
REPLACE EMAILENV->DATAENVIO WITH DATE()
REPLACE EMAILENV->HORAENVIO WITH TIME()
COMMIT // vai que...
UNLOCK
ENDIF
MsgWait( "MENSAGEM ENVIADA COM SUCESSO!", "Aguarde Um Momento Por Favor", 3.5 )
// -5 Indica que não foi possível localizar o arquivo INI informado
ELSEIF lRet = -5
MsgInfo( "Não foi possível localizar o arquivo INI.", "Error" )
// -6 Indica que não foi possível encontrar o diretório do arquivo INI.
ELSEIF lRet = -6
MsgInfo( "Não foi possível localizar o diretório do arquivo INI.", "Error" )
// -10 Indica que houve falhas na execução do método.
ELSEIF lRet = -10
MsgInfo( "Houve falha na execução do Envio do Email.", "Error" )
ELSE
IF DeOndeVem != "TESTADOR"
SELECT( DBEMAILENV ) // Gravar o Email/Xml enviado
APPEND BLANK
RLOCK()
REPLACE EMAILENV->CODC WITH NFECOD2
REPLACE EMAILENV->CONTATO WITH cSubject+ ;
OemToAnsi( " - NÇO ENVIADO" ) + ;
" - PARA: " + ;
ALLTRIM( cPara ) + " - FALHA " // Destinatario
REPLACE EMAILENV->DATAENVIO WITH DATE()
REPLACE EMAILENV->HORAENVIO WITH TIME()
COMMIT // vai que...
UNLOCK
ENDIF
MsgStop( "Falha ao Tentar Enviar E-mail Para o Cliente.", ;
"Falha ao Tentar Enviar E-mail Para o Cliente." )
ENDIF
Code: Select all | Expand
REDEFINE DBCOMBO oGet[02] Var oDbf:NOMBRE ID 102 OF oDlg1 ALIAS "MARCAS" ItemField "DESCRIPCION" ListField "DESCRIPCION" UPDATE
oGet[02]:oFont := aLetras[03]
oGet[02]:bKeyChar := { || If( Len( oGet[02]:cSearchKey ) == 3, oGet[02]:Open(),) }
Code: Select all | Expand
REDEFINE DBCOMBO oGet[02] Var oDbf:NOMBRE ID 102 OF oDlg1 ALIAS "MARCAS" ItemField "DESCRIPCION" ListField "DESCRIPCION" UPDATE
oGet[02]:oFont := aLetras[03]
oGet[02]:bKeyChar := { || If( Len( oGet[02]:cSearchKey ) == 3, oGet[02]:Open(),) }
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
Called from: => ENDPAGE( 0 )
Called from: PRINTER.prg => PAGEEND( 0 )
Called from: LIMPJARD.prg => IMPRIMIR_ESCOPOS_LIMP( 4391 )
Called from: LIMPJARD.prg => PEGA_DADOS_LIMP_IMPRESSAO( 2851 )
Called from: LIMPJARD.prg => (b)IMP_TIPO_IMPRESSAO_LIMPEZA( 1227 )
Called from: WINORCAM.prg => MAIN( 1281 )
Code: Select all | Expand
Called from: => ENDPAGE( 0 )
Called from: PRINTER.prg => PAGEEND( 0 )
Called from: LIMPJARD.prg => IMPRIMIR_ESCOPOS_LIMP( 4391 )
Called from: LIMPJARD.prg => PEGA_DADOS_LIMP_IMPRESSAO( 2851 )
Called from: LIMPJARD.prg => (b)IMP_TIPO_IMPRESSAO_LIMPEZA( 1227 )
Called from: WINORCAM.prg => MAIN( 1281 )
Code: Select all | Expand
// IMPRESSAO DOS PRODUTOS DA LIMPEZA DE JARDIM
FUNCTION IMPRIMIR_ESCOPOS_LIMP( DeOndePartiu, oDlgBtn )
LOCAL oPrn, nMargin, nWidth, nColWidth, nRow, nCol, oImage
LOCAL XDATALISTA, cAlias, cMemoria
LOCAL oFont, oFontLogo, oFontDivi, oFontList, oFontCurs, oPen1, oPen2, ;
oPen3, oFontSubl, ResLinha, ResColuna, cProposta, nLinha, nColuna, ;
oFontBold, nTotalParc := 0.00, nTotalGeral := 0.00, nTotalProdu
LOCAL nPulaLinha, oFontMin, oFontSub2, nPagina, oFontRua, nItem
LOCAL cSublin, cImpSub, cFile // := "C:\ORCAMPDF\CHAMADO.PDF"
PRIVATE WE1, WE2, WE3, LARGEXTEN2
PUBLIC nValorVenda
STOR SPAC( 70 ) TO WE1, WE2, WE3
cFile := "C:\ORCAMPDF\" + "ORCAM" + ALLTRIM( nProposta ) + ".PDF"
XDATALISTA := "São Paulo" + ", " + LTRIM( STR( DAY( DATE() ) ) ) + ;
" de " + OemToAnsi( CMONTH( DATE() ) ) + ;
" de " + LTRIM( STR( YEAR( DATE() ) ) ) + "."
HB_GCALL( .F. ) // PARA LIMPAR A MEMORIA
LCHDIR( cDirPleno )
SET DEFAULT TO
aPrn := GetPrinters() // 02/08/2017 Teste para ver se avisa erro.
IF Empty( aPrn ) // Empty( oPrn:hDC )
MsgStop( "Nenhuma Impressora Encontrada", "Nenhuma Impressora Encontrada" )
RETURN NIL
ENDIF
PRINTER oPrn PREVIEW MODAL // PARA TESTAR A IMPRESSORA ANTES DE IMPRIMIR
IF EMPTY( oPrn:hDC ) // MODIFICADO EM: 05/05/2015 - Quebrou na Gilmaria.
MsgInfo( "ALGUMA COISA OCORREU DE ERRADO COM A IMPRESSORA.", "LIGUE A IMPRESSORA." )
oPrn:End()
RETURN( .F. )
ENDIF
oPrn:End()
IF .NOT. NETERR()
SELECT( DBRECOMPOS )
ELSE
MsgInfo( "ERRO DE REDE. Verifique!", "Confirma " )
LIBERA_TUDO()
RETURN NIL
ENDIF
cProposta := nProposta // PARA O INDICE TEMPORARIO TEM QUE SER ASSIM.
INDEX ON PROPOCOD TAG 04 TO ORCATEMP FOR ( .NOT. EOF() ) .AND. ;
( DBRECOMPOS )->PROPOCOD >= cProposta .AND. ;
( DBRECOMPOS )->PROPOCOD <= cProposta MEMORY // TEMPORARY
GO TOP
IF EOF()
MsgStop( OemToAnsi( "Nenhuma Proposta Localizada Para ImpressÆo" ), ;
OemToAnsi( "Nenhuma Proposta Localizada Para ImpressÆo" ) )
RETURN NIL
ENDIF
cAlias := ALIAS()
oImage := ".\LOGO.jpg" // tem que estar na pasta do plenoind
IF DeOndePartiu = "DIRETONAIMP" // DIRETO NA IMPRESSORA
PRINT oPrn NAME "LIMPEZA_JARDIM" // DIRETO NA IMP.
ELSEIF DeOndePartiu = "COMPREVIEWFIVE" // COM PREVIEW(Visualizacao)
PRINT oPrn NAME "LIMPEZA_JARDIM" PREVIEW MODAL
ELSEIF DeOndePartiu = "COMPREVIEWPDF" // GERAR O ARQUIVO PDF.
PRINT oPrn PREVIEW
ENDIF
DEFINE FONT oFontRua NAME "Courier New" SIZE 0, - 10 OF oPrn
DEFINE FONT oFontMin NAME "Courier New" SIZE 0, - 10 BOLD OF oPrn
DEFINE FONT oFont NAME "Courier New" SIZE 0, - 12 OF oPrn
DEFINE FONT oFontBold NAME "Courier New" SIZE 0, - 12 BOLD OF oPrn
DEFINE FONT oFontSubl NAME "Courier New" SIZE 0, - 12 BOLD UnderLine OF oPrn
DEFINE FONT oFontSub2 NAME "Courier New" SIZE 0, - 12 BOLD UnderLine OF oPrn
//-> Caneta do Preview
DEFINE PEN oPen1 WIDTH 4 COLOR CLR_BROWN OF oPrn
DEFINE PEN oPen2 WIDTH 2 COLOR CLR_BROWN OF oPrn
DEFINE PEN oPen3 WIDTH 5 COLOR CLR_BLACK OF oPrn
oPrn:SetPage( 9 ) //-> A4 //9
oPrn:SetPortrait() //-> Vertical(Retrato)
//- Como Imprimir em Centimetros sem errar e em qualquer Impressora
ResLinha := oPrn:nLogPixely()/2.54
ResColuna := oPrn:nLogPixelx()/2.54
nMargin := Int( 0.1 * oPrn:nHorzRes() )
nWidth := 8 * nMargin
nColWidth := Int( ( nWidth - nMargin ) / 2 )
nPagina := 1
PAGE
nRow := 1.50 // Linha
nCol := 650.00 // Coluna do Logo.jpg
@ nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow
nLinha := 1.00
nColuna := 18.00
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, , ;
CLR_BLACK, , PAD_CENTER )
nLinha := 3.00 // era 2.50
IF LEN( ALLTRIM( nProposta ) ) = 1
nColuna := 4.35
ELSEIF LEN( ALLTRIM( nProposta ) ) = 2
nColuna := 4.45
ELSEIF LEN( ALLTRIM( nProposta ) ) = 3
nColuna := 4.55
ELSEIF LEN( ALLTRIM( nProposta ) ) = 4 // OK
nColuna := 4.65
ELSEIF LEN( ALLTRIM( nProposta ) ) = 5 // OK
nColuna := 4.75
ELSEIF LEN( ALLTRIM( nProposta ) ) = 6 // OK
nColuna := 4.85 // 5.00 -.15
ELSEIF LEN( ALLTRIM( nProposta ) ) = 7 // OK
nColuna := 4.95
ELSEIF LEN( ALLTRIM( nProposta ) ) = 8 // OK
nColuna := 5.05
ELSEIF LEN( ALLTRIM( nProposta ) ) = 9 // OK
nColuna := 5.15
ELSEIF LEN( ALLTRIM( nProposta ) ) = 10 // OK
nColuna := 5.25
ELSE
nColuna := 5.35
ENDIF
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
"Orçamento Nº.: " + ALLTRIM( nProposta ), oFont, , ;
CLR_BLACK, , PAD_CENTER )
oPrn:cmSay( nLinha, 19.00, "" + XDATALISTA, oFontRua, , CLR_BLACK, , PAD_RIGHT )
nLinha := nLinha += 0.80
IF LEN( ALLTRIM( STR( nClienCod ) ) ) = 1
nColuna := 7.48 // 7.50
ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 2
nColuna := 7.58 // 7.60
ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 3
nColuna := 7.68 // 7.70
ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 4 // OK
nColuna := 7.78 // 7.80
ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 5
nColuna := 7.83 // 7.85
ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 6
nColuna := 7.93 // 7.95
ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 7
nColuna := 8.03 // 8.05
ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 8
nColuna := 8.13 // 8.15
ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 9
nColuna := 8.23 // 8.25
ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 10
nColuna := 8.33 // 8.35
ENDIF
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ "CÓD.: " + ALLTRIM( STR( nClienCod ) ) + " - " + ClienPropo, ;
oFontRua, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.50
nColuna := 6.40 // 6.55
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ EnderPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.50
nColuna := 5.15 // 5.30
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
"BAIRRO: " + BairrPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )
nColuna := nColuna += 6.50 // 5.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
"CIDADE: " + CidadPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )
nColuna := nColuna += 4.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
"UF: " + UFdaPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.60
nColuna := 2.85 // 2.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
"Att.: ", oFontRua, , CLR_BLACK, , PAD_CENTER )
nColuna := 7.10
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cContatoCli, oFontRua, , CLR_BLACK, , PAD_CENTER )
cOrcamento := "REF.: " // + cTPSerNome // NOME DO SERVICO
nLinha := nLinha += 1.00
nColuna := 2.95 // "REF.:" // 3.10
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cOrcamento, oFontBold, , CLR_BLACK, , PAD_CENTER )
nColuna := 7.70 // 7.70
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cTPSerNome, oFontBold, , CLR_BLACK, , PAD_CENTER )
cSublin := "REF.: " + ALLTRIM( cTPSerNome ) // TIRAR BRANCOS P/ENCAIXAR
cImpSub := LEN( cSublin ) + 1.2 // PARA SUBLINHADO.
nLinha := nLinha += 0.05 // Tiro os Brancos e Encaixo embaixo o SUBLINHADO
nColuna := 2.20 // - 2.35 -.15
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
REPLICATE( "_", cImpSub ), oFontBold , , CLR_BLACK, , PAD_LEFT )
cConforme1 := "Conforme solicitação segue proposta abaixo: "
nLinha := nLinha += 0.80
nColuna := 13.20 // -.15
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cConforme1, oFont, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.80
nColuna := 5.35
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ "01. ESCOPO DOS TRABALHOS:", oFontSub2, , CLR_BLACK, , PAD_CENTER )
// PODAS AQUI
nLinha := nLinha += 0.60
nColuna := 10.05 // 10.15 -.10
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas1, oFont, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas2, oFont, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas3, oFont, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas4, oFont, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas5, oFont, , CLR_BLACK, , PAD_CENTER )
IF .NOT. EMPTY( cPodas6 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas6, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas7 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas7, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas8 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas8, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas9 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas9, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas10 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas10, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas11 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas11, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas12 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas12, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas13 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas13, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas14 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas14, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas15 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas15, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas16 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas16, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas17 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas17, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas18 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas18, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas19 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas19, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas20 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas20, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas21 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas21, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas22 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas22, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas23 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas23, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas24 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas24, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas25 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas25, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas26 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas26, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas27 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas27, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas28 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas28, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas29 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas29, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas30 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas30, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas31 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas31, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF nLinha >= 23.00 // PARA AS OBSERVACOES
nLinha := 27.00
nColuna := 10.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
oFontMin, , CLR_GREEN, , PAD_CENTER )
ENDPAGE
PAGE // NOVA PAGINA
// oPrn:SayImage( nLinLogo, nColLogo, "LOGO.JPG", nLargLogo, nAltLogo )
@ nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow
++nPagina
nLinha := 1.00
nColuna := 18.00 // 17.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, , ;
CLR_BLACK, , PAD_CENTER )
nLinha := 3.00 // 23 Linhas
ELSE
nLinha := nLinha += 0.70 // MUDEI EM: 23/09/2021 - Joao.
ENDIF
nTotalProdu := 0.00
GO TOP
WHILE( .NOT. EOF() )
SYSREFRESH()
nTotalProdu := nTotalProdu + ( cAlias )->VRVENDA * ;
( cAlias )->PRODUQTDE
SKIP
ENDDO
IF( nTotalProdu ) > 0.00
lLigaProduto := .T.
ENDIF
GO TOP
IF lLigaProduto // := .F. // STATIC NO INICIO DO MODULO
IF lImpFonte12 // := .T. // COURIER NEW 12 - 07/10/2021 Implementei.
nColuna := 2.10 // 3.20
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "C¢digo:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 5.05 // 5.84
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Produto:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 11.90
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Un:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 13.20 // 13.10
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Qtd:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 15.30
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Valor Un:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 18.70 // 18.30
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Total:" ), oFont,, CLR_BLACK,, PAD_CENTER )
ELSE // COURIR NEW 10 - 07/10/2021 - Joao
nColuna := 3.25
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "C¢digo:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 5.84 // 5.84
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Produto:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 11.75
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Un:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 13.20
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Qtd:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 15.30
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Valor Un:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 18.70
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Total:" ), oFont,, CLR_BLACK,, PAD_CENTER )
ENDIF
nLinha := nLinha += 0.60 // LINHA DOS PRODUTOS
ENDIF
GO TOP
WHILE( .NOT. EOF() )
SYSREFRESH()
IF ( cAlias )->PRODUNOME = SPACE( 30 ) // NAO MOSTRA O PRODUTO
SKIP
LOOP
ENDIF
IF lImpFonte12 // := .T. // COURIER NEW 12
nColuna := 2.50 // 3.35
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ( cAlias )->PRODUCOD, oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 7.80 // 8.00 - Estava oFontRua
// ESCOPO DOS TRABALHOS AQUI. PRODUTOS DA LIMPEZA
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ( cAlias )->PRODUNOME, oFont, , CLR_BLACK, , PAD_CENTER )
nColuna := 13.00 // 12.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ( cAlias )->PRODUUNID, oFont, , CLR_BLACK, , PAD_CENTER )
nColuna := 13.70
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( ( cAlias )->PRODUQTDE, "@ 99999" ) ), ;
oFont,, CLR_BLACK,, PAD_RIGHT )
nColuna := 16.40 // 16.00
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( ( cAlias )->VRVENDA, "@E 99,999.99" ) ), ;
oFont,, CLR_BLACK,, PAD_RIGHT )
nColuna := 19.50 // 19.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( ( cAlias )->VRTOTAL, "@E 9,999,999.99" ) ), ;
oFont,, CLR_BLACK,, PAD_RIGHT )
ELSE // COURIER NEW 10
nColuna := 3.40 // 3.35
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ( cAlias )->PRODUCOD, oFontRua,, CLR_BLACK,, PAD_CENTER )
nColuna := 8.00
// ESCOPO DOS TRABALHOS AQUI. PRODUTOS DA LIMPEZA
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ( cAlias )->PRODUNOME, oFontRua, , CLR_BLACK, , PAD_CENTER )
nColuna := 12.50 // 12.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ( cAlias )->PRODUUNID, oFontRua, , CLR_BLACK, , PAD_CENTER )
nColuna := 13.70
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( ( cAlias )->PRODUQTDE, "@ 99999" ) ), ;
oFontRua,, CLR_BLACK,, PAD_RIGHT )
nColuna := 16.30
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( ( cAlias )->VRVENDA, "@E 99,999.99" ) ), ;
oFontRua,, CLR_BLACK,, PAD_RIGHT )
nColuna := 19.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( ( cAlias )->VRTOTAL, "@E 9,999,999.99" ) ), ;
oFontRua,, CLR_BLACK,, PAD_RIGHT )
ENDIF // FIM DA COURIER NEW 10
SKIP
IF nLinha >= 23.00 // PARA AS OBSERVACOES/ ACHO QUE ENTRARA NO WHILE DOS PRODUTOS
nLinha := 27.00
nColuna := 10.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
oFontMin, , CLR_GREEN, , PAD_CENTER )
ENDPAGE
PAGE // NOVA PAGINA
// CONFIGURACAO ESTA EM: AMBLOGO.DBF
// oPrn:SayImage( nLinLogo, nColLogo, "LOGO.JPG", nLargLogo, nAltLogo )
@ nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow
++nPagina
nLinha := 1.00
nColuna := 18.00 // 18.00
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, , ;
CLR_BLACK, , PAD_CENTER )
nLinha := 3.00
ENDIF
nLinha := nLinha += 0.50
ENDDO
cProdutos := "Produtos: "
IF lLigaProduto // := .F. // SE TIVER PRODUTOS
IF nLinha # 3.00
nLinha := nLinha += 0.40
ENDIF
nColuna := 4.00
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cProdutos, oFont, , CLR_BLACK, , PAD_CENTER )
nColuna := 4.70 // 4.60
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
REPLICATE( ".", 046 ), oFont, , CLR_BLACK, , PAD_LEFT )
nColuna := 15.56
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ " ", oFont, , CLR_BLACK, , PAD_CENTER )
nColuna := 19.50
IF lImpFonte12 // := .T. // COURIER NEW 12 - 07/10/2021 Implementei.
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( nTotalProdu, "@E 9,999,999.99" ) ), ;
oFont, , CLR_BLACK, , PAD_RIGHT )
ELSE
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( nTotalProdu, "@E 9,999,999.99" ) ), ;
oFontRua, , CLR_BLACK, , PAD_RIGHT )
ENDIF
ENDIF
cMaoObra := "Mão de Obra: "
IF( nVrUnSer ) > 0.00
nLinha := nLinha += 0.50
nColuna := 4.00
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cMaoObra, oFont, , CLR_BLACK, , PAD_CENTER )
nColuna := 5.45
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
REPLICATE( ".", 043 ), oFont, , CLR_BLACK, , PAD_LEFT )
nColuna := 15.56
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ " ", oFont, , CLR_BLACK, , PAD_CENTER )
nColuna := 19.50
IF lImpFonte12 // := .T. // COURIER NEW 12 - 07/10/2021 Implementei.
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( nVrUnSer, "@E 9,999,999.99" ) ), ;
oFont, , CLR_BLACK, , PAD_RIGHT )
ELSE
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( nVrUnSer, "@E 9,999,999.99" ) ), ;
oFontRua, , CLR_BLACK, , PAD_RIGHT )
ENDIF
ENDIF
IF nDesconto > 0.00
nLinha := nLinha += 0.50
nColuna := 3.60
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Desconto: " ), oFont, , CLR_BLACK, , PAD_CENTER )
nColuna := 4.65
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
REPLICATE( ".", 046 ), oFont, , CLR_BLACK, , PAD_LEFT )
nColuna := 19.50
IF lImpFonte12 // := .T. // COURIER NEW 12 - 07/10/2021 Implementei.
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( nDesconto, "@E 999,999.99" ) ), ;
oFont, , CLR_BLACK, , PAD_RIGHT )
ELSE
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( nDesconto, "@E 999,999.99" ) ), ;
oFontRua, , CLR_BLACK, , PAD_RIGHT )
ENDIF
nValorTotal := 0.00
nDesconto := 0.00 // INCLUIDO EM: 04/09/2019
nTotalNfe := 0.00
GO TOP
WHILE( .NOT. EOF() )
SYSREFRESH()
nDesconto := nDesconto + VRDESCONTO
SKIP
ENDDO
GO TOP
WHILE( .NOT. EOF() )
SYSREFRESH()
nTotalNfe := nTotalNfe + ( cAlias )->VRVENDA * ;
( cAlias )->PRODUQTDE + ;
( cAlias )->VRUNSER
SKIP
ENDDO
nValorTotal := nTotalNfe - nDesconto // - nDesconto // somente se a Fernanda disser que sim
ENDIF
nLinha := nLinha += 1.00
nColuna := 3.45
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "02. TOTAL:" ), oFontSub2, , CLR_BLACK, , PAD_CENTER )
nVal := nValorTotal // lDin
EXTENSO( nVal, 50, WE1, WE2, WE3 )
nLinha := nLinha += 0.70
nColuna := 3.60 // 3.75
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "R$ " ), oFont, , CLR_BLACK, , PAD_CENTER )
nColuna := nColuna += 0.60
IF WE2 # SPACE( 50 )
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( nValorTotal, "@E 999,999,999.99" ) ) + " (" + ;
ALLTRIM( WE1 ), oFont, , CLR_BLACK, , PAD_LEFT )
IF WE2 # SPACE( 50 )
nLinha := nLinha += 0.50
nColuna := nColuna += 2.60
IF WE3 = SPACE( 50 )
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( WE2 ) + ").", oFont, , CLR_BLACK, , PAD_LEFT )
ELSE
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( WE2 ), oFont, , CLR_BLACK, , PAD_LEFT )
ENDIF
ENDIF
IF WE3 # SPACE( 50 )
nLinha := nLinha += 0.50
nColuna := nColuna += 2.60
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( WE3 ) + ").", oFont, , CLR_BLACK, , PAD_LEFT )
ENDIF
ELSE // - < QUE 50 CARACTERES.
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( nValorTotal, "@E 999,999,999.99" ) ) + " (" + ;
ALLTRIM( WE1 ) + ").", oFont, , CLR_BLACK, , PAD_LEFT )
ENDIF
IF nLinha >= 23.00 // PARA AS OBSERVACOES/ ACHO QUE ENTRARA NO WHILE DOS PRODUTOS
nLinha := 27.00
nColuna := 10.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
oFontMin, , CLR_GREEN, , PAD_CENTER )
ENDPAGE
PAGE // NOVA PAGINA
// CONFIGURACAO ESTA EM: AMBLOGO.DBF
// oPrn:SayImage( nLinLogo, nColLogo, "LOGO.JPG", nLargLogo, nAltLogo )
@ nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow
++nPagina
nLinha := 1.00
nColuna := 18.00 // 18.00
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, , ;
CLR_BLACK, , PAD_CENTER )
nLinha := 3.00
ENDIF
IF nLinha # 3.00
nLinha := nLinha += 0.80
ENDIF
nColuna := 5.61
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "03. CONDIیES DE PAGAMENTO:" ), ;
oFontSub2, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.60
nColuna := 3.20
// cCondPagto pode alterar no dialogo, Lucia pediu edicao - OK
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cCondPagto, oFont, , CLR_BLACK, , PAD_LEFT )
// OBSERVACOES AQUI - DEPENDENDO DO TAMANHO DO TEXTO FICA NA MESMA PAG. Joao
IF .NOT. EMPTY( cObserva1 )
nLinha := nLinha += 0.80
nColuna := 4.075 // 4.15
// ter opcao de alterar
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "04. OBSERVAۂO:" ), ;
oFontSub2, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.60
nColuna := 10.95 // 11.05 -.10
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva1, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva2 )
nLinha := nLinha += 0.50
nColuna := 10.95 //10.55
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva2, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva3 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva3, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva4 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva4, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva5 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva5, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva6 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva6, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva7 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva7, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva8 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva8, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva9 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva9, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva10 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva10, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva11 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva11, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva12 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva12, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva13 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva13, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF nLinha >= 23.00 // PARA AS OBSERVACOES
nLinha := 27.00
nColuna := 10.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
oFontMin, , CLR_GREEN, , PAD_CENTER )
ENDPAGE
PAGE // NOVA PAGINA
@ nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow
++nPagina
nLinha := 1.00
nColuna := 18.00 // 18.00
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, , ;
CLR_BLACK, , PAD_CENTER )
nLinha := 3.00
ENDIF
IF nLinha # 3.00
nLinha := nLinha += 0.50
ENDIF
IF .NOT. EMPTY( cObserva14 )
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva14, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva15 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva15, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva16 )
nLinha := nLinha += 0.50
nColuna := 10.95 // 11.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva16, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF nLinha >= 23.00 // PARA AS OBSERVACOES/ ACHO QUE ENTRARA NO WHILE DOS PRODUTOS
nLinha := 27.00
nColuna := 10.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
oFontMin, , CLR_GREEN, , PAD_CENTER )
ENDPAGE
PAGE // NOVA PAGINA
@ nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow
++nPagina
nLinha := 1.00
nColuna := 18.00
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, , ;
CLR_BLACK, , PAD_CENTER )
nLinha := 3.00
ENDIF
IF nLinha # 3.00
nLinha := nLinha += 1.00
ENDIF
// INCLUIDO EM: 24/09/2021 VALIDADE DA PROPOSTA. Leda pediu.
IF .NOT. EMPTY( cValidade ) // Lucia ajudou a melhorar.
nColuna := 4.88
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "05. PRAZO DE VALIDADE" ), ;
oFontSub2, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.60
nColuna := 9.60 // 9.70
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cValidade, oFont, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 1.00
ENDIF
nColuna := 12.90
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Sem mais, " ), ;
oFont, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.80
nColuna := 4.80 // 2.90
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, + cAssinaProp, ;
oFontBold, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.80
nColuna := 7.20 // 5.20
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ SUBST( WNOMEEMPRESA, 1, 20 ) + SPACE( 19 ), ;
oFont, , CLR_BLACK, , PAD_CENTER )
nLinha := 27.00
nColuna := 10.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
oFontMin, , CLR_GREEN, , PAD_CENTER )
// Called from: PRINTER.prg => PAGEEND( 0 ) // 64 bits MEMORIA
ENDPAGE
ENDPRINT
IF DeOndePartiu = "COMPREVIEWPDF"
oDlgBtn:End()
FWSavePreviewToPDF( oPrn, "LIMPEZA.PDF", .F. )
PDF_SALVO_EM_ORCAMPDF() // ESTA EM FUNCOES.PRG 23/11/2020 Joao
HTMLVIEW( "C:\ORCAMPDF\LIMPEZA.PDF" )
ENDIF
oFont:End()
oFontBold:End()
oFontSubl:End()
oFontMin:End()
oFontSub2:End()
oFontRua:End()
oPen1:End()
oPen2:End()
oPen3:End()
lFechaJan := .F.
lFechaWin := .F.
lLigaProduto := .F.
OrdDestroy( "ORCATEMP" )
lLigaProduto := .F.
RETURN NIL
Code: Select all | Expand
// IMPRESSAO DOS PRODUTOS DA LIMPEZA DE JARDIM
FUNCTION IMPRIMIR_ESCOPOS_LIMP( DeOndePartiu, oDlgBtn )
LOCAL oPrn, nMargin, nWidth, nColWidth, nRow, nCol, oImage
LOCAL XDATALISTA, cAlias, cMemoria
LOCAL oFont, oFontLogo, oFontDivi, oFontList, oFontCurs, oPen1, oPen2, ;
oPen3, oFontSubl, ResLinha, ResColuna, cProposta, nLinha, nColuna, ;
oFontBold, nTotalParc := 0.00, nTotalGeral := 0.00, nTotalProdu
LOCAL nPulaLinha, oFontMin, oFontSub2, nPagina, oFontRua, nItem
LOCAL cSublin, cImpSub, cFile // := "C:\ORCAMPDF\CHAMADO.PDF"
PRIVATE WE1, WE2, WE3, LARGEXTEN2
PUBLIC nValorVenda
STOR SPAC( 70 ) TO WE1, WE2, WE3
cFile := "C:\ORCAMPDF\" + "ORCAM" + ALLTRIM( nProposta ) + ".PDF"
XDATALISTA := "São Paulo" + ", " + LTRIM( STR( DAY( DATE() ) ) ) + ;
" de " + OemToAnsi( CMONTH( DATE() ) ) + ;
" de " + LTRIM( STR( YEAR( DATE() ) ) ) + "."
HB_GCALL( .F. ) // PARA LIMPAR A MEMORIA
LCHDIR( cDirPleno )
SET DEFAULT TO
aPrn := GetPrinters() // 02/08/2017 Teste para ver se avisa erro.
IF Empty( aPrn ) // Empty( oPrn:hDC )
MsgStop( "Nenhuma Impressora Encontrada", "Nenhuma Impressora Encontrada" )
RETURN NIL
ENDIF
PRINTER oPrn PREVIEW MODAL // PARA TESTAR A IMPRESSORA ANTES DE IMPRIMIR
IF EMPTY( oPrn:hDC ) // MODIFICADO EM: 05/05/2015 - Quebrou na Gilmaria.
MsgInfo( "ALGUMA COISA OCORREU DE ERRADO COM A IMPRESSORA.", "LIGUE A IMPRESSORA." )
oPrn:End()
RETURN( .F. )
ENDIF
oPrn:End()
IF .NOT. NETERR()
SELECT( DBRECOMPOS )
ELSE
MsgInfo( "ERRO DE REDE. Verifique!", "Confirma " )
LIBERA_TUDO()
RETURN NIL
ENDIF
cProposta := nProposta // PARA O INDICE TEMPORARIO TEM QUE SER ASSIM.
INDEX ON PROPOCOD TAG 04 TO ORCATEMP FOR ( .NOT. EOF() ) .AND. ;
( DBRECOMPOS )->PROPOCOD >= cProposta .AND. ;
( DBRECOMPOS )->PROPOCOD <= cProposta MEMORY // TEMPORARY
GO TOP
IF EOF()
MsgStop( OemToAnsi( "Nenhuma Proposta Localizada Para ImpressÆo" ), ;
OemToAnsi( "Nenhuma Proposta Localizada Para ImpressÆo" ) )
RETURN NIL
ENDIF
cAlias := ALIAS()
oImage := ".\LOGO.jpg" // tem que estar na pasta do plenoind
IF DeOndePartiu = "DIRETONAIMP" // DIRETO NA IMPRESSORA
PRINT oPrn NAME "LIMPEZA_JARDIM" // DIRETO NA IMP.
ELSEIF DeOndePartiu = "COMPREVIEWFIVE" // COM PREVIEW(Visualizacao)
PRINT oPrn NAME "LIMPEZA_JARDIM" PREVIEW MODAL
ELSEIF DeOndePartiu = "COMPREVIEWPDF" // GERAR O ARQUIVO PDF.
PRINT oPrn PREVIEW
ENDIF
DEFINE FONT oFontRua NAME "Courier New" SIZE 0, - 10 OF oPrn
DEFINE FONT oFontMin NAME "Courier New" SIZE 0, - 10 BOLD OF oPrn
DEFINE FONT oFont NAME "Courier New" SIZE 0, - 12 OF oPrn
DEFINE FONT oFontBold NAME "Courier New" SIZE 0, - 12 BOLD OF oPrn
DEFINE FONT oFontSubl NAME "Courier New" SIZE 0, - 12 BOLD UnderLine OF oPrn
DEFINE FONT oFontSub2 NAME "Courier New" SIZE 0, - 12 BOLD UnderLine OF oPrn
//-> Caneta do Preview
DEFINE PEN oPen1 WIDTH 4 COLOR CLR_BROWN OF oPrn
DEFINE PEN oPen2 WIDTH 2 COLOR CLR_BROWN OF oPrn
DEFINE PEN oPen3 WIDTH 5 COLOR CLR_BLACK OF oPrn
oPrn:SetPage( 9 ) //-> A4 //9
oPrn:SetPortrait() //-> Vertical(Retrato)
//- Como Imprimir em Centimetros sem errar e em qualquer Impressora
ResLinha := oPrn:nLogPixely()/2.54
ResColuna := oPrn:nLogPixelx()/2.54
nMargin := Int( 0.1 * oPrn:nHorzRes() )
nWidth := 8 * nMargin
nColWidth := Int( ( nWidth - nMargin ) / 2 )
nPagina := 1
PAGE
nRow := 1.50 // Linha
nCol := 650.00 // Coluna do Logo.jpg
@ nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow
nLinha := 1.00
nColuna := 18.00
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, , ;
CLR_BLACK, , PAD_CENTER )
nLinha := 3.00 // era 2.50
IF LEN( ALLTRIM( nProposta ) ) = 1
nColuna := 4.35
ELSEIF LEN( ALLTRIM( nProposta ) ) = 2
nColuna := 4.45
ELSEIF LEN( ALLTRIM( nProposta ) ) = 3
nColuna := 4.55
ELSEIF LEN( ALLTRIM( nProposta ) ) = 4 // OK
nColuna := 4.65
ELSEIF LEN( ALLTRIM( nProposta ) ) = 5 // OK
nColuna := 4.75
ELSEIF LEN( ALLTRIM( nProposta ) ) = 6 // OK
nColuna := 4.85 // 5.00 -.15
ELSEIF LEN( ALLTRIM( nProposta ) ) = 7 // OK
nColuna := 4.95
ELSEIF LEN( ALLTRIM( nProposta ) ) = 8 // OK
nColuna := 5.05
ELSEIF LEN( ALLTRIM( nProposta ) ) = 9 // OK
nColuna := 5.15
ELSEIF LEN( ALLTRIM( nProposta ) ) = 10 // OK
nColuna := 5.25
ELSE
nColuna := 5.35
ENDIF
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
"Orçamento Nº.: " + ALLTRIM( nProposta ), oFont, , ;
CLR_BLACK, , PAD_CENTER )
oPrn:cmSay( nLinha, 19.00, "" + XDATALISTA, oFontRua, , CLR_BLACK, , PAD_RIGHT )
nLinha := nLinha += 0.80
IF LEN( ALLTRIM( STR( nClienCod ) ) ) = 1
nColuna := 7.48 // 7.50
ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 2
nColuna := 7.58 // 7.60
ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 3
nColuna := 7.68 // 7.70
ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 4 // OK
nColuna := 7.78 // 7.80
ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 5
nColuna := 7.83 // 7.85
ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 6
nColuna := 7.93 // 7.95
ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 7
nColuna := 8.03 // 8.05
ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 8
nColuna := 8.13 // 8.15
ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 9
nColuna := 8.23 // 8.25
ELSEIF LEN( ALLTRIM( STR( nClienCod ) ) ) = 10
nColuna := 8.33 // 8.35
ENDIF
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ "CÓD.: " + ALLTRIM( STR( nClienCod ) ) + " - " + ClienPropo, ;
oFontRua, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.50
nColuna := 6.40 // 6.55
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ EnderPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.50
nColuna := 5.15 // 5.30
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
"BAIRRO: " + BairrPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )
nColuna := nColuna += 6.50 // 5.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
"CIDADE: " + CidadPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )
nColuna := nColuna += 4.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
"UF: " + UFdaPropo, oFontRua, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.60
nColuna := 2.85 // 2.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
"Att.: ", oFontRua, , CLR_BLACK, , PAD_CENTER )
nColuna := 7.10
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cContatoCli, oFontRua, , CLR_BLACK, , PAD_CENTER )
cOrcamento := "REF.: " // + cTPSerNome // NOME DO SERVICO
nLinha := nLinha += 1.00
nColuna := 2.95 // "REF.:" // 3.10
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cOrcamento, oFontBold, , CLR_BLACK, , PAD_CENTER )
nColuna := 7.70 // 7.70
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cTPSerNome, oFontBold, , CLR_BLACK, , PAD_CENTER )
cSublin := "REF.: " + ALLTRIM( cTPSerNome ) // TIRAR BRANCOS P/ENCAIXAR
cImpSub := LEN( cSublin ) + 1.2 // PARA SUBLINHADO.
nLinha := nLinha += 0.05 // Tiro os Brancos e Encaixo embaixo o SUBLINHADO
nColuna := 2.20 // - 2.35 -.15
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
REPLICATE( "_", cImpSub ), oFontBold , , CLR_BLACK, , PAD_LEFT )
cConforme1 := "Conforme solicitação segue proposta abaixo: "
nLinha := nLinha += 0.80
nColuna := 13.20 // -.15
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cConforme1, oFont, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.80
nColuna := 5.35
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ "01. ESCOPO DOS TRABALHOS:", oFontSub2, , CLR_BLACK, , PAD_CENTER )
// PODAS AQUI
nLinha := nLinha += 0.60
nColuna := 10.05 // 10.15 -.10
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas1, oFont, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas2, oFont, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas3, oFont, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas4, oFont, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas5, oFont, , CLR_BLACK, , PAD_CENTER )
IF .NOT. EMPTY( cPodas6 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas6, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas7 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas7, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas8 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas8, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas9 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas9, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas10 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas10, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas11 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas11, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas12 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas12, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas13 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas13, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas14 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas14, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas15 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas15, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas16 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas16, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas17 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas17, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas18 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas18, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas19 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas19, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas20 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas20, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas21 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas21, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas22 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas22, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas23 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas23, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas24 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas24, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas25 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas25, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas26 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas26, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas27 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas27, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas28 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas28, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas29 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas29, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas30 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas30, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cPodas31 )
nLinha := nLinha += 0.50
nColuna := 10.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cPodas31, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF nLinha >= 23.00 // PARA AS OBSERVACOES
nLinha := 27.00
nColuna := 10.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
oFontMin, , CLR_GREEN, , PAD_CENTER )
ENDPAGE
PAGE // NOVA PAGINA
// oPrn:SayImage( nLinLogo, nColLogo, "LOGO.JPG", nLargLogo, nAltLogo )
@ nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow
++nPagina
nLinha := 1.00
nColuna := 18.00 // 17.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, , ;
CLR_BLACK, , PAD_CENTER )
nLinha := 3.00 // 23 Linhas
ELSE
nLinha := nLinha += 0.70 // MUDEI EM: 23/09/2021 - Joao.
ENDIF
nTotalProdu := 0.00
GO TOP
WHILE( .NOT. EOF() )
SYSREFRESH()
nTotalProdu := nTotalProdu + ( cAlias )->VRVENDA * ;
( cAlias )->PRODUQTDE
SKIP
ENDDO
IF( nTotalProdu ) > 0.00
lLigaProduto := .T.
ENDIF
GO TOP
IF lLigaProduto // := .F. // STATIC NO INICIO DO MODULO
IF lImpFonte12 // := .T. // COURIER NEW 12 - 07/10/2021 Implementei.
nColuna := 2.10 // 3.20
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "C¢digo:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 5.05 // 5.84
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Produto:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 11.90
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Un:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 13.20 // 13.10
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Qtd:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 15.30
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Valor Un:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 18.70 // 18.30
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Total:" ), oFont,, CLR_BLACK,, PAD_CENTER )
ELSE // COURIR NEW 10 - 07/10/2021 - Joao
nColuna := 3.25
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "C¢digo:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 5.84 // 5.84
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Produto:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 11.75
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Un:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 13.20
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Qtd:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 15.30
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Valor Un:" ), oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 18.70
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Total:" ), oFont,, CLR_BLACK,, PAD_CENTER )
ENDIF
nLinha := nLinha += 0.60 // LINHA DOS PRODUTOS
ENDIF
GO TOP
WHILE( .NOT. EOF() )
SYSREFRESH()
IF ( cAlias )->PRODUNOME = SPACE( 30 ) // NAO MOSTRA O PRODUTO
SKIP
LOOP
ENDIF
IF lImpFonte12 // := .T. // COURIER NEW 12
nColuna := 2.50 // 3.35
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ( cAlias )->PRODUCOD, oFont,, CLR_BLACK,, PAD_CENTER )
nColuna := 7.80 // 8.00 - Estava oFontRua
// ESCOPO DOS TRABALHOS AQUI. PRODUTOS DA LIMPEZA
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ( cAlias )->PRODUNOME, oFont, , CLR_BLACK, , PAD_CENTER )
nColuna := 13.00 // 12.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ( cAlias )->PRODUUNID, oFont, , CLR_BLACK, , PAD_CENTER )
nColuna := 13.70
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( ( cAlias )->PRODUQTDE, "@ 99999" ) ), ;
oFont,, CLR_BLACK,, PAD_RIGHT )
nColuna := 16.40 // 16.00
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( ( cAlias )->VRVENDA, "@E 99,999.99" ) ), ;
oFont,, CLR_BLACK,, PAD_RIGHT )
nColuna := 19.50 // 19.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( ( cAlias )->VRTOTAL, "@E 9,999,999.99" ) ), ;
oFont,, CLR_BLACK,, PAD_RIGHT )
ELSE // COURIER NEW 10
nColuna := 3.40 // 3.35
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ( cAlias )->PRODUCOD, oFontRua,, CLR_BLACK,, PAD_CENTER )
nColuna := 8.00
// ESCOPO DOS TRABALHOS AQUI. PRODUTOS DA LIMPEZA
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ( cAlias )->PRODUNOME, oFontRua, , CLR_BLACK, , PAD_CENTER )
nColuna := 12.50 // 12.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ( cAlias )->PRODUUNID, oFontRua, , CLR_BLACK, , PAD_CENTER )
nColuna := 13.70
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( ( cAlias )->PRODUQTDE, "@ 99999" ) ), ;
oFontRua,, CLR_BLACK,, PAD_RIGHT )
nColuna := 16.30
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( ( cAlias )->VRVENDA, "@E 99,999.99" ) ), ;
oFontRua,, CLR_BLACK,, PAD_RIGHT )
nColuna := 19.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( ( cAlias )->VRTOTAL, "@E 9,999,999.99" ) ), ;
oFontRua,, CLR_BLACK,, PAD_RIGHT )
ENDIF // FIM DA COURIER NEW 10
SKIP
IF nLinha >= 23.00 // PARA AS OBSERVACOES/ ACHO QUE ENTRARA NO WHILE DOS PRODUTOS
nLinha := 27.00
nColuna := 10.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
oFontMin, , CLR_GREEN, , PAD_CENTER )
ENDPAGE
PAGE // NOVA PAGINA
// CONFIGURACAO ESTA EM: AMBLOGO.DBF
// oPrn:SayImage( nLinLogo, nColLogo, "LOGO.JPG", nLargLogo, nAltLogo )
@ nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow
++nPagina
nLinha := 1.00
nColuna := 18.00 // 18.00
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, , ;
CLR_BLACK, , PAD_CENTER )
nLinha := 3.00
ENDIF
nLinha := nLinha += 0.50
ENDDO
cProdutos := "Produtos: "
IF lLigaProduto // := .F. // SE TIVER PRODUTOS
IF nLinha # 3.00
nLinha := nLinha += 0.40
ENDIF
nColuna := 4.00
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cProdutos, oFont, , CLR_BLACK, , PAD_CENTER )
nColuna := 4.70 // 4.60
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
REPLICATE( ".", 046 ), oFont, , CLR_BLACK, , PAD_LEFT )
nColuna := 15.56
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ " ", oFont, , CLR_BLACK, , PAD_CENTER )
nColuna := 19.50
IF lImpFonte12 // := .T. // COURIER NEW 12 - 07/10/2021 Implementei.
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( nTotalProdu, "@E 9,999,999.99" ) ), ;
oFont, , CLR_BLACK, , PAD_RIGHT )
ELSE
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( nTotalProdu, "@E 9,999,999.99" ) ), ;
oFontRua, , CLR_BLACK, , PAD_RIGHT )
ENDIF
ENDIF
cMaoObra := "Mão de Obra: "
IF( nVrUnSer ) > 0.00
nLinha := nLinha += 0.50
nColuna := 4.00
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cMaoObra, oFont, , CLR_BLACK, , PAD_CENTER )
nColuna := 5.45
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
REPLICATE( ".", 043 ), oFont, , CLR_BLACK, , PAD_LEFT )
nColuna := 15.56
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ " ", oFont, , CLR_BLACK, , PAD_CENTER )
nColuna := 19.50
IF lImpFonte12 // := .T. // COURIER NEW 12 - 07/10/2021 Implementei.
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( nVrUnSer, "@E 9,999,999.99" ) ), ;
oFont, , CLR_BLACK, , PAD_RIGHT )
ELSE
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( nVrUnSer, "@E 9,999,999.99" ) ), ;
oFontRua, , CLR_BLACK, , PAD_RIGHT )
ENDIF
ENDIF
IF nDesconto > 0.00
nLinha := nLinha += 0.50
nColuna := 3.60
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Desconto: " ), oFont, , CLR_BLACK, , PAD_CENTER )
nColuna := 4.65
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
REPLICATE( ".", 046 ), oFont, , CLR_BLACK, , PAD_LEFT )
nColuna := 19.50
IF lImpFonte12 // := .T. // COURIER NEW 12 - 07/10/2021 Implementei.
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( nDesconto, "@E 999,999.99" ) ), ;
oFont, , CLR_BLACK, , PAD_RIGHT )
ELSE
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( nDesconto, "@E 999,999.99" ) ), ;
oFontRua, , CLR_BLACK, , PAD_RIGHT )
ENDIF
nValorTotal := 0.00
nDesconto := 0.00 // INCLUIDO EM: 04/09/2019
nTotalNfe := 0.00
GO TOP
WHILE( .NOT. EOF() )
SYSREFRESH()
nDesconto := nDesconto + VRDESCONTO
SKIP
ENDDO
GO TOP
WHILE( .NOT. EOF() )
SYSREFRESH()
nTotalNfe := nTotalNfe + ( cAlias )->VRVENDA * ;
( cAlias )->PRODUQTDE + ;
( cAlias )->VRUNSER
SKIP
ENDDO
nValorTotal := nTotalNfe - nDesconto // - nDesconto // somente se a Fernanda disser que sim
ENDIF
nLinha := nLinha += 1.00
nColuna := 3.45
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "02. TOTAL:" ), oFontSub2, , CLR_BLACK, , PAD_CENTER )
nVal := nValorTotal // lDin
EXTENSO( nVal, 50, WE1, WE2, WE3 )
nLinha := nLinha += 0.70
nColuna := 3.60 // 3.75
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "R$ " ), oFont, , CLR_BLACK, , PAD_CENTER )
nColuna := nColuna += 0.60
IF WE2 # SPACE( 50 )
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( nValorTotal, "@E 999,999,999.99" ) ) + " (" + ;
ALLTRIM( WE1 ), oFont, , CLR_BLACK, , PAD_LEFT )
IF WE2 # SPACE( 50 )
nLinha := nLinha += 0.50
nColuna := nColuna += 2.60
IF WE3 = SPACE( 50 )
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( WE2 ) + ").", oFont, , CLR_BLACK, , PAD_LEFT )
ELSE
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( WE2 ), oFont, , CLR_BLACK, , PAD_LEFT )
ENDIF
ENDIF
IF WE3 # SPACE( 50 )
nLinha := nLinha += 0.50
nColuna := nColuna += 2.60
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( WE3 ) + ").", oFont, , CLR_BLACK, , PAD_LEFT )
ENDIF
ELSE // - < QUE 50 CARACTERES.
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ ALLTRIM( TRANS( nValorTotal, "@E 999,999,999.99" ) ) + " (" + ;
ALLTRIM( WE1 ) + ").", oFont, , CLR_BLACK, , PAD_LEFT )
ENDIF
IF nLinha >= 23.00 // PARA AS OBSERVACOES/ ACHO QUE ENTRARA NO WHILE DOS PRODUTOS
nLinha := 27.00
nColuna := 10.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
oFontMin, , CLR_GREEN, , PAD_CENTER )
ENDPAGE
PAGE // NOVA PAGINA
// CONFIGURACAO ESTA EM: AMBLOGO.DBF
// oPrn:SayImage( nLinLogo, nColLogo, "LOGO.JPG", nLargLogo, nAltLogo )
@ nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow
++nPagina
nLinha := 1.00
nColuna := 18.00 // 18.00
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, , ;
CLR_BLACK, , PAD_CENTER )
nLinha := 3.00
ENDIF
IF nLinha # 3.00
nLinha := nLinha += 0.80
ENDIF
nColuna := 5.61
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "03. CONDIیES DE PAGAMENTO:" ), ;
oFontSub2, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.60
nColuna := 3.20
// cCondPagto pode alterar no dialogo, Lucia pediu edicao - OK
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cCondPagto, oFont, , CLR_BLACK, , PAD_LEFT )
// OBSERVACOES AQUI - DEPENDENDO DO TAMANHO DO TEXTO FICA NA MESMA PAG. Joao
IF .NOT. EMPTY( cObserva1 )
nLinha := nLinha += 0.80
nColuna := 4.075 // 4.15
// ter opcao de alterar
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "04. OBSERVAۂO:" ), ;
oFontSub2, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.60
nColuna := 10.95 // 11.05 -.10
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva1, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva2 )
nLinha := nLinha += 0.50
nColuna := 10.95 //10.55
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva2, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva3 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva3, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva4 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva4, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva5 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva5, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva6 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva6, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva7 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva7, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva8 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva8, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva9 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva9, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva10 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva10, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva11 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva11, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva12 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva12, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva13 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva13, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF nLinha >= 23.00 // PARA AS OBSERVACOES
nLinha := 27.00
nColuna := 10.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
oFontMin, , CLR_GREEN, , PAD_CENTER )
ENDPAGE
PAGE // NOVA PAGINA
@ nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow
++nPagina
nLinha := 1.00
nColuna := 18.00 // 18.00
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, , ;
CLR_BLACK, , PAD_CENTER )
nLinha := 3.00
ENDIF
IF nLinha # 3.00
nLinha := nLinha += 0.50
ENDIF
IF .NOT. EMPTY( cObserva14 )
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva14, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva15 )
nLinha := nLinha += 0.50
nColuna := 10.95
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva15, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF .NOT. EMPTY( cObserva16 )
nLinha := nLinha += 0.50
nColuna := 10.95 // 11.05
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cObserva16, oFont, , CLR_BLACK, , PAD_CENTER )
ENDIF
IF nLinha >= 23.00 // PARA AS OBSERVACOES/ ACHO QUE ENTRARA NO WHILE DOS PRODUTOS
nLinha := 27.00
nColuna := 10.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
oFontMin, , CLR_GREEN, , PAD_CENTER )
ENDPAGE
PAGE // NOVA PAGINA
@ nLinLogo, nColLogo PRINT TO oPrn IMAGE "LOGO.JPG" SIZE nLargLogo, nAltLogo LASTROW nRow
++nPagina
nLinha := 1.00
nColuna := 18.00
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
OemToAnsi( "P g.: " + ALLTRIM( STRZERO( nPagina, 2 ) ) ), oFont, , ;
CLR_BLACK, , PAD_CENTER )
nLinha := 3.00
ENDIF
IF nLinha # 3.00
nLinha := nLinha += 1.00
ENDIF
// INCLUIDO EM: 24/09/2021 VALIDADE DA PROPOSTA. Leda pediu.
IF .NOT. EMPTY( cValidade ) // Lucia ajudou a melhorar.
nColuna := 4.88
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "05. PRAZO DE VALIDADE" ), ;
oFontSub2, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.60
nColuna := 9.60 // 9.70
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ cValidade, oFont, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 1.00
ENDIF
nColuna := 12.90
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Sem mais, " ), ;
oFont, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.80
nColuna := 4.80 // 2.90
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, + cAssinaProp, ;
oFontBold, , CLR_BLACK, , PAD_CENTER )
nLinha := nLinha += 0.80
nColuna := 7.20 // 5.20
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ SUBST( WNOMEEMPRESA, 1, 20 ) + SPACE( 19 ), ;
oFont, , CLR_BLACK, , PAD_CENTER )
nLinha := 27.00
nColuna := 10.50
oPrn:Say( nLinha * ResLinha, nColuna * ResColuna, ;
+ OemToAnsi( "Rua Fl¢rio, 271 Ch cara Mafalda-SÆo Paulo-SP CEP: 03372-050 Tel: 2674-3173 www.ambienty.com.br" ), ;
oFontMin, , CLR_GREEN, , PAD_CENTER )
// Called from: PRINTER.prg => PAGEEND( 0 ) // 64 bits MEMORIA
ENDPAGE
ENDPRINT
IF DeOndePartiu = "COMPREVIEWPDF"
oDlgBtn:End()
FWSavePreviewToPDF( oPrn, "LIMPEZA.PDF", .F. )
PDF_SALVO_EM_ORCAMPDF() // ESTA EM FUNCOES.PRG 23/11/2020 Joao
HTMLVIEW( "C:\ORCAMPDF\LIMPEZA.PDF" )
ENDIF
oFont:End()
oFontBold:End()
oFontSubl:End()
oFontMin:End()
oFontSub2:End()
oFontRua:End()
oPen1:End()
oPen2:End()
oPen3:End()
lFechaJan := .F.
lFechaWin := .F.
lLigaProduto := .F.
OrdDestroy( "ORCATEMP" )
lLigaProduto := .F.
RETURN NIL
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
//ACTIVAMOS LAS FUNCIONES DE HARUPDF
TPrinter():lUseHaruPDF := .t.
Code: Select all | Expand
//ACTIVAMOS LAS FUNCIONES DE HARUPDF
TPrinter():lUseHaruPDF := .t.
Code: Select all | Expand
#include "fivewin.ch"
#include "easyrep.ch"
REQUEST FWHARU // required for using HaruPdf
function Main()
LOCAL oVRD
LOCAL nSeite := 0
LOCAL nIdx := 0
LOCAL I := 0
LOCAL nRg := 0
Local aCust := {}
USE CUSTOMER
aCust := FW_DbfToArray()
TPrinter():lUseHaruPDF := .t.
EASYREPORT oVRD NAME "erep01\states.vrd" TO "Microsoft Print to PDF" PREVIEW (.F.) FILE "erep01.pdf"
PRINTAREA 1 OF oVRD ;
ITEMIDS { 101, 102 } ;
ITEMVALUES { "Report with array", DToC( Date() ) }
PRINTAREA 2 OF oVRD;
ITEMIDS { 100 } ;
ITEMVALUES { "Anyone have a sample how i can relationate 2 arrays (masterdata/detail) and pass to fastreport?" }
PRINTAREA 7 OF oVRD
FOR I := 1 TO 20
PRINTAREA 4 OF oVRD ;
ITEMIDS { 102, 103, 104, 105 } ;
ITEMVALUES { aCust[I][2], aCust[I][3], aCust[I][4], aCust[I][5] }
nRg++
IF oVRD:nNextRow > oVRD:nPageBreak
PAGEBREAK oVRD
ENDIF
NEXT
PRINTAREA 6 OF oVRD
PRINTAREA 5 OF oVRD ITEMIDS { 100 } ITEMVALUES { "Numero de registros "+cvaltochar(nRg) }
oVRD:End()
return nil
Code: Select all | Expand
Application
===========
Path and name: C:\fwh64_2501\samples\leandro5.exe (64 bits)
Size: 6,721,024 bytes
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250219)
FiveWin version: FWH 25.01
C compiler version: LLVM/Clang C 5.0.2 (64-bit)
Windows 8 64 Bits, version: 6.2, Build 9200
Time from start: 0 hours 0 mins 0 secs
Error occurred at: 04/08/25, 16:53:27
Error description: Warning BASE/1004 Message not found: FWPDF:SETCOPIES
Stack Calls
===========
Called from: source\rtl\tobject.prg => FWPDF:ERROR( 0 )
Called from: source\rtl\tobject.prg => FWPDF:MSGNOTFOUND( 0 )
Called from: source\rtl\tobject.prg => FWPDF:SETCOPIES( 0 )
Called from: .\source\classes\esreport.prg => FW_EREPORT:NEW( 356 )
Called from: leandro5.prg => MAIN( 20 )
System
======
Hardware memory: 32510 megs
Free System resources: 90 %
GDI resources: 90 %
User resources: 90 %
Windows total applications running: 1
1 ,
Variables in use
================
Procedure Type Value
==========================
FWPDF:ERROR
Param 1: C "Message not found"
Param 2: C "FWPDF"
Param 3: C "SETCOPIES"
Param 4: N 1004
Local 1: U
Local 2: O Class: FWPDF
Local 3: N 13
FWPDF:MSGNOTFOUND
Param 1: C "SETCOPIES"
Param 2: O Class: FWPDF
FWPDF:SETCOPIES
Param 1: N 1
FW_EREPORT:NEW
Param 1: C "erep01\states.vrd"
Param 2: L .F.
Param 3: C "Microsoft Print to PDF"
Param 4: U
Param 5: L .F.
Param 6: L .F.
Param 7: L .F.
Param 8: L .F.
Param 9: C ""
Param 10: L .F.
Param 11: N 1
Param 12: L .F.
Param 13: U
Param 14: U
Param 15: U
Param 16: C ""
Param 17: L .F.
Param 18: U
Param 19: C "erep01.pdf"
Local 1: O Class: FW_EREPORT
Local 2: U
Local 3: U
Local 4: U
Local 5: O Class: TFONT
Local 6: O Class: TFONT
Local 7: U
Local 8: A Len: 24
Local 9: A Len: 3
Local 10: A Len: 3
Local 11: U
Local 12: U
Local 13: U
Local 14: U
Local 15: N 0
MAIN
Local 1: U
Local 2: N 0
Local 3: N 0
Local 4: N 0
Local 5: N 0
Local 6: A Len: 500
Linked RDDs
===========
DBF
DBFFPT
DBFBLOB
DBFCDX
DBFNTX
DataBases in use
================
1: => CUSTOMER RddName: DBFNTX
==============================
RecNo RecCount BOF EOF
1 500 .F. .F.
Indexes in use TagName
Relations in use
Classes in use:
===============
1 ERROR
2 HASHENTRY
3 HBCLASS
4 HBOBJECT
5 TPRINTER
6 FW_EREPORT
7 TEXSTRUCT
8 TFONT
9 TWINDOW
10 TDIALOG
11 TBRUSH
12 TCONTROL
13 TSAY
14 TBUTTON
15 TREG32
16 TRECT
17 TPDF
18 FWPDF
Memory Analysis
===============
749 Static variables
Dynamic memory consume:
Actual Value: 0 bytes
Highest Value: 0 bytes
Code: Select all | Expand
#include "fivewin.ch"
#include "easyrep.ch"
REQUEST FWHARU // required for using HaruPdf
function Main()
LOCAL oVRD
LOCAL nSeite := 0
LOCAL nIdx := 0
LOCAL I := 0
LOCAL nRg := 0
Local aCust := {}
USE CUSTOMER
aCust := FW_DbfToArray()
TPrinter():lUseHaruPDF := .t.
EASYREPORT oVRD NAME "erep01\states.vrd" TO "Microsoft Print to PDF" PREVIEW (.F.) FILE "erep01.pdf"
PRINTAREA 1 OF oVRD ;
ITEMIDS { 101, 102 } ;
ITEMVALUES { "Report with array", DToC( Date() ) }
PRINTAREA 2 OF oVRD;
ITEMIDS { 100 } ;
ITEMVALUES { "Anyone have a sample how i can relationate 2 arrays (masterdata/detail) and pass to fastreport?" }
PRINTAREA 7 OF oVRD
FOR I := 1 TO 20
PRINTAREA 4 OF oVRD ;
ITEMIDS { 102, 103, 104, 105 } ;
ITEMVALUES { aCust[I][2], aCust[I][3], aCust[I][4], aCust[I][5] }
nRg++
IF oVRD:nNextRow > oVRD:nPageBreak
PAGEBREAK oVRD
ENDIF
NEXT
PRINTAREA 6 OF oVRD
PRINTAREA 5 OF oVRD ITEMIDS { 100 } ITEMVALUES { "Numero de registros "+cvaltochar(nRg) }
oVRD:End()
return nil
Code: Select all | Expand
Application
===========
Path and name: C:\fwh64_2501\samples\leandro5.exe (64 bits)
Size: 6,721,024 bytes
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250219)
FiveWin version: FWH 25.01
C compiler version: LLVM/Clang C 5.0.2 (64-bit)
Windows 8 64 Bits, version: 6.2, Build 9200
Time from start: 0 hours 0 mins 0 secs
Error occurred at: 04/08/25, 16:53:27
Error description: Warning BASE/1004 Message not found: FWPDF:SETCOPIES
Stack Calls
===========
Called from: source\rtl\tobject.prg => FWPDF:ERROR( 0 )
Called from: source\rtl\tobject.prg => FWPDF:MSGNOTFOUND( 0 )
Called from: source\rtl\tobject.prg => FWPDF:SETCOPIES( 0 )
Called from: .\source\classes\esreport.prg => FW_EREPORT:NEW( 356 )
Called from: leandro5.prg => MAIN( 20 )
System
======
Hardware memory: 32510 megs
Free System resources: 90 %
GDI resources: 90 %
User resources: 90 %
Windows total applications running: 1
1 ,
Variables in use
================
Procedure Type Value
==========================
FWPDF:ERROR
Param 1: C "Message not found"
Param 2: C "FWPDF"
Param 3: C "SETCOPIES"
Param 4: N 1004
Local 1: U
Local 2: O Class: FWPDF
Local 3: N 13
FWPDF:MSGNOTFOUND
Param 1: C "SETCOPIES"
Param 2: O Class: FWPDF
FWPDF:SETCOPIES
Param 1: N 1
FW_EREPORT:NEW
Param 1: C "erep01\states.vrd"
Param 2: L .F.
Param 3: C "Microsoft Print to PDF"
Param 4: U
Param 5: L .F.
Param 6: L .F.
Param 7: L .F.
Param 8: L .F.
Param 9: C ""
Param 10: L .F.
Param 11: N 1
Param 12: L .F.
Param 13: U
Param 14: U
Param 15: U
Param 16: C ""
Param 17: L .F.
Param 18: U
Param 19: C "erep01.pdf"
Local 1: O Class: FW_EREPORT
Local 2: U
Local 3: U
Local 4: U
Local 5: O Class: TFONT
Local 6: O Class: TFONT
Local 7: U
Local 8: A Len: 24
Local 9: A Len: 3
Local 10: A Len: 3
Local 11: U
Local 12: U
Local 13: U
Local 14: U
Local 15: N 0
MAIN
Local 1: U
Local 2: N 0
Local 3: N 0
Local 4: N 0
Local 5: N 0
Local 6: A Len: 500
Linked RDDs
===========
DBF
DBFFPT
DBFBLOB
DBFCDX
DBFNTX
DataBases in use
================
1: => CUSTOMER RddName: DBFNTX
==============================
RecNo RecCount BOF EOF
1 500 .F. .F.
Indexes in use TagName
Relations in use
Classes in use:
===============
1 ERROR
2 HASHENTRY
3 HBCLASS
4 HBOBJECT
5 TPRINTER
6 FW_EREPORT
7 TEXSTRUCT
8 TFONT
9 TWINDOW
10 TDIALOG
11 TBRUSH
12 TCONTROL
13 TSAY
14 TBUTTON
15 TREG32
16 TRECT
17 TPDF
18 FWPDF
Memory Analysis
===============
749 Static variables
Dynamic memory consume:
Actual Value: 0 bytes
Highest Value: 0 bytes
Es mas, no tengo ni idea que te refieres con esto.Se puede implementar de momento como VIRTUAL
Es mas, no tengo ni idea que te refieres con esto.Se puede implementar de momento como VIRTUAL
Si porfa.Implementado, te envío librerias para xHarbour 64 y Borland ?
Si porfa.Implementado, te envío librerias para xHarbour 64 y Borland ?
Code: Select all | Expand
Application
===========
Path and name: C:\fwh64_2501\samples\leandro5.exe (64 bits)
Size: 6,702,592 bytes
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250219)
FiveWin version: FWH 25.01
C compiler version: LLVM/Clang C 5.0.2 (64-bit)
Windows 8 64 Bits, version: 6.2, Build 9200
Time from start: 0 hours 0 mins 0 secs
Error occurred at: 04/12/25, 10:32:53
Error description: Warning BASE/1004 Message not found: FWPDF:HDCOUT
Stack Calls
===========
Called from: source\rtl\tobject.prg => FWPDF:ERROR( 0 )
Called from: source\rtl\tobject.prg => FWPDF:MSGNOTFOUND( 0 )
Called from: source\rtl\tobject.prg => FWPDF:HDCOUT( 0 )
Called from: .\source\classes\esreport.prg => FW_EREPORT:SAY( 805 )
Called from: .\source\classes\esreport.prg => FW_EREPORT:PRINTITEM( 951 )
Called from: .\source\classes\esreport.prg => (b)FW_EREPORT:PRINTITEMLIST( 1332 )
Called from: => AEVAL( 0 )
Called from: .\source\classes\esreport.prg => FW_EREPORT:PRINTITEMLIST( 1332 )
Called from: .\source\classes\esreport.prg => FW_EREPORT:AREASTART2( 756 )
Called from: .\source\classes\esreport.prg => FW_EREPORT:AREASTART( 639 )
Called from: leandro5.prg => MAIN( 24 )
System
======
Hardware memory: 32510 megs
Free System resources: 90 %
GDI resources: 90 %
User resources: 90 %
Windows total applications running: 1
1 ,
Variables in use
================
Procedure Type Value
==========================
FWPDF:ERROR
Param 1: C "Message not found"
Param 2: C "FWPDF"
Param 3: C "HDCOUT"
Param 4: N 1004
Local 1: U
Local 2: O Class: FWPDF
Local 3: N 13
FWPDF:MSGNOTFOUND
Param 1: C "HDCOUT"
Local 1: O Class: FWPDF
FWPDF:HDCOUT
FW_EREPORT:SAY
Param 1: N 36.8504
Param 2: N 82.2047
Param 3: C "Report with array"
Param 4: A Len: 3
Param 5: N 155.9055
Param 6: N 10485760
Param 7: N 1
Param 8: N 0
Local 1: O Class: FW_EREPORT
Local 2: U
Local 3: A Len: 3
FW_EREPORT:PRINTITEM
Param 1: N 1
Param 2: N 101
Param 3: C "Report with array"
Param 4: N 0
Local 1: L .F.
Local 2: N 0
Local 3: O Class: FW_EREPORT
Local 4: N 0
Local 5: A Len: 3
Local 6: U
Local 7: N 29
Local 8: U
Local 9: N 13
Local 10: U
Local 11: U
Local 12: U
Local 13: U
Local 14: U
Local 15: U
Local 16: U
Local 17: U
Local 18: U
Local 19: U
Local 20: C "Customer "
Local 21: U
Local 22: U
Local 23: U
Local 24: L .F.
Local 25: C "400"
Local 26: C "TEXT|Customer |101|1|1|1|3|9|55|7|8|1|2|1|0|0||0||||||||||||||0|0.20"
Local 27: O Class: FWER_ITEM
Local 28: N 10
Local 29: N 10
Local 30: L .F.
Local 31: N 1
(b)FW_EREPORT:PRINTITEMLIST
Param 1: N 101
Param 2: N 1
AEVAL
Param 1: A Len: 2
Param 2: B {|| ... }
FW_EREPORT:PRINTITEMLIST
Param 1: N 1
Param 2: A Len: 2
Param 3: A Len: 2
Local 1: U
Local 2: O Class: FW_EREPORT
FW_EREPORT:AREASTART2
Param 1: N 1
Param 2: L .T.
Param 3: A Len: 2
Param 4: A Len: 2
Param 5: L .F.
Local 1: O Class: FW_EREPORT
Local 2: N 10
Local 3: N 10
Local 4: L .F.
FW_EREPORT:AREASTART
Param 1: N 1
Param 2: U
Param 3: A Len: 2
Param 4: A Len: 2
Param 5: L .F.
Local 1: O Class: FW_EREPORT
Local 2: N 1
Local 3: N 1
Local 4: N 1
Local 5: N 0
Local 6: N 0
MAIN
Local 1: O Class: FW_EREPORT
Local 2: N 0
Local 3: N 0
Local 4: N 0
Local 5: N 0
Local 6: A Len: 500
Linked RDDs
===========
DBF
DBFFPT
DBFBLOB
DBFCDX
DBFNTX
DataBases in use
================
1: => CUSTOMER RddName: DBFNTX
==============================
RecNo RecCount BOF EOF
1 500 .F. .F.
Indexes in use TagName
Relations in use
Classes in use:
===============
1 ERROR
2 HASHENTRY
3 HBCLASS
4 HBOBJECT
5 TPRINTER
6 FW_EREPORT
7 TEXSTRUCT
8 TFONT
9 TWINDOW
10 TDIALOG
11 TBRUSH
12 TCONTROL
13 TSAY
14 TBUTTON
15 TREG32
16 TRECT
17 TPDF
18 FWPDF
19 FWER_ITEM
Memory Analysis
===============
745 Static variables
Dynamic memory consume:
Actual Value: 0 bytes
Highest Value: 0 bytes
Code: Select all | Expand
Application
===========
Path and name: C:\fwh64_2501\samples\leandro5.exe (64 bits)
Size: 6,702,592 bytes
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250219)
FiveWin version: FWH 25.01
C compiler version: LLVM/Clang C 5.0.2 (64-bit)
Windows 8 64 Bits, version: 6.2, Build 9200
Time from start: 0 hours 0 mins 0 secs
Error occurred at: 04/12/25, 10:32:53
Error description: Warning BASE/1004 Message not found: FWPDF:HDCOUT
Stack Calls
===========
Called from: source\rtl\tobject.prg => FWPDF:ERROR( 0 )
Called from: source\rtl\tobject.prg => FWPDF:MSGNOTFOUND( 0 )
Called from: source\rtl\tobject.prg => FWPDF:HDCOUT( 0 )
Called from: .\source\classes\esreport.prg => FW_EREPORT:SAY( 805 )
Called from: .\source\classes\esreport.prg => FW_EREPORT:PRINTITEM( 951 )
Called from: .\source\classes\esreport.prg => (b)FW_EREPORT:PRINTITEMLIST( 1332 )
Called from: => AEVAL( 0 )
Called from: .\source\classes\esreport.prg => FW_EREPORT:PRINTITEMLIST( 1332 )
Called from: .\source\classes\esreport.prg => FW_EREPORT:AREASTART2( 756 )
Called from: .\source\classes\esreport.prg => FW_EREPORT:AREASTART( 639 )
Called from: leandro5.prg => MAIN( 24 )
System
======
Hardware memory: 32510 megs
Free System resources: 90 %
GDI resources: 90 %
User resources: 90 %
Windows total applications running: 1
1 ,
Variables in use
================
Procedure Type Value
==========================
FWPDF:ERROR
Param 1: C "Message not found"
Param 2: C "FWPDF"
Param 3: C "HDCOUT"
Param 4: N 1004
Local 1: U
Local 2: O Class: FWPDF
Local 3: N 13
FWPDF:MSGNOTFOUND
Param 1: C "HDCOUT"
Local 1: O Class: FWPDF
FWPDF:HDCOUT
FW_EREPORT:SAY
Param 1: N 36.8504
Param 2: N 82.2047
Param 3: C "Report with array"
Param 4: A Len: 3
Param 5: N 155.9055
Param 6: N 10485760
Param 7: N 1
Param 8: N 0
Local 1: O Class: FW_EREPORT
Local 2: U
Local 3: A Len: 3
FW_EREPORT:PRINTITEM
Param 1: N 1
Param 2: N 101
Param 3: C "Report with array"
Param 4: N 0
Local 1: L .F.
Local 2: N 0
Local 3: O Class: FW_EREPORT
Local 4: N 0
Local 5: A Len: 3
Local 6: U
Local 7: N 29
Local 8: U
Local 9: N 13
Local 10: U
Local 11: U
Local 12: U
Local 13: U
Local 14: U
Local 15: U
Local 16: U
Local 17: U
Local 18: U
Local 19: U
Local 20: C "Customer "
Local 21: U
Local 22: U
Local 23: U
Local 24: L .F.
Local 25: C "400"
Local 26: C "TEXT|Customer |101|1|1|1|3|9|55|7|8|1|2|1|0|0||0||||||||||||||0|0.20"
Local 27: O Class: FWER_ITEM
Local 28: N 10
Local 29: N 10
Local 30: L .F.
Local 31: N 1
(b)FW_EREPORT:PRINTITEMLIST
Param 1: N 101
Param 2: N 1
AEVAL
Param 1: A Len: 2
Param 2: B {|| ... }
FW_EREPORT:PRINTITEMLIST
Param 1: N 1
Param 2: A Len: 2
Param 3: A Len: 2
Local 1: U
Local 2: O Class: FW_EREPORT
FW_EREPORT:AREASTART2
Param 1: N 1
Param 2: L .T.
Param 3: A Len: 2
Param 4: A Len: 2
Param 5: L .F.
Local 1: O Class: FW_EREPORT
Local 2: N 10
Local 3: N 10
Local 4: L .F.
FW_EREPORT:AREASTART
Param 1: N 1
Param 2: U
Param 3: A Len: 2
Param 4: A Len: 2
Param 5: L .F.
Local 1: O Class: FW_EREPORT
Local 2: N 1
Local 3: N 1
Local 4: N 1
Local 5: N 0
Local 6: N 0
MAIN
Local 1: O Class: FW_EREPORT
Local 2: N 0
Local 3: N 0
Local 4: N 0
Local 5: N 0
Local 6: A Len: 500
Linked RDDs
===========
DBF
DBFFPT
DBFBLOB
DBFCDX
DBFNTX
DataBases in use
================
1: => CUSTOMER RddName: DBFNTX
==============================
RecNo RecCount BOF EOF
1 500 .F. .F.
Indexes in use TagName
Relations in use
Classes in use:
===============
1 ERROR
2 HASHENTRY
3 HBCLASS
4 HBOBJECT
5 TPRINTER
6 FW_EREPORT
7 TEXSTRUCT
8 TFONT
9 TWINDOW
10 TDIALOG
11 TBRUSH
12 TCONTROL
13 TSAY
14 TBUTTON
15 TREG32
16 TRECT
17 TPDF
18 FWPDF
19 FWER_ITEM
Memory Analysis
===============
745 Static variables
Dynamic memory consume:
Actual Value: 0 bytes
Highest Value: 0 bytes
]]>cnavarro wrote: Tue Apr 08, 2025 10:30 pm Hola,
A partir de ahora, la descarga se podrá realizar en la siguiente url
https://github.com/cristobalnavarro/Tes ... ivedit.zip
Por favor informen de los problemas que puedan encontrar
Es posible que el explorador les indique "Descarga sospechosa", ignoren dicho mensaje debido a que el .zip contiene ficheros .exe y .dll
Saludos
]]>cnavarro wrote: Tue Apr 08, 2025 10:30 pm Hola,
A partir de ahora, la descarga se podrá realizar en la siguiente url
https://github.com/cristobalnavarro/Tes ... ivedit.zip
Por favor informen de los problemas que puedan encontrar
Es posible que el explorador les indique "Descarga sospechosa", ignoren dicho mensaje debido a que el .zip contiene ficheros .exe y .dll
Saludos
Code: Select all | Expand
ALTER TABLE `mibase`.`mitabla` AUTO_INCREMENT=500;
Code: Select all | Expand
UPDATE mitabla SET id = id +60 ORDER BY id DESC
Code: Select all | Expand
ALTER TABLE `mibase`.`mitabla` AUTO_INCREMENT=500;
Code: Select all | Expand
UPDATE mitabla SET id = id +60 ORDER BY id DESC
Code: Select all | Expand
#include "FiveWin.ch"
*
function Main()
aFiles:={}
cusuario:="user"
cpassword:="pass"
cftpsite:="dominio.com"
oCon:=Turl():New("ftp://"+cusuario+":"+cpassword+"@"+cftpsite)
oFTP:= TIpClientFtp():New(oCon, .f.)
oFTP:open()
aFiles:=oFtp:ListFiles("data\*.*")
If Len(aFiles)=0
msgstop("No se pudo","Acceso FTP")
Else
xBrowse(aFiles)
endif
oftp:close()
Return nil
Code: Select all | Expand
#include "FiveWin.ch"
*
function Main()
aFiles:={}
cusuario:="user"
cpassword:="pass"
cftpsite:="dominio.com"
oCon:=Turl():New("ftp://"+cusuario+":"+cpassword+"@"+cftpsite)
oFTP:= TIpClientFtp():New(oCon, .f.)
oFTP:open()
aFiles:=oFtp:ListFiles("data\*.*")
If Len(aFiles)=0
msgstop("No se pudo","Acceso FTP")
Else
xBrowse(aFiles)
endif
oftp:close()
Return nil
Code: Select all | Expand
FUNCTION Main()
LOCAL aFiles:={}, cusuario:="user@dominio.com", cpassword:="pass", cftpsite:="ftp://dominio.com", oUrl
oUrl := tUrl():New( cftpsite )
oUrl:cUserid := cusuario
oUrl:cPassword := cpassword
oFTP := tIPClientFtp():New( oUrl, .t. )
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .t.
oFtp:bTrace := {|| nil}
oFTP:Open()
IF oFtp <> NIL
aFiles:=oFtp:ListFiles("data\*.*")
xbrowse(aFiles)
ENDIF
RETURN nil
]]>Code: Select all | Expand
FUNCTION Main()
LOCAL aFiles:={}, cusuario:="user@dominio.com", cpassword:="pass", cftpsite:="ftp://dominio.com", oUrl
oUrl := tUrl():New( cftpsite )
oUrl:cUserid := cusuario
oUrl:cPassword := cpassword
oFTP := tIPClientFtp():New( oUrl, .t. )
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .t.
oFtp:bTrace := {|| nil}
oFTP:Open()
IF oFtp <> NIL
aFiles:=oFtp:ListFiles("data\*.*")
xbrowse(aFiles)
ENDIF
RETURN nil
]]>Code: Select all | Expand
FUNCTION Main()
LOCAL aFiles:={}, cusuario:="user@dominio.com", cpassword:="pass", cftpsite:="ftp://dominio.com", oUrl, oCredentials
oUrl := tUrl():New( cftpsite )
oCredentials := tIPCredentials():New()
oCredentials:cUserid := cusuario
oCredentials:cPassword := cpassword
oFTP := tIPClientFtp():New( oUrl, .t., oCredentials )
oFTP:nConnTimeout := 20000
oFTP:Open()
IF oFtp <> NIL
aFiles:=oFtp:ListFiles("data\*.*")
xbrowse(aFiles)
ENDIF
RETURN nil
Code: Select all | Expand
FUNCTION Main()
LOCAL aFiles:={}, cusuario:="user@dominio.com", cpassword:="pass", cftpsite:="ftp://dominio.com", oUrl, oCredentials
oUrl := tUrl():New( cftpsite )
oCredentials := tIPCredentials():New()
oCredentials:cUserid := cusuario
oCredentials:cPassword := cpassword
oFTP := tIPClientFtp():New( oUrl, .t., oCredentials )
oFTP:nConnTimeout := 20000
oFTP:Open()
IF oFtp <> NIL
aFiles:=oFtp:ListFiles("data\*.*")
xbrowse(aFiles)
ENDIF
RETURN nil
Code: Select all | Expand
%PDF-1.7
%����
1 0 obj
<<
/Type /Catalog
/Pages 4 0 R
/MarkInfo<</Marked true>>
/Metadata 22 0 R
/OutputIntents 24 0 R
/StructTreeRoot 5 0 R
/PageMode /UseNone
/OCProperties << /OCGs [6 0 R] /D << /ON [6 0 R] /AS [<</Event /Print /OCGs [6 0 R] /Category [/Print]>>] >> >>
>>
endobj
Code: Select all | Expand
%PDF-1.7
%����
1 0 obj
<<
/Type /Catalog
/Pages 4 0 R
/MarkInfo<</Marked true>>
/Metadata 22 0 R
/OutputIntents 24 0 R
/StructTreeRoot 5 0 R
/PageMode /UseNone
/OCProperties << /OCGs [6 0 R] /D << /ON [6 0 R] /AS [<</Event /Print /OCGs [6 0 R] /Category [/Print]>>] >> >>
>>
endobj
Code: Select all | Expand
hb_memoWrit( "file.pdf", cBuffer )
]]>Patricio Avalos Aguirre wrote: Wed Apr 16, 2025 1:37 am hola a tod@s
Estimados estoy obteniendo un pdf via api, pero me responde en un formato text
necesito convertirlo a pdf pero si lo graba directo como pdf me sale error en el archivo
alguna forma de poder grabarlo a pdf
se agradece cualquier ayuda
adjunto parte del archivo que devuelve
algo asiCode: Select all | Expand
%PDF-1.7 %���� 1 0 obj << /Type /Catalog /Pages 4 0 R /MarkInfo<</Marked true>> /Metadata 22 0 R /OutputIntents 24 0 R /StructTreeRoot 5 0 R /PageMode /UseNone /OCProperties << /OCGs [6 0 R] /D << /ON [6 0 R] /AS [<</Event /Print /OCGs [6 0 R] /Category [/Print]>>] >> >> >> endobj
Code: Select all | Expand
hb_memoWrit( "file.pdf", cBuffer )
]]>Patricio Avalos Aguirre wrote: Wed Apr 16, 2025 1:37 am hola a tod@s
Estimados estoy obteniendo un pdf via api, pero me responde en un formato text
necesito convertirlo a pdf pero si lo graba directo como pdf me sale error en el archivo
alguna forma de poder grabarlo a pdf
se agradece cualquier ayuda
adjunto parte del archivo que devuelve
algo asiCode: Select all | Expand
%PDF-1.7 %���� 1 0 obj << /Type /Catalog /Pages 4 0 R /MarkInfo<</Marked true>> /Metadata 22 0 R /OutputIntents 24 0 R /StructTreeRoot 5 0 R /PageMode /UseNone /OCProperties << /OCGs [6 0 R] /D << /ON [6 0 R] /AS [<</Event /Print /OCGs [6 0 R] /Category [/Print]>>] >> >> >> endobj
Code: Select all | Expand
hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseBody )
Code: Select all | Expand
hb_memoWrit( "c:\paso\file.pdf", hb_strToUtf8( oHttp:ResponseBody ) )
Code: Select all | Expand
hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseBody )
Code: Select all | Expand
hb_memoWrit( "c:\paso\file.pdf", hb_strToUtf8( oHttp:ResponseBody ) )
Code: Select all | Expand
hb_memowrit('mipdf.pdf',oHttp:ResponseBody)
shellexecute(0,"open",hb_curdrive()+":\"+CurDir()+"\Solicitud.pdf",,,1)
Code: Select all | Expand
hb_memowrit('mipdf.pdf',oHttp:ResponseBody)
shellexecute(0,"open",hb_curdrive()+":\"+CurDir()+"\Solicitud.pdf",,,1)
]]>Lailton wrote: Thu Apr 17, 2025 5:56 pm para PDF te recommendo usar asi:
se no funcionar, prueba com asi:Code: Select all | Expand
hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseBody )
Code: Select all | Expand
hb_memoWrit( "c:\paso\file.pdf", hb_strToUtf8( oHttp:ResponseBody ) )
![]()
]]>Lailton wrote: Thu Apr 17, 2025 5:56 pm para PDF te recommendo usar asi:
se no funcionar, prueba com asi:Code: Select all | Expand
hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseBody )
Code: Select all | Expand
hb_memoWrit( "c:\paso\file.pdf", hb_strToUtf8( oHttp:ResponseBody ) )
![]()
Code: Select all | Expand
hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseBody )
Code: Select all | Expand
hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseBody )
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>
Si, esa era mi intención también, pero empecé integrándolo en un sistema que hace varias cosas, y por falta de tiempo no he sido capaz después de aislarlo. Lo he resuelto con una chapuza, VeFa32 tiene un menú específico para él y permite hacer lo que tiene el menú.paquitohm wrote: Thu Apr 10, 2025 4:35 pm Tu VeFa32, su existencia, me ha dado la idea de aislarlo todo bien aislado y asi quiza me ahorro pasar usuarios DOS a Win porque en algunos casos, en algunos clientes, el Verifactu no es una oportunidad sino una incomodiad.
Me parece buena idea, de hecho guardo los XML de envío/respuesta a/de Veri*factu.paquitohm wrote: Thu Apr 10, 2025 4:35 pm Una sugerencia: La respuesta, ademas de en el portapapeles grabala en una carpeta c:\Respuesta\UltimaRespuesta.xml donde el programa llamador podrá encontrar ese archivo para hacer con el lo que quiera.
Yo lo he enfocado de manera que sea el SIF que tenga sus controles/limitaciones adecuadas a la ley, y que VeFa32 sólo se dedique a enviar y gestionar lo que le provee el SIF.paquitohm wrote: Thu Apr 10, 2025 4:35 pm PD. El VF lo he enfocado desde el punto de vista de operaciones permitidas. Veremos como sale. Lo que mas me pone es el hecho de que se supone que la mayoria de dudas operacionales no tendrian que ser tales porque eso existe desde tiempo inmemoria en el reglamento de facturacion. Pero va a resultar que somos nosotros los que vamos a tener que dar asistencia para enseñar al usuario a hacer las operaciones correctas (altas, subsanaciones, anulaciones). Por cierto: Estas usando las anulaciones en tu programa
Si, esa era mi intención también, pero empecé integrándolo en un sistema que hace varias cosas, y por falta de tiempo no he sido capaz después de aislarlo. Lo he resuelto con una chapuza, VeFa32 tiene un menú específico para él y permite hacer lo que tiene el menú.paquitohm wrote: Thu Apr 10, 2025 4:35 pm Tu VeFa32, su existencia, me ha dado la idea de aislarlo todo bien aislado y asi quiza me ahorro pasar usuarios DOS a Win porque en algunos casos, en algunos clientes, el Verifactu no es una oportunidad sino una incomodiad.
Me parece buena idea, de hecho guardo los XML de envío/respuesta a/de Veri*factu.paquitohm wrote: Thu Apr 10, 2025 4:35 pm Una sugerencia: La respuesta, ademas de en el portapapeles grabala en una carpeta c:\Respuesta\UltimaRespuesta.xml donde el programa llamador podrá encontrar ese archivo para hacer con el lo que quiera.
Yo lo he enfocado de manera que sea el SIF que tenga sus controles/limitaciones adecuadas a la ley, y que VeFa32 sólo se dedique a enviar y gestionar lo que le provee el SIF.paquitohm wrote: Thu Apr 10, 2025 4:35 pm PD. El VF lo he enfocado desde el punto de vista de operaciones permitidas. Veremos como sale. Lo que mas me pone es el hecho de que se supone que la mayoria de dudas operacionales no tendrian que ser tales porque eso existe desde tiempo inmemoria en el reglamento de facturacion. Pero va a resultar que somos nosotros los que vamos a tener que dar asistencia para enseñar al usuario a hacer las operaciones correctas (altas, subsanaciones, anulaciones). Por cierto: Estas usando las anulaciones en tu programa
Code: Select all | Expand
// Las marcadas con XX probablemente son prescindibles porque son datos generales de Verifactu o del SIF
aStruct := {;
;
; // ** ENVIO ALTA o ANULACION ** //
;
; // Comunes
{"CMIDVers", "C", 3, 0},; // RegistroAltaBase/RegistroAnulacion IDVersion
{"CMSignat", "C", 250, 0},; // RegistroAltaBase/RegistroAnulacion Signature
{"CMRefExt", "C", 60, 0},; // RegistroAltaBase/RegistroAnulacion RefExterna
{"CMRecPre", "C", 1, 0},; // RegistroAltaBase/RegistroAnulacion RechazoPrevio
{"CMFHoReg", "C", 20, 0},; // RegistroAltaBase/RegistroAnulacion FechaHoraHusoGenRegistro
{"CMTipHue", "C", 2, 0},; // RegistroAltaBase/RegistroAnulacion TipoHuella
;
; // RegistroAltaBase
{"RANomRaz", "C", 120, 0},; // NombreRazonEmisor
{"RAOpeAlt", "C", 10, 0},; // cOperacionAlta
{"RASubSan", "C", 1, 0},; // Subsanacion
{"RATipFac", "C", 2, 0},; // TipoFactura
{"RATipRec", "C", 1, 0},; // TipoRectificativa
{"RAFecOpe", "D", 8, 0},; // FechaOperacion
{"RADesOpe", "C", 250, 0},; // DescripcionOperacion
{"RAFSimpl", "C", 1, 0},; // FacturaSimplificadaArt7273
{"RAFSinId", "C", 1, 0},; // FacturaSinIdentifDestinatarioArt61d
{"RAMacroD", "C", 1, 0},; // Macrodato
{"RAEmiTer", "C", 1, 0},; // EmitidaPorTerceroODestinatario
{"RACupon", "C", 250, 0},; // Cupon
{"RACuoTot", "N", 12, 2},; // CuotaTotal
{"RAImpTot", "N", 12, 2},; // ImporteTotal
{"RANumAcu", "C", 15, 0},; // XX NumRegistroAcuerdoFacturacion
{"RAIDSist", "C", 16, 0},; // XX IdAcuerdoSistemaInformatico
;
; // RegistroAnulacion
{"RNOpeAnu", "C", 10, 0},; // cOperacionAnulacion
{"RNSinReg", "C", 1, 0},; // SinRegistroPrevio
{"RNGenPor", "C", 1, 0},; // GeneradoPor
;
; // IDFacturaExpedida
{"IFIDEmis", "C", MAX_NIF, 0},; // IDEmisorFactura
{"IFNumSer", "C", 60, 0},; // NumSerieFactura
{"IFFecExp", "D", 8, 0},; // FechaExpedicionFactura
;
; // RegistroAnterior
{"RGIDEmis", "C", 9, 0},; // IDEmisorFactura
{"RGNumSer", "C", 60, 0},; // NumSerieFactura
{"RGFecExp", "D", 8, 0},; // FechaExpedicionFactura
{"RGHuelll", "C", 64, 0},; // Huella
;
; // DesgloseRectificacion
{"DRBasRec", "N", 12, 2},; // BaseRectificada
{"DRCuoRec", "N", 12, 2},; // CuotaRectificada
{"DRCuRRec", "N", 12, 2},; // CuotaRecargoRectificado
;
; // DetalleDesglose
{"DDTipImp1", "C", 10, 0},; // Impuesto (1)
{"DDTipImp2", "C", 10, 0},; // Impuesto (2)
{"DDTipImp3", "C", 10, 0},; // Impuesto (3)
{"DDTipImp4", "C", 10, 0},; // Impuesto (4)
{"DDTipImp5", "C", 10, 0},; // Impuesto (5)
{"DDTipImp6", "C", 10, 0},; // Impuesto (6)
{"DDClaReg1", "C", 2, 0},; // ClaveRegimen (1)
{"DDClaReg2", "C", 2, 0},; // ClaveRegimen (2)
{"DDClaReg3", "C", 2, 0},; // ClaveRegimen (3)
{"DDClaReg4", "C", 2, 0},; // ClaveRegimen (4)
{"DDClaReg5", "C", 2, 0},; // ClaveRegimen (5)
{"DDClaReg6", "C", 2, 0},; // ClaveRegimen (6)
{"DDCalOpe1", "C", 2, 0},; // CalificacionOperacion (1)
{"DDCalOpe2", "C", 2, 0},; // CalificacionOperacion (2)
{"DDCalOpe3", "C", 2, 0},; // CalificacionOperacion (3)
{"DDCalOpe4", "C", 2, 0},; // CalificacionOperacion (4)
{"DDCalOpe5", "C", 2, 0},; // CalificacionOperacion (5)
{"DDCalOpe6", "C", 2, 0},; // CalificacionOperacion (6)
{"DDExenta1", "C", 2, 0},; // OperacionExenta (1)
{"DDExenta2", "C", 2, 0},; // OperacionExenta (2)
{"DDExenta3", "C", 2, 0},; // OperacionExenta (3)
{"DDExenta4", "C", 2, 0},; // OperacionExenta (4)
{"DDExenta5", "C", 2, 0},; // OperacionExenta (5)
{"DDExenta6", "C", 2, 0},; // OperacionExenta (6)
{"DDTipImp1", "N", 5, 2},; // TipoImpositivo (1)
{"DDTipImp2", "N", 5, 2},; // TipoImpositivo (2)
{"DDTipImp3", "N", 5, 2},; // TipoImpositivo (3)
{"DDTipImp4", "N", 5, 2},; // TipoImpositivo (4)
{"DDTipImp5", "N", 5, 2},; // TipoImpositivo (5)
{"DDTipImp6", "N", 5, 2},; // TipoImpositivo (6)
{"DDBasImp1", "N", 12, 2},; // BaseImponible (1)
{"DDBasImp2", "N", 12, 2},; // BaseImponible (2)
{"DDBasImp3", "N", 12, 2},; // BaseImponible (3)
{"DDBasImp4", "N", 12, 2},; // BaseImponible (4)
{"DDBasImp5", "N", 12, 2},; // BaseImponible (5)
{"DDBasImp6", "N", 12, 2},; // BaseImponible (6)
{"DDBImACo1", "N", 12, 2},; // BaseImponibleACoste (1)
{"DDBImACo2", "N", 12, 2},; // BaseImponibleACoste (2)
{"DDBImACo3", "N", 12, 2},; // BaseImponibleACoste (3)
{"DDBImACo4", "N", 12, 2},; // BaseImponibleACoste (4)
{"DDBImACo5", "N", 12, 2},; // BaseImponibleACoste (5)
{"DDBImACo6", "N", 12, 2},; // BaseImponibleACoste (6)
{"DDCuoRep1", "N", 12, 2},; // CuotaRepercutida (1)
{"DDCuoRep2", "N", 12, 2},; // CuotaRepercutida (2)
{"DDCuoRep3", "N", 12, 2},; // CuotaRepercutida (3)
{"DDCuoRep4", "N", 12, 2},; // CuotaRepercutida (4)
{"DDCuoRep5", "N", 12, 2},; // CuotaRepercutida (5)
{"DDCuoRep6", "N", 12, 2},; // CuotaRepercutida (6)
{"DDTipRec1", "N", 5, 2},; // TipoRecargoEquivalencia (1)
{"DDTipRec2", "N", 5, 2},; // TipoRecargoEquivalencia (2)
{"DDTipRec3", "N", 5, 2},; // TipoRecargoEquivalencia (3)
{"DDTipRec4", "N", 5, 2},; // TipoRecargoEquivalencia (4)
{"DDTipRec5", "N", 5, 2},; // TipoRecargoEquivalencia (5)
{"DDTipRec6", "N", 5, 2},; // TipoRecargoEquivalencia (6)
{"DDCuoRec1", "N", 12, 2},; // CuotaRecargoEquivalencia (1)
{"DDCuoRec2", "N", 12, 2},; // CuotaRecargoEquivalencia (2)
{"DDCuoRec3", "N", 12, 2},; // CuotaRecargoEquivalencia (3)
{"DDCuoRec4", "N", 12, 2},; // CuotaRecargoEquivalencia (4)
{"DDCuoRec5", "N", 12, 2},; // CuotaRecargoEquivalencia (5)
{"DDCuoRec6", "N", 12, 2},; // CuotaRecargoEquivalencia (6)
;
; // Encadenamiento
{"ENPriReg", "C", 1, 0},; // PrimerRegistro
;
;
; // ** RESPUESTA ** //
;
{"RSIDEmis", "C", MAX_NIF, 0},; // IDEmisorFactura
{"RSNumSer", "C", 10, 0},; // NumSerieFactura
{"RSFecExp", "D", 8, 0},; // FechaExpedicionFactura
{"RSTipOpe", "C", 10, 0},; // TipoOperacion
{"RSEstado", "C", 20, 0},; // Estado
{"RSCodErr", "N", 4, 0},; // CodigoError
{"RSDesErr", "C", 40, 0} ; // DescripcionError
}
Code: Select all | Expand
// Las marcadas con XX probablemente son prescindibles porque son datos generales de Verifactu o del SIF
aStruct := {;
;
; // ** ENVIO ALTA o ANULACION ** //
;
; // Comunes
{"CMIDVers", "C", 3, 0},; // RegistroAltaBase/RegistroAnulacion IDVersion
{"CMSignat", "C", 250, 0},; // RegistroAltaBase/RegistroAnulacion Signature
{"CMRefExt", "C", 60, 0},; // RegistroAltaBase/RegistroAnulacion RefExterna
{"CMRecPre", "C", 1, 0},; // RegistroAltaBase/RegistroAnulacion RechazoPrevio
{"CMFHoReg", "C", 20, 0},; // RegistroAltaBase/RegistroAnulacion FechaHoraHusoGenRegistro
{"CMTipHue", "C", 2, 0},; // RegistroAltaBase/RegistroAnulacion TipoHuella
;
; // RegistroAltaBase
{"RANomRaz", "C", 120, 0},; // NombreRazonEmisor
{"RAOpeAlt", "C", 10, 0},; // cOperacionAlta
{"RASubSan", "C", 1, 0},; // Subsanacion
{"RATipFac", "C", 2, 0},; // TipoFactura
{"RATipRec", "C", 1, 0},; // TipoRectificativa
{"RAFecOpe", "D", 8, 0},; // FechaOperacion
{"RADesOpe", "C", 250, 0},; // DescripcionOperacion
{"RAFSimpl", "C", 1, 0},; // FacturaSimplificadaArt7273
{"RAFSinId", "C", 1, 0},; // FacturaSinIdentifDestinatarioArt61d
{"RAMacroD", "C", 1, 0},; // Macrodato
{"RAEmiTer", "C", 1, 0},; // EmitidaPorTerceroODestinatario
{"RACupon", "C", 250, 0},; // Cupon
{"RACuoTot", "N", 12, 2},; // CuotaTotal
{"RAImpTot", "N", 12, 2},; // ImporteTotal
{"RANumAcu", "C", 15, 0},; // XX NumRegistroAcuerdoFacturacion
{"RAIDSist", "C", 16, 0},; // XX IdAcuerdoSistemaInformatico
;
; // RegistroAnulacion
{"RNOpeAnu", "C", 10, 0},; // cOperacionAnulacion
{"RNSinReg", "C", 1, 0},; // SinRegistroPrevio
{"RNGenPor", "C", 1, 0},; // GeneradoPor
;
; // IDFacturaExpedida
{"IFIDEmis", "C", MAX_NIF, 0},; // IDEmisorFactura
{"IFNumSer", "C", 60, 0},; // NumSerieFactura
{"IFFecExp", "D", 8, 0},; // FechaExpedicionFactura
;
; // RegistroAnterior
{"RGIDEmis", "C", 9, 0},; // IDEmisorFactura
{"RGNumSer", "C", 60, 0},; // NumSerieFactura
{"RGFecExp", "D", 8, 0},; // FechaExpedicionFactura
{"RGHuelll", "C", 64, 0},; // Huella
;
; // DesgloseRectificacion
{"DRBasRec", "N", 12, 2},; // BaseRectificada
{"DRCuoRec", "N", 12, 2},; // CuotaRectificada
{"DRCuRRec", "N", 12, 2},; // CuotaRecargoRectificado
;
; // DetalleDesglose
{"DDTipImp1", "C", 10, 0},; // Impuesto (1)
{"DDTipImp2", "C", 10, 0},; // Impuesto (2)
{"DDTipImp3", "C", 10, 0},; // Impuesto (3)
{"DDTipImp4", "C", 10, 0},; // Impuesto (4)
{"DDTipImp5", "C", 10, 0},; // Impuesto (5)
{"DDTipImp6", "C", 10, 0},; // Impuesto (6)
{"DDClaReg1", "C", 2, 0},; // ClaveRegimen (1)
{"DDClaReg2", "C", 2, 0},; // ClaveRegimen (2)
{"DDClaReg3", "C", 2, 0},; // ClaveRegimen (3)
{"DDClaReg4", "C", 2, 0},; // ClaveRegimen (4)
{"DDClaReg5", "C", 2, 0},; // ClaveRegimen (5)
{"DDClaReg6", "C", 2, 0},; // ClaveRegimen (6)
{"DDCalOpe1", "C", 2, 0},; // CalificacionOperacion (1)
{"DDCalOpe2", "C", 2, 0},; // CalificacionOperacion (2)
{"DDCalOpe3", "C", 2, 0},; // CalificacionOperacion (3)
{"DDCalOpe4", "C", 2, 0},; // CalificacionOperacion (4)
{"DDCalOpe5", "C", 2, 0},; // CalificacionOperacion (5)
{"DDCalOpe6", "C", 2, 0},; // CalificacionOperacion (6)
{"DDExenta1", "C", 2, 0},; // OperacionExenta (1)
{"DDExenta2", "C", 2, 0},; // OperacionExenta (2)
{"DDExenta3", "C", 2, 0},; // OperacionExenta (3)
{"DDExenta4", "C", 2, 0},; // OperacionExenta (4)
{"DDExenta5", "C", 2, 0},; // OperacionExenta (5)
{"DDExenta6", "C", 2, 0},; // OperacionExenta (6)
{"DDTipImp1", "N", 5, 2},; // TipoImpositivo (1)
{"DDTipImp2", "N", 5, 2},; // TipoImpositivo (2)
{"DDTipImp3", "N", 5, 2},; // TipoImpositivo (3)
{"DDTipImp4", "N", 5, 2},; // TipoImpositivo (4)
{"DDTipImp5", "N", 5, 2},; // TipoImpositivo (5)
{"DDTipImp6", "N", 5, 2},; // TipoImpositivo (6)
{"DDBasImp1", "N", 12, 2},; // BaseImponible (1)
{"DDBasImp2", "N", 12, 2},; // BaseImponible (2)
{"DDBasImp3", "N", 12, 2},; // BaseImponible (3)
{"DDBasImp4", "N", 12, 2},; // BaseImponible (4)
{"DDBasImp5", "N", 12, 2},; // BaseImponible (5)
{"DDBasImp6", "N", 12, 2},; // BaseImponible (6)
{"DDBImACo1", "N", 12, 2},; // BaseImponibleACoste (1)
{"DDBImACo2", "N", 12, 2},; // BaseImponibleACoste (2)
{"DDBImACo3", "N", 12, 2},; // BaseImponibleACoste (3)
{"DDBImACo4", "N", 12, 2},; // BaseImponibleACoste (4)
{"DDBImACo5", "N", 12, 2},; // BaseImponibleACoste (5)
{"DDBImACo6", "N", 12, 2},; // BaseImponibleACoste (6)
{"DDCuoRep1", "N", 12, 2},; // CuotaRepercutida (1)
{"DDCuoRep2", "N", 12, 2},; // CuotaRepercutida (2)
{"DDCuoRep3", "N", 12, 2},; // CuotaRepercutida (3)
{"DDCuoRep4", "N", 12, 2},; // CuotaRepercutida (4)
{"DDCuoRep5", "N", 12, 2},; // CuotaRepercutida (5)
{"DDCuoRep6", "N", 12, 2},; // CuotaRepercutida (6)
{"DDTipRec1", "N", 5, 2},; // TipoRecargoEquivalencia (1)
{"DDTipRec2", "N", 5, 2},; // TipoRecargoEquivalencia (2)
{"DDTipRec3", "N", 5, 2},; // TipoRecargoEquivalencia (3)
{"DDTipRec4", "N", 5, 2},; // TipoRecargoEquivalencia (4)
{"DDTipRec5", "N", 5, 2},; // TipoRecargoEquivalencia (5)
{"DDTipRec6", "N", 5, 2},; // TipoRecargoEquivalencia (6)
{"DDCuoRec1", "N", 12, 2},; // CuotaRecargoEquivalencia (1)
{"DDCuoRec2", "N", 12, 2},; // CuotaRecargoEquivalencia (2)
{"DDCuoRec3", "N", 12, 2},; // CuotaRecargoEquivalencia (3)
{"DDCuoRec4", "N", 12, 2},; // CuotaRecargoEquivalencia (4)
{"DDCuoRec5", "N", 12, 2},; // CuotaRecargoEquivalencia (5)
{"DDCuoRec6", "N", 12, 2},; // CuotaRecargoEquivalencia (6)
;
; // Encadenamiento
{"ENPriReg", "C", 1, 0},; // PrimerRegistro
;
;
; // ** RESPUESTA ** //
;
{"RSIDEmis", "C", MAX_NIF, 0},; // IDEmisorFactura
{"RSNumSer", "C", 10, 0},; // NumSerieFactura
{"RSFecExp", "D", 8, 0},; // FechaExpedicionFactura
{"RSTipOpe", "C", 10, 0},; // TipoOperacion
{"RSEstado", "C", 20, 0},; // Estado
{"RSCodErr", "N", 4, 0},; // CodigoError
{"RSDesErr", "C", 40, 0} ; // DescripcionError
}
No dejo que el usuario manipule (ahora que lo dices, permitiré que envíe a VeFa32 el tipo factura, y si no lo hace aplicaré la función que detallo).paquitohm wrote: Fri Apr 11, 2025 11:51 amComo te comentaba antes el lio lo tengo ahora mismo pensando en como el usuario va a responder. ¿ Dejar al usuario que manipule F1, F2, F3,R1,R2,R3,R4,R5 ? Pufff.... La verdad es que conforme se anda se van resolviendo los temas... o eso creo
Code: Select all | Expand
FUNCTION cTipuVFFactura( AMPAARRA, lESRECTIF, cSINDESTI, cSIMPLIFI )
// En base a los valores recibidos indicará que tipo de factura es.
Local cTipuFactura := ""
// He dejado el orden SINDESTIno, SIMPLIFIcada, el RESTO, porqué en Verifactu si se interpreta que es SIMPLIFICADA se entiende que es ¡¡¡CON!!! destinatario.
If cSINDESTI = "S"
If lESRECTIF
cTipuFactura := "R5"
Else
cTipuFactura := "F2"
EndIf
ElseIf cSIMPLIFI = "S"
If lESRECTIF
cTipuFactura := "R1"
Else
cTipuFactura := "F1"
EndIf
Else
If lESRECTIF
cTipuFactura := "R1"
Else
cTipuFactura := "F1"
EndIf
EndIf
Return cTipuFactura
No dejo que el usuario manipule (ahora que lo dices, permitiré que envíe a VeFa32 el tipo factura, y si no lo hace aplicaré la función que detallo).paquitohm wrote: Fri Apr 11, 2025 11:51 amComo te comentaba antes el lio lo tengo ahora mismo pensando en como el usuario va a responder. ¿ Dejar al usuario que manipule F1, F2, F3,R1,R2,R3,R4,R5 ? Pufff.... La verdad es que conforme se anda se van resolviendo los temas... o eso creo
Code: Select all | Expand
FUNCTION cTipuVFFactura( AMPAARRA, lESRECTIF, cSINDESTI, cSIMPLIFI )
// En base a los valores recibidos indicará que tipo de factura es.
Local cTipuFactura := ""
// He dejado el orden SINDESTIno, SIMPLIFIcada, el RESTO, porqué en Verifactu si se interpreta que es SIMPLIFICADA se entiende que es ¡¡¡CON!!! destinatario.
If cSINDESTI = "S"
If lESRECTIF
cTipuFactura := "R5"
Else
cTipuFactura := "F2"
EndIf
ElseIf cSIMPLIFI = "S"
If lESRECTIF
cTipuFactura := "R1"
Else
cTipuFactura := "F1"
EndIf
Else
If lESRECTIF
cTipuFactura := "R1"
Else
cTipuFactura := "F1"
EndIf
EndIf
Return cTipuFactura
Code: Select all | Expand
Para los datos de los XML enviados.
===================================
Nombre base: VERFAC
Descripción: VF-XML Veri*Factu
Nombre campo <> Tipo <> Lon <> Decim. <> Descripción
============ <> ======== <> === <> ====== <> ==========
*CODIVEFA* <> Carácter <> 12 <> 0 <> Código VeFa32 Xml único
IDVERFAC <> Carácter <> 25 <> 0 <> Identificación VeFa32 (referencia única; da nombre al XML)
VF_ESTAT <> Numérico <> 3 <> 0 <> Estado Verifactu (5-En revisión, 10-Iniciado, 15-XML generado, 20-Acabado, 30-Acabado con error,...)
INCIDENC <> Carácter <> 1 <> 0 <> Tiene Incidencia previa (Si, No)
ESTAENVI <> Carácter <> 50 <> 0 <> Estado Envío (respuesta Veri*factu:Correcto, ParcialmenteCorrecto, Incorrecto)
TIPUENVI <> Numérico <> 2 <> 0 <> Tipo Envío (10-Voluntario 20-Requerimiento)
TISTENVI <> Carácter <> 30 <> 0 <> Time Stamp Envío
DATENVVF <> Fecha <> 8 <> 0 <> Fecha Envío
HORENVVF <> Carácter <> 8 <> 0 <> Hora Envío
FITXENVI <> Carácter <> 40 <> 0 <> Fichero Envío
DATRECVF <> Fecha <> 8 <> 0 <> Fecha recepción
HORRECVF <> Carácter <> 8 <> 0 <> Hora recepción
FITXRESP <> Carácter <> 50 <> 0 <> Fichero respuesta
CSVRESPO <> Carácter <> 25 <> 0 <> CSV recibido respuesta
NUMEREGI <> Numérico <> 5 <> 0 <> Registros tratados VFREGI
Para los registros con datos de las facturas.
=============================================
Nombre base: VFREGI
Descripción: VF-Reg. Verifactu
Nombre campo <> Tipo <> Lon <> Decim. <> Descripción
============ <> ======== <> === <> ====== <> ==========
*CODIVFRE* <> Carácter <> 12 <> 0 <> Código Regi.VeFa32 (código único)
IDVFREGI <> Carácter <> 25 <> 0 <> Identif.Reg.VeFa32 (referencia única)
VFCODFAC <> Carácter <> 20 <> 0 <> Código Fact.SIF (código factura enviado en XML)
NIF <> Carácter <> 20 <> 0 <> N.I.F. destinatario factura
DATAFACT <> Fecha <> 8 <> 0 <> Fecha Factura
IMPOTOTA <> Numérico <> 15 <> 6 <> Importe TOTAL factura
*CODIVEFA* <> Carácter <> 12 <> 0 <> Código VeFa32 (código del registro DBF VERFAC)
IDPETICI <> Carácter <> 40 <> 0 <> Id 'Petición' (se captura al consultar a Hacienda)
TIPUREGI <> Numérico <> 3 <> 0 <> Tipo Registro (10-alta, 110-Anulación, ...)
ESTAREGI <> Carácter <> 25 <> 0 <> Respuesta de Veri*factu (Correcto, AceptadoConErrores, Incorrecto,...)
SUBSANAC <> Carácter <> 1 <> 0 <> Es Subsanación (Si, No)
REBUPREV <> Carácter <> 1 <> 0 <> Es Rechazo previo (Si, No)
NOREGPRE <> Carácter <> 1 <> 0 <> NO Tiene Reg. previo (Si, No)
SIMPLIFI <> Carácter <> 1 <> 0 <> Simplificada (S-N)
SINDESTI <> Carácter <> 1 <> 0 <> Sin destinatario (S-N)
VFCADHUE <> Carácter <> 300 <> 0 <> Cadena cálculo Huella (para saber con que datos se ha calculado la huella)
VFHUELLA <> Carácter <> 75 <> 0 <> Huella-Verifactu
AVFCODFA <> Carácter <> 20 <> 0 <> Fact.Anterior.Código Fact.Completo
ADATAFAC <> Fecha <> 8 <> 0 <> Fact.Anterior.Fecha Factura
VFHUEANT <> Carácter <> 75 <> 0 <> Reg.Fact.Anterior Huella
VF_ESTAT <> Numérico <> 3 <> 0 <> Estado Verifactu (5-En revisión, 10-Iniciado, 15-XML generado, 20-Acabado, 30-Acabado con error,...)
INTENT__ <> Numérico <> 3 <> 0 <> Núm.Intento envío (VeFa32 puede hacer reenvíos automáticos)
IDFACTUR <> Carácter <> 25 <> 0 <> Identificación única factura (del SIF)
ORIGEN__ <> Numérico <> 2 <> 0 <> Origen del registro. (manual, VeFA32, importado Hacienda, ...)
DATVERHI <> Fecha <> 8 <> 0 <> Fecha Verificación Hacienda (fecha de la consulta a Hacienda)
Para los errores recibidos de Veri*factu.
=========================================
Nombre base: VFERRO
Descripción: VF-Errores Reg.Verifactu
Nombre campo <> Tipo <> Lon <> Decim. <> Descripción
============ <> ======== <> === <> ====== <> ==========
*CODIVEFA* <> Carácter <> 12 <> 0 <> Código envío VeFa32
*CODIVFRE* <> Carácter <> 12 <> 0 <> Código Registro VeFa32
VFCODFAC <> Carácter <> 20 <> 0 <> Código Factura SIF
CODIERRO <> Carácter <> 12 <> 0 <> Código Error
DESCERRO <> Carácter <> 250 <> 0 <> Descr.Error
Code: Select all | Expand
// Las marcadas con XX probablemente son prescindibles porque son datos generales de Verifactu o del SIF
aStruct := {;
;
; // ** ENVIO ALTA o ANULACION ** //
;
; // Comunes
No lo guardo {"CMIDVers", "C", 3, 0},; // RegistroAltaBase/RegistroAnulacion IDVersion
No lo guardo {"CMSignat", "C", 250, 0},; // RegistroAltaBase/RegistroAnulacion Signature
{"CMRefExt", "C", 60, 0},; // RegistroAltaBase/RegistroAnulacion RefExterna
{"CMRecPre", "C", 1, 0},; // RegistroAltaBase/RegistroAnulacion RechazoPrevio
Lo cojo de la factura {"CMFHoReg", "C", 20, 0},; // RegistroAltaBase/RegistroAnulacion FechaHoraHusoGenRegistro
No lo guardo {"CMTipHue", "C", 2, 0},; // RegistroAltaBase/RegistroAnulacion TipoHuella
;
; // RegistroAltaBase
Está en el sistema {"RANomRaz", "C", 120, 0},; // NombreRazonEmisor
¿? {"RAOpeAlt", "C", 10, 0},; // cOperacionAlta
{"RASubSan", "C", 1, 0},; // Subsanacion
Lo calculo {"RATipFac", "C", 2, 0},; // TipoFactura
Está en factura {"RATipRec", "C", 1, 0},; // TipoRectificativa
¿? {"RAFecOpe", "D", 8, 0},; // FechaOperacion
La pongo a piñon {"RADesOpe", "C", 250, 0},; // DescripcionOperacion
{"RAFSimpl", "C", 1, 0},; // FacturaSimplificadaArt7273
{"RAFSinId", "C", 1, 0},; // FacturaSinIdentifDestinatarioArt61d
Lo pongo a piñon {"RAMacroD", "C", 1, 0},; // Macrodato
No lo contemplo {"RAEmiTer", "C", 1, 0},; // EmitidaPorTerceroODestinatario
Lo pongo a piñon{"RACupon", "C", 250, 0},; // Cupon
{"RACuoTot", "N", 12, 2},; // CuotaTotal
{"RAImpTot", "N", 12, 2},; // ImporteTotal
No lo contemplo {"RANumAcu", "C", 15, 0},; // XX NumRegistroAcuerdoFacturacion
No lo contemplo{"RAIDSist", "C", 16, 0},; // XX IdAcuerdoSistemaInformatico
;
; // RegistroAnulacion
¿? {"RNOpeAnu", "C", 10, 0},; // cOperacionAnulacion
{"RNSinReg", "C", 1, 0},; // SinRegistroPrevio
{"RNGenPor", "C", 1, 0},; // GeneradoPor
;
; // IDFacturaExpedida
Está en el sistema {"IFIDEmis", "C", MAX_NIF, 0},; // IDEmisorFactura
{"IFNumSer", "C", 60, 0},; // NumSerieFactura
{"IFFecExp", "D", 8, 0},; // FechaExpedicionFactura
;
; // RegistroAnterior
Está en el sistema {"RGIDEmis", "C", 9, 0},; // IDEmisorFactura
{"RGNumSer", "C", 60, 0},; // NumSerieFactura
{"RGFecExp", "D", 8, 0},; // FechaExpedicionFactura
{"RGHuelll", "C", 64, 0},; // Huella
;
; // DesgloseRectificacion
Hoy por hoy sólo permito rectificativas por diferencia
No permito rectificativas por substitución
No lo contemplo {"DRBasRec", "N", 12, 2},; // BaseRectificada
No lo contemplo {"DRCuoRec", "N", 12, 2},; // CuotaRectificada
No lo contemplo {"DRCuRRec", "N", 12, 2},; // CuotaRecargoRectificado
;
; // DetalleDesglose
Lo tengo en facturas
{"DDTipImp1", "C", 10, 0},; // Impuesto (1)
{"DDTipImp2", "C", 10, 0},; // Impuesto (2)
{"DDTipImp3", "C", 10, 0},; // Impuesto (3)
{"DDTipImp4", "C", 10, 0},; // Impuesto (4)
{"DDTipImp5", "C", 10, 0},; // Impuesto (5)
{"DDTipImp6", "C", 10, 0},; // Impuesto (6)
{"DDClaReg1", "C", 2, 0},; // ClaveRegimen (1)
{"DDClaReg2", "C", 2, 0},; // ClaveRegimen (2)
{"DDClaReg3", "C", 2, 0},; // ClaveRegimen (3)
{"DDClaReg4", "C", 2, 0},; // ClaveRegimen (4)
{"DDClaReg5", "C", 2, 0},; // ClaveRegimen (5)
{"DDClaReg6", "C", 2, 0},; // ClaveRegimen (6)
{"DDCalOpe1", "C", 2, 0},; // CalificacionOperacion (1)
{"DDCalOpe2", "C", 2, 0},; // CalificacionOperacion (2)
{"DDCalOpe3", "C", 2, 0},; // CalificacionOperacion (3)
{"DDCalOpe4", "C", 2, 0},; // CalificacionOperacion (4)
{"DDCalOpe5", "C", 2, 0},; // CalificacionOperacion (5)
{"DDCalOpe6", "C", 2, 0},; // CalificacionOperacion (6)
{"DDExenta1", "C", 2, 0},; // OperacionExenta (1)
{"DDExenta2", "C", 2, 0},; // OperacionExenta (2)
{"DDExenta3", "C", 2, 0},; // OperacionExenta (3)
{"DDExenta4", "C", 2, 0},; // OperacionExenta (4)
{"DDExenta5", "C", 2, 0},; // OperacionExenta (5)
{"DDExenta6", "C", 2, 0},; // OperacionExenta (6)
{"DDTipImp1", "N", 5, 2},; // TipoImpositivo (1)
{"DDTipImp2", "N", 5, 2},; // TipoImpositivo (2)
{"DDTipImp3", "N", 5, 2},; // TipoImpositivo (3)
{"DDTipImp4", "N", 5, 2},; // TipoImpositivo (4)
{"DDTipImp5", "N", 5, 2},; // TipoImpositivo (5)
{"DDTipImp6", "N", 5, 2},; // TipoImpositivo (6)
{"DDBasImp1", "N", 12, 2},; // BaseImponible (1)
{"DDBasImp2", "N", 12, 2},; // BaseImponible (2)
{"DDBasImp3", "N", 12, 2},; // BaseImponible (3)
{"DDBasImp4", "N", 12, 2},; // BaseImponible (4)
{"DDBasImp5", "N", 12, 2},; // BaseImponible (5)
{"DDBasImp6", "N", 12, 2},; // BaseImponible (6)
{"DDBImACo1", "N", 12, 2},; // BaseImponibleACoste (1)
{"DDBImACo2", "N", 12, 2},; // BaseImponibleACoste (2)
{"DDBImACo3", "N", 12, 2},; // BaseImponibleACoste (3)
{"DDBImACo4", "N", 12, 2},; // BaseImponibleACoste (4)
{"DDBImACo5", "N", 12, 2},; // BaseImponibleACoste (5)
{"DDBImACo6", "N", 12, 2},; // BaseImponibleACoste (6)
{"DDCuoRep1", "N", 12, 2},; // CuotaRepercutida (1)
{"DDCuoRep2", "N", 12, 2},; // CuotaRepercutida (2)
{"DDCuoRep3", "N", 12, 2},; // CuotaRepercutida (3)
{"DDCuoRep4", "N", 12, 2},; // CuotaRepercutida (4)
{"DDCuoRep5", "N", 12, 2},; // CuotaRepercutida (5)
{"DDCuoRep6", "N", 12, 2},; // CuotaRepercutida (6)
{"DDTipRec1", "N", 5, 2},; // TipoRecargoEquivalencia (1)
{"DDTipRec2", "N", 5, 2},; // TipoRecargoEquivalencia (2)
{"DDTipRec3", "N", 5, 2},; // TipoRecargoEquivalencia (3)
{"DDTipRec4", "N", 5, 2},; // TipoRecargoEquivalencia (4)
{"DDTipRec5", "N", 5, 2},; // TipoRecargoEquivalencia (5)
{"DDTipRec6", "N", 5, 2},; // TipoRecargoEquivalencia (6)
{"DDCuoRec1", "N", 12, 2},; // CuotaRecargoEquivalencia (1)
{"DDCuoRec2", "N", 12, 2},; // CuotaRecargoEquivalencia (2)
{"DDCuoRec3", "N", 12, 2},; // CuotaRecargoEquivalencia (3)
{"DDCuoRec4", "N", 12, 2},; // CuotaRecargoEquivalencia (4)
{"DDCuoRec5", "N", 12, 2},; // CuotaRecargoEquivalencia (5)
{"DDCuoRec6", "N", 12, 2},; // CuotaRecargoEquivalencia (6)
;
; // Encadenamiento
Lo calculo al momento de generar el XML.
{"ENPriReg", "C", 1, 0},; // PrimerRegistro
;
;
; // ** RESPUESTA ** //
;
Prefiero capturar la Referencia Externa que se corresponderá a un registro enviado.
{"RSIDEmis", "C", MAX_NIF, 0},; // IDEmisorFactura
{"RSNumSer", "C", 10, 0},; // NumSerieFactura
{"RSFecExp", "D", 8, 0},; // FechaExpedicionFactura
{"RSTipOpe", "C", 10, 0},; // TipoOperacion
{"RSEstado", "C", 20, 0},; // Estado
No es correcto, puede haber más de un error por factura en la respuesta (en teoría).
{"RSCodErr", "N", 4, 0},; // CodigoError
{"RSDesErr", "C", 40, 0} ; // DescripcionError
}
Code: Select all | Expand
Para los datos de los XML enviados.
===================================
Nombre base: VERFAC
Descripción: VF-XML Veri*Factu
Nombre campo <> Tipo <> Lon <> Decim. <> Descripción
============ <> ======== <> === <> ====== <> ==========
*CODIVEFA* <> Carácter <> 12 <> 0 <> Código VeFa32 Xml único
IDVERFAC <> Carácter <> 25 <> 0 <> Identificación VeFa32 (referencia única; da nombre al XML)
VF_ESTAT <> Numérico <> 3 <> 0 <> Estado Verifactu (5-En revisión, 10-Iniciado, 15-XML generado, 20-Acabado, 30-Acabado con error,...)
INCIDENC <> Carácter <> 1 <> 0 <> Tiene Incidencia previa (Si, No)
ESTAENVI <> Carácter <> 50 <> 0 <> Estado Envío (respuesta Veri*factu:Correcto, ParcialmenteCorrecto, Incorrecto)
TIPUENVI <> Numérico <> 2 <> 0 <> Tipo Envío (10-Voluntario 20-Requerimiento)
TISTENVI <> Carácter <> 30 <> 0 <> Time Stamp Envío
DATENVVF <> Fecha <> 8 <> 0 <> Fecha Envío
HORENVVF <> Carácter <> 8 <> 0 <> Hora Envío
FITXENVI <> Carácter <> 40 <> 0 <> Fichero Envío
DATRECVF <> Fecha <> 8 <> 0 <> Fecha recepción
HORRECVF <> Carácter <> 8 <> 0 <> Hora recepción
FITXRESP <> Carácter <> 50 <> 0 <> Fichero respuesta
CSVRESPO <> Carácter <> 25 <> 0 <> CSV recibido respuesta
NUMEREGI <> Numérico <> 5 <> 0 <> Registros tratados VFREGI
Para los registros con datos de las facturas.
=============================================
Nombre base: VFREGI
Descripción: VF-Reg. Verifactu
Nombre campo <> Tipo <> Lon <> Decim. <> Descripción
============ <> ======== <> === <> ====== <> ==========
*CODIVFRE* <> Carácter <> 12 <> 0 <> Código Regi.VeFa32 (código único)
IDVFREGI <> Carácter <> 25 <> 0 <> Identif.Reg.VeFa32 (referencia única)
VFCODFAC <> Carácter <> 20 <> 0 <> Código Fact.SIF (código factura enviado en XML)
NIF <> Carácter <> 20 <> 0 <> N.I.F. destinatario factura
DATAFACT <> Fecha <> 8 <> 0 <> Fecha Factura
IMPOTOTA <> Numérico <> 15 <> 6 <> Importe TOTAL factura
*CODIVEFA* <> Carácter <> 12 <> 0 <> Código VeFa32 (código del registro DBF VERFAC)
IDPETICI <> Carácter <> 40 <> 0 <> Id 'Petición' (se captura al consultar a Hacienda)
TIPUREGI <> Numérico <> 3 <> 0 <> Tipo Registro (10-alta, 110-Anulación, ...)
ESTAREGI <> Carácter <> 25 <> 0 <> Respuesta de Veri*factu (Correcto, AceptadoConErrores, Incorrecto,...)
SUBSANAC <> Carácter <> 1 <> 0 <> Es Subsanación (Si, No)
REBUPREV <> Carácter <> 1 <> 0 <> Es Rechazo previo (Si, No)
NOREGPRE <> Carácter <> 1 <> 0 <> NO Tiene Reg. previo (Si, No)
SIMPLIFI <> Carácter <> 1 <> 0 <> Simplificada (S-N)
SINDESTI <> Carácter <> 1 <> 0 <> Sin destinatario (S-N)
VFCADHUE <> Carácter <> 300 <> 0 <> Cadena cálculo Huella (para saber con que datos se ha calculado la huella)
VFHUELLA <> Carácter <> 75 <> 0 <> Huella-Verifactu
AVFCODFA <> Carácter <> 20 <> 0 <> Fact.Anterior.Código Fact.Completo
ADATAFAC <> Fecha <> 8 <> 0 <> Fact.Anterior.Fecha Factura
VFHUEANT <> Carácter <> 75 <> 0 <> Reg.Fact.Anterior Huella
VF_ESTAT <> Numérico <> 3 <> 0 <> Estado Verifactu (5-En revisión, 10-Iniciado, 15-XML generado, 20-Acabado, 30-Acabado con error,...)
INTENT__ <> Numérico <> 3 <> 0 <> Núm.Intento envío (VeFa32 puede hacer reenvíos automáticos)
IDFACTUR <> Carácter <> 25 <> 0 <> Identificación única factura (del SIF)
ORIGEN__ <> Numérico <> 2 <> 0 <> Origen del registro. (manual, VeFA32, importado Hacienda, ...)
DATVERHI <> Fecha <> 8 <> 0 <> Fecha Verificación Hacienda (fecha de la consulta a Hacienda)
Para los errores recibidos de Veri*factu.
=========================================
Nombre base: VFERRO
Descripción: VF-Errores Reg.Verifactu
Nombre campo <> Tipo <> Lon <> Decim. <> Descripción
============ <> ======== <> === <> ====== <> ==========
*CODIVEFA* <> Carácter <> 12 <> 0 <> Código envío VeFa32
*CODIVFRE* <> Carácter <> 12 <> 0 <> Código Registro VeFa32
VFCODFAC <> Carácter <> 20 <> 0 <> Código Factura SIF
CODIERRO <> Carácter <> 12 <> 0 <> Código Error
DESCERRO <> Carácter <> 250 <> 0 <> Descr.Error
Code: Select all | Expand
// Las marcadas con XX probablemente son prescindibles porque son datos generales de Verifactu o del SIF
aStruct := {;
;
; // ** ENVIO ALTA o ANULACION ** //
;
; // Comunes
No lo guardo {"CMIDVers", "C", 3, 0},; // RegistroAltaBase/RegistroAnulacion IDVersion
No lo guardo {"CMSignat", "C", 250, 0},; // RegistroAltaBase/RegistroAnulacion Signature
{"CMRefExt", "C", 60, 0},; // RegistroAltaBase/RegistroAnulacion RefExterna
{"CMRecPre", "C", 1, 0},; // RegistroAltaBase/RegistroAnulacion RechazoPrevio
Lo cojo de la factura {"CMFHoReg", "C", 20, 0},; // RegistroAltaBase/RegistroAnulacion FechaHoraHusoGenRegistro
No lo guardo {"CMTipHue", "C", 2, 0},; // RegistroAltaBase/RegistroAnulacion TipoHuella
;
; // RegistroAltaBase
Está en el sistema {"RANomRaz", "C", 120, 0},; // NombreRazonEmisor
¿? {"RAOpeAlt", "C", 10, 0},; // cOperacionAlta
{"RASubSan", "C", 1, 0},; // Subsanacion
Lo calculo {"RATipFac", "C", 2, 0},; // TipoFactura
Está en factura {"RATipRec", "C", 1, 0},; // TipoRectificativa
¿? {"RAFecOpe", "D", 8, 0},; // FechaOperacion
La pongo a piñon {"RADesOpe", "C", 250, 0},; // DescripcionOperacion
{"RAFSimpl", "C", 1, 0},; // FacturaSimplificadaArt7273
{"RAFSinId", "C", 1, 0},; // FacturaSinIdentifDestinatarioArt61d
Lo pongo a piñon {"RAMacroD", "C", 1, 0},; // Macrodato
No lo contemplo {"RAEmiTer", "C", 1, 0},; // EmitidaPorTerceroODestinatario
Lo pongo a piñon{"RACupon", "C", 250, 0},; // Cupon
{"RACuoTot", "N", 12, 2},; // CuotaTotal
{"RAImpTot", "N", 12, 2},; // ImporteTotal
No lo contemplo {"RANumAcu", "C", 15, 0},; // XX NumRegistroAcuerdoFacturacion
No lo contemplo{"RAIDSist", "C", 16, 0},; // XX IdAcuerdoSistemaInformatico
;
; // RegistroAnulacion
¿? {"RNOpeAnu", "C", 10, 0},; // cOperacionAnulacion
{"RNSinReg", "C", 1, 0},; // SinRegistroPrevio
{"RNGenPor", "C", 1, 0},; // GeneradoPor
;
; // IDFacturaExpedida
Está en el sistema {"IFIDEmis", "C", MAX_NIF, 0},; // IDEmisorFactura
{"IFNumSer", "C", 60, 0},; // NumSerieFactura
{"IFFecExp", "D", 8, 0},; // FechaExpedicionFactura
;
; // RegistroAnterior
Está en el sistema {"RGIDEmis", "C", 9, 0},; // IDEmisorFactura
{"RGNumSer", "C", 60, 0},; // NumSerieFactura
{"RGFecExp", "D", 8, 0},; // FechaExpedicionFactura
{"RGHuelll", "C", 64, 0},; // Huella
;
; // DesgloseRectificacion
Hoy por hoy sólo permito rectificativas por diferencia
No permito rectificativas por substitución
No lo contemplo {"DRBasRec", "N", 12, 2},; // BaseRectificada
No lo contemplo {"DRCuoRec", "N", 12, 2},; // CuotaRectificada
No lo contemplo {"DRCuRRec", "N", 12, 2},; // CuotaRecargoRectificado
;
; // DetalleDesglose
Lo tengo en facturas
{"DDTipImp1", "C", 10, 0},; // Impuesto (1)
{"DDTipImp2", "C", 10, 0},; // Impuesto (2)
{"DDTipImp3", "C", 10, 0},; // Impuesto (3)
{"DDTipImp4", "C", 10, 0},; // Impuesto (4)
{"DDTipImp5", "C", 10, 0},; // Impuesto (5)
{"DDTipImp6", "C", 10, 0},; // Impuesto (6)
{"DDClaReg1", "C", 2, 0},; // ClaveRegimen (1)
{"DDClaReg2", "C", 2, 0},; // ClaveRegimen (2)
{"DDClaReg3", "C", 2, 0},; // ClaveRegimen (3)
{"DDClaReg4", "C", 2, 0},; // ClaveRegimen (4)
{"DDClaReg5", "C", 2, 0},; // ClaveRegimen (5)
{"DDClaReg6", "C", 2, 0},; // ClaveRegimen (6)
{"DDCalOpe1", "C", 2, 0},; // CalificacionOperacion (1)
{"DDCalOpe2", "C", 2, 0},; // CalificacionOperacion (2)
{"DDCalOpe3", "C", 2, 0},; // CalificacionOperacion (3)
{"DDCalOpe4", "C", 2, 0},; // CalificacionOperacion (4)
{"DDCalOpe5", "C", 2, 0},; // CalificacionOperacion (5)
{"DDCalOpe6", "C", 2, 0},; // CalificacionOperacion (6)
{"DDExenta1", "C", 2, 0},; // OperacionExenta (1)
{"DDExenta2", "C", 2, 0},; // OperacionExenta (2)
{"DDExenta3", "C", 2, 0},; // OperacionExenta (3)
{"DDExenta4", "C", 2, 0},; // OperacionExenta (4)
{"DDExenta5", "C", 2, 0},; // OperacionExenta (5)
{"DDExenta6", "C", 2, 0},; // OperacionExenta (6)
{"DDTipImp1", "N", 5, 2},; // TipoImpositivo (1)
{"DDTipImp2", "N", 5, 2},; // TipoImpositivo (2)
{"DDTipImp3", "N", 5, 2},; // TipoImpositivo (3)
{"DDTipImp4", "N", 5, 2},; // TipoImpositivo (4)
{"DDTipImp5", "N", 5, 2},; // TipoImpositivo (5)
{"DDTipImp6", "N", 5, 2},; // TipoImpositivo (6)
{"DDBasImp1", "N", 12, 2},; // BaseImponible (1)
{"DDBasImp2", "N", 12, 2},; // BaseImponible (2)
{"DDBasImp3", "N", 12, 2},; // BaseImponible (3)
{"DDBasImp4", "N", 12, 2},; // BaseImponible (4)
{"DDBasImp5", "N", 12, 2},; // BaseImponible (5)
{"DDBasImp6", "N", 12, 2},; // BaseImponible (6)
{"DDBImACo1", "N", 12, 2},; // BaseImponibleACoste (1)
{"DDBImACo2", "N", 12, 2},; // BaseImponibleACoste (2)
{"DDBImACo3", "N", 12, 2},; // BaseImponibleACoste (3)
{"DDBImACo4", "N", 12, 2},; // BaseImponibleACoste (4)
{"DDBImACo5", "N", 12, 2},; // BaseImponibleACoste (5)
{"DDBImACo6", "N", 12, 2},; // BaseImponibleACoste (6)
{"DDCuoRep1", "N", 12, 2},; // CuotaRepercutida (1)
{"DDCuoRep2", "N", 12, 2},; // CuotaRepercutida (2)
{"DDCuoRep3", "N", 12, 2},; // CuotaRepercutida (3)
{"DDCuoRep4", "N", 12, 2},; // CuotaRepercutida (4)
{"DDCuoRep5", "N", 12, 2},; // CuotaRepercutida (5)
{"DDCuoRep6", "N", 12, 2},; // CuotaRepercutida (6)
{"DDTipRec1", "N", 5, 2},; // TipoRecargoEquivalencia (1)
{"DDTipRec2", "N", 5, 2},; // TipoRecargoEquivalencia (2)
{"DDTipRec3", "N", 5, 2},; // TipoRecargoEquivalencia (3)
{"DDTipRec4", "N", 5, 2},; // TipoRecargoEquivalencia (4)
{"DDTipRec5", "N", 5, 2},; // TipoRecargoEquivalencia (5)
{"DDTipRec6", "N", 5, 2},; // TipoRecargoEquivalencia (6)
{"DDCuoRec1", "N", 12, 2},; // CuotaRecargoEquivalencia (1)
{"DDCuoRec2", "N", 12, 2},; // CuotaRecargoEquivalencia (2)
{"DDCuoRec3", "N", 12, 2},; // CuotaRecargoEquivalencia (3)
{"DDCuoRec4", "N", 12, 2},; // CuotaRecargoEquivalencia (4)
{"DDCuoRec5", "N", 12, 2},; // CuotaRecargoEquivalencia (5)
{"DDCuoRec6", "N", 12, 2},; // CuotaRecargoEquivalencia (6)
;
; // Encadenamiento
Lo calculo al momento de generar el XML.
{"ENPriReg", "C", 1, 0},; // PrimerRegistro
;
;
; // ** RESPUESTA ** //
;
Prefiero capturar la Referencia Externa que se corresponderá a un registro enviado.
{"RSIDEmis", "C", MAX_NIF, 0},; // IDEmisorFactura
{"RSNumSer", "C", 10, 0},; // NumSerieFactura
{"RSFecExp", "D", 8, 0},; // FechaExpedicionFactura
{"RSTipOpe", "C", 10, 0},; // TipoOperacion
{"RSEstado", "C", 20, 0},; // Estado
No es correcto, puede haber más de un error por factura en la respuesta (en teoría).
{"RSCodErr", "N", 4, 0},; // CodigoError
{"RSDesErr", "C", 40, 0} ; // DescripcionError
}
Code: Select all | Expand
/**
* MCP.prg - Model Context Protocol Implementation in Harbour
* Based on the Python MCP SDK
*/
#include "FiveWin.ch"
/**
* Main MCP server class
*/
CREATE CLASS TMCPServer
VAR cName // Server name
VAR aResources // Resource collection
VAR aTools // Tools collection
VAR aPrompts // Template collection
VAR oContext // Application context
METHOD New(cName)
METHOD AddResource(cPattern, bCallback)
METHOD AddTool(cName, cDescription, bCallback)
METHOD AddPrompt(cName, cDescription, bCallback)
METHOD CallTool(hParams)
METHOD GetPrompt(hParams)
METHOD Run()
METHOD Initialize()
METHOD HandleMessage(cMessage)
METHOD ListPrompts()
METHOD ListResources()
METHOD ListTools()
METHOD ReadResource(hParams)
METHOD RespondJSON(hResponse)
ENDCLASS
METHOD New(cName) CLASS TMCPServer
::cName := cName
::aResources := {}
::aTools := {}
::aPrompts := {}
::oContext := TMCPContext():New()
RETURN Self
/**
* Registers a resource with a URI pattern
*/
METHOD AddResource(cPattern, bCallback) CLASS TMCPServer
LOCAL oResource
oResource := TMCPResource():New(cPattern, bCallback)
AAdd(::aResources, oResource)
RETURN oResource
/**
* Registers a tool that can be invoked by the LLM
*/
METHOD AddTool(cName, cDescription, bCallback) CLASS TMCPServer
LOCAL oTool
oTool := TMCPTool():New(cName, cDescription, bCallback)
AAdd(::aTools, oTool)
RETURN oTool
/**
* Registers a prompt for interaction with the LLM
*/
METHOD AddPrompt(cName, cDescription, bCallback) CLASS TMCPServer
LOCAL oPrompt
oPrompt := TMCPPrompt():New(cName, cDescription, bCallback)
AAdd(::aPrompts, oPrompt)
RETURN oPrompt
/**
* Executes a tool with the specified parameters
*
* @param hParams Call parameters including the tool name
* @return Result of the tool execution
*/
METHOD CallTool(hParams) CLASS TMCPServer
LOCAL cToolName, i, oTool, xResult, hError := {=>}
// Get the name of the tool to execute
cToolName := hParams["name"]
// Find the tool in the collection
oTool := NIL
FOR i := 1 TO Len(::aTools)
IF ::aTools[i]:cName == cToolName
oTool := ::aTools[i]
EXIT
ENDIF
NEXT
// Check if the tool exists
IF oTool == NIL
// Tool not found
hError["code"] := -32602
hError["message"] := "Tool not found: " + cToolName
RETURN hError
ENDIF
// Execute the tool with the provided parameters
BEGIN SEQUENCE WITH {|oErr| hError := ErrorHandler(oErr) }
xResult := oTool:Execute(hParams["params"])
RECOVER
// Error during execution was handled by ErrorHandler
RETURN hError
END SEQUENCE
RETURN xResult
/**
* Gets a template based on the provided name
*
* @param hParams Parameters including the template name
* @return Template content or error message
*/
METHOD GetPrompt(hParams) CLASS TMCPServer
LOCAL cPromptName, i, oPrompt, xResult, hError := {=>}
// Get the name of the requested template
cPromptName := hParams["name"]
// Find the template in the collection
oPrompt := NIL
FOR i := 1 TO Len(::aPrompts)
IF ::aPrompts[i]:cName == cPromptName
oPrompt := ::aPrompts[i]
EXIT
ENDIF
NEXT
// Verify if the template was found
IF oPrompt == NIL
// Template not found
hError["code"] := -32602
hError["message"] := "Template not found: " + cPromptName
RETURN hError
ENDIF
// Execute the template callback with the parameters
BEGIN SEQUENCE WITH {|oErr| hError := ErrorHandler(oErr) }
xResult := oPrompt:Execute(hParams["params"])
RECOVER
// Error during template processing was handled by ErrorHandler
RETURN hError
END SEQUENCE
RETURN xResult
/**
* Initializes the server and sends capabilities
*/
METHOD Initialize() CLASS TMCPServer
LOCAL hCapabilities, hResponse
// Define server capabilities
hCapabilities := {=>}
hCapabilities["prompts"] := {=>}
hCapabilities["prompts"]["listChanged"] := .T.
hCapabilities["resources"] := {=>}
hCapabilities["resources"]["subscribe"] := .T.
hCapabilities["resources"]["listChanged"] := .T.
hCapabilities["tools"] := {=>}
hCapabilities["tools"]["listChanged"] := .T.
// Create initialization response
hResponse := {=>}
hResponse["jsonrpc"] := "2.0"
hResponse["id"] := "init"
hResponse["result"] := {=>}
hResponse["result"]["name"] := ::cName
hResponse["result"]["version"] := "1.0.0"
hResponse["result"]["capabilities"] := hCapabilities
RETURN ::RespondJSON(hResponse)
/**
* Handles an incoming MCP protocol message
*/
METHOD HandleMessage(cMessage) CLASS TMCPServer
LOCAL hMessage, cMethod, xResult, hResponse
hMessage := hb_jsonDecode(cMessage)
cMethod := hMessage["method"]
// Process based on the requested method
DO CASE
CASE cMethod == "initialize"
RETURN ::Initialize()
CASE cMethod == "list_tools"
xResult := ::ListTools()
CASE cMethod == "list_resources"
xResult := ::ListResources()
CASE cMethod == "list_prompts"
xResult := ::ListPrompts()
CASE cMethod == "call_tool"
xResult := ::CallTool(hMessage["params"])
CASE cMethod == "read_resource"
xResult := ::ReadResource(hMessage["params"])
CASE cMethod == "get_prompt"
xResult := ::GetPrompt(hMessage["params"])
OTHERWISE
// Unknown method
hResponse := {=>}
hResponse["jsonrpc"] := "2.0"
hResponse["id"] := hMessage["id"]
hResponse["error"] := {=>}
hResponse["error"]["code"] := -32601
hResponse["error"]["message"] := "Method not supported: " + cMethod
RETURN ::RespondJSON(hResponse)
ENDCASE
// Build successful response
hResponse := {=>}
hResponse["jsonrpc"] := "2.0"
hResponse["id"] := hMessage["id"]
hResponse["result"] := xResult
RETURN ::RespondJSON(hResponse)
/**
* Returns the list of available templates
*/
METHOD ListPrompts() CLASS TMCPServer
LOCAL aPrompts := {}, i, hPrompt
// Convert each template to the format expected by the protocol
FOR i := 1 TO Len(::aPrompts)
hPrompt := {=>}
hPrompt["name"] := ::aPrompts[i]:cName
hPrompt["description"] := ::aPrompts[i]:cDescription
AAdd(aPrompts, hPrompt)
NEXT
RETURN aPrompts
/**
* Returns the list of available resources
*/
METHOD ListResources() CLASS TMCPServer
LOCAL aResources := {}, i, hResource
// Convert each resource to the format expected by the protocol
FOR i := 1 TO Len(::aResources)
hResource := {=>}
hResource["pattern"] := ::aResources[i]:cPattern
AAdd(aResources, hResource)
NEXT
RETURN aResources
/**
* Returns the list of available tools
*/
METHOD ListTools() CLASS TMCPServer
LOCAL aTools := {}, i, hTool
// Convert each tool to the format expected by the protocol
FOR i := 1 TO Len(::aTools)
hTool := {=>}
hTool["name"] := ::aTools[i]:cName
hTool["description"] := ::aTools[i]:cDescription
AAdd(aTools, hTool)
NEXT
RETURN aTools
/**
* Reads a resource according to the provided URI
*
* @param hParams Parameters including the resource URI to read
* @return Resource content or error message
*/
METHOD ReadResource(hParams) CLASS TMCPServer
LOCAL cUri, i, oResource, xResult, hError := {=>}
// Get the URI of the resource to read
cUri := hParams["uri"]
// Find a resource that matches the URI
oResource := NIL
FOR i := 1 TO Len(::aResources)
IF ::aResources[i]:Match(cUri)
oResource := ::aResources[i]
EXIT
ENDIF
NEXT
// Verify if a matching resource was found
IF oResource == NIL
// Resource not found
hError["code"] := -32602
hError["message"] := "Resource not found for URI: " + cUri
RETURN hError
ENDIF
// Execute the resource callback with the URI
BEGIN SEQUENCE WITH {|oErr| hError := ErrorHandler(oErr) }
xResult := oResource:Execute(cUri)
RECOVER
// Error during resource reading was handled by ErrorHandler
RETURN hError
END SEQUENCE
RETURN xResult
/**
* Sends a JSON response
*/
METHOD RespondJSON(hResponse) CLASS TMCPServer
LOCAL cResponse := hb_jsonEncode(hResponse)
? "Content-Length: " + AllTrim(Str(Len(cResponse)))
? ""
? cResponse
RETURN NIL
/**
* Runs the server in main mode
*/
METHOD Run() CLASS TMCPServer
LOCAL cLine, nContentLength, cMessage
// Main read/write loop via stdio
DO WHILE .T.
nContentLength := 0
// Read headers
DO WHILE .T.
cLine := FReadLine( 0 )
IF Empty(cLine)
EXIT
ENDIF
IF "Content-Length:" $ cLine
nContentLength := Val(SubStr(cLine, At(":", cLine) + 1))
ENDIF
IF cLine == ""
EXIT
ENDIF
ENDDO
// Read message body
IF nContentLength > 0
cMessage := Space(nContentLength)
FRead(0, @cMessage, nContentLength)
// Process message
::HandleMessage(cMessage)
ENDIF
ENDDO
RETURN NIL
/**
* Class to represent an MCP resource
*/
CREATE CLASS TMCPResource
VAR cPattern // URI pattern
VAR bCallback // Callback function
METHOD New(cPattern, bCallback)
METHOD Match(cUri)
METHOD Execute(cUri)
ENDCLASS
METHOD New(cPattern, bCallback) CLASS TMCPResource
::cPattern := cPattern
::bCallback := bCallback
RETURN Self
METHOD Match(cUri) CLASS TMCPResource
LOCAL aPatternParts, aUriParts, i, cPatternPart, cUriPart
LOCAL lMatch := .T.
LOCAL cPatternCopy, cUriCopy
// Normalize slashes and spaces
cPatternCopy := StrTran(::cPattern, "\", "/")
cUriCopy := StrTran(cUri, "\", "/")
// If patterns are exactly the same, they match
IF cPatternCopy == cUriCopy
RETURN .T.
ENDIF
// Split the pattern and URI into parts separated by "/"
aPatternParts := hb_ATokens(cPatternCopy, "/")
aUriParts := hb_ATokens(cUriCopy, "/")
// If they have different number of parts, they don't match
// (unless the pattern ends with "/**" for wildcard matching)
IF Len(aPatternParts) != Len(aUriParts) .AND. ;
!(Len(aPatternParts) > 0 .AND. aPatternParts[Len(aPatternParts)] == "**")
RETURN .F.
ENDIF
// Go through all parts and check for matches
FOR i := 1 TO Min(Len(aPatternParts), Len(aUriParts))
cPatternPart := aPatternParts[i]
cUriPart := aUriParts[i]
// Case 1: Exact match
IF cPatternPart == cUriPart
LOOP
ENDIF
// Case 2: Parameter with format {param}
IF Left(cPatternPart, 1) == "{" .AND. Right(cPatternPart, 1) == "}"
// It's a parameter, always matches
LOOP
ENDIF
// Case 3: Simple wildcard "*"
IF cPatternPart == "*"
// Simple wildcard, matches any part
LOOP
ENDIF
// Case 4: Recursive wildcard "**"
IF cPatternPart == "**"
// Recursive wildcard, matches the rest of the URI
RETURN .T.
ENDIF
// If we get here, there's no match
lMatch := .F.
// EXIT
NEXT
RETURN lMatch
METHOD Execute(cUri) CLASS TMCPResource
LOCAL aPatternParts, aUriParts, i, cPatternPart, cUriPart
LOCAL hParams := {=>} // Hash to store extracted parameters
LOCAL cPatternCopy, cUriCopy, cParamName
LOCAL xResult, hInfo := {=>}, hError := {=>}
// Normalize slashes
cPatternCopy := StrTran(::cPattern, "\", "/")
cUriCopy := StrTran(cUri, "\", "/")
// Split the pattern and URI into parts separated by "/"
aPatternParts := hb_ATokens(cPatternCopy, "/")
aUriParts := hb_ATokens(cUriCopy, "/")
// Extract parameters according to matching parts
FOR i := 1 TO Min(Len(aPatternParts), Len(aUriParts))
cPatternPart := aPatternParts[i]
cUriPart := aUriParts[i]
// If it's a parameter with format {param}
IF Left(cPatternPart, 1) == "{" .AND. Right(cPatternPart, 1) == "}"
// Extract parameter name without the braces
cParamName := SubStr(cPatternPart, 2, Len(cPatternPart) - 2)
// Store parameter value in the hash
hParams[cParamName] := cUriPart
ENDIF
NEXT
// Prepare information object for the callback
hInfo["uri"] := cUri
hInfo["pattern"] := ::cPattern
hInfo["params"] := hParams
// Handle possible errors during callback execution
BEGIN SEQUENCE WITH {|oErr| hError := ErrorHandler(oErr) }
// Execute the callback with the collected information
xResult := Eval(::bCallback, hInfo)
RECOVER
// Error was handled by ErrorHandler
RETURN hError
END SEQUENCE
RETURN xResult
/**
* Class to represent an MCP tool
*/
CREATE CLASS TMCPTool
VAR cName // Name
VAR cDescription // Description
VAR bCallback // Callback function
METHOD New(cName, cDescription, bCallback)
METHOD Execute(hParams)
ENDCLASS
METHOD New(cName, cDescription, bCallback) CLASS TMCPTool
::cName := cName
::cDescription := cDescription
::bCallback := bCallback
RETURN Self
METHOD Execute(hParams) CLASS TMCPTool
// Execute the callback with the provided parameters
RETURN Eval(::bCallback, hParams)
/**
* Class to represent an MCP prompt
*/
CREATE CLASS TMCPPrompt
VAR cName // Name
VAR cDescription // Description
VAR bCallback // Callback function
METHOD New(cName, cDescription, bCallback)
METHOD Execute(hParams)
ENDCLASS
METHOD New(cName, cDescription, bCallback) CLASS TMCPPrompt
::cName := cName
::cDescription := cDescription
::bCallback := bCallback
RETURN Self
METHOD Execute(hParams) CLASS TMCPPrompt
// Execute the callback with the provided parameters
RETURN Eval(::bCallback, hParams)
/**
* Class to handle execution context
*/
CREATE CLASS TMCPContext
VAR hLifespanContext // Lifespan context
METHOD New()
METHOD SetLifespanContext(hContext)
METHOD GetLifespanContext()
ENDCLASS
METHOD New() CLASS TMCPContext
::hLifespanContext := {=>}
RETURN Self
METHOD SetLifespanContext(hContext) CLASS TMCPContext
::hLifespanContext := hContext
RETURN NIL
METHOD GetLifespanContext() CLASS TMCPContext
RETURN ::hLifespanContext
/**
* Error handler function for MCP operations
*/
FUNCTION ErrorHandler(oError)
LOCAL hError := {=>}
hError["code"] := -32603
hError["message"] := "Error during execution: " + ;
IIf(ValType(oError) == "C", oError, ;
IIf(ValType(oError) == "O" .AND. HB_ISOBJECT(oError) .AND. ;
__objHasMsg(oError, "Operation"), ;
oError:Operation(), "Unknown error"))
RETURN hError
function CreateMCPServer( cName)
LOCAL oServer := TMCPServer():New(cName)
// Initialize the server
oServer:Initialize()
RETURN oServer
/**
* FReadLine() - Reads a line from a file or standard input
*
* @param nHandle File handle (0 for stdin, 1 for stdout, 2 for stderr)
* @param nMaxLen Maximum length to read (default is 4096)
* @param cEOL End of line character(s) (default is CRLF or LF)
* @return cLine Line read from the file/stdin
*/
FUNCTION FReadLine(nHandle, nMaxLen, cEOL)
LOCAL cChar, cLine := "", nByte
LOCAL lCR := .F.
// Default values
nHandle := IIf(nHandle == NIL, 0, nHandle)
nMaxLen := IIf(nMaxLen == NIL, 4096, nMaxLen)
cEOL := IIf(cEOL == NIL, hb_OSNewLine(), cEOL)
// Read one byte at a time until EOL or max length
DO WHILE Len(cLine) < nMaxLen
// Allocate space for a single character
cChar := Space(1)
// Read a single byte
nByte := FRead(nHandle, @cChar, 1)
// EOF or error
IF nByte <= 0
IF Empty(cLine)
RETURN NIL // Return NIL on EOF with no data read
ELSE
EXIT // Return whatever was read if EOF after some data
ENDIF
ENDIF
// Handle different EOL sequences
IF cChar == Chr(13) // CR (Carriage Return)
lCR := .T.
// Don't add CR to result string, wait to see if LF follows
ELSEIF cChar == Chr(10) // LF (Line Feed)
IF lCR
// If we just saw a CR, this is a CRLF sequence
EXIT // End of line found (CRLF)
ELSE
// Just a LF without CR
EXIT // End of line found (LF only)
ENDIF
ELSE
// Add any pending CR if not followed by LF
IF lCR
cLine += Chr(13)
lCR := .F.
ENDIF
// Add the character to the result
cLine += cChar
ENDIF
ENDDO
RETURN cLine
Code: Select all | Expand
/**
* MCP.prg - Model Context Protocol Implementation in Harbour
* Based on the Python MCP SDK
*/
#include "FiveWin.ch"
/**
* Main MCP server class
*/
CREATE CLASS TMCPServer
VAR cName // Server name
VAR aResources // Resource collection
VAR aTools // Tools collection
VAR aPrompts // Template collection
VAR oContext // Application context
METHOD New(cName)
METHOD AddResource(cPattern, bCallback)
METHOD AddTool(cName, cDescription, bCallback)
METHOD AddPrompt(cName, cDescription, bCallback)
METHOD CallTool(hParams)
METHOD GetPrompt(hParams)
METHOD Run()
METHOD Initialize()
METHOD HandleMessage(cMessage)
METHOD ListPrompts()
METHOD ListResources()
METHOD ListTools()
METHOD ReadResource(hParams)
METHOD RespondJSON(hResponse)
ENDCLASS
METHOD New(cName) CLASS TMCPServer
::cName := cName
::aResources := {}
::aTools := {}
::aPrompts := {}
::oContext := TMCPContext():New()
RETURN Self
/**
* Registers a resource with a URI pattern
*/
METHOD AddResource(cPattern, bCallback) CLASS TMCPServer
LOCAL oResource
oResource := TMCPResource():New(cPattern, bCallback)
AAdd(::aResources, oResource)
RETURN oResource
/**
* Registers a tool that can be invoked by the LLM
*/
METHOD AddTool(cName, cDescription, bCallback) CLASS TMCPServer
LOCAL oTool
oTool := TMCPTool():New(cName, cDescription, bCallback)
AAdd(::aTools, oTool)
RETURN oTool
/**
* Registers a prompt for interaction with the LLM
*/
METHOD AddPrompt(cName, cDescription, bCallback) CLASS TMCPServer
LOCAL oPrompt
oPrompt := TMCPPrompt():New(cName, cDescription, bCallback)
AAdd(::aPrompts, oPrompt)
RETURN oPrompt
/**
* Executes a tool with the specified parameters
*
* @param hParams Call parameters including the tool name
* @return Result of the tool execution
*/
METHOD CallTool(hParams) CLASS TMCPServer
LOCAL cToolName, i, oTool, xResult, hError := {=>}
// Get the name of the tool to execute
cToolName := hParams["name"]
// Find the tool in the collection
oTool := NIL
FOR i := 1 TO Len(::aTools)
IF ::aTools[i]:cName == cToolName
oTool := ::aTools[i]
EXIT
ENDIF
NEXT
// Check if the tool exists
IF oTool == NIL
// Tool not found
hError["code"] := -32602
hError["message"] := "Tool not found: " + cToolName
RETURN hError
ENDIF
// Execute the tool with the provided parameters
BEGIN SEQUENCE WITH {|oErr| hError := ErrorHandler(oErr) }
xResult := oTool:Execute(hParams["params"])
RECOVER
// Error during execution was handled by ErrorHandler
RETURN hError
END SEQUENCE
RETURN xResult
/**
* Gets a template based on the provided name
*
* @param hParams Parameters including the template name
* @return Template content or error message
*/
METHOD GetPrompt(hParams) CLASS TMCPServer
LOCAL cPromptName, i, oPrompt, xResult, hError := {=>}
// Get the name of the requested template
cPromptName := hParams["name"]
// Find the template in the collection
oPrompt := NIL
FOR i := 1 TO Len(::aPrompts)
IF ::aPrompts[i]:cName == cPromptName
oPrompt := ::aPrompts[i]
EXIT
ENDIF
NEXT
// Verify if the template was found
IF oPrompt == NIL
// Template not found
hError["code"] := -32602
hError["message"] := "Template not found: " + cPromptName
RETURN hError
ENDIF
// Execute the template callback with the parameters
BEGIN SEQUENCE WITH {|oErr| hError := ErrorHandler(oErr) }
xResult := oPrompt:Execute(hParams["params"])
RECOVER
// Error during template processing was handled by ErrorHandler
RETURN hError
END SEQUENCE
RETURN xResult
/**
* Initializes the server and sends capabilities
*/
METHOD Initialize() CLASS TMCPServer
LOCAL hCapabilities, hResponse
// Define server capabilities
hCapabilities := {=>}
hCapabilities["prompts"] := {=>}
hCapabilities["prompts"]["listChanged"] := .T.
hCapabilities["resources"] := {=>}
hCapabilities["resources"]["subscribe"] := .T.
hCapabilities["resources"]["listChanged"] := .T.
hCapabilities["tools"] := {=>}
hCapabilities["tools"]["listChanged"] := .T.
// Create initialization response
hResponse := {=>}
hResponse["jsonrpc"] := "2.0"
hResponse["id"] := "init"
hResponse["result"] := {=>}
hResponse["result"]["name"] := ::cName
hResponse["result"]["version"] := "1.0.0"
hResponse["result"]["capabilities"] := hCapabilities
RETURN ::RespondJSON(hResponse)
/**
* Handles an incoming MCP protocol message
*/
METHOD HandleMessage(cMessage) CLASS TMCPServer
LOCAL hMessage, cMethod, xResult, hResponse
hMessage := hb_jsonDecode(cMessage)
cMethod := hMessage["method"]
// Process based on the requested method
DO CASE
CASE cMethod == "initialize"
RETURN ::Initialize()
CASE cMethod == "list_tools"
xResult := ::ListTools()
CASE cMethod == "list_resources"
xResult := ::ListResources()
CASE cMethod == "list_prompts"
xResult := ::ListPrompts()
CASE cMethod == "call_tool"
xResult := ::CallTool(hMessage["params"])
CASE cMethod == "read_resource"
xResult := ::ReadResource(hMessage["params"])
CASE cMethod == "get_prompt"
xResult := ::GetPrompt(hMessage["params"])
OTHERWISE
// Unknown method
hResponse := {=>}
hResponse["jsonrpc"] := "2.0"
hResponse["id"] := hMessage["id"]
hResponse["error"] := {=>}
hResponse["error"]["code"] := -32601
hResponse["error"]["message"] := "Method not supported: " + cMethod
RETURN ::RespondJSON(hResponse)
ENDCASE
// Build successful response
hResponse := {=>}
hResponse["jsonrpc"] := "2.0"
hResponse["id"] := hMessage["id"]
hResponse["result"] := xResult
RETURN ::RespondJSON(hResponse)
/**
* Returns the list of available templates
*/
METHOD ListPrompts() CLASS TMCPServer
LOCAL aPrompts := {}, i, hPrompt
// Convert each template to the format expected by the protocol
FOR i := 1 TO Len(::aPrompts)
hPrompt := {=>}
hPrompt["name"] := ::aPrompts[i]:cName
hPrompt["description"] := ::aPrompts[i]:cDescription
AAdd(aPrompts, hPrompt)
NEXT
RETURN aPrompts
/**
* Returns the list of available resources
*/
METHOD ListResources() CLASS TMCPServer
LOCAL aResources := {}, i, hResource
// Convert each resource to the format expected by the protocol
FOR i := 1 TO Len(::aResources)
hResource := {=>}
hResource["pattern"] := ::aResources[i]:cPattern
AAdd(aResources, hResource)
NEXT
RETURN aResources
/**
* Returns the list of available tools
*/
METHOD ListTools() CLASS TMCPServer
LOCAL aTools := {}, i, hTool
// Convert each tool to the format expected by the protocol
FOR i := 1 TO Len(::aTools)
hTool := {=>}
hTool["name"] := ::aTools[i]:cName
hTool["description"] := ::aTools[i]:cDescription
AAdd(aTools, hTool)
NEXT
RETURN aTools
/**
* Reads a resource according to the provided URI
*
* @param hParams Parameters including the resource URI to read
* @return Resource content or error message
*/
METHOD ReadResource(hParams) CLASS TMCPServer
LOCAL cUri, i, oResource, xResult, hError := {=>}
// Get the URI of the resource to read
cUri := hParams["uri"]
// Find a resource that matches the URI
oResource := NIL
FOR i := 1 TO Len(::aResources)
IF ::aResources[i]:Match(cUri)
oResource := ::aResources[i]
EXIT
ENDIF
NEXT
// Verify if a matching resource was found
IF oResource == NIL
// Resource not found
hError["code"] := -32602
hError["message"] := "Resource not found for URI: " + cUri
RETURN hError
ENDIF
// Execute the resource callback with the URI
BEGIN SEQUENCE WITH {|oErr| hError := ErrorHandler(oErr) }
xResult := oResource:Execute(cUri)
RECOVER
// Error during resource reading was handled by ErrorHandler
RETURN hError
END SEQUENCE
RETURN xResult
/**
* Sends a JSON response
*/
METHOD RespondJSON(hResponse) CLASS TMCPServer
LOCAL cResponse := hb_jsonEncode(hResponse)
? "Content-Length: " + AllTrim(Str(Len(cResponse)))
? ""
? cResponse
RETURN NIL
/**
* Runs the server in main mode
*/
METHOD Run() CLASS TMCPServer
LOCAL cLine, nContentLength, cMessage
// Main read/write loop via stdio
DO WHILE .T.
nContentLength := 0
// Read headers
DO WHILE .T.
cLine := FReadLine( 0 )
IF Empty(cLine)
EXIT
ENDIF
IF "Content-Length:" $ cLine
nContentLength := Val(SubStr(cLine, At(":", cLine) + 1))
ENDIF
IF cLine == ""
EXIT
ENDIF
ENDDO
// Read message body
IF nContentLength > 0
cMessage := Space(nContentLength)
FRead(0, @cMessage, nContentLength)
// Process message
::HandleMessage(cMessage)
ENDIF
ENDDO
RETURN NIL
/**
* Class to represent an MCP resource
*/
CREATE CLASS TMCPResource
VAR cPattern // URI pattern
VAR bCallback // Callback function
METHOD New(cPattern, bCallback)
METHOD Match(cUri)
METHOD Execute(cUri)
ENDCLASS
METHOD New(cPattern, bCallback) CLASS TMCPResource
::cPattern := cPattern
::bCallback := bCallback
RETURN Self
METHOD Match(cUri) CLASS TMCPResource
LOCAL aPatternParts, aUriParts, i, cPatternPart, cUriPart
LOCAL lMatch := .T.
LOCAL cPatternCopy, cUriCopy
// Normalize slashes and spaces
cPatternCopy := StrTran(::cPattern, "\", "/")
cUriCopy := StrTran(cUri, "\", "/")
// If patterns are exactly the same, they match
IF cPatternCopy == cUriCopy
RETURN .T.
ENDIF
// Split the pattern and URI into parts separated by "/"
aPatternParts := hb_ATokens(cPatternCopy, "/")
aUriParts := hb_ATokens(cUriCopy, "/")
// If they have different number of parts, they don't match
// (unless the pattern ends with "/**" for wildcard matching)
IF Len(aPatternParts) != Len(aUriParts) .AND. ;
!(Len(aPatternParts) > 0 .AND. aPatternParts[Len(aPatternParts)] == "**")
RETURN .F.
ENDIF
// Go through all parts and check for matches
FOR i := 1 TO Min(Len(aPatternParts), Len(aUriParts))
cPatternPart := aPatternParts[i]
cUriPart := aUriParts[i]
// Case 1: Exact match
IF cPatternPart == cUriPart
LOOP
ENDIF
// Case 2: Parameter with format {param}
IF Left(cPatternPart, 1) == "{" .AND. Right(cPatternPart, 1) == "}"
// It's a parameter, always matches
LOOP
ENDIF
// Case 3: Simple wildcard "*"
IF cPatternPart == "*"
// Simple wildcard, matches any part
LOOP
ENDIF
// Case 4: Recursive wildcard "**"
IF cPatternPart == "**"
// Recursive wildcard, matches the rest of the URI
RETURN .T.
ENDIF
// If we get here, there's no match
lMatch := .F.
// EXIT
NEXT
RETURN lMatch
METHOD Execute(cUri) CLASS TMCPResource
LOCAL aPatternParts, aUriParts, i, cPatternPart, cUriPart
LOCAL hParams := {=>} // Hash to store extracted parameters
LOCAL cPatternCopy, cUriCopy, cParamName
LOCAL xResult, hInfo := {=>}, hError := {=>}
// Normalize slashes
cPatternCopy := StrTran(::cPattern, "\", "/")
cUriCopy := StrTran(cUri, "\", "/")
// Split the pattern and URI into parts separated by "/"
aPatternParts := hb_ATokens(cPatternCopy, "/")
aUriParts := hb_ATokens(cUriCopy, "/")
// Extract parameters according to matching parts
FOR i := 1 TO Min(Len(aPatternParts), Len(aUriParts))
cPatternPart := aPatternParts[i]
cUriPart := aUriParts[i]
// If it's a parameter with format {param}
IF Left(cPatternPart, 1) == "{" .AND. Right(cPatternPart, 1) == "}"
// Extract parameter name without the braces
cParamName := SubStr(cPatternPart, 2, Len(cPatternPart) - 2)
// Store parameter value in the hash
hParams[cParamName] := cUriPart
ENDIF
NEXT
// Prepare information object for the callback
hInfo["uri"] := cUri
hInfo["pattern"] := ::cPattern
hInfo["params"] := hParams
// Handle possible errors during callback execution
BEGIN SEQUENCE WITH {|oErr| hError := ErrorHandler(oErr) }
// Execute the callback with the collected information
xResult := Eval(::bCallback, hInfo)
RECOVER
// Error was handled by ErrorHandler
RETURN hError
END SEQUENCE
RETURN xResult
/**
* Class to represent an MCP tool
*/
CREATE CLASS TMCPTool
VAR cName // Name
VAR cDescription // Description
VAR bCallback // Callback function
METHOD New(cName, cDescription, bCallback)
METHOD Execute(hParams)
ENDCLASS
METHOD New(cName, cDescription, bCallback) CLASS TMCPTool
::cName := cName
::cDescription := cDescription
::bCallback := bCallback
RETURN Self
METHOD Execute(hParams) CLASS TMCPTool
// Execute the callback with the provided parameters
RETURN Eval(::bCallback, hParams)
/**
* Class to represent an MCP prompt
*/
CREATE CLASS TMCPPrompt
VAR cName // Name
VAR cDescription // Description
VAR bCallback // Callback function
METHOD New(cName, cDescription, bCallback)
METHOD Execute(hParams)
ENDCLASS
METHOD New(cName, cDescription, bCallback) CLASS TMCPPrompt
::cName := cName
::cDescription := cDescription
::bCallback := bCallback
RETURN Self
METHOD Execute(hParams) CLASS TMCPPrompt
// Execute the callback with the provided parameters
RETURN Eval(::bCallback, hParams)
/**
* Class to handle execution context
*/
CREATE CLASS TMCPContext
VAR hLifespanContext // Lifespan context
METHOD New()
METHOD SetLifespanContext(hContext)
METHOD GetLifespanContext()
ENDCLASS
METHOD New() CLASS TMCPContext
::hLifespanContext := {=>}
RETURN Self
METHOD SetLifespanContext(hContext) CLASS TMCPContext
::hLifespanContext := hContext
RETURN NIL
METHOD GetLifespanContext() CLASS TMCPContext
RETURN ::hLifespanContext
/**
* Error handler function for MCP operations
*/
FUNCTION ErrorHandler(oError)
LOCAL hError := {=>}
hError["code"] := -32603
hError["message"] := "Error during execution: " + ;
IIf(ValType(oError) == "C", oError, ;
IIf(ValType(oError) == "O" .AND. HB_ISOBJECT(oError) .AND. ;
__objHasMsg(oError, "Operation"), ;
oError:Operation(), "Unknown error"))
RETURN hError
function CreateMCPServer( cName)
LOCAL oServer := TMCPServer():New(cName)
// Initialize the server
oServer:Initialize()
RETURN oServer
/**
* FReadLine() - Reads a line from a file or standard input
*
* @param nHandle File handle (0 for stdin, 1 for stdout, 2 for stderr)
* @param nMaxLen Maximum length to read (default is 4096)
* @param cEOL End of line character(s) (default is CRLF or LF)
* @return cLine Line read from the file/stdin
*/
FUNCTION FReadLine(nHandle, nMaxLen, cEOL)
LOCAL cChar, cLine := "", nByte
LOCAL lCR := .F.
// Default values
nHandle := IIf(nHandle == NIL, 0, nHandle)
nMaxLen := IIf(nMaxLen == NIL, 4096, nMaxLen)
cEOL := IIf(cEOL == NIL, hb_OSNewLine(), cEOL)
// Read one byte at a time until EOL or max length
DO WHILE Len(cLine) < nMaxLen
// Allocate space for a single character
cChar := Space(1)
// Read a single byte
nByte := FRead(nHandle, @cChar, 1)
// EOF or error
IF nByte <= 0
IF Empty(cLine)
RETURN NIL // Return NIL on EOF with no data read
ELSE
EXIT // Return whatever was read if EOF after some data
ENDIF
ENDIF
// Handle different EOL sequences
IF cChar == Chr(13) // CR (Carriage Return)
lCR := .T.
// Don't add CR to result string, wait to see if LF follows
ELSEIF cChar == Chr(10) // LF (Line Feed)
IF lCR
// If we just saw a CR, this is a CRLF sequence
EXIT // End of line found (CRLF)
ELSE
// Just a LF without CR
EXIT // End of line found (LF only)
ENDIF
ELSE
// Add any pending CR if not followed by LF
IF lCR
cLine += Chr(13)
lCR := .F.
ENDIF
// Add the character to the result
cLine += cChar
ENDIF
ENDDO
RETURN cLine
Code: Select all | Expand
#include "FiveWin.ch"
#include "hbcurl.ch"
// Activar depuración (comentar esta línea para desactivarla)
#define DEBUG
FUNCTION Main()
local oLlama, oAgent
oLlama = TOLlama():New()
// Agente para mostrar la hora
oAgent = TAgent():New( "time", { {"get_time", {|hParams| GetCurrentTime(hParams)} } } )
AAdd( oLlama:aAgents, oAgent )
// Agente para filesystem con múltiples tools
oAgent = TAgent():New( "filesystem", { ;
{"create_folder", {|hParams| CreateFolder(hParams)} },;
{"create_file", {|hParams| CreateFile(hParams)} },;
{"modify_file", {|hParams| ModifyFile(hParams)} } } )
AAdd( oLlama:aAgents, oAgent )
#ifdef DEBUG
? "DEBUG: Probando 'What time is it?'"
#endif
fw_memoEdit( oLlama:Send( "What time is it?" ) )
#ifdef DEBUG
? "DEBUG: Probando 'Create a folder named test'"
#endif
fw_memoEdit( oLlama:Send( "Create a folder named 'test'" ) )
#ifdef DEBUG
? "DEBUG: Probando 'Create a file called test.txt'"
#endif
fw_memoEdit( oLlama:Send( "Create a file called 'test.txt'" ) )
#ifdef DEBUG
? "DEBUG: Probando 'Modify the file test.txt with content Hello World'"
#endif
fw_memoEdit( oLlama:Send( "Modify the file test.txt with content Hello World" ) )
oLlama:End()
return nil
FUNCTION GetCurrentTime( hParams )
local cTime := Time()
return "The current time is " + cTime // No necesita parámetros, pero acepta hParams por consistencia
FUNCTION CreateFolder( hParams )
local cFolder
if hb_HHasKey( hParams, "folder_name" ) .and. ! Empty( hParams[ "folder_name" ] )
cFolder = hParams[ "folder_name" ]
DirMake( cFolder )
return "Folder '" + cFolder + "' created successfully"
endif
return "Failed to create folder: no name specified"
FUNCTION CreateFile( hParams )
local cFile
if hb_HHasKey( hParams, "filename" ) .and. ! Empty( hParams[ "filename" ] )
cFile = hParams[ "filename" ]
hb_MemoWrit( cFile, "" )
return "File '" + cFile + "' created successfully"
endif
return "Failed to create file: no name specified"
FUNCTION ModifyFile( hParams )
local cFile, cContent
if hb_HHasKey( hParams, "filename" ) .and. ! Empty( hParams[ "filename" ] ) .and. ;
hb_HHasKey( hParams, "content" ) .and. ! Empty( hParams[ "content" ] )
cFile = hParams[ "filename" ]
cContent = hParams[ "content" ]
hb_MemoWrit( cFile, cContent )
return "File '" + cFile + "' modified with content: " + cContent
endif
return "Failed to modify file: missing file name or content"
CLASS TOLlama
DATA cModel
DATA cPrompt
DATA cResponse
DATA cUrl
DATA hCurl
DATA nError INIT 0
DATA nHttpCode INIT 0
DATA aAgents INIT {}
METHOD New( cModel )
METHOD Send( cPrompt, cImageFileName, bWriteFunction )
METHOD GetPromptCategory( cPrompt )
METHOD GetToolName( cPrompt, oAgent )
METHOD End()
METHOD GetValue()
ENDCLASS
METHOD New( cModel ) CLASS TOLlama
DEFAULT cModel := "gemma3"
::cModel = cModel
::cUrl = "http://localhost:11434/api/chat"
::hCurl = curl_easy_init()
return Self
METHOD GetPromptCategory( cPrompt ) CLASS TOLlama
local cJson, hRequest := { => }, hMessage := { => }
local cCategoryResponse, hResponse
local nError, cCategories, nI, nJ
cCategories = ""
if ! Empty( ::aAgents )
for nI = 1 to Len( ::aAgents )
cCategories += "'" + ::aAgents[ nI ]:cCategory + "'"
if nI < Len( ::aAgents )
cCategories += ", "
endif
next
else
cCategories = "'general'"
endif
curl_easy_reset( ::hCurl )
curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, .T. )
curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cUrl )
curl_easy_setopt( ::hCurl, HB_CURLOPT_HTTPHEADER, { "Content-Type: application/json" } )
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. )
hRequest[ "model" ] = ::cModel
hMessage[ "role" ] = "user"
hMessage[ "content" ] = "Classify this prompt: '" + cPrompt + "' into one of these categories: " + ;
cCategories + ". Respond with only the category name."
hRequest[ "messages" ] = { hMessage }
hRequest[ "stream" ] = .F.
hRequest[ "temperature" ] = 0.5
cJson = hb_jsonEncode( hRequest )
curl_easy_setopt( ::hCurl, HB_CURLOPT_POSTFIELDS, cJson )
nError = curl_easy_perform( ::hCurl )
if nError == HB_CURLE_OK
cCategoryResponse = curl_easy_dl_buff_get( ::hCurl )
hb_jsonDecode( cCategoryResponse, @hResponse )
#ifdef DEBUG
? "DEBUG: Categoría devuelta por IA:", hResponse[ "message" ][ "content" ]
#endif
return hResponse[ "message" ][ "content" ]
endif
#ifdef DEBUG
? "DEBUG: Error en GetPromptCategory:", nError
#endif
return nil
METHOD GetToolName( cPrompt, oAgent ) CLASS TOLlama
local cJson, hRequest := { => }, hMessage := { => }
local cToolResponse, hResponse, hToolInfo
local nError, cTools := "", nI
if ! Empty( oAgent:aTools )
for nI = 1 to Len( oAgent:aTools )
cTools += "'" + oAgent:aTools[ nI ][ 1 ] + "'"
if nI < Len( oAgent:aTools )
cTools += ", "
endif
next
endif
curl_easy_reset( ::hCurl )
curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, .T. )
curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cUrl )
curl_easy_setopt( ::hCurl, HB_CURLOPT_HTTPHEADER, { "Content-Type: application/json" } )
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. )
hRequest[ "model" ] = ::cModel
hMessage[ "role" ] = "user"
hMessage[ "content" ] = "Given this prompt: '" + cPrompt + "' and category '" + oAgent:cCategory + "', " + ;
"select the appropriate tool from: " + cTools + " and extract any relevant parameters. " + ;
"Respond with a JSON object containing 'tool' (the tool name) and 'params' (a hash of parameters)."
hRequest[ "messages" ] = { hMessage }
hRequest[ "stream" ] = .F.
hRequest[ "temperature" ] = 0.5
cJson = hb_jsonEncode( hRequest )
curl_easy_setopt( ::hCurl, HB_CURLOPT_POSTFIELDS, cJson )
nError = curl_easy_perform( ::hCurl )
if nError == HB_CURLE_OK
cToolResponse = curl_easy_dl_buff_get( ::hCurl )
hb_jsonDecode( cToolResponse, @hResponse )
#ifdef DEBUG
? "DEBUG: Respuesta cruda de IA:", cToolResponse
? "DEBUG: hResponse tras decodificar:", hb_jsonEncode( hResponse )
? "DEBUG: Contenido de hResponse[ 'message' ][ 'content' ]:", hResponse[ "message" ][ "content" ]
#endif
hResponse[ "message" ][ "content" ] = SubStr( hResponse[ "message" ][ "content" ], 9 )
hResponse[ "message" ][ "content" ] = SubStr( hResponse[ "message" ][ "content" ], 1, Len( hResponse[ "message" ][ "content" ] ) - 3 )
hb_jsonDecode( hResponse[ "message" ][ "content" ], @hToolInfo )
#ifdef DEBUG
? "DEBUG: hToolInfo tras procesar:", hb_jsonEncode( hToolInfo )
? "DEBUG: Tipo de hToolInfo:", ValType( hToolInfo )
if ValType( hToolInfo ) == "H"
? "DEBUG: Claves en hToolInfo:", hb_HKeys( hToolInfo )
endif
#endif
return hToolInfo
endif
#ifdef DEBUG
? "DEBUG: Error en GetToolName:", nError
#endif
return nil
METHOD Send( cPrompt, cImageFileName, bWriteFunction ) CLASS TOLlama
local aHeaders, cJson, hRequest := { => }, hMessage := { => }
local cBase64Image
local oAgent, cToolResult, nI, hToolInfo, cToolName, nTool
local cCategory
if ! Empty( cPrompt )
::cPrompt = cPrompt
endif
if ! Empty( ::aAgents )
cCategory = ::GetPromptCategory( cPrompt )
#ifdef DEBUG
? "DEBUG: Categoría obtenida (sin limpiar):", cCategory
#endif
cCategory = AllTrim( StrTran( StrTran( cCategory, Chr(13), "" ), Chr(10), "" ) )
#ifdef DEBUG
? "DEBUG: Categoría obtenida (limpia):", cCategory
#endif
if ! Empty( cCategory )
for nI = 1 to Len( ::aAgents )
oAgent = ::aAgents[ nI ]
#ifdef DEBUG
? "DEBUG: Comparando categoría del agente:", oAgent:cCategory, "con categoría obtenida:", cCategory
? "DEBUG: Longitud de oAgent:cCategory:", Len( oAgent:cCategory ), "Longitud de cCategory:", Len( cCategory )
? "DEBUG: oAgent:cCategory en hex:", hb_StrToHex( oAgent:cCategory )
? "DEBUG: cCategory en hex:", hb_StrToHex( cCategory )
? "DEBUG: Lower(oAgent:cCategory):", Lower( oAgent:cCategory ), "Lower(cCategory):", Lower( cCategory )
#endif
if Lower( AllTrim( oAgent:cCategory ) ) == Lower( AllTrim( cCategory ) )
#ifdef DEBUG
? "DEBUG: ¡Coincidencia encontrada para categoría!"
#endif
if ! Empty( oAgent:aTools )
hToolInfo = ::GetToolName( cPrompt, oAgent )
#ifdef DEBUG
? "DEBUG: hToolInfo recibido:", hb_jsonEncode( hToolInfo )
#endif
if ValType( hToolInfo ) == "H" .and. hb_HHasKey( hToolInfo, "tool" )
cToolName = AllTrim( StrTran( StrTran( hToolInfo[ "tool" ], Chr(13), "" ), Chr(10), "" ) )
#ifdef DEBUG
? "DEBUG: Tool obtenida (limpia):", cToolName
? "DEBUG: Parámetros extraídos:", hb_jsonEncode( hToolInfo[ "params" ] )
#endif
if ! Empty( cToolName )
nTool = 0
for nJ = 1 to Len( oAgent:aTools )
#ifdef DEBUG
? "DEBUG: Comparando tool del agente:", oAgent:aTools[ nJ ][ 1 ], "con tool obtenida:", cToolName
? "DEBUG: Longitud de oAgent:aTools[", nJ, "][1]:", Len( oAgent:aTools[ nJ ][ 1 ] ), "Longitud de cToolName:", Len( cToolName )
? "DEBUG: oAgent:aTools[", nI, "][1] en hex:", hb_StrToHex( oAgent:aTools[ nJ ][ 1 ] )
? "DEBUG: cToolName en hex:", hb_StrToHex( cToolName )
? "DEBUG: Lower(oAgent:aTools[", nJ, "][1]):", Lower( oAgent:aTools[ nJ ][ 1 ] ), "Lower(cToolName):", Lower( cToolName )
#endif
if Lower( AllTrim( oAgent:aTools[ nJ ][ 1 ] ) ) == Lower( AllTrim( cToolName ) )
nTool = nJ
#ifdef DEBUG
? "DEBUG: ¡Coincidencia encontrada para tool!"
#endif
exit
endif
next
if nTool > 0
cToolResult = Eval( oAgent:aTools[ nTool ][ 2 ], hToolInfo[ "params" ] )
#ifdef DEBUG
? "DEBUG: Resultado de la tool:", cToolResult
#endif
::cResponse = hb_jsonEncode( { "message" => { "content" => cToolResult }, "done" => .T. } )
return ::cResponse
else
#ifdef DEBUG
? "DEBUG: Tool '" + cToolName + "' no encontrada en el agente '" + oAgent:cCategory + "'"
#endif
::cResponse = hb_jsonEncode( { "message" => { "content" => "Tool not found" }, "done" => .T. } )
return ::cResponse
endif
else
#ifdef DEBUG
? "DEBUG: No se obtuvo nombre de tool válido"
#endif
::cResponse = hb_jsonEncode( { "message" => { "content" => "No tool selected" }, "done" => .T. } )
return ::cResponse
endif
else
#ifdef DEBUG
? "DEBUG: Respuesta de GetToolName no válida o sin 'tool'. Tipo:", ValType( hToolInfo )
if ValType( hToolInfo ) == "H"
? "DEBUG: Claves en hToolInfo:", hb_HKeys( hToolInfo )
endif
#endif
::cResponse = hb_jsonEncode( { "message" => { "content" => "Invalid tool response" }, "done" => .T. } )
return ::cResponse
endif
else
#ifdef DEBUG
? "DEBUG: El agente '" + oAgent:cCategory + "' no tiene tools"
#endif
::cResponse = hb_jsonEncode( { "message" => { "content" => "No tools available" }, "done" => .T. } )
return ::cResponse
endif
else
#ifdef DEBUG
? "DEBUG: No hay coincidencia entre '" + Lower( AllTrim( oAgent:cCategory ) ) + "' y '" + Lower( AllTrim( cCategory ) ) + "'"
#endif
endif
next
#ifdef DEBUG
? "DEBUG: No se encontró agente para la categoría '" + cCategory + "'"
#endif
::cResponse = hb_jsonEncode( { "message" => { "content" => "Agent not found" }, "done" => .T. } )
return ::cResponse
else
#ifdef DEBUG
? "DEBUG: No se obtuvo categoría válida"
#endif
endif
else
#ifdef DEBUG
? "DEBUG: No hay agentes definidos"
#endif
endif
#ifdef DEBUG
? "DEBUG: Llamando a la API de Ollama"
#endif
curl_easy_reset( ::hCurl )
curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, .T. )
curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cUrl )
aHeaders := { "Content-Type: application/json" }
curl_easy_setopt( ::hCurl, HB_CURLOPT_HTTPHEADER, aHeaders )
curl_easy_setopt( ::hCurl, HB_CURLOPT_USERNAME, '' )
curl_easy_setopt( ::hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
hRequest[ "model" ] = ::cModel
hMessage[ "role" ] = "user"
hMessage[ "content" ] = ::cPrompt
hRequest[ "messages" ] = { hMessage }
hRequest[ "temperature" ] = 0.5
if ! Empty( cImageFileName )
if File( cImageFileName )
cBase64Image = hb_base64Encode( memoRead( cImageFileName ) )
hMessage[ "images" ] = { cBase64Image }
else
MsgAlert( "Image " + cImageFileName + " not found" )
return nil
endif
endif
if bWriteFunction != nil
hRequest[ "stream" ] = .T.
curl_easy_setopt( ::hCurl, HB_CURLOPT_WRITEFUNCTION, bWriteFunction )
else
hRequest[ "stream" ] = .F.
curl_easy_setopt( ::hCurl, HB_CURLOPT_DL_BUFF_SETUP )
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
if bWriteFunction == nil
::cResponse = curl_easy_dl_buff_get( ::hCurl )
endif
else
::cResponse = "Error code " + Str( ::nError )
endif
return ::cResponse
METHOD End() CLASS TOLlama
curl_easy_cleanup( ::hCurl )
::hCurl = nil
return nil
METHOD GetValue() CLASS TOLlama
local hResponse, uValue
hb_jsonDecode( ::cResponse, @hResponse )
TRY
uValue = hResponse[ "message" ][ "content" ]
CATCH
uValue = hResponse[ "error" ][ "message" ]
END
return uValue
CLASS TAgent
DATA cCategory
DATA aTools
METHOD New( cCategory, aTools )
ENDCLASS
METHOD New( cCategory, aTools ) CLASS TAgent
::cCategory = cCategory
::aTools = aTools
return Self
]]>Code: Select all | Expand
#include "FiveWin.ch"
#include "hbcurl.ch"
// Activar depuración (comentar esta línea para desactivarla)
#define DEBUG
FUNCTION Main()
local oLlama, oAgent
oLlama = TOLlama():New()
// Agente para mostrar la hora
oAgent = TAgent():New( "time", { {"get_time", {|hParams| GetCurrentTime(hParams)} } } )
AAdd( oLlama:aAgents, oAgent )
// Agente para filesystem con múltiples tools
oAgent = TAgent():New( "filesystem", { ;
{"create_folder", {|hParams| CreateFolder(hParams)} },;
{"create_file", {|hParams| CreateFile(hParams)} },;
{"modify_file", {|hParams| ModifyFile(hParams)} } } )
AAdd( oLlama:aAgents, oAgent )
#ifdef DEBUG
? "DEBUG: Probando 'What time is it?'"
#endif
fw_memoEdit( oLlama:Send( "What time is it?" ) )
#ifdef DEBUG
? "DEBUG: Probando 'Create a folder named test'"
#endif
fw_memoEdit( oLlama:Send( "Create a folder named 'test'" ) )
#ifdef DEBUG
? "DEBUG: Probando 'Create a file called test.txt'"
#endif
fw_memoEdit( oLlama:Send( "Create a file called 'test.txt'" ) )
#ifdef DEBUG
? "DEBUG: Probando 'Modify the file test.txt with content Hello World'"
#endif
fw_memoEdit( oLlama:Send( "Modify the file test.txt with content Hello World" ) )
oLlama:End()
return nil
FUNCTION GetCurrentTime( hParams )
local cTime := Time()
return "The current time is " + cTime // No necesita parámetros, pero acepta hParams por consistencia
FUNCTION CreateFolder( hParams )
local cFolder
if hb_HHasKey( hParams, "folder_name" ) .and. ! Empty( hParams[ "folder_name" ] )
cFolder = hParams[ "folder_name" ]
DirMake( cFolder )
return "Folder '" + cFolder + "' created successfully"
endif
return "Failed to create folder: no name specified"
FUNCTION CreateFile( hParams )
local cFile
if hb_HHasKey( hParams, "filename" ) .and. ! Empty( hParams[ "filename" ] )
cFile = hParams[ "filename" ]
hb_MemoWrit( cFile, "" )
return "File '" + cFile + "' created successfully"
endif
return "Failed to create file: no name specified"
FUNCTION ModifyFile( hParams )
local cFile, cContent
if hb_HHasKey( hParams, "filename" ) .and. ! Empty( hParams[ "filename" ] ) .and. ;
hb_HHasKey( hParams, "content" ) .and. ! Empty( hParams[ "content" ] )
cFile = hParams[ "filename" ]
cContent = hParams[ "content" ]
hb_MemoWrit( cFile, cContent )
return "File '" + cFile + "' modified with content: " + cContent
endif
return "Failed to modify file: missing file name or content"
CLASS TOLlama
DATA cModel
DATA cPrompt
DATA cResponse
DATA cUrl
DATA hCurl
DATA nError INIT 0
DATA nHttpCode INIT 0
DATA aAgents INIT {}
METHOD New( cModel )
METHOD Send( cPrompt, cImageFileName, bWriteFunction )
METHOD GetPromptCategory( cPrompt )
METHOD GetToolName( cPrompt, oAgent )
METHOD End()
METHOD GetValue()
ENDCLASS
METHOD New( cModel ) CLASS TOLlama
DEFAULT cModel := "gemma3"
::cModel = cModel
::cUrl = "http://localhost:11434/api/chat"
::hCurl = curl_easy_init()
return Self
METHOD GetPromptCategory( cPrompt ) CLASS TOLlama
local cJson, hRequest := { => }, hMessage := { => }
local cCategoryResponse, hResponse
local nError, cCategories, nI, nJ
cCategories = ""
if ! Empty( ::aAgents )
for nI = 1 to Len( ::aAgents )
cCategories += "'" + ::aAgents[ nI ]:cCategory + "'"
if nI < Len( ::aAgents )
cCategories += ", "
endif
next
else
cCategories = "'general'"
endif
curl_easy_reset( ::hCurl )
curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, .T. )
curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cUrl )
curl_easy_setopt( ::hCurl, HB_CURLOPT_HTTPHEADER, { "Content-Type: application/json" } )
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. )
hRequest[ "model" ] = ::cModel
hMessage[ "role" ] = "user"
hMessage[ "content" ] = "Classify this prompt: '" + cPrompt + "' into one of these categories: " + ;
cCategories + ". Respond with only the category name."
hRequest[ "messages" ] = { hMessage }
hRequest[ "stream" ] = .F.
hRequest[ "temperature" ] = 0.5
cJson = hb_jsonEncode( hRequest )
curl_easy_setopt( ::hCurl, HB_CURLOPT_POSTFIELDS, cJson )
nError = curl_easy_perform( ::hCurl )
if nError == HB_CURLE_OK
cCategoryResponse = curl_easy_dl_buff_get( ::hCurl )
hb_jsonDecode( cCategoryResponse, @hResponse )
#ifdef DEBUG
? "DEBUG: Categoría devuelta por IA:", hResponse[ "message" ][ "content" ]
#endif
return hResponse[ "message" ][ "content" ]
endif
#ifdef DEBUG
? "DEBUG: Error en GetPromptCategory:", nError
#endif
return nil
METHOD GetToolName( cPrompt, oAgent ) CLASS TOLlama
local cJson, hRequest := { => }, hMessage := { => }
local cToolResponse, hResponse, hToolInfo
local nError, cTools := "", nI
if ! Empty( oAgent:aTools )
for nI = 1 to Len( oAgent:aTools )
cTools += "'" + oAgent:aTools[ nI ][ 1 ] + "'"
if nI < Len( oAgent:aTools )
cTools += ", "
endif
next
endif
curl_easy_reset( ::hCurl )
curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, .T. )
curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cUrl )
curl_easy_setopt( ::hCurl, HB_CURLOPT_HTTPHEADER, { "Content-Type: application/json" } )
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. )
hRequest[ "model" ] = ::cModel
hMessage[ "role" ] = "user"
hMessage[ "content" ] = "Given this prompt: '" + cPrompt + "' and category '" + oAgent:cCategory + "', " + ;
"select the appropriate tool from: " + cTools + " and extract any relevant parameters. " + ;
"Respond with a JSON object containing 'tool' (the tool name) and 'params' (a hash of parameters)."
hRequest[ "messages" ] = { hMessage }
hRequest[ "stream" ] = .F.
hRequest[ "temperature" ] = 0.5
cJson = hb_jsonEncode( hRequest )
curl_easy_setopt( ::hCurl, HB_CURLOPT_POSTFIELDS, cJson )
nError = curl_easy_perform( ::hCurl )
if nError == HB_CURLE_OK
cToolResponse = curl_easy_dl_buff_get( ::hCurl )
hb_jsonDecode( cToolResponse, @hResponse )
#ifdef DEBUG
? "DEBUG: Respuesta cruda de IA:", cToolResponse
? "DEBUG: hResponse tras decodificar:", hb_jsonEncode( hResponse )
? "DEBUG: Contenido de hResponse[ 'message' ][ 'content' ]:", hResponse[ "message" ][ "content" ]
#endif
hResponse[ "message" ][ "content" ] = SubStr( hResponse[ "message" ][ "content" ], 9 )
hResponse[ "message" ][ "content" ] = SubStr( hResponse[ "message" ][ "content" ], 1, Len( hResponse[ "message" ][ "content" ] ) - 3 )
hb_jsonDecode( hResponse[ "message" ][ "content" ], @hToolInfo )
#ifdef DEBUG
? "DEBUG: hToolInfo tras procesar:", hb_jsonEncode( hToolInfo )
? "DEBUG: Tipo de hToolInfo:", ValType( hToolInfo )
if ValType( hToolInfo ) == "H"
? "DEBUG: Claves en hToolInfo:", hb_HKeys( hToolInfo )
endif
#endif
return hToolInfo
endif
#ifdef DEBUG
? "DEBUG: Error en GetToolName:", nError
#endif
return nil
METHOD Send( cPrompt, cImageFileName, bWriteFunction ) CLASS TOLlama
local aHeaders, cJson, hRequest := { => }, hMessage := { => }
local cBase64Image
local oAgent, cToolResult, nI, hToolInfo, cToolName, nTool
local cCategory
if ! Empty( cPrompt )
::cPrompt = cPrompt
endif
if ! Empty( ::aAgents )
cCategory = ::GetPromptCategory( cPrompt )
#ifdef DEBUG
? "DEBUG: Categoría obtenida (sin limpiar):", cCategory
#endif
cCategory = AllTrim( StrTran( StrTran( cCategory, Chr(13), "" ), Chr(10), "" ) )
#ifdef DEBUG
? "DEBUG: Categoría obtenida (limpia):", cCategory
#endif
if ! Empty( cCategory )
for nI = 1 to Len( ::aAgents )
oAgent = ::aAgents[ nI ]
#ifdef DEBUG
? "DEBUG: Comparando categoría del agente:", oAgent:cCategory, "con categoría obtenida:", cCategory
? "DEBUG: Longitud de oAgent:cCategory:", Len( oAgent:cCategory ), "Longitud de cCategory:", Len( cCategory )
? "DEBUG: oAgent:cCategory en hex:", hb_StrToHex( oAgent:cCategory )
? "DEBUG: cCategory en hex:", hb_StrToHex( cCategory )
? "DEBUG: Lower(oAgent:cCategory):", Lower( oAgent:cCategory ), "Lower(cCategory):", Lower( cCategory )
#endif
if Lower( AllTrim( oAgent:cCategory ) ) == Lower( AllTrim( cCategory ) )
#ifdef DEBUG
? "DEBUG: ¡Coincidencia encontrada para categoría!"
#endif
if ! Empty( oAgent:aTools )
hToolInfo = ::GetToolName( cPrompt, oAgent )
#ifdef DEBUG
? "DEBUG: hToolInfo recibido:", hb_jsonEncode( hToolInfo )
#endif
if ValType( hToolInfo ) == "H" .and. hb_HHasKey( hToolInfo, "tool" )
cToolName = AllTrim( StrTran( StrTran( hToolInfo[ "tool" ], Chr(13), "" ), Chr(10), "" ) )
#ifdef DEBUG
? "DEBUG: Tool obtenida (limpia):", cToolName
? "DEBUG: Parámetros extraídos:", hb_jsonEncode( hToolInfo[ "params" ] )
#endif
if ! Empty( cToolName )
nTool = 0
for nJ = 1 to Len( oAgent:aTools )
#ifdef DEBUG
? "DEBUG: Comparando tool del agente:", oAgent:aTools[ nJ ][ 1 ], "con tool obtenida:", cToolName
? "DEBUG: Longitud de oAgent:aTools[", nJ, "][1]:", Len( oAgent:aTools[ nJ ][ 1 ] ), "Longitud de cToolName:", Len( cToolName )
? "DEBUG: oAgent:aTools[", nI, "][1] en hex:", hb_StrToHex( oAgent:aTools[ nJ ][ 1 ] )
? "DEBUG: cToolName en hex:", hb_StrToHex( cToolName )
? "DEBUG: Lower(oAgent:aTools[", nJ, "][1]):", Lower( oAgent:aTools[ nJ ][ 1 ] ), "Lower(cToolName):", Lower( cToolName )
#endif
if Lower( AllTrim( oAgent:aTools[ nJ ][ 1 ] ) ) == Lower( AllTrim( cToolName ) )
nTool = nJ
#ifdef DEBUG
? "DEBUG: ¡Coincidencia encontrada para tool!"
#endif
exit
endif
next
if nTool > 0
cToolResult = Eval( oAgent:aTools[ nTool ][ 2 ], hToolInfo[ "params" ] )
#ifdef DEBUG
? "DEBUG: Resultado de la tool:", cToolResult
#endif
::cResponse = hb_jsonEncode( { "message" => { "content" => cToolResult }, "done" => .T. } )
return ::cResponse
else
#ifdef DEBUG
? "DEBUG: Tool '" + cToolName + "' no encontrada en el agente '" + oAgent:cCategory + "'"
#endif
::cResponse = hb_jsonEncode( { "message" => { "content" => "Tool not found" }, "done" => .T. } )
return ::cResponse
endif
else
#ifdef DEBUG
? "DEBUG: No se obtuvo nombre de tool válido"
#endif
::cResponse = hb_jsonEncode( { "message" => { "content" => "No tool selected" }, "done" => .T. } )
return ::cResponse
endif
else
#ifdef DEBUG
? "DEBUG: Respuesta de GetToolName no válida o sin 'tool'. Tipo:", ValType( hToolInfo )
if ValType( hToolInfo ) == "H"
? "DEBUG: Claves en hToolInfo:", hb_HKeys( hToolInfo )
endif
#endif
::cResponse = hb_jsonEncode( { "message" => { "content" => "Invalid tool response" }, "done" => .T. } )
return ::cResponse
endif
else
#ifdef DEBUG
? "DEBUG: El agente '" + oAgent:cCategory + "' no tiene tools"
#endif
::cResponse = hb_jsonEncode( { "message" => { "content" => "No tools available" }, "done" => .T. } )
return ::cResponse
endif
else
#ifdef DEBUG
? "DEBUG: No hay coincidencia entre '" + Lower( AllTrim( oAgent:cCategory ) ) + "' y '" + Lower( AllTrim( cCategory ) ) + "'"
#endif
endif
next
#ifdef DEBUG
? "DEBUG: No se encontró agente para la categoría '" + cCategory + "'"
#endif
::cResponse = hb_jsonEncode( { "message" => { "content" => "Agent not found" }, "done" => .T. } )
return ::cResponse
else
#ifdef DEBUG
? "DEBUG: No se obtuvo categoría válida"
#endif
endif
else
#ifdef DEBUG
? "DEBUG: No hay agentes definidos"
#endif
endif
#ifdef DEBUG
? "DEBUG: Llamando a la API de Ollama"
#endif
curl_easy_reset( ::hCurl )
curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, .T. )
curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cUrl )
aHeaders := { "Content-Type: application/json" }
curl_easy_setopt( ::hCurl, HB_CURLOPT_HTTPHEADER, aHeaders )
curl_easy_setopt( ::hCurl, HB_CURLOPT_USERNAME, '' )
curl_easy_setopt( ::hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
hRequest[ "model" ] = ::cModel
hMessage[ "role" ] = "user"
hMessage[ "content" ] = ::cPrompt
hRequest[ "messages" ] = { hMessage }
hRequest[ "temperature" ] = 0.5
if ! Empty( cImageFileName )
if File( cImageFileName )
cBase64Image = hb_base64Encode( memoRead( cImageFileName ) )
hMessage[ "images" ] = { cBase64Image }
else
MsgAlert( "Image " + cImageFileName + " not found" )
return nil
endif
endif
if bWriteFunction != nil
hRequest[ "stream" ] = .T.
curl_easy_setopt( ::hCurl, HB_CURLOPT_WRITEFUNCTION, bWriteFunction )
else
hRequest[ "stream" ] = .F.
curl_easy_setopt( ::hCurl, HB_CURLOPT_DL_BUFF_SETUP )
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
if bWriteFunction == nil
::cResponse = curl_easy_dl_buff_get( ::hCurl )
endif
else
::cResponse = "Error code " + Str( ::nError )
endif
return ::cResponse
METHOD End() CLASS TOLlama
curl_easy_cleanup( ::hCurl )
::hCurl = nil
return nil
METHOD GetValue() CLASS TOLlama
local hResponse, uValue
hb_jsonDecode( ::cResponse, @hResponse )
TRY
uValue = hResponse[ "message" ][ "content" ]
CATCH
uValue = hResponse[ "error" ][ "message" ]
END
return uValue
CLASS TAgent
DATA cCategory
DATA aTools
METHOD New( cCategory, aTools )
ENDCLASS
METHOD New( cCategory, aTools ) CLASS TAgent
::cCategory = cCategory
::aTools = aTools
return Self
]]>Code: Select all | Expand
FUNCTION CreateFolder( hParams )
local cFolder
if hb_HHasKey( hParams, "folder_name" ) .and. ! Empty( hParams[ "folder_name" ] )
cFolder = hParams[ "folder_name" ]
DirMake( cFolder )
return "Folder '" + cFolder + "' created successfully"
endif
return "Failed to create folder: no name specified"
FUNCTION CreateFile( hParams )
local cFile
if hb_HHasKey( hParams, "filename" ) .and. ! Empty( hParams[ "filename" ] )
cFile = hParams[ "filename" ]
hb_MemoWrit( cFile, "" )
return "File '" + cFile + "' created successfully"
endif
return "Failed to create file: no name specified"
FUNCTION ModifyFile( hParams )
local cFile, cContent
if hb_HHasKey( hParams, "filename" ) .and. ! Empty( hParams[ "filename" ] ) .and. ;
hb_HHasKey( hParams, "content" ) .and. ! Empty( hParams[ "content" ] )
cFile = hParams[ "filename" ]
cContent = hParams[ "content" ]
hb_MemoWrit( cFile, cContent )
return "File '" + cFile + "' modified with content: " + cContent
endif
return "Failed to modify file: missing file name or content"
Code: Select all | Expand
FUNCTION CreateFolder( hParams )
local cFolder
if hb_HHasKey( hParams, "folder_name" ) .and. ! Empty( hParams[ "folder_name" ] )
cFolder = hParams[ "folder_name" ]
DirMake( cFolder )
return "Folder '" + cFolder + "' created successfully"
endif
return "Failed to create folder: no name specified"
FUNCTION CreateFile( hParams )
local cFile
if hb_HHasKey( hParams, "filename" ) .and. ! Empty( hParams[ "filename" ] )
cFile = hParams[ "filename" ]
hb_MemoWrit( cFile, "" )
return "File '" + cFile + "' created successfully"
endif
return "Failed to create file: no name specified"
FUNCTION ModifyFile( hParams )
local cFile, cContent
if hb_HHasKey( hParams, "filename" ) .and. ! Empty( hParams[ "filename" ] ) .and. ;
hb_HHasKey( hParams, "content" ) .and. ! Empty( hParams[ "content" ] )
cFile = hParams[ "filename" ]
cContent = hParams[ "content" ]
hb_MemoWrit( cFile, cContent )
return "File '" + cFile + "' modified with content: " + cContent
endif
return "Failed to modify file: missing file name or content"
Code: Select all | Expand
hMessage[ "content" ] = "Given this prompt: '" + cPrompt + "' and category '" + oAgent:cCategory + "', " + ;
"select the appropriate tool from: " + cTools + " and extract any relevant parameters. " + ;
"Respond with a JSON object containing 'tool' (the tool name) and 'params' (a hash of parameters)."+;
"Name the parameters as 'Folder_Name' for folders, as 'File_Name' for file names and as 'Content' for file content."
and Ollama answered correctly respecting also the capitalization.Code: Select all | Expand
hMessage[ "content" ] = "Given this prompt: '" + cPrompt + "' and category '" + oAgent:cCategory + "', " + ;
"select the appropriate tool from: " + cTools + " and extract any relevant parameters. " + ;
"Respond with a JSON object containing 'tool' (the tool name) and 'params' (a hash of parameters)."+;
"Name the parameters as 'Folder_Name' for folders, as 'File_Name' for file names and as 'Content' for file content."
and Ollama answered correctly respecting also the capitalization.]]>Model Context Protocol (MCP)
The Model Context Protocol is an open standard that enables developers to build secure, two-way connections between their data sources and AI-powered tools
]]>Model Context Protocol (MCP)
The Model Context Protocol is an open standard that enables developers to build secure, two-way connections between their data sources and AI-powered tools
Code: Select all | Expand
```xml
<tools>
{"type": "function", "function": {"name":"echo","description":"A simple echo tool to verify if the MCP server is working properly. It returns a characteristic response containing the input message.","parameters":{"type":"object","required":["message"],"properties":{"delayMs":{"type":"number","description":"Optional delay in milliseconds before responding"},"message":{"type":"string","description":"Message to be echoed back"}}}}}
{"type": "function", "function": {"name":"read_file","description":"Read the complete contents of a file from the file system. Handles various text encodings and provides detailed error messages if the file cannot be read. Use this tool when you need to examine the contents of a single file. Only works within allowed directories.","parameters":{"type":"object","required":["path"],"properties":{"path":{"type":"string","description":""}}}}}
{"type": "function", "function": {"name":"read_multiple_files","description":"Read the contents of multiple files simultaneously. This is more efficient than reading files one by one when you need to analyze or compare multiple files. Each file's content is returned with its path as a reference. Failed reads for individual files won't stop the entire operation. Only works within allowed directories.","parameters":{"type":"object","required":["paths"],"properties":{"paths":{"type":"array","description":""}}}}}
{"type": "function", "function": {"name":"write_file","description":"Create a new file or completely overwrite an existing file with new content. Use with caution as it will overwrite existing files without warning. Handles text content with proper encoding. Only works within allowed directories.","parameters":{"type":"object","required":["path","content"],"properties":{"path":{"type":"string","description":""},"content":{"type":"string","description":"Content to write to the file"}}}}}
{"type": "function", "function": {"name":"edit_file","description":"Edit an existing file by appending or prepending text. Handles various text encodings and provides detailed error messages if the file cannot be edited. Only works within allowed directories.","parameters":{"type":"object","required":["path","content"],"properties":{"path":{"type":"string","description":""},"content":{"type":"string","description":"Content to edit into the file"}}}}}
{"type": "function", "function": {"name":"delete_file","description":"Delete a file from the file system. Only works within allowed directories.","parameters":{"type":"object","required":["path"],"properties":{"path":{"type":"string","description":""}}}}}
{"type": "function", "function": {"name":"create_directory","description":"Create a new directory in the file system. Only works within allowed directories.","parameters":{"type":"object","required":["path"],"properties":{"path":{"type":"string","description":""}}}}}
{"type": "function", "function": {"name":"delete_directory","description":"Delete a directory from the file system. Only works within allowed directories.","parameters":{"type":"object","required":["path"],"properties":{"path":{"type":"string","description":""}}}}}
{"type": "function", "function": {"name":"list_files","description":"List all files and directories in a given directory. Only works within allowed directories.","parameters":{"type":"object","required":["path"],"properties":{"path":{"type":"string","description":""}}}}}
{"type": "function", "function": {"name":"move_file","description":"Move a file from one location to another. Only works within allowed directories.","parameters":{"type":"object","required":["srcPath","destPath"],"properties":{"srcPath":{"type":"string","description":"Source path of the file"},"destPath":{"type":"string","description":"Destination path of the file"}}}}}
{"type": "function", "function": {"name":"copy_file","description":"Copy a file to a new location. Only works within allowed directories.","parameters":{"type":"object","required":["srcPath","destPath"],"properties":{"srcPath":{"type":"string","description":"Source path of the file"},"destPath":{"type":"string","description":"Destination path of the file"}}}}}
{"type": "function", "function": {"name":"get_file_info","description":"Retrieve detailed metadata about a file or directory. Returns comprehensive information including size, creation time, last modified time, permissions, and type. This tool is perfect for understanding file characteristics without reading the actual content. Only works within allowed directories.","parameters":{"type":"object","required":["path"],"properties":{"path":{"type":"string","description":""}}}}}
{"type": "function", "function": {"name":"list_allowed_directories","description":"Returns the list of directories that this server is allowed to access. Use this to understand which directories are available before trying to access files.","parameters":{"type":"object","required":[],"properties":{}}}}
{"type": "function", "function": {"name":"puppeteer_navigate","description":"Navigate to a URL","parameters":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":""}}}}}
{"type": "function", "function": {"name":"puppeteer_screenshot","description":"Take a screenshot of the current page or a specific element","parameters":{"type":"object","required":["name"],"properties":{"height":{"type":"number","description":"Height in pixels (default: 600)"},"name":{"type":"string","description":"Name for the screenshot"},"selector":{"type":"string","description":"CSS selector for element to screenshot"},"width":{"type":"number","description":"Width in pixels (default: 800)"}}}}}
{"type": "function", "function": {"name":"puppeteer_click","description":"Click an element on the page","parameters":{"type":"object","required":["selector"],"properties":{"selector":{"type":"string","description":"CSS selector for element to click"}}}}}
{"type": "function", "function": {"name":"puppeteer_fill","description":"Fill out an input field","parameters":{"type":"object","required":["selector","value"],"properties":{"selector":{"type":"string","description":"CSS selector for input field"},"value":{"type":"string","description":"Value to fill"}}}}}
{"type": "function", "function": {"name":"puppeteer_select","description":"Select an element on the page with Select tag","parameters":{"type":"object","required":["selector","value"],"properties":{"selector":{"type":"string","description":"CSS selector for element to select"},"value":{"type":"string","description":"Value to select"}}}}}
{"type": "function", "function": {"name":"puppeteer_execute_script","description":"Execute a JavaScript script in the context of the current page","parameters":{"type":"object","required":["script"],"properties":{"script":{"type":"string","description":"JavaScript code to execute"}}}}}
{"type": "function", "function": {"name":"execute_shell_command","description":"Execute a shell command on the server. Only works within allowed directories.","parameters":{"type":"object","required":["command"],"properties":{"command":{"type":"string","description":"Shell command to execute"}}}}}
</pre>
Code: Select all | Expand
{
"schema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"arguments": {
"type": "object"
}
},
"required": ["name", "arguments"],
"additionalProperties": false
}
}
Code: Select all | Expand
```xml
<tools>
{"type": "function", "function": {"name":"echo","description":"A simple echo tool to verify if the MCP server is working properly. It returns a characteristic response containing the input message.","parameters":{"type":"object","required":["message"],"properties":{"delayMs":{"type":"number","description":"Optional delay in milliseconds before responding"},"message":{"type":"string","description":"Message to be echoed back"}}}}}
{"type": "function", "function": {"name":"read_file","description":"Read the complete contents of a file from the file system. Handles various text encodings and provides detailed error messages if the file cannot be read. Use this tool when you need to examine the contents of a single file. Only works within allowed directories.","parameters":{"type":"object","required":["path"],"properties":{"path":{"type":"string","description":""}}}}}
{"type": "function", "function": {"name":"read_multiple_files","description":"Read the contents of multiple files simultaneously. This is more efficient than reading files one by one when you need to analyze or compare multiple files. Each file's content is returned with its path as a reference. Failed reads for individual files won't stop the entire operation. Only works within allowed directories.","parameters":{"type":"object","required":["paths"],"properties":{"paths":{"type":"array","description":""}}}}}
{"type": "function", "function": {"name":"write_file","description":"Create a new file or completely overwrite an existing file with new content. Use with caution as it will overwrite existing files without warning. Handles text content with proper encoding. Only works within allowed directories.","parameters":{"type":"object","required":["path","content"],"properties":{"path":{"type":"string","description":""},"content":{"type":"string","description":"Content to write to the file"}}}}}
{"type": "function", "function": {"name":"edit_file","description":"Edit an existing file by appending or prepending text. Handles various text encodings and provides detailed error messages if the file cannot be edited. Only works within allowed directories.","parameters":{"type":"object","required":["path","content"],"properties":{"path":{"type":"string","description":""},"content":{"type":"string","description":"Content to edit into the file"}}}}}
{"type": "function", "function": {"name":"delete_file","description":"Delete a file from the file system. Only works within allowed directories.","parameters":{"type":"object","required":["path"],"properties":{"path":{"type":"string","description":""}}}}}
{"type": "function", "function": {"name":"create_directory","description":"Create a new directory in the file system. Only works within allowed directories.","parameters":{"type":"object","required":["path"],"properties":{"path":{"type":"string","description":""}}}}}
{"type": "function", "function": {"name":"delete_directory","description":"Delete a directory from the file system. Only works within allowed directories.","parameters":{"type":"object","required":["path"],"properties":{"path":{"type":"string","description":""}}}}}
{"type": "function", "function": {"name":"list_files","description":"List all files and directories in a given directory. Only works within allowed directories.","parameters":{"type":"object","required":["path"],"properties":{"path":{"type":"string","description":""}}}}}
{"type": "function", "function": {"name":"move_file","description":"Move a file from one location to another. Only works within allowed directories.","parameters":{"type":"object","required":["srcPath","destPath"],"properties":{"srcPath":{"type":"string","description":"Source path of the file"},"destPath":{"type":"string","description":"Destination path of the file"}}}}}
{"type": "function", "function": {"name":"copy_file","description":"Copy a file to a new location. Only works within allowed directories.","parameters":{"type":"object","required":["srcPath","destPath"],"properties":{"srcPath":{"type":"string","description":"Source path of the file"},"destPath":{"type":"string","description":"Destination path of the file"}}}}}
{"type": "function", "function": {"name":"get_file_info","description":"Retrieve detailed metadata about a file or directory. Returns comprehensive information including size, creation time, last modified time, permissions, and type. This tool is perfect for understanding file characteristics without reading the actual content. Only works within allowed directories.","parameters":{"type":"object","required":["path"],"properties":{"path":{"type":"string","description":""}}}}}
{"type": "function", "function": {"name":"list_allowed_directories","description":"Returns the list of directories that this server is allowed to access. Use this to understand which directories are available before trying to access files.","parameters":{"type":"object","required":[],"properties":{}}}}
{"type": "function", "function": {"name":"puppeteer_navigate","description":"Navigate to a URL","parameters":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":""}}}}}
{"type": "function", "function": {"name":"puppeteer_screenshot","description":"Take a screenshot of the current page or a specific element","parameters":{"type":"object","required":["name"],"properties":{"height":{"type":"number","description":"Height in pixels (default: 600)"},"name":{"type":"string","description":"Name for the screenshot"},"selector":{"type":"string","description":"CSS selector for element to screenshot"},"width":{"type":"number","description":"Width in pixels (default: 800)"}}}}}
{"type": "function", "function": {"name":"puppeteer_click","description":"Click an element on the page","parameters":{"type":"object","required":["selector"],"properties":{"selector":{"type":"string","description":"CSS selector for element to click"}}}}}
{"type": "function", "function": {"name":"puppeteer_fill","description":"Fill out an input field","parameters":{"type":"object","required":["selector","value"],"properties":{"selector":{"type":"string","description":"CSS selector for input field"},"value":{"type":"string","description":"Value to fill"}}}}}
{"type": "function", "function": {"name":"puppeteer_select","description":"Select an element on the page with Select tag","parameters":{"type":"object","required":["selector","value"],"properties":{"selector":{"type":"string","description":"CSS selector for element to select"},"value":{"type":"string","description":"Value to select"}}}}}
{"type": "function", "function": {"name":"puppeteer_execute_script","description":"Execute a JavaScript script in the context of the current page","parameters":{"type":"object","required":["script"],"properties":{"script":{"type":"string","description":"JavaScript code to execute"}}}}}
{"type": "function", "function": {"name":"execute_shell_command","description":"Execute a shell command on the server. Only works within allowed directories.","parameters":{"type":"object","required":["command"],"properties":{"command":{"type":"string","description":"Shell command to execute"}}}}}
</pre>
Code: Select all | Expand
{
"schema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"name": {
"type": "string"
},
"arguments": {
"type": "object"
}
},
"required": ["name", "arguments"],
"additionalProperties": false
}
}
Code: Select all | Expand
from praisonaiagents import Agent, MCP
import gradio as gr
def search_airbnb(query):
agent = Agent (
instructions="""Ayuda a reservar apartamentos en Airbnb.""",
llm="ollama/gemma3",
tools=MCP("npx -y @openbnb/mcp-server-airbnb --ignore-robots-txt")
)
result = agent.start(query)
return f"## Resultados de la búsqueda de Airbnb \n\n{result}"
demo = gr.Interface(
fn=search_airbnb,
inputs=gr.Textbox(placeholder="Quiero reservar un apartamento en Bogotá por 2 noches...."),
outputs=gr.Markdown(),
title="MCP - LOCAL OLLAMA - Asistente de reservas de Airbnb",
description="Introduce tus requisitos de reserva a continuación.:"
)
if __name__ == "__main__":
demo.launch()
Code: Select all | Expand
from praisonaiagents import Agent, MCP
import gradio as gr
def search_airbnb(query):
agent = Agent (
instructions="""Ayuda a reservar apartamentos en Airbnb.""",
llm="ollama/gemma3",
tools=MCP("npx -y @openbnb/mcp-server-airbnb --ignore-robots-txt")
)
result = agent.start(query)
return f"## Resultados de la búsqueda de Airbnb \n\n{result}"
demo = gr.Interface(
fn=search_airbnb,
inputs=gr.Textbox(placeholder="Quiero reservar un apartamento en Bogotá por 2 noches...."),
outputs=gr.Markdown(),
title="MCP - LOCAL OLLAMA - Asistente de reservas de Airbnb",
description="Introduce tus requisitos de reserva a continuación.:"
)
if __name__ == "__main__":
demo.launch()
Code: Select all | Expand
@setlocal
call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
c:\harbour\bin\win\msvc64\hbmk2 hbmcp.hbp -comp=msvc64
@endlocal
Code: Select all | Expand
hbmcp.prg
-lgdiplus
-lole32
-lOleDlg
-lversion
-lucrt
-luxtheme
xhb.hbc
hbct.hbc
hbwin.hbc
hbmzip.hbc
hbziparc.hbc
hbfoxpro.hbc
-ldflag=/NODEFAULTLIB:msvcrt
-ldflag+=/NODEFAULTLIB:libucrt
Code: Select all | Expand
PROCEDURE Main()
LOCAL cInput, cResponse
// Bucle para leer continuamente desde stdin
WHILE .T.
cInput := StdIn()
IF Empty( cInput )
EXIT // Salir si no hay entrada (EOF)
ENDIF
// Procesar el mensaje
hb_memoWrit( "c:\temp\stdin.txt", cInput )
cResponse := ProcessMessage( cInput )
IF !Empty( cResponse )
StdOut( cResponse )
ENDIF
END
RETURN
// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
LOCAL cResponse := ""
LOCAL hJson, cId, cMethod, hParams, cToolName
// Decodificar el JSON para obtener el método y el ID
hJson := hb_jsonDecode( cInput )
IF HB_ISHASH( hJson ) .AND. "method" $ hJson .AND. "id" $ hJson
cMethod := hJson[ "method" ]
cId := ExtractId( cInput )
// Manejar el método "initialize"
IF cMethod == "initialize"
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":{' + ;
'"protocolVersion":"2025-03-26",' + ;
'"capabilities":{' + ;
'"tools":{},' + ;
'"resources":{},' + ;
'"prompts":{}' + ;
'}' + ;
'}' + ;
'}' + hb_eol()
// Manejar el método "tools/list"
ELSEIF cMethod == "tools/list"
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":{' + ;
'"tools": [' + ;
'{' + ;
'"name":"get_time",' + ;
'"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
'"schema":{' + ;
'"type":"object",' + ;
'"properties":{},' + ;
'"additionalProperties":false,' + ;
'"returns":{' + ;
'"type":"string"' + ;
'}' + ;
'}' + ;
'},' + ;
'{' + ;
'"name":"hb_version",' + ;
'"description":"Returns the version of the Harbour runtime environment",' + ;
'"schema":{' + ;
'"type":"object",' + ;
'"properties":{},' + ;
'"additionalProperties":false,' + ;
'"returns":{' + ;
'"type":"string"' + ;
'}' + ;
'}' + ;
'},' + ;
'{' + ;
'"name":"hb_compiler",' + ;
'"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
'"schema":{' + ;
'"type":"object",' + ;
'"properties":{},' + ;
'"additionalProperties":false,' + ;
'"returns":{' + ;
'"type":"string"' + ;
'}' + ;
'}' + ;
'}' + ;
']' + ;
'}' + ;
'}' + hb_eol()
// Manejar el método "tools/call"
ELSEIF cMethod == "tools/call"
hParams := hJson[ "params" ]
IF HB_ISHASH( hParams ) .AND. "name" $ hParams .AND. "arguments" $ hParams
cToolName := hParams[ "name" ]
IF cToolName == "get_time" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
// Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":"' + hb_DateTime() + '"' + ;
'}' + hb_eol()
ELSEIF cToolName == "hb_version" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
// Obtener la versión de Harbour
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":"' + StrTran( Version(), '"', '\"' ) + '"' + ;
'}' + hb_eol()
ELSEIF cToolName == "hb_compiler" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
// Obtener el nombre del compilador
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":"' + StrTran( hb_Compiler(), '"', '\"' ) + '"' + ;
'}' + hb_eol()
ELSE
// Error: herramienta no encontrada o argumentos inválidos
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"error":{' + ;
'"code":-32602,' + ;
'"message":"Invalid params"' + ;
'}' + ;
'}' + hb_eol()
ENDIF
ELSE
// Error: parámetros inválidos
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"error":{' + ;
'"code":-32602,' + ;
'"message":"Invalid params"' + ;
'}' + ;
'}' + hb_eol()
ENDIF
// Manejar métodos no soportados
ELSE
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"error":{' + ;
'"code":-32601,' + ;
'"message":"Method not found"' + ;
'}' + ;
'}' + hb_eol()
ENDIF
ELSE
// JSON inválido o sin método/ID
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":null,' + ;
'"error":{' + ;
'"code":-32700,' + ;
'"message":"Parse error"' + ;
'}' + ;
'}' + hb_eol()
ENDIF
RETURN cResponse
// Función para extraer el ID parseando el JSON con hb_jsonDecode()
STATIC FUNCTION ExtractId( cInput )
LOCAL hJson, cId := '"1"' // Valor por defecto si falla el parseo
LOCAL xId
// Decodificar el JSON en un hash
hJson := hb_jsonDecode( cInput )
IF HB_ISHASH( hJson ) .AND. "id" $ hJson
xId := hJson[ "id" ]
IF HB_ISSTRING( xId )
// Si el id es string, incluir comillas
cId := '"' + xId + '"'
ELSEIF HB_ISNUMERIC( xId )
// Si el id es numérico, convertir a string sin comillas
cId := hb_ntos( xId )
ELSEIF xId == NIL
// Si el id es null, retornar "null"
cId := "null"
ENDIF
ENDIF
RETURN cId
#pragma BEGINDUMP
#include <hbapi.h>
HB_FUNC( STDIN )
{
char buffer[ 1024 ];
if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
{
// Eliminar salto de línea final, si existe
size_t len = strlen( buffer );
if( len > 0 && buffer[ len - 1 ] == '\n' )
buffer[ len - 1 ] = '\0';
hb_retc( buffer );
}
else
{
hb_retc( "" ); // Retornar cadena vacía en caso de EOF
}
}
HB_FUNC( STDOUT )
{
if( HB_ISCHAR( 1 ) )
{
fputs( hb_parc( 1 ), stdout );
fflush( stdout ); // Forzar la escritura inmediata
}
}
#pragma ENDDUMP
Code: Select all | Expand
@setlocal
call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
c:\harbour\bin\win\msvc64\hbmk2 hbmcp.hbp -comp=msvc64
@endlocal
Code: Select all | Expand
hbmcp.prg
-lgdiplus
-lole32
-lOleDlg
-lversion
-lucrt
-luxtheme
xhb.hbc
hbct.hbc
hbwin.hbc
hbmzip.hbc
hbziparc.hbc
hbfoxpro.hbc
-ldflag=/NODEFAULTLIB:msvcrt
-ldflag+=/NODEFAULTLIB:libucrt
Code: Select all | Expand
PROCEDURE Main()
LOCAL cInput, cResponse
// Bucle para leer continuamente desde stdin
WHILE .T.
cInput := StdIn()
IF Empty( cInput )
EXIT // Salir si no hay entrada (EOF)
ENDIF
// Procesar el mensaje
hb_memoWrit( "c:\temp\stdin.txt", cInput )
cResponse := ProcessMessage( cInput )
IF !Empty( cResponse )
StdOut( cResponse )
ENDIF
END
RETURN
// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
LOCAL cResponse := ""
LOCAL hJson, cId, cMethod, hParams, cToolName
// Decodificar el JSON para obtener el método y el ID
hJson := hb_jsonDecode( cInput )
IF HB_ISHASH( hJson ) .AND. "method" $ hJson .AND. "id" $ hJson
cMethod := hJson[ "method" ]
cId := ExtractId( cInput )
// Manejar el método "initialize"
IF cMethod == "initialize"
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":{' + ;
'"protocolVersion":"2025-03-26",' + ;
'"capabilities":{' + ;
'"tools":{},' + ;
'"resources":{},' + ;
'"prompts":{}' + ;
'}' + ;
'}' + ;
'}' + hb_eol()
// Manejar el método "tools/list"
ELSEIF cMethod == "tools/list"
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":{' + ;
'"tools": [' + ;
'{' + ;
'"name":"get_time",' + ;
'"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
'"schema":{' + ;
'"type":"object",' + ;
'"properties":{},' + ;
'"additionalProperties":false,' + ;
'"returns":{' + ;
'"type":"string"' + ;
'}' + ;
'}' + ;
'},' + ;
'{' + ;
'"name":"hb_version",' + ;
'"description":"Returns the version of the Harbour runtime environment",' + ;
'"schema":{' + ;
'"type":"object",' + ;
'"properties":{},' + ;
'"additionalProperties":false,' + ;
'"returns":{' + ;
'"type":"string"' + ;
'}' + ;
'}' + ;
'},' + ;
'{' + ;
'"name":"hb_compiler",' + ;
'"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
'"schema":{' + ;
'"type":"object",' + ;
'"properties":{},' + ;
'"additionalProperties":false,' + ;
'"returns":{' + ;
'"type":"string"' + ;
'}' + ;
'}' + ;
'}' + ;
']' + ;
'}' + ;
'}' + hb_eol()
// Manejar el método "tools/call"
ELSEIF cMethod == "tools/call"
hParams := hJson[ "params" ]
IF HB_ISHASH( hParams ) .AND. "name" $ hParams .AND. "arguments" $ hParams
cToolName := hParams[ "name" ]
IF cToolName == "get_time" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
// Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":"' + hb_DateTime() + '"' + ;
'}' + hb_eol()
ELSEIF cToolName == "hb_version" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
// Obtener la versión de Harbour
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":"' + StrTran( Version(), '"', '\"' ) + '"' + ;
'}' + hb_eol()
ELSEIF cToolName == "hb_compiler" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
// Obtener el nombre del compilador
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":"' + StrTran( hb_Compiler(), '"', '\"' ) + '"' + ;
'}' + hb_eol()
ELSE
// Error: herramienta no encontrada o argumentos inválidos
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"error":{' + ;
'"code":-32602,' + ;
'"message":"Invalid params"' + ;
'}' + ;
'}' + hb_eol()
ENDIF
ELSE
// Error: parámetros inválidos
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"error":{' + ;
'"code":-32602,' + ;
'"message":"Invalid params"' + ;
'}' + ;
'}' + hb_eol()
ENDIF
// Manejar métodos no soportados
ELSE
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"error":{' + ;
'"code":-32601,' + ;
'"message":"Method not found"' + ;
'}' + ;
'}' + hb_eol()
ENDIF
ELSE
// JSON inválido o sin método/ID
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":null,' + ;
'"error":{' + ;
'"code":-32700,' + ;
'"message":"Parse error"' + ;
'}' + ;
'}' + hb_eol()
ENDIF
RETURN cResponse
// Función para extraer el ID parseando el JSON con hb_jsonDecode()
STATIC FUNCTION ExtractId( cInput )
LOCAL hJson, cId := '"1"' // Valor por defecto si falla el parseo
LOCAL xId
// Decodificar el JSON en un hash
hJson := hb_jsonDecode( cInput )
IF HB_ISHASH( hJson ) .AND. "id" $ hJson
xId := hJson[ "id" ]
IF HB_ISSTRING( xId )
// Si el id es string, incluir comillas
cId := '"' + xId + '"'
ELSEIF HB_ISNUMERIC( xId )
// Si el id es numérico, convertir a string sin comillas
cId := hb_ntos( xId )
ELSEIF xId == NIL
// Si el id es null, retornar "null"
cId := "null"
ENDIF
ENDIF
RETURN cId
#pragma BEGINDUMP
#include <hbapi.h>
HB_FUNC( STDIN )
{
char buffer[ 1024 ];
if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
{
// Eliminar salto de línea final, si existe
size_t len = strlen( buffer );
if( len > 0 && buffer[ len - 1 ] == '\n' )
buffer[ len - 1 ] = '\0';
hb_retc( buffer );
}
else
{
hb_retc( "" ); // Retornar cadena vacía en caso de EOF
}
}
HB_FUNC( STDOUT )
{
if( HB_ISCHAR( 1 ) )
{
fputs( hb_parc( 1 ), stdout );
fflush( stdout ); // Forzar la escritura inmediata
}
}
#pragma ENDDUMP
Code: Select all | Expand
"mcp": {
"servers": {
"Harbour": {
"type": "stdio",
"command": "c:\\temp\\hbmcp.exe",
"args": []
}
}
}
Code: Select all | Expand
"mcp": {
"servers": {
"Harbour": {
"type": "stdio",
"command": "c:\\temp\\hbmcp.exe",
"args": []
}
}
}
Code: Select all | Expand
#define LogFile( cKey, cValue ) hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + cKey + cValue )
PROCEDURE Main()
LOCAL cInput, cResponse
// Bucle para leer continuamente desde stdin
WHILE .T.
cInput := StdIn()
IF Empty( cInput )
EXIT // Salir si no hay entrada (EOF)
ENDIF
// Procesar el mensaje
hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + "in: " + cInput )
cResponse := ProcessMessage( cInput )
IF ! Empty( cResponse )
hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + "out: " + cResponse )
StdOut( cResponse )
ENDIF
END
RETURN
// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
LOCAL cResponse := ""
LOCAL hJson, cId := "1", cMethod, hParams, cToolName
// Decodificar el JSON para obtener el método y el ID
hb_jsonDecode( cInput, @hJson )
cMethod = hJson[ "method" ]
LogFile( "method: ", cMethod )
// if hb_HHasKey( hJson, "id" )
// cId = hJson[ "id" ]
// else
// cId = "null" // Si no hay id, asignar null
// endif
LogFile( "id: ", cId )
do case
case cMethod == "initialize"
LogFile( "initialize: ", cMethod )
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":{' + ;
'"protocolVersion":"2025-03-26",' + ;
'"capabilities":{' + ;
'"tools":{},' + ;
'"resources":{},' + ;
'"prompts":{}' + ;
'}' + ;
'}' + ;
'}' + hb_eol()
case cMethod == "notifications/initialized"
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"result":{' + ;
'"protocolVersion":"2025-03-26",' + ;
'"capabilities":{' + ;
'"tools":{},' + ;
'"resources":{},' + ;
'"prompts":{}' + ;
'}' + ;
'}' + ;
'}' + hb_eol()
case cMethod == "tools/list"
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":{' + ;
'"tools": [' + ;
'{' + ;
'"name":"get_time",' + ;
'"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
'"schema":{' + ;
'"type":"object",' + ;
'"properties":{},' + ;
'"additionalProperties":false,' + ;
'"returns":{' + ;
'"type":"string"' + ;
'}' + ;
'}' + ;
'},' + ;
'{' + ;
'"name":"hb_version",' + ;
'"description":"Returns the version of the Harbour runtime environment",' + ;
'"schema":{' + ;
'"type":"object",' + ;
'"properties":{},' + ;
'"additionalProperties":false,' + ;
'"returns":{' + ;
'"type":"string"' + ;
'}' + ;
'}' + ;
'},' + ;
'{' + ;
'"name":"hb_compiler",' + ;
'"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
'"schema":{' + ;
'"type":"object",' + ;
'"properties":{},' + ;
'"additionalProperties":false,' + ;
'"returns":{' + ;
'"type":"string"' + ;
'}' + ;
'}' + ;
'}' + ;
']' + ;
'}' + ;
'}' + hb_eol()
case cMethod == "tools/call"
hParams := hJson[ "params" ]
IF HB_ISHASH( hParams ) .AND. "name" $ hParams .AND. "arguments" $ hParams
cToolName := hParams[ "name" ]
IF cToolName == "get_time" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
// Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":"' + hb_DateTime() + '"' + ;
'}' + hb_eol()
ELSEIF cToolName == "hb_version" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
// Obtener la versión de Harbour
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":"' + StrTran( Version(), '"', '\"' ) + '"' + ;
'}' + hb_eol()
ELSEIF cToolName == "hb_compiler" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
// Obtener el nombre del compilador
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":"' + StrTran( hb_Compiler(), '"', '\"' ) + '"' + ;
'}' + hb_eol()
ELSE
// Error: herramienta no encontrada o argumentos inválidos
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"error":{' + ;
'"code":-32602,' + ;
'"message":"Invalid params"' + ;
'}' + ;
'}' + hb_eol()
ENDIF
ELSE
// Error: parámetros inválidos
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"error":{' + ;
'"code":-32602,' + ;
'"message":"Invalid params"' + ;
'}' + ;
'}' + hb_eol()
ENDIF
// Manejar métodos no soportados
otherwise
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"error":{' + ;
'"code":-32601,' + ;
'"message":"Method not found"' + ;
'}' + ;
'}' + hb_eol()
endcase
hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + "response: " + cResponse )
RETURN cResponse
#pragma BEGINDUMP
#include <hbapi.h>
HB_FUNC( STDIN )
{
char buffer[ 1024 ];
if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
{
// Eliminar salto de línea final, si existe
size_t len = strlen( buffer );
if( len > 0 && buffer[ len - 1 ] == '\n' )
buffer[ len - 1 ] = '\0';
hb_retc( buffer );
}
else
{
hb_retc( "" ); // Retornar cadena vacía en caso de EOF
}
}
HB_FUNC( STDOUT )
{
if( HB_ISCHAR( 1 ) )
{
fputs( hb_parc( 1 ), stdout );
fflush( stdout ); // Forzar la escritura inmediata
}
}
#pragma ENDDUMP
Code: Select all | Expand
#define LogFile( cKey, cValue ) hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + cKey + cValue )
PROCEDURE Main()
LOCAL cInput, cResponse
// Bucle para leer continuamente desde stdin
WHILE .T.
cInput := StdIn()
IF Empty( cInput )
EXIT // Salir si no hay entrada (EOF)
ENDIF
// Procesar el mensaje
hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + "in: " + cInput )
cResponse := ProcessMessage( cInput )
IF ! Empty( cResponse )
hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + "out: " + cResponse )
StdOut( cResponse )
ENDIF
END
RETURN
// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
LOCAL cResponse := ""
LOCAL hJson, cId := "1", cMethod, hParams, cToolName
// Decodificar el JSON para obtener el método y el ID
hb_jsonDecode( cInput, @hJson )
cMethod = hJson[ "method" ]
LogFile( "method: ", cMethod )
// if hb_HHasKey( hJson, "id" )
// cId = hJson[ "id" ]
// else
// cId = "null" // Si no hay id, asignar null
// endif
LogFile( "id: ", cId )
do case
case cMethod == "initialize"
LogFile( "initialize: ", cMethod )
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":{' + ;
'"protocolVersion":"2025-03-26",' + ;
'"capabilities":{' + ;
'"tools":{},' + ;
'"resources":{},' + ;
'"prompts":{}' + ;
'}' + ;
'}' + ;
'}' + hb_eol()
case cMethod == "notifications/initialized"
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"result":{' + ;
'"protocolVersion":"2025-03-26",' + ;
'"capabilities":{' + ;
'"tools":{},' + ;
'"resources":{},' + ;
'"prompts":{}' + ;
'}' + ;
'}' + ;
'}' + hb_eol()
case cMethod == "tools/list"
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":{' + ;
'"tools": [' + ;
'{' + ;
'"name":"get_time",' + ;
'"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
'"schema":{' + ;
'"type":"object",' + ;
'"properties":{},' + ;
'"additionalProperties":false,' + ;
'"returns":{' + ;
'"type":"string"' + ;
'}' + ;
'}' + ;
'},' + ;
'{' + ;
'"name":"hb_version",' + ;
'"description":"Returns the version of the Harbour runtime environment",' + ;
'"schema":{' + ;
'"type":"object",' + ;
'"properties":{},' + ;
'"additionalProperties":false,' + ;
'"returns":{' + ;
'"type":"string"' + ;
'}' + ;
'}' + ;
'},' + ;
'{' + ;
'"name":"hb_compiler",' + ;
'"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
'"schema":{' + ;
'"type":"object",' + ;
'"properties":{},' + ;
'"additionalProperties":false,' + ;
'"returns":{' + ;
'"type":"string"' + ;
'}' + ;
'}' + ;
'}' + ;
']' + ;
'}' + ;
'}' + hb_eol()
case cMethod == "tools/call"
hParams := hJson[ "params" ]
IF HB_ISHASH( hParams ) .AND. "name" $ hParams .AND. "arguments" $ hParams
cToolName := hParams[ "name" ]
IF cToolName == "get_time" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
// Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":"' + hb_DateTime() + '"' + ;
'}' + hb_eol()
ELSEIF cToolName == "hb_version" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
// Obtener la versión de Harbour
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":"' + StrTran( Version(), '"', '\"' ) + '"' + ;
'}' + hb_eol()
ELSEIF cToolName == "hb_compiler" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
// Obtener el nombre del compilador
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":"' + StrTran( hb_Compiler(), '"', '\"' ) + '"' + ;
'}' + hb_eol()
ELSE
// Error: herramienta no encontrada o argumentos inválidos
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"error":{' + ;
'"code":-32602,' + ;
'"message":"Invalid params"' + ;
'}' + ;
'}' + hb_eol()
ENDIF
ELSE
// Error: parámetros inválidos
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"error":{' + ;
'"code":-32602,' + ;
'"message":"Invalid params"' + ;
'}' + ;
'}' + hb_eol()
ENDIF
// Manejar métodos no soportados
otherwise
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"error":{' + ;
'"code":-32601,' + ;
'"message":"Method not found"' + ;
'}' + ;
'}' + hb_eol()
endcase
hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + "response: " + cResponse )
RETURN cResponse
#pragma BEGINDUMP
#include <hbapi.h>
HB_FUNC( STDIN )
{
char buffer[ 1024 ];
if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
{
// Eliminar salto de línea final, si existe
size_t len = strlen( buffer );
if( len > 0 && buffer[ len - 1 ] == '\n' )
buffer[ len - 1 ] = '\0';
hb_retc( buffer );
}
else
{
hb_retc( "" ); // Retornar cadena vacía en caso de EOF
}
}
HB_FUNC( STDOUT )
{
if( HB_ISCHAR( 1 ) )
{
fputs( hb_parc( 1 ), stdout );
fflush( stdout ); // Forzar la escritura inmediata
}
}
#pragma ENDDUMP
Code: Select all | Expand
#define LogFile( cKey, cValue ) hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + cKey + cValue )
PROCEDURE Main()
LOCAL cInput, cResponse
// Bucle para leer continuamente desde stdin
WHILE .T.
cInput := StdIn()
IF Empty( cInput )
EXIT // Salir si no hay entrada (EOF)
ENDIF
// Procesar el mensaje
LogFile( "in: ", cInput )
cResponse := ProcessMessage( cInput )
IF ! Empty( cResponse )
LogFile( "out: ", cResponse )
StdOut( cResponse )
ENDIF
END
LogFile( "exit: ", "termina" )
RETURN
// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
LOCAL cResponse := ""
LOCAL hJson, cId, cMethod, hParams, cToolName
// Decodificar el JSON para obtener el método y el ID
hb_jsonDecode( cInput, @hJson )
cMethod = hJson[ "method" ]
LogFile( "method: ", cMethod )
if hb_HHasKey( hJson, "id" )
cId = AllTrim( Str( hJson[ "id" ] ) )
endif
do case
case cMethod == "initialize"
LogFile( "initialize: ", cMethod )
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":{' + ;
'"protocolVersion":"2025-03-26",' + ;
'"capabilities":{' + ;
'"tools":{},' + ;
'"resources":{},' + ;
'"prompts":{}' + ;
'}' + ;
'}' + ;
'}' + hb_eol()
case cMethod == "notifications/initialized"
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"result":{' + ;
'"protocolVersion":"2025-03-26",' + ;
'"capabilities":{' + ;
'"tools":{},' + ;
'"resources":{},' + ;
'"prompts":{}' + ;
'}' + ;
'}' + ;
'}' + hb_eol()
case cMethod == "tools/list"
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":{' + ;
'"tools": [' + ;
'{' + ;
'"name":"get_time",' + ;
'"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
'"schema":{' + ;
'"type":"object",' + ;
'"properties":{},' + ;
'"additionalProperties":false,' + ;
'"returns":{' + ;
'"type":"string"' + ;
'}' + ;
'}' + ;
'},' + ;
'{' + ;
'"name":"hb_version",' + ;
'"description":"Returns the version of the Harbour runtime environment",' + ;
'"schema":{' + ;
'"type":"object",' + ;
'"properties":{},' + ;
'"additionalProperties":false,' + ;
'"returns":{' + ;
'"type":"string"' + ;
'}' + ;
'}' + ;
'},' + ;
'{' + ;
'"name":"hb_compiler",' + ;
'"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
'"schema":{' + ;
'"type":"object",' + ;
'"properties":{},' + ;
'"additionalProperties":false,' + ;
'"returns":{' + ;
'"type":"string"' + ;
'}' + ;
'}' + ;
'}' + ;
']' + ;
'}' + ;
'}' + hb_eol()
case cMethod == "tools/call"
cToolName = hJson[ "params" ][ "name" ]
IF cToolName == "get_time"
// Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
'}' + hb_eol()
ELSEIF cToolName == "hb_version"
// Obtener la versión de Harbour
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
'}' + hb_eol()
ELSEIF cToolName == "hb_compiler"
// Obtener el nombre del compilador
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
'}' + hb_eol()
ELSE
// Error: herramienta no encontrada o argumentos inválidos
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"error":{' + ;
'"code":-32602,' + ;
'"message":"Invalid params"' + ;
'}' + ;
'}' + hb_eol()
ENDIF
// Manejar métodos no soportados
otherwise
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"error":{' + ;
'"code":-32604,' + ;
'"message":"Method not found"' + cMethod +;
' }' + ;
'}' + hb_eol()
endcase
RETURN cResponse
#pragma BEGINDUMP
#include <hbapi.h>
HB_FUNC( STDIN )
{
char buffer[ 1024 ];
if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
{
// Eliminar salto de línea final, si existe
size_t len = strlen( buffer );
if( len > 0 && buffer[ len - 1 ] == '\n' )
buffer[ len - 1 ] = '\0';
hb_retc( buffer );
}
else
{
hb_retc( "" ); // Retornar cadena vacía en caso de EOF
}
}
HB_FUNC( STDOUT )
{
if( HB_ISCHAR( 1 ) )
{
fputs( hb_parc( 1 ), stdout );
fflush( stdout ); // Forzar la escritura inmediata
}
}
#pragma ENDDUMP
Code: Select all | Expand
#define LogFile( cKey, cValue ) hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + cKey + cValue )
PROCEDURE Main()
LOCAL cInput, cResponse
// Bucle para leer continuamente desde stdin
WHILE .T.
cInput := StdIn()
IF Empty( cInput )
EXIT // Salir si no hay entrada (EOF)
ENDIF
// Procesar el mensaje
LogFile( "in: ", cInput )
cResponse := ProcessMessage( cInput )
IF ! Empty( cResponse )
LogFile( "out: ", cResponse )
StdOut( cResponse )
ENDIF
END
LogFile( "exit: ", "termina" )
RETURN
// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
LOCAL cResponse := ""
LOCAL hJson, cId, cMethod, hParams, cToolName
// Decodificar el JSON para obtener el método y el ID
hb_jsonDecode( cInput, @hJson )
cMethod = hJson[ "method" ]
LogFile( "method: ", cMethod )
if hb_HHasKey( hJson, "id" )
cId = AllTrim( Str( hJson[ "id" ] ) )
endif
do case
case cMethod == "initialize"
LogFile( "initialize: ", cMethod )
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":{' + ;
'"protocolVersion":"2025-03-26",' + ;
'"capabilities":{' + ;
'"tools":{},' + ;
'"resources":{},' + ;
'"prompts":{}' + ;
'}' + ;
'}' + ;
'}' + hb_eol()
case cMethod == "notifications/initialized"
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"result":{' + ;
'"protocolVersion":"2025-03-26",' + ;
'"capabilities":{' + ;
'"tools":{},' + ;
'"resources":{},' + ;
'"prompts":{}' + ;
'}' + ;
'}' + ;
'}' + hb_eol()
case cMethod == "tools/list"
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":{' + ;
'"tools": [' + ;
'{' + ;
'"name":"get_time",' + ;
'"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
'"schema":{' + ;
'"type":"object",' + ;
'"properties":{},' + ;
'"additionalProperties":false,' + ;
'"returns":{' + ;
'"type":"string"' + ;
'}' + ;
'}' + ;
'},' + ;
'{' + ;
'"name":"hb_version",' + ;
'"description":"Returns the version of the Harbour runtime environment",' + ;
'"schema":{' + ;
'"type":"object",' + ;
'"properties":{},' + ;
'"additionalProperties":false,' + ;
'"returns":{' + ;
'"type":"string"' + ;
'}' + ;
'}' + ;
'},' + ;
'{' + ;
'"name":"hb_compiler",' + ;
'"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
'"schema":{' + ;
'"type":"object",' + ;
'"properties":{},' + ;
'"additionalProperties":false,' + ;
'"returns":{' + ;
'"type":"string"' + ;
'}' + ;
'}' + ;
'}' + ;
']' + ;
'}' + ;
'}' + hb_eol()
case cMethod == "tools/call"
cToolName = hJson[ "params" ][ "name" ]
IF cToolName == "get_time"
// Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
'}' + hb_eol()
ELSEIF cToolName == "hb_version"
// Obtener la versión de Harbour
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
'}' + hb_eol()
ELSEIF cToolName == "hb_compiler"
// Obtener el nombre del compilador
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
'}' + hb_eol()
ELSE
// Error: herramienta no encontrada o argumentos inválidos
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"error":{' + ;
'"code":-32602,' + ;
'"message":"Invalid params"' + ;
'}' + ;
'}' + hb_eol()
ENDIF
// Manejar métodos no soportados
otherwise
cResponse := ;
'{' + ;
'"jsonrpc":"2.0",' + ;
'"id":' + cId + ',' + ;
'"error":{' + ;
'"code":-32604,' + ;
'"message":"Method not found"' + cMethod +;
' }' + ;
'}' + hb_eol()
endcase
RETURN cResponse
#pragma BEGINDUMP
#include <hbapi.h>
HB_FUNC( STDIN )
{
char buffer[ 1024 ];
if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
{
// Eliminar salto de línea final, si existe
size_t len = strlen( buffer );
if( len > 0 && buffer[ len - 1 ] == '\n' )
buffer[ len - 1 ] = '\0';
hb_retc( buffer );
}
else
{
hb_retc( "" ); // Retornar cadena vacía en caso de EOF
}
}
HB_FUNC( STDOUT )
{
if( HB_ISCHAR( 1 ) )
{
fputs( hb_parc( 1 ), stdout );
fflush( stdout ); // Forzar la escritura inmediata
}
}
#pragma ENDDUMP