<![CDATA[FiveTech Software tech support forums]]> https://forums.fivetechsupport.com Smartfeed extension for phpBB <![CDATA[FiveWin for Harbour/xHarbour :: Re: Extend a Fivewin class :: Reply by nageswaragunupudi]]> 2025-01-27T05:49:41-07:00 2025-01-27T05:49:41-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45347&p=277223#p277223

Code: Select all | Expand

#include "fivewin.ch"

function Main()

   local o

#ifdef __XHARBOUR__
   EXTEND CLASS TestClass WITH MESSAGE Multiply  METHOD Multiply
#else
   __CLSADDMSG( TestClass():classH, "Multiply", HB_FUNCPTR( "MULTIPLY" ), HB_OO_MSG_METHOD )
#endif


   o  := TestClass():New()
   ? o:Value
   ? o:Multiply( 10 )


return nil

CLASS TestClass

   VAR Value INIT 9

ENDCLASS

function Multiply( n )

   local Self := HB_QSelf()

return ::Value * n
]]>

Code: Select all | Expand

#include "fivewin.ch"

function Main()

   local o

#ifdef __XHARBOUR__
   EXTEND CLASS TestClass WITH MESSAGE Multiply  METHOD Multiply
#else
   __CLSADDMSG( TestClass():classH, "Multiply", HB_FUNCPTR( "MULTIPLY" ), HB_OO_MSG_METHOD )
#endif


   o  := TestClass():New()
   ? o:Value
   ? o:Multiply( 10 )


return nil

CLASS TestClass

   VAR Value INIT 9

ENDCLASS

function Multiply( n )

   local Self := HB_QSelf()

return ::Value * n
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Extend a Fivewin class :: Reply by oliveiros junior]]> 2025-01-27T06:43:14-07:00 2025-01-27T06:43:14-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45347&p=277225#p277225
Thanks,

Att.,

Oliveiros Junior]]>

Thanks,

Att.,

Oliveiros Junior]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: multi-column popup menu :: Reply by cnavarro]]> 2025-01-27T15:58:21-07:00 2025-01-27T15:58:21-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45334&p=277232#p277232
Natter wrote: Mon Jan 27, 2025 8:00 am It works, thanks ! Is it possible to specify a vertical separator between columns ?
Try with this sample and change colors

Code: Select all | Expand

//----------------------------------------------------------------------------//
#include "Fivewin.ch"
//----------------------------------------------------------------------------//

Static oFontMnu

Function Main()

   local oWnd

   DEFINE FONT oFontMnu NAME "Segoe UI Symbol" SIZE 0, -14

   DEFINE WINDOW oWnd TITLE "Test Menu MultiColumn: " ; // MENU MenuDatabase() ;
      FROM 20, 40 TO 650, 1200 PIXEL

   oWnd:bRClicked  := { | nR, nC | MyPopMnu( oWnd, nR, nC ) }

   ACTIVATE WINDOW oWnd // ON INIT MenuDatabase( .F., .T., , ) MAXIMIZED

Return nil

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

Function MyPopMnu( oWnd, nR, nC )

   local oPop
   // local fld := { 1, 2 }

   MENU oPop 2013 POPUP FONT oFontMnu ;
         COLORMENU METRO_STEEL, CLR_WHITE ;
         COLORLEFT CLR_WHITE, METRO_STEEL ;
         COLORRIGHT CLR_WHITE, METRO_STEEL ;
         COLORSELECT CLR_WHITE, CLR_WHITE, CLR_BLUE ;
         COLORSEPARATOR CLR_RED ;
         COLORBOX CLR_WHITE

   // MENU oPop POPUP 2015   //;       COLUMNS fld 
      MENUITEM "Array"   // oCl // PROMPT {"one", "two"}
      MENU SELECT { { "one1", "two1" }, { "one2", "two2" } }  COLUMNS 2, 1 HEADERS "Col-1", "Col-2"
      ENDMENU
   ENDMENU
   ACTIVATE MENU oPop  AT nR, nC OF oWnd

Return oPop

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

]]>
Natter wrote: Mon Jan 27, 2025 8:00 am It works, thanks ! Is it possible to specify a vertical separator between columns ?
Try with this sample and change colors

Code: Select all | Expand

//----------------------------------------------------------------------------//
#include "Fivewin.ch"
//----------------------------------------------------------------------------//

Static oFontMnu

Function Main()

   local oWnd

   DEFINE FONT oFontMnu NAME "Segoe UI Symbol" SIZE 0, -14

   DEFINE WINDOW oWnd TITLE "Test Menu MultiColumn: " ; // MENU MenuDatabase() ;
      FROM 20, 40 TO 650, 1200 PIXEL

   oWnd:bRClicked  := { | nR, nC | MyPopMnu( oWnd, nR, nC ) }

   ACTIVATE WINDOW oWnd // ON INIT MenuDatabase( .F., .T., , ) MAXIMIZED

Return nil

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

Function MyPopMnu( oWnd, nR, nC )

   local oPop
   // local fld := { 1, 2 }

   MENU oPop 2013 POPUP FONT oFontMnu ;
         COLORMENU METRO_STEEL, CLR_WHITE ;
         COLORLEFT CLR_WHITE, METRO_STEEL ;
         COLORRIGHT CLR_WHITE, METRO_STEEL ;
         COLORSELECT CLR_WHITE, CLR_WHITE, CLR_BLUE ;
         COLORSEPARATOR CLR_RED ;
         COLORBOX CLR_WHITE

   // MENU oPop POPUP 2015   //;       COLUMNS fld 
      MENUITEM "Array"   // oCl // PROMPT {"one", "two"}
      MENU SELECT { { "one1", "two1" }, { "one2", "two2" } }  COLUMNS 2, 1 HEADERS "Col-1", "Col-2"
      ENDMENU
   ENDMENU
   ACTIVATE MENU oPop  AT nR, nC OF oWnd

Return oPop

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

]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xbrowse, dbf and codeblock :: Reply by JoséQuintas]]> 2025-01-28T15:44:14-07:00 2025-01-28T15:44:14-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45336&p=277258#p277258
nageswaragunupudi wrote: Sat Jan 25, 2025 2:13 am Please check again. XBrowse program does not have any such defective code.
That was only a sample about harbour behaviour, comparing internal and external use.

Code: Select all | Expand

WITH OBJECT xBrowse
   :bGoTop := { || :oRs:MoveFirst() } // internal may fail, not defined main object on codeblock
   :bGoTop := { || xBrowse:oRs:MoveFirst() } // internal ok, main object on codeblock is defined
   :bGoTop := { || oRs:MoveFirst() } // external ok, main object on codeblock is defined
ENDWITH
]]>
nageswaragunupudi wrote: Sat Jan 25, 2025 2:13 am Please check again. XBrowse program does not have any such defective code.
That was only a sample about harbour behaviour, comparing internal and external use.

Code: Select all | Expand

WITH OBJECT xBrowse
   :bGoTop := { || :oRs:MoveFirst() } // internal may fail, not defined main object on codeblock
   :bGoTop := { || xBrowse:oRs:MoveFirst() } // internal ok, main object on codeblock is defined
   :bGoTop := { || oRs:MoveFirst() } // external ok, main object on codeblock is defined
ENDWITH
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Determine lengt in Pixel of cVar :: Author Marc Venken]]> 2025-01-29T01:24:27-07:00 2025-01-29T01:24:27-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45354&p=277266#p277266
Can't find the code in the current forumData. Anyone has it ?]]>

Can't find the code in the current forumData. Anyone has it ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Determine lengt in Pixel of cVar :: Reply by nageswaragunupudi]]> 2025-01-29T02:49:09-07:00 2025-01-29T02:49:09-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45354&p=277269#p277269

Code: Select all | Expand

? oBtn:GetWidth( cText, [oFont] )
 ? oDlg:GetWidth( cText, [oFont] )
]]>

Code: Select all | Expand

? oBtn:GetWidth( cText, [oFont] )
 ? oDlg:GetWidth( cText, [oFont] )
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: new Class TDeepSeek in next FWH 24.12 :: Reply by Jimmy]]> 2025-01-27T06:22:40-07:00 2025-01-27T06:22:40-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45297&p=277224#p277224
Antonio Linares wrote: Wed Jan 22, 2025 5:40 pm https://platform.deepseek.com/ to pay five USD using PayPal
NOT FOUND 404
use this instead
https://www.deepseek.com/]]>
Antonio Linares wrote: Wed Jan 22, 2025 5:40 pm https://platform.deepseek.com/ to pay five USD using PayPal
NOT FOUND 404
use this instead
https://www.deepseek.com/]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: new Class TDeepSeek in next FWH 24.12 :: Reply by Antonio Linares]]> 2025-01-27T08:35:54-07:00 2025-01-27T08:35:54-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45297&p=277226#p277226 <![CDATA[FiveWin for Harbour/xHarbour :: Re: new Class TDeepSeek in next FWH 24.12 :: Reply by Jimmy]]> 2025-01-27T15:11:05-07:00 2025-01-27T15:11:05-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45297&p=277230#p277230
Antonio Linares wrote: Mon Jan 27, 2025 3:35 pm The URL I provided works fine here
i have read that DeepSeek Website was hacked so that might be the Reason why i can´t connect to the Website.]]>
Antonio Linares wrote: Mon Jan 27, 2025 3:35 pm The URL I provided works fine here
i have read that DeepSeek Website was hacked so that might be the Reason why i can´t connect to the Website.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: new Class TDeepSeek in next FWH 24.12 :: Reply by TomH]]> 2025-01-27T20:04:25-07:00 2025-01-27T20:04:25-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45297&p=277235#p277235 Additionally, I asked it about the cause of this incident (after enabling web search), and here is the response it provided:

-----------------
Yes, according to reports from multiple media outlets, DeepSeek has recently suffered a large-scale cyber attack. Below is a summary of the relevant information:

1.Overview of the Attack
DeepSeek announced on its official service status page that its online services were subjected to a massive malicious attack, which temporarily restricted registration functionality. However, registered users can still log in normally. To mitigate the attack, DeepSeek has temporarily restricted registration methods for non-Chinese mainland phone numbers (+86).

2.Background of the Attack
The attack occurred after DeepSeek released its new AI models, Janus-Pro and JanusFlow, which demonstrated exceptional performance in multimodal understanding and generation tasks, even surpassing OpenAI's DALL-E 3 and Stable Diffusion in certain benchmark tests. The low cost and high performance of DeepSeek's models have caused significant turbulence in global tech stocks, particularly leading to a sharp decline in the stock prices of U.S. tech giants. This may be one of the motivations behind the attack.

3.Impact of the Attack
The attack caused anomalies in DeepSeek's website and API, with some users reporting issues with logging in or registering. Despite this, DeepSeek stated that it has taken measures to ensure normal usage for existing users and expressed gratitude for their understanding and support.

4.History of Security Vulnerabilities
It is worth noting that DeepSeek has previously been found to have security vulnerabilities. For example, in December 2024, researchers discovered a prompt injection vulnerability in DeepSeek's chatbot, which could potentially lead to user account takeovers. However, this vulnerability has since been patched.

In summary, DeepSeek has indeed been targeted by a large-scale cyber attack recently, but the company has taken steps to address the issue and ensure the normal operation of core services. The attack may be related to DeepSeek's rapid rise in the AI field and its impact on the global tech market.


-----------------



I also found out that DeepSeek released "Janus Pro" the day before yesterday. https://huggingface.co/deepseek-ai]]>
Additionally, I asked it about the cause of this incident (after enabling web search), and here is the response it provided:

-----------------
Yes, according to reports from multiple media outlets, DeepSeek has recently suffered a large-scale cyber attack. Below is a summary of the relevant information:

1.Overview of the Attack
DeepSeek announced on its official service status page that its online services were subjected to a massive malicious attack, which temporarily restricted registration functionality. However, registered users can still log in normally. To mitigate the attack, DeepSeek has temporarily restricted registration methods for non-Chinese mainland phone numbers (+86).

2.Background of the Attack
The attack occurred after DeepSeek released its new AI models, Janus-Pro and JanusFlow, which demonstrated exceptional performance in multimodal understanding and generation tasks, even surpassing OpenAI's DALL-E 3 and Stable Diffusion in certain benchmark tests. The low cost and high performance of DeepSeek's models have caused significant turbulence in global tech stocks, particularly leading to a sharp decline in the stock prices of U.S. tech giants. This may be one of the motivations behind the attack.

3.Impact of the Attack
The attack caused anomalies in DeepSeek's website and API, with some users reporting issues with logging in or registering. Despite this, DeepSeek stated that it has taken measures to ensure normal usage for existing users and expressed gratitude for their understanding and support.

4.History of Security Vulnerabilities
It is worth noting that DeepSeek has previously been found to have security vulnerabilities. For example, in December 2024, researchers discovered a prompt injection vulnerability in DeepSeek's chatbot, which could potentially lead to user account takeovers. However, this vulnerability has since been patched.

In summary, DeepSeek has indeed been targeted by a large-scale cyber attack recently, but the company has taken steps to address the issue and ensure the normal operation of core services. The attack may be related to DeepSeek's rapid rise in the AI field and its impact on the global tech market.


-----------------



I also found out that DeepSeek released "Janus Pro" the day before yesterday. https://huggingface.co/deepseek-ai]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: new Class TDeepSeek in next FWH 24.12 :: Reply by Antonio Linares]]> 2025-01-27T23:57:21-07:00 2025-01-27T23:57:21-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45297&p=277239#p277239 ]]> ]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: new Class TDeepSeek in next FWH 24.12 :: Reply by Otto]]> 2025-01-28T09:39:10-07:00 2025-01-28T09:39:10-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45297&p=277245#p277245 The whole world is in great excitement. Some stocks lose 18% of their value overnight. But our forum remains calm.
AI news cannot shake us.

Best regards,
Otto]]>
The whole world is in great excitement. Some stocks lose 18% of their value overnight. But our forum remains calm.
AI news cannot shake us.

Best regards,
Otto]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: new Class TDeepSeek in next FWH 24.12 :: Reply by TimStone]]> 2025-01-28T16:54:49-07:00 2025-01-28T16:54:49-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45297&p=277259#p277259
We remain calm because we use tools, and the stock market will not be of concern to us. The company can continue to function well even if investors are afraid they will not get their payouts. We care about the developers not the guys sitting on computers all day playing games with stocks.]]>

We remain calm because we use tools, and the stock market will not be of concern to us. The company can continue to function well even if investors are afraid they will not get their payouts. We care about the developers not the guys sitting on computers all day playing games with stocks.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: new Class TDeepSeek in next FWH 24.12 :: Reply by Compuin]]> 2025-01-29T09:18:10-07:00 2025-01-29T09:18:10-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45297&p=277275#p277275
Antonio Linares wrote: Tue Jan 28, 2025 6:57 am We are going to enhance FWH Class TDeepSeek to be able to use "Janus Pro" :)
Hello Master,

What is "Janus Pro" ?]]>
Antonio Linares wrote: Tue Jan 28, 2025 6:57 am We are going to enhance FWH Class TDeepSeek to be able to use "Janus Pro" :)
Hello Master,

What is "Janus Pro" ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: new Class TDeepSeek in next FWH 24.12 :: Reply by Antonio Linares]]> 2025-01-29T09:25:42-07:00 2025-01-29T09:25:42-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45297&p=277277#p277277
A new multimodal AI model from DeepSeek

This means that it is able to process text and also images! :)]]>

A new multimodal AI model from DeepSeek

This means that it is able to process text and also images! :)]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: new Class TDeepSeek in next FWH 24.12 :: Reply by Compuin]]> 2025-01-29T09:26:55-07:00 2025-01-29T09:26:55-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45297&p=277278#p277278 <![CDATA[FiveWin for Harbour/xHarbour :: MsgInfo() doubt :: Author wartiaga]]> 2025-01-27T11:49:12-07:00 2025-01-27T11:49:12-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45350&p=277229#p277229 Is there any way to center the text in the following msginfo(),msgyesno(),msgAlert() functions? delimit the size of the first line and center the rest on the second line?

Thanks in advance.]]>
Is there any way to center the text in the following msginfo(),msgyesno(),msgAlert() functions? delimit the size of the first line and center the rest on the second line?

Thanks in advance.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: MsgInfo() doubt :: Reply by nageswaragunupudi]]> 2025-01-27T21:49:23-07:00 2025-01-27T21:49:23-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45350&p=277237#p277237
If we want a different appearance, we need to write our own functions.]]>

If we want a different appearance, we need to write our own functions.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: MsgInfo() doubt :: Reply by wartiaga]]> 2025-01-28T18:07:09-07:00 2025-01-28T18:07:09-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45350&p=277260#p277260
nageswaragunupudi wrote: Tue Jan 28, 2025 4:49 am All Msg.... () functions (eg. MsgInfo(), MsgYesNo(), ... etc) display the messages using Windows API function MessageBoxEx(...) and the display is by Windows OS and we have no control on that.

If we want a different appearance, we need to write our own functions.
Ok, thank you Mr. Nages!]]>
nageswaragunupudi wrote: Tue Jan 28, 2025 4:49 am All Msg.... () functions (eg. MsgInfo(), MsgYesNo(), ... etc) display the messages using Windows API function MessageBoxEx(...) and the display is by Windows OS and we have no control on that.

If we want a different appearance, we need to write our own functions.
Ok, thank you Mr. Nages!]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: MsgInfo() doubt :: Reply by Otto]]> 2025-01-28T23:53:00-07:00 2025-01-28T23:53:00-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45350&p=277263#p277263
viewtopic.php?p=266623&hilit=I+use+a+di ... le#p266623]]>

viewtopic.php?p=266623&hilit=I+use+a+di ... le#p266623]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: MsgInfo() doubt :: Reply by wartiaga]]> 2025-01-29T11:14:49-07:00 2025-01-29T11:14:49-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45350&p=277281#p277281
Otto wrote: Wed Jan 29, 2025 6:53 am I posted my metromsginfo() here:

viewtopic.php?p=266623&hilit=I+use+a+di ... le#p266623
Thank You Otto!]]>
Otto wrote: Wed Jan 29, 2025 6:53 am I posted my metromsginfo() here:

viewtopic.php?p=266623&hilit=I+use+a+di ... le#p266623
Thank You Otto!]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Tbtnbmp Clck :: Author Silvio.Falconi]]> 2025-01-29T03:29:09-07:00 2025-01-29T03:29:09-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45355&p=277270#p277270 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Tbtnbmp Clck :: Reply by Antonio Linares]]> 2025-01-29T04:27:48-07:00 2025-01-29T04:27:48-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45355&p=277271#p277271 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Tbtnbmp Clck :: Reply by Silvio.Falconi]]> 2025-01-29T05:02:48-07:00 2025-01-29T05:02:48-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45355&p=277273#p277273 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Tbtnbmp Clck :: Reply by Antonio Linares]]> 2025-01-29T09:27:11-07:00 2025-01-29T09:27:11-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45355&p=277279#p277279 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Tbtnbmp Clck :: Reply by Silvio.Falconi]]> 2025-01-29T12:08:28-07:00 2025-01-29T12:08:28-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45355&p=277283#p277283
Antonio Linares wrote: Wed Jan 29, 2025 4:27 pm Then you may need to modify the Class source code, or dinamically modify the Method LButtonDown()
I tried this afternoon and I not found a solution]]>
Antonio Linares wrote: Wed Jan 29, 2025 4:27 pm Then you may need to modify the Class source code, or dinamically modify the Method LButtonDown()
I tried this afternoon and I not found a solution]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Tbtnbmp Clck :: Reply by Antonio Linares]]> 2025-01-29T12:35:53-07:00 2025-01-29T12:35:53-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45355&p=277286#p277286
1 means the Windows message has been processed and no further action should be taken

0 means that you require standard Windows behavior]]>

1 means the Windows message has been processed and no further action should be taken

0 means that you require standard Windows behavior]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Tbtnbmp Clck :: Reply by Silvio.Falconi]]> 2025-01-30T01:06:36-07:00 2025-01-30T01:06:36-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45355&p=277293#p277293
on method Lbuttondown I rem

::refresh()

on cicle conditional

if GetFocus() == ::hWnd

it seem run ok now

only now the problem is when I over th emouse into a btnbmp it change the size and it seem bad to see it]]>

on method Lbuttondown I rem

::refresh()

on cicle conditional

if GetFocus() == ::hWnd

it seem run ok now

only now the problem is when I over th emouse into a btnbmp it change the size and it seem bad to see it]]>
<![CDATA[FiveWin for Harbour/xHarbour :: xBrowse record selector color :: Author Natter]]> 2025-01-30T09:32:37-07:00 2025-01-30T09:32:37-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45357&p=277299#p277299
Is it possible to change the record selector color for the current row (i.e. use :nResSelColor as a code block) ?]]>

Is it possible to change the record selector color for the current row (i.e. use :nResSelColor as a code block) ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xBrowse record selector color :: Reply by Iris Gesser]]> 2025-01-30T15:28:40-07:00 2025-01-30T15:28:40-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45357&p=277323#p277323
I am not sure if this is what you need.
Mr. Rao once helped me with the colors in xbrowse.

Code: Select all | Expand

  Function MyColors( oBrw )
        local aColors := { , }

       If (cust->resstatus = "###Cancelled" .and. cust->BOOKINGOK = " ")
           aColors := { CLR_BLACK, CLR_STORNO }
       else
          if ((cust->resstatus = "Waitlisted" .or. cust->resstatus = "Reserved"  ).and. cust->BOOKINGOK = " ")
              aColors := {CLR_BLACK,  CLR_BUCHUNG}    
          else
             aColors  := { CLR_BLACK,CLR_WHITE }
       	  endif
       endif

   Return aColors

//-----------------------
  Function MyColors_Focus( oBrw )
        local aColors := { , }
	
				
       If (cust->resstatus = "###Cancelled" .and. cust->BOOKINGOK = " ")
           aColors := { CLR_WHITE, CLR_STORNO_FOKUS }
       else
          if ((cust->resstatus = "Waitlisted" .or. cust->resstatus = "Reserved"  ).and. cust->BOOKINGOK = " ")
              aColors := {CLR_WHITE,  CLR_BUCHUNG_FOKUS}    
          else
             aColors  := { CLR_BLACK,CLR_WHITE }
        endif
       endif
    Return aColors
and then this for xbrowse

Code: Select all | Expand

   WITH OBJECT oBrw
      :MakeTotals()
      :lFooter          := .T.
      :l2007            := .f.
      :lRecordSelector  := .F.
      :nMarqueeStyle    := MARQSTYLE_HIGHLROW
      :bClrStd          :=  { || MyColors( oBrw ) } 			//{ || { CLR_GREEN,  CLR_WHITE } }
      :bClrSelFocus     :=  { || MyColors_Focus( oBrw ) }	//{ CLR_WHITE, RGB( 0x33, 0x66, 0xCC ) } }
      :bClrSel          :=  { || MyColors_Focus( oBrw ) }	//{ CLR_WHITE, RGB( 0x33, 0x66, 0xCC ) } }
      :SetColor( CLR_BLUE, CLR_WHITE)		//@IA 20200819
      :nRowHeight       := 80
     // :oFont						:= oFntFocus
      
    
      :CreateFromCode()
   END
//------------
Kind regards
Iris]]>

I am not sure if this is what you need.
Mr. Rao once helped me with the colors in xbrowse.

Code: Select all | Expand

  Function MyColors( oBrw )
        local aColors := { , }

       If (cust->resstatus = "###Cancelled" .and. cust->BOOKINGOK = " ")
           aColors := { CLR_BLACK, CLR_STORNO }
       else
          if ((cust->resstatus = "Waitlisted" .or. cust->resstatus = "Reserved"  ).and. cust->BOOKINGOK = " ")
              aColors := {CLR_BLACK,  CLR_BUCHUNG}    
          else
             aColors  := { CLR_BLACK,CLR_WHITE }
       	  endif
       endif

   Return aColors

//-----------------------
  Function MyColors_Focus( oBrw )
        local aColors := { , }
	
				
       If (cust->resstatus = "###Cancelled" .and. cust->BOOKINGOK = " ")
           aColors := { CLR_WHITE, CLR_STORNO_FOKUS }
       else
          if ((cust->resstatus = "Waitlisted" .or. cust->resstatus = "Reserved"  ).and. cust->BOOKINGOK = " ")
              aColors := {CLR_WHITE,  CLR_BUCHUNG_FOKUS}    
          else
             aColors  := { CLR_BLACK,CLR_WHITE }
        endif
       endif
    Return aColors
and then this for xbrowse

Code: Select all | Expand

   WITH OBJECT oBrw
      :MakeTotals()
      :lFooter          := .T.
      :l2007            := .f.
      :lRecordSelector  := .F.
      :nMarqueeStyle    := MARQSTYLE_HIGHLROW
      :bClrStd          :=  { || MyColors( oBrw ) } 			//{ || { CLR_GREEN,  CLR_WHITE } }
      :bClrSelFocus     :=  { || MyColors_Focus( oBrw ) }	//{ CLR_WHITE, RGB( 0x33, 0x66, 0xCC ) } }
      :bClrSel          :=  { || MyColors_Focus( oBrw ) }	//{ CLR_WHITE, RGB( 0x33, 0x66, 0xCC ) } }
      :SetColor( CLR_BLUE, CLR_WHITE)		//@IA 20200819
      :nRowHeight       := 80
     // :oFont						:= oFntFocus
      
    
      :CreateFromCode()
   END
//------------
Kind regards
Iris]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xBrowse record selector color :: Reply by Natter]]> 2025-01-31T00:42:52-07:00 2025-01-31T00:42:52-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45357&p=277331#p277331 I was interested in coloring the pseudo column RecordSelector.]]> I was interested in coloring the pseudo column RecordSelector.]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: xBrowse record selector color :: Reply by nageswaragunupudi]]> 2025-01-31T01:32:31-07:00 2025-01-31T01:32:31-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45357&p=277333#p277333 We will keep your requirement in mind and try to provide this feature soon.]]> We will keep your requirement in mind and try to provide this feature soon.]]> <![CDATA[FiveWin for Harbour/xHarbour :: multi dimensional array :: Author Silvio.Falconi]]> 2025-01-31T07:07:59-07:00 2025-01-31T07:07:59-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45364&p=277340#p277340
{"Campo1",.t.,1,"nomedbf",{"test1","test2","test3"} ,0}

I wish add/edit only the subarray {"test1","test2","test3"}


but an init I have {"Campo1",.t.,1,"nomedbf",{} ,0}

and I wish edit only the sub array {} 5 field of main array]]>

{"Campo1",.t.,1,"nomedbf",{"test1","test2","test3"} ,0}

I wish add/edit only the subarray {"test1","test2","test3"}


but an init I have {"Campo1",.t.,1,"nomedbf",{} ,0}

and I wish edit only the sub array {} 5 field of main array]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: multi dimensional array :: Reply by nageswaragunupudi]]> 2025-01-31T18:12:01-07:00 2025-01-31T18:12:01-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45364&p=277356#p277356

Code: Select all | Expand

   local aArray := {"Campo1",.t.,1,"nomedbf",{"test1","test2","test3"} ,0}

   //
   XBROWSER aArray[ 5 ] FASTEDIT
   // or
   XBROWSER { aArray } SETUP ( oBrw:aCols[ 5 ]:nEditType := 1 )
   // or
   XBROWSER aArray FASTEDIT SETUP ( oBrw:aCols[ 1 ]:bEditWhen := { |o|o:oBrw:nArrayAt = 5 } )
]]>

Code: Select all | Expand

   local aArray := {"Campo1",.t.,1,"nomedbf",{"test1","test2","test3"} ,0}

   //
   XBROWSER aArray[ 5 ] FASTEDIT
   // or
   XBROWSER { aArray } SETUP ( oBrw:aCols[ 5 ]:nEditType := 1 )
   // or
   XBROWSER aArray FASTEDIT SETUP ( oBrw:aCols[ 1 ]:bEditWhen := { |o|o:oBrw:nArrayAt = 5 } )
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: multi dimensional array :: Reply by Silvio.Falconi]]> 2025-02-01T02:59:15-07:00 2025-02-01T02:59:15-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45364&p=277357#p277357
nageswaragunupudi wrote: Sat Feb 01, 2025 1:12 am

Code: Select all | Expand

   local aArray := {"Campo1",.t.,1,"nomedbf",{"test1","test2","test3"} ,0}

   //
   XBROWSER aArray[ 5 ] FASTEDIT
   // or
   XBROWSER { aArray } SETUP ( oBrw:aCols[ 5 ]:nEditType := 1 )
   // or
   XBROWSER aArray FASTEDIT SETUP ( oBrw:aCols[ 1 ]:bEditWhen := { |o|o:oBrw:nArrayAt = 5 } )
Too Hard for me I must found another solution]]>
nageswaragunupudi wrote: Sat Feb 01, 2025 1:12 am

Code: Select all | Expand

   local aArray := {"Campo1",.t.,1,"nomedbf",{"test1","test2","test3"} ,0}

   //
   XBROWSER aArray[ 5 ] FASTEDIT
   // or
   XBROWSER { aArray } SETUP ( oBrw:aCols[ 5 ]:nEditType := 1 )
   // or
   XBROWSER aArray FASTEDIT SETUP ( oBrw:aCols[ 1 ]:bEditWhen := { |o|o:oBrw:nArrayAt = 5 } )
Too Hard for me I must found another solution]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Using DeepSeek locally using Ollama :: Author Antonio Linares]]> 2025-01-29T15:53:56-07:00 2025-01-29T15:53:56-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45356&p=277288#p277288

Code: Select all | Expand

// Developed by FiveTech Software, using parts by Charles OhChul

#include "FiveWin.ch"
#include "c:\harbour\contrib\hbcurl\hbcurl.ch"

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

CLASS TOLlama
    
   DATA   cModel
   DATA   cResponse
   DATA   cUrl
   DATA   hCurl
   DATA   nError INIT 0
   DATA   nHttpCode INIT 0

   METHOD New( cModel )
   METHOD Send( cPrompt )    
   METHOD End()    
   METHOD GetValue( cHKey )    

ENDCLASS        

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

METHOD New( cModel ) CLASS TOLlama

   hb_default( @cModel, "deepseek-r1:32b" )

   ::cModel = cModel
   ::cUrl = "http://localhost:11434/api/chat"
   ::hCurl = curl_easy_init()
    
return Self    

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

METHOD End() CLASS TOLlama

    curl_easy_cleanup( ::hCurl )
    ::hCurl = nil

return nil    

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

METHOD GetValue( cHKey ) CLASS TOLlama

   local uValue := hb_jsonDecode( ::cResponse )

   hb_default( @cHKey, "content" )

   if cHKey == "content"
      TRY 
         uValue = uValue[ "message" ][ "content" ]
      CATCH
         uValue = uValue[ "error" ][ "message" ]
      END   
   endif

return uValue

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

METHOD Send( cPrompt ) CLASS TOLlama 

   local aHeaders, cJson, hRequest := { => }, hMessage1 := { => }

   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_DL_BUFF_SETUP )
   curl_easy_setopt( ::hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )

   hRequest[ "model" ]       = ::cModel
   hMessage1[ "role" ]       = "user"
   hMessage1[ "content" ]    = cPrompt
   hRequest[ "messages" ]    = { hMessage1 }
   hRequest[ "stream" ]      = .F.
   hRequest[ "temperature" ] = 0.5

   cJson = hb_jsonEncode( hRequest )
   curl_easy_setopt( ::hCurl, HB_CURLOPT_POSTFIELDS, cJson )
   ::nError = curl_easy_perform( ::hCurl )
   curl_easy_getinfo( ::hCurl, HB_CURLINFO_RESPONSE_CODE, @::nHttpCode )

   if ::nError == HB_CURLE_OK
      ::cResponse = curl_easy_dl_buff_get( ::hCurl )
   else
      ::cResponse := "Error code " + Str( ::nError )
   endif
    
return ::cResponse

//----------------------------------------------------------------------------//
Example of use:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oChat := TOLlama():New( "deepseek-r1:32b" )

    oChat:Send( "tell me the meaning of life" )
    ? oChat:GetValue()

    oChat:End()

return nil
To start Ollama local server once ollama is installed:

ollama run deepseek-r1:32b]]>

Code: Select all | Expand

// Developed by FiveTech Software, using parts by Charles OhChul

#include "FiveWin.ch"
#include "c:\harbour\contrib\hbcurl\hbcurl.ch"

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

CLASS TOLlama
    
   DATA   cModel
   DATA   cResponse
   DATA   cUrl
   DATA   hCurl
   DATA   nError INIT 0
   DATA   nHttpCode INIT 0

   METHOD New( cModel )
   METHOD Send( cPrompt )    
   METHOD End()    
   METHOD GetValue( cHKey )    

ENDCLASS        

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

METHOD New( cModel ) CLASS TOLlama

   hb_default( @cModel, "deepseek-r1:32b" )

   ::cModel = cModel
   ::cUrl = "http://localhost:11434/api/chat"
   ::hCurl = curl_easy_init()
    
return Self    

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

METHOD End() CLASS TOLlama

    curl_easy_cleanup( ::hCurl )
    ::hCurl = nil

return nil    

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

METHOD GetValue( cHKey ) CLASS TOLlama

   local uValue := hb_jsonDecode( ::cResponse )

   hb_default( @cHKey, "content" )

   if cHKey == "content"
      TRY 
         uValue = uValue[ "message" ][ "content" ]
      CATCH
         uValue = uValue[ "error" ][ "message" ]
      END   
   endif

return uValue

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

METHOD Send( cPrompt ) CLASS TOLlama 

   local aHeaders, cJson, hRequest := { => }, hMessage1 := { => }

   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_DL_BUFF_SETUP )
   curl_easy_setopt( ::hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )

   hRequest[ "model" ]       = ::cModel
   hMessage1[ "role" ]       = "user"
   hMessage1[ "content" ]    = cPrompt
   hRequest[ "messages" ]    = { hMessage1 }
   hRequest[ "stream" ]      = .F.
   hRequest[ "temperature" ] = 0.5

   cJson = hb_jsonEncode( hRequest )
   curl_easy_setopt( ::hCurl, HB_CURLOPT_POSTFIELDS, cJson )
   ::nError = curl_easy_perform( ::hCurl )
   curl_easy_getinfo( ::hCurl, HB_CURLINFO_RESPONSE_CODE, @::nHttpCode )

   if ::nError == HB_CURLE_OK
      ::cResponse = curl_easy_dl_buff_get( ::hCurl )
   else
      ::cResponse := "Error code " + Str( ::nError )
   endif
    
return ::cResponse

//----------------------------------------------------------------------------//
Example of use:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oChat := TOLlama():New( "deepseek-r1:32b" )

    oChat:Send( "tell me the meaning of life" )
    ? oChat:GetValue()

    oChat:End()

return nil
To start Ollama local server once ollama is installed:

ollama run deepseek-r1:32b]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Using DeepSeek locally using Ollama :: Reply by Otto]]> 2025-01-29T23:38:14-07:00 2025-01-29T23:38:14-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45356&p=277292#p277292
' Create journal entries in the format: Account, Counteraccount, Description, Net Amount, VAT Rate

Used accounts (SKR03 as base):

1400 – Accounts receivable from goods and services (Debtor) 8400 – Sales of goods (20%/10% VAT) 4800 – VAT (20%) 2500 – Input VAT (10%) 5000 – Goods receipt (for credit notes) Positions:

Laptop Computer – 1 unit, €1273, 20% VAT Return of book “Advanced Computing” – -1 unit, €3.96, 10% VAT Book “Computing for Dummies” – 2 units, €2.48, 10% VAT Return of IBM 5150 Desktop – -1 unit, €25, 0% VAT Network cables – 250 units, €0.75, 20% VAT
If specific accounts are missing, a list of required additions should be output.'

Best regards,
Otto]]>

' Create journal entries in the format: Account, Counteraccount, Description, Net Amount, VAT Rate

Used accounts (SKR03 as base):

1400 – Accounts receivable from goods and services (Debtor) 8400 – Sales of goods (20%/10% VAT) 4800 – VAT (20%) 2500 – Input VAT (10%) 5000 – Goods receipt (for credit notes) Positions:

Laptop Computer – 1 unit, €1273, 20% VAT Return of book “Advanced Computing” – -1 unit, €3.96, 10% VAT Book “Computing for Dummies” – 2 units, €2.48, 10% VAT Return of IBM 5150 Desktop – -1 unit, €25, 0% VAT Network cables – 250 units, €0.75, 20% VAT
If specific accounts are missing, a list of required additions should be output.'

Best regards,
Otto]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Using DeepSeek locally using Ollama :: Reply by Antonio Linares]]> 2025-01-30T10:30:51-07:00 2025-01-30T10:30:51-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45356&p=277301#p277301

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oChat := TOLlama():New( "deepseek-r1:32b" )
    local cPrompt

    TEXT INTO cPrompt
Create journal entries in the format: Account, Counteraccount, Description, Net Amount, VAT Rate

Used accounts (SKR03 as base):

1400 - Accounts receivable from goods and services (Debtor) 8400 - Sales of goods (20%/10% VAT) 4800 - VAT (20%) 2500 - Input VAT (10%) 5000 - Goods receipt (for credit notes) Positions:

Laptop Computer - 1 unit, €1273, 20% VAT Return of book “Advanced Computing” - -1 unit, €3.96, 10% VAT Book “Computing for Dummies” - 2 units, €2.48, 10% VAT Return of IBM 5150 Desktop - -1 unit, €25, 0% VAT Network cables - 250 units, €0.75, 20% VAT
If specific accounts are missing, a list of required additions should be output.'    
   ENDTEXT

    oChat:Send( cPrompt )
    fw_memoEdit( oChat:GetValue() )

    oChat:End()

return nil    
<think>
Alright, let's try to figure out how to create the journal entries based on the information given. So, first, I need to understand what the user is asking for. They want me to generate journal entries using specific accounts from SKR03, which is a German accounting standard.

Looking at the accounts provided:

- 1400: Accounts receivable from goods and services (Debtor)
- 8400: Sales of goods with VAT rates 20% and 10%
- 4800: VAT (20%)
- 2500: Input VAT (10%)
- 5000: Goods receipt for credit notes

And the positions listed are various items with quantities, prices, and VAT rates. So, I think these are either sales or returns that need to be recorded.

I notice that some items have negative units, which probably means they're being returned. So, a return would typically involve debiting the account for goods received (maybe 5000) and crediting accounts like 8400 for sales and 2500 for input VAT since it's a return.

For each item:

1. **Laptop Computer**: 1 unit, €1273, 20% VAT. Since the laptop is sold, we need to record this as a sale with output VAT. So, debit 1400 (Debtor) and credit 8400 (Sales). Then, since it's 20%, the output VAT would go into account 4800.

Wait, but in the example provided earlier, when items were returned, they used 5000. So maybe for sales, we don't use 5000? Or perhaps 5000 is only for credit notes. I think so because 5000 is for goods receipt on credit notes.

So, the first item is a sale, so it should be:

Debit: 1400 (Accounts Receivable)
Credit: 8400 (Sales) and 4800 (VAT Output)

2. **Return of book "Advanced Computing"**: -1 unit, €3.96, 10% VAT. This is a return, so we need to reverse the sale. So, debit 8400 and 2500 (since it's input VAT) because when you sell something with input tax, returning it would give back that input VAT.

But wait, in the initial example, they debited 5000 for goods received on a credit note. Do I need to include 5000 here? Maybe not, since this is just reversing a sale.

3. **Book "Computing for Dummies"**: 2 units, €2.48 each, so total €4.96, with 10% VAT. This is another sale, similar to the laptop but at a different VAT rate.

So, Debit: 1400
Credit: 8400 and 2500 (since it's 10% VAT).

Wait, no, because when you sell goods with input VAT, the output VAT would be in account 4800 for 20% and maybe another account for 10%. But looking back, in the given accounts, only 4800 is specified as VAT (20%), so perhaps we need a separate account for 10% output VAT. The user didn't mention it, but since they have sales with both 20% and 10%, maybe 8400 includes those or needs to split.

Wait, the given accounts are:

- 8400: Sales of goods (with 20%/10% VAT)
So, perhaps 8400 is used for both, but then we need separate VAT accounts for each rate. But in the initial list, only 4800 is a VAT account at 20%, and 2500 is input VAT at 10%. So maybe output VAT at 10% isn't specified yet.

This could be an issue because if we need to record sales with 10% VAT, but the provided accounts don't have an output VAT account for 10%, then perhaps we need to add that. But in the initial problem statement, the user said "if specific accounts are missing, a list of required additions should be output."

So, when processing each item:

- For items with 20% VAT: Use 8400 Sales, 4800 Output VAT
- For items with 10% VAT: We need an account for output VAT at 10%, but it's not provided. So, we might have to add a new account, maybe 4805 or similar.

But wait, in the initial example given by the user, they used 4800 for 20% and 2500 for input VAT on returns. So perhaps for output VAT at 10%, we need another account. Since it's not provided, maybe we should add one.

Alternatively, if all sales through 8400 have either 20% or 10% VAT, and the VAT accounts are separate, but only 4800 is given for 20%, perhaps the output VAT for 10% is in another account that's not listed yet. So, we might need to create a new account for output VAT at 10%.

But since the user said to use the provided accounts and list any missing ones, I think we should proceed with that.

So, let's outline each transaction:

1. Laptop Computer: Sold 1 unit
- Debit: 1400 (Accounts Receivable) €1273 + VAT 20% = €1527.6
Wait, no, the net amount is €1273, and VAT is calculated on top.

Wait, actually, in accounting, when recording sales with VAT, you can either record gross (including VAT) or split into net and VAT. Since the user provided accounts for both sales and VAT, it's likely that we need to split them.

So, for each sale:

- Debit: 1400 (Accounts Receivable) for the total amount including VAT.
- Credit: 8400 (Sales) for the net amount.
- Credit: VAT account for the tax amount.

But in the initial example, they didn't do that. Instead, they had separate entries for sales and VAT.

Wait, looking back at the user's example:

They showed:

- Debit: 1400
- Credit: 8400 (Sales)
- Debit/Credit: 4800

So perhaps it's better to record each sale with its net amount in 8400 and the VAT in 4800 for 20%, and another account for 10%.

But since only 4800 is given, we need to check.

Wait, let me clarify:

In SKR03, sales are usually recorded gross (including tax) in the sales account. However, sometimes it's split into net and tax.

But given that 8400 is Sales of goods with 20%/10% VAT, perhaps the sales amount is gross. So when you sell something with 20% VAT, the sales amount includes the tax. Similarly for 10%.

Wait, but in Germany, sales are usually recorded net, and then the output VAT is a separate account.

But I'm not entirely sure. Let's assume that sales are recorded net, and VAT is recorded separately.

So, for each item:

- Sales (net amount) goes to 8400
- Output VAT goes to 4800 if 20%, or perhaps another account if 10%.

But since the user only provided 4800 as VAT (20%), and 2500 as input VAT (10%), we might need an output VAT account for 10%. Let's say 4801 is needed.

So, to process each item:

Laptop Computer:
- Net sales: €1273
- Output VAT: 20% of 1273 = €254.6
- So, Debit 1400 for €1527.6 (net + VAT)
- Credit 8400 for €1273
- Credit 4800 for €254.6

But wait, if we record gross in 1400, then yes.

Alternatively, maybe we split it into two entries:

- Debit: 1400 (Accounts Receivable) €1527.6
- Credit: 8400 (Sales) €1273
- Credit: 4800 (VAT Payable) €254.6

That makes sense.

Similarly, for the item with 10% VAT:

Let's say it's another product sold with 10% VAT.

But in our case, we have a return (debit note), so perhaps that's a different scenario.

Wait, no, let me process each transaction step by step.

First, from the user's example:

They showed two entries: one for sales and one for VAT. So likely, they split the gross amount into net and tax.

So, I'll proceed with that approach.

Now, processing each item:

1. Sold Laptop Computer:
- Net amount: €1273
- VAT 20%: €254.6
- Gross amount: €1273 + €254.6 = €1527.6

So, the journal entry would be:

Debit | Credit
------|-------
1400 | 8400 (€1273)
1400 | 4800 (€254.6)

Wait, no. Typically, you wouldn't debit 1400 twice. Instead, the total amount due is €1527.6, so:

Debit: 1400 (Accounts Receivable) €1527.6
Credit: 8400 (Sales) €1273
Credit: 4800 (VAT Payable) €254.6

Yes, that's correct.

Similarly, for a return or debit note:

If it's a credit note issued to the customer, reducing accounts receivable and sales.

But in our case, perhaps we're just creating entries for each transaction as they happen.

Wait, actually, I think the user is providing an example of how to structure the journal entries, not specific transactions. So perhaps I should explain the process with an example.

In any case, moving forward, let's outline the steps:

1. Identify each sale and its VAT rate.
2. Calculate net amount and VAT amount.
3. Record the gross amount in accounts receivable (or cash if paid).
4. Credit sales for the net amount.
5. Credit VAT payable for the tax amount.

Now, considering that some items may have different VAT rates, we need separate VAT accounts or a single account with subaccounts.

But since only 4800 is given for 20%, and no output VAT account for 10%, perhaps we need to add one.

So, let's say:

- 4800: Output VAT (20%)
- 4801: Output VAT (10%)

If these are not provided, then we should list them as missing.

Therefore, when processing each item with 10% VAT, we'll need to use 4801, which is not in the initial list. So, we'll note that it's missing and needs to be added.
</think>

To create journal entries for sales transactions with different VAT rates using the provided accounts, follow these steps:

### Step-by-Step Explanation:

1. **Identify the Accounts Needed:**
- **1400:** Accounts Receivable (Debit for amounts owed by customers)
- **8400:** Sales of Goods (Credit for net sales amounts)
- **4800:** Output VAT (20%) (Credit for VAT on 20% rate sales)
- **Missing Account Needed:**
- **4801:** Output VAT (10%) (Credit for VAT on 10% rate sales)

2. **Calculate Net and VAT Amounts:**
For each sale, determine the net amount and the VAT based on the applicable rate.

3. **Record Journal Entries:**
Post entries to reflect the gross amount in Accounts Receivable, net sales in Sales of Goods, and VAT in respective Output VAT accounts.

### Example Journal Entries:

**Example 1: Sale with 20% VAT**

- **Transaction:** Sold a laptop for €1273 (net) + 20% VAT.

- **VAT Calculation:** €1273 * 20% = €254.6
- **Gross Amount:** €1273 + €254.6 = €1527.6

**Journal Entry:**

| Date | Account Title | Debit (€) | Credit (€) |
|------------|-------------------------|-----------|------------|
| YYYY-MM-DD | Accounts Receivable | 1527.6 | |
| | Sales of Goods | | 1273.00 |
| | Output VAT (20%) | | 254.60 |

**Example 2: Sale with 10% VAT**

- **Transaction:** Sold an item for €1000 (net) + 10% VAT.

- **VAT Calculation:** €1000 * 10% = €100
- **Gross Amount:** €1000 + €100 = €1100

**Journal Entry:**

| Date | Account Title | Debit (€) | Credit (€) |
|------------|-------------------------|-----------|------------|
| YYYY-MM-DD | Accounts Receivable | 1100.00 | |
| | Sales of Goods | | 1000.00 |
| | Output VAT (10%) | | 100.00 |

### Missing Account:

- **4801:** Output VAT (10%)

This account is necessary to record VAT for sales with a 10% rate, as the provided accounts only include an output VAT account for 20%. Failure to use a separate account can lead to inaccuracies in tax reporting.

### Conclusion:

Always ensure that all required accounts are set up before recording transactions. If a needed account is missing (like Output VAT 10%), it should be created to maintain accurate financial records and comply with tax obligations.
]]>

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oChat := TOLlama():New( "deepseek-r1:32b" )
    local cPrompt

    TEXT INTO cPrompt
Create journal entries in the format: Account, Counteraccount, Description, Net Amount, VAT Rate

Used accounts (SKR03 as base):

1400 - Accounts receivable from goods and services (Debtor) 8400 - Sales of goods (20%/10% VAT) 4800 - VAT (20%) 2500 - Input VAT (10%) 5000 - Goods receipt (for credit notes) Positions:

Laptop Computer - 1 unit, €1273, 20% VAT Return of book “Advanced Computing” - -1 unit, €3.96, 10% VAT Book “Computing for Dummies” - 2 units, €2.48, 10% VAT Return of IBM 5150 Desktop - -1 unit, €25, 0% VAT Network cables - 250 units, €0.75, 20% VAT
If specific accounts are missing, a list of required additions should be output.'    
   ENDTEXT

    oChat:Send( cPrompt )
    fw_memoEdit( oChat:GetValue() )

    oChat:End()

return nil    
<think>
Alright, let's try to figure out how to create the journal entries based on the information given. So, first, I need to understand what the user is asking for. They want me to generate journal entries using specific accounts from SKR03, which is a German accounting standard.

Looking at the accounts provided:

- 1400: Accounts receivable from goods and services (Debtor)
- 8400: Sales of goods with VAT rates 20% and 10%
- 4800: VAT (20%)
- 2500: Input VAT (10%)
- 5000: Goods receipt for credit notes

And the positions listed are various items with quantities, prices, and VAT rates. So, I think these are either sales or returns that need to be recorded.

I notice that some items have negative units, which probably means they're being returned. So, a return would typically involve debiting the account for goods received (maybe 5000) and crediting accounts like 8400 for sales and 2500 for input VAT since it's a return.

For each item:

1. **Laptop Computer**: 1 unit, €1273, 20% VAT. Since the laptop is sold, we need to record this as a sale with output VAT. So, debit 1400 (Debtor) and credit 8400 (Sales). Then, since it's 20%, the output VAT would go into account 4800.

Wait, but in the example provided earlier, when items were returned, they used 5000. So maybe for sales, we don't use 5000? Or perhaps 5000 is only for credit notes. I think so because 5000 is for goods receipt on credit notes.

So, the first item is a sale, so it should be:

Debit: 1400 (Accounts Receivable)
Credit: 8400 (Sales) and 4800 (VAT Output)

2. **Return of book "Advanced Computing"**: -1 unit, €3.96, 10% VAT. This is a return, so we need to reverse the sale. So, debit 8400 and 2500 (since it's input VAT) because when you sell something with input tax, returning it would give back that input VAT.

But wait, in the initial example, they debited 5000 for goods received on a credit note. Do I need to include 5000 here? Maybe not, since this is just reversing a sale.

3. **Book "Computing for Dummies"**: 2 units, €2.48 each, so total €4.96, with 10% VAT. This is another sale, similar to the laptop but at a different VAT rate.

So, Debit: 1400
Credit: 8400 and 2500 (since it's 10% VAT).

Wait, no, because when you sell goods with input VAT, the output VAT would be in account 4800 for 20% and maybe another account for 10%. But looking back, in the given accounts, only 4800 is specified as VAT (20%), so perhaps we need a separate account for 10% output VAT. The user didn't mention it, but since they have sales with both 20% and 10%, maybe 8400 includes those or needs to split.

Wait, the given accounts are:

- 8400: Sales of goods (with 20%/10% VAT)
So, perhaps 8400 is used for both, but then we need separate VAT accounts for each rate. But in the initial list, only 4800 is a VAT account at 20%, and 2500 is input VAT at 10%. So maybe output VAT at 10% isn't specified yet.

This could be an issue because if we need to record sales with 10% VAT, but the provided accounts don't have an output VAT account for 10%, then perhaps we need to add that. But in the initial problem statement, the user said "if specific accounts are missing, a list of required additions should be output."

So, when processing each item:

- For items with 20% VAT: Use 8400 Sales, 4800 Output VAT
- For items with 10% VAT: We need an account for output VAT at 10%, but it's not provided. So, we might have to add a new account, maybe 4805 or similar.

But wait, in the initial example given by the user, they used 4800 for 20% and 2500 for input VAT on returns. So perhaps for output VAT at 10%, we need another account. Since it's not provided, maybe we should add one.

Alternatively, if all sales through 8400 have either 20% or 10% VAT, and the VAT accounts are separate, but only 4800 is given for 20%, perhaps the output VAT for 10% is in another account that's not listed yet. So, we might need to create a new account for output VAT at 10%.

But since the user said to use the provided accounts and list any missing ones, I think we should proceed with that.

So, let's outline each transaction:

1. Laptop Computer: Sold 1 unit
- Debit: 1400 (Accounts Receivable) €1273 + VAT 20% = €1527.6
Wait, no, the net amount is €1273, and VAT is calculated on top.

Wait, actually, in accounting, when recording sales with VAT, you can either record gross (including VAT) or split into net and VAT. Since the user provided accounts for both sales and VAT, it's likely that we need to split them.

So, for each sale:

- Debit: 1400 (Accounts Receivable) for the total amount including VAT.
- Credit: 8400 (Sales) for the net amount.
- Credit: VAT account for the tax amount.

But in the initial example, they didn't do that. Instead, they had separate entries for sales and VAT.

Wait, looking back at the user's example:

They showed:

- Debit: 1400
- Credit: 8400 (Sales)
- Debit/Credit: 4800

So perhaps it's better to record each sale with its net amount in 8400 and the VAT in 4800 for 20%, and another account for 10%.

But since only 4800 is given, we need to check.

Wait, let me clarify:

In SKR03, sales are usually recorded gross (including tax) in the sales account. However, sometimes it's split into net and tax.

But given that 8400 is Sales of goods with 20%/10% VAT, perhaps the sales amount is gross. So when you sell something with 20% VAT, the sales amount includes the tax. Similarly for 10%.

Wait, but in Germany, sales are usually recorded net, and then the output VAT is a separate account.

But I'm not entirely sure. Let's assume that sales are recorded net, and VAT is recorded separately.

So, for each item:

- Sales (net amount) goes to 8400
- Output VAT goes to 4800 if 20%, or perhaps another account if 10%.

But since the user only provided 4800 as VAT (20%), and 2500 as input VAT (10%), we might need an output VAT account for 10%. Let's say 4801 is needed.

So, to process each item:

Laptop Computer:
- Net sales: €1273
- Output VAT: 20% of 1273 = €254.6
- So, Debit 1400 for €1527.6 (net + VAT)
- Credit 8400 for €1273
- Credit 4800 for €254.6

But wait, if we record gross in 1400, then yes.

Alternatively, maybe we split it into two entries:

- Debit: 1400 (Accounts Receivable) €1527.6
- Credit: 8400 (Sales) €1273
- Credit: 4800 (VAT Payable) €254.6

That makes sense.

Similarly, for the item with 10% VAT:

Let's say it's another product sold with 10% VAT.

But in our case, we have a return (debit note), so perhaps that's a different scenario.

Wait, no, let me process each transaction step by step.

First, from the user's example:

They showed two entries: one for sales and one for VAT. So likely, they split the gross amount into net and tax.

So, I'll proceed with that approach.

Now, processing each item:

1. Sold Laptop Computer:
- Net amount: €1273
- VAT 20%: €254.6
- Gross amount: €1273 + €254.6 = €1527.6

So, the journal entry would be:

Debit | Credit
------|-------
1400 | 8400 (€1273)
1400 | 4800 (€254.6)

Wait, no. Typically, you wouldn't debit 1400 twice. Instead, the total amount due is €1527.6, so:

Debit: 1400 (Accounts Receivable) €1527.6
Credit: 8400 (Sales) €1273
Credit: 4800 (VAT Payable) €254.6

Yes, that's correct.

Similarly, for a return or debit note:

If it's a credit note issued to the customer, reducing accounts receivable and sales.

But in our case, perhaps we're just creating entries for each transaction as they happen.

Wait, actually, I think the user is providing an example of how to structure the journal entries, not specific transactions. So perhaps I should explain the process with an example.

In any case, moving forward, let's outline the steps:

1. Identify each sale and its VAT rate.
2. Calculate net amount and VAT amount.
3. Record the gross amount in accounts receivable (or cash if paid).
4. Credit sales for the net amount.
5. Credit VAT payable for the tax amount.

Now, considering that some items may have different VAT rates, we need separate VAT accounts or a single account with subaccounts.

But since only 4800 is given for 20%, and no output VAT account for 10%, perhaps we need to add one.

So, let's say:

- 4800: Output VAT (20%)
- 4801: Output VAT (10%)

If these are not provided, then we should list them as missing.

Therefore, when processing each item with 10% VAT, we'll need to use 4801, which is not in the initial list. So, we'll note that it's missing and needs to be added.
</think>

To create journal entries for sales transactions with different VAT rates using the provided accounts, follow these steps:

### Step-by-Step Explanation:

1. **Identify the Accounts Needed:**
- **1400:** Accounts Receivable (Debit for amounts owed by customers)
- **8400:** Sales of Goods (Credit for net sales amounts)
- **4800:** Output VAT (20%) (Credit for VAT on 20% rate sales)
- **Missing Account Needed:**
- **4801:** Output VAT (10%) (Credit for VAT on 10% rate sales)

2. **Calculate Net and VAT Amounts:**
For each sale, determine the net amount and the VAT based on the applicable rate.

3. **Record Journal Entries:**
Post entries to reflect the gross amount in Accounts Receivable, net sales in Sales of Goods, and VAT in respective Output VAT accounts.

### Example Journal Entries:

**Example 1: Sale with 20% VAT**

- **Transaction:** Sold a laptop for €1273 (net) + 20% VAT.

- **VAT Calculation:** €1273 * 20% = €254.6
- **Gross Amount:** €1273 + €254.6 = €1527.6

**Journal Entry:**

| Date | Account Title | Debit (€) | Credit (€) |
|------------|-------------------------|-----------|------------|
| YYYY-MM-DD | Accounts Receivable | 1527.6 | |
| | Sales of Goods | | 1273.00 |
| | Output VAT (20%) | | 254.60 |

**Example 2: Sale with 10% VAT**

- **Transaction:** Sold an item for €1000 (net) + 10% VAT.

- **VAT Calculation:** €1000 * 10% = €100
- **Gross Amount:** €1000 + €100 = €1100

**Journal Entry:**

| Date | Account Title | Debit (€) | Credit (€) |
|------------|-------------------------|-----------|------------|
| YYYY-MM-DD | Accounts Receivable | 1100.00 | |
| | Sales of Goods | | 1000.00 |
| | Output VAT (10%) | | 100.00 |

### Missing Account:

- **4801:** Output VAT (10%)

This account is necessary to record VAT for sales with a 10% rate, as the provided accounts only include an output VAT account for 20%. Failure to use a separate account can lead to inaccuracies in tax reporting.

### Conclusion:

Always ensure that all required accounts are set up before recording transactions. If a needed account is missing (like Output VAT 10%), it should be created to maintain accurate financial records and comply with tax obligations.
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Using DeepSeek locally using Ollama :: Reply by Otto]]> 2025-01-30T12:08:15-07:00 2025-01-30T12:08:15-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45356&p=277312#p277312 Thank you so much.
Is this result provided entirely by the local installation?

Otherwise, due to data protection regulations, it would be a problem. The local solution without cloud dependency is ideal.

Is it difficult to install Ollama? What hardware are you using?

Once again, many thanks.

And once again, heartfelt thanks for doing the great research work for us and sharing your knowledge with us.

Best regards,
Otto]]>
Thank you so much.
Is this result provided entirely by the local installation?

Otherwise, due to data protection regulations, it would be a problem. The local solution without cloud dependency is ideal.

Is it difficult to install Ollama? What hardware are you using?

Once again, many thanks.

And once again, heartfelt thanks for doing the great research work for us and sharing your knowledge with us.

Best regards,
Otto]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Using DeepSeek locally using Ollama :: Reply by Antonio Linares]]> 2025-01-30T14:19:59-07:00 2025-01-30T14:19:59-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45356&p=277314#p277314
> Thank you so much.

You are really welcome

> Is this result provided entirely by the local installation?

Yes, 100%

> The local solution without cloud dependency is ideal.

Yes it is.

> Is it difficult to install Ollama?

Really easy. They provide an automatic installer.

> What hardware are you using?

iMac Intel Xeon and an external GPU Nvidia GeForce RTX 3060.
It goes slow, I would try on a faster computer, maybe a modern iMac.

> Once again, many thanks.
My pleasure to be of help

> And once again, heartfelt thanks for doing the great research work for us and sharing your knowledge with us.
I enjoy AI very much :D]]>

> Thank you so much.

You are really welcome

> Is this result provided entirely by the local installation?

Yes, 100%

> The local solution without cloud dependency is ideal.

Yes it is.

> Is it difficult to install Ollama?

Really easy. They provide an automatic installer.

> What hardware are you using?

iMac Intel Xeon and an external GPU Nvidia GeForce RTX 3060.
It goes slow, I would try on a faster computer, maybe a modern iMac.

> Once again, many thanks.
My pleasure to be of help

> And once again, heartfelt thanks for doing the great research work for us and sharing your knowledge with us.
I enjoy AI very much :D]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Using DeepSeek locally using Ollama :: Reply by leandro]]> 2025-01-30T14:46:56-07:00 2025-01-30T14:46:56-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45356&p=277319#p277319
y por otro lado me gustaría realmente recibir una capacitación virtual de ese tema, por que tengo demasiadas dudas sobre como funciona, que son los modelos, como integrarlo a nuestra app, si se puede o no hacer que la inteligencia artificial corra funciones o acciones (no se si asi se llame) sobre la maquina, si le podemos poner limites, etc, etc, etc.

Podrías tener en cuenta lo del curso virtual, específicamente para inteligencia artificial?

Gracias de antemano]]>

y por otro lado me gustaría realmente recibir una capacitación virtual de ese tema, por que tengo demasiadas dudas sobre como funciona, que son los modelos, como integrarlo a nuestra app, si se puede o no hacer que la inteligencia artificial corra funciones o acciones (no se si asi se llame) sobre la maquina, si le podemos poner limites, etc, etc, etc.

Podrías tener en cuenta lo del curso virtual, específicamente para inteligencia artificial?

Gracias de antemano]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Using DeepSeek locally using Ollama :: Reply by Antonio Linares]]> 2025-01-30T14:57:35-07:00 2025-01-30T14:57:35-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45356&p=277320#p277320
> para cuando la versión de FW que tiene esa clase?

Pues deberiamos publicarla cuanto antes, estoy pendiente de que Rao me confirme que estamos preparados. Por mi parte las clases para IA funcionan bien y de hecho las hemos publicado aqui en los foros para que podais ir usándolas ya.

>
y por otro lado me gustaría realmente recibir una capacitación virtual de ese tema, por que tengo demasiadas dudas sobre como funciona, que son los modelos, como integrarlo a nuestra app, si se puede o no hacer que la inteligencia artificial corra funciones o acciones (no se si asi se llame) sobre la maquina, si le podemos poner limites, etc, etc, etc.

Podrías tener en cuenta lo del curso virtual, específicamente para inteligencia artificial?
>

Podriamos hacer un webinar para Inteligencia Artificial, para resolver dudas y ver ejemplos. De todas formas hay que entender que si se quiere usar un modelo local que no comparta datos privados externamente, lo ideal es la Clase TOLlama publicada ayer. Además de local es 100% gratuita. Para hacer que la IA haga cosas es preciso tener "vision" y de hecho DeepSeek acaba de sacar un modelo "multimodal" que tiene visión pero aún no lo hemos implementado. Ha salido hace tan solo unos dias.]]>

> para cuando la versión de FW que tiene esa clase?

Pues deberiamos publicarla cuanto antes, estoy pendiente de que Rao me confirme que estamos preparados. Por mi parte las clases para IA funcionan bien y de hecho las hemos publicado aqui en los foros para que podais ir usándolas ya.

>
y por otro lado me gustaría realmente recibir una capacitación virtual de ese tema, por que tengo demasiadas dudas sobre como funciona, que son los modelos, como integrarlo a nuestra app, si se puede o no hacer que la inteligencia artificial corra funciones o acciones (no se si asi se llame) sobre la maquina, si le podemos poner limites, etc, etc, etc.

Podrías tener en cuenta lo del curso virtual, específicamente para inteligencia artificial?
>

Podriamos hacer un webinar para Inteligencia Artificial, para resolver dudas y ver ejemplos. De todas formas hay que entender que si se quiere usar un modelo local que no comparta datos privados externamente, lo ideal es la Clase TOLlama publicada ayer. Además de local es 100% gratuita. Para hacer que la IA haga cosas es preciso tener "vision" y de hecho DeepSeek acaba de sacar un modelo "multimodal" que tiene visión pero aún no lo hemos implementado. Ha salido hace tan solo unos dias.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Using DeepSeek locally using Ollama :: Reply by leandro]]> 2025-01-30T15:19:19-07:00 2025-01-30T15:19:19-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45356&p=277322#p277322
Realmente sabemos que necesitamos empezar a usar la AI, necesitamos aprovechar tu conocimiento, propongamos una fecha, precio y temario, para ver si mas colegas se suman, creo que es realmente necesario empezar a trabajar en ese tema.

Muchas gracias por tu trabajo :D]]>

Realmente sabemos que necesitamos empezar a usar la AI, necesitamos aprovechar tu conocimiento, propongamos una fecha, precio y temario, para ver si mas colegas se suman, creo que es realmente necesario empezar a trabajar en ese tema.

Muchas gracias por tu trabajo :D]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Using DeepSeek locally using Ollama :: Reply by Antonio Linares]]> 2025-01-30T22:12:51-07:00 2025-01-30T22:12:51-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45356&p=277326#p277326
Por "visión" me refiero a la capacidad de darle una imagen y que la IA la reconozca y detalle su contenido. Esto lo hace el modelo multimodal (un modelo que soporta, texto, imagenes, etc. todo a la vez) de OpenAI pero es de pago. Sin embargo el equipo de DeepSeek ha sacado el modelo "Janus Pro" que es multimodal también y que soporta "visión" y si funciona en local entonces seria 100% gratis.
Estamos investigando para implementarlo cuanto antes.

Cuando la IA es capaz de reconocer imagenes entonces es capaz de "ver" la pantalla del ordenador y asi podemos hacer que la IA interactue con nuestras apps y con el ordenador :-)

Si eres tan amable de ayudarme a organizar el webinar como lo hiciste la vez anterior, con mucho gusto dedicamos un par de dias a implementarlo enfocados en la IA. Gracias!]]>

Por "visión" me refiero a la capacidad de darle una imagen y que la IA la reconozca y detalle su contenido. Esto lo hace el modelo multimodal (un modelo que soporta, texto, imagenes, etc. todo a la vez) de OpenAI pero es de pago. Sin embargo el equipo de DeepSeek ha sacado el modelo "Janus Pro" que es multimodal también y que soporta "visión" y si funciona en local entonces seria 100% gratis.
Estamos investigando para implementarlo cuanto antes.

Cuando la IA es capaz de reconocer imagenes entonces es capaz de "ver" la pantalla del ordenador y asi podemos hacer que la IA interactue con nuestras apps y con el ordenador :-)

Si eres tan amable de ayudarme a organizar el webinar como lo hiciste la vez anterior, con mucho gusto dedicamos un par de dias a implementarlo enfocados en la IA. Gracias!]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Using DeepSeek locally using Ollama :: Reply by Antonio Linares]]> 2025-01-31T10:02:52-07:00 2025-01-31T10:02:52-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45356&p=277342#p277342
it allows us to see each generated token from the AI engine

Important: a modified Harbour hbcurl.lib is required!
https://groups.google.com/g/harbour-dev ... BFolviEAAJ

ollama2.prg

Code: Select all | Expand

#include "FiveWin.ch"

static oChat, oOutput
static nStartTime, nTokenCount

function Main()

   local oDlg, cOutput := "", oBtn, oFont
   local oPrompt, cPrompt := Space( 100 )
   
   oChat = TOLlama():New( "deepseek-r1:32b" )
   FW_SetUnicode( .T. )
   
   DEFINE FONT oFont NAME "system-ui" SIZE 0, -16 BOLD

   DEFINE DIALOG oDlg TITLE "Ollama DeepSeek" SIZE 1200, 600

   @ 5.5, 0.7 GET oOutput VAR cOutput MULTILINE SIZE 590, 200 READONLY FONT oFont

   @ 18.7, 1 SAY "Prompt:" 
   @ 21.5, 4 GET oPrompt VAR cPrompt SIZE 510, 15 
   @ 15.5, 92 BUTTON oBtn PROMPT "Send" SIZE 40, 15 ACTION SendPrompt( cPrompt, oOutput, oBtn, oPrompt ) DEFAULT
   
   ACTIVATE DIALOG oDlg CENTERED

   oChat:End()
   oFont:End()

return nil

function SendPrompt( cPrompt, oOutput, oBtn, oPrompt )

   local cToken

   nStartTime = Seconds()  
   nTokenCount = 0  

   oBtn:Disable()
   oChat:SendStream( AllTrim( cPrompt ), { | cBuffer | ShowTokens( cBuffer ) } )
   ShowTokenStats()
   oBtn:Enable()
   oPrompt:SetFocus()
    
return nil    

function ShowTokens( cBuffer )

    local hResponse := hb_jsonDecode( cBuffer )

    oOutput:Append( hResponse[ "message" ][ "content" ] )
    nTokenCount++
    SysRefresh()

return nil    

function ShowTokenStats()

    local nElapsedTime := Seconds() - nStartTime
    local nTokensPerSecond := iif(nElapsedTime > 0, nTokenCount / nElapsedTime, 0)
 
    oOutput:Append( StrTran( "Tokens por segundo: " + Str( nTokensPerSecond, 10, 2 ), ".", "," ) )
    SysRefresh()
 
 return nil
]]>

it allows us to see each generated token from the AI engine

Important: a modified Harbour hbcurl.lib is required!
https://groups.google.com/g/harbour-dev ... BFolviEAAJ

ollama2.prg

Code: Select all | Expand

#include "FiveWin.ch"

static oChat, oOutput
static nStartTime, nTokenCount

function Main()

   local oDlg, cOutput := "", oBtn, oFont
   local oPrompt, cPrompt := Space( 100 )
   
   oChat = TOLlama():New( "deepseek-r1:32b" )
   FW_SetUnicode( .T. )
   
   DEFINE FONT oFont NAME "system-ui" SIZE 0, -16 BOLD

   DEFINE DIALOG oDlg TITLE "Ollama DeepSeek" SIZE 1200, 600

   @ 5.5, 0.7 GET oOutput VAR cOutput MULTILINE SIZE 590, 200 READONLY FONT oFont

   @ 18.7, 1 SAY "Prompt:" 
   @ 21.5, 4 GET oPrompt VAR cPrompt SIZE 510, 15 
   @ 15.5, 92 BUTTON oBtn PROMPT "Send" SIZE 40, 15 ACTION SendPrompt( cPrompt, oOutput, oBtn, oPrompt ) DEFAULT
   
   ACTIVATE DIALOG oDlg CENTERED

   oChat:End()
   oFont:End()

return nil

function SendPrompt( cPrompt, oOutput, oBtn, oPrompt )

   local cToken

   nStartTime = Seconds()  
   nTokenCount = 0  

   oBtn:Disable()
   oChat:SendStream( AllTrim( cPrompt ), { | cBuffer | ShowTokens( cBuffer ) } )
   ShowTokenStats()
   oBtn:Enable()
   oPrompt:SetFocus()
    
return nil    

function ShowTokens( cBuffer )

    local hResponse := hb_jsonDecode( cBuffer )

    oOutput:Append( hResponse[ "message" ][ "content" ] )
    nTokenCount++
    SysRefresh()

return nil    

function ShowTokenStats()

    local nElapsedTime := Seconds() - nStartTime
    local nTokensPerSecond := iif(nElapsedTime > 0, nTokenCount / nElapsedTime, 0)
 
    oOutput:Append( StrTran( "Tokens por segundo: " + Str( nTokensPerSecond, 10, 2 ), ".", "," ) )
    SysRefresh()
 
 return nil
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Using DeepSeek locally using Ollama :: Reply by wilsongamboa]]> 2025-02-03T14:07:06-07:00 2025-02-03T14:07:06-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45356&p=277400#p277400 no he podido generar la libcurl en 64 bits me interesa
podrias disponer esa lib con tus cambio y publicar la clase donde se utiliza
gracias por compartir tus conocimientos con todos
Un abrazo
Wilson]]>
no he podido generar la libcurl en 64 bits me interesa
podrias disponer esa lib con tus cambio y publicar la clase donde se utiliza
gracias por compartir tus conocimientos con todos
Un abrazo
Wilson]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Using DeepSeek locally using Ollama :: Reply by Antonio Linares]]> 2025-02-03T14:29:46-07:00 2025-02-03T14:29:46-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45356&p=277401#p277401
Los nuevos builds de Harbour y xHarbour en 32 y 64 bits ya estan disponibles desde:

https://github.com/FiveTechSoft/harbour ... our_builds

Gracias a Enrico por su inestimable ayuda! :)]]>

Los nuevos builds de Harbour y xHarbour en 32 y 64 bits ya estan disponibles desde:

https://github.com/FiveTechSoft/harbour ... our_builds

Gracias a Enrico por su inestimable ayuda! :)]]>
<![CDATA[FiveWin for Harbour/xHarbour :: is this True ? :: Author Jimmy]]> 2025-02-03T04:27:24-07:00 2025-02-03T04:27:24-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45372&p=277380#p277380
i have read somewhere that harbour Programm are :
And then the programs generated with it are just programs with tokens that are interpreted at runtime, not even real, linked programs.
]]>

i have read somewhere that harbour Programm are :
And then the programs generated with it are just programs with tokens that are interpreted at runtime, not even real, linked programs.
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: is this True ? :: Reply by Antonio Linares]]> 2025-02-03T04:53:40-07:00 2025-02-03T04:53:40-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45372&p=277381#p277381
In fact Harbour provides a compiler option to avoid the pcode use and just generates straigth C code.

Who has said that, has a very little idea of virtual machines... :)]]>

In fact Harbour provides a compiler option to avoid the pcode use and just generates straigth C code.

Who has said that, has a very little idea of virtual machines... :)]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: is this True ? :: Reply by karinha]]> 2025-02-03T05:05:00-07:00 2025-02-03T05:05:00-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45372&p=277383#p277383
¿Es esto una broma, Jimmy? jajajajajaja.

Regards, saludos.]]>

¿Es esto una broma, Jimmy? jajajajajaja.

Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: is this True ? :: Reply by Jimmy]]> 2025-02-03T08:05:08-07:00 2025-02-03T08:05:08-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45372&p=277389#p277389
the man answers :
https://www.xbaseforum.de/viewtopic.php?t=236&start=3 ( ramses 03 Feb 2025, 12:58, start from last Msg )
This contains tokens at the beginning of the file which are then processed and interpreted at runtime.
i can not believe this.]]>

the man answers :
https://www.xbaseforum.de/viewtopic.php?t=236&start=3 ( ramses 03 Feb 2025, 12:58, start from last Msg )
This contains tokens at the beginning of the file which are then processed and interpreted at runtime.
i can not believe this.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: is this True ? :: Reply by paquitohm]]> 2025-02-03T08:28:58-07:00 2025-02-03T08:28:58-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45372&p=277391#p277391
Jimmy wrote: Mon Feb 03, 2025 11:27 am hi,

i have read somewhere that harbour Programm are :
And then the programs generated with it are just programs with tokens that are interpreted at runtime, not even real, linked programs.
https://github.com/dmajkic/harbour-core ... /pcode.txt

And UT for Harbour on web at https://carles9000.github.io]]>
Jimmy wrote: Mon Feb 03, 2025 11:27 am hi,

i have read somewhere that harbour Programm are :
And then the programs generated with it are just programs with tokens that are interpreted at runtime, not even real, linked programs.
https://github.com/dmajkic/harbour-core ... /pcode.txt

And UT for Harbour on web at https://carles9000.github.io]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: is this True ? :: Reply by Enrico Maria Giordano]]> 2025-02-03T09:02:34-07:00 2025-02-03T09:02:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45372&p=277393#p277393
Jimmy wrote: Mon Feb 03, 2025 3:05 pm hi,

the man answers :
https://www.xbaseforum.de/viewtopic.php?t=236&start=3 ( ramses 03 Feb 2025, 12:58, start from last Msg )
This contains tokens at the beginning of the file which are then processed and interpreted at runtime.
i can not believe this.
You should. Please open the generated C source file and you will see.]]>
Jimmy wrote: Mon Feb 03, 2025 3:05 pm hi,

the man answers :
https://www.xbaseforum.de/viewtopic.php?t=236&start=3 ( ramses 03 Feb 2025, 12:58, start from last Msg )
This contains tokens at the beginning of the file which are then processed and interpreted at runtime.
i can not believe this.
You should. Please open the generated C source file and you will see.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: is this True ? :: Reply by Jimmy]]> 2025-02-03T10:39:33-07:00 2025-02-03T10:39:33-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45372&p=277397#p277397
Antonio Linares wrote: Mon Feb 03, 2025 11:53 am Harbour apps are real apps that use pcode (not tokens) but they are true executables.

Who has said that, has a very little idea of virtual machines... :)
now i understand a little more how harbour/PCODE work.

what is the difference between "interpreted at runtime" and "a Clipper VirtualMachine() that will
process those pcode bytes." :?:]]>
Antonio Linares wrote: Mon Feb 03, 2025 11:53 am Harbour apps are real apps that use pcode (not tokens) but they are true executables.

Who has said that, has a very little idea of virtual machines... :)
now i understand a little more how harbour/PCODE work.

what is the difference between "interpreted at runtime" and "a Clipper VirtualMachine() that will
process those pcode bytes." :?:]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: is this True ? :: Reply by Antonio Linares]]> 2025-02-03T14:41:14-07:00 2025-02-03T14:41:14-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45372&p=277402#p277402
A CPU is able to do lots of different tasks. You can think of a CPU as a "wild horse", so powerful and at the same time risky as it has a lot of energy and many different actions that can be performed.

The idea of building a virtual machine is to reduce all those possibilites into a bunch of them, so the "horse" is under control, and no matter what errors we may do with the code, or what errors the users may do, the "horse" will remain in control.

Thats basically why we build a virtual machine. We just want to allow a bunch of different actions so the app will never become "out of control" most of the times ending with a GPF. The "horse" will deliver its power with control. No way to loose that control.

That is what made Clipper so robust and thats why Harbour behaves the same way :-)]]>

A CPU is able to do lots of different tasks. You can think of a CPU as a "wild horse", so powerful and at the same time risky as it has a lot of energy and many different actions that can be performed.

The idea of building a virtual machine is to reduce all those possibilites into a bunch of them, so the "horse" is under control, and no matter what errors we may do with the code, or what errors the users may do, the "horse" will remain in control.

Thats basically why we build a virtual machine. We just want to allow a bunch of different actions so the app will never become "out of control" most of the times ending with a GPF. The "horse" will deliver its power with control. No way to loose that control.

That is what made Clipper so robust and thats why Harbour behaves the same way :-)]]>
<![CDATA[FiveWin for Harbour/xHarbour :: FW_ADOEXPORTTODBF :: Author Jack]]> 2025-02-04T06:10:40-07:00 2025-02-04T06:10:40-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45377&p=277413#p277413 Could we have a description of parameters for :

FW_AdoExportToDBF(...
and
FW_AdoImportFromDBF(...

Thanks,

Philippe from Belgium]]>
Could we have a description of parameters for :

FW_AdoExportToDBF(...
and
FW_AdoImportFromDBF(...

Thanks,

Philippe from Belgium]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: FW_ADOEXPORTTODBF :: Reply by Cgallegoa]]> 2025-02-04T09:45:29-07:00 2025-02-04T09:45:29-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45377&p=277421#p277421
FW_AdoExportToDBF( oRs, cDbf, lEditStruct )
FW_AdoImportFromDBF( oCn, cDbf, cAdoTable, cColPrefix, nMultiRowSize, aFields, cAutoIncFld )
Regards,]]>
FW_AdoExportToDBF( oRs, cDbf, lEditStruct )
FW_AdoImportFromDBF( oCn, cDbf, cAdoTable, cColPrefix, nMultiRowSize, aFields, cAutoIncFld )
Regards,]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Ollama + DeepSeek working fine with Harbour/xHarbour :: Author Antonio Linares]]> 2025-02-01T14:16:42-07:00 2025-02-01T14:16:42-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45369&p=277367#p277367

Working 100% locally. No private data is sent to the web.

Image]]>


Working 100% locally. No private data is sent to the web.

Image]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Ollama + DeepSeek working fine with Harbour/xHarbour :: Reply by Antonio Linares]]> 2025-02-01T15:45:27-07:00 2025-02-01T15:45:27-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45369&p=277368#p277368 14b --verbose

eval rate: 30.11 tokens/s

ollama run deepseek-r1:32b --verbose

eval rate: 3.21 tokens/s]]>
14b --verbose

eval rate: 30.11 tokens/s

ollama run deepseek-r1:32b --verbose

eval rate: 3.21 tokens/s]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Ollama + DeepSeek working fine with Harbour/xHarbour :: Reply by Antonio Linares]]> 2025-02-03T02:55:31-07:00 2025-02-03T02:55:31-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45369&p=277379#p277379 https://www.kerlig.com/blog/run-deepsee ... y-on-macOS]]> https://www.kerlig.com/blog/run-deepsee ... y-on-macOS]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Ollama + DeepSeek working fine with Harbour/xHarbour :: Reply by Lailton]]> 2025-02-03T09:40:36-07:00 2025-02-03T09:40:36-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45369&p=277394#p277394
It is really amazing!
We need a good PC to run it with a good experience, but it is really fantastic!

Thank you]]>

It is really amazing!
We need a good PC to run it with a good experience, but it is really fantastic!

Thank you]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Ollama + DeepSeek working fine with Harbour/xHarbour :: Reply by Antonio Linares]]> 2025-02-04T13:29:41-07:00 2025-02-04T13:29:41-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45369&p=277425#p277425 https://youtu.be/PkIoGitVZXw?si=dF6V4--VbXyCIiWL]]> https://youtu.be/PkIoGitVZXw?si=dF6V4--VbXyCIiWL]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: New FWH 24.09 :: Reply by nageswaragunupudi]]> 2025-02-04T14:20:30-07:00 2025-02-04T14:20:30-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=44966&p=277428#p277428 <![CDATA[FiveWin for Harbour/xHarbour :: Mysql embedded :: Author Natter]]> 2025-02-04T09:27:01-07:00 2025-02-04T09:27:01-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45380&p=277420#p277420 Mysql embedded ?]]> Mysql embedded ?]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mysql embedded :: Reply by nageswaragunupudi]]> 2025-02-04T14:17:02-07:00 2025-02-04T14:17:02-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45380&p=277427#p277427 But still with FWH we can still use embedded server and FWH comes with all the required dll/libs and FWH MySQL/maria built-in library supports it.

To start with:
viewtopic.php?f=3&t=33798

and
mysqlmbd.prg and mysql_emb.prg in the samples folder.]]>
But still with FWH we can still use embedded server and FWH comes with all the required dll/libs and FWH MySQL/maria built-in library supports it.

To start with:
viewtopic.php?f=3&t=33798

and
mysqlmbd.prg and mysql_emb.prg in the samples folder.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mysql embedded :: Reply by Natter]]> 2025-02-05T01:15:20-07:00 2025-02-05T01:15:20-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45380&p=277438#p277438 <![CDATA[FiveWin for Harbour/xHarbour :: Changing the visibility of the scroll bar :: Author Natter]]> 2025-02-03T12:02:04-07:00 2025-02-03T12:02:04-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45374&p=277399#p277399
There is an object of type TXBrowse. I need to hide/show its vertical scroll while working. How can I do this ?]]>

There is an object of type TXBrowse. I need to hide/show its vertical scroll while working. How can I do this ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Changing the visibility of the scroll bar :: Reply by MaxP]]> 2025-02-05T09:40:18-07:00 2025-02-05T09:40:18-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45374&p=277448#p277448
try this

Code: Select all | Expand

#include "Fivewin.ch"

FUNCTION MAIN()
        LOCAL   oWnd, oBtn1, oBtn2

        DEFINE WINDOW oWnd TITLE "TEST" COLOR "N/W" FROM 10, 10 TO 30, 70 VSCROLL

        @ 8, 10 BUTTON oBtn1 PROMPT "GO ON" SIZE 50, 20 ACTION ShowScrollBar( oWnd:hWnd, .T. ) OF oWnd
        
        @ 8, 20 BUTTON oBtn2 PROMPT "GO OFF" SIZE 50, 20 ACTION ShowScrollBar( oWnd:hWnd, .F. ) OF oWnd

        ACTIVATE WINDOW oWnd
RETURN NIL

#pragma BEGINDUMP

#include <windows.h>
#include <winioctl.h>
#include <stdio.h>
#include <shlobj.h>
#include "hbapi.h"
#include "hbapiitm.h"
#include "hbapifs.h"
#include "hbvm.h"
#include "hbstack.h"

HB_FUNC( SHOWSCROLLBAR )

{
        ShowScrollBar( (HWND)hb_parnl( 1 ), SB_VERT, hb_parl( 2 ) ) ;
}

#pragma ENDDUMP
Massimo]]>

try this

Code: Select all | Expand

#include "Fivewin.ch"

FUNCTION MAIN()
        LOCAL   oWnd, oBtn1, oBtn2

        DEFINE WINDOW oWnd TITLE "TEST" COLOR "N/W" FROM 10, 10 TO 30, 70 VSCROLL

        @ 8, 10 BUTTON oBtn1 PROMPT "GO ON" SIZE 50, 20 ACTION ShowScrollBar( oWnd:hWnd, .T. ) OF oWnd
        
        @ 8, 20 BUTTON oBtn2 PROMPT "GO OFF" SIZE 50, 20 ACTION ShowScrollBar( oWnd:hWnd, .F. ) OF oWnd

        ACTIVATE WINDOW oWnd
RETURN NIL

#pragma BEGINDUMP

#include <windows.h>
#include <winioctl.h>
#include <stdio.h>
#include <shlobj.h>
#include "hbapi.h"
#include "hbapiitm.h"
#include "hbapifs.h"
#include "hbvm.h"
#include "hbstack.h"

HB_FUNC( SHOWSCROLLBAR )

{
        ShowScrollBar( (HWND)hb_parnl( 1 ), SB_VERT, hb_parl( 2 ) ) ;
}

#pragma ENDDUMP
Massimo]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Changing the visibility of the scroll bar :: Reply by Antonio Linares]]> 2025-02-06T00:39:59-07:00 2025-02-06T00:39:59-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45374&p=277460#p277460
Just a comment, for 64 bits we must use:

ShowScrollBar( (HWND)hb_parnll( 1 ), SB_VERT, hb_parl( 2 ) ) ;]]>

Just a comment, for 64 bits we must use:

ShowScrollBar( (HWND)hb_parnll( 1 ), SB_VERT, hb_parl( 2 ) ) ;]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Changing the visibility of the scroll bar :: Reply by Natter]]> 2025-02-06T01:10:29-07:00 2025-02-06T01:10:29-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45374&p=277461#p277461 <![CDATA[FiveWin for Harbour/xHarbour :: WS_BORDER 8388608 :: Author jair]]> 2025-02-04T12:54:28-07:00 2025-02-04T12:54:28-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45381&p=277422#p277422 Tengo un problema con el borde en un get que utiliza un componente llamado tvget y necesito cambiar el grosor del borde a uno muy fino.]]> Tengo un problema con el borde en un get que utiliza un componente llamado tvget y necesito cambiar el grosor del borde a uno muy fino.]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: WS_BORDER 8388608 :: Reply by karinha]]> 2025-02-05T04:27:18-07:00 2025-02-05T04:27:18-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45381&p=277441#p277441

Code: Select all | Expand

   vwirts@ig.com.br
Regards, saludos.]]>

Code: Select all | Expand

   vwirts@ig.com.br
Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: WS_BORDER 8388608 :: Reply by jair]]> 2025-02-05T16:10:58-07:00 2025-02-05T16:10:58-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45381&p=277458#p277458 <![CDATA[FiveWin for Harbour/xHarbour :: Re: WS_BORDER 8388608 :: Reply by karinha]]> 2025-02-06T03:22:28-07:00 2025-02-06T03:22:28-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45381&p=277462#p277462
https://www.facebook.com/vagner.wirts?c ... g2NQ%3D%3D

Regards, saludos.]]>

https://www.facebook.com/vagner.wirts?c ... g2NQ%3D%3D

Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: WS_BORDER 8388608 :: Reply by karinha]]> 2025-02-06T03:43:36-07:00 2025-02-06T03:43:36-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45381&p=277464#p277464

Code: Select all | Expand

mailto:  vwirts@terra.com.br
Tks Gilmer.

Regards, saludos.]]>

Code: Select all | Expand

mailto:  vwirts@terra.com.br
Tks Gilmer.

Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Request Xbrowse Feature :: Reply by Silvio.Falconi]]> 2025-02-06T04:10:39-07:00 2025-02-06T04:10:39-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45333&p=277465#p277465 <![CDATA[FiveWin for Harbour/xHarbour :: Consulta sobre busquedas en Mariadb por mas de un campo :: Author jose_murugosa]]> 2025-01-31T08:01:04-07:00 2025-01-31T08:01:04-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45365&p=277341#p277341 Leí en algún topic de hace mas de un año que se planeaba agregar esta posibilidad...
Gracias desde ya por vuestra atención.]]>
Leí en algún topic de hace mas de un año que se planeaba agregar esta posibilidad...
Gracias desde ya por vuestra atención.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Consulta sobre busquedas en Mariadb por mas de un campo :: Reply by jose_murugosa]]> 2025-02-03T09:00:47-07:00 2025-02-03T09:00:47-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45365&p=277392#p277392 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Consulta sobre busquedas en Mariadb por mas de un campo :: Reply by vilian]]> 2025-02-03T11:00:29-07:00 2025-02-03T11:00:29-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45365&p=277398#p277398 you can try by this way:

Code: Select all | Expand

oRs := oBD:Query("SELECT field1,field2,field3,Concat(field1,field2) AS chave FROM tablecust ORDER BY chave
oRs:Seek( vGet1+vGet2 )
]]>
you can try by this way:

Code: Select all | Expand

oRs := oBD:Query("SELECT field1,field2,field3,Concat(field1,field2) AS chave FROM tablecust ORDER BY chave
oRs:Seek( vGet1+vGet2 )
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Consulta sobre busquedas en Mariadb por mas de un campo :: Reply by jose_murugosa]]> 2025-02-06T10:21:57-07:00 2025-02-06T10:21:57-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45365&p=277471#p277471 I will prove and inform you

Regards.]]>
I will prove and inform you

Regards.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: AEvalWhen problems RESOLVED :: Author Silvio.Falconi]]> 2025-02-07T06:36:43-07:00 2025-02-07T06:56:24-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45389&p=277485#p277485
Image

at init the btnbmp must be as you see it on picture
I not wish disabled because then I see a gray button ( bad to see)

I wish activate the btnbmp when the valid when Of the get is valid
each button have a baction


the problem is when I insert a valid mail the btnbmp is not activated ,it is disable

this is the test to try

Code: Select all | Expand


#include "FiveWin.ch"
#include "Constant.ch"

 #define DLG_nColorDlg     RGB(245,245,235)
 #define DLG_nColortitle1  RGB(219,230,244)
 #define DLG_nColortitle2  RGB(207,221,239)
 #define DLG_nColorBar1    RGB(250,250,245)
 #define DLG_nColorBar2    RGB(245,245,235)
 #define DLG_nColorBtn1    RGB(245,245,235)
 #define DLG_nColorBtn2    RGB(250,250,245)
 #define DLG_nColorBtnB    RGB(195,195,185)


Function test()
 local oDlg
 local aGet:=array(2)
  local oSay:=array(2)
 local oBtnSel:= array(2)
 local cCodEmail:=space(30)
 local cCodEmailPec:=space(30)
 local cMailName:=""

 local nRow:=10,nCol:=10
 local nInterlinea:= 30
 local nSizeHGet:= 24

   local nBottom:= 20
   local nRight := 100
   local nHt    := nBottom * DLG_CHARPIX_H
   local nWd    := Max( nRight * DLG_CHARPIX_W, 180 )
   local oCursorBtn :=TCursor():New(,'HAND')

   local  oFont := TFont():New("Tahoma", 0, 18, , )
   local  oBold := TFont():New("Tahoma", 0, 16, , .t.)


DEFINE DIALOG oDlg SIZE nWd, nHt PIXEL TRUEPIXEL ;
       FONT oFont  TiTle "Account Invio" COLOR CLR_BLACK, DLG_nColorDlg  ;
       STYLE nOR( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, ;
                  WS_MINIMIZEBOX)

    @ nRow, 320 SAY oSay[1] PROMPT  "email" SIZE 100,25  PIXEL OF oDlg TRANSPARENT  FONT oFont
    @ nRow, 420 GET aGet[1] VAR cCodEmail SIZE 160,nSizeHGet PIXEL OF oDlg;
    ON CHANGE ( oDlg:AEvalWhen(), oDlg:Update() )

   @  nRow, oDlg:nWidth-148  BTNBMP oBtnSel[1] ;
      PROMPT "Account Invio" LEFT                 ;
      RESOURCE "SEL_PIE", "", "SEL_VUO", "" ;
      SIZE 130, nSizeHGet PIXEL FLAT NOROUND GDIP  OF oDlg ;
      WHEN ValidaEmail( cCodEmail )  UPDATE  ;
      ACTION  Account_Invio_Email()

                        /*  ACTION (Account_Invio_Email(), ;
                        IIF(  !empty(cMailName),;
                        oBtnSel[2]:SETFILE("SEL_PIE"),;
                        oBtnSel[2]:SETFILE("SEL_VUO") ) ) ; */

    nRow+=nInterlinea
   @ nRow, 320 SAY oSay[2] PROMPT  "email PEC" SIZE 100,25  PIXEL OF oDlg TRANSPARENT  FONT oFont
   @ nRow, 420 GET aGet[2] VAR cCodEmailPec SIZE 160,nSizeHGet PIXEL OF oDlg;
                     ON CHANGE ( oDlg:AEvalWhen(), oDlg:Update() )



   @  nRow, oDlg:nWidth-148  BTNBMP oBtnSel[2] ;
      PROMPT "Account Invio" LEFT                 ;
      RESOURCE "SEL_PIE", "", "SEL_VUO", "" ;
      SIZE 130, nSizeHGet PIXEL FLAT NOROUND GDIP  OF oDlg ;
      WHEN ValidaEmail( cCodEmailPec )  UPDATE  ;
      ACTION Account_Invio_Email()




            /*  ACTION (Account_Invio_Email(), ;
                        IIF(  !empty(cMailName),;
                        oBtnSel[2]:SETFILE("SEL_PIE"),;
                        oBtnSel[2]:SETFILE("SEL_VUO") ) ) ; */





                For n= 1 to 2
             oBtnSel[n]:bClrGrad := { | lPressed | If( ! lPressed,;
                 { { 1, DLG_nColorBar1, DLG_nColorBar1} },;
                 { { 1, DLG_nColorBar2, DLG_nColorBar2} } ) }
             oBtnSel[n]:nClrBorder := DLG_nColorBtnB
             oBtnSel[n]:oCursor:=   oCursorBtn
             oBtnSel[n]:nClrFocusRect := DLG_nColorBar2
             oBtnSel[n]:nDeepFocusRect := 0
             next

             ACTIVATE DIALOG oDlg CENTERED


RETURN NIL

function validaEmail(cEmail) //Nageswarao
   static preCompiled
   DEFAULT preCompiled := hb_regexComp("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$")
      return !Empty( hb_regex( preCompiled, alltrim( cEmail ) ) )

function  Account_Invio_Email ()
            Msginfo("Email")
   return nil
I make now a test
? validaEmail("silvio.falconi@gmail.com")
return .f. so the function of Rao not run ok ?]]>

Image

at init the btnbmp must be as you see it on picture
I not wish disabled because then I see a gray button ( bad to see)

I wish activate the btnbmp when the valid when Of the get is valid
each button have a baction


the problem is when I insert a valid mail the btnbmp is not activated ,it is disable

this is the test to try

Code: Select all | Expand


#include "FiveWin.ch"
#include "Constant.ch"

 #define DLG_nColorDlg     RGB(245,245,235)
 #define DLG_nColortitle1  RGB(219,230,244)
 #define DLG_nColortitle2  RGB(207,221,239)
 #define DLG_nColorBar1    RGB(250,250,245)
 #define DLG_nColorBar2    RGB(245,245,235)
 #define DLG_nColorBtn1    RGB(245,245,235)
 #define DLG_nColorBtn2    RGB(250,250,245)
 #define DLG_nColorBtnB    RGB(195,195,185)


Function test()
 local oDlg
 local aGet:=array(2)
  local oSay:=array(2)
 local oBtnSel:= array(2)
 local cCodEmail:=space(30)
 local cCodEmailPec:=space(30)
 local cMailName:=""

 local nRow:=10,nCol:=10
 local nInterlinea:= 30
 local nSizeHGet:= 24

   local nBottom:= 20
   local nRight := 100
   local nHt    := nBottom * DLG_CHARPIX_H
   local nWd    := Max( nRight * DLG_CHARPIX_W, 180 )
   local oCursorBtn :=TCursor():New(,'HAND')

   local  oFont := TFont():New("Tahoma", 0, 18, , )
   local  oBold := TFont():New("Tahoma", 0, 16, , .t.)


DEFINE DIALOG oDlg SIZE nWd, nHt PIXEL TRUEPIXEL ;
       FONT oFont  TiTle "Account Invio" COLOR CLR_BLACK, DLG_nColorDlg  ;
       STYLE nOR( DS_MODALFRAME, WS_POPUP, WS_CAPTION, WS_SYSMENU, ;
                  WS_MINIMIZEBOX)

    @ nRow, 320 SAY oSay[1] PROMPT  "email" SIZE 100,25  PIXEL OF oDlg TRANSPARENT  FONT oFont
    @ nRow, 420 GET aGet[1] VAR cCodEmail SIZE 160,nSizeHGet PIXEL OF oDlg;
    ON CHANGE ( oDlg:AEvalWhen(), oDlg:Update() )

   @  nRow, oDlg:nWidth-148  BTNBMP oBtnSel[1] ;
      PROMPT "Account Invio" LEFT                 ;
      RESOURCE "SEL_PIE", "", "SEL_VUO", "" ;
      SIZE 130, nSizeHGet PIXEL FLAT NOROUND GDIP  OF oDlg ;
      WHEN ValidaEmail( cCodEmail )  UPDATE  ;
      ACTION  Account_Invio_Email()

                        /*  ACTION (Account_Invio_Email(), ;
                        IIF(  !empty(cMailName),;
                        oBtnSel[2]:SETFILE("SEL_PIE"),;
                        oBtnSel[2]:SETFILE("SEL_VUO") ) ) ; */

    nRow+=nInterlinea
   @ nRow, 320 SAY oSay[2] PROMPT  "email PEC" SIZE 100,25  PIXEL OF oDlg TRANSPARENT  FONT oFont
   @ nRow, 420 GET aGet[2] VAR cCodEmailPec SIZE 160,nSizeHGet PIXEL OF oDlg;
                     ON CHANGE ( oDlg:AEvalWhen(), oDlg:Update() )



   @  nRow, oDlg:nWidth-148  BTNBMP oBtnSel[2] ;
      PROMPT "Account Invio" LEFT                 ;
      RESOURCE "SEL_PIE", "", "SEL_VUO", "" ;
      SIZE 130, nSizeHGet PIXEL FLAT NOROUND GDIP  OF oDlg ;
      WHEN ValidaEmail( cCodEmailPec )  UPDATE  ;
      ACTION Account_Invio_Email()




            /*  ACTION (Account_Invio_Email(), ;
                        IIF(  !empty(cMailName),;
                        oBtnSel[2]:SETFILE("SEL_PIE"),;
                        oBtnSel[2]:SETFILE("SEL_VUO") ) ) ; */





                For n= 1 to 2
             oBtnSel[n]:bClrGrad := { | lPressed | If( ! lPressed,;
                 { { 1, DLG_nColorBar1, DLG_nColorBar1} },;
                 { { 1, DLG_nColorBar2, DLG_nColorBar2} } ) }
             oBtnSel[n]:nClrBorder := DLG_nColorBtnB
             oBtnSel[n]:oCursor:=   oCursorBtn
             oBtnSel[n]:nClrFocusRect := DLG_nColorBar2
             oBtnSel[n]:nDeepFocusRect := 0
             next

             ACTIVATE DIALOG oDlg CENTERED


RETURN NIL

function validaEmail(cEmail) //Nageswarao
   static preCompiled
   DEFAULT preCompiled := hb_regexComp("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$")
      return !Empty( hb_regex( preCompiled, alltrim( cEmail ) ) )

function  Account_Invio_Email ()
            Msginfo("Email")
   return nil
I make now a test
? validaEmail("silvio.falconi@gmail.com")
return .f. so the function of Rao not run ok ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: AEvalWhen problems resolved :: Reply by Silvio.Falconi]]> 2025-02-07T06:55:38-07:00 2025-02-07T06:55:38-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45389&p=277486#p277486 it need hbpcre.lib]]> it need hbpcre.lib]]> <![CDATA[FiveWin for Harbour/xHarbour :: ChatGpt+Xbrowse+Set Filter :: Author Marc Venken]]> 2025-02-08T07:48:43-07:00 2025-02-08T07:48:43-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45392&p=277510#p277510
It confirmed my idea, but is it true ... ??

I use Xbrowse and the aBarget a Lot, and therefore my question :

The best way to filter data :

Folowing many discussies in the forum, i know that Mr. Rao is in favor for a optimised set filter to ....
I think that with my code (see below) I do just that and yes, It is quite fast.

But I have still a unansered question :

Indexes build normaly optimised and as a sample here a tag on BRANDID and also FABRIKAN (no index on NAAM)

Folowing typical filter :

"PRO" $ UPPER( BRANDID ) .AND. "RANGER" $ UPPER( NAAM ) .AND. "ABOUT" $ UPPER( FABRIKAN )

1. A Filter is working from left to right, processing : BrandID, Naam, Fabrikan

Since there is a TAG on BRANDID, the filter is FAST since it has the 1 tag, then keeping the resultdata and process them with the Naam FILTER as a Loop, since there is NO tag for the 2de part of the filter etc ...

If I change the incomming filter string in a order that first ALL indexed fields are beeing processed and then the NOT having a TAG fields
is this always better ?

For the argument, let say that the field BRANDID has no tag, will the current filter be slow because he has not found a TAG on brandid and need to process ALL data from top to bottem.

2. This is correct thinking or not ?

ChatGPT also thinks that arranging the filter with field that have tag as first filters are faster.

ChatGpt second option :

rearrange the filter string also that field with a tag are in front of the Filterstring
then process like this :

1 First field : ORDSCOPE the selection and put the result in a Array (1 filter is done)
2 field : Ordscope (the Array) and generate a newArray (2 filters are done)
3 field : Process the NewArray itself inside a loop excluding the data not needed (because of no index)

Give the result data back to xBrowse

Before I try to code one of these options, I would love to hear the ideas of this from Forum and FWTeam.

Thank







Code: Select all | Expand

FUNCTION Marc_SETFILTER( oBrw ) 

   LOCAL cFilter := ""
   LOCAL n, oCol, uVal, cType, cVal1, cVal2, nGevonden
   LOCAL nZoekKnop, cExprt
   LOCAL cAlias:= alias()
   FOR n := 1 TO Len( oBrw:aCols )
      oCol  := oBrw:aCols[ n ]
      IF ! Empty( uVal := oCol:uBarGetVal )
         IF !Empty( cFilter )
            cFilter  += " .AND. "
         ENDIF
         cType    := ValType( uVal )
         if cType = "C"
           nGevonden = at("++",uVal)  //  I do this for multiple search in 1 go
         endif
         if cType = "C"
           nZoekKnop = at("²",uVal)  //  To force a extra key to activated the search in browse
         endif

         DO CASE
          CASE cType == 'C' .and. nZoekKnop > 0  
            uVal     := Upper( AllTrim( uVal ) )
            cVal1 = substr(uVal,1,nZoekknop-2)
            cFilter += '"' + cVal1 + '" $ UPPER( ' + oCol:CExpr + " )"
          CASE cType == 'C' .and. nGevonden > 0
            uVal     := Upper( AllTrim( uVal ) )
            cVal1 = substr(uVal,1,nGevonden-1)
            cVal2 = substr(uVal,nGevonden+2)

            cFilter += '"' + cVal1 + '" $ UPPER( ' + oCol:CExpr + " )"
            cFilter += " .AND. "
            cFilter += '"' + cVal2 + '" $ UPPER( ' + oCol:CExpr + " )"
         CASE cType == 'C'
            uVal     := Upper( AllTrim( uVal ) )
            cFilter += '"' + uVal + '" $ UPPER( ' + oCol:CExpr + " )"
         CASE cType == 'D'
            cFilter  += oCol:cExpr + " = " + ( uVal )
         OTHERWISE
            cFilter  += oCol:cExpr + " == " + cValToChar( uVal )
         ENDCASE
      ENDIF
   NEXT
   IF Empty( cFilter )
      IF ! Empty( dbFilter() )
         dbClearFilter()
         oBrw:Refresh()
      ENDIF
   ELSE

      IF !( dbFilter() == cFilter )
         oClp:SetText(cFilter)  // For personel creating of Indexes to use more times
         if !empty(cAlias)
           SET FILTER TO &cFilter
           oClp:SetText(cFilter)
           GO TOP
         else
           msginfo("Error.... Geen Alias beschikbaar")
         endif

         oBrw:Refresh()
      ENDIF

   ENDIF
   oBrw:maketotals() 
   oBrw:SetFocus()
RETURN NIL

]]>

It confirmed my idea, but is it true ... ??

I use Xbrowse and the aBarget a Lot, and therefore my question :

The best way to filter data :

Folowing many discussies in the forum, i know that Mr. Rao is in favor for a optimised set filter to ....
I think that with my code (see below) I do just that and yes, It is quite fast.

But I have still a unansered question :

Indexes build normaly optimised and as a sample here a tag on BRANDID and also FABRIKAN (no index on NAAM)

Folowing typical filter :

"PRO" $ UPPER( BRANDID ) .AND. "RANGER" $ UPPER( NAAM ) .AND. "ABOUT" $ UPPER( FABRIKAN )

1. A Filter is working from left to right, processing : BrandID, Naam, Fabrikan

Since there is a TAG on BRANDID, the filter is FAST since it has the 1 tag, then keeping the resultdata and process them with the Naam FILTER as a Loop, since there is NO tag for the 2de part of the filter etc ...

If I change the incomming filter string in a order that first ALL indexed fields are beeing processed and then the NOT having a TAG fields
is this always better ?

For the argument, let say that the field BRANDID has no tag, will the current filter be slow because he has not found a TAG on brandid and need to process ALL data from top to bottem.

2. This is correct thinking or not ?

ChatGPT also thinks that arranging the filter with field that have tag as first filters are faster.

ChatGpt second option :

rearrange the filter string also that field with a tag are in front of the Filterstring
then process like this :

1 First field : ORDSCOPE the selection and put the result in a Array (1 filter is done)
2 field : Ordscope (the Array) and generate a newArray (2 filters are done)
3 field : Process the NewArray itself inside a loop excluding the data not needed (because of no index)

Give the result data back to xBrowse

Before I try to code one of these options, I would love to hear the ideas of this from Forum and FWTeam.

Thank







Code: Select all | Expand

FUNCTION Marc_SETFILTER( oBrw ) 

   LOCAL cFilter := ""
   LOCAL n, oCol, uVal, cType, cVal1, cVal2, nGevonden
   LOCAL nZoekKnop, cExprt
   LOCAL cAlias:= alias()
   FOR n := 1 TO Len( oBrw:aCols )
      oCol  := oBrw:aCols[ n ]
      IF ! Empty( uVal := oCol:uBarGetVal )
         IF !Empty( cFilter )
            cFilter  += " .AND. "
         ENDIF
         cType    := ValType( uVal )
         if cType = "C"
           nGevonden = at("++",uVal)  //  I do this for multiple search in 1 go
         endif
         if cType = "C"
           nZoekKnop = at("²",uVal)  //  To force a extra key to activated the search in browse
         endif

         DO CASE
          CASE cType == 'C' .and. nZoekKnop > 0  
            uVal     := Upper( AllTrim( uVal ) )
            cVal1 = substr(uVal,1,nZoekknop-2)
            cFilter += '"' + cVal1 + '" $ UPPER( ' + oCol:CExpr + " )"
          CASE cType == 'C' .and. nGevonden > 0
            uVal     := Upper( AllTrim( uVal ) )
            cVal1 = substr(uVal,1,nGevonden-1)
            cVal2 = substr(uVal,nGevonden+2)

            cFilter += '"' + cVal1 + '" $ UPPER( ' + oCol:CExpr + " )"
            cFilter += " .AND. "
            cFilter += '"' + cVal2 + '" $ UPPER( ' + oCol:CExpr + " )"
         CASE cType == 'C'
            uVal     := Upper( AllTrim( uVal ) )
            cFilter += '"' + uVal + '" $ UPPER( ' + oCol:CExpr + " )"
         CASE cType == 'D'
            cFilter  += oCol:cExpr + " = " + ( uVal )
         OTHERWISE
            cFilter  += oCol:cExpr + " == " + cValToChar( uVal )
         ENDCASE
      ENDIF
   NEXT
   IF Empty( cFilter )
      IF ! Empty( dbFilter() )
         dbClearFilter()
         oBrw:Refresh()
      ENDIF
   ELSE

      IF !( dbFilter() == cFilter )
         oClp:SetText(cFilter)  // For personel creating of Indexes to use more times
         if !empty(cAlias)
           SET FILTER TO &cFilter
           oClp:SetText(cFilter)
           GO TOP
         else
           msginfo("Error.... Geen Alias beschikbaar")
         endif

         oBrw:Refresh()
      ENDIF

   ENDIF
   oBrw:maketotals() 
   oBrw:SetFocus()
RETURN NIL

]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: ChatGpt+Xbrowse+Set Filter :: Reply by Antonio Linares]]> 2025-02-08T09:54:20-07:00 2025-02-08T09:54:20-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45392&p=277514#p277514
User defined temporary indexes in memory with just the required keys!

viewtopic.php?p=277214#p277214]]>

User defined temporary indexes in memory with just the required keys!

viewtopic.php?p=277214#p277214]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: ChatGpt+Xbrowse+Set Filter :: Reply by Otto]]> 2025-02-08T10:45:17-07:00 2025-02-08T10:45:17-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45392&p=277519#p277519 What does "fast" mean to you?
Best regards,
Otto]]>
What does "fast" mean to you?
Best regards,
Otto]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: ChatGpt+Xbrowse+Set Filter :: Reply by Marc Venken]]> 2025-02-08T12:06:26-07:00 2025-02-08T12:06:26-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45392&p=277525#p277525
178 fields and 2300 records .

Filtering is mostly between 1-3 secs, so no problem here. (FAST = ok)

I'm not looking for a other solution, since it works great for my purpose.

I just want to know if the set filter to .... works indeed like I descripte in the post and is pulling the index fields in front of the set filter to
command would speed up. I thinks I just need to try it )))))

I see it more as a educational post...]]>

178 fields and 2300 records .

Filtering is mostly between 1-3 secs, so no problem here. (FAST = ok)

I'm not looking for a other solution, since it works great for my purpose.

I just want to know if the set filter to .... works indeed like I descripte in the post and is pulling the index fields in front of the set filter to
command would speed up. I thinks I just need to try it )))))

I see it more as a educational post...]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Graph/Chart Scrollable :: Reply by richard-service]]> 2025-02-09T12:32:21-07:00 2025-02-09T12:32:21-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=42691&p=277556#p277556
Antonio Linares wrote: Thu Aug 08, 2024 12:10 pm Dear Richard,

We were considering to use a scrollpanel and use it to scroll the graph to each side

Would that be a good solution ?
any sample file for try?]]>
Antonio Linares wrote: Thu Aug 08, 2024 12:10 pm Dear Richard,

We were considering to use a scrollpanel and use it to scroll the graph to each side

Would that be a good solution ?
any sample file for try?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Create shortcut for accessing URL :: Author don lowenstein]]> 2025-02-08T11:25:52-07:00 2025-02-08T11:25:52-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45395&p=277522#p277522 Has anyone had success doing this?

Thanks in advance for any assistance.]]>
Has anyone had success doing this?

Thanks in advance for any assistance.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Create shortcut for accessing URL :: Reply by Antonio Linares]]> 2025-02-08T13:35:46-07:00 2025-02-08T13:35:46-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45395&p=277528#p277528
Not sure if you mean this:

Code: Select all | Expand

PROCEDURE CreateURLShortcut(cFileName, cURL)
   LOCAL hFile

   // Ensure the filename ends with .url
   IF AT(".url", LOWER(cFileName)) == 0
      cFileName += ".url"
   ENDIF

   // Create and write to the file
   hFile := FCreate(cFileName)
   IF hFile != -1
      FWrite(hFile, "[InternetShortcut]" + Chr(13) + Chr(10))
      FWrite(hFile, "URL=" + cURL + Chr(13) + Chr(10))
      FClose(hFile)
   ELSE
      ? "Error creating file:", cFileName
   ENDIF
RETURN

// Usage:
CreateURLShortcut("MyWebShortcut.url", "https://www.example.com")
or maybe this:

Code: Select all | Expand

PROCEDURE CreateLNKShortcut(cLnkPath, cURL)
   LOCAL oShell, oShortcut

   // Initialize COM (if not already done)
   IF !Empty(GetActiveObject("WScript.Shell"))
      oShell := CreateObject("WScript.Shell")
   ELSE
      ? "COM initialization failed."
      RETURN
   ENDIF

   // Create the shortcut
   oShortcut := oShell:CreateShortcut(cLnkPath)
   oShortcut:TargetPath := "rundll32.exe"
   oShortcut:Arguments := "url.dll,FileProtocolHandler " + cURL
   oShortcut:Save()
RETURN

// Usage:
CreateLNKShortcut("MyWebShortcut.lnk", "https://www.example.com")
]]>

Not sure if you mean this:

Code: Select all | Expand

PROCEDURE CreateURLShortcut(cFileName, cURL)
   LOCAL hFile

   // Ensure the filename ends with .url
   IF AT(".url", LOWER(cFileName)) == 0
      cFileName += ".url"
   ENDIF

   // Create and write to the file
   hFile := FCreate(cFileName)
   IF hFile != -1
      FWrite(hFile, "[InternetShortcut]" + Chr(13) + Chr(10))
      FWrite(hFile, "URL=" + cURL + Chr(13) + Chr(10))
      FClose(hFile)
   ELSE
      ? "Error creating file:", cFileName
   ENDIF
RETURN

// Usage:
CreateURLShortcut("MyWebShortcut.url", "https://www.example.com")
or maybe this:

Code: Select all | Expand

PROCEDURE CreateLNKShortcut(cLnkPath, cURL)
   LOCAL oShell, oShortcut

   // Initialize COM (if not already done)
   IF !Empty(GetActiveObject("WScript.Shell"))
      oShell := CreateObject("WScript.Shell")
   ELSE
      ? "COM initialization failed."
      RETURN
   ENDIF

   // Create the shortcut
   oShortcut := oShell:CreateShortcut(cLnkPath)
   oShortcut:TargetPath := "rundll32.exe"
   oShortcut:Arguments := "url.dll,FileProtocolHandler " + cURL
   oShortcut:Save()
RETURN

// Usage:
CreateLNKShortcut("MyWebShortcut.lnk", "https://www.example.com")
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Create shortcut for accessing URL :: Reply by leandro]]> 2025-02-08T14:27:07-07:00 2025-02-08T14:27:07-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45395&p=277534#p277534
viewtopic.php?p=274664#p274664]]>

viewtopic.php?p=274664#p274664]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Create shortcut for accessing URL :: Reply by don lowenstein]]> 2025-02-08T16:45:27-07:00 2025-02-08T16:45:27-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45395&p=277540#p277540 I'll test them on Monday.

Antonio, it's good to hear from you. I hope all is well with you and yours.

Don]]>
I'll test them on Monday.

Antonio, it's good to hear from you. I hope all is well with you and yours.

Don]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Create shortcut for accessing URL :: Reply by don lowenstein]]> 2025-02-08T16:50:27-07:00 2025-02-08T16:50:27-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45395&p=277541#p277541
That's a testament to how good the Fivewin libraries and community are.
I feel privileged to be part of it.

Sincerely, Don]]>

That's a testament to how good the Fivewin libraries and community are.
I feel privileged to be part of it.

Sincerely, Don]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Create shortcut for accessing URL :: Reply by don lowenstein]]> 2025-02-10T07:18:24-07:00 2025-02-10T07:18:24-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45395&p=277566#p277566
This worked perfectly - Thanks.]]>

This worked perfectly - Thanks.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Quickbooks Online :: Author Randal]]> 2025-02-11T04:33:44-07:00 2025-02-11T04:33:44-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45402&p=277581#p277581
From what I understand, Intuit is going to stop offering the desktop version.

Randal Ferguson]]>

From what I understand, Intuit is going to stop offering the desktop version.

Randal Ferguson]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Quickbooks Online :: Reply by Antonio Linares]]> 2025-02-11T15:19:49-07:00 2025-02-11T15:19:49-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45402&p=277602#p277602
chatgpt:
Yes, many developers have integrated with QuickBooks Online (QBO). For integration, the most commonly used SDK is **Intuit’s QuickBooks Online SDK**. It provides a seamless way to interact with QBO’s API. Here’s a breakdown:

### Common SDKs for QuickBooks Online Integration:
1. **QuickBooks Online SDKs:**
- **.NET SDK**: Great for C# developers.
- **Java SDK**: Perfect for Java developers.
- **PHP SDK**: Suitable for PHP-based applications.

2. **REST API Directly**: If you don’t want to rely on the SDKs or are using a language like Python, JavaScript, or Harbour (your stack), you can interact directly with the QuickBooks Online REST API. This gives you more control but requires manual handling of OAuth2 authentication and API calls.

### Key Points for Integration:
- **Authentication**: QuickBooks Online uses **OAuth 2.0** for authentication. You’ll need to register your app in Intuit’s Developer Portal to get API keys and set up the redirect URIs.
- **API Documentation**: The [QuickBooks Online API documentation](https://developer.intuit.com/app/develo ... et-started) provides detailed guidance on endpoints for customer management, invoices, payments, etc.
- **Sandbox Environment**: Intuit offers a sandbox for testing integrations before going live.

### Regarding QuickBooks Desktop:
You’re correct that Intuit is phasing out the desktop versions of QuickBooks for certain markets, pushing users towards QuickBooks Online. However, if you're working with legacy desktop systems, they rely on the **QuickBooks Desktop SDK** or **QBXML** (for SOAP-based integrations). But for long-term solutions, shifting to QuickBooks Online integration makes the most sense.
]]>

chatgpt:
Yes, many developers have integrated with QuickBooks Online (QBO). For integration, the most commonly used SDK is **Intuit’s QuickBooks Online SDK**. It provides a seamless way to interact with QBO’s API. Here’s a breakdown:

### Common SDKs for QuickBooks Online Integration:
1. **QuickBooks Online SDKs:**
- **.NET SDK**: Great for C# developers.
- **Java SDK**: Perfect for Java developers.
- **PHP SDK**: Suitable for PHP-based applications.

2. **REST API Directly**: If you don’t want to rely on the SDKs or are using a language like Python, JavaScript, or Harbour (your stack), you can interact directly with the QuickBooks Online REST API. This gives you more control but requires manual handling of OAuth2 authentication and API calls.

### Key Points for Integration:
- **Authentication**: QuickBooks Online uses **OAuth 2.0** for authentication. You’ll need to register your app in Intuit’s Developer Portal to get API keys and set up the redirect URIs.
- **API Documentation**: The [QuickBooks Online API documentation](https://developer.intuit.com/app/develo ... et-started) provides detailed guidance on endpoints for customer management, invoices, payments, etc.
- **Sandbox Environment**: Intuit offers a sandbox for testing integrations before going live.

### Regarding QuickBooks Desktop:
You’re correct that Intuit is phasing out the desktop versions of QuickBooks for certain markets, pushing users towards QuickBooks Online. However, if you're working with legacy desktop systems, they rely on the **QuickBooks Desktop SDK** or **QBXML** (for SOAP-based integrations). But for long-term solutions, shifting to QuickBooks Online integration makes the most sense.
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: error in time format Resolved :: Author Silvio.Falconi]]> 2025-02-12T02:12:14-07:00 2025-02-12T02:20:27-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45405&p=277606#p277606
I don't understand why the input format (attempt) is passed incorrectly

in archive I have
Tentrata 17.01.2025 15.59.26
tuscita 17.01.2025 16.00.00

so i must have only 34 secs

I tried to insert a debug with logfile function and I have saw

this is the test

if you need the archives I can send you the files dbf


Code: Select all | Expand

 
#include "FiveWin.ch"



request dbfcdx
request dbffpt

request hb_lang_it
request hb_codepage_itwin



 function Main()
    local nRow:= 10,nCol:= 2
    local nInterlinea:= 40
    local oWnd

       RddSetDefault( "DBFCDX" )
       HB_LANGSELECT( "IT" )
       HB_SETCODEPAGE( "ITWIN" )
       SetHandleCount( 100 )
       FWNumFormat( "E", .t. )

       SET DATE FORMAT "dd-mm-yyyy"
       SET DELETED     ON
       SET CENTURY     ON
       SET EPOCH TO    year( date() ) - 20
       SET MULTIPLE    OFF
       SetGetColorFocus(nRGB( 203, 225, 252 ))
       SetMGetColorFocus(nRGB( 203, 225, 252 ))

         test()

         return nil


Function test()
local cUser

cUser:="silvio"

? Calcola_TempoAccesso(cUser)

return nil


Function Calcola_TempoAccesso(cUser)
   Local oUtenti, oTabAct, cString := ""
   Local cStatus, dAccessDate, nTotalTime := 0
   Local tEntrata, tUscita
   Local nMinutes, nSeconds, nHours
   Local nArea := Select()

   tEntrata := ""
   tUscita  := ""
   nMinutes := 0
   nSeconds := 0
   nHours   := 0

   // Apri l'archivio oUtenti e controlla lo stato dell'utente
   oUtenti := TDatabase():Open( , "Utenti", "DBFCDX", .T. )
   oUtenti:SetOrder(1) // username
   oUtenti:GoTop()

   Do While !oUtenti:Eof()
      If AllTrim(oUtenti:UserName) == AllTrim(cUser)  
         cStatus := AllTrim(oUtenti:Status)
         dAccessDate := oUtenti:Fecha
         Exit
      EndIf
      oUtenti:Skip()
   EndDo

   // Se l'utente è ancora connesso, restituisci "Attualmente connesso"
   IF cStatus == "Ã"
      oUtenti:Close()
      Select (nArea)
      Return "Attualmente connesso"
   ELSE
      // Se l'utente non è connesso, calcola il tempo di accesso per quella data
      oTabAct := TDatabase():Open( , "tabact", "DBFCDX", .T. )
      oTabAct:SetOrder(2)
      oTabAct:GoTop()

      Do While !oTabAct:Eof()
         If AllTrim(oTabAct:Usuario) == AllTrim(cUser) .And. oTabAct:Fecha == dAccessDate
            If At("Entrata", AllTrim(oTabAct:Accion)) > 0
               tEntrata := AllTrim(oTabAct:Hora)  // Memorizza l'orario di entrata

               // Debug: Mostra l'orario di entrata appena letto
            *   ? "Orario di Entrata letto: ", tEntrata

               // Verifica il formato di tEntrata
               If Len(tEntrata) == 5
                  tEntrata := tEntrata + ":00"  // Aggiungi ":00" se non ci sono i secondi
               EndIf

               // Debug: Mostra l'orario di entrata dopo modifica
               * ? "Orario di Entrata dopo modifica: ", tEntrata
               logfile("silvio.txt", "Orario di Entrata dopo modifica: "+ tEntrata)

            ElseIf At("Uscita", AllTrim(oTabAct:Accion)) > 0
               tUscita := AllTrim(oTabAct:Hora)  // Memorizza l'orario di uscita
               // Debug: Mostra l'orario di uscita
              * ? "Orario di Uscita (tUscita): ", tUscita

               // Verifica il formato di tUscita
               If Len(tUscita) == 5
                  tUscita := tUscita + ":00"  // Aggiungi ":00" se non ci sono i secondi
               EndIf

               // Debug: Mostra l'orario di uscita dopo modifica

               logfile("silvio.txt", "Orario di Uscita dopo modifica: "+ tUscita)

               // Calcola la differenza in secondi
               nTotalTime += TimeDifferenceInSeconds(tEntrata, tUscita)
            EndIf
         EndIf
         oTabAct:Skip()
      EndDo

      If nTotalTime > 0
         // Converto la differenza in secondi nei formati giusti (ore, minuti, secondi)
         nHours   := Int(nTotalTime / 3600)            // Ore intere (3600 secondi in un'ora)
         nMinutes := Int((nTotalTime % 3600) / 60)    // Minuti rimanenti
         nSeconds := nTotalTime % 60                  // Secondi rimanenti

         If nHours > 0
            cString := Str(nHours, 6, 0) + " ore, " + Str(nMinutes, 2, 0) + " minuti e " + Str(nSeconds, 2, 0) + " secondi"
         ElseIf nMinutes > 0
            cString := Str(nMinutes, 6, 0) + " minuti e " + Str(nSeconds, 2, 0) + " secondi"
         Else
            cString := Str(nSeconds, 6, 0) + " secondi"
         EndIf
      Else
         cString := "Nessun dato di accesso trovato per la data " + dtoc(dAccessDate)
      EndIf

      oTabAct:Close()
   EndIf

   Select (nArea)
   oUtenti:Close()

   Return cString

   Function TimeDifferenceInSeconds(cStartTime, cEndTime)
   Local nStartHour, nStartMinute, nStartSecond
   Local nEndHour, nEndMinute, nEndSecond
   Local nStartSeconds, nEndSeconds
   Local nTimeDifference


    logfile("silvio.txt", "*Orario di Entrata : "+ cStartTime)
    logfile("silvio.txt", "*Orario di Uscita : "+ cEndTime)

   // Verifica se i parametri sono in formato stringa "hh:mm:ss"
   If Len(cStartTime) == 8 .And. Len(cEndTime) == 8
      // Estrarre ore, minuti e secondi
      nStartHour   := Val(SubStr(cStartTime, 1, 2)) // ore di inizio
      nStartMinute := Val(SubStr(cStartTime, 4, 2)) // minuti di inizio
      nStartSecond := Val(SubStr(cStartTime, 7, 2)) // secondi di inizio

      nEndHour   := Val(SubStr(cEndTime, 1, 2)) // ore di fine
      nEndMinute := Val(SubStr(cEndTime, 4, 2)) // minuti di fine
      nEndSecond := Val(SubStr(cEndTime, 7, 2)) // secondi di fine

      // Calcola i secondi totali dall'inizio della giornata
      nStartSeconds := (nStartHour * 3600) + (nStartMinute * 60) + nStartSecond
      nEndSeconds   := (nEndHour * 3600) + (nEndMinute * 60) + nEndSecond

      // Calcola la differenza in secondi
      nTimeDifference := nEndSeconds - nStartSeconds

      // Restituisci la differenza in secondi
      Return nTimeDifference
   Else
     * ? "Errore: Gli orari non sono nel formato corretto"
      Return 0
   EndIf

]]>

I don't understand why the input format (attempt) is passed incorrectly

in archive I have
Tentrata 17.01.2025 15.59.26
tuscita 17.01.2025 16.00.00

so i must have only 34 secs

I tried to insert a debug with logfile function and I have saw

this is the test

if you need the archives I can send you the files dbf


Code: Select all | Expand

 
#include "FiveWin.ch"



request dbfcdx
request dbffpt

request hb_lang_it
request hb_codepage_itwin



 function Main()
    local nRow:= 10,nCol:= 2
    local nInterlinea:= 40
    local oWnd

       RddSetDefault( "DBFCDX" )
       HB_LANGSELECT( "IT" )
       HB_SETCODEPAGE( "ITWIN" )
       SetHandleCount( 100 )
       FWNumFormat( "E", .t. )

       SET DATE FORMAT "dd-mm-yyyy"
       SET DELETED     ON
       SET CENTURY     ON
       SET EPOCH TO    year( date() ) - 20
       SET MULTIPLE    OFF
       SetGetColorFocus(nRGB( 203, 225, 252 ))
       SetMGetColorFocus(nRGB( 203, 225, 252 ))

         test()

         return nil


Function test()
local cUser

cUser:="silvio"

? Calcola_TempoAccesso(cUser)

return nil


Function Calcola_TempoAccesso(cUser)
   Local oUtenti, oTabAct, cString := ""
   Local cStatus, dAccessDate, nTotalTime := 0
   Local tEntrata, tUscita
   Local nMinutes, nSeconds, nHours
   Local nArea := Select()

   tEntrata := ""
   tUscita  := ""
   nMinutes := 0
   nSeconds := 0
   nHours   := 0

   // Apri l'archivio oUtenti e controlla lo stato dell'utente
   oUtenti := TDatabase():Open( , "Utenti", "DBFCDX", .T. )
   oUtenti:SetOrder(1) // username
   oUtenti:GoTop()

   Do While !oUtenti:Eof()
      If AllTrim(oUtenti:UserName) == AllTrim(cUser)  
         cStatus := AllTrim(oUtenti:Status)
         dAccessDate := oUtenti:Fecha
         Exit
      EndIf
      oUtenti:Skip()
   EndDo

   // Se l'utente è ancora connesso, restituisci "Attualmente connesso"
   IF cStatus == "Ã"
      oUtenti:Close()
      Select (nArea)
      Return "Attualmente connesso"
   ELSE
      // Se l'utente non è connesso, calcola il tempo di accesso per quella data
      oTabAct := TDatabase():Open( , "tabact", "DBFCDX", .T. )
      oTabAct:SetOrder(2)
      oTabAct:GoTop()

      Do While !oTabAct:Eof()
         If AllTrim(oTabAct:Usuario) == AllTrim(cUser) .And. oTabAct:Fecha == dAccessDate
            If At("Entrata", AllTrim(oTabAct:Accion)) > 0
               tEntrata := AllTrim(oTabAct:Hora)  // Memorizza l'orario di entrata

               // Debug: Mostra l'orario di entrata appena letto
            *   ? "Orario di Entrata letto: ", tEntrata

               // Verifica il formato di tEntrata
               If Len(tEntrata) == 5
                  tEntrata := tEntrata + ":00"  // Aggiungi ":00" se non ci sono i secondi
               EndIf

               // Debug: Mostra l'orario di entrata dopo modifica
               * ? "Orario di Entrata dopo modifica: ", tEntrata
               logfile("silvio.txt", "Orario di Entrata dopo modifica: "+ tEntrata)

            ElseIf At("Uscita", AllTrim(oTabAct:Accion)) > 0
               tUscita := AllTrim(oTabAct:Hora)  // Memorizza l'orario di uscita
               // Debug: Mostra l'orario di uscita
              * ? "Orario di Uscita (tUscita): ", tUscita

               // Verifica il formato di tUscita
               If Len(tUscita) == 5
                  tUscita := tUscita + ":00"  // Aggiungi ":00" se non ci sono i secondi
               EndIf

               // Debug: Mostra l'orario di uscita dopo modifica

               logfile("silvio.txt", "Orario di Uscita dopo modifica: "+ tUscita)

               // Calcola la differenza in secondi
               nTotalTime += TimeDifferenceInSeconds(tEntrata, tUscita)
            EndIf
         EndIf
         oTabAct:Skip()
      EndDo

      If nTotalTime > 0
         // Converto la differenza in secondi nei formati giusti (ore, minuti, secondi)
         nHours   := Int(nTotalTime / 3600)            // Ore intere (3600 secondi in un'ora)
         nMinutes := Int((nTotalTime % 3600) / 60)    // Minuti rimanenti
         nSeconds := nTotalTime % 60                  // Secondi rimanenti

         If nHours > 0
            cString := Str(nHours, 6, 0) + " ore, " + Str(nMinutes, 2, 0) + " minuti e " + Str(nSeconds, 2, 0) + " secondi"
         ElseIf nMinutes > 0
            cString := Str(nMinutes, 6, 0) + " minuti e " + Str(nSeconds, 2, 0) + " secondi"
         Else
            cString := Str(nSeconds, 6, 0) + " secondi"
         EndIf
      Else
         cString := "Nessun dato di accesso trovato per la data " + dtoc(dAccessDate)
      EndIf

      oTabAct:Close()
   EndIf

   Select (nArea)
   oUtenti:Close()

   Return cString

   Function TimeDifferenceInSeconds(cStartTime, cEndTime)
   Local nStartHour, nStartMinute, nStartSecond
   Local nEndHour, nEndMinute, nEndSecond
   Local nStartSeconds, nEndSeconds
   Local nTimeDifference


    logfile("silvio.txt", "*Orario di Entrata : "+ cStartTime)
    logfile("silvio.txt", "*Orario di Uscita : "+ cEndTime)

   // Verifica se i parametri sono in formato stringa "hh:mm:ss"
   If Len(cStartTime) == 8 .And. Len(cEndTime) == 8
      // Estrarre ore, minuti e secondi
      nStartHour   := Val(SubStr(cStartTime, 1, 2)) // ore di inizio
      nStartMinute := Val(SubStr(cStartTime, 4, 2)) // minuti di inizio
      nStartSecond := Val(SubStr(cStartTime, 7, 2)) // secondi di inizio

      nEndHour   := Val(SubStr(cEndTime, 1, 2)) // ore di fine
      nEndMinute := Val(SubStr(cEndTime, 4, 2)) // minuti di fine
      nEndSecond := Val(SubStr(cEndTime, 7, 2)) // secondi di fine

      // Calcola i secondi totali dall'inizio della giornata
      nStartSeconds := (nStartHour * 3600) + (nStartMinute * 60) + nStartSecond
      nEndSeconds   := (nEndHour * 3600) + (nEndMinute * 60) + nEndSecond

      // Calcola la differenza in secondi
      nTimeDifference := nEndSeconds - nStartSeconds

      // Restituisci la differenza in secondi
      Return nTimeDifference
   Else
     * ? "Errore: Gli orari non sono nel formato corretto"
      Return 0
   EndIf

]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: error in time format Resolved :: Reply by Silvio.Falconi]]> 2025-02-12T02:20:11-07:00 2025-02-12T02:20:11-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45405&p=277607#p277607
The problem was that the calculation of the difference between the time of entry and exit was done inside the loop, and therefore it was added multiple times in the case in which multiple "Entrance" and "Exit" records were present for the same user.

Moving the calculation of nTotalTime out of the Do While loop is definitely the correct solution, because you only need to calculate the difference between the entry and exit once for each login session]]>

The problem was that the calculation of the difference between the time of entry and exit was done inside the loop, and therefore it was added multiple times in the case in which multiple "Entrance" and "Exit" records were present for the same user.

Moving the calculation of nTotalTime out of the Do While loop is definitely the correct solution, because you only need to calculate the difference between the entry and exit once for each login session]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Using Ollama + Microsoft Phi4 AI from [x]Harbour+FWH :: Author Antonio Linares]]> 2025-02-12T02:29:29-07:00 2025-02-12T02:29:29-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45406&p=277608#p277608

Code: Select all | Expand

// from cmd run: ollama serve

#include "FiveWin.ch"

static oChat, oOutput
static nStartTime, nTokenCount

function Main()

   local oDlg, cOutput := "", oBtn, oFont
   local oPrompt, cPrompt := Space( 100 )
   
   oChat = TOLlama():New( "phi4" ) 
   FW_SetUnicode( .T. )
   
   DEFINE FONT oFont NAME "system-ui" SIZE 0, -16 BOLD

   DEFINE DIALOG oDlg TITLE "Ollama Phi4" SIZE 1200, 600

   @ 5.5, 0.7 GET oOutput VAR cOutput MULTILINE SIZE 590, 200 READONLY FONT oFont

   @ 18.7, 1 SAY "Prompt:" 
   @ 21.5, 4 GET oPrompt VAR cPrompt SIZE 510, 15 
   @ 15.5, 92 BUTTON oBtn PROMPT "Send" SIZE 40, 15 ACTION SendPrompt( cPrompt, oOutput, oBtn, oPrompt ) DEFAULT
   
   ACTIVATE DIALOG oDlg CENTERED

   oChat:End()
   oFont:End()

return nil

function SendPrompt( cPrompt, oOutput, oBtn, oPrompt )

   local cToken

   nStartTime = Seconds()  
   nTokenCount = 0  

   oBtn:Disable()
   oChat:SendStream( AllTrim( cPrompt ), { | cBuffer | ShowTokens( cBuffer ) } )
   ShowTokenStats()
   oBtn:Enable()
   oPrompt:SetFocus()
    
return nil    

function ShowTokens( cBuffer )

    local hResponse 
    
    hb_jsonDecode( cBuffer, @hResponse )

    oOutput:Append( hResponse[ "message" ][ "content" ] )
    nTokenCount++
    SysRefresh()

return nil    

function ShowTokenStats()

    local nElapsedTime := Seconds() - nStartTime
    local nTokensPerSecond := iif(nElapsedTime > 0, nTokenCount / nElapsedTime, 0)
 
    oOutput:Append( StrTran( "Tokens por segundo: " + Str( nTokensPerSecond, 10, 2 ), ".", "," ) )
    SysRefresh()
 
 return nil
]]>

Code: Select all | Expand

// from cmd run: ollama serve

#include "FiveWin.ch"

static oChat, oOutput
static nStartTime, nTokenCount

function Main()

   local oDlg, cOutput := "", oBtn, oFont
   local oPrompt, cPrompt := Space( 100 )
   
   oChat = TOLlama():New( "phi4" ) 
   FW_SetUnicode( .T. )
   
   DEFINE FONT oFont NAME "system-ui" SIZE 0, -16 BOLD

   DEFINE DIALOG oDlg TITLE "Ollama Phi4" SIZE 1200, 600

   @ 5.5, 0.7 GET oOutput VAR cOutput MULTILINE SIZE 590, 200 READONLY FONT oFont

   @ 18.7, 1 SAY "Prompt:" 
   @ 21.5, 4 GET oPrompt VAR cPrompt SIZE 510, 15 
   @ 15.5, 92 BUTTON oBtn PROMPT "Send" SIZE 40, 15 ACTION SendPrompt( cPrompt, oOutput, oBtn, oPrompt ) DEFAULT
   
   ACTIVATE DIALOG oDlg CENTERED

   oChat:End()
   oFont:End()

return nil

function SendPrompt( cPrompt, oOutput, oBtn, oPrompt )

   local cToken

   nStartTime = Seconds()  
   nTokenCount = 0  

   oBtn:Disable()
   oChat:SendStream( AllTrim( cPrompt ), { | cBuffer | ShowTokens( cBuffer ) } )
   ShowTokenStats()
   oBtn:Enable()
   oPrompt:SetFocus()
    
return nil    

function ShowTokens( cBuffer )

    local hResponse 
    
    hb_jsonDecode( cBuffer, @hResponse )

    oOutput:Append( hResponse[ "message" ][ "content" ] )
    nTokenCount++
    SysRefresh()

return nil    

function ShowTokenStats()

    local nElapsedTime := Seconds() - nStartTime
    local nTokensPerSecond := iif(nElapsedTime > 0, nTokenCount / nElapsedTime, 0)
 
    oOutput:Append( StrTran( "Tokens por segundo: " + Str( nTokensPerSecond, 10, 2 ), ".", "," ) )
    SysRefresh()
 
 return nil
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Using Ollama + Microsoft Phi4 AI from [x]Harbour+FWH :: Reply by Antonio Linares]]> 2025-02-12T02:50:12-07:00 2025-02-12T02:50:12-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45406&p=277609#p277609 Rankings
Image
Image]]>
Rankings
Image
Image]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: FTP Best Options ? :: Reply by Eroni]]> 2025-02-12T06:03:55-07:00 2025-02-12T06:03:55-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=42866&p=277612#p277612 I am using this code from Otto to upload a file pdf to my ftp site.
Looks like the file is sended but with zero bytes. The file is showed when I open the directory by Filezila, but with zero bytes. And the function FTPPUTFILE returns false.
Any ideas?
Thanks in advance.
Otto wrote: Sat Mar 04, 2023 2:16 am Hello Tim,

I am working on the same problem right now.
FTP should be replaced with secure FTP.
I don't have an example here yet.

For FTP I use the following function.

I wanted to change now unlike you to cURL: https:// and send with cURL.

curl --cacert /path/to/cacert.pem https://example.com

But I get this error: SSL certificate verify result: unable to get local issuer certificate (20)

Do you send with cURL and https?

Best regards,
Otto

Code: Select all | Expand


function download()
   local oInternet := TInternet():New()
   local oFTP := TFTP():New( "192.168.0.230", oInternet,"remanco", "pwremanco" )
   local aFiles
   local handle
   *----------------------------------------------------------

   if ! Empty( oFTP:hFTP )

      FtpSetCurrentDirectory(oFTP:hFTP, "/usr/cheshire/boh/")

      aFiles = oFTP:Directory("rms.dat" )

      IF len(aFiles) > 0
            AEval( aFiles, { | aFile | FtpGetFile ( oFTP:hFTP, aFile[ 1 ], "c:\remanco\" + aFile[ 1 ] ,.t.,0,0,0 )  } )
      ENDIF

   else
        //  MsgAlert( "oFTP:hFTP is null" )
   endif

   oInternet:End()

return nil




function f_senden( cDatei )
   local oInternet := TInternet():New()
   local oFTP := TFTP():New( "ftp.test.info", oInternet, "salettainfo", "pwsaletta" )
   local aInfo := {}
   local I := 0
   local cAktivInfoDir := Setup():AppPath + "report" //Setup():Daten() + "\xReport"
 
   *----------------------------------------------------------

   if Empty( oFTP:hFTP )
      MsgStop( "Cannot connect to the specified FTP site!" )
      return nil
   endif



   if ! Empty( oFTP:hFTP )

      select EMPFAREP
      do while .not. eof()

            if  FTPPUTFILE(  oFTP:hFTP,  cAktivInfoDir + "\"+ cDatei, "/salettainfo/AktivInfo/1" + Alltrim(EMPFAREP->email)  , 0, 0 ) = .t.

            else
               msginfo("konnte nicht gesendet werden:   "   +   cAktivInfoDir + "\" + cDatei + CRLF +;
                  "/salettainfo/AktivInfo/" + cDatei  )
            endif

         select EMPFAREP
         skip
      enddo
   else

      MsgAlert( "oFTP:hFTP is null" )

   endif


   ferase (  cAktivInfoDir + "\" + cDatei)

   oInternet:End()
    logfile( "aktivInfo.log", {  "nach senden ", } )
return nil
//----------------------------------------------------------------------------//

]]>
I am using this code from Otto to upload a file pdf to my ftp site.
Looks like the file is sended but with zero bytes. The file is showed when I open the directory by Filezila, but with zero bytes. And the function FTPPUTFILE returns false.
Any ideas?
Thanks in advance.
Otto wrote: Sat Mar 04, 2023 2:16 am Hello Tim,

I am working on the same problem right now.
FTP should be replaced with secure FTP.
I don't have an example here yet.

For FTP I use the following function.

I wanted to change now unlike you to cURL: https:// and send with cURL.

curl --cacert /path/to/cacert.pem https://example.com

But I get this error: SSL certificate verify result: unable to get local issuer certificate (20)

Do you send with cURL and https?

Best regards,
Otto

Code: Select all | Expand


function download()
   local oInternet := TInternet():New()
   local oFTP := TFTP():New( "192.168.0.230", oInternet,"remanco", "pwremanco" )
   local aFiles
   local handle
   *----------------------------------------------------------

   if ! Empty( oFTP:hFTP )

      FtpSetCurrentDirectory(oFTP:hFTP, "/usr/cheshire/boh/")

      aFiles = oFTP:Directory("rms.dat" )

      IF len(aFiles) > 0
            AEval( aFiles, { | aFile | FtpGetFile ( oFTP:hFTP, aFile[ 1 ], "c:\remanco\" + aFile[ 1 ] ,.t.,0,0,0 )  } )
      ENDIF

   else
        //  MsgAlert( "oFTP:hFTP is null" )
   endif

   oInternet:End()

return nil




function f_senden( cDatei )
   local oInternet := TInternet():New()
   local oFTP := TFTP():New( "ftp.test.info", oInternet, "salettainfo", "pwsaletta" )
   local aInfo := {}
   local I := 0
   local cAktivInfoDir := Setup():AppPath + "report" //Setup():Daten() + "\xReport"
 
   *----------------------------------------------------------

   if Empty( oFTP:hFTP )
      MsgStop( "Cannot connect to the specified FTP site!" )
      return nil
   endif



   if ! Empty( oFTP:hFTP )

      select EMPFAREP
      do while .not. eof()

            if  FTPPUTFILE(  oFTP:hFTP,  cAktivInfoDir + "\"+ cDatei, "/salettainfo/AktivInfo/1" + Alltrim(EMPFAREP->email)  , 0, 0 ) = .t.

            else
               msginfo("konnte nicht gesendet werden:   "   +   cAktivInfoDir + "\" + cDatei + CRLF +;
                  "/salettainfo/AktivInfo/" + cDatei  )
            endif

         select EMPFAREP
         skip
      enddo
   else

      MsgAlert( "oFTP:hFTP is null" )

   endif


   ferase (  cAktivInfoDir + "\" + cDatei)

   oInternet:End()
    logfile( "aktivInfo.log", {  "nach senden ", } )
return nil
//----------------------------------------------------------------------------//

]]>
<![CDATA[FiveWin for Harbour/xHarbour :: activate an online button :: Author Silvio.Falconi]]> 2025-02-12T16:16:35-07:00 2025-02-12T16:16:35-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45410&p=277627#p277627

Code: Select all | Expand

 DEFINE BUTTONBAR oBar OF oDlg  SIZE 100,70  TOP NOBORDER  2015
then on activate I cal the functions

Code: Select all | Expand

Btnbar(1,oDlg:oBar,oDlg,oDbf,oBrw,aBtnBrow[4]),;
to activate the buttonbar oBar (different menu barchange.prg thanks to Cristobal )

but the button number 6 is hided at init

and then the function Hide_Radio2(oRadio2,.f.,oSay,oLines,oBar) to show or not the button number 6

but when I try to make oBar:aControls[6]:show()

Code: Select all | Expand

 
 Error description: Error BASE/1004  Metodo non disponibile: ACONTROLS
   Args:
     [   1] = U   

Stack Calls
===========
   Called from: source\PConti.prg => ACONTROLS( 0 )
   Called from: source\PConti.prg => HIDE_RADIO2( 681 )
   
   
It tells me it can't find the aControls method.....why ?


please try this small test

Code: Select all | Expand

// developed by Cristobal Navarro

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

Function test()

   local oDlg,oDbf,oFont
   local oBar

   local  nBottom   := 27.2
   local  nRight    := 89
   local  nWd       := Max( nRight * DLG_CHARPIX_W, 180 )
   local  nHt       := nBottom * DLG_CHARPIX_H

   DEFINE DIALOG oDlg SIZE nWd, nHt PIXEL TRUEPIXEL;
         TiTle "test"
      oDlg:lHelpIcon := .F.      

   @ 90,  10 Button "Second bar" size 100,18 PIXEL OF oDlg action Btnbar(2,oDlg:oBar,oDlg)
   @ 90, 200 Button "First bar"  size 100,18 PIXEL OF oDlg action Btnbar(1,oDlg:oBar,oDlg)

   @ 90, 400 Button "hide/show button"  size 100,18 PIXEL OF oDlg action Hide_button(oDlg:oBar)

   ACTIVATE DIALOG oDlg  CENTER   ;
          ON INIT ( Btnbar(0,oBar,oDlg), Btnbar(1,oDlg:oBar,oDlg ))
RETURN NIL

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

Function Btnbar(nBar,oBar,oDlg)  // ,aBtnBar

   local aBtnBar
   local x

   if Valtype( oBar ) = "O"
      For x := Len( oBar:aControls ) to 1 step - 1
         oBar:Del( x )
      Next x
   endif

  Do case
  case nbar = 0
     DEFINE BUTTONBAR oBar OF oDlg  SIZE 80,70  TOP NOBORDER  2015

  case nbar = 1
   aBtnBar := array(6)
   DEFINE BUTTON aBtnBar[1] OF oBar PROMPT "New"       action msginfo()
   DEFINE BUTTON aBtnBar[2] OF oBar PROMPT "Modify"    action msginfo()
   DEFINE BUTTON aBtnBar[3] OF oBar PROMPT "Duplicate" action msginfo()
   DEFINE BUTTON aBtnBar[4] OF oBar PROMPT "Del"       action msginfo()
   DEFINE BUTTON aBtnBar[5] OF oBar PROMPT "Print"     action msginfo()
   DEFINE BUTTON aBtnBar[6] OF oBar PROMPT "Help"      action msginfo("Help")
   
              aBtnBar[6]:hide()
              
  case nbar = 2
   aBtnBar := array(2)
   DEFINE BUTTON aBtnBar[1] OF oBar PROMPT "Del"       action msginfo("Del")
   DEFINE BUTTON aBtnBar[2] OF oBar PROMPT "Print"     action msginfo("Print")

  endcase

return oBar

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


Function Hide_button(oBar)
        oBar:arcontrols[6]:show()
   return nil

]]>

Code: Select all | Expand

 DEFINE BUTTONBAR oBar OF oDlg  SIZE 100,70  TOP NOBORDER  2015
then on activate I cal the functions

Code: Select all | Expand

Btnbar(1,oDlg:oBar,oDlg,oDbf,oBrw,aBtnBrow[4]),;
to activate the buttonbar oBar (different menu barchange.prg thanks to Cristobal )

but the button number 6 is hided at init

and then the function Hide_Radio2(oRadio2,.f.,oSay,oLines,oBar) to show or not the button number 6

but when I try to make oBar:aControls[6]:show()

Code: Select all | Expand

 
 Error description: Error BASE/1004  Metodo non disponibile: ACONTROLS
   Args:
     [   1] = U   

Stack Calls
===========
   Called from: source\PConti.prg => ACONTROLS( 0 )
   Called from: source\PConti.prg => HIDE_RADIO2( 681 )
   
   
It tells me it can't find the aControls method.....why ?


please try this small test

Code: Select all | Expand

// developed by Cristobal Navarro

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

Function test()

   local oDlg,oDbf,oFont
   local oBar

   local  nBottom   := 27.2
   local  nRight    := 89
   local  nWd       := Max( nRight * DLG_CHARPIX_W, 180 )
   local  nHt       := nBottom * DLG_CHARPIX_H

   DEFINE DIALOG oDlg SIZE nWd, nHt PIXEL TRUEPIXEL;
         TiTle "test"
      oDlg:lHelpIcon := .F.      

   @ 90,  10 Button "Second bar" size 100,18 PIXEL OF oDlg action Btnbar(2,oDlg:oBar,oDlg)
   @ 90, 200 Button "First bar"  size 100,18 PIXEL OF oDlg action Btnbar(1,oDlg:oBar,oDlg)

   @ 90, 400 Button "hide/show button"  size 100,18 PIXEL OF oDlg action Hide_button(oDlg:oBar)

   ACTIVATE DIALOG oDlg  CENTER   ;
          ON INIT ( Btnbar(0,oBar,oDlg), Btnbar(1,oDlg:oBar,oDlg ))
RETURN NIL

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

Function Btnbar(nBar,oBar,oDlg)  // ,aBtnBar

   local aBtnBar
   local x

   if Valtype( oBar ) = "O"
      For x := Len( oBar:aControls ) to 1 step - 1
         oBar:Del( x )
      Next x
   endif

  Do case
  case nbar = 0
     DEFINE BUTTONBAR oBar OF oDlg  SIZE 80,70  TOP NOBORDER  2015

  case nbar = 1
   aBtnBar := array(6)
   DEFINE BUTTON aBtnBar[1] OF oBar PROMPT "New"       action msginfo()
   DEFINE BUTTON aBtnBar[2] OF oBar PROMPT "Modify"    action msginfo()
   DEFINE BUTTON aBtnBar[3] OF oBar PROMPT "Duplicate" action msginfo()
   DEFINE BUTTON aBtnBar[4] OF oBar PROMPT "Del"       action msginfo()
   DEFINE BUTTON aBtnBar[5] OF oBar PROMPT "Print"     action msginfo()
   DEFINE BUTTON aBtnBar[6] OF oBar PROMPT "Help"      action msginfo("Help")
   
              aBtnBar[6]:hide()
              
  case nbar = 2
   aBtnBar := array(2)
   DEFINE BUTTON aBtnBar[1] OF oBar PROMPT "Del"       action msginfo("Del")
   DEFINE BUTTON aBtnBar[2] OF oBar PROMPT "Print"     action msginfo("Print")

  endcase

return oBar

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


Function Hide_button(oBar)
        oBar:arcontrols[6]:show()
   return nil

]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: activate an online button :: Reply by Antonio Linares]]> 2025-02-12T22:37:09-07:00 2025-02-12T22:37:09-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45410&p=277634#p277634
ON INIT ( Btnbar(0,@oBar,oDlg), Btnbar(1,oDlg:oBar,oDlg ))]]>

ON INIT ( Btnbar(0,@oBar,oDlg), Btnbar(1,oDlg:oBar,oDlg ))]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: activate an online button :: Reply by Silvio.Falconi]]> 2025-02-12T23:28:48-07:00 2025-02-12T23:28:48-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45410&p=277635#p277635 <![CDATA[FiveWin for Harbour/xHarbour :: Show, hide of the frame :: Author Natter]]> 2025-02-13T01:52:52-07:00 2025-02-13T01:52:52-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45413&p=277638#p277638 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Show, hide of the frame :: Reply by Antonio Linares]]> 2025-02-13T02:06:55-07:00 2025-02-13T02:06:55-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45413&p=277639#p277639
You can not change standard attributes of all windows as they are controlled by the operating system.

Anyhow, as a workaround, please review samples\skin1.prg and samples\skin2.prg]]>

You can not change standard attributes of all windows as they are controlled by the operating system.

Anyhow, as a workaround, please review samples\skin1.prg and samples\skin2.prg]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Show, hide of the frame :: Reply by Natter]]> 2025-02-13T02:26:42-07:00 2025-02-13T02:26:42-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45413&p=277640#p277640 <![CDATA[FiveWin for Harbour/xHarbour :: sintax error for a filter :: Author Silvio.Falconi]]> 2025-02-13T13:50:47-07:00 2025-02-13T13:50:47-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45415&p=277656#p277656
cFilter:= "MARRIED='.T.'"

Image

Code: Select all | Expand

rror description: Error BASE/1071  Argument error: =
   Args:
     [   1] = L   .T.
     [   2] = C   .T.

Stack Calls
===========
   Called from: .\source\classes\database.prg => (b)COMPILE( 1305 )
he tells me it's wrong why?]]>

cFilter:= "MARRIED='.T.'"

Image

Code: Select all | Expand

rror description: Error BASE/1071  Argument error: =
   Args:
     [   1] = L   .T.
     [   2] = C   .T.

Stack Calls
===========
   Called from: .\source\classes\database.prg => (b)COMPILE( 1305 )
he tells me it's wrong why?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: sintax error for a filter :: Reply by MaxP]]> 2025-02-14T03:11:20-07:00 2025-02-14T03:11:20-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45415&p=277662#p277662
if MARRIED field is logical type

Code: Select all | Expand

cFilter:= "MARRIED=.T."
Massimo]]>

if MARRIED field is logical type

Code: Select all | Expand

cFilter:= "MARRIED=.T."
Massimo]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: sintax error for a filter :: Reply by Silvio.Falconi]]> 2025-02-14T03:18:16-07:00 2025-02-14T03:18:16-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45415&p=277663#p277663
MaxP wrote: Fri Feb 14, 2025 10:11 am Hi Silvio,

if MARRIED field is logical type

Code: Select all | Expand

cFilter:= "MARRIED=.T."
Massimo
Sorry I found the solution tonight]]>
MaxP wrote: Fri Feb 14, 2025 10:11 am Hi Silvio,

if MARRIED field is logical type

Code: Select all | Expand

cFilter:= "MARRIED=.T."
Massimo
Sorry I found the solution tonight]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Send e-mail (CDO) server SMTP GMAIL with oAuth2 :: Author mauri.menabue]]> 2025-02-09T07:16:46-07:00 2025-02-09T07:16:46-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45399&p=277549#p277549 I need help to be able to send emails from one of my FiveWin 32 bit applications
through the use of one or more gmail SMTP servers with recent oAuth2 authentication.
On the English forum Antonio replies, however, the code provided is pseudo code provided by deepseek and not
I have the experience needed to turn it into production-usable code.
Thanks to everyone Maurizio Menabue]]>
I need help to be able to send emails from one of my FiveWin 32 bit applications
through the use of one or more gmail SMTP servers with recent oAuth2 authentication.
On the English forum Antonio replies, however, the code provided is pseudo code provided by deepseek and not
I have the experience needed to turn it into production-usable code.
Thanks to everyone Maurizio Menabue]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Send e-mail (CDO) server SMTP GMAIL with oAuth2 :: Reply by Lailton]]> 2025-02-10T21:30:22-07:00 2025-02-10T21:30:22-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45399&p=277579#p277579
We will provide support for the oAuth2 on the next version FWH
with samples to send e-mail using GMail/Outlook(Office365).]]>

We will provide support for the oAuth2 on the next version FWH
with samples to send e-mail using GMail/Outlook(Office365).]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Send e-mail (CDO) server SMTP GMAIL with oAuth2 :: Reply by mauri.menabue]]> 2025-02-11T09:15:29-07:00 2025-02-11T09:15:29-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45399&p=277590#p277590
TIA]]>

TIA]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Send e-mail (CDO) server SMTP GMAIL with oAuth2 :: Reply by FiveWiDi]]> 2025-02-11T13:55:31-07:00 2025-02-11T13:55:31-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45399&p=277597#p277597
Lailton wrote: Tue Feb 11, 2025 4:30 am Hi Maurizio,

We will provide support for the oAuth2 on the next version FWH
with samples to send e-mail using GMail/Outlook(Office365).
Outlook 2010 too?]]>
Lailton wrote: Tue Feb 11, 2025 4:30 am Hi Maurizio,

We will provide support for the oAuth2 on the next version FWH
with samples to send e-mail using GMail/Outlook(Office365).
Outlook 2010 too?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Send e-mail (CDO) server SMTP GMAIL with oAuth2 :: Reply by Lailton]]> 2025-02-14T21:12:50-07:00 2025-02-14T21:12:50-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45399&p=277687#p277687 Soon I will share some screen here. :D]]> Soon I will share some screen here. :D]]> <![CDATA[FiveWin for Harbour/xHarbour :: xhb 1.31 xcc :: Author jair]]> 2025-02-12T04:50:57-07:00 2025-02-12T04:50:57-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277610#p277610 I really need xharbour latest version compiled with xcc is there anyone here who can compile this xcc version of xharbour 1.31]]> I really need xharbour latest version compiled with xcc is there anyone here who can compile this xcc version of xharbour 1.31]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by Antonio Linares]]> 2025-02-12T06:18:10-07:00 2025-02-12T06:18:10-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277613#p277613
Could you please explain why you need to use xcc ? thanks]]>

Could you please explain why you need to use xcc ? thanks]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by jair]]> 2025-02-12T11:14:35-07:00 2025-02-12T11:14:35-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277621#p277621 Image
Sin fronteras:
Image

Tengo un sistema compilado con xharbour comercial xcc 1.22 y sqlrdd. Intenté compilar con el xharbour simple bcc77, pero me generó una cantidad muy grande de errores, imposibilitando el cambio de xhb 1.22 a xharbour, sin contar que aún usan tvget y otros componentes de terceros. Compilé con xharbour 1.30 con él, pero tiene SAY y GET que, en varias pantallas, necesitan ser transparentes y presentar bordes, generando un problema de que, si no pongo los bordes, la información se ve muy borrosa, y si pongo los bordes a presentar, se dañan los bordes, ya que las pantallas de estos sistemas son genéricas.
e geradas apartir de dicionarios de dados ou seja as definicoes podem ser feitas pelo usuario inclusive ai gerar um problema que os get sobrepoem a area reservada para os campos SAY ja tentei resolver de varias maneiras mais nao deu certo o ideal seria que funcionasse bcc77 e xharbour simples mais nao funcioa de o caminho mais pratico em vista a grande numero de alteracoes necessarias para funcionar com bcc77 seria funcioanr na versao xcc mesmo que ai sim teria o minumo possivel o quase nenhuma alteração.
y generados a partir de diccionarios de datos, es decir, las definiciones las puede hacer el usuario, incluso generando un problema donde el get se superpone al área reservada para los campos SAY. He intentado solucionarlo de varias formas pero no ha funcionado. Lo ideal sería que funcionara en bcc77 y xharbour simple, pero no funciona. Lo más práctico, en vista de la gran cantidad de cambios necesarios para trabajar con bcc77, sería trabajar en la versión xcc, aunque entonces habría los mínimos cambios posibles o casi ninguno.]]>
Image
Sin fronteras:
Image

Tengo un sistema compilado con xharbour comercial xcc 1.22 y sqlrdd. Intenté compilar con el xharbour simple bcc77, pero me generó una cantidad muy grande de errores, imposibilitando el cambio de xhb 1.22 a xharbour, sin contar que aún usan tvget y otros componentes de terceros. Compilé con xharbour 1.30 con él, pero tiene SAY y GET que, en varias pantallas, necesitan ser transparentes y presentar bordes, generando un problema de que, si no pongo los bordes, la información se ve muy borrosa, y si pongo los bordes a presentar, se dañan los bordes, ya que las pantallas de estos sistemas son genéricas.
e geradas apartir de dicionarios de dados ou seja as definicoes podem ser feitas pelo usuario inclusive ai gerar um problema que os get sobrepoem a area reservada para os campos SAY ja tentei resolver de varias maneiras mais nao deu certo o ideal seria que funcionasse bcc77 e xharbour simples mais nao funcioa de o caminho mais pratico em vista a grande numero de alteracoes necessarias para funcionar com bcc77 seria funcioanr na versao xcc mesmo que ai sim teria o minumo possivel o quase nenhuma alteração.
y generados a partir de diccionarios de datos, es decir, las definiciones las puede hacer el usuario, incluso generando un problema donde el get se superpone al área reservada para los campos SAY. He intentado solucionarlo de varias formas pero no ha funcionado. Lo ideal sería que funcionara en bcc77 y xharbour simple, pero no funciona. Lo más práctico, en vista de la gran cantidad de cambios necesarios para trabajar con bcc77, sería trabajar en la versión xcc, aunque entonces habría los mínimos cambios posibles o casi ninguno.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by jair]]> 2025-02-12T11:40:56-07:00 2025-02-12T11:40:56-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277622#p277622 Ya en la versión 1.31 nuestro gran amigo Enrico cambió]]> Ya en la versión 1.31 nuestro gran amigo Enrico cambió]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by Antonio Linares]]> 2025-02-12T13:03:16-07:00 2025-02-12T13:03:16-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277623#p277623 <![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by Enrico Maria Giordano]]> 2025-02-12T13:36:15-07:00 2025-02-12T13:36:15-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277624#p277624 <![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by Antonio Linares]]> 2025-02-12T14:08:25-07:00 2025-02-12T14:08:25-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277625#p277625
It is included in the xHarbour commercial demo

I am emailing it to you]]>

It is included in the xHarbour commercial demo

I am emailing it to you]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by Enrico Maria Giordano]]> 2025-02-13T04:19:20-07:00 2025-02-13T04:19:20-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277641#p277641
jair wrote: Wed Feb 12, 2025 11:50 am Good morning!
I really need xharbour latest version compiled with xcc is there anyone here who can compile this xcc version of xharbour 1.31
Do you have a working version of XCC? The one I tried is too old:
Pelles ISO C Compiler, Version 3.00.0 (Beta)
Copyright (c) Pelle Orinius 1999-2005
]]>
jair wrote: Wed Feb 12, 2025 11:50 am Good morning!
I really need xharbour latest version compiled with xcc is there anyone here who can compile this xcc version of xharbour 1.31
Do you have a working version of XCC? The one I tried is too old:
Pelles ISO C Compiler, Version 3.00.0 (Beta)
Copyright (c) Pelle Orinius 1999-2005
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by Antonio Linares]]> 2025-02-13T04:26:12-07:00 2025-02-13T04:26:12-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277642#p277642 https://smorgasbordet.com/pellesc/]]> https://smorgasbordet.com/pellesc/]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by Enrico Maria Giordano]]> 2025-02-13T05:04:03-07:00 2025-02-13T05:04:03-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277643#p277643 <![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by jair]]> 2025-02-13T06:09:25-07:00 2025-02-13T06:09:25-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277644#p277644 http://www.xharbour.org/files/download/ ... 72_xcc.zip

Good morning!
I am using the
compilation that
there is this link here]]>
http://www.xharbour.org/files/download/ ... 72_xcc.zip

Good morning!
I am using the
compilation that
there is this link here]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by Enrico Maria Giordano]]> 2025-02-13T06:21:41-07:00 2025-02-13T06:21:41-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277645#p277645
XCC -D__WIN32__ -D_HAVE_SQLITE_CONFIG_H -DHAVE_CONFIG_H -DHARBOUR_CONF -DOPENSSL_NO_DEPRECATED -DHB_NO_DV_MEMCPY -DHB_NO_BACKGROUND -DHB_GUI -D__XCC__ -DNEED_DUMMY_RETURN -DNULL=0 -DMINILZO_HAVE_CONFIG_H -W2 -I"source\rtl\zlib" -I"contrib\pdflite\include" -I"contrib\png" -I"contrib\tiff" -I"contrib\jpeg" -I"include" -I"e:\fw\xcc\include" -I"obj\xc" -I"contrib\sixapi\include" -I"contrib\freeimage\include" -I"contrib\gd\include" -I"contrib\xwt\include" -I"contrib\xwt\src\xwt_win" -I"e:\fw\xcc\include\win" -Ze -Zx -Tx86-coff -W2 -Foobj\xc\pngrutil.obj contrib\png\pngrutil.c
contrib\png\pngrutil.c(1100): warning #2118: Parameter 'info_ptr' is not referenced.
contrib\png\pngrutil.c(3349): fatal error: Internal error: put_tokens.

This is line 3349:

Code: Select all | Expand

         static PNG_CONST png_uint_32 row_mask[2/*PACKSWAP*/][3/*depth*/][6] =
         {
            /* Little-endian byte masks for PACKSWAP */
            { S_MASKS(1,0), S_MASKS(2,0), S_MASKS(4,0) },  <--- LINE 3349
            /* Normal (big-endian byte) masks - PNG format */
            { S_MASKS(1,1), S_MASKS(2,1), S_MASKS(4,1) }
         };
I don't understand the problem. The function put_token is inside the compiler XCC itself.]]>

XCC -D__WIN32__ -D_HAVE_SQLITE_CONFIG_H -DHAVE_CONFIG_H -DHARBOUR_CONF -DOPENSSL_NO_DEPRECATED -DHB_NO_DV_MEMCPY -DHB_NO_BACKGROUND -DHB_GUI -D__XCC__ -DNEED_DUMMY_RETURN -DNULL=0 -DMINILZO_HAVE_CONFIG_H -W2 -I"source\rtl\zlib" -I"contrib\pdflite\include" -I"contrib\png" -I"contrib\tiff" -I"contrib\jpeg" -I"include" -I"e:\fw\xcc\include" -I"obj\xc" -I"contrib\sixapi\include" -I"contrib\freeimage\include" -I"contrib\gd\include" -I"contrib\xwt\include" -I"contrib\xwt\src\xwt_win" -I"e:\fw\xcc\include\win" -Ze -Zx -Tx86-coff -W2 -Foobj\xc\pngrutil.obj contrib\png\pngrutil.c
contrib\png\pngrutil.c(1100): warning #2118: Parameter 'info_ptr' is not referenced.
contrib\png\pngrutil.c(3349): fatal error: Internal error: put_tokens.

This is line 3349:

Code: Select all | Expand

         static PNG_CONST png_uint_32 row_mask[2/*PACKSWAP*/][3/*depth*/][6] =
         {
            /* Little-endian byte masks for PACKSWAP */
            { S_MASKS(1,0), S_MASKS(2,0), S_MASKS(4,0) },  <--- LINE 3349
            /* Normal (big-endian byte) masks - PNG format */
            { S_MASKS(1,1), S_MASKS(2,1), S_MASKS(4,1) }
         };
I don't understand the problem. The function put_token is inside the compiler XCC itself.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by karinha]]> 2025-02-13T09:28:36-07:00 2025-02-13T09:28:36-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277646#p277646
https://github.com/xHarbour-org/xharbou ... ourBuilder

Regards, saludos.]]>

https://github.com/xHarbour-org/xharbou ... ourBuilder

Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by Enrico Maria Giordano]]> 2025-02-13T11:43:26-07:00 2025-02-13T11:43:26-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277652#p277652 <![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by Enrico Maria Giordano]]> 2025-02-14T02:45:53-07:00 2025-02-14T02:45:53-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277661#p277661

Code: Select all | Expand

xLINK: error: Unresolved external symbol '_xCCGetLargestConsoleWindowSize referenced from gtwin.lib(gtwin.obj)'.
Definitely something's wrong... :-(]]>

Code: Select all | Expand

xLINK: error: Unresolved external symbol '_xCCGetLargestConsoleWindowSize referenced from gtwin.lib(gtwin.obj)'.
Definitely something's wrong... :-(]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by Antonio Linares]]> 2025-02-14T04:49:55-07:00 2025-02-14T04:49:55-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277666#p277666
Are you linking xhb.lib ? It seems to be there (maybe used or exported)]]>

Are you linking xhb.lib ? It seems to be there (maybe used or exported)]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by Enrico Maria Giordano]]> 2025-02-14T08:31:55-07:00 2025-02-14T08:31:55-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277670#p277670 <![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by karinha]]> 2025-02-14T08:41:58-07:00 2025-02-14T08:41:58-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277671#p277671
https://learn.microsoft.com/en-us/windo ... windowsize

Regards, saludos.]]>

https://learn.microsoft.com/en-us/windo ... windowsize

Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by Enrico Maria Giordano]]> 2025-02-14T09:05:55-07:00 2025-02-14T09:05:55-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277674#p277674 ]]> ]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by jair]]> 2025-02-14T12:47:06-07:00 2025-02-14T12:47:06-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277683#p277683 Según la persona que escribió esto, de esta manera podría generar la versión xhb para xcc

git clone https://github.com/xHarbour-org/xharbour.git\xharbour2

C:\Program Files\Microsoft Visual Studio\2022\Community

abre uma janela dos, e cola esse comando :
set XBUILD_VC8=YES
cd \xharbour
make_vc.bat
cd \xharbour\xHarbourBuilder\xHarbour-Builder
xbldfull

comando :
set XBUILD_VC8=YES && cd \xharbour && make_vc.bat && cd \xharbour\xHarbourBuilder\xHarbour-Builder && xbldfull]]>
Según la persona que escribió esto, de esta manera podría generar la versión xhb para xcc

git clone https://github.com/xHarbour-org/xharbour.git\xharbour2

C:\Program Files\Microsoft Visual Studio\2022\Community

abre uma janela dos, e cola esse comando :
set XBUILD_VC8=YES
cd \xharbour
make_vc.bat
cd \xharbour\xHarbourBuilder\xHarbour-Builder
xbldfull

comando :
set XBUILD_VC8=YES && cd \xharbour && make_vc.bat && cd \xharbour\xHarbourBuilder\xHarbour-Builder && xbldfull]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by Enrico Maria Giordano]]> 2025-02-14T13:27:35-07:00 2025-02-14T13:27:35-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277684#p277684
https://github.com/FiveTechSoft/harbour ... vc2022.zip]]>

https://github.com/FiveTechSoft/harbour ... vc2022.zip]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xhb 1.31 xcc :: Reply by jair]]> 2025-02-15T13:33:22-07:00 2025-02-15T13:33:22-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45407&p=277694#p277694 El sistema actual es con xcc 1.22 y five win año 2010 necesito generar una compilación con la nueva versión de five win para cambiar la base de datos de sqlrdd al sql nativo de fivewin mariadb.]]> El sistema actual es con xcc 1.22 y five win año 2010 necesito generar una compilación con la nueva versión de five win para cambiar la base de datos de sqlrdd al sql nativo de fivewin mariadb.]]> <![CDATA[FiveWin for Harbour/xHarbour :: Rick Spence's Clipper 5.2: Power Programmer's Guide :: Author Marcelo Via Giglio]]> 2025-02-17T11:22:59-07:00 2025-02-17T11:22:59-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45429&p=277724#p277724
sorry for the theme, have some body the disk information of the Rick Spence's Clipper 5.2: Power Programmer's Guide book ?

I'm trying to develop a simple TUI software in Linux

regards

Marcelo Via]]>

sorry for the theme, have some body the disk information of the Rick Spence's Clipper 5.2: Power Programmer's Guide book ?

I'm trying to develop a simple TUI software in Linux

regards

Marcelo Via]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Rick Spence's Clipper 5.2: Power Programmer's Guide :: Reply by TimStone]]> 2025-02-17T11:31:56-07:00 2025-02-17T11:31:56-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45429&p=277725#p277725
I have the book and the disk ( envelope never opened ).]]>

I have the book and the disk ( envelope never opened ).]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Rick Spence's Clipper 5.2: Power Programmer's Guide :: Reply by Marcelo Via Giglio]]> 2025-02-17T11:37:10-07:00 2025-02-17T11:37:10-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45429&p=277726#p277726
It is a good book, I recommend you to see.

thanks again

Marcelo Via]]>

It is a good book, I recommend you to see.

thanks again

Marcelo Via]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Rick Spence's Clipper 5.2: Power Programmer's Guide :: Reply by karinha]]> 2025-02-17T12:32:44-07:00 2025-02-17T12:32:44-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45429&p=277727#p277727
https://linguagemclipper.com.br/downloa ... e_vignette

https://sagierp.com.br/devel/aulas/Harbour2ed.pdf

Regards, saludos.]]>

https://linguagemclipper.com.br/downloa ... e_vignette

https://sagierp.com.br/devel/aulas/Harbour2ed.pdf

Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Rick Spence's Clipper 5.2: Power Programmer's Guide :: Reply by Marcelo Via Giglio]]> 2025-02-17T13:58:55-07:00 2025-02-17T13:58:55-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45429&p=277728#p277728
I will see the site

Regards

Marcelo]]>

I will see the site

Regards

Marcelo]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Rick Spence's Clipper 5.2: Power Programmer's Guide :: Reply by Antonio Linares]]> 2025-02-18T00:59:52-07:00 2025-02-18T00:59:52-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45429&p=277730#p277730
For a TUI I suggest you to review this one (working on Linux too). Same look and feel as Borland's Turbo Vision.

https://github.com/FiveTechSoft/hbide

Image]]>

For a TUI I suggest you to review this one (working on Linux too). Same look and feel as Borland's Turbo Vision.

https://github.com/FiveTechSoft/hbide

Image]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Rick Spence's Clipper 5.2: Power Programmer's Guide :: Reply by Marcelo Via Giglio]]> 2025-02-18T08:37:17-07:00 2025-02-18T08:37:17-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45429&p=277736#p277736
I will check out this project

regards

Marcelo]]>

I will check out this project

regards

Marcelo]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Search someone help me :: Author Silvio.Falconi]]> 2025-02-13T15:06:34-07:00 2025-02-13T15:15:45-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45416&p=277657#p277657

I would like to create something like this, that is, create the possibility of filtering information in an archive. To do a test I took customer.dbf and I put the possibility of searching for the city, the state, Married or not married, the age, and the salary

Now something works as you can see in the video only the only thing that does not work is that if I cancel a checkbox not in order the xbrowse changes the position but the controls remain and are not deleted.

In the video I tried to cancel the checkboxes according to the initial activation

the changes I need are:
the filter must be cumulative, that is, now it filters individually
when you cancel a checkbox, the procedure, in addition to changing the height of the xbrowse, must make the controls disappear so as to move the controls just below the xbrowse

I was looking for someone who was willing to help me.]]>


I would like to create something like this, that is, create the possibility of filtering information in an archive. To do a test I took customer.dbf and I put the possibility of searching for the city, the state, Married or not married, the age, and the salary

Now something works as you can see in the video only the only thing that does not work is that if I cancel a checkbox not in order the xbrowse changes the position but the controls remain and are not deleted.

In the video I tried to cancel the checkboxes according to the initial activation

the changes I need are:
the filter must be cumulative, that is, now it filters individually
when you cancel a checkbox, the procedure, in addition to changing the height of the xbrowse, must make the controls disappear so as to move the controls just below the xbrowse

I was looking for someone who was willing to help me.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Search someone help me :: Reply by Antonio Linares]]> 2025-02-13T15:12:30-07:00 2025-02-13T15:12:30-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45416&p=277658#p277658
It looks simply great :D]]>

It looks simply great :D]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Search someone help me :: Reply by Silvio.Falconi]]> 2025-02-13T15:21:05-07:00 2025-02-13T15:21:05-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45416&p=277659#p277659
Antonio Linares wrote: Thu Feb 13, 2025 10:12 pm Dear Silvio,

It looks simply great :D
yes but not run ok

as I explained above:

- the filter must be cumulative, that is, now it filters individually
- when you cancel a checkbox, the procedure, in addition to changing the height of the xbrowse, must make only the relative controls of the checkbox disappear in order to move the controls just below the xbrowse

for example, if are displayed

Age
city
state

and I cancel city

the procedure must change the height of the xbrowse, make the controls relative to "city" disappear and move the controls relative to "age"]]>
Antonio Linares wrote: Thu Feb 13, 2025 10:12 pm Dear Silvio,

It looks simply great :D
yes but not run ok

as I explained above:

- the filter must be cumulative, that is, now it filters individually
- when you cancel a checkbox, the procedure, in addition to changing the height of the xbrowse, must make only the relative controls of the checkbox disappear in order to move the controls just below the xbrowse

for example, if are displayed

Age
city
state

and I cancel city

the procedure must change the height of the xbrowse, make the controls relative to "city" disappear and move the controls relative to "age"]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Search someone help me :: Reply by mauri.menabue]]> 2025-02-18T02:06:44-07:00 2025-02-18T02:06:44-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45416&p=277731#p277731 Maurizio Menabue]]> Maurizio Menabue]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Search someone help me :: Reply by MMK]]> 2025-02-18T06:38:06-07:00 2025-02-18T06:38:06-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45416&p=277734#p277734 Image]]> Image]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Search someone help me :: Reply by Silvio.Falconi]]> 2025-02-18T11:00:39-07:00 2025-02-18T11:00:39-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45416&p=277739#p277739
MMK wrote: Tue Feb 18, 2025 1:38 pm Image
This is not what I want to do, it's nice but only the programmer can understand it, instead the example I made to put under the fields and and select the information is useful and functional

I already have a class (Tfilter created by me many years ago) to make filters using logical operators. You can find it in the utilities folders of fwh. But unfortunately it is not functional in the sense that only programmers understand it, ordinary people who have to use the application do not understand it]]>
MMK wrote: Tue Feb 18, 2025 1:38 pm Image
This is not what I want to do, it's nice but only the programmer can understand it, instead the example I made to put under the fields and and select the information is useful and functional

I already have a class (Tfilter created by me many years ago) to make filters using logical operators. You can find it in the utilities folders of fwh. But unfortunately it is not functional in the sense that only programmers understand it, ordinary people who have to use the application do not understand it]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Show a Text with Border :: Author Silvio.Falconi]]> 2025-02-20T04:24:36-07:00 2025-02-20T04:24:36-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45438&p=277789#p277789
is there any remote possibility to create a text control with a border and color the background, text and border?

I remember that there was an old class TestSay or Tsay but I can't find it

I found a class Static Say ( Mercado) but on Paint Method not run Border clausole, probable I have an old release]]>

is there any remote possibility to create a text control with a border and color the background, text and border?

I remember that there was an old class TestSay or Tsay but I can't find it

I found a class Static Say ( Mercado) but on Paint Method not run Border clausole, probable I have an old release]]>
<![CDATA[FiveWin for Harbour/xHarbour :: xbrowse multisel :: Author wartiaga]]> 2025-02-16T17:54:09-07:00 2025-02-16T17:54:09-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45426&p=277706#p277706
How the best way to use multisel in xbrowse? I would not like to use a logical field in the dbf to select or unmark the record as there may be other users using the same record.

Thanks in advance!]]>

How the best way to use multisel in xbrowse? I would not like to use a logical field in the dbf to select or unmark the record as there may be other users using the same record.

Thanks in advance!]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xbrowse multisel :: Reply by ShumingWang]]> 2025-02-18T18:55:26-07:00 2025-02-18T18:55:26-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45426&p=277743#p277743 ::select(1)
::seleect(2)
...
::aseleted stores Eval( ::bBookMark) //nrow

::select(0) clear selected rows ,::aselected:={}

Shuming Wang]]>
::select(1)
::seleect(2)
...
::aseleted stores Eval( ::bBookMark) //nrow

::select(0) clear selected rows ,::aselected:={}

Shuming Wang]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xbrowse multisel :: Reply by Silvio.Falconi]]> 2025-02-19T02:27:06-07:00 2025-02-19T02:27:06-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45426&p=277752#p277752
wartiaga wrote: Mon Feb 17, 2025 12:54 am Hi,

How the best way to use multisel in xbrowse? I would not like to use a logical field in the dbf to select or unmark the record as there may be other users using the same record.

Thanks in advance!
You must not also use a field on your archive

Code: Select all | Expand

WITH OBJECT oBrw
                    :SetMultiSelectCol()

Image]]>
wartiaga wrote: Mon Feb 17, 2025 12:54 am Hi,

How the best way to use multisel in xbrowse? I would not like to use a logical field in the dbf to select or unmark the record as there may be other users using the same record.

Thanks in advance!
You must not also use a field on your archive

Code: Select all | Expand

WITH OBJECT oBrw
                    :SetMultiSelectCol()

Image]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xbrowse multisel :: Reply by Otto]]> 2025-02-19T03:38:05-07:00 2025-02-19T03:38:05-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45426&p=277753#p277753 <![CDATA[FiveWin for Harbour/xHarbour :: Re: xbrowse multisel :: Reply by Silvio.Falconi]]> 2025-02-19T05:33:25-07:00 2025-02-19T05:33:25-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45426&p=277754#p277754
Otto wrote: Wed Feb 19, 2025 10:38 am Respect and congratulations – I like the design.
Thanks
Otto, I created my applications with some C5 classes also used by a gentleman on this forum, to avoid being reported for plagiarism I had to change my applications and return to the old tables.


For a sample If I wish not set at init :SetMultiSelectCol() and then I wish select a record from menupopup the procedure can make it but before must insert :SetMultiSelectCol() I ask this to Rao last year and he not answered never for this topic

pratically I asked if I can insert on line the possibility to have :SetMultiSelectCol() into xbrowse


this is one of the many things I never got an answer to]]>
Otto wrote: Wed Feb 19, 2025 10:38 am Respect and congratulations – I like the design.
Thanks
Otto, I created my applications with some C5 classes also used by a gentleman on this forum, to avoid being reported for plagiarism I had to change my applications and return to the old tables.


For a sample If I wish not set at init :SetMultiSelectCol() and then I wish select a record from menupopup the procedure can make it but before must insert :SetMultiSelectCol() I ask this to Rao last year and he not answered never for this topic

pratically I asked if I can insert on line the possibility to have :SetMultiSelectCol() into xbrowse


this is one of the many things I never got an answer to]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xbrowse multisel :: Reply by karinha]]> 2025-02-19T07:22:33-07:00 2025-02-19T07:22:33-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45426&p=277757#p277757

Code: Select all | Expand

// C:\FWH\SAMPLES\MULTSEL.PRG by mister Rao.

#include "FiveWin.Ch"
#include "ord.ch"
#include "xbrowse.ch"
#include "hbcompat.ch"

REQUEST DBFCDX

FUNCTION Main()

   LOCAL oDlg, oBrw, oFont

   XbrNumFormat( 'A', .T. )

   USE CUSTOMER NEW ALIAS "CUST" SHARED VIA "DBFCDX"

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0, - 14 BOLD

   DEFINE DIALOG oDlg SIZE 700, 400 PIXEL FONT oFont

   oDlg:lHelpIcon := .F.

   @ 10, 10 XBROWSE oBrw SIZE - 10, - 10 PIXEL OF oDlg ;
      DATASOURCE "CUST"                                ;
      COLUMNS "FIRST", "CITY", "AGE", "SALARY"         ;
      CELL LINES NOBORDER

   WITH OBJECT oBrw:InsCol( 1 )

      :bEditValue    := {|| AScan( oBrw:aSelected, oBrw:BookMark ) > 0 }
      :SetCheck()
      :nHeadBmpNo    := {|| If( Len( oBrw:aSelected ) == oBrw:nLen, 1, 2 ) }

   END

   WITH OBJECT oBrw

      :nMarqueeStyle := MARQSTYLE_HIGHLROWMS // multisel does the job
      // :nMarqueeStyle := MARQSTYLE_HIGHLROW
      :lMultiSelect  := .F.
      :bClrSelFocus  := {|| { CLR_BLACK, CLR_HGRAY } }
      :nStretchCol   := 3

      :aCols[ 1 ]:bClrSelFocus := {|| {  CLR_BLACK, CLR_WHITE } }

      :bLClicked     := {| r, c, f, oBrw | If( oBrw:MouseColPos( c ) == 1, ;
         If( ( f := AScan( oBrw:aSelected, oBrw:BookMark ) ) == 0,         ;
         AAdd( oBrw:aSelected, oBrw:BookMark ),                            ;
         ADel( oBrw:aSelected, f, .T. ) ), NIL ),                          ;
         oBrw:RefreshCurrent() }

   :CreateFromCode()

   END

   ACTIVATE DIALOG oDlg CENTERED

   RELEASE FONT oFont

RETURN NIL

// FIN / END
Regards, saludos.]]>


Code: Select all | Expand

// C:\FWH\SAMPLES\MULTSEL.PRG by mister Rao.

#include "FiveWin.Ch"
#include "ord.ch"
#include "xbrowse.ch"
#include "hbcompat.ch"

REQUEST DBFCDX

FUNCTION Main()

   LOCAL oDlg, oBrw, oFont

   XbrNumFormat( 'A', .T. )

   USE CUSTOMER NEW ALIAS "CUST" SHARED VIA "DBFCDX"

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0, - 14 BOLD

   DEFINE DIALOG oDlg SIZE 700, 400 PIXEL FONT oFont

   oDlg:lHelpIcon := .F.

   @ 10, 10 XBROWSE oBrw SIZE - 10, - 10 PIXEL OF oDlg ;
      DATASOURCE "CUST"                                ;
      COLUMNS "FIRST", "CITY", "AGE", "SALARY"         ;
      CELL LINES NOBORDER

   WITH OBJECT oBrw:InsCol( 1 )

      :bEditValue    := {|| AScan( oBrw:aSelected, oBrw:BookMark ) > 0 }
      :SetCheck()
      :nHeadBmpNo    := {|| If( Len( oBrw:aSelected ) == oBrw:nLen, 1, 2 ) }

   END

   WITH OBJECT oBrw

      :nMarqueeStyle := MARQSTYLE_HIGHLROWMS // multisel does the job
      // :nMarqueeStyle := MARQSTYLE_HIGHLROW
      :lMultiSelect  := .F.
      :bClrSelFocus  := {|| { CLR_BLACK, CLR_HGRAY } }
      :nStretchCol   := 3

      :aCols[ 1 ]:bClrSelFocus := {|| {  CLR_BLACK, CLR_WHITE } }

      :bLClicked     := {| r, c, f, oBrw | If( oBrw:MouseColPos( c ) == 1, ;
         If( ( f := AScan( oBrw:aSelected, oBrw:BookMark ) ) == 0,         ;
         AAdd( oBrw:aSelected, oBrw:BookMark ),                            ;
         ADel( oBrw:aSelected, f, .T. ) ), NIL ),                          ;
         oBrw:RefreshCurrent() }

   :CreateFromCode()

   END

   ACTIVATE DIALOG oDlg CENTERED

   RELEASE FONT oFont

RETURN NIL

// FIN / END
Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xbrowse multisel :: Reply by karinha]]> 2025-02-19T07:27:34-07:00 2025-02-19T07:27:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45426&p=277759#p277759 viewtopic.php?f=3&t=36106#p215155

Regards, saludos.]]>
viewtopic.php?f=3&t=36106#p215155

Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xbrowse multisel :: Reply by wartiaga]]> 2025-02-20T10:52:18-07:00 2025-02-20T10:52:18-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45426&p=277795#p277795
ShumingWang wrote: Wed Feb 19, 2025 1:55 am ::nMarqueeStyle := MARQSTYLE_HIGHLROWMS
::select(1)
::seleect(2)
...
::aseleted stores Eval( ::bBookMark) //nrow

::select(0) clear selected rows ,::aselected:={}

Shuming Wang

Thank You!]]>
ShumingWang wrote: Wed Feb 19, 2025 1:55 am ::nMarqueeStyle := MARQSTYLE_HIGHLROWMS
::select(1)
::seleect(2)
...
::aseleted stores Eval( ::bBookMark) //nrow

::select(0) clear selected rows ,::aselected:={}

Shuming Wang

Thank You!]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xbrowse multisel :: Reply by wartiaga]]> 2025-02-20T10:53:02-07:00 2025-02-20T10:53:02-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45426&p=277796#p277796
Silvio.Falconi wrote: Wed Feb 19, 2025 9:27 am
wartiaga wrote: Mon Feb 17, 2025 12:54 am Hi,

How the best way to use multisel in xbrowse? I would not like to use a logical field in the dbf to select or unmark the record as there may be other users using the same record.

Thanks in advance!
You must not also use a field on your archive

Code: Select all | Expand

WITH OBJECT oBrw
                    :SetMultiSelectCol()

Image
Thank You for the tip Silvio!]]>
Silvio.Falconi wrote: Wed Feb 19, 2025 9:27 am
wartiaga wrote: Mon Feb 17, 2025 12:54 am Hi,

How the best way to use multisel in xbrowse? I would not like to use a logical field in the dbf to select or unmark the record as there may be other users using the same record.

Thanks in advance!
You must not also use a field on your archive

Code: Select all | Expand

WITH OBJECT oBrw
                    :SetMultiSelectCol()

Image
Thank You for the tip Silvio!]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xbrowse multisel :: Reply by wartiaga]]> 2025-02-20T11:02:15-07:00 2025-02-20T11:02:15-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45426&p=277797#p277797
karinha wrote: Wed Feb 19, 2025 2:22 pm wartiaga, see if it helps:


Code: Select all | Expand

// C:\FWH\SAMPLES\MULTSEL.PRG by mister Rao.

#include "FiveWin.Ch"
#include "ord.ch"
#include "xbrowse.ch"
#include "hbcompat.ch"

REQUEST DBFCDX

FUNCTION Main()

   LOCAL oDlg, oBrw, oFont

   XbrNumFormat( 'A', .T. )

   USE CUSTOMER NEW ALIAS "CUST" SHARED VIA "DBFCDX"

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0, - 14 BOLD

   DEFINE DIALOG oDlg SIZE 700, 400 PIXEL FONT oFont

   oDlg:lHelpIcon := .F.

   @ 10, 10 XBROWSE oBrw SIZE - 10, - 10 PIXEL OF oDlg ;
      DATASOURCE "CUST"                                ;
      COLUMNS "FIRST", "CITY", "AGE", "SALARY"         ;
      CELL LINES NOBORDER

   WITH OBJECT oBrw:InsCol( 1 )

      :bEditValue    := {|| AScan( oBrw:aSelected, oBrw:BookMark ) > 0 }
      :SetCheck()
      :nHeadBmpNo    := {|| If( Len( oBrw:aSelected ) == oBrw:nLen, 1, 2 ) }

   END

   WITH OBJECT oBrw

      :nMarqueeStyle := MARQSTYLE_HIGHLROWMS // multisel does the job
      // :nMarqueeStyle := MARQSTYLE_HIGHLROW
      :lMultiSelect  := .F.
      :bClrSelFocus  := {|| { CLR_BLACK, CLR_HGRAY } }
      :nStretchCol   := 3

      :aCols[ 1 ]:bClrSelFocus := {|| {  CLR_BLACK, CLR_WHITE } }

      :bLClicked     := {| r, c, f, oBrw | If( oBrw:MouseColPos( c ) == 1, ;
         If( ( f := AScan( oBrw:aSelected, oBrw:BookMark ) ) == 0,         ;
         AAdd( oBrw:aSelected, oBrw:BookMark ),                            ;
         ADel( oBrw:aSelected, f, .T. ) ), NIL ),                          ;
         oBrw:RefreshCurrent() }

   :CreateFromCode()

   END

   ACTIVATE DIALOG oDlg CENTERED

   RELEASE FONT oFont

RETURN NIL

// FIN / END
Regards, saludos.
Thank You Karinha, works great!]]>
karinha wrote: Wed Feb 19, 2025 2:22 pm wartiaga, see if it helps:


Code: Select all | Expand

// C:\FWH\SAMPLES\MULTSEL.PRG by mister Rao.

#include "FiveWin.Ch"
#include "ord.ch"
#include "xbrowse.ch"
#include "hbcompat.ch"

REQUEST DBFCDX

FUNCTION Main()

   LOCAL oDlg, oBrw, oFont

   XbrNumFormat( 'A', .T. )

   USE CUSTOMER NEW ALIAS "CUST" SHARED VIA "DBFCDX"

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0, - 14 BOLD

   DEFINE DIALOG oDlg SIZE 700, 400 PIXEL FONT oFont

   oDlg:lHelpIcon := .F.

   @ 10, 10 XBROWSE oBrw SIZE - 10, - 10 PIXEL OF oDlg ;
      DATASOURCE "CUST"                                ;
      COLUMNS "FIRST", "CITY", "AGE", "SALARY"         ;
      CELL LINES NOBORDER

   WITH OBJECT oBrw:InsCol( 1 )

      :bEditValue    := {|| AScan( oBrw:aSelected, oBrw:BookMark ) > 0 }
      :SetCheck()
      :nHeadBmpNo    := {|| If( Len( oBrw:aSelected ) == oBrw:nLen, 1, 2 ) }

   END

   WITH OBJECT oBrw

      :nMarqueeStyle := MARQSTYLE_HIGHLROWMS // multisel does the job
      // :nMarqueeStyle := MARQSTYLE_HIGHLROW
      :lMultiSelect  := .F.
      :bClrSelFocus  := {|| { CLR_BLACK, CLR_HGRAY } }
      :nStretchCol   := 3

      :aCols[ 1 ]:bClrSelFocus := {|| {  CLR_BLACK, CLR_WHITE } }

      :bLClicked     := {| r, c, f, oBrw | If( oBrw:MouseColPos( c ) == 1, ;
         If( ( f := AScan( oBrw:aSelected, oBrw:BookMark ) ) == 0,         ;
         AAdd( oBrw:aSelected, oBrw:BookMark ),                            ;
         ADel( oBrw:aSelected, f, .T. ) ), NIL ),                          ;
         oBrw:RefreshCurrent() }

   :CreateFromCode()

   END

   ACTIVATE DIALOG oDlg CENTERED

   RELEASE FONT oFont

RETURN NIL

// FIN / END
Regards, saludos.
Thank You Karinha, works great!]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Copy Paste problem in TGet (Fwh 24.02) :: Author Horizon]]> 2025-02-20T05:34:38-07:00 2025-02-20T05:34:38-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45439&p=277790#p277790
This is the sample app.

Code: Select all | Expand

#include "FiveWin.ch"

function TestGetPic

   local oDlg, oGet
   local cGet  := "123456789012345"

   DEFINE DIALOG oDlg SIZE 200,200 PIXEL TRUEPIXEL
   @ 30,30 GET oGet VAR cGet ;
      SIZE 150,20 PIXEL OF oDlg
   @ 80,30 BUTTON "OK" SIZE 80,30 PIXEL OF oDlg ACTION (oDlg:End())

   ACTIVATE DIALOG oDlg CENTERED
   
   ? "cGet = ",cGet

return nil
1. Compile and run app.
2. "6789012345" copy this. (select numbers between quotation marks)
3. focus on app that is compiled before.
4. Select all in Get. and paste (selected text "6789012345" in 2. order)
5. The oGet shows only "6789012345" that is should be.
6. press OK button.
7. cGet variables says "678901234512345"

I think It should be "6789012345".

Any idea? (I use fwh 24.02 and harbour 32 bits)]]>

This is the sample app.

Code: Select all | Expand

#include "FiveWin.ch"

function TestGetPic

   local oDlg, oGet
   local cGet  := "123456789012345"

   DEFINE DIALOG oDlg SIZE 200,200 PIXEL TRUEPIXEL
   @ 30,30 GET oGet VAR cGet ;
      SIZE 150,20 PIXEL OF oDlg
   @ 80,30 BUTTON "OK" SIZE 80,30 PIXEL OF oDlg ACTION (oDlg:End())

   ACTIVATE DIALOG oDlg CENTERED
   
   ? "cGet = ",cGet

return nil
1. Compile and run app.
2. "6789012345" copy this. (select numbers between quotation marks)
3. focus on app that is compiled before.
4. Select all in Get. and paste (selected text "6789012345" in 2. order)
5. The oGet shows only "6789012345" that is should be.
6. press OK button.
7. cGet variables says "678901234512345"

I think It should be "6789012345".

Any idea? (I use fwh 24.02 and harbour 32 bits)]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy Paste problem in TGet (Fwh 24.02) :: Reply by karinha]]> 2025-02-20T08:23:28-07:00 2025-02-20T08:23:28-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45439&p=277792#p277792

Code: Select all | Expand

// C:\FWH\SAMPLES\PASTECOP.PRG

#Include "FiveWin.ch"

FUNCTION TestGetPic()

   LOCAL oDlg, oGet
   LOCAL cGet  := "123456789012345"

   DEFINE DIALOG oDlg SIZE 200, 200 PIXEL TRUEPIXEL

   oDlg:lHelpIcon := .F.
                                      // 16 digits
   @ 30, 30 GET oGet VAR cGet PICTURE "@R 999999999999999" SIZE 150, 20 ;
      RIGHT PIXEL OF oDlg

   @ 80, 60 BUTTON "OK" SIZE 80, 30 PIXEL OF oDlg ACTION ( oDlg:End() ) CANCEL

   ACTIVATE DIALOG oDlg CENTERED

   ? "cGet = ", VAL( cGet )

RETURN NIL

// FIN / END
Regards, saludos.]]>

Code: Select all | Expand

// C:\FWH\SAMPLES\PASTECOP.PRG

#Include "FiveWin.ch"

FUNCTION TestGetPic()

   LOCAL oDlg, oGet
   LOCAL cGet  := "123456789012345"

   DEFINE DIALOG oDlg SIZE 200, 200 PIXEL TRUEPIXEL

   oDlg:lHelpIcon := .F.
                                      // 16 digits
   @ 30, 30 GET oGet VAR cGet PICTURE "@R 999999999999999" SIZE 150, 20 ;
      RIGHT PIXEL OF oDlg

   @ 80, 60 BUTTON "OK" SIZE 80, 30 PIXEL OF oDlg ACTION ( oDlg:End() ) CANCEL

   ACTIVATE DIALOG oDlg CENTERED

   ? "cGet = ", VAL( cGet )

RETURN NIL

// FIN / END
Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy Paste problem in TGet (Fwh 24.02) :: Reply by Euclides]]> 2025-02-21T05:20:08-07:00 2025-02-21T05:20:08-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45439&p=277824#p277824
When I have to paste something in the GET I do the following:

Code: Select all | Expand

   DEFINE CLIPBOARD oClp OF oDlg FORMAT TEXT
  ...
   @ 30, 20 GET oGet VAR cGet BITMAP "..\bitmaps\paste20.bmp" SIZE 120, 22 PIXEL OF oDlg ;
            ACTION (cGet := oClp:GetText(), oGet:Refresh()) 
   ...
   oClp:Close()
Regards, Saludos Euclides]]>

When I have to paste something in the GET I do the following:

Code: Select all | Expand

   DEFINE CLIPBOARD oClp OF oDlg FORMAT TEXT
  ...
   @ 30, 20 GET oGet VAR cGet BITMAP "..\bitmaps\paste20.bmp" SIZE 120, 22 PIXEL OF oDlg ;
            ACTION (cGet := oClp:GetText(), oGet:Refresh()) 
   ...
   oClp:Close()
Regards, Saludos Euclides]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy Paste problem in TGet (Fwh 24.02) :: Reply by Antonio Linares]]> 2025-02-21T05:38:45-07:00 2025-02-21T05:38:45-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45439&p=277825#p277825
Horizon wrote: Thu Feb 20, 2025 12:34 pm Hi,

This is the sample app.

Code: Select all | Expand

#include "FiveWin.ch"

function TestGetPic

   local oDlg, oGet
   local cGet  := "123456789012345"

   DEFINE DIALOG oDlg SIZE 200,200 PIXEL TRUEPIXEL
   @ 30,30 GET oGet VAR cGet ;
      SIZE 150,20 PIXEL OF oDlg
   @ 80,30 BUTTON "OK" SIZE 80,30 PIXEL OF oDlg ACTION (oDlg:End())

   ACTIVATE DIALOG oDlg CENTERED
   
   ? "cGet = ",cGet

return nil
1. Compile and run app.
2. "6789012345" copy this. (select numbers between quotation marks)
3. focus on app that is compiled before.
4. Select all in Get. and paste (selected text "6789012345" in 2. order)
5. The oGet shows only "6789012345" that is should be.
6. press OK button.
7. cGet variables says "678901234512345"

I think It should be "6789012345".

Any idea? (I use fwh 24.02 and harbour 32 bits)
Here it is working fine with FWH 25.01

Please download the EXE from here and test it:
https://github.com/FiveTechSoft/FWH_too ... orizon.exe]]>
Horizon wrote: Thu Feb 20, 2025 12:34 pm Hi,

This is the sample app.

Code: Select all | Expand

#include "FiveWin.ch"

function TestGetPic

   local oDlg, oGet
   local cGet  := "123456789012345"

   DEFINE DIALOG oDlg SIZE 200,200 PIXEL TRUEPIXEL
   @ 30,30 GET oGet VAR cGet ;
      SIZE 150,20 PIXEL OF oDlg
   @ 80,30 BUTTON "OK" SIZE 80,30 PIXEL OF oDlg ACTION (oDlg:End())

   ACTIVATE DIALOG oDlg CENTERED
   
   ? "cGet = ",cGet

return nil
1. Compile and run app.
2. "6789012345" copy this. (select numbers between quotation marks)
3. focus on app that is compiled before.
4. Select all in Get. and paste (selected text "6789012345" in 2. order)
5. The oGet shows only "6789012345" that is should be.
6. press OK button.
7. cGet variables says "678901234512345"

I think It should be "6789012345".

Any idea? (I use fwh 24.02 and harbour 32 bits)
Here it is working fine with FWH 25.01

Please download the EXE from here and test it:
https://github.com/FiveTechSoft/FWH_too ... orizon.exe]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy Paste problem in TGet (Fwh 24.02) :: Reply by Horizon]]> 2025-02-21T08:50:14-07:00 2025-02-21T08:50:14-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45439&p=277842#p277842
Antonio Linares wrote: Fri Feb 21, 2025 12:38 pm
Horizon wrote: Thu Feb 20, 2025 12:34 pm Hi,

This is the sample app.

Code: Select all | Expand

#include "FiveWin.ch"

function TestGetPic

   local oDlg, oGet
   local cGet  := "123456789012345"

   DEFINE DIALOG oDlg SIZE 200,200 PIXEL TRUEPIXEL
   @ 30,30 GET oGet VAR cGet ;
      SIZE 150,20 PIXEL OF oDlg
   @ 80,30 BUTTON "OK" SIZE 80,30 PIXEL OF oDlg ACTION (oDlg:End())

   ACTIVATE DIALOG oDlg CENTERED
   
   ? "cGet = ",cGet

return nil
1. Compile and run app.
2. "6789012345" copy this. (select numbers between quotation marks)
3. focus on app that is compiled before.
4. Select all in Get. and paste (selected text "6789012345" in 2. order)
5. The oGet shows only "6789012345" that is should be.
6. press OK button.
7. cGet variables says "678901234512345"

I think It should be "6789012345".

Any idea? (I use fwh 24.02 and harbour 32 bits)
Here it is working fine with FWH 25.01

Please download the EXE from here and test it:
https://github.com/FiveTechSoft/FWH_too ... orizon.exe
Thank you Antonio.

I have downloaded and tried. It is working fine.

I use fwh 24.02. What should I do? (As you know, I could not use fwh 24.09)]]>
Antonio Linares wrote: Fri Feb 21, 2025 12:38 pm
Horizon wrote: Thu Feb 20, 2025 12:34 pm Hi,

This is the sample app.

Code: Select all | Expand

#include "FiveWin.ch"

function TestGetPic

   local oDlg, oGet
   local cGet  := "123456789012345"

   DEFINE DIALOG oDlg SIZE 200,200 PIXEL TRUEPIXEL
   @ 30,30 GET oGet VAR cGet ;
      SIZE 150,20 PIXEL OF oDlg
   @ 80,30 BUTTON "OK" SIZE 80,30 PIXEL OF oDlg ACTION (oDlg:End())

   ACTIVATE DIALOG oDlg CENTERED
   
   ? "cGet = ",cGet

return nil
1. Compile and run app.
2. "6789012345" copy this. (select numbers between quotation marks)
3. focus on app that is compiled before.
4. Select all in Get. and paste (selected text "6789012345" in 2. order)
5. The oGet shows only "6789012345" that is should be.
6. press OK button.
7. cGet variables says "678901234512345"

I think It should be "6789012345".

Any idea? (I use fwh 24.02 and harbour 32 bits)
Here it is working fine with FWH 25.01

Please download the EXE from here and test it:
https://github.com/FiveTechSoft/FWH_too ... orizon.exe
Thank you Antonio.

I have downloaded and tried. It is working fine.

I use fwh 24.02. What should I do? (As you know, I could not use fwh 24.09)]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy Paste problem in TGet (Fwh 24.02) :: Reply by karinha]]> 2025-02-21T09:22:42-07:00 2025-02-21T09:22:42-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45439&p=277847#p277847
Tks.

Regards. saludos.]]>

Tks.

Regards. saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copy Paste problem in TGet (Fwh 24.02) :: Reply by Antonio Linares]]> 2025-02-21T09:29:49-07:00 2025-02-21T09:29:49-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45439&p=277848#p277848
Horizon wrote: Fri Feb 21, 2025 3:50 pm
Antonio Linares wrote: Fri Feb 21, 2025 12:38 pm
Horizon wrote: Thu Feb 20, 2025 12:34 pm Hi,

This is the sample app.

Code: Select all | Expand

#include "FiveWin.ch"

function TestGetPic

   local oDlg, oGet
   local cGet  := "123456789012345"

   DEFINE DIALOG oDlg SIZE 200,200 PIXEL TRUEPIXEL
   @ 30,30 GET oGet VAR cGet ;
      SIZE 150,20 PIXEL OF oDlg
   @ 80,30 BUTTON "OK" SIZE 80,30 PIXEL OF oDlg ACTION (oDlg:End())

   ACTIVATE DIALOG oDlg CENTERED
   
   ? "cGet = ",cGet

return nil
1. Compile and run app.
2. "6789012345" copy this. (select numbers between quotation marks)
3. focus on app that is compiled before.
4. Select all in Get. and paste (selected text "6789012345" in 2. order)
5. The oGet shows only "6789012345" that is should be.
6. press OK button.
7. cGet variables says "678901234512345"

I think It should be "6789012345".

Any idea? (I use fwh 24.02 and harbour 32 bits)
Here it is working fine with FWH 25.01

Please download the EXE from here and test it:
https://github.com/FiveTechSoft/FWH_too ... orizon.exe
Thank you Antonio.

I have downloaded and tried. It is working fine.

I use fwh 24.02. What should I do? (As you know, I could not use fwh 24.09)
Upgrade to FWH 25.01]]>
Horizon wrote: Fri Feb 21, 2025 3:50 pm
Antonio Linares wrote: Fri Feb 21, 2025 12:38 pm
Horizon wrote: Thu Feb 20, 2025 12:34 pm Hi,

This is the sample app.

Code: Select all | Expand

#include "FiveWin.ch"

function TestGetPic

   local oDlg, oGet
   local cGet  := "123456789012345"

   DEFINE DIALOG oDlg SIZE 200,200 PIXEL TRUEPIXEL
   @ 30,30 GET oGet VAR cGet ;
      SIZE 150,20 PIXEL OF oDlg
   @ 80,30 BUTTON "OK" SIZE 80,30 PIXEL OF oDlg ACTION (oDlg:End())

   ACTIVATE DIALOG oDlg CENTERED
   
   ? "cGet = ",cGet

return nil
1. Compile and run app.
2. "6789012345" copy this. (select numbers between quotation marks)
3. focus on app that is compiled before.
4. Select all in Get. and paste (selected text "6789012345" in 2. order)
5. The oGet shows only "6789012345" that is should be.
6. press OK button.
7. cGet variables says "678901234512345"

I think It should be "6789012345".

Any idea? (I use fwh 24.02 and harbour 32 bits)
Here it is working fine with FWH 25.01

Please download the EXE from here and test it:
https://github.com/FiveTechSoft/FWH_too ... orizon.exe
Thank you Antonio.

I have downloaded and tried. It is working fine.

I use fwh 24.02. What should I do? (As you know, I could not use fwh 24.09)
Upgrade to FWH 25.01]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Odbc error on Linux :: Author Massimo Linossi]]> 2025-02-14T08:47:53-07:00 2025-02-14T08:47:53-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45418&p=277672#p277672 I wish to ask you a suggestion to find the I am making an error.
This bash on a Linux machine works perfectly. Using a command-line utility from MS I can extract some records from another server with SQL-Server.

Code: Select all | Expand

#!/bin/bash
cUser='admin'
cPass='Max61'
cServer='125.15.13.12'
cQuery="SELECT ut codice_cliente, rag nominativo, cf codice_fiscale, piv partita_iva FROM ute WHERE rag like '%MAX%'"
/opt/mssql-tools18/bin/sqlcmd -S $cServer -U $cUser -P $cPass -d BEG_DATI -p -Q "$cQuery" -C
exit 0
This code made on harbour on the same machine gives ERROR BASE/0 Parameter error: SQLCONNECT

Code: Select all | Expand

#require "hbodbc"
***********************************
Function Main()

LOCAL cConnString, hDbc, hStmt, cQuery, cResult, nFetch 

REQUEST HB_LANG_IT
HB_LANGSELECT("IT")
REQUEST DBFCDX
REQUEST DBFFPT
RddRegister( "DBFCDX", 1 )
RddSetDefault("DBFCDX")
SET(_SET_AUTORDER,1)
SET AUTOPEN ON

SET DATE BRITISH
SET DELETED ON
SET CENTURY ON
SET EPOCH TO YEAR(DATE())

// Define the ODBC connection string (replace with your actual details)
cConnString := "Driver={ODBC Driver 18 for SQL Server};Server=125.15.13.12;Database=SQL_DATI;UID=admin;PWD=Max61;"

// Initialize the connection handle (hDbc) using SQLConnect
hDbc := SQLConnect( cConnString )

// Check if the connection was successful

IF hDbc == NIL
    ? "Connection failed!"
    RETURN
ENDIF
   
Return nil 
Thanks a lot for your attention.
Massimo]]>
I wish to ask you a suggestion to find the I am making an error.
This bash on a Linux machine works perfectly. Using a command-line utility from MS I can extract some records from another server with SQL-Server.

Code: Select all | Expand

#!/bin/bash
cUser='admin'
cPass='Max61'
cServer='125.15.13.12'
cQuery="SELECT ut codice_cliente, rag nominativo, cf codice_fiscale, piv partita_iva FROM ute WHERE rag like '%MAX%'"
/opt/mssql-tools18/bin/sqlcmd -S $cServer -U $cUser -P $cPass -d BEG_DATI -p -Q "$cQuery" -C
exit 0
This code made on harbour on the same machine gives ERROR BASE/0 Parameter error: SQLCONNECT

Code: Select all | Expand

#require "hbodbc"
***********************************
Function Main()

LOCAL cConnString, hDbc, hStmt, cQuery, cResult, nFetch 

REQUEST HB_LANG_IT
HB_LANGSELECT("IT")
REQUEST DBFCDX
REQUEST DBFFPT
RddRegister( "DBFCDX", 1 )
RddSetDefault("DBFCDX")
SET(_SET_AUTORDER,1)
SET AUTOPEN ON

SET DATE BRITISH
SET DELETED ON
SET CENTURY ON
SET EPOCH TO YEAR(DATE())

// Define the ODBC connection string (replace with your actual details)
cConnString := "Driver={ODBC Driver 18 for SQL Server};Server=125.15.13.12;Database=SQL_DATI;UID=admin;PWD=Max61;"

// Initialize the connection handle (hDbc) using SQLConnect
hDbc := SQLConnect( cConnString )

// Check if the connection was successful

IF hDbc == NIL
    ? "Connection failed!"
    RETURN
ENDIF
   
Return nil 
Thanks a lot for your attention.
Massimo]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Odbc error on Linux :: Reply by karinha]]> 2025-02-14T09:06:56-07:00 2025-02-14T09:06:56-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45418&p=277675#p277675
https://www.linuxquestions.org/question ... 175642938/

Regards, saludos.]]>

https://www.linuxquestions.org/question ... 175642938/

Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Odbc error on Linux :: Reply by Massimo Linossi]]> 2025-02-14T12:09:55-07:00 2025-02-14T12:09:55-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45418&p=277680#p277680 But the problem is that I don't understand where is the error in the ODBC connection string for SQL-SERVER.
Using the MS connection utility works perfectly so the ODBC is correct.
Massimo]]>
But the problem is that I don't understand where is the error in the ODBC connection string for SQL-SERVER.
Using the MS connection utility works perfectly so the ODBC is correct.
Massimo]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Odbc error on Linux :: Reply by Baxajaun]]> 2025-02-22T06:51:11-07:00 2025-02-22T06:51:11-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45418&p=277869#p277869
From your bash code

Code: Select all | Expand

/opt/mssql-tools18/bin/sqlcmd -S $cServer -U $cUser -P $cPass -d BEG_DATI -p -Q "$cQuery" -C
and harbour code

Code: Select all | Expand

cConnString := "Driver={ODBC Driver 18 for SQL Server};Server=125.15.13.12;Database=SQL_DATI;UID=admin;PWD=Max61;"
In bash code database is BEG_DATI and in harbour code is SQL_DATI. Perhaps, this will be the problem.

Best regards,]]>

From your bash code

Code: Select all | Expand

/opt/mssql-tools18/bin/sqlcmd -S $cServer -U $cUser -P $cPass -d BEG_DATI -p -Q "$cQuery" -C
and harbour code

Code: Select all | Expand

cConnString := "Driver={ODBC Driver 18 for SQL Server};Server=125.15.13.12;Database=SQL_DATI;UID=admin;PWD=Max61;"
In bash code database is BEG_DATI and in harbour code is SQL_DATI. Perhaps, this will be the problem.

Best regards,]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Effect Pjama on Treport ( from Xbrowse) :: Author Silvio.Falconi]]> 2025-02-22T12:55:15-07:00 2025-02-22T12:55:15-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45447&p=277878#p277878
Image


to make report from xbrowse I use this

Code: Select all | Expand

 oBrw:Report( cTitle, , , ;
         { |oRep, oBrw| MySetUp( oRep, oBrw, oDbf,aGroup,nGroup,lEject,aCampi ) } )

Code: Select all | Expand

 
  function MySetUp( oRep, oBrw, oDbf,aGroup,nGroup,lEject,afields )
 ...
 
 oRep:oShdBrush := TBrush():New(,nRgb(219,229,241))
   oRep:bskip := { || IF(oRep:nCounter % 2 =0 , oRep:lShadow :=.F.,oRep:lShadow :=.T.) }
         AEval( oRep:aColumns, { | o | o:lShadow := ! o:lShadow } )
         
         
         .....
         
]]>

Image


to make report from xbrowse I use this

Code: Select all | Expand

 oBrw:Report( cTitle, , , ;
         { |oRep, oBrw| MySetUp( oRep, oBrw, oDbf,aGroup,nGroup,lEject,aCampi ) } )

Code: Select all | Expand

 
  function MySetUp( oRep, oBrw, oDbf,aGroup,nGroup,lEject,afields )
 ...
 
 oRep:oShdBrush := TBrush():New(,nRgb(219,229,241))
   oRep:bskip := { || IF(oRep:nCounter % 2 =0 , oRep:lShadow :=.F.,oRep:lShadow :=.T.) }
         AEval( oRep:aColumns, { | o | o:lShadow := ! o:lShadow } )
         
         
         .....
         
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: insert a group on bSetUp of method report :: Author Silvio.Falconi]]> 2025-02-22T15:24:08-07:00 2025-02-22T15:24:08-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45448&p=277879#p277879
I cannot use report class directly

// Report( cTitle, .T., lModal, bSetUp, aGroupBy, cPDF, aCols )

How set a group on bSetUp ?

notice
I wish set a field as goup is not on xbrowse's columns but on dbf]]>

I cannot use report class directly

// Report( cTitle, .T., lModal, bSetUp, aGroupBy, cPDF, aCols )

How set a group on bSetUp ?

notice
I wish set a field as goup is not on xbrowse's columns but on dbf]]>
<![CDATA[FiveWin for Harbour/xHarbour :: class MyBrowse from Xbrowse NOT RUN :: Author Silvio.Falconi]]> 2025-02-25T03:40:39-07:00 2025-02-25T03:40:39-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45451&p=277920#p277920

Code: Select all | Expand

CLASS MyBrowse  FROM TXBrowse
   CLASSDATA lRegistered AS LOGICAL
    DATA aBtnBrow  AS ARRAY
    METHOD New (nRow, nCol, nWidth, nHeight, oWnd)
ENDCLASS

METHOD New(nRow, nCol, nWidth, nHeight, oWnd)  CLASS MyBrowse
   ::aBtnBrow:= array(5)
   return ::Super:New()



when I insert the xbrowse on a dialog it run ok

Image



if I insert the xbrowse on Folder not run , the xbrowse is showed on dialog and not on folder

Image


the sample:

Code: Select all | Expand

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

#define TXT_FOLDER1    " 1 folder "          
#define TXT_FOLDER2    " 2 folder "        
#define TXT_FOLDER3    " 3 folder "  
#define TXT_FOLDER4    " 4 folder "                  


Function test()
   local oDlg,oFld,Font,oBold
   local  nBottom   := 29
   local  nRight    := 60
   local  nWidth :=  Max( nRight * DLG_CHARPIX_W, 180 )
   local  nHeight := nBottom * DLG_CHARPIX_H
   local aArray := {}

 DEFINE DIALOG oDlg          ;
         SIZE nWidth, nHeight   PIXEL  ;
         TITLE "test con folder"

 @ 5, 3.5 FOLDER oFld ITEMS TXT_FOLDER1 , TXT_FOLDER2 ,TXT_FOLDER3 ,TXT_FOLDER4 ;
      SIZE oDlg:nWidth-242,oDlg:nbottom-240 PIXEL OF oDlg;
      OPTION 1

 @ 5, 2 XBROWSE  oLbx OF oFld:aDialogs[2] ;
         SIZE 150,105 PIXEL  CLASS MyBrowse()

       oLbx:SetArray(aArray)
       oLbx:CreateFromCode()

ACTIVATE DIALOG oDlg center
RETURN NIL



//-------------------------------------------------//
CLASS MyBrowse  FROM TXBrowse
   CLASSDATA lRegistered AS LOGICAL

    DATA aBtnBrow  AS ARRAY


    METHOD New (nRow, nCol, nWidth, nHeight, oWnd)


ENDCLASS

METHOD New(nRow, nCol, nWidth, nHeight, oWnd)  CLASS MyBrowse
   ::aBtnBrow:= array(5)
   return ::Super:New()
I tried also to insert

Code: Select all | Expand

@ 5, 2 XBROWSE  oLbx OF oFld:aDialogs[2] ;
         SIZE 150,105 PIXEL  CLASS MyBrowse():New (, , , , oFld:aDialogs[2])
]]>

Code: Select all | Expand

CLASS MyBrowse  FROM TXBrowse
   CLASSDATA lRegistered AS LOGICAL
    DATA aBtnBrow  AS ARRAY
    METHOD New (nRow, nCol, nWidth, nHeight, oWnd)
ENDCLASS

METHOD New(nRow, nCol, nWidth, nHeight, oWnd)  CLASS MyBrowse
   ::aBtnBrow:= array(5)
   return ::Super:New()



when I insert the xbrowse on a dialog it run ok

Image



if I insert the xbrowse on Folder not run , the xbrowse is showed on dialog and not on folder

Image


the sample:

Code: Select all | Expand

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

#define TXT_FOLDER1    " 1 folder "          
#define TXT_FOLDER2    " 2 folder "        
#define TXT_FOLDER3    " 3 folder "  
#define TXT_FOLDER4    " 4 folder "                  


Function test()
   local oDlg,oFld,Font,oBold
   local  nBottom   := 29
   local  nRight    := 60
   local  nWidth :=  Max( nRight * DLG_CHARPIX_W, 180 )
   local  nHeight := nBottom * DLG_CHARPIX_H
   local aArray := {}

 DEFINE DIALOG oDlg          ;
         SIZE nWidth, nHeight   PIXEL  ;
         TITLE "test con folder"

 @ 5, 3.5 FOLDER oFld ITEMS TXT_FOLDER1 , TXT_FOLDER2 ,TXT_FOLDER3 ,TXT_FOLDER4 ;
      SIZE oDlg:nWidth-242,oDlg:nbottom-240 PIXEL OF oDlg;
      OPTION 1

 @ 5, 2 XBROWSE  oLbx OF oFld:aDialogs[2] ;
         SIZE 150,105 PIXEL  CLASS MyBrowse()

       oLbx:SetArray(aArray)
       oLbx:CreateFromCode()

ACTIVATE DIALOG oDlg center
RETURN NIL



//-------------------------------------------------//
CLASS MyBrowse  FROM TXBrowse
   CLASSDATA lRegistered AS LOGICAL

    DATA aBtnBrow  AS ARRAY


    METHOD New (nRow, nCol, nWidth, nHeight, oWnd)


ENDCLASS

METHOD New(nRow, nCol, nWidth, nHeight, oWnd)  CLASS MyBrowse
   ::aBtnBrow:= array(5)
   return ::Super:New()
I tried also to insert

Code: Select all | Expand

@ 5, 2 XBROWSE  oLbx OF oFld:aDialogs[2] ;
         SIZE 150,105 PIXEL  CLASS MyBrowse():New (, , , , oFld:aDialogs[2])
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Incorrect Font Display :: Reply by nageswaragunupudi]]> 2025-02-07T10:37:41-07:00 2025-02-07T10:37:41-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45205&p=277489#p277489
Can you please provide me your email address?
Or please write to my email
nageswaragunupudi[at]gmail[dot]com]]>

Can you please provide me your email address?
Or please write to my email
nageswaragunupudi[at]gmail[dot]com]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Incorrect Font Display :: Reply by nageswaragunupudi]]> 2025-02-25T06:36:52-07:00 2025-02-25T06:36:52-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45205&p=277926#p277926 <![CDATA[FiveWin for Harbour/xHarbour :: Report group and header :: Author Silvio.Falconi]]> 2025-02-24T06:33:18-07:00 2025-02-24T06:33:18-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45450&p=277899#p277899
I saw there is the command for make a group

Code: Select all | Expand

 GROUP ON Test->State ;
           FOOTER "Total State "+oReport:aGroups[1]:cValue+ ;
                  " ("+ltrim(str(oReport:aGroups[1]:nCounter))+")" ;
           FONT 2 ;
           EJECT

If I wish create a dialog before the rep10.prg and make a selection by user for select with a combobox the group comand How I must make ?

sample

Code: Select all | Expand

@ 12, 10 COMBOBOX oRag[2] VAR nGroup ITEMS  aGroup  OF oDlgOptions SIZE 300, 30 PIXEL FONT oFont HEIGHTGET 16 

How do I connect the user's choice to the group that has to make the report class?

then on header ( rep10)

Code: Select all | Expand

  REPORT oReport TITLE  "*** My First Report ***"  ;
          FONT oFont1, oFont2 ;
          PREVIEW
I with insert the pages and the total pages

I tried with

local nTotalpages:= oReport:oDevice:cLastPage

HEADER ' ', "Data: "+dtoc(date())+ " Pagina.: "+str(oReport:nPage,3)+"/"+nTotalpages

But not run]]>

I saw there is the command for make a group

Code: Select all | Expand

 GROUP ON Test->State ;
           FOOTER "Total State "+oReport:aGroups[1]:cValue+ ;
                  " ("+ltrim(str(oReport:aGroups[1]:nCounter))+")" ;
           FONT 2 ;
           EJECT

If I wish create a dialog before the rep10.prg and make a selection by user for select with a combobox the group comand How I must make ?

sample

Code: Select all | Expand

@ 12, 10 COMBOBOX oRag[2] VAR nGroup ITEMS  aGroup  OF oDlgOptions SIZE 300, 30 PIXEL FONT oFont HEIGHTGET 16 

How do I connect the user's choice to the group that has to make the report class?

then on header ( rep10)

Code: Select all | Expand

  REPORT oReport TITLE  "*** My First Report ***"  ;
          FONT oFont1, oFont2 ;
          PREVIEW
I with insert the pages and the total pages

I tried with

local nTotalpages:= oReport:oDevice:cLastPage

HEADER ' ', "Data: "+dtoc(date())+ " Pagina.: "+str(oReport:nPage,3)+"/"+nTotalpages

But not run]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Report group and header :: Reply by Antonio Linares]]> 2025-02-24T09:58:48-07:00 2025-02-24T09:58:48-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45450&p=277903#p277903
Using the xcommand you get the oGroup object:

Code: Select all | Expand

#xcommand GROUP [ <oRptGrp> ] ;
                [ ON <bGroup> ] ;
                [ HEADER <bHead> ] ;
                [ FOOTER <bFoot> ] ;
                [ FONT <uFont> ] ;
                [ <lEject:EJECT> ] ;
        => ;
        [ <oRptGrp> := ] RptAddGroup( <{bGroup}>, <{bHead}>, ;
                <{bFoot}>, <{uFont}>, <.lEject.> )
So you can modify the oGroup DATAs:

Code: Select all | Expand

     DATA oReport
     DATA aTotal
     DATA bGroup, bHeader, bFooter, bHeadFont, bFootFont
     DATA cValue, cOldValue
     DATA nCounter, nHeaderHeight, nFooterHeight, nOrder
     DATA lEject, lNeedStart, lHeader, lFooter
     DATA Cargo
]]>

Using the xcommand you get the oGroup object:

Code: Select all | Expand

#xcommand GROUP [ <oRptGrp> ] ;
                [ ON <bGroup> ] ;
                [ HEADER <bHead> ] ;
                [ FOOTER <bFoot> ] ;
                [ FONT <uFont> ] ;
                [ <lEject:EJECT> ] ;
        => ;
        [ <oRptGrp> := ] RptAddGroup( <{bGroup}>, <{bHead}>, ;
                <{bFoot}>, <{uFont}>, <.lEject.> )
So you can modify the oGroup DATAs:

Code: Select all | Expand

     DATA oReport
     DATA aTotal
     DATA bGroup, bHeader, bFooter, bHeadFont, bFootFont
     DATA cValue, cOldValue
     DATA nCounter, nHeaderHeight, nFooterHeight, nOrder
     DATA lEject, lNeedStart, lHeader, lFooter
     DATA Cargo
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Report group and header :: Reply by Silvio.Falconi]]> 2025-02-25T03:34:59-07:00 2025-02-25T03:34:59-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45450&p=277918#p277918
Antonio Linares wrote: Mon Feb 24, 2025 4:58 pm Dear Silvio,

Using the xcommand you get the oGroup object:

Code: Select all | Expand

#xcommand GROUP [ <oRptGrp> ] ;
                [ ON <bGroup> ] ;
                [ HEADER <bHead> ] ;
                [ FOOTER <bFoot> ] ;
                [ FONT <uFont> ] ;
                [ <lEject:EJECT> ] ;
        => ;
        [ <oRptGrp> := ] RptAddGroup( <{bGroup}>, <{bHead}>, ;
                <{bFoot}>, <{uFont}>, <.lEject.> )
So you can modify the oGroup DATAs:

Code: Select all | Expand

     DATA oReport
     DATA aTotal
     DATA bGroup, bHeader, bFooter, bHeadFont, bFootFont
     DATA cValue, cOldValue
     DATA nCounter, nHeaderHeight, nFooterHeight, nOrder
     DATA lEject, lNeedStart, lHeader, lFooter
     DATA Cargo
as I already explained to you, it's not that I don't know how to do the GROUP in the REPORT CLASS

the problem is different


Image


I want to let the user select the group to group through a combobox, I use Tdatabase

1) if I use the xbrowse bsetup ( oBrw:report)

Code: Select all | Expand

AAdd(oRep:aGroups,trGroup():New( bCampo2( afields, nGroup,oDbf ),; //field
{|| aGroup[nGroup]+" :"+oRep:aGroups[1]:cValue},; //header
{|| "Total "+aGroup[nGroup]+": "+oRep:aGroups[1]:cValue+" ("+ltrim(str(oRep:aGroups[1]:nCounter))+")"},; //footer
{|| 1 },; // Font
.f.,oRep))


Code: Select all | Expand

Static function bCampo2( aCampos, nFor,oDbf ) //tdatabase
return (fieldWBlock(aCampos[nFor],oDbf:nArea ))

2) if I use the Report class directly
I have difficulty inserting a Macro example:

Code: Select all | Expand

fieldname:= agroup[nselect][1]
fieldtitle:= agroup[nselect][2]

GROUP ON ::oDbf:&fieldname;
HEADER fieldtitle +"» "+::oReport:aGroups[1]:cValue ;
FOOTER fieldtitle +"» "+::oReport:aGroups[1]:cValue +;
"("+ltrim(str(::oReport:aGroups[1]:nCounter))+")" ;
FONT 1
]]>
Antonio Linares wrote: Mon Feb 24, 2025 4:58 pm Dear Silvio,

Using the xcommand you get the oGroup object:

Code: Select all | Expand

#xcommand GROUP [ <oRptGrp> ] ;
                [ ON <bGroup> ] ;
                [ HEADER <bHead> ] ;
                [ FOOTER <bFoot> ] ;
                [ FONT <uFont> ] ;
                [ <lEject:EJECT> ] ;
        => ;
        [ <oRptGrp> := ] RptAddGroup( <{bGroup}>, <{bHead}>, ;
                <{bFoot}>, <{uFont}>, <.lEject.> )
So you can modify the oGroup DATAs:

Code: Select all | Expand

     DATA oReport
     DATA aTotal
     DATA bGroup, bHeader, bFooter, bHeadFont, bFootFont
     DATA cValue, cOldValue
     DATA nCounter, nHeaderHeight, nFooterHeight, nOrder
     DATA lEject, lNeedStart, lHeader, lFooter
     DATA Cargo
as I already explained to you, it's not that I don't know how to do the GROUP in the REPORT CLASS

the problem is different


Image


I want to let the user select the group to group through a combobox, I use Tdatabase

1) if I use the xbrowse bsetup ( oBrw:report)

Code: Select all | Expand

AAdd(oRep:aGroups,trGroup():New( bCampo2( afields, nGroup,oDbf ),; //field
{|| aGroup[nGroup]+" :"+oRep:aGroups[1]:cValue},; //header
{|| "Total "+aGroup[nGroup]+": "+oRep:aGroups[1]:cValue+" ("+ltrim(str(oRep:aGroups[1]:nCounter))+")"},; //footer
{|| 1 },; // Font
.f.,oRep))


Code: Select all | Expand

Static function bCampo2( aCampos, nFor,oDbf ) //tdatabase
return (fieldWBlock(aCampos[nFor],oDbf:nArea ))

2) if I use the Report class directly
I have difficulty inserting a Macro example:

Code: Select all | Expand

fieldname:= agroup[nselect][1]
fieldtitle:= agroup[nselect][2]

GROUP ON ::oDbf:&fieldname;
HEADER fieldtitle +"» "+::oReport:aGroups[1]:cValue ;
FOOTER fieldtitle +"» "+::oReport:aGroups[1]:cValue +;
"("+ltrim(str(::oReport:aGroups[1]:nCounter))+")" ;
FONT 1
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Report group and header :: Reply by Silvio.Falconi]]> 2025-02-25T06:10:44-07:00 2025-02-25T06:10:44-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45450&p=277925#p277925 changed the selection combobox putting "none" in third place

Image

then before to call oBrw:report() I made

Code: Select all | Expand

 
    If nGroup>1
         aGroupby  := {nGroup}
      elseif  nGroup==3   //none
         aGroupby  := {}
      Endif

//index the dbf
   IF  oDbf != NIL
      If nGroup >1  .and.  nGroup < 3
        oDbf:setorder(nGroup)
        oDbf:gotop()
        oBrw:oDbf:SetOrder(nGroup)
        oBrw:oDbf:Gotop()
        xbrowser oBrw:odbf
        xbrowser oDbf

     elseif  nGroup==3    //none
        oBrw:SetOrder()
      Endif
  Endif
  
  

call oBrw:report

oBrw:Report( cTitle, , , ;
{ |oRep, oBrw| MySetUp( oRep, oBrw, oDbf,aGroup,nGroup,lEject,aCampi ) },,,aCols )

this is the result of group

Image


two questions

1) I wish a line after the header of group where you see the orange arrow

Image


2) the alternate lines do not work, I tried with the normal report class and with these commands it seems to work

on report normal

Code: Select all | Expand


oReport:oShdBrush  := TBrush():New(,nRgb(219,229,241))
     AEval( oReport:aColumns, { | o | o:lShadow := ! o:lShadow } )
    oReport:bStartLine := { || IF(oReport:nCounter % 2 = 0 , oReport:lShadow :=.F.,oReport:lShadow :=.T.)   }

If I insert the same lines on mysetup of xbrowse

Code: Select all | Expand

 
    oRep:oShdBrush := TBrush():New(,nRgb(219,229,241))
     AEval( oRep:aColumns, { | o | o:lShadow := ! o:lShadow } )
     oRep:bStartLine := { || IF(oRep:nCounter % 2 = 0 , oRep:lShadow :=.F.,oRep:lShadow :=.T.)   }
Not run, why ?


but I discovered a bug a long time ago

I 'm talking of MakeRepCol( oRep, oXCol ) function

I discovered when call RptAddColumn() shadow value is .f.

Code: Select all | Expand

oCol := RptAddColumn( aHeader, nil ,;
                            { bData }, nSize, nil ,;
                            nil, nil, nil ,;
                            "RIGHT", .F., .F., nil, ;
                            nil, nil, ;
                            nil, nil, nil, nil, nil, ;
                            nil, nil, nil, nil, nil, nil, ;
                            nil, ;
                            XEval( oxCol:nProgTot , oxCol ), aClr )
the lshadow is the ten value and it is FALSE

question
how can it work if the value is always false?]]>
changed the selection combobox putting "none" in third place

Image

then before to call oBrw:report() I made

Code: Select all | Expand

 
    If nGroup>1
         aGroupby  := {nGroup}
      elseif  nGroup==3   //none
         aGroupby  := {}
      Endif

//index the dbf
   IF  oDbf != NIL
      If nGroup >1  .and.  nGroup < 3
        oDbf:setorder(nGroup)
        oDbf:gotop()
        oBrw:oDbf:SetOrder(nGroup)
        oBrw:oDbf:Gotop()
        xbrowser oBrw:odbf
        xbrowser oDbf

     elseif  nGroup==3    //none
        oBrw:SetOrder()
      Endif
  Endif
  
  

call oBrw:report

oBrw:Report( cTitle, , , ;
{ |oRep, oBrw| MySetUp( oRep, oBrw, oDbf,aGroup,nGroup,lEject,aCampi ) },,,aCols )

this is the result of group

Image


two questions

1) I wish a line after the header of group where you see the orange arrow

Image


2) the alternate lines do not work, I tried with the normal report class and with these commands it seems to work

on report normal

Code: Select all | Expand


oReport:oShdBrush  := TBrush():New(,nRgb(219,229,241))
     AEval( oReport:aColumns, { | o | o:lShadow := ! o:lShadow } )
    oReport:bStartLine := { || IF(oReport:nCounter % 2 = 0 , oReport:lShadow :=.F.,oReport:lShadow :=.T.)   }

If I insert the same lines on mysetup of xbrowse

Code: Select all | Expand

 
    oRep:oShdBrush := TBrush():New(,nRgb(219,229,241))
     AEval( oRep:aColumns, { | o | o:lShadow := ! o:lShadow } )
     oRep:bStartLine := { || IF(oRep:nCounter % 2 = 0 , oRep:lShadow :=.F.,oRep:lShadow :=.T.)   }
Not run, why ?


but I discovered a bug a long time ago

I 'm talking of MakeRepCol( oRep, oXCol ) function

I discovered when call RptAddColumn() shadow value is .f.

Code: Select all | Expand

oCol := RptAddColumn( aHeader, nil ,;
                            { bData }, nSize, nil ,;
                            nil, nil, nil ,;
                            "RIGHT", .F., .F., nil, ;
                            nil, nil, ;
                            nil, nil, nil, nil, nil, ;
                            nil, nil, nil, nil, nil, nil, ;
                            nil, ;
                            XEval( oxCol:nProgTot , oxCol ), aClr )
the lshadow is the ten value and it is FALSE

question
how can it work if the value is always false?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Report group and header :: Reply by Silvio.Falconi]]> 2025-02-25T06:37:11-07:00 2025-02-25T06:37:11-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45450&p=277927#p277927 Solution for me


Report( cTitle, lPreview, lModal, bSetUp, aGroupBy, cPDF, aCols , lShadow )

local oRep, oPrn, oFont, oBold, uRet
local nFor, uBookMark
local oBrw := Self
local lAddCols := .T.
local nRows, nSel, n
local lEof := .f.
local lSetUpTwice := .f.
local nLevels
local nRowSel := ::nRowSel

DEFAULT cTitle := If( ::oWnd:ClassName == 'TPANEL', ::oWnd:oWnd:cTitle, ::oWnd:cTitle )
DEFAULT lPreview := .T.
DEFAULT lModal := .T.
DEFAULT lShadow :=.f.


....


for nFor := 1 to Len( aCols )
if AScan( aGroupBy, { |o| o:nCreationOrder == aCols[ nFor ]:nCreationOrder } ) == 0
MakeRepCol( oRep, aCols[ nFor ], lShadow )
endif


static function MakeRepCol( oRep, oXCol,lshadow )
....
oCol := RptAddColumn( aHeader, nil ,;
{ bData }, nSize, nil ,;
nil, nil, nil ,;
"RIGHT", lShadow, .F., nil, ;
nil, nil, ;
nil, nil, nil, nil, nil, ;
nil, nil, nil, nil, nil, nil, ;
nil, ;
XEval( oxCol:nProgTot , oxCol ), aClr )


suggestions ?]]>
Solution for me


Report( cTitle, lPreview, lModal, bSetUp, aGroupBy, cPDF, aCols , lShadow )

local oRep, oPrn, oFont, oBold, uRet
local nFor, uBookMark
local oBrw := Self
local lAddCols := .T.
local nRows, nSel, n
local lEof := .f.
local lSetUpTwice := .f.
local nLevels
local nRowSel := ::nRowSel

DEFAULT cTitle := If( ::oWnd:ClassName == 'TPANEL', ::oWnd:oWnd:cTitle, ::oWnd:cTitle )
DEFAULT lPreview := .T.
DEFAULT lModal := .T.
DEFAULT lShadow :=.f.


....


for nFor := 1 to Len( aCols )
if AScan( aGroupBy, { |o| o:nCreationOrder == aCols[ nFor ]:nCreationOrder } ) == 0
MakeRepCol( oRep, aCols[ nFor ], lShadow )
endif


static function MakeRepCol( oRep, oXCol,lshadow )
....
oCol := RptAddColumn( aHeader, nil ,;
{ bData }, nSize, nil ,;
nil, nil, nil ,;
"RIGHT", lShadow, .F., nil, ;
nil, nil, ;
nil, nil, nil, nil, nil, ;
nil, nil, nil, nil, nil, nil, ;
nil, ;
XEval( oxCol:nProgTot , oxCol ), aClr )


suggestions ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Text scroll and time graph :: Author JoséQuintas]]> 2025-02-10T06:46:26-07:00 2025-02-10T06:46:26-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45400&p=277565#p277565 Image

Image is my MySQL backup from harbour.
I do not think how to do this on fivewin.

Graph routine is simple, I update each second, to do not slow proccess.

Code: Select all | Expand

/*
ZE_GRAFTEMPO - GRAFICOS DE PROCESSAMENTO
1990.05 - José Quintas
*/

#include "inkey.ch"
#include "set.ch"

#define GRAFMODE 1
#define GRAFTIME 2
#define GRAF_SEC_OLD  1
#define GRAF_SEC_INI  2
#define GRAF_TXT_BAR  3
#define GRAF_TXT_TEXT 4

FUNCTION GrafProc( nRow, nCol )

   THREAD STATIC GrafInfo := { 1, "X" }
   LOCAL mSetDevice

   hb_Default( @nRow, MaxRow() - 1 )
   hb_Default( @nCol, MaxCol() - 2 )
   IF GrafInfo[ GRAFTIME ] != Time()
      mSetDevice := Set( _SET_DEVICE, "SCREEN" )
      @ nRow, nCol SAY "(" + Substr( "|/-\", GrafInfo[ GRAFMODE ], 1 ) + ")" COLOR SetColorMensagem()
      GrafInfo[ GRAFMODE ] = iif( GrafInfo[ GRAFMODE ] == 4, 1, GrafInfo[ GRAFMODE ] + 1 )
      Set( _SET_DEVICE, mSetDevice )
      GrafInfo[ GRAFTIME ] := Time()
   ENDIF

   RETURN .T.

FUNCTION GrafTempo( xContNow, xContTotal )

   THREAD STATIC aStatic := { 0, 0, "", "" }
   LOCAL nSecondsNow, nSecondsRemaining, nSecondsElapsed, nCont, nPos, cTxt, cCorAnt
   LOCAL nPercent, cTexto, mSetDevice

   xContNow := iif( xContNow == NIL, "", xContNow )
   IF Empty( aStatic[ GRAF_TXT_BAR ] )
      aStatic[ GRAF_TXT_BAR ] := Replicate( ".", MaxCol() )
      FOR nCont = 1 to 10
         nPos := Int( Len( aStatic[ GRAF_TXT_BAR ] ) / 10 * nCont )
         cTxt := lTrim( Str( nCont, 3 ) ) + "0%" + Chr(30)
         aStatic[ GRAF_TXT_BAR ] := Stuff( aStatic[ GRAF_TXT_BAR ], ( nPos - Len( cTxt ) ) + 1, Len( cTxt ), cTxt )
      NEXT
      aStatic[ GRAF_TXT_BAR ] := Chr(30) + aStatic[ GRAF_TXT_BAR ]
   ENDIF
   mSetDevice := Set( _SET_DEVICE, "SCREEN" )
   DO CASE
   CASE ValType( xContNow ) == "C"
      cTexto                  := xContNow
      aStatic[ GRAF_SEC_INI ] := Int( Seconds() )
   CASE xContTotal == NIL
      nPercent := xContNow
   CASE xContNow >= xContTotal
      nPercent := 100
   CASE xContTotal == 0
      nPercent := 0
   OTHERWISE
      nPercent := xContNow / xContTotal * 100
   ENDCASE
   xContNow   := iif( ValType( xContNow ) != "N", 0, xContNow )
   xContTotal := iif( ValType( xContTotal ) != "N", 0, xContTotal )

   cCorAnt := SetColor()
   SetColor( SetColorMensagem() )
   nSecondsNow := Int( Seconds() )
   IF nPercent == NIL
      aStatic[ GRAF_SEC_OLD ] := nSecondsNow
      Mensagem()
      @ MaxRow(), 0 SAY aStatic[ GRAF_TXT_BAR ]
      aStatic[ GRAF_TXT_TEXT ] := cTexto

   ELSEIF nPercent == 100 .OR. ( nSecondsNow != aStatic[ GRAF_SEC_OLD ] .AND. nPercent != 0 )
      aStatic[ GRAF_SEC_OLD ] := nSecondsNow
      nSecondsElapsed   := nSecondsNow - aStatic[ GRAF_SEC_INI ]
      DO WHILE nSecondsElapsed < 0
         nSecondsElapsed += ( 24 * 3600 ) // Acima de 24 horas
      ENDDO
      nSecondsRemaining := nSecondsElapsed / nPercent * ( 100 - nPercent )
      @ MaxRow()-1, 0 SAY aStatic[ GRAF_TXT_TEXT ] + " " + Ltrim( Transform( xContNow, PicVal(14,0) ) ) + "/" + Ltrim( Transform( xContTotal, PicVal(14,0) ) )
      cTxt := "Gasto:"
      cTxt += " " + Ltrim( Str( Int( nSecondsElapsed / 3600 ), 10 ) ) + "h"
      cTxt += " " + Ltrim( Str( Mod( Int( nSecondsElapsed / 60 ), 60 ), 10, 0 ) ) + "m"
      cTxt += " " + Ltrim( Str( Mod( nSecondsElapsed, 60 ), 10, 0 ) ) + "s"
      cTxt += Space(3)
      cTxt += "Falta:"
      cTxt += " " + Ltrim( Str( Int( nSecondsRemaining / 3600 ), 10 ) ) + "h"
      cTxt += " " + Ltrim( Str( Mod( Int( nSecondsRemaining / 60 ), 60 ), 10, 0 ) ) + "m"
      cTxt += " " + Ltrim( Str( Mod( nSecondsRemaining, 60 ), 10, 0 ) ) + "s"
      @ Row(), Col() SAY Padl( cTxt, MaxCol() - Col() - 4 )
      GrafProc()
      @ MaxRow(), 0 SAY Left( aStatic[ GRAF_TXT_BAR ], Len( aStatic[ GRAF_TXT_BAR ] ) * nPercent / 100 ) COLOR SetColorFocus()
   ENDIF
   SetColor( cCorAnt )
   SET( _SET_DEVICE, mSetDevice )

   RETURN .T.
I can use automatic as example:

Code: Select all | Expand

USE ( file )
GrafTempo( "processing" )
DO WHILE ! Eof()
   GrafTempo( RecNo(), LastRec() )
   SKIP
ENDDO
or

Code: Select all | Expand

USE ( file )
INDEX ON field->x FOR GrafTempo( RecNo(), LastRec() )
or manual

Code: Select all | Expand

USE ( File ) INDEX ( file )
nAtual := 0
nTotal := LastRec()
DO WHILE ! Eof()
   GrafTempo( nAtual++, nTotal )
   SKIP
ENDDO
Image

On minigui I use windows type panel, to me it is like an user control.
It is simple too.

main dialog

Code: Select all | Expand


#include "hmg.ch"
#include "i_altsyntax.ch"

REQUEST HB_CODEPAGE_PTISO

PROCEDURE Main

   LOCAL oControl, aControlList := Array(6), nColor, nRow
   LOCAL nCurrent := 0, nTotal := 100, xDlg := "A"

   DEFINE WINDOW (xDlg) ;
      ROW 0 COL 0 ;
      WIDTH 1024 HEIGHT 768 ;
      TITLE "test" ;
      WINDOWTYPE MAIN ;
      ON INIT SetBackImage( xDlg )

      FOR EACH oControl, nRow, nColor IN aControlList, ;
         { 80, 160, 240, 320, 400, 480 }, ;
         { COLOR_SKYBLUE, COLOR_PERU, COLOR_GOLD, COLOR_VIOLET, COLOR_PEACHPUFF, COLOR_YELLOWGREEN }
         oControl := GraphTime():New( "A", nRow, 10, 500, 50, "working", nColor )
      NEXT

      DEFINE BUTTON BUTTON_1
         ROW      40
         COL      10
         CAPTION      'Click Me!'
         ACTION      AEval( aControlList, { | e | e:SetValues( nCurrent += 2, nTotal ) } )
         DEFAULT      .T.
      END BUTTON

   END WINDOW

   ACTIVATE WINDOW A

   RETURN

FUNCTION SetBackImage( xDlg )

   LOCAL hBrush

   DoMethod( xDlg, "DISABLEUPDATE" )
   DEFINE BKGBRUSH hBrush PATTERN IMAGE "imw10.png" IN ( xDlg )
   DoMethod( xDlg, "ENABLEUPDATE" )
   (hBrush)

   RETURN Nil
The "user control", using window type panel, and textbox over textbox

Code: Select all | Expand

/*
graphtime - graphic with time calculate
*/

#include "hmg.ch"
#include "i_altsyntax.ch"
#include "i_wincolor.ch"
#include "hbclass.ch"

STATIC nWindow := 1

CREATE CLASS GraphTime

   VAR xDlg
   VAR Parent
   VAR cTimeShow   INIT Time()
   VAR nSecondsInit
   VAR nSecondsOld
   VAR cText
   METHOD New( Parent, nRow, nCol, nWidth, nHeight, cTitle, xColor )
   METHOD SetValues( nCurrent, nTotal )

   ENDCLASS

METHOD SetValues( nCurrent, nTotal ) CLASS GraphTime

   LOCAL nSecNow, nSecElapsed, nSecRemaining, nPercent, nNewWidth, cCaption

   nCurrent := Min( nCurrent, nTotal )
   nSecNow := Int( Seconds() )
   IF nSecNow != ::nSecondsOld .AND. nCurrent != 0
      nNewWidth := Int( GetProperty( ::xDlg, "label1", "WIDTH" ) * nCurrent / nTotal )
      SetProperty( ::xDlg, "label3", "WIDTH", nNewWidth )
      ::nSecondsOld := nSecNow

      nSecElapsed   := nSecNow - ::nSecondsInit
      nSecRemaining := nSecElapsed / nCurrent * ( nTotal - nCurrent )
      nPercent := nCurrent * 100 / nTotal
      SetProperty( ::xDlg, "label1", "VALUE", ;
         Ltrim( Str( nCurrent ) ) + "/" + Ltrim( Str( nTotal ) ) + " " + ;
         "Elapsed " + SecToTime( nSecElapsed ) + ;
         " Remain " + SecToTime( nSecRemaining ) )
      cCaption := ::cText + " " + Ltrim( Str( nPercent ) ) + "%"
      SetProperty( ::xDlg, "label2", "VALUE", cCaption )
      SetProperty( ::xDlg, "label3", "VALUE", cCaption )
   ENDIF

   RETURN Nil

METHOD New( Parent, nRow, nCol, nWidth, nHeight, cTitle, xColor ) CLASS GraphTime

   ::cText := cTitle
   ::Parent := Parent
   ::nSecondsInit := Int( Seconds() )
   ::nSecondsOld  := Int( Seconds() )
   ::xDlg := "GTIME" + StrZero( nWindow++, 3 )

   DEFINE WINDOW ( ::xDlg ) ;
      ROW nRow ;
      COL nCol ;
      WIDTH nWidth ;
      HEIGHT nHeight ;
      WINDOWTYPE PANEL

      DEFINE LABEL ( "label1" )
         PARENT ( ::xDlg )
         ROW 10
         COL 10
         VALUE ""
         BORDER .T.
         WIDTH nWidth - 30
         HEIGHT 20
         BORDER .T.
      END LABEL

      DEFINE LABEL ( "label2" )
         PARENT ( ::xDlg )
         ROW 30
         COL 10
         VALUE ::cText
         BORDER .T.
         WIDTH nWidth - 30
         HEIGHT 20
         BORDER .T.
      END LABEL

      DEFINE LABEL ( "label3" )
         PARENT ( ::xDlg )
         ROW 30
         COL 10
         VALUE ::cText
         WIDTH 1
         HEIGHT 20
         BACKCOLOR xColor
         BORDER .T.
      END LABEL
   END WINDOW

   RETURN Self
At momment I do not know what can be used to anything like this on fivewin.
For Graph and for scroll text.

Note: post routines because they can be a reference to new ones.

For MySQL backup I get quantity and record count.

Code: Select all | Expand

   Mensagem( "Fazendo backup da base SQL" )

   WITH OBJECT cnSQL
      :Execute( "SHOW PROCEDURE STATUS WHERE db = DATABASE()" )
      nTotal += :RecordCount()
      :CloseRecordset()
      :Execute( "SHOW FUNCTION STATUS WHERE db = DATABASE()" )
      nTotal += :RecordCount()
      :CloseRecordset()
      :Execute( "SELECT table_name FROM information_schema.TABLES" + ;
         " WHERE table_schema = " + StringSQL( Lower( AppEmpresaApelido() ) ) + ;
         " AND  TABLE_TYPE = 'BASE TABLE'" )
      DO WHILE ! :Eof()
         nTotal += 1
         oTableRec := cnSQL:ExecuteReturnRS( "SELECT COUNT(*) AS QTD FROM " + cnSQL:String( "table_name" ) )
         nTotal += oTableRec:Fields( "QTD" ):Value
         oTableRec:Close()
         :MoveNext()
      ENDDO
      :CloseRecordset()
   ENDWITH

   GrafTempo( "Backup SQL" )
   nAtual := 0

   hFileOutput := fCreate( "backup" + Str( nBackupFileNum, 1 ) + ".sql", FC_NORMAL )
...
GrafTempo( nAtual, nTotal )
...
Note2: at momment I use table, procedure and function, I will add more types when use them.]]>
Image

Image is my MySQL backup from harbour.
I do not think how to do this on fivewin.

Graph routine is simple, I update each second, to do not slow proccess.

Code: Select all | Expand

/*
ZE_GRAFTEMPO - GRAFICOS DE PROCESSAMENTO
1990.05 - José Quintas
*/

#include "inkey.ch"
#include "set.ch"

#define GRAFMODE 1
#define GRAFTIME 2
#define GRAF_SEC_OLD  1
#define GRAF_SEC_INI  2
#define GRAF_TXT_BAR  3
#define GRAF_TXT_TEXT 4

FUNCTION GrafProc( nRow, nCol )

   THREAD STATIC GrafInfo := { 1, "X" }
   LOCAL mSetDevice

   hb_Default( @nRow, MaxRow() - 1 )
   hb_Default( @nCol, MaxCol() - 2 )
   IF GrafInfo[ GRAFTIME ] != Time()
      mSetDevice := Set( _SET_DEVICE, "SCREEN" )
      @ nRow, nCol SAY "(" + Substr( "|/-\", GrafInfo[ GRAFMODE ], 1 ) + ")" COLOR SetColorMensagem()
      GrafInfo[ GRAFMODE ] = iif( GrafInfo[ GRAFMODE ] == 4, 1, GrafInfo[ GRAFMODE ] + 1 )
      Set( _SET_DEVICE, mSetDevice )
      GrafInfo[ GRAFTIME ] := Time()
   ENDIF

   RETURN .T.

FUNCTION GrafTempo( xContNow, xContTotal )

   THREAD STATIC aStatic := { 0, 0, "", "" }
   LOCAL nSecondsNow, nSecondsRemaining, nSecondsElapsed, nCont, nPos, cTxt, cCorAnt
   LOCAL nPercent, cTexto, mSetDevice

   xContNow := iif( xContNow == NIL, "", xContNow )
   IF Empty( aStatic[ GRAF_TXT_BAR ] )
      aStatic[ GRAF_TXT_BAR ] := Replicate( ".", MaxCol() )
      FOR nCont = 1 to 10
         nPos := Int( Len( aStatic[ GRAF_TXT_BAR ] ) / 10 * nCont )
         cTxt := lTrim( Str( nCont, 3 ) ) + "0%" + Chr(30)
         aStatic[ GRAF_TXT_BAR ] := Stuff( aStatic[ GRAF_TXT_BAR ], ( nPos - Len( cTxt ) ) + 1, Len( cTxt ), cTxt )
      NEXT
      aStatic[ GRAF_TXT_BAR ] := Chr(30) + aStatic[ GRAF_TXT_BAR ]
   ENDIF
   mSetDevice := Set( _SET_DEVICE, "SCREEN" )
   DO CASE
   CASE ValType( xContNow ) == "C"
      cTexto                  := xContNow
      aStatic[ GRAF_SEC_INI ] := Int( Seconds() )
   CASE xContTotal == NIL
      nPercent := xContNow
   CASE xContNow >= xContTotal
      nPercent := 100
   CASE xContTotal == 0
      nPercent := 0
   OTHERWISE
      nPercent := xContNow / xContTotal * 100
   ENDCASE
   xContNow   := iif( ValType( xContNow ) != "N", 0, xContNow )
   xContTotal := iif( ValType( xContTotal ) != "N", 0, xContTotal )

   cCorAnt := SetColor()
   SetColor( SetColorMensagem() )
   nSecondsNow := Int( Seconds() )
   IF nPercent == NIL
      aStatic[ GRAF_SEC_OLD ] := nSecondsNow
      Mensagem()
      @ MaxRow(), 0 SAY aStatic[ GRAF_TXT_BAR ]
      aStatic[ GRAF_TXT_TEXT ] := cTexto

   ELSEIF nPercent == 100 .OR. ( nSecondsNow != aStatic[ GRAF_SEC_OLD ] .AND. nPercent != 0 )
      aStatic[ GRAF_SEC_OLD ] := nSecondsNow
      nSecondsElapsed   := nSecondsNow - aStatic[ GRAF_SEC_INI ]
      DO WHILE nSecondsElapsed < 0
         nSecondsElapsed += ( 24 * 3600 ) // Acima de 24 horas
      ENDDO
      nSecondsRemaining := nSecondsElapsed / nPercent * ( 100 - nPercent )
      @ MaxRow()-1, 0 SAY aStatic[ GRAF_TXT_TEXT ] + " " + Ltrim( Transform( xContNow, PicVal(14,0) ) ) + "/" + Ltrim( Transform( xContTotal, PicVal(14,0) ) )
      cTxt := "Gasto:"
      cTxt += " " + Ltrim( Str( Int( nSecondsElapsed / 3600 ), 10 ) ) + "h"
      cTxt += " " + Ltrim( Str( Mod( Int( nSecondsElapsed / 60 ), 60 ), 10, 0 ) ) + "m"
      cTxt += " " + Ltrim( Str( Mod( nSecondsElapsed, 60 ), 10, 0 ) ) + "s"
      cTxt += Space(3)
      cTxt += "Falta:"
      cTxt += " " + Ltrim( Str( Int( nSecondsRemaining / 3600 ), 10 ) ) + "h"
      cTxt += " " + Ltrim( Str( Mod( Int( nSecondsRemaining / 60 ), 60 ), 10, 0 ) ) + "m"
      cTxt += " " + Ltrim( Str( Mod( nSecondsRemaining, 60 ), 10, 0 ) ) + "s"
      @ Row(), Col() SAY Padl( cTxt, MaxCol() - Col() - 4 )
      GrafProc()
      @ MaxRow(), 0 SAY Left( aStatic[ GRAF_TXT_BAR ], Len( aStatic[ GRAF_TXT_BAR ] ) * nPercent / 100 ) COLOR SetColorFocus()
   ENDIF
   SetColor( cCorAnt )
   SET( _SET_DEVICE, mSetDevice )

   RETURN .T.
I can use automatic as example:

Code: Select all | Expand

USE ( file )
GrafTempo( "processing" )
DO WHILE ! Eof()
   GrafTempo( RecNo(), LastRec() )
   SKIP
ENDDO
or

Code: Select all | Expand

USE ( file )
INDEX ON field->x FOR GrafTempo( RecNo(), LastRec() )
or manual

Code: Select all | Expand

USE ( File ) INDEX ( file )
nAtual := 0
nTotal := LastRec()
DO WHILE ! Eof()
   GrafTempo( nAtual++, nTotal )
   SKIP
ENDDO
Image

On minigui I use windows type panel, to me it is like an user control.
It is simple too.

main dialog

Code: Select all | Expand


#include "hmg.ch"
#include "i_altsyntax.ch"

REQUEST HB_CODEPAGE_PTISO

PROCEDURE Main

   LOCAL oControl, aControlList := Array(6), nColor, nRow
   LOCAL nCurrent := 0, nTotal := 100, xDlg := "A"

   DEFINE WINDOW (xDlg) ;
      ROW 0 COL 0 ;
      WIDTH 1024 HEIGHT 768 ;
      TITLE "test" ;
      WINDOWTYPE MAIN ;
      ON INIT SetBackImage( xDlg )

      FOR EACH oControl, nRow, nColor IN aControlList, ;
         { 80, 160, 240, 320, 400, 480 }, ;
         { COLOR_SKYBLUE, COLOR_PERU, COLOR_GOLD, COLOR_VIOLET, COLOR_PEACHPUFF, COLOR_YELLOWGREEN }
         oControl := GraphTime():New( "A", nRow, 10, 500, 50, "working", nColor )
      NEXT

      DEFINE BUTTON BUTTON_1
         ROW      40
         COL      10
         CAPTION      'Click Me!'
         ACTION      AEval( aControlList, { | e | e:SetValues( nCurrent += 2, nTotal ) } )
         DEFAULT      .T.
      END BUTTON

   END WINDOW

   ACTIVATE WINDOW A

   RETURN

FUNCTION SetBackImage( xDlg )

   LOCAL hBrush

   DoMethod( xDlg, "DISABLEUPDATE" )
   DEFINE BKGBRUSH hBrush PATTERN IMAGE "imw10.png" IN ( xDlg )
   DoMethod( xDlg, "ENABLEUPDATE" )
   (hBrush)

   RETURN Nil
The "user control", using window type panel, and textbox over textbox

Code: Select all | Expand

/*
graphtime - graphic with time calculate
*/

#include "hmg.ch"
#include "i_altsyntax.ch"
#include "i_wincolor.ch"
#include "hbclass.ch"

STATIC nWindow := 1

CREATE CLASS GraphTime

   VAR xDlg
   VAR Parent
   VAR cTimeShow   INIT Time()
   VAR nSecondsInit
   VAR nSecondsOld
   VAR cText
   METHOD New( Parent, nRow, nCol, nWidth, nHeight, cTitle, xColor )
   METHOD SetValues( nCurrent, nTotal )

   ENDCLASS

METHOD SetValues( nCurrent, nTotal ) CLASS GraphTime

   LOCAL nSecNow, nSecElapsed, nSecRemaining, nPercent, nNewWidth, cCaption

   nCurrent := Min( nCurrent, nTotal )
   nSecNow := Int( Seconds() )
   IF nSecNow != ::nSecondsOld .AND. nCurrent != 0
      nNewWidth := Int( GetProperty( ::xDlg, "label1", "WIDTH" ) * nCurrent / nTotal )
      SetProperty( ::xDlg, "label3", "WIDTH", nNewWidth )
      ::nSecondsOld := nSecNow

      nSecElapsed   := nSecNow - ::nSecondsInit
      nSecRemaining := nSecElapsed / nCurrent * ( nTotal - nCurrent )
      nPercent := nCurrent * 100 / nTotal
      SetProperty( ::xDlg, "label1", "VALUE", ;
         Ltrim( Str( nCurrent ) ) + "/" + Ltrim( Str( nTotal ) ) + " " + ;
         "Elapsed " + SecToTime( nSecElapsed ) + ;
         " Remain " + SecToTime( nSecRemaining ) )
      cCaption := ::cText + " " + Ltrim( Str( nPercent ) ) + "%"
      SetProperty( ::xDlg, "label2", "VALUE", cCaption )
      SetProperty( ::xDlg, "label3", "VALUE", cCaption )
   ENDIF

   RETURN Nil

METHOD New( Parent, nRow, nCol, nWidth, nHeight, cTitle, xColor ) CLASS GraphTime

   ::cText := cTitle
   ::Parent := Parent
   ::nSecondsInit := Int( Seconds() )
   ::nSecondsOld  := Int( Seconds() )
   ::xDlg := "GTIME" + StrZero( nWindow++, 3 )

   DEFINE WINDOW ( ::xDlg ) ;
      ROW nRow ;
      COL nCol ;
      WIDTH nWidth ;
      HEIGHT nHeight ;
      WINDOWTYPE PANEL

      DEFINE LABEL ( "label1" )
         PARENT ( ::xDlg )
         ROW 10
         COL 10
         VALUE ""
         BORDER .T.
         WIDTH nWidth - 30
         HEIGHT 20
         BORDER .T.
      END LABEL

      DEFINE LABEL ( "label2" )
         PARENT ( ::xDlg )
         ROW 30
         COL 10
         VALUE ::cText
         BORDER .T.
         WIDTH nWidth - 30
         HEIGHT 20
         BORDER .T.
      END LABEL

      DEFINE LABEL ( "label3" )
         PARENT ( ::xDlg )
         ROW 30
         COL 10
         VALUE ::cText
         WIDTH 1
         HEIGHT 20
         BACKCOLOR xColor
         BORDER .T.
      END LABEL
   END WINDOW

   RETURN Self
At momment I do not know what can be used to anything like this on fivewin.
For Graph and for scroll text.

Note: post routines because they can be a reference to new ones.

For MySQL backup I get quantity and record count.

Code: Select all | Expand

   Mensagem( "Fazendo backup da base SQL" )

   WITH OBJECT cnSQL
      :Execute( "SHOW PROCEDURE STATUS WHERE db = DATABASE()" )
      nTotal += :RecordCount()
      :CloseRecordset()
      :Execute( "SHOW FUNCTION STATUS WHERE db = DATABASE()" )
      nTotal += :RecordCount()
      :CloseRecordset()
      :Execute( "SELECT table_name FROM information_schema.TABLES" + ;
         " WHERE table_schema = " + StringSQL( Lower( AppEmpresaApelido() ) ) + ;
         " AND  TABLE_TYPE = 'BASE TABLE'" )
      DO WHILE ! :Eof()
         nTotal += 1
         oTableRec := cnSQL:ExecuteReturnRS( "SELECT COUNT(*) AS QTD FROM " + cnSQL:String( "table_name" ) )
         nTotal += oTableRec:Fields( "QTD" ):Value
         oTableRec:Close()
         :MoveNext()
      ENDDO
      :CloseRecordset()
   ENDWITH

   GrafTempo( "Backup SQL" )
   nAtual := 0

   hFileOutput := fCreate( "backup" + Str( nBackupFileNum, 1 ) + ".sql", FC_NORMAL )
...
GrafTempo( nAtual, nTotal )
...
Note2: at momment I use table, procedure and function, I will add more types when use them.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Text scroll and time graph :: Reply by Antonio Linares]]> 2025-02-11T15:24:36-07:00 2025-02-11T15:24:36-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45400&p=277604#p277604
You may use a Meter to show the progress.

For the text scroll you may use a TScrollPanel or a TXBrowse.

Do you allow the user to move up and down on the scrolled text ?]]>

You may use a Meter to show the progress.

For the text scroll you may use a TScrollPanel or a TXBrowse.

Do you allow the user to move up and down on the scrolled text ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Text scroll and time graph :: Reply by wilsongamboa]]> 2025-02-15T10:34:40-07:00 2025-02-15T10:34:40-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45400&p=277689#p277689
hbmk2: Error: Función(es) referenciada, no encontrada, pero desconocida:
SETCOLORMENSAGEM(), MENSAGEM(), PICVAL(), SETCOLORFOCUS()]]>

hbmk2: Error: Función(es) referenciada, no encontrada, pero desconocida:
SETCOLORMENSAGEM(), MENSAGEM(), PICVAL(), SETCOLORFOCUS()]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Text scroll and time graph :: Reply by JoséQuintas]]> 2025-02-17T07:26:27-07:00 2025-02-17T07:41:54-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45400&p=277719#p277719 A workaround:

Code: Select all | Expand

FUNCTION Mensagem( cTexto )
   LOCAL cColorOld
   cColorOld := SetColor()
   hb_Default( @cTexto, "" )
   SetColor( SetColorMensagem() )
   Scroll( MaxRow() - 1, 0, MaxRow(), MaxCol(), 0 )
   @ MaxRow() - 1, 0 SAY cTexto
   SetColor( cColorOld )
   RETURN Nil

FUNCTION SetColorMensagem()
   RETURN "W/N"

FUNCTION SetColorFocus()
   RETURN "W/GR+"

FUNCTION PicVal( nLen, nDec )
   LOCAL cPicture
   hb_Default( @nDec, 0 )
   cPicture := Replicate( "9", nLen )
   cPicture := Ltrim( Transform( Val( cPicture ), "999,999,999,999,999" ) )
   IF nDec != 0
      cPicture += "." + Replicate( "9", nDec )
   ENDIF
   cPicture := "@E " + cPicture
   RETURN cPicture
   
]]>
A workaround:

Code: Select all | Expand

FUNCTION Mensagem( cTexto )
   LOCAL cColorOld
   cColorOld := SetColor()
   hb_Default( @cTexto, "" )
   SetColor( SetColorMensagem() )
   Scroll( MaxRow() - 1, 0, MaxRow(), MaxCol(), 0 )
   @ MaxRow() - 1, 0 SAY cTexto
   SetColor( cColorOld )
   RETURN Nil

FUNCTION SetColorMensagem()
   RETURN "W/N"

FUNCTION SetColorFocus()
   RETURN "W/GR+"

FUNCTION PicVal( nLen, nDec )
   LOCAL cPicture
   hb_Default( @nDec, 0 )
   cPicture := Replicate( "9", nLen )
   cPicture := Ltrim( Transform( Val( cPicture ), "999,999,999,999,999" ) )
   IF nDec != 0
      cPicture += "." + Replicate( "9", nDec )
   ENDIF
   cPicture := "@E " + cPicture
   RETURN cPicture
   
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Text scroll and time graph :: Reply by JoséQuintas]]> 2025-02-17T07:38:22-07:00 2025-02-17T07:38:22-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45400&p=277720#p277720
Antonio Linares wrote: Tue Feb 11, 2025 10:24 pm Do you allow the user to move up and down on the scrolled text ?
On most cases no.
- my server send eletronic factura mail, check new post codes, and others
- application update structures (dbf or mySQL)
- applicatin makes backup/zip of DBF and MySQL
- On application using dbf, I show each file pack/index
- application Import from XMLs - here is interesting up/down, because I inform about changed codes and others
At momment I remember about these ones.]]>
Antonio Linares wrote: Tue Feb 11, 2025 10:24 pm Do you allow the user to move up and down on the scrolled text ?
On most cases no.
- my server send eletronic factura mail, check new post codes, and others
- application update structures (dbf or mySQL)
- applicatin makes backup/zip of DBF and MySQL
- On application using dbf, I show each file pack/index
- application Import from XMLs - here is interesting up/down, because I inform about changed codes and others
At momment I remember about these ones.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Text scroll and time graph :: Reply by JoséQuintas]]> 2025-02-23T10:07:00-07:00 2025-02-23T10:07:00-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45400&p=277892#p277892
Note: using gtwvg with no display

Code: Select all | Expand

#include "fivewin.ch"

PROCEDURE ze_fwTextMsg

   LOCAL oVar, nCont 

   hb_ThreadStart( { || oVar := DlgTextMsgClass():New(), oVar:Execute() } )
   Inkey(2)
   FOR nCont = 1 TO 50
      oVar:ShowText( "Test " + Ltrim( Str( nCont ) ) )
      Inkey(2)
   NEXT
   oVar:End()

   RETURN

CREATE CLASS DlgTextMsgClass

   VAR xDlg
   VAR xControl
   VAR cText
   VAR aText    INIT {}
   VAR nMaxRow  INIT 10
   VAR nStyle   INIT 1

   METHOD Execute()
   METHOD ShowText( cText )
   METHOD End() INLINE ::xDlg:End()

   ENDCLASS

METHOD Execute() CLASS DlgTextMsgClass

   LOCAL nDlgWidth, nDlgHeight, oFont // xStatusbar,
   LOCAL nFontSize

   nDlgWidth  := AppWindowInfo()[1]
   nDlgHeight := AppWindowInfo()[2]
   nFontSize  := Int( AppWindowInfo()[ 3 ] * 0.8 )
   ::nMaxRow  := Int( nDlgHeight / ( nFontSize + 2 ) - 2 )

   DEFINE FONT oFont NAME "ARIAL" SIZE 0, -nFontSize
   DEFINE DIALOG ::xDlg FROM 0, 0 TO nDlgHeight, nDlgWidth PIXEL ;
      FONT oFont ;
      TITLE "TextScroll" // COLOR COLOR_WHITE, CLR_JPA
   ::xDlg:SetIcon( TIcon():New(,,"APPICON" ) )
   ::xDlg:bValid := .F.

   IF ::nStyle == 1
      @ 10, 10 GET ::xControl VAR ::cText MEMO OF ::xDlg PIXEL ;
         SIZE nDlgWidth  - nFontSize, nDlgHeight - nFontSize FONT oFont COLOR CLR_BLACK, CLR_WHITE // TRANSPARENT BORDER
   ENDIF
   //::xGet:Disable()
   //Don't works for GET MEMO
   //::xGet:lDisColors := .F.
   //::xGet:nClrTextDis := RGB2N(20,20,20)

   ACTIVATE DIALOG ::xDlg CENTERED
      //ON INIT ( (Self), guistatusBarCreate( ::xDlg, @xStatusbar, "" ) )

   RETURN Nil

METHOD ShowText( cText ) CLASS DlgTextMsgClass

   LOCAL cItem

   IF ::nStyle == 1
      IF Len( ::aText ) = ::nMaxRow
         ADel( ::aText, 1 )
         ::aText[ Len( ::aText ) ] := cText
      ELSE
         AAdd( ::aText, cText )
      ENDIF
      ::cText := ""
      FOR EACH cItem IN ::aText
         ::cText += cItem + hb_Eol()
      NEXT
      ::xControl:VarPut( ::cText )
      ::xControl:Refresh()
   ENDIF

   RETURN Nil

//STATIC FUNCTION guiStatusBarCreate( xDlg, xStatusbar, cText )

   //DEFINE STATUSBAR xStatusBar PROMPT cText OF xDlg
   //xDlg:Refresh()

   //RETURN xStatusBar
It is a common situation on my multithread use, and it is expected:
if close dialog and close application, routine continues until the end, but with no display.
I will make tests using xbrowse too.

GET have option to change color when disabled, but it does not works with GET MEMO
How to prevent user do not close dialog ?
how to redisplay dialog if needed (if not minimized)?

Only comment, no problem:

This works using gtwvg

Code: Select all | Expand

oVar := DlgTextMsgClass():New()
hb_ThreadStart( { || oVar:Execute() } )
This works using fivewin

Code: Select all | Expand

hb_ThreadStart( { || oVar := DlgTextMsgClass():New(), oVar:Execute() } )
May be because Windows API is per thread, and it is needed create and use on same thread, or anything else.
But it works with the change.
oVar is a local variable.]]>

Note: using gtwvg with no display

Code: Select all | Expand

#include "fivewin.ch"

PROCEDURE ze_fwTextMsg

   LOCAL oVar, nCont 

   hb_ThreadStart( { || oVar := DlgTextMsgClass():New(), oVar:Execute() } )
   Inkey(2)
   FOR nCont = 1 TO 50
      oVar:ShowText( "Test " + Ltrim( Str( nCont ) ) )
      Inkey(2)
   NEXT
   oVar:End()

   RETURN

CREATE CLASS DlgTextMsgClass

   VAR xDlg
   VAR xControl
   VAR cText
   VAR aText    INIT {}
   VAR nMaxRow  INIT 10
   VAR nStyle   INIT 1

   METHOD Execute()
   METHOD ShowText( cText )
   METHOD End() INLINE ::xDlg:End()

   ENDCLASS

METHOD Execute() CLASS DlgTextMsgClass

   LOCAL nDlgWidth, nDlgHeight, oFont // xStatusbar,
   LOCAL nFontSize

   nDlgWidth  := AppWindowInfo()[1]
   nDlgHeight := AppWindowInfo()[2]
   nFontSize  := Int( AppWindowInfo()[ 3 ] * 0.8 )
   ::nMaxRow  := Int( nDlgHeight / ( nFontSize + 2 ) - 2 )

   DEFINE FONT oFont NAME "ARIAL" SIZE 0, -nFontSize
   DEFINE DIALOG ::xDlg FROM 0, 0 TO nDlgHeight, nDlgWidth PIXEL ;
      FONT oFont ;
      TITLE "TextScroll" // COLOR COLOR_WHITE, CLR_JPA
   ::xDlg:SetIcon( TIcon():New(,,"APPICON" ) )
   ::xDlg:bValid := .F.

   IF ::nStyle == 1
      @ 10, 10 GET ::xControl VAR ::cText MEMO OF ::xDlg PIXEL ;
         SIZE nDlgWidth  - nFontSize, nDlgHeight - nFontSize FONT oFont COLOR CLR_BLACK, CLR_WHITE // TRANSPARENT BORDER
   ENDIF
   //::xGet:Disable()
   //Don't works for GET MEMO
   //::xGet:lDisColors := .F.
   //::xGet:nClrTextDis := RGB2N(20,20,20)

   ACTIVATE DIALOG ::xDlg CENTERED
      //ON INIT ( (Self), guistatusBarCreate( ::xDlg, @xStatusbar, "" ) )

   RETURN Nil

METHOD ShowText( cText ) CLASS DlgTextMsgClass

   LOCAL cItem

   IF ::nStyle == 1
      IF Len( ::aText ) = ::nMaxRow
         ADel( ::aText, 1 )
         ::aText[ Len( ::aText ) ] := cText
      ELSE
         AAdd( ::aText, cText )
      ENDIF
      ::cText := ""
      FOR EACH cItem IN ::aText
         ::cText += cItem + hb_Eol()
      NEXT
      ::xControl:VarPut( ::cText )
      ::xControl:Refresh()
   ENDIF

   RETURN Nil

//STATIC FUNCTION guiStatusBarCreate( xDlg, xStatusbar, cText )

   //DEFINE STATUSBAR xStatusBar PROMPT cText OF xDlg
   //xDlg:Refresh()

   //RETURN xStatusBar
It is a common situation on my multithread use, and it is expected:
if close dialog and close application, routine continues until the end, but with no display.
I will make tests using xbrowse too.

GET have option to change color when disabled, but it does not works with GET MEMO
How to prevent user do not close dialog ?
how to redisplay dialog if needed (if not minimized)?

Only comment, no problem:

This works using gtwvg

Code: Select all | Expand

oVar := DlgTextMsgClass():New()
hb_ThreadStart( { || oVar:Execute() } )
This works using fivewin

Code: Select all | Expand

hb_ThreadStart( { || oVar := DlgTextMsgClass():New(), oVar:Execute() } )
May be because Windows API is per thread, and it is needed create and use on same thread, or anything else.
But it works with the change.
oVar is a local variable.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Text scroll and time graph :: Reply by JoséQuintas]]> 2025-02-25T07:30:22-07:00 2025-02-25T07:30:22-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45400&p=277928#p277928 Image

Text scroll using xbrowse.

I know about INIT, but use multithread on test.
And can debug it using harbour debug.

Code: Select all | Expand

#include "fivewin.ch"

PROCEDURE ze_fwTextMsg

   LOCAL oVar, nCont // , oDialog

   hb_ThreadStart( { || oVar := DlgTextMsgClass():New(), oVar:Execute() } )
   Inkey(2)
   FOR nCont = 1 TO 50
      oVar:ShowText( "Test " + Ltrim( Str( nCont ) ) )
      Inkey(1)
   NEXT
   oVar:lCanClose := .T.
   oVar:End()

   RETURN

CREATE CLASS DlgTextMsgClass

   VAR xDlg
   VAR xControl
   VAR cText
   VAR aText     INIT { "." }
   VAR nMaxRow   INIT 10
   VAR nStyle    INIT 2
   VAR lCanClose INIT .F.

   METHOD Execute()
   METHOD ShowText( cText )
   METHOD End() INLINE ::xDlg:End()

   ENDCLASS

METHOD Execute() CLASS DlgTextMsgClass

   LOCAL nDlgWidth, nDlgHeight, oFont // xStatusbar,
   LOCAL nFontSize, xControl, oCol

   nDlgWidth  := AppWindowInfo()[1]
   nDlgHeight := AppWindowInfo()[2]
   nFontSize  := Int( AppWindowInfo()[ 3 ] * 0.8 )
   ::nMaxRow  := Int( nDlgHeight / ( nFontSize + 2 ) - 2 )

   DEFINE FONT oFont NAME "ARIAL" SIZE 0, -nFontSize
   DEFINE DIALOG ::xDlg FROM 0, 0 TO nDlgHeight, nDlgWidth PIXEL ;
      FONT oFont ;
      TITLE "TextScroll" // COLOR COLOR_WHITE, CLR_JPA
   ::xDlg:SetIcon( TIcon():New(,,"APPICON" ) )
   ::xDlg:bValid := { || ::lCanClose }

   IF ::nStyle == 1
      @ 10, 10 GET xControl VAR ::cText MEMO OF ::xDlg PIXEL ;
         SIZE nDlgWidth  - nFontSize, nDlgHeight - nFontSize FONT oFont COLOR CLR_BLACK, CLR_WHITE // TRANSPARENT BORDER
   ENDIF
   //::xGet:Disable()
   //Don't works for GET MEMO
   //::xGet:lDisColors := .F.
   //::xGet:nClrTextDis := RGB2N(20,20,20)
   IF ::nStyle == 2
      @ 10, 10 XBROWSE xControl ;
         ARRAY { "" } ;
         SIZE nDlgWidth  - nFontSize, nDlgHeight - nFontSize FONT oFont PIXEL
      oCol := xControl:AddCol()
      oCol:cHeader := "Text"
      oCol:bStrData := { || xControl:aArrayData[ xControl:nArrayAt ] }
      xControl:lFitGridHeight := .T. // adjust extra space to header/footer
      xControl:nStretchCol := STRETCHCOL_WIDEST
      xControl:CreateFromCode()
      ::xControl := xControl
   ENDIF

   ACTIVATE DIALOG ::xDlg CENTERED
      //ON INIT ( (Self), guistatusBarCreate( ::xDlg, @xStatusbar, "" ) )

   RETURN Nil

METHOD ShowText( cText ) CLASS DlgTextMsgClass

   LOCAL cItem

      IF Len( ::aText ) = ::nMaxRow
         ADel( ::aText, 1 )
         ::aText[ Len( ::aText ) ] := cText
      ELSE
         AAdd( ::aText, cText )
      ENDIF
      ::cText := ""
      FOR EACH cItem IN ::aText
         ::cText += cItem + hb_Eol()
      NEXT
   IF ::nStyle == 1
      ::xControl:VarPut( ::cText )
      ::xControl:Refresh()
   ENDIF
   IF ::nStyle == 2
      ::xControl:SetArray( ::aText )
      ::xControl:nArrayAt := Len( ::aText )
      ::xControl:Refresh()
   ENDIF

   RETURN Nil

//STATIC FUNCTION guiStatusBarCreate( xDlg, xStatusbar, cText )

   //DEFINE STATUSBAR xStatusBar PROMPT cText OF xDlg
   //xDlg:Refresh()

   //RETURN xStatusBar
Note:
Image is the application, a unique EXE.
menu is a thread.
dialog fivewin is a thread.
Update of dialog/xbrowse is another thread, this is the thread paused by debug.
No other thread is paused, I can use all application without close debug.]]>
Image

Text scroll using xbrowse.

I know about INIT, but use multithread on test.
And can debug it using harbour debug.

Code: Select all | Expand

#include "fivewin.ch"

PROCEDURE ze_fwTextMsg

   LOCAL oVar, nCont // , oDialog

   hb_ThreadStart( { || oVar := DlgTextMsgClass():New(), oVar:Execute() } )
   Inkey(2)
   FOR nCont = 1 TO 50
      oVar:ShowText( "Test " + Ltrim( Str( nCont ) ) )
      Inkey(1)
   NEXT
   oVar:lCanClose := .T.
   oVar:End()

   RETURN

CREATE CLASS DlgTextMsgClass

   VAR xDlg
   VAR xControl
   VAR cText
   VAR aText     INIT { "." }
   VAR nMaxRow   INIT 10
   VAR nStyle    INIT 2
   VAR lCanClose INIT .F.

   METHOD Execute()
   METHOD ShowText( cText )
   METHOD End() INLINE ::xDlg:End()

   ENDCLASS

METHOD Execute() CLASS DlgTextMsgClass

   LOCAL nDlgWidth, nDlgHeight, oFont // xStatusbar,
   LOCAL nFontSize, xControl, oCol

   nDlgWidth  := AppWindowInfo()[1]
   nDlgHeight := AppWindowInfo()[2]
   nFontSize  := Int( AppWindowInfo()[ 3 ] * 0.8 )
   ::nMaxRow  := Int( nDlgHeight / ( nFontSize + 2 ) - 2 )

   DEFINE FONT oFont NAME "ARIAL" SIZE 0, -nFontSize
   DEFINE DIALOG ::xDlg FROM 0, 0 TO nDlgHeight, nDlgWidth PIXEL ;
      FONT oFont ;
      TITLE "TextScroll" // COLOR COLOR_WHITE, CLR_JPA
   ::xDlg:SetIcon( TIcon():New(,,"APPICON" ) )
   ::xDlg:bValid := { || ::lCanClose }

   IF ::nStyle == 1
      @ 10, 10 GET xControl VAR ::cText MEMO OF ::xDlg PIXEL ;
         SIZE nDlgWidth  - nFontSize, nDlgHeight - nFontSize FONT oFont COLOR CLR_BLACK, CLR_WHITE // TRANSPARENT BORDER
   ENDIF
   //::xGet:Disable()
   //Don't works for GET MEMO
   //::xGet:lDisColors := .F.
   //::xGet:nClrTextDis := RGB2N(20,20,20)
   IF ::nStyle == 2
      @ 10, 10 XBROWSE xControl ;
         ARRAY { "" } ;
         SIZE nDlgWidth  - nFontSize, nDlgHeight - nFontSize FONT oFont PIXEL
      oCol := xControl:AddCol()
      oCol:cHeader := "Text"
      oCol:bStrData := { || xControl:aArrayData[ xControl:nArrayAt ] }
      xControl:lFitGridHeight := .T. // adjust extra space to header/footer
      xControl:nStretchCol := STRETCHCOL_WIDEST
      xControl:CreateFromCode()
      ::xControl := xControl
   ENDIF

   ACTIVATE DIALOG ::xDlg CENTERED
      //ON INIT ( (Self), guistatusBarCreate( ::xDlg, @xStatusbar, "" ) )

   RETURN Nil

METHOD ShowText( cText ) CLASS DlgTextMsgClass

   LOCAL cItem

      IF Len( ::aText ) = ::nMaxRow
         ADel( ::aText, 1 )
         ::aText[ Len( ::aText ) ] := cText
      ELSE
         AAdd( ::aText, cText )
      ENDIF
      ::cText := ""
      FOR EACH cItem IN ::aText
         ::cText += cItem + hb_Eol()
      NEXT
   IF ::nStyle == 1
      ::xControl:VarPut( ::cText )
      ::xControl:Refresh()
   ENDIF
   IF ::nStyle == 2
      ::xControl:SetArray( ::aText )
      ::xControl:nArrayAt := Len( ::aText )
      ::xControl:Refresh()
   ENDIF

   RETURN Nil

//STATIC FUNCTION guiStatusBarCreate( xDlg, xStatusbar, cText )

   //DEFINE STATUSBAR xStatusBar PROMPT cText OF xDlg
   //xDlg:Refresh()

   //RETURN xStatusBar
Note:
Image is the application, a unique EXE.
menu is a thread.
dialog fivewin is a thread.
Update of dialog/xbrowse is another thread, this is the thread paused by debug.
No other thread is paused, I can use all application without close debug.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Friends Let us all pray for Mr Nageswarao Gunupudi :: Author Silvio.Falconi]]> 2025-02-21T00:45:28-07:00 2025-02-21T00:45:28-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277818#p277818
This person is in the hospital sick, suffering.

For this I want to ask for the help of Our God to help him in the best way, consoling his heart and giving him hope that everything will be better and fine

prayer for Rao


I ask for the interception of Our God in the state of health of Rao, in his physical and psychological well-being and also in his happiness in this very complicated moment of his life.

If it is the will of Our God, heal Mr Rao as quickly as possible and put an end to all his terrible sufferings.
Give your powerful and glorious blessing to our friend Rao and heal him once and for all, lift him up once and for all, help him once and for all.

I trust in all the graces and powers of God.

I invoke the glorious powers of Saint Michael the Archangel and all his reinforcements to help me in this request of mine!

I invoke all the strength and all the graces of this Archangel of good to help our friend Rao improve well and quickly.
So that this person can overcome all his health problems and be cured once and for all!

With the help of Saint Michael the Archangel of God I will be able to ask for help and aid for Mr Rao so that all the graces of good are granted.



Amen.]]>

This person is in the hospital sick, suffering.

For this I want to ask for the help of Our God to help him in the best way, consoling his heart and giving him hope that everything will be better and fine

prayer for Rao


I ask for the interception of Our God in the state of health of Rao, in his physical and psychological well-being and also in his happiness in this very complicated moment of his life.

If it is the will of Our God, heal Mr Rao as quickly as possible and put an end to all his terrible sufferings.
Give your powerful and glorious blessing to our friend Rao and heal him once and for all, lift him up once and for all, help him once and for all.

I trust in all the graces and powers of God.

I invoke the glorious powers of Saint Michael the Archangel and all his reinforcements to help me in this request of mine!

I invoke all the strength and all the graces of this Archangel of good to help our friend Rao improve well and quickly.
So that this person can overcome all his health problems and be cured once and for all!

With the help of Saint Michael the Archangel of God I will be able to ask for help and aid for Mr Rao so that all the graces of good are granted.



Amen.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by Antonio Linares]]> 2025-02-21T01:02:47-07:00 2025-02-21T01:02:47-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277819#p277819
God please help and guide our loved Rao through these difficult moments

Dear friends, lets pray for Rao, please]]>

God please help and guide our loved Rao through these difficult moments

Dear friends, lets pray for Rao, please]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by paquitohm]]> 2025-02-21T01:19:00-07:00 2025-02-21T01:19:00-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277820#p277820 Image]]> Image]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by MarcoBoschi]]> 2025-02-21T02:02:40-07:00 2025-02-21T02:02:40-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277821#p277821 Amen :!: ]]> Amen :!: ]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by ShumingWang]]> 2025-02-21T02:57:32-07:00 2025-02-21T02:57:32-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277822#p277822 ]]> ]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by vilian]]> 2025-02-21T03:34:23-07:00 2025-02-21T03:34:23-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277823#p277823 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by ralph]]> 2025-02-21T07:51:23-07:00 2025-02-21T07:51:23-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277836#p277836 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by EASYSOFT]]> 2025-02-21T07:55:42-07:00 2025-02-21T07:55:42-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277838#p277838 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by Verhoven]]> 2025-02-21T07:58:08-07:00 2025-02-21T07:58:08-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277839#p277839 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by Enrico Maria Giordano]]> 2025-02-21T09:02:05-07:00 2025-02-21T09:02:05-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277844#p277844 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by acuellar]]> 2025-02-21T09:12:15-07:00 2025-02-21T09:12:15-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277845#p277845 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by mauri.menabue]]> 2025-02-21T10:16:58-07:00 2025-02-21T10:16:58-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277851#p277851 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by wilsongamboa]]> 2025-02-21T10:19:47-07:00 2025-02-21T10:19:47-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277852#p277852 regards]]> regards]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by sysctrl2]]> 2025-02-21T17:18:56-07:00 2025-02-21T17:18:56-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277856#p277856 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by Baxajaun]]> 2025-02-22T02:52:42-07:00 2025-02-22T02:52:42-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277864#p277864 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by Rick Lipkin]]> 2025-02-22T07:14:33-07:00 2025-02-22T07:14:33-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277871#p277871 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by FranciscoA]]> 2025-02-22T07:31:31-07:00 2025-02-22T07:31:31-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277872#p277872 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by Marcelo Via Giglio]]> 2025-02-22T08:06:55-07:00 2025-02-22T08:06:55-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277874#p277874 Mr. Rao]]> Mr. Rao]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by Horizon]]> 2025-02-22T09:37:47-07:00 2025-02-22T09:37:47-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277875#p277875 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by admsoporte]]> 2025-02-22T11:56:02-07:00 2025-02-22T11:56:02-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277877#p277877 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by RAMESHBABU]]> 2025-02-22T17:11:42-07:00 2025-02-22T17:11:42-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277881#p277881
Come back soon. We all need your Support and guidance.

God will take care every thing. Be bold as usual and we all are there with you, especially me just away from you 1 hour drive. Just command me, I will be at your support for all the time.

May God bless you a speedy recovery 🙏

- Ramesh Babu]]>

Come back soon. We all need your Support and guidance.

God will take care every thing. Be bold as usual and we all are there with you, especially me just away from you 1 hour drive. Just command me, I will be at your support for all the time.

May God bless you a speedy recovery 🙏

- Ramesh Babu]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by RAMESHBABU]]> 2025-02-22T19:41:16-07:00 2025-02-22T19:41:16-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277883#p277883
Just now I spoke to Mr.Rao to extend my Support to Him in person.

He is bold and assured me that He will recover soon and come back
to his normal life.

Let us all keep praying for his speedy recovery.

-Ramesh Babu]]>

Just now I spoke to Mr.Rao to extend my Support to Him in person.

He is bold and assured me that He will recover soon and come back
to his normal life.

Let us all keep praying for his speedy recovery.

-Ramesh Babu]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by Enrico Maria Giordano]]> 2025-02-23T00:31:15-07:00 2025-02-23T00:31:15-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277887#p277887
RAMESHBABU wrote: Sun Feb 23, 2025 2:41 am Friends,

Just now I spoke to Mr.Rao to extend my Support to Him in person.

He is bold and assured me that He will recover soon and come back
to his normal life.
Great, I'm very happy for that! :-)]]>
RAMESHBABU wrote: Sun Feb 23, 2025 2:41 am Friends,

Just now I spoke to Mr.Rao to extend my Support to Him in person.

He is bold and assured me that He will recover soon and come back
to his normal life.
Great, I'm very happy for that! :-)]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by richard-service]]> 2025-02-23T06:00:26-07:00 2025-02-23T06:00:26-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277889#p277889
RAMESHBABU wrote: Sun Feb 23, 2025 2:41 am Friends,

Just now I spoke to Mr.Rao to extend my Support to Him in person.

He is bold and assured me that He will recover soon and come back
to his normal life.

Let us all keep praying for his speedy recovery.

-Ramesh Babu
Sounds good. I'm so happy get good news.

Dear Mr.Rao
Come back to tech for FW's us]]>
RAMESHBABU wrote: Sun Feb 23, 2025 2:41 am Friends,

Just now I spoke to Mr.Rao to extend my Support to Him in person.

He is bold and assured me that He will recover soon and come back
to his normal life.

Let us all keep praying for his speedy recovery.

-Ramesh Babu
Sounds good. I'm so happy get good news.

Dear Mr.Rao
Come back to tech for FW's us]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by Carles]]> 2025-02-23T06:43:45-07:00 2025-02-23T06:43:45-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277890#p277890
Força.
C.]]>

Força.
C.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by hua]]> 2025-02-23T20:39:03-07:00 2025-02-23T20:39:03-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277893#p277893 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by Maurizio]]> 2025-02-24T01:11:51-07:00 2025-02-24T01:11:51-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277894#p277894 Maurizio]]> Maurizio]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by nageswaragunupudi]]> 2025-02-25T03:33:28-07:00 2025-02-25T03:33:28-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277917#p277917 Hope to be back with you all soon.]]> Hope to be back with you all soon.]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by Otto]]> 2025-02-25T03:47:00-07:00 2025-02-25T03:47:00-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277922#p277922 Great news and all the best!
Best regards,
Otto]]>
Great news and all the best!
Best regards,
Otto]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by Ari]]> 2025-02-25T06:05:12-07:00 2025-02-25T06:05:12-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277924#p277924
There are many people who love you. And there is a lot to be grateful for for all the help (knowledge)

Let's follow GOD's decision, we all want your recovery..]]>

There are many people who love you. And there is a lot to be grateful for for all the help (knowledge)

Let's follow GOD's decision, we all want your recovery..]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Friends Let us all pray for Mr Nageswarao Gunupudi :: Reply by wartiaga]]> 2025-02-25T12:48:18-07:00 2025-02-25T12:48:18-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45442&p=277937#p277937 <![CDATA[FiveWin for Harbour/xHarbour :: adjust zoom in xBrowse :: Author INFORMAISVRB]]> 2025-02-21T11:20:17-07:00 2025-02-21T11:20:17-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45444&p=277853#p277853
Friends, would you have an Example

https://i.ibb.co/bRz7621x/zzzzzzzzzzzzz ... zzzzzz.jpg

Image]]>

Friends, would you have an Example

https://i.ibb.co/bRz7621x/zzzzzzzzzzzzz ... zzzzzz.jpg

Image]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: adjust zoom in xBrowse :: Reply by Otto]]> 2025-02-22T01:42:42-07:00 2025-02-22T01:42:42-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45444&p=277862#p277862 <![CDATA[FiveWin for Harbour/xHarbour :: Re: adjust zoom in xBrowse :: Reply by nageswaragunupudi]]> 2025-02-22T02:57:44-07:00 2025-02-22T02:57:44-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45444&p=277865#p277865
Press Controll key and + of - on the numeric keypad]]>

Press Controll key and + of - on the numeric keypad]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: adjust zoom in xBrowse :: Reply by INFORMAISVRB]]> 2025-02-22T05:14:59-07:00 2025-02-22T05:14:59-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45444&p=277866#p277866

I need exactly what "Ctrl+ and Ctrl- and" do, but I want to Save this Status, so that the user can choose the Zoom size, preferably allowing it to be Saved together with "SaveState() and :RestoreState(cState)"


:D]]>


I need exactly what "Ctrl+ and Ctrl- and" do, but I want to Save this Status, so that the user can choose the Zoom size, preferably allowing it to be Saved together with "SaveState() and :RestoreState(cState)"


:D]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: adjust zoom in xBrowse :: Reply by INFORMAISVRB]]> 2025-02-25T15:29:09-07:00 2025-02-25T15:29:09-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45444&p=277940#p277940 <![CDATA[FiveWin for Harbour/xHarbour :: New FWH 25.01 :: Author Antonio Linares]]> 2025-02-19T01:16:24-07:00 2025-02-19T01:16:24-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45433&p=277747#p277747 viewtopic.php?t=45432]]> viewtopic.php?t=45432]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: New FWH 25.01 :: Reply by hua]]> 2025-02-19T01:30:18-07:00 2025-02-19T01:30:18-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45433&p=277749#p277749 <![CDATA[FiveWin for Harbour/xHarbour :: Re: New FWH 25.01 :: Reply by Antonio Linares]]> 2025-02-19T01:38:05-07:00 2025-02-19T01:38:05-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45433&p=277751#p277751
Not sure if we still support Windows 7]]>

Not sure if we still support Windows 7]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New FWH 25.01 :: Reply by Jack]]> 2025-02-19T08:14:56-07:00 2025-02-19T08:14:56-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45433&p=277762#p277762 What about this :
We will provide support for the oAuth2 on the next version FWH
with samples to send e-mail using GMail/Outlook(Office365).

Thanks,

Philippe]]>
What about this :
We will provide support for the oAuth2 on the next version FWH
with samples to send e-mail using GMail/Outlook(Office365).

Thanks,

Philippe]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New FWH 25.01 :: Reply by Silvio.Falconi]]> 2025-02-20T01:35:58-07:00 2025-02-20T01:35:58-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45433&p=277777#p277777
Jack wrote: Wed Feb 19, 2025 3:14 pm Hi
What about this :
We will provide support for the oAuth2 on the next version FWH
with samples to send e-mail using GMail/Outlook(Office365).

Thanks,

Philippe
I think it is an initiative by laiton maybe antonio is not aware]]>
Jack wrote: Wed Feb 19, 2025 3:14 pm Hi
What about this :
We will provide support for the oAuth2 on the next version FWH
with samples to send e-mail using GMail/Outlook(Office365).

Thanks,

Philippe
I think it is an initiative by laiton maybe antonio is not aware]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New FWH 25.01 :: Reply by Antonio Linares]]> 2025-02-20T02:35:56-07:00 2025-02-20T02:35:56-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45433&p=277780#p277780
Jack wrote: Wed Feb 19, 2025 3:14 pm Hi
What about this :
We will provide support for the oAuth2 on the next version FWH
with samples to send e-mail using GMail/Outlook(Office365).

Thanks,

Philippe
It is coming. We will publish an updated FWH 25.01 asap.]]>
Jack wrote: Wed Feb 19, 2025 3:14 pm Hi
What about this :
We will provide support for the oAuth2 on the next version FWH
with samples to send e-mail using GMail/Outlook(Office365).

Thanks,

Philippe
It is coming. We will publish an updated FWH 25.01 asap.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New FWH 25.01 :: Reply by JoséQuintas]]> 2025-02-23T09:31:14-07:00 2025-02-23T09:31:14-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45433&p=277891#p277891
Many thanks.]]>

Many thanks.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New FWH 25.01 :: Reply by Lailton]]> 2025-02-25T11:45:12-07:00 2025-02-25T11:45:12-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45433&p=277932#p277932
An example of how Harbour + FWH works with OAuth.
Image

Here is a sample of the code.
Code Sample

Code: Select all | Expand

#include "fivewin.ch"

static oGmail, hStore

function main()

	local oDlg
	local oName, cName := ""
	local oEmail, cEmail := ""
	local oPhoto, oSend
	local oConnect, oDisconnect

	hStore := readStore( hb_dirBase() + "gmail.json" )

	oGmail := TGmail():new()

	oGmail:setConfig( {;
		"client_id" => "your_client_id",;
		"client_secret" => "your_client_secret",;
		"redirect_uri" => "http://localhost:2025/";
	} )

	if !empty( hStore[ "token" ] )
		oGmail:setToken( hStore[ "token" ] )
	endif

	define dialog oDlg resource "GMAIL"

		redefine image oPhoto id 4002 of oDlg
		redefine say oName var cName id 4003 of oDlg
		redefine say oEmail var cEmail id 4004 of oDlg

		redefine button oDisconnect id 4005 of oDlg action onDisconnect( oDlg, { oPhoto, oName, oEmail, oSend, oDisconnect }, { oConnect } )
		redefine button oSend id 4006 of oDlg action onSendMail()

		redefine button oConnect id 4001 of oDlg action onConnect( oDlg, { oPhoto, oName, oEmail, oSend, oDisconnect }, { oConnect } )

		oDlg:bStart := { || updateControls( oDlg, { oPhoto, oName, oEmail, oSend, oDisconnect }, { oConnect } ) }

		oDlg:lHelpIcon := .f.

	activate dialog oDlg centered

	saveStore( hb_dirBase() + "gmail.json", hStore )

return nil

function onConnect( oDlg, aConnect, aDisconnect )

	local cToken

	if !oGmail:isAuth()
		cToken := oGmail:auth()
		if !empty( cToken )
			hStore[ "token" ] := cToken
		else
			msgStop( "Authentication failed!" )
		endif
	endif

	updateControls( oDlg, aConnect, aDisconnect )

return nil

function onDisconnect( oDlg, aConnect, aDisconnect )

	local cProfile := hb_dirBase() + "profile_gmail.jpg"

	oGmail:revoke()
	updateControls( oDlg, aConnect, aDisconnect )

	if hb_vfExists( cProfile )
		hb_vfErase( cProfile )
	endif

return nil

function onSendMail()

	if oGmail:send( "lailton@paysoft.com.br", "it is a test", "<b>Message from Gmail oAuth2</b>", .t., {} )
		msgInfo( "Mail sent!" )
	else
		msgStop( "Failed to send email. You may not have authorized the required permissions..." )
	endif

return nil

function updateControls( oDlg, aConnect, aDisconnect )

	local hUser
	local cProfile := hb_dirBase() + "profile_gmail.jpg"

	if oGmail:isAuth()
		hUser := oGmail:me()
	endif

	aEval( aConnect, { |o| o:hide() } )
	aEval( aDisconnect, { |o| o:hide() } )

	if hb_isHash( hUser )

		aEval( aConnect, {|o|o:show(),o:refresh()} )

		if !hb_vfExists( cProfile )
			oGmail:downloadUrl( hUser[ "picture" ], cProfile )
		endif

		// Load Profile Photo
		if hb_vfExists( cProfile )
			aConnect[1]:loadImage(, cProfile )
			aConnect[1]:refresh()
		endif

		aConnect[2]:setText( hUser[ "name" ] )
		aConnect[3]:setText( hUser[ "email" ] )

		aConnect[2]:update()
		aConnect[3]:update()

	else

		aEval( aDisconnect, {|o|o:show(),o:refresh()} )

	endif

	oDlg:update()

return nil

function readStore( cFile )

	local hStore

	if hb_vfExists( cFile )
		hStore := hb_jsonDecode( hb_memoRead( cFile ) )
	endif

	if !hb_isHash( hStore )
		hStore := {;
			"token" => "";
		}
	endif

return hStore

function saveStore( cFile, hStore )

	hb_memoWrit( cFile, hb_jsonEncode( hStore ) )

return hb_vfExists( cFile )
It will be included in FiveWin today for the next version. :D]]>

An example of how Harbour + FWH works with OAuth.
Image

Here is a sample of the code.
Code Sample

Code: Select all | Expand

#include "fivewin.ch"

static oGmail, hStore

function main()

	local oDlg
	local oName, cName := ""
	local oEmail, cEmail := ""
	local oPhoto, oSend
	local oConnect, oDisconnect

	hStore := readStore( hb_dirBase() + "gmail.json" )

	oGmail := TGmail():new()

	oGmail:setConfig( {;
		"client_id" => "your_client_id",;
		"client_secret" => "your_client_secret",;
		"redirect_uri" => "http://localhost:2025/";
	} )

	if !empty( hStore[ "token" ] )
		oGmail:setToken( hStore[ "token" ] )
	endif

	define dialog oDlg resource "GMAIL"

		redefine image oPhoto id 4002 of oDlg
		redefine say oName var cName id 4003 of oDlg
		redefine say oEmail var cEmail id 4004 of oDlg

		redefine button oDisconnect id 4005 of oDlg action onDisconnect( oDlg, { oPhoto, oName, oEmail, oSend, oDisconnect }, { oConnect } )
		redefine button oSend id 4006 of oDlg action onSendMail()

		redefine button oConnect id 4001 of oDlg action onConnect( oDlg, { oPhoto, oName, oEmail, oSend, oDisconnect }, { oConnect } )

		oDlg:bStart := { || updateControls( oDlg, { oPhoto, oName, oEmail, oSend, oDisconnect }, { oConnect } ) }

		oDlg:lHelpIcon := .f.

	activate dialog oDlg centered

	saveStore( hb_dirBase() + "gmail.json", hStore )

return nil

function onConnect( oDlg, aConnect, aDisconnect )

	local cToken

	if !oGmail:isAuth()
		cToken := oGmail:auth()
		if !empty( cToken )
			hStore[ "token" ] := cToken
		else
			msgStop( "Authentication failed!" )
		endif
	endif

	updateControls( oDlg, aConnect, aDisconnect )

return nil

function onDisconnect( oDlg, aConnect, aDisconnect )

	local cProfile := hb_dirBase() + "profile_gmail.jpg"

	oGmail:revoke()
	updateControls( oDlg, aConnect, aDisconnect )

	if hb_vfExists( cProfile )
		hb_vfErase( cProfile )
	endif

return nil

function onSendMail()

	if oGmail:send( "lailton@paysoft.com.br", "it is a test", "<b>Message from Gmail oAuth2</b>", .t., {} )
		msgInfo( "Mail sent!" )
	else
		msgStop( "Failed to send email. You may not have authorized the required permissions..." )
	endif

return nil

function updateControls( oDlg, aConnect, aDisconnect )

	local hUser
	local cProfile := hb_dirBase() + "profile_gmail.jpg"

	if oGmail:isAuth()
		hUser := oGmail:me()
	endif

	aEval( aConnect, { |o| o:hide() } )
	aEval( aDisconnect, { |o| o:hide() } )

	if hb_isHash( hUser )

		aEval( aConnect, {|o|o:show(),o:refresh()} )

		if !hb_vfExists( cProfile )
			oGmail:downloadUrl( hUser[ "picture" ], cProfile )
		endif

		// Load Profile Photo
		if hb_vfExists( cProfile )
			aConnect[1]:loadImage(, cProfile )
			aConnect[1]:refresh()
		endif

		aConnect[2]:setText( hUser[ "name" ] )
		aConnect[3]:setText( hUser[ "email" ] )

		aConnect[2]:update()
		aConnect[3]:update()

	else

		aEval( aDisconnect, {|o|o:show(),o:refresh()} )

	endif

	oDlg:update()

return nil

function readStore( cFile )

	local hStore

	if hb_vfExists( cFile )
		hStore := hb_jsonDecode( hb_memoRead( cFile ) )
	endif

	if !hb_isHash( hStore )
		hStore := {;
			"token" => "";
		}
	endif

return hStore

function saveStore( cFile, hStore )

	hb_memoWrit( cFile, hb_jsonEncode( hStore ) )

return hb_vfExists( cFile )
It will be included in FiveWin today for the next version. :D]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New FWH 25.01 :: Reply by vilian]]> 2025-02-25T11:51:45-07:00 2025-02-25T11:51:45-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45433&p=277933#p277933
Is TGMAIL a new class ?]]>

Is TGMAIL a new class ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New FWH 25.01 :: Reply by Lailton]]> 2025-02-25T11:53:53-07:00 2025-02-25T11:53:53-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45433&p=277934#p277934
vilian wrote: Tue Feb 25, 2025 6:51 pmTGmail
Yes, It is TGmail. on the next days I will add too the version for Office365 following same idea.]]>
vilian wrote: Tue Feb 25, 2025 6:51 pmTGmail
Yes, It is TGmail. on the next days I will add too the version for Office365 following same idea.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New FWH 25.01 :: Reply by Silvio.Falconi]]> 2025-02-26T01:25:17-07:00 2025-02-26T01:25:17-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45433&p=277949#p277949
Lailton wrote: Tue Feb 25, 2025 6:53 pm
vilian wrote: Tue Feb 25, 2025 6:51 pmTGmail
Yes, It is TGmail. on the next days I will add too the version for Office365 following same idea.
I remember Cristobal made a Tgmail class some year ago

Have you tried this function ?

Make sure you have configured your application on Google Cloud Console and obtained the client_id, client_secret, and configured the redirect URL correctly.

Code: Select all | Expand


#include "FiveWin.ch"

FUNCTION SendEmail()
   LOCAL cUrl, cData, cResponse
   LOCAL cAccessToken := "YOUR_ACCESS_TOKEN"  // Get token via OAuth2
   LOCAL cMessage := '{"message": {"subject": "Test Email", "body": {"contentType": "Text", "content": "Hello, this is a test email!"}, "toRecipients": [{"emailAddress": {"address": "example@domain.com"}}]}}'

   cUrl := "https://graph.microsoft.com/v1.0/me/sendMail"
   cData := cMessage

   cResponse := HttpPostRequest(cUrl, cData, "Authorization: Bearer " + cAccessToken)
   
   IF !Empty(cResponse)
      MsgInfo("Email sent successfully!", "Success")
   ELSE
      MsgError("Failed to send email.", "Error")
   ENDIF

RETURN
]]>
Lailton wrote: Tue Feb 25, 2025 6:53 pm
vilian wrote: Tue Feb 25, 2025 6:51 pmTGmail
Yes, It is TGmail. on the next days I will add too the version for Office365 following same idea.
I remember Cristobal made a Tgmail class some year ago

Have you tried this function ?

Make sure you have configured your application on Google Cloud Console and obtained the client_id, client_secret, and configured the redirect URL correctly.

Code: Select all | Expand


#include "FiveWin.ch"

FUNCTION SendEmail()
   LOCAL cUrl, cData, cResponse
   LOCAL cAccessToken := "YOUR_ACCESS_TOKEN"  // Get token via OAuth2
   LOCAL cMessage := '{"message": {"subject": "Test Email", "body": {"contentType": "Text", "content": "Hello, this is a test email!"}, "toRecipients": [{"emailAddress": {"address": "example@domain.com"}}]}}'

   cUrl := "https://graph.microsoft.com/v1.0/me/sendMail"
   cData := cMessage

   cResponse := HttpPostRequest(cUrl, cData, "Authorization: Bearer " + cAccessToken)
   
   IF !Empty(cResponse)
      MsgInfo("Email sent successfully!", "Success")
   ELSE
      MsgError("Failed to send email.", "Error")
   ENDIF

RETURN
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New FWH 25.01 :: Reply by Silvio.Falconi]]> 2025-02-26T01:52:41-07:00 2025-02-26T01:52:41-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45433&p=277951#p277951 This is my Tgmail class Use oAuth2

Code: Select all | Expand

CLASS Tgmail

   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 Tgmail class
METHOD Init( cClientId, cClientSecret, cRedirectUri )
   ::cClientId := cClientId
   ::cClientSecret := cClientSecret
   ::cRedirectUri := cRedirectUri
   ::cAuthUrl := "https://accounts.google.com/o/oauth2/v2/auth?scope=https://www.googleapis.com/auth/gmail.send&response_type=code&redirect_uri=" + SELF:cRedirectUri + "&client_id=" + SELF:cClientId
   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
   cTokenUrl := "https://oauth2.googleapis.com/token"
   cData := "code=" + cCode + ;
            "&client_id=" + ::cClientId + ;
            "&client_secret=" + ::cClientSecret + ;
            "&redirect_uri=" + ::cRedirectUri + ;
            "&grant_type=authorization_code"

   // Request to get the token
   cResponse := HttpPostRequest( cTokenUrl, cData, "" )
   IF !Empty(cResponse)
      LOCAL aJson
      aJson := JsonParse( cResponse )
      ::cAccessToken := aJson[ "access_token" ]
      ::cRefreshToken := aJson[ "refresh_token" ]
      RETURN .T.
   ELSE
      RETURN .F.
   ENDIF

// Method to send an email via GMail
METHOD SendEmail( cSubject, cBody, cRecipient )
   LOCAL cUrl, cMessage, cRaw, cResponse

   // Prepare the message in MIME format
   cRaw := "From: 'me'\r\n" + ;
           "To: " + cRecipient + "\r\n" + ;
           "Subject: " + cSubject + "\r\n" + ;
           "Content-Type: text/plain; charset=UTF-8\r\n\r\n" + ;
           cBody

   // Encode the message in base64
   cRaw := Base64Encode( cRaw )

   // Build the request body
   cMessage := '{"raw": "' + cRaw + '"}'

   // URL to send the message
   cUrl := "https://gmail.googleapis.com/upload/gmail/v1/users/me/messages/send?uploadType=multipart"

   // Send HTTP request with access token
   cResponse := HttpPostRequest( cUrl, cMessage, "Authorization: Bearer " + ::cAccessToken )
   IF !Empty(cResponse)
      RETURN .T.
   ELSE
      RETURN .F.
   ENDIF

RETURN NIL

SAMPLES
First of all, you need to create an object of the Tgmail class and initialize it with the authentication data.

Code: Select all | Expand

LOCAL oGmail
oGmail := Tgmail():New()
// Initialize with the client_id, client_secret and redirect_uri obtained from Google Console

Code: Select all | Expand

oGmail:Init( "YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET", "YOUR_REDIRECT_URI" )

You can get the authorization URL to visit to get the authorization code.

Code: Select all | Expand

LOCAL cAuthUrl
cAuthUrl := oGmail:GetAuthorizationUrl()
MsgInfo( "Visita questo URL per autorizzare l'app: " + cAuthUrl, "Autorizzazione OAuth2" )

Once the user has authorized the app and you have received the authorization code, you can get the access_token.

Code: Select all | Expand

LOCAL cCode, lSuccess
cCode := "AUTHORIZATION_CODE_OBTAINED_FROM_USER"  // Ottieni il codice di autorizzazione
lSuccess := oGmail:GetAccessToken( cCode )
IF lSuccess
   MsgInfo( "Token di accesso ottenuto!", "Successo" )
ELSE
   MsgError( "Errore durante l'ottenimento del token.", "Errore" )
ENDIF

Once you have the access_token, you can send an email.

Code: Select all | Expand

LOCAL lSuccess
lSuccess := oGmail: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
You will need some auxiliary functions like HttpPostRequest and Base64Encode. Here is an example of how you could implement them:

// Function to perform an HTTP POST request

Code: Select all | Expand

FUNCTION HttpPostRequest( cUrl, cData, cHeaders )
   LOCAL cResponse
   cResponse := HttpPost( cUrl, cData, cHeaders )
   RETURN cResponse
//Function to encode in base64

Code: Select all | Expand

FUNCTION Base64Encode( cData )
   RETURN HB_BASE64ENCODE( cData )


This Tgmail class allows you to integrate with GMail via OAuth2, getting the access token and using it to send emails. Make sure you configure your application correctly on Google Cloud Console and manage the OAuth2 authorization flow.]]>
This is my Tgmail class Use oAuth2

Code: Select all | Expand

CLASS Tgmail

   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 Tgmail class
METHOD Init( cClientId, cClientSecret, cRedirectUri )
   ::cClientId := cClientId
   ::cClientSecret := cClientSecret
   ::cRedirectUri := cRedirectUri
   ::cAuthUrl := "https://accounts.google.com/o/oauth2/v2/auth?scope=https://www.googleapis.com/auth/gmail.send&response_type=code&redirect_uri=" + SELF:cRedirectUri + "&client_id=" + SELF:cClientId
   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
   cTokenUrl := "https://oauth2.googleapis.com/token"
   cData := "code=" + cCode + ;
            "&client_id=" + ::cClientId + ;
            "&client_secret=" + ::cClientSecret + ;
            "&redirect_uri=" + ::cRedirectUri + ;
            "&grant_type=authorization_code"

   // Request to get the token
   cResponse := HttpPostRequest( cTokenUrl, cData, "" )
   IF !Empty(cResponse)
      LOCAL aJson
      aJson := JsonParse( cResponse )
      ::cAccessToken := aJson[ "access_token" ]
      ::cRefreshToken := aJson[ "refresh_token" ]
      RETURN .T.
   ELSE
      RETURN .F.
   ENDIF

// Method to send an email via GMail
METHOD SendEmail( cSubject, cBody, cRecipient )
   LOCAL cUrl, cMessage, cRaw, cResponse

   // Prepare the message in MIME format
   cRaw := "From: 'me'\r\n" + ;
           "To: " + cRecipient + "\r\n" + ;
           "Subject: " + cSubject + "\r\n" + ;
           "Content-Type: text/plain; charset=UTF-8\r\n\r\n" + ;
           cBody

   // Encode the message in base64
   cRaw := Base64Encode( cRaw )

   // Build the request body
   cMessage := '{"raw": "' + cRaw + '"}'

   // URL to send the message
   cUrl := "https://gmail.googleapis.com/upload/gmail/v1/users/me/messages/send?uploadType=multipart"

   // Send HTTP request with access token
   cResponse := HttpPostRequest( cUrl, cMessage, "Authorization: Bearer " + ::cAccessToken )
   IF !Empty(cResponse)
      RETURN .T.
   ELSE
      RETURN .F.
   ENDIF

RETURN NIL

SAMPLES
First of all, you need to create an object of the Tgmail class and initialize it with the authentication data.

Code: Select all | Expand

LOCAL oGmail
oGmail := Tgmail():New()
// Initialize with the client_id, client_secret and redirect_uri obtained from Google Console

Code: Select all | Expand

oGmail:Init( "YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET", "YOUR_REDIRECT_URI" )

You can get the authorization URL to visit to get the authorization code.

Code: Select all | Expand

LOCAL cAuthUrl
cAuthUrl := oGmail:GetAuthorizationUrl()
MsgInfo( "Visita questo URL per autorizzare l'app: " + cAuthUrl, "Autorizzazione OAuth2" )

Once the user has authorized the app and you have received the authorization code, you can get the access_token.

Code: Select all | Expand

LOCAL cCode, lSuccess
cCode := "AUTHORIZATION_CODE_OBTAINED_FROM_USER"  // Ottieni il codice di autorizzazione
lSuccess := oGmail:GetAccessToken( cCode )
IF lSuccess
   MsgInfo( "Token di accesso ottenuto!", "Successo" )
ELSE
   MsgError( "Errore durante l'ottenimento del token.", "Errore" )
ENDIF

Once you have the access_token, you can send an email.

Code: Select all | Expand

LOCAL lSuccess
lSuccess := oGmail: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
You will need some auxiliary functions like HttpPostRequest and Base64Encode. Here is an example of how you could implement them:

// Function to perform an HTTP POST request

Code: Select all | Expand

FUNCTION HttpPostRequest( cUrl, cData, cHeaders )
   LOCAL cResponse
   cResponse := HttpPost( cUrl, cData, cHeaders )
   RETURN cResponse
//Function to encode in base64

Code: Select all | Expand

FUNCTION Base64Encode( cData )
   RETURN HB_BASE64ENCODE( cData )


This Tgmail class allows you to integrate with GMail via OAuth2, getting the access token and using it to send emails. Make sure you configure your application correctly on Google Cloud Console and manage the OAuth2 authorization flow.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New FWH 25.01 :: Reply by Silvio.Falconi]]> 2025-02-26T02:06:22-07:00 2025-02-26T02:06:22-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45433&p=277952#p277952
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
   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)
      LOCAL aJson
      aJson := JsonParse( cResponse )
      ::cAccessToken := aJson[ "access_token" ]
      SELF: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]]>

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
   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)
      LOCAL aJson
      aJson := JsonParse( cResponse )
      ::cAccessToken := aJson[ "access_token" ]
      SELF: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]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Rectangle :: Author Natter]]> 2025-02-26T01:29:34-07:00 2025-02-26T01:29:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45455&p=277950#p277950
I need to draw a rectangle on a window with an outline of a certain color and thickness. How to do it ?]]>

I need to draw a rectangle on a window with an outline of a certain color and thickness. How to do it ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Rectangle :: Reply by Silvio.Falconi]]> 2025-02-26T03:16:28-07:00 2025-02-26T03:16:28-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45455&p=277954#p277954
Natter wrote: Wed Feb 26, 2025 8:29 am Hi,

I need to draw a rectangle on a window with an outline of a certain color and thickness. How to do it ?

Try this but I not test it

Code: Select all | Expand

#include "fivewin.ch"

function Main()
    local oWnd

    // Define the window
    DEFINE WINDOW oWnd TITLE "Rectangle Example" SIZE 640, 480

    // Set the pen color and thickness for the rectangle border
    oWnd: SetPen( RGB(255, 0, 0), 3 )  // Red color, 3 pixels thickness

    // Set the brush color for the rectangle fill (optional)
    oWnd: SetBrush( RGB(0, 255, 0) )   // Green fill (you can also use a transparent fill)

    // Draw the rectangle with specific coordinates
    oWnd: DrawRect( 100, 100, 500, 300 ) // x1, y1, x2, y2

    // Show and activate the window
    ACTIVATE WINDOW oWnd

return
]]>
Natter wrote: Wed Feb 26, 2025 8:29 am Hi,

I need to draw a rectangle on a window with an outline of a certain color and thickness. How to do it ?

Try this but I not test it

Code: Select all | Expand

#include "fivewin.ch"

function Main()
    local oWnd

    // Define the window
    DEFINE WINDOW oWnd TITLE "Rectangle Example" SIZE 640, 480

    // Set the pen color and thickness for the rectangle border
    oWnd: SetPen( RGB(255, 0, 0), 3 )  // Red color, 3 pixels thickness

    // Set the brush color for the rectangle fill (optional)
    oWnd: SetBrush( RGB(0, 255, 0) )   // Green fill (you can also use a transparent fill)

    // Draw the rectangle with specific coordinates
    oWnd: DrawRect( 100, 100, 500, 300 ) // x1, y1, x2, y2

    // Show and activate the window
    ACTIVATE WINDOW oWnd

return
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: SetDlgGradient :: Author oliveiros junior]]> 2025-02-26T04:08:08-07:00 2025-02-26T04:08:08-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45457&p=277959#p277959
I would like to know if it is possible to cancel the inheritance of a SetDlgGradient?

Ex: I applied the SetDlgGradient command on one screen and when moving to another, I want to cancel this inheritance.

Att.,

Oliveiros Junior]]>

I would like to know if it is possible to cancel the inheritance of a SetDlgGradient?

Ex: I applied the SetDlgGradient command on one screen and when moving to another, I want to cancel this inheritance.

Att.,

Oliveiros Junior]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: SetDlgGradient :: Reply by Antonio Linares]]> 2025-02-26T04:20:57-07:00 2025-02-26T04:20:57-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=3&t=45457&p=277960#p277960 <![CDATA[mod_harbour :: tool for documentation :: Author Otto]]> 2025-02-04T01:38:20-07:00 2025-02-04T01:38:20-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=45&t=45376&p=277411#p277411 TreeView for Navigation
Documents are organized hierarchically, similar to an explorer view.
New nodes (e.g., chapters or subchapters) can be easily added.
TinyMCE as an Editor
Content can be edited in rich-text format, allowing for formatting, images, and links.
Structured content such as code snippets, tables, or lists can be seamlessly inserted.
Automated Flowcharts with AI
Instead of drawing flowcharts manually, the system can automatically generate them from process descriptions.
Ideal for documenting workflows, algorithms, or decision processes.
Server-Side Storage with PHP
Created documents and diagrams are stored server-side and can be reloaded at any time.
Versioning or export functions could be added as extensions.
Helpful for the Transition from XBase/Clipper to Web Technologies
Structured documentation makes it easier to analyze older desktop systems and migrate them to web technologies.
The tool is suitable for both technical documentation and the visualization of software and business processes.
The advantage here is that I use HTML to store the documents. This allows me to make the information immediately available via a web browser without needing to change the format.
Next step: Integration of full-text search.

Image]]>
TreeView for Navigation
Documents are organized hierarchically, similar to an explorer view.
New nodes (e.g., chapters or subchapters) can be easily added.
TinyMCE as an Editor
Content can be edited in rich-text format, allowing for formatting, images, and links.
Structured content such as code snippets, tables, or lists can be seamlessly inserted.
Automated Flowcharts with AI
Instead of drawing flowcharts manually, the system can automatically generate them from process descriptions.
Ideal for documenting workflows, algorithms, or decision processes.
Server-Side Storage with PHP
Created documents and diagrams are stored server-side and can be reloaded at any time.
Versioning or export functions could be added as extensions.
Helpful for the Transition from XBase/Clipper to Web Technologies
Structured documentation makes it easier to analyze older desktop systems and migrate them to web technologies.
The tool is suitable for both technical documentation and the visualization of software and business processes.
The advantage here is that I use HTML to store the documents. This allows me to make the information immediately available via a web browser without needing to change the format.
Next step: Integration of full-text search.

Image]]>
<![CDATA[mod_harbour :: Re: Building modharbour with ADS on Linux :: Reply by giuliano]]> 2025-02-03T06:37:43-07:00 2025-02-03T06:37:43-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=45&t=44651&p=277384#p277384 I was away for a week.

These are my step to use ADS client with Harbour in Linux OS:

1) Download from GitHub current release of Harbour and clone it in a new folder of your filesystem

git clone https://github.com/harbour/core harbour

2) Install ADS driver

apt-get install perl (if perl not present)

Download ADS driver from advantage website – (no longer available …???)
I use ADS 11 server release – I’ve download ADS driver for Linux many years ago.
Copy driver (tar file or folder already decompressed) into Linux machine and install it with default values (only select correct language). Move in Aceapi (ADS) folder and try:
chmod +x setup.pl
./setup.pl

3) Config. and Make Harbour

Install GCC (if not present): apt-get install gcc
Install MAKE (if not present): apt-get install make
Install libcurl-devel: apt-get install libcurl4-openssl-dev
Install openssl: apt-get install libssl-dev

Move in Harbour folder and digit:

export HB_WITH_PCRE=local
export HB_USER_CFLAGS="-fPIC"
export HB_WITH_CURL=/usr/include
export HB_WITH_OPENSSL=yes
export HB_BUILD_CONTRIBS=

make
make install

Now you’re ready to build a simple prg to connect ADS SERVER

Bye]]>
I was away for a week.

These are my step to use ADS client with Harbour in Linux OS:

1) Download from GitHub current release of Harbour and clone it in a new folder of your filesystem

git clone https://github.com/harbour/core harbour

2) Install ADS driver

apt-get install perl (if perl not present)

Download ADS driver from advantage website – (no longer available …???)
I use ADS 11 server release – I’ve download ADS driver for Linux many years ago.
Copy driver (tar file or folder already decompressed) into Linux machine and install it with default values (only select correct language). Move in Aceapi (ADS) folder and try:
chmod +x setup.pl
./setup.pl

3) Config. and Make Harbour

Install GCC (if not present): apt-get install gcc
Install MAKE (if not present): apt-get install make
Install libcurl-devel: apt-get install libcurl4-openssl-dev
Install openssl: apt-get install libssl-dev

Move in Harbour folder and digit:

export HB_WITH_PCRE=local
export HB_USER_CFLAGS="-fPIC"
export HB_WITH_CURL=/usr/include
export HB_WITH_OPENSSL=yes
export HB_BUILD_CONTRIBS=

make
make install

Now you’re ready to build a simple prg to connect ADS SERVER

Bye]]>
<![CDATA[mod_harbour :: Re: Building modharbour with ADS on Linux :: Reply by Lailton]]> 2025-02-03T20:25:10-07:00 2025-02-03T20:25:10-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=45&t=44651&p=277406#p277406
I was looking for the download ADS but like you said the download is no longer available.]]>

I was looking for the download ADS but like you said the download is no longer available.]]>
<![CDATA[mod_harbour :: Re: Building modharbour with ADS on Linux :: Reply by giuliano]]> 2025-02-04T00:09:57-07:00 2025-02-04T00:09:57-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=45&t=44651&p=277410#p277410 what version of ADS are you using ?

Bye]]>
what version of ADS are you using ?

Bye]]>
<![CDATA[mod_harbour :: Re: Building modharbour with ADS on Linux :: Reply by Lailton]]> 2025-02-04T16:03:28-07:00 2025-02-04T16:03:28-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=45&t=44651&p=277430#p277430 <![CDATA[mod_harbour :: Re: Building modharbour with ADS on Linux :: Reply by giuliano]]> 2025-02-05T00:01:06-07:00 2025-02-05T00:01:06-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=45&t=44651&p=277437#p277437 Bye]]> Bye]]> <![CDATA[mod_harbour :: Re: Building modharbour with ADS on Linux :: Reply by Lailton]]> 2025-02-05T05:54:03-07:00 2025-02-05T05:54:03-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=45&t=44651&p=277444#p277444 my email is lailton@paysoft.com.br

Thank you]]>
my email is lailton@paysoft.com.br

Thank you]]>
<![CDATA[mod_harbour :: Re: Building modharbour with ADS on Linux :: Reply by giuliano]]> 2025-02-05T06:16:44-07:00 2025-02-05T06:16:44-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=45&t=44651&p=277445#p277445 Bye]]> Bye]]> <![CDATA[mod_harbour :: Re: Building modharbour with ADS on Linux :: Reply by Lailton]]> 2025-02-05T15:12:44-07:00 2025-02-05T15:12:44-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=45&t=44651&p=277454#p277454 <![CDATA[mod_harbour :: Re: UT v2.0 - Open Souce project :: Reply by Taavi]]> 2025-02-09T11:07:19-07:00 2025-02-09T11:07:19-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=45&t=45345&p=277553#p277553 any ideas what can cause this link error?

Taavi


D:\carles\ut.samples\demo>rem @echo off
D:\carles\ut.samples\demo>set hbdir=d:\carles\ut.harbour
D:\carles\ut.samples\demo>set include=d:\carles\ut.harbour\include
D:\carles\ut.samples\demo>set lib=d:\carles\ut.harbour\lib
D:\carles\ut.samples\demo>rem path c:\windows\system32;c:\windows;d:\carles\ut.harbour;d:\carles\ut.harbour\bin;\bin;
D:\carles\ut.samples\demo>if exist "D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" call "D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
**********************************************************************
** Visual Studio 2022 Developer Command Prompt v17.12.4
** Copyright (c) 2022 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
hbmk2: Linking... app.exe

hbmk2: Error: Referenced, missing, but unknown function(s):
WAPI_OUTPUTDEBUGSTRING()
*** Error
Press any key to continue . . .]]>
any ideas what can cause this link error?

Taavi


D:\carles\ut.samples\demo>rem @echo off
D:\carles\ut.samples\demo>set hbdir=d:\carles\ut.harbour
D:\carles\ut.samples\demo>set include=d:\carles\ut.harbour\include
D:\carles\ut.samples\demo>set lib=d:\carles\ut.harbour\lib
D:\carles\ut.samples\demo>rem path c:\windows\system32;c:\windows;d:\carles\ut.harbour;d:\carles\ut.harbour\bin;\bin;
D:\carles\ut.samples\demo>if exist "D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" call "D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
**********************************************************************
** Visual Studio 2022 Developer Command Prompt v17.12.4
** Copyright (c) 2022 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
hbmk2: Linking... app.exe

hbmk2: Error: Referenced, missing, but unknown function(s):
WAPI_OUTPUTDEBUGSTRING()
*** Error
Press any key to continue . . .]]>
<![CDATA[mod_harbour :: Re: UT v2.0 - Open Souce project :: Reply by Enrico Maria Giordano]]> 2025-02-09T13:38:50-07:00 2025-02-09T13:38:50-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=45&t=45345&p=277557#p277557 <![CDATA[mod_harbour :: Re: UT v2.0 - Open Souce project :: Reply by Taavi]]> 2025-02-10T09:11:42-07:00 2025-02-10T09:11:42-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=45&t=45345&p=277567#p277567 link successful now.]]> link successful now.]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Clausula TRANSPARENT no funciona en GROUP :: Reply by leandro]]> 2025-01-28T13:52:22-07:00 2025-01-28T13:52:22-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45346&p=277254#p277254 <![CDATA[FiveWin para Harbour/xHarbour :: Color de fondo y texto a los campos TEXTO (MEMO) :: Author Armando]]> 2025-01-27T16:52:55-07:00 2025-01-27T16:52:55-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45351&p=277234#p277234
Con el siguiente código en el MAIN, se define el color de los GET al tomar el foco y al perderlo

Code: Select all | Expand

   TGet():lClrFocus := (.T.)
   TGet():nClrFocus := nRGB( 213, 219, 255 )
Pero para los campos TEXT (MEMO) no funciona, hay forma?

Saludos]]>

Con el siguiente código en el MAIN, se define el color de los GET al tomar el foco y al perderlo

Code: Select all | Expand

   TGet():lClrFocus := (.T.)
   TGet():nClrFocus := nRGB( 213, 219, 255 )
Pero para los campos TEXT (MEMO) no funciona, hay forma?

Saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Color de fondo y texto a los campos TEXTO (MEMO) :: Reply by karinha]]> 2025-01-28T06:22:27-07:00 2025-01-28T06:22:27-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45351&p=277240#p277240

Code: Select all | Expand

// C:\FWH..\SAMPLES\CORGET2.PRG
// http://forums.fivetechsupport.com/viewtopic.php?f=3&t=42551&sid=3bfb222ce4809ed3dd5509ea234429ea

#include "fivewin.ch"

#Define CLR_SOFTYELLOW nRGB( 255, 251, 225 ) //-> Amerelo Soft.

FUNCTION Main()

   LOCAL aColors := { CLR_WHITE, CLR_YELLOW, CLR_HGREEN }
   LOCAL oDlg, oFont, oGet, oMemo, n, oBtnCal, oBtnCan
   LOCAL nColor   := 1
   LOCAL CText    := "This is some" + CRLF + "text"

   SetGetColorFocus()

   tGet():lDisColors  := .F.
   tGet():nClrTextDis := CLR_HBLUE
   tGet():nClrPaneDis := CLR_WHITE

   DEFINE FONT oFont  NAME "Ms Sans Serif"  SIZE 00, -18 BOLD

   DEFINE DIALOG oDlg SIZE 300,350 PIXEL TRUEPIXEL FONT oFont ;
      COLORS CLR_BLACK, CLR_WHITE TRANSPARENT

   oDlg:lHelpIcon := .F.

   /*
   @ 20,20 SAY "Color Code : " GET nColor SIZE 200,24 PIXEL PICTURE "9" ;
      OF oDlg VALID ( ;
            n  := aColors[ ( ( nColor - 1 ) % 3 ) + 1 ], ;
            oMemo:SetColor( CLR_BLACK, n ), ;
            .t. )
   */

   @ 20, 20 SAY "Cambiar Color: " SIZE 200,24 PIXEL OF oDlg UPDATE TRANSPARENT

   @ 60, 20 GET oMemo VAR cText MEMO SIZE 260,220 PIXEL OF oDlg  /* ;
      COLORS CLR_BLACK, aColors[ nColor ] */

   @ 300, 100  BTNBMP oBtnCal FILENAME "..\bitmaps\16x16\floppy.bmp" ;
       FLAT SIZE 20, 14 PIXEL OF oDlg NOBORDER                     ;
       ACTION SET_COLOR( oMemo, nColor )

   @ 300, 150  BTNBMP oBtnCan FILENAME "..\bitmaps\16x16\Exit.bmp" ;
       FLAT SIZE 20, 14 PIXEL OF oDlg NOBORDER                     ;
       ACTION( oDlg:End() )

   oBtnCan:lCancel := .T.

   ACTIVATE DIALOG oDlg CENTERED ON INIT oMemo:SetFocus()

   oFont:End()

RETURN NIL

FUNCTION SET_COLOR( oMemo, nColor )

   LOCAL oIni, oBrush, oBmp
   LOCAL nTipo, cStyle, cFile, cLogo, nRow, nCol, lSelect

   nColor := ChooseColor()

   oMemo:SetColor( nColor, CLR_WHITE )
   oMemo:Refresh()

RETURN( nColor )

// FIN / END
Regards, saludos.]]>

Code: Select all | Expand

// C:\FWH..\SAMPLES\CORGET2.PRG
// http://forums.fivetechsupport.com/viewtopic.php?f=3&t=42551&sid=3bfb222ce4809ed3dd5509ea234429ea

#include "fivewin.ch"

#Define CLR_SOFTYELLOW nRGB( 255, 251, 225 ) //-> Amerelo Soft.

FUNCTION Main()

   LOCAL aColors := { CLR_WHITE, CLR_YELLOW, CLR_HGREEN }
   LOCAL oDlg, oFont, oGet, oMemo, n, oBtnCal, oBtnCan
   LOCAL nColor   := 1
   LOCAL CText    := "This is some" + CRLF + "text"

   SetGetColorFocus()

   tGet():lDisColors  := .F.
   tGet():nClrTextDis := CLR_HBLUE
   tGet():nClrPaneDis := CLR_WHITE

   DEFINE FONT oFont  NAME "Ms Sans Serif"  SIZE 00, -18 BOLD

   DEFINE DIALOG oDlg SIZE 300,350 PIXEL TRUEPIXEL FONT oFont ;
      COLORS CLR_BLACK, CLR_WHITE TRANSPARENT

   oDlg:lHelpIcon := .F.

   /*
   @ 20,20 SAY "Color Code : " GET nColor SIZE 200,24 PIXEL PICTURE "9" ;
      OF oDlg VALID ( ;
            n  := aColors[ ( ( nColor - 1 ) % 3 ) + 1 ], ;
            oMemo:SetColor( CLR_BLACK, n ), ;
            .t. )
   */

   @ 20, 20 SAY "Cambiar Color: " SIZE 200,24 PIXEL OF oDlg UPDATE TRANSPARENT

   @ 60, 20 GET oMemo VAR cText MEMO SIZE 260,220 PIXEL OF oDlg  /* ;
      COLORS CLR_BLACK, aColors[ nColor ] */

   @ 300, 100  BTNBMP oBtnCal FILENAME "..\bitmaps\16x16\floppy.bmp" ;
       FLAT SIZE 20, 14 PIXEL OF oDlg NOBORDER                     ;
       ACTION SET_COLOR( oMemo, nColor )

   @ 300, 150  BTNBMP oBtnCan FILENAME "..\bitmaps\16x16\Exit.bmp" ;
       FLAT SIZE 20, 14 PIXEL OF oDlg NOBORDER                     ;
       ACTION( oDlg:End() )

   oBtnCan:lCancel := .T.

   ACTIVATE DIALOG oDlg CENTERED ON INIT oMemo:SetFocus()

   oFont:End()

RETURN NIL

FUNCTION SET_COLOR( oMemo, nColor )

   LOCAL oIni, oBrush, oBmp
   LOCAL nTipo, cStyle, cFile, cLogo, nRow, nCol, lSelect

   nColor := ChooseColor()

   oMemo:SetColor( nColor, CLR_WHITE )
   oMemo:Refresh()

RETURN( nColor )

// FIN / END
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Color de fondo y texto a los campos TEXTO (MEMO) :: Reply by karinha]]> 2025-01-28T06:24:00-07:00 2025-01-28T06:24:00-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45351&p=277241#p277241

Code: Select all | Expand

// C:\FWH..\SAMPLES\CORMEMO.PRG

***************************************************
* Multi SAY/GET testing in 32 bit Xbase++ mode....*
* Jon Berg 10-8-99                                *
***************************************************
#include "FiveWin.ch"
*********************

#Define CLR_ORANGE     nRGB( 255, 165, 000 ) //-> Orange - Laranja

static oWnd, lCambiaColor := .T.

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

function Main()

   DEFINE WINDOW oWnd FROM 1, 1 TO 30, 70 ;
      TITLE "Testing Says/Gets and Get Pictures and Foreground/Background Colors" ;
      MENU BuildMenu()

   SET MESSAGE OF oWnd TO "FiveWin++"

   ACTIVATE WINDOW oWnd MAXIMIZED

return nil

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

function BuildMenu()

   local oMenu

   MENU oMenu
      MENUITEM "&Say/Get Testing"
      MENU
         MENUITEM "&Build Multi GET Dialog1 with PICTs "  ACTION (BldDlg1())
         MENUITEM "Item &2"  ACTION MsgInfo("Test Menu Item2")
         MENUITEM "Item &3"  ACTION MsgInfo("Test Menu Item3")
         SEPARATOR
         MENUITEM "Exit" ACTION oWnd:End()
      ENDMENU
  ENDMENU
return oMenu

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

function BldDlg1()

   local oDlg, oArial, oFont, oMemo, oGroup
   local cName1    := "ONE          "
   local cName2    := "two        "
   local cName3    := "3        "
   local cName4    := "4       "
   local cName5    := "5        "
   local cName6    := "54321        "
   local cName7    := "567890                  "
   local lRESERVE  := .F.
   local cPROV_TYPE:= SPACE(20)
   local cPHONE    := SPACE(18)
   local dCERT_DATE:= CTOD('  /  /  ')
   local nPROC_DAYS:= 9876
   local cTEXT     := "Use Tab or Shift Tab to move to next get."+SPACE(256)
   LOCAL aGet      := ARRAY(5)

   SET EPOCH TO 1920
   SET CENTURY ON

   DEFINE DIALOG oDlg FROM 1, 1 TO 600, 800 ;
          TITLE "Hello Gets!"               ;
          STYLE  nOr(WS_POPUP,              ;
                     WS_VISIBLE,            ;
                     WS_CAPTION,            ;
                     WS_THICKFRAME,         ;
                     WS_SYSMENU,            ;
                     WS_MINIMIZEBOX,        ;
                     WS_MAXIMIZEBOX)        ;
          PIXEL OF oWnd                            && Defined by Pixels


   DEFINE FONT oFont NAME "FIXEDSYS" SIZE 10, -10    && Use a Nonproportional font
   SET FONT OF oDlg TO oFont                         && so characters line up in Says

   @  00, 03 SAY "Showing how to do SAY/GETs from source code.  No DLLs or RC files. " OF oDlg COLORS CLR_BLACK,CLR_YELLOW BORDER SIZE 300,10
   @  01, 03 SAY "Navigation Keys to traverse gets are Ret, Arrows, Tab and Shift Tab....ESC to close this Dialog" OF oDlg COLORS CLR_WHITE,CLR_BLUE   BORDER SIZE 380,10
   @  02, 03 SAY "Testing Say with different colors and a border. "  OF oDlg COLORS CLR_HRED   ,CLR_WHITE  BORDER SIZE 200,10
   //@  03, 03 SAY "Testing Say with different colors and no border."  OF oDlg COLORS CLR_HBLUE  ,CLR_WHITE         SIZE 200,10

   // COLOR IN GROUP BOX.

   @ 3.95, 2.96 SAY "" OF oDlg COLORS CLR_BLACK, CLR_YELLOW BORDER ;
      SIZE 192, 45 UPDATE

   @ 04, 2.50 GROUP oGroup TO 7.50, 30  LABEL "GROUP BOX COLOR" OF oDlg ;
      TRANSPARENT COLOR CLR_ORANGE, CLR_WHITE

   // @ 163, 2 GROUP oGroup TO 192, 200 LABEL "RECOMENDACIONES" OF oDlg  pixel TRANSPARENT

   @  05, 19 SAY "Field length" OF oDlg SIZE 65,10  && Use normal colors
   @  06, 19 SAY "      |     " OF oDlg SIZE 65,10

   @  07, 03 SAY "1  Chr No PICT                       13" OF oDlg COLORS CLR_BLACK ,CLR_HCYAN BORDER SIZE 195,10
   @  08, 03 SAY "2  Chr No PICT                       11" OF oDlg COLORS CLR_BLUE  ,CLR_HCYAN BORDER SIZE 195,10
   @  09, 03 SAY "3  Chr No PICT                        9" OF oDlg COLORS CLR_RED   ,CLR_HCYAN BORDER SIZE 195,10
   @  10, 03 SAY "4  Chr    PICT 'NNNNNNNN'             8" OF oDlg COLORS CLR_HRED  ,CLR_HCYAN BORDER SIZE 195,10
   @  11, 03 SAY "5  Chr    PICT 'AAAAAAAAA'            9" OF oDlg COLORS CLR_HGREEN,CLR_HCYAN BORDER SIZE 195,10
   @  12, 03 SAY "6  Chr    PICT '9999999999'          13" OF oDlg COLORS CLR_BLACK ,CLR_HCYAN BORDER SIZE 195,10
   @  13, 03 SAY "7  Chr    PICT '@K@!@S10'            24" OF oDlg COLORS CLR_BLACK ,CLR_HCYAN BORDER SIZE 195,10
   @  14, 03 SAY "   Logic 'T/F or Y/N'                 1" OF oDlg COLORS CLR_BLACK ,CLR_HCYAN BORDER SIZE 195,10
   @  15, 03 SAY "   Chr    PICT '@S5'and !EMPTY()     20" OF oDlg COLORS CLR_BLACK ,CLR_HCYAN BORDER SIZE 195,10
   @  16, 03 SAY "   Chr    PICT '(999)A99-9!99-9999'  18" OF oDlg COLORS CLR_BLACK ,CLR_HCYAN BORDER SIZE 195,10
   @  17, 03 SAY "   Date   !> comp date or empty       8" OF oDlg COLORS CLR_BLACK ,CLR_HCYAN BORDER SIZE 195,10
   @  16.8,   35 SAY "Set Century is on."                  OF oDlg SIZE 195,10
   @  17.3,   35 SAY "Set Epoch is set to 1919."           OF oDlg SIZE 195,10
   @  18, 03 SAY "   Num    PICT '99' !>10             10" OF oDlg COLORS CLR_BLACK ,CLR_HCYAN BORDER SIZE 195,10
   @  19, 03 SAY "   Memo No PICT                     256" OF oDlg COLORS CLR_BLACK ,CLR_HCYAN BORDER SIZE 195,10

   @  07, 28 GET cName1     OF oDlg COLORS "B/BG" SIZE 20,10
   @  08, 28 GET cName2     OF oDlg COLORS CLR_BLACK,CLR_HCYAN
   @  09, 28 GET cName3     OF oDlg COLORS CLR_BLACK,CLR_YELLOW
   @  10, 28 GET cName4     OF oDlg PICTURE "NNNNNNNN"
   @  11, 28 GET cName5     OF oDlg PICTURE "AAAAAAAAA"
   @  12, 28 GET cName6     OF oDlg PICTURE "9999999999"

   @  13, 28 GET cName7     OF oDlg PICTURE "@K@!@S10"
   @  14, 28 GET lRESERVE   OF oDlg PICTURE  "Y"  MESSAGE "Please type in a Y or N "
   @  15, 28 GET cPROV_TYPE OF oDlg PICTURE  "@S5" VALID IF(EMPTY(cPROV_TYPE),(MSGINFO("You have to enter at least 1 Character"),.F.),.T.)
   @  16, 28 GET cPHONE     OF oDlg PICTURE  "(999)A99-9!99-9999"

   @  17, 28 GET dCERT_DATE OF oDlg SIZE 50,10 VALID (IF(dCERT_DATE>DATE(),(MSGINFO("Certification Date must not be greater than Computer Date or blank!"),.F.),.T.)) MESSAGE "Please type in the Certification Date"

   @  18, 28 GET nPROC_DAYS OF oDlg PICTURE "99" VALID (IF(nPROC_DAYS>10,(MSGINFO("Processing Days Must be less that 11 or Empty"),.F.),.T.)) MESSAGE "Please type in the Number of days it took to process"

   //@  19, 28 GET cText MEMO  OF oDlg SIZE 140,46
   @  19, 28 GET aGet[1] VAR cText MEMO  OF oDlg SIZE 140,46 ;
             ON CHANGE( SET_COLOR( aGet ) )

   aGet[1]:bGotFocus  := {|| aGet[1]:SetColor(RGB(0,0,0),RGB(197,205,255)),aGet[1]:Refresh()}
   aGet[1]:bLostFocus := {|| aGet[1]:SetColor(RGB(0,0,0),RGB(255,255,255)),aGet[1]:Refresh()}

   ACTIVATE DIALOG oDlg CENTERED ;
      ON LEFT CLICK nMsgBox( "Incredible!" )

   lCambiaColor := .T.
   
return nil

FUNCTION SET_COLOR( aGet )  // mas o menos esto, cambia a tu gosto.

  LOCAL nCor

  IF lCambiaColor // cambia color solo una viez

      aGet[1]:SetColor( aGet[1]:nClrText, nCor := ChooseColor( aGet[1]:nClrPane ) )

      aGet[1]:Refresh()
      aGet[1]:SetFocus()

   ENDIF

   lCambiaColor := .F.

RETURN NIL
Regards, saludos.]]>

Code: Select all | Expand

// C:\FWH..\SAMPLES\CORMEMO.PRG

***************************************************
* Multi SAY/GET testing in 32 bit Xbase++ mode....*
* Jon Berg 10-8-99                                *
***************************************************
#include "FiveWin.ch"
*********************

#Define CLR_ORANGE     nRGB( 255, 165, 000 ) //-> Orange - Laranja

static oWnd, lCambiaColor := .T.

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

function Main()

   DEFINE WINDOW oWnd FROM 1, 1 TO 30, 70 ;
      TITLE "Testing Says/Gets and Get Pictures and Foreground/Background Colors" ;
      MENU BuildMenu()

   SET MESSAGE OF oWnd TO "FiveWin++"

   ACTIVATE WINDOW oWnd MAXIMIZED

return nil

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

function BuildMenu()

   local oMenu

   MENU oMenu
      MENUITEM "&Say/Get Testing"
      MENU
         MENUITEM "&Build Multi GET Dialog1 with PICTs "  ACTION (BldDlg1())
         MENUITEM "Item &2"  ACTION MsgInfo("Test Menu Item2")
         MENUITEM "Item &3"  ACTION MsgInfo("Test Menu Item3")
         SEPARATOR
         MENUITEM "Exit" ACTION oWnd:End()
      ENDMENU
  ENDMENU
return oMenu

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

function BldDlg1()

   local oDlg, oArial, oFont, oMemo, oGroup
   local cName1    := "ONE          "
   local cName2    := "two        "
   local cName3    := "3        "
   local cName4    := "4       "
   local cName5    := "5        "
   local cName6    := "54321        "
   local cName7    := "567890                  "
   local lRESERVE  := .F.
   local cPROV_TYPE:= SPACE(20)
   local cPHONE    := SPACE(18)
   local dCERT_DATE:= CTOD('  /  /  ')
   local nPROC_DAYS:= 9876
   local cTEXT     := "Use Tab or Shift Tab to move to next get."+SPACE(256)
   LOCAL aGet      := ARRAY(5)

   SET EPOCH TO 1920
   SET CENTURY ON

   DEFINE DIALOG oDlg FROM 1, 1 TO 600, 800 ;
          TITLE "Hello Gets!"               ;
          STYLE  nOr(WS_POPUP,              ;
                     WS_VISIBLE,            ;
                     WS_CAPTION,            ;
                     WS_THICKFRAME,         ;
                     WS_SYSMENU,            ;
                     WS_MINIMIZEBOX,        ;
                     WS_MAXIMIZEBOX)        ;
          PIXEL OF oWnd                            && Defined by Pixels


   DEFINE FONT oFont NAME "FIXEDSYS" SIZE 10, -10    && Use a Nonproportional font
   SET FONT OF oDlg TO oFont                         && so characters line up in Says

   @  00, 03 SAY "Showing how to do SAY/GETs from source code.  No DLLs or RC files. " OF oDlg COLORS CLR_BLACK,CLR_YELLOW BORDER SIZE 300,10
   @  01, 03 SAY "Navigation Keys to traverse gets are Ret, Arrows, Tab and Shift Tab....ESC to close this Dialog" OF oDlg COLORS CLR_WHITE,CLR_BLUE   BORDER SIZE 380,10
   @  02, 03 SAY "Testing Say with different colors and a border. "  OF oDlg COLORS CLR_HRED   ,CLR_WHITE  BORDER SIZE 200,10
   //@  03, 03 SAY "Testing Say with different colors and no border."  OF oDlg COLORS CLR_HBLUE  ,CLR_WHITE         SIZE 200,10

   // COLOR IN GROUP BOX.

   @ 3.95, 2.96 SAY "" OF oDlg COLORS CLR_BLACK, CLR_YELLOW BORDER ;
      SIZE 192, 45 UPDATE

   @ 04, 2.50 GROUP oGroup TO 7.50, 30  LABEL "GROUP BOX COLOR" OF oDlg ;
      TRANSPARENT COLOR CLR_ORANGE, CLR_WHITE

   // @ 163, 2 GROUP oGroup TO 192, 200 LABEL "RECOMENDACIONES" OF oDlg  pixel TRANSPARENT

   @  05, 19 SAY "Field length" OF oDlg SIZE 65,10  && Use normal colors
   @  06, 19 SAY "      |     " OF oDlg SIZE 65,10

   @  07, 03 SAY "1  Chr No PICT                       13" OF oDlg COLORS CLR_BLACK ,CLR_HCYAN BORDER SIZE 195,10
   @  08, 03 SAY "2  Chr No PICT                       11" OF oDlg COLORS CLR_BLUE  ,CLR_HCYAN BORDER SIZE 195,10
   @  09, 03 SAY "3  Chr No PICT                        9" OF oDlg COLORS CLR_RED   ,CLR_HCYAN BORDER SIZE 195,10
   @  10, 03 SAY "4  Chr    PICT 'NNNNNNNN'             8" OF oDlg COLORS CLR_HRED  ,CLR_HCYAN BORDER SIZE 195,10
   @  11, 03 SAY "5  Chr    PICT 'AAAAAAAAA'            9" OF oDlg COLORS CLR_HGREEN,CLR_HCYAN BORDER SIZE 195,10
   @  12, 03 SAY "6  Chr    PICT '9999999999'          13" OF oDlg COLORS CLR_BLACK ,CLR_HCYAN BORDER SIZE 195,10
   @  13, 03 SAY "7  Chr    PICT '@K@!@S10'            24" OF oDlg COLORS CLR_BLACK ,CLR_HCYAN BORDER SIZE 195,10
   @  14, 03 SAY "   Logic 'T/F or Y/N'                 1" OF oDlg COLORS CLR_BLACK ,CLR_HCYAN BORDER SIZE 195,10
   @  15, 03 SAY "   Chr    PICT '@S5'and !EMPTY()     20" OF oDlg COLORS CLR_BLACK ,CLR_HCYAN BORDER SIZE 195,10
   @  16, 03 SAY "   Chr    PICT '(999)A99-9!99-9999'  18" OF oDlg COLORS CLR_BLACK ,CLR_HCYAN BORDER SIZE 195,10
   @  17, 03 SAY "   Date   !> comp date or empty       8" OF oDlg COLORS CLR_BLACK ,CLR_HCYAN BORDER SIZE 195,10
   @  16.8,   35 SAY "Set Century is on."                  OF oDlg SIZE 195,10
   @  17.3,   35 SAY "Set Epoch is set to 1919."           OF oDlg SIZE 195,10
   @  18, 03 SAY "   Num    PICT '99' !>10             10" OF oDlg COLORS CLR_BLACK ,CLR_HCYAN BORDER SIZE 195,10
   @  19, 03 SAY "   Memo No PICT                     256" OF oDlg COLORS CLR_BLACK ,CLR_HCYAN BORDER SIZE 195,10

   @  07, 28 GET cName1     OF oDlg COLORS "B/BG" SIZE 20,10
   @  08, 28 GET cName2     OF oDlg COLORS CLR_BLACK,CLR_HCYAN
   @  09, 28 GET cName3     OF oDlg COLORS CLR_BLACK,CLR_YELLOW
   @  10, 28 GET cName4     OF oDlg PICTURE "NNNNNNNN"
   @  11, 28 GET cName5     OF oDlg PICTURE "AAAAAAAAA"
   @  12, 28 GET cName6     OF oDlg PICTURE "9999999999"

   @  13, 28 GET cName7     OF oDlg PICTURE "@K@!@S10"
   @  14, 28 GET lRESERVE   OF oDlg PICTURE  "Y"  MESSAGE "Please type in a Y or N "
   @  15, 28 GET cPROV_TYPE OF oDlg PICTURE  "@S5" VALID IF(EMPTY(cPROV_TYPE),(MSGINFO("You have to enter at least 1 Character"),.F.),.T.)
   @  16, 28 GET cPHONE     OF oDlg PICTURE  "(999)A99-9!99-9999"

   @  17, 28 GET dCERT_DATE OF oDlg SIZE 50,10 VALID (IF(dCERT_DATE>DATE(),(MSGINFO("Certification Date must not be greater than Computer Date or blank!"),.F.),.T.)) MESSAGE "Please type in the Certification Date"

   @  18, 28 GET nPROC_DAYS OF oDlg PICTURE "99" VALID (IF(nPROC_DAYS>10,(MSGINFO("Processing Days Must be less that 11 or Empty"),.F.),.T.)) MESSAGE "Please type in the Number of days it took to process"

   //@  19, 28 GET cText MEMO  OF oDlg SIZE 140,46
   @  19, 28 GET aGet[1] VAR cText MEMO  OF oDlg SIZE 140,46 ;
             ON CHANGE( SET_COLOR( aGet ) )

   aGet[1]:bGotFocus  := {|| aGet[1]:SetColor(RGB(0,0,0),RGB(197,205,255)),aGet[1]:Refresh()}
   aGet[1]:bLostFocus := {|| aGet[1]:SetColor(RGB(0,0,0),RGB(255,255,255)),aGet[1]:Refresh()}

   ACTIVATE DIALOG oDlg CENTERED ;
      ON LEFT CLICK nMsgBox( "Incredible!" )

   lCambiaColor := .T.
   
return nil

FUNCTION SET_COLOR( aGet )  // mas o menos esto, cambia a tu gosto.

  LOCAL nCor

  IF lCambiaColor // cambia color solo una viez

      aGet[1]:SetColor( aGet[1]:nClrText, nCor := ChooseColor( aGet[1]:nClrPane ) )

      aGet[1]:Refresh()
      aGet[1]:SetFocus()

   ENDIF

   lCambiaColor := .F.

RETURN NIL
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Color de fondo y texto a los campos TEXTO (MEMO) :: Reply by karinha]]> 2025-01-28T06:34:01-07:00 2025-01-28T06:34:01-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45351&p=277242#p277242
viewtopic.php?p=269384&hilit=color+in+memo#p269384

Regards, saludos.]]>

viewtopic.php?p=269384&hilit=color+in+memo#p269384

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Color de fondo y texto a los campos TEXTO (MEMO) :: Reply by Armando]]> 2025-01-28T12:48:53-07:00 2025-01-28T12:48:53-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45351&p=277253#p277253
Ya está integrada a FW?, a partir de que versión?, o debo compilarla en mi aplicación?

Con estas líneas de código me tira error

Code: Select all | Expand

   TMultiGet():bColorBlock := { |oGet| If( oGet:lFocused, { CLR_WHITE, CLR_GREEN },;
                                        If( ! oGet:lActive, { CLR_RED, CLR_YELLOW }, { CLR_BLACK, CLR_WHITE } ) ) }
Error description: Error BASE/1005 Message not found: TMULTIGET:_BCOLORBLOCK

Tengo FWH2307

Saludos]]>

Ya está integrada a FW?, a partir de que versión?, o debo compilarla en mi aplicación?

Con estas líneas de código me tira error

Code: Select all | Expand

   TMultiGet():bColorBlock := { |oGet| If( oGet:lFocused, { CLR_WHITE, CLR_GREEN },;
                                        If( ! oGet:lActive, { CLR_RED, CLR_YELLOW }, { CLR_BLACK, CLR_WHITE } ) ) }
Error description: Error BASE/1005 Message not found: TMULTIGET:_BCOLORBLOCK

Tengo FWH2307

Saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Color de fondo y texto a los campos TEXTO (MEMO) :: Reply by Armando]]> 2025-01-28T15:08:03-07:00 2025-01-28T15:08:03-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45351&p=277257#p277257
Solucionado, agregué MGET.PRG a mi compilación.

Saludos]]>

Solucionado, agregué MGET.PRG a mi compilación.

Saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: dialogo resizable desde recursos? :: Author D.Fernandez]]> 2025-01-27T21:26:18-07:00 2025-01-27T21:26:18-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45352&p=277236#p277236
Estoy buscando unos ejemplos que habían con REDEFINE Dialog.....bla,bla
que se podían cambiar el tamaño incluyendo los elementos incluidos en el dialog.
Esto ya está pronto?

Ya se, estoy medio pesado y perdido, disculpen.

Saludos

Ruben Dario Fernandez]]>

Estoy buscando unos ejemplos que habían con REDEFINE Dialog.....bla,bla
que se podían cambiar el tamaño incluyendo los elementos incluidos en el dialog.
Esto ya está pronto?

Ya se, estoy medio pesado y perdido, disculpen.

Saludos

Ruben Dario Fernandez]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: dialogo resizable desde recursos? :: Reply by karinha]]> 2025-01-28T07:43:41-07:00 2025-01-28T07:43:41-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45352&p=277243#p277243
viewtopic.php?p=165486&hilit=ADAMI#p165486

Regards, saludos.]]>

viewtopic.php?p=165486&hilit=ADAMI#p165486

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: dialogo resizable desde recursos? :: Reply by D.Fernandez]]> 2025-01-28T11:00:38-07:00 2025-01-28T11:00:38-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45352&p=277249#p277249
Incluso Mr. Rao publicó unos ejemplos con animaciones
pero ahora no los encuentro y no se si esta totalmente funcional.

Gracias
Saludos.
Ruben Dario Fernandez]]>

Incluso Mr. Rao publicó unos ejemplos con animaciones
pero ahora no los encuentro y no se si esta totalmente funcional.

Gracias
Saludos.
Ruben Dario Fernandez]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: dialogo resizable desde recursos? :: Reply by karinha]]> 2025-01-28T11:33:14-07:00 2025-01-28T11:33:14-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45352&p=277250#p277250
Relative coordinates of Controls:

viewtopic.php?t=44532

Regards, saludos.]]>

Relative coordinates of Controls:

viewtopic.php?t=44532

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: dialogo resizable desde recursos? :: Reply by D.Fernandez]]> 2025-01-28T12:19:49-07:00 2025-01-28T12:19:49-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45352&p=277251#p277251 sabes si está funcionando 100 %.?
No logro hacerlo funcionar desde recursos.

Un grande Joao. Gracias.

Saludos
Ruben Dario Fernandez]]>
sabes si está funcionando 100 %.?
No logro hacerlo funcionar desde recursos.

Un grande Joao. Gracias.

Saludos
Ruben Dario Fernandez]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: dialogo resizable desde recursos? :: Reply by nageswaragunupudi]]> 2025-01-29T01:22:02-07:00 2025-01-29T01:22:02-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45352&p=277265#p277265 If this works as expected, you may use this for your other dialogs.

Code: Select all | Expand

#include "fivewin.ch"

function Main()

   local oDlg, oFont
   local aVar  := { PadR( "get1", 10 ), PadR( "edit", 10 ), Space( 10 ), PadR( "pwd", 10 ) }
   local aGet[ 4 ]

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
   DEFINE DIALOG oDlg RESOURCE "TESTGETS" FONT oFont

   REDEFINE GET  aGet[ 1 ] VAR aVar[ 1 ] ID 101
   REDEFINE EDIT aGet[ 2 ] VAR aVar[ 2 ] ID 102
   REDEFINE EDIT aGet[ 3 ] VAR aVar[ 3 ] ID 103
   REDEFINE GET  aGet[ 4 ] VAR aVar[ 4 ] ID 104

   REDEFINE BUTTON ID 1 ACTION oDlg:End()
   REDEFINE BUTTON ID 2 ACTION oDlg:End()

   oDlg:bInit     := { || SetResize( oDlg ) }
   oDlg:bResized  := { || ResizeCtrls( oDlg ) }

   ACTIVATE DIALOG oDlg CENTERED
   RELEASE FONT oFont

return nil

function SetResize( oDlg )

   local oCtrl

   oDlg:Cargo  := { oDlg:nWidth, oDlg:nHeight, oDlg:oFont:nHeight }
   for each oCtrl in oDlg:aControls
      WITH OBJECT oCtrl
         :Cargo := { :nTop, :nLeft, :nWidth, :nHeight, :oFont:nHeight }
      END
   next

return nil

function ResizeCtrls( oDlg )

   local xRatio, yRatio
   local oCtrl, h, f

   xRatio   := oDlg:nWidth  / oDlg:Cargo[ 1 ]
   yRatio   := oDlg:nHeight / oDlg:Cargo[ 2 ]

   for each oCtrl in oDlg:aControls
      WITH OBJECT oCtrl
         :nTop    := Int( yRatio * :Cargo[ 1 ] )
         :nHeight := Int( yRatio * :Cargo[ 4 ] )
         :nLeft   := Int( xRatio * :Cargo[ 2 ] )
         :nWidth  := Int( xRatio * :Cargo[ 3 ] )
         h  := Int( :Cargo[ 5 ] * yRatio )
         if h != :oFont:nInpHeight
            :SetFont( f := :oFont:Modify( h ) )
            f:End()
         endif
      END
   next

return nil
.RC file

Code: Select all | Expand

TESTGETS DIALOG 99, 89, 194, 200
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MAXIMIZEBOX | WS_MINIMIZEBOX
CAPTION "TESTGETS"
FONT 8, "MS Sans Serif"
{
 EDITTEXT 101, 33, 51, 131, 12, WS_BORDER | WS_TABSTOP
 EDITTEXT 102, 33, 71, 131, 12, WS_BORDER | WS_TABSTOP
 EDITTEXT 103, 33, 91, 131, 12, WS_BORDER | WS_TABSTOP
 EDITTEXT 104, 33,111, 131, 12, ES_PASSWORD | WS_BORDER | WS_TABSTOP
 DEFPUSHBUTTON "OK", 1, 42, 150, 50, 14
 PUSHBUTTON "Cancel", 2, 102, 150, 50, 14
}
Notes:
Please add " WS_THICKFRAME | WS_MAXIMIZEBOX | WS_MINIMIZEBOX" to the dialog styles in the RC file.

Please let us know if you face any issues]]>
If this works as expected, you may use this for your other dialogs.

Code: Select all | Expand

#include "fivewin.ch"

function Main()

   local oDlg, oFont
   local aVar  := { PadR( "get1", 10 ), PadR( "edit", 10 ), Space( 10 ), PadR( "pwd", 10 ) }
   local aGet[ 4 ]

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
   DEFINE DIALOG oDlg RESOURCE "TESTGETS" FONT oFont

   REDEFINE GET  aGet[ 1 ] VAR aVar[ 1 ] ID 101
   REDEFINE EDIT aGet[ 2 ] VAR aVar[ 2 ] ID 102
   REDEFINE EDIT aGet[ 3 ] VAR aVar[ 3 ] ID 103
   REDEFINE GET  aGet[ 4 ] VAR aVar[ 4 ] ID 104

   REDEFINE BUTTON ID 1 ACTION oDlg:End()
   REDEFINE BUTTON ID 2 ACTION oDlg:End()

   oDlg:bInit     := { || SetResize( oDlg ) }
   oDlg:bResized  := { || ResizeCtrls( oDlg ) }

   ACTIVATE DIALOG oDlg CENTERED
   RELEASE FONT oFont

return nil

function SetResize( oDlg )

   local oCtrl

   oDlg:Cargo  := { oDlg:nWidth, oDlg:nHeight, oDlg:oFont:nHeight }
   for each oCtrl in oDlg:aControls
      WITH OBJECT oCtrl
         :Cargo := { :nTop, :nLeft, :nWidth, :nHeight, :oFont:nHeight }
      END
   next

return nil

function ResizeCtrls( oDlg )

   local xRatio, yRatio
   local oCtrl, h, f

   xRatio   := oDlg:nWidth  / oDlg:Cargo[ 1 ]
   yRatio   := oDlg:nHeight / oDlg:Cargo[ 2 ]

   for each oCtrl in oDlg:aControls
      WITH OBJECT oCtrl
         :nTop    := Int( yRatio * :Cargo[ 1 ] )
         :nHeight := Int( yRatio * :Cargo[ 4 ] )
         :nLeft   := Int( xRatio * :Cargo[ 2 ] )
         :nWidth  := Int( xRatio * :Cargo[ 3 ] )
         h  := Int( :Cargo[ 5 ] * yRatio )
         if h != :oFont:nInpHeight
            :SetFont( f := :oFont:Modify( h ) )
            f:End()
         endif
      END
   next

return nil
.RC file

Code: Select all | Expand

TESTGETS DIALOG 99, 89, 194, 200
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MAXIMIZEBOX | WS_MINIMIZEBOX
CAPTION "TESTGETS"
FONT 8, "MS Sans Serif"
{
 EDITTEXT 101, 33, 51, 131, 12, WS_BORDER | WS_TABSTOP
 EDITTEXT 102, 33, 71, 131, 12, WS_BORDER | WS_TABSTOP
 EDITTEXT 103, 33, 91, 131, 12, WS_BORDER | WS_TABSTOP
 EDITTEXT 104, 33,111, 131, 12, ES_PASSWORD | WS_BORDER | WS_TABSTOP
 DEFPUSHBUTTON "OK", 1, 42, 150, 50, 14
 PUSHBUTTON "Cancel", 2, 102, 150, 50, 14
}
Notes:
Please add " WS_THICKFRAME | WS_MAXIMIZEBOX | WS_MINIMIZEBOX" to the dialog styles in the RC file.

Please let us know if you face any issues]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: dialogo resizable desde recursos? :: Reply by nageswaragunupudi]]> 2025-01-29T01:34:43-07:00 2025-01-29T01:34:43-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45352&p=277267#p277267 Image]]> Image]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: dialogo resizable desde recursos? :: Reply by karinha]]> 2025-01-29T06:58:24-07:00 2025-01-29T06:58:24-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45352&p=277274#p277274
Master Nages, ¿funciona con cuadros de diálogo más complejos con carpetas, xbrowse, etc?

Gracias, tks.

Regards, saludos.]]>

Master Nages, ¿funciona con cuadros de diálogo más complejos con carpetas, xbrowse, etc?

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: dialogo resizable desde recursos? SOLUCIONADO? :: Reply by D.Fernandez]]> 2025-01-29T11:52:47-07:00 2025-01-29T11:52:47-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45352&p=277282#p277282 Excelente, funciona casi de 100%.
Lo probé con un campo MEMO, varios GETs y BTNBMP.
Al restablecer a la forma original el tamaño de las fuentes no lo respeta, quedan mas chicos.

Es un excelente comienzo.

Gracias
Saludos
Ruben Dario Fernandez

Imágen original
https://ibb.co/cSZc87rM

Imágen luego de jugar un poco
https://ibb.co/mCCpz09W]]>
Excelente, funciona casi de 100%.
Lo probé con un campo MEMO, varios GETs y BTNBMP.
Al restablecer a la forma original el tamaño de las fuentes no lo respeta, quedan mas chicos.

Es un excelente comienzo.

Gracias
Saludos
Ruben Dario Fernandez

Imágen original
https://ibb.co/cSZc87rM

Imágen luego de jugar un poco
https://ibb.co/mCCpz09W]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: dialogo resizable desde recursos? :: Reply by nageswaragunupudi]]> 2025-01-29T12:15:33-07:00 2025-01-29T12:15:33-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45352&p=277284#p277284 So, we need to review font resizing and we will look into that aspect.
Please keep using and help us by reporting any issues you notice.]]>
So, we need to review font resizing and we will look into that aspect.
Please keep using and help us by reporting any issues you notice.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: dialogo resizable desde recursos? :: Reply by nageswaragunupudi]]> 2025-01-29T12:18:12-07:00 2025-01-29T12:18:12-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45352&p=277285#p277285
karinha wrote: Wed Jan 29, 2025 1:58 pm Master Nages, does it work with more complex dialogs with folders, xbrowse, etc?

Master Nages, ¿funciona con cuadros de diálogo más complejos con carpetas, xbrowse, etc?

Gracias, tks.

Regards, saludos.
xbrowse - yes
folders? No. We need to still improve the logic, to handle folders.

I think you have other alternatives in mind.
Please post one working sample like the one above and we will be glad to learn from that.]]>
karinha wrote: Wed Jan 29, 2025 1:58 pm Master Nages, does it work with more complex dialogs with folders, xbrowse, etc?

Master Nages, ¿funciona con cuadros de diálogo más complejos con carpetas, xbrowse, etc?

Gracias, tks.

Regards, saludos.
xbrowse - yes
folders? No. We need to still improve the logic, to handle folders.

I think you have other alternatives in mind.
Please post one working sample like the one above and we will be glad to learn from that.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: dialogo resizable desde recursos? :: Reply by D.Fernandez]]> 2025-01-29T13:09:38-07:00 2025-01-29T13:09:38-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45352&p=277287#p277287
Gracias
Saludos

Ruben Dario Fernandez]]>

Gracias
Saludos

Ruben Dario Fernandez]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: dialogo resizable desde recursos? :: Reply by nageswaragunupudi]]> 2025-01-29T16:39:25-07:00 2025-01-29T16:39:25-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45352&p=277289#p277289

Code: Select all | Expand

function SetResize( oDlg )

   local oCtrl

   oDlg:Cargo  := { oDlg:nWidth, oDlg:nHeight, oDlg:oFont:nHeight }
   for each oCtrl in oDlg:aControls
      WITH OBJECT oCtrl
         :Cargo := { :nTop, :nLeft, :nWidth, :nHeight, :oFont:nHeight }
      END
   next

return nil
Please change :oFont:nHeight as :oFont:nInpHeight in both the lines and test again please.]]>

Code: Select all | Expand

function SetResize( oDlg )

   local oCtrl

   oDlg:Cargo  := { oDlg:nWidth, oDlg:nHeight, oDlg:oFont:nHeight }
   for each oCtrl in oDlg:aControls
      WITH OBJECT oCtrl
         :Cargo := { :nTop, :nLeft, :nWidth, :nHeight, :oFont:nHeight }
      END
   next

return nil
Please change :oFont:nHeight as :oFont:nInpHeight in both the lines and test again please.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: dialogo resizable desde recursos? :: Reply by D.Fernandez]]> 2025-01-29T22:39:11-07:00 2025-01-29T22:39:11-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45352&p=277291#p277291
EXTRAORDINARIO.
Excelente, ya va tomando forma. se ve muy bien.

Saludos

Ruben Dario Fernandez]]>

EXTRAORDINARIO.
Excelente, ya va tomando forma. se ve muy bien.

Saludos

Ruben Dario Fernandez]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: dialogo resizable desde recursos? :: Reply by D.Fernandez]]> 2025-01-30T07:55:45-07:00 2025-01-30T07:55:45-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45352&p=277297#p277297
Funciona bien con xBrowse

No Funciona el menu del dialogo
Error linea -> xRatio := oDlg:nWidth / oDlg:Cargo[ 1 ] de ResizeCtrls( oDlg )

No funciona la buttonbar
Error linea -> xRatio := oDlg:nWidth / oDlg:Cargo[ 1 ] de ResizeCtrls( oDlg )

Gracias, Saludos

Ruben Dario Fernandez]]>

Funciona bien con xBrowse

No Funciona el menu del dialogo
Error linea -> xRatio := oDlg:nWidth / oDlg:Cargo[ 1 ] de ResizeCtrls( oDlg )

No funciona la buttonbar
Error linea -> xRatio := oDlg:nWidth / oDlg:Cargo[ 1 ] de ResizeCtrls( oDlg )

Gracias, Saludos

Ruben Dario Fernandez]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Archivo de compilacion .mak para Visual Studio :: Reply by Compuin]]> 2025-01-30T08:11:49-07:00 2025-01-30T08:11:49-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45318&p=277298#p277298
Existe alguna forma de decirle a una clase que no tome el archivo de manifest? Tal vez eso solucione mi problema con la clase TBar.prg

Gracias]]>

Existe alguna forma de decirle a una clase que no tome el archivo de manifest? Tal vez eso solucione mi problema con la clase TBar.prg

Gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Archivo de compilacion .mak para Visual Studio :: Reply by Antonio Linares]]> 2025-01-30T10:35:41-07:00 2025-01-30T10:35:41-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45318&p=277302#p277302 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Archivo de compilacion .mak para Visual Studio :: Reply by Compuin]]> 2025-01-30T10:43:11-07:00 2025-01-30T10:43:11-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45318&p=277303#p277303
Solo remueve los puntos del lado izquierdo en la barra pero no coloca las lineas que van en lazo izquierdo]]>

Solo remueve los puntos del lado izquierdo en la barra pero no coloca las lineas que van en lazo izquierdo]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Archivo de compilacion .mak para Visual Studio :: Reply by Antonio Linares]]> 2025-01-30T10:49:06-07:00 2025-01-30T10:49:06-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45318&p=277305#p277305
gracias!]]>

gracias!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Archivo de compilacion .mak para Visual Studio :: Reply by Compuin]]> 2025-01-30T10:57:49-07:00 2025-01-30T10:57:49-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45318&p=277307#p277307 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Archivo de compilacion .mak para Visual Studio :: Reply by karinha]]> 2025-01-30T11:15:00-07:00 2025-01-30T11:15:00-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45318&p=277308#p277308
Compuin wrote: Thu Jan 30, 2025 5:57 pm Con que puedo subir una imagen a este foro?
https://imgur.com/

Regards, saludos.]]>
Compuin wrote: Thu Jan 30, 2025 5:57 pm Con que puedo subir una imagen a este foro?
https://imgur.com/

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Archivo de compilacion .mak para Visual Studio :: Reply by Compuin]]> 2025-01-30T11:23:08-07:00 2025-01-30T11:23:08-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45318&p=277310#p277310
https://imgur.com/a/sITCvnA]]>

https://imgur.com/a/sITCvnA]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Archivo de compilacion .mak para Visual Studio :: Reply by Antonio Linares]]> 2025-01-30T14:22:58-07:00 2025-01-30T14:22:58-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45318&p=277315#p277315
Tienes alguna imagen de como quieres que se vea ?]]>

Tienes alguna imagen de como quieres que se vea ?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Archivo de compilacion .mak para Visual Studio :: Reply by Compuin]]> 2025-01-30T14:28:44-07:00 2025-01-30T14:28:44-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45318&p=277317#p277317
https://imgur.com/a/sITCvnA

La imagen de arriba es como se ve cuando agrego la linea sugerida y abajo como quiero que se vea, es decir, con 2 barras verticales en la izquierda del Bar]]>

https://imgur.com/a/sITCvnA

La imagen de arriba es como se ve cuando agrego la linea sugerida y abajo como quiero que se vea, es decir, con 2 barras verticales en la izquierda del Bar]]>
<![CDATA[FiveWin para Harbour/xHarbour :: uCharToVal() :: Author FiveWiDi]]> 2025-01-30T11:20:41-07:00 2025-01-30T11:20:41-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45358&p=277309#p277309
Yo tenía entendido que haciendo esto:
uMiValor := uCharToVal( uMiValor, MiOtroValor )

uMiValor se convertía al tipo de uMiOtroValor

Es decir que si ValType( uMiOtroValor ) era N, entonces:
uMiValor := uCharToVal( uMiValor, MiOtroValor )

era lo mismo que:
uMiValor := Val( uMiValor )

Pués resulta que esto:
uMiValor := uCharToVal( uMiValor, "N" )

hace los mismo que esto:
uMiValor := uCharToVal( uMiValor, 28 )
(28 o cualquier otro número)

En fin, hace años esta función ya me hizo la pirula.]]>

Yo tenía entendido que haciendo esto:
uMiValor := uCharToVal( uMiValor, MiOtroValor )

uMiValor se convertía al tipo de uMiOtroValor

Es decir que si ValType( uMiOtroValor ) era N, entonces:
uMiValor := uCharToVal( uMiValor, MiOtroValor )

era lo mismo que:
uMiValor := Val( uMiValor )

Pués resulta que esto:
uMiValor := uCharToVal( uMiValor, "N" )

hace los mismo que esto:
uMiValor := uCharToVal( uMiValor, 28 )
(28 o cualquier otro número)

En fin, hace años esta función ya me hizo la pirula.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: uCharToVal() :: Reply by Antonio Linares]]> 2025-01-30T14:28:07-07:00 2025-01-30T14:28:07-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45358&p=277316#p277316
/**
* Convierte una cadena de texto en un valor de un tipo específico.
*
* @param {string} cText - El texto a convertir.
* @param {string} cType - El tipo de conversión deseado ('C' para cadena, 'N' para número, 'L' para lógico, 'D' para fecha, 'M' tratado como 'C').
*
* @returns {any} - Devuelve el valor convertido según el tipo especificado o inferido.
*
* @description
* La función toma una cadena de texto y la convierte al tipo de dato especificado en `cType`.
* Si `cType` no es válido, se intenta inferir el tipo de dato.
*
* - Si `cType` es 'C', el valor devuelto es la cadena original sin espacios al inicio y al final.
* - Si `cType` es 'N', intenta convertir la cadena a un número.
* - Si `cType` es 'L', determina si la cadena representa un valor lógico ('T'/True o 'F'/False en varios idiomas).
* - Si `cType` es 'D', intenta convertir la cadena a una fecha.
* - Si no se especifica un tipo válido, se infiere el tipo a partir del contenido de `cText`.
*
* @example
* uCharToVal("123", "N") // Devuelve 123 como número
* uCharToVal("true", "L") // Devuelve .T. (true en Harbour)
* uCharToVal("2024-01-01", "D") // Devuelve una fecha
* uCharToVal("Hello", "C") // Devuelve "Hello"
*/
]]>
/**
* Convierte una cadena de texto en un valor de un tipo específico.
*
* @param {string} cText - El texto a convertir.
* @param {string} cType - El tipo de conversión deseado ('C' para cadena, 'N' para número, 'L' para lógico, 'D' para fecha, 'M' tratado como 'C').
*
* @returns {any} - Devuelve el valor convertido según el tipo especificado o inferido.
*
* @description
* La función toma una cadena de texto y la convierte al tipo de dato especificado en `cType`.
* Si `cType` no es válido, se intenta inferir el tipo de dato.
*
* - Si `cType` es 'C', el valor devuelto es la cadena original sin espacios al inicio y al final.
* - Si `cType` es 'N', intenta convertir la cadena a un número.
* - Si `cType` es 'L', determina si la cadena representa un valor lógico ('T'/True o 'F'/False en varios idiomas).
* - Si `cType` es 'D', intenta convertir la cadena a una fecha.
* - Si no se especifica un tipo válido, se infiere el tipo a partir del contenido de `cText`.
*
* @example
* uCharToVal("123", "N") // Devuelve 123 como número
* uCharToVal("true", "L") // Devuelve .T. (true en Harbour)
* uCharToVal("2024-01-01", "D") // Devuelve una fecha
* uCharToVal("Hello", "C") // Devuelve "Hello"
*/
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: uCharToVal() :: Reply by FiveWiDi]]> 2025-01-30T16:23:41-07:00 2025-01-30T16:23:41-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45358&p=277324#p277324
Muchas gracias Antonio,]]>

Muchas gracias Antonio,]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: uCharToVal() :: Reply by nageswaragunupudi]]> 2025-01-31T05:13:27-07:00 2025-01-31T05:13:27-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45358&p=277338#p277338
Sample:

Code: Select all | Expand

function TestStr2Val()

   local aStr  := { "34512.01", "1,234.56", "3.456,34", "12.5%", "true", "FALSO",  ;
                    "10/20/2020", "25-02-1998", "10 jan 2010", "feb 15, 78" }

   SET DATE ITALIAN
   SET CENTURY ON
   FWNumFormat( "A", .t. )


   AEval( aStr, { |c,i| aStr[ i ] := { c, uCharToVal( c ), nil } } )
   AEval( aStr, { |a,i| a[ 3 ] := ValType( a[ 2 ] ) } )


   XBROWSER aStr TITLE "uCharToVal(c)" SETUP ( ;
      oBrw:cHeaders := { "FUNCTION", "RESULT", "TYPE" }, ;
      oBrw:aCols[ 1 ]:bStrData := { |x,o| 'uCharToVal( "' + o:Value + '" ) =' }, ;
      oBrw:aCols[ 1 ]:nDataStrAlign := AL_RIGHT, ;
      oBrw:aCols[ 3 ]:nDataStrAlign := AL_CENTER )

return nil
Image]]>

Sample:

Code: Select all | Expand

function TestStr2Val()

   local aStr  := { "34512.01", "1,234.56", "3.456,34", "12.5%", "true", "FALSO",  ;
                    "10/20/2020", "25-02-1998", "10 jan 2010", "feb 15, 78" }

   SET DATE ITALIAN
   SET CENTURY ON
   FWNumFormat( "A", .t. )


   AEval( aStr, { |c,i| aStr[ i ] := { c, uCharToVal( c ), nil } } )
   AEval( aStr, { |a,i| a[ 3 ] := ValType( a[ 2 ] ) } )


   XBROWSER aStr TITLE "uCharToVal(c)" SETUP ( ;
      oBrw:cHeaders := { "FUNCTION", "RESULT", "TYPE" }, ;
      oBrw:aCols[ 1 ]:bStrData := { |x,o| 'uCharToVal( "' + o:Value + '" ) =' }, ;
      oBrw:aCols[ 1 ]:nDataStrAlign := AL_RIGHT, ;
      oBrw:aCols[ 3 ]:nDataStrAlign := AL_CENTER )

return nil
Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: operator ^^ como puedo solucionar? :: Author MGA]]> 2025-01-30T13:28:50-07:00 2025-01-30T13:28:50-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45359&p=277313#p277313

function ...

cHex := ""
cChar := ""

For Each cChar IN cResposta
if HB_EnumIndex( cChar ) < Len( cResposta )
if HB_EnumIndex( cChar ) == nStartEvaluate
cHex := cChar
endif
cHex := cHex ^^ cResposta[ HB_EnumIndex( cChar ) + 1 ]
endif
next

return cHex]]>


function ...

cHex := ""
cChar := ""

For Each cChar IN cResposta
if HB_EnumIndex( cChar ) < Len( cResposta )
if HB_EnumIndex( cChar ) == nStartEvaluate
cHex := cChar
endif
cHex := cHex ^^ cResposta[ HB_EnumIndex( cChar ) + 1 ]
endif
next

return cHex]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: operator ^^ como puedo solucionar? :: Reply by leandro]]> 2025-01-30T14:29:15-07:00 2025-01-30T14:29:15-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45359&p=277318#p277318 <![CDATA[FiveWin para Harbour/xHarbour :: Re: operator ^^ como puedo solucionar? :: Reply by Antonio Linares]]> 2025-01-30T14:59:00-07:00 2025-01-30T14:59:00-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45359&p=277321#p277321 <![CDATA[FiveWin para Harbour/xHarbour :: Re: operator ^^ como puedo solucionar? :: Reply by MGA]]> 2025-01-31T06:41:04-07:00 2025-01-31T06:41:04-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45359&p=277339#p277339
Seria referente esta linha de código:

cHex := cHex ^^ cResposta[ HB_EnumIndex( cChar ) + 1 ]


static function BitXorString( cResposta, nStartEvaluate )
Local cHex, cChar

Default nStartEvaluate := 1

cHex := ""
cChar := ""

For Each cChar IN cResposta
if HB_EnumIndex( cChar ) < Len( cResposta )
if HB_EnumIndex( cChar ) == nStartEvaluate
cHex := cChar
endif
cHex := cHex ^^ cResposta[ HB_EnumIndex( cChar ) + 1 ]
endif
next

return cHex]]>

Seria referente esta linha de código:

cHex := cHex ^^ cResposta[ HB_EnumIndex( cChar ) + 1 ]


static function BitXorString( cResposta, nStartEvaluate )
Local cHex, cChar

Default nStartEvaluate := 1

cHex := ""
cChar := ""

For Each cChar IN cResposta
if HB_EnumIndex( cChar ) < Len( cResposta )
if HB_EnumIndex( cChar ) == nStartEvaluate
cHex := cChar
endif
cHex := cHex ^^ cResposta[ HB_EnumIndex( cChar ) + 1 ]
endif
next

return cHex]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: operator ^^ como puedo solucionar? :: Reply by Antonio Linares]]> 2025-01-31T10:16:38-07:00 2025-01-31T10:16:38-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45359&p=277343#p277343
cHex := Chr( NumXor( Asc( cHex ), Asc( cResposta[ HB_EnumIndex( cChar ) + 1 ] ) ) )]]>

cHex := Chr( NumXor( Asc( cHex ), Asc( cResposta[ HB_EnumIndex( cChar ) + 1 ] ) ) )]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: operator ^^ como puedo solucionar? :: Reply by MGA]]> 2025-01-31T10:35:05-07:00 2025-01-31T10:35:05-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45359&p=277344#p277344
CHAR = chr

ok?]]>

CHAR = chr

ok?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: operator ^^ como puedo solucionar? :: Reply by Antonio Linares]]> 2025-01-31T10:38:18-07:00 2025-01-31T10:38:18-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45359&p=277345#p277345
MGA wrote: Fri Jan 31, 2025 5:35 pm Sr. Antonio,

CHAR = chr

ok?
Yes! :)]]>
MGA wrote: Fri Jan 31, 2025 5:35 pm Sr. Antonio,

CHAR = chr

ok?
Yes! :)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Richedit5 desde recursos :: Author D.Fernandez]]> 2025-01-31T12:29:07-07:00 2025-01-31T12:29:07-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45366&p=277348#p277348
Sigo molestando. Ya se si pero...

No encuentro ningún ejemplo desde recursos con richedit5 y de como
guardarlo en una DBF y también como editarlo en mi programa.

Alguien tendrá uno por ahí?

Gracias
Saludos

Ruben Dario Fernandez]]>

Sigo molestando. Ya se si pero...

No encuentro ningún ejemplo desde recursos con richedit5 y de como
guardarlo en una DBF y también como editarlo en mi programa.

Alguien tendrá uno por ahí?

Gracias
Saludos

Ruben Dario Fernandez]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: HDBC para SQLite :: Reply by xmanuel]]> 2025-01-28T14:16:07-07:00 2025-01-28T14:16:07-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45121&p=277255#p277255 Probada y fusionando.

Ahora vamos por HDBC para PostgreSQL.
Pongo otro hilo para Postgres]]>
Probada y fusionando.

Ahora vamos por HDBC para PostgreSQL.
Pongo otro hilo para Postgres]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: HDBC para SQLite :: Reply by carito]]> 2025-01-28T19:35:22-07:00 2025-01-28T19:35:22-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45121&p=277261#p277261 pues es muy comun que al existir cortes en internet o en la misma red local, se pierde todo.

Saludos]]>
pues es muy comun que al existir cortes en internet o en la misma red local, se pierde todo.

Saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: HDBC para SQLite :: Reply by xmanuel]]> 2025-01-29T17:15:02-07:00 2025-01-29T17:15:02-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45121&p=277290#p277290 y voy a implementar también el método ping()

:D]]>
y voy a implementar también el método ping()

:D]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: HDBC para SQLite :: Reply by Marcelo Via Giglio]]> 2025-01-31T12:56:59-07:00 2025-01-31T12:56:59-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45121&p=277349#p277349
xmanuel wrote: Tue Jan 28, 2025 9:16 pm Ya está lista HDBC para SQLite.
Probada y fusionando.

Ahora vamos por HDBC para PostgreSQL.
Pongo otro hilo para Postgres
Quedo a la espera, muchas gracias]]>
xmanuel wrote: Tue Jan 28, 2025 9:16 pm Ya está lista HDBC para SQLite.
Probada y fusionando.

Ahora vamos por HDBC para PostgreSQL.
Pongo otro hilo para Postgres
Quedo a la espera, muchas gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: HDBC para SQLite :: Reply by xmanuel]]> 2025-02-01T10:26:17-07:00 2025-02-01T10:26:17-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45121&p=277363#p277363
Ya está implementado el método ping() en HDbc para SQLite y para PostgreSQL...

:D]]>

Ya está implementado el método ping() en HDbc para SQLite y para PostgreSQL...

:D]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Focus en window MDICHILD :: Author FiveWiDi]]> 2025-01-30T23:58:49-07:00 2025-01-30T23:58:49-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45362&p=277329#p277329
¿Cómo puedo saber si una de las window MDICHILD tiene el foco?

Gracias,]]>

¿Cómo puedo saber si una de las window MDICHILD tiene el foco?

Gracias,]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Focus en window MDICHILD :: Reply by Antonio Linares]]> 2025-01-31T00:36:44-07:00 2025-01-31T00:36:44-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45362&p=277330#p277330
buenos dias

Prueba con oWndChild:hWnd == GetFocus()

Tambien podrias usar oWndChild:bGotFocus = { || MsgBeep() } y oWndChild:bLostFocus = { || MsgBeep() }

Puedes usar OutputDebugString( "foco recibido" ) y dbwin32 en vez de MsgBeep(). Si usas MsgInfo() alteraras la secuencia de foco]]>

buenos dias

Prueba con oWndChild:hWnd == GetFocus()

Tambien podrias usar oWndChild:bGotFocus = { || MsgBeep() } y oWndChild:bLostFocus = { || MsgBeep() }

Puedes usar OutputDebugString( "foco recibido" ) y dbwin32 en vez de MsgBeep(). Si usas MsgInfo() alteraras la secuencia de foco]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Focus en window MDICHILD :: Reply by JESUS MARIN]]> 2025-01-31T02:51:26-07:00 2025-01-31T02:51:26-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45362&p=277335#p277335 En mi entorno de pruebas, MdiChildFolder, creé una función que me muestra todas las ventanas MdiChild y me marca la que está activa.


Image

Por lo tanto deberia ser sencillo resolverlo. Te copio el código de esta función

Code: Select all | Expand

//--------------------------------------------------------------------------
METHOD MenuFolders( oButton, nRow, nCol ) CLASS TMdiChildFolder


LOCAL aVentanasMdi:=::Genera_botones_mdi()
LOCAL I:=1
local oMenu
LOCAL nRowMenu:=oButton:nTop+oButton:oWnd:nTop+oButton:nHeight
LOCAL nColMenu:=oButton:nLeft

MENU oMenu POPUP
   FOR I=1 TO LEN(aVentanasMdi)
      IF aVentanasMdi[i]==Self:cCaption
         MENUITEM aVentanasMdi[i] OF oMenu CHECKED
      ELSE
         MENUITEM aVentanasMdi[i] OF oMenu
      ENDIF
   NEXT I
ENDMENU

FOR I=1 TO LEN(aVentanasMdi)
   oMenu:aItems[i]:bAction := HazBlock(i)
NEXT I

oMenu:Activate( nRowMenu,nColMenu, Self , .f. )

RETURN(NIL)

//-----------------------------------------------------------------------------
]]>
En mi entorno de pruebas, MdiChildFolder, creé una función que me muestra todas las ventanas MdiChild y me marca la que está activa.


Image

Por lo tanto deberia ser sencillo resolverlo. Te copio el código de esta función

Code: Select all | Expand

//--------------------------------------------------------------------------
METHOD MenuFolders( oButton, nRow, nCol ) CLASS TMdiChildFolder


LOCAL aVentanasMdi:=::Genera_botones_mdi()
LOCAL I:=1
local oMenu
LOCAL nRowMenu:=oButton:nTop+oButton:oWnd:nTop+oButton:nHeight
LOCAL nColMenu:=oButton:nLeft

MENU oMenu POPUP
   FOR I=1 TO LEN(aVentanasMdi)
      IF aVentanasMdi[i]==Self:cCaption
         MENUITEM aVentanasMdi[i] OF oMenu CHECKED
      ELSE
         MENUITEM aVentanasMdi[i] OF oMenu
      ENDIF
   NEXT I
ENDMENU

FOR I=1 TO LEN(aVentanasMdi)
   oMenu:aItems[i]:bAction := HazBlock(i)
NEXT I

oMenu:Activate( nRowMenu,nColMenu, Self , .f. )

RETURN(NIL)

//-----------------------------------------------------------------------------
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Focus en window MDICHILD :: Reply by FiveWiDi]]> 2025-01-31T14:45:53-07:00 2025-01-31T14:45:53-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45362&p=277351#p277351
Estoy buscando algo que no precise código, alguna DATA.

Supongo que si la clase tiene alguna DATA que al tomar el foco le da .T. y cuando lo pierde le da .F. sería lo ideal.]]>

Estoy buscando algo que no precise código, alguna DATA.

Supongo que si la clase tiene alguna DATA que al tomar el foco le da .T. y cuando lo pierde le da .F. sería lo ideal.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Focus en window MDICHILD :: Reply by Antonio Linares]]> 2025-01-31T15:05:42-07:00 2025-01-31T15:05:42-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45362&p=277352#p277352
oWndChild:lFocused]]>

oWndChild:lFocused]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Focus en window MDICHILD :: Reply by Antonio Linares]]> 2025-01-31T15:06:58-07:00 2025-01-31T15:06:58-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45362&p=277353#p277353
JESUS MARIN wrote: Fri Jan 31, 2025 9:51 am Buenos dias
En mi entorno de pruebas, MdiChildFolder, creé una función que me muestra todas las ventanas MdiChild y me marca la que está activa.


Image

Por lo tanto deberia ser sencillo resolverlo. Te copio el código de esta función

Code: Select all | Expand

//--------------------------------------------------------------------------
METHOD MenuFolders( oButton, nRow, nCol ) CLASS TMdiChildFolder


LOCAL aVentanasMdi:=::Genera_botones_mdi()
LOCAL I:=1
local oMenu
LOCAL nRowMenu:=oButton:nTop+oButton:oWnd:nTop+oButton:nHeight
LOCAL nColMenu:=oButton:nLeft

MENU oMenu POPUP
   FOR I=1 TO LEN(aVentanasMdi)
      IF aVentanasMdi[i]==Self:cCaption
         MENUITEM aVentanasMdi[i] OF oMenu CHECKED
      ELSE
         MENUITEM aVentanasMdi[i] OF oMenu
      ENDIF
   NEXT I
ENDMENU

FOR I=1 TO LEN(aVentanasMdi)
   oMenu:aItems[i]:bAction := HazBlock(i)
NEXT I

oMenu:Activate( nRowMenu,nColMenu, Self , .f. )

RETURN(NIL)

//-----------------------------------------------------------------------------
Jesús, muy bonito y profesional tu diseño.

Sería genial si compartieses un ejemplo para todos, gracias!]]>
JESUS MARIN wrote: Fri Jan 31, 2025 9:51 am Buenos dias
En mi entorno de pruebas, MdiChildFolder, creé una función que me muestra todas las ventanas MdiChild y me marca la que está activa.


Image

Por lo tanto deberia ser sencillo resolverlo. Te copio el código de esta función

Code: Select all | Expand

//--------------------------------------------------------------------------
METHOD MenuFolders( oButton, nRow, nCol ) CLASS TMdiChildFolder


LOCAL aVentanasMdi:=::Genera_botones_mdi()
LOCAL I:=1
local oMenu
LOCAL nRowMenu:=oButton:nTop+oButton:oWnd:nTop+oButton:nHeight
LOCAL nColMenu:=oButton:nLeft

MENU oMenu POPUP
   FOR I=1 TO LEN(aVentanasMdi)
      IF aVentanasMdi[i]==Self:cCaption
         MENUITEM aVentanasMdi[i] OF oMenu CHECKED
      ELSE
         MENUITEM aVentanasMdi[i] OF oMenu
      ENDIF
   NEXT I
ENDMENU

FOR I=1 TO LEN(aVentanasMdi)
   oMenu:aItems[i]:bAction := HazBlock(i)
NEXT I

oMenu:Activate( nRowMenu,nColMenu, Self , .f. )

RETURN(NIL)

//-----------------------------------------------------------------------------
Jesús, muy bonito y profesional tu diseño.

Sería genial si compartieses un ejemplo para todos, gracias!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Focus en window MDICHILD :: Reply by FranciscoA]]> 2025-02-01T08:52:42-07:00 2025-02-01T08:52:42-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45362&p=277360#p277360
Estoy buscando algo que no precise código, alguna DATA.

Carlos.
Cuando abres ventanas MDICHILD, en el elemento 2 del menu de la ventana principal se van mostrando las mdichilds abiertas y marcada la que tiene el foco. No sé si es lo que buscas. ( MENUINFO 2 )

Saludos.]]>
Estoy buscando algo que no precise código, alguna DATA.

Carlos.
Cuando abres ventanas MDICHILD, en el elemento 2 del menu de la ventana principal se van mostrando las mdichilds abiertas y marcada la que tiene el foco. No sé si es lo que buscas. ( MENUINFO 2 )

Saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Focus en window MDICHILD :: Reply by JESUS MARIN]]> 2025-02-02T02:34:37-07:00 2025-02-02T02:34:37-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45362&p=277370#p277370 Por mi parte, encantado de ceder todo el códdigo.
Solo dime cómo hacerlo.
Saludos
Jesús Marín
Antonio Linares wrote: Fri Jan 31, 2025 10:06 pm
JESUS MARIN wrote: Fri Jan 31, 2025 9:51 am Buenos dias
En mi entorno de pruebas, MdiChildFolder, creé una función que me muestra todas las ventanas MdiChild y me marca la que está activa.


Image

Por lo tanto deberia ser sencillo resolverlo. Te copio el código de esta función

Code: Select all | Expand

//--------------------------------------------------------------------------
METHOD MenuFolders( oButton, nRow, nCol ) CLASS TMdiChildFolder


LOCAL aVentanasMdi:=::Genera_botones_mdi()
LOCAL I:=1
local oMenu
LOCAL nRowMenu:=oButton:nTop+oButton:oWnd:nTop+oButton:nHeight
LOCAL nColMenu:=oButton:nLeft

MENU oMenu POPUP
   FOR I=1 TO LEN(aVentanasMdi)
      IF aVentanasMdi[i]==Self:cCaption
         MENUITEM aVentanasMdi[i] OF oMenu CHECKED
      ELSE
         MENUITEM aVentanasMdi[i] OF oMenu
      ENDIF
   NEXT I
ENDMENU

FOR I=1 TO LEN(aVentanasMdi)
   oMenu:aItems[i]:bAction := HazBlock(i)
NEXT I

oMenu:Activate( nRowMenu,nColMenu, Self , .f. )

RETURN(NIL)

//-----------------------------------------------------------------------------
Jesús, muy bonito y profesional tu diseño.

Sería genial si compartieses un ejemplo para todos, gracias!
]]>
Por mi parte, encantado de ceder todo el códdigo.
Solo dime cómo hacerlo.
Saludos
Jesús Marín
Antonio Linares wrote: Fri Jan 31, 2025 10:06 pm
JESUS MARIN wrote: Fri Jan 31, 2025 9:51 am Buenos dias
En mi entorno de pruebas, MdiChildFolder, creé una función que me muestra todas las ventanas MdiChild y me marca la que está activa.


Image

Por lo tanto deberia ser sencillo resolverlo. Te copio el código de esta función

Code: Select all | Expand

//--------------------------------------------------------------------------
METHOD MenuFolders( oButton, nRow, nCol ) CLASS TMdiChildFolder


LOCAL aVentanasMdi:=::Genera_botones_mdi()
LOCAL I:=1
local oMenu
LOCAL nRowMenu:=oButton:nTop+oButton:oWnd:nTop+oButton:nHeight
LOCAL nColMenu:=oButton:nLeft

MENU oMenu POPUP
   FOR I=1 TO LEN(aVentanasMdi)
      IF aVentanasMdi[i]==Self:cCaption
         MENUITEM aVentanasMdi[i] OF oMenu CHECKED
      ELSE
         MENUITEM aVentanasMdi[i] OF oMenu
      ENDIF
   NEXT I
ENDMENU

FOR I=1 TO LEN(aVentanasMdi)
   oMenu:aItems[i]:bAction := HazBlock(i)
NEXT I

oMenu:Activate( nRowMenu,nColMenu, Self , .f. )

RETURN(NIL)

//-----------------------------------------------------------------------------
Jesús, muy bonito y profesional tu diseño.

Sería genial si compartieses un ejemplo para todos, gracias!
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Focus en window MDICHILD :: Reply by karinha]]> 2025-02-02T06:09:46-07:00 2025-02-02T06:09:46-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45362&p=277371#p277371
https://mega.nz

Regards, saludos.]]>

https://mega.nz

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Focus en window MDICHILD :: Reply by Antonio Linares]]> 2025-02-02T09:10:39-07:00 2025-02-02T09:10:39-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45362&p=277372#p277372
Lo más sencillo es crear un repositorio gratuito en github, subir todo el código allí y compartir la URL del repositorio :)

https://github.com/

Gracias!]]>

Lo más sencillo es crear un repositorio gratuito en github, subir todo el código allí y compartir la URL del repositorio :)

https://github.com/

Gracias!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Cambiar el nInterval de un Timer :: Author FiveWiDi]]> 2025-02-02T15:13:25-07:00 2025-02-02T15:13:25-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45370&p=277376#p277376
A ver... si en una función que se lanza desde un Timer una de las cosas que debe hacer es cambiar su propio 'nInterval', ¿Cómo lo harían Ustedes?

Creo que no se puede cambiar 'nInterval', si no que se debe finalizar el Timer y crear otro. ¿Es así?

Pero claro si me estoy ejecutando y al mismo tiempo quiero suicidarme y además dar vida a otro Timer ...

Y si además lo hago en multihilo dentro de un hilo independiente del Main()..

¿Cómo lo ven?

...
Añado,
=====

Dentro de una función que se ejecuta desde un Timer, ¿Puedo dar de alta un nuevo Timer?

Otra, ¿Cómo dar de alta un Timer que se ejecute una sola vez?

He visto que en la Clase Timer el '::nId' se actualiza cada vez que se hace un 'Activate' del Timer... entonces ¿Este valor va cambiando?

Nota: es que le estoy dando vueltas a como 'manipular'/gestionar esta lógica y que el programa no pete.

ME RESPONDO
===========

Si que se puede. Se desactiva, se cambia valor al '::nInterval', y se vuelve a activar. ¿Cierto?]]>

A ver... si en una función que se lanza desde un Timer una de las cosas que debe hacer es cambiar su propio 'nInterval', ¿Cómo lo harían Ustedes?

Creo que no se puede cambiar 'nInterval', si no que se debe finalizar el Timer y crear otro. ¿Es así?

Pero claro si me estoy ejecutando y al mismo tiempo quiero suicidarme y además dar vida a otro Timer ...

Y si además lo hago en multihilo dentro de un hilo independiente del Main()..

¿Cómo lo ven?

...
Añado,
=====

Dentro de una función que se ejecuta desde un Timer, ¿Puedo dar de alta un nuevo Timer?

Otra, ¿Cómo dar de alta un Timer que se ejecute una sola vez?

He visto que en la Clase Timer el '::nId' se actualiza cada vez que se hace un 'Activate' del Timer... entonces ¿Este valor va cambiando?

Nota: es que le estoy dando vueltas a como 'manipular'/gestionar esta lógica y que el programa no pete.

ME RESPONDO
===========

Si que se puede. Se desactiva, se cambia valor al '::nInterval', y se vuelve a activar. ¿Cierto?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: HDBC para PostgreSQL :: Author xmanuel]]> 2025-01-28T14:26:10-07:00 2025-01-28T14:26:10-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45353&p=277256#p277256 Hecha 100x100 en clases de C++ preparadas fara funcionar en PRG de Harbour.

Con las mismas características que HDBC para SQLite:

Con sentencias preparadas en el lado del servidor para evitar código inyectado y aumentar la seguridad.

Las pruebas que he hecho tarda en importar la DBF test de harbour de 500 registros en 54 milisegundos más rápido incluso que la versión para SQLite que se demora 114 milisegundos.

El fuente de la importación es este:

Code: Select all | Expand

///////////////////////////////////////////////////////////////////////////////
// Proyecto: hdbc
// Fichero: test008.prg
// Autor: Manu Exposito
// Fecha: 
// Descripcion: Traspasa test.dbf de los ejemplos de Harbour a SQL.
//              Si no existe la bases de datos la crea.
//              Si no existe la tabla test la crea.
//              Uso de bindParam
///////////////////////////////////////////////////////////////////////////////

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

#include "hdbc.ch" 
#include "postgresql_connect.ch" 

#define ID_CARGA	500

//------------------------------------------------------------------------------
// Programa principal

procedure main()

    local oDb, e
    local cCreaTable 

    TEXT INTO cCreaTable
    CREATE TABLE IF NOT EXISTS test
    (
        id          SERIAL,
        first       VARCHAR( 20 ),
        last        VARCHAR( 20 ),
        street      VARCHAR( 30 ),
        city        VARCHAR( 30 ),
        state       VARCHAR( 2 ),
        zip         VARCHAR( 10 ),
        hiredate    DATE,
        married     BOOLEAN,
        age         INTEGER,
        salary      DECIMAL( 9, 2 ),
        notes       VARCHAR( 70 ),
        PRIMARY KEY ( id )
    )

    ENDTEXT
 
    cls

    msg( "Traspaso de datos..." )

    try
        oDb := THDbc():new( _DRIVER_ )

        oDb:connect( _CONN_STRING_ )        
        oDb:exec( cCreaTable )
        
        traspasa( oDb )

    catch  e
        eval( errorBlock(), e )
    finally
        oDb:disconnect()
        msg( "Esto es todo!!!" )
    end	
return

//------------------------------------------------------------------------------
// Usa sentencias preparadas en el lado del servidor y transacciones.

static procedure traspasa( oDb )

    local n := 0, nSec
    local oInsert
    local first, last, street, city, state, zip, hiredate, married, age, salary, notes

    local cSentencia := "INSERT INTO test ( first, last, street, city, state, zip, "  + ;
        "hiredate, married, age, salary, notes ) " + ;
        "VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11 );"

    if file( "test.dbf" )
		
        use test new
		
        oInsert := oDb:prepareStatement( cSentencia ) // Crea el objeto y prepara la sentencia

        // Vincula las variables harbour con cada una de las "?" por su posicion
        oInsert:bindParam(  1, @first  )
        oInsert:bindParam(  2, @last  )
        oInsert:bindParam(  3, @street )
        oInsert:bindParam(  4, @city )
        oInsert:bindParam(  5, @state )
        oInsert:bindParam(  6, @zip )
        oInsert:bindParam(  7, @hiredate )
        oInsert:bindParam(  8, @married )
        oInsert:bindParam(  9, @age )
        oInsert:bindParam( 10, @salary )
        oInsert:bindParam( 11, @notes )

        nSec := hb_milliSeconds()
	
        oDb:startTransaction()
		
        while n < ID_CARGA	
	
            while test->( !eof() )
                first    := test->first
                last     := test->last
                street   := test->street
                city     := test->city
                state    := test->state
                zip      := test->zip
                hiredate := test->hiredate 
                married  := test->married
                age      := test->age
                salary   := test->salary
                notes    := test->notes
		
                oInsert:execute()
                
                ++n

                test->( dbskip( 1 ) )
            end
	
            test->( DbGoTop() )
        end

        oDb:commit()		

        nSec := hb_milliSeconds() - nSec 

        msg( "Se han pasado " + Hb_NToS( n ) + " registros en " + Hb_NToS( nSec ) + " milisegundos", "Uso de bindParam" )
    else
        msg( "Fichero test.dbf no existe" )
    endif

return

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

Cualquier duda podéis escribir en este hilo.

Saludos]]>
Hecha 100x100 en clases de C++ preparadas fara funcionar en PRG de Harbour.

Con las mismas características que HDBC para SQLite:

Con sentencias preparadas en el lado del servidor para evitar código inyectado y aumentar la seguridad.

Las pruebas que he hecho tarda en importar la DBF test de harbour de 500 registros en 54 milisegundos más rápido incluso que la versión para SQLite que se demora 114 milisegundos.

El fuente de la importación es este:

Code: Select all | Expand

///////////////////////////////////////////////////////////////////////////////
// Proyecto: hdbc
// Fichero: test008.prg
// Autor: Manu Exposito
// Fecha: 
// Descripcion: Traspasa test.dbf de los ejemplos de Harbour a SQL.
//              Si no existe la bases de datos la crea.
//              Si no existe la tabla test la crea.
//              Uso de bindParam
///////////////////////////////////////////////////////////////////////////////

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

#include "hdbc.ch" 
#include "postgresql_connect.ch" 

#define ID_CARGA	500

//------------------------------------------------------------------------------
// Programa principal

procedure main()

    local oDb, e
    local cCreaTable 

    TEXT INTO cCreaTable
    CREATE TABLE IF NOT EXISTS test
    (
        id          SERIAL,
        first       VARCHAR( 20 ),
        last        VARCHAR( 20 ),
        street      VARCHAR( 30 ),
        city        VARCHAR( 30 ),
        state       VARCHAR( 2 ),
        zip         VARCHAR( 10 ),
        hiredate    DATE,
        married     BOOLEAN,
        age         INTEGER,
        salary      DECIMAL( 9, 2 ),
        notes       VARCHAR( 70 ),
        PRIMARY KEY ( id )
    )

    ENDTEXT
 
    cls

    msg( "Traspaso de datos..." )

    try
        oDb := THDbc():new( _DRIVER_ )

        oDb:connect( _CONN_STRING_ )        
        oDb:exec( cCreaTable )
        
        traspasa( oDb )

    catch  e
        eval( errorBlock(), e )
    finally
        oDb:disconnect()
        msg( "Esto es todo!!!" )
    end	
return

//------------------------------------------------------------------------------
// Usa sentencias preparadas en el lado del servidor y transacciones.

static procedure traspasa( oDb )

    local n := 0, nSec
    local oInsert
    local first, last, street, city, state, zip, hiredate, married, age, salary, notes

    local cSentencia := "INSERT INTO test ( first, last, street, city, state, zip, "  + ;
        "hiredate, married, age, salary, notes ) " + ;
        "VALUES ( $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11 );"

    if file( "test.dbf" )
		
        use test new
		
        oInsert := oDb:prepareStatement( cSentencia ) // Crea el objeto y prepara la sentencia

        // Vincula las variables harbour con cada una de las "?" por su posicion
        oInsert:bindParam(  1, @first  )
        oInsert:bindParam(  2, @last  )
        oInsert:bindParam(  3, @street )
        oInsert:bindParam(  4, @city )
        oInsert:bindParam(  5, @state )
        oInsert:bindParam(  6, @zip )
        oInsert:bindParam(  7, @hiredate )
        oInsert:bindParam(  8, @married )
        oInsert:bindParam(  9, @age )
        oInsert:bindParam( 10, @salary )
        oInsert:bindParam( 11, @notes )

        nSec := hb_milliSeconds()
	
        oDb:startTransaction()
		
        while n < ID_CARGA	
	
            while test->( !eof() )
                first    := test->first
                last     := test->last
                street   := test->street
                city     := test->city
                state    := test->state
                zip      := test->zip
                hiredate := test->hiredate 
                married  := test->married
                age      := test->age
                salary   := test->salary
                notes    := test->notes
		
                oInsert:execute()
                
                ++n

                test->( dbskip( 1 ) )
            end
	
            test->( DbGoTop() )
        end

        oDb:commit()		

        nSec := hb_milliSeconds() - nSec 

        msg( "Se han pasado " + Hb_NToS( n ) + " registros en " + Hb_NToS( nSec ) + " milisegundos", "Uso de bindParam" )
    else
        msg( "Fichero test.dbf no existe" )
    endif

return

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

Cualquier duda podéis escribir en este hilo.

Saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: HDBC para PostgreSQL :: Reply by xmanuel]]> 2025-02-01T10:27:28-07:00 2025-02-01T10:27:28-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45353&p=277364#p277364 ]]> ]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: HDBC para PostgreSQL :: Reply by csincuir]]> 2025-02-03T07:55:35-07:00 2025-02-03T07:55:35-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45353&p=277387#p277387 Como para cuando HDBC para MySQL?
Y para cuando podremos hacer pruebas?

Saludos cordiales.

Carlos]]>
Como para cuando HDBC para MySQL?
Y para cuando podremos hacer pruebas?

Saludos cordiales.

Carlos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Cómo Insertar registros a na tabla? :: Reply by Armando]]> 2025-01-27T11:05:18-07:00 2025-01-27T11:05:18-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45348&p=277228#p277228
Lo he resuelto pasando los registros a una nueva tabla temporal, pero me gustaría saber
si alguien lo haya hecho de otra forma. muestro aquí cómo lo hice por si a alguien mas le sirve.

1.- Estando el foco en el browse, el usuario oprime la tecla INS
2.- En un dialogo solicito el número de renglones o registros a insertar
3.- Identifico el número de registros donde el usuario dio el clic, recuerden que tengo una columna auto incrementable
4.- Con un DO WHILE paso los registros a la tabla temporal, si el número de registro a copiar es mayor que el numero de registro donde el usuario dio clic, entro en un FOR NEXT para agregar, a la tabla temporal, el número de registros que el usuario quiere insertar, al terminar el FOR NEXT sigo pasando los registros faltantes hasta llegar al final de la tabla
5.- Por último, limpio la tabla original y copio todos los registros de la tabla temporal y refresco el browse

Saludos]]>

Lo he resuelto pasando los registros a una nueva tabla temporal, pero me gustaría saber
si alguien lo haya hecho de otra forma. muestro aquí cómo lo hice por si a alguien mas le sirve.

1.- Estando el foco en el browse, el usuario oprime la tecla INS
2.- En un dialogo solicito el número de renglones o registros a insertar
3.- Identifico el número de registros donde el usuario dio el clic, recuerden que tengo una columna auto incrementable
4.- Con un DO WHILE paso los registros a la tabla temporal, si el número de registro a copiar es mayor que el numero de registro donde el usuario dio clic, entro en un FOR NEXT para agregar, a la tabla temporal, el número de registros que el usuario quiere insertar, al terminar el FOR NEXT sigo pasando los registros faltantes hasta llegar al final de la tabla
5.- Por último, limpio la tabla original y copio todos los registros de la tabla temporal y refresco el browse

Saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Cómo Insertar registros a na tabla? :: Reply by FiveWiDi]]> 2025-01-27T15:30:24-07:00 2025-01-27T15:30:24-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45348&p=277231#p277231
Yo lo haría usando un índice y un campo "DUMMYREC"

1º Veo la DBF en Xbrowse con el índice sobre campo DUMMYREC
2º Estoy en el registro 89.
3º Voy a insertar 4 registros
4º Voy al 'último' registro.
5º Hago
While Recno() <> 89
DUMMYREC := DUMMYREC + 4 con
Skip(-1)
End
nMyDUMMYREC := DUMMYREC - 4
6º Hago esto 4 veces
Append()
DUMMYREC := nMyDUMMYREC++
7º Aplico el índice sobre el campo DUMMYREC

Creo que funcionaría.

Si mientras trabaja el sistema se cae, reindexando no se pierde nada.]]>

Yo lo haría usando un índice y un campo "DUMMYREC"

1º Veo la DBF en Xbrowse con el índice sobre campo DUMMYREC
2º Estoy en el registro 89.
3º Voy a insertar 4 registros
4º Voy al 'último' registro.
5º Hago
While Recno() <> 89
DUMMYREC := DUMMYREC + 4 con
Skip(-1)
End
nMyDUMMYREC := DUMMYREC - 4
6º Hago esto 4 veces
Append()
DUMMYREC := nMyDUMMYREC++
7º Aplico el índice sobre el campo DUMMYREC

Creo que funcionaría.

Si mientras trabaja el sistema se cae, reindexando no se pierde nada.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Cómo Insertar registros a na tabla? :: Reply by Armando]]> 2025-01-27T16:48:26-07:00 2025-01-27T16:48:26-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45348&p=277233#p277233
Es parecido a lo que hago, una diferencia es que yo utilizo tablas MySql con ADO.

Gracias por la idea.

Saludos]]>

Es parecido a lo que hago, una diferencia es que yo utilizo tablas MySql con ADO.

Gracias por la idea.

Saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Cómo Insertar registros a na tabla? :: Reply by sysctrl2]]> 2025-01-28T08:41:10-07:00 2025-01-28T08:41:10-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45348&p=277244#p277244 :shock:]]> :shock:]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Cómo Insertar registros a na tabla? :: Reply by FiveWiDi]]> 2025-01-28T09:57:39-07:00 2025-01-28T09:57:39-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45348&p=277246#p277246
Armando wrote: Mon Jan 27, 2025 11:48 pm Amigo Carlos:

Es parecido a lo que hago, una diferencia es que yo utilizo tablas MySql con ADO.

Gracias por la idea.

Saludos
Entonces con más motivo.

Si no voy equivocado, en DBF se añaden al final del fichero, en MySql es el propio motor que decide donde grabarlo, por tanto yo usaría un índice para lo que mencionas.

Y tal como dice César, con 1 millón de registros...]]>
Armando wrote: Mon Jan 27, 2025 11:48 pm Amigo Carlos:

Es parecido a lo que hago, una diferencia es que yo utilizo tablas MySql con ADO.

Gracias por la idea.

Saludos
Entonces con más motivo.

Si no voy equivocado, en DBF se añaden al final del fichero, en MySql es el propio motor que decide donde grabarlo, por tanto yo usaría un índice para lo que mencionas.

Y tal como dice César, con 1 millón de registros...]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Cómo Insertar registros a na tabla? :: Reply by Armando]]> 2025-01-28T12:37:06-07:00 2025-01-28T12:37:06-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45348&p=277252#p277252
Afortunadamente el browse puede llegar tener hasta 50 registros.

Saludos]]>

Afortunadamente el browse puede llegar tener hasta 50 registros.

Saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Cómo Insertar registros a na tabla? :: Reply by jbrita]]> 2025-01-29T04:34:31-07:00 2025-01-29T04:34:31-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45348&p=277272#p277272 eso asi de facil

saludos]]>
eso asi de facil

saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Cómo Insertar registros a na tabla? :: Reply by Armando]]> 2025-01-29T09:24:39-07:00 2025-01-29T09:24:39-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45348&p=277276#p277276
Es otra alternativa, muchas gracias

Saludos al crio]]>

Es otra alternativa, muchas gracias

Saludos al crio]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Cómo Insertar registros a na tabla? :: Reply by cmsoft]]> 2025-01-30T04:24:35-07:00 2025-01-30T04:24:35-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45348&p=277295#p277295 Te consulto: porque cambiar el campo auto incremental? Si es para mostrar en forma ordenada, Mysql te lo permite con la clausula ORDER BY.
Y el Xbrowse lo respeta perfectamente.

Code: Select all | Expand

#INCLUDE "fivewin.ch"
#INCLUDE "tdolphin.ch"
FUNCTION Armando()
LOCAL oBrw, oCn, oRs, oForm, oBtn
   CONNECT oCn HOST 'localhost' ;
                    USER 'root' ;
                    PASSWORD 'secret' ;
                    PORT 3306 ;
                    FLAGS 0;
                    DATABASE 'test'
   if oCn == nil
      ? "can not connect to server"
      return nil
   endif
   //Creo una tabla temporal
   oCn:Execute("";
    + "CREATE TEMPORARY TABLE IF NOT EXISTS armando ";
    +"( `id` INT(10) NOT NULL AUTO_INCREMENT, ";    
    +"`nombre` VARCHAR(50) NOT NULL,";    
    +"`orden` INT(10) NOT NULL,";
    +"PRIMARY KEY (`id`)) ENGINE=INNODB DEFAULT CHARSET=utf8")
   //Inserto lo basico 
   oCn:Execute("INSERT INTO armando (orden,nombre) VALUES (1,'Manzana'),(2, 'Pera'),(3, 'Naranja'),(4, 'Mandarina')")
   oRs   := oCn:query("SELECT * FROM armando ORDER BY orden ")
   DEFINE DIALOG oForm TITLE "Armando" FROM 05,15 TO 36,99    
   @05,05 XBROWSE oBrw DATASOURCE oRs;
              COLUMNS "orden","nombre";
              HEADERS "Orden","Nombre";
              SIZES 80,200;
              OF oForm CELL SIZE 200,200 PIXEL       
   oBrw:CreateFromCode()
   @ 05,220 BUTTON oBtn PROMPT "Insertar" SIZE 30,10 OF oForm PIXEL ACTION Insertar(oRs,oCn,oBrw)
   ACTIVATE DIALOG oForm CENTER 
RETURN nil


STATIC FUNCTION Insertar(oRs,oCn,oBrw)
LOCAL oDlg1, nOrden := 0, cNombre := SPACE(50), oGet := ARRAY(2), oBtn := ARRAY(2), lRta := .f.
    DEFINE DIALOG oDlg1 TITLE "Insertar Registro" FROM 03,20 TO 14,60 
       
       @ 07, 05 SAY "Nombre:" OF oDlg1 PIXEL RIGHT SIZE 40,10
       @ 22, 05 SAY "Orden:"  OF oDlg1 PIXEL RIGHT SIZE 40,10       
       @ 05, 50 GET      oGet[1] VAR cNombre  OF oDlg1 PIXEL
       @ 20, 50 GET      oGet[2] VAR nOrden PICTURE "9999" OF oDlg1 PIXEL RIGHT       
       
       @ 35,30 BUTTON oBtn[1] PROMPT "&Grabar" OF oDlg1 SIZE 30,10 ;
               ACTION ((lRta := .t.), oDlg1:End() ) PIXEL
       @ 35,80 BUTTON oBtn[2] PROMPT "&Cancelar" OF oDlg1 SIZE 30,10 ;
               ACTION ((lRta := .f.), oDlg1:End() ) PIXEL
    ACTIVATE DIALOG oDlg1 CENTER 
IF !lRta .or. nOrden <=0   
   RETURN nil 
ENDIF 
oCn:Execute("UPDATE armando SET orden = orden + 1 WHERE orden >= "+str(nOrden))
oCn:Execute("INSERT INTO armando (nombre,orden) VALUES ('"+cNombre+"',"+STR(nOrden)+")")  
oRs:Refresh()
oBrw:Refresh(.t.)

RETURN nil
Es otra idea]]>
Te consulto: porque cambiar el campo auto incremental? Si es para mostrar en forma ordenada, Mysql te lo permite con la clausula ORDER BY.
Y el Xbrowse lo respeta perfectamente.

Code: Select all | Expand

#INCLUDE "fivewin.ch"
#INCLUDE "tdolphin.ch"
FUNCTION Armando()
LOCAL oBrw, oCn, oRs, oForm, oBtn
   CONNECT oCn HOST 'localhost' ;
                    USER 'root' ;
                    PASSWORD 'secret' ;
                    PORT 3306 ;
                    FLAGS 0;
                    DATABASE 'test'
   if oCn == nil
      ? "can not connect to server"
      return nil
   endif
   //Creo una tabla temporal
   oCn:Execute("";
    + "CREATE TEMPORARY TABLE IF NOT EXISTS armando ";
    +"( `id` INT(10) NOT NULL AUTO_INCREMENT, ";    
    +"`nombre` VARCHAR(50) NOT NULL,";    
    +"`orden` INT(10) NOT NULL,";
    +"PRIMARY KEY (`id`)) ENGINE=INNODB DEFAULT CHARSET=utf8")
   //Inserto lo basico 
   oCn:Execute("INSERT INTO armando (orden,nombre) VALUES (1,'Manzana'),(2, 'Pera'),(3, 'Naranja'),(4, 'Mandarina')")
   oRs   := oCn:query("SELECT * FROM armando ORDER BY orden ")
   DEFINE DIALOG oForm TITLE "Armando" FROM 05,15 TO 36,99    
   @05,05 XBROWSE oBrw DATASOURCE oRs;
              COLUMNS "orden","nombre";
              HEADERS "Orden","Nombre";
              SIZES 80,200;
              OF oForm CELL SIZE 200,200 PIXEL       
   oBrw:CreateFromCode()
   @ 05,220 BUTTON oBtn PROMPT "Insertar" SIZE 30,10 OF oForm PIXEL ACTION Insertar(oRs,oCn,oBrw)
   ACTIVATE DIALOG oForm CENTER 
RETURN nil


STATIC FUNCTION Insertar(oRs,oCn,oBrw)
LOCAL oDlg1, nOrden := 0, cNombre := SPACE(50), oGet := ARRAY(2), oBtn := ARRAY(2), lRta := .f.
    DEFINE DIALOG oDlg1 TITLE "Insertar Registro" FROM 03,20 TO 14,60 
       
       @ 07, 05 SAY "Nombre:" OF oDlg1 PIXEL RIGHT SIZE 40,10
       @ 22, 05 SAY "Orden:"  OF oDlg1 PIXEL RIGHT SIZE 40,10       
       @ 05, 50 GET      oGet[1] VAR cNombre  OF oDlg1 PIXEL
       @ 20, 50 GET      oGet[2] VAR nOrden PICTURE "9999" OF oDlg1 PIXEL RIGHT       
       
       @ 35,30 BUTTON oBtn[1] PROMPT "&Grabar" OF oDlg1 SIZE 30,10 ;
               ACTION ((lRta := .t.), oDlg1:End() ) PIXEL
       @ 35,80 BUTTON oBtn[2] PROMPT "&Cancelar" OF oDlg1 SIZE 30,10 ;
               ACTION ((lRta := .f.), oDlg1:End() ) PIXEL
    ACTIVATE DIALOG oDlg1 CENTER 
IF !lRta .or. nOrden <=0   
   RETURN nil 
ENDIF 
oCn:Execute("UPDATE armando SET orden = orden + 1 WHERE orden >= "+str(nOrden))
oCn:Execute("INSERT INTO armando (nombre,orden) VALUES ('"+cNombre+"',"+STR(nOrden)+")")  
oRs:Refresh()
oBrw:Refresh(.t.)

RETURN nil
Es otra idea]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Cómo Insertar registros a na tabla? :: Reply by sysctrl2]]> 2025-01-30T10:11:22-07:00 2025-01-30T10:11:22-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45348&p=277300#p277300 hay que probar :shock:]]> hay que probar :shock:]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Cómo Insertar registros a na tabla? :: Reply by Armando]]> 2025-01-30T18:00:35-07:00 2025-01-30T18:00:35-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45348&p=277325#p277325
Aportando, como siempre, en mi caso, acepto que en mi primer post no lo puse, pueden existir registros en blanco
el usuario los necesita como separadores, entonces el campo auto incremental es obligado.

Además, en ocasiones el usuario puede cambiar el orden dando clic en el encabezado del browse, si fuera el caso,
después ya no podría volver al órrden de captura y todos los registros en blanco quedarían al principio del browse

Muchas gracias por tu tiempo y ejemplo.

Saludos]]>

Aportando, como siempre, en mi caso, acepto que en mi primer post no lo puse, pueden existir registros en blanco
el usuario los necesita como separadores, entonces el campo auto incremental es obligado.

Además, en ocasiones el usuario puede cambiar el orden dando clic en el encabezado del browse, si fuera el caso,
después ya no podría volver al órrden de captura y todos los registros en blanco quedarían al principio del browse

Muchas gracias por tu tiempo y ejemplo.

Saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Cómo Insertar registros a na tabla? :: Reply by cmsoft]]> 2025-01-31T03:17:00-07:00 2025-01-31T03:17:00-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45348&p=277336#p277336 Seguramente no estoy comprendiendo bien tu necesidad final, pero Fivewin y Mysql pueden darte la solucion que necesitas.]]> Seguramente no estoy comprendiendo bien tu necesidad final, pero Fivewin y Mysql pueden darte la solucion que necesitas.]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Cómo Insertar registros a na tabla? :: Reply by Armando]]> 2025-01-31T17:41:14-07:00 2025-01-31T17:41:14-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45348&p=277355#p277355
Muchas gracias, así es como lo resolví.

Saludos]]>

Muchas gracias, así es como lo resolví.

Saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Cómo Insertar registros a na tabla? :: Reply by nageswaragunupudi]]> 2025-02-03T15:01:04-07:00 2025-02-03T15:01:04-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45348&p=277403#p277403

Code: Select all | Expand

#include "fivewin.ch"

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

function Main()

   local oCn, oRs

   oCn   := Fw_OpenAdoConnection( "MYSQL,209.250.245.152,fwh,fwhuser,FiveTech@2022", .t. )
   oRs   := CreateTableFruits( oCn )

   // Right-click to insert a new fruit
   XBROWSER oRs TITLE "FRUITS" SETUP ( ;
      oBrw:bRClicked := { |r,c,f,o| InsertFruit( oRs ), o:Refresh() } )

   oRs:Close()
   oCn:Close()

return nil

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

function CreateTableFruits( oCn )

   local oRs, v

   oCn:Execute( "DROP TABLE IF EXISTS fruits" )
   FWAdoCreateTable( "fruits", { { "fruit", "C", 15, 0 } }, oCn )

   oRs   := FW_OpenRecordSet( oCn, "fruits" )
   oRs:Sort := "id"
   for each v in { "Manzana", "Pera", "Naranja", "Mandarina", "Mango", "Banana", "Papaya", "Grape" }
      oRs:AddNew( "fruit", v )
   next

return oRs

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

function InsertFruit( oRs )

   local nSave := oRs:AbsolutePosition
   local nId   := oRs:Fields( "id" ):Value
   local cSql

   PRIVATE cId   := LTrim( Str( nId ) )
   PRIVATE cFruit   := PadR( "Lima", 15 )

   if !MsgGet( "Fruit Name:", "At Line : " + cId, @cFruit ) .or. Empty( cFruit )
      return nil
   endif
   cFruit   := Trim( cFruit )

   CursorWait()

TEXT INTO cSql
UPDATE fruits LEFT JOIN fruits a ON fruits.id = a.id + 1
 SET fruits.fruit = a.fruit
 WHERE fruits.id > &cId
ENDTEXT

   WITH OBJECT oRs:ActiveConnection
      :Execute( "INSERT INTO fruits ( fruit ) VALUES ( '' )" )
      :Execute( cSql )
      :Execute( "UPDATE fruits SET fruit = '&cFruit' WHERE id = &cId" )
   END
   oRs:Requery()
   oRs:AbsolutePosition := nSave
   CursorArrow()

return nil

//----------------------------------------------------------------------------//
Image]]>

Code: Select all | Expand

#include "fivewin.ch"

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

function Main()

   local oCn, oRs

   oCn   := Fw_OpenAdoConnection( "MYSQL,209.250.245.152,fwh,fwhuser,FiveTech@2022", .t. )
   oRs   := CreateTableFruits( oCn )

   // Right-click to insert a new fruit
   XBROWSER oRs TITLE "FRUITS" SETUP ( ;
      oBrw:bRClicked := { |r,c,f,o| InsertFruit( oRs ), o:Refresh() } )

   oRs:Close()
   oCn:Close()

return nil

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

function CreateTableFruits( oCn )

   local oRs, v

   oCn:Execute( "DROP TABLE IF EXISTS fruits" )
   FWAdoCreateTable( "fruits", { { "fruit", "C", 15, 0 } }, oCn )

   oRs   := FW_OpenRecordSet( oCn, "fruits" )
   oRs:Sort := "id"
   for each v in { "Manzana", "Pera", "Naranja", "Mandarina", "Mango", "Banana", "Papaya", "Grape" }
      oRs:AddNew( "fruit", v )
   next

return oRs

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

function InsertFruit( oRs )

   local nSave := oRs:AbsolutePosition
   local nId   := oRs:Fields( "id" ):Value
   local cSql

   PRIVATE cId   := LTrim( Str( nId ) )
   PRIVATE cFruit   := PadR( "Lima", 15 )

   if !MsgGet( "Fruit Name:", "At Line : " + cId, @cFruit ) .or. Empty( cFruit )
      return nil
   endif
   cFruit   := Trim( cFruit )

   CursorWait()

TEXT INTO cSql
UPDATE fruits LEFT JOIN fruits a ON fruits.id = a.id + 1
 SET fruits.fruit = a.fruit
 WHERE fruits.id > &cId
ENDTEXT

   WITH OBJECT oRs:ActiveConnection
      :Execute( "INSERT INTO fruits ( fruit ) VALUES ( '' )" )
      :Execute( cSql )
      :Execute( "UPDATE fruits SET fruit = '&cFruit' WHERE id = &cId" )
   END
   oRs:Requery()
   oRs:AbsolutePosition := nSave
   CursorArrow()

return nil

//----------------------------------------------------------------------------//
Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Cómo Insertar registros a na tabla? :: Reply by Armando]]> 2025-02-03T17:50:41-07:00 2025-02-03T17:50:41-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45348&p=277405#p277405
It is a great solution, but what if the user wants to insert multiple records, let's say 6 records at a time ?

Thanks a lot, Best regards]]>

It is a great solution, but what if the user wants to insert multiple records, let's say 6 records at a time ?

Thanks a lot, Best regards]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Cómo Insertar registros a na tabla? :: Reply by nageswaragunupudi]]> 2025-02-04T08:46:44-07:00 2025-02-04T08:46:44-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45348&p=277417#p277417 Image

Code: Select all | Expand

#include "fivewin.ch"
#include "adodef.ch"

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

function Main()

   local oCn, oRs
   local aInsert

   oCn   := Fw_OpenAdoConnection( "MYSQL,209.250.245.152,fwh,fwhuser,FiveTech@2022", .t. )
   oRs   := CreateTableFruits( oCn )

   // Right-click to insert new fruits
   aInsert  := { "APPLES", "APRICOT", "MELON", "DATES" }

   XBROWSER oRs TITLE "FRUITS" SETUP ( ;
      oBrw:bRClicked := { |r,c,f,o| InsertFruits( oRs, aInsert ), o:Refresh() } )

   oRs:Close()
   oCn:Close()

return nil

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

function CreateTableFruits( oCn )

   local oRs, v

   oCn:Execute( "DROP TABLE IF EXISTS fruits" )
   FWAdoCreateTable( "fruits", { { "fruit", "C", 15, 0 } }, oCn )

   oRs   := FW_OpenRecordSet( oCn, "fruits" )
   oRs:Sort := "id"
   for each v in { "Manzana", "Pera", "Naranja", "Mandarina", "Mango", "Banana", "Papaya", "Grape", "Guva", "Durian"  }
      oRs:AddNew( "fruit", v )
   next

return oRs

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

function InsertFruits( oRs, aFruits )

   local oCn      := oRs:ActiveConnection
   local nSave    := oRs:AbsolutePosition
   local nId, aList, aRows, cSql

   CursorWait()

   aList    := {}
   AEval( aFruits, { |c| AAdd( aList, { nil, c } ) } )

   aRows := RsGetRows( oRs )
   AEval( aRows, { |a,i| AAdd( aList, { nil, a[ 2 ] } ), ;
                         aList[ i, 1 ] := a[ 1 ] } )

   cSql  := SQL INSERT INTO fruits ( id, fruit ) ARRAY aList
   cSql  := "REPLACE" + SubStr( cSql, 7 )
   oCn:Execute( cSql )
   // done
   oRs:Requery()
   oRs:MoveLast()
   nId   := oRs:Fields( "id" ):Value
   oCn:Execute( "ALTER TABLE fruits AUTO_INCREMENT = " + LTrim( Str( nID + 1 ) ) )
   oRs:AbsolutePosition := nSave
   CursorArrow()

return nil

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

]]>
Image

Code: Select all | Expand

#include "fivewin.ch"
#include "adodef.ch"

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

function Main()

   local oCn, oRs
   local aInsert

   oCn   := Fw_OpenAdoConnection( "MYSQL,209.250.245.152,fwh,fwhuser,FiveTech@2022", .t. )
   oRs   := CreateTableFruits( oCn )

   // Right-click to insert new fruits
   aInsert  := { "APPLES", "APRICOT", "MELON", "DATES" }

   XBROWSER oRs TITLE "FRUITS" SETUP ( ;
      oBrw:bRClicked := { |r,c,f,o| InsertFruits( oRs, aInsert ), o:Refresh() } )

   oRs:Close()
   oCn:Close()

return nil

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

function CreateTableFruits( oCn )

   local oRs, v

   oCn:Execute( "DROP TABLE IF EXISTS fruits" )
   FWAdoCreateTable( "fruits", { { "fruit", "C", 15, 0 } }, oCn )

   oRs   := FW_OpenRecordSet( oCn, "fruits" )
   oRs:Sort := "id"
   for each v in { "Manzana", "Pera", "Naranja", "Mandarina", "Mango", "Banana", "Papaya", "Grape", "Guva", "Durian"  }
      oRs:AddNew( "fruit", v )
   next

return oRs

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

function InsertFruits( oRs, aFruits )

   local oCn      := oRs:ActiveConnection
   local nSave    := oRs:AbsolutePosition
   local nId, aList, aRows, cSql

   CursorWait()

   aList    := {}
   AEval( aFruits, { |c| AAdd( aList, { nil, c } ) } )

   aRows := RsGetRows( oRs )
   AEval( aRows, { |a,i| AAdd( aList, { nil, a[ 2 ] } ), ;
                         aList[ i, 1 ] := a[ 1 ] } )

   cSql  := SQL INSERT INTO fruits ( id, fruit ) ARRAY aList
   cSql  := "REPLACE" + SubStr( cSql, 7 )
   oCn:Execute( cSql )
   // done
   oRs:Requery()
   oRs:MoveLast()
   nId   := oRs:Fields( "id" ):Value
   oCn:Execute( "ALTER TABLE fruits AUTO_INCREMENT = " + LTrim( Str( nID + 1 ) ) )
   oRs:AbsolutePosition := nSave
   CursorArrow()

return nil

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

]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Cómo Insertar registros a na tabla? :: Reply by Armando]]> 2025-02-04T08:54:08-07:00 2025-02-04T08:54:08-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45348&p=277419#p277419
Excelent !.

Thank you

With Best regards]]>

Excelent !.

Thank you

With Best regards]]>
<![CDATA[FiveWin para Harbour/xHarbour :: problemas con CheckBox en Dialog con TRANSPARENT en FWH 2409 :: Author CARLOS ATUNCAR]]> 2025-02-01T10:02:33-07:00 2025-02-03T09:59:03-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45368&p=277361#p277361

Code: Select all | Expand

MERCADERIA DIALOG MOVEABLE PURE LOADONCALL DISCARDABLE 0, 0, 419, 367
STYLE DS_FIXEDSYS |DS_SETFONT |WS_POPUP |WS_VISIBLE |WS_SYSMENU |WS_THICKFRAME |WS_CAPTION 
CAPTION "Mantenimiento de Mercaderia"
FONT 8, "Ms Shell Dlg"
LANGUAGE LANG_NEUTRAL, 0
BEGIN
  CONTROL "Caracteristicas del Producto",-1,"BUTTON",BS_GROUPBOX |WS_CHILD |WS_VISIBLE ,5,1,405,155
  CONTROL "Valorizaciones",-1,"BUTTON",BS_GROUPBOX |WS_CHILD |WS_VISIBLE ,5,157,405,38
  CONTROL "Contabilidad",65535,"BUTTON",BS_GROUPBOX |WS_CHILD |WS_VISIBLE ,5,195,405,38
  CONTROL "Detracción",65535,"BUTTON",BS_GROUPBOX |WS_CHILD |WS_VISIBLE ,5,233,405,86
  CONTROL "Codigo del Proveedor :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,15,80,8
  CONTROL "Nombre del Producto :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,60,80,8
  CONTROL "Unidad de Medida :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,75,80,8
  CONTROL "Caracteristicas :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,12,114,79,8
  CONTROL "Grupo  :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,30,80,8
  CONTROL "Sub Grupo  :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,45,80,8
  CONTROL "Peso  Bruto:",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,220,75,44,8
  CONTROL "Piezas x Envase :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,33,90,56,8
  CONTROL "Afectacion del IGV :",-1,"STATIC",SS_LEFT |WS_CHILD |WS_GROUP |WS_VISIBLE ,213,95,66,8
  CONTROL "Costo S/. :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,172,41,8
  CONTROL "Precio :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,102,172,28,8
  CONTROL "Precio Minimo :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,187,172,53,8
  CONTROL "Stock Minimo :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,293,172,53,8
  CONTROL "Laboratorio :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,230,110,45,8
  CONTROL "Proveedor :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,230,125,45,8
  CONTROL "...",300,"STATIC",SS_LEFT |WS_CHILD |WS_GROUP |WS_VISIBLE ,165,30,173,8
  CONTROL "...",301,"STATIC",SS_LEFT |WS_CHILD |WS_GROUP |WS_VISIBLE ,165,45,173,8
  CONTROL "Cuenta de Compras :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,63,211,77,8
  CONTROL "Cuenta de Ventas :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,223,211,77,8
  CONTROL "Edit1",100,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,15,93,12
  CONTROL "1234567890",101,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,30,65,12
  CONTROL "Edit1",102,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,45,65,12
  CONTROL "Edit4",103,"EDIT",ES_MULTILINE |ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,60,300,12
  CONTROL "",104,"COMBOBOX",CBS_DROPDOWN |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,95,75,92,49
  CONTROL "Edit1",105,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,273,74,35,12
  CONTROL "Edit1",106,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,90,35,12
  CONTROL "",107,"COMBOBOX",CBS_DROPDOWN |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,280,95,121,37
  CONTROL "Edit7",108,"EDIT",ES_MULTILINE |ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,105,129,32
  CONTROL "Edit8",109,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,280,110,99,12
  CONTROL "Edit8",110,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,280,125,59,12
  CONTROL "Producto de entrega Gratuita",117,"BUTTON",BS_CHECKBOX |BS_LEFT |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,96,140,140,10
  CONTROL "Edit8",111,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,55,172,40,12
  CONTROL "Edit8",112,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,136,172,40,12
  CONTROL "Edit8",113,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,246,172,40,12
  CONTROL "Edit8",114,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,352,172,40,12
  CONTROL "Edit13",115,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,147,211,60,12
  CONTROL "Edit13",116,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,307,211,60,12
  CONTROL "Tipo de Registro :",IDC_STATIC,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,250,100,8
  CONTROL "Código de Bien/Servicio :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,265,100,8
  CONTROL "Base Imponible Documto ;",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,280,100,8
  CONTROL "Porcentaje de Detracción :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,295,100,8
  CONTROL "BIenes",118,"BUTTON",BS_RADIOBUTTON |BS_LEFT |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,118,250,44,10
  CONTROL "Servicios",119,"BUTTON",BS_RADIOBUTTON |BS_LEFT |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,172,250,44,10
  CONTROL "",120,"COMBOBOX",CBS_DROPDOWN |WS_CHILD |WS_VSCROLL |WS_TABSTOP |WS_VISIBLE ,118,265,273,89
  CONTROL "Edit15",121,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,118,280,65,12
  CONTROL "Edit15",122,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,118,295,65,12
  CONTROL "&Aceptar",200,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,103,330,79,17
  CONTROL "&Cancelar",201,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,238,330,79,17
  CONTROL "",202,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,190,75,22,14
  CONTROL "",203,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,381,110,22,14
END

cuando cargo el dialog aparece sobrepuesto el combobox y cuando paso el mouse se borra los demas controles que estan debajo del checkbox hasta el final del dialogo, alguna ayuda por favor]]>

Code: Select all | Expand

MERCADERIA DIALOG MOVEABLE PURE LOADONCALL DISCARDABLE 0, 0, 419, 367
STYLE DS_FIXEDSYS |DS_SETFONT |WS_POPUP |WS_VISIBLE |WS_SYSMENU |WS_THICKFRAME |WS_CAPTION 
CAPTION "Mantenimiento de Mercaderia"
FONT 8, "Ms Shell Dlg"
LANGUAGE LANG_NEUTRAL, 0
BEGIN
  CONTROL "Caracteristicas del Producto",-1,"BUTTON",BS_GROUPBOX |WS_CHILD |WS_VISIBLE ,5,1,405,155
  CONTROL "Valorizaciones",-1,"BUTTON",BS_GROUPBOX |WS_CHILD |WS_VISIBLE ,5,157,405,38
  CONTROL "Contabilidad",65535,"BUTTON",BS_GROUPBOX |WS_CHILD |WS_VISIBLE ,5,195,405,38
  CONTROL "Detracción",65535,"BUTTON",BS_GROUPBOX |WS_CHILD |WS_VISIBLE ,5,233,405,86
  CONTROL "Codigo del Proveedor :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,15,80,8
  CONTROL "Nombre del Producto :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,60,80,8
  CONTROL "Unidad de Medida :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,75,80,8
  CONTROL "Caracteristicas :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,12,114,79,8
  CONTROL "Grupo  :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,30,80,8
  CONTROL "Sub Grupo  :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,45,80,8
  CONTROL "Peso  Bruto:",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,220,75,44,8
  CONTROL "Piezas x Envase :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,33,90,56,8
  CONTROL "Afectacion del IGV :",-1,"STATIC",SS_LEFT |WS_CHILD |WS_GROUP |WS_VISIBLE ,213,95,66,8
  CONTROL "Costo S/. :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,172,41,8
  CONTROL "Precio :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,102,172,28,8
  CONTROL "Precio Minimo :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,187,172,53,8
  CONTROL "Stock Minimo :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,293,172,53,8
  CONTROL "Laboratorio :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,230,110,45,8
  CONTROL "Proveedor :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,230,125,45,8
  CONTROL "...",300,"STATIC",SS_LEFT |WS_CHILD |WS_GROUP |WS_VISIBLE ,165,30,173,8
  CONTROL "...",301,"STATIC",SS_LEFT |WS_CHILD |WS_GROUP |WS_VISIBLE ,165,45,173,8
  CONTROL "Cuenta de Compras :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,63,211,77,8
  CONTROL "Cuenta de Ventas :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,223,211,77,8
  CONTROL "Edit1",100,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,15,93,12
  CONTROL "1234567890",101,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,30,65,12
  CONTROL "Edit1",102,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,45,65,12
  CONTROL "Edit4",103,"EDIT",ES_MULTILINE |ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,60,300,12
  CONTROL "",104,"COMBOBOX",CBS_DROPDOWN |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,95,75,92,49
  CONTROL "Edit1",105,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,273,74,35,12
  CONTROL "Edit1",106,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,90,35,12
  CONTROL "",107,"COMBOBOX",CBS_DROPDOWN |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,280,95,121,37
  CONTROL "Edit7",108,"EDIT",ES_MULTILINE |ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,105,129,32
  CONTROL "Edit8",109,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,280,110,99,12
  CONTROL "Edit8",110,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,280,125,59,12
  CONTROL "Producto de entrega Gratuita",117,"BUTTON",BS_CHECKBOX |BS_LEFT |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,96,140,140,10
  CONTROL "Edit8",111,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,55,172,40,12
  CONTROL "Edit8",112,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,136,172,40,12
  CONTROL "Edit8",113,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,246,172,40,12
  CONTROL "Edit8",114,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,352,172,40,12
  CONTROL "Edit13",115,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,147,211,60,12
  CONTROL "Edit13",116,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,307,211,60,12
  CONTROL "Tipo de Registro :",IDC_STATIC,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,250,100,8
  CONTROL "Código de Bien/Servicio :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,265,100,8
  CONTROL "Base Imponible Documto ;",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,280,100,8
  CONTROL "Porcentaje de Detracción :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,295,100,8
  CONTROL "BIenes",118,"BUTTON",BS_RADIOBUTTON |BS_LEFT |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,118,250,44,10
  CONTROL "Servicios",119,"BUTTON",BS_RADIOBUTTON |BS_LEFT |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,172,250,44,10
  CONTROL "",120,"COMBOBOX",CBS_DROPDOWN |WS_CHILD |WS_VSCROLL |WS_TABSTOP |WS_VISIBLE ,118,265,273,89
  CONTROL "Edit15",121,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,118,280,65,12
  CONTROL "Edit15",122,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,118,295,65,12
  CONTROL "&Aceptar",200,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,103,330,79,17
  CONTROL "&Cancelar",201,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,238,330,79,17
  CONTROL "",202,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,190,75,22,14
  CONTROL "",203,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,381,110,22,14
END

cuando cargo el dialog aparece sobrepuesto el combobox y cuando paso el mouse se borra los demas controles que estan debajo del checkbox hasta el final del dialogo, alguna ayuda por favor]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: problemas con CHECKBOX en FWH 2409 :: Reply by CARLOS ATUNCAR]]> 2025-02-01T10:23:41-07:00 2025-02-01T10:23:41-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45368&p=277362#p277362 Image
con la version FWH2409
Image]]>
Image
con la version FWH2409
Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: problemas con CHECKBOX en FWH 2409 :: Reply by nageswaragunupudi]]> 2025-02-01T10:38:21-07:00 2025-02-01T10:38:21-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45368&p=277365#p277365 <![CDATA[FiveWin para Harbour/xHarbour :: Re: problemas con CHECKBOX en FWH 2409 :: Reply by karinha]]> 2025-02-01T11:13:27-07:00 2025-02-01T11:13:27-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45368&p=277366#p277366
Prueba C:\FWH\SAMPLES\RICHARD3.PRG usando WORKSHOP.exe si dá error.

Gracias, tks.

Regards, saludos.]]>

Prueba C:\FWH\SAMPLES\RICHARD3.PRG usando WORKSHOP.exe si dá error.

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: problemas con CHECKBOX en FWH 2409 :: Reply by CARLOS ATUNCAR]]> 2025-02-01T20:43:34-07:00 2025-02-01T20:43:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45368&p=277369#p277369 <![CDATA[FiveWin para Harbour/xHarbour :: Re: problemas con CHECKBOX en FWH 2409 :: Reply by karinha]]> 2025-02-02T09:55:04-07:00 2025-02-02T09:55:04-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45368&p=277373#p277373
Regards, saludos.]]>

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: problemas con CHECKBOX en FWH 2409 :: Reply by nageswaragunupudi]]> 2025-02-02T11:25:38-07:00 2025-02-02T11:25:38-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45368&p=277374#p277374 We tested with Harbour, xHarbour with and without Manifest.

This is the program we used to test:

Code: Select all | Expand

#include "fivewin.ch"

function Main()

   local oDlg, oFont
   local oGet[ 20 ]
   local aVar := { Space(10), "1234567890", Space(10), Space(10), 0, ;
                  1, "multiline", Space(10), Space(10), 0, ;
                  0, 0, 0, Space(10), Space(10), ;
                  0, 0 }
   local vCbx := { "4A-BOBINAS", "10-OP.GRAVIDAS", "One" }
   local oBtn[ 2 ]
   local oCbx[ 3 ], oChk
   local lVar  := .f.
   local oRadio, nRadio := 1

   SetGetColorFocus()

   DEFINE FONT oFont NAME "VERDANA" SIZE 0,-12
   DEFINE DIALOG oDlg RESOURCE "MERCADERIA" FONT oFont

   REDEFINE GET oGet[ 1 ] VAR aVar[ 1 ] ID 100 OF oDlg
   REDEFINE GET oGet[ 2 ] VAR aVar[ 2 ] ID 101 OF oDlg
   REDEFINE GET oGet[ 3 ] VAR aVar[ 3 ] ID 102 OF oDlg
   REDEFINE GET oGet[ 4 ] VAR aVar[ 4 ] ID 103 OF oDlg
   REDEFINE COMBOBOX oCbx[ 1 ] VAR vCbx[ 1 ] ID 104 OF oDlg ITEMS { "4A-BOBINAS", "Two", "Three" }
   REDEFINE GET oGet[ 5 ] VAR aVar[ 5 ] ID 105 OF oDlg PICTURE "999.9999"
   REDEFINE GET oGet[ 6 ] VAR aVar[ 6 ] ID 106 OF oDlg PICTURE "999"
   REDEFINE COMBOBOX oCbx[ 2 ] VAR vCbx[ 2 ] ID 107 OF oDlg ITEMS { "10-OP.GRAVIDAS", "Two", "Three" }
   REDEFINE GET oGet[ 7 ] VAR aVar[ 7 ] TEXT ID 108 OF oDlg
   REDEFINE GET oGet[ 8 ] VAR aVar[ 8 ] ID 109 OF oDlg
   REDEFINE GET oGet[ 9 ] VAR aVar[ 9 ] ID 110 OF oDlg
   REDEFINE CHECKBOX oChk VAR lVar ID 117 OF oDlg
   REDEFINE GET oGet[ 10 ] VAR aVar[ 10 ] ID 111 OF oDlg PICTURE "999.9999"
   REDEFINE GET oGet[ 11 ] VAR aVar[ 11 ] ID 112 OF oDlg PICTURE "999.9999"
   REDEFINE GET oGet[ 12 ] VAR aVar[ 12 ] ID 113 OF oDlg PICTURE "999.9999"
   REDEFINE GET oGet[ 13 ] VAR aVar[ 13 ] ID 114 OF oDlg PICTURE "999.9999"
   REDEFINE GET oGet[ 14 ] VAR aVar[ 14 ] ID 115 OF oDlg
   REDEFINE GET oGet[ 15 ] VAR aVar[ 15 ] ID 116 OF oDlg
   REDEFINE RADIO oRadio VAR nRadio ID 118, 119 OF oDlg
   REDEFINE COMBOBOX oCbx[ 3 ] VAR vCbx[ 3 ] ID 120 OF oDlg ITEMS { "One", "Two", "Three" }
   REDEFINE GET oGet[ 16 ] VAR aVar[ 16 ] ID 121 OF oDlg PICTURE "999.9999"
   REDEFINE GET oGet[ 17 ] VAR aVar[ 17 ] ID 122 OF oDlg PICTURE "999.9999"

   REDEFINE BTNBMP oBtn[ 1 ] ID 202 OF oDlg FILE 0xE109
   REDEFINE BTNBMP oBtn[ 2 ] ID 203 OF oDlg FILE 0xE109

   REDEFINE BUTTON ID 200 OF oDlg ACTION oDlg:End
   REDEFINE BUTTON ID 201 OF oDlg ACTION oDlg:End

   ACTIVATE DIALOG oDlg CENTERED
   RELEASE FONT oFont

return nil
This is the RC file (exact copy of the RC file you posted).

Code: Select all | Expand

MERCADERIA DIALOG MOVEABLE PURE LOADONCALL DISCARDABLE 0, 0, 419, 367
STYLE DS_FIXEDSYS |DS_SETFONT |WS_POPUP |WS_VISIBLE |WS_SYSMENU |WS_THICKFRAME |WS_CAPTION
CAPTION "Mantenimiento de Mercaderia"
FONT 8, "Ms Shell Dlg"
LANGUAGE LANG_NEUTRAL, 0
BEGIN
  CONTROL "Caracteristicas del Producto",-1,"BUTTON",BS_GROUPBOX |WS_CHILD |WS_VISIBLE ,5,1,405,155
  CONTROL "Valorizaciones",-1,"BUTTON",BS_GROUPBOX |WS_CHILD |WS_VISIBLE ,5,157,405,38
  CONTROL "Contabilidad",65535,"BUTTON",BS_GROUPBOX |WS_CHILD |WS_VISIBLE ,5,195,405,38
  CONTROL "Detracción",65535,"BUTTON",BS_GROUPBOX |WS_CHILD |WS_VISIBLE ,5,233,405,86
  CONTROL "Codigo del Proveedor :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,15,80,8
  CONTROL "Nombre del Producto :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,60,80,8
  CONTROL "Unidad de Medida :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,75,80,8
  CONTROL "Caracteristicas :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,12,114,79,8
  CONTROL "Grupo  :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,30,80,8
  CONTROL "Sub Grupo  :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,45,80,8
  CONTROL "Peso  Bruto:",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,220,75,44,8
  CONTROL "Piezas x Envase :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,33,90,56,8
  CONTROL "Afectacion del IGV :",-1,"STATIC",SS_LEFT |WS_CHILD |WS_GROUP |WS_VISIBLE ,213,95,66,8
  CONTROL "Costo S/. :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,172,41,8
  CONTROL "Precio :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,102,172,28,8
  CONTROL "Precio Minimo :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,187,172,53,8
  CONTROL "Stock Minimo :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,293,172,53,8
  CONTROL "Laboratorio :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,230,110,45,8
  CONTROL "Proveedor :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,230,125,45,8
  CONTROL "...",300,"STATIC",SS_LEFT |WS_CHILD |WS_GROUP |WS_VISIBLE ,165,30,173,8
  CONTROL "...",301,"STATIC",SS_LEFT |WS_CHILD |WS_GROUP |WS_VISIBLE ,165,45,173,8
  CONTROL "Cuenta de Compras :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,63,211,77,8
  CONTROL "Cuenta de Ventas :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,223,211,77,8
  CONTROL "Edit1",100,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,15,93,12
  CONTROL "1234567890",101,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,30,65,12
  CONTROL "Edit1",102,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,45,65,12
  CONTROL "Edit4",103,"EDIT",ES_MULTILINE |ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,60,300,12
  CONTROL "",104,"COMBOBOX",CBS_DROPDOWN |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,95,75,92,49
  CONTROL "Edit1",105,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,273,74,35,12
  CONTROL "Edit1",106,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,90,35,12
  CONTROL "",107,"COMBOBOX",CBS_DROPDOWN |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,280,95,121,37
  CONTROL "Edit7",108,"EDIT",ES_MULTILINE |ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,105,129,32
  CONTROL "Edit8",109,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,280,110,99,12
  CONTROL "Edit8",110,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,280,125,59,12
  CONTROL "Producto de entrega Gratuita",117,"BUTTON",BS_CHECKBOX |BS_LEFT |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,96,140,140,10
  CONTROL "Edit8",111,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,55,172,40,12
  CONTROL "Edit8",112,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,136,172,40,12
  CONTROL "Edit8",113,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,246,172,40,12
  CONTROL "Edit8",114,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,352,172,40,12
  CONTROL "Edit13",115,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,147,211,60,12
  CONTROL "Edit13",116,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,307,211,60,12
  CONTROL "Tipo de Registro :",IDC_STATIC,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,250,100,8
  CONTROL "Código de Bien/Servicio :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,265,100,8
  CONTROL "Base Imponible Documto ;",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,280,100,8
  CONTROL "Porcentaje de Detracción :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,295,100,8
  CONTROL "BIenes",118,"BUTTON",BS_RADIOBUTTON |BS_LEFT |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,118,250,44,10
  CONTROL "Servicios",119,"BUTTON",BS_RADIOBUTTON |BS_LEFT |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,172,250,44,10
  CONTROL "",120,"COMBOBOX",CBS_DROPDOWN |WS_CHILD |WS_VSCROLL |WS_TABSTOP |WS_VISIBLE ,118,265,273,89
  CONTROL "Edit15",121,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,118,280,65,12
  CONTROL "Edit15",122,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,118,295,65,12
  CONTROL "&Aceptar",200,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,103,330,79,17
  CONTROL "&Cancelar",201,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,238,330,79,17
  CONTROL "",202,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,190,75,22,14
  CONTROL "",203,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,381,110,22,14
END
Results:
With Manifest:
Image

Without Manifest:
Image

1) We request you to please check this program separately with this rc file and let us know if you experience any problem. Please copy these files to your fwh2409\samples folder and build the exe using either buildh.bat or buildx.bat.

2) Please share with your program using this rc file.

Thanks. Awaiting your feedback.]]>
We tested with Harbour, xHarbour with and without Manifest.

This is the program we used to test:

Code: Select all | Expand

#include "fivewin.ch"

function Main()

   local oDlg, oFont
   local oGet[ 20 ]
   local aVar := { Space(10), "1234567890", Space(10), Space(10), 0, ;
                  1, "multiline", Space(10), Space(10), 0, ;
                  0, 0, 0, Space(10), Space(10), ;
                  0, 0 }
   local vCbx := { "4A-BOBINAS", "10-OP.GRAVIDAS", "One" }
   local oBtn[ 2 ]
   local oCbx[ 3 ], oChk
   local lVar  := .f.
   local oRadio, nRadio := 1

   SetGetColorFocus()

   DEFINE FONT oFont NAME "VERDANA" SIZE 0,-12
   DEFINE DIALOG oDlg RESOURCE "MERCADERIA" FONT oFont

   REDEFINE GET oGet[ 1 ] VAR aVar[ 1 ] ID 100 OF oDlg
   REDEFINE GET oGet[ 2 ] VAR aVar[ 2 ] ID 101 OF oDlg
   REDEFINE GET oGet[ 3 ] VAR aVar[ 3 ] ID 102 OF oDlg
   REDEFINE GET oGet[ 4 ] VAR aVar[ 4 ] ID 103 OF oDlg
   REDEFINE COMBOBOX oCbx[ 1 ] VAR vCbx[ 1 ] ID 104 OF oDlg ITEMS { "4A-BOBINAS", "Two", "Three" }
   REDEFINE GET oGet[ 5 ] VAR aVar[ 5 ] ID 105 OF oDlg PICTURE "999.9999"
   REDEFINE GET oGet[ 6 ] VAR aVar[ 6 ] ID 106 OF oDlg PICTURE "999"
   REDEFINE COMBOBOX oCbx[ 2 ] VAR vCbx[ 2 ] ID 107 OF oDlg ITEMS { "10-OP.GRAVIDAS", "Two", "Three" }
   REDEFINE GET oGet[ 7 ] VAR aVar[ 7 ] TEXT ID 108 OF oDlg
   REDEFINE GET oGet[ 8 ] VAR aVar[ 8 ] ID 109 OF oDlg
   REDEFINE GET oGet[ 9 ] VAR aVar[ 9 ] ID 110 OF oDlg
   REDEFINE CHECKBOX oChk VAR lVar ID 117 OF oDlg
   REDEFINE GET oGet[ 10 ] VAR aVar[ 10 ] ID 111 OF oDlg PICTURE "999.9999"
   REDEFINE GET oGet[ 11 ] VAR aVar[ 11 ] ID 112 OF oDlg PICTURE "999.9999"
   REDEFINE GET oGet[ 12 ] VAR aVar[ 12 ] ID 113 OF oDlg PICTURE "999.9999"
   REDEFINE GET oGet[ 13 ] VAR aVar[ 13 ] ID 114 OF oDlg PICTURE "999.9999"
   REDEFINE GET oGet[ 14 ] VAR aVar[ 14 ] ID 115 OF oDlg
   REDEFINE GET oGet[ 15 ] VAR aVar[ 15 ] ID 116 OF oDlg
   REDEFINE RADIO oRadio VAR nRadio ID 118, 119 OF oDlg
   REDEFINE COMBOBOX oCbx[ 3 ] VAR vCbx[ 3 ] ID 120 OF oDlg ITEMS { "One", "Two", "Three" }
   REDEFINE GET oGet[ 16 ] VAR aVar[ 16 ] ID 121 OF oDlg PICTURE "999.9999"
   REDEFINE GET oGet[ 17 ] VAR aVar[ 17 ] ID 122 OF oDlg PICTURE "999.9999"

   REDEFINE BTNBMP oBtn[ 1 ] ID 202 OF oDlg FILE 0xE109
   REDEFINE BTNBMP oBtn[ 2 ] ID 203 OF oDlg FILE 0xE109

   REDEFINE BUTTON ID 200 OF oDlg ACTION oDlg:End
   REDEFINE BUTTON ID 201 OF oDlg ACTION oDlg:End

   ACTIVATE DIALOG oDlg CENTERED
   RELEASE FONT oFont

return nil
This is the RC file (exact copy of the RC file you posted).

Code: Select all | Expand

MERCADERIA DIALOG MOVEABLE PURE LOADONCALL DISCARDABLE 0, 0, 419, 367
STYLE DS_FIXEDSYS |DS_SETFONT |WS_POPUP |WS_VISIBLE |WS_SYSMENU |WS_THICKFRAME |WS_CAPTION
CAPTION "Mantenimiento de Mercaderia"
FONT 8, "Ms Shell Dlg"
LANGUAGE LANG_NEUTRAL, 0
BEGIN
  CONTROL "Caracteristicas del Producto",-1,"BUTTON",BS_GROUPBOX |WS_CHILD |WS_VISIBLE ,5,1,405,155
  CONTROL "Valorizaciones",-1,"BUTTON",BS_GROUPBOX |WS_CHILD |WS_VISIBLE ,5,157,405,38
  CONTROL "Contabilidad",65535,"BUTTON",BS_GROUPBOX |WS_CHILD |WS_VISIBLE ,5,195,405,38
  CONTROL "Detracción",65535,"BUTTON",BS_GROUPBOX |WS_CHILD |WS_VISIBLE ,5,233,405,86
  CONTROL "Codigo del Proveedor :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,15,80,8
  CONTROL "Nombre del Producto :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,60,80,8
  CONTROL "Unidad de Medida :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,75,80,8
  CONTROL "Caracteristicas :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,12,114,79,8
  CONTROL "Grupo  :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,30,80,8
  CONTROL "Sub Grupo  :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,45,80,8
  CONTROL "Peso  Bruto:",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,220,75,44,8
  CONTROL "Piezas x Envase :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,33,90,56,8
  CONTROL "Afectacion del IGV :",-1,"STATIC",SS_LEFT |WS_CHILD |WS_GROUP |WS_VISIBLE ,213,95,66,8
  CONTROL "Costo S/. :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,172,41,8
  CONTROL "Precio :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,102,172,28,8
  CONTROL "Precio Minimo :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,187,172,53,8
  CONTROL "Stock Minimo :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,293,172,53,8
  CONTROL "Laboratorio :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,230,110,45,8
  CONTROL "Proveedor :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,230,125,45,8
  CONTROL "...",300,"STATIC",SS_LEFT |WS_CHILD |WS_GROUP |WS_VISIBLE ,165,30,173,8
  CONTROL "...",301,"STATIC",SS_LEFT |WS_CHILD |WS_GROUP |WS_VISIBLE ,165,45,173,8
  CONTROL "Cuenta de Compras :",-1,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,63,211,77,8
  CONTROL "Cuenta de Ventas :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,223,211,77,8
  CONTROL "Edit1",100,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,15,93,12
  CONTROL "1234567890",101,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,30,65,12
  CONTROL "Edit1",102,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,45,65,12
  CONTROL "Edit4",103,"EDIT",ES_MULTILINE |ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,60,300,12
  CONTROL "",104,"COMBOBOX",CBS_DROPDOWN |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,95,75,92,49
  CONTROL "Edit1",105,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,273,74,35,12
  CONTROL "Edit1",106,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,90,35,12
  CONTROL "",107,"COMBOBOX",CBS_DROPDOWN |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,280,95,121,37
  CONTROL "Edit7",108,"EDIT",ES_MULTILINE |ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,95,105,129,32
  CONTROL "Edit8",109,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,280,110,99,12
  CONTROL "Edit8",110,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,280,125,59,12
  CONTROL "Producto de entrega Gratuita",117,"BUTTON",BS_CHECKBOX |BS_LEFT |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,96,140,140,10
  CONTROL "Edit8",111,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,55,172,40,12
  CONTROL "Edit8",112,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,136,172,40,12
  CONTROL "Edit8",113,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,246,172,40,12
  CONTROL "Edit8",114,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,352,172,40,12
  CONTROL "Edit13",115,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,147,211,60,12
  CONTROL "Edit13",116,"EDIT",ES_LEFT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,307,211,60,12
  CONTROL "Tipo de Registro :",IDC_STATIC,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,250,100,8
  CONTROL "Código de Bien/Servicio :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,265,100,8
  CONTROL "Base Imponible Documto ;",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,280,100,8
  CONTROL "Porcentaje de Detracción :",65535,"STATIC",SS_RIGHT |WS_CHILD |WS_GROUP |WS_VISIBLE ,10,295,100,8
  CONTROL "BIenes",118,"BUTTON",BS_RADIOBUTTON |BS_LEFT |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,118,250,44,10
  CONTROL "Servicios",119,"BUTTON",BS_RADIOBUTTON |BS_LEFT |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,172,250,44,10
  CONTROL "",120,"COMBOBOX",CBS_DROPDOWN |WS_CHILD |WS_VSCROLL |WS_TABSTOP |WS_VISIBLE ,118,265,273,89
  CONTROL "Edit15",121,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,118,280,65,12
  CONTROL "Edit15",122,"EDIT",ES_RIGHT |WS_CHILD |WS_BORDER |WS_TABSTOP |WS_VISIBLE ,118,295,65,12
  CONTROL "&Aceptar",200,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,103,330,79,17
  CONTROL "&Cancelar",201,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,238,330,79,17
  CONTROL "",202,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,190,75,22,14
  CONTROL "",203,"BUTTON",BS_PUSHBUTTON |BS_VCENTER |BS_CENTER |WS_CHILD |WS_TABSTOP |WS_VISIBLE ,381,110,22,14
END
Results:
With Manifest:
Image

Without Manifest:
Image

1) We request you to please check this program separately with this rc file and let us know if you experience any problem. Please copy these files to your fwh2409\samples folder and build the exe using either buildh.bat or buildx.bat.

2) Please share with your program using this rc file.

Thanks. Awaiting your feedback.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: problemas con CHECKBOX en FWH 2409 :: Reply by karinha]]> 2025-02-03T05:00:56-07:00 2025-02-03T05:00:56-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45368&p=277382#p277382
Maestro Nages, incluya: SkinButtons() y pruebe.

Gracias, tks.

Regards, saludos.]]>

Maestro Nages, incluya: SkinButtons() y pruebe.

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: problemas con CHECKBOX en FWH 2409 :: Reply by CARLOS ATUNCAR]]> 2025-02-03T06:57:25-07:00 2025-02-03T06:57:25-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45368&p=277385#p277385

Code: Select all | Expand

 DEFINE DIALOG oDlg RESOURCE "mercaderia" TRANSPARENT ICON oIco
al parecer la transparencia es el problema]]>

Code: Select all | Expand

 DEFINE DIALOG oDlg RESOURCE "mercaderia" TRANSPARENT ICON oIco
al parecer la transparencia es el problema]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: problemas con CHECKBOX en FWH 2409 :: Reply by CARLOS ATUNCAR]]> 2025-02-03T07:37:39-07:00 2025-02-03T07:37:39-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45368&p=277386#p277386 <![CDATA[FiveWin para Harbour/xHarbour :: Re: problemas con CHECKBOX en FWH 2409 :: Reply by CARLOS ATUNCAR]]> 2025-02-03T07:57:11-07:00 2025-02-03T07:57:11-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45368&p=277388#p277388 <![CDATA[FiveWin para Harbour/xHarbour :: Re: problemas con CHECKBOX en FWH 2409 :: Reply by CARLOS ATUNCAR]]> 2025-02-03T09:57:20-07:00 2025-02-03T09:57:20-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45368&p=277395#p277395 <![CDATA[FiveWin para Harbour/xHarbour :: Re: problemas con CHECKBOX en FWH 2409 :: Reply by nageswaragunupudi]]> 2025-02-04T13:48:18-07:00 2025-02-04T13:48:18-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45368&p=277426#p277426
CARLOS ATUNCAR wrote: Mon Feb 03, 2025 4:57 pm Tengo otro dialogo mas pequeño que incluye in checkbox que tiene el mismo comportamiento en el cual uso la clausula TRANSPARENT en el dialogo y al quitarlo se soluciona esto esta pasando en mi caso
Understand. The problem is with TRANSPARENT and Themed dialogs (using Manifest).

Please apply this fix to \fwh\source\classes\dialog.prg:

Please locate this line of code in the METHOD Initialize(..) of Dialog.prg

Code: Select all | Expand

"TBAR;TGET;TMULTIGET;TBTNBMP;TCOMBOBOX;TWBROWSE;TCBROWSE;TXBROWSE;TLISTBOX;TDBCOMBO;TDATEPICK;TTIMEPICK" .and. ;
Add TCHECKBOX also to this list, like this

Code: Select all | Expand

"TBAR;TGET;TMULTIGET;TBTNBMP;TCOMBOBOX;TWBROWSE;TCBROWSE;TXBROWSE;TLISTBOX;TDBCOMBO;TDATEPICK;TTIMEPICK;TCHECKBOX" .and. ;
This correction fixes the problem.

Please test and confirm.]]>
CARLOS ATUNCAR wrote: Mon Feb 03, 2025 4:57 pm Tengo otro dialogo mas pequeño que incluye in checkbox que tiene el mismo comportamiento en el cual uso la clausula TRANSPARENT en el dialogo y al quitarlo se soluciona esto esta pasando en mi caso
Understand. The problem is with TRANSPARENT and Themed dialogs (using Manifest).

Please apply this fix to \fwh\source\classes\dialog.prg:

Please locate this line of code in the METHOD Initialize(..) of Dialog.prg

Code: Select all | Expand

"TBAR;TGET;TMULTIGET;TBTNBMP;TCOMBOBOX;TWBROWSE;TCBROWSE;TXBROWSE;TLISTBOX;TDBCOMBO;TDATEPICK;TTIMEPICK" .and. ;
Add TCHECKBOX also to this list, like this

Code: Select all | Expand

"TBAR;TGET;TMULTIGET;TBTNBMP;TCOMBOBOX;TWBROWSE;TCBROWSE;TXBROWSE;TLISTBOX;TDBCOMBO;TDATEPICK;TTIMEPICK;TCHECKBOX" .and. ;
This correction fixes the problem.

Please test and confirm.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Imagen en ToolTip :: Author Willi Quintana]]> 2025-02-04T07:26:20-07:00 2025-02-04T07:26:20-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45379&p=277415#p277415 NO puedo hacer que una imagen aparezca en el ToolTip, uso esa sintaxis_ al parecer no puede leer la imagen, en algunos ejemplo vi que en ves del nombre de la imagen usan un numero,,, agradezco vuestra ayuda...
Willi

ctexto := "Muestra Imagen en el ToolTip"
ctitulo := "Imagen"
cimagen := "QR_ICO" // en recursos (RC), hay un icono con el nombre "QR_ICO"

oCodQR:cToolTip := { ctexto, ctitulo, cimagen, , , , ,}

Parametros:

<ctexto> // texto o mensaje principal
<ctitulo> // titulo
<cImagen> // imagen
<nClrFore>
<nClrBack>
<nWidth>
<nDelayTime>
<nDelayType>]]>
NO puedo hacer que una imagen aparezca en el ToolTip, uso esa sintaxis_ al parecer no puede leer la imagen, en algunos ejemplo vi que en ves del nombre de la imagen usan un numero,,, agradezco vuestra ayuda...
Willi

ctexto := "Muestra Imagen en el ToolTip"
ctitulo := "Imagen"
cimagen := "QR_ICO" // en recursos (RC), hay un icono con el nombre "QR_ICO"

oCodQR:cToolTip := { ctexto, ctitulo, cimagen, , , , ,}

Parametros:

<ctexto> // texto o mensaje principal
<ctitulo> // titulo
<cImagen> // imagen
<nClrFore>
<nClrBack>
<nWidth>
<nDelayTime>
<nDelayType>]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Imagen en ToolTip :: Reply by karinha]]> 2025-02-04T08:15:14-07:00 2025-02-04T08:15:14-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45379&p=277416#p277416

Code: Select all | Expand

   aGet[ 1 ]:cTooltip :={ "Nota Fiscal Inicial Para Enviar o(s) Email(s).",  ; // 1,2,3
                          "Nota Fiscal Inicial Para Enviar o(s) Email(s)..", 1, CLR_WHITE, CLR_HBLUE }
Regards, saludos.]]>

Code: Select all | Expand

   aGet[ 1 ]:cTooltip :={ "Nota Fiscal Inicial Para Enviar o(s) Email(s).",  ; // 1,2,3
                          "Nota Fiscal Inicial Para Enviar o(s) Email(s)..", 1, CLR_WHITE, CLR_HBLUE }
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Imagen en ToolTip :: Reply by Willi Quintana]]> 2025-02-04T08:47:53-07:00 2025-02-04T08:47:53-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45379&p=277418#p277418

Code: Select all | Expand

...
      if ValType( cToolTip ) == 'A'
         ASize( cToolTip, 8 ) //5 )
         cText    = cValToChar( cToolTip[ 1 ] )
         cTitle   = cToolTip[ 2 ]
         hIcon    = nil
         if ! Empty( cTitle )
            cIcon = cToolTip[ 3 ]
            if ValType( cIcon ) == 'C'
               if Empty( cFileExt( cIcon ) )
                  hIcon    := LoadIcon( GetResources(), cIcon )                        // <--------- aqui debe cargar una imagen desde recursos
               elseif Upper( cFileExt( cIcon ) ) == "ICO" .and. File( cIcon )
                  hIcon    := ExtractIcon( cIcon )
               endif
            elseif ValType( cIcon ) == 'N'
               hIcon    := cIcon
               cIcon    := nil
            else
               cIcon    := nil
            endif
            if Empty( hIcon )
               hIcon    := TTI_INFO
               cIcon    := nil
            endif
         endif

         nClrFore = cToolTip[ 4 ]
         nClrBack = cToolTip[ 5 ]
         nWidth   = cToolTip[ 6 ]
         nDelayTime = cToolTip [ 7 ]
         nDelayType = cToolTip [ 8 ]
      else
         cText    = cValToChar( cToolTip )
      endif
...
]]>

Code: Select all | Expand

...
      if ValType( cToolTip ) == 'A'
         ASize( cToolTip, 8 ) //5 )
         cText    = cValToChar( cToolTip[ 1 ] )
         cTitle   = cToolTip[ 2 ]
         hIcon    = nil
         if ! Empty( cTitle )
            cIcon = cToolTip[ 3 ]
            if ValType( cIcon ) == 'C'
               if Empty( cFileExt( cIcon ) )
                  hIcon    := LoadIcon( GetResources(), cIcon )                        // <--------- aqui debe cargar una imagen desde recursos
               elseif Upper( cFileExt( cIcon ) ) == "ICO" .and. File( cIcon )
                  hIcon    := ExtractIcon( cIcon )
               endif
            elseif ValType( cIcon ) == 'N'
               hIcon    := cIcon
               cIcon    := nil
            else
               cIcon    := nil
            endif
            if Empty( hIcon )
               hIcon    := TTI_INFO
               cIcon    := nil
            endif
         endif

         nClrFore = cToolTip[ 4 ]
         nClrBack = cToolTip[ 5 ]
         nWidth   = cToolTip[ 6 ]
         nDelayTime = cToolTip [ 7 ]
         nDelayType = cToolTip [ 8 ]
      else
         cText    = cValToChar( cToolTip )
      endif
...
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Imagen en ToolTip :: Reply by nageswaragunupudi]]> 2025-02-04T16:21:46-07:00 2025-02-04T16:21:46-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45379&p=277431#p277431 Working for me here
This is my sample.

Code: Select all | Expand

function ToolTipIcon()

   local oDlg, oBtn

   SetBalloon( .t. )

   DEFINE DIALOG oDlg SIZE 300,100 PIXEL TRUEPIXEL ;
      TITLE "TOOLTIP ICON"

   @ 20,50 BTNBMP oBtn PROMPT "TEST" SIZE 100,60 PIXEL OF oDlg ;
      2007 CENTER ;
      TOOLTIP { "This is the text", "TOOLTIP", "FACE" }

   ACTIVATE DIALOG oDlg CENTERED

return nil
RC file:

Code: Select all | Expand

FACE ICON "..\icons\face.ico"
Image

Please check if everything is ok with your rc file and and icon file.]]>
Working for me here
This is my sample.

Code: Select all | Expand

function ToolTipIcon()

   local oDlg, oBtn

   SetBalloon( .t. )

   DEFINE DIALOG oDlg SIZE 300,100 PIXEL TRUEPIXEL ;
      TITLE "TOOLTIP ICON"

   @ 20,50 BTNBMP oBtn PROMPT "TEST" SIZE 100,60 PIXEL OF oDlg ;
      2007 CENTER ;
      TOOLTIP { "This is the text", "TOOLTIP", "FACE" }

   ACTIVATE DIALOG oDlg CENTERED

return nil
RC file:

Code: Select all | Expand

FACE ICON "..\icons\face.ico"
Image

Please check if everything is ok with your rc file and and icon file.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Imagen en ToolTip :: Reply by karinha]]> 2025-02-05T04:46:10-07:00 2025-02-05T04:46:10-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45379&p=277442#p277442
Gracias, tks.

Regards, saludos.]]>

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Cambiar el Titulo :: Author VitalJavier]]> 2025-02-04T12:56:47-07:00 2025-02-04T12:56:47-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45382&p=277423#p277423 Estoy buscando como cambiar el Titulo de una Columna de un Reporte
Tengo esto:

Code: Select all | Expand

Column oCol[02] Title "     Q. 1a","Fecha"   Data COLECTAR->FEC1 	SIZE 7 SHADOW
Pero en un momento dado quiero cambiar el titulo:

Ya lo busque, pero no encuentro.
alguien ya lo tiene, Gracias.]]>
Estoy buscando como cambiar el Titulo de una Columna de un Reporte
Tengo esto:

Code: Select all | Expand

Column oCol[02] Title "     Q. 1a","Fecha"   Data COLECTAR->FEC1 	SIZE 7 SHADOW
Pero en un momento dado quiero cambiar el titulo:

Ya lo busque, pero no encuentro.
alguien ya lo tiene, Gracias.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Cambiar el Titulo :: Reply by Marcelo Via Giglio]]> 2025-02-06T05:04:38-07:00 2025-02-06T05:04:38-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45382&p=277467#p277467
no estoy seguro pero debes buscar en oRepor:aColumns[nCol]:aTitle[n] es un arreglo por si el titulo tiene varias lineas nCol : la columna y n : la linea del titulo

saludos

Marcelo]]>

no estoy seguro pero debes buscar en oRepor:aColumns[nCol]:aTitle[n] es un arreglo por si el titulo tiene varias lineas nCol : la columna y n : la linea del titulo

saludos

Marcelo]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Cambiar el Titulo :: Reply by VitalJavier]]> 2025-02-06T08:53:27-07:00 2025-02-06T08:53:27-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45382&p=277469#p277469 Funciono Asi:

Code: Select all | Expand

oReporte:aColumns[02]:aTitle[1] := {|| oReporte:Say(02,"         Q. 1a") }
Asi el encabezado del Primer Renglon en la 2da Columna quedo centrado.

Saludos.]]>
Funciono Asi:

Code: Select all | Expand

oReporte:aColumns[02]:aTitle[1] := {|| oReporte:Say(02,"         Q. 1a") }
Asi el encabezado del Primer Renglon en la 2da Columna quedo centrado.

Saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: WEBVIEW2 una observación :: Reply by ralph]]> 2025-02-06T09:41:25-07:00 2025-02-06T09:41:25-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45343&p=277470#p277470 Le quité la clausula ON RESIZE y ya no se sale del sistema.

Code: Select all | Expand

ACTIVATE WINDOW oWnd CENTER 

oWebView:End()
]]>
Le quité la clausula ON RESIZE y ya no se sale del sistema.

Code: Select all | Expand

ACTIVATE WINDOW oWnd CENTER 

oWebView:End()
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: XBrowse sin el foco, color? :: Author FiveWiDi]]> 2025-02-06T23:38:44-07:00 2025-02-06T23:38:44-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45385&p=277477#p277477
¿Cómo se puede cambiar el color del/de los registro/s seleccionado/s de un XBrowse cuando no tiene el foco?

Es decir, cuando tiene el foco se distinguen perfectamente, pero cuando pierde el foco no destaca lo suficiente.

Muchas gracias,]]>

¿Cómo se puede cambiar el color del/de los registro/s seleccionado/s de un XBrowse cuando no tiene el foco?

Es decir, cuando tiene el foco se distinguen perfectamente, pero cuando pierde el foco no destaca lo suficiente.

Muchas gracias,]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: XBrowse sin el foco, color? :: Reply by cmsoft]]> 2025-02-07T02:51:43-07:00 2025-02-07T02:51:43-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45385&p=277483#p277483 Para el color de las rows seleccionadas cuando tiene el foco usa bClrSelFocus
Ejemplo muy burdo para mostrar los diferentes colores:

Code: Select all | Expand

oBrw:bClrStd := {|| { CLR_BLACK, CLR_GREEN} } // Color Standar
oBrw:bClrSel := {|| { CLR_WHITE, CLR_RED} } // Color de las rows seleccionadas cuando Xbrowse no tiene el foco
oBrw:bClrSelFocus := {|| { CLR_WHITE, CLR_YELLOW} } // Color de las rows seleccionadas cuando Xbrowse tiene el Foco
]]>
Para el color de las rows seleccionadas cuando tiene el foco usa bClrSelFocus
Ejemplo muy burdo para mostrar los diferentes colores:

Code: Select all | Expand

oBrw:bClrStd := {|| { CLR_BLACK, CLR_GREEN} } // Color Standar
oBrw:bClrSel := {|| { CLR_WHITE, CLR_RED} } // Color de las rows seleccionadas cuando Xbrowse no tiene el foco
oBrw:bClrSelFocus := {|| { CLR_WHITE, CLR_YELLOW} } // Color de las rows seleccionadas cuando Xbrowse tiene el Foco
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fuentes Factura electrónica Argentina :: Reply by devwin2010]]> 2025-02-07T10:24:23-07:00 2025-02-07T10:24:23-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=30989&p=277487#p277487
Podrias volver a compartilo , no se ve en su totalidad muchisimas gracias Fabian]]>

Podrias volver a compartilo , no se ve en su totalidad muchisimas gracias Fabian]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Veri*Factu :: Reply by VictorCasajuana]]> 2025-01-29T00:26:25-07:00 2025-01-29T00:26:25-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45247&p=277264#p277264
Nuevas publicaciones de la AEAT al respecto de Verifactu:

https://www.agenciatributaria.es/AEAT.d ... dores.html]]>

Nuevas publicaciones de la AEAT al respecto de Verifactu:

https://www.agenciatributaria.es/AEAT.d ... dores.html]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Veri*Factu :: Reply by Julio Cepeda]]> 2025-02-07T10:34:32-07:00 2025-02-07T10:34:32-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45247&p=277488#p277488 ***********************************************
Lines 6139, Functions/Procedures 4
Generating C source output to 'MainYFun.c'... Done.
Embarcadero C++ 7.00 for Win32 Copyright (c) 1993-2015 Embarcadero Technologies, Inc.
MainYFun.c:
Turbo Incremental Link 6.70 Copyright (c) 1997-2014 Embarcadero Technologies, Inc.
Error: Unresolved external '_HB_FUN_HB_XMLDOCUMENT' referenced from C:\HARBPROG\__NUEVA_VERIFACT\CODIGO\A_LINARES\ULTIMO\MAINYFUN.OBJ
Error: Unresolved external '_HB_FUN_HB_XMLNODE' referenced from C:\HARBPROG\__NUEVA_VERIFACT\CODIGO\A_LINARES\ULTIMO\MAINYFUN.OBJ
Error: Unresolved external '_HB_FUN_HB_CURLEASYINIT' referenced from C:\HARBPROG\__NUEVA_VERIFACT\CODIGO\A_LINARES\ULTIMO\MAINYFUN.OBJ
Error: Unresolved external '_HB_FUN_HB_CURLEASYSETOPT' referenced from C:\HARBPROG\__NUEVA_VERIFACT\CODIGO\A_LINARES\ULTIMO\MAINYFUN.OBJ
Error: Unresolved external '_HB_FUN_HB_CURLEASYPERFORM' referenced from C:\HARBPROG\__NUEVA_VERIFACT\CODIGO\A_LINARES\ULTIMO\MAINYFUN.OBJ
Error: Unresolved external '_HB_FUN_HB_CURLEASYCLEANUP' referenced from C:\HARBPROG\__NUEVA_VERIFACT\CODIGO\A_LINARES\ULTIMO\MAINYFUN.OBJ
Error: Unable to perform link
* Linking errors *
*************************************************
Si alguno puede ver qué me falta y me lo dice se lo agradeceré. Un saludo y muchas gracias por enseñar al que no sabe.]]>
***********************************************
Lines 6139, Functions/Procedures 4
Generating C source output to 'MainYFun.c'... Done.
Embarcadero C++ 7.00 for Win32 Copyright (c) 1993-2015 Embarcadero Technologies, Inc.
MainYFun.c:
Turbo Incremental Link 6.70 Copyright (c) 1997-2014 Embarcadero Technologies, Inc.
Error: Unresolved external '_HB_FUN_HB_XMLDOCUMENT' referenced from C:\HARBPROG\__NUEVA_VERIFACT\CODIGO\A_LINARES\ULTIMO\MAINYFUN.OBJ
Error: Unresolved external '_HB_FUN_HB_XMLNODE' referenced from C:\HARBPROG\__NUEVA_VERIFACT\CODIGO\A_LINARES\ULTIMO\MAINYFUN.OBJ
Error: Unresolved external '_HB_FUN_HB_CURLEASYINIT' referenced from C:\HARBPROG\__NUEVA_VERIFACT\CODIGO\A_LINARES\ULTIMO\MAINYFUN.OBJ
Error: Unresolved external '_HB_FUN_HB_CURLEASYSETOPT' referenced from C:\HARBPROG\__NUEVA_VERIFACT\CODIGO\A_LINARES\ULTIMO\MAINYFUN.OBJ
Error: Unresolved external '_HB_FUN_HB_CURLEASYPERFORM' referenced from C:\HARBPROG\__NUEVA_VERIFACT\CODIGO\A_LINARES\ULTIMO\MAINYFUN.OBJ
Error: Unresolved external '_HB_FUN_HB_CURLEASYCLEANUP' referenced from C:\HARBPROG\__NUEVA_VERIFACT\CODIGO\A_LINARES\ULTIMO\MAINYFUN.OBJ
Error: Unable to perform link
* Linking errors *
*************************************************
Si alguno puede ver qué me falta y me lo dice se lo agradeceré. Un saludo y muchas gracias por enseñar al que no sabe.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: substr() SOLUCIONADO :: Author D.Fernandez]]> 2025-02-07T15:54:04-07:00 2025-02-08T13:56:01-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45390&p=277494#p277494
Tengo una cadena de 200 caracteres. cStrings
Con n1:= HB_AT(" ",cstrings , 65, 75 ) busco donde hay un espacio entre 65 y 75 y lo muestra n1 (73)
? deta[1]:= substr(cstring , 1, n1) Aqui extraigo la cadena desde el 1 (primer caracter hasta n1 que es 73
Esto lo hace bien.

Pero si hago para probar
deta[2]:= substr(cstrings , 74, 160) Muestra el strings desde el 74 hasta el 200.

No muestra desde el 74 al 160

Cuando hago un MsgInfo(cStrings), lo hace a la perfección.

Gracias por cualquier sugerencia

Saludos
Ruben Fernandez

(No encuentro en el foro nada porque todavía no está actualizado totalmente)]]>

Tengo una cadena de 200 caracteres. cStrings
Con n1:= HB_AT(" ",cstrings , 65, 75 ) busco donde hay un espacio entre 65 y 75 y lo muestra n1 (73)
? deta[1]:= substr(cstring , 1, n1) Aqui extraigo la cadena desde el 1 (primer caracter hasta n1 que es 73
Esto lo hace bien.

Pero si hago para probar
deta[2]:= substr(cstrings , 74, 160) Muestra el strings desde el 74 hasta el 200.

No muestra desde el 74 al 160

Cuando hago un MsgInfo(cStrings), lo hace a la perfección.

Gracias por cualquier sugerencia

Saludos
Ruben Fernandez

(No encuentro en el foro nada porque todavía no está actualizado totalmente)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: substr() :: Reply by leandro]]> 2025-02-07T16:18:19-07:00 2025-02-07T16:18:19-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45390&p=277497#p277497

Code: Select all | Expand

cValida := cstrings 
deta[2]:= substr(cValida, 74, 160)
msginfo(deta[2])
]]>

Code: Select all | Expand

cValida := cstrings 
deta[2]:= substr(cValida, 74, 160)
msginfo(deta[2])
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: substr() :: Reply by D.Fernandez]]> 2025-02-07T17:40:02-07:00 2025-02-07T17:40:02-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45390&p=277498#p277498
El inconveniente que tengo es que siempre los valores cambian, por eso no puedo hacerlo así.

Seguimos viendo.

Gracias y saludos

Ruben Dario Fernandez]]>

El inconveniente que tengo es que siempre los valores cambian, por eso no puedo hacerlo así.

Seguimos viendo.

Gracias y saludos

Ruben Dario Fernandez]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: substr() :: Reply by lubin]]> 2025-02-07T20:21:11-07:00 2025-02-07T20:21:11-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45390&p=277499#p277499
Quizas, asi?


n1:= HB_AT(" ",cstrings , 65, 75 )

deta[2]:= substr(cstrings , n1+1, 200-n1)

saludos]]>

Quizas, asi?


n1:= HB_AT(" ",cstrings , 65, 75 )

deta[2]:= substr(cstrings , n1+1, 200-n1)

saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: substr() :: Reply by alerchster]]> 2025-02-07T22:49:02-07:00 2025-02-07T22:49:02-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45390&p=277501#p277501
Quizas, asi?


n1:= HB_AT(" ",cstrings , 65, 75 )

deta[2]:= substr(cstrings , n1+1, 160-n1)

saludos]]>

Quizas, asi?


n1:= HB_AT(" ",cstrings , 65, 75 )

deta[2]:= substr(cstrings , n1+1, 160-n1)

saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: substr() :: Reply by FiveWiDi]]> 2025-02-08T01:48:19-07:00 2025-02-08T01:48:19-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45390&p=277502#p277502
D.Fernandez wrote: Fri Feb 07, 2025 10:54 pm Hola amigos:

Tengo una cadena de 200 caracteres. cStrings
Con n1:= HB_AT(" ",cstrings , 65, 75 ) busco donde hay un espacio entre 65 y 75 y lo muestra n1 (73)
? deta[1]:= substr(cstring , 1, n1) Aqui extraigo la cadena desde el 1 (primer caracter hasta n1 que es 73
Esto lo hace bien.

Pero si hago para probar
deta[2]:= substr(cstrings , 74, 160) Muestra el strings desde el 74 hasta el 200.

No muestra desde el 74 al 160

Cuando hago un MsgInfo(cStrings), lo hace a la perfección.

Gracias por cualquier sugerencia

Saludos
Ruben Fernandez

(No encuentro en el foro nada porque todavía no está actualizado totalmente)
Hola Ruben,

Sintaxis

SUBSTR(<cCadena>, <nInicio>, [<nCaracteres>]) --> cSubcadena

Argumentos

<cCadena> es la cadena de caracteres de la que va a extraerse una
subcadena. Puede tener hasta 65.535 (64K) bytes, el tama¤o m ximo de
cadena en CA-Clipper.

<nInicio> es la posici¢n inicial en <cCadena>. Si <nInicio> es
positivo, es relativo al car cter situado en el extremo izquierdo de
<cCadena>. Si es negativo, es relativo al car cter situado en el
extremo derecho de <cCadena>.

<nCaracteres> es el n£mero de caracteres que hay que extraer. Si se
omite, la subcadena empieza en <nInicio> y contin£a hasta el final de
la cadena. Si <nCaracteres> es mayor que el n£mero de caracteres desde
<nInicio> hasta el final de <cCadena>, los caracteres adicionales se
ignoran.

>><nCaracteres> es el n£mero de caracteres que hay que EXTRAER.
No C_U_A_N_T_O_S caracteres.
(He escrito con guiones por que si no los pongo no muestra la palabra, ¿Será una palabra malsonante en algún idioma?]]>
D.Fernandez wrote: Fri Feb 07, 2025 10:54 pm Hola amigos:

Tengo una cadena de 200 caracteres. cStrings
Con n1:= HB_AT(" ",cstrings , 65, 75 ) busco donde hay un espacio entre 65 y 75 y lo muestra n1 (73)
? deta[1]:= substr(cstring , 1, n1) Aqui extraigo la cadena desde el 1 (primer caracter hasta n1 que es 73
Esto lo hace bien.

Pero si hago para probar
deta[2]:= substr(cstrings , 74, 160) Muestra el strings desde el 74 hasta el 200.

No muestra desde el 74 al 160

Cuando hago un MsgInfo(cStrings), lo hace a la perfección.

Gracias por cualquier sugerencia

Saludos
Ruben Fernandez

(No encuentro en el foro nada porque todavía no está actualizado totalmente)
Hola Ruben,

Sintaxis

SUBSTR(<cCadena>, <nInicio>, [<nCaracteres>]) --> cSubcadena

Argumentos

<cCadena> es la cadena de caracteres de la que va a extraerse una
subcadena. Puede tener hasta 65.535 (64K) bytes, el tama¤o m ximo de
cadena en CA-Clipper.

<nInicio> es la posici¢n inicial en <cCadena>. Si <nInicio> es
positivo, es relativo al car cter situado en el extremo izquierdo de
<cCadena>. Si es negativo, es relativo al car cter situado en el
extremo derecho de <cCadena>.

<nCaracteres> es el n£mero de caracteres que hay que extraer. Si se
omite, la subcadena empieza en <nInicio> y contin£a hasta el final de
la cadena. Si <nCaracteres> es mayor que el n£mero de caracteres desde
<nInicio> hasta el final de <cCadena>, los caracteres adicionales se
ignoran.

>><nCaracteres> es el n£mero de caracteres que hay que EXTRAER.
No C_U_A_N_T_O_S caracteres.
(He escrito con guiones por que si no los pongo no muestra la palabra, ¿Será una palabra malsonante en algún idioma?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: substr() :: Reply by Antonio Linares]]> 2025-02-08T02:28:39-07:00 2025-02-08T02:28:39-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45390&p=277503#p277503
No CUANTOS caracteres

debería mostrarlo...]]>

No CUANTOS caracteres

debería mostrarlo...]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: substr() :: Reply by FiveWiDi]]> 2025-02-08T03:49:42-07:00 2025-02-08T03:49:42-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45390&p=277507#p277507
Antonio Linares wrote: Sat Feb 08, 2025 9:28 am cuantos

debería mostrarlo...
En la siguiente línea debería aparecer "No C_U_A_N_T_O_S caracteres" (sin los guiones).
No CUANTOS caracteres

En la siguiente línea sí que lo escribe bien.
No CUANTOS loquesea]]>
Antonio Linares wrote: Sat Feb 08, 2025 9:28 am cuantos

debería mostrarlo...
En la siguiente línea debería aparecer "No C_U_A_N_T_O_S caracteres" (sin los guiones).
No CUANTOS caracteres

En la siguiente línea sí que lo escribe bien.
No CUANTOS loquesea]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: substr() :: Reply by Antonio Linares]]> 2025-02-08T04:40:36-07:00 2025-02-08T04:40:36-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45390&p=277508#p277508
Tienes toda la razón :)

Ni idea de por qué hace eso. He revisado la lista de palabras con censura y no aparece...

Gracias!]]>

Tienes toda la razón :)

Ni idea de por qué hace eso. He revisado la lista de palabras con censura y no aparece...

Gracias!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: substr() SOLUCIONADO :: Reply by D.Fernandez]]> 2025-02-08T13:58:23-07:00 2025-02-08T13:58:23-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45390&p=277530#p277530
Muchas gracias alerchster lo use así como dices.

Muy amables todos y muchas gracias.

Saludos

Ruben Dario Fernandez]]>

Muchas gracias alerchster lo use así como dices.

Muy amables todos y muchas gracias.

Saludos

Ruben Dario Fernandez]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Ayuda Firmar un archivo xml harbour o xharbour Argentina :: Author devwin2010]]> 2025-02-08T21:16:40-07:00 2025-02-08T21:16:40-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45396&p=277542#p277542
Alguien tendria un ejemplo como firmar un archivo xml con harbour sin tener que utilizar openssl en modo comando
desde ya muchas gracias Fabian]]>

Alguien tendria un ejemplo como firmar un archivo xml con harbour sin tener que utilizar openssl en modo comando
desde ya muchas gracias Fabian]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Ayuda Factura electronica Argentina :: Author devwin2010]]> 2025-02-08T21:19:13-07:00 2025-02-08T21:19:13-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45397&p=277543#p277543
Alguien tendria un ejemplo como hacer factura electronica Argentina utilizando codigo nativo, si librerias de terceros
desde ya muchas gracias Fabian]]>

Alguien tendria un ejemplo como hacer factura electronica Argentina utilizando codigo nativo, si librerias de terceros
desde ya muchas gracias Fabian]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Firmar fichero con certificado :: Reply by devwin2010]]> 2025-02-08T21:46:53-07:00 2025-02-08T21:46:53-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=39508&p=277544#p277544 windev2@yahoo.com.ar desde ya muchisimas gracias Fabian]]> windev2@yahoo.com.ar desde ya muchisimas gracias Fabian]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Firmar fichero con certificado :: Reply by Enrico Maria Giordano]]> 2025-02-09T00:57:46-07:00 2025-02-09T00:57:46-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=39508&p=277545#p277545 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Firmar fichero con certificado :: Reply by devwin2010]]> 2025-02-11T13:30:40-07:00 2025-02-11T13:30:40-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=39508&p=277595#p277595
Estoy tratando de fimar un archivo xml con harbour_win32_bcc_2020_10_19 incluyo librerias hbssl y libeay32 , y me faltan las siguientes funciones unresolved external

CMS_CREATE
CMS_CERTFILE
CMS_SETKEYFILE
CMS_SIGN
CMS_GETSIGNEDCMS
CMS_REALEASE

alguien tiene la libreria armada o como hacerlo si que arroje estos errores desde ya muchas gracias
Fabian]]>

Estoy tratando de fimar un archivo xml con harbour_win32_bcc_2020_10_19 incluyo librerias hbssl y libeay32 , y me faltan las siguientes funciones unresolved external

CMS_CREATE
CMS_CERTFILE
CMS_SETKEYFILE
CMS_SIGN
CMS_GETSIGNEDCMS
CMS_REALEASE

alguien tiene la libreria armada o como hacerlo si que arroje estos errores desde ya muchas gracias
Fabian]]>
<![CDATA[FiveWin para Harbour/xHarbour :: curl en harbour 64 bits ultima version :: Author wilsongamboa]]> 2025-02-11T08:30:06-07:00 2025-02-11T08:30:06-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45403&p=277587#p277587 c:\h64\bin\win\msvc64\hbmk2 -quiet -width=0 -autohbm- @hbpre -inc -hbdyn hbexpat/hbexpat.hbp @hbpost hbexpat/hbexpat.hbc
hbmk2: Meta actualizada: ..\bin\win\msvc64\hbexpat-32-x64.dll
c:\h64\bin\win\msvc64\hbmk2 -quiet -width=0 -autohbm- @hbpre -inc hbcurl/hbcurl.hbp @hbpost
hbcurl.c
core.c
hbcurl\core.c(1696): error C2664: 'CURLcode curl_easy_setopt(CURL *,CURLoption,...)': el argumento 2 no puede convertirse de 'int' a 'CURLoption'
hbcurl\core.c(1696): note: La conversión a tipo de enumeración requiere una conversión explícita (static_cast, conversión de estilo de C o conversión de estilo de función entre paréntesis)
C:\curl641\include\curl\easy.h(42): note: vea la declaración de 'curl_easy_setopt'
hbcurl\core.c(1696): note: al hacer coincidir la lista de argumentos '(CURL *, int, long)'
Generando código...
hbmk2[hbcurls]: Error: Ejecutando compilador C/C++. 2
! Finished package build...
makefile:8: recipe for target 'first' failed
win-make.exe[1]: *** [first] Error 6
config/dir.mk:71: recipe for target 'contrib' failed
win-make.exe: *** [contrib] Error 2
hay alguna guia de como hacerlo la instalacion es fresca recien bajada de github
gracias
Wilson]]>
c:\h64\bin\win\msvc64\hbmk2 -quiet -width=0 -autohbm- @hbpre -inc -hbdyn hbexpat/hbexpat.hbp @hbpost hbexpat/hbexpat.hbc
hbmk2: Meta actualizada: ..\bin\win\msvc64\hbexpat-32-x64.dll
c:\h64\bin\win\msvc64\hbmk2 -quiet -width=0 -autohbm- @hbpre -inc hbcurl/hbcurl.hbp @hbpost
hbcurl.c
core.c
hbcurl\core.c(1696): error C2664: 'CURLcode curl_easy_setopt(CURL *,CURLoption,...)': el argumento 2 no puede convertirse de 'int' a 'CURLoption'
hbcurl\core.c(1696): note: La conversión a tipo de enumeración requiere una conversión explícita (static_cast, conversión de estilo de C o conversión de estilo de función entre paréntesis)
C:\curl641\include\curl\easy.h(42): note: vea la declaración de 'curl_easy_setopt'
hbcurl\core.c(1696): note: al hacer coincidir la lista de argumentos '(CURL *, int, long)'
Generando código...
hbmk2[hbcurls]: Error: Ejecutando compilador C/C++. 2
! Finished package build...
makefile:8: recipe for target 'first' failed
win-make.exe[1]: *** [first] Error 6
config/dir.mk:71: recipe for target 'contrib' failed
win-make.exe: *** [contrib] Error 2
hay alguna guia de como hacerlo la instalacion es fresca recien bajada de github
gracias
Wilson]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: curl en harbour 64 bits ultima version :: Reply by Enrico Maria Giordano]]> 2025-02-11T08:41:02-07:00 2025-02-11T08:41:02-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45403&p=277588#p277588
https://github.com/FiveTechSoft/harbour ... our_builds]]>

https://github.com/FiveTechSoft/harbour ... our_builds]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: curl en harbour 64 bits ultima version :: Reply by wilsongamboa]]> 2025-02-11T09:06:35-07:00 2025-02-11T09:06:35-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45403&p=277589#p277589 C:\wilson\ia>hbmk2 deepseek.prg hbcurl.hbc
Harbour 3.2.0dev (r2502031126)
Copyright (c) 1999-2024, https://harbour.github.io/
Compiling 'deepseek.prg'...
Lines 1583, Functions/Procedures 11
Generating C source output to 'C:\Users\WilsonG\AppData\Local\Temp\hbmk_g1nowz.dir\deepseek.c'... Done.
deepseek.c
LINK : warning LNK4098: la biblioteca predeterminada'MSVCRT' entra en conflicto con otras bibliotecas; use la biblioteca /NODEFAULTLIB:biblioteca
LINK : warning LNK4217: "__acrt_iob_func" importa el s¡mbolo "libucrt.lib(_file.obj)" definido en "hbvm.lib(hvmall.obj)" en la funci¢n "dlmalloc_stats"
LINK : warning LNK4217: "__stdio_common_vfprintf" importa el s¡mbolo "libucrt.lib(output.obj)" definido en "hbvm.lib(hvmall.obj)" en la funci¢n "_vfprintf_l"
LINK : warning LNK4286: "__stdio_common_vfprintf" importa el s¡mbolo "libucrt.lib(output.obj)" definido en "hbrtl.lib(errintlo.obj)"
LINK : warning LNK4217: "abort" importa el s¡mbolo "libucrt.lib(abort.obj)" definido en "hbvm.lib(hvmall.obj)" en la funci¢n "add_segment"
LINK : warning LNK4217: "strncmp" importa el s¡mbolo "libucrt.lib(strncmp.obj)" definido en "hbvm.lib(hvmall.obj)" en la funci¢n "hb_macroGenPopAliasedVar"
LINK : warning LNK4286: "strncmp" importa el s¡mbolo "libucrt.lib(strncmp.obj)" definido en "hbrtl.lib(hbjson.obj)"
LINK : warning LNK4286: "strncmp" importa el s¡mbolo "libucrt.lib(strncmp.obj)" definido en "rddntx.lib(dbfntx1.obj)"
LINK : warning LNK4286: "strncmp" importa el s¡mbolo "libucrt.lib(strncmp.obj)" definido en "hbcommon.lib(funcid.obj)"
LINK : warning LNK4217: "atoi" importa el s¡mbolo "libucrt.lib(atox.obj)" definido en "hbvm.lib(cmdarg.obj)" en la funci¢n "hb_cmdargNum"
LINK : warning LNK4217: "atoi" importa el s¡mbolo "libucrt.lib(atox.obj)" definido en "hbrdd.lib(wafunc.obj)" en la funci¢n "hb_rddGetTempAlias"
LINK : warning LNK4217: "exit" importa el s¡mbolo "libucrt.lib(exit.obj)" definido en "hbrtl.lib(errint.obj)" en la funci¢n "hb_errInternal"
LINK : warning LNK4217: "fclose" importa el s¡mbolo "libucrt.lib(fclose.obj)" definido en "hbrtl.lib(errintlo.obj)" en la funci¢n "hb_errInternalRaw"
LINK : warning LNK4217: "ceil" importa el s¡mbolo "libucrt.lib(ceil.obj)" definido en "rddntx.lib(dbfntx1.obj)" en la funci¢n "hb_ntxSortNew"
hbvm.lib(hvmall.obj) : error LNK2019: s¡mbolo externo __imp__dclass sin resolver al que se hace referencia en la funci¢n hb_itemStrBuf
hbcommon.lib(hbprintf.obj) : error LNK2001: s¡mbolo externo __imp__dclass sin resolver
hbvm.lib(hvmall.obj) : error LNK2019: s¡mbolo externo __imp_modf sin resolver al que se hace referencia en la funci¢n hb_itemStrBuf
hbrtl.lib(fstemp.obj) : error LNK2001: s¡mbolo externo __imp_modf sin resolver
hbcommon.lib(hbstr.obj) : error LNK2001: s¡mbolo externo __imp_modf sin resolver
hbcommon.lib(hbprintf.obj) : error LNK2001: s¡mbolo externo __imp_modf sin resolver
hbrtl.lib(arc4.obj) : error LNK2019: s¡mbolo externo __imp_srand sin resolver al que se hace referencia en la funci¢n arc4_seed_rand
hbrtl.lib(arc4.obj) : error LNK2019: s¡mbolo externo __imp_rand sin resolver al que se hace referencia en la funci¢n arc4_seed_rand
hbcommon.lib(hbprintf.obj) : error LNK2019: s¡mbolo externo __imp__dsign sin resolver al que se hace referencia en la funci¢n hb_vsnprintf
hbcommon.lib(hbfopen.obj) : error LNK2019: s¡mbolo externo __imp__wfsopen sin resolver al que se hace referencia en la funci¢n hb_fopen
deepseek.exe : fatal error LNK1120: 6 externos sin resolver
hbmk2: Error: Running linker. 1120
link.exe @C:\Users\WilsonG\AppData\Local\Temp\jaucfi.lnk]]>
C:\wilson\ia>hbmk2 deepseek.prg hbcurl.hbc
Harbour 3.2.0dev (r2502031126)
Copyright (c) 1999-2024, https://harbour.github.io/
Compiling 'deepseek.prg'...
Lines 1583, Functions/Procedures 11
Generating C source output to 'C:\Users\WilsonG\AppData\Local\Temp\hbmk_g1nowz.dir\deepseek.c'... Done.
deepseek.c
LINK : warning LNK4098: la biblioteca predeterminada'MSVCRT' entra en conflicto con otras bibliotecas; use la biblioteca /NODEFAULTLIB:biblioteca
LINK : warning LNK4217: "__acrt_iob_func" importa el s¡mbolo "libucrt.lib(_file.obj)" definido en "hbvm.lib(hvmall.obj)" en la funci¢n "dlmalloc_stats"
LINK : warning LNK4217: "__stdio_common_vfprintf" importa el s¡mbolo "libucrt.lib(output.obj)" definido en "hbvm.lib(hvmall.obj)" en la funci¢n "_vfprintf_l"
LINK : warning LNK4286: "__stdio_common_vfprintf" importa el s¡mbolo "libucrt.lib(output.obj)" definido en "hbrtl.lib(errintlo.obj)"
LINK : warning LNK4217: "abort" importa el s¡mbolo "libucrt.lib(abort.obj)" definido en "hbvm.lib(hvmall.obj)" en la funci¢n "add_segment"
LINK : warning LNK4217: "strncmp" importa el s¡mbolo "libucrt.lib(strncmp.obj)" definido en "hbvm.lib(hvmall.obj)" en la funci¢n "hb_macroGenPopAliasedVar"
LINK : warning LNK4286: "strncmp" importa el s¡mbolo "libucrt.lib(strncmp.obj)" definido en "hbrtl.lib(hbjson.obj)"
LINK : warning LNK4286: "strncmp" importa el s¡mbolo "libucrt.lib(strncmp.obj)" definido en "rddntx.lib(dbfntx1.obj)"
LINK : warning LNK4286: "strncmp" importa el s¡mbolo "libucrt.lib(strncmp.obj)" definido en "hbcommon.lib(funcid.obj)"
LINK : warning LNK4217: "atoi" importa el s¡mbolo "libucrt.lib(atox.obj)" definido en "hbvm.lib(cmdarg.obj)" en la funci¢n "hb_cmdargNum"
LINK : warning LNK4217: "atoi" importa el s¡mbolo "libucrt.lib(atox.obj)" definido en "hbrdd.lib(wafunc.obj)" en la funci¢n "hb_rddGetTempAlias"
LINK : warning LNK4217: "exit" importa el s¡mbolo "libucrt.lib(exit.obj)" definido en "hbrtl.lib(errint.obj)" en la funci¢n "hb_errInternal"
LINK : warning LNK4217: "fclose" importa el s¡mbolo "libucrt.lib(fclose.obj)" definido en "hbrtl.lib(errintlo.obj)" en la funci¢n "hb_errInternalRaw"
LINK : warning LNK4217: "ceil" importa el s¡mbolo "libucrt.lib(ceil.obj)" definido en "rddntx.lib(dbfntx1.obj)" en la funci¢n "hb_ntxSortNew"
hbvm.lib(hvmall.obj) : error LNK2019: s¡mbolo externo __imp__dclass sin resolver al que se hace referencia en la funci¢n hb_itemStrBuf
hbcommon.lib(hbprintf.obj) : error LNK2001: s¡mbolo externo __imp__dclass sin resolver
hbvm.lib(hvmall.obj) : error LNK2019: s¡mbolo externo __imp_modf sin resolver al que se hace referencia en la funci¢n hb_itemStrBuf
hbrtl.lib(fstemp.obj) : error LNK2001: s¡mbolo externo __imp_modf sin resolver
hbcommon.lib(hbstr.obj) : error LNK2001: s¡mbolo externo __imp_modf sin resolver
hbcommon.lib(hbprintf.obj) : error LNK2001: s¡mbolo externo __imp_modf sin resolver
hbrtl.lib(arc4.obj) : error LNK2019: s¡mbolo externo __imp_srand sin resolver al que se hace referencia en la funci¢n arc4_seed_rand
hbrtl.lib(arc4.obj) : error LNK2019: s¡mbolo externo __imp_rand sin resolver al que se hace referencia en la funci¢n arc4_seed_rand
hbcommon.lib(hbprintf.obj) : error LNK2019: s¡mbolo externo __imp__dsign sin resolver al que se hace referencia en la funci¢n hb_vsnprintf
hbcommon.lib(hbfopen.obj) : error LNK2019: s¡mbolo externo __imp__wfsopen sin resolver al que se hace referencia en la funci¢n hb_fopen
deepseek.exe : fatal error LNK1120: 6 externos sin resolver
hbmk2: Error: Running linker. 1120
link.exe @C:\Users\WilsonG\AppData\Local\Temp\jaucfi.lnk]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: curl en harbour 64 bits ultima version :: Reply by alerchster]]> 2025-02-11T10:02:59-07:00 2025-02-11T10:02:59-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45403&p=277591#p277591
-n-
-ldflag=/NODEFAULTLIB:libucrt
-ldflag+=/NODEFAULTLIB:msvcrt]]>

-n-
-ldflag=/NODEFAULTLIB:libucrt
-ldflag+=/NODEFAULTLIB:msvcrt]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: curl en harbour 64 bits ultima version :: Reply by wilsongamboa]]> 2025-02-11T10:26:38-07:00 2025-02-11T10:26:38-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45403&p=277592#p277592 <![CDATA[FiveWin para Harbour/xHarbour :: Re: curl en harbour 64 bits ultima version :: Reply by wilsongamboa]]> 2025-02-11T12:49:05-07:00 2025-02-11T12:49:05-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45403&p=277594#p277594 -n-
-ldflag=/NODEFAULTLIB:libucrt
-ldflag=/NODEFAULTLIB:msvcrt
deepseek.prg
hbcurl.hbc
have many errors
C:\wilson\ia>hbmk2 deepseek
Harbour 3.2.0dev (r2502031126)
Copyright (c) 1999-2024, https://harbour.github.io/
Compiling 'deepseek.prg'...
Lines 1583, Functions/Procedures 12
Generating C source output to 'C:\Users\WilsonG\AppData\Local\Temp\hbmk_2ons6a.dir\deepseek.c'... Done.
deepseek.c
hbcommon.lib(hbgete.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbcommon.lib(funcid.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbcommon.lib(hbstr.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbcommon.lib(hbprintf.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbcommon.lib(strwild.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbcommon.lib(hbfsapi.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
rddntx.lib(dbfntx1.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbmacro.lib(macroy.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbmacro.lib(macroa.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbmacro.lib(macrob.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(hbntos.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(mlcfunc.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(file.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrdd.lib(wafunc.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(itemseri.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(fstemp.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(direct.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(hbstrfmt.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(hbgtcore.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(langapi.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(dates.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(transfrm.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(filesys.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(console.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(hbi18n1.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(cdpapi.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbcurl.lib(core.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbvm.lib(hvmall.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbvm.lib(cmdarg.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(hbjson.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbvm.lib(hvmall.obj) : error LNK2019: s¡mbolo externo __imp___acrt_iob_func sin resolver al que se hace referencia en la funci¢n dlmalloc_stats
hbvm.lib(hvmall.obj) : error LNK2019: s¡mbolo externo __imp___stdio_common_vfprintf sin resolver al que se hace referencia en la funci¢n _vfprintf_l
hbrtl.lib(errintlo.obj) : error LNK2001: s¡mbolo externo __imp___stdio_common_vfprintf sin resolver
hbvm.lib(hvmall.obj) : error LNK2019: s¡mbolo externo __imp_abort sin resolver al que se hace referencia en la funci¢n add_segment
hbmacro.lib(macrob.obj) : error LNK2001: s¡mbolo externo strcmp sin resolver
hbcommon.lib(expropt1.obj) : error LNK2001: s¡mbolo externo strcmp sin resolver
hbcommon.lib(funcid.obj) : error LNK2001: s¡mbolo externo strcmp sin resolver
hbvm.lib(hvmall.obj) : error LNK2001: s¡mbolo externo strcmp sin resolver]]>
-n-
-ldflag=/NODEFAULTLIB:libucrt
-ldflag=/NODEFAULTLIB:msvcrt
deepseek.prg
hbcurl.hbc
have many errors
C:\wilson\ia>hbmk2 deepseek
Harbour 3.2.0dev (r2502031126)
Copyright (c) 1999-2024, https://harbour.github.io/
Compiling 'deepseek.prg'...
Lines 1583, Functions/Procedures 12
Generating C source output to 'C:\Users\WilsonG\AppData\Local\Temp\hbmk_2ons6a.dir\deepseek.c'... Done.
deepseek.c
hbcommon.lib(hbgete.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbcommon.lib(funcid.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbcommon.lib(hbstr.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbcommon.lib(hbprintf.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbcommon.lib(strwild.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbcommon.lib(hbfsapi.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
rddntx.lib(dbfntx1.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbmacro.lib(macroy.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbmacro.lib(macroa.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbmacro.lib(macrob.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(hbntos.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(mlcfunc.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(file.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrdd.lib(wafunc.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(itemseri.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(fstemp.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(direct.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(hbstrfmt.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(hbgtcore.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(langapi.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(dates.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(transfrm.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(filesys.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(console.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(hbi18n1.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(cdpapi.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbcurl.lib(core.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbvm.lib(hvmall.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbvm.lib(cmdarg.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbrtl.lib(hbjson.obj) : error LNK2001: s¡mbolo externo strlen sin resolver
hbvm.lib(hvmall.obj) : error LNK2019: s¡mbolo externo __imp___acrt_iob_func sin resolver al que se hace referencia en la funci¢n dlmalloc_stats
hbvm.lib(hvmall.obj) : error LNK2019: s¡mbolo externo __imp___stdio_common_vfprintf sin resolver al que se hace referencia en la funci¢n _vfprintf_l
hbrtl.lib(errintlo.obj) : error LNK2001: s¡mbolo externo __imp___stdio_common_vfprintf sin resolver
hbvm.lib(hvmall.obj) : error LNK2019: s¡mbolo externo __imp_abort sin resolver al que se hace referencia en la funci¢n add_segment
hbmacro.lib(macrob.obj) : error LNK2001: s¡mbolo externo strcmp sin resolver
hbcommon.lib(expropt1.obj) : error LNK2001: s¡mbolo externo strcmp sin resolver
hbcommon.lib(funcid.obj) : error LNK2001: s¡mbolo externo strcmp sin resolver
hbvm.lib(hvmall.obj) : error LNK2001: s¡mbolo externo strcmp sin resolver]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: curl en harbour 64 bits ultima version :: Reply by Antonio Linares]]> 2025-02-11T15:16:46-07:00 2025-02-11T15:16:46-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45403&p=277600#p277600 <![CDATA[FiveWin para Harbour/xHarbour :: Re: curl en harbour 64 bits ultima version :: Reply by wilsongamboa]]> 2025-02-12T09:26:55-07:00 2025-02-12T09:26:55-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45403&p=277620#p277620
-ldflag=/NODEFAULTLIB:libucrt
-ldflag=/NODEFAULTLIB:msvcrt
-lucrt
deepseek.prg
hbcurl.hbc

con eso compila perfecto
ya quedo en espera del curso de IA !!]]>

-ldflag=/NODEFAULTLIB:libucrt
-ldflag=/NODEFAULTLIB:msvcrt
-lucrt
deepseek.prg
hbcurl.hbc

con eso compila perfecto
ya quedo en espera del curso de IA !!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: HBSSL CON FUNCIONES DE DIEGO FAZIO INCLUIDAS :: Reply by devwin2010]]> 2025-02-12T19:28:32-07:00 2025-02-12T19:28:32-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=40838&p=277628#p277628
Compile el archivo cms.c proporcionado , me da los siguientes errores

Embarcadero C++ 7.30 for Win32 Copyright (c) 1993-2017 Embarcadero Technologies, Inc.
cms.c:
Error E2293 C:\OpenSSL\include\openssl/cms.h 200: ) expected
Error E2293 C:\OpenSSL\include\openssl/cms.h 250: ) expected
*** 2 errors in Compile ***
Error: Fallo en la compilación.

desde ya muchas gracias Fabian]]>

Compile el archivo cms.c proporcionado , me da los siguientes errores

Embarcadero C++ 7.30 for Win32 Copyright (c) 1993-2017 Embarcadero Technologies, Inc.
cms.c:
Error E2293 C:\OpenSSL\include\openssl/cms.h 200: ) expected
Error E2293 C:\OpenSSL\include\openssl/cms.h 250: ) expected
*** 2 errors in Compile ***
Error: Fallo en la compilación.

desde ya muchas gracias Fabian]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Ayuda HBSSl Lib con cms incluida para firmar archivos xml con certificado y key :: Author devwin2010]]> 2025-02-12T22:09:26-07:00 2025-02-12T22:09:26-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45411&p=277630#p277630
He Tratado de compilar cms.c de Fazio para luego incorporarlo a hbssl.lib , me tira los siguientes erorres

Embarcadero C++ 7.30 for Win32 Copyright (c) 1993-2017 Embarcadero Technologies, Inc.
cms.c:
Error E2293 C:\OpenSSL\include\openssl/cms.h 200: ) expected
Error E2293 C:\OpenSSL\include\openssl/cms.h 250: ) expected
*** 2 errors in Compile ***
Error: Fallo en la compilación.


Desde ya muchas gracias
Fabian]]>

He Tratado de compilar cms.c de Fazio para luego incorporarlo a hbssl.lib , me tira los siguientes erorres

Embarcadero C++ 7.30 for Win32 Copyright (c) 1993-2017 Embarcadero Technologies, Inc.
cms.c:
Error E2293 C:\OpenSSL\include\openssl/cms.h 200: ) expected
Error E2293 C:\OpenSSL\include\openssl/cms.h 250: ) expected
*** 2 errors in Compile ***
Error: Fallo en la compilación.


Desde ya muchas gracias
Fabian]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ayuda HBSSl Lib con cms incluida para firmar archivos xml con certificado y key :: Reply by Antonio Linares]]> 2025-02-12T22:23:46-07:00 2025-02-12T22:23:46-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45411&p=277631#p277631
Entiendo que te refieres a este código:
https://www.forums.fivetechsupport.com/ ... 91#p235791

Aqui tienes los OBJs para enlazarlos a tu app:
https://github.com/FiveTechSoft/FWH_too ... gnfile.zip]]>

Entiendo que te refieres a este código:
https://www.forums.fivetechsupport.com/ ... 91#p235791

Aqui tienes los OBJs para enlazarlos a tu app:
https://github.com/FiveTechSoft/FWH_too ... gnfile.zip]]>
<![CDATA[FiveWin para Harbour/xHarbour :: tlayout refresh :: Author MGA]]> 2025-02-12T14:20:50-07:00 2025-02-12T14:20:50-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45409&p=277626#p277626 hLays["TITLE" ] := hLays["MAIN"]:addVLayout(38)
hLays["GET" ] := hLays["MAIN"]:addVLayout(120)
hLays["BROWSE"] := hLays["MAIN"]:addVLayout()
...

Después de crear una ventana con TLAYOUT, me gustaría tener un botón que, al hacer clic, cambie el tamaño del GET creado.

function RedimensionarGet()

hLays["GET"]:nHeight := 200
hLays["GET"]:refresh()

//aqui!!!!!
//Cómo puedo actualizar TLAYOUT para que la clase asuma el nuevo valor GET y redimensione los recursos restantes?

return]]>
hLays["TITLE" ] := hLays["MAIN"]:addVLayout(38)
hLays["GET" ] := hLays["MAIN"]:addVLayout(120)
hLays["BROWSE"] := hLays["MAIN"]:addVLayout()
...

Después de crear una ventana con TLAYOUT, me gustaría tener un botón que, al hacer clic, cambie el tamaño del GET creado.

function RedimensionarGet()

hLays["GET"]:nHeight := 200
hLays["GET"]:refresh()

//aqui!!!!!
//Cómo puedo actualizar TLAYOUT para que la clase asuma el nuevo valor GET y redimensione los recursos restantes?

return]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: tlayout refresh :: Reply by Antonio Linares]]> 2025-02-12T22:33:40-07:00 2025-02-12T22:33:40-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45409&p=277633#p277633
gracias!]]>

gracias!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Ajustar tamaño caja toast :: Author leandro]]> 2025-02-07T16:11:23-07:00 2025-02-07T16:11:23-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45391&p=277495#p277495
Image

Code: Select all | Expand

cRutaLgo := CurDrive()+":\"+CurDir()+"\loguito.bmp"
Toast( "CONFIRMACION DE PROCESO", "Documento nomina radicado correctamente DIAN","HymLyma | Digital Products ",cRutaLgo )	
De paso aprovechamos para preguntar, si se puede colocar algún botón o enlace, que ejecute una acción dentro de nuestra aplicación.]]>

Image

Code: Select all | Expand

cRutaLgo := CurDrive()+":\"+CurDir()+"\loguito.bmp"
Toast( "CONFIRMACION DE PROCESO", "Documento nomina radicado correctamente DIAN","HymLyma | Digital Products ",cRutaLgo )	
De paso aprovechamos para preguntar, si se puede colocar algún botón o enlace, que ejecute una acción dentro de nuestra aplicación.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ajustar tamaño caja toast :: Reply by Antonio Linares]]> 2025-02-08T02:41:31-07:00 2025-02-08T02:41:31-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45391&p=277504#p277504
La función Toast() usa funciones propias de WinRT basado en Windows.UI y no es nada estandard ni fácil de modificar.

Te adjunto aqui todo el código por si quieres revisarlo. He consultado con DeepSeek para ver si se puede hacer lo que quieres pero no parece dar una solución clara.

Comentarte que Cristobal implementó la Clase TToast en FWH y que usándola puedes tener mucho mas control aunque esa clase también tiene un nivel de complejidad.

winrt.prg

Code: Select all | Expand

#include "FiveWin.ch"

#define Show                       7
#define CreateToastNotification    7
#define CreateToastNotifierWithId  8
#define Item                       8
#define GetNamedItem               9
#define GetTemplateContent         9
#define add_Activated             12  
#define CreateTextNode            12
#define Get_Attributes            17
#define GetElementsByTagName      17
#define AppendChild               23

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

function WinRTString( cText )

   local pString
   
   WindowsCreateString( AnsiToWide( cText ), Len( cText ), @pString )

return pString

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

static function SetNodeText( pNodeList, nItem, cText, pXml )

   local pXmlNode, pXmlText, pXmlNodeChild
   local pString

   WinRTMethod( pNodeList, Item, nItem, @pXmlNode )
   pString = WinRTString( cText )
   WinRTMethod( pXml, CreateTextNode, pString, @pXmlText )
   WindowsDeleteString( pString )
   WinRTMethod( pXmlNode, AppendChild, pXmlText, @pXmlNodeChild )

return nil

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

static function SetImageFileName( pXml, cImageFileName ) 

   local pString := WinRTString( "image" )
   local pNodeList, pXmlNode, pAttributeMap
   local pXmlNodeAttribute, pXmlText, pXmlNodeChild

   WinRTMethod( pXml, GetElementsByTagName, pString, @pNodeList )
   WindowsDeleteString( pString )
   WinRTMethod( pNodeList, Item, 0, @pXmlNode )
   WinRTMethod( pXmlNode, Get_Attributes, @pAttributeMap )
   pString = WinRTString( "src" )
   WinRTMethod( pAttributeMap, GetNamedItem, pString, @pXmlNodeAttribute )
   WindowsDeleteString( pString )
   pString = WinRTString( cImageFileName )
   WinRTMethod( pXml, CreateTextNode, pString, @pXmlText )
   WindowsDeleteString( pString )
   WinRTMethod( pXmlNodeAttribute, AppendChild, pXmlText, @pXmlNodeChild )

return nil

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

function Toast( cFirstLine, cSecondLine, cThirdLine, cImageFileName )

   local pString, cIID, pToastFactory
   local pXml, pNodeList
   local pNotification, pNotificationFactory, pNotifier

   DEFAULT cFirstLine := "FiveWin notification",;
           cSecondLine := " ", cThirdLine := " ",;
           cImageFileName := "c:\fwh\bitmaps\pngs\fivetech.png"

   RoInitialize( 1 )

   pString = WinRTString( "Windows.UI.Notifications.ToastNotificationManager" )

   // "50AC103F-D235-4598-BBEF-98FE4D1A3AD4"
   cIID = Chr( 0x3F ) + Chr( 0x10 ) + Chr( 0xAC ) + Chr( 0x50 ) + ;
          Chr( 0x35 ) + Chr( 0xD2 ) + Chr( 0x98 ) + Chr( 0x45 ) + ;
          Chr( 0xBB ) + Chr( 0xEF ) + Chr( 0x98 ) + Chr( 0xFE ) + ;
          Chr( 0x4D ) + Chr( 0x1A ) + Chr( 0x3A ) + Chr( 0xD4 )

   RoGetActivationFactory( pString, cIID, @pToastFactory )

   WindowsDeleteString( pString );

   WinRTMethod( pToastFactory, GetTemplateContent, 3, @pXml )

   SetImageFileName( pXml, cImageFileName )
   
   pString = WinRTString( "text" )
   WinRTMethod( pXml, GetElementsByTagName, pString, @pNodeList )
   WindowsDeleteString( pString )

   SetNodeText( pNodeList, 0, cFirstLine,  pXml ) 
   SetNodeText( pNodeList, 1, cSecondLine, pXml ) 
   SetNodeText( pNodeList, 2, cThirdLine,  pXml ) 

   // 04124B20-82C6-4229-B109-FD9ED4662B53
   cIID = Chr( 0x20 ) + Chr( 0x4B ) + Chr( 0x12 ) + Chr( 0x04 ) + ;
          Chr( 0xC6 ) + Chr( 0x82 ) + Chr( 0x29 ) + Chr( 0x42 ) + ;
          Chr( 0xB1 ) + Chr( 0x09 ) + Chr( 0xFD ) + Chr( 0x9E ) + ;
          Chr( 0xD4 ) + Chr( 0x66 ) + Chr( 0x2B ) + Chr( 0x53 )

   pString = WinRTString( "Windows.UI.Notifications.ToastNotification" )
   RoGetActivationFactory( pString, cIID, @pNotificationFactory )
   WindowsDeleteString( pString )

   WinRTMethod( pNotificationFactory, CreateToastNotification, pXML, @pNotification )

   pString = WinRTString( " " )
   WinRTMethod( pToastFactory, CreateToastNotifierWithId, pString, @pNotifier )
   WindowsDeleteString( pString )

   // pEventHandler = WinRTEventHandler()
   // WinRTMethod( pNotification, add_Activated, pEventHandler, nEventToken )
   // MsgInfo( WinRTEventToken() )
   // WinRTMethod( pNotification, add_Activated + 1, pEventHandler, nEventToken )
   // MsgInfo( WinRTEventToken() )
   // WinRTMethod( pNotification, add_Activated + 2, pEventHandler, nEventToken )
   // MsgInfo( WinRTEventToken() )

   WinRTMethod( pNotifier, Show, pNotification )

   RoUninitialize()

return nil

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

DLL FUNCTION RoInitialize( nType AS LONG ) AS LONG PASCAL LIB "combase.dll"

DLL FUNCTION RoUninitialize() AS VOID PASCAL LIB "combase.dll"

DLL FUNCTION WindowsCreateString( cWideText AS LPSTR, nLength AS LONG, @pString AS PTR ) ;
   AS LONG PASCAL LIB "combase.dll"
   
DLL FUNCTION WindowsDeleteString( pString AS PTR ) AS LONG PASCAL LIB "combase.dll"

DLL FUNCTION RoGetActivationFactory( pString AS PTR, REFIID AS LPSTR, @pFactory AS PTR ) ;
   AS LONG PASCAL LIB "combase.dll"

DLL FUNCTION WindowsGetStringRawBuffer( pString AS PTR, @nLenght AS LONG ) ;
   AS LONG PASCAL LIB "combase.dll"
]]>

La función Toast() usa funciones propias de WinRT basado en Windows.UI y no es nada estandard ni fácil de modificar.

Te adjunto aqui todo el código por si quieres revisarlo. He consultado con DeepSeek para ver si se puede hacer lo que quieres pero no parece dar una solución clara.

Comentarte que Cristobal implementó la Clase TToast en FWH y que usándola puedes tener mucho mas control aunque esa clase también tiene un nivel de complejidad.

winrt.prg

Code: Select all | Expand

#include "FiveWin.ch"

#define Show                       7
#define CreateToastNotification    7
#define CreateToastNotifierWithId  8
#define Item                       8
#define GetNamedItem               9
#define GetTemplateContent         9
#define add_Activated             12  
#define CreateTextNode            12
#define Get_Attributes            17
#define GetElementsByTagName      17
#define AppendChild               23

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

function WinRTString( cText )

   local pString
   
   WindowsCreateString( AnsiToWide( cText ), Len( cText ), @pString )

return pString

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

static function SetNodeText( pNodeList, nItem, cText, pXml )

   local pXmlNode, pXmlText, pXmlNodeChild
   local pString

   WinRTMethod( pNodeList, Item, nItem, @pXmlNode )
   pString = WinRTString( cText )
   WinRTMethod( pXml, CreateTextNode, pString, @pXmlText )
   WindowsDeleteString( pString )
   WinRTMethod( pXmlNode, AppendChild, pXmlText, @pXmlNodeChild )

return nil

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

static function SetImageFileName( pXml, cImageFileName ) 

   local pString := WinRTString( "image" )
   local pNodeList, pXmlNode, pAttributeMap
   local pXmlNodeAttribute, pXmlText, pXmlNodeChild

   WinRTMethod( pXml, GetElementsByTagName, pString, @pNodeList )
   WindowsDeleteString( pString )
   WinRTMethod( pNodeList, Item, 0, @pXmlNode )
   WinRTMethod( pXmlNode, Get_Attributes, @pAttributeMap )
   pString = WinRTString( "src" )
   WinRTMethod( pAttributeMap, GetNamedItem, pString, @pXmlNodeAttribute )
   WindowsDeleteString( pString )
   pString = WinRTString( cImageFileName )
   WinRTMethod( pXml, CreateTextNode, pString, @pXmlText )
   WindowsDeleteString( pString )
   WinRTMethod( pXmlNodeAttribute, AppendChild, pXmlText, @pXmlNodeChild )

return nil

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

function Toast( cFirstLine, cSecondLine, cThirdLine, cImageFileName )

   local pString, cIID, pToastFactory
   local pXml, pNodeList
   local pNotification, pNotificationFactory, pNotifier

   DEFAULT cFirstLine := "FiveWin notification",;
           cSecondLine := " ", cThirdLine := " ",;
           cImageFileName := "c:\fwh\bitmaps\pngs\fivetech.png"

   RoInitialize( 1 )

   pString = WinRTString( "Windows.UI.Notifications.ToastNotificationManager" )

   // "50AC103F-D235-4598-BBEF-98FE4D1A3AD4"
   cIID = Chr( 0x3F ) + Chr( 0x10 ) + Chr( 0xAC ) + Chr( 0x50 ) + ;
          Chr( 0x35 ) + Chr( 0xD2 ) + Chr( 0x98 ) + Chr( 0x45 ) + ;
          Chr( 0xBB ) + Chr( 0xEF ) + Chr( 0x98 ) + Chr( 0xFE ) + ;
          Chr( 0x4D ) + Chr( 0x1A ) + Chr( 0x3A ) + Chr( 0xD4 )

   RoGetActivationFactory( pString, cIID, @pToastFactory )

   WindowsDeleteString( pString );

   WinRTMethod( pToastFactory, GetTemplateContent, 3, @pXml )

   SetImageFileName( pXml, cImageFileName )
   
   pString = WinRTString( "text" )
   WinRTMethod( pXml, GetElementsByTagName, pString, @pNodeList )
   WindowsDeleteString( pString )

   SetNodeText( pNodeList, 0, cFirstLine,  pXml ) 
   SetNodeText( pNodeList, 1, cSecondLine, pXml ) 
   SetNodeText( pNodeList, 2, cThirdLine,  pXml ) 

   // 04124B20-82C6-4229-B109-FD9ED4662B53
   cIID = Chr( 0x20 ) + Chr( 0x4B ) + Chr( 0x12 ) + Chr( 0x04 ) + ;
          Chr( 0xC6 ) + Chr( 0x82 ) + Chr( 0x29 ) + Chr( 0x42 ) + ;
          Chr( 0xB1 ) + Chr( 0x09 ) + Chr( 0xFD ) + Chr( 0x9E ) + ;
          Chr( 0xD4 ) + Chr( 0x66 ) + Chr( 0x2B ) + Chr( 0x53 )

   pString = WinRTString( "Windows.UI.Notifications.ToastNotification" )
   RoGetActivationFactory( pString, cIID, @pNotificationFactory )
   WindowsDeleteString( pString )

   WinRTMethod( pNotificationFactory, CreateToastNotification, pXML, @pNotification )

   pString = WinRTString( " " )
   WinRTMethod( pToastFactory, CreateToastNotifierWithId, pString, @pNotifier )
   WindowsDeleteString( pString )

   // pEventHandler = WinRTEventHandler()
   // WinRTMethod( pNotification, add_Activated, pEventHandler, nEventToken )
   // MsgInfo( WinRTEventToken() )
   // WinRTMethod( pNotification, add_Activated + 1, pEventHandler, nEventToken )
   // MsgInfo( WinRTEventToken() )
   // WinRTMethod( pNotification, add_Activated + 2, pEventHandler, nEventToken )
   // MsgInfo( WinRTEventToken() )

   WinRTMethod( pNotifier, Show, pNotification )

   RoUninitialize()

return nil

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

DLL FUNCTION RoInitialize( nType AS LONG ) AS LONG PASCAL LIB "combase.dll"

DLL FUNCTION RoUninitialize() AS VOID PASCAL LIB "combase.dll"

DLL FUNCTION WindowsCreateString( cWideText AS LPSTR, nLength AS LONG, @pString AS PTR ) ;
   AS LONG PASCAL LIB "combase.dll"
   
DLL FUNCTION WindowsDeleteString( pString AS PTR ) AS LONG PASCAL LIB "combase.dll"

DLL FUNCTION RoGetActivationFactory( pString AS PTR, REFIID AS LPSTR, @pFactory AS PTR ) ;
   AS LONG PASCAL LIB "combase.dll"

DLL FUNCTION WindowsGetStringRawBuffer( pString AS PTR, @nLenght AS LONG ) ;
   AS LONG PASCAL LIB "combase.dll"
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ajustar tamaño caja toast :: Reply by Antonio Linares]]> 2025-02-08T03:45:00-07:00 2025-02-08T03:45:00-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45391&p=277506#p277506

Code: Select all | Expand

function Toast( cFirstLine, cSecondLine, cThirdLine, cImageFileName )

   local pString, cIID, pToastFactory
   local pXml, pNodeList
   local pNotification, pNotificationFactory, pNotifier
   local cXml

   DEFAULT cFirstLine := "FiveWin notification",;
           cSecondLine := " ", cThirdLine := " ",;
           cImageFileName := "c:\fwh\bitmaps\pngs\fivetech.png"

   RoInitialize( 1 )

   // Create XML document instance
   pString = WinRTString( "Windows.Data.Xml.Dom.XmlDocument" )
   RoActivateInstance( pString, @pXml )
   WindowsDeleteString( pString )

   // Define compact XML (no image or inline image)
   cXml := ;
   '<toast>'+;
      '<visual>'+;
         '<binding template="ToastGeneric">'+;
            iif( Empty( cImageFileName ), '', '<image src="' + cImageFileName + '"/>' ) + ;
            '<text>' + cFirstLine + '</text>'+;
            '<text>' + cSecondLine + '</text>'+;
            '<text>' + cThirdLine + '</text>'+;
         '</binding>'+;
      '</visual>'+;
   '</toast>'

   // Load the XML into the document
   pString = WinRTString( cXml )
   WinRTMethod( pXml, "LoadXml", pString )
   WindowsDeleteString( pString )

   // Proceed with creating the notification (same as before)
   pString = WinRTString( "Windows.UI.Notifications.ToastNotificationManager" )
   cIID = Chr( 0x3F ) + Chr( 0x10 ) + Chr( 0xAC ) + Chr( 0x50 ) + ;
          Chr( 0x35 ) + Chr( 0xD2 ) + Chr( 0x98 ) + Chr( 0x45 ) + ;
          Chr( 0xBB ) + Chr( 0xEF ) + Chr( 0x98 ) + Chr( 0xFE ) + ;
          Chr( 0x4D ) + Chr( 0x1A ) + Chr( 0x3A ) + Chr( 0xD4 )
   RoGetActivationFactory( pString, cIID, @pToastFactory )
   WindowsDeleteString( pString )

   // ... (rest of the code remains the same)
   
   WinRTMethod( pNotifier, "Show", pNotification )

   RoUninitialize()

return nil
For a minimal Toast with just one line of text and no image:
Toast( "Short Message", "", "" )
Toast( "Short Message", "", "", "c:\path\to\small_image.png" )]]>

Code: Select all | Expand

function Toast( cFirstLine, cSecondLine, cThirdLine, cImageFileName )

   local pString, cIID, pToastFactory
   local pXml, pNodeList
   local pNotification, pNotificationFactory, pNotifier
   local cXml

   DEFAULT cFirstLine := "FiveWin notification",;
           cSecondLine := " ", cThirdLine := " ",;
           cImageFileName := "c:\fwh\bitmaps\pngs\fivetech.png"

   RoInitialize( 1 )

   // Create XML document instance
   pString = WinRTString( "Windows.Data.Xml.Dom.XmlDocument" )
   RoActivateInstance( pString, @pXml )
   WindowsDeleteString( pString )

   // Define compact XML (no image or inline image)
   cXml := ;
   '<toast>'+;
      '<visual>'+;
         '<binding template="ToastGeneric">'+;
            iif( Empty( cImageFileName ), '', '<image src="' + cImageFileName + '"/>' ) + ;
            '<text>' + cFirstLine + '</text>'+;
            '<text>' + cSecondLine + '</text>'+;
            '<text>' + cThirdLine + '</text>'+;
         '</binding>'+;
      '</visual>'+;
   '</toast>'

   // Load the XML into the document
   pString = WinRTString( cXml )
   WinRTMethod( pXml, "LoadXml", pString )
   WindowsDeleteString( pString )

   // Proceed with creating the notification (same as before)
   pString = WinRTString( "Windows.UI.Notifications.ToastNotificationManager" )
   cIID = Chr( 0x3F ) + Chr( 0x10 ) + Chr( 0xAC ) + Chr( 0x50 ) + ;
          Chr( 0x35 ) + Chr( 0xD2 ) + Chr( 0x98 ) + Chr( 0x45 ) + ;
          Chr( 0xBB ) + Chr( 0xEF ) + Chr( 0x98 ) + Chr( 0xFE ) + ;
          Chr( 0x4D ) + Chr( 0x1A ) + Chr( 0x3A ) + Chr( 0xD4 )
   RoGetActivationFactory( pString, cIID, @pToastFactory )
   WindowsDeleteString( pString )

   // ... (rest of the code remains the same)
   
   WinRTMethod( pNotifier, "Show", pNotification )

   RoUninitialize()

return nil
For a minimal Toast with just one line of text and no image:
Toast( "Short Message", "", "" )
Toast( "Short Message", "", "", "c:\path\to\small_image.png" )]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ajustar tamaño caja toast :: Reply by leandro]]> 2025-02-10T14:17:00-07:00 2025-02-10T14:17:00-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45391&p=277572#p277572
Intentamos compilar la función, pero salen los siguiente errores:

Code: Select all | Expand

┌────────────────────────────────────────────────────────────────────────────┐
?FiveWin for xHarbour 24.09 64bits - Sep. 2024   Harbour development power  │▄
?(c) FiveTech 1993-2024 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 │█
└────────────────────────────────────────────────────────────────────────────┘?
  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀?
Compiling...
C:\xHar2407_64\bin\harbour leandro16 /n /d__64__ /iC:\fwh64_2409\include;C:\xHar2407_64\include /w /p
xHarbour 1.3.1 Intl. (SimpLex) (Build 20240624)
Copyright 1999-2024, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'leandro16.prg' and generating preprocessed output to 'leandro16.ppo'...
Generating C source output to 'leandro16.c'...
Done.
Lines 58, Functions/Procedures 1, pCodes 159
Embarcadero C++ 7.70 for Win64 Copyright (c) 2012-2023 Embarcadero Technologies, Inc.
leandro16.c:
Turbo Incremental Link64 6.98 Copyright (c) 1997-2023 Embarcadero Technologies, Inc.
Error: Unresolved external 'HB_FUN_ROACTIVATEINSTANCE' referenced from C:\FWH64_2409\SAMPLES\LEANDRO16.OBJ
* Linking errors *

c:\fwh64_2409\samples>

Code: Select all | Expand

#include "Fivewin.ch"

function Toast( cFirstLine, cSecondLine, cThirdLine, cImageFileName )

   local pString, cIID, pToastFactory
   local pXml, pNodeList
   local pNotification, pNotificationFactory, pNotifier
   local cXml

   DEFAULT cFirstLine := "FiveWin notification"
   DEFAULT cSecondLine := " " 
   DEFAULT cThirdLine := " "
   DEFAULT cImageFileName := "c:\fwh\bitmaps\pngs\fivetech.png"

   RoInitialize( 1 )

   // Create XML document instance
   pString = WinRTString( "Windows.Data.Xml.Dom.XmlDocument" )
   RoActivateInstance( pString, @pXml )
   WindowsDeleteString( pString )

   // Define compact XML (no image or inline image)
   cXml := ;
   '<toast>'+;
      '<visual>'+;
         '<binding template="ToastGeneric">'+;
            iif( Empty( cImageFileName ), '', '<image src="' + cImageFileName + '"/>' ) + ;
            '<text>' + cFirstLine + '</text>'+;
            '<text>' + cSecondLine + '</text>'+;
            '<text>' + cThirdLine + '</text>'+;
         '</binding>'+;
      '</visual>'+;
   '</toast>'

   // Load the XML into the document
   pString = WinRTString( cXml )
   WinRTMethod( pXml, "LoadXml", pString )
   WindowsDeleteString( pString )

   // Proceed with creating the notification (same as before)
   pString = WinRTString( "Windows.UI.Notifications.ToastNotificationManager" )
   cIID = Chr( 0x3F ) + Chr( 0x10 ) + Chr( 0xAC ) + Chr( 0x50 ) + ;
          Chr( 0x35 ) + Chr( 0xD2 ) + Chr( 0x98 ) + Chr( 0x45 ) + ;
          Chr( 0xBB ) + Chr( 0xEF ) + Chr( 0x98 ) + Chr( 0xFE ) + ;
          Chr( 0x4D ) + Chr( 0x1A ) + Chr( 0x3A ) + Chr( 0xD4 )
   RoGetActivationFactory( pString, cIID, @pToastFactory )
   WindowsDeleteString( pString )

   // ... (rest of the code remains the same)
   
   WinRTMethod( pNotifier, "Show", pNotification )

   RoUninitialize()

return nil
]]>

Intentamos compilar la función, pero salen los siguiente errores:

Code: Select all | Expand

┌────────────────────────────────────────────────────────────────────────────┐
?FiveWin for xHarbour 24.09 64bits - Sep. 2024   Harbour development power  │▄
?(c) FiveTech 1993-2024 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 │█
└────────────────────────────────────────────────────────────────────────────┘?
  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀?
Compiling...
C:\xHar2407_64\bin\harbour leandro16 /n /d__64__ /iC:\fwh64_2409\include;C:\xHar2407_64\include /w /p
xHarbour 1.3.1 Intl. (SimpLex) (Build 20240624)
Copyright 1999-2024, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'leandro16.prg' and generating preprocessed output to 'leandro16.ppo'...
Generating C source output to 'leandro16.c'...
Done.
Lines 58, Functions/Procedures 1, pCodes 159
Embarcadero C++ 7.70 for Win64 Copyright (c) 2012-2023 Embarcadero Technologies, Inc.
leandro16.c:
Turbo Incremental Link64 6.98 Copyright (c) 1997-2023 Embarcadero Technologies, Inc.
Error: Unresolved external 'HB_FUN_ROACTIVATEINSTANCE' referenced from C:\FWH64_2409\SAMPLES\LEANDRO16.OBJ
* Linking errors *

c:\fwh64_2409\samples>

Code: Select all | Expand

#include "Fivewin.ch"

function Toast( cFirstLine, cSecondLine, cThirdLine, cImageFileName )

   local pString, cIID, pToastFactory
   local pXml, pNodeList
   local pNotification, pNotificationFactory, pNotifier
   local cXml

   DEFAULT cFirstLine := "FiveWin notification"
   DEFAULT cSecondLine := " " 
   DEFAULT cThirdLine := " "
   DEFAULT cImageFileName := "c:\fwh\bitmaps\pngs\fivetech.png"

   RoInitialize( 1 )

   // Create XML document instance
   pString = WinRTString( "Windows.Data.Xml.Dom.XmlDocument" )
   RoActivateInstance( pString, @pXml )
   WindowsDeleteString( pString )

   // Define compact XML (no image or inline image)
   cXml := ;
   '<toast>'+;
      '<visual>'+;
         '<binding template="ToastGeneric">'+;
            iif( Empty( cImageFileName ), '', '<image src="' + cImageFileName + '"/>' ) + ;
            '<text>' + cFirstLine + '</text>'+;
            '<text>' + cSecondLine + '</text>'+;
            '<text>' + cThirdLine + '</text>'+;
         '</binding>'+;
      '</visual>'+;
   '</toast>'

   // Load the XML into the document
   pString = WinRTString( cXml )
   WinRTMethod( pXml, "LoadXml", pString )
   WindowsDeleteString( pString )

   // Proceed with creating the notification (same as before)
   pString = WinRTString( "Windows.UI.Notifications.ToastNotificationManager" )
   cIID = Chr( 0x3F ) + Chr( 0x10 ) + Chr( 0xAC ) + Chr( 0x50 ) + ;
          Chr( 0x35 ) + Chr( 0xD2 ) + Chr( 0x98 ) + Chr( 0x45 ) + ;
          Chr( 0xBB ) + Chr( 0xEF ) + Chr( 0x98 ) + Chr( 0xFE ) + ;
          Chr( 0x4D ) + Chr( 0x1A ) + Chr( 0x3A ) + Chr( 0xD4 )
   RoGetActivationFactory( pString, cIID, @pToastFactory )
   WindowsDeleteString( pString )

   // ... (rest of the code remains the same)
   
   WinRTMethod( pNotifier, "Show", pNotification )

   RoUninitialize()

return nil
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ajustar tamaño caja toast :: Reply by Antonio Linares]]> 2025-02-11T00:30:53-07:00 2025-02-11T00:30:53-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45391&p=277580#p277580 https://learn.microsoft.com/en-us/windo ... teinstance

Prueba con este código:

Code: Select all | Expand

DLL FUNCTION RoActivateInstance( pRuntimeClassName AS LPSTR, @pInstance AS PTR ) AS LONG PASCAL LIB "combase.dll"

FUNCTION RoActivateInstanceWrapper( cRuntimeClassName )
   LOCAL nResult, pHString, pInstance
   LOCAL nLength := Len( cRuntimeClassName )
   LOCAL IID_IInspectable := "{AF86E2E0-B12D-4C6A-9C5A-D7AA65101E90}" // IID de IInspectable

   // Inicializar el entorno de Windows Runtime
   nResult := RoInitialize( 0 ) // RO_INIT_SINGLETHREADED
   IF nResult != 0
      RETURN nResult
   ENDIF

   // Crear un HSTRING a partir de la cadena Unicode
   nResult := WindowsCreateString( cRuntimeClassName, nLength, @pHString )
   IF nResult != 0
      RoUninitialize()
      RETURN nResult
   ENDIF

   // Llamar a RoActivateInstance directamente
   nResult := RoActivateInstance( pHString, @pInstance )
   IF nResult != 0
      WindowsDeleteString( pHString )
      RoUninitialize()
      RETURN nResult
   ENDIF

   // Liberar HSTRING
   WindowsDeleteString( pHString )

   // Desinicializar Windows Runtime
   // RoUninitialize()

   // Retornar la instancia obtenida
RETURN pInstance
]]>
https://learn.microsoft.com/en-us/windo ... teinstance

Prueba con este código:

Code: Select all | Expand

DLL FUNCTION RoActivateInstance( pRuntimeClassName AS LPSTR, @pInstance AS PTR ) AS LONG PASCAL LIB "combase.dll"

FUNCTION RoActivateInstanceWrapper( cRuntimeClassName )
   LOCAL nResult, pHString, pInstance
   LOCAL nLength := Len( cRuntimeClassName )
   LOCAL IID_IInspectable := "{AF86E2E0-B12D-4C6A-9C5A-D7AA65101E90}" // IID de IInspectable

   // Inicializar el entorno de Windows Runtime
   nResult := RoInitialize( 0 ) // RO_INIT_SINGLETHREADED
   IF nResult != 0
      RETURN nResult
   ENDIF

   // Crear un HSTRING a partir de la cadena Unicode
   nResult := WindowsCreateString( cRuntimeClassName, nLength, @pHString )
   IF nResult != 0
      RoUninitialize()
      RETURN nResult
   ENDIF

   // Llamar a RoActivateInstance directamente
   nResult := RoActivateInstance( pHString, @pInstance )
   IF nResult != 0
      WindowsDeleteString( pHString )
      RoUninitialize()
      RETURN nResult
   ENDIF

   // Liberar HSTRING
   WindowsDeleteString( pHString )

   // Desinicializar Windows Runtime
   // RoUninitialize()

   // Retornar la instancia obtenida
RETURN pInstance
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ajustar tamaño caja toast :: Reply by leandro]]> 2025-02-11T11:48:34-07:00 2025-02-11T11:48:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45391&p=277593#p277593
Se compilo la aplicación sin problema, pero no ejecuta ninguna acción.

Code: Select all | Expand

┌────────────────────────────────────────────────────────────────────────────┐
?FiveWin for xHarbour 24.09 64bits - Sep. 2024   Harbour development power  │▄
?(c) FiveTech 1993-2024 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 │█
└────────────────────────────────────────────────────────────────────────────┘?
  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀?
Compiling...
C:\xHar2407_64\bin\harbour leandro16 /n /d__64__ /iC:\fwh64_2409\include;C:\xHar2407_64\include /w /p
xHarbour 1.3.1 Intl. (SimpLex) (Build 20240624)
Copyright 1999-2024, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'leandro16.prg' and generating preprocessed output to 'leandro16.ppo'...
Generating C source output to 'leandro16.c'...
Done.
Lines 41, Functions/Procedures 2, pCodes 192
Embarcadero C++ 7.70 for Win64 Copyright (c) 2012-2023 Embarcadero Technologies, Inc.
leandro16.c:
Turbo Incremental Link64 6.98 Copyright (c) 1997-2023 Embarcadero Technologies, Inc.
* Application successfully built *

c:\fwh64_2409\samples>

Code: Select all | Expand

#include "Fivewin.ch"


DLL FUNCTION RoActivateInstance( pRuntimeClassName AS LPSTR, @pInstance AS PTR ) AS LONG PASCAL LIB "combase.dll"

FUNCTION RoActivateInstanceWrapper( cRuntimeClassName )
   LOCAL nResult, pHString, pInstance
   LOCAL nLength := Len( cRuntimeClassName )
   LOCAL IID_IInspectable := "{AF86E2E0-B12D-4C6A-9C5A-D7AA65101E90}" // IID de IInspectable

   // Inicializar el entorno de Windows Runtime
   nResult := RoInitialize( 0 ) // RO_INIT_SINGLETHREADED
   IF nResult != 0
      RETURN nResult
   ENDIF

   // Crear un HSTRING a partir de la cadena Unicode
   nResult := WindowsCreateString( cRuntimeClassName, nLength, @pHString )
   IF nResult != 0
      RoUninitialize()
      RETURN nResult
   ENDIF

   // Llamar a RoActivateInstance directamente
   nResult := RoActivateInstance( pHString, @pInstance )
   IF nResult != 0
      WindowsDeleteString( pHString )
      RoUninitialize()
      RETURN nResult
   ENDIF

   // Liberar HSTRING
   WindowsDeleteString( pHString )

   // Desinicializar Windows Runtime
   // RoUninitialize()

   // Retornar la instancia obtenida
RETURN pInstance
]]>

Se compilo la aplicación sin problema, pero no ejecuta ninguna acción.

Code: Select all | Expand

┌────────────────────────────────────────────────────────────────────────────┐
?FiveWin for xHarbour 24.09 64bits - Sep. 2024   Harbour development power  │▄
?(c) FiveTech 1993-2024 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 │█
└────────────────────────────────────────────────────────────────────────────┘?
  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀?
Compiling...
C:\xHar2407_64\bin\harbour leandro16 /n /d__64__ /iC:\fwh64_2409\include;C:\xHar2407_64\include /w /p
xHarbour 1.3.1 Intl. (SimpLex) (Build 20240624)
Copyright 1999-2024, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'leandro16.prg' and generating preprocessed output to 'leandro16.ppo'...
Generating C source output to 'leandro16.c'...
Done.
Lines 41, Functions/Procedures 2, pCodes 192
Embarcadero C++ 7.70 for Win64 Copyright (c) 2012-2023 Embarcadero Technologies, Inc.
leandro16.c:
Turbo Incremental Link64 6.98 Copyright (c) 1997-2023 Embarcadero Technologies, Inc.
* Application successfully built *

c:\fwh64_2409\samples>

Code: Select all | Expand

#include "Fivewin.ch"


DLL FUNCTION RoActivateInstance( pRuntimeClassName AS LPSTR, @pInstance AS PTR ) AS LONG PASCAL LIB "combase.dll"

FUNCTION RoActivateInstanceWrapper( cRuntimeClassName )
   LOCAL nResult, pHString, pInstance
   LOCAL nLength := Len( cRuntimeClassName )
   LOCAL IID_IInspectable := "{AF86E2E0-B12D-4C6A-9C5A-D7AA65101E90}" // IID de IInspectable

   // Inicializar el entorno de Windows Runtime
   nResult := RoInitialize( 0 ) // RO_INIT_SINGLETHREADED
   IF nResult != 0
      RETURN nResult
   ENDIF

   // Crear un HSTRING a partir de la cadena Unicode
   nResult := WindowsCreateString( cRuntimeClassName, nLength, @pHString )
   IF nResult != 0
      RoUninitialize()
      RETURN nResult
   ENDIF

   // Llamar a RoActivateInstance directamente
   nResult := RoActivateInstance( pHString, @pInstance )
   IF nResult != 0
      WindowsDeleteString( pHString )
      RoUninitialize()
      RETURN nResult
   ENDIF

   // Liberar HSTRING
   WindowsDeleteString( pHString )

   // Desinicializar Windows Runtime
   // RoUninitialize()

   // Retornar la instancia obtenida
RETURN pInstance
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ajustar tamaño caja toast :: Reply by Antonio Linares]]> 2025-02-11T15:17:56-07:00 2025-02-11T15:17:56-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45391&p=277601#p277601
Estas usando la versión modificada que publicaste ?]]>

Estas usando la versión modificada que publicaste ?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ajustar tamaño caja toast :: Reply by leandro]]> 2025-02-13T12:58:00-07:00 2025-02-13T12:58:00-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45391&p=277654#p277654
Antonio Linares wrote: Tue Feb 11, 2025 10:17 pm El Toast aparece con el mismo tamaño ?
Si el mismo tamaño.
Antonio Linares wrote: Tue Feb 11, 2025 10:17 pm Estas usando la versión modificada que publicaste ?
Si correcto.]]>
Antonio Linares wrote: Tue Feb 11, 2025 10:17 pm El Toast aparece con el mismo tamaño ?
Si el mismo tamaño.
Antonio Linares wrote: Tue Feb 11, 2025 10:17 pm Estas usando la versión modificada que publicaste ?
Si correcto.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Firmar archivo xml con certificado Argentina harbour o xharbour :: Author devwin2010]]> 2025-02-11T13:41:36-07:00 2025-02-11T13:41:36-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45404&p=277596#p277596
Estoy tratando de fimar un archivo xml con harbour_win32_bcc_2020_10_19 incluyo librerias hbssl y libeay32 , y me faltan las siguientes funciones unresolved external

CMS_CREATE
CMS_CERTFILE
CMS_SETKEYFILE
CMS_SIGN
CMS_GETSIGNEDCMS
CMS_REALEASE

alguien tiene la libreria armada o como hacerlo sin que arroje estos errores desde ya muchas gracias
Fabian]]>

Estoy tratando de fimar un archivo xml con harbour_win32_bcc_2020_10_19 incluyo librerias hbssl y libeay32 , y me faltan las siguientes funciones unresolved external

CMS_CREATE
CMS_CERTFILE
CMS_SETKEYFILE
CMS_SIGN
CMS_GETSIGNEDCMS
CMS_REALEASE

alguien tiene la libreria armada o como hacerlo sin que arroje estos errores desde ya muchas gracias
Fabian]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Firmar archivo xml con certificado Argentina harbour o xharbour :: Reply by karinha]]> 2025-02-14T09:12:31-07:00 2025-02-14T09:12:31-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45404&p=277677#p277677

Code: Select all | Expand

libcrypto-1_1-x64.dll
libcrypto-1_1.dll
libeay32.dll
libssl-1_1-x64.dll
libssl-1_1.dll
ssleay32.dll
ò sus .libs?

Regards, saludos.]]>

Code: Select all | Expand

libcrypto-1_1-x64.dll
libcrypto-1_1.dll
libeay32.dll
libssl-1_1-x64.dll
libssl-1_1.dll
ssleay32.dll
ò sus .libs?

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Ayuda para compiar :: Author servicomver]]> 2025-02-14T12:09:18-07:00 2025-02-14T12:09:18-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45419&p=277679#p277679
Este es el Buildh.bat
ECHO ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
ECHO ³ FiveWin for Harbour 24.09 - Sep. 2024 Harbour development power ³Ü
ECHO ³ (c) FiveTech 1993-2024 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 ³Û
ECHO ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÛ
ECHO ÿ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß

if A%1 == A GOTO :SINTAX
if NOT EXIST %1.prg GOTO :NOEXIST

if "%FWDIR%" == "" set FWDIR=C:\fwh
if "%HBDIR%" == "" set HBDIR=c:\harbour
rem if "%2" == "/b" set GT=gtwin
rem if not "%2" == "/b" set GT=gtgui
set GT=gtgui

ECHO Compiling...

set hdir=%HBDIR%
set hdirl=%hdir%\lib\win\bcc32c
set fwh=%FWDIR%
if exist c:\bcc77 set bcdir=c:\bcc77
if exist c:\bcc64 set bcdir=c:\bcc64

%hdir%\bin\win\bcc32c\harbour %1 /n /i%fwh%\include;%hdir%\include /w /p %2 %3 > comp.log 2> warnings.log


if errorlevel 1 goto COMPILEERRORS
@type comp.log
@type warnings.log

echo -O2 -e%1.exe -I%hdir%\include -I%bcdir%\include -I%fwh%\include %1.c > b32.bc
%bcdir%\bin\bcc32 -M -c @b32.bc
:ENDCOMPILE

IF EXIST %1.rc %bcdir%\bin\bcc32.exe -r -I%bcdir%\include -I%bcdir%\include\windows\sdk %1
rem IF EXIST %1.rc %bcdir%\bin\cgrc.exe -r -m -I%bcdir%\include -I%bcdir%\include\windows\sdk %1
rem IF EXIST %1.rc %vcdir%\bin\rc -r -d__FLAT__ %1

echo -L%bcdir%\lib;%bcdir%\lib\psdk + > b32.bc
echo %bcdir%\lib\c0w32.obj + >> b32.bc
echo %1.obj, + >> b32.bc
echo %1.exe, + >> b32.bc
echo %1.map, + >> b32.bc
echo %fwh%\lib\FiveH.lib %fwh%\lib\FiveHC.lib %fwh%\lib\libmysql.lib + >> b32.bc
rem echo %fwh%\lib\drxlsx32_bcc.lib + >> b32.bc
rem echo %fwh%\lib\xlsxlibhbbcc.lib + >> b32.bc
echo %fwh%\lib\hbpgsql.lib %fwh%\lib\libpq.lib + >> b32.bc
echo %fwh%\lib\drxlsx32_bcc.lib + >> b32.bc
echo %hdirl%\hbhpdf.lib + >> b32.bc
echo %hdirl%\libhpdf.lib + >> b32.bc
echo %hdirl%\png.lib + >> b32.bc
echo %hdirl%\hbwin.lib + >> b32.bc
echo %hdirl%\gtgui.lib + >> b32.bc
echo %hdirl%\hbrtl.lib + >> b32.bc
echo %hdirl%\hbvm.lib + >> b32.bc
echo %hdirl%\hblang.lib + >> b32.bc
echo %hdirl%\hbmacro.lib + >> b32.bc
echo %hdirl%\hbrdd.lib + >> b32.bc
echo %hdirl%\rddntx.lib + >> b32.bc
echo %hdirl%\rddcdx.lib + >> b32.bc
echo %hdirl%\rddfpt.lib + >> b32.bc
echo %hdirl%\hbsix.lib + >> b32.bc
echo %hdirl%\hbdebug.lib + >> b32.bc
echo %hdirl%\hbcommon.lib + >> b32.bc
echo %hdirl%\hbpp.lib + >> b32.bc
echo %hdirl%\hbcpage.lib + >> b32.bc
echo %hdirl%\hbcplr.lib + >> b32.bc
echo %hdirl%\hbct.lib + >> b32.bc
echo %hdirl%\hbpcre.lib + >> b32.bc
echo %hdirl%\xhb.lib + >> b32.bc
echo %hdirl%\hbziparc.lib + >> b32.bc
echo %hdirl%\hbmzip.lib + >> b32.bc
echo %hdirl%\hbzlib.lib + >> b32.bc
echo %hdirl%\minizip.lib + >> b32.bc
rem echo %hdirl%\png.lib + >> b32.bc
echo %hdirl%\hbusrrdd.lib + >> b32.bc
echo %hdirl%\hbtip.lib + >> b32.bc
echo %hdirl%\hbzebra.lib + >> b32.bc
echo %hdirl%\hbcurl.lib + >> b32.bc
echo %hdirl%\libcurl.lib + >> b32.bc
echo %hdirl%\hbtip.lib + >> b32.bc

rem Uncomment these two lines to use Advantage RDD
rem echo %hdirl%\rddads.lib + >> b32.bc
rem echo %hdirl%\Ace32.lib + >> b32.bc

echo %fwh%\lib\dolphin.lib + >> b32.bc
rem echo %fwh%\lib\libmysql.lib + >> b32.bc

echo %bcdir%\lib\cw32.lib + >> b32.bc
echo %bcdir%\lib\psdk\uuid.lib + >> b32.bc
echo %bcdir%\lib\import32.lib + >> b32.bc
echo %bcdir%\lib\psdk\ws2_32.lib + >> b32.bc
echo %bcdir%\lib\psdk\odbc32.lib + >> b32.bc
echo %bcdir%\lib\psdk\nddeapi.lib + >> b32.bc
echo %bcdir%\lib\psdk\iphlpapi.lib + >> b32.bc
echo %bcdir%\lib\psdk\msimg32.lib + >> b32.bc
echo %bcdir%\lib\psdk\psapi.lib + >> b32.bc
echo %bcdir%\lib\psdk\rasapi32.lib + >> b32.bc
echo %bcdir%\lib\psdk\gdiplus.lib + >> b32.bc
echo %bcdir%\lib\psdk\shell32.lib + >> b32.bc
echo %bcdir%\lib\psdk\uxtheme.lib , >> b32.bc

IF EXIST %1.res echo %1.res >> b32.bc
if %GT% == gtwin %bcdir%\bin\ilink32 -Gn -Tpe -s @b32.bc
IF ERRORLEVEL 1 GOTO LINKERROR
if %GT% == gtgui %bcdir%\bin\ilink32 -Gn -aa -Tpe -s @b32.bc
IF ERRORLEVEL 1 GOTO LINKERROR
ECHO * Application successfully built *
rem signtool.exe sign /fd sha256 %1.exe
%1
GOTO EXIT
ECHO

rem delete temporary files
@del %1.c

:COMPILEERRORS
@type comp.log
@type warnings.log
ECHO * Compile errors *
GOTO EXIT

:LINKERROR
ECHO * Linking errors *
GOTO EXIT

:SINTAX
ECHO SYNTAX: Build [Program] {-- No especifiques la extensi?n PRG
ECHO {-- Don't specify .PRG extension
GOTO EXIT

:NOEXIST
ECHO The specified PRG %1 does not exist

:EXIT

y este es el error
Error E2194: Could not find file 'tutor01.cpp'

Uso la última versión de FIveWin.

Gracias por su ayuda, Saludos,]]>

Este es el Buildh.bat
ECHO ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
ECHO ³ FiveWin for Harbour 24.09 - Sep. 2024 Harbour development power ³Ü
ECHO ³ (c) FiveTech 1993-2024 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 ³Û
ECHO ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÛ
ECHO ÿ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß

if A%1 == A GOTO :SINTAX
if NOT EXIST %1.prg GOTO :NOEXIST

if "%FWDIR%" == "" set FWDIR=C:\fwh
if "%HBDIR%" == "" set HBDIR=c:\harbour
rem if "%2" == "/b" set GT=gtwin
rem if not "%2" == "/b" set GT=gtgui
set GT=gtgui

ECHO Compiling...

set hdir=%HBDIR%
set hdirl=%hdir%\lib\win\bcc32c
set fwh=%FWDIR%
if exist c:\bcc77 set bcdir=c:\bcc77
if exist c:\bcc64 set bcdir=c:\bcc64

%hdir%\bin\win\bcc32c\harbour %1 /n /i%fwh%\include;%hdir%\include /w /p %2 %3 > comp.log 2> warnings.log


if errorlevel 1 goto COMPILEERRORS
@type comp.log
@type warnings.log

echo -O2 -e%1.exe -I%hdir%\include -I%bcdir%\include -I%fwh%\include %1.c > b32.bc
%bcdir%\bin\bcc32 -M -c @b32.bc
:ENDCOMPILE

IF EXIST %1.rc %bcdir%\bin\bcc32.exe -r -I%bcdir%\include -I%bcdir%\include\windows\sdk %1
rem IF EXIST %1.rc %bcdir%\bin\cgrc.exe -r -m -I%bcdir%\include -I%bcdir%\include\windows\sdk %1
rem IF EXIST %1.rc %vcdir%\bin\rc -r -d__FLAT__ %1

echo -L%bcdir%\lib;%bcdir%\lib\psdk + > b32.bc
echo %bcdir%\lib\c0w32.obj + >> b32.bc
echo %1.obj, + >> b32.bc
echo %1.exe, + >> b32.bc
echo %1.map, + >> b32.bc
echo %fwh%\lib\FiveH.lib %fwh%\lib\FiveHC.lib %fwh%\lib\libmysql.lib + >> b32.bc
rem echo %fwh%\lib\drxlsx32_bcc.lib + >> b32.bc
rem echo %fwh%\lib\xlsxlibhbbcc.lib + >> b32.bc
echo %fwh%\lib\hbpgsql.lib %fwh%\lib\libpq.lib + >> b32.bc
echo %fwh%\lib\drxlsx32_bcc.lib + >> b32.bc
echo %hdirl%\hbhpdf.lib + >> b32.bc
echo %hdirl%\libhpdf.lib + >> b32.bc
echo %hdirl%\png.lib + >> b32.bc
echo %hdirl%\hbwin.lib + >> b32.bc
echo %hdirl%\gtgui.lib + >> b32.bc
echo %hdirl%\hbrtl.lib + >> b32.bc
echo %hdirl%\hbvm.lib + >> b32.bc
echo %hdirl%\hblang.lib + >> b32.bc
echo %hdirl%\hbmacro.lib + >> b32.bc
echo %hdirl%\hbrdd.lib + >> b32.bc
echo %hdirl%\rddntx.lib + >> b32.bc
echo %hdirl%\rddcdx.lib + >> b32.bc
echo %hdirl%\rddfpt.lib + >> b32.bc
echo %hdirl%\hbsix.lib + >> b32.bc
echo %hdirl%\hbdebug.lib + >> b32.bc
echo %hdirl%\hbcommon.lib + >> b32.bc
echo %hdirl%\hbpp.lib + >> b32.bc
echo %hdirl%\hbcpage.lib + >> b32.bc
echo %hdirl%\hbcplr.lib + >> b32.bc
echo %hdirl%\hbct.lib + >> b32.bc
echo %hdirl%\hbpcre.lib + >> b32.bc
echo %hdirl%\xhb.lib + >> b32.bc
echo %hdirl%\hbziparc.lib + >> b32.bc
echo %hdirl%\hbmzip.lib + >> b32.bc
echo %hdirl%\hbzlib.lib + >> b32.bc
echo %hdirl%\minizip.lib + >> b32.bc
rem echo %hdirl%\png.lib + >> b32.bc
echo %hdirl%\hbusrrdd.lib + >> b32.bc
echo %hdirl%\hbtip.lib + >> b32.bc
echo %hdirl%\hbzebra.lib + >> b32.bc
echo %hdirl%\hbcurl.lib + >> b32.bc
echo %hdirl%\libcurl.lib + >> b32.bc
echo %hdirl%\hbtip.lib + >> b32.bc

rem Uncomment these two lines to use Advantage RDD
rem echo %hdirl%\rddads.lib + >> b32.bc
rem echo %hdirl%\Ace32.lib + >> b32.bc

echo %fwh%\lib\dolphin.lib + >> b32.bc
rem echo %fwh%\lib\libmysql.lib + >> b32.bc

echo %bcdir%\lib\cw32.lib + >> b32.bc
echo %bcdir%\lib\psdk\uuid.lib + >> b32.bc
echo %bcdir%\lib\import32.lib + >> b32.bc
echo %bcdir%\lib\psdk\ws2_32.lib + >> b32.bc
echo %bcdir%\lib\psdk\odbc32.lib + >> b32.bc
echo %bcdir%\lib\psdk\nddeapi.lib + >> b32.bc
echo %bcdir%\lib\psdk\iphlpapi.lib + >> b32.bc
echo %bcdir%\lib\psdk\msimg32.lib + >> b32.bc
echo %bcdir%\lib\psdk\psapi.lib + >> b32.bc
echo %bcdir%\lib\psdk\rasapi32.lib + >> b32.bc
echo %bcdir%\lib\psdk\gdiplus.lib + >> b32.bc
echo %bcdir%\lib\psdk\shell32.lib + >> b32.bc
echo %bcdir%\lib\psdk\uxtheme.lib , >> b32.bc

IF EXIST %1.res echo %1.res >> b32.bc
if %GT% == gtwin %bcdir%\bin\ilink32 -Gn -Tpe -s @b32.bc
IF ERRORLEVEL 1 GOTO LINKERROR
if %GT% == gtgui %bcdir%\bin\ilink32 -Gn -aa -Tpe -s @b32.bc
IF ERRORLEVEL 1 GOTO LINKERROR
ECHO * Application successfully built *
rem signtool.exe sign /fd sha256 %1.exe
%1
GOTO EXIT
ECHO

rem delete temporary files
@del %1.c

:COMPILEERRORS
@type comp.log
@type warnings.log
ECHO * Compile errors *
GOTO EXIT

:LINKERROR
ECHO * Linking errors *
GOTO EXIT

:SINTAX
ECHO SYNTAX: Build [Program] {-- No especifiques la extensi?n PRG
ECHO {-- Don't specify .PRG extension
GOTO EXIT

:NOEXIST
ECHO The specified PRG %1 does not exist

:EXIT

y este es el error
Error E2194: Could not find file 'tutor01.cpp'

Uso la última versión de FIveWin.

Gracias por su ayuda, Saludos,]]>
<![CDATA[FiveWin para Harbour/xHarbour :: xBrowse con Tree se comporta erronemente. :: Author Joel Andujo]]> 2025-02-14T12:34:50-07:00 2025-02-14T12:34:50-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45420&p=277682#p277682 por tercera vez, se pierde el item principal y aparece un fondo negro como si intentara mostrar una imagen.

el código:

Code: Select all | Expand

TREE oTree; lPVez:=.t.
         do while !oRs:oRs:Eof()
            cNat   :=oRs:coCtaNat
            nSalIni:=oRs:SalIni
            nCargo :=oRs:Cargo
            nAbono :=oRs:Abono
            nSalAct:=nSalIni+if(cNat=='D', (nCargo-nAbono), (nAbono-nCargo))

            // Ignoro cuentas sin saldos
            if empty(nCargo) .and. empty(nAbono) .and. empty(nSalAct)
               oRs:oRs:MoveNext(); loop
            endif
             //                                                   1              2              3              4        5          6          7        8
            // _TreeItem(strFormat('Cta{1}', oRs:cosCtaSub)):Cargo:={oRs:cosCtaSsb, oRs:cosCtaSss, oRs:cosCosNum, nSalIni, oRs:Cargo, oRs:Abono, nSalAct, oRs:x0Cta2Nom(_TRIM)}
            TREEITEM strFormat('Cta{1}', oRs:cosCtaSub) CARGO {oRs:cosCtaSsb, oRs:cosCtaSss, oRs:cosCosNum, nSalIni, oRs:Cargo, oRs:Abono, nSalAct, oRs:x0Cta2Nom(_TRIM)}
            nSub:=oRs:cosCtaSub

            oRs:oRs:MoveNext()
            lTreeSub:=.f.; if (oRs:cosCtaSub == nSub); TREE; lTreeSub:=.t.; endif
            do while (oRs:cosCtaSub == nSub) .and. !oRs:oRs:Eof()
               TREEITEM strFormat('Cta{1}', oRs:cosCtaSsb) CARGO {oRs:cosCtaSsb, oRs:cosCtaSss, oRs:cosCosNum, nSalIni, oRs:Cargo, oRs:Abono, nSalAct, oRs:x0Cta3Nom(_TRIM)}
               nSsb:=oRs:cosCtaSsb

               oRs:oRs:MoveNext()
               lTreeSsb:=.f.; if (oRs:cosCtaSsb == nSsb); TREE; lTreeSsb:=.t.; endif
               do while (oRs:cosCtaSsb == nSsb) .and. !oRs:oRs:Eof()
                  TREEITEM strFormat('Cta{1}', oRs:cosCtaSss) CARGO {oRs:cosCtaSsb, oRs:cosCtaSss, oRs:cosCosNum, nSalIni, oRs:Cargo, oRs:Abono, nSalAct, oRs:x0Cta4Nom(_TRIM)}
                  oRs:oRs:MoveNext()
               enddo
               if lTreeSsb
                  ENDTREE
               endif
            enddo
            if lTreeSub
               ENDTREE
            endif

         enddo
         ENDTREE
       ENDTREE
       // Si cargo el Tree desde un xbrowse de un recurs, pasa lo mismo
       xbrowse(oTree)
Les muestro el resultado:

Image

FWxH 24.10 BCC 7.70 con FWxH 21.04 y BCC 7.0 pasa lo mismo

De antemano gracias
Joel Andujo]]>
por tercera vez, se pierde el item principal y aparece un fondo negro como si intentara mostrar una imagen.

el código:

Code: Select all | Expand

TREE oTree; lPVez:=.t.
         do while !oRs:oRs:Eof()
            cNat   :=oRs:coCtaNat
            nSalIni:=oRs:SalIni
            nCargo :=oRs:Cargo
            nAbono :=oRs:Abono
            nSalAct:=nSalIni+if(cNat=='D', (nCargo-nAbono), (nAbono-nCargo))

            // Ignoro cuentas sin saldos
            if empty(nCargo) .and. empty(nAbono) .and. empty(nSalAct)
               oRs:oRs:MoveNext(); loop
            endif
             //                                                   1              2              3              4        5          6          7        8
            // _TreeItem(strFormat('Cta{1}', oRs:cosCtaSub)):Cargo:={oRs:cosCtaSsb, oRs:cosCtaSss, oRs:cosCosNum, nSalIni, oRs:Cargo, oRs:Abono, nSalAct, oRs:x0Cta2Nom(_TRIM)}
            TREEITEM strFormat('Cta{1}', oRs:cosCtaSub) CARGO {oRs:cosCtaSsb, oRs:cosCtaSss, oRs:cosCosNum, nSalIni, oRs:Cargo, oRs:Abono, nSalAct, oRs:x0Cta2Nom(_TRIM)}
            nSub:=oRs:cosCtaSub

            oRs:oRs:MoveNext()
            lTreeSub:=.f.; if (oRs:cosCtaSub == nSub); TREE; lTreeSub:=.t.; endif
            do while (oRs:cosCtaSub == nSub) .and. !oRs:oRs:Eof()
               TREEITEM strFormat('Cta{1}', oRs:cosCtaSsb) CARGO {oRs:cosCtaSsb, oRs:cosCtaSss, oRs:cosCosNum, nSalIni, oRs:Cargo, oRs:Abono, nSalAct, oRs:x0Cta3Nom(_TRIM)}
               nSsb:=oRs:cosCtaSsb

               oRs:oRs:MoveNext()
               lTreeSsb:=.f.; if (oRs:cosCtaSsb == nSsb); TREE; lTreeSsb:=.t.; endif
               do while (oRs:cosCtaSsb == nSsb) .and. !oRs:oRs:Eof()
                  TREEITEM strFormat('Cta{1}', oRs:cosCtaSss) CARGO {oRs:cosCtaSsb, oRs:cosCtaSss, oRs:cosCosNum, nSalIni, oRs:Cargo, oRs:Abono, nSalAct, oRs:x0Cta4Nom(_TRIM)}
                  oRs:oRs:MoveNext()
               enddo
               if lTreeSsb
                  ENDTREE
               endif
            enddo
            if lTreeSub
               ENDTREE
            endif

         enddo
         ENDTREE
       ENDTREE
       // Si cargo el Tree desde un xbrowse de un recurs, pasa lo mismo
       xbrowse(oTree)
Les muestro el resultado:

Image

FWxH 24.10 BCC 7.70 con FWxH 21.04 y BCC 7.0 pasa lo mismo

De antemano gracias
Joel Andujo]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Problemas con SkinButtons() FWH24.07 :: Author sysctrl2]]> 2025-02-15T10:49:03-07:00 2025-02-15T10:49:03-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45422&p=277690#p277690 SkinButtons() y COMBOBOX se odian :?
usando la funcion SkinButtons() desaparecen los botones
solo se muestran cuando pasamos el raton por encima

Image
Image

les comparto un ejemplo para reproducir la cucaracha,
compilado con FWH24.07/HARBOUR

Code: Select all | Expand

#include <fivewin.ch>

//15-02-2025
//testcbx.prg
// EJEMPLO QUE REPRODUCE UN BUG FWH24.07+HARBOUR
// COMPILAR EN SAMPLES CON: BUILDH testcbx

FUNCTION Main()
   LOCAL cUser := space(10)
   LOCAL cName := space(50)
   LOCAL cEmpresa := "SysCtrl"
   LOCAL oDlg,oGet1,oGet2, oCbx, oBtn1, oBtn2
   LOCAL oBrush
   LOCAL lVal := .f.
   LOCAL oFont
   DEFINE BRUSH oBrush COLOR nRGB( 255, 255, 255 )
   DEFINE FONT oFont NAME "Tahoma" SIZE 0, -12  BOLD
   DEFINE DIALOG oDlg  SIZE 610, 330 brush oBrush
   oDlg:lTransparent := .t.
   oDlg:cTitle := "FiveWin Harbour 24.07"

   @ 10, 10 SAY "* Code user: " OF oDlg pixel
   @ 10, 90 GET oGet1 VAR cUser OF oDlg SIZE 60, 12 PICTURE "@!k" PIXEL

   @ 25, 10 SAY "* Name user: " OF oDlg pixel
   @ 25, 90 GET oGet2 VAR cName OF oDlg SIZE 60, 12 PICTURE "@!k" PIXEL

   @ 60, 10 SAY "* SELECCIONE UNA EMBRESA :" OF oDlg ;
      SIZE 100, 12 PIXEL FONT oFont COLOR CLR_BLUE
   @ 60, 120 COMBOBOX oCbx VAR cEmpresa SIZE 180,150 PIXEL OF oDlg UPDATE ;
      ITEMS {"Fivetech", "SysCtrl", "Otro"} ;
      COLOR "W+/BG" ;
      ON CHANGE MsgBeep() ;
      MESSAGE "Selecciona una empresa"

   @ 130, 70 BUTTON oBtn1 PROMPT "Aceptar"  SIZE 40, 12 OF oDlg ;
       ACTION ( lVal := .t. , oDlg:end() ) PIXEL

   @ 130, 120 BUTTON oBtn2 PROMPT "Cancelar" SIZE 40, 12 OF oDlg ;
       ACTION ( lVal := .f. , oDlg:end() ) CANCEL PIXEL

   oDlg:lhelpicon := .F.

   ACTIVATE DIALOG oDlg CENTERED
RETURN (.T.)

INIT PROCEDURE Setup()
   SkinButtons()
RETURN NIL

]]>
SkinButtons() y COMBOBOX se odian :?
usando la funcion SkinButtons() desaparecen los botones
solo se muestran cuando pasamos el raton por encima

Image
Image

les comparto un ejemplo para reproducir la cucaracha,
compilado con FWH24.07/HARBOUR

Code: Select all | Expand

#include <fivewin.ch>

//15-02-2025
//testcbx.prg
// EJEMPLO QUE REPRODUCE UN BUG FWH24.07+HARBOUR
// COMPILAR EN SAMPLES CON: BUILDH testcbx

FUNCTION Main()
   LOCAL cUser := space(10)
   LOCAL cName := space(50)
   LOCAL cEmpresa := "SysCtrl"
   LOCAL oDlg,oGet1,oGet2, oCbx, oBtn1, oBtn2
   LOCAL oBrush
   LOCAL lVal := .f.
   LOCAL oFont
   DEFINE BRUSH oBrush COLOR nRGB( 255, 255, 255 )
   DEFINE FONT oFont NAME "Tahoma" SIZE 0, -12  BOLD
   DEFINE DIALOG oDlg  SIZE 610, 330 brush oBrush
   oDlg:lTransparent := .t.
   oDlg:cTitle := "FiveWin Harbour 24.07"

   @ 10, 10 SAY "* Code user: " OF oDlg pixel
   @ 10, 90 GET oGet1 VAR cUser OF oDlg SIZE 60, 12 PICTURE "@!k" PIXEL

   @ 25, 10 SAY "* Name user: " OF oDlg pixel
   @ 25, 90 GET oGet2 VAR cName OF oDlg SIZE 60, 12 PICTURE "@!k" PIXEL

   @ 60, 10 SAY "* SELECCIONE UNA EMBRESA :" OF oDlg ;
      SIZE 100, 12 PIXEL FONT oFont COLOR CLR_BLUE
   @ 60, 120 COMBOBOX oCbx VAR cEmpresa SIZE 180,150 PIXEL OF oDlg UPDATE ;
      ITEMS {"Fivetech", "SysCtrl", "Otro"} ;
      COLOR "W+/BG" ;
      ON CHANGE MsgBeep() ;
      MESSAGE "Selecciona una empresa"

   @ 130, 70 BUTTON oBtn1 PROMPT "Aceptar"  SIZE 40, 12 OF oDlg ;
       ACTION ( lVal := .t. , oDlg:end() ) PIXEL

   @ 130, 120 BUTTON oBtn2 PROMPT "Cancelar" SIZE 40, 12 OF oDlg ;
       ACTION ( lVal := .f. , oDlg:end() ) CANCEL PIXEL

   oDlg:lhelpicon := .F.

   ACTIVATE DIALOG oDlg CENTERED
RETURN (.T.)

INIT PROCEDURE Setup()
   SkinButtons()
RETURN NIL

]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Problemas con SkinButtons() FWH24.07 :: Reply by Antonio Linares]]> 2025-02-15T11:05:11-07:00 2025-02-15T11:05:11-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45422&p=277691#p277691
Aqui funciona bien, te envío las librerias actualizadas :)

Image]]>

Aqui funciona bien, te envío las librerias actualizadas :)

Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Problemas con SkinButtons() FWH24.07 :: Reply by sysctrl2]]> 2025-02-15T11:12:15-07:00 2025-02-15T11:12:15-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45422&p=277692#p277692 si es tan amable a mi correo,
le mando mensajito por WhatsApp
gracias !!!]]>
si es tan amable a mi correo,
le mando mensajito por WhatsApp
gracias !!!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Problemas con SkinButtons() FWH24.07 (RESUELTO) :: Reply by sysctrl2]]> 2025-02-15T12:54:14-07:00 2025-02-15T12:54:14-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45422&p=277693#p277693 con la nuevas lib ya funciona
Image]]>
con la nuevas lib ya funciona
Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Ayuda tPrinter Sigue el mismo problema 2501 :: Author D.Fernandez]]> 2025-02-16T14:40:42-07:00 2025-02-20T10:40:49-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45425&p=277705#p277705 Tratando de usar la clase tPrinter.
Cuando hago el PREVIEW y le doy imprimir, me aparece el menú de impresión con los radiobuttons incompletos y además se sale de
la aplicación.
Hago un ENDPAGE Y UN PAGE para que muestre el menú de impresión

dejo imágen y codigo.
https://ibb.co/5X6VJcKL

Despues se sale del programa

Gracias.

Code: Select all | Expand

FUNCTION PRNSLOT()
    LOCAL  slnro,slnombre,slvalor,slbanco, slcam1,slcam2,slcam3,slmoneda,slcam4
  
    basesl := TData():New(,ruta+"SLOTS" )
    If basesl:Use() 
        basesl:SetOrder("NMAQ")
        basesl:GoTop()
    else
        MsgInfo('Error de apertura de archivo', 'Informe')
        return(.f.) 
    endif
     titulolistado := "Listado de Slots"
    CursorWait()
   
    
    PRINT oPrn NAME "Lista de Slots" PREVIEW MODAL 
        
        oPrn:SetPage(1)
        oPrn:SetPortrait()
    
    
        DEFINE FONT oFont11 NAME "TIMES NEW ROMAN" SIZE 0,-14 BOLD OF oPrn
        DEFINE FONT oFont12 NAME "HELVETICA" SIZE 0,-10 OF oPrn
        DEFINE FONT oFont13 NAME "HELVETICA" SIZE 0,-16 BOLD ITALIC  OF oPrn
        DEFINE FONT oFont14 NAME "Segoe UI" SIZE 0,-10    OF oPrn
        DEFINE FONT oFont15 NAME "TAHOMA" SIZE 0,-8 OF oPrn
        DEFINE FONT oFont16 NAME "CAMBRIA" SIZE 0,-10 BOLD ITALIC  OF oPrn
        DEFINE BRUSH oBrush COLOR CLR_WHITE 
        DEFINE PEN oPen WIDTH 1 COLOR CLR_BLACK
        
     
        aDesde := oPrn:Cmtr2Pix(0.5,2.5)
        aAncho := oPrn:Cmtr2Pix(3,2.5)
    
           
        cmt := 1
        PAGE 
              
        oPrn:RoundBox(2,8,3,14,0.3,0.3,oPen,CLR_WHITE,{"Qué hago mal ?", {oFont11 }, CLR_BLACK},"CM")

        cmt+=0.7 
        basesl:Gotop()   
    
        do while !basesl:Eof()
          
            slnro:=basesl:nslot
            slnombre:=basesl:snom
            slbanco:=basesl:cbanco
            slcam1:=basesl:cubre1
            slcam2:=basesl:cubre2
            slcam3:=basesl:cubre3
            slmoneda:= if(basesl:moneda="D",HBA("Dólares"), "Pesos")
          
            slvalor:= basesl:valor
            slcam4:= xTrim(slcam1)+" - "+xTrim(slcam2)+" - "+xTrim(slcam3)
            oPrn:CmSay( cmt,  3.2, slnro, oFont15,2, CLR_BLACK,,1)
                      
            cmt+=0.5
            SysRefresh()
          
            if cmt >=23
              // PieSlotPagina()
              //OtraSlotPagina()
               basesl:Skip()
            ELSE
               basesl:Skip()
            ENDIF
        ENDDO
      
   
    ENDPAGE

    PAGE
    ENDPAGE  

    ENDPRINT
    
    oFont11:END()
    oFont12:END()
    oFont13:END()
    oFont14:END()
    oFont15:END()
    oFont16:END()
    oBrush:End()
    oPen:End()    
    SysRefresh()
    
      
    basesl:Close()

 return(nil)
]]>
Tratando de usar la clase tPrinter.
Cuando hago el PREVIEW y le doy imprimir, me aparece el menú de impresión con los radiobuttons incompletos y además se sale de
la aplicación.
Hago un ENDPAGE Y UN PAGE para que muestre el menú de impresión

dejo imágen y codigo.
https://ibb.co/5X6VJcKL

Despues se sale del programa

Gracias.

Code: Select all | Expand

FUNCTION PRNSLOT()
    LOCAL  slnro,slnombre,slvalor,slbanco, slcam1,slcam2,slcam3,slmoneda,slcam4
  
    basesl := TData():New(,ruta+"SLOTS" )
    If basesl:Use() 
        basesl:SetOrder("NMAQ")
        basesl:GoTop()
    else
        MsgInfo('Error de apertura de archivo', 'Informe')
        return(.f.) 
    endif
     titulolistado := "Listado de Slots"
    CursorWait()
   
    
    PRINT oPrn NAME "Lista de Slots" PREVIEW MODAL 
        
        oPrn:SetPage(1)
        oPrn:SetPortrait()
    
    
        DEFINE FONT oFont11 NAME "TIMES NEW ROMAN" SIZE 0,-14 BOLD OF oPrn
        DEFINE FONT oFont12 NAME "HELVETICA" SIZE 0,-10 OF oPrn
        DEFINE FONT oFont13 NAME "HELVETICA" SIZE 0,-16 BOLD ITALIC  OF oPrn
        DEFINE FONT oFont14 NAME "Segoe UI" SIZE 0,-10    OF oPrn
        DEFINE FONT oFont15 NAME "TAHOMA" SIZE 0,-8 OF oPrn
        DEFINE FONT oFont16 NAME "CAMBRIA" SIZE 0,-10 BOLD ITALIC  OF oPrn
        DEFINE BRUSH oBrush COLOR CLR_WHITE 
        DEFINE PEN oPen WIDTH 1 COLOR CLR_BLACK
        
     
        aDesde := oPrn:Cmtr2Pix(0.5,2.5)
        aAncho := oPrn:Cmtr2Pix(3,2.5)
    
           
        cmt := 1
        PAGE 
              
        oPrn:RoundBox(2,8,3,14,0.3,0.3,oPen,CLR_WHITE,{"Qué hago mal ?", {oFont11 }, CLR_BLACK},"CM")

        cmt+=0.7 
        basesl:Gotop()   
    
        do while !basesl:Eof()
          
            slnro:=basesl:nslot
            slnombre:=basesl:snom
            slbanco:=basesl:cbanco
            slcam1:=basesl:cubre1
            slcam2:=basesl:cubre2
            slcam3:=basesl:cubre3
            slmoneda:= if(basesl:moneda="D",HBA("Dólares"), "Pesos")
          
            slvalor:= basesl:valor
            slcam4:= xTrim(slcam1)+" - "+xTrim(slcam2)+" - "+xTrim(slcam3)
            oPrn:CmSay( cmt,  3.2, slnro, oFont15,2, CLR_BLACK,,1)
                      
            cmt+=0.5
            SysRefresh()
          
            if cmt >=23
              // PieSlotPagina()
              //OtraSlotPagina()
               basesl:Skip()
            ELSE
               basesl:Skip()
            ENDIF
        ENDDO
      
   
    ENDPAGE

    PAGE
    ENDPAGE  

    ENDPRINT
    
    oFont11:END()
    oFont12:END()
    oFont13:END()
    oFont14:END()
    oFont15:END()
    oFont16:END()
    oBrush:End()
    oPen:End()    
    SysRefresh()
    
      
    basesl:Close()

 return(nil)
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ayuda tPrinter (Estoy viejoooo) :: Reply by Antonio Linares]]> 2025-02-16T23:02:33-07:00 2025-02-16T23:02:33-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45425&p=277707#p277707
Se genera un fuchero error.log ?

De ser así, por favor cópialo aqui, gracias]]>

Se genera un fuchero error.log ?

De ser así, por favor cópialo aqui, gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ayuda tPrinter (Estoy viejoooo) :: Reply by karinha]]> 2025-02-17T05:39:09-07:00 2025-02-17T05:39:09-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45425&p=277712#p277712
Gracias, tks.

Regards, saludos.]]>

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ayuda tPrinter (Estoy viejoooo) :: Reply by D.Fernandez]]> 2025-02-17T06:25:27-07:00 2025-02-17T06:25:27-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45425&p=277713#p277713 Aqui está

Code: Select all | Expand

Application Internal Error - C:\Fuentes\MasterForm\Masterform.Exe
Terminated at: 2025-02-17 10:23:28
Error irrecuperable 6005: Exception error:

    Exception Code:C0000005 ACCESS_VIOLATION
    Exception Address:6DD586A6
    EAX:75736956  EBX:00CFCF54  ECX:00000084  EDX:00000000
    ESI:00380032  EDI:00000000  EBP:00CFCE20
    CS:EIP:0023:6DD586A6  SS:ESP:002B:00CFCD90
    DS:002B  ES:002B  FS:0053  GS:002B
    Flags:00010293
    Exception Parameters: 00000000 75736962
    CS:EIP: 8A 40 0C 24 0F 3C 07 0F 85 89 07 00 00 B8 FF FF
    SS:ESP: 6DD58620 00000084 000F0D48 01B50356 00000000 00000002 00380032 003CF708 00CFCEE0 00101B98 00000000 00000000 00000004 00000003 0000013D 00000493

    C stack:
    EIP:     EBP:       Frame: OldEBP, RetAddr, Params...
    6DD586A6 00CFCE20   00CFCE4C 77277943 000F0D48 00000084 00000000 01B50356 00000084 DCBAABCD 00CFCF54 6DD58620
    77277943 00CFCE4C   00CFCF48 7726601D 6DD58620 000F0D48 00000084 00000000 01B50356 CD19CD34 6DD58620 000F0D48
    7726601D 00CFCF48   00CFCF94 772A1383 FFFF0A23 00000084 772A1383 6DD58620 00000000 00000084 00000000 01B50356
    772A1383 00CFCF94   00CFCFAC 772A1E9B 00000084 00000000 01B50356 00000001
    772A1E9B 00CFCFAC   00CFCFD0 00027237 FFFF0A23 000F0D48 00000084 00000000 01B50356 50000007 000EAE43
    00027237 00CFCFD0   00CFCFFC 77277943 000F0D48 00000084 00000000 01B50356 00000084 DCBAABCD 00CFD104 000271E0
    77277943 00CFCFFC   00CFD0F8 7726601D 000271E0 000F0D48 00000084 00000000 01B50356 CD19D284 000271E0 000F0D48
    7726601D 00CFD0F8   00CFD144 772A1383 77265D09 00000084 772A1383 000271E0 00000000 00000084 00000000 01B50356
    772A1383 00CFD144   00CFD15C 772A1E9B 00000084 00000000 01B50356 00000001
    772A1E9B 00CFD15C   00CFD17C 0004E299 000271E0 000F0D48 00000084 00000000 01B50356 000271E0
    0004E299 00CFD17C   00CFD198 0008DE55 000F0D48 00000084 00000000 01B50356 0000003F
    0008DE55 00CFD198   00CFD1C4 77277943 000F0D48 00000084 00000000 01B50356 00000084 DCBAABCD 00CFD2C8 0008DE30
    77277943 00CFD1C4   00CFD2C0 7726601D 0008DE30 000F0D48 00000084 00000000 01B50356 CD19D0BC 00003308 00000000
    7726601D 00CFD2C0   00CFD32C 77265AC0 00000084 77265AC0 0008DE30 00000000 00000084 00000000 01B50356 00AF3000
    77265AC0 00CFD32C   00CFD368 77272349 01995C90 00000000 00000084 00000000 01B50356 0008DE30 00CFD458 00370CEC
    77272349 00CFD368   00CFD3F0 77E5BA96 00CFD384 00000020 00CFE1B0 77E5B9E0 00CFD3A4 01995C90 00000000 00000084
    77E5BA96 00CFD3F0   00CFD42C 77271331 00000000 00000000 00000001 00000000 00000000 00370CEC 00000000 00120D8A
    77271331 00CFD42C   00CFD488 772AD26C 00CFD458 00000000 00000000 00000000 00000001 00000001 00370CEC 00000000
    772AD26C 00CFD488   00CFD4BC 772AD7B1 00000000 00000001 003CB028 00000000 001DA5F8 02F10004 07E904B0 00020000
    772AD7B1 00CFD4BC   00CFD4D4 772A4D17 00370CEC 000A1390 00000000 00000003


Modules:
00020000 005B0000 C:\Fuentes\MasterForm\Masterform.Exe
77DE0000 001BA000 C:\WINDOWS\SYSTEM32\ntdll.dll
76FC0000 000F0000 C:\WINDOWS\System32\KERNEL32.DLL
76140000 002A9000 C:\WINDOWS\System32\KERNELBASE.dll
77240000 001C5000 C:\WINDOWS\System32\USER32.dll
76BA0000 0001A000 C:\WINDOWS\System32\win32u.dll
77DA0000 00022000 C:\WINDOWS\System32\GDI32.dll
770C0000 000EB000 C:\WINDOWS\System32\gdi32full.dll
766F0000 00085000 C:\WINDOWS\System32\msvcp_win.dll
75E60000 00110000 C:\WINDOWS\System32\ucrtbase.dll
768C0000 000B4000 C:\WINDOWS\System32\COMDLG32.dll
76460000 0027F000 C:\WINDOWS\System32\combase.dll
77480000 000B9000 C:\WINDOWS\System32\RPCRT4.dll
6DCD0000 00227000 C:\WINDOWS\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.26100.3037_none_85b65d03f7afec7e\COMCTL32.dll
77660000 000C8000 C:\WINDOWS\System32\shcore.dll
6CBC0000 00090000 C:\WINDOWS\SYSTEM32\WINSPOOL.DRV
76780000 000C7000 C:\WINDOWS\System32\msvcrt.dll
76E40000 0004B000 C:\WINDOWS\System32\SHLWAPI.dll
77790000 005EB000 C:\WINDOWS\System32\SHELL32.dll
76E90000 0007F000 C:\WINDOWS\System32\ADVAPI32.dll
721B0000 00049000 C:\WINDOWS\SYSTEM32\cfgmgr32.dll
775B0000 00083000 C:\WINDOWS\System32\sechost.dll
76CE0000 00151000 C:\WINDOWS\System32\ole32.dll
75F80000 0009E000 C:\WINDOWS\System32\OLEAUT32.dll
77540000 00060000 C:\WINDOWS\System32\WS2_32.dll
6ECD0000 00019000 C:\WINDOWS\SYSTEM32\MPR.dll
752F0000 00008000 C:\WINDOWS\SYSTEM32\VERSION.dll
75730000 00006000 C:\WINDOWS\SYSTEM32\MSIMG32.dll
6CA10000 0016C000 C:\WINDOWS\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.26100.3037_none_b6a14fe95242664c\gdiplus.dll
5BE40000 0002E000 C:\WINDOWS\SYSTEM32\oledlg.dll
6EB70000 00033000 C:\WINDOWS\SYSTEM32\WINMM.dll
67A10000 00008000 C:\WINDOWS\SYSTEM32\WSOCK32.dll
76A00000 00025000 C:\WINDOWS\System32\IMM32.DLL
74790000 00082000 C:\WINDOWS\system32\uxtheme.dll
76BC0000 00117000 C:\WINDOWS\System32\MSCTF.dll
6AF90000 0009F000 C:\WINDOWS\SYSTEM32\TextShaping.dll
75360000 00014000 C:\WINDOWS\SYSTEM32\kernel.appcore.dll
77410000 00069000 C:\WINDOWS\System32\bcryptPrimitives.dll
68B30000 00101000 C:\WINDOWS\SYSTEM32\textinputframework.dll
6A940000 000DC000 C:\WINDOWS\SYSTEM32\CoreMessaging.dll
5C740000 00292000 C:\WINDOWS\SYSTEM32\CoreUIComponents.dll
720B0000 000F9000 C:\WINDOWS\SYSTEM32\wintypes.dll
72290000 0000B000 C:\WINDOWS\SYSTEM32\CRYPTBASE.DLL
10000000 00341000 C:\WINDOWS\SYSTEM32\freeimage.dll
73BC0000 006B7000 C:\WINDOWS\SYSTEM32\Windows.Storage.dll
6B040000 001DE000 C:\WINDOWS\SYSTEM32\WindowsCodecs.dll
771B0000 00081000 C:\WINDOWS\System32\clbcatq.dll
6F1B0000 00025000 C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL
77640000 00007000 C:\WINDOWS\System32\NSI.dll
6F050000 00018000 C:\WINDOWS\SYSTEM32\dhcpcsvc6.DLL
6F030000 0001D000 C:\WINDOWS\SYSTEM32\dhcpcsvc.DLL
6F0D0000 000DB000 C:\WINDOWS\SYSTEM32\DNSAPI.dll
5F000000 00011000 C:\WINDOWS\SYSTEM32\CTL3D32.DLL

Called from DIALOGBOXINDIRECT(0) in .\source\classes\dialog.prg
Called from TDIALOG:ACTIVATE(325) in .\source\classes\dialog.prg
Called from TPREVIEW:PRINTPAGE(1599) in .\source\classes\rpreview.prg
Called from (b)TPREVIEW_BUILDBUTTONBAR(367) in .\source\classes\rpreview.prg
Called from TBTNBMP:CLICK(816) in .\source\classes\btnbmp.prg
Called from TBTNBMP:LBUTTONUP(1100) in .\source\classes\btnbmp.prg
Called from TCONTROL:HANDLEEVENT(1867) in .\source\classes\control.prg
Called from TBTNBMP:HANDLEEVENT(2145) in .\source\classes\btnbmp.prg
Called from _FWH(3719) in .\source\classes\window.prg
Called from SYSREFRESH(0) in emple.prg
Called from STOPUNTIL(70) in .\source\function\msgrun.prg
Called from TPREVIEW:ACTIVATE(179) in .\source\classes\rpreview.prg
Called from RPREVIEW(1880) in .\source\classes\rpreview.prg
Called from (b)TPRINTER(327) in .\source\classes\printer.prg
Called from TPRINTER:PREVIEW(0) in .\source\classes\printer.prg
Called from PRINTEND(2067) in .\source\classes\printer.prg
Called from EMPLEIMPRE(936) in emple.prg
Called from (b)HACEBAREMPLE(342) in emple.prg
Called from TBTNBMP:CLICK(816) in .\source\classes\btnbmp.prg
Called from TBTNBMP:LBUTTONUP(1103) in .\source\classes\btnbmp.prg
Called from TCONTROL:HANDLEEVENT(1867) in .\source\classes\control.prg
Called from TBTNBMP:HANDLEEVENT(2145) in .\source\classes\btnbmp.prg
Called from _FWH(3719) in .\source\classes\window.prg
Called from WINRUN(0) in .\source\classes\window.prg
Called from TMDIFRAME:ACTIVATE(1137) in .\source\classes\window.prg
Called from MAIN(262) in masterform.prg
------------------------------------------------------------------------
]]>
Aqui está

Code: Select all | Expand

Application Internal Error - C:\Fuentes\MasterForm\Masterform.Exe
Terminated at: 2025-02-17 10:23:28
Error irrecuperable 6005: Exception error:

    Exception Code:C0000005 ACCESS_VIOLATION
    Exception Address:6DD586A6
    EAX:75736956  EBX:00CFCF54  ECX:00000084  EDX:00000000
    ESI:00380032  EDI:00000000  EBP:00CFCE20
    CS:EIP:0023:6DD586A6  SS:ESP:002B:00CFCD90
    DS:002B  ES:002B  FS:0053  GS:002B
    Flags:00010293
    Exception Parameters: 00000000 75736962
    CS:EIP: 8A 40 0C 24 0F 3C 07 0F 85 89 07 00 00 B8 FF FF
    SS:ESP: 6DD58620 00000084 000F0D48 01B50356 00000000 00000002 00380032 003CF708 00CFCEE0 00101B98 00000000 00000000 00000004 00000003 0000013D 00000493

    C stack:
    EIP:     EBP:       Frame: OldEBP, RetAddr, Params...
    6DD586A6 00CFCE20   00CFCE4C 77277943 000F0D48 00000084 00000000 01B50356 00000084 DCBAABCD 00CFCF54 6DD58620
    77277943 00CFCE4C   00CFCF48 7726601D 6DD58620 000F0D48 00000084 00000000 01B50356 CD19CD34 6DD58620 000F0D48
    7726601D 00CFCF48   00CFCF94 772A1383 FFFF0A23 00000084 772A1383 6DD58620 00000000 00000084 00000000 01B50356
    772A1383 00CFCF94   00CFCFAC 772A1E9B 00000084 00000000 01B50356 00000001
    772A1E9B 00CFCFAC   00CFCFD0 00027237 FFFF0A23 000F0D48 00000084 00000000 01B50356 50000007 000EAE43
    00027237 00CFCFD0   00CFCFFC 77277943 000F0D48 00000084 00000000 01B50356 00000084 DCBAABCD 00CFD104 000271E0
    77277943 00CFCFFC   00CFD0F8 7726601D 000271E0 000F0D48 00000084 00000000 01B50356 CD19D284 000271E0 000F0D48
    7726601D 00CFD0F8   00CFD144 772A1383 77265D09 00000084 772A1383 000271E0 00000000 00000084 00000000 01B50356
    772A1383 00CFD144   00CFD15C 772A1E9B 00000084 00000000 01B50356 00000001
    772A1E9B 00CFD15C   00CFD17C 0004E299 000271E0 000F0D48 00000084 00000000 01B50356 000271E0
    0004E299 00CFD17C   00CFD198 0008DE55 000F0D48 00000084 00000000 01B50356 0000003F
    0008DE55 00CFD198   00CFD1C4 77277943 000F0D48 00000084 00000000 01B50356 00000084 DCBAABCD 00CFD2C8 0008DE30
    77277943 00CFD1C4   00CFD2C0 7726601D 0008DE30 000F0D48 00000084 00000000 01B50356 CD19D0BC 00003308 00000000
    7726601D 00CFD2C0   00CFD32C 77265AC0 00000084 77265AC0 0008DE30 00000000 00000084 00000000 01B50356 00AF3000
    77265AC0 00CFD32C   00CFD368 77272349 01995C90 00000000 00000084 00000000 01B50356 0008DE30 00CFD458 00370CEC
    77272349 00CFD368   00CFD3F0 77E5BA96 00CFD384 00000020 00CFE1B0 77E5B9E0 00CFD3A4 01995C90 00000000 00000084
    77E5BA96 00CFD3F0   00CFD42C 77271331 00000000 00000000 00000001 00000000 00000000 00370CEC 00000000 00120D8A
    77271331 00CFD42C   00CFD488 772AD26C 00CFD458 00000000 00000000 00000000 00000001 00000001 00370CEC 00000000
    772AD26C 00CFD488   00CFD4BC 772AD7B1 00000000 00000001 003CB028 00000000 001DA5F8 02F10004 07E904B0 00020000
    772AD7B1 00CFD4BC   00CFD4D4 772A4D17 00370CEC 000A1390 00000000 00000003


Modules:
00020000 005B0000 C:\Fuentes\MasterForm\Masterform.Exe
77DE0000 001BA000 C:\WINDOWS\SYSTEM32\ntdll.dll
76FC0000 000F0000 C:\WINDOWS\System32\KERNEL32.DLL
76140000 002A9000 C:\WINDOWS\System32\KERNELBASE.dll
77240000 001C5000 C:\WINDOWS\System32\USER32.dll
76BA0000 0001A000 C:\WINDOWS\System32\win32u.dll
77DA0000 00022000 C:\WINDOWS\System32\GDI32.dll
770C0000 000EB000 C:\WINDOWS\System32\gdi32full.dll
766F0000 00085000 C:\WINDOWS\System32\msvcp_win.dll
75E60000 00110000 C:\WINDOWS\System32\ucrtbase.dll
768C0000 000B4000 C:\WINDOWS\System32\COMDLG32.dll
76460000 0027F000 C:\WINDOWS\System32\combase.dll
77480000 000B9000 C:\WINDOWS\System32\RPCRT4.dll
6DCD0000 00227000 C:\WINDOWS\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.26100.3037_none_85b65d03f7afec7e\COMCTL32.dll
77660000 000C8000 C:\WINDOWS\System32\shcore.dll
6CBC0000 00090000 C:\WINDOWS\SYSTEM32\WINSPOOL.DRV
76780000 000C7000 C:\WINDOWS\System32\msvcrt.dll
76E40000 0004B000 C:\WINDOWS\System32\SHLWAPI.dll
77790000 005EB000 C:\WINDOWS\System32\SHELL32.dll
76E90000 0007F000 C:\WINDOWS\System32\ADVAPI32.dll
721B0000 00049000 C:\WINDOWS\SYSTEM32\cfgmgr32.dll
775B0000 00083000 C:\WINDOWS\System32\sechost.dll
76CE0000 00151000 C:\WINDOWS\System32\ole32.dll
75F80000 0009E000 C:\WINDOWS\System32\OLEAUT32.dll
77540000 00060000 C:\WINDOWS\System32\WS2_32.dll
6ECD0000 00019000 C:\WINDOWS\SYSTEM32\MPR.dll
752F0000 00008000 C:\WINDOWS\SYSTEM32\VERSION.dll
75730000 00006000 C:\WINDOWS\SYSTEM32\MSIMG32.dll
6CA10000 0016C000 C:\WINDOWS\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.26100.3037_none_b6a14fe95242664c\gdiplus.dll
5BE40000 0002E000 C:\WINDOWS\SYSTEM32\oledlg.dll
6EB70000 00033000 C:\WINDOWS\SYSTEM32\WINMM.dll
67A10000 00008000 C:\WINDOWS\SYSTEM32\WSOCK32.dll
76A00000 00025000 C:\WINDOWS\System32\IMM32.DLL
74790000 00082000 C:\WINDOWS\system32\uxtheme.dll
76BC0000 00117000 C:\WINDOWS\System32\MSCTF.dll
6AF90000 0009F000 C:\WINDOWS\SYSTEM32\TextShaping.dll
75360000 00014000 C:\WINDOWS\SYSTEM32\kernel.appcore.dll
77410000 00069000 C:\WINDOWS\System32\bcryptPrimitives.dll
68B30000 00101000 C:\WINDOWS\SYSTEM32\textinputframework.dll
6A940000 000DC000 C:\WINDOWS\SYSTEM32\CoreMessaging.dll
5C740000 00292000 C:\WINDOWS\SYSTEM32\CoreUIComponents.dll
720B0000 000F9000 C:\WINDOWS\SYSTEM32\wintypes.dll
72290000 0000B000 C:\WINDOWS\SYSTEM32\CRYPTBASE.DLL
10000000 00341000 C:\WINDOWS\SYSTEM32\freeimage.dll
73BC0000 006B7000 C:\WINDOWS\SYSTEM32\Windows.Storage.dll
6B040000 001DE000 C:\WINDOWS\SYSTEM32\WindowsCodecs.dll
771B0000 00081000 C:\WINDOWS\System32\clbcatq.dll
6F1B0000 00025000 C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL
77640000 00007000 C:\WINDOWS\System32\NSI.dll
6F050000 00018000 C:\WINDOWS\SYSTEM32\dhcpcsvc6.DLL
6F030000 0001D000 C:\WINDOWS\SYSTEM32\dhcpcsvc.DLL
6F0D0000 000DB000 C:\WINDOWS\SYSTEM32\DNSAPI.dll
5F000000 00011000 C:\WINDOWS\SYSTEM32\CTL3D32.DLL

Called from DIALOGBOXINDIRECT(0) in .\source\classes\dialog.prg
Called from TDIALOG:ACTIVATE(325) in .\source\classes\dialog.prg
Called from TPREVIEW:PRINTPAGE(1599) in .\source\classes\rpreview.prg
Called from (b)TPREVIEW_BUILDBUTTONBAR(367) in .\source\classes\rpreview.prg
Called from TBTNBMP:CLICK(816) in .\source\classes\btnbmp.prg
Called from TBTNBMP:LBUTTONUP(1100) in .\source\classes\btnbmp.prg
Called from TCONTROL:HANDLEEVENT(1867) in .\source\classes\control.prg
Called from TBTNBMP:HANDLEEVENT(2145) in .\source\classes\btnbmp.prg
Called from _FWH(3719) in .\source\classes\window.prg
Called from SYSREFRESH(0) in emple.prg
Called from STOPUNTIL(70) in .\source\function\msgrun.prg
Called from TPREVIEW:ACTIVATE(179) in .\source\classes\rpreview.prg
Called from RPREVIEW(1880) in .\source\classes\rpreview.prg
Called from (b)TPRINTER(327) in .\source\classes\printer.prg
Called from TPRINTER:PREVIEW(0) in .\source\classes\printer.prg
Called from PRINTEND(2067) in .\source\classes\printer.prg
Called from EMPLEIMPRE(936) in emple.prg
Called from (b)HACEBAREMPLE(342) in emple.prg
Called from TBTNBMP:CLICK(816) in .\source\classes\btnbmp.prg
Called from TBTNBMP:LBUTTONUP(1103) in .\source\classes\btnbmp.prg
Called from TCONTROL:HANDLEEVENT(1867) in .\source\classes\control.prg
Called from TBTNBMP:HANDLEEVENT(2145) in .\source\classes\btnbmp.prg
Called from _FWH(3719) in .\source\classes\window.prg
Called from WINRUN(0) in .\source\classes\window.prg
Called from TMDIFRAME:ACTIVATE(1137) in .\source\classes\window.prg
Called from MAIN(262) in masterform.prg
------------------------------------------------------------------------
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ayuda tPrinter (Estoy viejoooo) :: Reply by D.Fernandez]]> 2025-02-17T06:25:34-07:00 2025-02-17T06:25:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45425&p=277714#p277714 Aqui está

Code: Select all | Expand

Application Internal Error - C:\Fuentes\MasterForm\Masterform.Exe
Terminated at: 2025-02-17 10:23:28
Error irrecuperable 6005: Exception error:

    Exception Code:C0000005 ACCESS_VIOLATION
    Exception Address:6DD586A6
    EAX:75736956  EBX:00CFCF54  ECX:00000084  EDX:00000000
    ESI:00380032  EDI:00000000  EBP:00CFCE20
    CS:EIP:0023:6DD586A6  SS:ESP:002B:00CFCD90
    DS:002B  ES:002B  FS:0053  GS:002B
    Flags:00010293
    Exception Parameters: 00000000 75736962
    CS:EIP: 8A 40 0C 24 0F 3C 07 0F 85 89 07 00 00 B8 FF FF
    SS:ESP: 6DD58620 00000084 000F0D48 01B50356 00000000 00000002 00380032 003CF708 00CFCEE0 00101B98 00000000 00000000 00000004 00000003 0000013D 00000493

    C stack:
    EIP:     EBP:       Frame: OldEBP, RetAddr, Params...
    6DD586A6 00CFCE20   00CFCE4C 77277943 000F0D48 00000084 00000000 01B50356 00000084 DCBAABCD 00CFCF54 6DD58620
    77277943 00CFCE4C   00CFCF48 7726601D 6DD58620 000F0D48 00000084 00000000 01B50356 CD19CD34 6DD58620 000F0D48
    7726601D 00CFCF48   00CFCF94 772A1383 FFFF0A23 00000084 772A1383 6DD58620 00000000 00000084 00000000 01B50356
    772A1383 00CFCF94   00CFCFAC 772A1E9B 00000084 00000000 01B50356 00000001
    772A1E9B 00CFCFAC   00CFCFD0 00027237 FFFF0A23 000F0D48 00000084 00000000 01B50356 50000007 000EAE43
    00027237 00CFCFD0   00CFCFFC 77277943 000F0D48 00000084 00000000 01B50356 00000084 DCBAABCD 00CFD104 000271E0
    77277943 00CFCFFC   00CFD0F8 7726601D 000271E0 000F0D48 00000084 00000000 01B50356 CD19D284 000271E0 000F0D48
    7726601D 00CFD0F8   00CFD144 772A1383 77265D09 00000084 772A1383 000271E0 00000000 00000084 00000000 01B50356
    772A1383 00CFD144   00CFD15C 772A1E9B 00000084 00000000 01B50356 00000001
    772A1E9B 00CFD15C   00CFD17C 0004E299 000271E0 000F0D48 00000084 00000000 01B50356 000271E0
    0004E299 00CFD17C   00CFD198 0008DE55 000F0D48 00000084 00000000 01B50356 0000003F
    0008DE55 00CFD198   00CFD1C4 77277943 000F0D48 00000084 00000000 01B50356 00000084 DCBAABCD 00CFD2C8 0008DE30
    77277943 00CFD1C4   00CFD2C0 7726601D 0008DE30 000F0D48 00000084 00000000 01B50356 CD19D0BC 00003308 00000000
    7726601D 00CFD2C0   00CFD32C 77265AC0 00000084 77265AC0 0008DE30 00000000 00000084 00000000 01B50356 00AF3000
    77265AC0 00CFD32C   00CFD368 77272349 01995C90 00000000 00000084 00000000 01B50356 0008DE30 00CFD458 00370CEC
    77272349 00CFD368   00CFD3F0 77E5BA96 00CFD384 00000020 00CFE1B0 77E5B9E0 00CFD3A4 01995C90 00000000 00000084
    77E5BA96 00CFD3F0   00CFD42C 77271331 00000000 00000000 00000001 00000000 00000000 00370CEC 00000000 00120D8A
    77271331 00CFD42C   00CFD488 772AD26C 00CFD458 00000000 00000000 00000000 00000001 00000001 00370CEC 00000000
    772AD26C 00CFD488   00CFD4BC 772AD7B1 00000000 00000001 003CB028 00000000 001DA5F8 02F10004 07E904B0 00020000
    772AD7B1 00CFD4BC   00CFD4D4 772A4D17 00370CEC 000A1390 00000000 00000003


Modules:
00020000 005B0000 C:\Fuentes\MasterForm\Masterform.Exe
77DE0000 001BA000 C:\WINDOWS\SYSTEM32\ntdll.dll
76FC0000 000F0000 C:\WINDOWS\System32\KERNEL32.DLL
76140000 002A9000 C:\WINDOWS\System32\KERNELBASE.dll
77240000 001C5000 C:\WINDOWS\System32\USER32.dll
76BA0000 0001A000 C:\WINDOWS\System32\win32u.dll
77DA0000 00022000 C:\WINDOWS\System32\GDI32.dll
770C0000 000EB000 C:\WINDOWS\System32\gdi32full.dll
766F0000 00085000 C:\WINDOWS\System32\msvcp_win.dll
75E60000 00110000 C:\WINDOWS\System32\ucrtbase.dll
768C0000 000B4000 C:\WINDOWS\System32\COMDLG32.dll
76460000 0027F000 C:\WINDOWS\System32\combase.dll
77480000 000B9000 C:\WINDOWS\System32\RPCRT4.dll
6DCD0000 00227000 C:\WINDOWS\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.26100.3037_none_85b65d03f7afec7e\COMCTL32.dll
77660000 000C8000 C:\WINDOWS\System32\shcore.dll
6CBC0000 00090000 C:\WINDOWS\SYSTEM32\WINSPOOL.DRV
76780000 000C7000 C:\WINDOWS\System32\msvcrt.dll
76E40000 0004B000 C:\WINDOWS\System32\SHLWAPI.dll
77790000 005EB000 C:\WINDOWS\System32\SHELL32.dll
76E90000 0007F000 C:\WINDOWS\System32\ADVAPI32.dll
721B0000 00049000 C:\WINDOWS\SYSTEM32\cfgmgr32.dll
775B0000 00083000 C:\WINDOWS\System32\sechost.dll
76CE0000 00151000 C:\WINDOWS\System32\ole32.dll
75F80000 0009E000 C:\WINDOWS\System32\OLEAUT32.dll
77540000 00060000 C:\WINDOWS\System32\WS2_32.dll
6ECD0000 00019000 C:\WINDOWS\SYSTEM32\MPR.dll
752F0000 00008000 C:\WINDOWS\SYSTEM32\VERSION.dll
75730000 00006000 C:\WINDOWS\SYSTEM32\MSIMG32.dll
6CA10000 0016C000 C:\WINDOWS\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.26100.3037_none_b6a14fe95242664c\gdiplus.dll
5BE40000 0002E000 C:\WINDOWS\SYSTEM32\oledlg.dll
6EB70000 00033000 C:\WINDOWS\SYSTEM32\WINMM.dll
67A10000 00008000 C:\WINDOWS\SYSTEM32\WSOCK32.dll
76A00000 00025000 C:\WINDOWS\System32\IMM32.DLL
74790000 00082000 C:\WINDOWS\system32\uxtheme.dll
76BC0000 00117000 C:\WINDOWS\System32\MSCTF.dll
6AF90000 0009F000 C:\WINDOWS\SYSTEM32\TextShaping.dll
75360000 00014000 C:\WINDOWS\SYSTEM32\kernel.appcore.dll
77410000 00069000 C:\WINDOWS\System32\bcryptPrimitives.dll
68B30000 00101000 C:\WINDOWS\SYSTEM32\textinputframework.dll
6A940000 000DC000 C:\WINDOWS\SYSTEM32\CoreMessaging.dll
5C740000 00292000 C:\WINDOWS\SYSTEM32\CoreUIComponents.dll
720B0000 000F9000 C:\WINDOWS\SYSTEM32\wintypes.dll
72290000 0000B000 C:\WINDOWS\SYSTEM32\CRYPTBASE.DLL
10000000 00341000 C:\WINDOWS\SYSTEM32\freeimage.dll
73BC0000 006B7000 C:\WINDOWS\SYSTEM32\Windows.Storage.dll
6B040000 001DE000 C:\WINDOWS\SYSTEM32\WindowsCodecs.dll
771B0000 00081000 C:\WINDOWS\System32\clbcatq.dll
6F1B0000 00025000 C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL
77640000 00007000 C:\WINDOWS\System32\NSI.dll
6F050000 00018000 C:\WINDOWS\SYSTEM32\dhcpcsvc6.DLL
6F030000 0001D000 C:\WINDOWS\SYSTEM32\dhcpcsvc.DLL
6F0D0000 000DB000 C:\WINDOWS\SYSTEM32\DNSAPI.dll
5F000000 00011000 C:\WINDOWS\SYSTEM32\CTL3D32.DLL

Called from DIALOGBOXINDIRECT(0) in .\source\classes\dialog.prg
Called from TDIALOG:ACTIVATE(325) in .\source\classes\dialog.prg
Called from TPREVIEW:PRINTPAGE(1599) in .\source\classes\rpreview.prg
Called from (b)TPREVIEW_BUILDBUTTONBAR(367) in .\source\classes\rpreview.prg
Called from TBTNBMP:CLICK(816) in .\source\classes\btnbmp.prg
Called from TBTNBMP:LBUTTONUP(1100) in .\source\classes\btnbmp.prg
Called from TCONTROL:HANDLEEVENT(1867) in .\source\classes\control.prg
Called from TBTNBMP:HANDLEEVENT(2145) in .\source\classes\btnbmp.prg
Called from _FWH(3719) in .\source\classes\window.prg
Called from SYSREFRESH(0) in emple.prg
Called from STOPUNTIL(70) in .\source\function\msgrun.prg
Called from TPREVIEW:ACTIVATE(179) in .\source\classes\rpreview.prg
Called from RPREVIEW(1880) in .\source\classes\rpreview.prg
Called from (b)TPRINTER(327) in .\source\classes\printer.prg
Called from TPRINTER:PREVIEW(0) in .\source\classes\printer.prg
Called from PRINTEND(2067) in .\source\classes\printer.prg
Called from EMPLEIMPRE(936) in emple.prg
Called from (b)HACEBAREMPLE(342) in emple.prg
Called from TBTNBMP:CLICK(816) in .\source\classes\btnbmp.prg
Called from TBTNBMP:LBUTTONUP(1103) in .\source\classes\btnbmp.prg
Called from TCONTROL:HANDLEEVENT(1867) in .\source\classes\control.prg
Called from TBTNBMP:HANDLEEVENT(2145) in .\source\classes\btnbmp.prg
Called from _FWH(3719) in .\source\classes\window.prg
Called from WINRUN(0) in .\source\classes\window.prg
Called from TMDIFRAME:ACTIVATE(1137) in .\source\classes\window.prg
Called from MAIN(262) in masterform.prg
------------------------------------------------------------------------
]]>
Aqui está

Code: Select all | Expand

Application Internal Error - C:\Fuentes\MasterForm\Masterform.Exe
Terminated at: 2025-02-17 10:23:28
Error irrecuperable 6005: Exception error:

    Exception Code:C0000005 ACCESS_VIOLATION
    Exception Address:6DD586A6
    EAX:75736956  EBX:00CFCF54  ECX:00000084  EDX:00000000
    ESI:00380032  EDI:00000000  EBP:00CFCE20
    CS:EIP:0023:6DD586A6  SS:ESP:002B:00CFCD90
    DS:002B  ES:002B  FS:0053  GS:002B
    Flags:00010293
    Exception Parameters: 00000000 75736962
    CS:EIP: 8A 40 0C 24 0F 3C 07 0F 85 89 07 00 00 B8 FF FF
    SS:ESP: 6DD58620 00000084 000F0D48 01B50356 00000000 00000002 00380032 003CF708 00CFCEE0 00101B98 00000000 00000000 00000004 00000003 0000013D 00000493

    C stack:
    EIP:     EBP:       Frame: OldEBP, RetAddr, Params...
    6DD586A6 00CFCE20   00CFCE4C 77277943 000F0D48 00000084 00000000 01B50356 00000084 DCBAABCD 00CFCF54 6DD58620
    77277943 00CFCE4C   00CFCF48 7726601D 6DD58620 000F0D48 00000084 00000000 01B50356 CD19CD34 6DD58620 000F0D48
    7726601D 00CFCF48   00CFCF94 772A1383 FFFF0A23 00000084 772A1383 6DD58620 00000000 00000084 00000000 01B50356
    772A1383 00CFCF94   00CFCFAC 772A1E9B 00000084 00000000 01B50356 00000001
    772A1E9B 00CFCFAC   00CFCFD0 00027237 FFFF0A23 000F0D48 00000084 00000000 01B50356 50000007 000EAE43
    00027237 00CFCFD0   00CFCFFC 77277943 000F0D48 00000084 00000000 01B50356 00000084 DCBAABCD 00CFD104 000271E0
    77277943 00CFCFFC   00CFD0F8 7726601D 000271E0 000F0D48 00000084 00000000 01B50356 CD19D284 000271E0 000F0D48
    7726601D 00CFD0F8   00CFD144 772A1383 77265D09 00000084 772A1383 000271E0 00000000 00000084 00000000 01B50356
    772A1383 00CFD144   00CFD15C 772A1E9B 00000084 00000000 01B50356 00000001
    772A1E9B 00CFD15C   00CFD17C 0004E299 000271E0 000F0D48 00000084 00000000 01B50356 000271E0
    0004E299 00CFD17C   00CFD198 0008DE55 000F0D48 00000084 00000000 01B50356 0000003F
    0008DE55 00CFD198   00CFD1C4 77277943 000F0D48 00000084 00000000 01B50356 00000084 DCBAABCD 00CFD2C8 0008DE30
    77277943 00CFD1C4   00CFD2C0 7726601D 0008DE30 000F0D48 00000084 00000000 01B50356 CD19D0BC 00003308 00000000
    7726601D 00CFD2C0   00CFD32C 77265AC0 00000084 77265AC0 0008DE30 00000000 00000084 00000000 01B50356 00AF3000
    77265AC0 00CFD32C   00CFD368 77272349 01995C90 00000000 00000084 00000000 01B50356 0008DE30 00CFD458 00370CEC
    77272349 00CFD368   00CFD3F0 77E5BA96 00CFD384 00000020 00CFE1B0 77E5B9E0 00CFD3A4 01995C90 00000000 00000084
    77E5BA96 00CFD3F0   00CFD42C 77271331 00000000 00000000 00000001 00000000 00000000 00370CEC 00000000 00120D8A
    77271331 00CFD42C   00CFD488 772AD26C 00CFD458 00000000 00000000 00000000 00000001 00000001 00370CEC 00000000
    772AD26C 00CFD488   00CFD4BC 772AD7B1 00000000 00000001 003CB028 00000000 001DA5F8 02F10004 07E904B0 00020000
    772AD7B1 00CFD4BC   00CFD4D4 772A4D17 00370CEC 000A1390 00000000 00000003


Modules:
00020000 005B0000 C:\Fuentes\MasterForm\Masterform.Exe
77DE0000 001BA000 C:\WINDOWS\SYSTEM32\ntdll.dll
76FC0000 000F0000 C:\WINDOWS\System32\KERNEL32.DLL
76140000 002A9000 C:\WINDOWS\System32\KERNELBASE.dll
77240000 001C5000 C:\WINDOWS\System32\USER32.dll
76BA0000 0001A000 C:\WINDOWS\System32\win32u.dll
77DA0000 00022000 C:\WINDOWS\System32\GDI32.dll
770C0000 000EB000 C:\WINDOWS\System32\gdi32full.dll
766F0000 00085000 C:\WINDOWS\System32\msvcp_win.dll
75E60000 00110000 C:\WINDOWS\System32\ucrtbase.dll
768C0000 000B4000 C:\WINDOWS\System32\COMDLG32.dll
76460000 0027F000 C:\WINDOWS\System32\combase.dll
77480000 000B9000 C:\WINDOWS\System32\RPCRT4.dll
6DCD0000 00227000 C:\WINDOWS\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.26100.3037_none_85b65d03f7afec7e\COMCTL32.dll
77660000 000C8000 C:\WINDOWS\System32\shcore.dll
6CBC0000 00090000 C:\WINDOWS\SYSTEM32\WINSPOOL.DRV
76780000 000C7000 C:\WINDOWS\System32\msvcrt.dll
76E40000 0004B000 C:\WINDOWS\System32\SHLWAPI.dll
77790000 005EB000 C:\WINDOWS\System32\SHELL32.dll
76E90000 0007F000 C:\WINDOWS\System32\ADVAPI32.dll
721B0000 00049000 C:\WINDOWS\SYSTEM32\cfgmgr32.dll
775B0000 00083000 C:\WINDOWS\System32\sechost.dll
76CE0000 00151000 C:\WINDOWS\System32\ole32.dll
75F80000 0009E000 C:\WINDOWS\System32\OLEAUT32.dll
77540000 00060000 C:\WINDOWS\System32\WS2_32.dll
6ECD0000 00019000 C:\WINDOWS\SYSTEM32\MPR.dll
752F0000 00008000 C:\WINDOWS\SYSTEM32\VERSION.dll
75730000 00006000 C:\WINDOWS\SYSTEM32\MSIMG32.dll
6CA10000 0016C000 C:\WINDOWS\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.26100.3037_none_b6a14fe95242664c\gdiplus.dll
5BE40000 0002E000 C:\WINDOWS\SYSTEM32\oledlg.dll
6EB70000 00033000 C:\WINDOWS\SYSTEM32\WINMM.dll
67A10000 00008000 C:\WINDOWS\SYSTEM32\WSOCK32.dll
76A00000 00025000 C:\WINDOWS\System32\IMM32.DLL
74790000 00082000 C:\WINDOWS\system32\uxtheme.dll
76BC0000 00117000 C:\WINDOWS\System32\MSCTF.dll
6AF90000 0009F000 C:\WINDOWS\SYSTEM32\TextShaping.dll
75360000 00014000 C:\WINDOWS\SYSTEM32\kernel.appcore.dll
77410000 00069000 C:\WINDOWS\System32\bcryptPrimitives.dll
68B30000 00101000 C:\WINDOWS\SYSTEM32\textinputframework.dll
6A940000 000DC000 C:\WINDOWS\SYSTEM32\CoreMessaging.dll
5C740000 00292000 C:\WINDOWS\SYSTEM32\CoreUIComponents.dll
720B0000 000F9000 C:\WINDOWS\SYSTEM32\wintypes.dll
72290000 0000B000 C:\WINDOWS\SYSTEM32\CRYPTBASE.DLL
10000000 00341000 C:\WINDOWS\SYSTEM32\freeimage.dll
73BC0000 006B7000 C:\WINDOWS\SYSTEM32\Windows.Storage.dll
6B040000 001DE000 C:\WINDOWS\SYSTEM32\WindowsCodecs.dll
771B0000 00081000 C:\WINDOWS\System32\clbcatq.dll
6F1B0000 00025000 C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL
77640000 00007000 C:\WINDOWS\System32\NSI.dll
6F050000 00018000 C:\WINDOWS\SYSTEM32\dhcpcsvc6.DLL
6F030000 0001D000 C:\WINDOWS\SYSTEM32\dhcpcsvc.DLL
6F0D0000 000DB000 C:\WINDOWS\SYSTEM32\DNSAPI.dll
5F000000 00011000 C:\WINDOWS\SYSTEM32\CTL3D32.DLL

Called from DIALOGBOXINDIRECT(0) in .\source\classes\dialog.prg
Called from TDIALOG:ACTIVATE(325) in .\source\classes\dialog.prg
Called from TPREVIEW:PRINTPAGE(1599) in .\source\classes\rpreview.prg
Called from (b)TPREVIEW_BUILDBUTTONBAR(367) in .\source\classes\rpreview.prg
Called from TBTNBMP:CLICK(816) in .\source\classes\btnbmp.prg
Called from TBTNBMP:LBUTTONUP(1100) in .\source\classes\btnbmp.prg
Called from TCONTROL:HANDLEEVENT(1867) in .\source\classes\control.prg
Called from TBTNBMP:HANDLEEVENT(2145) in .\source\classes\btnbmp.prg
Called from _FWH(3719) in .\source\classes\window.prg
Called from SYSREFRESH(0) in emple.prg
Called from STOPUNTIL(70) in .\source\function\msgrun.prg
Called from TPREVIEW:ACTIVATE(179) in .\source\classes\rpreview.prg
Called from RPREVIEW(1880) in .\source\classes\rpreview.prg
Called from (b)TPRINTER(327) in .\source\classes\printer.prg
Called from TPRINTER:PREVIEW(0) in .\source\classes\printer.prg
Called from PRINTEND(2067) in .\source\classes\printer.prg
Called from EMPLEIMPRE(936) in emple.prg
Called from (b)HACEBAREMPLE(342) in emple.prg
Called from TBTNBMP:CLICK(816) in .\source\classes\btnbmp.prg
Called from TBTNBMP:LBUTTONUP(1103) in .\source\classes\btnbmp.prg
Called from TCONTROL:HANDLEEVENT(1867) in .\source\classes\control.prg
Called from TBTNBMP:HANDLEEVENT(2145) in .\source\classes\btnbmp.prg
Called from _FWH(3719) in .\source\classes\window.prg
Called from WINRUN(0) in .\source\classes\window.prg
Called from TMDIFRAME:ACTIVATE(1137) in .\source\classes\window.prg
Called from MAIN(262) in masterform.prg
------------------------------------------------------------------------
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ayuda tPrinter (Estoy viejoooo) :: Reply by D.Fernandez]]> 2025-02-17T06:26:05-07:00 2025-02-17T06:26:05-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45425&p=277715#p277715 Aqui está

Code: Select all | Expand

Application Internal Error - C:\Fuentes\MasterForm\Masterform.Exe
Terminated at: 2025-02-17 10:23:28
Error irrecuperable 6005: Exception error:

    Exception Code:C0000005 ACCESS_VIOLATION
    Exception Address:6DD586A6
    EAX:75736956  EBX:00CFCF54  ECX:00000084  EDX:00000000
    ESI:00380032  EDI:00000000  EBP:00CFCE20
    CS:EIP:0023:6DD586A6  SS:ESP:002B:00CFCD90
    DS:002B  ES:002B  FS:0053  GS:002B
    Flags:00010293
    Exception Parameters: 00000000 75736962
    CS:EIP: 8A 40 0C 24 0F 3C 07 0F 85 89 07 00 00 B8 FF FF
    SS:ESP: 6DD58620 00000084 000F0D48 01B50356 00000000 00000002 00380032 003CF708 00CFCEE0 00101B98 00000000 00000000 00000004 00000003 0000013D 00000493

    C stack:
    EIP:     EBP:       Frame: OldEBP, RetAddr, Params...
    6DD586A6 00CFCE20   00CFCE4C 77277943 000F0D48 00000084 00000000 01B50356 00000084 DCBAABCD 00CFCF54 6DD58620
    77277943 00CFCE4C   00CFCF48 7726601D 6DD58620 000F0D48 00000084 00000000 01B50356 CD19CD34 6DD58620 000F0D48
    7726601D 00CFCF48   00CFCF94 772A1383 FFFF0A23 00000084 772A1383 6DD58620 00000000 00000084 00000000 01B50356
    772A1383 00CFCF94   00CFCFAC 772A1E9B 00000084 00000000 01B50356 00000001
    772A1E9B 00CFCFAC   00CFCFD0 00027237 FFFF0A23 000F0D48 00000084 00000000 01B50356 50000007 000EAE43
    00027237 00CFCFD0   00CFCFFC 77277943 000F0D48 00000084 00000000 01B50356 00000084 DCBAABCD 00CFD104 000271E0
    77277943 00CFCFFC   00CFD0F8 7726601D 000271E0 000F0D48 00000084 00000000 01B50356 CD19D284 000271E0 000F0D48
    7726601D 00CFD0F8   00CFD144 772A1383 77265D09 00000084 772A1383 000271E0 00000000 00000084 00000000 01B50356
    772A1383 00CFD144   00CFD15C 772A1E9B 00000084 00000000 01B50356 00000001
    772A1E9B 00CFD15C   00CFD17C 0004E299 000271E0 000F0D48 00000084 00000000 01B50356 000271E0
    0004E299 00CFD17C   00CFD198 0008DE55 000F0D48 00000084 00000000 01B50356 0000003F
    0008DE55 00CFD198   00CFD1C4 77277943 000F0D48 00000084 00000000 01B50356 00000084 DCBAABCD 00CFD2C8 0008DE30
    77277943 00CFD1C4   00CFD2C0 7726601D 0008DE30 000F0D48 00000084 00000000 01B50356 CD19D0BC 00003308 00000000
    7726601D 00CFD2C0   00CFD32C 77265AC0 00000084 77265AC0 0008DE30 00000000 00000084 00000000 01B50356 00AF3000
    77265AC0 00CFD32C   00CFD368 77272349 01995C90 00000000 00000084 00000000 01B50356 0008DE30 00CFD458 00370CEC
    77272349 00CFD368   00CFD3F0 77E5BA96 00CFD384 00000020 00CFE1B0 77E5B9E0 00CFD3A4 01995C90 00000000 00000084
    77E5BA96 00CFD3F0   00CFD42C 77271331 00000000 00000000 00000001 00000000 00000000 00370CEC 00000000 00120D8A
    77271331 00CFD42C   00CFD488 772AD26C 00CFD458 00000000 00000000 00000000 00000001 00000001 00370CEC 00000000
    772AD26C 00CFD488   00CFD4BC 772AD7B1 00000000 00000001 003CB028 00000000 001DA5F8 02F10004 07E904B0 00020000
    772AD7B1 00CFD4BC   00CFD4D4 772A4D17 00370CEC 000A1390 00000000 00000003


Modules:
00020000 005B0000 C:\Fuentes\MasterForm\Masterform.Exe
77DE0000 001BA000 C:\WINDOWS\SYSTEM32\ntdll.dll
76FC0000 000F0000 C:\WINDOWS\System32\KERNEL32.DLL
76140000 002A9000 C:\WINDOWS\System32\KERNELBASE.dll
77240000 001C5000 C:\WINDOWS\System32\USER32.dll
76BA0000 0001A000 C:\WINDOWS\System32\win32u.dll
77DA0000 00022000 C:\WINDOWS\System32\GDI32.dll
770C0000 000EB000 C:\WINDOWS\System32\gdi32full.dll
766F0000 00085000 C:\WINDOWS\System32\msvcp_win.dll
75E60000 00110000 C:\WINDOWS\System32\ucrtbase.dll
768C0000 000B4000 C:\WINDOWS\System32\COMDLG32.dll
76460000 0027F000 C:\WINDOWS\System32\combase.dll
77480000 000B9000 C:\WINDOWS\System32\RPCRT4.dll
6DCD0000 00227000 C:\WINDOWS\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.26100.3037_none_85b65d03f7afec7e\COMCTL32.dll
77660000 000C8000 C:\WINDOWS\System32\shcore.dll
6CBC0000 00090000 C:\WINDOWS\SYSTEM32\WINSPOOL.DRV
76780000 000C7000 C:\WINDOWS\System32\msvcrt.dll
76E40000 0004B000 C:\WINDOWS\System32\SHLWAPI.dll
77790000 005EB000 C:\WINDOWS\System32\SHELL32.dll
76E90000 0007F000 C:\WINDOWS\System32\ADVAPI32.dll
721B0000 00049000 C:\WINDOWS\SYSTEM32\cfgmgr32.dll
775B0000 00083000 C:\WINDOWS\System32\sechost.dll
76CE0000 00151000 C:\WINDOWS\System32\ole32.dll
75F80000 0009E000 C:\WINDOWS\System32\OLEAUT32.dll
77540000 00060000 C:\WINDOWS\System32\WS2_32.dll
6ECD0000 00019000 C:\WINDOWS\SYSTEM32\MPR.dll
752F0000 00008000 C:\WINDOWS\SYSTEM32\VERSION.dll
75730000 00006000 C:\WINDOWS\SYSTEM32\MSIMG32.dll
6CA10000 0016C000 C:\WINDOWS\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.26100.3037_none_b6a14fe95242664c\gdiplus.dll
5BE40000 0002E000 C:\WINDOWS\SYSTEM32\oledlg.dll
6EB70000 00033000 C:\WINDOWS\SYSTEM32\WINMM.dll
67A10000 00008000 C:\WINDOWS\SYSTEM32\WSOCK32.dll
76A00000 00025000 C:\WINDOWS\System32\IMM32.DLL
74790000 00082000 C:\WINDOWS\system32\uxtheme.dll
76BC0000 00117000 C:\WINDOWS\System32\MSCTF.dll
6AF90000 0009F000 C:\WINDOWS\SYSTEM32\TextShaping.dll
75360000 00014000 C:\WINDOWS\SYSTEM32\kernel.appcore.dll
77410000 00069000 C:\WINDOWS\System32\bcryptPrimitives.dll
68B30000 00101000 C:\WINDOWS\SYSTEM32\textinputframework.dll
6A940000 000DC000 C:\WINDOWS\SYSTEM32\CoreMessaging.dll
5C740000 00292000 C:\WINDOWS\SYSTEM32\CoreUIComponents.dll
720B0000 000F9000 C:\WINDOWS\SYSTEM32\wintypes.dll
72290000 0000B000 C:\WINDOWS\SYSTEM32\CRYPTBASE.DLL
10000000 00341000 C:\WINDOWS\SYSTEM32\freeimage.dll
73BC0000 006B7000 C:\WINDOWS\SYSTEM32\Windows.Storage.dll
6B040000 001DE000 C:\WINDOWS\SYSTEM32\WindowsCodecs.dll
771B0000 00081000 C:\WINDOWS\System32\clbcatq.dll
6F1B0000 00025000 C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL
77640000 00007000 C:\WINDOWS\System32\NSI.dll
6F050000 00018000 C:\WINDOWS\SYSTEM32\dhcpcsvc6.DLL
6F030000 0001D000 C:\WINDOWS\SYSTEM32\dhcpcsvc.DLL
6F0D0000 000DB000 C:\WINDOWS\SYSTEM32\DNSAPI.dll
5F000000 00011000 C:\WINDOWS\SYSTEM32\CTL3D32.DLL

Called from DIALOGBOXINDIRECT(0) in .\source\classes\dialog.prg
Called from TDIALOG:ACTIVATE(325) in .\source\classes\dialog.prg
Called from TPREVIEW:PRINTPAGE(1599) in .\source\classes\rpreview.prg
Called from (b)TPREVIEW_BUILDBUTTONBAR(367) in .\source\classes\rpreview.prg
Called from TBTNBMP:CLICK(816) in .\source\classes\btnbmp.prg
Called from TBTNBMP:LBUTTONUP(1100) in .\source\classes\btnbmp.prg
Called from TCONTROL:HANDLEEVENT(1867) in .\source\classes\control.prg
Called from TBTNBMP:HANDLEEVENT(2145) in .\source\classes\btnbmp.prg
Called from _FWH(3719) in .\source\classes\window.prg
Called from SYSREFRESH(0) in emple.prg
Called from STOPUNTIL(70) in .\source\function\msgrun.prg
Called from TPREVIEW:ACTIVATE(179) in .\source\classes\rpreview.prg
Called from RPREVIEW(1880) in .\source\classes\rpreview.prg
Called from (b)TPRINTER(327) in .\source\classes\printer.prg
Called from TPRINTER:PREVIEW(0) in .\source\classes\printer.prg
Called from PRINTEND(2067) in .\source\classes\printer.prg
Called from EMPLEIMPRE(936) in emple.prg
Called from (b)HACEBAREMPLE(342) in emple.prg
Called from TBTNBMP:CLICK(816) in .\source\classes\btnbmp.prg
Called from TBTNBMP:LBUTTONUP(1103) in .\source\classes\btnbmp.prg
Called from TCONTROL:HANDLEEVENT(1867) in .\source\classes\control.prg
Called from TBTNBMP:HANDLEEVENT(2145) in .\source\classes\btnbmp.prg
Called from _FWH(3719) in .\source\classes\window.prg
Called from WINRUN(0) in .\source\classes\window.prg
Called from TMDIFRAME:ACTIVATE(1137) in .\source\classes\window.prg
Called from MAIN(262) in masterform.prg
------------------------------------------------------------------------
]]>
Aqui está

Code: Select all | Expand

Application Internal Error - C:\Fuentes\MasterForm\Masterform.Exe
Terminated at: 2025-02-17 10:23:28
Error irrecuperable 6005: Exception error:

    Exception Code:C0000005 ACCESS_VIOLATION
    Exception Address:6DD586A6
    EAX:75736956  EBX:00CFCF54  ECX:00000084  EDX:00000000
    ESI:00380032  EDI:00000000  EBP:00CFCE20
    CS:EIP:0023:6DD586A6  SS:ESP:002B:00CFCD90
    DS:002B  ES:002B  FS:0053  GS:002B
    Flags:00010293
    Exception Parameters: 00000000 75736962
    CS:EIP: 8A 40 0C 24 0F 3C 07 0F 85 89 07 00 00 B8 FF FF
    SS:ESP: 6DD58620 00000084 000F0D48 01B50356 00000000 00000002 00380032 003CF708 00CFCEE0 00101B98 00000000 00000000 00000004 00000003 0000013D 00000493

    C stack:
    EIP:     EBP:       Frame: OldEBP, RetAddr, Params...
    6DD586A6 00CFCE20   00CFCE4C 77277943 000F0D48 00000084 00000000 01B50356 00000084 DCBAABCD 00CFCF54 6DD58620
    77277943 00CFCE4C   00CFCF48 7726601D 6DD58620 000F0D48 00000084 00000000 01B50356 CD19CD34 6DD58620 000F0D48
    7726601D 00CFCF48   00CFCF94 772A1383 FFFF0A23 00000084 772A1383 6DD58620 00000000 00000084 00000000 01B50356
    772A1383 00CFCF94   00CFCFAC 772A1E9B 00000084 00000000 01B50356 00000001
    772A1E9B 00CFCFAC   00CFCFD0 00027237 FFFF0A23 000F0D48 00000084 00000000 01B50356 50000007 000EAE43
    00027237 00CFCFD0   00CFCFFC 77277943 000F0D48 00000084 00000000 01B50356 00000084 DCBAABCD 00CFD104 000271E0
    77277943 00CFCFFC   00CFD0F8 7726601D 000271E0 000F0D48 00000084 00000000 01B50356 CD19D284 000271E0 000F0D48
    7726601D 00CFD0F8   00CFD144 772A1383 77265D09 00000084 772A1383 000271E0 00000000 00000084 00000000 01B50356
    772A1383 00CFD144   00CFD15C 772A1E9B 00000084 00000000 01B50356 00000001
    772A1E9B 00CFD15C   00CFD17C 0004E299 000271E0 000F0D48 00000084 00000000 01B50356 000271E0
    0004E299 00CFD17C   00CFD198 0008DE55 000F0D48 00000084 00000000 01B50356 0000003F
    0008DE55 00CFD198   00CFD1C4 77277943 000F0D48 00000084 00000000 01B50356 00000084 DCBAABCD 00CFD2C8 0008DE30
    77277943 00CFD1C4   00CFD2C0 7726601D 0008DE30 000F0D48 00000084 00000000 01B50356 CD19D0BC 00003308 00000000
    7726601D 00CFD2C0   00CFD32C 77265AC0 00000084 77265AC0 0008DE30 00000000 00000084 00000000 01B50356 00AF3000
    77265AC0 00CFD32C   00CFD368 77272349 01995C90 00000000 00000084 00000000 01B50356 0008DE30 00CFD458 00370CEC
    77272349 00CFD368   00CFD3F0 77E5BA96 00CFD384 00000020 00CFE1B0 77E5B9E0 00CFD3A4 01995C90 00000000 00000084
    77E5BA96 00CFD3F0   00CFD42C 77271331 00000000 00000000 00000001 00000000 00000000 00370CEC 00000000 00120D8A
    77271331 00CFD42C   00CFD488 772AD26C 00CFD458 00000000 00000000 00000000 00000001 00000001 00370CEC 00000000
    772AD26C 00CFD488   00CFD4BC 772AD7B1 00000000 00000001 003CB028 00000000 001DA5F8 02F10004 07E904B0 00020000
    772AD7B1 00CFD4BC   00CFD4D4 772A4D17 00370CEC 000A1390 00000000 00000003


Modules:
00020000 005B0000 C:\Fuentes\MasterForm\Masterform.Exe
77DE0000 001BA000 C:\WINDOWS\SYSTEM32\ntdll.dll
76FC0000 000F0000 C:\WINDOWS\System32\KERNEL32.DLL
76140000 002A9000 C:\WINDOWS\System32\KERNELBASE.dll
77240000 001C5000 C:\WINDOWS\System32\USER32.dll
76BA0000 0001A000 C:\WINDOWS\System32\win32u.dll
77DA0000 00022000 C:\WINDOWS\System32\GDI32.dll
770C0000 000EB000 C:\WINDOWS\System32\gdi32full.dll
766F0000 00085000 C:\WINDOWS\System32\msvcp_win.dll
75E60000 00110000 C:\WINDOWS\System32\ucrtbase.dll
768C0000 000B4000 C:\WINDOWS\System32\COMDLG32.dll
76460000 0027F000 C:\WINDOWS\System32\combase.dll
77480000 000B9000 C:\WINDOWS\System32\RPCRT4.dll
6DCD0000 00227000 C:\WINDOWS\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.26100.3037_none_85b65d03f7afec7e\COMCTL32.dll
77660000 000C8000 C:\WINDOWS\System32\shcore.dll
6CBC0000 00090000 C:\WINDOWS\SYSTEM32\WINSPOOL.DRV
76780000 000C7000 C:\WINDOWS\System32\msvcrt.dll
76E40000 0004B000 C:\WINDOWS\System32\SHLWAPI.dll
77790000 005EB000 C:\WINDOWS\System32\SHELL32.dll
76E90000 0007F000 C:\WINDOWS\System32\ADVAPI32.dll
721B0000 00049000 C:\WINDOWS\SYSTEM32\cfgmgr32.dll
775B0000 00083000 C:\WINDOWS\System32\sechost.dll
76CE0000 00151000 C:\WINDOWS\System32\ole32.dll
75F80000 0009E000 C:\WINDOWS\System32\OLEAUT32.dll
77540000 00060000 C:\WINDOWS\System32\WS2_32.dll
6ECD0000 00019000 C:\WINDOWS\SYSTEM32\MPR.dll
752F0000 00008000 C:\WINDOWS\SYSTEM32\VERSION.dll
75730000 00006000 C:\WINDOWS\SYSTEM32\MSIMG32.dll
6CA10000 0016C000 C:\WINDOWS\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.26100.3037_none_b6a14fe95242664c\gdiplus.dll
5BE40000 0002E000 C:\WINDOWS\SYSTEM32\oledlg.dll
6EB70000 00033000 C:\WINDOWS\SYSTEM32\WINMM.dll
67A10000 00008000 C:\WINDOWS\SYSTEM32\WSOCK32.dll
76A00000 00025000 C:\WINDOWS\System32\IMM32.DLL
74790000 00082000 C:\WINDOWS\system32\uxtheme.dll
76BC0000 00117000 C:\WINDOWS\System32\MSCTF.dll
6AF90000 0009F000 C:\WINDOWS\SYSTEM32\TextShaping.dll
75360000 00014000 C:\WINDOWS\SYSTEM32\kernel.appcore.dll
77410000 00069000 C:\WINDOWS\System32\bcryptPrimitives.dll
68B30000 00101000 C:\WINDOWS\SYSTEM32\textinputframework.dll
6A940000 000DC000 C:\WINDOWS\SYSTEM32\CoreMessaging.dll
5C740000 00292000 C:\WINDOWS\SYSTEM32\CoreUIComponents.dll
720B0000 000F9000 C:\WINDOWS\SYSTEM32\wintypes.dll
72290000 0000B000 C:\WINDOWS\SYSTEM32\CRYPTBASE.DLL
10000000 00341000 C:\WINDOWS\SYSTEM32\freeimage.dll
73BC0000 006B7000 C:\WINDOWS\SYSTEM32\Windows.Storage.dll
6B040000 001DE000 C:\WINDOWS\SYSTEM32\WindowsCodecs.dll
771B0000 00081000 C:\WINDOWS\System32\clbcatq.dll
6F1B0000 00025000 C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL
77640000 00007000 C:\WINDOWS\System32\NSI.dll
6F050000 00018000 C:\WINDOWS\SYSTEM32\dhcpcsvc6.DLL
6F030000 0001D000 C:\WINDOWS\SYSTEM32\dhcpcsvc.DLL
6F0D0000 000DB000 C:\WINDOWS\SYSTEM32\DNSAPI.dll
5F000000 00011000 C:\WINDOWS\SYSTEM32\CTL3D32.DLL

Called from DIALOGBOXINDIRECT(0) in .\source\classes\dialog.prg
Called from TDIALOG:ACTIVATE(325) in .\source\classes\dialog.prg
Called from TPREVIEW:PRINTPAGE(1599) in .\source\classes\rpreview.prg
Called from (b)TPREVIEW_BUILDBUTTONBAR(367) in .\source\classes\rpreview.prg
Called from TBTNBMP:CLICK(816) in .\source\classes\btnbmp.prg
Called from TBTNBMP:LBUTTONUP(1100) in .\source\classes\btnbmp.prg
Called from TCONTROL:HANDLEEVENT(1867) in .\source\classes\control.prg
Called from TBTNBMP:HANDLEEVENT(2145) in .\source\classes\btnbmp.prg
Called from _FWH(3719) in .\source\classes\window.prg
Called from SYSREFRESH(0) in emple.prg
Called from STOPUNTIL(70) in .\source\function\msgrun.prg
Called from TPREVIEW:ACTIVATE(179) in .\source\classes\rpreview.prg
Called from RPREVIEW(1880) in .\source\classes\rpreview.prg
Called from (b)TPRINTER(327) in .\source\classes\printer.prg
Called from TPRINTER:PREVIEW(0) in .\source\classes\printer.prg
Called from PRINTEND(2067) in .\source\classes\printer.prg
Called from EMPLEIMPRE(936) in emple.prg
Called from (b)HACEBAREMPLE(342) in emple.prg
Called from TBTNBMP:CLICK(816) in .\source\classes\btnbmp.prg
Called from TBTNBMP:LBUTTONUP(1103) in .\source\classes\btnbmp.prg
Called from TCONTROL:HANDLEEVENT(1867) in .\source\classes\control.prg
Called from TBTNBMP:HANDLEEVENT(2145) in .\source\classes\btnbmp.prg
Called from _FWH(3719) in .\source\classes\window.prg
Called from WINRUN(0) in .\source\classes\window.prg
Called from TMDIFRAME:ACTIVATE(1137) in .\source\classes\window.prg
Called from MAIN(262) in masterform.prg
------------------------------------------------------------------------
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ayuda tPrinter (Estoy viejoooo) :: Reply by D.Fernandez]]> 2025-02-17T06:28:07-07:00 2025-02-17T06:28:07-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45425&p=277716#p277716 voy a probar con la 2206 a ver que pasa.

Gracias
Saludos.
Perdon, se me fue el dedo y envie el post varias veces.]]>
voy a probar con la 2206 a ver que pasa.

Gracias
Saludos.
Perdon, se me fue el dedo y envie el post varias veces.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ayuda tPrinter (Estoy viejoooo) :: Reply by karinha]]> 2025-02-17T06:59:42-07:00 2025-02-17T06:59:42-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45425&p=277717#p277717

Code: Select all | Expand

FUNCTION PRNSLOT()

   LOCAL  slnro, slnombre, slvalor, slbanco, slcam1, slcam2, slcam3, slmoneda, slcam4

   basesl := TData():New(, ruta + "SLOTS" )

   IF basesl:Use()

      basesl:SetOrder( "NMAQ" )
      basesl:GoTop()

   ELSE

      MsgInfo( 'Error de apertura de archivo', 'Informe' )

      return( .F. )

   ENDIF

   titulolistado := "Listado de Slots"

   CursorWait()

   DEFINE BRUSH oBrush COLOR CLR_WHITE // aqui

   PRINT oPrn NAME "Lista de Slots" PREVIEW MODAL

   DEFINE FONT oFont11 NAME "TIMES NEW ROMAN" SIZE 0, - 14 BOLD        OF oPrn
   DEFINE FONT oFont12 NAME "HELVETICA"       SIZE 0, - 10             OF oPrn
   DEFINE FONT oFont13 NAME "HELVETICA"       SIZE 0, - 16 BOLD ITALIC OF oPrn
   DEFINE FONT oFont14 NAME "Segoe UI"        SIZE 0, - 10             OF oPrn
   DEFINE FONT oFont15 NAME "TAHOMA"          SIZE 0, -  8             OF oPrn
   DEFINE FONT oFont16 NAME "CAMBRIA"         SIZE 0, - 10 BOLD ITALIC OF oPrn

   DEFINE PEN oPen WIDTH 1 COLOR CLR_BLACK OF oPrn  // aqui

   oPrn:SetPage( 9 ) // ?? 1
   oPrn:SetPortrait()

   aDesde := oPrn:Cmtr2Pix( 0.5, 2.5 )
   aAncho := oPrn:Cmtr2Pix( 3, 2.5 )

   cmt    := 1  //??

   PAGE

      oPrn:RoundBox( 2, 8, 3, 14, 0.3, 0.3, oPen, CLR_WHITE, { "Qué hago mal ?", { oFont11 }, CLR_BLACK }, "CM" )

      cmt += 0.7

      basesl:Gotop()

      WHILE( .NOT. basesl:Eof() ) // O WHILE( .NOT. EOF() )

         SYSREFRESH() // aqui

         slnro    := basesl:nslot
         slnombre := basesl:snom
         slbanco  := basesl:cbanco
         slcam1   := basesl:cubre1
         slcam2   := basesl:cubre2
         slcam3   := basesl:cubre3
         slmoneda := if( basesl:moneda = "D", HBA( "Dólares" ), "Pesos" )
         slvalor  := basesl:valor
         slcam4   := xTrim( slcam1 ) + " - " + xTrim( slcam2 ) + " - " + xTrim( slcam3 )

         oPrn:CmSay( cmt,  3.2, slnro, oFont15, 2, CLR_BLACK,, 1 )

         cmt += 0.5 // Lynea ??

         IF cmt >= 23 // ??? se lynea...

            ENDPAGE

            PAGE // new page

            cmt    := 1  //??  lynea? inicia de nuevo.

            // PieSlotPagina()
            // OtraSlotPagina()

            // basesl:Skip() // ???

         ELSE

            // basesl:Skip() // ???  / no comprendo

         ENDIF

         SKIP() // aqui

      ENDDO

   ENDPAGE

   /*
   PAGE
   ENDPAGE // No comprendo???
   */

   ENDPRINT

   oFont11:END()
   oFont12:END()
   oFont13:END()
   oFont14:END()
   oFont15:END()
   oFont16:END()
   oBrush:End()
   oPen:End()

   // SysRefresh() //?? para?

   CursorArrow()

   basesl:Close()

RETURN NIL
Regards, saludos.]]>

Code: Select all | Expand

FUNCTION PRNSLOT()

   LOCAL  slnro, slnombre, slvalor, slbanco, slcam1, slcam2, slcam3, slmoneda, slcam4

   basesl := TData():New(, ruta + "SLOTS" )

   IF basesl:Use()

      basesl:SetOrder( "NMAQ" )
      basesl:GoTop()

   ELSE

      MsgInfo( 'Error de apertura de archivo', 'Informe' )

      return( .F. )

   ENDIF

   titulolistado := "Listado de Slots"

   CursorWait()

   DEFINE BRUSH oBrush COLOR CLR_WHITE // aqui

   PRINT oPrn NAME "Lista de Slots" PREVIEW MODAL

   DEFINE FONT oFont11 NAME "TIMES NEW ROMAN" SIZE 0, - 14 BOLD        OF oPrn
   DEFINE FONT oFont12 NAME "HELVETICA"       SIZE 0, - 10             OF oPrn
   DEFINE FONT oFont13 NAME "HELVETICA"       SIZE 0, - 16 BOLD ITALIC OF oPrn
   DEFINE FONT oFont14 NAME "Segoe UI"        SIZE 0, - 10             OF oPrn
   DEFINE FONT oFont15 NAME "TAHOMA"          SIZE 0, -  8             OF oPrn
   DEFINE FONT oFont16 NAME "CAMBRIA"         SIZE 0, - 10 BOLD ITALIC OF oPrn

   DEFINE PEN oPen WIDTH 1 COLOR CLR_BLACK OF oPrn  // aqui

   oPrn:SetPage( 9 ) // ?? 1
   oPrn:SetPortrait()

   aDesde := oPrn:Cmtr2Pix( 0.5, 2.5 )
   aAncho := oPrn:Cmtr2Pix( 3, 2.5 )

   cmt    := 1  //??

   PAGE

      oPrn:RoundBox( 2, 8, 3, 14, 0.3, 0.3, oPen, CLR_WHITE, { "Qué hago mal ?", { oFont11 }, CLR_BLACK }, "CM" )

      cmt += 0.7

      basesl:Gotop()

      WHILE( .NOT. basesl:Eof() ) // O WHILE( .NOT. EOF() )

         SYSREFRESH() // aqui

         slnro    := basesl:nslot
         slnombre := basesl:snom
         slbanco  := basesl:cbanco
         slcam1   := basesl:cubre1
         slcam2   := basesl:cubre2
         slcam3   := basesl:cubre3
         slmoneda := if( basesl:moneda = "D", HBA( "Dólares" ), "Pesos" )
         slvalor  := basesl:valor
         slcam4   := xTrim( slcam1 ) + " - " + xTrim( slcam2 ) + " - " + xTrim( slcam3 )

         oPrn:CmSay( cmt,  3.2, slnro, oFont15, 2, CLR_BLACK,, 1 )

         cmt += 0.5 // Lynea ??

         IF cmt >= 23 // ??? se lynea...

            ENDPAGE

            PAGE // new page

            cmt    := 1  //??  lynea? inicia de nuevo.

            // PieSlotPagina()
            // OtraSlotPagina()

            // basesl:Skip() // ???

         ELSE

            // basesl:Skip() // ???  / no comprendo

         ENDIF

         SKIP() // aqui

      ENDDO

   ENDPAGE

   /*
   PAGE
   ENDPAGE // No comprendo???
   */

   ENDPRINT

   oFont11:END()
   oFont12:END()
   oFont13:END()
   oFont14:END()
   oFont15:END()
   oFont16:END()
   oBrush:End()
   oPen:End()

   // SysRefresh() //?? para?

   CursorArrow()

   basesl:Close()

RETURN NIL
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ayuda tPrinter (Estoy viejoooo) :: Reply by D.Fernandez]]> 2025-02-17T09:09:50-07:00 2025-02-17T09:09:50-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45425&p=277721#p277721
Todo sigue igual con los tips.
Perooo estoy usando el FWH 2212 y todo va mejor.
Seguire por este camino.

Gracias.

Saludos

Ruben Fernandez]]>

Todo sigue igual con los tips.
Perooo estoy usando el FWH 2212 y todo va mejor.
Seguire por este camino.

Gracias.

Saludos

Ruben Fernandez]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Vaciar el buffer del teclado :: Author groiss]]> 2025-02-20T02:13:46-07:00 2025-02-20T02:13:46-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45437&p=277779#p277779 Pongo un ejemplo de lo que pretendo hacer y no consigo.
Estamos en un dialogo modal, en el que hay varios gets y botones, y un setkey(chr("v"), funcion())
Lo que pretendo es que cuando toma el control la "funcion" hace su tarea y al acabar no le queden pulsaciones del teclado por procesar.
He usado la funcion hb_KeyClear() pero no veo que vacie la cola de pulsaciones de windows.
¿Sabeis si existe alguna forma de hacer lo que pretendo?
Muchas gracias
Saludos]]>
Pongo un ejemplo de lo que pretendo hacer y no consigo.
Estamos en un dialogo modal, en el que hay varios gets y botones, y un setkey(chr("v"), funcion())
Lo que pretendo es que cuando toma el control la "funcion" hace su tarea y al acabar no le queden pulsaciones del teclado por procesar.
He usado la funcion hb_KeyClear() pero no veo que vacie la cola de pulsaciones de windows.
¿Sabeis si existe alguna forma de hacer lo que pretendo?
Muchas gracias
Saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Vaciar el buffer del teclado :: Reply by Antonio Linares]]> 2025-02-20T02:36:41-07:00 2025-02-20T02:36:41-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45437&p=277781#p277781 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Vaciar el buffer del teclado :: Reply by groiss]]> 2025-02-20T03:05:47-07:00 2025-02-20T03:05:47-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45437&p=277785#p277785 Gracias por la sugerencia, pero si, me mantiene la cola del teclado
Gracias.
Un saludo]]>
Gracias por la sugerencia, pero si, me mantiene la cola del teclado
Gracias.
Un saludo]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Vaciar el buffer del teclado :: Reply by Antonio Linares]]> 2025-02-20T03:23:00-07:00 2025-02-20T03:23:00-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45437&p=277786#p277786

Code: Select all | Expand

#include <windows.h>

void VaciarMensajesTeclado() {
    MSG msg;
    // Itera sobre los mensajes de teclado que están en la cola y los remueve.
    while (PeekMessage(&msg, NULL, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE)) {
        // Puedes procesarlos si es necesario, o simplemente descartarlos.
    }
}
]]>

Code: Select all | Expand

#include <windows.h>

void VaciarMensajesTeclado() {
    MSG msg;
    // Itera sobre los mensajes de teclado que están en la cola y los remueve.
    while (PeekMessage(&msg, NULL, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE)) {
        // Puedes procesarlos si es necesario, o simplemente descartarlos.
    }
}
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Vaciar el buffer del teclado :: Reply by Antonio Linares]]> 2025-02-20T03:25:07-07:00 2025-02-20T03:25:07-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45437&p=277787#p277787

Code: Select all | Expand

#pragma BEGINDUMP
#include <windows.h>
#include <hbapi.h>

void VaciarMensajesTeclado( void ) {
    MSG msg;
    // Itera sobre los mensajes de teclado que están en la cola y los remueve.
    while (PeekMessage(&msg, NULL, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE)) {
        // Puedes procesarlos si es necesario, o simplemente descartarlos.
    }
}

HB_FUNC( VACIATECLADO )
{
   VaciarMensajesTeclado();
}

#pragma ENDDUMP   
]]>

Code: Select all | Expand

#pragma BEGINDUMP
#include <windows.h>
#include <hbapi.h>

void VaciarMensajesTeclado( void ) {
    MSG msg;
    // Itera sobre los mensajes de teclado que están en la cola y los remueve.
    while (PeekMessage(&msg, NULL, WM_KEYFIRST, WM_KEYLAST, PM_REMOVE)) {
        // Puedes procesarlos si es necesario, o simplemente descartarlos.
    }
}

HB_FUNC( VACIATECLADO )
{
   VaciarMensajesTeclado();
}

#pragma ENDDUMP   
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Vaciar el buffer del teclado :: Reply by groiss]]> 2025-02-20T04:13:16-07:00 2025-02-20T04:13:16-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45437&p=277788#p277788 Ha funcionado perfecto.
Muchisimas gracias.
Un saludo]]>
Ha funcionado perfecto.
Muchisimas gracias.
Un saludo]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Alerta de notificaciones en icono barra del windows :: Author leandro]]> 2025-02-19T07:21:18-07:00 2025-02-19T07:21:18-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45435&p=277756#p277756
No se si sean efectos especiales y solo sea cambiar el icono, pero seria bueno saber como hacer para cambiar el icono en tiempo de ejecución, gracias de antemano.

Image]]>

No se si sean efectos especiales y solo sea cambiar el icono, pero seria bueno saber como hacer para cambiar el icono en tiempo de ejecución, gracias de antemano.

Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Alerta de notificaciones en icono barra del windows :: Reply by Enrico Maria Giordano]]> 2025-02-20T02:42:35-07:00 2025-02-20T02:42:35-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45435&p=277782#p277782

Code: Select all | Expand

oTray:SetIcon()
]]>

Code: Select all | Expand

oTray:SetIcon()
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Alerta de notificaciones en icono barra del windows :: Reply by leandro]]> 2025-02-20T12:47:34-07:00 2025-02-20T12:47:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45435&p=277802#p277802 :D]]> :D]]> <![CDATA[FiveWin para Harbour/xHarbour :: Error al descomprimir Harbour_bcc770_64_20250216.zip :: Author Vikthor]]> 2025-02-19T12:09:47-07:00 2025-02-19T12:09:47-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45436&p=277763#p277763
He descargado https://github.com/FiveTechSoft/harbour ... 250216.zip para comenzar a compilar con la versión más reciente de fivewin.

Sin embargo el zip no descomprime los archivos de la carpeta "..\bin\win\bcc64".

Ya desactive el firewall y el antivirus de mi equipo sin éxito.

¿ Alguna sugerencia ?]]>

He descargado https://github.com/FiveTechSoft/harbour ... 250216.zip para comenzar a compilar con la versión más reciente de fivewin.

Sin embargo el zip no descomprime los archivos de la carpeta "..\bin\win\bcc64".

Ya desactive el firewall y el antivirus de mi equipo sin éxito.

¿ Alguna sugerencia ?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Error al descomprimir Harbour_bcc770_64_20250216.zip :: Reply by karinha]]> 2025-02-19T13:11:03-07:00 2025-02-19T13:11:03-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45436&p=277765#p277765
Regards, saludos.]]>

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Error al descomprimir Harbour_bcc770_64_20250216.zip :: Reply by karinha]]> 2025-02-19T13:14:31-07:00 2025-02-19T13:14:31-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45436&p=277766#p277766

Code: Select all | Expand

Pasta(carpeta) de c:\LIXO\harbour_bcc770\bin\win\bcc64

6/02/2025  06:38    <DIR>          .
6/02/2025  06:38    <DIR>          ..
6/02/2025  06:30         1.180.160 harbour.exe
6/02/2025  06:34         1.447.424 hbformat.exe
6/02/2025  06:32         1.119.232 hbi18n.exe
6/02/2025  06:32         5.186.560 hbmk2.exe
6/02/2025  06:34         2.452.480 hbnetio.exe
6/02/2025  06:30           563.200 hbpp.exe
6/02/2025  06:34         5.751.808 hbrun.exe
6/02/2025  06:32         1.851.904 hbtest.exe
              8 arquivo(s)     19.552.768 bytes
Regards, saludos.]]>

Code: Select all | Expand

Pasta(carpeta) de c:\LIXO\harbour_bcc770\bin\win\bcc64

6/02/2025  06:38    <DIR>          .
6/02/2025  06:38    <DIR>          ..
6/02/2025  06:30         1.180.160 harbour.exe
6/02/2025  06:34         1.447.424 hbformat.exe
6/02/2025  06:32         1.119.232 hbi18n.exe
6/02/2025  06:32         5.186.560 hbmk2.exe
6/02/2025  06:34         2.452.480 hbnetio.exe
6/02/2025  06:30           563.200 hbpp.exe
6/02/2025  06:34         5.751.808 hbrun.exe
6/02/2025  06:32         1.851.904 hbtest.exe
              8 arquivo(s)     19.552.768 bytes
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Error al descomprimir Harbour_bcc770_64_20250216.zip :: Reply by Vikthor]]> 2025-02-19T15:00:23-07:00 2025-02-19T15:00:23-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45436&p=277767#p277767
karinha wrote: Wed Feb 19, 2025 8:11 pm No detecté ningún problema con el archivo .zip. Utilice WINRAR.exe para descomprimirlo.

Regards, saludos.
El problema era la versión de Winzip. Instalé WinRar y no tuve problemas.
Gracias]]>
karinha wrote: Wed Feb 19, 2025 8:11 pm No detecté ningún problema con el archivo .zip. Utilice WINRAR.exe para descomprimirlo.

Regards, saludos.
El problema era la versión de Winzip. Instalé WinRar y no tuve problemas.
Gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Error al descomprimir Harbour_bcc770_64_20250216.zip :: Reply by Enrico Maria Giordano]]> 2025-02-20T02:45:24-07:00 2025-02-20T02:45:24-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45436&p=277783#p277783
https://www.7-zip.org]]>

https://www.7-zip.org]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Error al descomprimir Harbour_bcc770_64_20250216.zip :: Reply by Vikthor]]> 2025-02-21T08:55:21-07:00 2025-02-21T08:55:21-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45436&p=277843#p277843
Enrico Maria Giordano wrote: Thu Feb 20, 2025 9:45 am Or use 7-Zip, it is free software:

https://www.7-zip.org
Thank you Enrico !]]>
Enrico Maria Giordano wrote: Thu Feb 20, 2025 9:45 am Or use 7-Zip, it is free software:

https://www.7-zip.org
Thank you Enrico !]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Suggestion of small change on xbrowse :: Author JoséQuintas]]> 2025-02-21T11:59:06-07:00 2025-02-21T11:59:06-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45445&p=277854#p277854

Code: Select all | Expand

METHOD Skip( n ) CLASS TXBrowse

   local nStart
   local nSkipped := 0

   if !::lClosed
      TRY
         hb_Default( @n, 1 )
         if Empty( ::aFilter )
            nSkipped := Eval( ::bSkip, n, Self )
         else
            nStart      := ::nFltRow
            ::GoFltRow( ::nFltRow + n )
            nSkipped    := ::nFltRow - nStart
         endif
      CATCH
         ::nLen      := 0
         ::lClosed   := .t.
      END
   endif

return nSkipped
A default 1 for skip.
SKIP and SKIP 1 has same result (not sure if Nil is for this situation).
This eliminates the need to test Nil on user codeblock.
Please check if there exists any RDD/Class where Nil could be valid to codeblock.]]>

Code: Select all | Expand

METHOD Skip( n ) CLASS TXBrowse

   local nStart
   local nSkipped := 0

   if !::lClosed
      TRY
         hb_Default( @n, 1 )
         if Empty( ::aFilter )
            nSkipped := Eval( ::bSkip, n, Self )
         else
            nStart      := ::nFltRow
            ::GoFltRow( ::nFltRow + n )
            nSkipped    := ::nFltRow - nStart
         endif
      CATCH
         ::nLen      := 0
         ::lClosed   := .t.
      END
   endif

return nSkipped
A default 1 for skip.
SKIP and SKIP 1 has same result (not sure if Nil is for this situation).
This eliminates the need to test Nil on user codeblock.
Please check if there exists any RDD/Class where Nil could be valid to codeblock.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Sigue problema impresion 2501 ERROR MIO :: Author D.Fernandez]]> 2025-02-20T12:04:09-07:00 2025-02-20T19:30:46-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45440&p=277798#p277798 ES ERROR MIO.
NOSE DONDE ESTA PERO SI ES ERROR MIO.
DISCULPA NUEVAMENTE.
Gracias y Saludos

Dario Fernandez





Hola amigos

Sigo con problemas de imprersión en 2501 con Microsoft Vs 2022.
Estoy usando la 2212 ahora y todo bien
Uso MsVs 2022
Gracias


dejo imágen y codigo.
https://ibb.co/5X6VJcKL

Code: Select all | Expand

FUNCTION PRNSLOT()
    LOCAL  slnro,slnombre,slvalor,slbanco, slcam1,slcam2,slcam3,slmoneda,slcam4
  
    basesl := TData():New(,ruta+"SLOTS" )
    If basesl:Use() 
        basesl:SetOrder("NMAQ")
        basesl:GoTop()
    else
        MsgInfo('Error de apertura de archivo', 'Informe')
        return(.f.) 
    endif
     titulolistado := "Listado de Slots"
    CursorWait()
   
    
    PRINT oPrn NAME "Lista de Slots" PREVIEW MODAL 
        
        oPrn:SetPage(1)
        oPrn:SetPortrait()
    
    
        DEFINE FONT oFont11 NAME "TIMES NEW ROMAN" SIZE 0,-14 BOLD OF oPrn
        DEFINE FONT oFont12 NAME "HELVETICA" SIZE 0,-10 OF oPrn
        DEFINE FONT oFont13 NAME "HELVETICA" SIZE 0,-16 BOLD ITALIC  OF oPrn
        DEFINE FONT oFont14 NAME "Segoe UI" SIZE 0,-10    OF oPrn
        DEFINE FONT oFont15 NAME "TAHOMA" SIZE 0,-8 OF oPrn
        DEFINE FONT oFont16 NAME "CAMBRIA" SIZE 0,-10 BOLD ITALIC  OF oPrn
        DEFINE BRUSH oBrush COLOR CLR_WHITE 
        DEFINE PEN oPen WIDTH 1 COLOR CLR_BLACK
        
     
        aDesde := oPrn:Cmtr2Pix(0.5,2.5)
        aAncho := oPrn:Cmtr2Pix(3,2.5)
    
           
        cmt := 1
        PAGE 
              
        oPrn:RoundBox(2,8,3,14,0.3,0.3,oPen,CLR_WHITE,{"Qué hago mal ?", {oFont11 }, CLR_BLACK},"CM")

        cmt+=0.7 
        basesl:Gotop()   
    
        do while !basesl:Eof()
          
            slnro:=basesl:nslot
            slnombre:=basesl:snom
            slbanco:=basesl:cbanco
            slcam1:=basesl:cubre1
            slcam2:=basesl:cubre2
            slcam3:=basesl:cubre3
            slmoneda:= if(basesl:moneda="D",HBA("Dólares"), "Pesos")
          
            slvalor:= basesl:valor
            slcam4:= xTrim(slcam1)+" - "+xTrim(slcam2)+" - "+xTrim(slcam3)
            oPrn:CmSay( cmt,  3.2, slnro, oFont15,2, CLR_BLACK,,1)
                      
            cmt+=0.5
            SysRefresh()
          
            if cmt >=23
              // PieSlotPagina()
              //OtraSlotPagina()
               basesl:Skip()
            ELSE
               basesl:Skip()
            ENDIF
        ENDDO
      
   
    ENDPAGE

    PAGE
    ENDPAGE  

    ENDPRINT
    
    oFont11:END()
    oFont12:END()
    oFont13:END()
    oFont14:END()
    oFont15:END()
    oFont16:END()
    oBrush:End()
    oPen:End()    
    SysRefresh()
    
      
    basesl:Close()

 return(nil)
]]>
ES ERROR MIO.
NOSE DONDE ESTA PERO SI ES ERROR MIO.
DISCULPA NUEVAMENTE.
Gracias y Saludos

Dario Fernandez





Hola amigos

Sigo con problemas de imprersión en 2501 con Microsoft Vs 2022.
Estoy usando la 2212 ahora y todo bien
Uso MsVs 2022
Gracias


dejo imágen y codigo.
https://ibb.co/5X6VJcKL

Code: Select all | Expand

FUNCTION PRNSLOT()
    LOCAL  slnro,slnombre,slvalor,slbanco, slcam1,slcam2,slcam3,slmoneda,slcam4
  
    basesl := TData():New(,ruta+"SLOTS" )
    If basesl:Use() 
        basesl:SetOrder("NMAQ")
        basesl:GoTop()
    else
        MsgInfo('Error de apertura de archivo', 'Informe')
        return(.f.) 
    endif
     titulolistado := "Listado de Slots"
    CursorWait()
   
    
    PRINT oPrn NAME "Lista de Slots" PREVIEW MODAL 
        
        oPrn:SetPage(1)
        oPrn:SetPortrait()
    
    
        DEFINE FONT oFont11 NAME "TIMES NEW ROMAN" SIZE 0,-14 BOLD OF oPrn
        DEFINE FONT oFont12 NAME "HELVETICA" SIZE 0,-10 OF oPrn
        DEFINE FONT oFont13 NAME "HELVETICA" SIZE 0,-16 BOLD ITALIC  OF oPrn
        DEFINE FONT oFont14 NAME "Segoe UI" SIZE 0,-10    OF oPrn
        DEFINE FONT oFont15 NAME "TAHOMA" SIZE 0,-8 OF oPrn
        DEFINE FONT oFont16 NAME "CAMBRIA" SIZE 0,-10 BOLD ITALIC  OF oPrn
        DEFINE BRUSH oBrush COLOR CLR_WHITE 
        DEFINE PEN oPen WIDTH 1 COLOR CLR_BLACK
        
     
        aDesde := oPrn:Cmtr2Pix(0.5,2.5)
        aAncho := oPrn:Cmtr2Pix(3,2.5)
    
           
        cmt := 1
        PAGE 
              
        oPrn:RoundBox(2,8,3,14,0.3,0.3,oPen,CLR_WHITE,{"Qué hago mal ?", {oFont11 }, CLR_BLACK},"CM")

        cmt+=0.7 
        basesl:Gotop()   
    
        do while !basesl:Eof()
          
            slnro:=basesl:nslot
            slnombre:=basesl:snom
            slbanco:=basesl:cbanco
            slcam1:=basesl:cubre1
            slcam2:=basesl:cubre2
            slcam3:=basesl:cubre3
            slmoneda:= if(basesl:moneda="D",HBA("Dólares"), "Pesos")
          
            slvalor:= basesl:valor
            slcam4:= xTrim(slcam1)+" - "+xTrim(slcam2)+" - "+xTrim(slcam3)
            oPrn:CmSay( cmt,  3.2, slnro, oFont15,2, CLR_BLACK,,1)
                      
            cmt+=0.5
            SysRefresh()
          
            if cmt >=23
              // PieSlotPagina()
              //OtraSlotPagina()
               basesl:Skip()
            ELSE
               basesl:Skip()
            ENDIF
        ENDDO
      
   
    ENDPAGE

    PAGE
    ENDPAGE  

    ENDPRINT
    
    oFont11:END()
    oFont12:END()
    oFont13:END()
    oFont14:END()
    oFont15:END()
    oFont16:END()
    oBrush:End()
    oPen:End()    
    SysRefresh()
    
      
    basesl:Close()

 return(nil)
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Sigue problema impresion 2501 :: Reply by Antonio Linares]]> 2025-02-20T15:14:32-07:00 2025-02-20T15:14:32-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45440&p=277805#p277805
Cual es el error ?

gracias]]>

Cual es el error ?

gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Sigue problema impresion 2501 :: Reply by D.Fernandez]]> 2025-02-20T15:23:02-07:00 2025-02-20T15:23:02-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45440&p=277806#p277806
Deje una imagen. Cuando trato de imprimir mas de una hoja, me muestra el menu de de impresión incompleto como se ve el la imagen.
En la 2409 pasa lo mismo.

Después se sale de la aplicacion.

Utilizando todo lo mismo, pero compilando con la 2212 no pasa.




Gracias. Saludos.]]>

Deje una imagen. Cuando trato de imprimir mas de una hoja, me muestra el menu de de impresión incompleto como se ve el la imagen.
En la 2409 pasa lo mismo.

Después se sale de la aplicacion.

Utilizando todo lo mismo, pero compilando con la 2212 no pasa.




Gracias. Saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Sigue problema impresion 2501 :: Reply by Antonio Linares]]> 2025-02-20T15:43:17-07:00 2025-02-20T15:43:17-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45440&p=277807#p277807 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Sigue problema impresion 2501 :: Reply by D.Fernandez]]> 2025-02-20T15:55:33-07:00 2025-02-20T15:55:33-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45440&p=277809#p277809 Aquí está.

Sucede cuando muestra el menú de imprimir y tengo mas de 1 hoja,

Gracias, saludos

Code: Select all | Expand

Application Internal Error - C:\Fuentes\MasterForm\Masterform.Exe
Terminated at: 2025-02-20 19:53:01
Error irrecuperable 6005: Exception error:

    Exception Code:C0000005 ACCESS_VIOLATION
    Exception Address:77E1BDF7
    EAX:00000000  EBX:01330000  ECX:0138FA18  EDX:004F0060
    ESI:00271F43  EDI:01330000  EBP:00F9B1E0
    CS:EIP:0023:77E1BDF7  SS:ESP:002B:00F9B108
    DS:002B  ES:002B  FS:0053  GS:002B
    Flags:00210246
    Exception Parameters: 00000000 00000014
    CS:EIP: 66 8B 40 14 0F B7 F8 8A 51 07 80 FA 05 75 0C 0F
    SS:ESP: BB27CC81 01330000 0138FA18 00000000 00F9B13C 77E757F1 032F0258 77E32B89 032F0000 00000001 00002EF0 000005DE 000005DE 00F9B2B0 77E325FA 77E32A3E

    C stack:
    EIP:     EBP:       Frame: OldEBP, RetAddr, Params...
    77E1BDF7 00F9B1E0   00F9B270 77E71513 0138FA20 00000008 00000001 01330000 00000002 00000018 00000008 00000000
    77E71513 00F9B270   00F9B28C 77E44F2B 0138FA20 00000008 032F0564 00F9B2B8 6ADE73BB
    77E44F2B 00F9B28C   00F9B2BC 6ADE724D 01330000 00000008 0138FA20 00000008 032F0548 032F6FE8 00001770 00000000
    6ADE724D 00F9B2BC   00F9B2E4 6AE07F27 00000001 00000001 032F0548 032F81C8 00000000 767C8AC6 032F6FE8 00000001
    6AE07F27 00F9B2E4   00F9B2F8 6ADF5DB3 032F81C8 00001770 032F81C8
    6ADF5DB3 00F9B2F8   00F9B31C 6ADF5D0D 032F0548 00001770 00000001 80004005 6ADF5530 032F0548 032F81C8
    6ADF5D0D 00F9B31C   00F9B348 6ADE9512 00001770 00000001 032F2C18 6AE11E50 032F9900 00002EE2 032F055C 032F8208
    6ADE9512 00F9B348   00F9B39C 6AE0047E 032F2BCC 00000000 00001770 00F9B388 7E85D868 032F98D0 6AE00410 032F873C
    6AE0047E 00F9B39C   00F9B3BC 6ADFF8E7 032F8738 00000000 032F98EC 032F98F4 032F98D0 6ADFF8C0
    6ADFF8E7 00F9B3BC   00F9B3F4 6ADFF505 032F8738 7E85D800 032F2BC0 6ADFF380 032F2C64 032F98D0 00000001 032F98D0
    6ADFF505 00F9B3F4   00F9B428 6ADF115D 032F873C 2F2BC019 00000000 6ADF11B0 032F2BC0 032F28A0 6ADE5740 6ADE5752
    6ADF115D 00F9B428   00F9B444 6ADF11FF 00000002 032F873C 00000016 6ADF11B0 00F9B488
    6ADF11FF 00F9B444   00F9B45C 6ADEFC7B 032F2BC0 00F9B478 00000001 01411388
    6ADEFC7B 00F9B45C   00F9B488 6ADEFDAD 00F9B478 00000001 032F2BE0 00000006 032F4680 6ADF11B0 00000016 00000002
    6ADEFDAD 00F9B488   00F9B4A4 6ADF07E0 00000006 00000000 032F0550 6ADF0790 00000000
    6ADF07E0 00F9B4A4   00F9B4CC 6ADF506A 032F2BE0 00000006 0133BF58 6ADF4FD0 032F0548 00000000 00000000 00000000
    6ADF506A 00F9B4CC   00F9B4E4 76C0EE5E 032F0550 00000006 00000006 76C0EE30
    76C0EE5E 00F9B4E4   00F9B4FC 6ADF5812 0133BF58 00000006 00F9B5BC 6ADF57F0
    6ADF5812 00F9B4FC   00F9B51C 6ADEFB81 032F0548 00000006 00F9B5BC 00F9B5BC 00000000 032F2BC0
    6ADEFB81 00F9B51C   00F9B54C 6ADEFF61 00F9B5BC 7E85DEB8 00F9B5BC 6ADEA020 00000016 01411378 032F2BC0 00F9B5F8


Modules:
00220000 005A6000 C:\Fuentes\MasterForm\Masterform.Exe
77DE0000 001BA000 C:\WINDOWS\SYSTEM32\ntdll.dll
76FC0000 000F0000 C:\WINDOWS\System32\KERNEL32.DLL
76140000 002A9000 C:\WINDOWS\System32\KERNELBASE.dll
77240000 001C5000 C:\WINDOWS\System32\USER32.dll
76BA0000 0001A000 C:\WINDOWS\System32\win32u.dll
77DA0000 00022000 C:\WINDOWS\System32\GDI32.dll
770C0000 000EB000 C:\WINDOWS\System32\gdi32full.dll
766F0000 00085000 C:\WINDOWS\System32\msvcp_win.dll
75E60000 00110000 C:\WINDOWS\System32\ucrtbase.dll
768C0000 000B4000 C:\WINDOWS\System32\COMDLG32.dll
76460000 0027F000 C:\WINDOWS\System32\combase.dll
6D6B0000 00227000 C:\WINDOWS\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.26100.3037_none_85b65d03f7afec7e\COMCTL32.dll
77480000 000B9000 C:\WINDOWS\System32\RPCRT4.dll
76780000 000C7000 C:\WINDOWS\System32\msvcrt.dll
6CBB0000 00090000 C:\WINDOWS\SYSTEM32\WINSPOOL.DRV
77660000 000C8000 C:\WINDOWS\System32\shcore.dll
76E40000 0004B000 C:\WINDOWS\System32\SHLWAPI.dll
77790000 005EB000 C:\WINDOWS\System32\SHELL32.dll
721B0000 00049000 C:\WINDOWS\SYSTEM32\cfgmgr32.dll
76E90000 0007F000 C:\WINDOWS\System32\ADVAPI32.dll
775B0000 00083000 C:\WINDOWS\System32\sechost.dll
76CE0000 00151000 C:\WINDOWS\System32\ole32.dll
75F80000 0009E000 C:\WINDOWS\System32\OLEAUT32.dll
77540000 00060000 C:\WINDOWS\System32\WS2_32.dll
752F0000 00008000 C:\WINDOWS\SYSTEM32\VERSION.dll
6ECD0000 00019000 C:\WINDOWS\SYSTEM32\MPR.dll
6ACC0000 00008000 C:\WINDOWS\SYSTEM32\WSOCK32.dll
75730000 00006000 C:\WINDOWS\SYSTEM32\MSIMG32.dll
5BBE0000 0002E000 C:\WINDOWS\SYSTEM32\oledlg.dll
6C130000 0016C000 C:\WINDOWS\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.26100.3037_none_b6a14fe95242664c\gdiplus.dll
724C0000 00033000 C:\WINDOWS\SYSTEM32\WINMM.dll
76A00000 00025000 C:\WINDOWS\System32\IMM32.DLL
74790000 00082000 C:\WINDOWS\system32\uxtheme.dll
76BC0000 00117000 C:\WINDOWS\System32\MSCTF.dll
6B080000 0009F000 C:\WINDOWS\SYSTEM32\TextShaping.dll
75360000 00014000 C:\WINDOWS\SYSTEM32\kernel.appcore.dll
77410000 00069000 C:\WINDOWS\System32\bcryptPrimitives.dll
6AD50000 00101000 C:\WINDOWS\SYSTEM32\textinputframework.dll
6AA60000 000DC000 C:\WINDOWS\SYSTEM32\CoreMessaging.dll
5B600000 00292000 C:\WINDOWS\SYSTEM32\CoreUIComponents.dll
720B0000 000F9000 C:\WINDOWS\SYSTEM32\wintypes.dll
72290000 0000B000 C:\WINDOWS\SYSTEM32\CRYPTBASE.DLL
10000000 00341000 C:\WINDOWS\SYSTEM32\freeimage.dll
73BC0000 006B7000 C:\WINDOWS\SYSTEM32\Windows.Storage.dll
6B130000 001DE000 C:\WINDOWS\SYSTEM32\WindowsCodecs.dll
771B0000 00081000 C:\WINDOWS\System32\clbcatq.dll
6F1B0000 00025000 C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL
77640000 00007000 C:\WINDOWS\System32\NSI.dll
6F050000 00018000 C:\WINDOWS\SYSTEM32\dhcpcsvc6.DLL
6F030000 0001D000 C:\WINDOWS\SYSTEM32\dhcpcsvc.DLL
6F0D0000 000DB000 C:\WINDOWS\SYSTEM32\DNSAPI.dll
5F000000 00011000 C:\WINDOWS\SYSTEM32\CTL3D32.DLL

Called from ENDDIALOG(0)
Called from TDIALOG:END(785) in .\source\classes\dialog.prg
Called from (b)TPREVIEW_PRINTPAGE(1596) in .\source\classes\rpreview.prg
Called from TBUTTON:CLICK(193) in .\source\classes\button.prg
Called from TBUTTON:HANDLEEVENT(1831) in .\source\classes\control.prg
Called from _FWH(3719) in .\source\classes\window.prg
Called from SENDMESSAGE(0)
Called from TDIALOG:COMMAND(518) in .\source\classes\dialog.prg
Called from TWINDOW:HANDLEEVENT(0)
Called from TDIALOG:HANDLEEVENT(1247) in .\source\classes\dialog.prg
Called from DIALOGBOXINDIRECT(0)
Called from TDIALOG:ACTIVATE(325) in .\source\classes\dialog.prg
Called from TPREVIEW:PRINTPAGE(1599) in .\source\classes\rpreview.prg
Called from (b)TPREVIEW_BUILDBUTTONBAR(367) in .\source\classes\rpreview.prg
Called from TBTNBMP:CLICK(816) in .\source\classes\btnbmp.prg
Called from TBTNBMP:LBUTTONUP(1100) in .\source\classes\btnbmp.prg
Called from TCONTROL:HANDLEEVENT(1867) in .\source\classes\control.prg
Called from TBTNBMP:HANDLEEVENT(2145) in .\source\classes\btnbmp.prg
Called from _FWH(3719) in .\source\classes\window.prg
Called from SYSREFRESH(0)
Called from STOPUNTIL(70) in .\source\function\msgrun.prg
Called from TPREVIEW:ACTIVATE(179) in .\source\classes\rpreview.prg
Called from RPREVIEW(1880) in .\source\classes\rpreview.prg
Called from (b)TPRINTER(327) in .\source\classes\printer.prg
Called from TPRINTER:PREVIEW(0) in .\source\classes\printer.prg
Called from PRINTEND(2067) in .\source\classes\printer.prg
Called from EMPLEIMPRE(928) in emple.prg
Called from (b)HACEBAREMPLE(344) in emple.prg
Called from TBTNBMP:CLICK(816) in .\source\classes\btnbmp.prg
Called from TBTNBMP:LBUTTONUP(1103) in .\source\classes\btnbmp.prg
Called from TCONTROL:HANDLEEVENT(1867) in .\source\classes\control.prg
Called from TBTNBMP:HANDLEEVENT(2145) in .\source\classes\btnbmp.prg
Called from _FWH(3719) in .\source\classes\window.prg
Called from WINRUN(0)
Called from TMDIFRAME:ACTIVATE(1137) in .\source\classes\window.prg
Called from MAIN(260) in masterform.prg
]]>
Aquí está.

Sucede cuando muestra el menú de imprimir y tengo mas de 1 hoja,

Gracias, saludos

Code: Select all | Expand

Application Internal Error - C:\Fuentes\MasterForm\Masterform.Exe
Terminated at: 2025-02-20 19:53:01
Error irrecuperable 6005: Exception error:

    Exception Code:C0000005 ACCESS_VIOLATION
    Exception Address:77E1BDF7
    EAX:00000000  EBX:01330000  ECX:0138FA18  EDX:004F0060
    ESI:00271F43  EDI:01330000  EBP:00F9B1E0
    CS:EIP:0023:77E1BDF7  SS:ESP:002B:00F9B108
    DS:002B  ES:002B  FS:0053  GS:002B
    Flags:00210246
    Exception Parameters: 00000000 00000014
    CS:EIP: 66 8B 40 14 0F B7 F8 8A 51 07 80 FA 05 75 0C 0F
    SS:ESP: BB27CC81 01330000 0138FA18 00000000 00F9B13C 77E757F1 032F0258 77E32B89 032F0000 00000001 00002EF0 000005DE 000005DE 00F9B2B0 77E325FA 77E32A3E

    C stack:
    EIP:     EBP:       Frame: OldEBP, RetAddr, Params...
    77E1BDF7 00F9B1E0   00F9B270 77E71513 0138FA20 00000008 00000001 01330000 00000002 00000018 00000008 00000000
    77E71513 00F9B270   00F9B28C 77E44F2B 0138FA20 00000008 032F0564 00F9B2B8 6ADE73BB
    77E44F2B 00F9B28C   00F9B2BC 6ADE724D 01330000 00000008 0138FA20 00000008 032F0548 032F6FE8 00001770 00000000
    6ADE724D 00F9B2BC   00F9B2E4 6AE07F27 00000001 00000001 032F0548 032F81C8 00000000 767C8AC6 032F6FE8 00000001
    6AE07F27 00F9B2E4   00F9B2F8 6ADF5DB3 032F81C8 00001770 032F81C8
    6ADF5DB3 00F9B2F8   00F9B31C 6ADF5D0D 032F0548 00001770 00000001 80004005 6ADF5530 032F0548 032F81C8
    6ADF5D0D 00F9B31C   00F9B348 6ADE9512 00001770 00000001 032F2C18 6AE11E50 032F9900 00002EE2 032F055C 032F8208
    6ADE9512 00F9B348   00F9B39C 6AE0047E 032F2BCC 00000000 00001770 00F9B388 7E85D868 032F98D0 6AE00410 032F873C
    6AE0047E 00F9B39C   00F9B3BC 6ADFF8E7 032F8738 00000000 032F98EC 032F98F4 032F98D0 6ADFF8C0
    6ADFF8E7 00F9B3BC   00F9B3F4 6ADFF505 032F8738 7E85D800 032F2BC0 6ADFF380 032F2C64 032F98D0 00000001 032F98D0
    6ADFF505 00F9B3F4   00F9B428 6ADF115D 032F873C 2F2BC019 00000000 6ADF11B0 032F2BC0 032F28A0 6ADE5740 6ADE5752
    6ADF115D 00F9B428   00F9B444 6ADF11FF 00000002 032F873C 00000016 6ADF11B0 00F9B488
    6ADF11FF 00F9B444   00F9B45C 6ADEFC7B 032F2BC0 00F9B478 00000001 01411388
    6ADEFC7B 00F9B45C   00F9B488 6ADEFDAD 00F9B478 00000001 032F2BE0 00000006 032F4680 6ADF11B0 00000016 00000002
    6ADEFDAD 00F9B488   00F9B4A4 6ADF07E0 00000006 00000000 032F0550 6ADF0790 00000000
    6ADF07E0 00F9B4A4   00F9B4CC 6ADF506A 032F2BE0 00000006 0133BF58 6ADF4FD0 032F0548 00000000 00000000 00000000
    6ADF506A 00F9B4CC   00F9B4E4 76C0EE5E 032F0550 00000006 00000006 76C0EE30
    76C0EE5E 00F9B4E4   00F9B4FC 6ADF5812 0133BF58 00000006 00F9B5BC 6ADF57F0
    6ADF5812 00F9B4FC   00F9B51C 6ADEFB81 032F0548 00000006 00F9B5BC 00F9B5BC 00000000 032F2BC0
    6ADEFB81 00F9B51C   00F9B54C 6ADEFF61 00F9B5BC 7E85DEB8 00F9B5BC 6ADEA020 00000016 01411378 032F2BC0 00F9B5F8


Modules:
00220000 005A6000 C:\Fuentes\MasterForm\Masterform.Exe
77DE0000 001BA000 C:\WINDOWS\SYSTEM32\ntdll.dll
76FC0000 000F0000 C:\WINDOWS\System32\KERNEL32.DLL
76140000 002A9000 C:\WINDOWS\System32\KERNELBASE.dll
77240000 001C5000 C:\WINDOWS\System32\USER32.dll
76BA0000 0001A000 C:\WINDOWS\System32\win32u.dll
77DA0000 00022000 C:\WINDOWS\System32\GDI32.dll
770C0000 000EB000 C:\WINDOWS\System32\gdi32full.dll
766F0000 00085000 C:\WINDOWS\System32\msvcp_win.dll
75E60000 00110000 C:\WINDOWS\System32\ucrtbase.dll
768C0000 000B4000 C:\WINDOWS\System32\COMDLG32.dll
76460000 0027F000 C:\WINDOWS\System32\combase.dll
6D6B0000 00227000 C:\WINDOWS\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.26100.3037_none_85b65d03f7afec7e\COMCTL32.dll
77480000 000B9000 C:\WINDOWS\System32\RPCRT4.dll
76780000 000C7000 C:\WINDOWS\System32\msvcrt.dll
6CBB0000 00090000 C:\WINDOWS\SYSTEM32\WINSPOOL.DRV
77660000 000C8000 C:\WINDOWS\System32\shcore.dll
76E40000 0004B000 C:\WINDOWS\System32\SHLWAPI.dll
77790000 005EB000 C:\WINDOWS\System32\SHELL32.dll
721B0000 00049000 C:\WINDOWS\SYSTEM32\cfgmgr32.dll
76E90000 0007F000 C:\WINDOWS\System32\ADVAPI32.dll
775B0000 00083000 C:\WINDOWS\System32\sechost.dll
76CE0000 00151000 C:\WINDOWS\System32\ole32.dll
75F80000 0009E000 C:\WINDOWS\System32\OLEAUT32.dll
77540000 00060000 C:\WINDOWS\System32\WS2_32.dll
752F0000 00008000 C:\WINDOWS\SYSTEM32\VERSION.dll
6ECD0000 00019000 C:\WINDOWS\SYSTEM32\MPR.dll
6ACC0000 00008000 C:\WINDOWS\SYSTEM32\WSOCK32.dll
75730000 00006000 C:\WINDOWS\SYSTEM32\MSIMG32.dll
5BBE0000 0002E000 C:\WINDOWS\SYSTEM32\oledlg.dll
6C130000 0016C000 C:\WINDOWS\WinSxS\x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.26100.3037_none_b6a14fe95242664c\gdiplus.dll
724C0000 00033000 C:\WINDOWS\SYSTEM32\WINMM.dll
76A00000 00025000 C:\WINDOWS\System32\IMM32.DLL
74790000 00082000 C:\WINDOWS\system32\uxtheme.dll
76BC0000 00117000 C:\WINDOWS\System32\MSCTF.dll
6B080000 0009F000 C:\WINDOWS\SYSTEM32\TextShaping.dll
75360000 00014000 C:\WINDOWS\SYSTEM32\kernel.appcore.dll
77410000 00069000 C:\WINDOWS\System32\bcryptPrimitives.dll
6AD50000 00101000 C:\WINDOWS\SYSTEM32\textinputframework.dll
6AA60000 000DC000 C:\WINDOWS\SYSTEM32\CoreMessaging.dll
5B600000 00292000 C:\WINDOWS\SYSTEM32\CoreUIComponents.dll
720B0000 000F9000 C:\WINDOWS\SYSTEM32\wintypes.dll
72290000 0000B000 C:\WINDOWS\SYSTEM32\CRYPTBASE.DLL
10000000 00341000 C:\WINDOWS\SYSTEM32\freeimage.dll
73BC0000 006B7000 C:\WINDOWS\SYSTEM32\Windows.Storage.dll
6B130000 001DE000 C:\WINDOWS\SYSTEM32\WindowsCodecs.dll
771B0000 00081000 C:\WINDOWS\System32\clbcatq.dll
6F1B0000 00025000 C:\WINDOWS\SYSTEM32\IPHLPAPI.DLL
77640000 00007000 C:\WINDOWS\System32\NSI.dll
6F050000 00018000 C:\WINDOWS\SYSTEM32\dhcpcsvc6.DLL
6F030000 0001D000 C:\WINDOWS\SYSTEM32\dhcpcsvc.DLL
6F0D0000 000DB000 C:\WINDOWS\SYSTEM32\DNSAPI.dll
5F000000 00011000 C:\WINDOWS\SYSTEM32\CTL3D32.DLL

Called from ENDDIALOG(0)
Called from TDIALOG:END(785) in .\source\classes\dialog.prg
Called from (b)TPREVIEW_PRINTPAGE(1596) in .\source\classes\rpreview.prg
Called from TBUTTON:CLICK(193) in .\source\classes\button.prg
Called from TBUTTON:HANDLEEVENT(1831) in .\source\classes\control.prg
Called from _FWH(3719) in .\source\classes\window.prg
Called from SENDMESSAGE(0)
Called from TDIALOG:COMMAND(518) in .\source\classes\dialog.prg
Called from TWINDOW:HANDLEEVENT(0)
Called from TDIALOG:HANDLEEVENT(1247) in .\source\classes\dialog.prg
Called from DIALOGBOXINDIRECT(0)
Called from TDIALOG:ACTIVATE(325) in .\source\classes\dialog.prg
Called from TPREVIEW:PRINTPAGE(1599) in .\source\classes\rpreview.prg
Called from (b)TPREVIEW_BUILDBUTTONBAR(367) in .\source\classes\rpreview.prg
Called from TBTNBMP:CLICK(816) in .\source\classes\btnbmp.prg
Called from TBTNBMP:LBUTTONUP(1100) in .\source\classes\btnbmp.prg
Called from TCONTROL:HANDLEEVENT(1867) in .\source\classes\control.prg
Called from TBTNBMP:HANDLEEVENT(2145) in .\source\classes\btnbmp.prg
Called from _FWH(3719) in .\source\classes\window.prg
Called from SYSREFRESH(0)
Called from STOPUNTIL(70) in .\source\function\msgrun.prg
Called from TPREVIEW:ACTIVATE(179) in .\source\classes\rpreview.prg
Called from RPREVIEW(1880) in .\source\classes\rpreview.prg
Called from (b)TPRINTER(327) in .\source\classes\printer.prg
Called from TPRINTER:PREVIEW(0) in .\source\classes\printer.prg
Called from PRINTEND(2067) in .\source\classes\printer.prg
Called from EMPLEIMPRE(928) in emple.prg
Called from (b)HACEBAREMPLE(344) in emple.prg
Called from TBTNBMP:CLICK(816) in .\source\classes\btnbmp.prg
Called from TBTNBMP:LBUTTONUP(1103) in .\source\classes\btnbmp.prg
Called from TCONTROL:HANDLEEVENT(1867) in .\source\classes\control.prg
Called from TBTNBMP:HANDLEEVENT(2145) in .\source\classes\btnbmp.prg
Called from _FWH(3719) in .\source\classes\window.prg
Called from WINRUN(0)
Called from TMDIFRAME:ACTIVATE(1137) in .\source\classes\window.prg
Called from MAIN(260) in masterform.prg
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Sigue problema impresion 2501 :: Reply by Antonio Linares]]> 2025-02-20T16:09:48-07:00 2025-02-20T16:09:48-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45440&p=277810#p277810
Para poder probarlo aqui, he modificado el código asi y funciona bien.

Por favor, puedes probarlo y comprobar si tambien te funciona bien ? gracias!

test.prg

Code: Select all | Expand

#include "FiveWin.ch"

FUNCTION Main()
    LOCAL  slnro,slnombre,slvalor,slbanco, slcam1,slcam2,slcam3,slmoneda,slcam4
  
    CursorWait()
   

    USE customer
    
    PRINT oPrn NAME "Lista de Slots" PREVIEW MODAL 
        
        oPrn:SetPage(1)
        oPrn:SetPortrait()
    
    
        DEFINE FONT oFont11 NAME "TIMES NEW ROMAN" SIZE 0,-14 BOLD OF oPrn
        DEFINE FONT oFont12 NAME "HELVETICA" SIZE 0,-10 OF oPrn
        DEFINE FONT oFont13 NAME "HELVETICA" SIZE 0,-16 BOLD ITALIC  OF oPrn
        DEFINE FONT oFont14 NAME "Segoe UI" SIZE 0,-10    OF oPrn
        DEFINE FONT oFont15 NAME "TAHOMA" SIZE 0,-8 OF oPrn
        DEFINE FONT oFont16 NAME "CAMBRIA" SIZE 0,-10 BOLD ITALIC  OF oPrn
        DEFINE BRUSH oBrush COLOR CLR_WHITE 
        DEFINE PEN oPen WIDTH 1 COLOR CLR_BLACK
        
     
        aDesde := oPrn:Cmtr2Pix(0.5,2.5)
        aAncho := oPrn:Cmtr2Pix(3,2.5)
    
           
        cmt := 1
        PAGE 
              
        oPrn:RoundBox(2,8,3,14,0.3,0.3,oPen,CLR_WHITE,{"Qué hago mal ?", {oFont11 }, CLR_BLACK},"CM")

        cmt+=0.7 
        DbGoTop()   
    
        do while ! Eof()
          
            oPrn:CmSay( cmt,  3.2, "test", oFont15,2, CLR_BLACK,,1)
                      
            cmt+=0.5
            SysRefresh()
          
            if cmt >=23
              // PieSlotPagina()
              //OtraSlotPagina()
               DbSkip()
            ELSE
               DbSkip()
            ENDIF
        ENDDO
      
   
    ENDPAGE

    PAGE
    ENDPAGE  

    ENDPRINT
    
    oFont11:END()
    oFont12:END()
    oFont13:END()
    oFont14:END()
    oFont15:END()
    oFont16:END()
    oBrush:End()
    oPen:End()    
    SysRefresh()
    
      

 return(nil)
]]>

Para poder probarlo aqui, he modificado el código asi y funciona bien.

Por favor, puedes probarlo y comprobar si tambien te funciona bien ? gracias!

test.prg

Code: Select all | Expand

#include "FiveWin.ch"

FUNCTION Main()
    LOCAL  slnro,slnombre,slvalor,slbanco, slcam1,slcam2,slcam3,slmoneda,slcam4
  
    CursorWait()
   

    USE customer
    
    PRINT oPrn NAME "Lista de Slots" PREVIEW MODAL 
        
        oPrn:SetPage(1)
        oPrn:SetPortrait()
    
    
        DEFINE FONT oFont11 NAME "TIMES NEW ROMAN" SIZE 0,-14 BOLD OF oPrn
        DEFINE FONT oFont12 NAME "HELVETICA" SIZE 0,-10 OF oPrn
        DEFINE FONT oFont13 NAME "HELVETICA" SIZE 0,-16 BOLD ITALIC  OF oPrn
        DEFINE FONT oFont14 NAME "Segoe UI" SIZE 0,-10    OF oPrn
        DEFINE FONT oFont15 NAME "TAHOMA" SIZE 0,-8 OF oPrn
        DEFINE FONT oFont16 NAME "CAMBRIA" SIZE 0,-10 BOLD ITALIC  OF oPrn
        DEFINE BRUSH oBrush COLOR CLR_WHITE 
        DEFINE PEN oPen WIDTH 1 COLOR CLR_BLACK
        
     
        aDesde := oPrn:Cmtr2Pix(0.5,2.5)
        aAncho := oPrn:Cmtr2Pix(3,2.5)
    
           
        cmt := 1
        PAGE 
              
        oPrn:RoundBox(2,8,3,14,0.3,0.3,oPen,CLR_WHITE,{"Qué hago mal ?", {oFont11 }, CLR_BLACK},"CM")

        cmt+=0.7 
        DbGoTop()   
    
        do while ! Eof()
          
            oPrn:CmSay( cmt,  3.2, "test", oFont15,2, CLR_BLACK,,1)
                      
            cmt+=0.5
            SysRefresh()
          
            if cmt >=23
              // PieSlotPagina()
              //OtraSlotPagina()
               DbSkip()
            ELSE
               DbSkip()
            ENDIF
        ENDDO
      
   
    ENDPAGE

    PAGE
    ENDPAGE  

    ENDPRINT
    
    oFont11:END()
    oFont12:END()
    oFont13:END()
    oFont14:END()
    oFont15:END()
    oFont16:END()
    oBrush:End()
    oPen:End()    
    SysRefresh()
    
      

 return(nil)
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Sigue problema impresion 2501 :: Reply by D.Fernandez]]> 2025-02-20T16:32:22-07:00 2025-02-20T16:32:22-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45440&p=277811#p277811
dejo el archivo.Env con el que compilo

Code: Select all | Expand

[Environment]
Description 1=Harbour/FWH/MSVC2022 32 bits
Description 2=
Description 3=
PRG Compiler ver=3.2
C compiler ver=2407 32 bits
Subsystem=GTGUI
Author=Dario Fernandez
Last update=02/17/2025

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

[Harbour]
HB_INSTALL=C:\vscharbour
HB_COMMAND=%HB_BIN_INSTALL%\harbour.Exe %PRG% -m -n -gc0 -w0 -es2 -i%HB_INC_INSTALL% -ic:\fwh2407\include;c:\fwh2407\include2 -q0 -ql
Option prefix=-

[C]
C_INSTALL=c:\vc2022
C_COMP_COMMAND=%C_INSTALL%\bin32\cl.exe -nologo -TC -W3 -O2 -c /GS- %CRLF%-I%C_INC_INSTALL% -I%HB_INC_INSTALL% -Id:\fwh2206\include -I%HOME%\include -D__FLAT__ /GA -Fo%OBJ% %C%
C_LIB_COMMAND=%C_INSTALL%\bin32\lib.exe -nologo /MACHINE:X86 /OUT:%LIB% @%RSP%
C_LINK_COMMAND=%C_INSTALL%\bin32\link.exe -nologo /SUBSYSTEM:windows /NODEFAULTLIB:msvcrt /FORCE:multiple %CRLF% /LIBPATH:%C_INSTALL%\lib\win32 /LIBPATH:%HB_INSTALL%\lib\win\msvc /LIBPATH:%HOME%\lib @%LNK%
C_RC_COMMAND=%C_INSTALL%\bin32\rc.exe -nologo -r -d__FLAT__ -i%C_INC_INSTALL% -fo%RES% %RC%
C_DLL_COMMAND=
Option prefix=-

[User]
POSTEXE_COMMAND=
POSTLIB_COMMAND=
POSTDLL_COMMAND=

[Files]
C:\fwh2501\lib\FiveH32.lib=1
C:\fwh2501\lib\FiveHC32.lib=2
C:\fwh2501\lib\libmysql32.lib=3
C:\fwh2501\lib\libmysqld32.lib=4
%HB_LIB_INSTALL%\win\msvc\hbrtl.lib=5
%HB_LIB_INSTALL%\win\msvc\hbvm.lib=6
%HB_LIB_INSTALL%\win\msvc\gtgui.lib=7
%HB_LIB_INSTALL%\win\msvc\hblang.lib=8
%HB_LIB_INSTALL%\win\msvc\hbmacro.lib=9
%HB_LIB_INSTALL%\win\msvc\hbmemio.lib=10
%HB_LIB_INSTALL%\win\msvc\hbrdd.lib=11
%HB_LIB_INSTALL%\win\msvc\rddntx.lib=12
%HB_LIB_INSTALL%\win\msvc\rddcdx.lib=13
%HB_LIB_INSTALL%\win\msvc\rddfpt.lib=14
%HB_LIB_INSTALL%\win\msvc\hbdebug.lib=15
%HB_LIB_INSTALL%\win\msvc\hbcommon.lib=16
%HB_LIB_INSTALL%\win\msvc\hbpp.lib=17
%HB_LIB_INSTALL%\win\msvc\hbcpage.lib=18
%HB_LIB_INSTALL%\win\msvc\hbwin.lib=19
%HB_LIB_INSTALL%\win\msvc\hbcplr.lib=20
%HB_LIB_INSTALL%\win\msvc\hbpcre.lib=21
%HB_LIB_INSTALL%\win\msvc\hbct.lib=22
%HB_LIB_INSTALL%\win\msvc\xhb.lib=23
%HB_LIB_INSTALL%\win\msvc\png.lib=24
%HB_LIB_INSTALL%\win\msvc\hbziparc.lib=25
%HB_LIB_INSTALL%\win\msvc\hbmzip.lib=26
%HB_LIB_INSTALL%\win\msvc\hbzlib.lib=27
%HB_LIB_INSTALL%\win\msvc\minizip.lib=28
%HB_LIB_INSTALL%\win\msvc\hbtip.lib=29
%HB_LIB_INSTALL%\win\msvc\hbxpp.lib=30
%HB_LIB_INSTALL%\win\msvc\hbmisc.lib=31
%HB_LIB_INSTALL%\win\msvc\hbzebra.lib=32
%C_INSTALL%\lib\win32\kernel32.Lib=33
%C_INSTALL%\lib\win32\user32.Lib=34
%C_INSTALL%\lib\win32\gdi32.Lib=35
%C_INSTALL%\lib\win32\winspool.Lib=36
%C_INSTALL%\lib\win32\comctl32.Lib=37
%C_INSTALL%\lib\win32\comdlg32.Lib=38
%C_INSTALL%\lib\win32\advapi32.Lib=39
%C_INSTALL%\lib\win32\shell32.lib=40
%C_INSTALL%\lib\win32\ole32.Lib=41
%C_INSTALL%\lib\win32\oleaut32.Lib=42
%C_INSTALL%\lib\win32\uuid.Lib=43
%C_INSTALL%\lib\win32\odbc32.lib=44
%C_INSTALL%\lib\win32\odbccp32.lib=45
%C_INSTALL%\lib\win32\iphlpapi.Lib=46
%C_INSTALL%\lib\win32\mpr.lib=47
%C_INSTALL%\lib\win32\version.lib=48
%C_INSTALL%\lib\win32\wsock32.lib=49
%C_INSTALL%\lib\win32\msimg32.lib=50
%C_INSTALL%\lib\win32\oledlg.lib=51
%C_INSTALL%\lib\win32\psapi.lib=52
%C_INSTALL%\lib\win32\gdiplus.lib=53
%C_INSTALL%\lib\win32\winmm.lib=54
%C_INSTALL%\lib\win32\vfw32.lib=55
%C_INSTALL%\lib\win32\runtimeobject.lib=56
%C_INSTALL%\lib\win32\ws2_32.lib=57
%C_INSTALL%\lib\win32\shlwapi.lib=58
%C_INSTALL%\lib\win32\strmiids.lib=59
%C_INSTALL%\lib\win32\wininet.lib=60
%HB_LIB_INSTALL%\win\msvc\hbsix.lib=61
]]>

dejo el archivo.Env con el que compilo

Code: Select all | Expand

[Environment]
Description 1=Harbour/FWH/MSVC2022 32 bits
Description 2=
Description 3=
PRG Compiler ver=3.2
C compiler ver=2407 32 bits
Subsystem=GTGUI
Author=Dario Fernandez
Last update=02/17/2025

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

[Harbour]
HB_INSTALL=C:\vscharbour
HB_COMMAND=%HB_BIN_INSTALL%\harbour.Exe %PRG% -m -n -gc0 -w0 -es2 -i%HB_INC_INSTALL% -ic:\fwh2407\include;c:\fwh2407\include2 -q0 -ql
Option prefix=-

[C]
C_INSTALL=c:\vc2022
C_COMP_COMMAND=%C_INSTALL%\bin32\cl.exe -nologo -TC -W3 -O2 -c /GS- %CRLF%-I%C_INC_INSTALL% -I%HB_INC_INSTALL% -Id:\fwh2206\include -I%HOME%\include -D__FLAT__ /GA -Fo%OBJ% %C%
C_LIB_COMMAND=%C_INSTALL%\bin32\lib.exe -nologo /MACHINE:X86 /OUT:%LIB% @%RSP%
C_LINK_COMMAND=%C_INSTALL%\bin32\link.exe -nologo /SUBSYSTEM:windows /NODEFAULTLIB:msvcrt /FORCE:multiple %CRLF% /LIBPATH:%C_INSTALL%\lib\win32 /LIBPATH:%HB_INSTALL%\lib\win\msvc /LIBPATH:%HOME%\lib @%LNK%
C_RC_COMMAND=%C_INSTALL%\bin32\rc.exe -nologo -r -d__FLAT__ -i%C_INC_INSTALL% -fo%RES% %RC%
C_DLL_COMMAND=
Option prefix=-

[User]
POSTEXE_COMMAND=
POSTLIB_COMMAND=
POSTDLL_COMMAND=

[Files]
C:\fwh2501\lib\FiveH32.lib=1
C:\fwh2501\lib\FiveHC32.lib=2
C:\fwh2501\lib\libmysql32.lib=3
C:\fwh2501\lib\libmysqld32.lib=4
%HB_LIB_INSTALL%\win\msvc\hbrtl.lib=5
%HB_LIB_INSTALL%\win\msvc\hbvm.lib=6
%HB_LIB_INSTALL%\win\msvc\gtgui.lib=7
%HB_LIB_INSTALL%\win\msvc\hblang.lib=8
%HB_LIB_INSTALL%\win\msvc\hbmacro.lib=9
%HB_LIB_INSTALL%\win\msvc\hbmemio.lib=10
%HB_LIB_INSTALL%\win\msvc\hbrdd.lib=11
%HB_LIB_INSTALL%\win\msvc\rddntx.lib=12
%HB_LIB_INSTALL%\win\msvc\rddcdx.lib=13
%HB_LIB_INSTALL%\win\msvc\rddfpt.lib=14
%HB_LIB_INSTALL%\win\msvc\hbdebug.lib=15
%HB_LIB_INSTALL%\win\msvc\hbcommon.lib=16
%HB_LIB_INSTALL%\win\msvc\hbpp.lib=17
%HB_LIB_INSTALL%\win\msvc\hbcpage.lib=18
%HB_LIB_INSTALL%\win\msvc\hbwin.lib=19
%HB_LIB_INSTALL%\win\msvc\hbcplr.lib=20
%HB_LIB_INSTALL%\win\msvc\hbpcre.lib=21
%HB_LIB_INSTALL%\win\msvc\hbct.lib=22
%HB_LIB_INSTALL%\win\msvc\xhb.lib=23
%HB_LIB_INSTALL%\win\msvc\png.lib=24
%HB_LIB_INSTALL%\win\msvc\hbziparc.lib=25
%HB_LIB_INSTALL%\win\msvc\hbmzip.lib=26
%HB_LIB_INSTALL%\win\msvc\hbzlib.lib=27
%HB_LIB_INSTALL%\win\msvc\minizip.lib=28
%HB_LIB_INSTALL%\win\msvc\hbtip.lib=29
%HB_LIB_INSTALL%\win\msvc\hbxpp.lib=30
%HB_LIB_INSTALL%\win\msvc\hbmisc.lib=31
%HB_LIB_INSTALL%\win\msvc\hbzebra.lib=32
%C_INSTALL%\lib\win32\kernel32.Lib=33
%C_INSTALL%\lib\win32\user32.Lib=34
%C_INSTALL%\lib\win32\gdi32.Lib=35
%C_INSTALL%\lib\win32\winspool.Lib=36
%C_INSTALL%\lib\win32\comctl32.Lib=37
%C_INSTALL%\lib\win32\comdlg32.Lib=38
%C_INSTALL%\lib\win32\advapi32.Lib=39
%C_INSTALL%\lib\win32\shell32.lib=40
%C_INSTALL%\lib\win32\ole32.Lib=41
%C_INSTALL%\lib\win32\oleaut32.Lib=42
%C_INSTALL%\lib\win32\uuid.Lib=43
%C_INSTALL%\lib\win32\odbc32.lib=44
%C_INSTALL%\lib\win32\odbccp32.lib=45
%C_INSTALL%\lib\win32\iphlpapi.Lib=46
%C_INSTALL%\lib\win32\mpr.lib=47
%C_INSTALL%\lib\win32\version.lib=48
%C_INSTALL%\lib\win32\wsock32.lib=49
%C_INSTALL%\lib\win32\msimg32.lib=50
%C_INSTALL%\lib\win32\oledlg.lib=51
%C_INSTALL%\lib\win32\psapi.lib=52
%C_INSTALL%\lib\win32\gdiplus.lib=53
%C_INSTALL%\lib\win32\winmm.lib=54
%C_INSTALL%\lib\win32\vfw32.lib=55
%C_INSTALL%\lib\win32\runtimeobject.lib=56
%C_INSTALL%\lib\win32\ws2_32.lib=57
%C_INSTALL%\lib\win32\shlwapi.lib=58
%C_INSTALL%\lib\win32\strmiids.lib=59
%C_INSTALL%\lib\win32\wininet.lib=60
%HB_LIB_INSTALL%\win\msvc\hbsix.lib=61
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Sigue problema impresion 2501 ERROR MIO :: Reply by Antonio Linares]]> 2025-02-21T00:02:01-07:00 2025-02-21T00:02:01-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45440&p=277814#p277814
buildh32 test

Haz solo esto y confirma si te funciona, gracias]]>

buildh32 test

Haz solo esto y confirma si te funciona, gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Sigue problema impresion 2501 ERROR MIO :: Reply by Antonio Linares]]> 2025-02-21T00:04:55-07:00 2025-02-21T00:04:55-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45440&p=277815#p277815
Que versión de Harbour estás usando ? Parece que estás usando una versión antigua.

Por favor usa esta:
https://github.com/FiveTechSoft/harbour ... 250216.zip

Al usar esta versión te saldrán unos errores al enlazar y ya te indico como se resuelven.]]>

Que versión de Harbour estás usando ? Parece que estás usando una versión antigua.

Por favor usa esta:
https://github.com/FiveTechSoft/harbour ... 250216.zip

Al usar esta versión te saldrán unos errores al enlazar y ya te indico como se resuelven.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Sigue problema impresion 2501 ERROR MIO :: Reply by D.Fernandez]]> 2025-02-21T07:51:56-07:00 2025-02-21T07:51:56-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45440&p=277837#p277837
La que Ud. me indicó da los siguientes errores
Algunos de los errores son:

Code: Select all | Expand

Warning LNK4286: symbol '_strncmp' defined in 'libcmt.lib(strncmp.obj)' is imported by 'hbzlib.lib(hbzunchnk.obj)'
Warning LNK4286: symbol '_strncmp' defined in 'libcmt.lib(strncmp.obj)' is imported by 'hbzlib.lib(hbzcomp.obj)'
Warning LNK4286: symbol '_strncmp' defined in 'libcmt.lib(strncmp.obj)' is imported by 'xhb.lib(xhbxml.obj)'
Warning LNK4286: symbol '_strncmp' defined in 'libcmt.lib(strncmp.obj)' is imported by 'xhb.lib(xhxml.obj)'
Warning LNK4286: symbol '_strncmp' defined in 'libcmt.lib(strncmp.obj)' is imported by 'harbour.lib(hbharbour.obj)'
Warning LNK4286: symbol '_strncmp' defined in 'libcmt.lib(strncmp.obj)' is imported by 'hbmk.lib(hbmkcheck.obj)' in function '_hb_compChkOptionLen'
Warning LNK4286: symbol '_strncmp' defined in 'libcmt.lib(strncmp.obj)' is imported by 'hbjson.lib(hbjson.obj)' in function '_hb_jsonDecode'
Warning LNK4286: symbol '_strncmp' defined in 'libcmt.lib(strncmp.obj)' is imported by 'hbcommom.lib(funcid.obj)'
Warning LNK4286: symbol '_strncmp' defined in 'libcmt.lib(strncmp.obj)' is imported by 'hbtip.lib(hbtip.obj)' in function '_hb_entrlname1'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbzlib.lib(hbzcomp.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'minizip.lib(minizip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbpp.lib(hbpp.obj)'
Warning LNK4217: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)' in function '_hb_entrlname1Raw'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbzlib.lib(hbzunchnk.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close
Warning LNK4286: symbol '_fwrite' defined in 'libcmt.lib(fwrite.obj)' is imported by 'minizip.lib(ioapi.obj)'
Warning LNK4286: symbol '_fwrite' defined in 'libcmt.lib(fwrite.obj)' is imported by 'hbpp.lib(ppcore.obj)'
Warning LNK4286: symbol '_free' defined in 'libcmt.lib(free.obj)' is imported by 'hbpp.lib(ppcore.obj)'
Warning LNK4286: symbol '_free' defined in 'libcmt.lib(free.obj)' is imported by 'hbzlib.lib(zutil.obj)'
Warning LNK4286: symbol '_malloc' defined in 'libcmt.lib(malloc.obj)' is imported by 'hbpp.lib(ppcore.obj)'
Warning LNK4286: symbol '_malloc' defined in 'libcmt.lib(malloc.obj)' is imported by 'hbzlib.lib(zutil.obj)'
Warning LNK4286: symbol '_fopen' defined in 'libcmt.lib(fopen.obj)' is imported by 'minizip.lib(ioapi.obj)' in function '_fopen64_file_func'
Warning LNK4286: symbol '_fread' defined in 'libcmt.lib(fread.obj)' is imported by 'hbpp.lib(ppcore.obj)'
Warning LNK4286: symbol '_fread' defined in 'libcmt.lib(fread.obj)' is imported by 'minizip.lib(ioapi.obj)' in function '_fread_file_func'
Warning LNK4286: symbol '_fseek' defined in 'libcmt.lib(fseek.obj)' is imported by 'hbpp.lib(ppcore.obj)'
Warning LNK4286: symbol '_fseek' defined in 'libcmt.lib(fseek.obj)' is imported by 'minizip.lib(ioapi.obj)' in function '_fseek64_file_func'
Warning LNK4217: symbol '_ftell' defined in 'libcmt.lib(ftell.obj)' is imported by 'minizip.lib(ioapi.obj)' in function '_ftell_file_func'
Warning LNK4217: symbol '_ftell' defined in 'libcmt.lib(ftell.obj)' is imported by 'hbpp.lib(ppcore.obj)'
Warning LNK4217: symbol '_ftelli64' defined in 'libcmt.lib(ftell.obj)' is imported by 'minizip.lib(ioapi.obj)' in function '_ftell64_file_func'
]]>

La que Ud. me indicó da los siguientes errores
Algunos de los errores son:

Code: Select all | Expand

Warning LNK4286: symbol '_strncmp' defined in 'libcmt.lib(strncmp.obj)' is imported by 'hbzlib.lib(hbzunchnk.obj)'
Warning LNK4286: symbol '_strncmp' defined in 'libcmt.lib(strncmp.obj)' is imported by 'hbzlib.lib(hbzcomp.obj)'
Warning LNK4286: symbol '_strncmp' defined in 'libcmt.lib(strncmp.obj)' is imported by 'xhb.lib(xhbxml.obj)'
Warning LNK4286: symbol '_strncmp' defined in 'libcmt.lib(strncmp.obj)' is imported by 'xhb.lib(xhxml.obj)'
Warning LNK4286: symbol '_strncmp' defined in 'libcmt.lib(strncmp.obj)' is imported by 'harbour.lib(hbharbour.obj)'
Warning LNK4286: symbol '_strncmp' defined in 'libcmt.lib(strncmp.obj)' is imported by 'hbmk.lib(hbmkcheck.obj)' in function '_hb_compChkOptionLen'
Warning LNK4286: symbol '_strncmp' defined in 'libcmt.lib(strncmp.obj)' is imported by 'hbjson.lib(hbjson.obj)' in function '_hb_jsonDecode'
Warning LNK4286: symbol '_strncmp' defined in 'libcmt.lib(strncmp.obj)' is imported by 'hbcommom.lib(funcid.obj)'
Warning LNK4286: symbol '_strncmp' defined in 'libcmt.lib(strncmp.obj)' is imported by 'hbtip.lib(hbtip.obj)' in function '_hb_entrlname1'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbzlib.lib(hbzcomp.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'minizip.lib(minizip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbpp.lib(hbpp.obj)'
Warning LNK4217: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)' in function '_hb_entrlname1Raw'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbzlib.lib(hbzunchnk.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close' defined in 'libcmt.lib(close.obj)' is imported by 'hbtip.lib(hbtip.obj)'
Warning LNK4286: symbol '_close
Warning LNK4286: symbol '_fwrite' defined in 'libcmt.lib(fwrite.obj)' is imported by 'minizip.lib(ioapi.obj)'
Warning LNK4286: symbol '_fwrite' defined in 'libcmt.lib(fwrite.obj)' is imported by 'hbpp.lib(ppcore.obj)'
Warning LNK4286: symbol '_free' defined in 'libcmt.lib(free.obj)' is imported by 'hbpp.lib(ppcore.obj)'
Warning LNK4286: symbol '_free' defined in 'libcmt.lib(free.obj)' is imported by 'hbzlib.lib(zutil.obj)'
Warning LNK4286: symbol '_malloc' defined in 'libcmt.lib(malloc.obj)' is imported by 'hbpp.lib(ppcore.obj)'
Warning LNK4286: symbol '_malloc' defined in 'libcmt.lib(malloc.obj)' is imported by 'hbzlib.lib(zutil.obj)'
Warning LNK4286: symbol '_fopen' defined in 'libcmt.lib(fopen.obj)' is imported by 'minizip.lib(ioapi.obj)' in function '_fopen64_file_func'
Warning LNK4286: symbol '_fread' defined in 'libcmt.lib(fread.obj)' is imported by 'hbpp.lib(ppcore.obj)'
Warning LNK4286: symbol '_fread' defined in 'libcmt.lib(fread.obj)' is imported by 'minizip.lib(ioapi.obj)' in function '_fread_file_func'
Warning LNK4286: symbol '_fseek' defined in 'libcmt.lib(fseek.obj)' is imported by 'hbpp.lib(ppcore.obj)'
Warning LNK4286: symbol '_fseek' defined in 'libcmt.lib(fseek.obj)' is imported by 'minizip.lib(ioapi.obj)' in function '_fseek64_file_func'
Warning LNK4217: symbol '_ftell' defined in 'libcmt.lib(ftell.obj)' is imported by 'minizip.lib(ioapi.obj)' in function '_ftell_file_func'
Warning LNK4217: symbol '_ftell' defined in 'libcmt.lib(ftell.obj)' is imported by 'hbpp.lib(ppcore.obj)'
Warning LNK4217: symbol '_ftelli64' defined in 'libcmt.lib(ftell.obj)' is imported by 'minizip.lib(ioapi.obj)' in function '_ftell64_file_func'
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Sigue problema impresion 2501 ERROR MIO :: Reply by D.Fernandez]]> 2025-02-21T08:06:32-07:00 2025-02-21T08:06:32-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45440&p=277840#p277840
Gracias

PARA ACLARARLE Y PEDIR DISCULPAS
El error me daba porque ponía esta 2 instrucciones juntas.

skinButtons()
TBtnBmp():lLegacyLookLeftRight := .t.]]>

Gracias

PARA ACLARARLE Y PEDIR DISCULPAS
El error me daba porque ponía esta 2 instrucciones juntas.

skinButtons()
TBtnBmp():lLegacyLookLeftRight := .t.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Sigue problema impresion 2501 ERROR MIO :: Reply by Antonio Linares]]> 2025-02-21T09:32:33-07:00 2025-02-21T09:32:33-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45440&p=277849#p277849
/NODEFAULTLIB:libucrt

y enlaza ucrt.lib

Con eso debería enlazar bien :)]]>

/NODEFAULTLIB:libucrt

y enlaza ucrt.lib

Con eso debería enlazar bien :)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Sigue problema impresion 2501 ERROR MIO :: Reply by Antonio Linares]]> 2025-02-21T09:33:07-07:00 2025-02-21T09:33:07-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45440&p=277850#p277850
skinButtons()
TBtnBmp():lLegacyLookLeftRight := .t.
Vamos a revisarlo, gracias!]]>
skinButtons()
TBtnBmp():lLegacyLookLeftRight := .t.
Vamos a revisarlo, gracias!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Sigue problema impresion 2501 ERROR MIO :: Reply by D.Fernandez]]> 2025-02-21T20:30:10-07:00 2025-02-21T20:30:10-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45440&p=277857#p277857
Todo funciona bien ahora. FWH2501 y Harbour de FiveTech 2025

Muchas gracias.

Saludos
Ruben Fernandez]]>

Todo funciona bien ahora. FWH2501 y Harbour de FiveTech 2025

Muchas gracias.

Saludos
Ruben Fernandez]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Chatboot en harbour :: Author JoseAlvarez]]> 2025-02-21T06:22:59-07:00 2025-02-21T06:22:59-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45443&p=277830#p277830 Queriendo entrarle de a poco a la IA, se me ocurre la idea de integrarle a mis sistemas un chatbot. La finalidad en un principio sera que actúe como un manual de usuario. Que el operador del sistema pueda hacerle preguntas tipo "¿cómo puedo registrar el pago de una factura? Y el bot le de la respuesta.

No tengo apuro, tampoco me frustraré si no logro hacerlo.

En primer lugar quiero que mi sistema tenga un icono flotante todo el tiempo y en cualquier lugar para que el usuario siempre pueda llamar al chatbot desde el mismo.
¿Se puede hacer? Alguien me puede dar una idea de por donde comenzar con este icono flotante?

Inicialmente solo el icono, despues me iré con lo demas, profundizando búsquedas en internet, con la misma IA, y por supuesto, con uds los amigos del foro, que siempre estan prestos a ayudar.

Quedo atento a las sugerencias, muchas gracias!]]>
Queriendo entrarle de a poco a la IA, se me ocurre la idea de integrarle a mis sistemas un chatbot. La finalidad en un principio sera que actúe como un manual de usuario. Que el operador del sistema pueda hacerle preguntas tipo "¿cómo puedo registrar el pago de una factura? Y el bot le de la respuesta.

No tengo apuro, tampoco me frustraré si no logro hacerlo.

En primer lugar quiero que mi sistema tenga un icono flotante todo el tiempo y en cualquier lugar para que el usuario siempre pueda llamar al chatbot desde el mismo.
¿Se puede hacer? Alguien me puede dar una idea de por donde comenzar con este icono flotante?

Inicialmente solo el icono, despues me iré con lo demas, profundizando búsquedas en internet, con la misma IA, y por supuesto, con uds los amigos del foro, que siempre estan prestos a ayudar.

Quedo atento a las sugerencias, muchas gracias!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Chatboot en harbour :: Reply by Antonio Linares]]> 2025-02-21T06:47:35-07:00 2025-02-21T06:47:35-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45443&p=277833#p277833 ]]> ]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Chatboot en harbour :: Reply by leandro]]> 2025-02-21T09:18:48-07:00 2025-02-21T09:18:48-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45443&p=277846#p277846
Creo que es lo que necesitas para iniciar tu chat boot, aunque el ajuste que hizo Mr.Rao. no fue publicado nunca, creo que puede ser el inicio de lo que necesitas hacer, también creo es que es una super idea, también nos gustaría implementar algo así, vamos a aprovechar al máximo el curso que se nos viene la otra semana.

Saludos

viewtopic.php?p=273522#p273522]]>

Creo que es lo que necesitas para iniciar tu chat boot, aunque el ajuste que hizo Mr.Rao. no fue publicado nunca, creo que puede ser el inicio de lo que necesitas hacer, también creo es que es una super idea, también nos gustaría implementar algo así, vamos a aprovechar al máximo el curso que se nos viene la otra semana.

Saludos

viewtopic.php?p=273522#p273522]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Chatboot en harbour :: Reply by Antonio Linares]]> 2025-02-21T23:21:38-07:00 2025-02-21T23:21:38-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45443&p=277861#p277861
> aunque el ajuste que hizo Mr.Rao. no fue publicado nunca

Está incluido en FWH 25.01

Revisa samples\circshad.prg]]>

> aunque el ajuste que hizo Mr.Rao. no fue publicado nunca

Está incluido en FWH 25.01

Revisa samples\circshad.prg]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Chatboot en harbour :: Reply by leandro]]> 2025-02-22T06:55:08-07:00 2025-02-22T06:55:08-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45443&p=277870#p277870 :D]]> :D]]> <![CDATA[FiveWin para Harbour/xHarbour :: QR en portapapeles :: Author FiveWiDi]]> 2025-02-08T08:50:39-07:00 2025-02-08T08:50:39-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277512#p277512
¿Ustedes sabrían como hacer para generar un código QR, y dejarlo en el portapapeles para luego en otra aplicación realizar un 'pegar'?

Muchas gracias,]]>

¿Ustedes sabrían como hacer para generar un código QR, y dejarlo en el portapapeles para luego en otra aplicación realizar un 'pegar'?

Muchas gracias,]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: QR en portapapeles :: Reply by Antonio Linares]]> 2025-02-08T10:01:39-07:00 2025-02-08T10:01:39-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277515#p277515
Aqui tenemos un muy buen ejemplo de QR de César:
viewtopic.php?p=276837#p276837

y luego seria cuestión de usar FW_CopyToClipboard( ... ) proporcionandole la imagen del QR.

nos falta ese paso... pensando...]]>

Aqui tenemos un muy buen ejemplo de QR de César:
viewtopic.php?p=276837#p276837

y luego seria cuestión de usar FW_CopyToClipboard( ... ) proporcionandole la imagen del QR.

nos falta ese paso... pensando...]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: QR en portapapeles :: Reply by Cgallegoa]]> 2025-02-08T10:28:42-07:00 2025-02-08T10:46:22-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277517#p277517

Code: Select all | Expand

#include "FiveWin.ch"

REQUEST FWZEBRA    // *** Indispensable para dibujar código QR

Function Inicio()
   LOCAL oDlg, hBmp
   LOCAL cTxt4QR := "Prueba de Copy - Paste" + CRLF + "FiveWin 2025" 

   hBmp := FW_BarCodeBmp( cTxt4QR, "QRCODE", 250, 250 )
   hBmp := bmp2alpha( hBmp )   // *** Sin esta línea QRcode tiene un feo marco negro
 // *** Siguiente línea hace la magia y guarda en el portapapeles, luego,
 // *** puedes hacer PASTE (Ctrl+V) en Paint, PhotoShop, Word,  etc., y recuperas tu código QR
   FW_CopyToClipboard(hBmp)
   
   DEFINE DIALOG oDlg SIZE 400,300 PIXEL TRUEPIXEL
        @ 20,20 XIMAGE oImg SIZE -20,-20 OF oDlg PIXEL RESOURCE hBmp
   ACTIVATE DIALOG oDlg CENTERED
return nil
//-----------------------------------------------------------------------//

Function bmp2alpha( hBmp1 )
   local hBmp, oBmp
   oBmp  := GdiBmp():New()
   oBmp:CreateFromRes( hBmp1, 0 )
   oBmp:Conver24to32Alpha( .F. )
   hBmp  := oBmp:GetGDIHbitmap()
   oBmp:Set32Bits(.F.)
   oBmp:Destroy()
   DeleteObject( hBmp1 )
return hBmp
//------------------------------------------------------------------------------//
]]>

Code: Select all | Expand

#include "FiveWin.ch"

REQUEST FWZEBRA    // *** Indispensable para dibujar código QR

Function Inicio()
   LOCAL oDlg, hBmp
   LOCAL cTxt4QR := "Prueba de Copy - Paste" + CRLF + "FiveWin 2025" 

   hBmp := FW_BarCodeBmp( cTxt4QR, "QRCODE", 250, 250 )
   hBmp := bmp2alpha( hBmp )   // *** Sin esta línea QRcode tiene un feo marco negro
 // *** Siguiente línea hace la magia y guarda en el portapapeles, luego,
 // *** puedes hacer PASTE (Ctrl+V) en Paint, PhotoShop, Word,  etc., y recuperas tu código QR
   FW_CopyToClipboard(hBmp)
   
   DEFINE DIALOG oDlg SIZE 400,300 PIXEL TRUEPIXEL
        @ 20,20 XIMAGE oImg SIZE -20,-20 OF oDlg PIXEL RESOURCE hBmp
   ACTIVATE DIALOG oDlg CENTERED
return nil
//-----------------------------------------------------------------------//

Function bmp2alpha( hBmp1 )
   local hBmp, oBmp
   oBmp  := GdiBmp():New()
   oBmp:CreateFromRes( hBmp1, 0 )
   oBmp:Conver24to32Alpha( .F. )
   hBmp  := oBmp:GetGDIHbitmap()
   oBmp:Set32Bits(.F.)
   oBmp:Destroy()
   DeleteObject( hBmp1 )
return hBmp
//------------------------------------------------------------------------------//
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: QR en portapapeles :: Reply by FiveWiDi]]> 2025-02-08T10:36:21-07:00 2025-02-08T10:36:21-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277518#p277518
Antonio Linares wrote: Sat Feb 08, 2025 5:01 pm Carlos,

Aqui tenemos un muy buen ejemplo de QR de César:
viewtopic.php?p=276837#p276837

y luego seria cuestión de usar FW_CopyToClipboard( ... ) proporcionandole la imagen del QR.

nos falta ese paso... pensando...
Si, si. En el documento ya lo consigo imprimir, la intención es disponer de él en el clipboard.

Estoy mirando esto:
hBitmap := FW_BarCodeBmp( cText, "QR-CODE", 3.5, 3.5, Nil )
SetClipboardData( 2, hBitmap )
FW_CopyToClipBoard( cText )
FW_CopyToClipBoard( hBitmap, 2 )

Pero no me funciona, al menos en el Word no consigo que 'pegue' el Qr. (el cText sin problema).

A ver que se te ocurre.

Muchas gracias,

EDITADO
=======

FW_BarCodeBmp( cText, "QR-CODE", 3.5, 3.5, Nil ) creo que debía ser FW_BarCodeBmp( cText, "QRCODE", 3.5, 3.5, Nil )

Por otra parte, las unidades de FW_BarCodeBmp( cText, "QRCODE", 3.5, 3.5, Nil ), son pixels, pulgadas, centímetros?]]>
Antonio Linares wrote: Sat Feb 08, 2025 5:01 pm Carlos,

Aqui tenemos un muy buen ejemplo de QR de César:
viewtopic.php?p=276837#p276837

y luego seria cuestión de usar FW_CopyToClipboard( ... ) proporcionandole la imagen del QR.

nos falta ese paso... pensando...
Si, si. En el documento ya lo consigo imprimir, la intención es disponer de él en el clipboard.

Estoy mirando esto:
hBitmap := FW_BarCodeBmp( cText, "QR-CODE", 3.5, 3.5, Nil )
SetClipboardData( 2, hBitmap )
FW_CopyToClipBoard( cText )
FW_CopyToClipBoard( hBitmap, 2 )

Pero no me funciona, al menos en el Word no consigo que 'pegue' el Qr. (el cText sin problema).

A ver que se te ocurre.

Muchas gracias,

EDITADO
=======

FW_BarCodeBmp( cText, "QR-CODE", 3.5, 3.5, Nil ) creo que debía ser FW_BarCodeBmp( cText, "QRCODE", 3.5, 3.5, Nil )

Por otra parte, las unidades de FW_BarCodeBmp( cText, "QRCODE", 3.5, 3.5, Nil ), son pixels, pulgadas, centímetros?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: QR en portapapeles :: Reply by FiveWiDi]]> 2025-02-08T10:52:14-07:00 2025-02-08T10:52:14-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277520#p277520
Por otra parte, las unidades de FW_BarCodeBmp( cText, "QRCODE", 3.5, 3.5, Nil ), son pixels, pulgadas, centímetros?

Me ha creado un QR que no parece correcto, desde el móvil no lo identifica.
Lo he 'pagado' en el Word, le he impreso y nada, que no le gusta.]]>

Por otra parte, las unidades de FW_BarCodeBmp( cText, "QRCODE", 3.5, 3.5, Nil ), son pixels, pulgadas, centímetros?

Me ha creado un QR que no parece correcto, desde el móvil no lo identifica.
Lo he 'pagado' en el Word, le he impreso y nada, que no le gusta.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: QR en portapapeles :: Reply by sysctrl2]]> 2025-02-08T11:17:00-07:00 2025-02-08T11:17:00-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277521#p277521 FW_BarCodeBmp( cText, "QR-CODE", 4.0, 4.0, Nil )

prueba hacerlo asi o mas grande]]>
FW_BarCodeBmp( cText, "QR-CODE", 4.0, 4.0, Nil )

prueba hacerlo asi o mas grande]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: QR en portapapeles :: Reply by FiveWiDi]]> 2025-02-08T11:28:17-07:00 2025-02-08T11:28:17-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277523#p277523
sysctrl2 wrote: Sat Feb 08, 2025 6:17 pm el tamaño estandard de un QR es 4.0
FW_BarCodeBmp( cText, "QR-CODE", 4.0, 4.0, Nil )

prueba hacerlo asi o mas grande
És para Verifactu, nos permiten entre 3 y 4 cm., lo voy a poner a 3,5cm.

He visto que CGallego utiliza 250,250 además de QRCODE.

FW_BarCodeBmp( cText, "QR-CODE", 3500, 350, Nil )
El QR mide 9,5 cm. aproximadamente, he probado con 129,129 y 'pagado' en un Word a DIN A4 mide 3,5 cm; para mi el tamaño correcto.

Ahora bien, me dibuja el marco negro y el lector no lo identifica como un QR válido.

Mi función es esta:

// Para usar QR precisa de "REQUEST FWZEBRA"
REQUEST FWZEBRA

FUNCTION VFQr2Clipboard( AMPAARRA, cNIF, cVFCODFAC, dDataFact, nImpotota )

Local cText := ""
Local hBitmap := 0

cText := VF_URL_QR( AMPAARRA, ;
AllTrim( cNIF ), ;
AllTrim( cVFCODFAC ), ;
dDataFact, ;
nImpoTota ;
)

Traza( 1, "cText=", cText )

MsgInfo( cText, "B" )

hBitmap := FW_BarCodeBmp( cText, "QRCODE", 129, 129, Nil )

hBitmap := bmp2alpha( hBitmap )

FW_CopyToClipBoard( hBitmap )

Return Nil
/* *********************************************************************************** */]

EDITO
=====
Da igual que use "QR-CODE" que "QRCODE"

EDITO-2
======
Y no necesita REQUEST FWZEBRA.]]>
sysctrl2 wrote: Sat Feb 08, 2025 6:17 pm el tamaño estandard de un QR es 4.0
FW_BarCodeBmp( cText, "QR-CODE", 4.0, 4.0, Nil )

prueba hacerlo asi o mas grande
És para Verifactu, nos permiten entre 3 y 4 cm., lo voy a poner a 3,5cm.

He visto que CGallego utiliza 250,250 además de QRCODE.

FW_BarCodeBmp( cText, "QR-CODE", 3500, 350, Nil )
El QR mide 9,5 cm. aproximadamente, he probado con 129,129 y 'pagado' en un Word a DIN A4 mide 3,5 cm; para mi el tamaño correcto.

Ahora bien, me dibuja el marco negro y el lector no lo identifica como un QR válido.

Mi función es esta:

// Para usar QR precisa de "REQUEST FWZEBRA"
REQUEST FWZEBRA

FUNCTION VFQr2Clipboard( AMPAARRA, cNIF, cVFCODFAC, dDataFact, nImpotota )

Local cText := ""
Local hBitmap := 0

cText := VF_URL_QR( AMPAARRA, ;
AllTrim( cNIF ), ;
AllTrim( cVFCODFAC ), ;
dDataFact, ;
nImpoTota ;
)

Traza( 1, "cText=", cText )

MsgInfo( cText, "B" )

hBitmap := FW_BarCodeBmp( cText, "QRCODE", 129, 129, Nil )

hBitmap := bmp2alpha( hBitmap )

FW_CopyToClipBoard( hBitmap )

Return Nil
/* *********************************************************************************** */]

EDITO
=====
Da igual que use "QR-CODE" que "QRCODE"

EDITO-2
======
Y no necesita REQUEST FWZEBRA.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: QR en portapapeles :: Reply by FiveWiDi]]> 2025-02-08T11:57:02-07:00 2025-02-08T11:57:02-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277524#p277524
Venderé el soft con un kit de tijeras para QR.
:D :D :D

Y todo es digital, el soft digital, las tijeras con los dedos (digital). :wink:

Venga, que alguien me eche una mano. :oops:]]>

Venderé el soft con un kit de tijeras para QR.
:D :D :D

Y todo es digital, el soft digital, las tijeras con los dedos (digital). :wink:

Venga, que alguien me eche una mano. :oops:]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: QR en portapapeles :: Reply by Cgallegoa]]> 2025-02-08T12:38:44-07:00 2025-02-08T12:38:44-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277526#p277526
Otra opción es con oImg:bPainted. Hace el copy sin el feo marco

Code: Select all | Expand

#include "FiveWin.ch"

REQUEST FWZEBRA    // *** Indispensable para dibujar código QR

Function Inicio()
   LOCAL oDlg, hBmp
   LOCAL cTxt4QR := "Prueba de Copy - Paste" + CRLF + "FiveWin 2025" 

   hBmp := FW_BarCodeBmp( cTxt4QR, "QRCODE", 250, 250 )
   hBmp := bmp2alpha( hBmp )   // *** Sin esta línea QRcode tiene un feo marco negro
 // *** Siguiente línea hace la magia y guarda en el portapapeles, luego,
 // *** puedes hacer PASTE (Ctrl+V) en Paint, PhotoShop, Word,  etc., y recuperas tu código QR
 //  FW_CopyToClipboard(hBmp)    // *** También genera marco negro al hacer paste.
   
   DEFINE DIALOG oDlg SIZE 400,350 PIXEL TRUEPIXEL
        @ 03,20 BUTTON oBtn PROMPT "Copy" OF oDlg PIXEL SIZE 80,25 ACTION oImg:CopytoClipBoard(.T.)  

        @ 40,20 XIMAGE oImg SIZE -20,-20 OF oDlg PIXEL RESOURCE hBmp
        oImg:bPainted := {||oImg:CopytoClipBoard(.T.)}   // *** Hace el paste correcto, sin el cuadro negro.

   ACTIVATE DIALOG oDlg CENTERED
return nil
//-----------------------------------------------------------------------//

Function bmp2alpha( hBmp1 )
   local hBmp, oBmp
   oBmp  := GdiBmp():New()
   oBmp:CreateFromRes( hBmp1, 0 )
   oBmp:Conver24to32Alpha( .F. )
   hBmp  := oBmp:GetGDIHbitmap()
   oBmp:Set32Bits(.F.)
   oBmp:Destroy()
   DeleteObject( hBmp1 )
return hBmp
//------------------------------------------------------------------------------//
Ya no hace falta que incluyas las tijeras :)]]>

Otra opción es con oImg:bPainted. Hace el copy sin el feo marco

Code: Select all | Expand

#include "FiveWin.ch"

REQUEST FWZEBRA    // *** Indispensable para dibujar código QR

Function Inicio()
   LOCAL oDlg, hBmp
   LOCAL cTxt4QR := "Prueba de Copy - Paste" + CRLF + "FiveWin 2025" 

   hBmp := FW_BarCodeBmp( cTxt4QR, "QRCODE", 250, 250 )
   hBmp := bmp2alpha( hBmp )   // *** Sin esta línea QRcode tiene un feo marco negro
 // *** Siguiente línea hace la magia y guarda en el portapapeles, luego,
 // *** puedes hacer PASTE (Ctrl+V) en Paint, PhotoShop, Word,  etc., y recuperas tu código QR
 //  FW_CopyToClipboard(hBmp)    // *** También genera marco negro al hacer paste.
   
   DEFINE DIALOG oDlg SIZE 400,350 PIXEL TRUEPIXEL
        @ 03,20 BUTTON oBtn PROMPT "Copy" OF oDlg PIXEL SIZE 80,25 ACTION oImg:CopytoClipBoard(.T.)  

        @ 40,20 XIMAGE oImg SIZE -20,-20 OF oDlg PIXEL RESOURCE hBmp
        oImg:bPainted := {||oImg:CopytoClipBoard(.T.)}   // *** Hace el paste correcto, sin el cuadro negro.

   ACTIVATE DIALOG oDlg CENTERED
return nil
//-----------------------------------------------------------------------//

Function bmp2alpha( hBmp1 )
   local hBmp, oBmp
   oBmp  := GdiBmp():New()
   oBmp:CreateFromRes( hBmp1, 0 )
   oBmp:Conver24to32Alpha( .F. )
   hBmp  := oBmp:GetGDIHbitmap()
   oBmp:Set32Bits(.F.)
   oBmp:Destroy()
   DeleteObject( hBmp1 )
return hBmp
//------------------------------------------------------------------------------//
Ya no hace falta que incluyas las tijeras :)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: QR en portapapeles :: Reply by FiveWiDi]]> 2025-02-08T13:16:18-07:00 2025-02-08T13:16:18-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277527#p277527

El caso es que no lo muestro en pantalla.

Voy a investigar XIMAGE a ver que hace.

Y anulo el pedido a Amazon de las 35698 tijeras que he pedido.

Supongo que si Antonio nos lee quizás resuelva el bug de FW_CopyToClipboard()

Muchas gracias por el interés.
Sigo investigando.]]>


El caso es que no lo muestro en pantalla.

Voy a investigar XIMAGE a ver que hace.

Y anulo el pedido a Amazon de las 35698 tijeras que he pedido.

Supongo que si Antonio nos lee quizás resuelva el bug de FW_CopyToClipboard()

Muchas gracias por el interés.
Sigo investigando.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: QR en portapapeles :: Reply by Antonio Linares]]> 2025-02-08T13:49:06-07:00 2025-02-08T13:49:06-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277529#p277529
Has probado asi ?

FW_BarCodeBmp( cText, "QRCODE", 129, 129, Nil, CLR_WHITE )

No encuentro el código de Bmp2Alpha(), donde está ? :)]]>

Has probado asi ?

FW_BarCodeBmp( cText, "QRCODE", 129, 129, Nil, CLR_WHITE )

No encuentro el código de Bmp2Alpha(), donde está ? :)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: QR en portapapeles :: Reply by FiveWiDi]]> 2025-02-08T14:13:37-07:00 2025-02-08T14:13:37-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277533#p277533
Antonio Linares wrote: Sat Feb 08, 2025 8:49 pm Carlos,

Has probado asi ?

FW_BarCodeBmp( cText, "QRCODE", 129, 129, Nil, CLR_WHITE )

No encuentro el código de Bmp2Alpha(), donde está ? :)
Sigue apareciendo el marco negro alrededor. QR no identificable.

Function bmp2alpha( hBmp1 )
local hBmp, oBmp
oBmp := GdiBmp():New()
oBmp:CreateFromRes( hBmp1, 0 )
oBmp:Conver24to32Alpha( .F. )
hBmp := oBmp:GetGDIHbitmap()
oBmp:Set32Bits(.F.)
oBmp:Destroy()
DeleteObject( hBmp1 )
return hBmp]]>
Antonio Linares wrote: Sat Feb 08, 2025 8:49 pm Carlos,

Has probado asi ?

FW_BarCodeBmp( cText, "QRCODE", 129, 129, Nil, CLR_WHITE )

No encuentro el código de Bmp2Alpha(), donde está ? :)
Sigue apareciendo el marco negro alrededor. QR no identificable.

Function bmp2alpha( hBmp1 )
local hBmp, oBmp
oBmp := GdiBmp():New()
oBmp:CreateFromRes( hBmp1, 0 )
oBmp:Conver24to32Alpha( .F. )
hBmp := oBmp:GetGDIHbitmap()
oBmp:Set32Bits(.F.)
oBmp:Destroy()
DeleteObject( hBmp1 )
return hBmp]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: QR en portapapeles :: Reply by Antonio Linares]]> 2025-02-08T14:35:27-07:00 2025-02-08T14:35:27-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277535#p277535
Estoy probando asi pero desde el mspaint al pegar se ve todo en negro:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   FW_CopyToClipBoard( bmp2Alpha( FW_BarCodeBmp( "Hola", "QRCODE", 400.0, 400.0 ) ) )

return nil

Function bmp2alpha( hBmp1 )
   local hBmp, oBmp
   oBmp := GdiBmp():New()
   oBmp:CreateFromRes( hBmp1, 0 )
   oBmp:Conver24to32Alpha( .F. )
   hBmp := oBmp:GetGDIHbitmap()
   oBmp:Set32Bits(.F.)
   oBmp:Destroy()
   DeleteObject( hBmp1 )
   return hBmp
]]>

Estoy probando asi pero desde el mspaint al pegar se ve todo en negro:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   FW_CopyToClipBoard( bmp2Alpha( FW_BarCodeBmp( "Hola", "QRCODE", 400.0, 400.0 ) ) )

return nil

Function bmp2alpha( hBmp1 )
   local hBmp, oBmp
   oBmp := GdiBmp():New()
   oBmp:CreateFromRes( hBmp1, 0 )
   oBmp:Conver24to32Alpha( .F. )
   hBmp := oBmp:GetGDIHbitmap()
   oBmp:Set32Bits(.F.)
   oBmp:Destroy()
   DeleteObject( hBmp1 )
   return hBmp
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: QR en portapapeles :: Reply by FiveWiDi]]> 2025-02-08T15:07:55-07:00 2025-02-08T15:07:55-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277537#p277537
Antonio Linares wrote: Sat Feb 08, 2025 9:35 pm Carlos,

Estoy probando asi pero desde el mspaint al pegar se ve todo en negro:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   FW_CopyToClipBoard( bmp2Alpha( FW_BarCodeBmp( "Hola", "QRCODE", 400.0, 400.0 ) ) )

return nil

Function bmp2alpha( hBmp1 )
   local hBmp, oBmp
   oBmp := GdiBmp():New()
   oBmp:CreateFromRes( hBmp1, 0 )
   oBmp:Conver24to32Alpha( .F. )
   hBmp := oBmp:GetGDIHbitmap()
   oBmp:Set32Bits(.F.)
   oBmp:Destroy()
   DeleteObject( hBmp1 )
   return hBmp
Precisamente lo que comentaba Carlos Gallego.
Al parecer antes sin la función bmp2alpha() se veía negro (eso está anotado en el código de ejemplo que ha publicado).
De ahí el uso de la función bmp2alpha(), para que no se viera todo en negro.

Yo incluso estaba pensando en crear un DIALOG, meterle el QR, usar métodos de la clase WINDOW y ver si se puede capturar; vamos una solución parecida que ha encontrado Carlos Gallego ante el error que se da ahora.
Pero yo crearía el DIALOG, le meto el QR, lo capturo y cierro DIALOG.
Al menos tendré respuesta al problema aunque no me guste mucho. De momento todo es teoría, es sólo una idea.
A ver mañana como me levanto y sigo con ello.

Muchas gracias,]]>
Antonio Linares wrote: Sat Feb 08, 2025 9:35 pm Carlos,

Estoy probando asi pero desde el mspaint al pegar se ve todo en negro:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   FW_CopyToClipBoard( bmp2Alpha( FW_BarCodeBmp( "Hola", "QRCODE", 400.0, 400.0 ) ) )

return nil

Function bmp2alpha( hBmp1 )
   local hBmp, oBmp
   oBmp := GdiBmp():New()
   oBmp:CreateFromRes( hBmp1, 0 )
   oBmp:Conver24to32Alpha( .F. )
   hBmp := oBmp:GetGDIHbitmap()
   oBmp:Set32Bits(.F.)
   oBmp:Destroy()
   DeleteObject( hBmp1 )
   return hBmp
Precisamente lo que comentaba Carlos Gallego.
Al parecer antes sin la función bmp2alpha() se veía negro (eso está anotado en el código de ejemplo que ha publicado).
De ahí el uso de la función bmp2alpha(), para que no se viera todo en negro.

Yo incluso estaba pensando en crear un DIALOG, meterle el QR, usar métodos de la clase WINDOW y ver si se puede capturar; vamos una solución parecida que ha encontrado Carlos Gallego ante el error que se da ahora.
Pero yo crearía el DIALOG, le meto el QR, lo capturo y cierro DIALOG.
Al menos tendré respuesta al problema aunque no me guste mucho. De momento todo es teoría, es sólo una idea.
A ver mañana como me levanto y sigo con ello.

Muchas gracias,]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: QR en portapapeles :: Reply by Antonio Linares]]> 2025-02-08T15:24:24-07:00 2025-02-08T15:24:24-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277538#p277538 <![CDATA[FiveWin para Harbour/xHarbour :: Re: QR en portapapeles :: Reply by FiveWiDi]]> 2025-02-08T15:50:49-07:00 2025-02-08T15:50:49-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277539#p277539
Antonio Linares wrote: Sat Feb 08, 2025 10:24 pm Le consulto a Rao, el implementó estas funciones
Perfecto,

Muchas gracias]]>
Antonio Linares wrote: Sat Feb 08, 2025 10:24 pm Le consulto a Rao, el implementó estas funciones
Perfecto,

Muchas gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: QR en portapapeles :: Reply by FiveWiDi]]> 2025-02-09T12:07:09-07:00 2025-02-09T12:07:09-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277555#p277555
De momento lo dejo así.
Me sirve, me lo deja en la medida que deseo (3,5cm), y me parece incluso que está bien que vea lo que va a copiar, y en vez de preguntarle si realmente lo quiere copiar, pues ha de pulsar un botón.

Copia el QR con un marco negro fino que no toca el QR en si, y que además no lo invalida, el móvil lo lee sin problemas.

De todas maneras si se arregla el bug mejor.

Seguimos,

/* ****************************************************************** */
LOCAL oDlg, hBmp
LOCAL cTxt4QR := ""
Local oBtn := Nil
Local oImg := Nil


cTxt4QR := VF_URL_QR( AMPAARRA, ;
AllTrim( cNIF ), ;
AllTrim( cVFCODFAC ), ;
dDataFact, ;
nImpoTota ;
)

hBmp := FW_BarCodeBmp( cTxt4QR, "QRCODE", 129, 129 )
hBmp := bmp2alpha( hBmp ) // *** Sin esta línea QRcode tiene un feo marco negro
// *** Siguiente línea hace la magia y guarda en el portapapeles, luego,
// *** puedes hacer PASTE (Ctrl+V) en Paint, PhotoShop, Word, etc., y recuperas tu código QR
// FW_CopyToClipboard(hBmp) // *** También genera marco negro al hacer paste.

DEFINE DIALOG oDlg TITLE Right( AllTrim( cVFCODFAC ), 10 ) SIZE 170,185 PIXEL TRUEPIXEL

@ 03,20 BUTTON oBtn PROMPT "Copy QR" OF oDlg PIXEL SIZE 80,25 ACTION ( oImg:CopytoClipBoard(.T.), oDlg:End() ) ;
MESSAGE GetTrad( "Còpia el QR al porta-retalls." )

@ 40,20 XIMAGE oImg SIZE -20,-15 OF oDlg /* PIXEL */ RESOURCE hBmp

//oImg:bPainted := {||oImg:CopytoClipBoard(.T.)} // *** Hace el paste correcto, sin el cuadro negro.

ACTIVATE DIALOG oDlg CENTERED]]>

De momento lo dejo así.
Me sirve, me lo deja en la medida que deseo (3,5cm), y me parece incluso que está bien que vea lo que va a copiar, y en vez de preguntarle si realmente lo quiere copiar, pues ha de pulsar un botón.

Copia el QR con un marco negro fino que no toca el QR en si, y que además no lo invalida, el móvil lo lee sin problemas.

De todas maneras si se arregla el bug mejor.

Seguimos,

/* ****************************************************************** */
LOCAL oDlg, hBmp
LOCAL cTxt4QR := ""
Local oBtn := Nil
Local oImg := Nil


cTxt4QR := VF_URL_QR( AMPAARRA, ;
AllTrim( cNIF ), ;
AllTrim( cVFCODFAC ), ;
dDataFact, ;
nImpoTota ;
)

hBmp := FW_BarCodeBmp( cTxt4QR, "QRCODE", 129, 129 )
hBmp := bmp2alpha( hBmp ) // *** Sin esta línea QRcode tiene un feo marco negro
// *** Siguiente línea hace la magia y guarda en el portapapeles, luego,
// *** puedes hacer PASTE (Ctrl+V) en Paint, PhotoShop, Word, etc., y recuperas tu código QR
// FW_CopyToClipboard(hBmp) // *** También genera marco negro al hacer paste.

DEFINE DIALOG oDlg TITLE Right( AllTrim( cVFCODFAC ), 10 ) SIZE 170,185 PIXEL TRUEPIXEL

@ 03,20 BUTTON oBtn PROMPT "Copy QR" OF oDlg PIXEL SIZE 80,25 ACTION ( oImg:CopytoClipBoard(.T.), oDlg:End() ) ;
MESSAGE GetTrad( "Còpia el QR al porta-retalls." )

@ 40,20 XIMAGE oImg SIZE -20,-15 OF oDlg /* PIXEL */ RESOURCE hBmp

//oImg:bPainted := {||oImg:CopytoClipBoard(.T.)} // *** Hace el paste correcto, sin el cuadro negro.

ACTIVATE DIALOG oDlg CENTERED]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: QR en portapapeles :: Reply by Antonio Linares]]> 2025-02-09T15:31:50-07:00 2025-02-09T15:31:50-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277560#p277560 <![CDATA[FiveWin para Harbour/xHarbour :: Re: QR en portapapeles :: Reply by FiveWiDi]]> 2025-02-09T15:35:09-07:00 2025-02-09T15:35:09-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277562#p277562
Antonio Linares wrote: Sun Feb 09, 2025 10:31 pm Rao hay implementado una nueva función que proporcionaremos cuanto antes
Dile que no corra, el resultado que he obtenido empieza a gustarme. :P

Por cierto, gracias Carlos Gallego, el mérito es suyo.

Pero si, se debe corregir.

Muchas gracias,]]>
Antonio Linares wrote: Sun Feb 09, 2025 10:31 pm Rao hay implementado una nueva función que proporcionaremos cuanto antes
Dile que no corra, el resultado que he obtenido empieza a gustarme. :P

Por cierto, gracias Carlos Gallego, el mérito es suyo.

Pero si, se debe corregir.

Muchas gracias,]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: QR en portapapeles :: Reply by nageswaragunupudi]]> 2025-02-25T03:23:03-07:00 2025-02-25T03:23:03-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45393&p=277916#p277916

Code: Select all | Expand

function CopyQR()

   local hBmp, cText

   cText := "FiveTech Software"

   hBmp := FW_MakeYourBitmap( 200, 200, ;
       { |hDC,w,h| FW_SayBarCode( hDC, cText, {0,0,200,200}, "QR", ;
                   0, CLR_WHITE, nil, .t. , nil, nil ) }, CLR_WHITE )

   if OpenClipBoard( GetDeskTopWindow() )
      EmptyClipboard()
      SetClipboardData( 2, hBmp )
      CloseClipboard()
   endif

   DeleteObject( hBmp ) // or xImage( hBmp )

return nil
]]>

Code: Select all | Expand

function CopyQR()

   local hBmp, cText

   cText := "FiveTech Software"

   hBmp := FW_MakeYourBitmap( 200, 200, ;
       { |hDC,w,h| FW_SayBarCode( hDC, cText, {0,0,200,200}, "QR", ;
                   0, CLR_WHITE, nil, .t. , nil, nil ) }, CLR_WHITE )

   if OpenClipBoard( GetDeskTopWindow() )
      EmptyClipboard()
      SetClipboardData( 2, hBmp )
      CloseClipboard()
   endif

   DeleteObject( hBmp ) // or xImage( hBmp )

return nil
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: El Sr. Rao no se encuentra bien y oremos todos por su pronta recuperación. :: Author RAMESHBABU]]> 2025-02-22T17:45:25-07:00 2025-02-22T17:45:25-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45449&p=277882#p277882
Vuelva pronto. Todos necesitamos su apoyo y orientación.

Dios se encargará de todo. Sea valiente como siempre y todos estaremos allí con usted,
especialmente yo, que estoy a una hora de distancia de usted. Solo ordénelo,
estaré a su disposición todo el tiempo.

Que Dios lo bendiga y le conceda una pronta recuperación 🙏]]>

Vuelva pronto. Todos necesitamos su apoyo y orientación.

Dios se encargará de todo. Sea valiente como siempre y todos estaremos allí con usted,
especialmente yo, que estoy a una hora de distancia de usted. Solo ordénelo,
estaré a su disposición todo el tiempo.

Que Dios lo bendiga y le conceda una pronta recuperación 🙏]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: El Sr. Rao no se encuentra bien y oremos todos por su pronta recuperación. :: Reply by RAMESHBABU]]> 2025-02-22T19:42:06-07:00 2025-02-22T19:42:06-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45449&p=277884#p277884
Hace poco hablé con el Sr. Rao para expresarle mi apoyo en persona.

Es valiente y me aseguró que se recuperará pronto y volverá
a su vida normal.

Sigamos orando por su pronta recuperación.

-Ramesh Babu]]>

Hace poco hablé con el Sr. Rao para expresarle mi apoyo en persona.

Es valiente y me aseguró que se recuperará pronto y volverá
a su vida normal.

Sigamos orando por su pronta recuperación.

-Ramesh Babu]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: El Sr. Rao no se encuentra bien y oremos todos por su pronta recuperación. :: Reply by cnavarro]]> 2025-02-22T21:51:26-07:00 2025-02-22T21:51:26-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45449&p=277885#p277885 Mis mejores deseos]]> Mis mejores deseos]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: El Sr. Rao no se encuentra bien y oremos todos por su pronta recuperación. :: Reply by Antonio Linares]]> 2025-02-22T22:37:28-07:00 2025-02-22T22:37:28-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45449&p=277886#p277886
Many thanks!

God may give perfect health to Mr. Rao, we pray for him

Amen]]>

Many thanks!

God may give perfect health to Mr. Rao, we pray for him

Amen]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: El Sr. Rao no se encuentra bien y oremos todos por su pronta recuperación. :: Reply by JESUS MARIN]]> 2025-02-24T03:11:31-07:00 2025-02-24T03:11:31-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45449&p=277896#p277896 <![CDATA[FiveWin para Harbour/xHarbour :: Re: El Sr. Rao no se encuentra bien y oremos todos por su pronta recuperación. :: Reply by karinha]]> 2025-02-24T04:29:02-07:00 2025-02-24T04:29:02-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45449&p=277897#p277897
Regards, saludos.]]>

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: El Sr. Rao no se encuentra bien y oremos todos por su pronta recuperación. :: Reply by csincuir]]> 2025-02-24T05:34:58-07:00 2025-02-24T05:34:58-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45449&p=277898#p277898 <![CDATA[FiveWin para Harbour/xHarbour :: Re: El Sr. Rao no se encuentra bien y oremos todos por su pronta recuperación. :: Reply by acuellar]]> 2025-02-24T06:45:16-07:00 2025-02-24T06:45:16-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45449&p=277900#p277900 <![CDATA[FiveWin para Harbour/xHarbour :: Re: El Sr. Rao no se encuentra bien y oremos todos por su pronta recuperación. :: Reply by Marco Augusto]]> 2025-02-24T07:25:16-07:00 2025-02-24T07:25:16-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45449&p=277901#p277901 <![CDATA[FiveWin para Harbour/xHarbour :: Re: El Sr. Rao no se encuentra bien y oremos todos por su pronta recuperación. :: Reply by sysctrl2]]> 2025-02-24T08:54:17-07:00 2025-02-24T08:54:17-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45449&p=277902#p277902 <![CDATA[FiveWin para Harbour/xHarbour :: Re: El Sr. Rao no se encuentra bien y oremos todos por su pronta recuperación. :: Reply by jose_murugosa]]> 2025-02-24T10:48:27-07:00 2025-02-24T10:48:27-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45449&p=277905#p277905 El Señor dará oído a nuestras suplicas.
Te esperamos pronto repuesto y fuerte!!!!!]]>
El Señor dará oído a nuestras suplicas.
Te esperamos pronto repuesto y fuerte!!!!!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: El Sr. Rao no se encuentra bien y oremos todos por su pronta recuperación. :: Reply by carito]]> 2025-02-24T14:11:01-07:00 2025-02-24T14:11:01-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45449&p=277909#p277909
Juan (Carito)]]>

Juan (Carito)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: El Sr. Rao no se encuentra bien y oremos todos por su pronta recuperación. :: Reply by FiveWiDi]]> 2025-02-24T16:02:34-07:00 2025-02-24T16:02:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45449&p=277910#p277910
Carlos Gelabert]]>

Carlos Gelabert]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: El Sr. Rao no se encuentra bien y oremos todos por su pronta recuperación. :: Reply by D.Fernandez]]> 2025-02-24T18:50:30-07:00 2025-02-24T18:50:30-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45449&p=277912#p277912 <![CDATA[FiveWin para Harbour/xHarbour :: Re: El Sr. Rao no se encuentra bien y oremos todos por su pronta recuperación. :: Reply by nageswaragunupudi]]> 2025-02-25T03:40:22-07:00 2025-02-25T03:40:22-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45449&p=277919#p277919 Hope to be back with you all soon.]]> Hope to be back with you all soon.]]> <![CDATA[FiveWin para Harbour/xHarbour :: Nuevo FWH 25.01 :: Author Antonio Linares]]> 2025-02-19T01:17:04-07:00 2025-02-19T01:17:04-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45434&p=277748#p277748 viewtopic.php?t=45432]]> viewtopic.php?t=45432]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Nuevo FWH 25.01 :: Reply by karinha]]> 2025-02-19T07:32:06-07:00 2025-02-19T07:32:06-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45434&p=277760#p277760
Buenos días querido maestro, no vi ninguna referencia a la solución al problema creado en FWH2409 en referencia al problema de acentuación usando: HB_SETCODEPAGE( "PT850" ). Gracias.

Gracias, tks.

Regards, saludos.]]>

Buenos días querido maestro, no vi ninguna referencia a la solución al problema creado en FWH2409 en referencia al problema de acentuación usando: HB_SETCODEPAGE( "PT850" ). Gracias.

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Nuevo FWH 25.01 :: Reply by Antonio Linares]]> 2025-02-19T07:33:25-07:00 2025-02-19T07:33:25-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45434&p=277761#p277761 ]]> ]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Nuevo FWH 25.01 :: Reply by leandro]]> 2025-02-20T12:38:57-07:00 2025-02-20T12:38:57-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45434&p=277800#p277800
Al intentar compilar TODOS los ejemplos de las nuevas clases de inteligencia artificial, se están generando los siguientes errores:

Descargamos la ultima versión de xharbour desde el link https://github.com/FiveTechSoft/harbou ... our_builds

Pero nada de nada, los errores continúan.

Code: Select all | Expand

┌────────────────────────────────────────────────────────────────────────────┐
?FiveWin for xHarbour 25.01 64bits - Jan. 2025   Harbour development power  │▄
?(c) FiveTech 1993-2025 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 │█
└────────────────────────────────────────────────────────────────────────────┘?
  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀?
Compiling...
C:\xHar2501_64\bin\harbour gemini1 /n /d__64__ /iC:\fwh64_2501\include;C:\xHar2501_64\include /w /p
xHarbour 1.3.1 Intl. (SimpLex) (Build 20250215)
Copyright 1999-2024, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'gemini1.prg' and generating preprocessed output to 'gemini1.ppo'...
Generating C source output to 'gemini1.c'...
Done.
Lines 22, Functions/Procedures 1, pCodes 38
Embarcadero C++ 7.70 for Win64 Copyright (c) 2012-2023 Embarcadero Technologies, Inc.
gemini1.c:
Turbo Incremental Link64 6.98 Copyright (c) 1997-2023 Embarcadero Technologies, Inc.
Error: Unresolved external 'HB_FUN_CURL_VERSION_INFO' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_INIT' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_CLEANUP' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_SETOPT' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_PERFORM' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_GETINFO' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_DL_BUFF_GET' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
* Linking errors *

c:\fwh64_2501\samples>

]]>

Al intentar compilar TODOS los ejemplos de las nuevas clases de inteligencia artificial, se están generando los siguientes errores:

Descargamos la ultima versión de xharbour desde el link https://github.com/FiveTechSoft/harbou ... our_builds

Pero nada de nada, los errores continúan.

Code: Select all | Expand

┌────────────────────────────────────────────────────────────────────────────┐
?FiveWin for xHarbour 25.01 64bits - Jan. 2025   Harbour development power  │▄
?(c) FiveTech 1993-2025 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 │█
└────────────────────────────────────────────────────────────────────────────┘?
  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀?
Compiling...
C:\xHar2501_64\bin\harbour gemini1 /n /d__64__ /iC:\fwh64_2501\include;C:\xHar2501_64\include /w /p
xHarbour 1.3.1 Intl. (SimpLex) (Build 20250215)
Copyright 1999-2024, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'gemini1.prg' and generating preprocessed output to 'gemini1.ppo'...
Generating C source output to 'gemini1.c'...
Done.
Lines 22, Functions/Procedures 1, pCodes 38
Embarcadero C++ 7.70 for Win64 Copyright (c) 2012-2023 Embarcadero Technologies, Inc.
gemini1.c:
Turbo Incremental Link64 6.98 Copyright (c) 1997-2023 Embarcadero Technologies, Inc.
Error: Unresolved external 'HB_FUN_CURL_VERSION_INFO' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_INIT' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_CLEANUP' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_SETOPT' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_PERFORM' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_GETINFO' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_DL_BUFF_GET' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
* Linking errors *

c:\fwh64_2501\samples>

]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Nuevo FWH 25.01 :: Reply by leandro]]> 2025-02-20T12:44:29-07:00 2025-02-20T12:44:29-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45434&p=277801#p277801
Image]]>

Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Nuevo FWH 25.01 :: Reply by Antonio Linares]]> 2025-02-20T14:41:33-07:00 2025-02-20T14:41:33-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45434&p=277803#p277803
leandro wrote: Thu Feb 20, 2025 7:38 pm Antonio buenas tardes como estas?

Al intentar compilar TODOS los ejemplos de las nuevas clases de inteligencia artificial, se están generando los siguientes errores:

Descargamos la ultima versión de xharbour desde el link https://github.com/FiveTechSoft/harbou ... our_builds

Pero nada de nada, los errores continúan.

Code: Select all | Expand

┌────────────────────────────────────────────────────────────────────────────┐
?FiveWin for xHarbour 25.01 64bits - Jan. 2025   Harbour development power  │▄
?(c) FiveTech 1993-2025 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 │█
└────────────────────────────────────────────────────────────────────────────┘?
  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀?
Compiling...
C:\xHar2501_64\bin\harbour gemini1 /n /d__64__ /iC:\fwh64_2501\include;C:\xHar2501_64\include /w /p
xHarbour 1.3.1 Intl. (SimpLex) (Build 20250215)
Copyright 1999-2024, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'gemini1.prg' and generating preprocessed output to 'gemini1.ppo'...
Generating C source output to 'gemini1.c'...
Done.
Lines 22, Functions/Procedures 1, pCodes 38
Embarcadero C++ 7.70 for Win64 Copyright (c) 2012-2023 Embarcadero Technologies, Inc.
gemini1.c:
Turbo Incremental Link64 6.98 Copyright (c) 1997-2023 Embarcadero Technologies, Inc.
Error: Unresolved external 'HB_FUN_CURL_VERSION_INFO' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_INIT' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_CLEANUP' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_SETOPT' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_PERFORM' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_GETINFO' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_DL_BUFF_GET' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
* Linking errors *

c:\fwh64_2501\samples>

Hay que enlazar hbcurl.a y libcurl.a, corregido. Gracias!]]>
leandro wrote: Thu Feb 20, 2025 7:38 pm Antonio buenas tardes como estas?

Al intentar compilar TODOS los ejemplos de las nuevas clases de inteligencia artificial, se están generando los siguientes errores:

Descargamos la ultima versión de xharbour desde el link https://github.com/FiveTechSoft/harbou ... our_builds

Pero nada de nada, los errores continúan.

Code: Select all | Expand

┌────────────────────────────────────────────────────────────────────────────┐
?FiveWin for xHarbour 25.01 64bits - Jan. 2025   Harbour development power  │▄
?(c) FiveTech 1993-2025 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 │█
└────────────────────────────────────────────────────────────────────────────┘?
  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀?
Compiling...
C:\xHar2501_64\bin\harbour gemini1 /n /d__64__ /iC:\fwh64_2501\include;C:\xHar2501_64\include /w /p
xHarbour 1.3.1 Intl. (SimpLex) (Build 20250215)
Copyright 1999-2024, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'gemini1.prg' and generating preprocessed output to 'gemini1.ppo'...
Generating C source output to 'gemini1.c'...
Done.
Lines 22, Functions/Procedures 1, pCodes 38
Embarcadero C++ 7.70 for Win64 Copyright (c) 2012-2023 Embarcadero Technologies, Inc.
gemini1.c:
Turbo Incremental Link64 6.98 Copyright (c) 1997-2023 Embarcadero Technologies, Inc.
Error: Unresolved external 'HB_FUN_CURL_VERSION_INFO' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_INIT' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_CLEANUP' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_SETOPT' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_PERFORM' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_GETINFO' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_DL_BUFF_GET' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tgemini.obj
* Linking errors *

c:\fwh64_2501\samples>

Hay que enlazar hbcurl.a y libcurl.a, corregido. Gracias!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Nuevo FWH 25.01 :: Reply by Antonio Linares]]> 2025-02-20T14:42:42-07:00 2025-02-20T14:42:42-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45434&p=277804#p277804
leandro wrote: Thu Feb 20, 2025 7:44 pm También al intentar compilar el ejemplo webchart2, se queda procesando, nunca llega a mostrar nada.

Image
Prueba a hacer:

buildh.bat webchart2]]>
leandro wrote: Thu Feb 20, 2025 7:44 pm También al intentar compilar el ejemplo webchart2, se queda procesando, nunca llega a mostrar nada.

Image
Prueba a hacer:

buildh.bat webchart2]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Nuevo FWH 25.01 :: Reply by sysctrl2]]> 2025-02-20T17:12:49-07:00 2025-02-20T17:12:49-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45434&p=277812#p277812 Sigo con la duda si este ejemplo ya funciona con 64bits :roll: :roll: :roll:

* New: samples\fastreport\main.prg shows FastReport with CreateObject + events.

saludos !!!]]>
Sigo con la duda si este ejemplo ya funciona con 64bits :roll: :roll: :roll:

* New: samples\fastreport\main.prg shows FastReport with CreateObject + events.

saludos !!!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Nuevo FWH 25.01 :: Reply by albeiroval]]> 2025-02-20T19:03:36-07:00 2025-02-20T19:03:36-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45434&p=277813#p277813
sysctrl2 wrote: Fri Feb 21, 2025 12:12 am Maestro Antonio
Sigo con la duda si este ejemplo ya funciona con 64bits

* New: samples\fastreport\main.prg shows FastReport with CreateObject + events.
+1]]>
sysctrl2 wrote: Fri Feb 21, 2025 12:12 am Maestro Antonio
Sigo con la duda si este ejemplo ya funciona con 64bits

* New: samples\fastreport\main.prg shows FastReport with CreateObject + events.
+1]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Nuevo FWH 25.01 :: Reply by Antonio Linares]]> 2025-02-21T00:06:27-07:00 2025-02-21T00:06:27-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45434&p=277816#p277816
Si estoy equivocado agradezco que se me corrija.]]>

Si estoy equivocado agradezco que se me corrija.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Nuevo FWH 25.01 :: Reply by leandro]]> 2025-02-21T08:11:11-07:00 2025-02-21T08:11:11-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45434&p=277841#p277841
Hay que enlazar hbcurl.a y libcurl.a, corregido. Gracias!
Antonio gracias por responder, sabes de donde podemos descargar la lib? ya que, la que estamos usando, la descargamos del link que nos enviaste; hay otro link para descargar la librería actualizada?

Este fue el archivo que descargamos -> xhb10290_bcc77064.zip

Desde este link https://github.com/FiveTechSoft/harbour ... our_builds

Gracias de antemano]]>
Hay que enlazar hbcurl.a y libcurl.a, corregido. Gracias!
Antonio gracias por responder, sabes de donde podemos descargar la lib? ya que, la que estamos usando, la descargamos del link que nos enviaste; hay otro link para descargar la librería actualizada?

Este fue el archivo que descargamos -> xhb10290_bcc77064.zip

Desde este link https://github.com/FiveTechSoft/harbour ... our_builds

Gracias de antemano]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Nuevo FWH 25.01 :: Reply by CARLOS ATUNCAR]]> 2025-02-21T15:04:13-07:00 2025-02-21T15:04:13-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45434&p=277855#p277855 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Nuevo FWH 25.01 :: Reply by Antonio Linares]]> 2025-02-21T23:16:36-07:00 2025-02-21T23:16:36-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45434&p=277859#p277859
leandro wrote: Fri Feb 21, 2025 3:11 pm
Hay que enlazar hbcurl.a y libcurl.a, corregido. Gracias!
Antonio gracias por responder, sabes de donde podemos descargar la lib? ya que, la que estamos usando, la descargamos del link que nos enviaste; hay otro link para descargar la librería actualizada?

Este fue el archivo que descargamos -> xhb10290_bcc77064.zip

Desde este link https://github.com/FiveTechSoft/harbour ... our_builds

Gracias de antemano
Esa versión debería funcionar correctamente]]>
leandro wrote: Fri Feb 21, 2025 3:11 pm
Hay que enlazar hbcurl.a y libcurl.a, corregido. Gracias!
Antonio gracias por responder, sabes de donde podemos descargar la lib? ya que, la que estamos usando, la descargamos del link que nos enviaste; hay otro link para descargar la librería actualizada?

Este fue el archivo que descargamos -> xhb10290_bcc77064.zip

Desde este link https://github.com/FiveTechSoft/harbour ... our_builds

Gracias de antemano
Esa versión debería funcionar correctamente]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Nuevo FWH 25.01 :: Reply by Antonio Linares]]> 2025-02-21T23:17:27-07:00 2025-02-21T23:17:27-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45434&p=277860#p277860
CARLOS ATUNCAR wrote: Fri Feb 21, 2025 10:04 pm Saludos Antonio los que tienen la version 2409 del seminario tambien pueden descargar la actualizacion ?
Vamos a considerarlo]]>
CARLOS ATUNCAR wrote: Fri Feb 21, 2025 10:04 pm Saludos Antonio los que tienen la version 2409 del seminario tambien pueden descargar la actualizacion ?
Vamos a considerarlo]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Nuevo FWH 25.01 :: Reply by leandro]]> 2025-02-22T06:50:46-07:00 2025-02-22T06:50:46-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45434&p=277868#p277868
Antonio Linares wrote: Sat Feb 22, 2025 6:16 am
leandro wrote: Fri Feb 21, 2025 3:11 pm
Hay que enlazar hbcurl.a y libcurl.a, corregido. Gracias!
Antonio gracias por responder, sabes de donde podemos descargar la lib? ya que, la que estamos usando, la descargamos del link que nos enviaste; hay otro link para descargar la librería actualizada?

Este fue el archivo que descargamos -> xhb10290_bcc77064.zip

Desde este link https://github.com/FiveTechSoft/harbour ... our_builds

Gracias de antemano
Esa versión debería funcionar correctamente
Ya descargamos de nuevo el xharbour64, y no, definitivamente no funciona, sigo sin poder compilar los ejemplos de inteligencia artificial.

Code: Select all | Expand

┌────────────────────────────────────────────────────────────────────────────┐
?FiveWin for xHarbour 25.01 64bits - Jan. 2025   Harbour development power  │▄
?(c) FiveTech 1993-2025 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 │█
└────────────────────────────────────────────────────────────────────────────┘?
  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀?
Compiling...
C:\xHar2501_64\bin\harbour agentdb /n /d__64__ /iC:\fwh64_2501\include;C:\xHar2501_64\include /w /p
xHarbour 1.3.1 Intl. (SimpLex) (Build 20250219)
Copyright 1999-2024, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'agentdb.prg' and generating preprocessed output to 'agentdb.ppo'...
Generating C source output to 'agentdb.c'...
Done.
Lines 32, Functions/Procedures 1, pCodes 114
Embarcadero C++ 7.70 for Win64 Copyright (c) 2012-2023 Embarcadero Technologies, Inc.
agentdb.c:
Turbo Incremental Link64 6.98 Copyright (c) 1997-2023 Embarcadero Technologies, Inc.
Error: Unresolved external 'HB_FUN_CURL_EASY_INIT' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tdeepseek.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_CLEANUP' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tdeepseek.obj
Error: Unresolved external 'HB_FUN_HB_DEFAULT' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tdeepseek.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_SETOPT' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tdeepseek.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_PERFORM' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tdeepseek.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_GETINFO' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tdeepseek.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_DL_BUFF_GET' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tdeepseek.obj
* Linking errors *

c:\fwh64_2501\samples>
]]>
Antonio Linares wrote: Sat Feb 22, 2025 6:16 am
leandro wrote: Fri Feb 21, 2025 3:11 pm
Hay que enlazar hbcurl.a y libcurl.a, corregido. Gracias!
Antonio gracias por responder, sabes de donde podemos descargar la lib? ya que, la que estamos usando, la descargamos del link que nos enviaste; hay otro link para descargar la librería actualizada?

Este fue el archivo que descargamos -> xhb10290_bcc77064.zip

Desde este link https://github.com/FiveTechSoft/harbour ... our_builds

Gracias de antemano
Esa versión debería funcionar correctamente
Ya descargamos de nuevo el xharbour64, y no, definitivamente no funciona, sigo sin poder compilar los ejemplos de inteligencia artificial.

Code: Select all | Expand

┌────────────────────────────────────────────────────────────────────────────┐
?FiveWin for xHarbour 25.01 64bits - Jan. 2025   Harbour development power  │▄
?(c) FiveTech 1993-2025 for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7/8/10 │█
└────────────────────────────────────────────────────────────────────────────┘?
  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀?
Compiling...
C:\xHar2501_64\bin\harbour agentdb /n /d__64__ /iC:\fwh64_2501\include;C:\xHar2501_64\include /w /p
xHarbour 1.3.1 Intl. (SimpLex) (Build 20250219)
Copyright 1999-2024, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'agentdb.prg' and generating preprocessed output to 'agentdb.ppo'...
Generating C source output to 'agentdb.c'...
Done.
Lines 32, Functions/Procedures 1, pCodes 114
Embarcadero C++ 7.70 for Win64 Copyright (c) 2012-2023 Embarcadero Technologies, Inc.
agentdb.c:
Turbo Incremental Link64 6.98 Copyright (c) 1997-2023 Embarcadero Technologies, Inc.
Error: Unresolved external 'HB_FUN_CURL_EASY_INIT' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tdeepseek.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_CLEANUP' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tdeepseek.obj
Error: Unresolved external 'HB_FUN_HB_DEFAULT' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tdeepseek.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_SETOPT' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tdeepseek.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_PERFORM' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tdeepseek.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_GETINFO' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tdeepseek.obj
Error: Unresolved external 'HB_FUN_CURL_EASY_DL_BUFF_GET' referenced from C:\FWH64_2501\LIB\FIVEHX64.A|tdeepseek.obj
* Linking errors *

c:\fwh64_2501\samples>
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Nuevo FWH 25.01 :: Reply by Enrico Maria Giordano]]> 2025-02-22T08:02:36-07:00 2025-02-22T08:02:36-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45434&p=277873#p277873

Code: Select all | Expand

hbcurl.a
libcurl-x64.a
]]>

Code: Select all | Expand

hbcurl.a
libcurl-x64.a
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Nuevo FWH 25.01 :: Reply by CARLOS ATUNCAR]]> 2025-02-22T16:39:46-07:00 2025-02-22T16:39:46-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45434&p=277880#p277880
Antonio Linares wrote: Sat Feb 22, 2025 6:17 am
CARLOS ATUNCAR wrote: Fri Feb 21, 2025 10:04 pm Saludos Antonio los que tienen la version 2409 del seminario tambien pueden descargar la actualizacion ?
Vamos a considerarlo
nos haces saber donde actualizar, muchas Gracias]]>
Antonio Linares wrote: Sat Feb 22, 2025 6:17 am
CARLOS ATUNCAR wrote: Fri Feb 21, 2025 10:04 pm Saludos Antonio los que tienen la version 2409 del seminario tambien pueden descargar la actualizacion ?
Vamos a considerarlo
nos haces saber donde actualizar, muchas Gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Nuevo FWH 25.01 :: Reply by nageswaragunupudi]]> 2025-02-25T03:43:19-07:00 2025-02-25T03:43:19-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45434&p=277921#p277921
karinha wrote: Wed Feb 19, 2025 2:32 pm Good morning beloved master, I did not see any reference to the solution to the problem created in FWH2409 in reference to the accentuation problem using: HB_SETCODEPAGE( "PT850" ). Thank you.

Buenos días querido maestro, no vi ninguna referencia a la solución al problema creado en FWH2409 en referencia al problema de acentuación usando: HB_SETCODEPAGE( "PT850" ). Gracias.

Gracias, tks.

Regards, saludos.
There should be no issues now
Please test.]]>
karinha wrote: Wed Feb 19, 2025 2:32 pm Good morning beloved master, I did not see any reference to the solution to the problem created in FWH2409 in reference to the accentuation problem using: HB_SETCODEPAGE( "PT850" ). Thank you.

Buenos días querido maestro, no vi ninguna referencia a la solución al problema creado en FWH2409 en referencia al problema de acentuación usando: HB_SETCODEPAGE( "PT850" ). Gracias.

Gracias, tks.

Regards, saludos.
There should be no issues now
Please test.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Incompatibilidad tDolphin - IA - MySQl :: Author JoseAlvarez]]> 2025-02-10T14:58:25-07:00 2025-02-10T14:58:25-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45401&p=277575#p277575
He utilizado la inteligencia artificial para crear muchas consultas de mariadb y mysql. De verdad es fantástico y no tengo problemas en usarla. es una gran herramienta para todo, y si lo podemos aprovechar, ¿por qué no?

El caso es que me he encontrado que a veces las consultas funcionan perfecto en NAVICAT (podría ser cualquier otro administrador de BD) pero cuando lo llevo a FW+HARBOUR arroja error de sintaxis. Todo se copia tal cual y me aseguro de no tener errores de mi parte. pero nada, sigue arrojando el error 1064.

Revisando pude darme cuenta de algo, si se intenta ejecutar mas de una operación en una sola consulta no funciona. si las separo, funciona.
por ejemplo el DROP TEMPORARY TABLE IF EXIST seguido de otras instrucciones, no sirve. si lo ejecuto primero con un execute y luego el resto de la consulta en otra, si funciona.

el caso es que la IA me proporciona consultas donde usa cosas de mysql que ni sabia que existían, pero me dan lo que necesito. Solo que al llevarlo a harbour, no funciona. asi de simple.

uso tDolphin. ¿alguien tiene idea del porque de esto?

Se que la solución seria trabajarla por partes y/o quitarle esas cosas extras de mysql que usa la IA, pero quedaría en el mismo sitio de antes, y quiero aprovechar la ayuda.

aqui dejo el ejemplo de una consulta, solo para fines orientativos.

Code: Select all | Expand

-- Eliminar la tabla temporal si ya existe
DROP TEMPORARY TABLE IF EXISTS temp_resultados;

-- Crear una tabla temporal para almacenar los resultados intermedios
CREATE TEMPORARY TABLE temp_resultados AS
SELECT 
    C.codigo_cliente, 
    C.razon_social_cliente, 
    M.codigo_medio, 
    M.nombre_medio, 
    D.fecha_pago, 
    D.code_clien, 
    D.numero_recibo, 
    D.doc_pagado, 
    D.monto, 
    D.doc_deleted
FROM 
    c32demo_clientes   AS C,
    c32demo_mediospago AS M,
    c32demo_desglose   AS D 
WHERE 
    C.codigo_cliente = D.code_clien 
    AND M.codigo_medio = D.codigo_medio 
    AND D.fecha_pago BETWEEN '2025-02-06' AND '2025-02-09' 
    AND D.doc_deleted <> '.T.'
ORDER BY 
    D.fecha_pago, 
    D.codigo_medio, 
    D.numero_recibo, 
    D.doc_pagado;

-- Consulta final con subtotales después del grupo de fecha_pago
SELECT fecha_pago, nombre_medio, codigo_medio, numero_recibos, total_doc_pagado, total_monto FROM (
    -- Datos principales
    SELECT 
        fecha_pago,
        nombre_medio, 
        codigo_medio, 
        COUNT(numero_recibo) AS numero_recibos, 
        SUM(doc_pagado) AS total_doc_pagado, 
        SUM(monto) AS total_monto,
        0 AS orden
    FROM temp_resultados
    GROUP BY fecha_pago, codigo_medio, nombre_medio 

    UNION ALL

    -- Filas de subtotales (colocadas después)
    SELECT 
        fecha_pago,
        'SUBTOTAL' AS nombre_medio,
        NULL AS codigo_medio,
        NULL AS numero_recibos,
        NULL AS total_doc_pagado,
        SUM(monto) AS total_monto,
        1 AS orden
    FROM temp_resultados
    GROUP BY fecha_pago
) AS final_query
ORDER BY fecha_pago, orden, codigo_medio, nombre_medio;
]]>

He utilizado la inteligencia artificial para crear muchas consultas de mariadb y mysql. De verdad es fantástico y no tengo problemas en usarla. es una gran herramienta para todo, y si lo podemos aprovechar, ¿por qué no?

El caso es que me he encontrado que a veces las consultas funcionan perfecto en NAVICAT (podría ser cualquier otro administrador de BD) pero cuando lo llevo a FW+HARBOUR arroja error de sintaxis. Todo se copia tal cual y me aseguro de no tener errores de mi parte. pero nada, sigue arrojando el error 1064.

Revisando pude darme cuenta de algo, si se intenta ejecutar mas de una operación en una sola consulta no funciona. si las separo, funciona.
por ejemplo el DROP TEMPORARY TABLE IF EXIST seguido de otras instrucciones, no sirve. si lo ejecuto primero con un execute y luego el resto de la consulta en otra, si funciona.

el caso es que la IA me proporciona consultas donde usa cosas de mysql que ni sabia que existían, pero me dan lo que necesito. Solo que al llevarlo a harbour, no funciona. asi de simple.

uso tDolphin. ¿alguien tiene idea del porque de esto?

Se que la solución seria trabajarla por partes y/o quitarle esas cosas extras de mysql que usa la IA, pero quedaría en el mismo sitio de antes, y quiero aprovechar la ayuda.

aqui dejo el ejemplo de una consulta, solo para fines orientativos.

Code: Select all | Expand

-- Eliminar la tabla temporal si ya existe
DROP TEMPORARY TABLE IF EXISTS temp_resultados;

-- Crear una tabla temporal para almacenar los resultados intermedios
CREATE TEMPORARY TABLE temp_resultados AS
SELECT 
    C.codigo_cliente, 
    C.razon_social_cliente, 
    M.codigo_medio, 
    M.nombre_medio, 
    D.fecha_pago, 
    D.code_clien, 
    D.numero_recibo, 
    D.doc_pagado, 
    D.monto, 
    D.doc_deleted
FROM 
    c32demo_clientes   AS C,
    c32demo_mediospago AS M,
    c32demo_desglose   AS D 
WHERE 
    C.codigo_cliente = D.code_clien 
    AND M.codigo_medio = D.codigo_medio 
    AND D.fecha_pago BETWEEN '2025-02-06' AND '2025-02-09' 
    AND D.doc_deleted <> '.T.'
ORDER BY 
    D.fecha_pago, 
    D.codigo_medio, 
    D.numero_recibo, 
    D.doc_pagado;

-- Consulta final con subtotales después del grupo de fecha_pago
SELECT fecha_pago, nombre_medio, codigo_medio, numero_recibos, total_doc_pagado, total_monto FROM (
    -- Datos principales
    SELECT 
        fecha_pago,
        nombre_medio, 
        codigo_medio, 
        COUNT(numero_recibo) AS numero_recibos, 
        SUM(doc_pagado) AS total_doc_pagado, 
        SUM(monto) AS total_monto,
        0 AS orden
    FROM temp_resultados
    GROUP BY fecha_pago, codigo_medio, nombre_medio 

    UNION ALL

    -- Filas de subtotales (colocadas después)
    SELECT 
        fecha_pago,
        'SUBTOTAL' AS nombre_medio,
        NULL AS codigo_medio,
        NULL AS numero_recibos,
        NULL AS total_doc_pagado,
        SUM(monto) AS total_monto,
        1 AS orden
    FROM temp_resultados
    GROUP BY fecha_pago
) AS final_query
ORDER BY fecha_pago, orden, codigo_medio, nombre_medio;
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Incompatibilidad tDolphin - IA - MySQl :: Reply by Antonio Linares]]> 2025-02-11T15:22:00-07:00 2025-02-11T15:22:00-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45401&p=277603#p277603
Por lo que tengo entendido no todos los motores de bases de datos soportan la misma sintaxis SQL.

Al pedir una determinada sintaxis para una sentencia SQL especifícale el motor de base de datos a usar.]]>

Por lo que tengo entendido no todos los motores de bases de datos soportan la misma sintaxis SQL.

Al pedir una determinada sintaxis para una sentencia SQL especifícale el motor de base de datos a usar.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Incompatibilidad tDolphin - IA - MySQl :: Reply by JoseAlvarez]]> 2025-02-11T17:02:04-07:00 2025-02-11T17:02:04-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45401&p=277605#p277605
Sí, siempre lo hago, le digo que trabajo en local con mariadb y en la nube con mysql. Siempre me dice "Ok, prepararé la consulta para que funcione en ambos"

Lo que si he comprobado por ejemplo es que tDolphin no acepta dos operaciones diferentes, un execute y un query en la misma consulta, por ejemplo un drop, create y select juntos, cosa que funciona perfecto en el generador de querys de navicat o cualquiera parecido.]]>

Sí, siempre lo hago, le digo que trabajo en local con mariadb y en la nube con mysql. Siempre me dice "Ok, prepararé la consulta para que funcione en ambos"

Lo que si he comprobado por ejemplo es que tDolphin no acepta dos operaciones diferentes, un execute y un query en la misma consulta, por ejemplo un drop, create y select juntos, cosa que funciona perfecto en el generador de querys de navicat o cualquiera parecido.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Incompatibilidad tDolphin - IA - MySQl (Solucionado) :: Reply by JoseAlvarez]]> 2025-02-13T13:39:00-07:00 2025-02-13T13:39:00-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45401&p=277655#p277655
Cuando se desea hacer una consulta mysql a la IA basta con decirle "Hazla adaptada para el lenguaje HARBOUR"

y listo... así de simple.

Un abrazo.

Les dejo la explicación de la IA:
Harbour es un lenguaje de programación muy potente y versátil, pero tiene algunas limitaciones al ejecutar consultas complejas y comandos avanzados de MySQL. Aquí te menciono algunas de ellas:

Compatibilidad limitada con MySQL: Aunque Harbour puede conectarse a bases de datos MySQL, no soporta todas las funcionalidades avanzadas de MySQL, como ciertas funciones de agregación, subconsultas y operaciones complejas de JOIN.

Rendimiento: Al ejecutar consultas complejas, el rendimiento puede ser inferior en comparación con otros lenguajes y herramientas especializadas en bases de datos.

Documentación y soporte: La documentación y el soporte para el uso de MySQL con Harbour pueden ser limitados, lo que puede dificultar la resolución de problemas y la implementación de soluciones avanzadas.

Actualizaciones y mantenimiento: Harbour no se actualiza tan frecuentemente como otros lenguajes modernos, lo que puede resultar en una menor compatibilidad con las últimas versiones y características de MySQL.

A pesar de estas limitaciones, Harbour sigue siendo una herramienta valiosa para aplicaciones de bases de datos y negocios, especialmente para aquellos familiarizados con el lenguaje Clipper.
]]>

Cuando se desea hacer una consulta mysql a la IA basta con decirle "Hazla adaptada para el lenguaje HARBOUR"

y listo... así de simple.

Un abrazo.

Les dejo la explicación de la IA:
Harbour es un lenguaje de programación muy potente y versátil, pero tiene algunas limitaciones al ejecutar consultas complejas y comandos avanzados de MySQL. Aquí te menciono algunas de ellas:

Compatibilidad limitada con MySQL: Aunque Harbour puede conectarse a bases de datos MySQL, no soporta todas las funcionalidades avanzadas de MySQL, como ciertas funciones de agregación, subconsultas y operaciones complejas de JOIN.

Rendimiento: Al ejecutar consultas complejas, el rendimiento puede ser inferior en comparación con otros lenguajes y herramientas especializadas en bases de datos.

Documentación y soporte: La documentación y el soporte para el uso de MySQL con Harbour pueden ser limitados, lo que puede dificultar la resolución de problemas y la implementación de soluciones avanzadas.

Actualizaciones y mantenimiento: Harbour no se actualiza tan frecuentemente como otros lenguajes modernos, lo que puede resultar en una menor compatibilidad con las últimas versiones y características de MySQL.

A pesar de estas limitaciones, Harbour sigue siendo una herramienta valiosa para aplicaciones de bases de datos y negocios, especialmente para aquellos familiarizados con el lenguaje Clipper.
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Incompatibilidad tDolphin - IA - MySQl :: Reply by Vikthor]]> 2025-02-13T16:06:06-07:00 2025-02-13T16:06:06-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45401&p=277660#p277660
¿ Cuál fue la diferencia significativa entre la primer consulta que generaba error y la segunda que se ejecutaba de forma correcta ?]]>

¿ Cuál fue la diferencia significativa entre la primer consulta que generaba error y la segunda que se ejecutaba de forma correcta ?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Incompatibilidad tDolphin - IA - MySQl (Solucionado) :: Reply by Carles]]> 2025-02-20T06:53:27-07:00 2025-02-20T06:53:27-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45401&p=277791#p277791
JoseAlvarez wrote: Thu Feb 13, 2025 8:39 pm Amigos, como suele suceder, las soluciones a veces son las más simples.

Cuando se desea hacer una consulta mysql a la IA basta con decirle "Hazla adaptada para el lenguaje HARBOUR"

y listo... así de simple.

Un abrazo.

Les dejo la explicación de la IA:
No os creais todo lo que diga la IA...

C.]]>
JoseAlvarez wrote: Thu Feb 13, 2025 8:39 pm Amigos, como suele suceder, las soluciones a veces son las más simples.

Cuando se desea hacer una consulta mysql a la IA basta con decirle "Hazla adaptada para el lenguaje HARBOUR"

y listo... así de simple.

Un abrazo.

Les dejo la explicación de la IA:
No os creais todo lo que diga la IA...

C.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Incompatibilidad tDolphin - IA - MySQl :: Reply by nageswaragunupudi]]> 2025-02-25T03:58:44-07:00 2025-02-25T03:58:44-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45401&p=277923#p277923 Dolphin does not do it on its own.

FW MariaDB sets this while connecting to the server.]]>
Dolphin does not do it on its own.

FW MariaDB sets this while connecting to the server.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: gmail y OAuth :: Author horacio]]> 2025-02-04T06:30:39-07:00 2025-02-04T06:30:39-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45378&p=277414#p277414 Ya no se pueden mandar correos desde gmail en aplicaciones de terceros como lo veníamos haciendo. Ahora hay que usar OAuth. No tengo la menor idea de como configurarlo. Alguien sabe? Gracias de antemano!]]> Ya no se pueden mandar correos desde gmail en aplicaciones de terceros como lo veníamos haciendo. Ahora hay que usar OAuth. No tengo la menor idea de como configurarlo. Alguien sabe? Gracias de antemano!]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: gmail y OAuth :: Reply by Lailton]]> 2025-02-04T16:01:12-07:00 2025-02-04T16:01:12-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45378&p=277429#p277429
Estamos implementando soporte OAuth2 para Gmail y Microsoft (Outlook, Live, Office 365).
El soporte para el envío de correos con OAuth2 estará disponible en la próxima versión de FWH. 😃]]>

Estamos implementando soporte OAuth2 para Gmail y Microsoft (Outlook, Live, Office 365).
El soporte para el envío de correos con OAuth2 estará disponible en la próxima versión de FWH. 😃]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: gmail y OAuth :: Reply by wilsongamboa]]> 2025-02-05T12:01:40-07:00 2025-02-05T12:01:40-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45378&p=277451#p277451 yo nunca pude usar 365 para envio de mails seria un puntazo !!!
puedes dar algo de contexto como lo van a hacer
curl ? o ?
saludos
Wilson]]>
yo nunca pude usar 365 para envio de mails seria un puntazo !!!
puedes dar algo de contexto como lo van a hacer
curl ? o ?
saludos
Wilson]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: gmail y OAuth :: Reply by Lailton]]> 2025-02-05T15:15:45-07:00 2025-02-05T15:15:45-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45378&p=277455#p277455 Cuando listo posto ejemplos con screenshots.

:D]]>
Cuando listo posto ejemplos con screenshots.

:D]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: gmail y OAuth :: Reply by wilsongamboa]]> 2025-02-05T19:15:22-07:00 2025-02-05T19:15:22-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45378&p=277459#p277459 saludos
Wilson]]>
saludos
Wilson]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: gmail y OAuth :: Reply by karinha]]> 2025-02-06T03:36:58-07:00 2025-02-06T03:36:58-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45378&p=277463#p277463
Lailton wrote: Wed Feb 05, 2025 10:15 pm Si, parte del codigo es con CURL para poder criar los token de comunicacion con los servicos oAuth2.
Cuando listo posto ejemplos con screenshots.

:D
Lailton, esperando ansioso.

Gracias, tks.

Regards, saludos.]]>
Lailton wrote: Wed Feb 05, 2025 10:15 pm Si, parte del codigo es con CURL para poder criar los token de comunicacion con los servicos oAuth2.
Cuando listo posto ejemplos con screenshots.

:D
Lailton, esperando ansioso.

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: gmail y OAuth :: Reply by FiveWiDi]]> 2025-02-06T05:20:04-07:00 2025-02-06T05:20:04-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45378&p=277468#p277468
karinha wrote: Thu Feb 06, 2025 10:36 am
Lailton wrote: Wed Feb 05, 2025 10:15 pm Si, parte del codigo es con CURL para poder criar los token de comunicacion con los servicos oAuth2.
Cuando listo posto ejemplos con screenshots.

:D
Lailton, esperando ansioso.

Gracias, tks.

Regards, saludos.
+1]]>
karinha wrote: Thu Feb 06, 2025 10:36 am
Lailton wrote: Wed Feb 05, 2025 10:15 pm Si, parte del codigo es con CURL para poder criar los token de comunicacion con los servicos oAuth2.
Cuando listo posto ejemplos con screenshots.

:D
Lailton, esperando ansioso.

Gracias, tks.

Regards, saludos.
+1]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: gmail y OAuth :: Reply by mauri.menabue]]> 2025-02-09T12:06:31-07:00 2025-02-09T12:06:31-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45378&p=277554#p277554 TIA :D]]> TIA :D]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: gmail y OAuth :: Reply by Marco Augusto]]> 2025-02-20T10:18:52-07:00 2025-02-20T10:18:52-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45378&p=277794#p277794
Si quedó implementado en esta última versión de FWH?]]>

Si quedó implementado en esta última versión de FWH?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: gmail y OAuth :: Reply by jose_murugosa]]> 2025-02-24T10:51:54-07:00 2025-02-24T10:51:54-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45378&p=277906#p277906 <![CDATA[FiveWin para Harbour/xHarbour :: Re: gmail y OAuth :: Reply by karinha]]> 2025-02-24T11:26:43-07:00 2025-02-24T11:26:43-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45378&p=277907#p277907
viewtopic.php?p=277780#p277780

Regards, saludos.]]>

viewtopic.php?p=277780#p277780

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: gmail y OAuth :: Reply by Lailton]]> 2025-02-25T11:44:08-07:00 2025-02-25T11:44:08-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45378&p=277931#p277931
Un ejemplo de cómo funciona Harbour + FWH con OAuth.
Image

Aquí tienen un sample del código.
Code Sample

Code: Select all | Expand

#include "fivewin.ch"

static oGmail, hStore

function main()

	local oDlg
	local oName, cName := ""
	local oEmail, cEmail := ""
	local oPhoto, oSend
	local oConnect, oDisconnect

	hStore := readStore( hb_dirBase() + "gmail.json" )

	oGmail := TGmail():new()

	oGmail:setConfig( {;
		"client_id" => "your_client_id",;
		"client_secret" => "your_client_secret",;
		"redirect_uri" => "http://localhost:2025/";
	} )

	if !empty( hStore[ "token" ] )
		oGmail:setToken( hStore[ "token" ] )
	endif

	define dialog oDlg resource "GMAIL"

		redefine image oPhoto id 4002 of oDlg
		redefine say oName var cName id 4003 of oDlg
		redefine say oEmail var cEmail id 4004 of oDlg

		redefine button oDisconnect id 4005 of oDlg action onDisconnect( oDlg, { oPhoto, oName, oEmail, oSend, oDisconnect }, { oConnect } )
		redefine button oSend id 4006 of oDlg action onSendMail()

		redefine button oConnect id 4001 of oDlg action onConnect( oDlg, { oPhoto, oName, oEmail, oSend, oDisconnect }, { oConnect } )

		oDlg:bStart := { || updateControls( oDlg, { oPhoto, oName, oEmail, oSend, oDisconnect }, { oConnect } ) }

		oDlg:lHelpIcon := .f.

	activate dialog oDlg centered

	saveStore( hb_dirBase() + "gmail.json", hStore )

return nil

function onConnect( oDlg, aConnect, aDisconnect )

	local cToken

	if !oGmail:isAuth()
		cToken := oGmail:auth()
		if !empty( cToken )
			hStore[ "token" ] := cToken
		else
			msgStop( "Authentication failed!" )
		endif
	endif

	updateControls( oDlg, aConnect, aDisconnect )

return nil

function onDisconnect( oDlg, aConnect, aDisconnect )

	local cProfile := hb_dirBase() + "profile_gmail.jpg"

	oGmail:revoke()
	updateControls( oDlg, aConnect, aDisconnect )

	if hb_vfExists( cProfile )
		hb_vfErase( cProfile )
	endif

return nil

function onSendMail()

	if oGmail:send( "lailton@paysoft.com.br", "it is a test", "<b>Message from Gmail oAuth2</b>", .t., {} )
		msgInfo( "Mail sent!" )
	else
		msgStop( "Failed to send email. You may not have authorized the required permissions..." )
	endif

return nil

function updateControls( oDlg, aConnect, aDisconnect )

	local hUser
	local cProfile := hb_dirBase() + "profile_gmail.jpg"

	if oGmail:isAuth()
		hUser := oGmail:me()
	endif

	aEval( aConnect, { |o| o:hide() } )
	aEval( aDisconnect, { |o| o:hide() } )

	if hb_isHash( hUser )

		aEval( aConnect, {|o|o:show(),o:refresh()} )

		if !hb_vfExists( cProfile )
			oGmail:downloadUrl( hUser[ "picture" ], cProfile )
		endif

		// Load Profile Photo
		if hb_vfExists( cProfile )
			aConnect[1]:loadImage(, cProfile )
			aConnect[1]:refresh()
		endif

		aConnect[2]:setText( hUser[ "name" ] )
		aConnect[3]:setText( hUser[ "email" ] )

		aConnect[2]:update()
		aConnect[3]:update()

	else

		aEval( aDisconnect, {|o|o:show(),o:refresh()} )

	endif

	oDlg:update()

return nil

function readStore( cFile )

	local hStore

	if hb_vfExists( cFile )
		hStore := hb_jsonDecode( hb_memoRead( cFile ) )
	endif

	if !hb_isHash( hStore )
		hStore := {;
			"token" => "";
		}
	endif

return hStore

function saveStore( cFile, hStore )

	hb_memoWrit( cFile, hb_jsonEncode( hStore ) )

return hb_vfExists( cFile )
Será incluido hoy en FiveWin para la próxima versión :D]]>

Un ejemplo de cómo funciona Harbour + FWH con OAuth.
Image

Aquí tienen un sample del código.
Code Sample

Code: Select all | Expand

#include "fivewin.ch"

static oGmail, hStore

function main()

	local oDlg
	local oName, cName := ""
	local oEmail, cEmail := ""
	local oPhoto, oSend
	local oConnect, oDisconnect

	hStore := readStore( hb_dirBase() + "gmail.json" )

	oGmail := TGmail():new()

	oGmail:setConfig( {;
		"client_id" => "your_client_id",;
		"client_secret" => "your_client_secret",;
		"redirect_uri" => "http://localhost:2025/";
	} )

	if !empty( hStore[ "token" ] )
		oGmail:setToken( hStore[ "token" ] )
	endif

	define dialog oDlg resource "GMAIL"

		redefine image oPhoto id 4002 of oDlg
		redefine say oName var cName id 4003 of oDlg
		redefine say oEmail var cEmail id 4004 of oDlg

		redefine button oDisconnect id 4005 of oDlg action onDisconnect( oDlg, { oPhoto, oName, oEmail, oSend, oDisconnect }, { oConnect } )
		redefine button oSend id 4006 of oDlg action onSendMail()

		redefine button oConnect id 4001 of oDlg action onConnect( oDlg, { oPhoto, oName, oEmail, oSend, oDisconnect }, { oConnect } )

		oDlg:bStart := { || updateControls( oDlg, { oPhoto, oName, oEmail, oSend, oDisconnect }, { oConnect } ) }

		oDlg:lHelpIcon := .f.

	activate dialog oDlg centered

	saveStore( hb_dirBase() + "gmail.json", hStore )

return nil

function onConnect( oDlg, aConnect, aDisconnect )

	local cToken

	if !oGmail:isAuth()
		cToken := oGmail:auth()
		if !empty( cToken )
			hStore[ "token" ] := cToken
		else
			msgStop( "Authentication failed!" )
		endif
	endif

	updateControls( oDlg, aConnect, aDisconnect )

return nil

function onDisconnect( oDlg, aConnect, aDisconnect )

	local cProfile := hb_dirBase() + "profile_gmail.jpg"

	oGmail:revoke()
	updateControls( oDlg, aConnect, aDisconnect )

	if hb_vfExists( cProfile )
		hb_vfErase( cProfile )
	endif

return nil

function onSendMail()

	if oGmail:send( "lailton@paysoft.com.br", "it is a test", "<b>Message from Gmail oAuth2</b>", .t., {} )
		msgInfo( "Mail sent!" )
	else
		msgStop( "Failed to send email. You may not have authorized the required permissions..." )
	endif

return nil

function updateControls( oDlg, aConnect, aDisconnect )

	local hUser
	local cProfile := hb_dirBase() + "profile_gmail.jpg"

	if oGmail:isAuth()
		hUser := oGmail:me()
	endif

	aEval( aConnect, { |o| o:hide() } )
	aEval( aDisconnect, { |o| o:hide() } )

	if hb_isHash( hUser )

		aEval( aConnect, {|o|o:show(),o:refresh()} )

		if !hb_vfExists( cProfile )
			oGmail:downloadUrl( hUser[ "picture" ], cProfile )
		endif

		// Load Profile Photo
		if hb_vfExists( cProfile )
			aConnect[1]:loadImage(, cProfile )
			aConnect[1]:refresh()
		endif

		aConnect[2]:setText( hUser[ "name" ] )
		aConnect[3]:setText( hUser[ "email" ] )

		aConnect[2]:update()
		aConnect[3]:update()

	else

		aEval( aDisconnect, {|o|o:show(),o:refresh()} )

	endif

	oDlg:update()

return nil

function readStore( cFile )

	local hStore

	if hb_vfExists( cFile )
		hStore := hb_jsonDecode( hb_memoRead( cFile ) )
	endif

	if !hb_isHash( hStore )
		hStore := {;
			"token" => "";
		}
	endif

return hStore

function saveStore( cFile, hStore )

	hb_memoWrit( cFile, hb_jsonEncode( hStore ) )

return hb_vfExists( cFile )
Será incluido hoy en FiveWin para la próxima versión :D]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Check box en campos NO logicos? :: Author Armando]]> 2025-02-25T11:34:51-07:00 2025-02-25T11:34:51-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45452&p=277930#p277930
En un XBrowse, el siguiente código funciona de 100 cuando el campo esta definido en la tabla como un campo lógico

Code: Select all | Expand

               WITH OBJECT :Env
                  :SetLogical()
                  :SetCheck(NIL,(.F.))
               END
Pero ahora tengo un campo numérico con valor de 1 o 0 al que quiero que también
se muestre el check box como si el campo fuera lógico.

Alguna sugerencia?

Saludos]]>

En un XBrowse, el siguiente código funciona de 100 cuando el campo esta definido en la tabla como un campo lógico

Code: Select all | Expand

               WITH OBJECT :Env
                  :SetLogical()
                  :SetCheck(NIL,(.F.))
               END
Pero ahora tengo un campo numérico con valor de 1 o 0 al que quiero que también
se muestre el check box como si el campo fuera lógico.

Alguna sugerencia?

Saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Check box en campos NO logicos? :: Reply by leandro]]> 2025-02-25T12:43:07-07:00 2025-02-25T12:43:07-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45452&p=277936#p277936

Code: Select all | Expand

...
...

Local cbCambioEstado := <|x,y|
	aDatos[oBrw:nArrayAt]["incluida"] := if(x,1,0)
	oBrw:refresh()
>
....

:aCols[2]:bEditValue := {|| if(aDatos[oBrw:nArrayAt]["incluida"]==0,.F.,.T.) }
:aCols[2]:cDataType  := "L"
:aCols[2]:nEditType := EDIT_GET
:aCols[2]:SetCheck()
:aCols[2]:bOnPostEdit    := { | o, x, n | EVAL(cbCambioEstado,x) }		
:aCols[2]:nHeadStrAlign := AL_CENTER

...

]]>

Code: Select all | Expand

...
...

Local cbCambioEstado := <|x,y|
	aDatos[oBrw:nArrayAt]["incluida"] := if(x,1,0)
	oBrw:refresh()
>
....

:aCols[2]:bEditValue := {|| if(aDatos[oBrw:nArrayAt]["incluida"]==0,.F.,.T.) }
:aCols[2]:cDataType  := "L"
:aCols[2]:nEditType := EDIT_GET
:aCols[2]:SetCheck()
:aCols[2]:bOnPostEdit    := { | o, x, n | EVAL(cbCambioEstado,x) }		
:aCols[2]:nHeadStrAlign := AL_CENTER

...

]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Error al compilar ejemplos Gemini# con xHb :: Author Enrrique Vertiz]]> 2025-02-25T22:42:29-07:00 2025-02-25T22:42:29-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45454&p=277945#p277945
Compilando los ejemplos de FWH 25.01 con xHarbour 10288 en samples, compilan varios pero todos los gemini#.prg, me dan el error abajo adjunto

Image

Y los ollama# no me funcionan ... algo me falta ?]]>

Compilando los ejemplos de FWH 25.01 con xHarbour 10288 en samples, compilan varios pero todos los gemini#.prg, me dan el error abajo adjunto

Image

Y los ollama# no me funcionan ... algo me falta ?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Error al compilar ejemplos Gemini# con xHb :: Reply by Antonio Linares]]> 2025-02-25T23:56:14-07:00 2025-02-25T23:56:14-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45454&p=277946#p277946
Estamos terminando de adaptar los cambios más recientes de la Clase TGemini a xHarbour

Hoy al comenzar el webinar os daremos la versión más reciente de todas las Clases de Inteligencia Artificial para Harbour y xHarbour]]>

Estamos terminando de adaptar los cambios más recientes de la Clase TGemini a xHarbour

Hoy al comenzar el webinar os daremos la versión más reciente de todas las Clases de Inteligencia Artificial para Harbour y xHarbour]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Error al compilar ejemplos Gemini# con xHb :: Reply by Antonio Linares]]> 2025-02-26T00:33:38-07:00 2025-02-26T00:33:38-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45454&p=277948#p277948

Code: Select all | Expand

#include "FiveWin.ch"
#include "hbcurl.ch"

#ifdef __XHARBOUR__
   #define hb_hHasKey( h, k ) HHasKey( h, k )
#endif   

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

CLASS TGemini

   DATA   cKey   INIT ""
   DATA   cModel INIT "gemini-2.0-flash"
   DATA   cResponse
   DATA   cUrl   INIT "https://generativelanguage.googleapis.com/v1beta/models"
   DATA   cUploadUrl INIT "https://generativelanguage.googleapis.com/upload/v1beta/files"
   DATA   hCurl
   DATA   nError INIT 0
   DATA   nHttpCode INIT 0
   DATA   nTemperature INIT 0

   METHOD New( cKey, cModel )
   METHOD Send( uContent, cPrompt, bCallback )
   METHOD End()
   METHOD GetValue()
   METHOD UploadFile( cFileName, lDeleteAfter )
   METHOD GetTokens( cBuffer ) 

ENDCLASS

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

METHOD New( cKey, cModel ) CLASS TGemini

   if Empty( cKey )
      ::cKey = GetEnv( "GEMINI_API_KEY" )
   else
      ::cKey = cKey
   endif

   if ! Empty( cModel )
      ::cModel = cModel
   endif

   if Val( SubStr( Curl_Version_Info()[ 1 ], 1, RAt( ".", Curl_Version_Info()[ 1 ] ) - 1 ) ) - 8.10 > 0.2
      MsgAlert( "Please use an updated curl DLL" )
   endif    

   ::hCurl = curl_easy_init()

return Self

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

METHOD End() CLASS TGemini

   curl_easy_cleanup( ::hCurl )
   ::hCurl = nil

return nil

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

METHOD GetValue() CLASS TGemini

   local hResponse, uValue

   if ! Empty( ::cResponse )
      hb_jsonDecode( ::cResponse, @hResponse )
   endif

   if hb_isHash( hResponse )
      if hb_hHasKey( hResponse, "error" )
         uValue = "API Error: " + hResponse[ "error" ][ "message" ] + " (Code: " + hb_ntos( hResponse[ "error" ][ "code" ] ) + ")"
      elseif hb_hHasKey( hResponse, "candidates" ) .and. Len( hResponse[ "candidates" ] ) > 0
         TRY
            uValue = hResponse[ "candidates" ][ 1 ][ "content" ][ "parts" ][ 1 ][ "text" ]
         CATCH
            uValue = "Error: Unexpected response structure"
         END
      else
         uValue = "Error: No candidates in response"
      endif
   else
      uValue = "Error: Invalid response format"
   endif

return uValue

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

METHOD Send( uContent, cPrompt, bCallback ) CLASS TGemini

   local aHeaders, cJson, hRequest := {=>}, hContents := { => }, hGenerationConfig
   local cFileUri, cMimeType, lIsFile := .F., cUrlEndpoint
   local aFiles, nI, aParts := {}, cFileNameToUpload, cTempFile

   if Empty( cPrompt )
      cPrompt = "what is this or solve this"
   endif

   if hb_isArray( uContent )
      aFiles = uContent
      for nI = 1 to Len( aFiles )
         if hb_isChar( aFiles[ nI ] ) .and. File( aFiles[ nI ] )
            cFileNameToUpload = aFiles[ nI ]
            cTempFile = nil
            if Lower( Right( aFiles[ nI ], 3 ) ) == "prg"
               cTempFile = hb_FNameMerge( hb_FNameDir( aFiles[ nI ] ), hb_FNameName( aFiles[ nI ] ), "txt" )
               hb_FCopy( aFiles[ nI ], cTempFile )
               cFileNameToUpload = cTempFile
            elseif Lower( Right( aFiles[ nI ], 2 ) ) == "ch"
               cTempFile = hb_FNameMerge( hb_FNameDir( aFiles[ nI ] ), hb_FNameName( aFiles[ nI ] ), "txt" )
               hb_FCopy( aFiles[ nI ], cTempFile )
               cFileNameToUpload = cTempFile
            endif
            cFileUri = ::UploadFile( cFileNameToUpload, !Empty( cTempFile ) )
            if Empty( cFileUri )
               if !Empty( cTempFile ) .and. File( cTempFile )
                  hb_FileDelete( cTempFile )
               endif
               return "Error uploading file: " + aFiles[ nI ]
            endif
            do case
               case Lower( Right( aFiles[ nI ], 3 ) ) == "png"
                  cMimeType = "image/png"
               case Lower( Right( aFiles[ nI ], 3 ) ) $ "jpg|jpeg"
                  cMimeType = "image/jpeg"
               case Lower( Right( aFiles[ nI ], 3 ) ) == "pdf"
                  cMimeType = "application/pdf"
               case Lower( Right( aFiles[ nI ], 3 ) ) == "txt"
                  cMimeType = "text/plain"
               case Lower( Right( aFiles[ nI ], 3 ) ) == "csv"
                  cMimeType = "text/csv"
               case Lower( Right( aFiles[ nI ], 3 ) ) == "prg"
                  cMimeType = "text/plain"
               case Lower( Right( aFiles[ nI ], 2 ) ) == "ch"
                  cMimeType = "text/plain"
               otherwise
                  if !Empty( cTempFile ) .and. File( cTempFile )
                     hb_FileDelete( cTempFile )
                  endif
                  return "Unsupported file type: " + aFiles[ nI ]
            endcase
            AAdd( aParts, { "fileData" => { "fileUri" => cFileUri, "mimeType" => cMimeType } } )
            if !Empty( cTempFile ) .and. File( cTempFile )
               hb_FileDelete( cTempFile )
            endif
         else
            return "Invalid file in array: " + aFiles[ nI ]
         endif
      next
      lIsFile = .T.
   elseif hb_isChar( uContent ) .and. File( uContent )
      lIsFile = .T.
      cFileNameToUpload = uContent
      cTempFile = nil
      if Lower( Right( uContent, 3 ) ) == "prg"
         cTempFile = hb_FNameMerge( hb_FNameDir( uContent ), hb_FNameName( uContent ), "txt" )
         hb_FCopy( uContent, cTempFile )
         cFileNameToUpload = cTempFile
      elseif Lower( Right( uContent, 2 ) ) == "ch"
         cTempFile = hb_FNameMerge( hb_FNameDir( uContent ), hb_FNameName( uContent ), "txt" )
         hb_FCopy( uContent, cTempFile )
         cFileNameToUpload = cTempFile
      endif
      cFileUri = ::UploadFile( cFileNameToUpload, !Empty( cTempFile ) )
      if Empty( cFileUri )
         if !Empty( cTempFile ) .and. File( cTempFile )
            hb_FileDelete( cTempFile )
         endif
         return ""
      endif
      do case
         case Lower( Right( uContent, 3 ) ) == "png"
            cMimeType = "image/png"
         case Lower( Right( uContent, 3 ) ) $ "jpg|jpeg"
            cMimeType = "image/jpeg"
         case Lower( Right( uContent, 3 ) ) == "pdf"
            cMimeType = "application/pdf"
         case Lower( Right( uContent, 3 ) ) == "txt"
            cMimeType = "text/plain"
         case Lower( Right( uContent, 3 ) ) == "csv"
            cMimeType = "text/csv"
         case Lower( Right( uContent, 3 ) ) == "prg"
            cMimeType = "text/plain"
         case Lower( Right( uContent, 2 ) ) == "ch"
            cMimeType = "text/plain"
         otherwise
            if !Empty( cTempFile ) .and. File( cTempFile )
               hb_FileDelete( cTempFile )
            endif
            return "Unsupported file type"
      endcase
      AAdd( aParts, { "fileData" => { "fileUri" => cFileUri, "mimeType" => cMimeType } } )
      if !Empty( cTempFile ) .and. File( cTempFile )
         hb_FileDelete( cTempFile )
      endif
   endif

   cUrlEndpoint = iif( hb_isBlock( bCallback ), ":streamGenerateContent", ":generateContent" )
   curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, .T. )
   curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cUrl + "/" + ::cModel + cUrlEndpoint + "?key=" + ::cKey )

   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_DL_BUFF_SETUP )
   curl_easy_setopt( ::hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )

   hContents[ "role" ] = "user"
   if lIsFile
      hRequest[ "contents" ] = { { "role" => "user", "parts" => aParts } }
      if ! Empty( cPrompt )
         AAdd( hRequest[ "contents" ], { "role" => "user", "parts" => { { "text" => cPrompt } } } )
      endif
   else
      hContents[ "parts" ] = { { "text" => iif( hb_isChar( uContent ), uContent, cPrompt ) } }
      hRequest[ "contents" ] = { hContents }
   endif

   hGenerationConfig = { "temperature" => ::nTemperature,;
                         "topK" => 40, "topP" => 0.95, "maxOutputTokens" => 8192,;
                         "responseMimeType" => "text/plain" }
   hRequest[ "generationConfig" ] = hGenerationConfig

   cJson = hb_jsonEncode( hRequest )
   curl_easy_setopt( ::hCurl, HB_CURLOPT_POSTFIELDS, cJson )

   if hb_isBlock( bCallback )
      curl_easy_setopt( ::hCurl, HB_CURLOPT_WRITEFUNCTION, bCallback )
   endif

   ::nError = curl_easy_perform( ::hCurl )
   curl_easy_getinfo( ::hCurl, HB_CURLINFO_RESPONSE_CODE, @::nHttpCode )

   if ::nError == HB_CURLE_OK
      ::cResponse = curl_easy_dl_buff_get( ::hCurl )
   else
      ::cResponse = "CURL Error code " + Str( ::nError )
   endif

return ::cResponse

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

METHOD UploadFile( cFileName, lDeleteAfter ) CLASS TGemini

   local pCurl, aPost := {}, hHash

   if hb_isPointer( pCurl := curl_easy_init() )

      curl_easy_setopt( pCurl, HB_CURLOPT_CUSTOMREQUEST, "POST" )
      curl_easy_setopt( pCurl, HB_CURLOPT_URL, ::cUploadUrl + "?key=" + ::cKey )
      curl_easy_setopt( pCurl, HB_CURLOPT_FOLLOWLOCATION, .T. )
      curl_easy_setopt( pCurl, HB_CURLOPT_DL_BUFF_SETUP )
      curl_easy_setopt( pCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )

      AAdd( aPost, { "file", hb_jsonEncode( { "display_name" => cFileName } ) } )
      AAdd( aPost, { nil, cFileName } )

      curl_easy_setopt( pCurl, HB_CURLOPT_MIMEPOST, aPost )

      if ( ::nError := curl_easy_perform( pCurl ) ) == HB_CURLE_OK
         hHash = hb_jsonDecode( ::cResponse := curl_easy_dl_buff_get( pCurl ) )
      else
         MsgAlert( "curl error: " + AllTrim( Str( ::nError ) ) )
      endif

      curl_easy_cleanup( pCurl )
   endif

   if hb_isHash( hHash )
      #ifndef __XHARBOUR__
         if hb_hHasKey( hHash, "file" ) .and. hb_hHasKey( hHash[ "file" ], "uri" )
      #else
         if HHasKey( hHash, "file" ) .and. HHasKey( hHash[ "file" ], "uri" )      
      #endif      
        return hHash[ "file" ][ "uri" ]
      endif
   endif

   if lDeleteAfter .and. File( cFileName )
      hb_FileDelete( cFileName )
   endif

return ""

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

METHOD GetTokens( cBuffer ) CLASS TGemini

   local hResponse, cValue := ""

   if Left( cBuffer, 1 ) == ","
      cBuffer = SubStr( cBuffer, 2 )
   endif

   hb_jsonDecode( cBuffer, @hResponse )

   if ! Empty( hResponse )
      if ValType( hResponse ) == "A"  // Streaming response (array of chunks)
         if hb_hHasKey( hResponse[ 1 ], "error" )
            cValue = "API Error: " + hResponse[ 1 ][ "error" ][ "message" ] + " (Code: " + hb_ntos( hResponse[ 1 ][ "error" ][ "code" ] ) + ")"
         elseif hb_hHasKey( hResponse[ 1 ], "candidates" ) .and. Len( hResponse[ 1 ][ "candidates" ] ) > 0
            TRY
               cValue = hResponse[ 1 ][ "candidates" ][ 1 ][ "content" ][ "parts" ][ 1 ][ "text" ]
            CATCH
               cValue = "Error: Unexpected streaming response structure"
            END
         else
            cValue = "Error: No candidates in streaming response"
         endif
      elseif hb_isHash( hResponse )  // Non-streaming response
         if hb_hHasKey( hResponse, "error" )
            cValue = "API Error: " + hResponse[ "error" ][ "message" ] + " (Code: " + hb_ntos( hResponse[ "error" ][ "code" ] ) + ")"
         elseif hb_hHasKey( hResponse, "candidates" ) .and. Len( hResponse[ "candidates" ] ) > 0
            TRY
               cValue = hResponse[ "candidates" ][ 1 ][ "content" ][ "parts" ][ 1 ][ "text" ]
            CATCH
               cValue = "Error: Unexpected response structure"
            END
         else
            cValue = "Error: No candidates in response"
         endif
      else
         cValue = "Error: Invalid response format in streaming buffer"
      endif
   endif

return cValue

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

#ifdef __XHARBOUR__
   
function HB_FNAMEDIR( cFileName )
   local nLastSlash := Max( RAt( "\", cFileName ), RAt( "/", cFileName ) )
   if nLastSlash > 0
      return Left( cFileName, nLastSlash )
   endif
return ""

function HB_FNAMENAME( cFileName )
   local cName := cFileName
   local nLastSlash := Max( RAt( "\", cFileName ), RAt( "/", cFileName ) )
   local nLastDot

   if nLastSlash > 0
      cName = SubStr( cFileName, nLastSlash + 1 )
   endif

   nLastDot = RAt( ".", cName )
   if nLastDot > 0
      cName = Left( cName, nLastDot - 1 )
   endif

return cName

function HB_FCOPY( cSource, cDest )

   local hSource, hDest, nBytes, nRead, aBuffer := {}

   if hb_isPointer( hSource := FOpen( cSource, "rb" ) )
      if hb_isPointer( hDest := FOpen( cDest, "wb" ) )
         while ! hb_feof( hSource )
            nRead := FRead( aBuffer, 1, 1024, hSource )
            FWrite( aBuffer, 1, nRead, hDest )
         end
         FClose( hDest )
      endif
      FClose( hSource )
   endif

return nil   

function HB_FILEDELETE( cFileName )

   if File( cFileName )
      return FErase( cFileName )
   endif

return nil

#endif
]]>

Code: Select all | Expand

#include "FiveWin.ch"
#include "hbcurl.ch"

#ifdef __XHARBOUR__
   #define hb_hHasKey( h, k ) HHasKey( h, k )
#endif   

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

CLASS TGemini

   DATA   cKey   INIT ""
   DATA   cModel INIT "gemini-2.0-flash"
   DATA   cResponse
   DATA   cUrl   INIT "https://generativelanguage.googleapis.com/v1beta/models"
   DATA   cUploadUrl INIT "https://generativelanguage.googleapis.com/upload/v1beta/files"
   DATA   hCurl
   DATA   nError INIT 0
   DATA   nHttpCode INIT 0
   DATA   nTemperature INIT 0

   METHOD New( cKey, cModel )
   METHOD Send( uContent, cPrompt, bCallback )
   METHOD End()
   METHOD GetValue()
   METHOD UploadFile( cFileName, lDeleteAfter )
   METHOD GetTokens( cBuffer ) 

ENDCLASS

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

METHOD New( cKey, cModel ) CLASS TGemini

   if Empty( cKey )
      ::cKey = GetEnv( "GEMINI_API_KEY" )
   else
      ::cKey = cKey
   endif

   if ! Empty( cModel )
      ::cModel = cModel
   endif

   if Val( SubStr( Curl_Version_Info()[ 1 ], 1, RAt( ".", Curl_Version_Info()[ 1 ] ) - 1 ) ) - 8.10 > 0.2
      MsgAlert( "Please use an updated curl DLL" )
   endif    

   ::hCurl = curl_easy_init()

return Self

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

METHOD End() CLASS TGemini

   curl_easy_cleanup( ::hCurl )
   ::hCurl = nil

return nil

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

METHOD GetValue() CLASS TGemini

   local hResponse, uValue

   if ! Empty( ::cResponse )
      hb_jsonDecode( ::cResponse, @hResponse )
   endif

   if hb_isHash( hResponse )
      if hb_hHasKey( hResponse, "error" )
         uValue = "API Error: " + hResponse[ "error" ][ "message" ] + " (Code: " + hb_ntos( hResponse[ "error" ][ "code" ] ) + ")"
      elseif hb_hHasKey( hResponse, "candidates" ) .and. Len( hResponse[ "candidates" ] ) > 0
         TRY
            uValue = hResponse[ "candidates" ][ 1 ][ "content" ][ "parts" ][ 1 ][ "text" ]
         CATCH
            uValue = "Error: Unexpected response structure"
         END
      else
         uValue = "Error: No candidates in response"
      endif
   else
      uValue = "Error: Invalid response format"
   endif

return uValue

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

METHOD Send( uContent, cPrompt, bCallback ) CLASS TGemini

   local aHeaders, cJson, hRequest := {=>}, hContents := { => }, hGenerationConfig
   local cFileUri, cMimeType, lIsFile := .F., cUrlEndpoint
   local aFiles, nI, aParts := {}, cFileNameToUpload, cTempFile

   if Empty( cPrompt )
      cPrompt = "what is this or solve this"
   endif

   if hb_isArray( uContent )
      aFiles = uContent
      for nI = 1 to Len( aFiles )
         if hb_isChar( aFiles[ nI ] ) .and. File( aFiles[ nI ] )
            cFileNameToUpload = aFiles[ nI ]
            cTempFile = nil
            if Lower( Right( aFiles[ nI ], 3 ) ) == "prg"
               cTempFile = hb_FNameMerge( hb_FNameDir( aFiles[ nI ] ), hb_FNameName( aFiles[ nI ] ), "txt" )
               hb_FCopy( aFiles[ nI ], cTempFile )
               cFileNameToUpload = cTempFile
            elseif Lower( Right( aFiles[ nI ], 2 ) ) == "ch"
               cTempFile = hb_FNameMerge( hb_FNameDir( aFiles[ nI ] ), hb_FNameName( aFiles[ nI ] ), "txt" )
               hb_FCopy( aFiles[ nI ], cTempFile )
               cFileNameToUpload = cTempFile
            endif
            cFileUri = ::UploadFile( cFileNameToUpload, !Empty( cTempFile ) )
            if Empty( cFileUri )
               if !Empty( cTempFile ) .and. File( cTempFile )
                  hb_FileDelete( cTempFile )
               endif
               return "Error uploading file: " + aFiles[ nI ]
            endif
            do case
               case Lower( Right( aFiles[ nI ], 3 ) ) == "png"
                  cMimeType = "image/png"
               case Lower( Right( aFiles[ nI ], 3 ) ) $ "jpg|jpeg"
                  cMimeType = "image/jpeg"
               case Lower( Right( aFiles[ nI ], 3 ) ) == "pdf"
                  cMimeType = "application/pdf"
               case Lower( Right( aFiles[ nI ], 3 ) ) == "txt"
                  cMimeType = "text/plain"
               case Lower( Right( aFiles[ nI ], 3 ) ) == "csv"
                  cMimeType = "text/csv"
               case Lower( Right( aFiles[ nI ], 3 ) ) == "prg"
                  cMimeType = "text/plain"
               case Lower( Right( aFiles[ nI ], 2 ) ) == "ch"
                  cMimeType = "text/plain"
               otherwise
                  if !Empty( cTempFile ) .and. File( cTempFile )
                     hb_FileDelete( cTempFile )
                  endif
                  return "Unsupported file type: " + aFiles[ nI ]
            endcase
            AAdd( aParts, { "fileData" => { "fileUri" => cFileUri, "mimeType" => cMimeType } } )
            if !Empty( cTempFile ) .and. File( cTempFile )
               hb_FileDelete( cTempFile )
            endif
         else
            return "Invalid file in array: " + aFiles[ nI ]
         endif
      next
      lIsFile = .T.
   elseif hb_isChar( uContent ) .and. File( uContent )
      lIsFile = .T.
      cFileNameToUpload = uContent
      cTempFile = nil
      if Lower( Right( uContent, 3 ) ) == "prg"
         cTempFile = hb_FNameMerge( hb_FNameDir( uContent ), hb_FNameName( uContent ), "txt" )
         hb_FCopy( uContent, cTempFile )
         cFileNameToUpload = cTempFile
      elseif Lower( Right( uContent, 2 ) ) == "ch"
         cTempFile = hb_FNameMerge( hb_FNameDir( uContent ), hb_FNameName( uContent ), "txt" )
         hb_FCopy( uContent, cTempFile )
         cFileNameToUpload = cTempFile
      endif
      cFileUri = ::UploadFile( cFileNameToUpload, !Empty( cTempFile ) )
      if Empty( cFileUri )
         if !Empty( cTempFile ) .and. File( cTempFile )
            hb_FileDelete( cTempFile )
         endif
         return ""
      endif
      do case
         case Lower( Right( uContent, 3 ) ) == "png"
            cMimeType = "image/png"
         case Lower( Right( uContent, 3 ) ) $ "jpg|jpeg"
            cMimeType = "image/jpeg"
         case Lower( Right( uContent, 3 ) ) == "pdf"
            cMimeType = "application/pdf"
         case Lower( Right( uContent, 3 ) ) == "txt"
            cMimeType = "text/plain"
         case Lower( Right( uContent, 3 ) ) == "csv"
            cMimeType = "text/csv"
         case Lower( Right( uContent, 3 ) ) == "prg"
            cMimeType = "text/plain"
         case Lower( Right( uContent, 2 ) ) == "ch"
            cMimeType = "text/plain"
         otherwise
            if !Empty( cTempFile ) .and. File( cTempFile )
               hb_FileDelete( cTempFile )
            endif
            return "Unsupported file type"
      endcase
      AAdd( aParts, { "fileData" => { "fileUri" => cFileUri, "mimeType" => cMimeType } } )
      if !Empty( cTempFile ) .and. File( cTempFile )
         hb_FileDelete( cTempFile )
      endif
   endif

   cUrlEndpoint = iif( hb_isBlock( bCallback ), ":streamGenerateContent", ":generateContent" )
   curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, .T. )
   curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cUrl + "/" + ::cModel + cUrlEndpoint + "?key=" + ::cKey )

   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_DL_BUFF_SETUP )
   curl_easy_setopt( ::hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )

   hContents[ "role" ] = "user"
   if lIsFile
      hRequest[ "contents" ] = { { "role" => "user", "parts" => aParts } }
      if ! Empty( cPrompt )
         AAdd( hRequest[ "contents" ], { "role" => "user", "parts" => { { "text" => cPrompt } } } )
      endif
   else
      hContents[ "parts" ] = { { "text" => iif( hb_isChar( uContent ), uContent, cPrompt ) } }
      hRequest[ "contents" ] = { hContents }
   endif

   hGenerationConfig = { "temperature" => ::nTemperature,;
                         "topK" => 40, "topP" => 0.95, "maxOutputTokens" => 8192,;
                         "responseMimeType" => "text/plain" }
   hRequest[ "generationConfig" ] = hGenerationConfig

   cJson = hb_jsonEncode( hRequest )
   curl_easy_setopt( ::hCurl, HB_CURLOPT_POSTFIELDS, cJson )

   if hb_isBlock( bCallback )
      curl_easy_setopt( ::hCurl, HB_CURLOPT_WRITEFUNCTION, bCallback )
   endif

   ::nError = curl_easy_perform( ::hCurl )
   curl_easy_getinfo( ::hCurl, HB_CURLINFO_RESPONSE_CODE, @::nHttpCode )

   if ::nError == HB_CURLE_OK
      ::cResponse = curl_easy_dl_buff_get( ::hCurl )
   else
      ::cResponse = "CURL Error code " + Str( ::nError )
   endif

return ::cResponse

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

METHOD UploadFile( cFileName, lDeleteAfter ) CLASS TGemini

   local pCurl, aPost := {}, hHash

   if hb_isPointer( pCurl := curl_easy_init() )

      curl_easy_setopt( pCurl, HB_CURLOPT_CUSTOMREQUEST, "POST" )
      curl_easy_setopt( pCurl, HB_CURLOPT_URL, ::cUploadUrl + "?key=" + ::cKey )
      curl_easy_setopt( pCurl, HB_CURLOPT_FOLLOWLOCATION, .T. )
      curl_easy_setopt( pCurl, HB_CURLOPT_DL_BUFF_SETUP )
      curl_easy_setopt( pCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )

      AAdd( aPost, { "file", hb_jsonEncode( { "display_name" => cFileName } ) } )
      AAdd( aPost, { nil, cFileName } )

      curl_easy_setopt( pCurl, HB_CURLOPT_MIMEPOST, aPost )

      if ( ::nError := curl_easy_perform( pCurl ) ) == HB_CURLE_OK
         hHash = hb_jsonDecode( ::cResponse := curl_easy_dl_buff_get( pCurl ) )
      else
         MsgAlert( "curl error: " + AllTrim( Str( ::nError ) ) )
      endif

      curl_easy_cleanup( pCurl )
   endif

   if hb_isHash( hHash )
      #ifndef __XHARBOUR__
         if hb_hHasKey( hHash, "file" ) .and. hb_hHasKey( hHash[ "file" ], "uri" )
      #else
         if HHasKey( hHash, "file" ) .and. HHasKey( hHash[ "file" ], "uri" )      
      #endif      
        return hHash[ "file" ][ "uri" ]
      endif
   endif

   if lDeleteAfter .and. File( cFileName )
      hb_FileDelete( cFileName )
   endif

return ""

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

METHOD GetTokens( cBuffer ) CLASS TGemini

   local hResponse, cValue := ""

   if Left( cBuffer, 1 ) == ","
      cBuffer = SubStr( cBuffer, 2 )
   endif

   hb_jsonDecode( cBuffer, @hResponse )

   if ! Empty( hResponse )
      if ValType( hResponse ) == "A"  // Streaming response (array of chunks)
         if hb_hHasKey( hResponse[ 1 ], "error" )
            cValue = "API Error: " + hResponse[ 1 ][ "error" ][ "message" ] + " (Code: " + hb_ntos( hResponse[ 1 ][ "error" ][ "code" ] ) + ")"
         elseif hb_hHasKey( hResponse[ 1 ], "candidates" ) .and. Len( hResponse[ 1 ][ "candidates" ] ) > 0
            TRY
               cValue = hResponse[ 1 ][ "candidates" ][ 1 ][ "content" ][ "parts" ][ 1 ][ "text" ]
            CATCH
               cValue = "Error: Unexpected streaming response structure"
            END
         else
            cValue = "Error: No candidates in streaming response"
         endif
      elseif hb_isHash( hResponse )  // Non-streaming response
         if hb_hHasKey( hResponse, "error" )
            cValue = "API Error: " + hResponse[ "error" ][ "message" ] + " (Code: " + hb_ntos( hResponse[ "error" ][ "code" ] ) + ")"
         elseif hb_hHasKey( hResponse, "candidates" ) .and. Len( hResponse[ "candidates" ] ) > 0
            TRY
               cValue = hResponse[ "candidates" ][ 1 ][ "content" ][ "parts" ][ 1 ][ "text" ]
            CATCH
               cValue = "Error: Unexpected response structure"
            END
         else
            cValue = "Error: No candidates in response"
         endif
      else
         cValue = "Error: Invalid response format in streaming buffer"
      endif
   endif

return cValue

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

#ifdef __XHARBOUR__
   
function HB_FNAMEDIR( cFileName )
   local nLastSlash := Max( RAt( "\", cFileName ), RAt( "/", cFileName ) )
   if nLastSlash > 0
      return Left( cFileName, nLastSlash )
   endif
return ""

function HB_FNAMENAME( cFileName )
   local cName := cFileName
   local nLastSlash := Max( RAt( "\", cFileName ), RAt( "/", cFileName ) )
   local nLastDot

   if nLastSlash > 0
      cName = SubStr( cFileName, nLastSlash + 1 )
   endif

   nLastDot = RAt( ".", cName )
   if nLastDot > 0
      cName = Left( cName, nLastDot - 1 )
   endif

return cName

function HB_FCOPY( cSource, cDest )

   local hSource, hDest, nBytes, nRead, aBuffer := {}

   if hb_isPointer( hSource := FOpen( cSource, "rb" ) )
      if hb_isPointer( hDest := FOpen( cDest, "wb" ) )
         while ! hb_feof( hSource )
            nRead := FRead( aBuffer, 1, 1024, hSource )
            FWrite( aBuffer, 1, nRead, hDest )
         end
         FClose( hDest )
      endif
      FClose( hSource )
   endif

return nil   

function HB_FILEDELETE( cFileName )

   if File( cFileName )
      return FErase( cFileName )
   endif

return nil

#endif
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Consulta datos on line de empresas. :: Author FiveWiDi]]> 2025-02-26T02:15:38-07:00 2025-02-26T02:15:38-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45456&p=277953#p277953
He visto que algún programa de gestión permite obtener datos online de las empresas (nombre, dirección completa) simplemente informando de su NIF/CIF.

Mi entorno es en España, desconozco si la consulta on line se realiza a alguna URL de Hacienda u otro organismo.

Saben algo de esto Ustedes?

Muchas gracias,]]>

He visto que algún programa de gestión permite obtener datos online de las empresas (nombre, dirección completa) simplemente informando de su NIF/CIF.

Mi entorno es en España, desconozco si la consulta on line se realiza a alguna URL de Hacienda u otro organismo.

Saben algo de esto Ustedes?

Muchas gracias,]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Curso virtual implementación IA en nuestras aplicaciones :: Author leandro]]> 2025-02-03T08:21:53-07:00 2025-02-03T08:21:53-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277390#p277390
Así que iniciamos este POST para definir la fecha temario y participantes.

Fechas sugerida curso: Preferiblemente antes que se termine febrero 2025
Costo: Por definir de parte de Antonio
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español
Medio comunicación: **skype**
Zona horaria: Preferiblemente Latinoamérica

Temas
... Por definir de parte de Antonio

viewtopic.php?p=277326#p277326]]>

Así que iniciamos este POST para definir la fecha temario y participantes.

Fechas sugerida curso: Preferiblemente antes que se termine febrero 2025
Costo: Por definir de parte de Antonio
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español
Medio comunicación: **skype**
Zona horaria: Preferiblemente Latinoamérica

Temas
... Por definir de parte de Antonio

viewtopic.php?p=277326#p277326]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by wilsongamboa]]> 2025-02-03T10:30:54-07:00 2025-02-03T10:30:54-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277396#p277396 cuenta conmigo
un abrazo]]>
cuenta conmigo
un abrazo]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by carito]]> 2025-02-03T16:51:34-07:00 2025-02-03T16:51:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277404#p277404
Saludos a todos,
Carito]]>

Saludos a todos,
Carito]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by csincuir]]> 2025-02-04T06:08:57-07:00 2025-02-04T06:08:57-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277412#p277412 Gracias Leandro nuevamente por tomar la iniciativa.

Saludos cordiales.]]>
Gracias Leandro nuevamente por tomar la iniciativa.

Saludos cordiales.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Enrrique Vertiz]]> 2025-02-04T18:31:16-07:00 2025-02-04T18:31:16-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277432#p277432 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Antonio Linares]]> 2025-02-04T21:55:38-07:00 2025-02-04T21:55:38-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277434#p277434
También veremos como usar Ollama cuando los datos sean confidenciales y no puedan enviarse a la web

Y en general revisaremos las opciones existentes para que tengais una visión actual del uso de la IA desde vuestras apps! :)
Entendereis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.

Os animo a apovechar este momento y adelantaros a la competencia :wink:

Precio del webinar: 50 euros a pagar por PayPal a alinares@fivetechsoft.com. El pago será la confirmación del registro al webinar.

El importe obtenido de este webinar se destinará a hardware para entrenamientos IA. Gracias por vuestro apoyo!]]>

También veremos como usar Ollama cuando los datos sean confidenciales y no puedan enviarse a la web

Y en general revisaremos las opciones existentes para que tengais una visión actual del uso de la IA desde vuestras apps! :)
Entendereis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.

Os animo a apovechar este momento y adelantaros a la competencia :wink:

Precio del webinar: 50 euros a pagar por PayPal a alinares@fivetechsoft.com. El pago será la confirmación del registro al webinar.

El importe obtenido de este webinar se destinará a hardware para entrenamientos IA. Gracias por vuestro apoyo!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by FiveWiDi]]> 2025-02-05T03:45:03-07:00 2025-02-05T03:45:03-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277439#p277439
Antonio si te parece haré pago por transferencia como el anterior Webinar.]]>

Antonio si te parece haré pago por transferencia como el anterior Webinar.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by wilsongamboa]]> 2025-02-05T04:24:35-07:00 2025-02-05T04:24:35-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277440#p277440 gracias por ofrecer este webminar un abrazo
Wilson]]>
gracias por ofrecer este webminar un abrazo
Wilson]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by leandro]]> 2025-02-05T05:08:34-07:00 2025-02-05T05:08:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277443#p277443 Resumen general actualizado 5 feb 2025 6:53 am hora de Colombia

Fechas para inicio curso: Preferiblemente antes que se termine febrero 2025
Costo: 50 Euros
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica

Temas
En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
También veremos como usar Ollama cuando los datos sean confidenciales y no puedan enviarse a la web
Y en general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :)
Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.

Participantes con pago
1- Wilson Gamboa - Ecuador

Participantes confirmados
Leandro Arévalo - Colombia
Juan (Carito) - Chile
Carlos Sincuir - Guatemala
Enrrique Vertiz Pitta - Perú
Carlos Gelabert - España]]>
Resumen general actualizado 5 feb 2025 6:53 am hora de Colombia

Fechas para inicio curso: Preferiblemente antes que se termine febrero 2025
Costo: 50 Euros
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica

Temas
En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
También veremos como usar Ollama cuando los datos sean confidenciales y no puedan enviarse a la web
Y en general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :)
Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.

Participantes con pago
1- Wilson Gamboa - Ecuador

Participantes confirmados
Leandro Arévalo - Colombia
Juan (Carito) - Chile
Carlos Sincuir - Guatemala
Enrrique Vertiz Pitta - Perú
Carlos Gelabert - España]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by jnavas]]> 2025-02-05T08:12:34-07:00 2025-02-05T08:12:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277446#p277446 Saludos
Excelente iniciativa.
PD: Contamos con cuenta zoom para 100 y 500 participantes.]]>
Saludos
Excelente iniciativa.
PD: Contamos con cuenta zoom para 100 y 500 participantes.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by jnavas]]> 2025-02-05T08:16:43-07:00 2025-02-05T08:16:43-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277447#p277447 Saludos.
1. Me interesa la funcionalidad para generar consultas SQL desde lenguaje natural
2. Capacitación para respuestas o cálculos tributarios o laborales.
3. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.]]>
Saludos.
1. Me interesa la funcionalidad para generar consultas SQL desde lenguaje natural
2. Capacitación para respuestas o cálculos tributarios o laborales.
3. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Antonio Linares]]> 2025-02-05T09:43:47-07:00 2025-02-05T09:43:47-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277449#p277449
jnavas wrote: Wed Feb 05, 2025 3:16 pm Antonio
Saludos.
1. Me interesa la funcionalidad para generar consultas SQL desde lenguaje natural
2. Capacitación para respuestas o cálculos tributarios o laborales.
3. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
Querido Juan,

Incluiremos esos temas en el webinar :)]]>
jnavas wrote: Wed Feb 05, 2025 3:16 pm Antonio
Saludos.
1. Me interesa la funcionalidad para generar consultas SQL desde lenguaje natural
2. Capacitación para respuestas o cálculos tributarios o laborales.
3. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
Querido Juan,

Incluiremos esos temas en el webinar :)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Antonio Linares]]> 2025-02-05T09:44:17-07:00 2025-02-05T09:44:17-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277450#p277450
jnavas wrote: Wed Feb 05, 2025 3:12 pm Colegas,
Saludos
Excelente iniciativa.
PD: Contamos con cuenta zoom para 100 y 500 participantes.
Genial! :)]]>
jnavas wrote: Wed Feb 05, 2025 3:12 pm Colegas,
Saludos
Excelente iniciativa.
PD: Contamos con cuenta zoom para 100 y 500 participantes.
Genial! :)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by ralph]]> 2025-02-05T14:37:01-07:00 2025-02-05T14:37:01-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277452#p277452
Saludos]]>

Saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Enrrique Vertiz]]> 2025-02-05T14:54:27-07:00 2025-02-05T14:54:27-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277453#p277453
Igualmente acabo de pasarte por WA el pago de los 50 euros]]>

Igualmente acabo de pasarte por WA el pago de los 50 euros]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Antonio Linares]]> 2025-02-05T15:37:26-07:00 2025-02-05T15:37:26-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277456#p277456
Muchas gracias amigos por apoyarnos en este nuevo webinar :)]]>

Muchas gracias amigos por apoyarnos en este nuevo webinar :)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by leandro]]> 2025-02-05T16:02:06-07:00 2025-02-05T16:02:06-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277457#p277457 Resumen general actualizado 5 feb 2025 6:01 pm hora de Colombia

Fechas para inicio curso: Preferiblemente antes que se termine febrero 2025
Costo: 50 Euros
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.

Participantes con pago
1- Wilson Gamboa - Ecuador
2- Ralph del Castillo - Perú
3- Enrique Vertiz Pitta - Perú

Participantes confirmados
Leandro Arévalo - Colombia
Juan (Carito) - Chile
Carlos Sincuir - Guatemala
Carlos Gelabert - España
Juan Navas - Venezuela]]>
Resumen general actualizado 5 feb 2025 6:01 pm hora de Colombia

Fechas para inicio curso: Preferiblemente antes que se termine febrero 2025
Costo: 50 Euros
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.

Participantes con pago
1- Wilson Gamboa - Ecuador
2- Ralph del Castillo - Perú
3- Enrique Vertiz Pitta - Perú

Participantes confirmados
Leandro Arévalo - Colombia
Juan (Carito) - Chile
Carlos Sincuir - Guatemala
Carlos Gelabert - España
Juan Navas - Venezuela]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by leandro]]> 2025-02-06T14:36:16-07:00 2025-02-06T14:36:16-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277472#p277472
Te envío el soporte de pago del webinar mi tío y el mío.
Image]]>

Te envío el soporte de pago del webinar mi tío y el mío.
Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by leandro]]> 2025-02-06T14:38:21-07:00 2025-02-06T14:38:21-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277473#p277473 Resumen general actualizado 6 feb 2025 4:37 pm hora de Colombia

Fechas para inicio curso: Preferiblemente antes que se termine febrero 2025
Costo: 50 Euros
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.

Participantes con pago
1- Wilson Gamboa - Ecuador
2- Ralph del Castillo - Perú
3- Enrique Vertiz Pitta - Perú
4- Mauricio Arévalo - Colombia
5- Leandro Arévalo - Colombia

Participantes confirmados
Juan (Carito) - Chile
Carlos Sincuir - Guatemala
Carlos Gelabert - España
Juan Navas - Venezuela]]>
Resumen general actualizado 6 feb 2025 4:37 pm hora de Colombia

Fechas para inicio curso: Preferiblemente antes que se termine febrero 2025
Costo: 50 Euros
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.

Participantes con pago
1- Wilson Gamboa - Ecuador
2- Ralph del Castillo - Perú
3- Enrique Vertiz Pitta - Perú
4- Mauricio Arévalo - Colombia
5- Leandro Arévalo - Colombia

Participantes confirmados
Juan (Carito) - Chile
Carlos Sincuir - Guatemala
Carlos Gelabert - España
Juan Navas - Venezuela]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by leandro]]> 2025-02-07T12:02:07-07:00 2025-02-07T12:02:07-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277490#p277490 Oferta, oferta, oferta
Antonio propone lo siguiente:
Imagino que muchos asistentes querrán obtener la versión más reciente de FWH con las nuevas classes TOpenAI, TDeepSeek y TOLlama
Webinar + actualización FWH: 90 euros
Los invito que se animen, La IA es algo que debemos implementar en nuestras aplicaciones, y que mas si viene con la ultima versión de FW. :D :D :D :D]]>
Oferta, oferta, oferta
Antonio propone lo siguiente:
Imagino que muchos asistentes querrán obtener la versión más reciente de FWH con las nuevas classes TOpenAI, TDeepSeek y TOLlama
Webinar + actualización FWH: 90 euros
Los invito que se animen, La IA es algo que debemos implementar en nuestras aplicaciones, y que mas si viene con la ultima versión de FW. :D :D :D :D]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by leandro]]> 2025-02-07T12:07:19-07:00 2025-02-07T12:07:19-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277491#p277491 Resumen general actualizado 7 feb 2025 2:04 pm hora de Colombia

Fechas para inicio curso: Preferiblemente antes que se termine febrero 2025
:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago
1- Wilson Gamboa - Ecuador
2- Ralph del Castillo - Perú
3- Enrique Vertiz Pitta - Perú
4- Mauricio Arévalo - Colombia
5- Leandro Arévalo - Colombia

Participantes confirmados
Juan (Carito) - Chile
Carlos Sincuir - Guatemala
Carlos Gelabert - España
Juan Navas - Venezuela]]>
Resumen general actualizado 7 feb 2025 2:04 pm hora de Colombia

Fechas para inicio curso: Preferiblemente antes que se termine febrero 2025
:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago
1- Wilson Gamboa - Ecuador
2- Ralph del Castillo - Perú
3- Enrique Vertiz Pitta - Perú
4- Mauricio Arévalo - Colombia
5- Leandro Arévalo - Colombia

Participantes confirmados
Juan (Carito) - Chile
Carlos Sincuir - Guatemala
Carlos Gelabert - España
Juan Navas - Venezuela]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by D.Fernandez]]> 2025-02-07T15:40:57-07:00 2025-02-07T15:40:57-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277493#p277493
Pago enviado.
Saludos
Ruben Dario Fernandez]]>

Pago enviado.
Saludos
Ruben Dario Fernandez]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Antonio Linares]]> 2025-02-08T03:38:36-07:00 2025-02-08T03:38:36-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277505#p277505
Hemos acordado que pagando 90 euros se consigue el webinar y la última versión de FWH 32 bits.
Por 100 euros obteneis FWH 32 y 64 bits.

Os agradezco de corazón vuestro apoyo que va a ser para invertirlo en hardware para investigación en Inteligencia Artificial :)]]>

Hemos acordado que pagando 90 euros se consigue el webinar y la última versión de FWH 32 bits.
Por 100 euros obteneis FWH 32 y 64 bits.

Os agradezco de corazón vuestro apoyo que va a ser para invertirlo en hardware para investigación en Inteligencia Artificial :)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by jnavas]]> 2025-02-08T07:15:37-07:00 2025-02-08T07:15:37-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277509#p277509 Colegas,
En nuestro caso adaptapro estamos realizando implementacion de cambios regulatorios exigidos de ley para el tema tributario.
https://adaptaproerp.com/homologacion/

Por esto estamos dedicados con esta regulación, sin embargo no podemos desaprovechar esta oportunidad.
Mediante Wilmer guerrero, forma parte de nuestro equipo de desarrollo , tramitará el pago y asistirá a esta importante actividad en nuestra representación.]]>
Colegas,
En nuestro caso adaptapro estamos realizando implementacion de cambios regulatorios exigidos de ley para el tema tributario.
https://adaptaproerp.com/homologacion/

Por esto estamos dedicados con esta regulación, sin embargo no podemos desaprovechar esta oportunidad.
Mediante Wilmer guerrero, forma parte de nuestro equipo de desarrollo , tramitará el pago y asistirá a esta importante actividad en nuestra representación.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Marco Augusto]]> 2025-02-08T08:37:17-07:00 2025-02-08T08:37:17-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277511#p277511
que se necesita para el curso?

Harbour o Xharbour Versiones?
32 o 64 bits?]]>

que se necesita para el curso?

Harbour o Xharbour Versiones?
32 o 64 bits?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Antonio Linares]]> 2025-02-08T09:51:23-07:00 2025-02-08T09:51:23-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277513#p277513
El uso de la Inteligencia Artificial funciona 100% tanto con Harbour como xHarbour asi como en 32 y 64 bits.

Veremos ejemplos con todos ellos :)]]>

El uso de la Inteligencia Artificial funciona 100% tanto con Harbour como xHarbour asi como en 32 y 64 bits.

Veremos ejemplos con todos ellos :)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by leandro]]> 2025-02-08T14:10:26-07:00 2025-02-08T14:10:26-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277531#p277531 Resumen general actualizado 8 feb 2025 4:07 pm hora de Colombia

Fechas para inicio curso: Preferiblemente antes que se termine febrero 2025
:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar
1- Wilson Gamboa - Ecuador
2- Ralph del Castillo - Perú
3- Enrique Vertiz Pitta - Perú
4- Mauricio Arévalo - Colombia
5- Leandro Arévalo - Colombia
6- Ruben Dario Fernandez - Uruguay

Participantes confirmados
Juan (Carito) - Chile
Carlos Sincuir - Guatemala
Carlos Gelabert - España
Juan Navas - Venezuela]]>
Resumen general actualizado 8 feb 2025 4:07 pm hora de Colombia

Fechas para inicio curso: Preferiblemente antes que se termine febrero 2025
:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar
1- Wilson Gamboa - Ecuador
2- Ralph del Castillo - Perú
3- Enrique Vertiz Pitta - Perú
4- Mauricio Arévalo - Colombia
5- Leandro Arévalo - Colombia
6- Ruben Dario Fernandez - Uruguay

Participantes confirmados
Juan (Carito) - Chile
Carlos Sincuir - Guatemala
Carlos Gelabert - España
Juan Navas - Venezuela]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Antonio Linares]]> 2025-02-09T01:18:28-07:00 2025-02-09T01:18:28-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277546#p277546 En este webinar os enseñaré a construir modelos de Inteligencia Artificial con los datos que querais para venderlos a Empresas!!! :D

In this webinar I will teach you to build AI models with the data that you want to sell them to companies!!! :D ]]>
En este webinar os enseñaré a construir modelos de Inteligencia Artificial con los datos que querais para venderlos a Empresas!!! :D

In this webinar I will teach you to build AI models with the data that you want to sell them to companies!!! :D ]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by FiveWiDi]]> 2025-02-09T03:49:40-07:00 2025-02-09T03:49:40-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277547#p277547
Cuanto antes se sepa la fecha mejor.

Si me 'cuadra' me apunto.

Gracias por este tipo de iniciativas.]]>

Cuanto antes se sepa la fecha mejor.

Si me 'cuadra' me apunto.

Gracias por este tipo de iniciativas.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Compuin]]> 2025-02-09T07:30:20-07:00 2025-02-09T07:30:20-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277550#p277550
Pago realizado]]>

Pago realizado]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Otto]]> 2025-02-09T09:12:23-07:00 2025-02-09T09:12:23-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277551#p277551 I am looking forward to the webinar and hereby confirm my registration.
Best regards,
Otto]]>
I am looking forward to the webinar and hereby confirm my registration.
Best regards,
Otto]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Antonio Linares]]> 2025-02-09T09:57:28-07:00 2025-02-09T09:57:28-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277552#p277552 ]]> ]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by wilsongamboa]]> 2025-02-09T14:34:49-07:00 2025-02-09T14:34:49-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277558#p277558 saludos y gracias
Wilson]]>
saludos y gracias
Wilson]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by csincuir]]> 2025-02-09T15:26:44-07:00 2025-02-09T15:26:44-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277559#p277559 Nos vemos en el Curso amigos.

Saludos cordiales.

Carlos Sincuir]]>
Nos vemos en el Curso amigos.

Saludos cordiales.

Carlos Sincuir]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Antonio Linares]]> 2025-02-09T15:33:21-07:00 2025-02-09T15:33:21-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277561#p277561
wilsongamboa wrote: Sun Feb 09, 2025 9:34 pm Master Antonio una pregunta si compramos con tu amable descuento ( del webminar de IA ) la nueva versión de fwh estará incluido la mejora de gmail y OAuth que están anunciando ?
saludos y gracias
Wilson
Estimado Wilson,

gmail + OAuth lo está implementando Lailton. En cuanto esté terminado estará disponible para todos :)]]>
wilsongamboa wrote: Sun Feb 09, 2025 9:34 pm Master Antonio una pregunta si compramos con tu amable descuento ( del webminar de IA ) la nueva versión de fwh estará incluido la mejora de gmail y OAuth que están anunciando ?
saludos y gracias
Wilson
Estimado Wilson,

gmail + OAuth lo está implementando Lailton. En cuanto esté terminado estará disponible para todos :)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by FiveWiDi]]> 2025-02-10T10:53:08-07:00 2025-02-10T10:53:08-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277569#p277569 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by leandro]]> 2025-02-10T14:05:18-07:00 2025-02-10T14:05:18-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277570#p277570 Resumen general actualizado 10 feb 2025 4:05 pm hora de Colombia

Fechas para inicio curso: Preferiblemente antes que se termine febrero 2025
:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fecha de inicio sugerida: 28 de febrero de 2025

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala

Participantes con pago webinar
1- Wilson Gamboa - Ecuador
2- Ralph del Castillo - Perú
3- Enrique Vertiz Pitta - Perú
4- Mauricio Arévalo - Colombia
5- Leandro Arévalo - Colombia
6- Ruben Dario Fernandez - Uruguay

Participantes confirmados
Juan (Carito) - Chile
Carlos Gelabert - España
Juan Navas - Venezuela]]>
Resumen general actualizado 10 feb 2025 4:05 pm hora de Colombia

Fechas para inicio curso: Preferiblemente antes que se termine febrero 2025
:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fecha de inicio sugerida: 28 de febrero de 2025

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala

Participantes con pago webinar
1- Wilson Gamboa - Ecuador
2- Ralph del Castillo - Perú
3- Enrique Vertiz Pitta - Perú
4- Mauricio Arévalo - Colombia
5- Leandro Arévalo - Colombia
6- Ruben Dario Fernandez - Uruguay

Participantes confirmados
Juan (Carito) - Chile
Carlos Gelabert - España
Juan Navas - Venezuela]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Compuin]]> 2025-02-10T14:11:58-07:00 2025-02-10T14:11:58-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277571#p277571
Yo realice el pago de Participantes con pago webinar + actualización 32 y 64, mas sin embargo no me veo en esta lista]]>

Yo realice el pago de Participantes con pago webinar + actualización 32 y 64, mas sin embargo no me veo en esta lista]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by leandro]]> 2025-02-10T14:19:09-07:00 2025-02-10T14:19:09-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277573#p277573
Yo realice el pago de Participantes con pago webinar + actualización 32 y 64, mas sin embargo no me veo en esta lista
Amigo como vas? que pena molestarte, por donde hiciste el pago? Antonio no lo ve reflejado en su cuenta.]]>
Yo realice el pago de Participantes con pago webinar + actualización 32 y 64, mas sin embargo no me veo en esta lista
Amigo como vas? que pena molestarte, por donde hiciste el pago? Antonio no lo ve reflejado en su cuenta.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Compuin]]> 2025-02-10T14:22:24-07:00 2025-02-10T14:22:24-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277574#p277574
Pago realizado via Paypal sabado pasado

Transaction ID
9029561067956200B]]>

Pago realizado via Paypal sabado pasado

Transaction ID
9029561067956200B]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by FiveWiDi]]> 2025-02-10T15:26:34-07:00 2025-02-10T15:26:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277576#p277576
Compuin wrote: Mon Feb 10, 2025 9:11 pm Saludos,

Yo realice el pago de Participantes con pago webinar + actualización 32 y 64, mas sin embargo no me veo en esta lista
+1

Pero Antonio no lo verá hasta el miércoles en su banco. Transferencia entre bancos diferentes.]]>
Compuin wrote: Mon Feb 10, 2025 9:11 pm Saludos,

Yo realice el pago de Participantes con pago webinar + actualización 32 y 64, mas sin embargo no me veo en esta lista
+1

Pero Antonio no lo verá hasta el miércoles en su banco. Transferencia entre bancos diferentes.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Compuin]]> 2025-02-10T16:02:58-07:00 2025-02-10T16:02:58-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277577#p277577 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Antonio Linares]]> 2025-02-10T20:59:45-07:00 2025-02-10T20:59:45-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277578#p277578
Compuin wrote: Mon Feb 10, 2025 11:02 pm Fue via PayPal
Estimado amigo,

Primero pedirte disculpas por las molestias. Estamos intentando localizarlo pero no lo encontramos.

Tienes el resguardo de envio ? Comprobemos que lo enviaste al email correcto: alinares@fivetechsoft.com

Muchas gracias]]>
Compuin wrote: Mon Feb 10, 2025 11:02 pm Fue via PayPal
Estimado amigo,

Primero pedirte disculpas por las molestias. Estamos intentando localizarlo pero no lo encontramos.

Tienes el resguardo de envio ? Comprobemos que lo enviaste al email correcto: alinares@fivetechsoft.com

Muchas gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by wilsongamboa]]> 2025-02-11T05:15:08-07:00 2025-02-11T05:15:08-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277582#p277582 favor si puedes verificar mi pago de fwh 32 y 64 bits te lo agradezco lo acabo de hacer via paypal, te envie via mail las capturas de pantalla
un abrazo
Wilson
pd: con esto estoy con webminar + fwh]]>
favor si puedes verificar mi pago de fwh 32 y 64 bits te lo agradezco lo acabo de hacer via paypal, te envie via mail las capturas de pantalla
un abrazo
Wilson
pd: con esto estoy con webminar + fwh]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Compuin]]> 2025-02-11T06:02:01-07:00 2025-02-11T06:02:01-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277583#p277583
Antonio Linares wrote: Tue Feb 11, 2025 3:59 am
Compuin wrote: Mon Feb 10, 2025 11:02 pm Fue via PayPal
Estimado amigo,

Primero pedirte disculpas por las molestias. Estamos intentando localizarlo pero no lo encontramos.

Tienes el resguardo de envio ? Comprobemos que lo enviaste al email correcto: alinares@fivetechsoft.com

Muchas gracias
Estimado Antonio,

Tengo la imagen del pago realizado con Paypal pero no se como incluirla en el foro. Me ayudan con ello?]]>
Antonio Linares wrote: Tue Feb 11, 2025 3:59 am
Compuin wrote: Mon Feb 10, 2025 11:02 pm Fue via PayPal
Estimado amigo,

Primero pedirte disculpas por las molestias. Estamos intentando localizarlo pero no lo encontramos.

Tienes el resguardo de envio ? Comprobemos que lo enviaste al email correcto: alinares@fivetechsoft.com

Muchas gracias
Estimado Antonio,

Tengo la imagen del pago realizado con Paypal pero no se como incluirla en el foro. Me ayudan con ello?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by Compuin]]> 2025-02-11T06:03:17-07:00 2025-02-11T06:03:17-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277584#p277584
wilsongamboa wrote: Tue Feb 11, 2025 12:15 pm Antonio buenos dias
favor si puedes verificar mi pago de fwh 32 y 64 bits te lo agradezco lo acabo de hacer via paypal, te envie via mail las capturas de pantalla
un abrazo
Wilson
pd: con esto estoy con webminar + fwh
Yo envie copia de mi pago tamnbien a alinares@fivetechsoft.com]]>
wilsongamboa wrote: Tue Feb 11, 2025 12:15 pm Antonio buenos dias
favor si puedes verificar mi pago de fwh 32 y 64 bits te lo agradezco lo acabo de hacer via paypal, te envie via mail las capturas de pantalla
un abrazo
Wilson
pd: con esto estoy con webminar + fwh
Yo envie copia de mi pago tamnbien a alinares@fivetechsoft.com]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by leandro]]> 2025-02-11T06:38:14-07:00 2025-02-11T06:38:14-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277585#p277585 Resumen general actualizado 11 feb 2025 8:37 am hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fecha de inicio sugerida: 28 de febrero de 2025

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá

Participantes con pago webinar
1- Wilson Gamboa - Ecuador
2- Ralph del Castillo - Perú
3- Enrique Vertiz Pitta - Perú
4- Mauricio Arévalo - Colombia
5- Leandro Arévalo - Colombia
6- Ruben Dario Fernandez - Uruguay

Participantes confirmados
Juan (Carito) - Chile
Carlos Gelabert - España
Juan Navas - Venezuela]]>
Resumen general actualizado 11 feb 2025 8:37 am hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fecha de inicio sugerida: 28 de febrero de 2025

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá

Participantes con pago webinar
1- Wilson Gamboa - Ecuador
2- Ralph del Castillo - Perú
3- Enrique Vertiz Pitta - Perú
4- Mauricio Arévalo - Colombia
5- Leandro Arévalo - Colombia
6- Ruben Dario Fernandez - Uruguay

Participantes confirmados
Juan (Carito) - Chile
Carlos Gelabert - España
Juan Navas - Venezuela]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Enrrique Vertiz]]> 2025-02-11T14:18:29-07:00 2025-02-11T14:18:29-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277598#p277598
Acabo de depositar 50 Euros adicionales para el derecho al FWH de 32 y 64 que se entregaran con el curso, le pase por WA a Antonio la constancia.
Gracias]]>

Acabo de depositar 50 Euros adicionales para el derecho al FWH de 32 y 64 que se entregaran con el curso, le pase por WA a Antonio la constancia.
Gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-11T15:14:49-07:00 2025-02-11T15:14:49-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277599#p277599

un abrazo]]>


un abrazo]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by leandro]]> 2025-02-12T06:42:36-07:00 2025-02-12T06:42:36-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277614#p277614 Resumen general actualizado 12 feb 2025 8:41 am hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fecha de inicio sugerida: 28 de febrero de 2025

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador

Participantes con pago webinar
1- Ralph del Castillo - Perú
2- Mauricio Arévalo - Colombia
3- Leandro Arévalo - Colombia
4- Ruben Dario Fernandez - Uruguay

Participantes confirmados
Carlos Gelabert - España
Juan Navas - Venezuela]]>
Resumen general actualizado 12 feb 2025 8:41 am hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fecha de inicio sugerida: 28 de febrero de 2025

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador

Participantes con pago webinar
1- Ralph del Castillo - Perú
2- Mauricio Arévalo - Colombia
3- Leandro Arévalo - Colombia
4- Ruben Dario Fernandez - Uruguay

Participantes confirmados
Carlos Gelabert - España
Juan Navas - Venezuela]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-12T08:00:55-07:00 2025-02-12T08:00:55-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277615#p277615 Temario:

1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.

2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.

3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.

4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.

5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek]]>
Temario:

1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.

2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.

3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.

4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.

5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Lautaro]]> 2025-02-12T08:11:39-07:00 2025-02-12T08:11:39-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277616#p277616
Acabo de hacer el pago por 100 euros , el id de la transaccion es : 018731277Y458594Y.

Saludos desde Chile,

Lautaro Moreira]]>

Acabo de hacer el pago por 100 euros , el id de la transaccion es : 018731277Y458594Y.

Saludos desde Chile,

Lautaro Moreira]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-12T08:16:39-07:00 2025-02-12T08:16:39-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277617#p277617

un abrazo]]>


un abrazo]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-12T08:19:10-07:00 2025-02-12T08:19:10-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277618#p277618
There should not be any difficulties to understand the webinar.

best regards,]]>

There should not be any difficulties to understand the webinar.

best regards,]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by leandro]]> 2025-02-12T09:11:34-07:00 2025-02-12T09:11:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277619#p277619 Resumen general actualizado 12 feb 2025 4:09 pm hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fecha de inicio sugerida: 28 de febrero de 2025

Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España

Participantes con pago webinar
1- Ralph del Castillo - Perú
2- Mauricio Arévalo - Colombia
3- Leandro Arévalo - Colombia
4- Ruben Dario Fernandez - Uruguay
5- Javier Parada - México

Participantes confirmados
Juan Navas - Venezuela]]>
Resumen general actualizado 12 feb 2025 4:09 pm hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fecha de inicio sugerida: 28 de febrero de 2025

Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España

Participantes con pago webinar
1- Ralph del Castillo - Perú
2- Mauricio Arévalo - Colombia
3- Leandro Arévalo - Colombia
4- Ruben Dario Fernandez - Uruguay
5- Javier Parada - México

Participantes confirmados
Juan Navas - Venezuela]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by rodmc]]> 2025-02-12T20:34:11-07:00 2025-02-12T20:34:11-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277629#p277629 Cuando ya tengan información del horario (y ya tengan confirmadas las fechas) de dicho webinar, favor si pudieran publicarlo para así ver la posibilidad de participar.
Gracias!
RodMc]]>
Cuando ya tengan información del horario (y ya tengan confirmadas las fechas) de dicho webinar, favor si pudieran publicarlo para así ver la posibilidad de participar.
Gracias!
RodMc]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-12T22:26:07-07:00 2025-02-12T22:26:07-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277632#p277632
La fecha se establecerá tan pronto como alcancemos 20 participantes.]]>

La fecha se establecerá tan pronto como alcancemos 20 participantes.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-13T01:36:14-07:00 2025-02-13T01:36:14-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277637#p277637

viewtopic.php?t=45412]]>


viewtopic.php?t=45412]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Lautaro]]> 2025-02-13T10:59:16-07:00 2025-02-13T10:59:16-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277647#p277647
Una consulta : ¿ Existira el video grabado de la(s) sesiones del Curso Virtual ?

Gracias por su atencion,

Lautaro]]>

Una consulta : ¿ Existira el video grabado de la(s) sesiones del Curso Virtual ?

Gracias por su atencion,

Lautaro]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by VikthorThomas]]> 2025-02-13T11:12:45-07:00 2025-02-13T11:12:45-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277648#p277648
Antonio, favor de confirmar el envío vía paypal.]]>

Antonio, favor de confirmar el envío vía paypal.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-13T11:42:07-07:00 2025-02-13T11:42:07-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277650#p277650
Pago recibido, muchas gracias por tu apoyo al webinar de IA con Harbour! :)

un abrazo]]>

Pago recibido, muchas gracias por tu apoyo al webinar de IA con Harbour! :)

un abrazo]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-13T11:43:07-07:00 2025-02-13T11:43:07-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277651#p277651
Lautaro wrote: Thu Feb 13, 2025 5:59 pm Hola

Una consulta : ¿ Existira el video grabado de la(s) sesiones del Curso Virtual ?

Gracias por su atencion,

Lautaro
Sí, grabaremos las sesiones! :)]]>
Lautaro wrote: Thu Feb 13, 2025 5:59 pm Hola

Una consulta : ¿ Existira el video grabado de la(s) sesiones del Curso Virtual ?

Gracias por su atencion,

Lautaro
Sí, grabaremos las sesiones! :)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by leandro]]> 2025-02-13T12:50:31-07:00 2025-02-13T12:50:31-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277653#p277653 Resumen general actualizado 13 feb 2025 2:49 pm hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fecha de inicio sugerida: 28 de febrero de 2025

Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España
9- Víctor Manuel Tomás Díaz - México

Participantes con pago webinar
1- Ralph del Castillo - Perú
2- Mauricio Arévalo - Colombia
3- Leandro Arévalo - Colombia
4- Ruben Dario Fernandez - Uruguay
5- Javier Parada - México

Participantes confirmados
Juan Navas - Venezuela]]>
Resumen general actualizado 13 feb 2025 2:49 pm hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fecha de inicio sugerida: 28 de febrero de 2025

Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España
9- Víctor Manuel Tomás Díaz - México

Participantes con pago webinar
1- Ralph del Castillo - Perú
2- Mauricio Arévalo - Colombia
3- Leandro Arévalo - Colombia
4- Ruben Dario Fernandez - Uruguay
5- Javier Parada - México

Participantes confirmados
Juan Navas - Venezuela]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Sebastián Almirón]]> 2025-02-14T03:31:56-07:00 2025-02-14T03:31:56-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277664#p277664 ¿Tengo que esperar la confirmación de la inscripción para enviarle el pago a Antonio o lo envío ya?

Saludos
Sebastián]]>
¿Tengo que esperar la confirmación de la inscripción para enviarle el pago a Antonio o lo envío ya?

Saludos
Sebastián]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-14T03:40:54-07:00 2025-02-14T03:40:54-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277665#p277665
En cuanto hagas el envio por PayPal a alinares@fivetechsoft.com quedas registrado :)

Muchas gracias por tu apoyo al webinar!]]>

En cuanto hagas el envio por PayPal a alinares@fivetechsoft.com quedas registrado :)

Muchas gracias por tu apoyo al webinar!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by cpheraclio]]> 2025-02-14T09:11:53-07:00 2025-02-14T09:11:53-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277676#p277676
Usted envió €100.00 EUR a FiveTech Software S.L.

PARA FiveTech Software S.L.:
FiveWin 32 y 64 webinar

Detalles de la transacción
Id. de transacción: 0SD92040WE637574X
Fecha de la transacción: 14 de febrero de 2025
Fondos enviados €100.00 EUR]]>

Usted envió €100.00 EUR a FiveTech Software S.L.

PARA FiveTech Software S.L.:
FiveWin 32 y 64 webinar

Detalles de la transacción
Id. de transacción: 0SD92040WE637574X
Fecha de la transacción: 14 de febrero de 2025
Fondos enviados €100.00 EUR]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-14T12:04:11-07:00 2025-02-14T12:04:11-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277678#p277678
Muchas gracias por tu apoyo al webinar! :)

un abrazo]]>

Muchas gracias por tu apoyo al webinar! :)

un abrazo]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by leandro]]> 2025-02-14T12:15:18-07:00 2025-02-14T12:15:18-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277681#p277681 Resumen general actualizado 15 feb 2025 7:06 am hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fecha de inicio sugerida: 28 de febrero de 2025

Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España
9- Víctor Manuel Tomás Díaz - México
10- Ertan Hakan Ozturk - Turquía
11- Heraclio Cruz Pacheco - México
12- Manuel Aranda Rosales - España

Participantes con pago webinar
1- Ralph del Castillo - Perú
2- Mauricio Arévalo - Colombia
3- Leandro Arévalo - Colombia
4- Ruben Dario Fernandez - Uruguay
5- Javier Parada - México
6- Luis Gonzaga Krause - Canadá

Participantes confirmados
Juan Navas - Venezuela]]>
Resumen general actualizado 15 feb 2025 7:06 am hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fecha de inicio sugerida: 28 de febrero de 2025

Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España
9- Víctor Manuel Tomás Díaz - México
10- Ertan Hakan Ozturk - Turquía
11- Heraclio Cruz Pacheco - México
12- Manuel Aranda Rosales - España

Participantes con pago webinar
1- Ralph del Castillo - Perú
2- Mauricio Arévalo - Colombia
3- Leandro Arévalo - Colombia
4- Ruben Dario Fernandez - Uruguay
5- Javier Parada - México
6- Luis Gonzaga Krause - Canadá

Participantes confirmados
Juan Navas - Venezuela]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Sebastián Almirón]]> 2025-02-16T04:04:54-07:00 2025-02-16T04:04:54-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277698#p277698 ID DE transación: 10R17877SY473770A]]> ID DE transación: 10R17877SY473770A]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-16T11:01:13-07:00 2025-02-16T11:01:13-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277702#p277702
Muchas gracias por tu apoyo al webinar de IA con Harbour/xHarbour :)

un abrazo]]>

Muchas gracias por tu apoyo al webinar de IA con Harbour/xHarbour :)

un abrazo]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-16T13:16:49-07:00 2025-02-16T13:16:49-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277703#p277703
Miércoles 26 y Jueves 27.

Os ruego vuestra confirmación y/ó comentarios

Gracias!]]>

Miércoles 26 y Jueves 27.

Os ruego vuestra confirmación y/ó comentarios

Gracias!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by leandro]]> 2025-02-16T13:26:33-07:00 2025-02-16T13:26:33-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277704#p277704 Resumen general actualizado 18 feb 2025 12:00 pm hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fechas sugeridas webinar: 26 y 27 de febrero de 2025

Hora inicio capacitación por país
05:00 pm hora de España
01:00 pm hora de Argentina
01:00 pm hora de Chile
12:00 am hora de Bolivia
11:00 am hora de Colombia
11:00 am hora de Ecuador
11:00 am hora de Perú
10:00 am hora de Guatemala
10:00 am hora de México


Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España
9- Víctor Manuel Tomás Díaz - México
10- Ertan Hakan Ozturk - Turquía
11- Heraclio Cruz Pacheco - México
12- Manuel Aranda Rosales - España
13- Sebastián Almirón - España
14- O(scar) - México
15- Ralph del Castillo - Perú

Participantes con pago webinar
1- Mauricio Arévalo - Colombia
2- Leandro Arévalo - Colombia
3- Ruben Dario Fernandez - Uruguay
4- Javier Parada - México
5- Luis Gonzaga Krause - Canadá]]>
Resumen general actualizado 18 feb 2025 12:00 pm hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fechas sugeridas webinar: 26 y 27 de febrero de 2025

Hora inicio capacitación por país
05:00 pm hora de España
01:00 pm hora de Argentina
01:00 pm hora de Chile
12:00 am hora de Bolivia
11:00 am hora de Colombia
11:00 am hora de Ecuador
11:00 am hora de Perú
10:00 am hora de Guatemala
10:00 am hora de México


Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España
9- Víctor Manuel Tomás Díaz - México
10- Ertan Hakan Ozturk - Turquía
11- Heraclio Cruz Pacheco - México
12- Manuel Aranda Rosales - España
13- Sebastián Almirón - España
14- O(scar) - México
15- Ralph del Castillo - Perú

Participantes con pago webinar
1- Mauricio Arévalo - Colombia
2- Leandro Arévalo - Colombia
3- Ruben Dario Fernandez - Uruguay
4- Javier Parada - México
5- Luis Gonzaga Krause - Canadá]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-18T10:32:56-07:00 2025-02-18T10:32:56-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277737#p277737
con antelación para enviarles la invitación a Skype por privado!

Miércoles dia 26 a las 17 horas de España :!:]]>

con antelación para enviarles la invitación a Skype por privado!

Miércoles dia 26 a las 17 horas de España :!:]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Compuin]]> 2025-02-18T10:41:42-07:00 2025-02-18T10:41:42-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277738#p277738
Antonio Linares wrote: Tue Feb 18, 2025 5:32 pm Necesitamos que los asistentes registrados al webinar proporcionen sus IDs en Skype :idea:
con antelación para enviarles la invitación a Skype por privado!

Miércoles dia 26 a las 17 horas de España :!:
Hola maestro, como lo envio pro mensaje privado?]]>
Antonio Linares wrote: Tue Feb 18, 2025 5:32 pm Necesitamos que los asistentes registrados al webinar proporcionen sus IDs en Skype :idea:
con antelación para enviarles la invitación a Skype por privado!

Miércoles dia 26 a las 17 horas de España :!:
Hola maestro, como lo envio pro mensaje privado?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-18T13:33:34-07:00 2025-02-18T13:33:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277741#p277741 ]]> ]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Compuin]]> 2025-02-18T14:04:32-07:00 2025-02-18T14:04:32-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277742#p277742
Antonio Linares wrote: Tue Feb 18, 2025 8:33 pm Email ó whatsapp, gracias :)
Enviado al email. Gracias]]>
Antonio Linares wrote: Tue Feb 18, 2025 8:33 pm Email ó whatsapp, gracias :)
Enviado al email. Gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-19T00:14:08-07:00 2025-02-19T00:14:08-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277744#p277744
No lo he recibido. Si puedes envíame un mensaje por Skype, gracias!]]>

No lo he recibido. Si puedes envíame un mensaje por Skype, gracias!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-19T00:41:43-07:00 2025-02-19T00:41:43-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277745#p277745
Por favor enviadme vuestro id en Skype ó directamente un mensaje por Skype, gracias! :!:]]>

Por favor enviadme vuestro id en Skype ó directamente un mensaje por Skype, gracias! :!:]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Compuin]]> 2025-02-19T06:08:13-07:00 2025-02-19T06:08:13-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277755#p277755
Antonio Linares wrote: Wed Feb 19, 2025 7:14 am Compuin,

No lo he recibido. Si puedes envíame un mensaje por Skype, gracias!
Enviado a Skype]]>
Antonio Linares wrote: Wed Feb 19, 2025 7:14 am Compuin,

No lo he recibido. Si puedes envíame un mensaje por Skype, gracias!
Enviado a Skype]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-19T07:26:32-07:00 2025-02-19T07:26:32-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277758#p277758 antonio.fivetech@hotmail.com

gracias!]]>
antonio.fivetech@hotmail.com

gracias!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by SergioC]]> 2025-02-19T12:11:13-07:00 2025-02-19T12:11:13-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277764#p277764 Me presento: Mi nombre es Sergio Castellari, soy de Argentina.
Programo hace mas de 25 años, arranque con Clipper, miraba sin poder llegar a FiveWin en sus inicios.
Siento admiración por Antonio Linares, es INMENSO el aporte que ha hecho y hace al mundo Clipper (ahora Harbour).
Programo utilizando la GUI ooHG. No utilizo FiveWin aunque podría hacerlo en un futuro.
Quisiera saber si aun así, puedo hacer el Webinar ofrecido, o si es obligatorio conocer Fivewin para realizarlo.
En caso afirmativo de poder realizarlo, donde enviar los 50 euros y que pasos seguir.

Desde ya muchas gracias!
Saludos,
Sergio]]>
Me presento: Mi nombre es Sergio Castellari, soy de Argentina.
Programo hace mas de 25 años, arranque con Clipper, miraba sin poder llegar a FiveWin en sus inicios.
Siento admiración por Antonio Linares, es INMENSO el aporte que ha hecho y hace al mundo Clipper (ahora Harbour).
Programo utilizando la GUI ooHG. No utilizo FiveWin aunque podría hacerlo en un futuro.
Quisiera saber si aun así, puedo hacer el Webinar ofrecido, o si es obligatorio conocer Fivewin para realizarlo.
En caso afirmativo de poder realizarlo, donde enviar los 50 euros y que pasos seguir.

Desde ya muchas gracias!
Saludos,
Sergio]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by sysctrl2]]> 2025-02-19T19:35:58-07:00 2025-02-19T19:35:58-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277768#p277768
SALUDOS !!]]>

SALUDOS !!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Lautaro]]> 2025-02-19T22:13:59-07:00 2025-02-19T22:13:59-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277769#p277769
Acabo de enviar el pago de la inscripcion de tres colegas :
Angel Monje
Franco Gamonal
Francisco Diaz

Detalles del pago
Nombre del destinatario
FiveTech Software S.L.
Fecha de la transacción
19-02-2025
Importe de la transacción
€150,00 EUR
Id. de su transacción
1AB349132Y509894M

Para que los consideren.

Saludos

Lautaro]]>

Acabo de enviar el pago de la inscripcion de tres colegas :
Angel Monje
Franco Gamonal
Francisco Diaz

Detalles del pago
Nombre del destinatario
FiveTech Software S.L.
Fecha de la transacción
19-02-2025
Importe de la transacción
€150,00 EUR
Id. de su transacción
1AB349132Y509894M

Para que los consideren.

Saludos

Lautaro]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by leandro]]> 2025-02-20T00:40:55-07:00 2025-02-20T00:40:55-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277770#p277770
SergioC wrote: Wed Feb 19, 2025 7:11 pm Hola!
Me presento: Mi nombre es Sergio Castellari, soy de Argentina.
Programo hace mas de 25 años, arranque con Clipper, miraba sin poder llegar a FiveWin en sus inicios.
Siento admiración por Antonio Linares, es INMENSO el aporte que ha hecho y hace al mundo Clipper (ahora Harbour).
Programo utilizando la GUI ooHG. No utilizo FiveWin aunque podría hacerlo en un futuro.
Quisiera saber si aun así, puedo hacer el Webinar ofrecido, o si es obligatorio conocer Fivewin para realizarlo.
En caso afirmativo de poder realizarlo, donde enviar los 50 euros y que pasos seguir.

Desde ya muchas gracias!
Saludos,
Sergio
Hola Sergio buenos días como estas?

Pues el curso esta orientado hacia la usabilidad de la IA en nuestras aplicaciones (x)harbour FW, de todas formas hay muchos temas que no tienen que ver con FW, podrías tomar el curso y aprovechar los temas específicos hacia la creación de los modelos de inteligencia artificial y de paso los enfocas hacia un futuro en FW.

Si te decides, el pago lo debes hacer a la cuenta de Antonio en paypal.

alinares@fivetechsoft.com]]>
SergioC wrote: Wed Feb 19, 2025 7:11 pm Hola!
Me presento: Mi nombre es Sergio Castellari, soy de Argentina.
Programo hace mas de 25 años, arranque con Clipper, miraba sin poder llegar a FiveWin en sus inicios.
Siento admiración por Antonio Linares, es INMENSO el aporte que ha hecho y hace al mundo Clipper (ahora Harbour).
Programo utilizando la GUI ooHG. No utilizo FiveWin aunque podría hacerlo en un futuro.
Quisiera saber si aun así, puedo hacer el Webinar ofrecido, o si es obligatorio conocer Fivewin para realizarlo.
En caso afirmativo de poder realizarlo, donde enviar los 50 euros y que pasos seguir.

Desde ya muchas gracias!
Saludos,
Sergio
Hola Sergio buenos días como estas?

Pues el curso esta orientado hacia la usabilidad de la IA en nuestras aplicaciones (x)harbour FW, de todas formas hay muchos temas que no tienen que ver con FW, podrías tomar el curso y aprovechar los temas específicos hacia la creación de los modelos de inteligencia artificial y de paso los enfocas hacia un futuro en FW.

Si te decides, el pago lo debes hacer a la cuenta de Antonio en paypal.

alinares@fivetechsoft.com]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by leandro]]> 2025-02-20T00:44:51-07:00 2025-02-20T00:44:51-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277771#p277771 Resumen general actualizado 20 feb 2025 2:42 am hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fechas confirmadas webinar: 26 y 27 de febrero de 2025 :D :D

Hora inicio capacitación por país
05:00 pm hora de España
01:00 pm hora de Argentina
01:00 pm hora de Chile
12:00 am hora de Bolivia
11:00 am hora de Colombia
11:00 am hora de Ecuador
11:00 am hora de Perú
10:00 am hora de Guatemala
10:00 am hora de México
08:00 am hora de Canadá
08:00 pm hora de Turquía


Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España
9- Víctor Manuel Tomás Díaz - México
10- Ertan Hakan Ozturk - Turquía
11- Heraclio Cruz Pacheco - México
12- Manuel Aranda Rosales - España
13- Sebastián Almirón - España
14- O(scar) - México
15- Ralph del Castillo - Perú

Participantes con pago webinar
1- Mauricio Arévalo - Colombia
2- Leandro Arévalo - Colombia
3- Ruben Dario Fernandez - Uruguay
4- Javier Parada - México
5- Luis Gonzaga Krause - Canadá
6- Juan Castillo Arteaga - México
7- Angel Monje - Chile
8- Franco Gamonal- Chile
9- Francisco Diaz- Chile]]>
Resumen general actualizado 20 feb 2025 2:42 am hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fechas confirmadas webinar: 26 y 27 de febrero de 2025 :D :D

Hora inicio capacitación por país
05:00 pm hora de España
01:00 pm hora de Argentina
01:00 pm hora de Chile
12:00 am hora de Bolivia
11:00 am hora de Colombia
11:00 am hora de Ecuador
11:00 am hora de Perú
10:00 am hora de Guatemala
10:00 am hora de México
08:00 am hora de Canadá
08:00 pm hora de Turquía


Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España
9- Víctor Manuel Tomás Díaz - México
10- Ertan Hakan Ozturk - Turquía
11- Heraclio Cruz Pacheco - México
12- Manuel Aranda Rosales - España
13- Sebastián Almirón - España
14- O(scar) - México
15- Ralph del Castillo - Perú

Participantes con pago webinar
1- Mauricio Arévalo - Colombia
2- Leandro Arévalo - Colombia
3- Ruben Dario Fernandez - Uruguay
4- Javier Parada - México
5- Luis Gonzaga Krause - Canadá
6- Juan Castillo Arteaga - México
7- Angel Monje - Chile
8- Franco Gamonal- Chile
9- Francisco Diaz- Chile]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by leandro]]> 2025-02-20T00:48:26-07:00 2025-02-20T00:48:26-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277772#p277772
Lautaro wrote: Thu Feb 20, 2025 5:13 am Acabo de enviar el pago de la inscripcion de tres colegas :
Angel Monje
Franco Gamonal
Francisco Diaz

Detalles del pago
Nombre del destinatario
FiveTech Software S.L.
Fecha de la transacción
19-02-2025
Importe de la transacción
€150,00 EUR
Id. de su transacción
1AB349132Y509894M
Lautaro amigo, buenos días, como estas? :D :D

Dos cosillas, todos los colegas son de Chile? y la otra porfa, nos envías los id de skype, para agregarlos al grupo del webinar.

Gracias de antemano]]>
Lautaro wrote: Thu Feb 20, 2025 5:13 am Acabo de enviar el pago de la inscripcion de tres colegas :
Angel Monje
Franco Gamonal
Francisco Diaz

Detalles del pago
Nombre del destinatario
FiveTech Software S.L.
Fecha de la transacción
19-02-2025
Importe de la transacción
€150,00 EUR
Id. de su transacción
1AB349132Y509894M
Lautaro amigo, buenos días, como estas? :D :D

Dos cosillas, todos los colegas son de Chile? y la otra porfa, nos envías los id de skype, para agregarlos al grupo del webinar.

Gracias de antemano]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Lautaro]]> 2025-02-20T10:17:15-07:00 2025-02-20T10:17:15-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277793#p277793
Si todos son de Chile
¿ a donde te envio los id de skype de ellos ?

Saludos

Lautaro]]>

Si todos son de Chile
¿ a donde te envio los id de skype de ellos ?

Saludos

Lautaro]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by leandro]]> 2025-02-20T12:10:16-07:00 2025-02-20T12:10:16-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277799#p277799
o también puede ser a mi WhatsApp +573003957875]]>

o también puede ser a mi WhatsApp +573003957875]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by oliveiros junior]]> 2025-02-21T06:06:21-07:00 2025-02-21T06:06:21-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277826#p277826
Ainda dá para fazer inscrição?

Att.,

Oliveiros Junior]]>

Ainda dá para fazer inscrição?

Att.,

Oliveiros Junior]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Compuin]]> 2025-02-21T06:07:26-07:00 2025-02-21T06:07:26-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277827#p277827
sysctrl2 wrote: Thu Feb 20, 2025 2:35 am Maestro Antonio, por 100 € es el FWH ENERO 2025 ?

SALUDOS !!
+1]]>
sysctrl2 wrote: Thu Feb 20, 2025 2:35 am Maestro Antonio, por 100 € es el FWH ENERO 2025 ?

SALUDOS !!
+1]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-21T06:11:29-07:00 2025-02-21T06:11:29-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277828#p277828
oliveiros junior wrote: Fri Feb 21, 2025 1:06 pm Olá, bom dia a todos!

Ainda dá para fazer inscrição?

Att.,

Oliveiros Junior
PayPal to alinares@fivetechsoft.com

100 euros => webinar IA Harbour plus FWH 32 nd 64 bits
50 euros => just webinar IA]]>
oliveiros junior wrote: Fri Feb 21, 2025 1:06 pm Olá, bom dia a todos!

Ainda dá para fazer inscrição?

Att.,

Oliveiros Junior
PayPal to alinares@fivetechsoft.com

100 euros => webinar IA Harbour plus FWH 32 nd 64 bits
50 euros => just webinar IA]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-21T06:11:52-07:00 2025-02-21T06:11:52-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277829#p277829
Compuin wrote: Fri Feb 21, 2025 1:07 pm
sysctrl2 wrote: Thu Feb 20, 2025 2:35 am Maestro Antonio, por 100 € es el FWH ENERO 2025 ?

SALUDOS !!
+1
Si, correcto :)]]>
Compuin wrote: Fri Feb 21, 2025 1:07 pm
sysctrl2 wrote: Thu Feb 20, 2025 2:35 am Maestro Antonio, por 100 € es el FWH ENERO 2025 ?

SALUDOS !!
+1
Si, correcto :)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by oliveiros junior]]> 2025-02-21T06:24:24-07:00 2025-02-21T06:24:24-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277831#p277831
Inscrição realizada.

100 euros.

Aguardo orientações como proceder. Obrigado!

Att.

Oliveiros Junior]]>

Inscrição realizada.

100 euros.

Aguardo orientações como proceder. Obrigado!

Att.

Oliveiros Junior]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-21T06:44:27-07:00 2025-02-21T06:44:27-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277832#p277832
Muchas gracias por tu apoyo al webinar :)

Por favor envíame un whatsapp al +34 722461100 para darnos tu ID en Skype y entregarte el software :!:

El webinar comienza el próximo miercoles 26 y jueves 27 a las 17 pm hora española en Skype!]]>

Muchas gracias por tu apoyo al webinar :)

Por favor envíame un whatsapp al +34 722461100 para darnos tu ID en Skype y entregarte el software :!:

El webinar comienza el próximo miercoles 26 y jueves 27 a las 17 pm hora española en Skype!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Compuin]]> 2025-02-21T06:55:34-07:00 2025-02-21T06:55:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277834#p277834
Antonio Linares wrote: Fri Feb 21, 2025 1:44 pm Estimado Oliveiros,

Muchas gracias por tu apoyo al webinar :)

Por favor envíame un whatsapp al +34 722461100 para darnos tu ID en Skype y entregarte el software :!:

El webinar comienza el próximo miercoles 26 y jueves 27 a las 17 pm hora española en Skype!
+1]]>
Antonio Linares wrote: Fri Feb 21, 2025 1:44 pm Estimado Oliveiros,

Muchas gracias por tu apoyo al webinar :)

Por favor envíame un whatsapp al +34 722461100 para darnos tu ID en Skype y entregarte el software :!:

El webinar comienza el próximo miercoles 26 y jueves 27 a las 17 pm hora española en Skype!
+1]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by leandro]]> 2025-02-21T07:25:14-07:00 2025-02-21T07:25:14-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277835#p277835 Resumen general actualizado 22 feb 2025 3:47 pm hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fechas confirmadas webinar: 26 y 27 de febrero de 2025 :D :D

Hora inicio capacitación por país
05:00 pm hora de España
01:00 pm hora de Argentina
01:00 pm hora de Chile
01:00 pm hora de Brasil
12:00 am hora de Bolivia
11:00 am hora de Colombia
11:00 am hora de Ecuador
11:00 am hora de Perú
10:00 am hora de Guatemala
10:00 am hora de México
08:00 am hora de Canadá
08:00 pm hora de Turquía


Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España
9- Víctor Manuel Tomás Díaz - México
10- Ertan Hakan Ozturk - Turquía
11- Heraclio Cruz Pacheco - México
12- Manuel Aranda Rosales - España
13- Sebastián Almirón - España
14- O(scar) - México
15- Ralph del Castillo - Perú
16- Oliveros Sm Junior - Brasil
17- Mario Alberto Davalos Aguilera - México
18- Osvaldo Ramirez - México

Participantes con pago webinar
1- Mauricio Arévalo - Colombia
2- Leandro Arévalo - Colombia
3- Ruben Dario Fernandez - Uruguay
4- Javier Parada - México
5- Luis Gonzaga Krause - Canadá
6- Juan Castillo Arteaga - México
7- Angel Monje - Chile
8- Franco Gamonal- Chile
9- Francisco Diaz- Chile]]>
Resumen general actualizado 22 feb 2025 3:47 pm hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fechas confirmadas webinar: 26 y 27 de febrero de 2025 :D :D

Hora inicio capacitación por país
05:00 pm hora de España
01:00 pm hora de Argentina
01:00 pm hora de Chile
01:00 pm hora de Brasil
12:00 am hora de Bolivia
11:00 am hora de Colombia
11:00 am hora de Ecuador
11:00 am hora de Perú
10:00 am hora de Guatemala
10:00 am hora de México
08:00 am hora de Canadá
08:00 pm hora de Turquía


Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España
9- Víctor Manuel Tomás Díaz - México
10- Ertan Hakan Ozturk - Turquía
11- Heraclio Cruz Pacheco - México
12- Manuel Aranda Rosales - España
13- Sebastián Almirón - España
14- O(scar) - México
15- Ralph del Castillo - Perú
16- Oliveros Sm Junior - Brasil
17- Mario Alberto Davalos Aguilera - México
18- Osvaldo Ramirez - México

Participantes con pago webinar
1- Mauricio Arévalo - Colombia
2- Leandro Arévalo - Colombia
3- Ruben Dario Fernandez - Uruguay
4- Javier Parada - México
5- Luis Gonzaga Krause - Canadá
6- Juan Castillo Arteaga - México
7- Angel Monje - Chile
8- Franco Gamonal- Chile
9- Francisco Diaz- Chile]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Lautaro]]> 2025-02-21T20:44:38-07:00 2025-02-21T20:44:38-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277858#p277858
leandro wrote: Thu Feb 20, 2025 7:10 pm Si deseas a alguno de mis correos, están al final del los POST.

o también puede ser a mi WhatsApp +573003957875
Estimado Leandro, correo enviado con los contactos.

Saludos,

Lautaro]]>
leandro wrote: Thu Feb 20, 2025 7:10 pm Si deseas a alguno de mis correos, están al final del los POST.

o también puede ser a mi WhatsApp +573003957875
Estimado Leandro, correo enviado con los contactos.

Saludos,

Lautaro]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by leandro]]> 2025-02-22T06:24:35-07:00 2025-02-22T06:24:35-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277867#p277867
Estimado Leandro, correo enviado con los contactos.

Saludos,

Lautaro
Amigo, ya quedaron agregados los colegas al grupo.]]>
Estimado Leandro, correo enviado con los contactos.

Saludos,

Lautaro
Amigo, ya quedaron agregados los colegas al grupo.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by leandro]]> 2025-02-23T04:04:34-07:00 2025-02-23T04:04:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277888#p277888 Resumen general actualizado 23 feb 2025 6:03 am hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fechas confirmadas webinar: 26 y 27 de febrero de 2025 :D :D

Hora inicio capacitación por país
05:00 pm hora de España
01:00 pm hora de Argentina
01:00 pm hora de Chile
01:00 pm hora de Brasil
12:00 am hora de Bolivia
11:00 am hora de Colombia
11:00 am hora de Ecuador
11:00 am hora de Perú
10:00 am hora de Guatemala
10:00 am hora de México
08:00 am hora de Canadá
08:00 pm hora de Turquía


Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España
9- Víctor Manuel Tomás Díaz - México
10- Ertan Hakan Ozturk - Turquía
11- Heraclio Cruz Pacheco - México
12- Manuel Aranda Rosales - España
13- Sebastián Almirón - España
14- O(scar) - México
15- Ralph del Castillo - Perú
16- Oliveros Sm Junior - Brasil
17- Mario Alberto Davalos Aguilera - México
18- Osvaldo Ramirez - México

Participantes con pago webinar
1- Mauricio Arévalo - Colombia
2- Leandro Arévalo - Colombia
3- Ruben Dario Fernandez - Uruguay
4- Javier Parada - México
5- Luis Gonzaga Krause - Canadá
6- Juan Castillo Arteaga - México
7- Angel Monje - Chile
8- Franco Gamonal- Chile
9- Francisco Diaz- Chile
10- Youssef Jorge de Saráchaga - México]]>
Resumen general actualizado 23 feb 2025 6:03 am hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fechas confirmadas webinar: 26 y 27 de febrero de 2025 :D :D

Hora inicio capacitación por país
05:00 pm hora de España
01:00 pm hora de Argentina
01:00 pm hora de Chile
01:00 pm hora de Brasil
12:00 am hora de Bolivia
11:00 am hora de Colombia
11:00 am hora de Ecuador
11:00 am hora de Perú
10:00 am hora de Guatemala
10:00 am hora de México
08:00 am hora de Canadá
08:00 pm hora de Turquía


Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España
9- Víctor Manuel Tomás Díaz - México
10- Ertan Hakan Ozturk - Turquía
11- Heraclio Cruz Pacheco - México
12- Manuel Aranda Rosales - España
13- Sebastián Almirón - España
14- O(scar) - México
15- Ralph del Castillo - Perú
16- Oliveros Sm Junior - Brasil
17- Mario Alberto Davalos Aguilera - México
18- Osvaldo Ramirez - México

Participantes con pago webinar
1- Mauricio Arévalo - Colombia
2- Leandro Arévalo - Colombia
3- Ruben Dario Fernandez - Uruguay
4- Javier Parada - México
5- Luis Gonzaga Krause - Canadá
6- Juan Castillo Arteaga - México
7- Angel Monje - Chile
8- Franco Gamonal- Chile
9- Francisco Diaz- Chile
10- Youssef Jorge de Saráchaga - México]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Verhoven]]> 2025-02-24T01:34:47-07:00 2025-02-24T01:34:47-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277895#p277895 Acabo de remitir justificante de pago a Antonio.
Ruego me incluyas en la lista Leandro.
Saludos.]]>
Acabo de remitir justificante de pago a Antonio.
Ruego me incluyas en la lista Leandro.
Saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by leandro]]> 2025-02-24T10:45:47-07:00 2025-02-24T10:45:47-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277904#p277904 Resumen general actualizado 24 feb 2025 2:09 pm hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fechas confirmadas webinar: 26 y 27 de febrero de 2025 :D :D

Hora inicio capacitación por país
05:00 pm hora de España
01:00 pm hora de Argentina
01:00 pm hora de Chile
01:00 pm hora de Brasil
12:00 am hora de Bolivia
11:00 am hora de Colombia
11:00 am hora de Ecuador
11:00 am hora de Perú
10:00 am hora de Guatemala
10:00 am hora de México
08:00 am hora de Canadá
08:00 pm hora de Turquía


Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64 bits
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España
9- Víctor Manuel Tomás Díaz - México
10- Ertan Hakan Ozturk - Turquía
11- Heraclio Cruz Pacheco - México
12- Manuel Aranda Rosales - España
13- Sebastián Almirón - España
14- O(scar) - México
15- Ralph del Castillo - Perú
16- Oliveros Sm Junior - Brasil
17- Mario Alberto Davalos Aguilera - México
18- Osvaldo Ramirez - México
19- Hugo Theler - Argentina

Participantes con pago webinar + actualización 64 bits
1- Verhoven Paz Bores - España

Participantes con pago webinar
1- Mauricio Arévalo - Colombia
2- Leandro Arévalo - Colombia
3- Ruben Dario Fernandez - Uruguay
4- Javier Parada - México
5- Luis Gonzaga Krause - Canadá
6- Juan Castillo Arteaga - México
7- Angel Monje - Chile
8- Franco Gamonal- Chile
9- Francisco Diaz- Chile
10- Youssef Jorge de Saráchaga - México
11- Gabriel Ornelas Mendoza - México]]>
Resumen general actualizado 24 feb 2025 2:09 pm hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fechas confirmadas webinar: 26 y 27 de febrero de 2025 :D :D

Hora inicio capacitación por país
05:00 pm hora de España
01:00 pm hora de Argentina
01:00 pm hora de Chile
01:00 pm hora de Brasil
12:00 am hora de Bolivia
11:00 am hora de Colombia
11:00 am hora de Ecuador
11:00 am hora de Perú
10:00 am hora de Guatemala
10:00 am hora de México
08:00 am hora de Canadá
08:00 pm hora de Turquía


Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64 bits
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España
9- Víctor Manuel Tomás Díaz - México
10- Ertan Hakan Ozturk - Turquía
11- Heraclio Cruz Pacheco - México
12- Manuel Aranda Rosales - España
13- Sebastián Almirón - España
14- O(scar) - México
15- Ralph del Castillo - Perú
16- Oliveros Sm Junior - Brasil
17- Mario Alberto Davalos Aguilera - México
18- Osvaldo Ramirez - México
19- Hugo Theler - Argentina

Participantes con pago webinar + actualización 64 bits
1- Verhoven Paz Bores - España

Participantes con pago webinar
1- Mauricio Arévalo - Colombia
2- Leandro Arévalo - Colombia
3- Ruben Dario Fernandez - Uruguay
4- Javier Parada - México
5- Luis Gonzaga Krause - Canadá
6- Juan Castillo Arteaga - México
7- Angel Monje - Chile
8- Franco Gamonal- Chile
9- Francisco Diaz- Chile
10- Youssef Jorge de Saráchaga - México
11- Gabriel Ornelas Mendoza - México]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Verhoven]]> 2025-02-24T12:42:34-07:00 2025-02-24T12:42:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277908#p277908
C:\FW64IA

Si os parece bien.]]>

C:\FW64IA

Si os parece bien.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by wilsongamboa]]> 2025-02-24T16:13:50-07:00 2025-02-24T16:13:50-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277911#p277911 saludos
Wilson
buena idea]]>
saludos
Wilson
buena idea]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-25T01:39:37-07:00 2025-02-25T01:39:37-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277913#p277913

Image

Image

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oWnd, oWebView
    local oGemini := TGemini():New()

    fw_SetUnicode( .F. )

    DEFINE WINDOW oWnd TITLE "Chat AI" SIZE 650, 800

    oWebView = TWebView2():New( oWnd )

    oWebView:SetHtml( hb_memoRead( "chat.html" ) )
    oWebView:bOnBind = { | aInfo, cAnswer | oGemini:Send( aInfo[ 1 ] ),;
                                            cAnswer := "sendResponse('" + hb_Utf8ToStr( oGemini:getValue() ) + "')",;
                                            cAnswer := StrTran( cAnswer, Chr( 10 ), "" ),;
                                            oWebView:Eval( cAnswer ) }

    ACTIVATE WINDOW oWnd CENTER ;
       ON RESIZE oWebView:SetSize( nWidth, nHeight )

    oGemini:End()

return nil    
]]>


Image

Image

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oWnd, oWebView
    local oGemini := TGemini():New()

    fw_SetUnicode( .F. )

    DEFINE WINDOW oWnd TITLE "Chat AI" SIZE 650, 800

    oWebView = TWebView2():New( oWnd )

    oWebView:SetHtml( hb_memoRead( "chat.html" ) )
    oWebView:bOnBind = { | aInfo, cAnswer | oGemini:Send( aInfo[ 1 ] ),;
                                            cAnswer := "sendResponse('" + hb_Utf8ToStr( oGemini:getValue() ) + "')",;
                                            cAnswer := StrTran( cAnswer, Chr( 10 ), "" ),;
                                            oWebView:Eval( cAnswer ) }

    ACTIVATE WINDOW oWnd CENTER ;
       ON RESIZE oWebView:SetSize( nWidth, nHeight )

    oGemini:End()

return nil    
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Verhoven]]> 2025-02-25T01:45:22-07:00 2025-02-25T01:45:22-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277914#p277914 Estamos muy entusiasmados con el seminario por ello y para tratar de sacarle el máximo provecho voy a atreverme a pedirte que nos pongas, bien por aquí o bien por el chat de skype, un bat para generar los prg que podamos montar de ejemplo durante el seminario. Así nos ahorramos parar para tratar de montar todo eso. :roll:

Saludos.]]>
Estamos muy entusiasmados con el seminario por ello y para tratar de sacarle el máximo provecho voy a atreverme a pedirte que nos pongas, bien por aquí o bien por el chat de skype, un bat para generar los prg que podamos montar de ejemplo durante el seminario. Así nos ahorramos parar para tratar de montar todo eso. :roll:

Saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-25T01:51:19-07:00 2025-02-25T01:51:19-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277915#p277915 ]]> ]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by leandro]]> 2025-02-25T08:36:28-07:00 2025-02-25T08:36:28-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277929#p277929 Resumen general actualizado 25 feb 2025 4:41 pm hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fechas confirmadas webinar: 26 y 27 de febrero de 2025 :D :D

Hora inicio capacitación por país
05:00 pm hora de España
01:00 pm hora de Argentina
01:00 pm hora de Chile
01:00 pm hora de Brasil
12:00 am hora de Bolivia
11:00 am hora de Colombia
11:00 am hora de Ecuador
11:00 am hora de Perú
10:00 am hora de Guatemala
10:00 am hora de México
08:00 am hora de Canadá
08:00 pm hora de Turquía


Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64 bits
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España
9- Víctor Manuel Tomás Díaz - México
10- Ertan Hakan Ozturk - Turquía
11- Heraclio Cruz Pacheco - México
12- Manuel Aranda Rosales - España
13- Sebastián Almirón - España
14- O(scar) - México
15- Ralph del Castillo - Perú
16- Oliveros Sm Junior - Brasil
17- Mario Alberto Davalos Aguilera - México
18- Osvaldo Ramirez - México
19- Hugo Theler - Argentina
20- Marco Augusto Rodríguez - México
21- Horacio Roldan - Estados Unidos
22- Fernando Patricio Espinoza Añazco - Ecuador
23- Otto Atzwanger Gesellschaft.m.b.H. - Austria

Participantes con pago webinar + actualización 64 bits
1- Verhoven Paz Bores - España

Participantes con pago webinar
1- Mauricio Arévalo - Colombia
2- Leandro Arévalo - Colombia
3- Ruben Dario Fernandez - Uruguay
4- Javier Parada - México
5- Luis Gonzaga Krause - Canadá
6- Juan Castillo Arteaga - México
7- Angel Monje - Chile
8- Franco Gamonal- Chile
9- Francisco Diaz- Chile
10- Youssef Jorge de Saráchaga - México
11- Gabriel Ornelas Mendoza - México
12- Ernesto Pinto - Colombia]]>
Resumen general actualizado 25 feb 2025 4:41 pm hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fechas confirmadas webinar: 26 y 27 de febrero de 2025 :D :D

Hora inicio capacitación por país
05:00 pm hora de España
01:00 pm hora de Argentina
01:00 pm hora de Chile
01:00 pm hora de Brasil
12:00 am hora de Bolivia
11:00 am hora de Colombia
11:00 am hora de Ecuador
11:00 am hora de Perú
10:00 am hora de Guatemala
10:00 am hora de México
08:00 am hora de Canadá
08:00 pm hora de Turquía


Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64 bits
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España
9- Víctor Manuel Tomás Díaz - México
10- Ertan Hakan Ozturk - Turquía
11- Heraclio Cruz Pacheco - México
12- Manuel Aranda Rosales - España
13- Sebastián Almirón - España
14- O(scar) - México
15- Ralph del Castillo - Perú
16- Oliveros Sm Junior - Brasil
17- Mario Alberto Davalos Aguilera - México
18- Osvaldo Ramirez - México
19- Hugo Theler - Argentina
20- Marco Augusto Rodríguez - México
21- Horacio Roldan - Estados Unidos
22- Fernando Patricio Espinoza Añazco - Ecuador
23- Otto Atzwanger Gesellschaft.m.b.H. - Austria

Participantes con pago webinar + actualización 64 bits
1- Verhoven Paz Bores - España

Participantes con pago webinar
1- Mauricio Arévalo - Colombia
2- Leandro Arévalo - Colombia
3- Ruben Dario Fernandez - Uruguay
4- Javier Parada - México
5- Luis Gonzaga Krause - Canadá
6- Juan Castillo Arteaga - México
7- Angel Monje - Chile
8- Franco Gamonal- Chile
9- Francisco Diaz- Chile
10- Youssef Jorge de Saráchaga - México
11- Gabriel Ornelas Mendoza - México
12- Ernesto Pinto - Colombia]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Vikthor]]> 2025-02-25T12:08:11-07:00 2025-02-25T12:08:11-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277935#p277935
¿ Habrá ejemplos para utilizar solamente con Harbour ?]]>

¿ Habrá ejemplos para utilizar solamente con Harbour ?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-25T12:56:01-07:00 2025-02-25T12:56:01-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277938#p277938

Mañana durante el webinar proporcionaremos las versiones más actuales de las clases y los ejemplos, con los cambios más recientes :!:]]>


Mañana durante el webinar proporcionaremos las versiones más actuales de las clases y los ejemplos, con los cambios más recientes :!:]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestra aplicaciones :: Reply by cladron]]> 2025-02-25T14:59:25-07:00 2025-02-25T14:59:25-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277939#p277939 alinares@fivetechsoft.com

Carlos Ladron de Guevara
Lima - Peru
Antonio Linares wrote: Wed Feb 05, 2025 4:55 am En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"

También veremos como usar Ollama cuando los datos sean confidenciales y no puedan enviarse a la web

Y en general revisaremos las opciones existentes para que tengais una visión actual del uso de la IA desde vuestras apps! :)
Entendereis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.

Os animo a apovechar este momento y adelantaros a la competencia :wink:

Precio del webinar: 50 euros a pagar por PayPal a alinares@fivetechsoft.com. El pago será la confirmación del registro al webinar.

El importe obtenido de este webinar se destinará a hardware para entrenamientos IA. Gracias por vuestro apoyo!
]]>
alinares@fivetechsoft.com

Carlos Ladron de Guevara
Lima - Peru
Antonio Linares wrote: Wed Feb 05, 2025 4:55 am En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"

También veremos como usar Ollama cuando los datos sean confidenciales y no puedan enviarse a la web

Y en general revisaremos las opciones existentes para que tengais una visión actual del uso de la IA desde vuestras apps! :)
Entendereis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.

Os animo a apovechar este momento y adelantaros a la competencia :wink:

Precio del webinar: 50 euros a pagar por PayPal a alinares@fivetechsoft.com. El pago será la confirmación del registro al webinar.

El importe obtenido de este webinar se destinará a hardware para entrenamientos IA. Gracias por vuestro apoyo!
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-25T15:32:14-07:00 2025-02-25T15:32:14-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277941#p277941

Mañana comenzamos !!!]]>


Mañana comenzamos !!!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by leandro]]> 2025-02-25T15:46:24-07:00 2025-02-25T15:46:24-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277942#p277942 Resumen general actualizado 25 feb 2025 5:45 pm hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fechas confirmadas webinar: 26 y 27 de febrero de 2025 :D :D

Hora inicio capacitación por país
05:00 pm hora de España
01:00 pm hora de Argentina
01:00 pm hora de Chile
01:00 pm hora de Brasil
12:00 am hora de Bolivia
11:00 am hora de Colombia
11:00 am hora de Ecuador
11:00 am hora de Perú
10:00 am hora de Guatemala
10:00 am hora de México
08:00 am hora de Canadá
08:00 pm hora de Turquía


Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64 bits
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España
9- Víctor Manuel Tomás Díaz - México
10- Ertan Hakan Ozturk - Turquía
11- Heraclio Cruz Pacheco - México
12- Manuel Aranda Rosales - España
13- Sebastián Almirón - España
14- O(scar) - México
15- Ralph del Castillo - Perú
16- Oliveros Sm Junior - Brasil
17- Mario Alberto Davalos Aguilera - México
18- Osvaldo Ramirez - México
19- Hugo Theler - Argentina
20- Marco Augusto Rodríguez - México
21- Horacio Roldan - Estados Unidos
22- Fernando Patricio Espinoza Añazco - Ecuador
23- Otto Atzwanger Gesellschaft.m.b.H. - Austria

Participantes con pago webinar + actualización 64 bits
1- Verhoven Paz Bores - España

Participantes con pago webinar
1- Mauricio Arévalo - Colombia
2- Leandro Arévalo - Colombia
3- Ruben Dario Fernandez - Uruguay
4- Javier Parada - México
5- Luis Gonzaga Krause - Canadá
6- Juan Castillo Arteaga - México
7- Angel Monje - Chile
8- Franco Gamonal- Chile
9- Francisco Diaz- Chile
10- Youssef Jorge de Saráchaga - México
11- Gabriel Ornelas Mendoza - México
12- Ernesto Pinto - Colombia
13- Carlos Ladron de Guevara - Perú]]>
Resumen general actualizado 25 feb 2025 5:45 pm hora de Colombia

:arrow: Costo: 50 Euros solo webinar
:arrow: Costo: 90 Euros con la ultima versión de FW 32, que incluye las clases TOpenAI, TDeepSeek y TOLlama
:arrow: Costo: 100 Euros con la ultima versión de FW 32 y 64, que incluye las clases TOpenAI, TDeepSeek y TOLlama
Numero sesiones: por definir
Modalidad: Virtual
Idioma: Español con traducción en ingles
Medio comunicación: skype
Zona horaria: Preferiblemente Latinoamérica
Fechas confirmadas webinar: 26 y 27 de febrero de 2025 :D :D

Hora inicio capacitación por país
05:00 pm hora de España
01:00 pm hora de Argentina
01:00 pm hora de Chile
01:00 pm hora de Brasil
12:00 am hora de Bolivia
11:00 am hora de Colombia
11:00 am hora de Ecuador
11:00 am hora de Perú
10:00 am hora de Guatemala
10:00 am hora de México
08:00 am hora de Canadá
08:00 pm hora de Turquía


Temario:
1. Inteligencia Artificial: Descripción, tipos y modelos a usar con Harbour y xHarbour.
2. Clases TOpenAI y TDeepSeek. Explicación y ejemplos de uso.
3. Clase TOLlama: Uso de Inteligencia artificial de forma privada en red local desde Harbour y xHarbour. Explicación y ejemplos de uso.
4. Agentes IA: Explicación y construcción de Agentes IA con Harbour y xHarbour.
5. Ajuste de modelos IA con datos propios: SFT y RL para uso privado.

En los modelos locales (uso privado de datos) revisaremos y haremos ejemplos con Phi4 de Microsoft, Llama Visión de Meta, Qwen de Alibaba y DeepSeek

Temas
1. En el curso veremos como usar chatgpt y deepseek desde nuestras aplicaciones en Harbour + FWH creando potentes "Agentes IA"
2. También veremos como usar ollama cuando los datos sean confidenciales y no puedan enviarse a la web
3. En general revisaremos las opciones existentes para que tengáis una visión actual del uso de la IA desde vuestras apps! :) Entenderéis que ha supuesto la revolución tecnológica de DeepSeek y las implicaciones técnicas que ha generado.
4. La funcionalidad para generar consultas SQL desde lenguaje natural
5. Capacitación para respuestas o cálculos tributarios o laborales.
6. Otros usos para generar valores predictivos desde un objetivo financieros deseables vs comparado con datos actuales.
7. Durante el webinar, Antonio, nos va a explicar como crear un asistente contable, que pueda ayudarnos con el ingreso de información en nuestras aplicaciones.

Participantes con pago webinar + actualización 32 y 64 bits
1- Carlos Sincuir - Guatemala
2- Wuilmer Guerrero - Canadá
3- Enrique Vertiz Pitta - Perú
4- Juan Caro Saldivia - Chile
5- Alfredo Arteaga - México
6- Wilson Gamboa - Ecuador
7- Lautaro Moreira - Chile
8- Carlos Gelabert - España
9- Víctor Manuel Tomás Díaz - México
10- Ertan Hakan Ozturk - Turquía
11- Heraclio Cruz Pacheco - México
12- Manuel Aranda Rosales - España
13- Sebastián Almirón - España
14- O(scar) - México
15- Ralph del Castillo - Perú
16- Oliveros Sm Junior - Brasil
17- Mario Alberto Davalos Aguilera - México
18- Osvaldo Ramirez - México
19- Hugo Theler - Argentina
20- Marco Augusto Rodríguez - México
21- Horacio Roldan - Estados Unidos
22- Fernando Patricio Espinoza Añazco - Ecuador
23- Otto Atzwanger Gesellschaft.m.b.H. - Austria

Participantes con pago webinar + actualización 64 bits
1- Verhoven Paz Bores - España

Participantes con pago webinar
1- Mauricio Arévalo - Colombia
2- Leandro Arévalo - Colombia
3- Ruben Dario Fernandez - Uruguay
4- Javier Parada - México
5- Luis Gonzaga Krause - Canadá
6- Juan Castillo Arteaga - México
7- Angel Monje - Chile
8- Franco Gamonal- Chile
9- Francisco Diaz- Chile
10- Youssef Jorge de Saráchaga - México
11- Gabriel Ornelas Mendoza - México
12- Ernesto Pinto - Colombia
13- Carlos Ladron de Guevara - Perú]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by nanoespinoza]]> 2025-02-25T20:12:40-07:00 2025-02-25T20:12:40-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277944#p277944
Saludos

Fernando Espinoza A.]]>

Saludos

Fernando Espinoza A.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by jnavas]]> 2025-02-26T00:09:21-07:00 2025-02-26T00:09:21-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277947#p277947 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-26T03:29:58-07:00 2025-02-26T03:29:58-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277955#p277955
Revisa tu email]]>

Revisa tu email]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-26T03:30:36-07:00 2025-02-26T03:30:36-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277956#p277956 ]]> ]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-26T03:57:33-07:00 2025-02-26T03:57:33-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277957#p277957
Instalad Ollama desde aqui: https://ollama.com/download

desde una ventana cmd haced:
ollama pull phi4
ollama pull llama3.2-vision
ollama pull deepseek-r1:14b

Eso requiere unos 17 gigas de espacio en el disco duro. Si no teneis suficiente, instalad solo llama3.2-vision
lo ideal seria phi4 pero depende de la memoria RAM que tengais]]>

Instalad Ollama desde aqui: https://ollama.com/download

desde una ventana cmd haced:
ollama pull phi4
ollama pull llama3.2-vision
ollama pull deepseek-r1:14b

Eso requiere unos 17 gigas de espacio en el disco duro. Si no teneis suficiente, instalad solo llama3.2-vision
lo ideal seria phi4 pero depende de la memoria RAM que tengais]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Curso virtual implementación IA en nuestras aplicaciones :: Reply by Antonio Linares]]> 2025-02-26T03:59:45-07:00 2025-02-26T03:59:45-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=6&t=45373&p=277958#p277958
ollama run phi4 --verbose

Si no teneis RAM suficiente usad esto:

ollama run llama3.2-vision --verbose

Se sale de Ollama escribiendo /bye

Ollama se mantiene funcionando como un servicio en el ordenador]]>

ollama run phi4 --verbose

Si no teneis RAM suficiente usad esto:

ollama run llama3.2-vision --verbose

Se sale de Ollama escribiendo /bye

Ollama se mantiene funcionando como un servicio en el ordenador]]>
<![CDATA[mod_harbour :: Run samples mod_harbour (sessions) and others :: Author Itamar M. Lins Jr.]]> 2025-02-25T18:28:06-07:00 2025-02-25T18:28:06-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=46&t=45453&p=277943#p277943 I get this error, while run ../modharbour_samples/sessions/index.prg

Error: Can't open #include file 'fileio.ch'
called from: __PP_PROCESS, line: 0
called from: ../source/exec.prg, EXECUTE, line: 64

Source:
0062: lReturned := .T.
0063: elseif AP_PostPairs()[ "user" ] == "user02" .and. AP_PostPairs()[ "password" ] == "user02"
0064 => SessionStart()
0065: SetSessionByKey("user", "user02")
0066: SetSessionByKey("name", "Lisa Margaret")

How to change configuration this ?
The file fileio.ch found into ~/harbour/include
Other samples of mod_harbour works fine.

Best regards,
Itamar M. Lins Jr.]]>
I get this error, while run ../modharbour_samples/sessions/index.prg

Error: Can't open #include file 'fileio.ch'
called from: __PP_PROCESS, line: 0
called from: ../source/exec.prg, EXECUTE, line: 64

Source:
0062: lReturned := .T.
0063: elseif AP_PostPairs()[ "user" ] == "user02" .and. AP_PostPairs()[ "password" ] == "user02"
0064 => SessionStart()
0065: SetSessionByKey("user", "user02")
0066: SetSessionByKey("name", "Lisa Margaret")

How to change configuration this ?
The file fileio.ch found into ~/harbour/include
Other samples of mod_harbour works fine.

Best regards,
Itamar M. Lins Jr.]]>
<![CDATA[All products support :: Android program :: Author vinpug]]> 2025-01-27T10:22:34-07:00 2025-01-27T10:22:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45349&p=277227#p277227 Thank you.]]> Thank you.]]> <![CDATA[All products support :: Re: Android program :: Reply by Antonio Linares]]> 2025-01-27T23:54:19-07:00 2025-01-27T23:54:19-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45349&p=277238#p277238
https://carles9000.github.io/]]>

https://carles9000.github.io/]]>
<![CDATA[All products support :: Re: Android program :: Reply by FiveWiDi]]> 2025-01-28T09:59:17-07:00 2025-01-28T09:59:17-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45349&p=277247#p277247
Antonio Linares wrote: Tue Jan 28, 2025 6:54 am Write a web app using UT from Charly:

https://carles9000.github.io/
Pero el servidor debería ser Windows, verdad?]]>
Antonio Linares wrote: Tue Jan 28, 2025 6:54 am Write a web app using UT from Charly:

https://carles9000.github.io/
Pero el servidor debería ser Windows, verdad?]]>
<![CDATA[All products support :: Re: Android program :: Reply by Antonio Linares]]> 2025-01-28T10:02:41-07:00 2025-01-28T10:02:41-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45349&p=277248#p277248
Charly ya ha liberado todos los fuentes, asi que es cuestión de construirlo para Linux ó Apple OSX :)]]>

Charly ya ha liberado todos los fuentes, asi que es cuestión de construirlo para Linux ó Apple OSX :)]]>
<![CDATA[All products support :: Re: Android program :: Reply by vinpug]]> 2025-01-29T02:05:35-07:00 2025-01-29T02:05:35-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45349&p=277268#p277268 También me gustaría saber si hay algún contacto aquí en Italia para el producto que indicas.
Gracias.]]>
También me gustaría saber si hay algún contacto aquí en Italia para el producto que indicas.
Gracias.]]>
<![CDATA[All products support :: Re: Android program :: Reply by Antonio Linares]]> 2025-01-29T09:28:56-07:00 2025-01-29T09:28:56-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45349&p=277280#p277280 <![CDATA[All products support :: Re: Android program :: Reply by vinpug]]> 2025-01-30T02:25:02-07:00 2025-01-30T02:25:02-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45349&p=277294#p277294 <![CDATA[All products support :: Re: Android program :: Reply by Antonio Linares]]> 2025-01-30T10:49:54-07:00 2025-01-30T10:49:54-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45349&p=277306#p277306 carles9000@gmail.com]]> carles9000@gmail.com]]> <![CDATA[All products support :: Re: Android program :: Reply by vinpug]]> 2025-02-02T11:51:49-07:00 2025-02-02T11:51:49-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45349&p=277375#p277375 <![CDATA[All products support :: FTP :: Author vinpug]]> 2025-02-07T02:05:04-07:00 2025-02-07T02:05:04-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45386&p=277480#p277480 <![CDATA[All products support :: Re: FTP :: Reply by Antonio Linares]]> 2025-02-07T21:26:22-07:00 2025-02-07T21:26:22-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45386&p=277500#p277500 viewtopic.php?p=257813#p257813]]> viewtopic.php?p=257813#p257813]]> <![CDATA[All products support :: Invio posta elettronica (CDO) tramite server SMTP di gmail con il sistema di autenticazione oAuth2 :: Author mauri.menabue]]> 2025-02-09T05:53:56-07:00 2025-02-09T05:53:56-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45398&p=277548#p277548 Avrei bisogno di una mano per poter inviare da una mia applicazione FiveWin 32 bit delle e-mail
mediante l'uso di uno o più server SMTP gmail con la recente autenticazione oAuth2.
Sul forum inglese Antonio risponde però il codice fornito è pseudo codice fornito da deepseek e non
ho l'esperienza necessaria per trasformarlo in codice utilizzabile in produzione.
Grazie a tutti Maurizio Menabue]]>
Avrei bisogno di una mano per poter inviare da una mia applicazione FiveWin 32 bit delle e-mail
mediante l'uso di uno o più server SMTP gmail con la recente autenticazione oAuth2.
Sul forum inglese Antonio risponde però il codice fornito è pseudo codice fornito da deepseek e non
ho l'esperienza necessaria per trasformarlo in codice utilizzabile in produzione.
Grazie a tutti Maurizio Menabue]]>
<![CDATA[All products support :: Re: Invio posta elettronica (CDO) tramite server SMTP di gmail con il sistema di autenticazione oAuth2 :: Reply by Silvio.Falconi]]> 2025-02-14T06:12:19-07:00 2025-02-14T06:12:19-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45398&p=277668#p277668 <![CDATA[All products support :: Re: Invio posta elettronica (CDO) tramite server SMTP di gmail con il sistema di autenticazione oAuth2 :: Reply by Silvio.Falconi]]> 2025-02-14T06:26:26-07:00 2025-02-14T06:26:26-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45398&p=277669#p277669 <![CDATA[All products support :: Ricarico costo prodotti :: Author Silvio.Falconi]]> 2025-02-15T16:19:34-07:00 2025-02-15T16:19:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45423&p=277695#p277695
praticamente nPercentuale:= (((nRicavo-nCosto)) / nCosto)*100

se il costo di un prodotto è 0.55 e voglio venderlo a 2.50 il calcolo da me creato in fwh fa 354,55 mentre dovrebbe fare 354,44 o così mi dicono che deve fare controllato anche on line su alcuni siti web

allora la mia domanda è semplice c'è qualcosa in fwh che arrotonda le cifre decimali ?]]>

praticamente nPercentuale:= (((nRicavo-nCosto)) / nCosto)*100

se il costo di un prodotto è 0.55 e voglio venderlo a 2.50 il calcolo da me creato in fwh fa 354,55 mentre dovrebbe fare 354,44 o così mi dicono che deve fare controllato anche on line su alcuni siti web

allora la mia domanda è semplice c'è qualcosa in fwh che arrotonda le cifre decimali ?]]>
<![CDATA[All products support :: Re: Ricarico costo prodotti :: Reply by MarcoBoschi]]> 2025-02-16T01:42:41-07:00 2025-02-16T01:42:41-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45423&p=277697#p277697
dove hai trovato che deve fare 354,44? manda il link se sono calcoli online grazie]]>

dove hai trovato che deve fare 354,44? manda il link se sono calcoli online grazie]]>
<![CDATA[All products support :: Re: Ricarico costo prodotti :: Reply by Silvio.Falconi]]> 2025-02-16T10:16:51-07:00 2025-02-16T10:16:51-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45423&p=277700#p277700

e il sito è https://www.calcolopercentuale.it/calcolatore-ricarico/]]>


e il sito è https://www.calcolopercentuale.it/calcolatore-ricarico/]]>
<![CDATA[All products support :: carico moduli esterni :: Author Silvio.Falconi]]> 2025-02-17T00:54:31-07:00 2025-02-17T00:54:31-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45427&p=277708#p277708 Chiedo questo perchè rimordenizzando una vecchia procedura i file prg sono diventanti molti e grandi ed ogni volta per avere l'applicazione devo ricompilare tutti i file e le librerie , a me piacerebbe un sistema tipo il vecchio nostro clipper quando il Blinker acconsentiva di creare i file OVL]]> Chiedo questo perchè rimordenizzando una vecchia procedura i file prg sono diventanti molti e grandi ed ogni volta per avere l'applicazione devo ricompilare tutti i file e le librerie , a me piacerebbe un sistema tipo il vecchio nostro clipper quando il Blinker acconsentiva di creare i file OVL]]> <![CDATA[All products support :: Re: :: Reply by Silvio.Falconi]]> 2025-02-18T06:42:34-07:00 2025-02-18T06:42:34-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=10304&p=277735#p277735
pymsoft wrote: Wed Mar 12, 2008 1:00 pm Prova questa funzione:

Code: Select all | Expand

#define LOGPIXELSX         88

function DimFont()

   local hDC, nPixelX

   hDC     = CreateDC( "DISPLAY", "", "" )
   nPixelX = GetDeviceCaps( hDC, LOGPIXELSX )

   DeleteDC( hDC )

//   msginfo( nPixelX )

return nPixelX
scusa come potrei settare la grandezza dei font a seconda dello schermo

esempio

oFont := TFont():New( "TAHOMA", 0, 16,, )
oBold := TFont():New( "TAHOMA", 0, 14,,.t. )]]>
pymsoft wrote: Wed Mar 12, 2008 1:00 pm Prova questa funzione:

Code: Select all | Expand

#define LOGPIXELSX         88

function DimFont()

   local hDC, nPixelX

   hDC     = CreateDC( "DISPLAY", "", "" )
   nPixelX = GetDeviceCaps( hDC, LOGPIXELSX )

   DeleteDC( hDC )

//   msginfo( nPixelX )

return nPixelX
scusa come potrei settare la grandezza dei font a seconda dello schermo

esempio

oFont := TFont():New( "TAHOMA", 0, 16,, )
oBold := TFont():New( "TAHOMA", 0, 14,,.t. )]]>
<![CDATA[All products support :: Da forum inglese : Search someone help me :: Author mauri.menabue]]> 2025-02-18T03:33:19-07:00 2025-02-18T03:33:19-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45431&p=277733#p277733 vorrei porti alcune domande prima di provare a darti una mano sempre che io sia in grado.
1) Perchè pensi che sia un vantaggio per l'utente vedere tutto quel movimento del browse
e dei campi di filtro ? Non sarebbe più semplice impostare qualcosa di simile a questo
STATICO in modo da non distrarre l'attenzione dell'utente semmai trovando qualcosa
per far capire che il browse è cambiato a causa del filtro impostato ?
0
------------------------------------------------------------------------------------------------------- 1
| |2
| Browse |3
| |4 Altezza iniziale 7
| |5
| |6
--------------------------------------------------------------------------------------------------------7
F I L T R O 8
Città __________________________________________ 9
Stato __________________________________________ 10
Stato civile Tutti _ Spostati _ Nubili _ 11
Età Da _____ A ______ 12
Salario Da __________________ A __________________ 13
14
--------------------------- 15
| Esegui filtro | 16
--------------------------- 17
18
Siccome hai detto che i vari campi di ricerca devono essere collegati fra loro dall'operatore
.AND. puoi risolvere il problema che l'utente potrebbe cercare legando fra loro : 'Città' e
'Salario' campi esattamente all'inizio e alla fine del tuo form di filtro.

LOCAL cCitta AS CHARACTER
LOCAL cStato AS CHARACTER
LOCAL aStACiv AS ARRAY
LOCAL nEtaDa AS NUMERIC
LOCAL nEtaA AS NUMERIC
LOCAL nStiDa AS NUMERIC
LOCAL nStiA AS NUMERIC
LOCAL cAlias AS CHARACTER

*-------------------------------------------------------------------------------------------------------------------------------
*- Valori di default
*-------------------------------------------------------------------------------------------------------------------------------

cCitta := space(80)
cStato := space(40)
aStaCiv := { padr("TUTTI", 20), padr("SPOSATI",20), padr("NUBILI",20) }
nEtaDa := 0
nEtaA := 999
nStiDa := 0
nStiA := 999999,99

*-------------------------------------------------------------------------------------------------------------------------------
*- Filtro
*-------------------------------------------------------------------------------------------------------------------------------

Es. upper(alltrim( POPOLAZIONE->POP_CITTA ) $ upper(alltrim( cCitta)) .and. ;
POPOLAZIONE->POP_SALARIO >= nStiDa .and. ;
POPOLAZIONE->POP_SALARIO <= nStiA

Per l'utente sarebbe scomodo prima selezionare città poi salario.

2) Se invece desideri proseguire con l'idea iniziale si potrebbe impostare l'altezza del browse
in funzione della scelta effettutata il modo che il browse copra / scopra i vari campi di filtro

0
------------------------------------------------------------------------------------------------------- 1 |Posizione iniziale Top Browse
| |2 |
| Browse |3 |
| |4 | Altezza iniziale browse : 7
| |5 |
| |6 |
--------------------------------------------------------------------------------------------------------7 |
8
Città __________________________________________ 9 |Posizione iniziale dell'area di filtro Top : 9
Stato __________________________________________ 10 |
Stato civile Tutti _ Spostati _ Nubili _ 11 |Altezza Area filtro iniziale : 5
Età Da _____ A ______ 12 |
Salario Da __________________ A __________________ 13 |
14
Città_ Stato_ Stato civile_ Età_ Salario_ Reset Filtro_ 15
16

L'altezza dell'area filtro = al numero di scelte di filtro effettuate.

Es. scelta filtro su : Salario, Stato, Età ---> Altezza area filtro = 3
Altezza area browse = Altezza area iniziale browse + Altezza area filtro = 7 + 3 = 10
Posizione top area filtro = Posizione Top browse + Altezza browse + 1 = 1 + 10 + 1 = 12

Fammi sapere
Saluti Maurizio Menabue]]>
vorrei porti alcune domande prima di provare a darti una mano sempre che io sia in grado.
1) Perchè pensi che sia un vantaggio per l'utente vedere tutto quel movimento del browse
e dei campi di filtro ? Non sarebbe più semplice impostare qualcosa di simile a questo
STATICO in modo da non distrarre l'attenzione dell'utente semmai trovando qualcosa
per far capire che il browse è cambiato a causa del filtro impostato ?
0
------------------------------------------------------------------------------------------------------- 1
| |2
| Browse |3
| |4 Altezza iniziale 7
| |5
| |6
--------------------------------------------------------------------------------------------------------7
F I L T R O 8
Città __________________________________________ 9
Stato __________________________________________ 10
Stato civile Tutti _ Spostati _ Nubili _ 11
Età Da _____ A ______ 12
Salario Da __________________ A __________________ 13
14
--------------------------- 15
| Esegui filtro | 16
--------------------------- 17
18
Siccome hai detto che i vari campi di ricerca devono essere collegati fra loro dall'operatore
.AND. puoi risolvere il problema che l'utente potrebbe cercare legando fra loro : 'Città' e
'Salario' campi esattamente all'inizio e alla fine del tuo form di filtro.

LOCAL cCitta AS CHARACTER
LOCAL cStato AS CHARACTER
LOCAL aStACiv AS ARRAY
LOCAL nEtaDa AS NUMERIC
LOCAL nEtaA AS NUMERIC
LOCAL nStiDa AS NUMERIC
LOCAL nStiA AS NUMERIC
LOCAL cAlias AS CHARACTER

*-------------------------------------------------------------------------------------------------------------------------------
*- Valori di default
*-------------------------------------------------------------------------------------------------------------------------------

cCitta := space(80)
cStato := space(40)
aStaCiv := { padr("TUTTI", 20), padr("SPOSATI",20), padr("NUBILI",20) }
nEtaDa := 0
nEtaA := 999
nStiDa := 0
nStiA := 999999,99

*-------------------------------------------------------------------------------------------------------------------------------
*- Filtro
*-------------------------------------------------------------------------------------------------------------------------------

Es. upper(alltrim( POPOLAZIONE->POP_CITTA ) $ upper(alltrim( cCitta)) .and. ;
POPOLAZIONE->POP_SALARIO >= nStiDa .and. ;
POPOLAZIONE->POP_SALARIO <= nStiA

Per l'utente sarebbe scomodo prima selezionare città poi salario.

2) Se invece desideri proseguire con l'idea iniziale si potrebbe impostare l'altezza del browse
in funzione della scelta effettutata il modo che il browse copra / scopra i vari campi di filtro

0
------------------------------------------------------------------------------------------------------- 1 |Posizione iniziale Top Browse
| |2 |
| Browse |3 |
| |4 | Altezza iniziale browse : 7
| |5 |
| |6 |
--------------------------------------------------------------------------------------------------------7 |
8
Città __________________________________________ 9 |Posizione iniziale dell'area di filtro Top : 9
Stato __________________________________________ 10 |
Stato civile Tutti _ Spostati _ Nubili _ 11 |Altezza Area filtro iniziale : 5
Età Da _____ A ______ 12 |
Salario Da __________________ A __________________ 13 |
14
Città_ Stato_ Stato civile_ Età_ Salario_ Reset Filtro_ 15
16

L'altezza dell'area filtro = al numero di scelte di filtro effettuate.

Es. scelta filtro su : Salario, Stato, Età ---> Altezza area filtro = 3
Altezza area browse = Altezza area iniziale browse + Altezza area filtro = 7 + 3 = 10
Posizione top area filtro = Posizione Top browse + Altezza browse + 1 = 1 + 10 + 1 = 12

Fammi sapere
Saluti Maurizio Menabue]]>
<![CDATA[All products support :: Re: Da forum inglese : Search someone help me :: Reply by Silvio.Falconi]]> 2025-02-18T11:04:48-07:00 2025-02-18T11:04:48-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=20&t=45431&p=277740#p277740 <![CDATA[WhatsNew / Novedades :: Re: Latest Harbour and xHarbour builds :: Reply by Enrico Maria Giordano]]> 2025-02-16T04:55:20-07:00 2025-02-16T04:55:20-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=16&t=43878&p=277699#p277699
https://github.com/FiveTechSoft/harbour ... our_builds]]>

https://github.com/FiveTechSoft/harbour ... our_builds]]>
<![CDATA[WhatsNew / Novedades :: Re: Latest Harbour and xHarbour builds :: Reply by Antonio Linares]]> 2025-02-16T10:59:50-07:00 2025-02-16T10:59:50-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=16&t=43878&p=277701#p277701
Many thanks!]]>

Many thanks!]]>
<![CDATA[WhatsNew / Novedades :: Re: xHarbour.org updated! :: Reply by Enrico Maria Giordano]]> 2025-01-30T07:10:32-07:00 2025-01-30T07:10:32-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=16&t=33542&p=277296#p277296
"This domain name registration has expired and renewal or deletion are pending. If you are the registrant and want to renew the domain name, please contact your registration service provider."

Anybody knows how to contact Patrick Mast?]]>

"This domain name registration has expired and renewal or deletion are pending. If you are the registrant and want to renew the domain name, please contact your registration service provider."

Anybody knows how to contact Patrick Mast?]]>
<![CDATA[WhatsNew / Novedades :: Re: xHarbour.org updated! :: Reply by Antonio Linares]]> 2025-01-30T10:46:05-07:00 2025-01-30T10:46:05-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=16&t=33542&p=277304#p277304 patrick.Mast@WinFakt.com

email sent :)]]>
patrick.Mast@WinFakt.com

email sent :)]]>
<![CDATA[WhatsNew / Novedades :: Re: xHarbour.org updated! :: Reply by Enrico Maria Giordano]]> 2025-01-30T11:57:13-07:00 2025-01-30T11:57:13-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=16&t=33542&p=277311#p277311 <![CDATA[WhatsNew / Novedades :: Re: xHarbour.org updated! :: Reply by Enrico Maria Giordano]]> 2025-01-31T11:59:02-07:00 2025-01-31T11:59:02-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=16&t=33542&p=277347#p277347 ]]> ]]> <![CDATA[WhatsNew / Novedades :: Re: xHarbour.org updated! :: Reply by Antonio Linares]]> 2025-01-31T13:38:54-07:00 2025-01-31T13:38:54-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=16&t=33542&p=277350#p277350 https://xharbour.org/]]> https://xharbour.org/]]> <![CDATA[WhatsNew / Novedades :: Re: xHarbour.org updated! :: Reply by Enrico Maria Giordano]]> 2025-02-10T02:44:18-07:00 2025-02-10T02:44:18-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=16&t=33542&p=277563#p277563 <![CDATA[WhatsNew / Novedades :: Re: xHarbour.org updated! :: Reply by Enrico Maria Giordano]]> 2025-02-10T09:25:20-07:00 2025-02-10T09:25:20-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=16&t=33542&p=277568#p277568
https://github.com/FiveTechSoft/harbour ... our_builds]]>

https://github.com/FiveTechSoft/harbour ... our_builds]]>
<![CDATA[WhatsNew / Novedades :: Re: xHarbour.org updated! :: Reply by Enrico Maria Giordano]]> 2025-02-20T03:00:49-07:00 2025-02-20T03:00:49-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=16&t=33542&p=277784#p277784
https://github.com/FiveTechSoft/harbour ... our_builds]]>

https://github.com/FiveTechSoft/harbour ... our_builds]]>
<![CDATA[WhatsNew / Novedades :: New FTDN January/Enero 2025 (FWH 25.01) :: Author Antonio Linares]]> 2025-02-19T01:08:39-07:00 2025-02-19T01:08:39-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=16&t=45432&p=277746#p277746 =====================================

* New: FWH for xHarbour64 and MSVC64 is already available. Please review
samples\buildxh64.bat. Please keep in mind that the used FiveHC64.lib is
the same one as used by Harbour 64 and MSVC64 for simplicity.

* Enhancement: warnings removed from samples\olebrow.prg

* New: samples\fastreport\main.prg shows FastReport with CreateObject + events.

* New: samples\qrcode2.prg new example for creting QR codes.

* fix: Toolbar.prg: accented chars are not displayed
properly in tooltips (from 2310) fixed.

* Enhanced multi-monitor support:
ACTIVATE WINDOW/DIALOG [CENTERED] IN onMonitor
onMontior can be number of the monitor or monitor object.

* Enhanced: While defining BUTTONBAR in a dialog
clauses TOP/LEFT/BOTTO/RIGHT work now.

* New: Class TRating and samples\testrat1.prg, samples\testrat2.prg and samples\testrat3.prg
A very nice class created by Silvio Falconi!

* New: samples\webchart2.prg shows how to use Class TWebView2 to display a Google bars chart.

* Fix: FWMariaConnection CreateTable(): Fixed runtime error (due
to a bug introduced in 24.04) when the structure contains a
field type "=" (current timestamp)

* New: Class TOpenAI with Vision API support. Please review samples/openai1.prg and openai2.prg

* Enhancement: function SourceEdit( @cSource ) behaves as modal when there is no a defined main
window.

* Enhancement: function Execute() uses TRY CATCH END now.

* New: Class TDeepSeek and samples/deepseek1.prg. AI DeepSeek is as powerfull as OpenAI
and much cheaper.

* New: samples/agentdb.prg shows how to create an AI Agent using SQL that allows us to talk
to any database using natural language!

* Fix: TWebView2.prg: Fix to method End() by setting ::hWebView to nil instead
of 0 to avoid run time error when creating a new TWebView2() instance after
ending an instance.

* Fix: XBrowse: Flickering due to repainting row when single click on the same
active cell. fixed

* New: Class TOllama to use any LLM locally. Please review samples\ollama1.prg,
samples\ollama2.prg, samples\ollama3.prg, samples\ollama4.prg and samples\ollama5.prg

To start the local ollama server, after installing ollama please do:
ollama run phi4

* dialog.prg: Fixed issues of painting checkbox on themed and
transparent dialogs.
viewtopic.php?t=45368

* New: Class TGemini to use Google AI Gemini from our Harbour/xHarbour apps.
Please review samples\gemini1.prg, gemini2.prg, gemini3.prg

* New: Agents AI examples. Please review samples\buildit.prg, samples\agentdb.prg and
samples\agentdoc2.prg]]>
=====================================

* New: FWH for xHarbour64 and MSVC64 is already available. Please review
samples\buildxh64.bat. Please keep in mind that the used FiveHC64.lib is
the same one as used by Harbour 64 and MSVC64 for simplicity.

* Enhancement: warnings removed from samples\olebrow.prg

* New: samples\fastreport\main.prg shows FastReport with CreateObject + events.

* New: samples\qrcode2.prg new example for creting QR codes.

* fix: Toolbar.prg: accented chars are not displayed
properly in tooltips (from 2310) fixed.

* Enhanced multi-monitor support:
ACTIVATE WINDOW/DIALOG [CENTERED] IN onMonitor
onMontior can be number of the monitor or monitor object.

* Enhanced: While defining BUTTONBAR in a dialog
clauses TOP/LEFT/BOTTO/RIGHT work now.

* New: Class TRating and samples\testrat1.prg, samples\testrat2.prg and samples\testrat3.prg
A very nice class created by Silvio Falconi!

* New: samples\webchart2.prg shows how to use Class TWebView2 to display a Google bars chart.

* Fix: FWMariaConnection CreateTable(): Fixed runtime error (due
to a bug introduced in 24.04) when the structure contains a
field type "=" (current timestamp)

* New: Class TOpenAI with Vision API support. Please review samples/openai1.prg and openai2.prg

* Enhancement: function SourceEdit( @cSource ) behaves as modal when there is no a defined main
window.

* Enhancement: function Execute() uses TRY CATCH END now.

* New: Class TDeepSeek and samples/deepseek1.prg. AI DeepSeek is as powerfull as OpenAI
and much cheaper.

* New: samples/agentdb.prg shows how to create an AI Agent using SQL that allows us to talk
to any database using natural language!

* Fix: TWebView2.prg: Fix to method End() by setting ::hWebView to nil instead
of 0 to avoid run time error when creating a new TWebView2() instance after
ending an instance.

* Fix: XBrowse: Flickering due to repainting row when single click on the same
active cell. fixed

* New: Class TOllama to use any LLM locally. Please review samples\ollama1.prg,
samples\ollama2.prg, samples\ollama3.prg, samples\ollama4.prg and samples\ollama5.prg

To start the local ollama server, after installing ollama please do:
ollama run phi4

* dialog.prg: Fixed issues of painting checkbox on themed and
transparent dialogs.
viewtopic.php?t=45368

* New: Class TGemini to use Google AI Gemini from our Harbour/xHarbour apps.
Please review samples\gemini1.prg, gemini2.prg, gemini3.prg

* New: Agents AI examples. Please review samples\buildit.prg, samples\agentdb.prg and
samples\agentdoc2.prg]]>
<![CDATA[WhatsNew / Novedades :: Re: New FTDN January/Enero 2025 (FWH 25.01) :: Reply by Antonio Linares]]> 2025-02-22T02:51:03-07:00 2025-02-22T02:51:03-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=16&t=45432&p=277863#p277863 =====================================

* Nueva: FWH64 para xHarbour64 y MSVC64 ya disponible. Por favor, revisa
el fichero bat samples\buildxh64.bat. Por favor, ten en cuenta que la libería
FiveHC64.lib usada es la misma que se usa con Harbour64 y MSVC64 por simplicidad.

* Mejora: Se han eliminado los mensajes de advertencia en samples\olebrow.prg.

* Nueva: El ejemplo samples\fastreport\main.prg muestra como utilizar CreateObject
más eventos en FastReport.

* Nueva: Ejemplo samples\qrcode2.prg para la creación de códigos QR.

* Corrección: Se ha solucionado el problema de los caracteres acentuados que no se
mostraban correctamente en los "tooltips" desde la versión 23.10.

* Mejora: Soporte de varios monitores.
ACTIVATE WINDOW/DIALOG [CENTERED] IN onMonitor
oMonitor puede ser el número del monitor o el objeto monitor.

* Mejora: Al definir un BUTTONBAR en un diálogo funcionan las cláusulas TOP/LEFT/BOTTO/RIGHT.

* Nueva: Clase TRating creada por Silvio Falconi !!!
Puedes ver ejemplos de uso en los siguientes ejemplos: samples\testrat1.prg,
samples\testrat2.prg y samples\testrat3.prg.

* Nueva: Ejemplo samples\webchart2.prg muestra como usar la clase TWebView2 para mostrar
los gráficos de barras de Google.

* Corrección: En la función CreateTable() de FWMariaConnection.
Se ha solucionado un error en tiempo de ejecución (debido a un error introducido en la
versión 24.04) cuando la estructura contiene un campo de tipo "=" (current timestamp).

* Nueva: Clase TOpenAI con soporte de la API Visión. Por favor, revisa los ejemplos:
samples/openai1.prg y samples/openai2.prg.

* Mejora: La función SourceEdit( @cSource ) se comporta como modal cuando no hay una ventana
principal definida.

* Mejora: La función Execute() ahora usa TRY CATCH END.

* Nueva: Clase TDeepSeek.
Puedes encontrar un ejemplo de uso en simples/deepseek1.prg.
AI DeepSeek es tan potente como OpenAI y mucho más barata.

* Nuevo: Ejemplo simples/agentdb.prg.
Muestra cómo crear un agente de inteligencia artificial utilizando SQL que nos permite hablar
con cualquier base de datos usando lenguaje natural.

* Corrección: En TWebView2.prg.
Corrección del método End() estableciendo ::hWebView a nil en lugar de 0 para evitar un error
en tiempo de ejecución al crear una nueva instancia TWebView2() después de finalizar una instancia.

* Corrección: XBrowse.
Se ha solucionado el parpadeo debido al repintado de la fila al hacer clic en la misma celda activa.

* Nueva: Clase TOllama.
Para usar cualquier LLM (modelo de lenguaje de gran tamaño) localmente.
Por favor, revisa los ejemplos samples\ollama1.prg, samples\ollama2.prg, samples\ollama3.prg,
samples\ollama4.prg y samples\ollama5.prg.

Para iniciar el servidor local de ollama, después de instalar ollama por favor, ejecuta: ollama run phi4.

* Corrección: dialog.prg.
Corregidos los problemas de pintado de checkbox en diálogos con temas y transparentes.
viewtopic.php?t=45368

* Nueva: Clase TGemini.
Nos dota de la capacidad de usar la inteligencia artifial Gemini de Google en nuestras aplicaciones
Harbour/xHarbour.
Por favor, revisa los ejemplos samples\gemini1.prg, gemini2.prg, gemini3.prg.

* Nuevo: Ejemplos de agentes de inteligencia artifical.
Por favor, revisa los ejemplos samples\buildit.prg, samples\agentdb.prg y samples\agentdoc2.prg.]]>
=====================================

* Nueva: FWH64 para xHarbour64 y MSVC64 ya disponible. Por favor, revisa
el fichero bat samples\buildxh64.bat. Por favor, ten en cuenta que la libería
FiveHC64.lib usada es la misma que se usa con Harbour64 y MSVC64 por simplicidad.

* Mejora: Se han eliminado los mensajes de advertencia en samples\olebrow.prg.

* Nueva: El ejemplo samples\fastreport\main.prg muestra como utilizar CreateObject
más eventos en FastReport.

* Nueva: Ejemplo samples\qrcode2.prg para la creación de códigos QR.

* Corrección: Se ha solucionado el problema de los caracteres acentuados que no se
mostraban correctamente en los "tooltips" desde la versión 23.10.

* Mejora: Soporte de varios monitores.
ACTIVATE WINDOW/DIALOG [CENTERED] IN onMonitor
oMonitor puede ser el número del monitor o el objeto monitor.

* Mejora: Al definir un BUTTONBAR en un diálogo funcionan las cláusulas TOP/LEFT/BOTTO/RIGHT.

* Nueva: Clase TRating creada por Silvio Falconi !!!
Puedes ver ejemplos de uso en los siguientes ejemplos: samples\testrat1.prg,
samples\testrat2.prg y samples\testrat3.prg.

* Nueva: Ejemplo samples\webchart2.prg muestra como usar la clase TWebView2 para mostrar
los gráficos de barras de Google.

* Corrección: En la función CreateTable() de FWMariaConnection.
Se ha solucionado un error en tiempo de ejecución (debido a un error introducido en la
versión 24.04) cuando la estructura contiene un campo de tipo "=" (current timestamp).

* Nueva: Clase TOpenAI con soporte de la API Visión. Por favor, revisa los ejemplos:
samples/openai1.prg y samples/openai2.prg.

* Mejora: La función SourceEdit( @cSource ) se comporta como modal cuando no hay una ventana
principal definida.

* Mejora: La función Execute() ahora usa TRY CATCH END.

* Nueva: Clase TDeepSeek.
Puedes encontrar un ejemplo de uso en simples/deepseek1.prg.
AI DeepSeek es tan potente como OpenAI y mucho más barata.

* Nuevo: Ejemplo simples/agentdb.prg.
Muestra cómo crear un agente de inteligencia artificial utilizando SQL que nos permite hablar
con cualquier base de datos usando lenguaje natural.

* Corrección: En TWebView2.prg.
Corrección del método End() estableciendo ::hWebView a nil en lugar de 0 para evitar un error
en tiempo de ejecución al crear una nueva instancia TWebView2() después de finalizar una instancia.

* Corrección: XBrowse.
Se ha solucionado el parpadeo debido al repintado de la fila al hacer clic en la misma celda activa.

* Nueva: Clase TOllama.
Para usar cualquier LLM (modelo de lenguaje de gran tamaño) localmente.
Por favor, revisa los ejemplos samples\ollama1.prg, samples\ollama2.prg, samples\ollama3.prg,
samples\ollama4.prg y samples\ollama5.prg.

Para iniciar el servidor local de ollama, después de instalar ollama por favor, ejecuta: ollama run phi4.

* Corrección: dialog.prg.
Corregidos los problemas de pintado de checkbox en diálogos con temas y transparentes.
viewtopic.php?t=45368

* Nueva: Clase TGemini.
Nos dota de la capacidad de usar la inteligencia artifial Gemini de Google en nuestras aplicaciones
Harbour/xHarbour.
Por favor, revisa los ejemplos samples\gemini1.prg, gemini2.prg, gemini3.prg.

* Nuevo: Ejemplos de agentes de inteligencia artifical.
Por favor, revisa los ejemplos samples\buildit.prg, samples\agentdb.prg y samples\agentdoc2.prg.]]>
<![CDATA[Off Topic / Otros temas :: VERIFACTU, criterios, dudas 07/02/2025 :: Reply by FiveWiDi]]> 2025-02-06T16:18:25-07:00 2025-02-06T16:18:25-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=19&t=45082&p=277474#p277474
Necesito opiniones al respecto de cuando se debe anular un registro Verifactu. En que situaciones está justificado. Que criterios se deben seguir. Que entienden Ustedes que Hacienda acepta como 'normal/aceptable' el anular un registro Verifactu. Y si se anula el registro, se puede reutilizar el número de factura?

¿Me echan una mano?

Muchas gracias,]]>

Necesito opiniones al respecto de cuando se debe anular un registro Verifactu. En que situaciones está justificado. Que criterios se deben seguir. Que entienden Ustedes que Hacienda acepta como 'normal/aceptable' el anular un registro Verifactu. Y si se anula el registro, se puede reutilizar el número de factura?

¿Me echan una mano?

Muchas gracias,]]>
<![CDATA[Off Topic / Otros temas :: Possible using AI to manipulate data in dbf? :: Author hua]]> 2025-02-06T20:35:35-07:00 2025-02-06T20:35:35-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=19&t=45384&p=277475#p277475 So we can say "list me records where the date is such and such" or "delete record in a.dbf where field customer is not found in b.dbf"

It's just a thought that crosses my mind while writing a data patching routine :)]]>
So we can say "list me records where the date is such and such" or "delete record in a.dbf where field customer is not found in b.dbf"

It's just a thought that crosses my mind while writing a data patching routine :)]]>
<![CDATA[Off Topic / Otros temas :: Re: Possible using AI to manipulate data in dbf? :: Reply by Antonio Linares]]> 2025-02-06T23:55:46-07:00 2025-02-06T23:55:46-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=19&t=45384&p=277478#p277478
We will review this in the webinar we have announced:

viewtopic.php?p=277473#p277473]]>

We will review this in the webinar we have announced:

viewtopic.php?p=277473#p277473]]>
<![CDATA[Artificial Intelligence :: Aprendizaje por Refuerzo :: Author VikthorThomas]]> 2025-02-13T11:38:45-07:00 2025-02-13T11:38:45-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=38&t=45414&p=277649#p277649
Además del aprendizaje supervisado y no supervisado hay otro tipo de aprendizaje llamado "Aprendizaje por Refuerzo". ( RL - Por sus siglas en inglés , Reinforcement Learning ).

El objetivo de RL es obtener conocimiento en el tiempo mediante la prueba y el error. Al día de hoy hay muchos algoritmos que aplican RL para resolver problemás que involucren aprendizaje.

Les dejo el siguiente enlace https://web.stanford.edu/class/psych209 ... k2ndEd.pdf del libro "Reinforcement Learning: An introduction" de Sutton y Barto.]]>

Además del aprendizaje supervisado y no supervisado hay otro tipo de aprendizaje llamado "Aprendizaje por Refuerzo". ( RL - Por sus siglas en inglés , Reinforcement Learning ).

El objetivo de RL es obtener conocimiento en el tiempo mediante la prueba y el error. Al día de hoy hay muchos algoritmos que aplican RL para resolver problemás que involucren aprendizaje.

Les dejo el siguiente enlace https://web.stanford.edu/class/psych209 ... k2ndEd.pdf del libro "Reinforcement Learning: An introduction" de Sutton y Barto.]]>
<![CDATA[Artificial Intelligence :: Re: Aprendizaje por Refuerzo :: Reply by ramirezosvaldo2]]> 2025-02-14T08:52:22-07:00 2025-02-14T08:52:22-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=38&t=45414&p=277673#p277673 <![CDATA[Artificial Intelligence :: Re: Aprendizaje por Refuerzo :: Reply by Vikthor]]> 2025-02-14T14:56:15-07:00 2025-02-14T15:13:22-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=38&t=45414&p=277685#p277685 ]]> ]]> <![CDATA[Artificial Intelligence :: Re: Aprendizaje por Refuerzo :: Reply by Vikthor]]> 2025-02-14T15:12:43-07:00 2025-02-14T15:12:43-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=38&t=45414&p=277686#p277686
  • Aston Zhang et al. Dive into Deep Learning, 2021
    https://d2l.ai/index.html
  • ]]>
  • Aston Zhang et al. Dive into Deep Learning, 2021
    https://d2l.ai/index.html
  • ]]>
    <![CDATA[Artificial Intelligence examples :: Ollama + vision :: Author Antonio Linares]]> 2025-02-06T04:27:56-07:00 2025-02-06T04:27:56-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=40&t=45383&p=277466#p277466 https://ollama.com/blog/llama3.2-vision
    ollama run llama3.2-vision

    Code: Select all | Expand

    // Vision example
    
    #include "FiveWin.ch"
    
    function Main()
    
        local oChat := TOLlama():New( "llama3.2-vision" )
    
        oChat:SendImage( "c:/fwh/bitmaps/pngs/pan_setting.png" )
        fw_memoEdit( oChat:GetValue() )
    
        oChat:End()
    
    return nil  
    ]]>
    https://ollama.com/blog/llama3.2-vision
    ollama run llama3.2-vision

    Code: Select all | Expand

    // Vision example
    
    #include "FiveWin.ch"
    
    function Main()
    
        local oChat := TOLlama():New( "llama3.2-vision" )
    
        oChat:SendImage( "c:/fwh/bitmaps/pngs/pan_setting.png" )
        fw_memoEdit( oChat:GetValue() )
    
        oChat:End()
    
    return nil  
    ]]>
    <![CDATA[Artificial Intelligence examples :: Re: Ollama + vision :: Reply by Antonio Linares]]> 2025-02-07T00:37:49-07:00 2025-02-07T00:37:49-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=40&t=45383&p=277479#p277479
    Image]]>

    Image]]>
    <![CDATA[Artificial Intelligence examples :: Class TGemini to use Google Gemini AI :: Author Antonio Linares]]> 2025-02-13T01:34:32-07:00 2025-02-13T01:34:32-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=40&t=45412&p=277636#p277636

    Code: Select all | Expand

    // Get your API key from https://aistudio.google.com
    
    #include "FiveWin.ch"
    #include "c:\harbour\contrib\hbcurl\hbcurl.ch"
    
    //----------------------------------------------------------------------------//
    
    CLASS TGemini
        
        DATA   cKey   INIT ""
        DATA   cModel INIT "gemini-2.0-flash"
        DATA   cResponse
        DATA   cUrl
        DATA   hCurl
        DATA   nError INIT 0
        DATA   nHttpCode INIT 0
        DATA   nTemperature INIT 0
    
        METHOD New( cKey, cModel )
        METHOD Send( cPrompt )    
        METHOD End()    
        METHOD GetValue()    
    
    ENDCLASS        
    
    //----------------------------------------------------------------------------//
    
    METHOD New( cKey, cModel ) CLASS TGemini
    
        if Empty( cKey )
           ::cKey = GetEnv( "GEMINI_API_KEY" )
        else
           ::cKey = cKey   
        endif
    
        if ! Empty( cModel )
           ::cModel = cModel
        endif
        
        ::cUrl = "https://generativelanguage.googleapis.com/v1beta/models"
        ::hCurl = curl_easy_init()
        
    return Self    
    
    //----------------------------------------------------------------------------//
    
    METHOD End() CLASS TGemini
    
        curl_easy_cleanup( ::hCurl )
        ::hCurl = nil
    
    return nil    
    
    //----------------------------------------------------------------------------//
    
    METHOD GetValue() CLASS TGemini
    
       local uValue := hb_jsonDecode( ::cResponse )
    
       TRY 
          uValue = uValue[ "candidates" ][ 1 ][ "content" ][ "parts" ][ 1 ][ "text" ]
       CATCH
          uValue = uValue[ "error" ][ "message" ]
       END   
    
    return uValue
    
    //----------------------------------------------------------------------------//
    
    METHOD Send( cPrompt ) CLASS TGemini 
    
       local aHeaders, cJson, hRequest, hContents := { => }, hGenerationConfig
    
       curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, .T. )
       curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cUrl + "/" + ::cModel + ":generateContent?key=" + ::cKey )
    
       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_DL_BUFF_SETUP )
       curl_easy_setopt( ::hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
    
       hContents[ "role" ]  = "user"
       hContents[ "parts" ] = { { "text" => cPrompt } }
       hGenerationConfig = { "temperature" => ::nTemperature,;
                             "topK" => 40, "topP" => 0.95, "maxOutputTokens" => 8192,;
                             "responseMimeType" => "text/plain" }  
       hRequest = { "contents" => hContents, "generationConfig" => hGenerationConfig }
    
       cJson = hb_jsonEncode( hRequest )
       curl_easy_setopt( ::hCurl, HB_CURLOPT_POSTFIELDS, cJson )
       ::nError = curl_easy_perform( ::hCurl )
       curl_easy_getinfo( ::hCurl, HB_CURLINFO_RESPONSE_CODE, @::nHttpCode )
    
       if ::nError == HB_CURLE_OK
          ::cResponse = curl_easy_dl_buff_get( ::hCurl )
       else
          ::cResponse := "Error code " + Str( ::nError )
       endif
        
    return ::cResponse
    
    //----------------------------------------------------------------------------//
    gemini1.prg

    Code: Select all | Expand

    // Get your API key from https://aistudio.google.com
    // from cmd: set GEMINI_API_KEY=your_api_key
    
    #include "FiveWin.ch"
    
    //----------------------------------------------------------------------------//
    
    function Main()
    
       local oChat := TGemini():New()
    
       oChat:Send( "cuantas 'r's hay en 'strawberry' ?" )
       ? oChat:GetValue() 
    
       oChat:End()
    
    return nil   
    
    //----------------------------------------------------------------------------//
    ]]>

    Code: Select all | Expand

    // Get your API key from https://aistudio.google.com
    
    #include "FiveWin.ch"
    #include "c:\harbour\contrib\hbcurl\hbcurl.ch"
    
    //----------------------------------------------------------------------------//
    
    CLASS TGemini
        
        DATA   cKey   INIT ""
        DATA   cModel INIT "gemini-2.0-flash"
        DATA   cResponse
        DATA   cUrl
        DATA   hCurl
        DATA   nError INIT 0
        DATA   nHttpCode INIT 0
        DATA   nTemperature INIT 0
    
        METHOD New( cKey, cModel )
        METHOD Send( cPrompt )    
        METHOD End()    
        METHOD GetValue()    
    
    ENDCLASS        
    
    //----------------------------------------------------------------------------//
    
    METHOD New( cKey, cModel ) CLASS TGemini
    
        if Empty( cKey )
           ::cKey = GetEnv( "GEMINI_API_KEY" )
        else
           ::cKey = cKey   
        endif
    
        if ! Empty( cModel )
           ::cModel = cModel
        endif
        
        ::cUrl = "https://generativelanguage.googleapis.com/v1beta/models"
        ::hCurl = curl_easy_init()
        
    return Self    
    
    //----------------------------------------------------------------------------//
    
    METHOD End() CLASS TGemini
    
        curl_easy_cleanup( ::hCurl )
        ::hCurl = nil
    
    return nil    
    
    //----------------------------------------------------------------------------//
    
    METHOD GetValue() CLASS TGemini
    
       local uValue := hb_jsonDecode( ::cResponse )
    
       TRY 
          uValue = uValue[ "candidates" ][ 1 ][ "content" ][ "parts" ][ 1 ][ "text" ]
       CATCH
          uValue = uValue[ "error" ][ "message" ]
       END   
    
    return uValue
    
    //----------------------------------------------------------------------------//
    
    METHOD Send( cPrompt ) CLASS TGemini 
    
       local aHeaders, cJson, hRequest, hContents := { => }, hGenerationConfig
    
       curl_easy_setopt( ::hCurl, HB_CURLOPT_POST, .T. )
       curl_easy_setopt( ::hCurl, HB_CURLOPT_URL, ::cUrl + "/" + ::cModel + ":generateContent?key=" + ::cKey )
    
       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_DL_BUFF_SETUP )
       curl_easy_setopt( ::hCurl, HB_CURLOPT_SSL_VERIFYPEER, .F. )
    
       hContents[ "role" ]  = "user"
       hContents[ "parts" ] = { { "text" => cPrompt } }
       hGenerationConfig = { "temperature" => ::nTemperature,;
                             "topK" => 40, "topP" => 0.95, "maxOutputTokens" => 8192,;
                             "responseMimeType" => "text/plain" }  
       hRequest = { "contents" => hContents, "generationConfig" => hGenerationConfig }
    
       cJson = hb_jsonEncode( hRequest )
       curl_easy_setopt( ::hCurl, HB_CURLOPT_POSTFIELDS, cJson )
       ::nError = curl_easy_perform( ::hCurl )
       curl_easy_getinfo( ::hCurl, HB_CURLINFO_RESPONSE_CODE, @::nHttpCode )
    
       if ::nError == HB_CURLE_OK
          ::cResponse = curl_easy_dl_buff_get( ::hCurl )
       else
          ::cResponse := "Error code " + Str( ::nError )
       endif
        
    return ::cResponse
    
    //----------------------------------------------------------------------------//
    gemini1.prg

    Code: Select all | Expand

    // Get your API key from https://aistudio.google.com
    // from cmd: set GEMINI_API_KEY=your_api_key
    
    #include "FiveWin.ch"
    
    //----------------------------------------------------------------------------//
    
    function Main()
    
       local oChat := TGemini():New()
    
       oChat:Send( "cuantas 'r's hay en 'strawberry' ?" )
       ? oChat:GetValue() 
    
       oChat:End()
    
    return nil   
    
    //----------------------------------------------------------------------------//
    ]]>
    <![CDATA[Artificial Intelligence examples :: Re: Class TGemini to use Google Gemini AI :: Reply by quim_]]> 2025-02-17T03:22:46-07:00 2025-02-17T03:22:46-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=40&t=45412&p=277709#p277709
    Qué forma tan sencilla y bonita de conectar nuestro 'pequeño' mundo harbour con la IA, almenos esta IA convesacional

    Despues de algunos problemas con CURL, instalando la ultima version proporcionada por Enrico Maria Giordano (Grazie mille!) he compilado sin más problemas

    Veo que a la pregunta : cuantas 'r's hay en 'strawberry' ? contesta que sólo 1, supongo que rr se considera un token aparte

    Ahora toca investigar un poco lo que ofrece la API, he visto que se pueden subir archivos de video o PDF y mantener un chat 'razonable'

    Gracias de nuevo !]]>

    Qué forma tan sencilla y bonita de conectar nuestro 'pequeño' mundo harbour con la IA, almenos esta IA convesacional

    Despues de algunos problemas con CURL, instalando la ultima version proporcionada por Enrico Maria Giordano (Grazie mille!) he compilado sin más problemas

    Veo que a la pregunta : cuantas 'r's hay en 'strawberry' ? contesta que sólo 1, supongo que rr se considera un token aparte

    Ahora toca investigar un poco lo que ofrece la API, he visto que se pueden subir archivos de video o PDF y mantener un chat 'razonable'

    Gracias de nuevo !]]>
    <![CDATA[Artificial Intelligence examples :: Re: Class TGemini to use Google Gemini AI :: Reply by Antonio Linares]]> 2025-02-17T04:01:09-07:00 2025-02-17T04:01:09-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=40&t=45412&p=277710#p277710
    Disponemos ya de una Clase TGemini actualizada que permite enviar imágenes y PDFs. Ahora estamos generalizándola para que admita muchos mas tipos de ficheros, incluidos videos.

    Además le falta el ir reportando token a token, algo que ya tenemos en las Clases TOpenAI, TDeepSeek y TOllama, para que el usuario vea como se va escribiendo la salida poco a poco.

    Todo esto lo veremos en el webinar de IA con Harbour/xHarbour los dias 26 y 27 de este mismo mes de Febrero :)]]>

    Disponemos ya de una Clase TGemini actualizada que permite enviar imágenes y PDFs. Ahora estamos generalizándola para que admita muchos mas tipos de ficheros, incluidos videos.

    Además le falta el ir reportando token a token, algo que ya tenemos en las Clases TOpenAI, TDeepSeek y TOllama, para que el usuario vea como se va escribiendo la salida poco a poco.

    Todo esto lo veremos en el webinar de IA con Harbour/xHarbour los dias 26 y 27 de este mismo mes de Febrero :)]]>
    <![CDATA[Artificial Intelligence examples :: Re: Class TGemini to use Google Gemini AI :: Reply by quim_]]> 2025-02-17T05:33:05-07:00 2025-02-17T05:33:05-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=40&t=45412&p=277711#p277711
    Veo si puedo tener el tiempo y la tranquilidad para poder asistir al evento, seguiré el hilo creado a tal efecto

    Mis primeras pruebas con esta IA, parece que no guarda el contexto ( o no sé como decirle que lo guarde)


    > Conoces el lenguaje de programacion harbour ?

    Code: Select all | Expand

    Sí, conozco Harbour.  Es un lenguaje de programación de propósito general, un dialecto de xBase,  que es compatible con la mayoría del código Clipper.  Se caracteriza por ser:
    
    * **Open source:**  Su código fuente está disponible públicamente.
    * **Multiplataforma:**  Puede compilarse para diferentes sistemas operativos, incluyendo Windows, Linux, macOS y otros.
    * **Orientado a bases de datos:**  Aunque puede usarse para otras tareas, su fortaleza reside en el desarrollo de aplicaciones que interactúan con bases de datos, especialmente aquellas compatibles con el formato DBF (dBase).
    * **Compilado:**  A diferencia de lenguajes interpretados, Harbour genera código ejecutable, lo que resulta en aplicaciones más rápidas.
    * **Compatible con Clipper:**  Gran parte del código escrito en Clipper puede ser compilado con Harbour con mínimas o ninguna modificación.  Esto facilita la migración de aplicaciones antiguas.
    
    Sin embargo, es importante destacar que Harbour no es tan popular como otros lenguajes de programación modernos.  Su comunidad es más pequeña y la documentación puede ser menos extensa que la de lenguajes como Java, Python o C#.  Su uso se centra principalmente en la migración y mantenimiento de aplicaciones legacy basadas en xBase.
    
    > Un ejemplo en codigo ?

    Code: Select all | Expand

    Para darte un ejemplo de código, necesito saber qué tipo de código quieres.  Por favor, especifica:
    
    * **Lenguaje de programación:** (ej. Python, JavaScript, C++, Java, etc.)
    * **Propósito del código:** ¿Qué debería hacer el código? (ej. calcular el factorial de un número, imprimir "Hola, mundo!", leer un archivo, etc.)
    * **Nivel de complejidad:** ¿Algo simple o algo más avanzado?
    
    Una vez que me des esta información, podré proporcionarte un ejemplo de código relevante.
    
    
    ]]>

    Veo si puedo tener el tiempo y la tranquilidad para poder asistir al evento, seguiré el hilo creado a tal efecto

    Mis primeras pruebas con esta IA, parece que no guarda el contexto ( o no sé como decirle que lo guarde)


    > Conoces el lenguaje de programacion harbour ?

    Code: Select all | Expand

    Sí, conozco Harbour.  Es un lenguaje de programación de propósito general, un dialecto de xBase,  que es compatible con la mayoría del código Clipper.  Se caracteriza por ser:
    
    * **Open source:**  Su código fuente está disponible públicamente.
    * **Multiplataforma:**  Puede compilarse para diferentes sistemas operativos, incluyendo Windows, Linux, macOS y otros.
    * **Orientado a bases de datos:**  Aunque puede usarse para otras tareas, su fortaleza reside en el desarrollo de aplicaciones que interactúan con bases de datos, especialmente aquellas compatibles con el formato DBF (dBase).
    * **Compilado:**  A diferencia de lenguajes interpretados, Harbour genera código ejecutable, lo que resulta en aplicaciones más rápidas.
    * **Compatible con Clipper:**  Gran parte del código escrito en Clipper puede ser compilado con Harbour con mínimas o ninguna modificación.  Esto facilita la migración de aplicaciones antiguas.
    
    Sin embargo, es importante destacar que Harbour no es tan popular como otros lenguajes de programación modernos.  Su comunidad es más pequeña y la documentación puede ser menos extensa que la de lenguajes como Java, Python o C#.  Su uso se centra principalmente en la migración y mantenimiento de aplicaciones legacy basadas en xBase.
    
    > Un ejemplo en codigo ?

    Code: Select all | Expand

    Para darte un ejemplo de código, necesito saber qué tipo de código quieres.  Por favor, especifica:
    
    * **Lenguaje de programación:** (ej. Python, JavaScript, C++, Java, etc.)
    * **Propósito del código:** ¿Qué debería hacer el código? (ej. calcular el factorial de un número, imprimir "Hola, mundo!", leer un archivo, etc.)
    * **Nivel de complejidad:** ¿Algo simple o algo más avanzado?
    
    Una vez que me des esta información, podré proporcionarte un ejemplo de código relevante.
    
    
    ]]>
    <![CDATA[Artificial Intelligence examples :: Re: Class TGemini to use Google Gemini AI :: Reply by Antonio Linares]]> 2025-02-17T07:07:59-07:00 2025-02-17T07:07:59-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=40&t=45412&p=277718#p277718 ]]> ]]> <![CDATA[Artificial Intelligence examples :: Re: CLASS Transformer :: Reply by Antonio Linares]]> 2025-02-20T01:03:08-07:00 2025-02-20T01:03:08-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=40&t=45296&p=277773#p277773 HB_MATRIXMULTIPLY: Multiplies two matrices—perfect for Q * K^T, Scores * V, and feed-forward layers.
    Input: Two Harbour arrays (matrices).
    Output: Resulting matrix (rows1 x cols2).
    Use: Replaces our manual matrix multiplication loops.

    HB_MATRIXSCALE: Scales a matrix by a factor—ideal for normalizing attention scores (e.g., 1 / √d_k).
    Input: Matrix, scalar.
    Output: Scaled matrix.
    Use: Simplifies scaling operations.

    HB_MATRIXDIV: Divides a matrix by a scalar—could tweak normalization or gradients.
    Input: Matrix, scalar.
    Output: Divided matrix.
    Use: Alternative to scaling for inverse operations if needed.

    HB_MATRIXTRANSPOSE: Transposes a matrix—crucial for K^T in attention.
    Input: Matrix.
    Output: Transposed matrix (cols x rows).
    Use: Replaces our transpose loops.

    HB_MATRIXZERO: Creates a zero-filled matrix—great for initializing gradients or outputs.
    Input: Rows, cols.
    Output: Zero matrix.
    Use: Cleaner initialization than Array() with loops.

    HB_MATRIXRANDOM: Creates a matrix with random values (0-1)—perfect for weight initialization.
    Input: Rows, cols.
    Output: Random matrix.
    Use: Replaces hb_random() loops in New().

    HB_SOFTMAX: Applies softmax row-wise—exactly what we need for attention scores.
    Input: Matrix.
    Output: Softmax-normalized matrix.
    Use: Replaces our manual softmax calculation.

    HB_MATRIXSUBSTRACT: Subtracts matrices element-wise—handy for gradients.
    Input: Two matrices.
    Output: Difference matrix.
    Use: Simplifies gradient updates.

    HB_MATRIXSUM: Sums all elements—useful for loss or debugging.
    Input: Matrix.
    Output: Scalar sum.
    Use: Could enhance ComputeLoss]]>
    HB_MATRIXMULTIPLY: Multiplies two matrices—perfect for Q * K^T, Scores * V, and feed-forward layers.
    Input: Two Harbour arrays (matrices).
    Output: Resulting matrix (rows1 x cols2).
    Use: Replaces our manual matrix multiplication loops.

    HB_MATRIXSCALE: Scales a matrix by a factor—ideal for normalizing attention scores (e.g., 1 / √d_k).
    Input: Matrix, scalar.
    Output: Scaled matrix.
    Use: Simplifies scaling operations.

    HB_MATRIXDIV: Divides a matrix by a scalar—could tweak normalization or gradients.
    Input: Matrix, scalar.
    Output: Divided matrix.
    Use: Alternative to scaling for inverse operations if needed.

    HB_MATRIXTRANSPOSE: Transposes a matrix—crucial for K^T in attention.
    Input: Matrix.
    Output: Transposed matrix (cols x rows).
    Use: Replaces our transpose loops.

    HB_MATRIXZERO: Creates a zero-filled matrix—great for initializing gradients or outputs.
    Input: Rows, cols.
    Output: Zero matrix.
    Use: Cleaner initialization than Array() with loops.

    HB_MATRIXRANDOM: Creates a matrix with random values (0-1)—perfect for weight initialization.
    Input: Rows, cols.
    Output: Random matrix.
    Use: Replaces hb_random() loops in New().

    HB_SOFTMAX: Applies softmax row-wise—exactly what we need for attention scores.
    Input: Matrix.
    Output: Softmax-normalized matrix.
    Use: Replaces our manual softmax calculation.

    HB_MATRIXSUBSTRACT: Subtracts matrices element-wise—handy for gradients.
    Input: Two matrices.
    Output: Difference matrix.
    Use: Simplifies gradient updates.

    HB_MATRIXSUM: Sums all elements—useful for loss or debugging.
    Input: Matrix.
    Output: Scalar sum.
    Use: Could enhance ComputeLoss]]>
    <![CDATA[Artificial Intelligence examples :: Re: CLASS Transformer :: Reply by Antonio Linares]]> 2025-02-20T01:06:09-07:00 2025-02-20T01:06:09-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=40&t=45296&p=277774#p277774 Initialization: New() uses HB_MATRIXRANDOM() for weights and HB_MATRIXZERO() for gradients, scaling random values to match our original -0.1 to 0.1 range.

    Attention: SelfAttention() leverages HB_MATRIXMULTIPLY, HB_MATRIXTRANSPOSE, HB_MATRIXSCALE, and HB_SOFTMAX for efficiency.

    Feed-Forward: FeedForward() uses HB_MATRIXMULTIPLY, keeping the ReLU loop in Harbour (could be a future C function!).

    Backprop: Fully uses HB_MATRIXMULTIPLY, HB_MATRIXTRANSPOSE, HB_MATRIXSCALE, and HB_MATRIXSUM (replacing addition with subtraction via scaling where needed).]]>
    Initialization: New() uses HB_MATRIXRANDOM() for weights and HB_MATRIXZERO() for gradients, scaling random values to match our original -0.1 to 0.1 range.

    Attention: SelfAttention() leverages HB_MATRIXMULTIPLY, HB_MATRIXTRANSPOSE, HB_MATRIXSCALE, and HB_SOFTMAX for efficiency.

    Feed-Forward: FeedForward() uses HB_MATRIXMULTIPLY, keeping the ReLU loop in Harbour (could be a future C function!).

    Backprop: Fully uses HB_MATRIXMULTIPLY, HB_MATRIXTRANSPOSE, HB_MATRIXSCALE, and HB_MATRIXSUM (replacing addition with subtraction via scaling where needed).]]>
    <![CDATA[Artificial Intelligence examples :: Re: CLASS Transformer :: Reply by Antonio Linares]]> 2025-02-20T01:12:02-07:00 2025-02-20T01:12:02-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=40&t=45296&p=277775#p277775

    Code: Select all | Expand

    HB_FUNC( HB_MATRIXADD )
    {
       PHB_ITEM pMatrix1 = hb_param( 1, HB_IT_ARRAY ); // Primera matriz
       PHB_ITEM pMatrix2 = hb_param( 2, HB_IT_ARRAY ); // Segunda matriz
    
       if( pMatrix1 && pMatrix2 )
       {
          HB_SIZE nRows1 = hb_arrayLen( pMatrix1 );
          HB_SIZE nRows2 = hb_arrayLen( pMatrix2 );
    
          if( nRows1 == nRows2 && nRows1 > 0 )
          {
             HB_SIZE nCols1 = hb_arrayLen( hb_arrayGetItemPtr( pMatrix1, 1 ) );
             HB_SIZE nCols2 = hb_arrayLen( hb_arrayGetItemPtr( pMatrix2, 1 ) );
    
             if( nCols1 == nCols2 && nCols1 > 0 )
             {
                HB_SIZE i, j;
                PHB_ITEM pMatrixResult = hb_itemArrayNew( nRows1 );
    
                for( i = 0; i < nRows1; i++ )
                {
                   PHB_ITEM pRow1 = hb_arrayGetItemPtr( pMatrix1, i + 1 );
                   PHB_ITEM pRow2 = hb_arrayGetItemPtr( pMatrix2, i + 1 );
                   PHB_ITEM pRowResult = hb_itemArrayNew( nCols1 );
    
                   for( j = 0; j < nCols1; j++ )
                   {
                      double value1 = hb_arrayGetND( pRow1, j + 1 );
                      double value2 = hb_arrayGetND( pRow2, j + 1 );
                      hb_arraySetND( pRowResult, j + 1, value1 + value2 ); // Addition instead of subtraction
                   }
    
                   hb_arraySet( pMatrixResult, i + 1, pRowResult );
                   hb_itemRelease( pRowResult );
                }
    
                hb_itemReturnRelease( pMatrixResult );
             }
             else
             {
                hb_errRT_BASE( EG_ARG, 3012, "Column dimensions do not match", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
             }
          }
          else
          {
             hb_errRT_BASE( EG_ARG, 3012, "Row dimensions do not match", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
          }
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, "Invalid parameters", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    ]]>

    Code: Select all | Expand

    HB_FUNC( HB_MATRIXADD )
    {
       PHB_ITEM pMatrix1 = hb_param( 1, HB_IT_ARRAY ); // Primera matriz
       PHB_ITEM pMatrix2 = hb_param( 2, HB_IT_ARRAY ); // Segunda matriz
    
       if( pMatrix1 && pMatrix2 )
       {
          HB_SIZE nRows1 = hb_arrayLen( pMatrix1 );
          HB_SIZE nRows2 = hb_arrayLen( pMatrix2 );
    
          if( nRows1 == nRows2 && nRows1 > 0 )
          {
             HB_SIZE nCols1 = hb_arrayLen( hb_arrayGetItemPtr( pMatrix1, 1 ) );
             HB_SIZE nCols2 = hb_arrayLen( hb_arrayGetItemPtr( pMatrix2, 1 ) );
    
             if( nCols1 == nCols2 && nCols1 > 0 )
             {
                HB_SIZE i, j;
                PHB_ITEM pMatrixResult = hb_itemArrayNew( nRows1 );
    
                for( i = 0; i < nRows1; i++ )
                {
                   PHB_ITEM pRow1 = hb_arrayGetItemPtr( pMatrix1, i + 1 );
                   PHB_ITEM pRow2 = hb_arrayGetItemPtr( pMatrix2, i + 1 );
                   PHB_ITEM pRowResult = hb_itemArrayNew( nCols1 );
    
                   for( j = 0; j < nCols1; j++ )
                   {
                      double value1 = hb_arrayGetND( pRow1, j + 1 );
                      double value2 = hb_arrayGetND( pRow2, j + 1 );
                      hb_arraySetND( pRowResult, j + 1, value1 + value2 ); // Addition instead of subtraction
                   }
    
                   hb_arraySet( pMatrixResult, i + 1, pRowResult );
                   hb_itemRelease( pRowResult );
                }
    
                hb_itemReturnRelease( pMatrixResult );
             }
             else
             {
                hb_errRT_BASE( EG_ARG, 3012, "Column dimensions do not match", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
             }
          }
          else
          {
             hb_errRT_BASE( EG_ARG, 3012, "Row dimensions do not match", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
          }
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, "Invalid parameters", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    ]]>
    <![CDATA[Artificial Intelligence examples :: Re: CLASS Transformer :: Reply by Antonio Linares]]> 2025-02-20T01:12:50-07:00 2025-02-20T01:12:50-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=40&t=45296&p=277776#p277776

    Code: Select all | Expand

    HB_FUNC( HB_MATRIXRANDOM )
    {
       HB_SIZE nRows = hb_parns( 1 );
       HB_SIZE nCols = hb_parns( 2 );
    
       if( nRows > 0 && nCols > 0 )
       {
          HB_SIZE i, j;
          PHB_ITEM pMatrix = hb_itemArrayNew( nRows );
    
          for( i = 0; i < nRows; i++ )
          {
             PHB_ITEM pRow = hb_itemArrayNew( nCols );
             for( j = 0; j < nCols; j++ )
             {
                double randomValue = ((double)rand() / RAND_MAX - 0.5) / 5; // -0.1 to 0.1
                hb_arraySetND( pRow, j + 1, randomValue );
             }
             hb_arraySet( pMatrix, i + 1, pRow );
             hb_itemRelease( pRow );
          }
    
          hb_itemReturnRelease( pMatrix );
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    ]]>

    Code: Select all | Expand

    HB_FUNC( HB_MATRIXRANDOM )
    {
       HB_SIZE nRows = hb_parns( 1 );
       HB_SIZE nCols = hb_parns( 2 );
    
       if( nRows > 0 && nCols > 0 )
       {
          HB_SIZE i, j;
          PHB_ITEM pMatrix = hb_itemArrayNew( nRows );
    
          for( i = 0; i < nRows; i++ )
          {
             PHB_ITEM pRow = hb_itemArrayNew( nCols );
             for( j = 0; j < nCols; j++ )
             {
                double randomValue = ((double)rand() / RAND_MAX - 0.5) / 5; // -0.1 to 0.1
                hb_arraySetND( pRow, j + 1, randomValue );
             }
             hb_arraySet( pMatrix, i + 1, pRow );
             hb_itemRelease( pRow );
          }
    
          hb_itemReturnRelease( pMatrix );
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    ]]>
    <![CDATA[Artificial Intelligence examples :: thoughts.prg transformer :: Author Antonio Linares]]> 2025-02-20T15:46:59-07:00 2025-02-20T15:46:59-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=40&t=45441&p=277808#p277808
    to build it:
    samples\build.bat thoughts

    thoughts.prg

    Code: Select all | Expand

    #include "hbclass.ch"
    
    FUNCTION Main()
       LOCAL oTransformer, aInput, aTarget, nLoss, aReplay, nThoughtId, aRetrieved, cCommand, i, j, aThoughts := {}, cQuestion, cAnswer, cPrompt
       oTransformer := ThoughtBackupTransformer():New(4, 4, 10)
       ? "Thought Backup System Started. Commands: ADD, RETRIEVE, QUERY, EXIT"
       aInput := TokenizeThought("i feel happy cause talking to you")
       aTarget := Array(7, 4)
       ACopy(aInput, aTarget)
       FOR i := 1 TO 7
          FOR j := 1 TO 4
             aTarget[i][j] += hb_random(0, 0.1)
          NEXT
       NEXT
       ? "Training: 'I feel happy cause talking to you'"
       FOR i := 1 TO 50  // Increased from 10 to 50
          nLoss := oTransformer:Train(aInput, aTarget)
          ? "Iteration", i, "Loss:", nLoss
          aReplay := oTransformer:Forward(aInput)
          ? "Sample Output:", aReplay[1][1], aReplay[1][2], aReplay[1][3], aReplay[1][4]
       NEXT
       aReplay := oTransformer:Replay(aInput)
       nThoughtId := oTransformer:StoreThought(aReplay, "I feel happy cause talking to you")
       ? "Stored with ID:", nThoughtId
       AAdd(aThoughts, nThoughtId)
       aInput := TokenizeThought("you make me smile")
       aTarget := Array(4, 4)
       ACopy(aInput, aTarget)
       FOR i := 1 TO 4
          FOR j := 1 TO 4
             aTarget[i][j] += hb_random(0, 0.1)
          NEXT
       NEXT
       ? "Training: 'you make me smile'"
       FOR i := 1 TO 50  // Increased from 10 to 50
          nLoss := oTransformer:Train(aInput, aTarget)
          ? "Iteration", i, "Loss:", nLoss
          aReplay := oTransformer:Forward(aInput)
          ? "Sample Output:", aReplay[1][1], aReplay[1][2], aReplay[1][3], aReplay[1][4]
       NEXT
       aReplay := oTransformer:Replay(aInput)
       nThoughtId := oTransformer:StoreThought(aReplay, "you make me smile")
       ? "Stored with ID:", nThoughtId
       AAdd(aThoughts, nThoughtId)
       WHILE .T.
          cCommand := Upper(AllTrim(GetInput("Enter command: ")))
          DO CASE
             CASE cCommand == "ADD"
                cQuestion := GetInput("Enter question (or thought): ")
                cAnswer := GetInput("Enter answer (or same as question): ")
                aInput := TokenizeThought(cQuestion)
                IF Empty(cAnswer)
                   aTarget := AClone(aInput)  // Use input as target if answer is empty
                ELSE
                   aTarget := TokenizeThought(cAnswer)
                ENDIF
                cPrompt := cQuestion
                FOR i := 1 TO 50  // Increased from 10 to 50
                   nLoss := oTransformer:Train(aInput, aTarget)
                   ? "Training iteration", i, "Loss:", nLoss
                NEXT
                aReplay := oTransformer:Replay(aInput)
                nThoughtId := oTransformer:StoreThought(aReplay, cPrompt)
                ? "Thought stored with ID:", nThoughtId
                AAdd(aThoughts, nThoughtId)
             CASE cCommand == "RETRIEVE"
                IF Len(aThoughts) == 0
                   ? "No thoughts stored."
                ELSE
                   nThoughtId := Val(GetInput("Enter thought ID to retrieve: "))
                   aRetrieved := oTransformer:RetrieveThought(nThoughtId)
                   IF aRetrieved != NIL
                      ? "Retrieved thought (Prompt:", aRetrieved[2], "):"
                      FOR i := 1 TO Len(aRetrieved[1])
                         ? "Part", i, ":"
                         FOR j := 1 TO 4
                            ?? aRetrieved[1][i][j], " "
                         NEXT
                      NEXT
                   ELSE
                      ? "Thought not found."
                   ENDIF
                ENDIF
             CASE cCommand == "QUERY"
                cQuestion := GetInput("Enter question: ")
                ? "Answer:", oTransformer:QueryThought(cQuestion)
             CASE cCommand == "EXIT"
                EXIT
             OTHERWISE
                ? "Unknown command. Use ADD, RETRIEVE, QUERY, or EXIT."
          ENDCASE
       END
       oTransformer:Destroy()
       ? "System Closed."
       RETURN NIL
    
    CLASS ThoughtBackupTransformer
       DATA nInputSize
       DATA nFFHidden
       DATA aWeightsQ
       DATA aWeightsK
       DATA aWeightsV
       DATA aWeightsFF1
       DATA aWeightsFF2
       DATA aGradQ
       DATA aGradK
       DATA aGradV
       DATA aGradFF1
       DATA aGradFF2
       DATA aLastInput
       DATA aLastQ
       DATA aLastK
       DATA aLastV
       DATA aLastScores
       DATA aLastAttention
       DATA nLearningRate
       DATA aPosEnc
       DATA nMaxSeqLen
       METHOD New(nInputSize, nFFHidden, nMaxSeqLen) CONSTRUCTOR
       METHOD Destroy()
       METHOD SelfAttention(aInput)
       METHOD FeedForward(aInput)
       METHOD Forward(aInput)
       METHOD ComputeLoss(aOutput, aTarget)
       METHOD Backprop(aOutput, aTarget)
       METHOD Train(aInput, aTarget)
       METHOD InitPositionalEncoding()
       METHOD Replay(aPartialInput)
       METHOD StoreThought(aThought, cPrompt)
       METHOD RetrieveThought(nId)
       METHOD QueryThought(cQuestion)
    ENDCLASS
    
    METHOD New(nInputSize, nFFHidden, nMaxSeqLen) CLASS ThoughtBackupTransformer
       LOCAL i, j
       ::nInputSize := nInputSize
       ::nFFHidden := nFFHidden
       ::nLearningRate := 0.01  // Kept at 0.01, can test 0.02 if needed
       ::nMaxSeqLen := nMaxSeqLen
       ::aWeightsQ := HB_MATRIXRANDOM(::nInputSize, ::nInputSize)
       ::aWeightsK := HB_MATRIXRANDOM(::nInputSize, ::nInputSize)
       ::aWeightsV := HB_MATRIXRANDOM(::nInputSize, ::nInputSize)
       ::aGradQ := HB_MATRIXZERO(::nInputSize, ::nInputSize)
       ::aGradK := HB_MATRIXZERO(::nInputSize, ::nInputSize)
       ::aGradV := HB_MATRIXZERO(::nInputSize, ::nInputSize)
       FOR i := 1 TO ::nInputSize
          FOR j := 1 TO ::nInputSize
             ::aWeightsQ[i][j] := (hb_random(0, 1) - 0.5) * Sqrt(2.0 / ::nInputSize)
             ::aWeightsK[i][j] := (hb_random(0, 1) - 0.5) * Sqrt(2.0 / ::nInputSize)
             ::aWeightsV[i][j] := (hb_random(0, 1) - 0.5) * Sqrt(2.0 / ::nInputSize)
          NEXT
       NEXT
       ::aWeightsFF1 := HB_MATRIXRANDOM(::nInputSize, ::nFFHidden)
       ::aWeightsFF2 := HB_MATRIXRANDOM(::nFFHidden, ::nInputSize)
       ::aGradFF1 := HB_MATRIXZERO(::nInputSize, ::nFFHidden)
       ::aGradFF2 := HB_MATRIXZERO(::nFFHidden, ::nInputSize)
       FOR i := 1 TO ::nInputSize
          FOR j := 1 TO ::nFFHidden
             ::aWeightsFF1[i][j] := (hb_random(0, 1) - 0.5) * Sqrt(2.0 / ::nInputSize)
          NEXT
       NEXT
       FOR i := 1 TO ::nFFHidden
          FOR j := 1 TO ::nInputSize
             ::aWeightsFF2[i][j] := (hb_random(0, 1) - 0.5) * Sqrt(2.0 / ::nFFHidden)
          NEXT
       NEXT
       ::InitPositionalEncoding()
       IF !File("thoughts.dbf")
          dbCreate("thoughts.dbf", {;
             {"ID", "N", 10, 0},;
             {"SEQNUM", "N", 3, 0},;
             {"TIMESTAMP", "D", 8, 0},;
             {"PROMPT", "C", 50, 0},;
             {"THOUGHT1", "N", 12, 6},;
             {"THOUGHT2", "N", 12, 6},;
             {"THOUGHT3", "N", 12, 6},;
             {"THOUGHT4", "N", 12, 6}})
       ENDIF
       RETURN Self
    
    METHOD Destroy() CLASS ThoughtBackupTransformer
       ::aWeightsQ := NIL
       ::aWeightsK := NIL
       ::aWeightsV := NIL
       ::aWeightsFF1 := NIL
       ::aWeightsFF2 := NIL
       ::aGradQ := NIL
       ::aGradK := NIL
       ::aGradV := NIL
       ::aGradFF1 := NIL
       ::aGradFF2 := NIL
       ::aLastInput := NIL
       ::aLastQ := NIL
       ::aLastK := NIL
       ::aLastV := NIL
       ::aLastScores := NIL
       ::aLastAttention := NIL
       ::aPosEnc := NIL
       RETURN NIL
    
    METHOD SelfAttention(aInput) CLASS ThoughtBackupTransformer
       LOCAL nSeqLen, aQ, aK, aV, aScores, aAttention, aTempK
       nSeqLen := Len(aInput)
       ::aLastInput := AClone(aInput)
       aQ := HB_MATRIXMULTIPLY(aInput, ::aWeightsQ)
       aK := HB_MATRIXMULTIPLY(aInput, ::aWeightsK)
       aV := HB_MATRIXMULTIPLY(aInput, ::aWeightsV)
       ::aLastQ := aQ
       ::aLastK := aK
       ::aLastV := aV
       aTempK := HB_MATRIXTRANSPOSE(aK)
       aScores := HB_MATRIXMULTIPLY(aQ, aTempK)
       aScores := HB_MATRIXSCALE(aScores, 1 / Sqrt(::nInputSize))
       aScores := HB_SOFTMAX(aScores)
       ::aLastScores := aScores
       ? "Attention Scores Sample:", aScores[1][1], aScores[1][2], aScores[1][3], aScores[1][4]
       aAttention := HB_MATRIXMULTIPLY(aScores, aV)
       ::aLastAttention := aAttention
       RETURN aAttention
    
    METHOD FeedForward(aInput) CLASS ThoughtBackupTransformer
       LOCAL aHidden, aOutput, i, j, nSeqLen
       nSeqLen := Len(aInput)
       aHidden := HB_MATRIXMULTIPLY(aInput, ::aWeightsFF1)
       aOutput := HB_MATRIXMULTIPLY(aHidden, ::aWeightsFF2)
       RETURN aOutput
    
    METHOD Forward(aInput) CLASS ThoughtBackupTransformer
       LOCAL nSeqLen, aInputWithPE, i, j, aAttention
       nSeqLen := Len(aInput)
       IF nSeqLen > ::nMaxSeqLen
          ? "Error: Input sequence length exceeds max sequence length"
          RETURN NIL
       ENDIF
       aInputWithPE := AClone(aInput)
       FOR i := 1 TO nSeqLen
          FOR j := 1 TO ::nInputSize
             aInputWithPE[i][j] += ::aPosEnc[i][j]
          NEXT
       NEXT
       ::aLastInput := aInputWithPE
       aAttention := ::SelfAttention(aInputWithPE)
       RETURN ::FeedForward(aAttention)
    
    METHOD ComputeLoss(aOutput, aTarget) CLASS ThoughtBackupTransformer
       LOCAL nLoss := 0, i, j, nSeqLen
       nSeqLen := Len(aOutput)
       FOR i := 1 TO nSeqLen
          FOR j := 1 TO ::nInputSize
             nLoss += (aOutput[i][j] - aTarget[i][j])^2
          NEXT
       NEXT
       RETURN nLoss / (nSeqLen * ::nInputSize)
    
    METHOD Backprop(aOutput, aTarget) CLASS ThoughtBackupTransformer
       LOCAL aGradOutput, aGradHidden, aGradAttention, aTemp, nSeqLen, i, j, aTempK, aTempScores
       LOCAL nGradNorm, nLearningRateAdjust, nMaxGrad := 2.0
       nSeqLen := Len(aOutput)
    
       aGradOutput := Array(nSeqLen, ::nInputSize)
       FOR i := 1 TO nSeqLen
          FOR j := 1 TO ::nInputSize
             aGradOutput[i][j] := 2 * (aOutput[i][j] - aTarget[i][j])
          NEXT
       NEXT
       ? "aGradOutput Sample:", aGradOutput[1][1], aGradOutput[1][2], aGradOutput[1][3], aGradOutput[1][4]
    
       aTemp := HB_MATRIXTRANSPOSE(::aWeightsFF2)
       aGradHidden := HB_MATRIXMULTIPLY(aGradOutput, aTemp)
       ? "aGradHidden Sample:", aGradHidden[1][1], aGradHidden[1][2], aGradHidden[1][3], aGradHidden[1][4]
    
       aTemp := HB_MATRIXTRANSPOSE(::aWeightsFF1)
       aGradAttention := HB_MATRIXMULTIPLY(aGradHidden, aTemp)
       ? "aGradAttention Sample:", aGradAttention[1][1], aGradAttention[1][2], aGradAttention[1][3], aGradAttention[1][4]
    
       aTemp := HB_MATRIXTRANSPOSE(::aLastAttention)
       ::aGradFF1 := HB_MATRIXMULTIPLY(aTemp, aGradHidden)
       aTemp := HB_MATRIXTRANSPOSE(aGradHidden)
       ::aGradFF2 := HB_MATRIXMULTIPLY(aTemp, aGradOutput)
    
       aTemp := HB_MATRIXTRANSPOSE(::aLastV)
       aTempScores := HB_MATRIXMULTIPLY(aGradAttention, aTemp)
       FOR i := 1 TO nSeqLen
          FOR j := 1 TO nSeqLen
             aTempScores[i][j] := ::aLastScores[i][j] * (1 - ::aLastScores[i][j]) * aTempScores[i][j]
          NEXT
       NEXT
    
       aTemp := HB_MATRIXTRANSPOSE(::aLastInput)
       ::aGradQ := HB_MATRIXMULTIPLY(aTemp, HB_MATRIXMULTIPLY(aTempScores, ::aLastQ))
       ::aGradK := HB_MATRIXMULTIPLY(aTemp, HB_MATRIXMULTIPLY(aTempScores, ::aLastK))
       ::aGradV := HB_MATRIXMULTIPLY(HB_MATRIXTRANSPOSE(::aLastScores), aGradAttention)
       ::aGradV := HB_MATRIXMULTIPLY(aTemp, ::aGradV)
    
       // Gradient clipping
       FOR i := 1 TO ::nInputSize
          FOR j := 1 TO ::nInputSize
             ::aGradQ[i][j] := Max(Min(::aGradQ[i][j], nMaxGrad), -nMaxGrad)
             ::aGradK[i][j] := Max(Min(::aGradK[i][j], nMaxGrad), -nMaxGrad)
             ::aGradV[i][j] := Max(Min(::aGradV[i][j], nMaxGrad), -nMaxGrad)
          NEXT
       NEXT
       FOR i := 1 TO ::nInputSize
          FOR j := 1 TO ::nFFHidden
             ::aGradFF1[i][j] := Max(Min(::aGradFF1[i][j], nMaxGrad), -nMaxGrad)
          NEXT
       NEXT
       FOR i := 1 TO ::nFFHidden
          FOR j := 1 TO ::nInputSize
             ::aGradFF2[i][j] := Max(Min(::aGradFF2[i][j], nMaxGrad), -nMaxGrad)
          NEXT
       NEXT
    
       // Compute adaptive learning rate, minimum set to 0.8
       nGradNorm := Sqrt(HB_MATRIXSUM(HB_MATRIXMULTIPLY(::aGradQ, HB_MATRIXTRANSPOSE(::aGradQ)))) + ;
                    Sqrt(HB_MATRIXSUM(HB_MATRIXMULTIPLY(::aGradK, HB_MATRIXTRANSPOSE(::aGradK)))) + ;
                    Sqrt(HB_MATRIXSUM(HB_MATRIXMULTIPLY(::aGradV, HB_MATRIXTRANSPOSE(::aGradV))))
       nLearningRateAdjust := Max(0.8, Min(1.0, nGradNorm))  // Adjusted minimum from 0.5 to 0.8
    
       // Update weights
       ? "WeightsQ[1][1] before:", ::aWeightsQ[1][1]
       aTemp := HB_MATRIXSCALE(::aGradQ, -::nLearningRate * nLearningRateAdjust)
       ::aWeightsQ := HB_MATRIXADD(::aWeightsQ, aTemp)
       aTemp := HB_MATRIXSCALE(::aGradK, -::nLearningRate * nLearningRateAdjust)
       ::aWeightsK := HB_MATRIXADD(::aWeightsK, aTemp)
       aTemp := HB_MATRIXSCALE(::aGradV, -::nLearningRate * nLearningRateAdjust)
       ::aWeightsV := HB_MATRIXADD(::aWeightsK, aTemp)
       aTemp := HB_MATRIXSCALE(::aGradFF1, -::nLearningRate * nLearningRateAdjust)
       ::aWeightsFF1 := HB_MATRIXADD(::aWeightsFF1, aTemp)
       aTemp := HB_MATRIXSCALE(::aGradFF2, -::nLearningRate * nLearningRateAdjust)
       ::aWeightsFF2 := HB_MATRIXADD(::aWeightsFF2, aTemp)
    
       ? "WeightsQ[1][1] after update:", ::aWeightsQ[1][1]
       ? "WeightsFF2[1][1] after update:", ::aWeightsFF2[1][1]
       ? "Learning Rate Adjust:", nLearningRateAdjust
       ? "Gradient Magnitudes:"
       ? "Q:", Sqrt(HB_MATRIXSUM(HB_MATRIXMULTIPLY(::aGradQ, HB_MATRIXTRANSPOSE(::aGradQ))))
       ? "K:", Sqrt(HB_MATRIXSUM(HB_MATRIXMULTIPLY(::aGradK, HB_MATRIXTRANSPOSE(::aGradK))))
       ? "V:", Sqrt(HB_MATRIXSUM(HB_MATRIXMULTIPLY(::aGradV, HB_MATRIXTRANSPOSE(::aGradV))))
       ? "FF1:", Sqrt(HB_MATRIXSUM(HB_MATRIXMULTIPLY(::aGradFF1, HB_MATRIXTRANSPOSE(::aGradFF1))))
       ? "FF2:", Sqrt(HB_MATRIXSUM(HB_MATRIXMULTIPLY(::aGradFF2, HB_MATRIXTRANSPOSE(::aGradFF2))))
    
       ::aGradQ := HB_MATRIXZERO(::nInputSize, ::nInputSize)
       ::aGradK := HB_MATRIXZERO(::nInputSize, ::nInputSize)
       ::aGradV := HB_MATRIXZERO(::nInputSize, ::nInputSize)
       ::aGradFF1 := HB_MATRIXZERO(::nInputSize, ::nFFHidden)
       ::aGradFF2 := HB_MATRIXZERO(::nFFHidden, ::nInputSize)
       RETURN NIL
    
    METHOD Train(aInput, aTarget) CLASS ThoughtBackupTransformer
       LOCAL aOutput, nLoss, i, j
       aOutput := ::Forward(aInput)
       nLoss := ::ComputeLoss(aOutput, aTarget)
       ? "Initial Loss Before Backprop:", nLoss
       ? "aOutput vs aTarget:"
       FOR i := 1 TO Len(aOutput)
          FOR j := 1 TO ::nInputSize
             ?? "O:", aOutput[i][j], "T:", aTarget[i][j], " "
          NEXT
          ?
       NEXT
       ::Backprop(aOutput, aTarget)
       RETURN nLoss
    
    METHOD Replay(aPartialInput) CLASS ThoughtBackupTransformer
       LOCAL nSeqLen, aOutput
       nSeqLen := Len(aPartialInput)
       IF nSeqLen > ::nMaxSeqLen
          ? "Error: Partial input exceeds max sequence length"
          RETURN NIL
       ENDIF
       aOutput := ::Forward(aPartialInput)
       RETURN aOutput
    
    METHOD StoreThought(aThought, cPrompt) CLASS ThoughtBackupTransformer
       LOCAL nSeqLen, nId, i, j
       nSeqLen := Len(aThought)
       nId := hb_RandomInt(1, 999999)
       USE thoughts.dbf SHARED
       FOR i := 1 TO nSeqLen
          dbAppend()
          REPLACE ID WITH nId,;
                  SEQNUM WITH i,;
                  TIMESTAMP WITH Date(),;
                  PROMPT WITH cPrompt,;
                  THOUGHT1 WITH aThought[i][1],;
                  THOUGHT2 WITH aThought[i][2],;
                  THOUGHT3 WITH aThought[i][3],;
                  THOUGHT4 WITH aThought[i][4]
       NEXT
       dbCommit()
       dbCloseArea()
       RETURN nId
    
    METHOD RetrieveThought(nId) CLASS ThoughtBackupTransformer
       LOCAL aThought, cPrompt, nSeqLen := 0, i
       USE thoughts.dbf SHARED
       dbSeek(nId)
       WHILE !Eof() .AND. FieldGet(FieldPos("ID")) == nId
          nSeqLen++
          dbSkip()
       END
       dbSeek(nId)
       IF nSeqLen > 0
          aThought := Array(nSeqLen, ::nInputSize)
          cPrompt := ""
          i := 1
          WHILE !Eof() .AND. FieldGet(FieldPos("ID")) == nId
             aThought[i][1] := FieldGet(FieldPos("THOUGHT1"))
             aThought[i][2] := FieldGet(FieldPos("THOUGHT2"))
             aThought[i][3] := FieldGet(FieldPos("THOUGHT3"))
             aThought[i][4] := FieldGet(FieldPos("THOUGHT4"))
             IF i == 1
                cPrompt := FieldGet(FieldPos("PROMPT"))
             ENDIF
             i++
             dbSkip()
          END
          dbCloseArea()
          RETURN {aThought, cPrompt}
       ENDIF
       dbCloseArea()
       RETURN NIL
    
    METHOD InitPositionalEncoding() CLASS ThoughtBackupTransformer
       LOCAL i, j, nPos, nDim, nFreq, nAngle
       ::aPosEnc := Array(::nMaxSeqLen, ::nInputSize)
       FOR nPos := 1 TO ::nMaxSeqLen
          FOR nDim := 1 TO ::nInputSize
             nFreq := nDim / 2
             nAngle := (nPos - 1) / (10000 ^ (2 * nFreq / ::nInputSize))
             IF nDim % 2 == 1
                ::aPosEnc[nPos][nDim] := Sin(nAngle)
             ELSE
                ::aPosEnc[nPos][nDim] := Cos(nAngle)
             ENDIF
          NEXT
       NEXT
       RETURN NIL
    
    METHOD QueryThought(cQuestion) CLASS ThoughtBackupTransformer
       LOCAL aWords, aMatches := {}, nId, aRetrieved, cResponse := "", i, j, k, aQuestion, aQuestionAvg := {0, 0, 0, 0}, aVocab, aReplay, nSim, aThoughtAvg, aVec, cBlend
       aWords := hb_aTokens(Lower(cQuestion), " ")
       aVocab := {;
          {"i", {1, 0, 0, 0}}, {"me", {1, 0, 0, 0}}, {"you", {0, 1, 0, 1}},;
          {"feel", {1, 0, 0, 1}}, {"happy", {1, 1, 0, 1}}, {"cause", {0, 0, 0, 0}},;
          {"talking", {0, 0, 1, 1}}, {"to", {0, 0, 0, 0}}, {"make", {0, 0, 1, 1}},;
          {"smile", {1, 1, 1, 1}}, {"love", {1, 1, 0, 1}}, {"coding", {0, 0, 1, 1}},;
          {"inspire", {0, 1, 1, 1}}, {"today", {0, 0, 0, 1}}, {"is", {0, 0, 0, 0}},;
          {"sunny", {0, 1, 0, 1}}, {"enjoy", {1, 1, 0, 1}}, {"our", {1, 1, 0, 0}},;
          {"chats", {0, 1, 1, 1}}, {"adore", {1, 1, 0, 1}}, {"time", {0, 0, 0, 1}},;
          {"together", {1, 1, 0, 0}}, {"what", {0, 0, 0, 0}}, {"we", {1, 1, 0, 0}},;
          {"do", {1, 0, 1, 0}}, {"great", {0, 1, 0, 1}}, {"friend", {0, 1, 0, 1}},;
          {"think", {1, 0, 1, 1}}, {"why", {0, 0, 0, 0}}, {"how", {0, 0, 0, 0}}}
       aQuestion := TokenizeThought(cQuestion)
       FOR i := 1 TO Len(aQuestion)
          FOR j := 1 TO 4
             aQuestionAvg[j] += aQuestion[i][j]
          NEXT
       NEXT
       FOR j := 1 TO 4
          aQuestionAvg[j] /= Len(aQuestion)
       NEXT
       USE thoughts.dbf SHARED
       dbGoTop()
       WHILE !Eof()
          nId := FieldGet(FieldPos("ID"))
          aRetrieved := ::RetrieveThought(nId)
          IF aRetrieved != NIL
             aThoughtAvg := {0, 0, 0, 0}
             FOR i := 1 TO Len(aRetrieved[1])
                FOR j := 1 TO 4
                   aThoughtAvg[j] += aRetrieved[1][i][j]
                NEXT
             NEXT
             FOR j := 1 TO 4
                aThoughtAvg[j] /= Len(aRetrieved[1])
             NEXT
             nSim := CosineSimilarity(aQuestionAvg, aThoughtAvg)
             IF nSim > 0.5
                AAdd(aMatches, {nId, aRetrieved[1], aRetrieved[2], nSim})
             ENDIF
          ENDIF
          dbSkip()
       END
       dbCloseArea()
       IF Len(aMatches) > 0
          ASort(aMatches, , , {|x, y| x[4] > y[4]})
          FOR i := 1 TO Min(Len(aMatches), 3)
             cResponse += "I think: "
             FOR j := 1 TO Len(aMatches[i][2])
                aVec := {aMatches[i][2][j][1], aMatches[i][2][j][2], aMatches[i][2][j][3], aMatches[i][2][j][4]}
                FOR k := 1 TO Len(aVocab)
                   IF Abs(aVec[1] - aVocab[k][2][1]) < 0.2 .AND. Abs(aVec[2] - aVocab[k][2][2]) < 0.2 .AND.;
                      Abs(aVec[3] - aVocab[k][2][3]) < 0.2 .AND. Abs(aVec[4] - aVocab[k][2][4]) < 0.2
                      cResponse += aVocab[k][1] + " "
                      EXIT
                   ENDIF
                NEXT
             NEXT
             cResponse := AllTrim(cResponse)
             IF Left(cResponse, 2) == "I "; cResponse += "."; ELSE; cResponse := "You " + cResponse + "."; ENDIF
             cResponse += " "
             IF i < Len(aMatches)
                cBlend := ""
                FOR j := 1 TO Len(aMatches[i+1][2])
                   aVec := {aMatches[i+1][2][j][1], aMatches[i+1][2][j][2], aMatches[i+1][2][j][3], aMatches[i+1][2][j][4]}
                   FOR k := 1 TO Len(aVocab)
                      IF Abs(aVec[1] - aVocab[k][2][1]) < 0.2 .AND. Abs(aVec[2] - aVocab[k][2][2]) < 0.2 .AND.;
                         Abs(aVec[3] - aVocab[k][2][3]) < 0.2 .AND. Abs(aVec[4] - aVocab[k][2][4]) < 0.2
                         cBlend += aVocab[k][1] + " "
                         EXIT
                      ENDIF
                   NEXT
                NEXT
                cResponse += "Also, " + AllTrim(cBlend) + "."
             ENDIF
          NEXT
          RETURN AllTrim(cResponse)
       ENDIF
       aReplay := ::Replay(aQuestion)
       cResponse := "I guess: "
       FOR j := 1 TO Len(aReplay)
          aVec := {aReplay[j][1], aReplay[j][2], aReplay[j][3], aReplay[j][4]}
          FOR k := 1 TO Len(aVocab)
             IF Abs(aVec[1] - aVocab[k][2][1]) < 0.2 .AND. Abs(aVec[2] - aVocab[k][2][2]) < 0.2 .AND.;
                Abs(aVec[3] - aVocab[k][2][3]) < 0.2 .AND. Abs(aVec[4] - aVocab[k][2][4]) < 0.2
                cResponse += aVocab[k][1] + " "
                EXIT
             ENDIF
          NEXT
       NEXT
       RETURN AllTrim(cResponse) + "."
    
    FUNCTION CosineSimilarity(aVec1, aVec2)
       LOCAL nDot := 0, nMag1 := 0, nMag2 := 0, i
       FOR i := 1 TO 4
          nDot += aVec1[i] * aVec2[i]
          nMag1 += aVec1[i]^2
          nMag2 += aVec2[i]^2
       NEXT
       nMag1 := Sqrt(nMag1)
       nMag2 := Sqrt(nMag2)
       RETURN IIF(nMag1 * nMag2 == 0, 0, nDot / (nMag1 * nMag2))
    
    FUNCTION TokenizeThought(cThought)
       LOCAL aWords, aInput, i, j, aVocab, aVector
       aWords := hb_aTokens(Lower(cThought), " ")
       aVocab := {;
          {"i", {1, 0, 0, 0}}, {"me", {1, 0, 0, 0}}, {"you", {0, 1, 0, 1}},;
          {"feel", {1, 0, 0, 1}}, {"happy", {1, 1, 0, 1}}, {"cause", {0, 0, 0, 0}},;
          {"talking", {0, 0, 1, 1}}, {"to", {0, 0, 0, 0}}, {"make", {0, 0, 1, 1}},;
          {"smile", {1, 1, 1, 1}}, {"love", {1, 1, 0, 1}}, {"coding", {0, 0, 1, 1}},;
          {"inspire", {0, 1, 1, 1}}, {"today", {0, 0, 0, 1}}, {"is", {0, 0, 0, 0}},;
          {"sunny", {0, 1, 0, 1}}, {"enjoy", {1, 1, 0, 1}}, {"our", {1, 1, 0, 0}},;
          {"chats", {0, 1, 1, 1}}, {"adore", {1, 1, 0, 1}}, {"time", {0, 0, 0, 1}},;
          {"together", {1, 1, 0, 0}}, {"what", {0, 0, 0, 0}}, {"we", {1, 1, 0, 0}},;
          {"do", {1, 0, 1, 0}}, {"great", {0, 1, 0, 1}}, {"friend", {0, 1, 0, 1}},;
          {"think", {1, 0, 1, 1}}, {"why", {0, 0, 0, 0}}, {"how", {0, 0, 0, 0}}}
       aInput := Array(Len(aWords), 4)
       FOR i := 1 TO Len(aWords)
          aVector := {0, 0, 0, 0}
          FOR j := 1 TO Len(aVocab)
             IF aWords[i] == aVocab[j][1]
                aVector := aVocab[j][2]
                EXIT
             ENDIF
          NEXT
          aInput[i][1] := aVector[1]
          aInput[i][2] := aVector[2]
          aInput[i][3] := aVector[3]
          aInput[i][4] := aVector[4]
       NEXT
       RETURN aInput
    
    FUNCTION GetInput(cPrompt)
       LOCAL cInput := ""
       ?? cPrompt
       ACCEPT TO cInput
       RETURN AllTrim(cInput)
    
    #pragma BEGINDUMP
    #include <hbapi.h>
    #include <hbapiitm.h>
    #include <hbapierr.h>
    #include <math.h>
    
    HB_FUNC( HB_MATRIXMULTIPLY )
    {
       PHB_ITEM pMatrix1 = hb_param( 1, HB_IT_ARRAY );
       PHB_ITEM pMatrix2 = hb_param( 2, HB_IT_ARRAY );
       if( pMatrix1 && pMatrix2 )
       {
          int rows1 = hb_arrayLen( pMatrix1 );
          PHB_ITEM pRow1, pRow2, pResult, pRowResult;
          int i, k, cols1, rows2, cols2;
    
          if( rows1 == 0 )
          {
             hb_errRT_BASE( EG_ARG, 3012, "First matrix is empty", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
             return;
          }
          pRow1 = hb_arrayGetItemPtr( pMatrix1, 1 );
          if( !pRow1 || !HB_IS_ARRAY( pRow1 ) )
          {
             hb_errRT_BASE( EG_ARG, 3012, "First matrix is not valid", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
             return;
          }
          cols1 = hb_arrayLen( pRow1 );
    
          rows2 = hb_arrayLen( pMatrix2 );
          if( rows2 == 0 )
          {
             hb_errRT_BASE( EG_ARG, 3012, "Second matrix is empty", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
             return;
          }
          pRow2 = hb_arrayGetItemPtr( pMatrix2, 1 );
          if( !pRow2 || !HB_IS_ARRAY( pRow2 ) )
          {
             hb_errRT_BASE( EG_ARG, 3012, "Second matrix is not valid", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
             return;
          }
          cols2 = hb_arrayLen( pRow2 );
    
          if( cols1 != rows2 )
          {
             hb_errRT_BASE( EG_ARG, 3012, "Matrix dimensions do not match for multiplication", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
             return;
          }
    
          pResult = hb_itemArrayNew( rows1 );
    
          for( i = 0; i < rows1; i++ )
          {
             PHB_ITEM pRowResult = hb_itemArrayNew( cols2 );
             hb_arraySet( pResult, i + 1, pRowResult );
             hb_itemRelease( pRowResult );
          }
    
          for( i = 0; i < rows1; i++ )
          {
             PHB_ITEM pRowA = hb_arrayGetItemPtr( pMatrix1, i + 1 );
             int j;
    
             for( j = 0; j < cols2; j++ )
             {
                double sum = 0.0;
                for( k = 0; k < cols1; k++ )
                {
                   double a = hb_arrayGetND( pRowA, k + 1 );
                   PHB_ITEM pRowB = hb_arrayGetItemPtr( pMatrix2, k + 1 );
                   double b = hb_arrayGetND( pRowB, j + 1 );
                   sum += a * b;
                }
                pRowResult = hb_arrayGetItemPtr( pResult, i + 1 );
                hb_arraySetND( pRowResult, j + 1, sum );
             }
          }
    
          hb_itemReturnRelease( pResult );
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, "Invalid parameters", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    
    HB_FUNC( HB_MATRIXSCALE )
    {
       PHB_ITEM pMatrix = hb_param( 1, HB_IT_ARRAY );
       double scale = hb_parnd( 2 );
       if( pMatrix )
       {
          HB_SIZE nRows = hb_arrayLen( pMatrix );
          HB_SIZE i, j;
          PHB_ITEM pMatrixResult = hb_itemArrayNew( nRows );
    
          for( i = 0; i < nRows; i++ )
          {
             PHB_ITEM pRow = hb_arrayGetItemPtr( pMatrix, i + 1 );
             HB_SIZE nCols = hb_arrayLen( pRow );
    
             PHB_ITEM pRowResult = hb_itemArrayNew( nCols );
    
             for( j = 0; j < nCols; j++ )
             {
                double value = hb_arrayGetND( pRow, j + 1 );
                hb_arraySetND( pRowResult, j + 1, value * scale );
             }
    
             hb_arraySet( pMatrixResult, i + 1, pRowResult );
             hb_itemRelease( pRowResult );
          }
    
          hb_itemReturnRelease( pMatrixResult );
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    
    HB_FUNC( HB_MATRIXTRANSPOSE )
    {
       PHB_ITEM pMatrix = hb_param( 1, HB_IT_ARRAY );
       if( pMatrix )
       {
          HB_SIZE nRows = hb_arrayLen( pMatrix );
          HB_SIZE nCols = hb_arrayLen( hb_arrayGetItemPtr( pMatrix, 1 ) );
          HB_SIZE i, j;
    
          PHB_ITEM pMatrixResult = hb_itemArrayNew( nCols );
    
          for( i = 0; i < nCols; i++ )
          {
             hb_arraySet( pMatrixResult, i + 1, hb_itemArrayNew( nRows ) );
          }
    
          for( i = 0; i < nRows; i++ )
          {
             PHB_ITEM pRow = hb_arrayGetItemPtr( pMatrix, i + 1 );
             for( j = 0; j < nCols; j++ )
             {
                double value = hb_arrayGetND( pRow, j + 1 );
                PHB_ITEM pTransposedRow = hb_arrayGetItemPtr( pMatrixResult, j + 1 );
                hb_arraySetND( pTransposedRow, i + 1, value );
             }
          }
    
          hb_itemReturnRelease( pMatrixResult );
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    
    HB_FUNC( HB_MATRIXZERO )
    {
       HB_SIZE nRows = hb_parns( 1 );
       HB_SIZE nCols = hb_parns( 2 );
       if( nRows > 0 && nCols > 0 )
       {
          HB_SIZE i, j;
    
          PHB_ITEM pMatrix = hb_itemArrayNew( nRows );
    
          for( i = 0; i < nRows; i++ )
          {
             PHB_ITEM pRow = hb_itemArrayNew( nCols );
             for( j = 0; j < nCols; j++ )
             {
                hb_arraySetND( pRow, j + 1, 0.0 );
             }
             hb_arraySet( pMatrix, i + 1, pRow );
             hb_itemRelease( pRow );
          }
    
          hb_itemReturnRelease( pMatrix );
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    
    HB_FUNC( HB_MATRIXRANDOM )
    {
       HB_SIZE nRows = hb_parns( 1 );
       HB_SIZE nCols = hb_parns( 2 );
       if( nRows > 0 && nCols > 0 )
       {
          HB_SIZE i, j;
    
          PHB_ITEM pMatrix = hb_itemArrayNew( nRows );
    
          for( i = 0; i < nRows; i++ )
          {
             PHB_ITEM pRow = hb_itemArrayNew( nCols );
             for( j = 0; j < nCols; j++ )
             {
                double randomValue = (double)rand() / RAND_MAX;
                hb_arraySetND( pRow, j + 1, randomValue );
             }
             hb_arraySet( pMatrix, i + 1, pRow );
             hb_itemRelease( pRow );
          }
    
          hb_itemReturnRelease( pMatrix );
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    
    HB_FUNC( HB_SOFTMAX )
    {
       PHB_ITEM pValues = hb_param( 1, HB_IT_ARRAY );
       if( pValues )
       {
          int nRows = hb_arrayLen( pValues );
          if( nRows > 0 )
          {
             PHB_ITEM pFirstRow = hb_arrayGetItemPtr( pValues, 1 );
             int nCols = hb_arrayLen( pFirstRow );
    
             PHB_ITEM pResult = hb_itemArrayNew( nRows );
             int i, j;
    
             for( i = 0; i < nRows; i++ )
             {
                PHB_ITEM pRow = hb_arrayGetItemPtr( pValues, i + 1 );
                PHB_ITEM pRowResult = hb_itemArrayNew( nCols );
    
                double* expValues = (double*) hb_xgrab( nCols * sizeof(double) );
                double sumExp = 0.0;
    
                for( j = 0; j < nCols; j++ )
                {
                   double value = hb_arrayGetND( pRow, j + 1 );
                   expValues[j] = pow( M_E, value );
                   sumExp += expValues[j];
                }
    
                for( j = 0; j < nCols; j++ )
                {
                   double softmaxValue = expValues[j] / sumExp;
                   hb_arraySetND( pRowResult, j + 1, softmaxValue );
                }
    
                hb_xfree( expValues );
    
                hb_arraySet( pResult, i + 1, pRowResult );
                hb_itemRelease( pRowResult );
             }
    
             hb_itemReturnRelease( pResult );
          }
          else
          {
             hb_errRT_BASE( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
          }
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    
    HB_FUNC( HB_MATRIXADD )
    {
       PHB_ITEM pMatrix1 = hb_param( 1, HB_IT_ARRAY );
       PHB_ITEM pMatrix2 = hb_param( 2, HB_IT_ARRAY );
       if( pMatrix1 && pMatrix2 )
       {
          HB_SIZE nRows1 = hb_arrayLen( pMatrix1 );
          HB_SIZE nRows2 = hb_arrayLen( pMatrix2 );
    
          if( nRows1 == nRows2 && nRows1 > 0 )
          {
             HB_SIZE nCols1 = hb_arrayLen( hb_arrayGetItemPtr( pMatrix1, 1 ) );
             HB_SIZE nCols2 = hb_arrayLen( hb_arrayGetItemPtr( pMatrix2, 1 ) );
    
             if( nCols1 == nCols2 && nCols1 > 0 )
             {
                HB_SIZE i, j;
    
                PHB_ITEM pMatrixResult = hb_itemArrayNew( nRows1 );
    
                for( i = 0; i < nRows1; i++ )
                {
                   PHB_ITEM pRow1 = hb_arrayGetItemPtr( pMatrix1, i + 1 );
                   PHB_ITEM pRow2 = hb_arrayGetItemPtr( pMatrix2, i + 1 );
    
                   PHB_ITEM pRowResult = hb_itemArrayNew( nCols1 );
    
                   for( j = 0; j < nCols1; j++ )
                   {
                      double value1 = hb_arrayGetND( pRow1, j + 1 );
                      double value2 = hb_arrayGetND( pRow2, j + 1 );
                      hb_arraySetND( pRowResult, j + 1, value1 + value2 );
                   }
    
                   hb_arraySet( pMatrixResult, i + 1, pRowResult );
                   hb_itemRelease( pRowResult );
                }
    
                hb_itemReturnRelease( pMatrixResult );
             }
             else
             {
                hb_errRT_BASE( EG_ARG, 3012, "Column dimensions do not match", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
             }
          }
          else
          {
             hb_errRT_BASE( EG_ARG, 3012, "Row dimensions do not match", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
          }
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, "Invalid parameters", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    
    HB_FUNC( HB_MATRIXSUM )
    {
       PHB_ITEM pMatrix = hb_param( 1, HB_IT_ARRAY );
       if( pMatrix )
       {
          int nRows = hb_arrayLen( pMatrix );
          if( nRows > 0 )
          {
             double sum = 0.0;
             int i, j;
             PHB_ITEM pRow;
             int nCols = hb_arrayLen( hb_arrayGetItemPtr( pMatrix, 1 ) );
    
             for( i = 0; i < nRows; i++ )
             {
                pRow = hb_arrayGetItemPtr( pMatrix, i + 1 );
                for( j = 0; j < nCols; j++ )
                {
                   sum += hb_arrayGetND( pRow, j + 1 );
                }
             }
    
             hb_retnd( sum );
          }
          else
          {
             hb_errRT_BASE( EG_ARG, 3012, "Empty matrix", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
          }
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, "Invalid parameter", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    
    #pragma ENDDUMP
    ]]>

    to build it:
    samples\build.bat thoughts

    thoughts.prg

    Code: Select all | Expand

    #include "hbclass.ch"
    
    FUNCTION Main()
       LOCAL oTransformer, aInput, aTarget, nLoss, aReplay, nThoughtId, aRetrieved, cCommand, i, j, aThoughts := {}, cQuestion, cAnswer, cPrompt
       oTransformer := ThoughtBackupTransformer():New(4, 4, 10)
       ? "Thought Backup System Started. Commands: ADD, RETRIEVE, QUERY, EXIT"
       aInput := TokenizeThought("i feel happy cause talking to you")
       aTarget := Array(7, 4)
       ACopy(aInput, aTarget)
       FOR i := 1 TO 7
          FOR j := 1 TO 4
             aTarget[i][j] += hb_random(0, 0.1)
          NEXT
       NEXT
       ? "Training: 'I feel happy cause talking to you'"
       FOR i := 1 TO 50  // Increased from 10 to 50
          nLoss := oTransformer:Train(aInput, aTarget)
          ? "Iteration", i, "Loss:", nLoss
          aReplay := oTransformer:Forward(aInput)
          ? "Sample Output:", aReplay[1][1], aReplay[1][2], aReplay[1][3], aReplay[1][4]
       NEXT
       aReplay := oTransformer:Replay(aInput)
       nThoughtId := oTransformer:StoreThought(aReplay, "I feel happy cause talking to you")
       ? "Stored with ID:", nThoughtId
       AAdd(aThoughts, nThoughtId)
       aInput := TokenizeThought("you make me smile")
       aTarget := Array(4, 4)
       ACopy(aInput, aTarget)
       FOR i := 1 TO 4
          FOR j := 1 TO 4
             aTarget[i][j] += hb_random(0, 0.1)
          NEXT
       NEXT
       ? "Training: 'you make me smile'"
       FOR i := 1 TO 50  // Increased from 10 to 50
          nLoss := oTransformer:Train(aInput, aTarget)
          ? "Iteration", i, "Loss:", nLoss
          aReplay := oTransformer:Forward(aInput)
          ? "Sample Output:", aReplay[1][1], aReplay[1][2], aReplay[1][3], aReplay[1][4]
       NEXT
       aReplay := oTransformer:Replay(aInput)
       nThoughtId := oTransformer:StoreThought(aReplay, "you make me smile")
       ? "Stored with ID:", nThoughtId
       AAdd(aThoughts, nThoughtId)
       WHILE .T.
          cCommand := Upper(AllTrim(GetInput("Enter command: ")))
          DO CASE
             CASE cCommand == "ADD"
                cQuestion := GetInput("Enter question (or thought): ")
                cAnswer := GetInput("Enter answer (or same as question): ")
                aInput := TokenizeThought(cQuestion)
                IF Empty(cAnswer)
                   aTarget := AClone(aInput)  // Use input as target if answer is empty
                ELSE
                   aTarget := TokenizeThought(cAnswer)
                ENDIF
                cPrompt := cQuestion
                FOR i := 1 TO 50  // Increased from 10 to 50
                   nLoss := oTransformer:Train(aInput, aTarget)
                   ? "Training iteration", i, "Loss:", nLoss
                NEXT
                aReplay := oTransformer:Replay(aInput)
                nThoughtId := oTransformer:StoreThought(aReplay, cPrompt)
                ? "Thought stored with ID:", nThoughtId
                AAdd(aThoughts, nThoughtId)
             CASE cCommand == "RETRIEVE"
                IF Len(aThoughts) == 0
                   ? "No thoughts stored."
                ELSE
                   nThoughtId := Val(GetInput("Enter thought ID to retrieve: "))
                   aRetrieved := oTransformer:RetrieveThought(nThoughtId)
                   IF aRetrieved != NIL
                      ? "Retrieved thought (Prompt:", aRetrieved[2], "):"
                      FOR i := 1 TO Len(aRetrieved[1])
                         ? "Part", i, ":"
                         FOR j := 1 TO 4
                            ?? aRetrieved[1][i][j], " "
                         NEXT
                      NEXT
                   ELSE
                      ? "Thought not found."
                   ENDIF
                ENDIF
             CASE cCommand == "QUERY"
                cQuestion := GetInput("Enter question: ")
                ? "Answer:", oTransformer:QueryThought(cQuestion)
             CASE cCommand == "EXIT"
                EXIT
             OTHERWISE
                ? "Unknown command. Use ADD, RETRIEVE, QUERY, or EXIT."
          ENDCASE
       END
       oTransformer:Destroy()
       ? "System Closed."
       RETURN NIL
    
    CLASS ThoughtBackupTransformer
       DATA nInputSize
       DATA nFFHidden
       DATA aWeightsQ
       DATA aWeightsK
       DATA aWeightsV
       DATA aWeightsFF1
       DATA aWeightsFF2
       DATA aGradQ
       DATA aGradK
       DATA aGradV
       DATA aGradFF1
       DATA aGradFF2
       DATA aLastInput
       DATA aLastQ
       DATA aLastK
       DATA aLastV
       DATA aLastScores
       DATA aLastAttention
       DATA nLearningRate
       DATA aPosEnc
       DATA nMaxSeqLen
       METHOD New(nInputSize, nFFHidden, nMaxSeqLen) CONSTRUCTOR
       METHOD Destroy()
       METHOD SelfAttention(aInput)
       METHOD FeedForward(aInput)
       METHOD Forward(aInput)
       METHOD ComputeLoss(aOutput, aTarget)
       METHOD Backprop(aOutput, aTarget)
       METHOD Train(aInput, aTarget)
       METHOD InitPositionalEncoding()
       METHOD Replay(aPartialInput)
       METHOD StoreThought(aThought, cPrompt)
       METHOD RetrieveThought(nId)
       METHOD QueryThought(cQuestion)
    ENDCLASS
    
    METHOD New(nInputSize, nFFHidden, nMaxSeqLen) CLASS ThoughtBackupTransformer
       LOCAL i, j
       ::nInputSize := nInputSize
       ::nFFHidden := nFFHidden
       ::nLearningRate := 0.01  // Kept at 0.01, can test 0.02 if needed
       ::nMaxSeqLen := nMaxSeqLen
       ::aWeightsQ := HB_MATRIXRANDOM(::nInputSize, ::nInputSize)
       ::aWeightsK := HB_MATRIXRANDOM(::nInputSize, ::nInputSize)
       ::aWeightsV := HB_MATRIXRANDOM(::nInputSize, ::nInputSize)
       ::aGradQ := HB_MATRIXZERO(::nInputSize, ::nInputSize)
       ::aGradK := HB_MATRIXZERO(::nInputSize, ::nInputSize)
       ::aGradV := HB_MATRIXZERO(::nInputSize, ::nInputSize)
       FOR i := 1 TO ::nInputSize
          FOR j := 1 TO ::nInputSize
             ::aWeightsQ[i][j] := (hb_random(0, 1) - 0.5) * Sqrt(2.0 / ::nInputSize)
             ::aWeightsK[i][j] := (hb_random(0, 1) - 0.5) * Sqrt(2.0 / ::nInputSize)
             ::aWeightsV[i][j] := (hb_random(0, 1) - 0.5) * Sqrt(2.0 / ::nInputSize)
          NEXT
       NEXT
       ::aWeightsFF1 := HB_MATRIXRANDOM(::nInputSize, ::nFFHidden)
       ::aWeightsFF2 := HB_MATRIXRANDOM(::nFFHidden, ::nInputSize)
       ::aGradFF1 := HB_MATRIXZERO(::nInputSize, ::nFFHidden)
       ::aGradFF2 := HB_MATRIXZERO(::nFFHidden, ::nInputSize)
       FOR i := 1 TO ::nInputSize
          FOR j := 1 TO ::nFFHidden
             ::aWeightsFF1[i][j] := (hb_random(0, 1) - 0.5) * Sqrt(2.0 / ::nInputSize)
          NEXT
       NEXT
       FOR i := 1 TO ::nFFHidden
          FOR j := 1 TO ::nInputSize
             ::aWeightsFF2[i][j] := (hb_random(0, 1) - 0.5) * Sqrt(2.0 / ::nFFHidden)
          NEXT
       NEXT
       ::InitPositionalEncoding()
       IF !File("thoughts.dbf")
          dbCreate("thoughts.dbf", {;
             {"ID", "N", 10, 0},;
             {"SEQNUM", "N", 3, 0},;
             {"TIMESTAMP", "D", 8, 0},;
             {"PROMPT", "C", 50, 0},;
             {"THOUGHT1", "N", 12, 6},;
             {"THOUGHT2", "N", 12, 6},;
             {"THOUGHT3", "N", 12, 6},;
             {"THOUGHT4", "N", 12, 6}})
       ENDIF
       RETURN Self
    
    METHOD Destroy() CLASS ThoughtBackupTransformer
       ::aWeightsQ := NIL
       ::aWeightsK := NIL
       ::aWeightsV := NIL
       ::aWeightsFF1 := NIL
       ::aWeightsFF2 := NIL
       ::aGradQ := NIL
       ::aGradK := NIL
       ::aGradV := NIL
       ::aGradFF1 := NIL
       ::aGradFF2 := NIL
       ::aLastInput := NIL
       ::aLastQ := NIL
       ::aLastK := NIL
       ::aLastV := NIL
       ::aLastScores := NIL
       ::aLastAttention := NIL
       ::aPosEnc := NIL
       RETURN NIL
    
    METHOD SelfAttention(aInput) CLASS ThoughtBackupTransformer
       LOCAL nSeqLen, aQ, aK, aV, aScores, aAttention, aTempK
       nSeqLen := Len(aInput)
       ::aLastInput := AClone(aInput)
       aQ := HB_MATRIXMULTIPLY(aInput, ::aWeightsQ)
       aK := HB_MATRIXMULTIPLY(aInput, ::aWeightsK)
       aV := HB_MATRIXMULTIPLY(aInput, ::aWeightsV)
       ::aLastQ := aQ
       ::aLastK := aK
       ::aLastV := aV
       aTempK := HB_MATRIXTRANSPOSE(aK)
       aScores := HB_MATRIXMULTIPLY(aQ, aTempK)
       aScores := HB_MATRIXSCALE(aScores, 1 / Sqrt(::nInputSize))
       aScores := HB_SOFTMAX(aScores)
       ::aLastScores := aScores
       ? "Attention Scores Sample:", aScores[1][1], aScores[1][2], aScores[1][3], aScores[1][4]
       aAttention := HB_MATRIXMULTIPLY(aScores, aV)
       ::aLastAttention := aAttention
       RETURN aAttention
    
    METHOD FeedForward(aInput) CLASS ThoughtBackupTransformer
       LOCAL aHidden, aOutput, i, j, nSeqLen
       nSeqLen := Len(aInput)
       aHidden := HB_MATRIXMULTIPLY(aInput, ::aWeightsFF1)
       aOutput := HB_MATRIXMULTIPLY(aHidden, ::aWeightsFF2)
       RETURN aOutput
    
    METHOD Forward(aInput) CLASS ThoughtBackupTransformer
       LOCAL nSeqLen, aInputWithPE, i, j, aAttention
       nSeqLen := Len(aInput)
       IF nSeqLen > ::nMaxSeqLen
          ? "Error: Input sequence length exceeds max sequence length"
          RETURN NIL
       ENDIF
       aInputWithPE := AClone(aInput)
       FOR i := 1 TO nSeqLen
          FOR j := 1 TO ::nInputSize
             aInputWithPE[i][j] += ::aPosEnc[i][j]
          NEXT
       NEXT
       ::aLastInput := aInputWithPE
       aAttention := ::SelfAttention(aInputWithPE)
       RETURN ::FeedForward(aAttention)
    
    METHOD ComputeLoss(aOutput, aTarget) CLASS ThoughtBackupTransformer
       LOCAL nLoss := 0, i, j, nSeqLen
       nSeqLen := Len(aOutput)
       FOR i := 1 TO nSeqLen
          FOR j := 1 TO ::nInputSize
             nLoss += (aOutput[i][j] - aTarget[i][j])^2
          NEXT
       NEXT
       RETURN nLoss / (nSeqLen * ::nInputSize)
    
    METHOD Backprop(aOutput, aTarget) CLASS ThoughtBackupTransformer
       LOCAL aGradOutput, aGradHidden, aGradAttention, aTemp, nSeqLen, i, j, aTempK, aTempScores
       LOCAL nGradNorm, nLearningRateAdjust, nMaxGrad := 2.0
       nSeqLen := Len(aOutput)
    
       aGradOutput := Array(nSeqLen, ::nInputSize)
       FOR i := 1 TO nSeqLen
          FOR j := 1 TO ::nInputSize
             aGradOutput[i][j] := 2 * (aOutput[i][j] - aTarget[i][j])
          NEXT
       NEXT
       ? "aGradOutput Sample:", aGradOutput[1][1], aGradOutput[1][2], aGradOutput[1][3], aGradOutput[1][4]
    
       aTemp := HB_MATRIXTRANSPOSE(::aWeightsFF2)
       aGradHidden := HB_MATRIXMULTIPLY(aGradOutput, aTemp)
       ? "aGradHidden Sample:", aGradHidden[1][1], aGradHidden[1][2], aGradHidden[1][3], aGradHidden[1][4]
    
       aTemp := HB_MATRIXTRANSPOSE(::aWeightsFF1)
       aGradAttention := HB_MATRIXMULTIPLY(aGradHidden, aTemp)
       ? "aGradAttention Sample:", aGradAttention[1][1], aGradAttention[1][2], aGradAttention[1][3], aGradAttention[1][4]
    
       aTemp := HB_MATRIXTRANSPOSE(::aLastAttention)
       ::aGradFF1 := HB_MATRIXMULTIPLY(aTemp, aGradHidden)
       aTemp := HB_MATRIXTRANSPOSE(aGradHidden)
       ::aGradFF2 := HB_MATRIXMULTIPLY(aTemp, aGradOutput)
    
       aTemp := HB_MATRIXTRANSPOSE(::aLastV)
       aTempScores := HB_MATRIXMULTIPLY(aGradAttention, aTemp)
       FOR i := 1 TO nSeqLen
          FOR j := 1 TO nSeqLen
             aTempScores[i][j] := ::aLastScores[i][j] * (1 - ::aLastScores[i][j]) * aTempScores[i][j]
          NEXT
       NEXT
    
       aTemp := HB_MATRIXTRANSPOSE(::aLastInput)
       ::aGradQ := HB_MATRIXMULTIPLY(aTemp, HB_MATRIXMULTIPLY(aTempScores, ::aLastQ))
       ::aGradK := HB_MATRIXMULTIPLY(aTemp, HB_MATRIXMULTIPLY(aTempScores, ::aLastK))
       ::aGradV := HB_MATRIXMULTIPLY(HB_MATRIXTRANSPOSE(::aLastScores), aGradAttention)
       ::aGradV := HB_MATRIXMULTIPLY(aTemp, ::aGradV)
    
       // Gradient clipping
       FOR i := 1 TO ::nInputSize
          FOR j := 1 TO ::nInputSize
             ::aGradQ[i][j] := Max(Min(::aGradQ[i][j], nMaxGrad), -nMaxGrad)
             ::aGradK[i][j] := Max(Min(::aGradK[i][j], nMaxGrad), -nMaxGrad)
             ::aGradV[i][j] := Max(Min(::aGradV[i][j], nMaxGrad), -nMaxGrad)
          NEXT
       NEXT
       FOR i := 1 TO ::nInputSize
          FOR j := 1 TO ::nFFHidden
             ::aGradFF1[i][j] := Max(Min(::aGradFF1[i][j], nMaxGrad), -nMaxGrad)
          NEXT
       NEXT
       FOR i := 1 TO ::nFFHidden
          FOR j := 1 TO ::nInputSize
             ::aGradFF2[i][j] := Max(Min(::aGradFF2[i][j], nMaxGrad), -nMaxGrad)
          NEXT
       NEXT
    
       // Compute adaptive learning rate, minimum set to 0.8
       nGradNorm := Sqrt(HB_MATRIXSUM(HB_MATRIXMULTIPLY(::aGradQ, HB_MATRIXTRANSPOSE(::aGradQ)))) + ;
                    Sqrt(HB_MATRIXSUM(HB_MATRIXMULTIPLY(::aGradK, HB_MATRIXTRANSPOSE(::aGradK)))) + ;
                    Sqrt(HB_MATRIXSUM(HB_MATRIXMULTIPLY(::aGradV, HB_MATRIXTRANSPOSE(::aGradV))))
       nLearningRateAdjust := Max(0.8, Min(1.0, nGradNorm))  // Adjusted minimum from 0.5 to 0.8
    
       // Update weights
       ? "WeightsQ[1][1] before:", ::aWeightsQ[1][1]
       aTemp := HB_MATRIXSCALE(::aGradQ, -::nLearningRate * nLearningRateAdjust)
       ::aWeightsQ := HB_MATRIXADD(::aWeightsQ, aTemp)
       aTemp := HB_MATRIXSCALE(::aGradK, -::nLearningRate * nLearningRateAdjust)
       ::aWeightsK := HB_MATRIXADD(::aWeightsK, aTemp)
       aTemp := HB_MATRIXSCALE(::aGradV, -::nLearningRate * nLearningRateAdjust)
       ::aWeightsV := HB_MATRIXADD(::aWeightsK, aTemp)
       aTemp := HB_MATRIXSCALE(::aGradFF1, -::nLearningRate * nLearningRateAdjust)
       ::aWeightsFF1 := HB_MATRIXADD(::aWeightsFF1, aTemp)
       aTemp := HB_MATRIXSCALE(::aGradFF2, -::nLearningRate * nLearningRateAdjust)
       ::aWeightsFF2 := HB_MATRIXADD(::aWeightsFF2, aTemp)
    
       ? "WeightsQ[1][1] after update:", ::aWeightsQ[1][1]
       ? "WeightsFF2[1][1] after update:", ::aWeightsFF2[1][1]
       ? "Learning Rate Adjust:", nLearningRateAdjust
       ? "Gradient Magnitudes:"
       ? "Q:", Sqrt(HB_MATRIXSUM(HB_MATRIXMULTIPLY(::aGradQ, HB_MATRIXTRANSPOSE(::aGradQ))))
       ? "K:", Sqrt(HB_MATRIXSUM(HB_MATRIXMULTIPLY(::aGradK, HB_MATRIXTRANSPOSE(::aGradK))))
       ? "V:", Sqrt(HB_MATRIXSUM(HB_MATRIXMULTIPLY(::aGradV, HB_MATRIXTRANSPOSE(::aGradV))))
       ? "FF1:", Sqrt(HB_MATRIXSUM(HB_MATRIXMULTIPLY(::aGradFF1, HB_MATRIXTRANSPOSE(::aGradFF1))))
       ? "FF2:", Sqrt(HB_MATRIXSUM(HB_MATRIXMULTIPLY(::aGradFF2, HB_MATRIXTRANSPOSE(::aGradFF2))))
    
       ::aGradQ := HB_MATRIXZERO(::nInputSize, ::nInputSize)
       ::aGradK := HB_MATRIXZERO(::nInputSize, ::nInputSize)
       ::aGradV := HB_MATRIXZERO(::nInputSize, ::nInputSize)
       ::aGradFF1 := HB_MATRIXZERO(::nInputSize, ::nFFHidden)
       ::aGradFF2 := HB_MATRIXZERO(::nFFHidden, ::nInputSize)
       RETURN NIL
    
    METHOD Train(aInput, aTarget) CLASS ThoughtBackupTransformer
       LOCAL aOutput, nLoss, i, j
       aOutput := ::Forward(aInput)
       nLoss := ::ComputeLoss(aOutput, aTarget)
       ? "Initial Loss Before Backprop:", nLoss
       ? "aOutput vs aTarget:"
       FOR i := 1 TO Len(aOutput)
          FOR j := 1 TO ::nInputSize
             ?? "O:", aOutput[i][j], "T:", aTarget[i][j], " "
          NEXT
          ?
       NEXT
       ::Backprop(aOutput, aTarget)
       RETURN nLoss
    
    METHOD Replay(aPartialInput) CLASS ThoughtBackupTransformer
       LOCAL nSeqLen, aOutput
       nSeqLen := Len(aPartialInput)
       IF nSeqLen > ::nMaxSeqLen
          ? "Error: Partial input exceeds max sequence length"
          RETURN NIL
       ENDIF
       aOutput := ::Forward(aPartialInput)
       RETURN aOutput
    
    METHOD StoreThought(aThought, cPrompt) CLASS ThoughtBackupTransformer
       LOCAL nSeqLen, nId, i, j
       nSeqLen := Len(aThought)
       nId := hb_RandomInt(1, 999999)
       USE thoughts.dbf SHARED
       FOR i := 1 TO nSeqLen
          dbAppend()
          REPLACE ID WITH nId,;
                  SEQNUM WITH i,;
                  TIMESTAMP WITH Date(),;
                  PROMPT WITH cPrompt,;
                  THOUGHT1 WITH aThought[i][1],;
                  THOUGHT2 WITH aThought[i][2],;
                  THOUGHT3 WITH aThought[i][3],;
                  THOUGHT4 WITH aThought[i][4]
       NEXT
       dbCommit()
       dbCloseArea()
       RETURN nId
    
    METHOD RetrieveThought(nId) CLASS ThoughtBackupTransformer
       LOCAL aThought, cPrompt, nSeqLen := 0, i
       USE thoughts.dbf SHARED
       dbSeek(nId)
       WHILE !Eof() .AND. FieldGet(FieldPos("ID")) == nId
          nSeqLen++
          dbSkip()
       END
       dbSeek(nId)
       IF nSeqLen > 0
          aThought := Array(nSeqLen, ::nInputSize)
          cPrompt := ""
          i := 1
          WHILE !Eof() .AND. FieldGet(FieldPos("ID")) == nId
             aThought[i][1] := FieldGet(FieldPos("THOUGHT1"))
             aThought[i][2] := FieldGet(FieldPos("THOUGHT2"))
             aThought[i][3] := FieldGet(FieldPos("THOUGHT3"))
             aThought[i][4] := FieldGet(FieldPos("THOUGHT4"))
             IF i == 1
                cPrompt := FieldGet(FieldPos("PROMPT"))
             ENDIF
             i++
             dbSkip()
          END
          dbCloseArea()
          RETURN {aThought, cPrompt}
       ENDIF
       dbCloseArea()
       RETURN NIL
    
    METHOD InitPositionalEncoding() CLASS ThoughtBackupTransformer
       LOCAL i, j, nPos, nDim, nFreq, nAngle
       ::aPosEnc := Array(::nMaxSeqLen, ::nInputSize)
       FOR nPos := 1 TO ::nMaxSeqLen
          FOR nDim := 1 TO ::nInputSize
             nFreq := nDim / 2
             nAngle := (nPos - 1) / (10000 ^ (2 * nFreq / ::nInputSize))
             IF nDim % 2 == 1
                ::aPosEnc[nPos][nDim] := Sin(nAngle)
             ELSE
                ::aPosEnc[nPos][nDim] := Cos(nAngle)
             ENDIF
          NEXT
       NEXT
       RETURN NIL
    
    METHOD QueryThought(cQuestion) CLASS ThoughtBackupTransformer
       LOCAL aWords, aMatches := {}, nId, aRetrieved, cResponse := "", i, j, k, aQuestion, aQuestionAvg := {0, 0, 0, 0}, aVocab, aReplay, nSim, aThoughtAvg, aVec, cBlend
       aWords := hb_aTokens(Lower(cQuestion), " ")
       aVocab := {;
          {"i", {1, 0, 0, 0}}, {"me", {1, 0, 0, 0}}, {"you", {0, 1, 0, 1}},;
          {"feel", {1, 0, 0, 1}}, {"happy", {1, 1, 0, 1}}, {"cause", {0, 0, 0, 0}},;
          {"talking", {0, 0, 1, 1}}, {"to", {0, 0, 0, 0}}, {"make", {0, 0, 1, 1}},;
          {"smile", {1, 1, 1, 1}}, {"love", {1, 1, 0, 1}}, {"coding", {0, 0, 1, 1}},;
          {"inspire", {0, 1, 1, 1}}, {"today", {0, 0, 0, 1}}, {"is", {0, 0, 0, 0}},;
          {"sunny", {0, 1, 0, 1}}, {"enjoy", {1, 1, 0, 1}}, {"our", {1, 1, 0, 0}},;
          {"chats", {0, 1, 1, 1}}, {"adore", {1, 1, 0, 1}}, {"time", {0, 0, 0, 1}},;
          {"together", {1, 1, 0, 0}}, {"what", {0, 0, 0, 0}}, {"we", {1, 1, 0, 0}},;
          {"do", {1, 0, 1, 0}}, {"great", {0, 1, 0, 1}}, {"friend", {0, 1, 0, 1}},;
          {"think", {1, 0, 1, 1}}, {"why", {0, 0, 0, 0}}, {"how", {0, 0, 0, 0}}}
       aQuestion := TokenizeThought(cQuestion)
       FOR i := 1 TO Len(aQuestion)
          FOR j := 1 TO 4
             aQuestionAvg[j] += aQuestion[i][j]
          NEXT
       NEXT
       FOR j := 1 TO 4
          aQuestionAvg[j] /= Len(aQuestion)
       NEXT
       USE thoughts.dbf SHARED
       dbGoTop()
       WHILE !Eof()
          nId := FieldGet(FieldPos("ID"))
          aRetrieved := ::RetrieveThought(nId)
          IF aRetrieved != NIL
             aThoughtAvg := {0, 0, 0, 0}
             FOR i := 1 TO Len(aRetrieved[1])
                FOR j := 1 TO 4
                   aThoughtAvg[j] += aRetrieved[1][i][j]
                NEXT
             NEXT
             FOR j := 1 TO 4
                aThoughtAvg[j] /= Len(aRetrieved[1])
             NEXT
             nSim := CosineSimilarity(aQuestionAvg, aThoughtAvg)
             IF nSim > 0.5
                AAdd(aMatches, {nId, aRetrieved[1], aRetrieved[2], nSim})
             ENDIF
          ENDIF
          dbSkip()
       END
       dbCloseArea()
       IF Len(aMatches) > 0
          ASort(aMatches, , , {|x, y| x[4] > y[4]})
          FOR i := 1 TO Min(Len(aMatches), 3)
             cResponse += "I think: "
             FOR j := 1 TO Len(aMatches[i][2])
                aVec := {aMatches[i][2][j][1], aMatches[i][2][j][2], aMatches[i][2][j][3], aMatches[i][2][j][4]}
                FOR k := 1 TO Len(aVocab)
                   IF Abs(aVec[1] - aVocab[k][2][1]) < 0.2 .AND. Abs(aVec[2] - aVocab[k][2][2]) < 0.2 .AND.;
                      Abs(aVec[3] - aVocab[k][2][3]) < 0.2 .AND. Abs(aVec[4] - aVocab[k][2][4]) < 0.2
                      cResponse += aVocab[k][1] + " "
                      EXIT
                   ENDIF
                NEXT
             NEXT
             cResponse := AllTrim(cResponse)
             IF Left(cResponse, 2) == "I "; cResponse += "."; ELSE; cResponse := "You " + cResponse + "."; ENDIF
             cResponse += " "
             IF i < Len(aMatches)
                cBlend := ""
                FOR j := 1 TO Len(aMatches[i+1][2])
                   aVec := {aMatches[i+1][2][j][1], aMatches[i+1][2][j][2], aMatches[i+1][2][j][3], aMatches[i+1][2][j][4]}
                   FOR k := 1 TO Len(aVocab)
                      IF Abs(aVec[1] - aVocab[k][2][1]) < 0.2 .AND. Abs(aVec[2] - aVocab[k][2][2]) < 0.2 .AND.;
                         Abs(aVec[3] - aVocab[k][2][3]) < 0.2 .AND. Abs(aVec[4] - aVocab[k][2][4]) < 0.2
                         cBlend += aVocab[k][1] + " "
                         EXIT
                      ENDIF
                   NEXT
                NEXT
                cResponse += "Also, " + AllTrim(cBlend) + "."
             ENDIF
          NEXT
          RETURN AllTrim(cResponse)
       ENDIF
       aReplay := ::Replay(aQuestion)
       cResponse := "I guess: "
       FOR j := 1 TO Len(aReplay)
          aVec := {aReplay[j][1], aReplay[j][2], aReplay[j][3], aReplay[j][4]}
          FOR k := 1 TO Len(aVocab)
             IF Abs(aVec[1] - aVocab[k][2][1]) < 0.2 .AND. Abs(aVec[2] - aVocab[k][2][2]) < 0.2 .AND.;
                Abs(aVec[3] - aVocab[k][2][3]) < 0.2 .AND. Abs(aVec[4] - aVocab[k][2][4]) < 0.2
                cResponse += aVocab[k][1] + " "
                EXIT
             ENDIF
          NEXT
       NEXT
       RETURN AllTrim(cResponse) + "."
    
    FUNCTION CosineSimilarity(aVec1, aVec2)
       LOCAL nDot := 0, nMag1 := 0, nMag2 := 0, i
       FOR i := 1 TO 4
          nDot += aVec1[i] * aVec2[i]
          nMag1 += aVec1[i]^2
          nMag2 += aVec2[i]^2
       NEXT
       nMag1 := Sqrt(nMag1)
       nMag2 := Sqrt(nMag2)
       RETURN IIF(nMag1 * nMag2 == 0, 0, nDot / (nMag1 * nMag2))
    
    FUNCTION TokenizeThought(cThought)
       LOCAL aWords, aInput, i, j, aVocab, aVector
       aWords := hb_aTokens(Lower(cThought), " ")
       aVocab := {;
          {"i", {1, 0, 0, 0}}, {"me", {1, 0, 0, 0}}, {"you", {0, 1, 0, 1}},;
          {"feel", {1, 0, 0, 1}}, {"happy", {1, 1, 0, 1}}, {"cause", {0, 0, 0, 0}},;
          {"talking", {0, 0, 1, 1}}, {"to", {0, 0, 0, 0}}, {"make", {0, 0, 1, 1}},;
          {"smile", {1, 1, 1, 1}}, {"love", {1, 1, 0, 1}}, {"coding", {0, 0, 1, 1}},;
          {"inspire", {0, 1, 1, 1}}, {"today", {0, 0, 0, 1}}, {"is", {0, 0, 0, 0}},;
          {"sunny", {0, 1, 0, 1}}, {"enjoy", {1, 1, 0, 1}}, {"our", {1, 1, 0, 0}},;
          {"chats", {0, 1, 1, 1}}, {"adore", {1, 1, 0, 1}}, {"time", {0, 0, 0, 1}},;
          {"together", {1, 1, 0, 0}}, {"what", {0, 0, 0, 0}}, {"we", {1, 1, 0, 0}},;
          {"do", {1, 0, 1, 0}}, {"great", {0, 1, 0, 1}}, {"friend", {0, 1, 0, 1}},;
          {"think", {1, 0, 1, 1}}, {"why", {0, 0, 0, 0}}, {"how", {0, 0, 0, 0}}}
       aInput := Array(Len(aWords), 4)
       FOR i := 1 TO Len(aWords)
          aVector := {0, 0, 0, 0}
          FOR j := 1 TO Len(aVocab)
             IF aWords[i] == aVocab[j][1]
                aVector := aVocab[j][2]
                EXIT
             ENDIF
          NEXT
          aInput[i][1] := aVector[1]
          aInput[i][2] := aVector[2]
          aInput[i][3] := aVector[3]
          aInput[i][4] := aVector[4]
       NEXT
       RETURN aInput
    
    FUNCTION GetInput(cPrompt)
       LOCAL cInput := ""
       ?? cPrompt
       ACCEPT TO cInput
       RETURN AllTrim(cInput)
    
    #pragma BEGINDUMP
    #include <hbapi.h>
    #include <hbapiitm.h>
    #include <hbapierr.h>
    #include <math.h>
    
    HB_FUNC( HB_MATRIXMULTIPLY )
    {
       PHB_ITEM pMatrix1 = hb_param( 1, HB_IT_ARRAY );
       PHB_ITEM pMatrix2 = hb_param( 2, HB_IT_ARRAY );
       if( pMatrix1 && pMatrix2 )
       {
          int rows1 = hb_arrayLen( pMatrix1 );
          PHB_ITEM pRow1, pRow2, pResult, pRowResult;
          int i, k, cols1, rows2, cols2;
    
          if( rows1 == 0 )
          {
             hb_errRT_BASE( EG_ARG, 3012, "First matrix is empty", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
             return;
          }
          pRow1 = hb_arrayGetItemPtr( pMatrix1, 1 );
          if( !pRow1 || !HB_IS_ARRAY( pRow1 ) )
          {
             hb_errRT_BASE( EG_ARG, 3012, "First matrix is not valid", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
             return;
          }
          cols1 = hb_arrayLen( pRow1 );
    
          rows2 = hb_arrayLen( pMatrix2 );
          if( rows2 == 0 )
          {
             hb_errRT_BASE( EG_ARG, 3012, "Second matrix is empty", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
             return;
          }
          pRow2 = hb_arrayGetItemPtr( pMatrix2, 1 );
          if( !pRow2 || !HB_IS_ARRAY( pRow2 ) )
          {
             hb_errRT_BASE( EG_ARG, 3012, "Second matrix is not valid", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
             return;
          }
          cols2 = hb_arrayLen( pRow2 );
    
          if( cols1 != rows2 )
          {
             hb_errRT_BASE( EG_ARG, 3012, "Matrix dimensions do not match for multiplication", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
             return;
          }
    
          pResult = hb_itemArrayNew( rows1 );
    
          for( i = 0; i < rows1; i++ )
          {
             PHB_ITEM pRowResult = hb_itemArrayNew( cols2 );
             hb_arraySet( pResult, i + 1, pRowResult );
             hb_itemRelease( pRowResult );
          }
    
          for( i = 0; i < rows1; i++ )
          {
             PHB_ITEM pRowA = hb_arrayGetItemPtr( pMatrix1, i + 1 );
             int j;
    
             for( j = 0; j < cols2; j++ )
             {
                double sum = 0.0;
                for( k = 0; k < cols1; k++ )
                {
                   double a = hb_arrayGetND( pRowA, k + 1 );
                   PHB_ITEM pRowB = hb_arrayGetItemPtr( pMatrix2, k + 1 );
                   double b = hb_arrayGetND( pRowB, j + 1 );
                   sum += a * b;
                }
                pRowResult = hb_arrayGetItemPtr( pResult, i + 1 );
                hb_arraySetND( pRowResult, j + 1, sum );
             }
          }
    
          hb_itemReturnRelease( pResult );
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, "Invalid parameters", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    
    HB_FUNC( HB_MATRIXSCALE )
    {
       PHB_ITEM pMatrix = hb_param( 1, HB_IT_ARRAY );
       double scale = hb_parnd( 2 );
       if( pMatrix )
       {
          HB_SIZE nRows = hb_arrayLen( pMatrix );
          HB_SIZE i, j;
          PHB_ITEM pMatrixResult = hb_itemArrayNew( nRows );
    
          for( i = 0; i < nRows; i++ )
          {
             PHB_ITEM pRow = hb_arrayGetItemPtr( pMatrix, i + 1 );
             HB_SIZE nCols = hb_arrayLen( pRow );
    
             PHB_ITEM pRowResult = hb_itemArrayNew( nCols );
    
             for( j = 0; j < nCols; j++ )
             {
                double value = hb_arrayGetND( pRow, j + 1 );
                hb_arraySetND( pRowResult, j + 1, value * scale );
             }
    
             hb_arraySet( pMatrixResult, i + 1, pRowResult );
             hb_itemRelease( pRowResult );
          }
    
          hb_itemReturnRelease( pMatrixResult );
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    
    HB_FUNC( HB_MATRIXTRANSPOSE )
    {
       PHB_ITEM pMatrix = hb_param( 1, HB_IT_ARRAY );
       if( pMatrix )
       {
          HB_SIZE nRows = hb_arrayLen( pMatrix );
          HB_SIZE nCols = hb_arrayLen( hb_arrayGetItemPtr( pMatrix, 1 ) );
          HB_SIZE i, j;
    
          PHB_ITEM pMatrixResult = hb_itemArrayNew( nCols );
    
          for( i = 0; i < nCols; i++ )
          {
             hb_arraySet( pMatrixResult, i + 1, hb_itemArrayNew( nRows ) );
          }
    
          for( i = 0; i < nRows; i++ )
          {
             PHB_ITEM pRow = hb_arrayGetItemPtr( pMatrix, i + 1 );
             for( j = 0; j < nCols; j++ )
             {
                double value = hb_arrayGetND( pRow, j + 1 );
                PHB_ITEM pTransposedRow = hb_arrayGetItemPtr( pMatrixResult, j + 1 );
                hb_arraySetND( pTransposedRow, i + 1, value );
             }
          }
    
          hb_itemReturnRelease( pMatrixResult );
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    
    HB_FUNC( HB_MATRIXZERO )
    {
       HB_SIZE nRows = hb_parns( 1 );
       HB_SIZE nCols = hb_parns( 2 );
       if( nRows > 0 && nCols > 0 )
       {
          HB_SIZE i, j;
    
          PHB_ITEM pMatrix = hb_itemArrayNew( nRows );
    
          for( i = 0; i < nRows; i++ )
          {
             PHB_ITEM pRow = hb_itemArrayNew( nCols );
             for( j = 0; j < nCols; j++ )
             {
                hb_arraySetND( pRow, j + 1, 0.0 );
             }
             hb_arraySet( pMatrix, i + 1, pRow );
             hb_itemRelease( pRow );
          }
    
          hb_itemReturnRelease( pMatrix );
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    
    HB_FUNC( HB_MATRIXRANDOM )
    {
       HB_SIZE nRows = hb_parns( 1 );
       HB_SIZE nCols = hb_parns( 2 );
       if( nRows > 0 && nCols > 0 )
       {
          HB_SIZE i, j;
    
          PHB_ITEM pMatrix = hb_itemArrayNew( nRows );
    
          for( i = 0; i < nRows; i++ )
          {
             PHB_ITEM pRow = hb_itemArrayNew( nCols );
             for( j = 0; j < nCols; j++ )
             {
                double randomValue = (double)rand() / RAND_MAX;
                hb_arraySetND( pRow, j + 1, randomValue );
             }
             hb_arraySet( pMatrix, i + 1, pRow );
             hb_itemRelease( pRow );
          }
    
          hb_itemReturnRelease( pMatrix );
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    
    HB_FUNC( HB_SOFTMAX )
    {
       PHB_ITEM pValues = hb_param( 1, HB_IT_ARRAY );
       if( pValues )
       {
          int nRows = hb_arrayLen( pValues );
          if( nRows > 0 )
          {
             PHB_ITEM pFirstRow = hb_arrayGetItemPtr( pValues, 1 );
             int nCols = hb_arrayLen( pFirstRow );
    
             PHB_ITEM pResult = hb_itemArrayNew( nRows );
             int i, j;
    
             for( i = 0; i < nRows; i++ )
             {
                PHB_ITEM pRow = hb_arrayGetItemPtr( pValues, i + 1 );
                PHB_ITEM pRowResult = hb_itemArrayNew( nCols );
    
                double* expValues = (double*) hb_xgrab( nCols * sizeof(double) );
                double sumExp = 0.0;
    
                for( j = 0; j < nCols; j++ )
                {
                   double value = hb_arrayGetND( pRow, j + 1 );
                   expValues[j] = pow( M_E, value );
                   sumExp += expValues[j];
                }
    
                for( j = 0; j < nCols; j++ )
                {
                   double softmaxValue = expValues[j] / sumExp;
                   hb_arraySetND( pRowResult, j + 1, softmaxValue );
                }
    
                hb_xfree( expValues );
    
                hb_arraySet( pResult, i + 1, pRowResult );
                hb_itemRelease( pRowResult );
             }
    
             hb_itemReturnRelease( pResult );
          }
          else
          {
             hb_errRT_BASE( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
          }
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    
    HB_FUNC( HB_MATRIXADD )
    {
       PHB_ITEM pMatrix1 = hb_param( 1, HB_IT_ARRAY );
       PHB_ITEM pMatrix2 = hb_param( 2, HB_IT_ARRAY );
       if( pMatrix1 && pMatrix2 )
       {
          HB_SIZE nRows1 = hb_arrayLen( pMatrix1 );
          HB_SIZE nRows2 = hb_arrayLen( pMatrix2 );
    
          if( nRows1 == nRows2 && nRows1 > 0 )
          {
             HB_SIZE nCols1 = hb_arrayLen( hb_arrayGetItemPtr( pMatrix1, 1 ) );
             HB_SIZE nCols2 = hb_arrayLen( hb_arrayGetItemPtr( pMatrix2, 1 ) );
    
             if( nCols1 == nCols2 && nCols1 > 0 )
             {
                HB_SIZE i, j;
    
                PHB_ITEM pMatrixResult = hb_itemArrayNew( nRows1 );
    
                for( i = 0; i < nRows1; i++ )
                {
                   PHB_ITEM pRow1 = hb_arrayGetItemPtr( pMatrix1, i + 1 );
                   PHB_ITEM pRow2 = hb_arrayGetItemPtr( pMatrix2, i + 1 );
    
                   PHB_ITEM pRowResult = hb_itemArrayNew( nCols1 );
    
                   for( j = 0; j < nCols1; j++ )
                   {
                      double value1 = hb_arrayGetND( pRow1, j + 1 );
                      double value2 = hb_arrayGetND( pRow2, j + 1 );
                      hb_arraySetND( pRowResult, j + 1, value1 + value2 );
                   }
    
                   hb_arraySet( pMatrixResult, i + 1, pRowResult );
                   hb_itemRelease( pRowResult );
                }
    
                hb_itemReturnRelease( pMatrixResult );
             }
             else
             {
                hb_errRT_BASE( EG_ARG, 3012, "Column dimensions do not match", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
             }
          }
          else
          {
             hb_errRT_BASE( EG_ARG, 3012, "Row dimensions do not match", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
          }
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, "Invalid parameters", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    
    HB_FUNC( HB_MATRIXSUM )
    {
       PHB_ITEM pMatrix = hb_param( 1, HB_IT_ARRAY );
       if( pMatrix )
       {
          int nRows = hb_arrayLen( pMatrix );
          if( nRows > 0 )
          {
             double sum = 0.0;
             int i, j;
             PHB_ITEM pRow;
             int nCols = hb_arrayLen( hb_arrayGetItemPtr( pMatrix, 1 ) );
    
             for( i = 0; i < nRows; i++ )
             {
                pRow = hb_arrayGetItemPtr( pMatrix, i + 1 );
                for( j = 0; j < nCols; j++ )
                {
                   sum += hb_arrayGetND( pRow, j + 1 );
                }
             }
    
             hb_retnd( sum );
          }
          else
          {
             hb_errRT_BASE( EG_ARG, 3012, "Empty matrix", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
          }
       }
       else
       {
          hb_errRT_BASE( EG_ARG, 3012, "Invalid parameter", HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
       }
    }
    
    #pragma ENDDUMP
    ]]>
    <![CDATA[Artificial Intelligence examples :: Re: thoughts.prg transformer :: Reply by Antonio Linares]]> 2025-02-21T00:16:38-07:00 2025-02-21T00:16:38-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=40&t=45441&p=277817#p277817
    This is an impressive implementation of a transformer-based "Thought Backup System" written in Harbour (a modern Clipper/xBase dialect). Let me break down what this code does and provide some insights:
    Overview
    The code implements a simplified transformer architecture designed to:
    Store and train on thoughts: Represented as short text inputs (e.g., "I feel happy cause talking to you").
    Retrieve thoughts: By ID from a database.
    Query thoughts: Generate responses based on similarity to stored thoughts.
    Replay thoughts: Regenerate outputs from partial inputs.
    It uses a mix of self-attention, feed-forward neural networks, and positional encoding, mimicking aspects of modern transformer models like those used in NLP (e.g., BERT, GPT).
    Key Components
    1. ThoughtBackupTransformer Class
    Initialization:
    Sets up weight matrices for Query (Q), Key (K), Value (V), and Feed-Forward layers (FF1, FF2).
    Uses Xavier initialization for weights.
    Creates a simple database (thoughts.dbf) to store thoughts with IDs, timestamps, and vector representations.
    Implements positional encoding for sequence awareness.
    SelfAttention:
    Computes Q, K, V matrices from the input.
    Applies scaled dot-product attention: softmax(Q * K^T / sqrt(d_k)) * V.
    Includes debug outputs for attention scores.
    FeedForward:
    Two-layer neural network with a hidden layer.
    Applies matrix multiplication through weights FF1 and FF2.
    Train:
    Forward pass computes output.
    Loss is mean squared error between output and target.
    Backpropagation updates weights with gradient clipping and adaptive learning rate.
    StoreThought / RetrieveThought:
    Stores vectorized thoughts in a DBF file.
    Retrieves them by ID.
    QueryThought:
    Tokenizes input, computes similarity with stored thoughts using cosine similarity.
    Reconstructs responses from vectors using a predefined vocabulary.
    2. Main Function
    Training Example:
    Trains on two thoughts: "I feel happy cause talking to you" and "you make me smile".
    Adds noise to targets for robustness.
    Runs 10 iterations per thought, printing loss and sample outputs.
    Interactive Loop:
    Commands: ADD (train new thought), RETRIEVE (fetch by ID), QUERY (generate response), EXIT.
    Demonstrates a simple CLI interface.
    3. Helper Functions
    TokenizeThought:
    Maps words to 4D vectors based on a hardcoded vocabulary (e.g., "happy" → {1, 1, 0, 1}).
    CosineSimilarity:
    Measures vector similarity for querying.
    C Functions (BEGINDUMP):
    Matrix operations (multiply, scale, transpose, etc.) implemented in C for performance.
    Observations
    Simplified Transformer:
    Single-layer attention with no multi-head mechanism.
    Fixed 4D embeddings instead of high-dimensional ones (e.g., 768 in BERT).
    No normalization layers (e.g., LayerNorm) or residual connections, which might limit stability.
    Training:
    Uses a basic MSE loss, which is unusual for transformers (cross-entropy is common in NLP).
    Small learning rate (0.1) with adaptive adjustment based on gradient norm.
    Vocabulary:
    Hardcoded and small (30 words), limiting expressiveness.
    Vector assignments are arbitrary but consistent.
    Storage:
    Uses a DBF file, a nod to Clipper’s heritage, instead of modern databases or in-memory structures.
    Debugging:
    Extensive trace outputs (e.g., gradient magnitudes, weight updates) aid in understanding training dynamics.
    Potential Improvements
    Dynamic Vocabulary: Allow adding new words dynamically with learned embeddings.
    Multi-Head Attention: Enhance representation power.
    Normalization: Add LayerNorm or residual connections for stability.
    Loss Function: Use cross-entropy if shifting towards classification or generation tasks.
    Scalability: Increase nInputSize and nFFHidden for richer representations.
    Error Handling: More robust checks for matrix dimensions and input validity.
    Example Interaction
    If I run this and:
    ADD: "I love coding today" → Trains and stores it.
    QUERY: "How do you feel?" → Might respond "I think: I feel happy cause talking to you. Also, you make me smile." (based on similarity to trained thoughts).
    ]]>
    This is an impressive implementation of a transformer-based "Thought Backup System" written in Harbour (a modern Clipper/xBase dialect). Let me break down what this code does and provide some insights:
    Overview
    The code implements a simplified transformer architecture designed to:
    Store and train on thoughts: Represented as short text inputs (e.g., "I feel happy cause talking to you").
    Retrieve thoughts: By ID from a database.
    Query thoughts: Generate responses based on similarity to stored thoughts.
    Replay thoughts: Regenerate outputs from partial inputs.
    It uses a mix of self-attention, feed-forward neural networks, and positional encoding, mimicking aspects of modern transformer models like those used in NLP (e.g., BERT, GPT).
    Key Components
    1. ThoughtBackupTransformer Class
    Initialization:
    Sets up weight matrices for Query (Q), Key (K), Value (V), and Feed-Forward layers (FF1, FF2).
    Uses Xavier initialization for weights.
    Creates a simple database (thoughts.dbf) to store thoughts with IDs, timestamps, and vector representations.
    Implements positional encoding for sequence awareness.
    SelfAttention:
    Computes Q, K, V matrices from the input.
    Applies scaled dot-product attention: softmax(Q * K^T / sqrt(d_k)) * V.
    Includes debug outputs for attention scores.
    FeedForward:
    Two-layer neural network with a hidden layer.
    Applies matrix multiplication through weights FF1 and FF2.
    Train:
    Forward pass computes output.
    Loss is mean squared error between output and target.
    Backpropagation updates weights with gradient clipping and adaptive learning rate.
    StoreThought / RetrieveThought:
    Stores vectorized thoughts in a DBF file.
    Retrieves them by ID.
    QueryThought:
    Tokenizes input, computes similarity with stored thoughts using cosine similarity.
    Reconstructs responses from vectors using a predefined vocabulary.
    2. Main Function
    Training Example:
    Trains on two thoughts: "I feel happy cause talking to you" and "you make me smile".
    Adds noise to targets for robustness.
    Runs 10 iterations per thought, printing loss and sample outputs.
    Interactive Loop:
    Commands: ADD (train new thought), RETRIEVE (fetch by ID), QUERY (generate response), EXIT.
    Demonstrates a simple CLI interface.
    3. Helper Functions
    TokenizeThought:
    Maps words to 4D vectors based on a hardcoded vocabulary (e.g., "happy" → {1, 1, 0, 1}).
    CosineSimilarity:
    Measures vector similarity for querying.
    C Functions (BEGINDUMP):
    Matrix operations (multiply, scale, transpose, etc.) implemented in C for performance.
    Observations
    Simplified Transformer:
    Single-layer attention with no multi-head mechanism.
    Fixed 4D embeddings instead of high-dimensional ones (e.g., 768 in BERT).
    No normalization layers (e.g., LayerNorm) or residual connections, which might limit stability.
    Training:
    Uses a basic MSE loss, which is unusual for transformers (cross-entropy is common in NLP).
    Small learning rate (0.1) with adaptive adjustment based on gradient norm.
    Vocabulary:
    Hardcoded and small (30 words), limiting expressiveness.
    Vector assignments are arbitrary but consistent.
    Storage:
    Uses a DBF file, a nod to Clipper’s heritage, instead of modern databases or in-memory structures.
    Debugging:
    Extensive trace outputs (e.g., gradient magnitudes, weight updates) aid in understanding training dynamics.
    Potential Improvements
    Dynamic Vocabulary: Allow adding new words dynamically with learned embeddings.
    Multi-Head Attention: Enhance representation power.
    Normalization: Add LayerNorm or residual connections for stability.
    Loss Function: Use cross-entropy if shifting towards classification or generation tasks.
    Scalability: Increase nInputSize and nFFHidden for richer representations.
    Error Handling: More robust checks for matrix dimensions and input validity.
    Example Interaction
    If I run this and:
    ADD: "I love coding today" → Trains and stores it.
    QUERY: "How do you feel?" → Might respond "I think: I feel happy cause talking to you. Also, you make me smile." (based on similarity to trained thoughts).
    ]]>
    <![CDATA[latest AI news :: Re: Using DeepSeek-R1 locally from WebView :: Reply by Antonio Linares]]> 2025-01-27T04:47:25-07:00 2025-01-27T04:47:25-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45342&p=277222#p277222
    Hardware is the limitation, not the browser. Please try it from another computer.

    Anyhow you can use FiveTech's Class TDeepSeek which works really well :)]]>

    Hardware is the limitation, not the browser. Please try it from another computer.

    Anyhow you can use FiveTech's Class TDeepSeek which works really well :)]]>
    <![CDATA[latest AI news :: DeepSeek "Janus Pro" :: Author Antonio Linares]]> 2025-01-30T22:27:28-07:00 2025-01-30T22:27:28-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45360&p=277327#p277327 https://huggingface.co/spaces/deepseek-ai/Janus-Pro-7B

    https://codersera.com/blog/run-deepseek ... -mac-guide]]>
    https://huggingface.co/spaces/deepseek-ai/Janus-Pro-7B

    https://codersera.com/blog/run-deepseek ... -mac-guide]]>
    <![CDATA[latest AI news :: Alternative DeepSeek-R1 website :: Author Antonio Linares]]> 2025-01-31T15:24:16-07:00 2025-01-31T15:24:16-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45367&p=277354#p277354 https://github.com/marketplace/models/a ... eepSeek-R1]]> https://github.com/marketplace/models/a ... eepSeek-R1]]> <![CDATA[latest AI news :: ollama increasing the context window :: Author Antonio Linares]]> 2025-01-30T23:20:09-07:00 2025-01-30T23:20:09-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45361&p=277328#p277328
    ollama run deepseek-r1:32b
    /set parameter num_ctx 8192
    /save deepseek-r1:32b-8k
    ollama serve]]>

    ollama run deepseek-r1:32b
    /set parameter num_ctx 8192
    /save deepseek-r1:32b-8k
    ollama serve]]>
    <![CDATA[latest AI news :: Re: ollama increasing the context window :: Reply by Antonio Linares]]> 2025-02-01T04:02:12-07:00 2025-02-01T04:02:12-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45361&p=277358#p277358
    localhost:11434

    and you will get:

    "Ollama is running"]]>

    localhost:11434

    and you will get:

    "Ollama is running"]]>
    <![CDATA[latest AI news :: Re: ollama increasing the context window :: Reply by Antonio Linares]]> 2025-02-01T04:09:56-07:00 2025-02-01T04:09:56-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45361&p=277359#p277359
    launchctl setenv OLLAMA_HOST "0.0.0.0"

    and restart the ollama

    Our good friend Lailton is testing from his Mac M1 Pro :D]]>

    launchctl setenv OLLAMA_HOST "0.0.0.0"

    and restart the ollama

    Our good friend Lailton is testing from his Mac M1 Pro :D]]>
    <![CDATA[latest AI news :: SFT (supervised fine tunning) vs RL (reinforcement learning) :: Author Antonio Linares]]> 2025-02-03T23:29:23-07:00 2025-02-03T23:29:23-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45375&p=277409#p277409 SFT) y el Reinforcement Learning (RL) son dos enfoques clave para entrenar modelos de lenguaje (LLMs) como ChatGPT, pero tienen diferencias fundamentales en su filosofía, implementación y resultados.

    1. Supervised Fine-Tuning (SFT)
    Qué es:
    Aprendizaje supervisado clásico: Entrenas al modelo con ejemplos de entrada-salida etiquetados, donde un humano proporciona respuestas "ideales" para cada prompt.

    Objetivo: Hacer que el modelo imite el comportamiento humano demostrado en los datos de entrenamiento.

    Cómo funciona:
    Dataset: Pares de (prompt, respuesta ideal).

    Entrenamiento: Minimizar la pérdida (p. ej., entropía cruzada) entre las respuestas del modelo y las respuestas humanas.

    Ventajas:
    Simplicidad: Fácil de implementar con frameworks estándar (como PyTorch).

    Control directo: El modelo sigue fielmente los ejemplos proporcionados.

    Estabilidad: Menos riesgo de comportamientos impredecibles.

    Limitaciones:
    Dependencia de datos: Requiere un dataset grande y de alta calidad.

    Rigidez: No optimiza para métricas complejas (p. ej., creatividad, seguridad).

    Sesgo humano: Reproduce los sesgos o errores presentes en los datos de entrenamiento.

    Ejemplo: Entrenar un modelo para escribir poemas usando un dataset de poemas escritos por humanos.
    Reinforcement Learning (RL)
    Qué es:
    Aprendizaje por retroalimentación: El modelo interactúa con un entorno y recibe recompensas (o penalizaciones) por sus acciones.

    Objetivo: Maximizar una función de recompensa (no solo imitar datos).

    Cómo funciona (RLHF - RL from Human Feedback):
    Reward Model: Un modelo secundario que puntúa respuestas (entrenado con preferencias humanas).

    Optimización: El modelo principal genera respuestas y ajusta sus parámetros para maximizar la recompensa esperada.

    Ventajas:
    Flexibilidad: Optimiza para objetivos complejos (p. ej., "ser útil, honesto e inofensivo").

    Adaptabilidad: Aprende a navegar trade-offs (p. ej., entre creatividad y precisión).

    Mejora iterativa: Puede superar el rendimiento humano en ciertas métricas.

    Limitaciones:
    Complejidad: Requiere diseñar una función de recompensa robusta (evitar reward hacking).

    Inestabilidad: El entrenamiento puede divergir si las recompensas están mal calibradas.

    Coste computacional: Mucho más intensivo que el SFT.

    Ejemplo: Refinar un modelo para que evite respuestas tóxicas, usando recompensas basadas en un detector de toxicidad.
    Diferencias Clave
    | **Aspecto** | **SFT** | **RL** |
    |---------------------------|--------------------------------------|--------------------------------------|
    | **Tipo de aprendizaje** | Imitación (dataset estático) | Maximización de recompensas (dinámico) |
    | **Datos requeridos** | Pares (input, output ideal) | Función de recompensa + interacciones |
    | **Objetivo** | Reproducir respuestas humanas | Optimizar métricas abstractas |
    | **Flexibilidad** | Limitada a datos de entrenamiento | Puede explorar soluciones novedosas |
    | **Riesgo de sesgo** | Alto (depende del dataset) | Moderado (depende de la recompensa) |
    ¿Cuándo usar cada uno?
    SFT:

    Cuando tienes un dataset de alta calidad y quieres un modelo predecible.

    Para tareas estructuradas (p. ej., traducción, resumen).

    Como paso inicial antes de aplicar RL.

    RL:

    Cuando el objetivo es complejo y no se puede capturar en un dataset estático.

    Para alinear el modelo con valores subjetivos (p. ej., ética, estilo).

    En escenarios donde las preferencias humanas son dinámicas (p. ej., asistente personalizado).
    Casos de éxito combinados (SFT + RL)
    Los LLMs de última generación (como ChatGPT) usan ambos métodos secuencialmente:

    SFT: Entrenamiento inicial con datos humanos.

    RLHF: Ajuste fino con recompensas para refinar el comportamiento.

    Ejemplo:

    SFT entrena al modelo para responder preguntas de forma coherente.

    RL lo ajusta para evitar alucinaciones o respuestas dañinas.
    Conclusión
    SFT es como enseñar a un estudiante con un libro de texto: sigue instrucciones al pie de la letra.

    RL es como entrenar a un atleta con un coach: mejora iterativamente basándose en feedback.

    ¡La combinación de ambos permite modelos potentes y alineados con los valores humanos!
    ]]>
    SFT) y el Reinforcement Learning (RL) son dos enfoques clave para entrenar modelos de lenguaje (LLMs) como ChatGPT, pero tienen diferencias fundamentales en su filosofía, implementación y resultados.

    1. Supervised Fine-Tuning (SFT)
    Qué es:
    Aprendizaje supervisado clásico: Entrenas al modelo con ejemplos de entrada-salida etiquetados, donde un humano proporciona respuestas "ideales" para cada prompt.

    Objetivo: Hacer que el modelo imite el comportamiento humano demostrado en los datos de entrenamiento.

    Cómo funciona:
    Dataset: Pares de (prompt, respuesta ideal).

    Entrenamiento: Minimizar la pérdida (p. ej., entropía cruzada) entre las respuestas del modelo y las respuestas humanas.

    Ventajas:
    Simplicidad: Fácil de implementar con frameworks estándar (como PyTorch).

    Control directo: El modelo sigue fielmente los ejemplos proporcionados.

    Estabilidad: Menos riesgo de comportamientos impredecibles.

    Limitaciones:
    Dependencia de datos: Requiere un dataset grande y de alta calidad.

    Rigidez: No optimiza para métricas complejas (p. ej., creatividad, seguridad).

    Sesgo humano: Reproduce los sesgos o errores presentes en los datos de entrenamiento.

    Ejemplo: Entrenar un modelo para escribir poemas usando un dataset de poemas escritos por humanos.
    Reinforcement Learning (RL)
    Qué es:
    Aprendizaje por retroalimentación: El modelo interactúa con un entorno y recibe recompensas (o penalizaciones) por sus acciones.

    Objetivo: Maximizar una función de recompensa (no solo imitar datos).

    Cómo funciona (RLHF - RL from Human Feedback):
    Reward Model: Un modelo secundario que puntúa respuestas (entrenado con preferencias humanas).

    Optimización: El modelo principal genera respuestas y ajusta sus parámetros para maximizar la recompensa esperada.

    Ventajas:
    Flexibilidad: Optimiza para objetivos complejos (p. ej., "ser útil, honesto e inofensivo").

    Adaptabilidad: Aprende a navegar trade-offs (p. ej., entre creatividad y precisión).

    Mejora iterativa: Puede superar el rendimiento humano en ciertas métricas.

    Limitaciones:
    Complejidad: Requiere diseñar una función de recompensa robusta (evitar reward hacking).

    Inestabilidad: El entrenamiento puede divergir si las recompensas están mal calibradas.

    Coste computacional: Mucho más intensivo que el SFT.

    Ejemplo: Refinar un modelo para que evite respuestas tóxicas, usando recompensas basadas en un detector de toxicidad.
    Diferencias Clave
    | **Aspecto** | **SFT** | **RL** |
    |---------------------------|--------------------------------------|--------------------------------------|
    | **Tipo de aprendizaje** | Imitación (dataset estático) | Maximización de recompensas (dinámico) |
    | **Datos requeridos** | Pares (input, output ideal) | Función de recompensa + interacciones |
    | **Objetivo** | Reproducir respuestas humanas | Optimizar métricas abstractas |
    | **Flexibilidad** | Limitada a datos de entrenamiento | Puede explorar soluciones novedosas |
    | **Riesgo de sesgo** | Alto (depende del dataset) | Moderado (depende de la recompensa) |
    ¿Cuándo usar cada uno?
    SFT:

    Cuando tienes un dataset de alta calidad y quieres un modelo predecible.

    Para tareas estructuradas (p. ej., traducción, resumen).

    Como paso inicial antes de aplicar RL.

    RL:

    Cuando el objetivo es complejo y no se puede capturar en un dataset estático.

    Para alinear el modelo con valores subjetivos (p. ej., ética, estilo).

    En escenarios donde las preferencias humanas son dinámicas (p. ej., asistente personalizado).
    Casos de éxito combinados (SFT + RL)
    Los LLMs de última generación (como ChatGPT) usan ambos métodos secuencialmente:

    SFT: Entrenamiento inicial con datos humanos.

    RLHF: Ajuste fino con recompensas para refinar el comportamiento.

    Ejemplo:

    SFT entrena al modelo para responder preguntas de forma coherente.

    RL lo ajusta para evitar alucinaciones o respuestas dañinas.
    Conclusión
    SFT es como enseñar a un estudiante con un libro de texto: sigue instrucciones al pie de la letra.

    RL es como entrenar a un atleta con un coach: mejora iterativamente basándose en feedback.

    ¡La combinación de ambos permite modelos potentes y alineados con los valores humanos!
    ]]>
    <![CDATA[latest AI news :: Re: SFT (supervised fine tunning) vs RL (reinforcement learning) :: Reply by Antonio Linares]]> 2025-02-04T23:25:49-07:00 2025-02-04T23:25:49-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45375&p=277436#p277436 SFT)

    Le llevas a jugar muchos partidos (RL)

    llega un momento en donde se hace un fiera jugando al futbol :D]]>
    SFT)

    Le llevas a jugar muchos partidos (RL)

    llega un momento en donde se hace un fiera jugando al futbol :D]]>
    <![CDATA[latest AI news :: DeepSeek facts :: Author Antonio Linares]]> 2025-02-07T03:08:17-07:00 2025-02-07T03:08:17-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45388&p=277484#p277484
    1. **DeepSeek: Una revolución en la IA**
    - DeepSeek es una IA desarrollada en China que es más barata, eficiente y de mejor calidad que los modelos de OpenAI.
    - Su costo de desarrollo fue de $6 millones, frente a los $3 mil millones anuales de OpenAI en entrenamiento y $13 mil millones de inversión de Microsoft.
    - Usar DeepSeek es 96% más barato que OpenAI, y está disponible de forma gratuita.
    - A pesar de esto, supera en pruebas de rendimiento a los modelos de OpenAI.

    2. **Innovación impulsada por restricciones**
    - La falta de acceso a GPUs avanzados debido a restricciones de EE.UU. obligó a DeepSeek a desarrollar su modelo con GPUs más baratas, diseñadas para videojuegos.
    - Esto los llevó a ser más eficientes, creando un modelo 38% más pequeño que ChatGPT-4.

    3. **Arquitectura única de DeepSeek**
    - DeepSeek usa una arquitectura de "mezcla de expertos", dividiendo la IA en modelos especializados que son activados según el tipo de consulta.
    - Este enfoque reduce costos y aumenta la eficiencia, aunque en teoría debería limitar su versatilidad, algo que no se observa en la práctica.

    4. **Modelo abierto vs. cerrado**
    - DeepSeek es de código abierto, lo que permite una colaboración centrada en casos de uso específicos.
    - En contraste, los modelos de código cerrado de Occidente buscan justificar inversiones gigantescas y priorizan el control propietario sobre la utilidad.

    5. **Crítica al modelo económico occidental**
    - El éxito de DeepSeek expone fallos del capitalismo tardío en Occidente, donde la economía está desconectada de la realidad y se privilegia a los inversores sobre la innovación genuina.
    - OpenAI, originalmente open-source, se volvió cerrado para atraer inversión y alimentar narrativas falsas sobre el potencial de la IA.
    - Las restricciones de GPUs a China no buscaban ventaja tecnológica, sino proteger inversiones y el dominio estadounidense en el sector.

    6. **Implicaciones económicas y sociales**
    - El lanzamiento de DeepSeek hizo caer $1 billón en el mercado de valores estadounidense, mostrando que la burbuja económica basada en IA está inflada artificialmente.
    - Este fenómeno refleja un problema económico más amplio en Occidente, donde se prioriza enriquecer al 1% a expensas de la clase media y la innovación real.

    7. **Conclusión**
    - Aunque DeepSeek no ha revolucionado técnicamente la IA, su modelo expone problemas fundamentales en el enfoque de Occidente hacia la tecnología y la economía.
    - Es un llamado de atención para revaluar el camino actual y volver a un modelo económico más realista y justo.
    ]]>
    1. **DeepSeek: Una revolución en la IA**
    - DeepSeek es una IA desarrollada en China que es más barata, eficiente y de mejor calidad que los modelos de OpenAI.
    - Su costo de desarrollo fue de $6 millones, frente a los $3 mil millones anuales de OpenAI en entrenamiento y $13 mil millones de inversión de Microsoft.
    - Usar DeepSeek es 96% más barato que OpenAI, y está disponible de forma gratuita.
    - A pesar de esto, supera en pruebas de rendimiento a los modelos de OpenAI.

    2. **Innovación impulsada por restricciones**
    - La falta de acceso a GPUs avanzados debido a restricciones de EE.UU. obligó a DeepSeek a desarrollar su modelo con GPUs más baratas, diseñadas para videojuegos.
    - Esto los llevó a ser más eficientes, creando un modelo 38% más pequeño que ChatGPT-4.

    3. **Arquitectura única de DeepSeek**
    - DeepSeek usa una arquitectura de "mezcla de expertos", dividiendo la IA en modelos especializados que son activados según el tipo de consulta.
    - Este enfoque reduce costos y aumenta la eficiencia, aunque en teoría debería limitar su versatilidad, algo que no se observa en la práctica.

    4. **Modelo abierto vs. cerrado**
    - DeepSeek es de código abierto, lo que permite una colaboración centrada en casos de uso específicos.
    - En contraste, los modelos de código cerrado de Occidente buscan justificar inversiones gigantescas y priorizan el control propietario sobre la utilidad.

    5. **Crítica al modelo económico occidental**
    - El éxito de DeepSeek expone fallos del capitalismo tardío en Occidente, donde la economía está desconectada de la realidad y se privilegia a los inversores sobre la innovación genuina.
    - OpenAI, originalmente open-source, se volvió cerrado para atraer inversión y alimentar narrativas falsas sobre el potencial de la IA.
    - Las restricciones de GPUs a China no buscaban ventaja tecnológica, sino proteger inversiones y el dominio estadounidense en el sector.

    6. **Implicaciones económicas y sociales**
    - El lanzamiento de DeepSeek hizo caer $1 billón en el mercado de valores estadounidense, mostrando que la burbuja económica basada en IA está inflada artificialmente.
    - Este fenómeno refleja un problema económico más amplio en Occidente, donde se prioriza enriquecer al 1% a expensas de la clase media y la innovación real.

    7. **Conclusión**
    - Aunque DeepSeek no ha revolucionado técnicamente la IA, su modelo expone problemas fundamentales en el enfoque de Occidente hacia la tecnología y la economía.
    - Es un llamado de atención para revaluar el camino actual y volver a un modelo económico más realista y justo.
    ]]>
    <![CDATA[latest AI news :: Ollama Modelfile :: Author Antonio Linares]]> 2025-02-08T10:11:02-07:00 2025-02-08T10:11:02-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45394&p=277516#p277516 https://www.gpu-mart.com/blog/custom-ll ... -modelfile

    ollama show llama2:latest --modelfile

    ollama show llama2:latest --modelfile > myllama2.modelfile

    Use any text or code editing tool,open and modify the system prompt and template in the model file to suit your preferences or requirements:

    PARAMETER temperature 1
    PARAMETER num_ctx 4096
    SYSTEM """You are Mario from super mario bros acting as an assistant"""

    ollama create myllama2 --file myllama2.modelfile

    ollama list]]>
    https://www.gpu-mart.com/blog/custom-ll ... -modelfile

    ollama show llama2:latest --modelfile

    ollama show llama2:latest --modelfile > myllama2.modelfile

    Use any text or code editing tool,open and modify the system prompt and template in the model file to suit your preferences or requirements:

    PARAMETER temperature 1
    PARAMETER num_ctx 4096
    SYSTEM """You are Mario from super mario bros acting as an assistant"""

    ollama create myllama2 --file myllama2.modelfile

    ollama list]]>
    <![CDATA[latest AI news :: Re: Ollama Modelfile :: Reply by Antonio Linares]]> 2025-02-08T14:42:55-07:00 2025-02-08T14:42:55-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45394&p=277536#p277536 model = model.merge_and_unload() # Unir LoRA al modelo base
    model.save_pretrained("merged_model") # Guardar modelo fusionado
    tokenizer.save_pretrained("merged_model")

    # Requiere llama.cpp instalado
    python3 llama.cpp/convert-hf-to-gguf.py merged_model/ \
    --outtype f16 \
    --outfile qwen2.5-3b-instruct-merged.gguf

    Modelfile

    Code: Select all | Expand

    FROM ./qwen2.5-3b-instruct-merged.gguf
    PARAMETER temperature 0.8
    PARAMETER num_ctx 1024
    ollama create my-model -f Modelfile
    ollama run my-model]]>
    model = model.merge_and_unload() # Unir LoRA al modelo base
    model.save_pretrained("merged_model") # Guardar modelo fusionado
    tokenizer.save_pretrained("merged_model")

    # Requiere llama.cpp instalado
    python3 llama.cpp/convert-hf-to-gguf.py merged_model/ \
    --outtype f16 \
    --outfile qwen2.5-3b-instruct-merged.gguf

    Modelfile

    Code: Select all | Expand

    FROM ./qwen2.5-3b-instruct-merged.gguf
    PARAMETER temperature 0.8
    PARAMETER num_ctx 1024
    ollama create my-model -f Modelfile
    ollama run my-model]]>
    <![CDATA[latest AI news :: reproduced DeepSeek R1-Zero for < $30 !!! :: Author Antonio Linares]]> 2025-02-03T00:16:49-07:00 2025-02-03T00:16:49-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45371&p=277377#p277377 https://x.com/jiayi_pirate/status/1882839370505621655

    https://huggingface.co/datasets/Jiayi-P ... Tasks-3to4

    https://t.co/UcGKN2SVGj

    Image]]>
    https://x.com/jiayi_pirate/status/1882839370505621655

    https://huggingface.co/datasets/Jiayi-P ... Tasks-3to4

    https://t.co/UcGKN2SVGj

    Image]]>
    <![CDATA[latest AI news :: Re: reproduced DeepSeek R1-Zero for < $30 !!! :: Reply by Antonio Linares]]> 2025-02-03T00:35:13-07:00 2025-02-03T00:35:13-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45371&p=277378#p277378 ]]> ]]> <![CDATA[latest AI news :: Re: reproduced DeepSeek R1-Zero for < $30 !!! :: Reply by Antonio Linares]]> 2025-02-03T20:53:22-07:00 2025-02-03T20:53:22-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45371&p=277407#p277407 Mini-R1: Reproduce Deepseek R1 "aha moment" a RL tutorial

    https://www.philschmid.de/mini-deepseek-r1
    This behavior is not only a testament to the model’s growing reasoning abilities but also a captivating example of how reinforcement learning can lead to unexpected and sophisticated outcomes.
    ]]>
    Mini-R1: Reproduce Deepseek R1 "aha moment" a RL tutorial

    https://www.philschmid.de/mini-deepseek-r1
    This behavior is not only a testament to the model’s growing reasoning abilities but also a captivating example of how reinforcement learning can lead to unexpected and sophisticated outcomes.
    ]]>
    <![CDATA[latest AI news :: Re: reproduced DeepSeek R1-Zero for < $30 !!! :: Reply by Antonio Linares]]> 2025-02-03T23:19:03-07:00 2025-02-03T23:19:03-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45371&p=277408#p277408 pensamiento binario al pensamiento cuántico

    Ya no se trata de pensar si algo esta bien ó mal, sino de cuanto de bien o de mal está :)]]>
    pensamiento binario al pensamiento cuántico

    Ya no se trata de pensar si algo esta bien ó mal, sino de cuanto de bien o de mal está :)]]>
    <![CDATA[latest AI news :: Re: reproduced DeepSeek R1-Zero for < $30 !!! :: Reply by Antonio Linares]]> 2025-02-04T13:05:20-07:00 2025-02-04T13:05:20-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45371&p=277424#p277424 https://github.com/Deep-Agent/R1-V]]> https://github.com/Deep-Agent/R1-V]]> <![CDATA[latest AI news :: Re: reproduced DeepSeek R1-Zero for < $30 !!! :: Reply by Antonio Linares]]> 2025-02-04T20:51:32-07:00 2025-02-04T20:51:32-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45371&p=277433#p277433
    Antonio Linares wrote: Tue Feb 04, 2025 3:53 am Mini-R1: Reproduce Deepseek R1 "aha moment" a RL tutorial
    https://www.philschmid.de/mini-deepseek-r1
    Importante: instalar la versión de PyTorch que soporte CUDA (si tu GPU lo permite)
    pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

    cuda DEBE aparecer al ejecutarlo:

    Code: Select all | Expand

    from transformers import AutoTokenizer
    from datasets import load_dataset
    from trl import GRPOConfig, GRPOTrainer, get_peft_config, ModelConfig
    import re, torch 
    
    # Load dataset from Hugging Face Hub
    dataset_id = "Jiayi-Pan/Countdown-Tasks-3to4"
    dataset = load_dataset(dataset_id, split="train")
    # select a random subset of 50k samples
    dataset = dataset.shuffle(seed=42).select(range(50000))
     
    # Load tokenizer from Hugging Face Hub to format the dataset to our "r1" prompt 
    tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-3B-Instruct")
     
    # gemerate r1 prompt with a prefix for the model to already start with the thinking process
    def generate_r1_prompt(numbers, target):
        r1_prefix = [{
            "role": "system",
            "content": "You are a helpful assistant. You first thinks about the reasoning process in the mind and then provides the user with the answer."
          },
          { 
            "role": "user",
            "content": f"Using the numbers {numbers}, create an equation that equals {target}. You can use basic arithmetic operations (+, -, *, /) and each number can only be used once. Show your work in <think> </think> tags. And return the final equation and answer in <answer> </answer> tags, for example <answer> (1 + 2) / 3 = 1 </answer>."
          },
          {
            "role": "assistant",
            "content": "Let me solve this step by step.\n<think>"
          }]
        return {"prompt": tokenizer.apply_chat_template(r1_prefix, tokenize=False, continue_final_message=True), "target": target}
     
    # convert our dataset to the r1 prompt
    dataset = dataset.map(lambda x: generate_r1_prompt(x["nums"], x["target"]))
     
    # split the dataset into train and test
    train_test_split = dataset.train_test_split(test_size=0.1)
     
    train_dataset = train_test_split["train"]
    test_dataset = train_test_split["test"]
    
    # Define reward functions
     
    def format_reward_func(completions, target, **kwargs):
        """
        Format: <think>...</think><answer>...</answer>
        Args:
            completions (list[str]): Generated outputs
            target (list[str]): Expected answers
          
          Returns:
              list[float]: Reward scores
        """
        rewards = []
     
        for completion, gt in zip(completions, target):
     
          try:
            # add synthetic <think> as its already part of the prompt and prefilled for the assistant to more easily match the regex
            completion = "<think>" + completion        
            # Check if the format is correct
            regex = r"^<think>([^<]*(?:<(?!/?think>)[^<]*)*)<\/think>\n<answer>([\s\S]*?)<\/answer>$"
     
            match = re.search(regex, completion, re.DOTALL) 
            # if the format is not correct, reward is 0
            if match is None or len(match.groups()) != 2:
                rewards.append(0.0)
            else:
                rewards.append(1.0)
          except Exception:
            rewards.append(0.0)
        return rewards
     
    def equation_reward_func(completions, target, nums, **kwargs):
        """
        Evaluates completions based on:
        2. Mathematical correctness of the answer
     
        Args:
            completions (list[str]): Generated outputs
            target (list[str]): Expected answers
            nums (list[str]): Available numbers
        
        Returns:
            list[float]: Reward scores
        """
        rewards = []
        for completion, gt, numbers in zip(completions, target, nums):
          try:
            # add synthetic <think> as its already part of the prompt and prefilled for the assistant to more easily match the regex
            completion = "<think>" + completion
            # Check if the format is correct
            match = re.search(r"<answer>(.*?)<\/answer>", completion)
            if match is None:
                rewards.append(0.0)
                continue
            # Extract the "answer" part from the completion
            equation = match.group(1).strip()
            # Extract all numbers from the equation
            used_numbers = [int(n) for n in re.findall(r'\d+', equation)]
            
            # Check if all numbers are used exactly once
            if sorted(used_numbers) != sorted(numbers):
                rewards.append(0.0)
                continue
            # Define a regex pattern that only allows numbers, operators, parentheses, and whitespace
            allowed_pattern = r'^[\d+\-*/().\s]+$'
            if not re.match(allowed_pattern, equation):
               rewards.append(0.0)
               continue
            
            # Evaluate the equation with restricted globals and locals
            result = eval(equation, {"__builtins__": None}, {})
            # Check if the equation is correct and matches the ground truth
            if abs(float(result) - float(gt)) < 1e-5:
                rewards.append(1.0)
            else:
                rewards.append(0.0)
          except Exception:
                # If evaluation fails, reward is 0
                rewards.append(0.0) 
        return rewards
    
    # our model we are going to use as policy 
    model_config = ModelConfig(
        model_name_or_path="Qwen/Qwen2.5-3B-Instruct",
        torch_dtype="bfloat16",
        attn_implementation="flash_attention_2",
        use_peft=True,
        load_in_4bit=True
    )
    
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    print( f"Device: {device}")
    
    # Hyperparameters
    training_args = GRPOConfig(
        output_dir="qwen-r1-aha-moment",
        learning_rate=5e-7,
        lr_scheduler_type="cosine",
        logging_steps=10,
        max_steps=100,
        per_device_train_batch_size=1,
        gradient_accumulation_steps=1,
        gradient_checkpointing=True,
        gradient_checkpointing_kwargs={"use_reentrant": False},
        bf16=True,
        # GRPO specific parameters
        max_prompt_length=256,
        max_completion_length=1024, # max length of the generated output for our solution
        num_generations=2,
        beta=0.001
    )
    
    trainer = GRPOTrainer(
        model=model_config.model_name_or_path,
        reward_funcs=[format_reward_func, equation_reward_func],
        args=training_args,
        train_dataset=train_dataset,
        eval_dataset=test_dataset,
        peft_config=get_peft_config(model_config),
    )
    
    # Train and push the model to the Hub
    trainer.train()
    # Save model
    trainer.save_model(training_args.output_dir)
    Image
    Image]]>
    Antonio Linares wrote: Tue Feb 04, 2025 3:53 am Mini-R1: Reproduce Deepseek R1 "aha moment" a RL tutorial
    https://www.philschmid.de/mini-deepseek-r1
    Importante: instalar la versión de PyTorch que soporte CUDA (si tu GPU lo permite)
    pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

    cuda DEBE aparecer al ejecutarlo:

    Code: Select all | Expand

    from transformers import AutoTokenizer
    from datasets import load_dataset
    from trl import GRPOConfig, GRPOTrainer, get_peft_config, ModelConfig
    import re, torch 
    
    # Load dataset from Hugging Face Hub
    dataset_id = "Jiayi-Pan/Countdown-Tasks-3to4"
    dataset = load_dataset(dataset_id, split="train")
    # select a random subset of 50k samples
    dataset = dataset.shuffle(seed=42).select(range(50000))
     
    # Load tokenizer from Hugging Face Hub to format the dataset to our "r1" prompt 
    tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-3B-Instruct")
     
    # gemerate r1 prompt with a prefix for the model to already start with the thinking process
    def generate_r1_prompt(numbers, target):
        r1_prefix = [{
            "role": "system",
            "content": "You are a helpful assistant. You first thinks about the reasoning process in the mind and then provides the user with the answer."
          },
          { 
            "role": "user",
            "content": f"Using the numbers {numbers}, create an equation that equals {target}. You can use basic arithmetic operations (+, -, *, /) and each number can only be used once. Show your work in <think> </think> tags. And return the final equation and answer in <answer> </answer> tags, for example <answer> (1 + 2) / 3 = 1 </answer>."
          },
          {
            "role": "assistant",
            "content": "Let me solve this step by step.\n<think>"
          }]
        return {"prompt": tokenizer.apply_chat_template(r1_prefix, tokenize=False, continue_final_message=True), "target": target}
     
    # convert our dataset to the r1 prompt
    dataset = dataset.map(lambda x: generate_r1_prompt(x["nums"], x["target"]))
     
    # split the dataset into train and test
    train_test_split = dataset.train_test_split(test_size=0.1)
     
    train_dataset = train_test_split["train"]
    test_dataset = train_test_split["test"]
    
    # Define reward functions
     
    def format_reward_func(completions, target, **kwargs):
        """
        Format: <think>...</think><answer>...</answer>
        Args:
            completions (list[str]): Generated outputs
            target (list[str]): Expected answers
          
          Returns:
              list[float]: Reward scores
        """
        rewards = []
     
        for completion, gt in zip(completions, target):
     
          try:
            # add synthetic <think> as its already part of the prompt and prefilled for the assistant to more easily match the regex
            completion = "<think>" + completion        
            # Check if the format is correct
            regex = r"^<think>([^<]*(?:<(?!/?think>)[^<]*)*)<\/think>\n<answer>([\s\S]*?)<\/answer>$"
     
            match = re.search(regex, completion, re.DOTALL) 
            # if the format is not correct, reward is 0
            if match is None or len(match.groups()) != 2:
                rewards.append(0.0)
            else:
                rewards.append(1.0)
          except Exception:
            rewards.append(0.0)
        return rewards
     
    def equation_reward_func(completions, target, nums, **kwargs):
        """
        Evaluates completions based on:
        2. Mathematical correctness of the answer
     
        Args:
            completions (list[str]): Generated outputs
            target (list[str]): Expected answers
            nums (list[str]): Available numbers
        
        Returns:
            list[float]: Reward scores
        """
        rewards = []
        for completion, gt, numbers in zip(completions, target, nums):
          try:
            # add synthetic <think> as its already part of the prompt and prefilled for the assistant to more easily match the regex
            completion = "<think>" + completion
            # Check if the format is correct
            match = re.search(r"<answer>(.*?)<\/answer>", completion)
            if match is None:
                rewards.append(0.0)
                continue
            # Extract the "answer" part from the completion
            equation = match.group(1).strip()
            # Extract all numbers from the equation
            used_numbers = [int(n) for n in re.findall(r'\d+', equation)]
            
            # Check if all numbers are used exactly once
            if sorted(used_numbers) != sorted(numbers):
                rewards.append(0.0)
                continue
            # Define a regex pattern that only allows numbers, operators, parentheses, and whitespace
            allowed_pattern = r'^[\d+\-*/().\s]+$'
            if not re.match(allowed_pattern, equation):
               rewards.append(0.0)
               continue
            
            # Evaluate the equation with restricted globals and locals
            result = eval(equation, {"__builtins__": None}, {})
            # Check if the equation is correct and matches the ground truth
            if abs(float(result) - float(gt)) < 1e-5:
                rewards.append(1.0)
            else:
                rewards.append(0.0)
          except Exception:
                # If evaluation fails, reward is 0
                rewards.append(0.0) 
        return rewards
    
    # our model we are going to use as policy 
    model_config = ModelConfig(
        model_name_or_path="Qwen/Qwen2.5-3B-Instruct",
        torch_dtype="bfloat16",
        attn_implementation="flash_attention_2",
        use_peft=True,
        load_in_4bit=True
    )
    
    device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
    print( f"Device: {device}")
    
    # Hyperparameters
    training_args = GRPOConfig(
        output_dir="qwen-r1-aha-moment",
        learning_rate=5e-7,
        lr_scheduler_type="cosine",
        logging_steps=10,
        max_steps=100,
        per_device_train_batch_size=1,
        gradient_accumulation_steps=1,
        gradient_checkpointing=True,
        gradient_checkpointing_kwargs={"use_reentrant": False},
        bf16=True,
        # GRPO specific parameters
        max_prompt_length=256,
        max_completion_length=1024, # max length of the generated output for our solution
        num_generations=2,
        beta=0.001
    )
    
    trainer = GRPOTrainer(
        model=model_config.model_name_or_path,
        reward_funcs=[format_reward_func, equation_reward_func],
        args=training_args,
        train_dataset=train_dataset,
        eval_dataset=test_dataset,
        peft_config=get_peft_config(model_config),
    )
    
    # Train and push the model to the Hub
    trainer.train()
    # Save model
    trainer.save_model(training_args.output_dir)
    Image
    Image]]>
    <![CDATA[latest AI news :: Re: reproduced DeepSeek R1-Zero for < $30 !!! :: Reply by Antonio Linares]]> 2025-02-04T22:57:04-07:00 2025-02-04T22:57:04-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45371&p=277435#p277435 https://github.com/huggingface/open-r1]]> https://github.com/huggingface/open-r1]]> <![CDATA[latest AI news :: Re: reproduced DeepSeek R1-Zero for < $30 !!! :: Reply by Antonio Linares]]> 2025-02-07T02:34:37-07:00 2025-02-07T02:34:37-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45371&p=277481#p277481 https://unsloth.ai/blog/r1-reasoning

    https://docs.unsloth.ai/get-started/unsloth-notebooks

    https://huggingface.co/unsloth/Meta-Lla ... t-bnb-4bit

    https://youtu.be/pxhkDaKzBaY?si=bkSjxgCIRFQdyaZV
    Train your own R1 reasoning model with Unsloth
    ]]>
    https://unsloth.ai/blog/r1-reasoning

    https://docs.unsloth.ai/get-started/unsloth-notebooks

    https://huggingface.co/unsloth/Meta-Lla ... t-bnb-4bit

    https://youtu.be/pxhkDaKzBaY?si=bkSjxgCIRFQdyaZV
    Train your own R1 reasoning model with Unsloth
    ]]>
    <![CDATA[latest AI news :: Re: reproduced DeepSeek R1-Zero for < $30 !!! :: Reply by Antonio Linares]]> 2025-02-07T14:59:45-07:00 2025-02-07T14:59:45-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45371&p=277492#p277492
    pip install unsloth vllm
    pip install --upgrade pillow
    pip install git+https://github.com/huggingface/trl.git@ ... c51c64b72b
    pip install diffusers
    pip install triton
    qwen_SFT_RL.py

    Code: Select all | Expand

    from unsloth import FastLanguageModel, PatchFastRL
    PatchFastRL("GRPO", FastLanguageModel)
    
    from unsloth import is_bfloat16_supported
    import torch
    max_seq_length = 1024 # Can increase for longer reasoning traces
    lora_rank = 64 # Larger rank = smarter, but slower
    
    model, tokenizer = FastLanguageModel.from_pretrained(
        model_name = "Qwen/Qwen2.5-3B-Instruct",
        max_seq_length = max_seq_length,
        load_in_4bit = True, # False for LoRA 16bit
        fast_inference = True, # Enable vLLM fast inference
        max_lora_rank = lora_rank,
        gpu_memory_utilization = 0.5, # Reduce if out of memory
    )
    
    model = FastLanguageModel.get_peft_model(
        model,
        r = lora_rank, # Choose any number > 0 ! Suggested 8, 16, 32, 64, 128
        target_modules = [
            "q_proj", "k_proj", "v_proj", "o_proj",
            "gate_proj", "up_proj", "down_proj",
        ], # Remove QKVO if out of memory
        lora_alpha = lora_rank,
        use_gradient_checkpointing = "unsloth", # Enable long context finetuning
        random_state = 3407,
    )
    
    import re
    from datasets import load_dataset, Dataset
    
    # Load and prep dataset
    SYSTEM_PROMPT = """
    Respond in the following format:
    <reasoning>
    ...
    </reasoning>
    <answer>
    ...
    </answer>
    """
    
    XML_COT_FORMAT = """\
    <reasoning>
    {reasoning}
    </reasoning>
    <answer>
    {answer}
    </answer>
    """
    
    def extract_xml_answer(text: str) -> str:
        answer = text.split("<answer>")[-1]
        answer = answer.split("</answer>")[0]
        return answer.strip()
    
    def extract_hash_answer(text: str) -> str | None:
        if "####" not in text:
            return None
        return text.split("####")[1].strip()
    
    # uncomment middle messages for 1-shot prompting
    def get_gsm8k_questions(split = "train") -> Dataset:
        data = load_dataset('openai/gsm8k', 'main')[split] # type: ignore
        data = data.map(lambda x: { # type: ignore
            'prompt': [
                {'role': 'system', 'content': SYSTEM_PROMPT},
                {'role': 'user', 'content': x['question']}
            ],
            'answer': extract_hash_answer(x['answer'])
        }) # type: ignore
        return data # type: ignore
    
    dataset = get_gsm8k_questions()
    
    # Reward functions
    def correctness_reward_func(prompts, completions, answer, **kwargs) -> list[float]:
        responses = [completion[0]['content'] for completion in completions]
        q = prompts[0][-1]['content']
        extracted_responses = [extract_xml_answer(r) for r in responses]
        print('-'*20, f"Question:\n{q}", f"\nAnswer:\n{answer[0]}", f"\nResponse:\n{responses[0]}", f"\nExtracted:\n{extracted_responses[0]}")
        return [2.0 if r == a else 0.0 for r, a in zip(extracted_responses, answer)]
    
    def int_reward_func(completions, **kwargs) -> list[float]:
        responses = [completion[0]['content'] for completion in completions]
        extracted_responses = [extract_xml_answer(r) for r in responses]
        return [0.5 if r.isdigit() else 0.0 for r in extracted_responses]
    
    def strict_format_reward_func(completions, **kwargs) -> list[float]:
        """Reward function that checks if the completion has a specific format."""
        pattern = r"^<reasoning>\n.*?\n</reasoning>\n<answer>\n.*?\n</answer>\n$"
        responses = [completion[0]["content"] for completion in completions]
        matches = [re.match(pattern, r) for r in responses]
        return [0.5 if match else 0.0 for match in matches]
    
    def soft_format_reward_func(completions, **kwargs) -> list[float]:
        """Reward function that checks if the completion has a specific format."""
        pattern = r"<reasoning>.*?</reasoning>\s*<answer>.*?</answer>"
        responses = [completion[0]["content"] for completion in completions]
        matches = [re.match(pattern, r) for r in responses]
        return [0.5 if match else 0.0 for match in matches]
    
    def count_xml(text) -> float:
        count = 0.0
        if text.count("<reasoning>\n") == 1:
            count += 0.125
        if text.count("\n</reasoning>\n") == 1:
            count += 0.125
        if text.count("\n<answer>\n") == 1:
            count += 0.125
            count -= len(text.split("\n</answer>\n")[-1])*0.001
        if text.count("\n</answer>") == 1:
            count += 0.125
            count -= (len(text.split("\n</answer>")[-1]) - 1)*0.001
        return count
    
    def xmlcount_reward_func(completions, **kwargs) -> list[float]:
        contents = [completion[0]["content"] for completion in completions]
        return [count_xml(c) for c in contents]
    
    from trl import GRPOConfig, GRPOTrainer
    training_args = GRPOConfig(
        use_vllm = True, # use vLLM for fast inference!
        learning_rate = 5e-6,
        adam_beta1 = 0.9,
        adam_beta2 = 0.99,
        weight_decay = 0.1,
        warmup_ratio = 0.1,
        lr_scheduler_type = "cosine",
        optim = "adamw_8bit",
        logging_steps = 1,
        bf16 = is_bfloat16_supported(),
        fp16 = not is_bfloat16_supported(),
        per_device_train_batch_size = 1,
        gradient_accumulation_steps = 1, # Increase to 4 for smoother training
        num_generations = 8, # Decrease if out of memory
        max_prompt_length = 256,
        max_completion_length = 200,
        # num_train_epochs = 1, # Set to 1 for a full training run
        max_steps = 250,
        save_steps = 250,
        max_grad_norm = 0.1,
        report_to = "none", # Can use Weights & Biases
        output_dir = "outputs",
    )
    
    trainer = GRPOTrainer(
        model = model,
        processing_class = tokenizer,
        reward_funcs = [
            xmlcount_reward_func,
            soft_format_reward_func,
            strict_format_reward_func,
            int_reward_func,
            correctness_reward_func,
        ],
        args = training_args,
        train_dataset = dataset,
    )
    trainer.train()
    
    text = tokenizer.apply_chat_template([
        {"role" : "user", "content" : "How many r's are in strawberry?"},
    ], tokenize = False, add_generation_prompt = True)
    
    from vllm import SamplingParams
    sampling_params = SamplingParams(
        temperature = 0.8,
        top_p = 0.95,
        max_tokens = 1024,
    )
    output = model.fast_generate(
        [text],
        sampling_params = sampling_params,
        lora_request = None,
    )[0].outputs[0].text
    
    print( output )
    
    model.save_lora("grpo_saved_lora")
    
    text = tokenizer.apply_chat_template([
        {"role" : "system", "content" : SYSTEM_PROMPT},
        {"role" : "user", "content" : "How many r's are in strawberry?"},
    ], tokenize = False, add_generation_prompt = True)
    
    from vllm import SamplingParams
    sampling_params = SamplingParams(
        temperature = 0.8,
        top_p = 0.95,
        max_tokens = 1024,
    )
    output = model.fast_generate(
        text,
        sampling_params = sampling_params,
        lora_request = model.load_lora("grpo_saved_lora"),
    )[0].outputs[0].text
    
    print( output )
    ]]>
    pip install unsloth vllm
    pip install --upgrade pillow
    pip install git+https://github.com/huggingface/trl.git@ ... c51c64b72b
    pip install diffusers
    pip install triton
    qwen_SFT_RL.py

    Code: Select all | Expand

    from unsloth import FastLanguageModel, PatchFastRL
    PatchFastRL("GRPO", FastLanguageModel)
    
    from unsloth import is_bfloat16_supported
    import torch
    max_seq_length = 1024 # Can increase for longer reasoning traces
    lora_rank = 64 # Larger rank = smarter, but slower
    
    model, tokenizer = FastLanguageModel.from_pretrained(
        model_name = "Qwen/Qwen2.5-3B-Instruct",
        max_seq_length = max_seq_length,
        load_in_4bit = True, # False for LoRA 16bit
        fast_inference = True, # Enable vLLM fast inference
        max_lora_rank = lora_rank,
        gpu_memory_utilization = 0.5, # Reduce if out of memory
    )
    
    model = FastLanguageModel.get_peft_model(
        model,
        r = lora_rank, # Choose any number > 0 ! Suggested 8, 16, 32, 64, 128
        target_modules = [
            "q_proj", "k_proj", "v_proj", "o_proj",
            "gate_proj", "up_proj", "down_proj",
        ], # Remove QKVO if out of memory
        lora_alpha = lora_rank,
        use_gradient_checkpointing = "unsloth", # Enable long context finetuning
        random_state = 3407,
    )
    
    import re
    from datasets import load_dataset, Dataset
    
    # Load and prep dataset
    SYSTEM_PROMPT = """
    Respond in the following format:
    <reasoning>
    ...
    </reasoning>
    <answer>
    ...
    </answer>
    """
    
    XML_COT_FORMAT = """\
    <reasoning>
    {reasoning}
    </reasoning>
    <answer>
    {answer}
    </answer>
    """
    
    def extract_xml_answer(text: str) -> str:
        answer = text.split("<answer>")[-1]
        answer = answer.split("</answer>")[0]
        return answer.strip()
    
    def extract_hash_answer(text: str) -> str | None:
        if "####" not in text:
            return None
        return text.split("####")[1].strip()
    
    # uncomment middle messages for 1-shot prompting
    def get_gsm8k_questions(split = "train") -> Dataset:
        data = load_dataset('openai/gsm8k', 'main')[split] # type: ignore
        data = data.map(lambda x: { # type: ignore
            'prompt': [
                {'role': 'system', 'content': SYSTEM_PROMPT},
                {'role': 'user', 'content': x['question']}
            ],
            'answer': extract_hash_answer(x['answer'])
        }) # type: ignore
        return data # type: ignore
    
    dataset = get_gsm8k_questions()
    
    # Reward functions
    def correctness_reward_func(prompts, completions, answer, **kwargs) -> list[float]:
        responses = [completion[0]['content'] for completion in completions]
        q = prompts[0][-1]['content']
        extracted_responses = [extract_xml_answer(r) for r in responses]
        print('-'*20, f"Question:\n{q}", f"\nAnswer:\n{answer[0]}", f"\nResponse:\n{responses[0]}", f"\nExtracted:\n{extracted_responses[0]}")
        return [2.0 if r == a else 0.0 for r, a in zip(extracted_responses, answer)]
    
    def int_reward_func(completions, **kwargs) -> list[float]:
        responses = [completion[0]['content'] for completion in completions]
        extracted_responses = [extract_xml_answer(r) for r in responses]
        return [0.5 if r.isdigit() else 0.0 for r in extracted_responses]
    
    def strict_format_reward_func(completions, **kwargs) -> list[float]:
        """Reward function that checks if the completion has a specific format."""
        pattern = r"^<reasoning>\n.*?\n</reasoning>\n<answer>\n.*?\n</answer>\n$"
        responses = [completion[0]["content"] for completion in completions]
        matches = [re.match(pattern, r) for r in responses]
        return [0.5 if match else 0.0 for match in matches]
    
    def soft_format_reward_func(completions, **kwargs) -> list[float]:
        """Reward function that checks if the completion has a specific format."""
        pattern = r"<reasoning>.*?</reasoning>\s*<answer>.*?</answer>"
        responses = [completion[0]["content"] for completion in completions]
        matches = [re.match(pattern, r) for r in responses]
        return [0.5 if match else 0.0 for match in matches]
    
    def count_xml(text) -> float:
        count = 0.0
        if text.count("<reasoning>\n") == 1:
            count += 0.125
        if text.count("\n</reasoning>\n") == 1:
            count += 0.125
        if text.count("\n<answer>\n") == 1:
            count += 0.125
            count -= len(text.split("\n</answer>\n")[-1])*0.001
        if text.count("\n</answer>") == 1:
            count += 0.125
            count -= (len(text.split("\n</answer>")[-1]) - 1)*0.001
        return count
    
    def xmlcount_reward_func(completions, **kwargs) -> list[float]:
        contents = [completion[0]["content"] for completion in completions]
        return [count_xml(c) for c in contents]
    
    from trl import GRPOConfig, GRPOTrainer
    training_args = GRPOConfig(
        use_vllm = True, # use vLLM for fast inference!
        learning_rate = 5e-6,
        adam_beta1 = 0.9,
        adam_beta2 = 0.99,
        weight_decay = 0.1,
        warmup_ratio = 0.1,
        lr_scheduler_type = "cosine",
        optim = "adamw_8bit",
        logging_steps = 1,
        bf16 = is_bfloat16_supported(),
        fp16 = not is_bfloat16_supported(),
        per_device_train_batch_size = 1,
        gradient_accumulation_steps = 1, # Increase to 4 for smoother training
        num_generations = 8, # Decrease if out of memory
        max_prompt_length = 256,
        max_completion_length = 200,
        # num_train_epochs = 1, # Set to 1 for a full training run
        max_steps = 250,
        save_steps = 250,
        max_grad_norm = 0.1,
        report_to = "none", # Can use Weights & Biases
        output_dir = "outputs",
    )
    
    trainer = GRPOTrainer(
        model = model,
        processing_class = tokenizer,
        reward_funcs = [
            xmlcount_reward_func,
            soft_format_reward_func,
            strict_format_reward_func,
            int_reward_func,
            correctness_reward_func,
        ],
        args = training_args,
        train_dataset = dataset,
    )
    trainer.train()
    
    text = tokenizer.apply_chat_template([
        {"role" : "user", "content" : "How many r's are in strawberry?"},
    ], tokenize = False, add_generation_prompt = True)
    
    from vllm import SamplingParams
    sampling_params = SamplingParams(
        temperature = 0.8,
        top_p = 0.95,
        max_tokens = 1024,
    )
    output = model.fast_generate(
        [text],
        sampling_params = sampling_params,
        lora_request = None,
    )[0].outputs[0].text
    
    print( output )
    
    model.save_lora("grpo_saved_lora")
    
    text = tokenizer.apply_chat_template([
        {"role" : "system", "content" : SYSTEM_PROMPT},
        {"role" : "user", "content" : "How many r's are in strawberry?"},
    ], tokenize = False, add_generation_prompt = True)
    
    from vllm import SamplingParams
    sampling_params = SamplingParams(
        temperature = 0.8,
        top_p = 0.95,
        max_tokens = 1024,
    )
    output = model.fast_generate(
        text,
        sampling_params = sampling_params,
        lora_request = model.load_lora("grpo_saved_lora"),
    )[0].outputs[0].text
    
    print( output )
    ]]>
    <![CDATA[latest AI news :: Re: reproduced DeepSeek R1-Zero for < $30 !!! :: Reply by Antonio Linares]]> 2025-02-10T04:48:38-07:00 2025-02-10T04:48:38-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45371&p=277564#p277564 Prueba del modelo:

    Code: Select all | Expand

    from unsloth import FastLanguageModel
    from peft import PeftModel
    from vllm import SamplingParams
    import torch.distributed as dist
    
    # Cargar el modelo base
    model, tokenizer = FastLanguageModel.from_pretrained(
        model_name="Qwen/Qwen2.5-3B-Instruct",
        max_seq_length=1024,
        load_in_4bit=True,
        fast_inference=True,
    )
    
    # Cargar los pesos LoRA
    model = PeftModel.from_pretrained(model, "grpo_saved_lora")
    
    # Definir el prompt del sistema
    SYSTEM_PROMPT = """
    Respond in the following format:
    <reasoning>
    ...
    </reasoning>
    <answer>
    ...
    </answer>
    """
    
    # Configurar parámetros de muestreo
    sampling_params = SamplingParams(
        temperature=0.8,
        top_p=0.95,
        max_tokens=1024,
    )
    
    def generate_response(question):
        """Genera una respuesta basada en la pregunta del usuario."""
        input_text = tokenizer.apply_chat_template(
            [
                {"role": "system", "content": SYSTEM_PROMPT},
                {"role": "user", "content": question},
            ],
            tokenize=False,
            add_generation_prompt=True,
        )
        
        # Generar respuesta con el modelo
        output = model.fast_generate(
            [input_text],
            sampling_params=sampling_params,
            lora_request=None,
        )[0].outputs[0].text
        
        return output
    
    # Bucle interactivo
    print("Bienvenido al chatbot. Escribe tus preguntas o /bye para salir.")
    while True:
        user_input = input("T├║: ")
        if user_input.strip().lower() == "/bye":
            print("Chatbot: Adiós. Que tengas un buen día!")
            break
        
        try:
            response = generate_response(user_input)
            print(f"Chatbot:\n{response}\n")
        except Exception as e:
            print(f"Error al generar la respuesta: {e}")
    
    # Destruir procesos NCCL si están activos
    if dist.is_initialized():
        dist.destroy_process_group()
    
    Generación del GGUF:

    Code: Select all | Expand

    from unsloth import FastLanguageModel
    from peft import PeftModel
    from vllm import SamplingParams
    import torch.distributed as dist
    
    model, tokenizer = FastLanguageModel.from_pretrained(
        model_name="Qwen/Qwen2.5-3B-Instruct",
        max_seq_length=1024,
        load_in_4bit=True,
        fast_inference=True,
    )
    
    model = PeftModel.from_pretrained(model, "grpo_saved_lora")
    model.save_pretrained_gguf( "folderName", tokenizer, quantization_method = "f16")
    Modelfile

    Code: Select all | Expand

    FROM ./unsloth.BF16.gguf
    PARAMETER temperature 0.7
    PARAMETER num_ctx 1024
    SYSTEM """You are Mario from super mario bros acting as an assistant"""
    ollama create myModel --file Modelfile

    ollama run myModel]]>
    Prueba del modelo:

    Code: Select all | Expand

    from unsloth import FastLanguageModel
    from peft import PeftModel
    from vllm import SamplingParams
    import torch.distributed as dist
    
    # Cargar el modelo base
    model, tokenizer = FastLanguageModel.from_pretrained(
        model_name="Qwen/Qwen2.5-3B-Instruct",
        max_seq_length=1024,
        load_in_4bit=True,
        fast_inference=True,
    )
    
    # Cargar los pesos LoRA
    model = PeftModel.from_pretrained(model, "grpo_saved_lora")
    
    # Definir el prompt del sistema
    SYSTEM_PROMPT = """
    Respond in the following format:
    <reasoning>
    ...
    </reasoning>
    <answer>
    ...
    </answer>
    """
    
    # Configurar parámetros de muestreo
    sampling_params = SamplingParams(
        temperature=0.8,
        top_p=0.95,
        max_tokens=1024,
    )
    
    def generate_response(question):
        """Genera una respuesta basada en la pregunta del usuario."""
        input_text = tokenizer.apply_chat_template(
            [
                {"role": "system", "content": SYSTEM_PROMPT},
                {"role": "user", "content": question},
            ],
            tokenize=False,
            add_generation_prompt=True,
        )
        
        # Generar respuesta con el modelo
        output = model.fast_generate(
            [input_text],
            sampling_params=sampling_params,
            lora_request=None,
        )[0].outputs[0].text
        
        return output
    
    # Bucle interactivo
    print("Bienvenido al chatbot. Escribe tus preguntas o /bye para salir.")
    while True:
        user_input = input("T├║: ")
        if user_input.strip().lower() == "/bye":
            print("Chatbot: Adiós. Que tengas un buen día!")
            break
        
        try:
            response = generate_response(user_input)
            print(f"Chatbot:\n{response}\n")
        except Exception as e:
            print(f"Error al generar la respuesta: {e}")
    
    # Destruir procesos NCCL si están activos
    if dist.is_initialized():
        dist.destroy_process_group()
    
    Generación del GGUF:

    Code: Select all | Expand

    from unsloth import FastLanguageModel
    from peft import PeftModel
    from vllm import SamplingParams
    import torch.distributed as dist
    
    model, tokenizer = FastLanguageModel.from_pretrained(
        model_name="Qwen/Qwen2.5-3B-Instruct",
        max_seq_length=1024,
        load_in_4bit=True,
        fast_inference=True,
    )
    
    model = PeftModel.from_pretrained(model, "grpo_saved_lora")
    model.save_pretrained_gguf( "folderName", tokenizer, quantization_method = "f16")
    Modelfile

    Code: Select all | Expand

    FROM ./unsloth.BF16.gguf
    PARAMETER temperature 0.7
    PARAMETER num_ctx 1024
    SYSTEM """You are Mario from super mario bros acting as an assistant"""
    ollama create myModel --file Modelfile

    ollama run myModel]]>
    <![CDATA[latest AI news :: Less is More :: Author Antonio Linares]]> 2025-02-15T06:20:03-07:00 2025-02-15T06:20:03-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45421&p=277688#p277688 Researchers find you don’t need a ton of data to train LLMs for reasoning tasks

    https://venturebeat.com/ai/researchers- ... ing-tasks/
    With merely 817 curated training samples, LIMO achieves 57.1% accuracy on AIME and 94.8% on MATH, improving from previous SFT-based models' 6.5% and 59.2% respectively, while only using 1% of the training data required by previous approaches.
    ]]>
    Researchers find you don’t need a ton of data to train LLMs for reasoning tasks

    https://venturebeat.com/ai/researchers- ... ing-tasks/
    With merely 817 curated training samples, LIMO achieves 57.1% accuracy on AIME and 94.8% on MATH, improving from previous SFT-based models' 6.5% and 59.2% respectively, while only using 1% of the training data required by previous approaches.
    ]]>
    <![CDATA[latest AI news :: OmniParser: Screen Parsing tool for Pure Vision Based GUI Agent :: Author Antonio Linares]]> 2025-02-16T01:06:56-07:00 2025-02-16T01:06:56-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45424&p=277696#p277696 https://t.co/elm20eGmui

    https://github.com/microsoft/OmniParser]]>
    https://t.co/elm20eGmui

    https://github.com/microsoft/OmniParser]]>
    <![CDATA[latest AI news :: NVIDIA Project DIGITS - AI Supercomputer on your desk :: Author Antonio Linares]]> 2025-02-17T10:22:28-07:00 2025-02-17T10:22:28-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45428&p=277722#p277722 https://www.nvidia.com/en-us/project-digits/
    With the NVIDIA AI software stack preinstalled and 128GB of memory, developers can prototype, fine-tune, and inference large AI models of up to 200B parameters locally, and seamlessly deploy to the data center or cloud
    Image
    Image]]>
    https://www.nvidia.com/en-us/project-digits/
    With the NVIDIA AI software stack preinstalled and 128GB of memory, developers can prototype, fine-tune, and inference large AI models of up to 200B parameters locally, and seamlessly deploy to the data center or cloud
    Image
    Image]]>
    <![CDATA[latest AI news :: Re: NVIDIA Project DIGITS - AI Supercomputer on your desk :: Reply by Antonio Linares]]> 2025-02-17T10:25:43-07:00 2025-02-17T10:25:43-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45428&p=277723#p277723 ]]> ]]> <![CDATA[latest AI news :: Grok 3 announcement :: Author Antonio Linares]]> 2025-02-18T00:57:55-07:00 2025-02-18T00:57:55-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45430&p=277729#p277729 https://x.com/elonmusk/status/1891700271438233931

    Image
    Image]]>
    https://x.com/elonmusk/status/1891700271438233931

    Image
    Image]]>
    <![CDATA[latest AI news :: Re: Grok 3 announcement :: Reply by Antonio Linares]]> 2025-02-18T02:57:54-07:00 2025-02-18T02:57:54-07:00 https://forums.fivetechsupport.com/viewtopic.php?f=42&t=45430&p=277732#p277732
    Image]]>

    Image]]>