<![CDATA[FiveTech Software tech support forums]]> https://fivetechsupport.com/forums Smartfeed extension for phpBB <![CDATA[FiveWin for Harbour/xHarbour :: Get Multiline with picture :: Author oliveiros junior]]> 2025-04-16T08:07:11-06:00 2025-04-16T08:07:11-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45626&p=279007#p279007
Does anyone know if it is possible to add a picture option to a multiline get?

Thanks in advance for the information.

Best regards,

Oliveiros Junior]]>

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

Thanks in advance for the information.

Best regards,

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

Code: Select all | Expand

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

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

Code: Select all | Expand

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

Att.,

Oliveiros Junior]]>

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

Att.,

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

Code: Select all | Expand

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

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

Outro, Other:

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

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

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

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

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

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

RETURN( .T. )

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

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

RETURN( .T. )

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

RETURN( .T. )


FUNCTION SB_LimitText( oGet, oSay, oTransmite )

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

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

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

   IF nTam > nSize

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

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

      RETURN( .F. )

   ENDIF

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

   IF nTam <= 14 // caracteres

      lLigaBotao := .F.

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

   ELSE

      lLigaBotao := .T.

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

   ENDIF

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

Code: Select all | Expand

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

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

Outro, Other:

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

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

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

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

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

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

RETURN( .T. )

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

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

RETURN( .T. )

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

RETURN( .T. )


FUNCTION SB_LimitText( oGet, oSay, oTransmite )

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

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

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

   IF nTam > nSize

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

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

      RETURN( .F. )

   ENDIF

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

   IF nTam <= 14 // caracteres

      lLigaBotao := .F.

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

   ELSE

      lLigaBotao := .T.

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

   ENDIF

RETURN( .T. )
Regards, saludos. - kapiabafwh@gmail.com]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Copying controls :: Reply by Natter]]> 2025-04-16T07:16:08-06:00 2025-04-16T07:16:08-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45620&p=279003#p279003

Code: Select all | Expand

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

Code: Select all | Expand

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

This is how my screen looks like:

Image

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

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

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

This is how my screen looks like:

Image

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

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

Code: Select all | Expand

   oSkinB = TSkinButton():New()

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

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

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

Regards, saludos]]>

Code: Select all | Expand

   oSkinB = TSkinButton():New()

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

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

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

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

Code: Select all | Expand

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

    ODLG:LHELPICON := .F.

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

    oFld:oFont := FntArial

    oFld:SetOption( 1 )

    oFld:Show()

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

Code: Select all | Expand

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

    ODLG:LHELPICON := .F.

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

    oFld:oFont := FntArial

    oFld:SetOption( 1 )

    oFld:Show()

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

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

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

How to Change Vertical Alignment (Top or Bottom):

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

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

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

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

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

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

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

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

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

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

oBrw:CreateFromCode()

Explanation:

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

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

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

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

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

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

For Bottom Alignment:

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

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

Alternative (Less Flexible - Affects All Columns):

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

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

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

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

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

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

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

How to Change Vertical Alignment (Top or Bottom):

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

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

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

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

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

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

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

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

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

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

oBrw:CreateFromCode()

Explanation:

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

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

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

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

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

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

For Bottom Alignment:

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

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

Alternative (Less Flexible - Affects All Columns):

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

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

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

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

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

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

Code: Select all | Expand

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

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

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

   oServer:SelectDB( cTable )

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

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

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

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

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

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

Return nil

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

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

RETURN cResult

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

Code: Select all | Expand

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

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

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

   oServer:SelectDB( cTable )

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

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

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

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

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

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

Return nil

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

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

RETURN cResult

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

I have a problem in the numeric tget class

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

the fields on archive is 6 digit and 2 decimal

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

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

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

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

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

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

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


this is the test

Code: Select all | Expand



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

#define DLG_nColorDlg     RGB(245,245,235)


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

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

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

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

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

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

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

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

   ACTIVATE DIALOG oDlg CENTERED

   RETURN NIL



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

RETURN nKey



any solution pls ?]]>


I have a problem in the numeric tget class

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

the fields on archive is 6 digit and 2 decimal

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

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

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

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

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

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

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


this is the test

Code: Select all | Expand



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

#define DLG_nColorDlg     RGB(245,245,235)


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

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

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

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

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

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

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

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

   ACTIVATE DIALOG oDlg CENTERED

   RETURN NIL



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

RETURN nKey



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

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

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

Code: Select all | Expand

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

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

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

Code: Select all | Expand

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

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

but not run make the same


see the tget class line 2335

Code: Select all | Expand

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



seem not process the todecpos() function]]>

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

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

but not run make the same


see the tget class line 2335

Code: Select all | Expand

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



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

I tested with "," and with "."

Image

at init there is only a get

Code: Select all | Expand

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

#define DLG_nColorDlg RGB(245,245,235)

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

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

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

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

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

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

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

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

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

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

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

RETURN NIL

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

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


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

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

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

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


return .T.

/code]


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


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

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

I tested with "," and with "."

Image

at init there is only a get

Code: Select all | Expand

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

#define DLG_nColorDlg RGB(245,245,235)

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

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

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

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

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

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

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

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

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

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

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

RETURN NIL

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

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


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

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

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

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


return .T.

/code]


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


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

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

How to Use bKeyDown:

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

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

Example Codeblock:

Code: Select all | Expand

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

// Assuming oBrw is your TXBrowse object instance

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

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

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

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

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

        ENDCASE
    ENDIF

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

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

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

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

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

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

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

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

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

How to Use bKeyDown:

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

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

Example Codeblock:

Code: Select all | Expand

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

// Assuming oBrw is your TXBrowse object instance

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

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

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

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

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

        ENDCASE
    ENDIF

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

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

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

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

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

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

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

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

Here's why and why bKeyDown is preferred:

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

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

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

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

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

React to specific events.

Perform custom actions.

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

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

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

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

In summary:

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

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

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

Here's why and why bKeyDown is preferred:

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

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

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

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

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

React to specific events.

Perform custom actions.

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

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

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

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

In summary:

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

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

Thanks]]>

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

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

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

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

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

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

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

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

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

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

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

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

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

Code: Select all | Expand

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

Code: Select all | Expand

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

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   local oWebView := TWebView2():New()

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

return nil

function Html()

   local cHtml

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

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

return cHtml
]]>

webviewexcel.prg

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   local oWebView := TWebView2():New()

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

return nil

function Html()

   local cHtml

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

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

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

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   local oWebView := TWebView2():New()

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

return nil

function Html()

   local cHtml

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

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

return cHtml
]]>

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   local oWebView := TWebView2():New()

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

return nil

function Html()

   local cHtml

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

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

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

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

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

:D]]>
read it from webpage.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Thank you in advance for any suggestion.]]>

I use FWH2304 with xHarbour (20221118).

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

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

modified maria02.prg

Code: Select all | Expand

#include "fivewin.ch"

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

static oCn

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

function Main()

   local oRs, cSql, oDlg

   FWSetLanguage( 1 )
   FW_SetUnicode( .t. )

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

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

      oRs   := oCn:RowSet( cSql )

      DEFINE DIALOG oDlg 

      @ 1, 1 GET oRs:CustName OF oDlg 

      @ 3, 1 GET oRs:St OF oDlg 

      ACTIVATE DIALOG oDlg CENTERED

      oCn:Close()

   endif

return nil


]]>

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

modified maria02.prg

Code: Select all | Expand

#include "fivewin.ch"

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

static oCn

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

function Main()

   local oRs, cSql, oDlg

   FWSetLanguage( 1 )
   FW_SetUnicode( .t. )

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

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

      oRs   := oCn:RowSet( cSql )

      DEFINE DIALOG oDlg 

      @ 1, 1 GET oRs:CustName OF oDlg 

      @ 3, 1 GET oRs:St OF oDlg 

      ACTIVATE DIALOG oDlg CENTERED

      oCn:Close()

   endif

return nil


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

https://streamable.com/7q7ppd


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

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

modified maria02.prg

Code: Select all | Expand

#include "fivewin.ch"

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

static oCn

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

function Main()

   local oRs, cSql, oDlg

   FWSetLanguage( 1 )
   FW_SetUnicode( .t. )

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

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

      oRs   := oCn:RowSet( cSql )

      DEFINE DIALOG oDlg 

      @ 1, 1 GET oRs:CustName OF oDlg 

      @ 3, 1 GET oRs:St OF oDlg 

      ACTIVATE DIALOG oDlg CENTERED

      oCn:Close()

   endif

return nil


]]>

It doesn't work with FWH2304 as vdo clip.

https://streamable.com/7q7ppd


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

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

modified maria02.prg

Code: Select all | Expand

#include "fivewin.ch"

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

static oCn

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

function Main()

   local oRs, cSql, oDlg

   FWSetLanguage( 1 )
   FW_SetUnicode( .t. )

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

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

      oRs   := oCn:RowSet( cSql )

      DEFINE DIALOG oDlg 

      @ 1, 1 GET oRs:CustName OF oDlg 

      @ 3, 1 GET oRs:St OF oDlg 

      ACTIVATE DIALOG oDlg CENTERED

      oCn:Close()

   endif

return nil


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

Can you rebuild the fivewin libraries?

Best regards,

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

This problem is fixed in Fivewin 25.01

Can you rebuild the fivewin libraries?

Best regards,

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

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

This problem is fixed in Fivewin 25.01

Can you rebuild the fivewin libraries?

Best regards,

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

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

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

This problem is fixed in Fivewin 25.01

Can you rebuild the fivewin libraries?

Best regards,

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

Best regards,

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

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

Best regards,

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

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

Best regards,

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

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

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

Best regards,

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

unicode.c changed to fwunicode.c in fivewin 25.01

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

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

unicode.c changed to fwunicode.c in fivewin 25.01

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

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

unicode.c changed to fwunicode.c in fivewin 25.01

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

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

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

unicode.c changed to fwunicode.c in fivewin 25.01

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

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

Can you send me an e-mail for testing?

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

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

Can you send me an e-mail for testing?

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

my email : dutchez4@gmail.com

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

Can you send me an e-mail for testing?

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

Best regards,
Ertan Hakan ÖZTÜRK

ertan_ozturk@yahoo.com]]>

I sent your email.

Best regards,
Ertan Hakan ÖZTÜRK

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

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

I sent your email.

Best regards,
Ertan Hakan ÖZTÜRK

ertan_ozturk@yahoo.com
]]>

How to rebuild c file to library?

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

I sent your email.

Best regards,
Ertan Hakan ÖZTÜRK

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

Thanks in advance,]]>

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

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

Best regards,

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

I try reproduce your error and analysis this with xHarbour

Best regards,

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

I try reproduce your error and analysis this with xHarbour

Best regards,

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

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

I try reproduce your error and analysis this with xHarbour

Best regards,

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

Please check your email,

Best regards,
Ertan Hakan ÖZTÜRK

ertan_ozturk@yahoo.com]]>

The problem is not caused by xHarbour

Please check your email,

Best regards,
Ertan Hakan ÖZTÜRK

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

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

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

modified maria02.prg

Code: Select all | Expand

#include "fivewin.ch"

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

static oCn

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

function Main()

   local oRs, cSql, oDlg

   FWSetLanguage( 1 )
   FW_SetUnicode( .t. )

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

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

      oRs   := oCn:RowSet( cSql )

      DEFINE DIALOG oDlg 

      @ 1, 1 GET oRs:CustName OF oDlg 

      @ 3, 1 GET oRs:St OF oDlg 

      ACTIVATE DIALOG oDlg CENTERED

      oCn:Close()

   endif

return nil


]]>

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

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

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

modified maria02.prg

Code: Select all | Expand

#include "fivewin.ch"

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

static oCn

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

function Main()

   local oRs, cSql, oDlg

   FWSetLanguage( 1 )
   FW_SetUnicode( .t. )

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

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

      oRs   := oCn:RowSet( cSql )

      DEFINE DIALOG oDlg 

      @ 1, 1 GET oRs:CustName OF oDlg 

      @ 3, 1 GET oRs:St OF oDlg 

      ACTIVATE DIALOG oDlg CENTERED

      oCn:Close()

   endif

return nil


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

Waiting for your feedback]]>

Already sent by email a working 2304 version

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

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

Already sent by email a working 2304 version

Waiting for your feedback
]]>

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

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

Already sent by email a working 2304 version

Waiting for your feedback
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Freeze table rows :: Author Natter]]> 2025-04-29T02:25:44-06:00 2025-04-29T02:25:44-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45646&p=279231#p279231
Is it possible to fix (freeze) table rows in RichEdit ?]]>

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

Here are some approaches:

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

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

RTF Table Formatting:

RichEdit’s RTF tables (using \trowd and related RTF codes) allow basic table creation but don’t support freezing rows natively.
You can manually ensure that header rows remain visible by programmatically keeping them at the top of the visible area when scrolling. This requires handling scroll events and adjusting the view, which can be complex and may not be seamless.

Alternative Controls:

If freezing table rows is a critical feature, consider using a more advanced control like a grid control (e.g., TGrid in Delphi, DataGridView in .NET, or third-party controls like DevExpress or Telerik) instead of RichEdit. These controls are designed for tabular data and often support frozen rows/columns natively.

Limitations:

RichEdit is primarily a text-editing control, not a spreadsheet or grid control. Its table support is limited to basic formatting and lacks advanced features like row/column locking.

Implementing a freeze-like feature in RichEdit requires significant custom code and may not provide a smooth user experience.]]>

However, you can achieve a similar effect programmatically or through workarounds, depending on your application’s requirements.

Here are some approaches:

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

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

RTF Table Formatting:

RichEdit’s RTF tables (using \trowd and related RTF codes) allow basic table creation but don’t support freezing rows natively.
You can manually ensure that header rows remain visible by programmatically keeping them at the top of the visible area when scrolling. This requires handling scroll events and adjusting the view, which can be complex and may not be seamless.

Alternative Controls:

If freezing table rows is a critical feature, consider using a more advanced control like a grid control (e.g., TGrid in Delphi, DataGridView in .NET, or third-party controls like DevExpress or Telerik) instead of RichEdit. These controls are designed for tabular data and often support frozen rows/columns natively.

Limitations:

RichEdit is primarily a text-editing control, not a spreadsheet or grid control. Its table support is limited to basic formatting and lacks advanced features like row/column locking.

Implementing a freeze-like feature in RichEdit requires significant custom code and may not provide a smooth user experience.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Freeze table rows :: Reply by Natter]]> 2025-04-29T03:14:44-06:00 2025-04-29T03:14:44-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45646&p=279233#p279233 <![CDATA[FiveWin for Harbour/xHarbour :: DeepWiki :: Author Antonio Linares]]> 2025-04-26T23:02:30-06:00 2025-04-26T23:02:30-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45644&p=279203#p279203 https://deepwiki.com/harbour/core

FiveMac's review:
https://deepwiki.com/FiveTechSoft/fivemac

FiveLinux2's review:
https://deepwiki.com/FiveTechSoft/FiveLinux2

FiveLinux3's review:
https://deepwiki.com/FiveTechSoft/FiveLinux3

ModHarbour's review:
https://deepwiki.com/FiveTechSoft/mod_harbour]]>
https://deepwiki.com/harbour/core

FiveMac's review:
https://deepwiki.com/FiveTechSoft/fivemac

FiveLinux2's review:
https://deepwiki.com/FiveTechSoft/FiveLinux2

FiveLinux3's review:
https://deepwiki.com/FiveTechSoft/FiveLinux3

ModHarbour's review:
https://deepwiki.com/FiveTechSoft/mod_harbour]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: DeepWiki :: Reply by Antonio Linares]]> 2025-04-30T09:39:13-06:00 2025-04-30T09:39:13-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45644&p=279268#p279268 https://docs.devin.ai/get-started/devin-intro]]> https://docs.devin.ai/get-started/devin-intro]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by Antonio Linares]]> 2025-04-20T09:13:21-06:00 2025-04-20T09:13:21-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45548&p=279065#p279065
Thanks to Hakan Öztürk as has found the difference in the code :D

It seems as Mr. Rao changed a call to hb_valStrnToNum() into a call to hb_strnToNum()

According to Mr. Rao's notes:

Code: Select all | Expand

#ifdef REMOVED
/*
               hb_arraySetND( aRow, i + 1, ( mrow[ i ] == NULL ? 0.0 : hb_strVal( mrow[ i ], aLen[ i ] ) ) );
               break;  // loss of accuracy in case of bigint large numbers
*/

/*
               // nor working in case of double datatpe with large numbers
               if( ! hb_valStrnToNum( mrow[ i ], aLen[ i ], &lValue, &dValue, &iDec, &iWidth ) )
               {
                  hb_arraySetNL( aRow, i + 1, ( long ) lValue );
               }
               else
               {
                  hb_itemPutNDLen( itemTmp, dValue, iWidth, iDec );
                  hb_arraySetForward( aRow, i + 1, itemTmp );
               }

               break;
*/
#endif
The modified code uses this now:

Code: Select all | Expand

            case 'N':

               if ( ( nAt = ( int ) hb_strAtI( "e", 1, mrow[ i ], aLen[ i ] ) ) > 0 )
               {
                  dValue = hb_strVal( mrow[ i ], aLen[ i ] );
                  x = ( int ) hb_strVal( mrow[ i ] + nAt, aLen[ i ] - nAt );
                  dValue *= pow( ( double ) 10.0, ( double ) x );
                  hb_arraySetND( aRow, i + 1, dValue );
               }
               else
               {
                  if ( hb_strnToNum( mrow[ i ], aLen[ i ], &lValue, &dValue ) )
                  {
                     hb_arraySetND( aRow, i + 1, dValue );
                  }
                  else
                  {
                     hb_arraySetNLL( aRow, i + 1, lValue );
                  }
               }
               break;
We can revert this change and send you a modified lib for your testing. Please let me know if you want it for 32 or 64 bits ? Borland or MSVC ? many thanks!]]>

Thanks to Hakan Öztürk as has found the difference in the code :D

It seems as Mr. Rao changed a call to hb_valStrnToNum() into a call to hb_strnToNum()

According to Mr. Rao's notes:

Code: Select all | Expand

#ifdef REMOVED
/*
               hb_arraySetND( aRow, i + 1, ( mrow[ i ] == NULL ? 0.0 : hb_strVal( mrow[ i ], aLen[ i ] ) ) );
               break;  // loss of accuracy in case of bigint large numbers
*/

/*
               // nor working in case of double datatpe with large numbers
               if( ! hb_valStrnToNum( mrow[ i ], aLen[ i ], &lValue, &dValue, &iDec, &iWidth ) )
               {
                  hb_arraySetNL( aRow, i + 1, ( long ) lValue );
               }
               else
               {
                  hb_itemPutNDLen( itemTmp, dValue, iWidth, iDec );
                  hb_arraySetForward( aRow, i + 1, itemTmp );
               }

               break;
*/
#endif
The modified code uses this now:

Code: Select all | Expand

            case 'N':

               if ( ( nAt = ( int ) hb_strAtI( "e", 1, mrow[ i ], aLen[ i ] ) ) > 0 )
               {
                  dValue = hb_strVal( mrow[ i ], aLen[ i ] );
                  x = ( int ) hb_strVal( mrow[ i ] + nAt, aLen[ i ] - nAt );
                  dValue *= pow( ( double ) 10.0, ( double ) x );
                  hb_arraySetND( aRow, i + 1, dValue );
               }
               else
               {
                  if ( hb_strnToNum( mrow[ i ], aLen[ i ], &lValue, &dValue ) )
                  {
                     hb_arraySetND( aRow, i + 1, dValue );
                  }
                  else
                  {
                     hb_arraySetNLL( aRow, i + 1, lValue );
                  }
               }
               break;
We can revert this change and send you a modified lib for your testing. Please let me know if you want it for 32 or 64 bits ? Borland or MSVC ? many thanks!]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by vilian]]> 2025-04-22T05:04:45-06:00 2025-04-22T05:04:45-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45548&p=279097#p279097
I'm using Borland/32bits.]]>

I'm using Borland/32bits.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by ertan]]> 2025-04-22T06:34:44-06:00 2025-04-22T06:34:44-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45548&p=279098#p279098
Can you solved your lost connection problems?

Best Regards,

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

Can you solved your lost connection problems?

Best Regards,

Ertan Hakan ÖZTÜRK
ertan_ozturk@yahoo.com]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by vilian]]> 2025-04-22T06:45:42-06:00 2025-04-22T06:45:42-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45548&p=279099#p279099 ]]> ]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by vilian]]> 2025-04-30T04:35:41-06:00 2025-04-30T04:35:41-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45548&p=279248#p279248
Antonio Linares wrote: Sun Apr 20, 2025 3:13 pm Dear Vilian,

Thanks to Hakan Öztürk as has found the difference in the code :D

It seems as Mr. Rao changed a call to hb_valStrnToNum() into a call to hb_strnToNum()

According to Mr. Rao's notes:

Code: Select all | Expand

#ifdef REMOVED
/*
               hb_arraySetND( aRow, i + 1, ( mrow[ i ] == NULL ? 0.0 : hb_strVal( mrow[ i ], aLen[ i ] ) ) );
               break;  // loss of accuracy in case of bigint large numbers
*/

/*
               // nor working in case of double datatpe with large numbers
               if( ! hb_valStrnToNum( mrow[ i ], aLen[ i ], &lValue, &dValue, &iDec, &iWidth ) )
               {
                  hb_arraySetNL( aRow, i + 1, ( long ) lValue );
               }
               else
               {
                  hb_itemPutNDLen( itemTmp, dValue, iWidth, iDec );
                  hb_arraySetForward( aRow, i + 1, itemTmp );
               }

               break;
*/
#endif
The modified code uses this now:

Code: Select all | Expand

            case 'N':

               if ( ( nAt = ( int ) hb_strAtI( "e", 1, mrow[ i ], aLen[ i ] ) ) > 0 )
               {
                  dValue = hb_strVal( mrow[ i ], aLen[ i ] );
                  x = ( int ) hb_strVal( mrow[ i ] + nAt, aLen[ i ] - nAt );
                  dValue *= pow( ( double ) 10.0, ( double ) x );
                  hb_arraySetND( aRow, i + 1, dValue );
               }
               else
               {
                  if ( hb_strnToNum( mrow[ i ], aLen[ i ], &lValue, &dValue ) )
                  {
                     hb_arraySetND( aRow, i + 1, dValue );
                  }
                  else
                  {
                     hb_arraySetNLL( aRow, i + 1, lValue );
                  }
               }
               break;
We can revert this change and send you a modified lib for your testing. Please let me know if you want it for 32 or 64 bits ? Borland or MSVC ? many thanks!
Good Morning Antonio,
When will it be available to me ?]]>
Antonio Linares wrote: Sun Apr 20, 2025 3:13 pm Dear Vilian,

Thanks to Hakan Öztürk as has found the difference in the code :D

It seems as Mr. Rao changed a call to hb_valStrnToNum() into a call to hb_strnToNum()

According to Mr. Rao's notes:

Code: Select all | Expand

#ifdef REMOVED
/*
               hb_arraySetND( aRow, i + 1, ( mrow[ i ] == NULL ? 0.0 : hb_strVal( mrow[ i ], aLen[ i ] ) ) );
               break;  // loss of accuracy in case of bigint large numbers
*/

/*
               // nor working in case of double datatpe with large numbers
               if( ! hb_valStrnToNum( mrow[ i ], aLen[ i ], &lValue, &dValue, &iDec, &iWidth ) )
               {
                  hb_arraySetNL( aRow, i + 1, ( long ) lValue );
               }
               else
               {
                  hb_itemPutNDLen( itemTmp, dValue, iWidth, iDec );
                  hb_arraySetForward( aRow, i + 1, itemTmp );
               }

               break;
*/
#endif
The modified code uses this now:

Code: Select all | Expand

            case 'N':

               if ( ( nAt = ( int ) hb_strAtI( "e", 1, mrow[ i ], aLen[ i ] ) ) > 0 )
               {
                  dValue = hb_strVal( mrow[ i ], aLen[ i ] );
                  x = ( int ) hb_strVal( mrow[ i ] + nAt, aLen[ i ] - nAt );
                  dValue *= pow( ( double ) 10.0, ( double ) x );
                  hb_arraySetND( aRow, i + 1, dValue );
               }
               else
               {
                  if ( hb_strnToNum( mrow[ i ], aLen[ i ], &lValue, &dValue ) )
                  {
                     hb_arraySetND( aRow, i + 1, dValue );
                  }
                  else
                  {
                     hb_arraySetNLL( aRow, i + 1, lValue );
                  }
               }
               break;
We can revert this change and send you a modified lib for your testing. Please let me know if you want it for 32 or 64 bits ? Borland or MSVC ? many thanks!
Good Morning Antonio,
When will it be available to me ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by Antonio Linares]]> 2025-04-30T06:47:21-06:00 2025-04-30T06:47:21-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45548&p=279250#p279250
You are using FWH 25.01, right ?

Borland 32 bits]]>

You are using FWH 25.01, right ?

Borland 32 bits]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by vilian]]> 2025-04-30T09:31:37-06:00 2025-04-30T09:31:37-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45548&p=279266#p279266 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by Antonio Linares]]> 2025-04-30T09:37:18-06:00 2025-04-30T09:37:18-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45548&p=279267#p279267 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by vilian]]> 2025-04-30T10:35:38-06:00 2025-04-30T10:35:38-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45548&p=279276#p279276 FWH2311 doesn't have this problem. I Wanted this fix for FWH 25.01, so i could move my program to this version.]]> FWH2311 doesn't have this problem. I Wanted this fix for FWH 25.01, so i could move my program to this version.]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Problem with numeric fields and FWH 25.01 :: Reply by Antonio Linares]]> 2025-04-30T11:06:23-06:00 2025-04-30T11:06:23-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45548&p=279282#p279282
Please do this:

1. go to FWH 25.01 lib folder:
copy fiveh.lib fiveh.old

2. go to FWH 23.11 lib folder:
c:\bcc77\bin\tlib fiveh.lib * fwmaria.obj
copy fwmaria.obj to your FWH 25.01 lib folder

3. go to FWH 25.01 lib folder:
c:\bcc77\bin\tlib fiveh.lib -+ fwmaria.obj]]>

Please do this:

1. go to FWH 25.01 lib folder:
copy fiveh.lib fiveh.old

2. go to FWH 23.11 lib folder:
c:\bcc77\bin\tlib fiveh.lib * fwmaria.obj
copy fwmaria.obj to your FWH 25.01 lib folder

3. go to FWH 25.01 lib folder:
c:\bcc77\bin\tlib fiveh.lib -+ fwmaria.obj]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Natter]]> 2025-04-25T12:27:35-06:00 2025-04-25T12:27:35-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45610&p=279185#p279185 After selecting from the POPUP menu, all the buttons TBUTOON, BTNBMP, etc. cease to be clickable (however, they do not receive the disable status).
This can be solved by opening msg info(111). After clicking the mouse on the control, the clickability of all buttons will be restored.
What could be the reason for this behavior ?]]>
After selecting from the POPUP menu, all the buttons TBUTOON, BTNBMP, etc. cease to be clickable (however, they do not receive the disable status).
This can be solved by opening msg info(111). After clicking the mouse on the control, the clickability of all buttons will be restored.
What could be the reason for this behavior ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Antonio Linares]]> 2025-04-25T18:55:24-06:00 2025-04-25T18:55:24-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45610&p=279189#p279189
Could you provide a screenshot ?]]>

Could you provide a screenshot ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Natter]]> 2025-04-25T23:43:04-06:00 2025-04-25T23:43:04-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45610&p=279191#p279191 There is a panel (TPanel) on the shared window (wnd). There is a TGet on this panel with a button

Code: Select all | Expand

 
  local oCl
  private oWnd           

  oCl:=TGet():New(100, 100, "  ", oWnd:aControls[1], 500, 20, replicate("X", 35),, ;
                                                  CLR_BLACK, RGB(245, 245, 245),,,, .T.,,,, .T.)

  oBt:=TButton():New(0, oCl:nWidth-22,"...", oCl,, 20, oCl:nHeight-2,,,, .T.)
          oBt:bAction:={||Mnu_Tls()}
Clicking on the button opens the menu.

Code: Select all | Expand

procedure Mnu_Tls
local st, dim:=getcursorpos(), mas:={"One","Two","Three"}
local oMen, oCl

    MENU oMen POPUP  2007 
        for st=1 to len(mas)
          if st>1
            SEPARATOR
          endif
          MENUITEM oCl PROMPT mas[st]
          oCl:bAction:=&('{||oWnd:aControls[1]:aControls[1]:cText(" '+ mas[st]+' '")}')
        next 
    ENDMENU

    ACTIVATE POPUP oMen OF oWnd  AT dim[1], dim[2]
  return
The menu can no longer be called a second time - the "..." button it is not clickable. But if you write like this

Code: Select all | Expand

 oCl:bAction:=&('{||oWnd:aControls[1]:aControls[1]:cText(" '+ mas[st]+' '"), msginfo(123)}')
That's all right]]>
There is a panel (TPanel) on the shared window (wnd). There is a TGet on this panel with a button

Code: Select all | Expand

 
  local oCl
  private oWnd           

  oCl:=TGet():New(100, 100, "  ", oWnd:aControls[1], 500, 20, replicate("X", 35),, ;
                                                  CLR_BLACK, RGB(245, 245, 245),,,, .T.,,,, .T.)

  oBt:=TButton():New(0, oCl:nWidth-22,"...", oCl,, 20, oCl:nHeight-2,,,, .T.)
          oBt:bAction:={||Mnu_Tls()}
Clicking on the button opens the menu.

Code: Select all | Expand

procedure Mnu_Tls
local st, dim:=getcursorpos(), mas:={"One","Two","Three"}
local oMen, oCl

    MENU oMen POPUP  2007 
        for st=1 to len(mas)
          if st>1
            SEPARATOR
          endif
          MENUITEM oCl PROMPT mas[st]
          oCl:bAction:=&('{||oWnd:aControls[1]:aControls[1]:cText(" '+ mas[st]+' '")}')
        next 
    ENDMENU

    ACTIVATE POPUP oMen OF oWnd  AT dim[1], dim[2]
  return
The menu can no longer be called a second time - the "..." button it is not clickable. But if you write like this

Code: Select all | Expand

 oCl:bAction:=&('{||oWnd:aControls[1]:aControls[1]:cText(" '+ mas[st]+' '"), msginfo(123)}')
That's all right]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Antonio Linares]]> 2025-04-26T01:20:08-06:00 2025-04-26T01:20:08-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45610&p=279192#p279192 <![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Natter]]> 2025-04-29T06:52:52-06:00 2025-04-29T06:52:52-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45610&p=279236#p279236 <![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Antonio Linares]]> 2025-04-29T12:01:21-06:00 2025-04-29T12:01:21-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45610&p=279238#p279238 <![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Natter]]> 2025-04-29T12:59:54-06:00 2025-04-29T12:59:54-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45610&p=279239#p279239 ]]> ]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Antonio Linares]]> 2025-04-29T23:09:29-06:00 2025-04-29T23:09:29-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45610&p=279245#p279245
Please use MsgBeep() from the codeblock to test when it is called.]]>

Please use MsgBeep() from the codeblock to test when it is called.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Natter]]> 2025-05-01T02:17:33-06:00 2025-05-01T02:17:33-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45610&p=279287#p279287 Wine ?]]> Wine ?]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: FW and Wine :: Reply by Antonio Linares]]> 2025-05-01T03:03:01-06:00 2025-05-01T03:03:01-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45610&p=279289#p279289 <![CDATA[FiveWin for Harbour/xHarbour :: Db and cloud :: Author damianodec]]> 2025-05-01T14:09:23-06:00 2025-05-01T14:09:23-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45652&p=279294#p279294 A my customer (as400 Db2 server) now is in cloud.
My app that export data each morning read db from sql server and write to as400 by oledb connection.
Before cloud export data (50.000 records) in about 10 minutes, now export time is about 1 hour.
Lan connection is very good e internet is very fast.
How can I improve export time?
Damiano]]>
A my customer (as400 Db2 server) now is in cloud.
My app that export data each morning read db from sql server and write to as400 by oledb connection.
Before cloud export data (50.000 records) in about 10 minutes, now export time is about 1 hour.
Lan connection is very good e internet is very fast.
How can I improve export time?
Damiano]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Db and cloud :: Reply by Antonio Linares]]> 2025-05-01T15:12:13-06:00 2025-05-01T15:12:13-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45652&p=279296#p279296
Grok 3 answer:

The significant increase in export time after moving your AS400 DB2 server to the cloud is likely due to factors such as network latency, cloud infrastructure configuration, or inefficiencies in the data transfer process. Below are steps to diagnose and improve the export time for your application, which reads from SQL Server and writes to the AS400 DB2 server via an OLEDB connection.
1. Diagnose the Bottleneck
To optimize performance, first identify where the bottleneck lies—network, database, or application.
Network Latency and Bandwidth:
Even with a "very fast" internet connection, cloud environments introduce latency due to geographic distance or network hops. Measure the round-trip time (RTT) to the cloud server using tools like ping or tracert.
Check if the cloud provider’s network performance aligns with your expectations (e.g., dedicated vs. shared bandwidth).
Verify if there are any VPN or firewall configurations slowing down the connection.
Database Performance:
Check the cloud DB2 server's resource allocation (CPU, memory, I/O). The cloud instance may have lower performance than the on-premises AS400 hardware.
Run performance diagnostics on the DB2 server (e.g., WRKSYSSTS or DB2 performance tools) to check for resource contention or locking issues.
Ensure indexes on the target DB2 tables are optimized for the write operations.
Application and OLEDB:
Profile the application to confirm whether the slowdown is in reading from SQL Server, processing data, or writing to DB2.
Verify if the OLEDB driver is up-to-date and optimized for cloud connectivity. Older drivers may not handle cloud environments efficiently.
Check if the application is performing row-by-row inserts, which are slow over high-latency connections.
2. Optimize Data Transfer
Based on the diagnosis, consider these strategies to reduce export time:
a. Batch Processing
Problem: If your application is inserting records one-by-one (row-by-row) via OLEDB, each insert incurs network latency, significantly slowing down the process.
Solution:
Modify the application to use batch inserts. Group multiple records (e.g., 100–1000 rows) into a single OLEDB transaction or parameterized query.
Example: Instead of INSERT INTO table VALUES (...) for each row, use a bulk insert or multi-row insert syntax supported by DB2.
If the OLEDB driver supports it, enable batching in the connection settings.
b. Bulk Data Transfer
Problem: Individual inserts are inefficient for large datasets like 50,000 records.
Solution:
Use DB2’s bulk load utilities, such as IMPORT or LOAD, to transfer data in bulk.
Export data from SQL Server to a flat file (e.g., CSV) and use DB2’s IMPORT command or a cloud-compatible ETL tool to load the file into DB2.
If direct file transfer is not feasible, consider using a staging table in DB2 and then moving data to the final table with a single INSERT ... SELECT query.
c. Optimize OLEDB Connection
Problem: The OLEDB connection may not be tuned for cloud performance.
Solution:
Use the latest IBM i Access Client Solutions or IBM DB2 OLEDB driver, which may offer better performance for cloud environments.
Adjust connection properties, such as ConnectionTimeout, CommandTimeout, or PacketSize, to optimize for cloud latency.
Enable connection pooling to reduce overhead for repeated connections.
d. Compress Data
Problem: Transferring 50,000 records over the network may be slowed by data volume.
Solution:
Compress the data before transfer (e.g., zip the CSV file if using bulk load).
If the application supports it, enable data compression in the OLEDB driver or network layer.
3. Optimize Cloud Infrastructure
The cloud environment may not be configured optimally for your workload.
Upgrade Cloud Instance:
Ensure the cloud DB2 instance has sufficient CPU, memory, and I/O capacity. Compare the cloud instance’s specs to the on-premises AS400 hardware.
If using a shared cloud instance, consider upgrading to a dedicated instance to avoid resource contention.
Geographic Proximity:
Deploy the DB2 server in a cloud region closer to your application’s location to reduce latency.
If your application is on-premises, consider a hybrid setup where critical workloads remain closer to the application.
Network Optimization:
Use a direct connection (e.g., AWS Direct Connect, Azure ExpressRoute) to the cloud provider to reduce latency and improve bandwidth.
If using a VPN, ensure it’s configured for high performance (e.g., optimized MTU settings).
4. Alternative Approaches
If the above optimizations don’t sufficiently reduce export time, consider these alternatives:
ETL Tools:
Use an ETL tool like IBM DataStage, Talend, or Informatica to handle data transfer. These tools are optimized for large-scale data movement and can leverage cloud-native features.
Configure the ETL tool to run in the cloud, closer to the DB2 server, to minimize network latency.
Cloud-Native Integration:
If the SQL Server is also in the cloud, use cloud-native integration services (e.g., AWS Glue, Azure Data Factory) to move data between SQL Server and DB2.
These services can handle large datasets efficiently and reduce the dependency on OLEDB.
Asynchronous Processing:
If real-time exports aren’t required, schedule the export as a background job on the cloud server using a script or stored procedure, reducing the impact of network latency.
5. Test and Monitor
Benchmark Changes: After implementing changes, measure the export time to quantify improvements.
Monitor Performance: Use DB2’s performance monitoring tools (e.g., IBM i Navigator, SQL Performance Center) and cloud provider metrics to track CPU, I/O, and network usage during exports.
Iterate: Start with the simplest changes (e.g., batch inserts) and progressively implement more complex solutions (e.g., bulk load or ETL tools) if needed.
Example Action Plan
Immediate:
Check network latency to the cloud server.
Profile the application to confirm whether the bottleneck is in reading, processing, or writing.
Enable batch inserts in the application (e.g., 500 rows per batch).
Short-Term:
Update the OLEDB driver and optimize connection settings.
Test bulk loading with a CSV file and DB2’s IMPORT command.
Verify the cloud DB2 instance’s resource allocation.
Long-Term:
Consider an ETL tool or cloud-native integration service.
Explore direct cloud connectivity options (e.g., ExpressRoute).
Reevaluate the cloud region or instance type.
Expected Outcome
With batch inserts or bulk loading, you could reduce the export time significantly, potentially approaching the original 10-minute mark. For example, batching 50,000 records into 100 batches of 500 rows could cut network overhead by orders of magnitude. Bulk loading via IMPORT could be even faster, depending on the cloud setup.
If you provide more details (e.g., cloud provider, DB2 version, OLEDB driver version, or application code snippet), I can tailor the recommendations further. Would you like assistance with a specific step, such as writing a batch insert query or configuring a bulk load?]]>

Grok 3 answer:

The significant increase in export time after moving your AS400 DB2 server to the cloud is likely due to factors such as network latency, cloud infrastructure configuration, or inefficiencies in the data transfer process. Below are steps to diagnose and improve the export time for your application, which reads from SQL Server and writes to the AS400 DB2 server via an OLEDB connection.
1. Diagnose the Bottleneck
To optimize performance, first identify where the bottleneck lies—network, database, or application.
Network Latency and Bandwidth:
Even with a "very fast" internet connection, cloud environments introduce latency due to geographic distance or network hops. Measure the round-trip time (RTT) to the cloud server using tools like ping or tracert.
Check if the cloud provider’s network performance aligns with your expectations (e.g., dedicated vs. shared bandwidth).
Verify if there are any VPN or firewall configurations slowing down the connection.
Database Performance:
Check the cloud DB2 server's resource allocation (CPU, memory, I/O). The cloud instance may have lower performance than the on-premises AS400 hardware.
Run performance diagnostics on the DB2 server (e.g., WRKSYSSTS or DB2 performance tools) to check for resource contention or locking issues.
Ensure indexes on the target DB2 tables are optimized for the write operations.
Application and OLEDB:
Profile the application to confirm whether the slowdown is in reading from SQL Server, processing data, or writing to DB2.
Verify if the OLEDB driver is up-to-date and optimized for cloud connectivity. Older drivers may not handle cloud environments efficiently.
Check if the application is performing row-by-row inserts, which are slow over high-latency connections.
2. Optimize Data Transfer
Based on the diagnosis, consider these strategies to reduce export time:
a. Batch Processing
Problem: If your application is inserting records one-by-one (row-by-row) via OLEDB, each insert incurs network latency, significantly slowing down the process.
Solution:
Modify the application to use batch inserts. Group multiple records (e.g., 100–1000 rows) into a single OLEDB transaction or parameterized query.
Example: Instead of INSERT INTO table VALUES (...) for each row, use a bulk insert or multi-row insert syntax supported by DB2.
If the OLEDB driver supports it, enable batching in the connection settings.
b. Bulk Data Transfer
Problem: Individual inserts are inefficient for large datasets like 50,000 records.
Solution:
Use DB2’s bulk load utilities, such as IMPORT or LOAD, to transfer data in bulk.
Export data from SQL Server to a flat file (e.g., CSV) and use DB2’s IMPORT command or a cloud-compatible ETL tool to load the file into DB2.
If direct file transfer is not feasible, consider using a staging table in DB2 and then moving data to the final table with a single INSERT ... SELECT query.
c. Optimize OLEDB Connection
Problem: The OLEDB connection may not be tuned for cloud performance.
Solution:
Use the latest IBM i Access Client Solutions or IBM DB2 OLEDB driver, which may offer better performance for cloud environments.
Adjust connection properties, such as ConnectionTimeout, CommandTimeout, or PacketSize, to optimize for cloud latency.
Enable connection pooling to reduce overhead for repeated connections.
d. Compress Data
Problem: Transferring 50,000 records over the network may be slowed by data volume.
Solution:
Compress the data before transfer (e.g., zip the CSV file if using bulk load).
If the application supports it, enable data compression in the OLEDB driver or network layer.
3. Optimize Cloud Infrastructure
The cloud environment may not be configured optimally for your workload.
Upgrade Cloud Instance:
Ensure the cloud DB2 instance has sufficient CPU, memory, and I/O capacity. Compare the cloud instance’s specs to the on-premises AS400 hardware.
If using a shared cloud instance, consider upgrading to a dedicated instance to avoid resource contention.
Geographic Proximity:
Deploy the DB2 server in a cloud region closer to your application’s location to reduce latency.
If your application is on-premises, consider a hybrid setup where critical workloads remain closer to the application.
Network Optimization:
Use a direct connection (e.g., AWS Direct Connect, Azure ExpressRoute) to the cloud provider to reduce latency and improve bandwidth.
If using a VPN, ensure it’s configured for high performance (e.g., optimized MTU settings).
4. Alternative Approaches
If the above optimizations don’t sufficiently reduce export time, consider these alternatives:
ETL Tools:
Use an ETL tool like IBM DataStage, Talend, or Informatica to handle data transfer. These tools are optimized for large-scale data movement and can leverage cloud-native features.
Configure the ETL tool to run in the cloud, closer to the DB2 server, to minimize network latency.
Cloud-Native Integration:
If the SQL Server is also in the cloud, use cloud-native integration services (e.g., AWS Glue, Azure Data Factory) to move data between SQL Server and DB2.
These services can handle large datasets efficiently and reduce the dependency on OLEDB.
Asynchronous Processing:
If real-time exports aren’t required, schedule the export as a background job on the cloud server using a script or stored procedure, reducing the impact of network latency.
5. Test and Monitor
Benchmark Changes: After implementing changes, measure the export time to quantify improvements.
Monitor Performance: Use DB2’s performance monitoring tools (e.g., IBM i Navigator, SQL Performance Center) and cloud provider metrics to track CPU, I/O, and network usage during exports.
Iterate: Start with the simplest changes (e.g., batch inserts) and progressively implement more complex solutions (e.g., bulk load or ETL tools) if needed.
Example Action Plan
Immediate:
Check network latency to the cloud server.
Profile the application to confirm whether the bottleneck is in reading, processing, or writing.
Enable batch inserts in the application (e.g., 500 rows per batch).
Short-Term:
Update the OLEDB driver and optimize connection settings.
Test bulk loading with a CSV file and DB2’s IMPORT command.
Verify the cloud DB2 instance’s resource allocation.
Long-Term:
Consider an ETL tool or cloud-native integration service.
Explore direct cloud connectivity options (e.g., ExpressRoute).
Reevaluate the cloud region or instance type.
Expected Outcome
With batch inserts or bulk loading, you could reduce the export time significantly, potentially approaching the original 10-minute mark. For example, batching 50,000 records into 100 batches of 500 rows could cut network overhead by orders of magnitude. Bulk loading via IMPORT could be even faster, depending on the cloud setup.
If you provide more details (e.g., cloud provider, DB2 version, OLEDB driver version, or application code snippet), I can tailor the recommendations further. Would you like assistance with a specific step, such as writing a batch insert query or configuring a bulk load?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Click outside the modal window :: Author Natter]]> 2025-05-02T04:34:49-06:00 2025-05-02T04:34:49-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45653&p=279297#p279297
From the main window A, I open a new modal window B. If you click on window A, window B will twitch 2-3 times.
What is this event and can it be handled?]]>

From the main window A, I open a new modal window B. If you click on window A, window B will twitch 2-3 times.
What is this event and can it be handled?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Click outside the modal window :: Reply by Antonio Linares]]> 2025-05-02T05:05:29-06:00 2025-05-02T05:05:29-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45653&p=279298#p279298
Have you tried with oWnd:bLostFocus ?]]>

Have you tried with oWnd:bLostFocus ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Click outside the modal window :: Reply by Natter]]> 2025-05-02T10:39:14-06:00 2025-05-02T10:39:14-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45653&p=279300#p279300 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Click outside the modal window :: Reply by karinha]]> 2025-05-02T11:38:09-06:00 2025-05-02T11:38:09-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45653&p=279304#p279304
Regards, saludos.]]>

Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Click outside the modal window :: Reply by Natter]]> 2025-05-02T12:21:20-06:00 2025-05-02T12:21:20-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45653&p=279305#p279305

Code: Select all | Expand

#include "FiveWin.ch"

function Main()
private oA

   DEFINE DIALOG oA  FROM 2, 2 TO 30, 60  TITLE "First dialog"

   oA:bRClicked = { | nRow, nCol, nFlags | New_Dlg() }

   ACTIVATE DIALOG oA CENTERED
return nil

function New_Dlg
local  oB

   DEFINE DIALOG oB  OF oA    FROM 2, 2 TO 20, 50   TITLE "Second dialog"

   ACTIVATE DIALOG oB CENTERED
return nil
]]>

Code: Select all | Expand

#include "FiveWin.ch"

function Main()
private oA

   DEFINE DIALOG oA  FROM 2, 2 TO 30, 60  TITLE "First dialog"

   oA:bRClicked = { | nRow, nCol, nFlags | New_Dlg() }

   ACTIVATE DIALOG oA CENTERED
return nil

function New_Dlg
local  oB

   DEFINE DIALOG oB  OF oA    FROM 2, 2 TO 20, 50   TITLE "Second dialog"

   ACTIVATE DIALOG oB CENTERED
return nil
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Click outside the modal window :: Reply by karinha]]> 2025-05-02T12:52:28-06:00 2025-05-02T12:52:28-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45653&p=279306#p279306

Code: Select all | Expand

#include "FiveWin.ch"

// STATIC oDlg, oDlg2 // .or.

MEMVAR oDlg, oDlg2

FUNCTION Main()

   LOCAL oGet, oGet2, oBtn, Capt := Space( 10 ), Capt2 := " "

   DEFINE DIALOG oDlg FROM 2, 2 TO 30, 60 TITLE "First dialog"

   oDlg:lHelpIcon := .F.

   oDlg:bRClicked = {| nRow, nCol, nFlags | New_Dlg() }

   ACTIVATE DIALOG oDlg CENTERED 

RETURN NIL

FUNCTION New_Dlg()

   DEFINE DIALOG oDlg2 OF oDlg FROM 2, 2 TO 20, 50 TITLE "Second dialog"

   oDlg2:lHelpIcon := .F.

   ACTIVATE DIALOG oDlg2 CENTERED

RETURN NIL

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

Code: Select all | Expand

#include "FiveWin.ch"

// STATIC oDlg, oDlg2 // .or.

MEMVAR oDlg, oDlg2

FUNCTION Main()

   LOCAL oGet, oGet2, oBtn, Capt := Space( 10 ), Capt2 := " "

   DEFINE DIALOG oDlg FROM 2, 2 TO 30, 60 TITLE "First dialog"

   oDlg:lHelpIcon := .F.

   oDlg:bRClicked = {| nRow, nCol, nFlags | New_Dlg() }

   ACTIVATE DIALOG oDlg CENTERED 

RETURN NIL

FUNCTION New_Dlg()

   DEFINE DIALOG oDlg2 OF oDlg FROM 2, 2 TO 20, 50 TITLE "Second dialog"

   oDlg2:lHelpIcon := .F.

   ACTIVATE DIALOG oDlg2 CENTERED

RETURN NIL

// FIN / END
Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: New Image scroll class :: Author Silvio.Falconi]]> 2025-04-20T17:49:33-06:00 2025-04-27T17:37:49-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45634&p=279075#p279075 From an old Otto's Idea

I created this class because every year at school we have graduation day and on the screen in the auditorium I had to display all the sponsors who help us organize the event every year. With this class I can do it easily without resorting to existing applications on the market.

Image

The TScrollImg class is a custom control for FiveWin/Harbour that allows you to create a scrollable image gallery (banner) inside a Windows application. Images can be associated with URLs, allowing users to open websites with a click. The control is designed to be fluid, without flickering, and supports flexible configurations to adapt to different needs.

Main Features
  • Image scrolling: Images scroll horizontally (left or right) with a configurable speed.
    URL association: Each image can have an associated URL, which opens in the default browser with a click.
    Visual feedback: The cursor becomes a hand when it passes over an image with a valid URL.
    Customization: Supports background colors, borders, sizes and scroll modes.
    Backwards compatibility: Works with simple image arrays (without URLs) or with associated URLs.
    Optimization: Use double buffering to eliminate flickering during animation
the example you see is a comprehensive test of all the features: transparent, with brush, without brush, with url and with codeblock. This example will be provided as an accessory.


Configure the aBanners Array
The aBanners array defines the images to display. It can be in 3 formats:

Simple (images only):
LOCAL aBanners := {"Bosch.png", "Brother.png", "Canon.png"}
In this case, the images scroll but are not clickable (no URL associated).

With URLs (images and links):
LOCAL aBanners := {{"Bosch.png", "www.bosch.it"}, {"Brother.png", "www.brother.it"}}
The images are clickable, and a click opens the URL in the browser.

With codeblock (images and codeblock):
local aBanners := { ;
{ "Bosch.png", "www.bosch.it", .F. },;
{ "Brother.png", "www.brother.it", .F. },;
{ "Canon.png", {|| MsgInfo("select one category") }, .T. }}
The images are clickable, and a click eval the codeblock . w
We could then create a scroll of images of the categories and open an xbrowse with the products of that category

User Interaction
Scrolling: The images scroll automatically based on nMode and nSpeed.
Cursor: When the mouse hovers over an image with a URL, the cursor changes to a hand, indicating that it is clickable.
Click: Clicking an image with a URL opens the associated website in the default browser. or run a codeblock
the animation starts automatically but by means of a button you can change the direction, the speed, the space between the images

Usage

Code: Select all | Expand

@ 10, 10 SCROLLIMG oScroll ;
      PATH cImagePath ;
      BANNERS aBanners ;
      SPEED 2 ;
      MODE 1 ;
      SIZE 300, 30 ;
      BORDER ;
      COLORBORDER nRGB(150,150,150) ;
      OF oDlg




I will send to Antonio.]]>
From an old Otto's Idea

I created this class because every year at school we have graduation day and on the screen in the auditorium I had to display all the sponsors who help us organize the event every year. With this class I can do it easily without resorting to existing applications on the market.

Image

The TScrollImg class is a custom control for FiveWin/Harbour that allows you to create a scrollable image gallery (banner) inside a Windows application. Images can be associated with URLs, allowing users to open websites with a click. The control is designed to be fluid, without flickering, and supports flexible configurations to adapt to different needs.

Main Features
  • Image scrolling: Images scroll horizontally (left or right) with a configurable speed.
    URL association: Each image can have an associated URL, which opens in the default browser with a click.
    Visual feedback: The cursor becomes a hand when it passes over an image with a valid URL.
    Customization: Supports background colors, borders, sizes and scroll modes.
    Backwards compatibility: Works with simple image arrays (without URLs) or with associated URLs.
    Optimization: Use double buffering to eliminate flickering during animation
the example you see is a comprehensive test of all the features: transparent, with brush, without brush, with url and with codeblock. This example will be provided as an accessory.


Configure the aBanners Array
The aBanners array defines the images to display. It can be in 3 formats:

Simple (images only):
LOCAL aBanners := {"Bosch.png", "Brother.png", "Canon.png"}
In this case, the images scroll but are not clickable (no URL associated).

With URLs (images and links):
LOCAL aBanners := {{"Bosch.png", "www.bosch.it"}, {"Brother.png", "www.brother.it"}}
The images are clickable, and a click opens the URL in the browser.

With codeblock (images and codeblock):
local aBanners := { ;
{ "Bosch.png", "www.bosch.it", .F. },;
{ "Brother.png", "www.brother.it", .F. },;
{ "Canon.png", {|| MsgInfo("select one category") }, .T. }}
The images are clickable, and a click eval the codeblock . w
We could then create a scroll of images of the categories and open an xbrowse with the products of that category

User Interaction
Scrolling: The images scroll automatically based on nMode and nSpeed.
Cursor: When the mouse hovers over an image with a URL, the cursor changes to a hand, indicating that it is clickable.
Click: Clicking an image with a URL opens the associated website in the default browser. or run a codeblock
the animation starts automatically but by means of a button you can change the direction, the speed, the space between the images

Usage

Code: Select all | Expand

@ 10, 10 SCROLLIMG oScroll ;
      PATH cImagePath ;
      BANNERS aBanners ;
      SPEED 2 ;
      MODE 1 ;
      SIZE 300, 30 ;
      BORDER ;
      COLORBORDER nRGB(150,150,150) ;
      OF oDlg




I will send to Antonio.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by Silvio.Falconi]]> 2025-04-25T14:49:05-06:00 2025-04-25T14:49:05-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45634&p=279188#p279188 <![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by richard-service]]> 2025-04-26T10:32:09-06:00 2025-04-26T10:32:09-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45634&p=279196#p279196
Silvio.Falconi wrote: Sun Apr 20, 2025 11:49 pm From an old Otto's Idea

I created this class because every year at school we have graduation day and on the screen in the auditorium I had to display all the sponsors who help us organize the event every year. With this class I can do it easily without resorting to existing applications on the market.

Image

The TScrollImg class is a custom control for FiveWin/Harbour that allows you to create a scrollable image gallery (banner) inside a Windows application. Images can be associated with URLs, allowing users to open websites with a click. The control is designed to be fluid, without flickering, and supports flexible configurations to adapt to different needs.

Main Features
  • Image scrolling: Images scroll horizontally (left or right) with a configurable speed.
    URL association: Each image can have an associated URL, which opens in the default browser with a click.
    Visual feedback: The cursor becomes a hand when it passes over an image with a valid URL.
    Customization: Supports background colors, borders, sizes and scroll modes.
    Backwards compatibility: Works with simple image arrays (without URLs) or with associated URLs.
    Optimization: Use double buffering to eliminate flickering during animation

Configure the aBanners Array
The aBanners array defines the images to display. It can be in two formats:

Simple (images only):
LOCAL aBanners := {"Bosch.png", "Brother.png", "Canon.png"}
In this case, the images scroll but are not clickable (no URL associated).

With URLs (images and links):
LOCAL aBanners := {{"Bosch.png", "www.bosch.it"}, {"Brother.png", "www.brother.it"}}
The images are clickable, and a click opens the URL in the browser.

User Interaction
Scrolling: The images scroll automatically based on nMode and nSpeed.
Cursor: When the mouse hovers over an image with a URL, the cursor changes to a hand, indicating that it is clickable.
Click: Clicking an image with a URL opens the associated website in the default browser.

Usage

Code: Select all | Expand

@ 10, 10 SCROLLIMG oScroll ;
      PATH cImagePath ;
      BANNERS aBanners ;
      SPEED 2 ;
      MODE 1 ;
      SIZE 300, 30 ;
      BORDER ;
      
      
      
      COLORBORDER nRGB(150,150,150) ;
      OF oDlg




I will send to Antonio.
Dear Silvio,

Could you please make it REDEFINE command

Code: Select all | Expand

ReDefine CROLLIMG oScroll ID 300 OF oDlg
.....
]]>
Silvio.Falconi wrote: Sun Apr 20, 2025 11:49 pm From an old Otto's Idea

I created this class because every year at school we have graduation day and on the screen in the auditorium I had to display all the sponsors who help us organize the event every year. With this class I can do it easily without resorting to existing applications on the market.

Image

The TScrollImg class is a custom control for FiveWin/Harbour that allows you to create a scrollable image gallery (banner) inside a Windows application. Images can be associated with URLs, allowing users to open websites with a click. The control is designed to be fluid, without flickering, and supports flexible configurations to adapt to different needs.

Main Features
  • Image scrolling: Images scroll horizontally (left or right) with a configurable speed.
    URL association: Each image can have an associated URL, which opens in the default browser with a click.
    Visual feedback: The cursor becomes a hand when it passes over an image with a valid URL.
    Customization: Supports background colors, borders, sizes and scroll modes.
    Backwards compatibility: Works with simple image arrays (without URLs) or with associated URLs.
    Optimization: Use double buffering to eliminate flickering during animation

Configure the aBanners Array
The aBanners array defines the images to display. It can be in two formats:

Simple (images only):
LOCAL aBanners := {"Bosch.png", "Brother.png", "Canon.png"}
In this case, the images scroll but are not clickable (no URL associated).

With URLs (images and links):
LOCAL aBanners := {{"Bosch.png", "www.bosch.it"}, {"Brother.png", "www.brother.it"}}
The images are clickable, and a click opens the URL in the browser.

User Interaction
Scrolling: The images scroll automatically based on nMode and nSpeed.
Cursor: When the mouse hovers over an image with a URL, the cursor changes to a hand, indicating that it is clickable.
Click: Clicking an image with a URL opens the associated website in the default browser.

Usage

Code: Select all | Expand

@ 10, 10 SCROLLIMG oScroll ;
      PATH cImagePath ;
      BANNERS aBanners ;
      SPEED 2 ;
      MODE 1 ;
      SIZE 300, 30 ;
      BORDER ;
      
      
      
      COLORBORDER nRGB(150,150,150) ;
      OF oDlg




I will send to Antonio.
Dear Silvio,

Could you please make it REDEFINE command

Code: Select all | Expand

ReDefine CROLLIMG oScroll ID 300 OF oDlg
.....
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by Silvio.Falconi]]> 2025-04-27T12:39:29-06:00 2025-04-27T12:39:29-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45634&p=279211#p279211 No Problems.

Image

sample:

Code: Select all | Expand

 
 
 #include "FiveWin.ch"
#include "scrollimg.ch"

function Main()

local oDlg, oScroll
local cImagePath    := cFilePath( GetModuleFileName( GetInstance() ) ) + "Bitmaps\"
local aBanners := { ;
      { "Bosch.png", "www.bosch.it" },;
      { "Brother.png", "www.brother.it" },;
      { "Canon.png", "www.canon.it" },;
      { "De-Longhi.png", "www.delonghi.com" },;
      { "ELECTROLUX-REX.png", "www.electrolux.it" },;
      { "HOTPOINT.png", "www.hotpoint.it" },;
      { "INDESIT.png", "www.indesit.it" },;
      { "KENSINGTON.png", "www.kensington.com" },;
      { "LEXMARK.png", "www.lexmark.com" },;
      { "LOGITECH.png", "www.logitech.com" },;
      { "MSI.png", "www.msi.com" },;
      { "OKI.png", "www.oki.com" },;
      { "PURO.png", "www.puro.it" },;
      { "RICOH.png", "www.ricoh.it" }}


   DEFINE DIALOG oDlg RESOURCE "Test"


REDEFINE SCROLLIMG oScroll ;
              ID 300 ;
              OF oDlg  ;
              PATH cImagePath ;
              BANNERS aBanners ;
              BORDER ;
              COLORBORDER CLR_YELLOW

  ACTIVATE DIALOG oDlg

return nil

]]>
No Problems.

Image

sample:

Code: Select all | Expand

 
 
 #include "FiveWin.ch"
#include "scrollimg.ch"

function Main()

local oDlg, oScroll
local cImagePath    := cFilePath( GetModuleFileName( GetInstance() ) ) + "Bitmaps\"
local aBanners := { ;
      { "Bosch.png", "www.bosch.it" },;
      { "Brother.png", "www.brother.it" },;
      { "Canon.png", "www.canon.it" },;
      { "De-Longhi.png", "www.delonghi.com" },;
      { "ELECTROLUX-REX.png", "www.electrolux.it" },;
      { "HOTPOINT.png", "www.hotpoint.it" },;
      { "INDESIT.png", "www.indesit.it" },;
      { "KENSINGTON.png", "www.kensington.com" },;
      { "LEXMARK.png", "www.lexmark.com" },;
      { "LOGITECH.png", "www.logitech.com" },;
      { "MSI.png", "www.msi.com" },;
      { "OKI.png", "www.oki.com" },;
      { "PURO.png", "www.puro.it" },;
      { "RICOH.png", "www.ricoh.it" }}


   DEFINE DIALOG oDlg RESOURCE "Test"


REDEFINE SCROLLIMG oScroll ;
              ID 300 ;
              OF oDlg  ;
              PATH cImagePath ;
              BANNERS aBanners ;
              BORDER ;
              COLORBORDER CLR_YELLOW

  ACTIVATE DIALOG oDlg

return nil

]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by richard-service]]> 2025-04-27T19:27:08-06:00 2025-04-27T19:27:08-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45634&p=279214#p279214
Silvio.Falconi wrote: Sun Apr 27, 2025 6:39 pm No Problems.

Image

sample:

Code: Select all | Expand

 
 
 #include "FiveWin.ch"
#include "scrollimg.ch"

function Main()

local oDlg, oScroll
local cImagePath    := cFilePath( GetModuleFileName( GetInstance() ) ) + "Bitmaps\"
local aBanners := { ;
      { "Bosch.png", "www.bosch.it" },;
      { "Brother.png", "www.brother.it" },;
      { "Canon.png", "www.canon.it" },;
      { "De-Longhi.png", "www.delonghi.com" },;
      { "ELECTROLUX-REX.png", "www.electrolux.it" },;
      { "HOTPOINT.png", "www.hotpoint.it" },;
      { "INDESIT.png", "www.indesit.it" },;
      { "KENSINGTON.png", "www.kensington.com" },;
      { "LEXMARK.png", "www.lexmark.com" },;
      { "LOGITECH.png", "www.logitech.com" },;
      { "MSI.png", "www.msi.com" },;
      { "OKI.png", "www.oki.com" },;
      { "PURO.png", "www.puro.it" },;
      { "RICOH.png", "www.ricoh.it" }}


   DEFINE DIALOG oDlg RESOURCE "Test"


REDEFINE SCROLLIMG oScroll ;
              ID 300 ;
              OF oDlg  ;
              PATH cImagePath ;
              BANNERS aBanners ;
              BORDER ;
              COLORBORDER CLR_YELLOW

  ACTIVATE DIALOG oDlg

return nil

Dear Silvio,

Good job.
May I set Frame function disable? Show or Hide ...]]>
Silvio.Falconi wrote: Sun Apr 27, 2025 6:39 pm No Problems.

Image

sample:

Code: Select all | Expand

 
 
 #include "FiveWin.ch"
#include "scrollimg.ch"

function Main()

local oDlg, oScroll
local cImagePath    := cFilePath( GetModuleFileName( GetInstance() ) ) + "Bitmaps\"
local aBanners := { ;
      { "Bosch.png", "www.bosch.it" },;
      { "Brother.png", "www.brother.it" },;
      { "Canon.png", "www.canon.it" },;
      { "De-Longhi.png", "www.delonghi.com" },;
      { "ELECTROLUX-REX.png", "www.electrolux.it" },;
      { "HOTPOINT.png", "www.hotpoint.it" },;
      { "INDESIT.png", "www.indesit.it" },;
      { "KENSINGTON.png", "www.kensington.com" },;
      { "LEXMARK.png", "www.lexmark.com" },;
      { "LOGITECH.png", "www.logitech.com" },;
      { "MSI.png", "www.msi.com" },;
      { "OKI.png", "www.oki.com" },;
      { "PURO.png", "www.puro.it" },;
      { "RICOH.png", "www.ricoh.it" }}


   DEFINE DIALOG oDlg RESOURCE "Test"


REDEFINE SCROLLIMG oScroll ;
              ID 300 ;
              OF oDlg  ;
              PATH cImagePath ;
              BANNERS aBanners ;
              BORDER ;
              COLORBORDER CLR_YELLOW

  ACTIVATE DIALOG oDlg

return nil

Dear Silvio,

Good job.
May I set Frame function disable? Show or Hide ...]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by Silvio.Falconi]]> 2025-04-28T00:25:05-06:00 2025-04-28T00:25:05-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45634&p=279215#p279215
richard-service wrote: Mon Apr 28, 2025 1:27 am
Silvio.Falconi wrote: Sun Apr 27, 2025 6:39 pm No Problems.

Image

sample:

Code: Select all | Expand

 
 
 #include "FiveWin.ch"
#include "scrollimg.ch"

function Main()

local oDlg, oScroll
local cImagePath    := cFilePath( GetModuleFileName( GetInstance() ) ) + "Bitmaps\"
local aBanners := { ;
      { "Bosch.png", "www.bosch.it" },;
      { "Brother.png", "www.brother.it" },;
      { "Canon.png", "www.canon.it" },;
      { "De-Longhi.png", "www.delonghi.com" },;
      { "ELECTROLUX-REX.png", "www.electrolux.it" },;
      { "HOTPOINT.png", "www.hotpoint.it" },;
      { "INDESIT.png", "www.indesit.it" },;
      { "KENSINGTON.png", "www.kensington.com" },;
      { "LEXMARK.png", "www.lexmark.com" },;
      { "LOGITECH.png", "www.logitech.com" },;
      { "MSI.png", "www.msi.com" },;
      { "OKI.png", "www.oki.com" },;
      { "PURO.png", "www.puro.it" },;
      { "RICOH.png", "www.ricoh.it" }}


   DEFINE DIALOG oDlg RESOURCE "Test"


REDEFINE SCROLLIMG oScroll ;
              ID 300 ;
              OF oDlg  ;
              PATH cImagePath ;
              BANNERS aBanners ;
              BORDER ;
              COLORBORDER CLR_YELLOW

  ACTIVATE DIALOG oDlg

return nil

Dear Silvio,

Good job.
May I set Frame function disable? Show or Hide ...
I'm really confused, I don't understand your question...

What do you mean by frame?

Do you means Border?
there is a data lBorder if it is false the border does not show

There is no "frame" in the TscrollImage class...

I'm surprised you say you are better than me...

It's an object control

What's the problem?

I've never seen you make requests like that to anyone else.


Send me your images I can build a sample test for U


Image



Vertical up and down

Image]]>
richard-service wrote: Mon Apr 28, 2025 1:27 am
Silvio.Falconi wrote: Sun Apr 27, 2025 6:39 pm No Problems.

Image

sample:

Code: Select all | Expand

 
 
 #include "FiveWin.ch"
#include "scrollimg.ch"

function Main()

local oDlg, oScroll
local cImagePath    := cFilePath( GetModuleFileName( GetInstance() ) ) + "Bitmaps\"
local aBanners := { ;
      { "Bosch.png", "www.bosch.it" },;
      { "Brother.png", "www.brother.it" },;
      { "Canon.png", "www.canon.it" },;
      { "De-Longhi.png", "www.delonghi.com" },;
      { "ELECTROLUX-REX.png", "www.electrolux.it" },;
      { "HOTPOINT.png", "www.hotpoint.it" },;
      { "INDESIT.png", "www.indesit.it" },;
      { "KENSINGTON.png", "www.kensington.com" },;
      { "LEXMARK.png", "www.lexmark.com" },;
      { "LOGITECH.png", "www.logitech.com" },;
      { "MSI.png", "www.msi.com" },;
      { "OKI.png", "www.oki.com" },;
      { "PURO.png", "www.puro.it" },;
      { "RICOH.png", "www.ricoh.it" }}


   DEFINE DIALOG oDlg RESOURCE "Test"


REDEFINE SCROLLIMG oScroll ;
              ID 300 ;
              OF oDlg  ;
              PATH cImagePath ;
              BANNERS aBanners ;
              BORDER ;
              COLORBORDER CLR_YELLOW

  ACTIVATE DIALOG oDlg

return nil

Dear Silvio,

Good job.
May I set Frame function disable? Show or Hide ...
I'm really confused, I don't understand your question...

What do you mean by frame?

Do you means Border?
there is a data lBorder if it is false the border does not show

There is no "frame" in the TscrollImage class...

I'm surprised you say you are better than me...

It's an object control

What's the problem?

I've never seen you make requests like that to anyone else.


Send me your images I can build a sample test for U


Image



Vertical up and down

Image]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by richard-service]]> 2025-04-28T02:44:09-06:00 2025-04-28T02:44:09-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45634&p=279217#p279217
Silvio.Falconi wrote: Mon Apr 28, 2025 6:25 am
richard-service wrote: Mon Apr 28, 2025 1:27 am
Silvio.Falconi wrote: Sun Apr 27, 2025 6:39 pm No Problems.

Image

sample:

Code: Select all | Expand

 
 
 #include "FiveWin.ch"
#include "scrollimg.ch"

function Main()

local oDlg, oScroll
local cImagePath    := cFilePath( GetModuleFileName( GetInstance() ) ) + "Bitmaps\"
local aBanners := { ;
      { "Bosch.png", "www.bosch.it" },;
      { "Brother.png", "www.brother.it" },;
      { "Canon.png", "www.canon.it" },;
      { "De-Longhi.png", "www.delonghi.com" },;
      { "ELECTROLUX-REX.png", "www.electrolux.it" },;
      { "HOTPOINT.png", "www.hotpoint.it" },;
      { "INDESIT.png", "www.indesit.it" },;
      { "KENSINGTON.png", "www.kensington.com" },;
      { "LEXMARK.png", "www.lexmark.com" },;
      { "LOGITECH.png", "www.logitech.com" },;
      { "MSI.png", "www.msi.com" },;
      { "OKI.png", "www.oki.com" },;
      { "PURO.png", "www.puro.it" },;
      { "RICOH.png", "www.ricoh.it" }}


   DEFINE DIALOG oDlg RESOURCE "Test"


REDEFINE SCROLLIMG oScroll ;
              ID 300 ;
              OF oDlg  ;
              PATH cImagePath ;
              BANNERS aBanners ;
              BORDER ;
              COLORBORDER CLR_YELLOW

  ACTIVATE DIALOG oDlg

return nil

Dear Silvio,

Good job.
May I set Frame function disable? Show or Hide ...
I'm really confused, I don't understand your question...

What do you mean by frame?

Do you means Border?
there is a data lBorder if it is false the border does not show

There is no "frame" in the TscrollImage class...

I'm surprised you say you are better than me...

It's an object control

What's the problem?

I've never seen you make requests like that to anyone else.


Send me your images I can build a sample test for U


Image



Vertical up and down

Image
Yes, You do it Great...]]>
Silvio.Falconi wrote: Mon Apr 28, 2025 6:25 am
richard-service wrote: Mon Apr 28, 2025 1:27 am
Silvio.Falconi wrote: Sun Apr 27, 2025 6:39 pm No Problems.

Image

sample:

Code: Select all | Expand

 
 
 #include "FiveWin.ch"
#include "scrollimg.ch"

function Main()

local oDlg, oScroll
local cImagePath    := cFilePath( GetModuleFileName( GetInstance() ) ) + "Bitmaps\"
local aBanners := { ;
      { "Bosch.png", "www.bosch.it" },;
      { "Brother.png", "www.brother.it" },;
      { "Canon.png", "www.canon.it" },;
      { "De-Longhi.png", "www.delonghi.com" },;
      { "ELECTROLUX-REX.png", "www.electrolux.it" },;
      { "HOTPOINT.png", "www.hotpoint.it" },;
      { "INDESIT.png", "www.indesit.it" },;
      { "KENSINGTON.png", "www.kensington.com" },;
      { "LEXMARK.png", "www.lexmark.com" },;
      { "LOGITECH.png", "www.logitech.com" },;
      { "MSI.png", "www.msi.com" },;
      { "OKI.png", "www.oki.com" },;
      { "PURO.png", "www.puro.it" },;
      { "RICOH.png", "www.ricoh.it" }}


   DEFINE DIALOG oDlg RESOURCE "Test"


REDEFINE SCROLLIMG oScroll ;
              ID 300 ;
              OF oDlg  ;
              PATH cImagePath ;
              BANNERS aBanners ;
              BORDER ;
              COLORBORDER CLR_YELLOW

  ACTIVATE DIALOG oDlg

return nil

Dear Silvio,

Good job.
May I set Frame function disable? Show or Hide ...
I'm really confused, I don't understand your question...

What do you mean by frame?

Do you means Border?
there is a data lBorder if it is false the border does not show

There is no "frame" in the TscrollImage class...

I'm surprised you say you are better than me...

It's an object control

What's the problem?

I've never seen you make requests like that to anyone else.


Send me your images I can build a sample test for U


Image



Vertical up and down

Image
Yes, You do it Great...]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by Silvio.Falconi]]> 2025-04-28T06:41:32-06:00 2025-04-28T06:41:32-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45634&p=279218#p279218 <![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by RAMESHBABU]]> 2025-04-28T20:21:57-06:00 2025-04-28T20:21:57-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45634&p=279230#p279230
Thank for your your New Image Scrolling Class.
May I request you to please provide a prompt
attached to each Image as shown in the
followig picture ?

Image

- Ramesh Babu P]]>

Thank for your your New Image Scrolling Class.
May I request you to please provide a prompt
attached to each Image as shown in the
followig picture ?

Image

- Ramesh Babu P]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by Silvio.Falconi]]> 2025-04-29T06:13:38-06:00 2025-04-29T06:13:38-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45634&p=279235#p279235
RAMESHBABU wrote: Tue Apr 29, 2025 2:21 am Dear Silvio,

Thank for your your New Image Scrolling Class.
May I request you to please provide a prompt
attached to each Image as shown in the
followig picture ?

Image

- Ramesh Babu P

first release add also the tooltip
The length of the text must be equal to the width of the image

Image]]>
RAMESHBABU wrote: Tue Apr 29, 2025 2:21 am Dear Silvio,

Thank for your your New Image Scrolling Class.
May I request you to please provide a prompt
attached to each Image as shown in the
followig picture ?

Image

- Ramesh Babu P

first release add also the tooltip
The length of the text must be equal to the width of the image

Image]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by RAMESHBABU]]> 2025-04-29T19:53:56-06:00 2025-04-29T19:53:56-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45634&p=279243#p279243
first release add also the tooltip
The length of the text must be equal to the width of the image
Thank your very much for providing the text prompt and ToolTip. Its a nice
useful feature. :D

Regards,
- Ramesh Babu P]]>
first release add also the tooltip
The length of the text must be equal to the width of the image
Thank your very much for providing the text prompt and ToolTip. Its a nice
useful feature. :D

Regards,
- Ramesh Babu P]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by Silvio.Falconi]]> 2025-04-30T01:17:52-06:00 2025-04-30T01:17:52-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45634&p=279246#p279246
RAMESHBABU wrote: Wed Apr 30, 2025 1:53 am Dear Silvio,
first release add also the tooltip
The length of the text must be equal to the width of the image
Thank your very much for providing the text prompt and ToolTip. Its a nice
useful feature. :D

Regards,
- Ramesh Babu P
I added the ability to change the font when the text is longer than the image width
when a cycle of images ends everything is reset and starts again from the beginning


Image


in the video you will see a flickering but he assures you that in the original it is not perceptible
It's probably the GifScreenRecord application that creates this effect



then I could include these features:

1. Advanced animation effects
2. Speed ​​control via interface
3. Pause/resume with click or key
4. Text with visual effects
5. Manual navigation
6. Support for different image sizes
7. Progress indicator or counter
8. Support for video or dynamic content
9. Customizable themes or skins
10. State saving
11. making cappuccino with a brioche

Which could be useful?]]>
RAMESHBABU wrote: Wed Apr 30, 2025 1:53 am Dear Silvio,
first release add also the tooltip
The length of the text must be equal to the width of the image
Thank your very much for providing the text prompt and ToolTip. Its a nice
useful feature. :D

Regards,
- Ramesh Babu P
I added the ability to change the font when the text is longer than the image width
when a cycle of images ends everything is reset and starts again from the beginning


Image


in the video you will see a flickering but he assures you that in the original it is not perceptible
It's probably the GifScreenRecord application that creates this effect



then I could include these features:

1. Advanced animation effects
2. Speed ​​control via interface
3. Pause/resume with click or key
4. Text with visual effects
5. Manual navigation
6. Support for different image sizes
7. Progress indicator or counter
8. Support for video or dynamic content
9. Customizable themes or skins
10. State saving
11. making cappuccino with a brioche

Which could be useful?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by Silvio.Falconi]]> 2025-04-30T02:55:14-06:00 2025-04-30T02:55:14-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45634&p=279247#p279247
1. Advanced animation effects ( shadow on image)
2. Speed ​​control via interface
3. Pause/resume with click or key
10. load and State saving

When I over on an Image the class make a zoom of the image

add the possibility to change speed of a animation by buttons or key ( space, + and - )

add load and save state of animation

sample of file .ini

Code: Select all | Expand

[ScrollImg]
LeftImage01=    582.00
TopImage01=     31.00
LeftImage02=    732.00
TopImage02=     31.00
LeftImage03=    882.00
TopImage03=     31.00
LeftImage04=   1032.00
TopImage04=     31.00
LeftImage05=   1182.00
TopImage05=     31.00
LeftImage06=   1332.00
TopImage06=     31.00
LeftImage07=   1482.00
TopImage07=     31.00
LeftImage08=   1632.00
TopImage08=     31.00
LeftImage09=   1782.00
TopImage09=     31.00
LeftImage10=   1932.00
TopImage10=     31.00
LeftImage11=   2082.00
TopImage11=     31.00
LeftImage12=   2232.00
TopImage12=     31.00
LeftImage13=   2382.00
TopImage13=     31.00
LeftImage14=   2532.00
TopImage14=     31.00
Speed=  5.00
Paused=0
Running=1
CycleCounter=         0
]]>

1. Advanced animation effects ( shadow on image)
2. Speed ​​control via interface
3. Pause/resume with click or key
10. load and State saving

When I over on an Image the class make a zoom of the image

add the possibility to change speed of a animation by buttons or key ( space, + and - )

add load and save state of animation

sample of file .ini

Code: Select all | Expand

[ScrollImg]
LeftImage01=    582.00
TopImage01=     31.00
LeftImage02=    732.00
TopImage02=     31.00
LeftImage03=    882.00
TopImage03=     31.00
LeftImage04=   1032.00
TopImage04=     31.00
LeftImage05=   1182.00
TopImage05=     31.00
LeftImage06=   1332.00
TopImage06=     31.00
LeftImage07=   1482.00
TopImage07=     31.00
LeftImage08=   1632.00
TopImage08=     31.00
LeftImage09=   1782.00
TopImage09=     31.00
LeftImage10=   1932.00
TopImage10=     31.00
LeftImage11=   2082.00
TopImage11=     31.00
LeftImage12=   2232.00
TopImage12=     31.00
LeftImage13=   2382.00
TopImage13=     31.00
LeftImage14=   2532.00
TopImage14=     31.00
Speed=  5.00
Paused=0
Running=1
CycleCounter=         0
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by RAMESHBABU]]> 2025-04-30T23:02:27-06:00 2025-04-30T23:02:27-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45634&p=279285#p279285
Nice additions to the Class. :D
My best regards,

-Ramesh Babu P]]>

Nice additions to the Class. :D
My best regards,

-Ramesh Babu P]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Image scroll class :: Reply by Silvio.Falconi]]> 2025-05-03T04:02:15-06:00 2025-05-03T04:02:15-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45634&p=279308#p279308 <![CDATA[FiveWin for Harbour/xHarbour :: recursive value problem :: Author Silvio.Falconi]]> 2025-05-09T04:51:19-06:00 2025-05-09T04:51:19-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45662&p=279384#p279384

Code: Select all | Expand

FOR nIndex := 1 TO Min( nFields, 5 ) // Limita a 5 checkbox come da specifica
      IF Len( ::aFields[nIndex] ) >= 2
         @ nRow, nCol CHECKBOX ::aControls[nIndex] ;
            VAR ::aCheckboxes[nIndex] ;
            PROMPT ::aFields[nIndex][2] ;
            OF ::oDlg ;
            SIZE 90, 20 ;
            PIXEL ;
            COLOR CLR_BLACK, RGB(235, 243, 245) ;
            FONT ::oFontBold ;
            ON CHANGE ( oThis:ChangeSizeBrw( nIndex ) )
         nCol += 100
      ENDIF
      If nIndex==5
         EXIT
      Endif

   NEXT
to avoid it making the mistake of going to take the number 6 when instead of elements in the array there are 5 I inserted these lines at the end of the loop

Code: Select all | Expand

 If nIndex==5
         EXIT
      Endif
but then the nIndex passed on oThis:ChangeSizeBrw( nIndex ) is allways 5

any solution pls ?]]>

Code: Select all | Expand

FOR nIndex := 1 TO Min( nFields, 5 ) // Limita a 5 checkbox come da specifica
      IF Len( ::aFields[nIndex] ) >= 2
         @ nRow, nCol CHECKBOX ::aControls[nIndex] ;
            VAR ::aCheckboxes[nIndex] ;
            PROMPT ::aFields[nIndex][2] ;
            OF ::oDlg ;
            SIZE 90, 20 ;
            PIXEL ;
            COLOR CLR_BLACK, RGB(235, 243, 245) ;
            FONT ::oFontBold ;
            ON CHANGE ( oThis:ChangeSizeBrw( nIndex ) )
         nCol += 100
      ENDIF
      If nIndex==5
         EXIT
      Endif

   NEXT
to avoid it making the mistake of going to take the number 6 when instead of elements in the array there are 5 I inserted these lines at the end of the loop

Code: Select all | Expand

 If nIndex==5
         EXIT
      Endif
but then the nIndex passed on oThis:ChangeSizeBrw( nIndex ) is allways 5

any solution pls ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: recursive value problem :: Reply by Antonio Linares]]> 2025-05-09T05:37:53-06:00 2025-05-09T05:37:53-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45662&p=279386#p279386
Typicall case to use a detached local:

Code: Select all | Expand

  FOR nIndex := 1 TO Min( nFields, 5 ) // Limita a 5 checkbox come da specifica
      IF Len( ::aFields[nIndex] ) >= 2
         @ nRow, nCol CHECKBOX ::aControls[nIndex] ;
            VAR ::aCheckboxes[nIndex] ;
            PROMPT ::aFields[nIndex][2] ;
            OF ::oDlg ;
            SIZE 90, 20 ;
            PIXEL ;
            COLOR CLR_BLACK, RGB(235, 243, 245) ;
            FONT ::oFontBold ;
         ::aControls[ nIndex ]:bChanged = GenChangeBlock( ::aControls[ nIndex ], nIndex )   
         nCol += 100
      ENDIF
      If nIndex==5
         EXIT
      Endif
   NEXT
   
   function GenChangeBlock( oCbx, nIndex )
   
   return { || oCbx:ChageSizeBrw( nIndex ) }
   
]]>

Typicall case to use a detached local:

Code: Select all | Expand

  FOR nIndex := 1 TO Min( nFields, 5 ) // Limita a 5 checkbox come da specifica
      IF Len( ::aFields[nIndex] ) >= 2
         @ nRow, nCol CHECKBOX ::aControls[nIndex] ;
            VAR ::aCheckboxes[nIndex] ;
            PROMPT ::aFields[nIndex][2] ;
            OF ::oDlg ;
            SIZE 90, 20 ;
            PIXEL ;
            COLOR CLR_BLACK, RGB(235, 243, 245) ;
            FONT ::oFontBold ;
         ::aControls[ nIndex ]:bChanged = GenChangeBlock( ::aControls[ nIndex ], nIndex )   
         nCol += 100
      ENDIF
      If nIndex==5
         EXIT
      Endif
   NEXT
   
   function GenChangeBlock( oCbx, nIndex )
   
   return { || oCbx:ChageSizeBrw( nIndex ) }
   
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: recursive value problem :: Reply by Silvio.Falconi]]> 2025-05-09T06:19:38-06:00 2025-05-09T06:19:38-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45662&p=279390#p279390
Antonio Linares wrote: Fri May 09, 2025 11:37 am Dear Silvio,

Typicall case to use a detached local:

Code: Select all | Expand

  FOR nIndex := 1 TO Min( nFields, 5 ) // Limita a 5 checkbox come da specifica
      IF Len( ::aFields[nIndex] ) >= 2
         @ nRow, nCol CHECKBOX ::aControls[nIndex] ;
            VAR ::aCheckboxes[nIndex] ;
            PROMPT ::aFields[nIndex][2] ;
            OF ::oDlg ;
            SIZE 90, 20 ;
            PIXEL ;
            COLOR CLR_BLACK, RGB(235, 243, 245) ;
            FONT ::oFontBold ;
         ::aControls[ nIndex ]:bChanged = GenChangeBlock( ::aControls[ nIndex ], nIndex )   
         nCol += 100
      ENDIF
      If nIndex==5
         EXIT
      Endif
   NEXT
   
   function GenChangeBlock( oCbx, nIndex )
   
   return { || oCbx:ChageSizeBrw( nIndex ) }
   
::aControls[ nIndex ]:bChange := GenChangeBlock( ::aControls[ nIndex ], nIndex ) make me error

Code: Select all | Expand

Error occurred at: 05/09/25, 14:19:59
   Error description: Error BASE/1004  Message not found: TCHECKBOX:CHAGESIZEBRW
   Args:
     [   1] = O   TCHECKBOX

Stack Calls
===========
   Called from: ../../../tobject.prg => __ERRRT_SBASE( 0 )
   Called from: ../../../tobject.prg => TCHECKBOX:ERROR( 0 )
   Called from: ../../../tobject.prg => (b)HBOBJECT( 0 )
   Called from: ../../../tobject.prg => TCHECKBOX:MSGNOTFOUND( 0 )
   Called from: ../../../tobject.prg => TCHECKBOX:CHAGESIZEBRW( 0 )
   Called from: Tfiltro.prg => (b)GENCHANGEBLOCK( 104 )
   Called from: .\source\classes\checkbox.prg => TCHECKBOX:CLICK( 153 )
   Called from: .\source\classes\control.prg => TCHECKBOX:HANDLEEVENT( 18
I made

::aControls[nIndex]:bchange := ::EvalBlock(nIndex)

METHOD EvalBlock(n) CLASS TFiltro
local nCopy := n
return { || ::ChangeSizeBrw(nCopy ) }


and seem run ok only I have other problems now


on ::ChangeSizeBrw(nIndex ) nIndex is 1 but the if I make xbrowser ::aCheckboxes it show all false and only last true

Image


but it is bad beacuse I click on first checkbox and I must have the first .t. and not .f.]]>
Antonio Linares wrote: Fri May 09, 2025 11:37 am Dear Silvio,

Typicall case to use a detached local:

Code: Select all | Expand

  FOR nIndex := 1 TO Min( nFields, 5 ) // Limita a 5 checkbox come da specifica
      IF Len( ::aFields[nIndex] ) >= 2
         @ nRow, nCol CHECKBOX ::aControls[nIndex] ;
            VAR ::aCheckboxes[nIndex] ;
            PROMPT ::aFields[nIndex][2] ;
            OF ::oDlg ;
            SIZE 90, 20 ;
            PIXEL ;
            COLOR CLR_BLACK, RGB(235, 243, 245) ;
            FONT ::oFontBold ;
         ::aControls[ nIndex ]:bChanged = GenChangeBlock( ::aControls[ nIndex ], nIndex )   
         nCol += 100
      ENDIF
      If nIndex==5
         EXIT
      Endif
   NEXT
   
   function GenChangeBlock( oCbx, nIndex )
   
   return { || oCbx:ChageSizeBrw( nIndex ) }
   
::aControls[ nIndex ]:bChange := GenChangeBlock( ::aControls[ nIndex ], nIndex ) make me error

Code: Select all | Expand

Error occurred at: 05/09/25, 14:19:59
   Error description: Error BASE/1004  Message not found: TCHECKBOX:CHAGESIZEBRW
   Args:
     [   1] = O   TCHECKBOX

Stack Calls
===========
   Called from: ../../../tobject.prg => __ERRRT_SBASE( 0 )
   Called from: ../../../tobject.prg => TCHECKBOX:ERROR( 0 )
   Called from: ../../../tobject.prg => (b)HBOBJECT( 0 )
   Called from: ../../../tobject.prg => TCHECKBOX:MSGNOTFOUND( 0 )
   Called from: ../../../tobject.prg => TCHECKBOX:CHAGESIZEBRW( 0 )
   Called from: Tfiltro.prg => (b)GENCHANGEBLOCK( 104 )
   Called from: .\source\classes\checkbox.prg => TCHECKBOX:CLICK( 153 )
   Called from: .\source\classes\control.prg => TCHECKBOX:HANDLEEVENT( 18
I made

::aControls[nIndex]:bchange := ::EvalBlock(nIndex)

METHOD EvalBlock(n) CLASS TFiltro
local nCopy := n
return { || ::ChangeSizeBrw(nCopy ) }


and seem run ok only I have other problems now


on ::ChangeSizeBrw(nIndex ) nIndex is 1 but the if I make xbrowser ::aCheckboxes it show all false and only last true

Image


but it is bad beacuse I click on first checkbox and I must have the first .t. and not .f.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: oAuth2 :: Author Randal]]> 2025-05-01T13:14:57-06:00 2025-05-01T13:14:57-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45651&p=279293#p279293
I'm using FWH 2023.06 and xHarbour.

Where can I find the HttpPost function?

Can I use Curl with these versions and if so, what do I need?

Thanks,
Randal]]>

I'm using FWH 2023.06 and xHarbour.

Where can I find the HttpPost function?

Can I use Curl with these versions and if so, what do I need?

Thanks,
Randal]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: oAuth2 :: Reply by Antonio Linares]]> 2025-05-01T15:10:17-06:00 2025-05-01T15:10:17-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45651&p=279295#p279295
In FWH 25.01 there is a new Class TOAuth and a Class TGmail that inherits from TOAuth, both developed by Lailton and a samples\gmail\testgmail.prg example]]>

In FWH 25.01 there is a new Class TOAuth and a Class TGmail that inherits from TOAuth, both developed by Lailton and a samples\gmail\testgmail.prg example]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: oAuth2 :: Reply by jose_murugosa]]> 2025-05-09T05:31:16-06:00 2025-05-09T05:31:16-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45651&p=279385#p279385 El ejemplo al que haces referencia menciona un archivo readme.rd :
"// USE Your ID and Secret Key. check README.md"
Este archivo no está en la carpeta gmail.

Quisiera saber como obtengo mi ID y Clave Secreta que se menciona, o a que refiere.

Muchas Gracias.]]>
El ejemplo al que haces referencia menciona un archivo readme.rd :
"// USE Your ID and Secret Key. check README.md"
Este archivo no está en la carpeta gmail.

Quisiera saber como obtengo mi ID y Clave Secreta que se menciona, o a que refiere.

Muchas Gracias.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: oAuth2 :: Reply by Antonio Linares]]> 2025-05-09T05:42:29-06:00 2025-05-09T05:42:29-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45651&p=279387#p279387
Le he enviado un mensaje a Lailton para que nos ayude :)

Ya que él es el autor :wink:]]>

Le he enviado un mensaje a Lailton para que nos ayude :)

Ya que él es el autor :wink:]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: oAuth2 :: Reply by cnavarro]]> 2025-05-09T06:17:27-06:00 2025-05-09T06:17:27-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45651&p=279389#p279389
https://cloud.google.com/gcp
Si no te funciona el anterior enlace, busca Console Google Cloud
En Google Cloud Console, el ID de clave y la clave secreta (o clave API) se utilizan para autenticar las solicitudes a las API de Google. El ID de clave es un identificador único de la clave, mientras que la clave secreta es el secreto que se utiliza para generar tokens de autorización.
Cómo encontrar o crear claves de API (ID y clave secreta):
En la Consola de Google Cloud: Ve a la sección "APIs & Services" y luego a "Credentials".
Crea una clave API: Selecciona "Create Credentials" y luego "API Key".
Acepta la clave API: La clave API recién creada se mostrará en la consola.
ID de cliente de OAuth 2.0: Si necesitas un ID de cliente y un secreto de cliente para OAuth, selecciona "OAuth client ID" en lugar de "API Key".
Cuentas de servicio: Para cuentas de servicio, puedes generar una clave en formato JSON que contiene el ID de cliente y la clave secreta.
Dónde encontrar la clave secreta:
Después de crear una clave API: La clave API se mostrará en el diálogo de creación.
Para claves de cuentas de servicio: Se te proporcionará la clave secreta en el archivo JSON de la clave.
Para OAuth 2.0: El ID de cliente y el secreto de cliente se mostrarán en la consola después de la creación.
]]>
https://cloud.google.com/gcp
Si no te funciona el anterior enlace, busca Console Google Cloud
En Google Cloud Console, el ID de clave y la clave secreta (o clave API) se utilizan para autenticar las solicitudes a las API de Google. El ID de clave es un identificador único de la clave, mientras que la clave secreta es el secreto que se utiliza para generar tokens de autorización.
Cómo encontrar o crear claves de API (ID y clave secreta):
En la Consola de Google Cloud: Ve a la sección "APIs & Services" y luego a "Credentials".
Crea una clave API: Selecciona "Create Credentials" y luego "API Key".
Acepta la clave API: La clave API recién creada se mostrará en la consola.
ID de cliente de OAuth 2.0: Si necesitas un ID de cliente y un secreto de cliente para OAuth, selecciona "OAuth client ID" en lugar de "API Key".
Cuentas de servicio: Para cuentas de servicio, puedes generar una clave en formato JSON que contiene el ID de cliente y la clave secreta.
Dónde encontrar la clave secreta:
Después de crear una clave API: La clave API se mostrará en el diálogo de creación.
Para claves de cuentas de servicio: Se te proporcionará la clave secreta en el archivo JSON de la clave.
Para OAuth 2.0: El ID de cliente y el secreto de cliente se mostrarán en la consola después de la creación.
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: oAuth2 :: Reply by Lailton]]> 2025-05-09T09:07:46-06:00 2025-05-09T09:07:46-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45651&p=279399#p279399

### How to Create Client ID and Client Secret

1. Open the link: https://console.cloud.google.com/apis/credentials
Log in if you are not already connected.

2. Click on **+ Create Credentials** → **OAuth Client ID**

3. Select **Application Type**: Web Application

4. Enter a **name** (e.g., Company or Software)

5. In **Authorized redirect URIs**, add: `http://localhost:2025`

6. Click **Create**

Once created, the **Client ID** and **Client Secret** will be displayed.

### OAuth Client Created
**Client ID**

Code: Select all | Expand

xxxx-ncpllhkbr7hu8e78fn6lcctvsepsi142.apps.googleusercontent.com
**Client Secret**

Code: Select all | Expand

xxxx-JEhuFwW6AnGHjfShV-buEkYrirvD
Save these credentials securely.

It will be used on your PRG

Code: Select all | Expand

	oGmail:setConfig( {;
		"client_id" => "xxxx-ncpllhkbr7hu8e78fn6lcctvsepsi142.apps.googleusercontent.com",;
		"client_secret" => "xxxx-JEhuFwW6AnGHjfShV-buEkYrirvD",;
		"redirect_uri" => "http://localhost:2025/";
	} )

### Data Access Configuration

1. Go to: https://console.cloud.google.com/auth/scopes

2. Click on **Add Scope**, then select the field **Manually add scopes**

3. Enter the following scopes:

Code: Select all | Expand

openid
https://www.googleapis.com/auth/userinfo.profile
https://www.googleapis.com/auth/userinfo.email
https://www.googleapis.com/auth/gmail.send
4. Click **Add to Table**, then click **Update**

5. Scroll to the bottom of the page and click **Save**


### Verification Process

To remove the **"Unverified App"** warning, fill in all required information and submit your app for verification.

Submit your app for verification here:
https://console.cloud.google.com/auth/verification

That's it! You are ready to continue.

### for x64 copy the Dlls to your exe folder:

Code: Select all | Expand

freeimage64.dll
libcurl.dll
libssl-3-x64.dll
zlib1.dll
Saludos]]>


### How to Create Client ID and Client Secret

1. Open the link: https://console.cloud.google.com/apis/credentials
Log in if you are not already connected.

2. Click on **+ Create Credentials** → **OAuth Client ID**

3. Select **Application Type**: Web Application

4. Enter a **name** (e.g., Company or Software)

5. In **Authorized redirect URIs**, add: `http://localhost:2025`

6. Click **Create**

Once created, the **Client ID** and **Client Secret** will be displayed.

### OAuth Client Created
**Client ID**

Code: Select all | Expand

xxxx-ncpllhkbr7hu8e78fn6lcctvsepsi142.apps.googleusercontent.com
**Client Secret**

Code: Select all | Expand

xxxx-JEhuFwW6AnGHjfShV-buEkYrirvD
Save these credentials securely.

It will be used on your PRG

Code: Select all | Expand

	oGmail:setConfig( {;
		"client_id" => "xxxx-ncpllhkbr7hu8e78fn6lcctvsepsi142.apps.googleusercontent.com",;
		"client_secret" => "xxxx-JEhuFwW6AnGHjfShV-buEkYrirvD",;
		"redirect_uri" => "http://localhost:2025/";
	} )

### Data Access Configuration

1. Go to: https://console.cloud.google.com/auth/scopes

2. Click on **Add Scope**, then select the field **Manually add scopes**

3. Enter the following scopes:

Code: Select all | Expand

openid
https://www.googleapis.com/auth/userinfo.profile
https://www.googleapis.com/auth/userinfo.email
https://www.googleapis.com/auth/gmail.send
4. Click **Add to Table**, then click **Update**

5. Scroll to the bottom of the page and click **Save**


### Verification Process

To remove the **"Unverified App"** warning, fill in all required information and submit your app for verification.

Submit your app for verification here:
https://console.cloud.google.com/auth/verification

That's it! You are ready to continue.

### for x64 copy the Dlls to your exe folder:

Code: Select all | Expand

freeimage64.dll
libcurl.dll
libssl-3-x64.dll
zlib1.dll
Saludos]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: oAuth2 :: Reply by Otto]]> 2025-05-09T10:54:11-06:00 2025-05-09T10:54:11-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45651&p=279400#p279400 with the new TGmail class in FWH 25.01, there's now a native way to use Gmail via OAuth2 directly from Harbour – thanks to Lailton for implementing it.

However, I wonder: What practical advantage does this solution offer compared to a simple PowerShell approach that is called via ShellExecute() from the PRG?

In my case, I use PowerShell for sending Gmail via OAuth2 – the entire process is documented in a guide that I’m linking here:

https://winhotel-sandbox.com/docs/gmail ... rshell.pdf

The system runs stably, is easy to maintain, and doesn’t require any MIME or HTTP logic in the PRG. PowerShell is available on every current Windows system, and there’s a wealth of help and examples online. Additionally, the script can be generated, executed, and then deleted at runtime if needed.

I’m aware that we work within a relatively small developer community. That makes it all the more important to use our resources wisely and not reinvent every solution in PRG – especially when something like PowerShell already offers a robust and low-maintenance alternative using built-in system tools.

Another practical advantage: If you convert the script into a .exe using ps2exe, you don't even need to change the execution policy – it runs like a normal Windows program, without the user even realizing that PowerShell is running in the background.

I'm interested in your assessment: What, in your view, speaks in favor of TGmail?

Best regards,
Otto

PowerShell -ExecutionPolicy Bypass -File .\send-gmail-full.ps1

Code: Select all | Expand

 # =============================================
# PowerShell All-in-One: Gmail API E-Mailversand
# =============================================

# === Konfiguration: Zugangsdaten deiner Google API ===
$client_id     = "DEINE_CLIENT_ID"
$client_secret = "DEIN_CLIENT_SECRET"
$redirect_uri  = "http://localhost"  # Muss mit deiner OAuth2-App übereinstimmen
$tokenFile     = "token.json"

# === Deine E-Mail-Daten ===
$to      = "empfaenger@example.com"
$subject = "Testmail über Gmail API"
$body    = "Hallo! Diese Nachricht wurde mit PowerShell und der Gmail API gesendet."

# === Hilfsfunktionen ===
function Load-Token {
    if (Test-Path $tokenFile) {
        return Get-Content $tokenFile | ConvertFrom-Json
    }
    return $null
}
function Save-Token($data) {
    $data | ConvertTo-Json | Set-Content -Encoding UTF8 $tokenFile
}
function Get-AccessToken {
    $tokenData = Load-Token
    if (-not $tokenData -or -not $tokenData.refresh_token) {
        Write-Host "🔐 Kein Token gefunden. Starte erstmalige Autorisierung..."
        $scope = "https://www.googleapis.com/auth/gmail.send"
        $auth_url = "https://accounts.google.com/o/oauth2/v2/auth?" +
                    "client_id=$client_id&redirect_uri=$redirect_uri&response_type=code" +
                    "&scope=$scope&access_type=offline&prompt=consent"
        Start-Process $auth_url
        $code = Read-Host "`n❓ Bitte den Autorisierungscode von Google eingeben"
        $response = Invoke-RestMethod `
            -Uri "https://oauth2.googleapis.com/token" `
            -Method POST `
            -Body @{
                code          = $code
                client_id     = $client_id
                client_secret = $client_secret
                redirect_uri  = $redirect_uri
                grant_type    = "authorization_code"
            } `
            -ContentType "application/x-www-form-urlencoded"
        if ($response.access_token) {
            $tokenData = @{
                access_token  = $response.access_token
                refresh_token = $response.refresh_token
                expires_in    = $response.expires_in
                obtained_at   = (Get-Date).ToString("s")
            }
            Save-Token $tokenData
            Write-Host "✅ Erstes Login erfolgreich. Token gespeichert."
        } else {
            Write-Host "⛔ Fehler beim Abrufen des Tokens."
            exit
        }
    }
    $refresh_token = $tokenData.refresh_token
    $response = Invoke-RestMethod `
        -Uri "https://oauth2.googleapis.com/token" `
        -Method POST `
        -Body @{
            client_id     = $client_id
            client_secret = $client_secret
            refresh_token = $refresh_token
            grant_type    = "refresh_token"
        } `
        -ContentType "application/x-www-form-urlencoded"
    if ($response.access_token) {
        $tokenData.access_token = $response.access_token
        $tokenData.obtained_at  = (Get-Date).ToString("s")
        Save-Token $tokenData
        return $response.access_token
    } else {
        Write-Host "⛔ Fehler beim Token-Refresh."
        exit
    }
}
function Send-GmailMail($access_token, $to, $subject, $body) {
    $msg = "From: me`r`nTo: $to`r`nSubject: $subject`r`nContent-Type: text/plain; charset=UTF-8`r`n`r`n$body"
    $bytes  = [System.Text.Encoding]::UTF8.GetBytes($msg)
    $base64 = [System.Convert]::ToBase64String($bytes) `
              -replace '\+', '-' `
              -replace '/', '_' `
              -replace '='
    $json = @{ raw = $base64 } | ConvertTo-Json -Compress
    $response = Invoke-RestMethod `
        -Uri "https://gmail.googleapis.com/gmail/v1/users/me/messages/send" `
        -Method POST `
        -Headers @{ Authorization = "Bearer $access_token" } `
        -ContentType "application/json" `
        -Body $json
    Write-Host "📤 E-Mail wurde gesendet!"
}

# === Hauptablauf ===
$access_token = Get-AccessToken
Send-GmailMail -access_token $access_token -to $to -subject $subject -body $body


]]>
with the new TGmail class in FWH 25.01, there's now a native way to use Gmail via OAuth2 directly from Harbour – thanks to Lailton for implementing it.

However, I wonder: What practical advantage does this solution offer compared to a simple PowerShell approach that is called via ShellExecute() from the PRG?

In my case, I use PowerShell for sending Gmail via OAuth2 – the entire process is documented in a guide that I’m linking here:

https://winhotel-sandbox.com/docs/gmail ... rshell.pdf

The system runs stably, is easy to maintain, and doesn’t require any MIME or HTTP logic in the PRG. PowerShell is available on every current Windows system, and there’s a wealth of help and examples online. Additionally, the script can be generated, executed, and then deleted at runtime if needed.

I’m aware that we work within a relatively small developer community. That makes it all the more important to use our resources wisely and not reinvent every solution in PRG – especially when something like PowerShell already offers a robust and low-maintenance alternative using built-in system tools.

Another practical advantage: If you convert the script into a .exe using ps2exe, you don't even need to change the execution policy – it runs like a normal Windows program, without the user even realizing that PowerShell is running in the background.

I'm interested in your assessment: What, in your view, speaks in favor of TGmail?

Best regards,
Otto

PowerShell -ExecutionPolicy Bypass -File .\send-gmail-full.ps1

Code: Select all | Expand

 # =============================================
# PowerShell All-in-One: Gmail API E-Mailversand
# =============================================

# === Konfiguration: Zugangsdaten deiner Google API ===
$client_id     = "DEINE_CLIENT_ID"
$client_secret = "DEIN_CLIENT_SECRET"
$redirect_uri  = "http://localhost"  # Muss mit deiner OAuth2-App übereinstimmen
$tokenFile     = "token.json"

# === Deine E-Mail-Daten ===
$to      = "empfaenger@example.com"
$subject = "Testmail über Gmail API"
$body    = "Hallo! Diese Nachricht wurde mit PowerShell und der Gmail API gesendet."

# === Hilfsfunktionen ===
function Load-Token {
    if (Test-Path $tokenFile) {
        return Get-Content $tokenFile | ConvertFrom-Json
    }
    return $null
}
function Save-Token($data) {
    $data | ConvertTo-Json | Set-Content -Encoding UTF8 $tokenFile
}
function Get-AccessToken {
    $tokenData = Load-Token
    if (-not $tokenData -or -not $tokenData.refresh_token) {
        Write-Host "🔐 Kein Token gefunden. Starte erstmalige Autorisierung..."
        $scope = "https://www.googleapis.com/auth/gmail.send"
        $auth_url = "https://accounts.google.com/o/oauth2/v2/auth?" +
                    "client_id=$client_id&redirect_uri=$redirect_uri&response_type=code" +
                    "&scope=$scope&access_type=offline&prompt=consent"
        Start-Process $auth_url
        $code = Read-Host "`n❓ Bitte den Autorisierungscode von Google eingeben"
        $response = Invoke-RestMethod `
            -Uri "https://oauth2.googleapis.com/token" `
            -Method POST `
            -Body @{
                code          = $code
                client_id     = $client_id
                client_secret = $client_secret
                redirect_uri  = $redirect_uri
                grant_type    = "authorization_code"
            } `
            -ContentType "application/x-www-form-urlencoded"
        if ($response.access_token) {
            $tokenData = @{
                access_token  = $response.access_token
                refresh_token = $response.refresh_token
                expires_in    = $response.expires_in
                obtained_at   = (Get-Date).ToString("s")
            }
            Save-Token $tokenData
            Write-Host "✅ Erstes Login erfolgreich. Token gespeichert."
        } else {
            Write-Host "⛔ Fehler beim Abrufen des Tokens."
            exit
        }
    }
    $refresh_token = $tokenData.refresh_token
    $response = Invoke-RestMethod `
        -Uri "https://oauth2.googleapis.com/token" `
        -Method POST `
        -Body @{
            client_id     = $client_id
            client_secret = $client_secret
            refresh_token = $refresh_token
            grant_type    = "refresh_token"
        } `
        -ContentType "application/x-www-form-urlencoded"
    if ($response.access_token) {
        $tokenData.access_token = $response.access_token
        $tokenData.obtained_at  = (Get-Date).ToString("s")
        Save-Token $tokenData
        return $response.access_token
    } else {
        Write-Host "⛔ Fehler beim Token-Refresh."
        exit
    }
}
function Send-GmailMail($access_token, $to, $subject, $body) {
    $msg = "From: me`r`nTo: $to`r`nSubject: $subject`r`nContent-Type: text/plain; charset=UTF-8`r`n`r`n$body"
    $bytes  = [System.Text.Encoding]::UTF8.GetBytes($msg)
    $base64 = [System.Convert]::ToBase64String($bytes) `
              -replace '\+', '-' `
              -replace '/', '_' `
              -replace '='
    $json = @{ raw = $base64 } | ConvertTo-Json -Compress
    $response = Invoke-RestMethod `
        -Uri "https://gmail.googleapis.com/gmail/v1/users/me/messages/send" `
        -Method POST `
        -Headers @{ Authorization = "Bearer $access_token" } `
        -ContentType "application/json" `
        -Body $json
    Write-Host "📤 E-Mail wurde gesendet!"
}

# === Hauptablauf ===
$access_token = Get-AccessToken
Send-GmailMail -access_token $access_token -to $to -subject $subject -body $body


]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: oAuth2 :: Reply by Lailton]]> 2025-05-09T12:36:49-06:00 2025-05-09T12:36:49-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45651&p=279403#p279403
TGmail is a built-in class provided by FWH, which allows you to handle everything within your program and manage the arguments in a “safe” way.
When you expose an external program to perform a task, it’s generally fine if it’s running on your own server, where only you have access.
However, if you’re exposing it on a user’s PC, some data could be exposed, potentially creating vulnerabilities.

That said, both solutions accomplish the same goal. It’s common to find different ways to solve the same problem, but it’s important to evaluate and analyze which approach works best for you.

I don’t see any problem with using either your method or mine—both seem solid. 8)]]>

TGmail is a built-in class provided by FWH, which allows you to handle everything within your program and manage the arguments in a “safe” way.
When you expose an external program to perform a task, it’s generally fine if it’s running on your own server, where only you have access.
However, if you’re exposing it on a user’s PC, some data could be exposed, potentially creating vulnerabilities.

That said, both solutions accomplish the same goal. It’s common to find different ways to solve the same problem, but it’s important to evaluate and analyze which approach works best for you.

I don’t see any problem with using either your method or mine—both seem solid. 8)]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: oAuth2 :: Reply by Otto]]> 2025-05-09T13:37:53-06:00 2025-05-09T13:37:53-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45651&p=279404#p279404 Thank you for your input. I suggested the PowerShell-based approach not because TGmail doesn’t work – but because we, as Harbour developers, will inevitably have to consider PowerShell (and other external tools) more seriously in the future.

The reason is simple: Harbour developer resources are limited, and maintaining internal solutions for everything (like MIME encoding, token handling, API changes) is not scalable. PowerShell, on the other hand, is natively available on all modern Windows systems, well-documented, actively maintained by Microsoft, and easily automatable.

When wrapped securely – with encrypted configs and compiled .exe wrappers – PowerShell becomes a maintainable and robust companion to Harbour. It allows us to focus Harbour on what it does best: core logic and UI, while offloading complex tasks to specialized, scriptable tools.

This isn’t a workaround – it’s a strategic design decision based on sustainability and maintainability. and just because something is embedded in a .prg doesn’t mean it's inherently safer. In fact, access tokens or secrets stored inside a Harbour .exe can be extracted just as easily.

Best regards,
Otto]]>
Thank you for your input. I suggested the PowerShell-based approach not because TGmail doesn’t work – but because we, as Harbour developers, will inevitably have to consider PowerShell (and other external tools) more seriously in the future.

The reason is simple: Harbour developer resources are limited, and maintaining internal solutions for everything (like MIME encoding, token handling, API changes) is not scalable. PowerShell, on the other hand, is natively available on all modern Windows systems, well-documented, actively maintained by Microsoft, and easily automatable.

When wrapped securely – with encrypted configs and compiled .exe wrappers – PowerShell becomes a maintainable and robust companion to Harbour. It allows us to focus Harbour on what it does best: core logic and UI, while offloading complex tasks to specialized, scriptable tools.

This isn’t a workaround – it’s a strategic design decision based on sustainability and maintainability. and just because something is embedded in a .prg doesn’t mean it's inherently safer. In fact, access tokens or secrets stored inside a Harbour .exe can be extracted just as easily.

Best regards,
Otto]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: oAuth2 :: Reply by Lailton]]> 2025-05-09T20:48:17-06:00 2025-05-09T20:48:17-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45651&p=279407#p279407
Like I said, both solutions looks fine for me :)]]>

Like I said, both solutions looks fine for me :)]]>
<![CDATA[FiveWin for Harbour/xHarbour :: WebView and HTML file :: Author Natter]]> 2025-05-09T23:04:28-06:00 2025-05-09T23:04:28-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45663&p=279408#p279408
There is a file tb.html (https://cloud.mail.ru/public/56wz/UMMJiRWaR)
Try to open it in webview2

Code: Select all | Expand

#include "FiveWin.ch"

function Main()
local oWebView := TWebView():New()

   oWebView:SetHTML(memoread("tb.html"))
   oWebView:SetTitle( "Microsoft Edge WebView working from FWH" )
   oWebView:SetSize( 1200, 800 )
   oWebView:SetUserAgent( "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Mobile Safari/537.36" )
   sleep( 300 )
   oWebView:Run()
   oWebView:Destroy()

return nil
However, I get an empty window. Why?]]>

There is a file tb.html (https://cloud.mail.ru/public/56wz/UMMJiRWaR)
Try to open it in webview2

Code: Select all | Expand

#include "FiveWin.ch"

function Main()
local oWebView := TWebView():New()

   oWebView:SetHTML(memoread("tb.html"))
   oWebView:SetTitle( "Microsoft Edge WebView working from FWH" )
   oWebView:SetSize( 1200, 800 )
   oWebView:SetUserAgent( "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Mobile Safari/537.36" )
   sleep( 300 )
   oWebView:Run()
   oWebView:Destroy()

return nil
However, I get an empty window. Why?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: WebView and HTML file :: Reply by Natter]]> 2025-05-10T00:14:52-06:00 2025-05-10T00:14:52-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45663&p=279409#p279409 ]]> ]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: WebView and HTML file :: Reply by Antonio Linares]]> 2025-05-10T02:44:29-06:00 2025-05-10T02:44:29-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45663&p=279410#p279410 <![CDATA[FiveWin for Harbour/xHarbour :: Re: WebView and HTML file :: Reply by Natter]]> 2025-05-10T03:54:11-06:00 2025-05-10T03:54:11-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45663&p=279411#p279411 <![CDATA[FiveWin for Harbour/xHarbour :: Re: :MakeTotals() and picture :: Reply by cnavarro]]> 2025-04-15T22:56:25-06:00 2025-04-15T22:56:25-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45622&p=278996#p278996 <![CDATA[FiveWin for Harbour/xHarbour :: Re: :MakeTotals() and picture :: Reply by damianodec]]> 2025-05-12T03:41:35-06:00 2025-05-12T03:41:35-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45622&p=279418#p279418 I still have this problem.
the problem is only in first total.
Why?]]>
I still have this problem.
the problem is only in first total.
Why?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: :MakeTotals() and picture :: Reply by cnavarro]]> 2025-05-12T04:29:17-06:00 2025-05-12T04:29:17-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45622&p=279419#p279419 viewtopic.php?p=278990#p278990
Change characters of picture]]>
viewtopic.php?p=278990#p278990
Change characters of picture]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Fivedit - Download :: Reply by cnavarro]]> 2025-04-15T23:37:29-06:00 2025-04-15T23:37:29-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45615&p=278997#p278997 https://discord.gg/d2zyR8UY]]> https://discord.gg/d2zyR8UY]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Fivedit - Download :: Reply by cnavarro]]> 2025-04-22T03:47:57-06:00 2025-04-22T03:47:57-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45615&p=279091#p279091 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Fivedit - Download :: Reply by cnavarro]]> 2025-04-26T17:14:38-06:00 2025-04-26T17:14:38-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45615&p=279200#p279200 FIVEDIT 64 bits in Discord]]> FIVEDIT 64 bits in Discord]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Fivedit - Download :: Reply by Baxajaun]]> 2025-04-27T05:53:38-06:00 2025-04-27T05:53:38-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45615&p=279204#p279204
Regards,]]>

Regards,]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Fivedit - Download :: Reply by cnavarro]]> 2025-04-27T07:49:01-06:00 2025-04-27T07:49:01-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45615&p=279205#p279205 https://learn.microsoft.com/es-es/visua ... stribution]]> https://learn.microsoft.com/es-es/visua ... stribution]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Fivedit - Download :: Reply by cnavarro]]> 2025-05-12T09:14:43-06:00 2025-05-12T09:14:43-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45615&p=279437#p279437 Image

https://github.com/cristobalnavarro/Tes ... ssh2_2.gif

New version 32 bits
https://github.com/cristobalnavarro/Tes ... nstall.zip

Discord Server
https://discord.gg/vd4G2B3b]]>
Image

https://github.com/cristobalnavarro/Tes ... ssh2_2.gif

New version 32 bits
https://github.com/cristobalnavarro/Tes ... nstall.zip

Discord Server
https://discord.gg/vd4G2B3b]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Fivedit - Download :: Reply by cnavarro]]> 2025-05-12T10:43:25-06:00 2025-05-12T10:43:25-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45615&p=279444#p279444 https://youtu.be/vNHa7FW0588]]> https://youtu.be/vNHa7FW0588]]> <![CDATA[FiveWin for Harbour/xHarbour :: Font rotate problems :: Author Silvio.Falconi]]> 2025-05-13T03:54:46-06:00 2025-05-13T03:54:46-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45671&p=279471#p279471 please try this test

Image

Code: Select all | Expand

#include "FiveWin.ch"

Function test()
local oDLg
local ctest := " SILVIO "
local oFont

*oFont := TFont():New( "Verdana", 0, -14, , .T.) //90,180,270,900,2700
DEFINE FONT oFont NAME "Arial" SIZE 0, -25 NESCAPEMENT 900

   DEFINE DIALOG oDlg TITLE "Test font" SIZE 400,400 PIXEL TRUEPIXEL

   @ 10,10 say ctest SIZE 40,200 of oDlg PIXEL FONT oFont  BORDER

   ACTIVATE DIALOG oDlg
   

RETURN NIL
I tried also with oFont:rotate(number)]]>
please try this test

Image

Code: Select all | Expand

#include "FiveWin.ch"

Function test()
local oDLg
local ctest := " SILVIO "
local oFont

*oFont := TFont():New( "Verdana", 0, -14, , .T.) //90,180,270,900,2700
DEFINE FONT oFont NAME "Arial" SIZE 0, -25 NESCAPEMENT 900

   DEFINE DIALOG oDlg TITLE "Test font" SIZE 400,400 PIXEL TRUEPIXEL

   @ 10,10 say ctest SIZE 40,200 of oDlg PIXEL FONT oFont  BORDER

   ACTIVATE DIALOG oDlg
   

RETURN NIL
I tried also with oFont:rotate(number)]]>
<![CDATA[FiveWin for Harbour/xHarbour :: RichEdit5 and scrollers :: Author Natter]]> 2025-05-13T03:41:17-06:00 2025-05-13T03:41:17-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45670&p=279469#p279469 Is it possible to find out the current state of the scrollers?]]> Is it possible to find out the current state of the scrollers?]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: RichEdit5 and scrollers :: Reply by cnavarro]]> 2025-05-13T07:09:17-06:00 2025-05-13T07:09:17-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45670&p=279475#p279475

Code: Select all | Expand

?  oRtf:WinStyle( WS_VSCROLL )
?   oRtf:WinStyle( WS_HSCROLL )
]]>

Code: Select all | Expand

?  oRtf:WinStyle( WS_VSCROLL )
?   oRtf:WinStyle( WS_HSCROLL )
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: RichEdit5 and scrollers :: Reply by Natter]]> 2025-05-13T07:29:25-06:00 2025-05-13T07:29:25-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45670&p=279477#p279477 <![CDATA[FiveWin for Harbour/xHarbour :: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Author Antonio Linares]]> 2025-05-04T20:33:11-06:00 2025-05-04T20:33:11-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279315#p279315
May Mr. Rao rest in peace, leaving behind a legacy of love and compassion that will continue to inspire all of us who were fortunate enough to know him. He was a true example of fidelity and friendship, and his memory will remain in our hearts forever.

Rest in peace.]]>

May Mr. Rao rest in peace, leaving behind a legacy of love and compassion that will continue to inspire all of us who were fortunate enough to know him. He was a true example of fidelity and friendship, and his memory will remain in our hearts forever.

Rest in peace.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by hua]]> 2025-05-04T20:51:54-06:00 2025-05-04T20:51:54-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279316#p279316
This is a really shocking and sad news.
Condolence to his family
Will miss his participation in this forum]]>

This is a really shocking and sad news.
Condolence to his family
Will miss his participation in this forum]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by alerchster]]> 2025-05-04T21:12:30-06:00 2025-05-04T21:12:30-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279317#p279317 Condolence to his family.]]> Condolence to his family.]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by ertan]]> 2025-05-04T23:09:10-06:00 2025-05-04T23:09:10-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279318#p279318

Mr.Rao always in my memory,
Condolence to his family.]]>


Mr.Rao always in my memory,
Condolence to his family.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Carles]]> 2025-05-04T23:10:41-06:00 2025-05-04T23:10:41-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279319#p279319

One of the greats has left us

C.]]>


One of the greats has left us

C.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Maurizio]]> 2025-05-05T00:55:36-06:00 2025-05-05T00:55:36-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279320#p279320
It was an honor to have known and worked with him. His dedication and spirit will always be remembered with deep respect.

Maurizio]]>

It was an honor to have known and worked with him. His dedication and spirit will always be remembered with deep respect.

Maurizio]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Marc Venken]]> 2025-05-05T01:05:57-06:00 2025-05-05T01:05:57-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279321#p279321 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Horizon]]> 2025-05-05T01:08:13-06:00 2025-05-05T01:08:13-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279322#p279322 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Silvio.Falconi]]> 2025-05-05T01:10:42-06:00 2025-05-05T01:10:42-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279323#p279323 I hoped until the end that Nages could return among us,
his memory will always be alive in our souls!!]]>
I hoped until the end that Nages could return among us,
his memory will always be alive in our souls!!]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by MarcoBoschi]]> 2025-05-05T01:49:40-06:00 2025-05-05T01:49:40-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279324#p279324 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Enrico Maria Giordano]]> 2025-05-05T02:22:49-06:00 2025-05-05T02:22:49-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279325#p279325 ]]> ]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by D.Fernandez]]> 2025-05-05T03:39:30-06:00 2025-05-05T03:39:30-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279326#p279326 Always willing to help all of us. Rest in peace.
To family and friends, my deepest condolences.

Ruben Dario Fernandez]]>
Always willing to help all of us. Rest in peace.
To family and friends, my deepest condolences.

Ruben Dario Fernandez]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by paquitohm]]> 2025-05-05T03:43:56-06:00 2025-05-05T03:43:56-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279327#p279327 Sólo se nos adelantó. En la otra vida lo veremos.
D.E.P.]]>
Sólo se nos adelantó. En la otra vida lo veremos.
D.E.P.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by dutch]]> 2025-05-05T03:47:08-06:00 2025-05-05T03:47:08-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279328#p279328
I deeply regret and hope he will be in the heaven.

Rest In Peace,]]>

I deeply regret and hope he will be in the heaven.

Rest In Peace,]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by vilian]]> 2025-05-05T05:20:58-06:00 2025-05-05T05:20:58-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279329#p279329 Condolence to his family.]]> Condolence to his family.]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by cnavarro]]> 2025-05-05T05:34:30-06:00 2025-05-05T05:34:30-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279330#p279330 A great person, whom I have the honor of having met and shared his vast knowledge and simple vision of programming.
He leaves an irreplaceable void in our entire community.
His legacy will remain as an example and guide of a great teacher.
he sadness he leaves in my heart will be difficult to overcome.
Rest in peace.]]>
A great person, whom I have the honor of having met and shared his vast knowledge and simple vision of programming.
He leaves an irreplaceable void in our entire community.
His legacy will remain as an example and guide of a great teacher.
he sadness he leaves in my heart will be difficult to overcome.
Rest in peace.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by karinha]]> 2025-05-05T06:10:28-06:00 2025-05-05T06:10:28-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279332#p279332
I deeply regret and hope he will be in the heaven. A great loss for our community.

Rest In Peace,

Regards, saludos.]]>

I deeply regret and hope he will be in the heaven. A great loss for our community.

Rest In Peace,

Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by TomH]]> 2025-05-05T06:21:51-06:00 2025-05-05T06:21:51-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279333#p279333 Condolence to his family, May he rest in peace.]]> Condolence to his family, May he rest in peace.]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Giovany Vecchi]]> 2025-05-05T06:33:40-06:00 2025-05-05T06:33:40-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279334#p279334 Life teaches us the value of our journey. The satisfaction of being willing to help immortalizes our actions.]]> Life teaches us the value of our journey. The satisfaction of being willing to help immortalizes our actions.]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Baxajaun]]> 2025-05-05T06:42:58-06:00 2025-05-05T06:42:58-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279335#p279335 Rest in peace.
May the ground be light to you.
Descanse en paz.
Goian bego.]]>
Rest in peace.
May the ground be light to you.
Descanse en paz.
Goian bego.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by oliveiros junior]]> 2025-05-05T08:18:01-06:00 2025-05-05T08:18:01-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279337#p279337
Excellent teacher, always helping everyone with his knowledge and patience. My condolences to his family.

Rest in peace!

Oliveiros Junior]]>

Excellent teacher, always helping everyone with his knowledge and patience. My condolences to his family.

Rest in peace!

Oliveiros Junior]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by sysctrl2]]> 2025-05-05T09:44:42-06:00 2025-05-05T09:44:42-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279339#p279339 Mr. xBrowse
QEPD :(]]>
Mr. xBrowse
QEPD :(]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Ariel]]> 2025-05-05T10:14:06-06:00 2025-05-05T10:14:06-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279340#p279340 QPD, mis condolencias a su flia....]]> QPD, mis condolencias a su flia....]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Otto]]> 2025-05-05T10:33:37-06:00 2025-05-05T10:33:37-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279341#p279341
Image

We have not only lost an exceptionally pleasant person and a friend, but also a brilliant mind who played a key role in shaping our community.
Mr. Rao’s dedication, his clear thinking, and his tireless helpfulness have left a lasting mark on this forum. His absence will be deeply felt – in the code, in our exchanges, and in the spirit of our shared work.

As we mourn his loss, we also want to honor his legacy.
Now more than ever, it is up to all of us to carry on what he helped build. Let us keep his spirit alive – through mutual support, knowledge sharing, and the contributions of each individual, just as he always exemplified.

May his memory give us strength.
Rest in peace, Mr. Rao – we will continue. Your voice, your advice, and your quiet strength will be deeply missed. You remain in my heart, my friend.
A hug,
Otto

In remembrance, a video:
https://winhotel-sandbox.com/mrrao/mrrao_sillian.mp4

Image]]>

Image

We have not only lost an exceptionally pleasant person and a friend, but also a brilliant mind who played a key role in shaping our community.
Mr. Rao’s dedication, his clear thinking, and his tireless helpfulness have left a lasting mark on this forum. His absence will be deeply felt – in the code, in our exchanges, and in the spirit of our shared work.

As we mourn his loss, we also want to honor his legacy.
Now more than ever, it is up to all of us to carry on what he helped build. Let us keep his spirit alive – through mutual support, knowledge sharing, and the contributions of each individual, just as he always exemplified.

May his memory give us strength.
Rest in peace, Mr. Rao – we will continue. Your voice, your advice, and your quiet strength will be deeply missed. You remain in my heart, my friend.
A hug,
Otto

In remembrance, a video:
https://winhotel-sandbox.com/mrrao/mrrao_sillian.mp4

Image]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by karinha]]> 2025-05-05T10:46:35-06:00 2025-05-05T10:46:35-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279342#p279342
Regards, saludos.]]>

Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by cmsoft]]> 2025-05-05T12:40:50-06:00 2025-05-05T12:40:50-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279343#p279343 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by TimStone]]> 2025-05-05T14:31:01-06:00 2025-05-05T14:31:01-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279344#p279344
Although I share my condolences with his family, I also am saddened that Antonio has lost a close friend and collaborator.

May we all seek to be as generous in our serving others as Mr. Rao shared with us.

Tim.]]>

Although I share my condolences with his family, I also am saddened that Antonio has lost a close friend and collaborator.

May we all seek to be as generous in our serving others as Mr. Rao shared with us.

Tim.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Antonio Linares]]> 2025-05-05T14:38:29-06:00 2025-05-05T14:38:29-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279345#p279345
What do you think about it ? Would you be willing to help ?

I have asked his wife for her bank account number. I will post it here and you may feel free to help her. Remitly is the cheapest way to send her some money: https://www.remitly.com/

thank you]]>

What do you think about it ? Would you be willing to help ?

I have asked his wife for her bank account number. I will post it here and you may feel free to help her. Remitly is the cheapest way to send her some money: https://www.remitly.com/

thank you]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Willi Quintana]]> 2025-05-05T18:17:13-06:00 2025-05-05T18:17:13-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279347#p279347 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Cgallegoa]]> 2025-05-05T18:26:19-06:00 2025-05-05T18:26:19-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279348#p279348 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by richard-service]]> 2025-05-05T19:22:45-06:00 2025-05-05T19:22:45-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279350#p279350 My memory...

Mr. Rao
Rest in Peace]]>
My memory...

Mr. Rao
Rest in Peace]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Marcelo Roggeri]]> 2025-05-05T19:28:03-06:00 2025-05-05T19:28:03-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279351#p279351 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Antonio Linares]]> 2025-05-05T23:53:49-06:00 2025-05-05T23:53:49-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279353#p279353
K. Girija kumari. A/C no16281570001297. Customer id21083781]]>

K. Girija kumari. A/C no16281570001297. Customer id21083781]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by dutch]]> 2025-05-06T00:36:03-06:00 2025-05-06T00:36:03-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279354#p279354
Has she got Paypal account?
Antonio Linares wrote: Tue May 06, 2025 5:53 am Mr. Rao's wife bank account:

K. Girija kumari. A/C no16281570001297. Customer id21083781
]]>

Has she got Paypal account?
Antonio Linares wrote: Tue May 06, 2025 5:53 am Mr. Rao's wife bank account:

K. Girija kumari. A/C no16281570001297. Customer id21083781
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by driessen]]> 2025-05-06T01:23:38-06:00 2025-05-06T01:23:38-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279355#p279355 I am so greateful to him for all the help he offered to me and to many among us.
May he rest in peace.
My sincere condolances to his family and his friends.
He will be missed by many.
I am really shocked about this sad news.]]>
I am so greateful to him for all the help he offered to me and to many among us.
May he rest in peace.
My sincere condolances to his family and his friends.
He will be missed by many.
I am really shocked about this sad news.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Antonio Linares]]> 2025-05-06T01:47:41-06:00 2025-05-06T01:47:41-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279356#p279356
dutch wrote: Tue May 06, 2025 6:36 am Dear Antonio,

Has she got Paypal account?
Antonio Linares wrote: Tue May 06, 2025 5:53 am Mr. Rao's wife bank account:

K. Girija kumari. A/C no16281570001297. Customer id21083781
You may whatsapp her to +91 90100 44926]]>
dutch wrote: Tue May 06, 2025 6:36 am Dear Antonio,

Has she got Paypal account?
Antonio Linares wrote: Tue May 06, 2025 5:53 am Mr. Rao's wife bank account:

K. Girija kumari. A/C no16281570001297. Customer id21083781
You may whatsapp her to +91 90100 44926]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by acuellar]]> 2025-05-06T03:52:01-06:00 2025-05-06T03:52:01-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279359#p279359

We will miss him so much. A truly excellent contributor.

Rest in Peace, Mr. Rao.]]>


We will miss him so much. A truly excellent contributor.

Rest in Peace, Mr. Rao.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by carlos vargas]]> 2025-05-06T07:44:18-06:00 2025-05-06T07:44:18-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279363#p279363 Se nos va un grande.]]> Se nos va un grande.]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by wartiaga]]> 2025-05-06T13:22:15-06:00 2025-05-06T13:22:15-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279364#p279364 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by toninhofwi]]> 2025-05-06T16:16:07-06:00 2025-05-06T16:16:07-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279366#p279366 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by FiveWiDi]]> 2025-05-07T18:01:24-06:00 2025-05-07T18:01:24-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279370#p279370
Antonio Linares wrote: Tue May 06, 2025 5:53 am Mr. Rao's wife bank account:

K. Girija kumari. A/C no16281570001297. Customer id21083781
Alguién que pueda orientarme? Estos datos son de un banco? De cual? En India?

Lo voy a intentar desde Remitly.com pero no se por donde tirar.

Gracias,]]>
Antonio Linares wrote: Tue May 06, 2025 5:53 am Mr. Rao's wife bank account:

K. Girija kumari. A/C no16281570001297. Customer id21083781
Alguién que pueda orientarme? Estos datos son de un banco? De cual? En India?

Lo voy a intentar desde Remitly.com pero no se por donde tirar.

Gracias,]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by alex2002]]> 2025-05-08T13:50:58-06:00 2025-05-08T13:50:58-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279372#p279372
Que o Espírito Santo possa confortar a todos.

Sempre via os seus posts, eram muito bons.]]>

Que o Espírito Santo possa confortar a todos.

Sempre via os seus posts, eram muito bons.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Rick Lipkin]]> 2025-05-09T06:44:36-06:00 2025-05-09T06:44:36-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279392#p279392
Rest in Peace Rao ..

Rick Lipkin]]>

Rest in Peace Rao ..

Rick Lipkin]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Antonio Linares]]> 2025-05-09T06:46:25-06:00 2025-05-09T06:46:25-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279393#p279393
Lung cancer in terminal phase. He was a smoker all his life, never quited :(]]>

Lung cancer in terminal phase. He was a smoker all his life, never quited :(]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by damianodec]]> 2025-05-09T06:57:38-06:00 2025-05-09T06:57:38-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279394#p279394 Thanks for everything Mr. Rao

Damiano.]]>
Thanks for everything Mr. Rao

Damiano.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by MGA]]> 2025-05-09T07:24:04-06:00 2025-05-09T07:24:04-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279395#p279395 Condolence to his family. :cry:]]> Condolence to his family. :cry:]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by Maggiro]]> 2025-05-12T20:09:29-06:00 2025-05-12T20:09:29-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279461#p279461 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by shrifw]]> 2025-05-12T23:54:44-06:00 2025-05-12T23:54:44-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279464#p279464
RIP
Om Shanti.

Thanks
Shridhar]]>

RIP
Om Shanti.

Thanks
Shridhar]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Mr. Rao passed away @8.30 pm on 4/May/2025 :: Reply by mauri.menabue]]> 2025-05-14T00:30:57-06:00 2025-05-14T00:30:57-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45656&p=279501#p279501 Now rest in peace thanks again!]]> Now rest in peace thanks again!]]> <![CDATA[FiveWin for Harbour/xHarbour :: new mingw 15.1 :: Author JoséQuintas]]> 2025-05-01T06:23:51-06:00 2025-05-01T06:23:51-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45650&p=279290#p279290
Since first time, I use harbour build in any mingw version.
From 4.7 to newer 15.1
It is needed to be mingw DWARF, and this is the default on winlibs.com

I am working with mingw 15.1 now, and using same fivewin than before.
It is working with NO problem.]]>

Since first time, I use harbour build in any mingw version.
From 4.7 to newer 15.1
It is needed to be mingw DWARF, and this is the default on winlibs.com

I am working with mingw 15.1 now, and using same fivewin than before.
It is working with NO problem.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: new mingw 15.1 :: Reply by karinha]]> 2025-05-01T10:39:04-06:00 2025-05-01T10:39:04-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45650&p=279291#p279291 .bat / lnk, .bat / .mak, etc?

Onde descargar o MINGW? Url?

Mister Quintas, if it's not too much to ask, could you teach us how to compile FIVEWIN with MINGW?
.bat / lnk, .bat / .mak, etc?

Where can I download MINGW? Url?

Gracias, tks.

Regards, saludos.]]>
.bat / lnk, .bat / .mak, etc?

Onde descargar o MINGW? Url?

Mister Quintas, if it's not too much to ask, could you teach us how to compile FIVEWIN with MINGW?
.bat / lnk, .bat / .mak, etc?

Where can I download MINGW? Url?

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: new mingw 15.1 :: Reply by JoséQuintas]]> 2025-05-13T14:46:21-06:00 2025-05-13T14:46:21-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45650&p=279495#p279495

Code: Select all | Expand

incpaths=include

libpaths=lib
{mingw}libs=fivehg
{mingw}libs=fivehgc

{mingw}libs=user32 winspool kernel32 comctl32 comdlg32 gdi32 gdiplus ole32
{mingw}libs=oleaut32 psapi oledlg mfcuia32 msimg32 win32k stdc++ version
{mingw}libs=uuid winmm vfw32 wsock32
{mingw}libs=uxtheme

libs=hbwin.hbc
libs=xhb.hbc
libs=hbct.hbc
libs=hbmzip.hbc
libs=hbziparc.hbc
After that, goto samples folder:

Code: Select all | Expand

hbmk2 samplename.prg ..\fivewin.hbc
If your harbour do not have the hbc list, include libpaths= and libs= for all lib paths and lib names.

if you are using hbmk2 on XHARBOUR, add -xhb, do do not use hbmk2 internal harbour, and to use xharbour standard libraries.]]>

Code: Select all | Expand

incpaths=include

libpaths=lib
{mingw}libs=fivehg
{mingw}libs=fivehgc

{mingw}libs=user32 winspool kernel32 comctl32 comdlg32 gdi32 gdiplus ole32
{mingw}libs=oleaut32 psapi oledlg mfcuia32 msimg32 win32k stdc++ version
{mingw}libs=uuid winmm vfw32 wsock32
{mingw}libs=uxtheme

libs=hbwin.hbc
libs=xhb.hbc
libs=hbct.hbc
libs=hbmzip.hbc
libs=hbziparc.hbc
After that, goto samples folder:

Code: Select all | Expand

hbmk2 samplename.prg ..\fivewin.hbc
If your harbour do not have the hbc list, include libpaths= and libs= for all lib paths and lib names.

if you are using hbmk2 on XHARBOUR, add -xhb, do do not use hbmk2 internal harbour, and to use xharbour standard libraries.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: new mingw 15.1 :: Reply by karinha]]> 2025-05-14T07:02:58-06:00 2025-05-14T07:02:58-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45650&p=279513#p279513
Mister Quintas, I'm testing with HARBOUR for now. Help here in this topic please.

viewtopic.php?p=279488#p279488

Gracias, tks.

Regards, saludos.]]>

Mister Quintas, I'm testing with HARBOUR for now. Help here in this topic please.

viewtopic.php?p=279488#p279488

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: AEVAL multidimentional array :: Author Marc Vanzegbroeck]]> 2025-05-13T02:54:48-06:00 2025-05-13T02:54:48-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45669&p=279466#p279466
Is is possible to aeval a multidimentional array, or do I have to make a combination of a loop and aeval.
I want to execute a function on all elements of a multidimentional array.

Thank you]]>

Is is possible to aeval a multidimentional array, or do I have to make a combination of a loop and aeval.
I want to execute a function on all elements of a multidimentional array.

Thank you]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: AEVAL multidimentional array :: Reply by Antonio Linares]]> 2025-05-13T03:06:41-06:00 2025-05-13T03:06:41-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45669&p=279467#p279467
How is your array ?

What do you need ?]]>

How is your array ?

What do you need ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: AEVAL multidimentional array :: Reply by Marc Vanzegbroeck]]> 2025-05-13T03:22:11-06:00 2025-05-13T03:22:11-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45669&p=279468#p279468
Here is an example of the array. The normal one is much bigger

Code: Select all | Expand

"E1345";"DI";"DIGACQA";"DI";"I_E1345"
"F1305";"GO";"DEVCTLA";"DI";"I_F1305GO
"F1305";"GT";"DEVCTLA";"DI";"I_F1305GT"
I want to perform a function on each element.
For example remove all " at the beginning and end of the element.]]>

Here is an example of the array. The normal one is much bigger

Code: Select all | Expand

"E1345";"DI";"DIGACQA";"DI";"I_E1345"
"F1305";"GO";"DEVCTLA";"DI";"I_F1305GO
"F1305";"GT";"DEVCTLA";"DI";"I_F1305GT"
I want to perform a function on each element.
For example remove all " at the beginning and end of the element.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: AEVAL multidimentional array :: Reply by Antonio Linares]]> 2025-05-13T03:50:45-06:00 2025-05-13T03:50:45-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45669&p=279470#p279470
You can also manage each line as an array:
AEval( aLines, { | cLine, n | aLines[ n ] := hb_ATokens( cLine, ";" ) } )]]>

You can also manage each line as an array:
AEval( aLines, { | cLine, n | aLines[ n ] := hb_ATokens( cLine, ";" ) } )]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: AEVAL multidimentional array :: Reply by Marc Vanzegbroeck]]> 2025-05-13T04:08:34-06:00 2025-05-13T04:08:34-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45669&p=279472#p279472
Sorry for the confusion,but the ';' between each element, is not a real ';' , but a separation between element

So the array is in fact

Code: Select all | Expand

{ { ' "E1345" '  , ' "DI" ' , ' "DIGACQA" ' , ' "DI" ' ,' "I_E1345" ' } , {' "F1305" ' , ' "GO" ' ,' "DEVCTLA" ' ,' "DI" ' ,' "I_F1305GO" '} , {' "F1305" ' ,' "GT" ' ,' "DEVCTLA" ' ,' "DI" ' ,' "I_F1305GT" '} }
]]>

Sorry for the confusion,but the ';' between each element, is not a real ';' , but a separation between element

So the array is in fact

Code: Select all | Expand

{ { ' "E1345" '  , ' "DI" ' , ' "DIGACQA" ' , ' "DI" ' ,' "I_E1345" ' } , {' "F1305" ' , ' "GO" ' ,' "DEVCTLA" ' ,' "DI" ' ,' "I_F1305GO" '} , {' "F1305" ' ,' "GT" ' ,' "DEVCTLA" ' ,' "DI" ' ,' "I_F1305GT" '} }
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: AEVAL multidimentional array :: Reply by Antonio Linares]]> 2025-05-13T04:34:56-06:00 2025-05-13T04:34:56-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45669&p=279473#p279473
AEval( aLines, { | aLine, n | AEval( aLine, { | cElement, m | ... } ) } )]]>

AEval( aLines, { | aLine, n | AEval( aLine, { | cElement, m | ... } ) } )]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: AEVAL multidimentional array :: Reply by Marc Vanzegbroeck]]> 2025-05-13T04:49:52-06:00 2025-05-13T04:49:52-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45669&p=279474#p279474 <![CDATA[FiveWin for Harbour/xHarbour :: Re: AEVAL multidimentional array :: Reply by Marc Vanzegbroeck]]> 2025-05-13T07:25:08-06:00 2025-05-13T07:25:08-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45669&p=279476#p279476
I still have a little problem.

I tested it with

Code: Select all | Expand

 AEval( aLines, { | aLine, n | AEval( aLine, { | cElement, m | cElement := mcsvremove(cElement)  } ) } )
 
 func mcsvremove(vveld)
   vveld = alltrim(vveld)
    msginfo(vveld) //field with "
   if substr(vveld,1,1) = '"'
      vveld = substr(vveld,2,len(vveld)-2)
   endif
   msginfo(vveld) //field without "
return vveld

 
It execute the mcsvremove() function, but the array is not updated.
If I add a message in mcsvremove(), the funcion removed the "]]>

I still have a little problem.

I tested it with

Code: Select all | Expand

 AEval( aLines, { | aLine, n | AEval( aLine, { | cElement, m | cElement := mcsvremove(cElement)  } ) } )
 
 func mcsvremove(vveld)
   vveld = alltrim(vveld)
    msginfo(vveld) //field with "
   if substr(vveld,1,1) = '"'
      vveld = substr(vveld,2,len(vveld)-2)
   endif
   msginfo(vveld) //field without "
return vveld

 
It execute the mcsvremove() function, but the array is not updated.
If I add a message in mcsvremove(), the funcion removed the "]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: AEVAL multidimentional array :: Reply by Antonio Linares]]> 2025-05-13T09:27:59-06:00 2025-05-13T09:27:59-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45669&p=279483#p279483
Do it this way:

Code: Select all | Expand

 AEval( aLines, { | aLine, n | AEval( aLine, { | cElement, m | aLines[ n ][ m ] := mcsvremove(cElement)  } ) } )
 
 func mcsvremove(vveld)
   vveld = alltrim(vveld)
    msginfo(vveld) //field with "
   if substr(vveld,1,1) = '"'
      vveld = substr(vveld,2,len(vveld)-2)
   endif
   msginfo(vveld) //field without "
return vveld

 
]]>

Do it this way:

Code: Select all | Expand

 AEval( aLines, { | aLine, n | AEval( aLine, { | cElement, m | aLines[ n ][ m ] := mcsvremove(cElement)  } ) } )
 
 func mcsvremove(vveld)
   vveld = alltrim(vveld)
    msginfo(vveld) //field with "
   if substr(vveld,1,1) = '"'
      vveld = substr(vveld,2,len(vveld)-2)
   endif
   msginfo(vveld) //field without "
return vveld

 
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: AEVAL multidimentional array :: Reply by Marc Vanzegbroeck]]> 2025-05-13T12:12:15-06:00 2025-05-13T12:12:15-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45669&p=279492#p279492
Then I get this compile-error.

Code: Select all | Expand

Error E0005  Outer codeblock variable is out of reach: 'N'
]]>

Then I get this compile-error.

Code: Select all | Expand

Error E0005  Outer codeblock variable is out of reach: 'N'
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: AEVAL multidimentional array :: Reply by JoséQuintas]]> 2025-05-13T14:35:23-06:00 2025-05-13T14:35:23-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45669&p=279493#p279493

Code: Select all | Expand

FOR EACH aList2 IN aList
   FOR EACH xItem IN aList2
      callfunction( @xItem )
   NEXT
NEXT   
]]>

Code: Select all | Expand

FOR EACH aList2 IN aList
   FOR EACH xItem IN aList2
      callfunction( @xItem )
   NEXT
NEXT   
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: AEVAL multidimentional array :: Reply by Marc Vanzegbroeck]]> 2025-05-14T01:29:26-06:00 2025-05-14T01:29:26-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45669&p=279502#p279502
That's how I did it now, but I was wondering that with aeval it may be faster...]]>

That's how I did it now, but I was wondering that with aeval it may be faster...]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: AEVAL multidimentional array :: Reply by Antonio Linares]]> 2025-05-14T01:40:14-06:00 2025-05-14T01:40:14-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45669&p=279503#p279503
AEval() should be faster, you may compare them:

local p

AEval( aLines, { | aLine, n | p := n, AEval( aLine, { | cItem, m | aLines[ p ][ m ] := YourFunction( cItem ) } ) } )]]>

AEval() should be faster, you may compare them:

local p

AEval( aLines, { | aLine, n | p := n, AEval( aLine, { | cItem, m | aLines[ p ][ m ] := YourFunction( cItem ) } ) } )]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: AEVAL multidimentional array :: Reply by Marc Vanzegbroeck]]> 2025-05-14T02:10:00-06:00 2025-05-14T02:10:00-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45669&p=279504#p279504
Now it's working :D

I will try the speed-difference with a large array.

Thank you]]>

Now it's working :D

I will try the speed-difference with a large array.

Thank you]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: AEVAL multidimentional array :: Reply by JoséQuintas]]> 2025-05-14T10:17:27-06:00 2025-05-14T10:17:27-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45669&p=279525#p279525 Source code is to you, not to the computer.
May be you need update the code for a long time, and may be next year you have work to remember what you do.
But sometimes speed is more important.

Last days I do this, using hb_AScan() inside hb_ASCan()
Once hb_AScan() process each element, may be could do a Eval() or AEval()

Code: Select all | Expand

   LOCAL aNoTestList := { ;
      { "no check", "demoall.prg", "testsamples.prg" }, ;
      { "MDI", "a.prg", "testmdi.prg", "testrtf.prg", "demomdi.prg" }, ;
      { "utility?", "buildpelles.prg", "dbview.prg" }, ;
      { "multithead", "demomenumt.prg" }, ;
      { "window", "demoonother.prg" }, ;
      { "postgress", "grid_2.prg", "grid_3.prg" }, ;
      { "console", "helloworld.prg" }, ;
      { "undefined", "propsh.prg", "tststconsapp.prg", "helpstatic.prg", ;
         "tstprdos.prg", "winprn.prg", "testalert.prg", "pseudocm.prg", ;
         "bincnts.prg", "bindbf.prg", "hexbincnt.prg" }, ;
      { "bug", "tstscrlbar.prg", "helpdemo.prg" } }

   aList := Directory( "*.prg" )      
   FOR EACH aFile IN aList
      IF hb_AScan( aNoTestList, { |a| hb_AScan( a, { |b| ;
         b == Lower( aFile[1] ) } ) != 0 } ) != 0
         LOOP
      ENDIF      
      ...
NEXT
]]>
Source code is to you, not to the computer.
May be you need update the code for a long time, and may be next year you have work to remember what you do.
But sometimes speed is more important.

Last days I do this, using hb_AScan() inside hb_ASCan()
Once hb_AScan() process each element, may be could do a Eval() or AEval()

Code: Select all | Expand

   LOCAL aNoTestList := { ;
      { "no check", "demoall.prg", "testsamples.prg" }, ;
      { "MDI", "a.prg", "testmdi.prg", "testrtf.prg", "demomdi.prg" }, ;
      { "utility?", "buildpelles.prg", "dbview.prg" }, ;
      { "multithead", "demomenumt.prg" }, ;
      { "window", "demoonother.prg" }, ;
      { "postgress", "grid_2.prg", "grid_3.prg" }, ;
      { "console", "helloworld.prg" }, ;
      { "undefined", "propsh.prg", "tststconsapp.prg", "helpstatic.prg", ;
         "tstprdos.prg", "winprn.prg", "testalert.prg", "pseudocm.prg", ;
         "bincnts.prg", "bindbf.prg", "hexbincnt.prg" }, ;
      { "bug", "tstscrlbar.prg", "helpdemo.prg" } }

   aList := Directory( "*.prg" )      
   FOR EACH aFile IN aList
      IF hb_AScan( aNoTestList, { |a| hb_AScan( a, { |b| ;
         b == Lower( aFile[1] ) } ) != 0 } ) != 0
         LOOP
      ENDIF      
      ...
NEXT
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: add page to tabfolderex on dialog / another view for samples :: Author JoséQuintas]]> 2025-05-13T15:17:57-06:00 2025-05-13T15:17:57-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45672&p=279497#p279497 I think it becames interesting.

a working sample using folderex

Code: Select all | Expand

/*
demofolderex.prg
*/

#include "fivewin.ch"

FUNCTION DemoFolderEx( lWithDialog, oDlg )

   LOCAL oTab

   hb_Default( @lWithDialog, .T. )

   FW_SetTruePixel(.T.)

   IF lWIthDialog
      DEFINE DIALOG oDlg ;
         TITLE "demofolderex" ;
         SIZE 1024, 768
   ENDIF

   @ 50, 50 FOLDEREX oTab ;
         PROMPTS "demofolderex" OF oDlg ;
         TAB HEIGHT 22 ;
         SIZE  800, 600 ;
         PIXEL

   IF lWithDialog
      ACTIVATE DIALOG oDlg CENTER
   ENDIF

   (oTab) // warning -w3 -es2

   RETURN Nil
a working sample using button

Code: Select all | Expand

/*
demobutton.prg
*/

#include "fivewin.ch"

FUNCTION DemoButton( lWithDialog, oDlg )

   LOCAL oButton

   hb_Default( @lWithDialog, .T. )

   FW_SetTruePixel(.T.)

   IF lWIthDialog
      DEFINE DIALOG oDlg ;
         TITLE "demobutton" ;
         SIZE 1024, 768
   ENDIF

   @ 100, 100 BUTTONBMP oButton ;
      PROMPT "test" ;
      OF oDlg ;
      SIZE 200, 25 ;
      PIXEL ;
      ; // RESOURCE cResName TOP ;
      ACTION MsgStop( "ok" )

   IF lWithDialog
      ACTIVATE DIALOG oDlg CENTER
   ENDIF

   (oButton) // warning -w3 -es2

   RETURN Nil
a working sample using checkbox

Code: Select all | Expand

/*
democheckbox.prg
*/

#include "fivewin.ch"

FUNCTION DemoCheckbox( lWithDialog, oDlg )

   LOCAL oCheck, lValue := .T.

   hb_Default( @lWithDialog, .T. )

   FW_SetTruePixel(.T.)

   IF lWIthDialog
      DEFINE DIALOG oDlg ;
         TITLE "democheckbox" ;
         SIZE 1024, 768
   ENDIF

   @ 100, 100 CHECKBOX oCheck VAR lValue PROMPT "The Option" PIXEL ;
      SIZE 200, 25 OF oDlg

   IF lWithDialog
      ACTIVATE DIALOG oDlg CENTER
   ENDIF

   (oCheck) // warning -w3 -es2

   RETURN Nil
This is the interesting part: a working sample using all previous samples

Code: Select all | Expand

/*
demoall.prg
*/

#include "fivewin.ch"

FUNCTION DemoAll()

   LOCAL oDlg, oTab, oPage

   FW_SetTruePixel(.T.)

   DEFINE DIALOG oDlg ;
      TITLE "demoall" ;
      SIZE 1024, 768

   @ 50, 50 FOLDEREX oTab ;
         PROMPTS "X","X","X","X","X" OF oDlg ;
         TAB HEIGHT 22 ;
         SIZE  900, 700 ;
         PIXEL

   oTab:aPrompts[ 1 ] := "folderex"
   oPage := oTab:aDialogs[ 1 ]

   DemoFolderEx( .F., oPage )

   oTab:Refresh()

   oTab:aPrompts[ 2 ] := "button"
   oPage := oTab:aDialogs[ 2 ]

   DemoButton( .F., oPage )

   oTab:Refresh()

   oTab:aPrompts[ 3 ] := "checkbox"
   oPage := oTab:aDialogs[3]

   DemoCheckbox( .F., oPage )

   oTab:Refresh()

   aSize( oTab:aPrompts, 3 )

   ACTIVATE DIALOG oDlg CENTER

   (oTab) // warning -w3 -es2

   RETURN Nil

An extra is to add buttons to run dialog standalone and to show source code.
Code is the same, for dialog or tabpage.
DemoCheckbox() -> run as dialog / standalone
DemoCheckbox( .F., oPage ) -> run on tabpage

I like the result, it is to choose a sample by image of what is needed.
Better than compile one by one.

My question:
Using DIALOG, how to add pages to folderex ?
On demoall I created several pages and remove not needed pages.
oTab:AddItem() cause error.]]>
I think it becames interesting.

a working sample using folderex

Code: Select all | Expand

/*
demofolderex.prg
*/

#include "fivewin.ch"

FUNCTION DemoFolderEx( lWithDialog, oDlg )

   LOCAL oTab

   hb_Default( @lWithDialog, .T. )

   FW_SetTruePixel(.T.)

   IF lWIthDialog
      DEFINE DIALOG oDlg ;
         TITLE "demofolderex" ;
         SIZE 1024, 768
   ENDIF

   @ 50, 50 FOLDEREX oTab ;
         PROMPTS "demofolderex" OF oDlg ;
         TAB HEIGHT 22 ;
         SIZE  800, 600 ;
         PIXEL

   IF lWithDialog
      ACTIVATE DIALOG oDlg CENTER
   ENDIF

   (oTab) // warning -w3 -es2

   RETURN Nil
a working sample using button

Code: Select all | Expand

/*
demobutton.prg
*/

#include "fivewin.ch"

FUNCTION DemoButton( lWithDialog, oDlg )

   LOCAL oButton

   hb_Default( @lWithDialog, .T. )

   FW_SetTruePixel(.T.)

   IF lWIthDialog
      DEFINE DIALOG oDlg ;
         TITLE "demobutton" ;
         SIZE 1024, 768
   ENDIF

   @ 100, 100 BUTTONBMP oButton ;
      PROMPT "test" ;
      OF oDlg ;
      SIZE 200, 25 ;
      PIXEL ;
      ; // RESOURCE cResName TOP ;
      ACTION MsgStop( "ok" )

   IF lWithDialog
      ACTIVATE DIALOG oDlg CENTER
   ENDIF

   (oButton) // warning -w3 -es2

   RETURN Nil
a working sample using checkbox

Code: Select all | Expand

/*
democheckbox.prg
*/

#include "fivewin.ch"

FUNCTION DemoCheckbox( lWithDialog, oDlg )

   LOCAL oCheck, lValue := .T.

   hb_Default( @lWithDialog, .T. )

   FW_SetTruePixel(.T.)

   IF lWIthDialog
      DEFINE DIALOG oDlg ;
         TITLE "democheckbox" ;
         SIZE 1024, 768
   ENDIF

   @ 100, 100 CHECKBOX oCheck VAR lValue PROMPT "The Option" PIXEL ;
      SIZE 200, 25 OF oDlg

   IF lWithDialog
      ACTIVATE DIALOG oDlg CENTER
   ENDIF

   (oCheck) // warning -w3 -es2

   RETURN Nil
This is the interesting part: a working sample using all previous samples

Code: Select all | Expand

/*
demoall.prg
*/

#include "fivewin.ch"

FUNCTION DemoAll()

   LOCAL oDlg, oTab, oPage

   FW_SetTruePixel(.T.)

   DEFINE DIALOG oDlg ;
      TITLE "demoall" ;
      SIZE 1024, 768

   @ 50, 50 FOLDEREX oTab ;
         PROMPTS "X","X","X","X","X" OF oDlg ;
         TAB HEIGHT 22 ;
         SIZE  900, 700 ;
         PIXEL

   oTab:aPrompts[ 1 ] := "folderex"
   oPage := oTab:aDialogs[ 1 ]

   DemoFolderEx( .F., oPage )

   oTab:Refresh()

   oTab:aPrompts[ 2 ] := "button"
   oPage := oTab:aDialogs[ 2 ]

   DemoButton( .F., oPage )

   oTab:Refresh()

   oTab:aPrompts[ 3 ] := "checkbox"
   oPage := oTab:aDialogs[3]

   DemoCheckbox( .F., oPage )

   oTab:Refresh()

   aSize( oTab:aPrompts, 3 )

   ACTIVATE DIALOG oDlg CENTER

   (oTab) // warning -w3 -es2

   RETURN Nil

An extra is to add buttons to run dialog standalone and to show source code.
Code is the same, for dialog or tabpage.
DemoCheckbox() -> run as dialog / standalone
DemoCheckbox( .F., oPage ) -> run on tabpage

I like the result, it is to choose a sample by image of what is needed.
Better than compile one by one.

My question:
Using DIALOG, how to add pages to folderex ?
On demoall I created several pages and remove not needed pages.
oTab:AddItem() cause error.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: add page to tabfolderex on dialog / another view for samples :: Reply by JoséQuintas]]> 2025-05-13T15:23:07-06:00 2025-05-13T15:23:07-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45672&p=279498#p279498 Image

Result of demoall is one sample on each page without to need another source code.]]>
Image

Result of demoall is one sample on each page without to need another source code.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: add page to tabfolderex on dialog / another view for samples :: Reply by MGA]]> 2025-05-14T05:23:10-06:00 2025-05-14T05:23:10-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45672&p=279507#p279507 <![CDATA[FiveWin for Harbour/xHarbour :: Re: add page to tabfolderex on dialog / another view for samples :: Reply by JoséQuintas]]> 2025-05-14T10:02:36-06:00 2025-05-14T10:02:36-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45672&p=279524#p279524 Image

2 levels of folderex now, and button for samples that I try change to folderex but I can't.

Code: Select all | Expand

/*
demoall.prg
*/

#include "fivewin.ch"

STATIC aMenuOptions := {}, nMenuLevel := 0

FUNCTION DemoAll()

   LOCAL oDlg, aInitList := {}
   LOCAL oTabLevel1, nIndexLevel1, aOption1
   LOCAL oTabLevel2 := Array(100), nIndexLevel2, aOption2, nTab2Index := 0
   LOCAL oButton := Array(100), nButtonIndex := 0

   FW_SetTruePixel(.T.)

   DEFINE DIALOG oDlg ;
      TITLE "demoall" ;
      SIZE 1024, 768

   MenuOption( "browse" )
      MenuDrop()
      MenuOption( "demoxbsubtot",                  { |o| DemoxbSubTot( .F., o ) } )
      MenuOption( "zodiac",                        { |o| DemoZodiac( .F., o ) } )
      MenuOption( "xbrwpages", "xbwrwpages",       { || Demoxbrwpages() } )
      MenuUnDrop()
   MenuOption( "button",                           { |o| DemoButton( .F., o ) } )
   MenuOption( "checkbox",                         { |o| DemoCheckbox( .F., o ) } )
   MenuOption( "folderex",                         { |o| DemoFolderEx( .F., o ) } )
   MenuOption( "zorder",                           { |o| DemoZorder( .F., o ) } )

   @ 50, 50 FOLDEREX oTabLevel1 ;
      PROMPTS ListOfTabPages() ;
      OF oDlg ;
      TAB HEIGHT 22 ;
      SIZE  900, 700 ;
      PIXEL
   nIndexLevel1 := 0
   FOR EACH aOption1 IN aMenuOptions
      oTabLevel1:aPrompts[ ++nIndexLevel1 ] := aOption1[ 1 ]
      IF Empty( aOption1[ 2 ] )
         Eval( aOption1[ 3 ], oTabLevel1:aDialogs[ nIndexLevel1 ] )
      ELSE
         @ 50, 50 FOLDEREX oTabLevel2[ ++nTab2Index ] ;
            PROMPTS ListOfTabPages() ;
            OF oTabLevel1:aDialogs[ nIndexLevel1 ]  ;
            TAB HEIGHT 22 ;
            SIZE  800, 600 ;
            PIXEL
         nIndexLevel2 := 0
         FOR EACH aOption2 IN aOption1[ 2 ]
            oTabLevel2[ nTab2Index ]:aPrompts[ ++nIndexLevel2 ] := aOption2[ 1 ]
            IF ValType( aOption2[3] ) == "C"
               @ 100, 100 BUTTONBMP oButton[ ++nButtonIndex ] ;
                  PROMPT aOption2[1] ;
                  OF oTabLevel2[ nTab2Index ]:aDialogs[ nIndexLevel2 ] ;
                  SIZE 200, 25 ;
                  PIXEL ;
                  ; // RESOURCE cResName TOP ;
                  ACTION Eval( aOption2[4] )
            ELSE
               Eval( aOption2[ 3 ], oTabLevel2[ nTab2Index ]:aDialogs[ nIndexLevel2 ] )
            ENDIF
         NEXT
         aSize( oTabLevel2[ nTab2Index ]:aPrompts, nIndexLevel2 )
      ENDIF
   NEXT
   aSize( oTabLevel1:aPrompts, nIndexLevel1 )

   ACTIVATE DIALOG oDlg CENTER ;
      ON INIT ( Self, ExecuteInit( aInitList ) )

   RETURN Nil

STATIC FUNCTION ListOfTabPages()

   LOCAL aList := Array(100)
   AFill( aList, "" )

   RETURN aList

STATIC FUNCTION MenuOption( cCaption, bCodeOrString, bCode )

   LOCAL nCont, aLastMenu

   aLastMenu := aMenuOptions
   FOR nCont = 1 TO nMenuLevel
      aLastMenu := aLastMenu[ Len( aLastMenu ) ]
      aLastMenu := aLastMenu[ 2 ]
   NEXT
   AAdd( aLastMenu, { ccaption, {}, bCodeOrString, bCode } )

   RETURN Nil

STATIC FUNCTION MenuDrop()

   nMenuLevel++

   RETURN Nil

STATIC FUNCTION MenuUndrop()

   nMenuLevel --

   RETURN Nil

STATIC FUNCTION ExecuteInit( aInitList )

   LOCAL bCode

   IF .F.
   FOR EACH bCode In aInitList
      Eval( bCode )
   NEXT
   ENDIF

   RETURN Nil
aInitList is an array of DIALOG INIT.
When sample works inside demoall, it does not have dialog, than add to this array, to execute on demoall dialog init.
The sample can works standalone using own dialog, or inside folderex of demoall dialog.

It is an interesting test of possibilities.
Some things can work using WINDOW only, some things can work using a DIALOG INIT, others need more tests.
Can detect differences and solve them, before they occurs on application.
Now using fivewin samples.]]>
Image

2 levels of folderex now, and button for samples that I try change to folderex but I can't.

Code: Select all | Expand

/*
demoall.prg
*/

#include "fivewin.ch"

STATIC aMenuOptions := {}, nMenuLevel := 0

FUNCTION DemoAll()

   LOCAL oDlg, aInitList := {}
   LOCAL oTabLevel1, nIndexLevel1, aOption1
   LOCAL oTabLevel2 := Array(100), nIndexLevel2, aOption2, nTab2Index := 0
   LOCAL oButton := Array(100), nButtonIndex := 0

   FW_SetTruePixel(.T.)

   DEFINE DIALOG oDlg ;
      TITLE "demoall" ;
      SIZE 1024, 768

   MenuOption( "browse" )
      MenuDrop()
      MenuOption( "demoxbsubtot",                  { |o| DemoxbSubTot( .F., o ) } )
      MenuOption( "zodiac",                        { |o| DemoZodiac( .F., o ) } )
      MenuOption( "xbrwpages", "xbwrwpages",       { || Demoxbrwpages() } )
      MenuUnDrop()
   MenuOption( "button",                           { |o| DemoButton( .F., o ) } )
   MenuOption( "checkbox",                         { |o| DemoCheckbox( .F., o ) } )
   MenuOption( "folderex",                         { |o| DemoFolderEx( .F., o ) } )
   MenuOption( "zorder",                           { |o| DemoZorder( .F., o ) } )

   @ 50, 50 FOLDEREX oTabLevel1 ;
      PROMPTS ListOfTabPages() ;
      OF oDlg ;
      TAB HEIGHT 22 ;
      SIZE  900, 700 ;
      PIXEL
   nIndexLevel1 := 0
   FOR EACH aOption1 IN aMenuOptions
      oTabLevel1:aPrompts[ ++nIndexLevel1 ] := aOption1[ 1 ]
      IF Empty( aOption1[ 2 ] )
         Eval( aOption1[ 3 ], oTabLevel1:aDialogs[ nIndexLevel1 ] )
      ELSE
         @ 50, 50 FOLDEREX oTabLevel2[ ++nTab2Index ] ;
            PROMPTS ListOfTabPages() ;
            OF oTabLevel1:aDialogs[ nIndexLevel1 ]  ;
            TAB HEIGHT 22 ;
            SIZE  800, 600 ;
            PIXEL
         nIndexLevel2 := 0
         FOR EACH aOption2 IN aOption1[ 2 ]
            oTabLevel2[ nTab2Index ]:aPrompts[ ++nIndexLevel2 ] := aOption2[ 1 ]
            IF ValType( aOption2[3] ) == "C"
               @ 100, 100 BUTTONBMP oButton[ ++nButtonIndex ] ;
                  PROMPT aOption2[1] ;
                  OF oTabLevel2[ nTab2Index ]:aDialogs[ nIndexLevel2 ] ;
                  SIZE 200, 25 ;
                  PIXEL ;
                  ; // RESOURCE cResName TOP ;
                  ACTION Eval( aOption2[4] )
            ELSE
               Eval( aOption2[ 3 ], oTabLevel2[ nTab2Index ]:aDialogs[ nIndexLevel2 ] )
            ENDIF
         NEXT
         aSize( oTabLevel2[ nTab2Index ]:aPrompts, nIndexLevel2 )
      ENDIF
   NEXT
   aSize( oTabLevel1:aPrompts, nIndexLevel1 )

   ACTIVATE DIALOG oDlg CENTER ;
      ON INIT ( Self, ExecuteInit( aInitList ) )

   RETURN Nil

STATIC FUNCTION ListOfTabPages()

   LOCAL aList := Array(100)
   AFill( aList, "" )

   RETURN aList

STATIC FUNCTION MenuOption( cCaption, bCodeOrString, bCode )

   LOCAL nCont, aLastMenu

   aLastMenu := aMenuOptions
   FOR nCont = 1 TO nMenuLevel
      aLastMenu := aLastMenu[ Len( aLastMenu ) ]
      aLastMenu := aLastMenu[ 2 ]
   NEXT
   AAdd( aLastMenu, { ccaption, {}, bCodeOrString, bCode } )

   RETURN Nil

STATIC FUNCTION MenuDrop()

   nMenuLevel++

   RETURN Nil

STATIC FUNCTION MenuUndrop()

   nMenuLevel --

   RETURN Nil

STATIC FUNCTION ExecuteInit( aInitList )

   LOCAL bCode

   IF .F.
   FOR EACH bCode In aInitList
      Eval( bCode )
   NEXT
   ENDIF

   RETURN Nil
aInitList is an array of DIALOG INIT.
When sample works inside demoall, it does not have dialog, than add to this array, to execute on demoall dialog init.
The sample can works standalone using own dialog, or inside folderex of demoall dialog.

It is an interesting test of possibilities.
Some things can work using WINDOW only, some things can work using a DIALOG INIT, others need more tests.
Can detect differences and solve them, before they occurs on application.
Now using fivewin samples.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: add page to tabfolderex on dialog / another view for samples :: Reply by JoséQuintas]]> 2025-05-14T10:57:37-06:00 2025-05-14T10:57:37-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45672&p=279528#p279528

Code: Select all | Expand

 Pasta de d:\github\fivewin\samples

14/05/2025  10:49         6.327.296 demoall.exe
13/05/2025  16:36         6.681.088 demobutton.exe
13/05/2025  16:57         6.681.088 democheckbox.exe
13/05/2025  15:12         6.724.096 demofolderex.exe
14/05/2025  10:32         6.271.488 demoxbrwpages.exe
14/05/2025  00:53         6.682.112 demozorder.exe
I do not understand this:
demoall is all together.
How can all together be smaller?]]>

Code: Select all | Expand

 Pasta de d:\github\fivewin\samples

14/05/2025  10:49         6.327.296 demoall.exe
13/05/2025  16:36         6.681.088 demobutton.exe
13/05/2025  16:57         6.681.088 democheckbox.exe
13/05/2025  15:12         6.724.096 demofolderex.exe
14/05/2025  10:32         6.271.488 demoxbrwpages.exe
14/05/2025  00:53         6.682.112 demozorder.exe
I do not understand this:
demoall is all together.
How can all together be smaller?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Backup forums reminder :: Author Antonio Linares]]> 2025-05-08T20:52:53-06:00 2025-05-08T20:52:53-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45659&p=279375#p279375
To check if any infected content is present in the cPanel account, I have initiated a courtesy malware scan. The scan has detected 1 infected file

/home1/fivetec1/public_html/500.php: SL-PHP-EVAL_REQUEST-axog.UNOFFICIAL FOUND

----------- SCAN SUMMARY -----------
Known viruses: 2299997
Engine version: devel-clamav-0.99-beta1-632-g8a582c7
Scanned directories: 2286
Scanned files: 38847
Infected files: 1
Data scanned: 379.62 MB
Data read: 6107.80 MB (ratio 0.06:1)
Time: 1564.957 sec (26 m 4 s)

It is advisable to clean this infected file.
We want to remind you that we have an alternative working forums at:
https://forums.fivetechsoft.com/

So please, next time that we may face any troubles with these forums, remember to go there.

Thank you :)]]>
To check if any infected content is present in the cPanel account, I have initiated a courtesy malware scan. The scan has detected 1 infected file

/home1/fivetec1/public_html/500.php: SL-PHP-EVAL_REQUEST-axog.UNOFFICIAL FOUND

----------- SCAN SUMMARY -----------
Known viruses: 2299997
Engine version: devel-clamav-0.99-beta1-632-g8a582c7
Scanned directories: 2286
Scanned files: 38847
Infected files: 1
Data scanned: 379.62 MB
Data read: 6107.80 MB (ratio 0.06:1)
Time: 1564.957 sec (26 m 4 s)

It is advisable to clean this infected file.
We want to remind you that we have an alternative working forums at:
https://forums.fivetechsoft.com/

So please, next time that we may face any troubles with these forums, remember to go there.

Thank you :)]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Backup forums reminder :: Reply by Otto]]> 2025-05-08T23:48:50-06:00 2025-05-08T23:48:50-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45659&p=279378#p279378 In a recent incident, I suspect that there were security issues between accounts on the shared hosting server – possibly due to insufficient isolation. In such cases, selfhosting might be the better alternative: you’re not dependent on the security of other users, and in an emergency, you have direct access to your own server.

Of course, selfhosting comes with some maintenance effort, but my question is more fundamental:
If you're hosting business-critical software – isn't selfhosting ultimately the more reliable and secure option?

Best regards,
Otto]]>
In a recent incident, I suspect that there were security issues between accounts on the shared hosting server – possibly due to insufficient isolation. In such cases, selfhosting might be the better alternative: you’re not dependent on the security of other users, and in an emergency, you have direct access to your own server.

Of course, selfhosting comes with some maintenance effort, but my question is more fundamental:
If you're hosting business-critical software – isn't selfhosting ultimately the more reliable and secure option?

Best regards,
Otto]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Backup forums reminder :: Reply by Antonio Linares]]> 2025-05-09T01:15:58-06:00 2025-05-09T01:15:58-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45659&p=279380#p279380
What OS do you use for selfhosting ?

Windows or Linux ?

Cloudfare, antivirus ?]]>

What OS do you use for selfhosting ?

Windows or Linux ?

Cloudfare, antivirus ?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Backup forums reminder :: Reply by Otto]]> 2025-05-09T01:34:07-06:00 2025-05-09T01:34:07-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45659&p=279381#p279381
We use Windows Server, and for some time now, we've been using Cloudflared Tunnel instead of public IP addresses. Windows Defender Antivirus is integrated into Windows Server, and we use notebooks as hardware.

I'm currently testing the installation of WINHOTEL, WEB, APACHE, etc., and I've installed everything portably on a USB stick. If good-quality sticks and fast USB ports are used, this solution works perfectly, and I'd say it's well-suited even for real-world deployment.

Actually incredible – plug it into a PC, and you have everything: the complete FiveWin programs and web applications. Perfect for the hybrid mode, which we'll certainly be using for a while until all applications are fully rewritten for the web.
Absolutely no additional installation outside the stick is necessary.
I often wonder where the hidden problem will be that suddenly appears.


Best regards,
Otto]]>

We use Windows Server, and for some time now, we've been using Cloudflared Tunnel instead of public IP addresses. Windows Defender Antivirus is integrated into Windows Server, and we use notebooks as hardware.

I'm currently testing the installation of WINHOTEL, WEB, APACHE, etc., and I've installed everything portably on a USB stick. If good-quality sticks and fast USB ports are used, this solution works perfectly, and I'd say it's well-suited even for real-world deployment.

Actually incredible – plug it into a PC, and you have everything: the complete FiveWin programs and web applications. Perfect for the hybrid mode, which we'll certainly be using for a while until all applications are fully rewritten for the web.
Absolutely no additional installation outside the stick is necessary.
I often wonder where the hidden problem will be that suddenly appears.


Best regards,
Otto]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Backup forums reminder :: Reply by Silvio.Falconi]]> 2025-05-09T02:32:59-06:00 2025-05-09T02:32:59-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45659&p=279383#p279383 I have had several websites for about ten years, including several portals. I have always used a dedicated server at Netsons in Pescara, which has its operations centre at INET in Milan.

There has never been a service interruption except one time when a portal had an Injection attack but it was not my fault and the author of the script immediately corrected his procedure. PHP FORUM generally suffer attacks, PHP allows remote code execution, be careful with Windows servers

You have the web site on Q52H+C62 Cheney, Kansas, USA but the

the strangest thing is that the server is located inside a lake?

Image]]>
I have had several websites for about ten years, including several portals. I have always used a dedicated server at Netsons in Pescara, which has its operations centre at INET in Milan.

There has never been a service interruption except one time when a portal had an Injection attack but it was not my fault and the author of the script immediately corrected his procedure. PHP FORUM generally suffer attacks, PHP allows remote code execution, be careful with Windows servers

You have the web site on Q52H+C62 Cheney, Kansas, USA but the

the strangest thing is that the server is located inside a lake?

Image]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Backup forums reminder :: Reply by Antonio Linares]]> 2025-05-11T02:42:01-06:00 2025-05-11T02:42:01-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45659&p=279414#p279414
https://dnschecker.org/#NS/fivetechsupport.com

In 24/48 hours they should be propagated]]>

https://dnschecker.org/#NS/fivetechsupport.com

In 24/48 hours they should be propagated]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Backup forums reminder :: Reply by Antonio Linares]]> 2025-05-15T01:05:17-06:00 2025-05-15T01:05:17-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45659&p=279537#p279537

Also we have activated the security mode to avoid attacks, this is why you will see sometimes a cloudflare page.

if the forums don't react inmediately just click twice and you will get them!

Long life our forums :D]]>


Also we have activated the security mode to avoid attacks, this is why you will see sometimes a cloudflare page.

if the forums don't react inmediately just click twice and you will get them!

Long life our forums :D]]>
<![CDATA[FiveWin for Harbour/xHarbour :: New Class TNavigator :: Author Silvio.Falconi]]> 2025-05-14T07:24:13-06:00 2025-05-14T07:24:13-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45676&p=279519#p279519 it's just a prototype i'm trying out

Image

It could work as an explorer bar but the navigators are horizontal, now we are working to create a container type class]]>
it's just a prototype i'm trying out

Image

It could work as an explorer bar but the navigators are horizontal, now we are working to create a container type class]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: New Class TNavigator :: Reply by Silvio.Falconi]]> 2025-05-15T05:33:13-06:00 2025-05-15T05:33:13-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45676&p=279546#p279546
Image

Still Under Construction]]>

Image

Still Under Construction]]>
<![CDATA[FiveWin for Harbour/xHarbour :: RichEdit and colors :: Author Natter]]> 2025-05-12T05:35:27-06:00 2025-05-12T05:35:27-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45665&p=279420#p279420 <![CDATA[FiveWin for Harbour/xHarbour :: Re: RichEdit and colors :: Reply by Enrico Maria Giordano]]> 2025-05-12T06:21:15-06:00 2025-05-12T06:21:15-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45665&p=279421#p279421 <![CDATA[FiveWin for Harbour/xHarbour :: Re: RichEdit and colors :: Reply by Natter]]> 2025-05-12T07:47:08-06:00 2025-05-12T07:47:08-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45665&p=279427#p279427
I tried everything. They work fine, but the colors don't show everything.

Code: Select all | Expand

riched20.dll, 1 103 280
msftedit.dll, 2 680 320
riched32.dll, 32 768 
There is an assumption that the output of the full color gamut depends on the monitor.
https://cloud.mail.ru/public/cEGm/dRTeTxmUu]]>

I tried everything. They work fine, but the colors don't show everything.

Code: Select all | Expand

riched20.dll, 1 103 280
msftedit.dll, 2 680 320
riched32.dll, 32 768 
There is an assumption that the output of the full color gamut depends on the monitor.
https://cloud.mail.ru/public/cEGm/dRTeTxmUu]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: RichEdit and colors :: Reply by Enrico Maria Giordano]]> 2025-05-12T07:53:52-06:00 2025-05-12T07:53:52-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45665&p=279429#p279429 <![CDATA[FiveWin for Harbour/xHarbour :: Re: RichEdit and colors :: Reply by Natter]]> 2025-05-12T08:25:38-06:00 2025-05-12T08:25:38-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45665&p=279432#p279432

Code: Select all | Expand

riched20.dll, v 3.1 
msftedit.dll, 2 680 320, v 10.0.10586.494
riched32.dll, 32 768,v 10.0.26100.1 
That's what it says in the properties of these files.]]>

Code: Select all | Expand

riched20.dll, v 3.1 
msftedit.dll, 2 680 320, v 10.0.10586.494
riched32.dll, 32 768,v 10.0.26100.1 
That's what it says in the properties of these files.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: RichEdit and colors :: Reply by karinha]]> 2025-05-12T08:46:57-06:00 2025-05-12T08:46:57-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45665&p=279433#p279433

Code: Select all | Expand

C:\Windows\System32

riched20.dll
riched32.dll
Regards, saludso.]]>

Code: Select all | Expand

C:\Windows\System32

riched20.dll
riched32.dll
Regards, saludso.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: RichEdit and colors :: Reply by Antonio Linares]]> 2025-05-12T08:57:41-06:00 2025-05-12T08:57:41-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45665&p=279434#p279434
The inconsistent display of colors in an RTF document when using the RichEdit component (riched20.dll or msftedit.dll) could stem from several factors related to differences in system configurations, RichEdit versions, or rendering behavior. Here are the likely reasons and steps to diagnose or resolve the issue:

RichEdit Version Differences:
Different versions of the RichEdit control (e.g., RichEdit 2.0, 3.0, 4.1, or later) are installed on different computers, depending on the operating system or installed software (e.g., Microsoft Office). Older versions, like riched20.dll, may not fully support advanced RTF features, including certain color table implementations.

Solution: Check which DLL is loaded (riched20.dll or msftedit.dll) using a tool like Process Explorer or Dependency Walker. Ensure the application explicitly loads msftedit.dll (RichEdit 4.1 or later) for better RTF support by linking to it or using LoadLibrary. You can also verify the RichEdit version programmatically via the EM_GETEDITSTYLE message or by checking the DLL's version info.

Color Table Limitations:
The RTF color table (\colortbl) defines colors used in the document. Some RichEdit implementations may have limits on the number of colors they can render (e.g., older versions might cap at 16 or 256 colors). If the RTF document uses more colors than supported, some may be ignored or mapped incorrectly.

Solution: Inspect the RTF document’s color table using a text editor. Simplify the color table to use fewer colors (e.g., under 16) and test if the issue persists. Alternatively, ensure all systems use a newer RichEdit version (msftedit.dll) that supports larger color tables.

System Color Depth and Display Settings:
The display color depth (e.g., 16-bit vs. 32-bit) on some computers may affect color rendering. In lower color depth modes (e.g., 256 colors or 16-bit), the RichEdit control may approximate or skip colors that don’t map well to the system’s color palette.
Solution: Check the display settings on affected computers (Control Panel > Display > Advanced Settings). Ensure they are set to 32-bit True Color. Update graphics drivers if colors are still limited.

RTF Document Compatibility:
The RTF document may contain formatting or color definitions that are not fully compatible with all RichEdit versions. For example, complex color specifications or non-standard RTF tags might be ignored by older RichEdit controls.
Solution: Open the RTF in a text editor to check for unusual color definitions or proprietary tags. Test the document in a newer application (e.g., WordPad or Microsoft Word) to confirm the issue is with RichEdit and not the document. If needed, re-save the RTF in a simpler format using WordPad to ensure compatibility.

Font and Character Set Issues:
Colors in RTF documents are often tied to font or text properties. If the specified font or character set is missing on some systems, RichEdit may fall back to a default font that doesn’t render colors correctly.
Solution: Ensure the fonts referenced in the RTF document (check \fonttbl) are installed on all systems. Use common fonts like Arial or Times New Roman to minimize issues. Also, verify that the character set (\fcharset) is supported.

Graphics and GDI Limitations:
The RichEdit control relies on the Windows Graphics Device Interface (GDI) for rendering. Differences in GDI implementations or graphics hardware acceleration on some systems may cause color rendering issues, especially if the system uses outdated or incompatible graphics drivers.

Solution: Update graphics drivers on affected systems. Test disabling hardware acceleration (via Display Settings or application configuration) to see if it resolves the issue.

Application-Specific Configuration:
Your application may override RichEdit’s default behavior, such as setting a custom color palette or limiting color rendering via messages like EM_SETCHARFORMAT or EM_SETBKGND. These settings might behave differently across systems.
Solution: Review your code for any custom RichEdit configurations. Ensure consistent use of SCF_ALL or SCF_SELECTION when applying character formats and avoid hardcoding color indices that may not exist in the RTF color table.

Diagnostic Steps
Identify the RichEdit DLL: Use a debugger or Process Explorer to confirm whether riched20.dll or msftedit.dll is loaded. Check the file version (e.g., msftedit.dll version 8.5 or higher is preferable).
Test with a Minimal RTF: Create a simple RTF document with a small color table (e.g., 3–5 colors) and test it on affected systems to isolate the issue.

Compare System Configurations: Note the OS version (e.g., Windows 10 vs. Windows 11), display settings, and installed software (e.g., Microsoft Office) on computers where colors display correctly vs. incorrectly.
Log RichEdit Messages: Use EM_GETCHARFORMAT to log the color attributes applied to text and verify if the expected colors from the RTF color table are being used.

Recommended Fix
To maximize compatibility:
Explicitly load msftedit.dll in your application to ensure a modern RichEdit version (RichEdit 4.1 or later).
Simplify the RTF document’s color table to use fewer, standard colors.
Ensure all systems use 32-bit color depth and have updated graphics drivers.

Test the RTF document in WordPad to confirm expected color rendering and re-save if necessary.
If the issue persists, provide details about the OS versions, RichEdit DLL versions, and a sample RTF document to narrow down the cause further.
]]>
The inconsistent display of colors in an RTF document when using the RichEdit component (riched20.dll or msftedit.dll) could stem from several factors related to differences in system configurations, RichEdit versions, or rendering behavior. Here are the likely reasons and steps to diagnose or resolve the issue:

RichEdit Version Differences:
Different versions of the RichEdit control (e.g., RichEdit 2.0, 3.0, 4.1, or later) are installed on different computers, depending on the operating system or installed software (e.g., Microsoft Office). Older versions, like riched20.dll, may not fully support advanced RTF features, including certain color table implementations.

Solution: Check which DLL is loaded (riched20.dll or msftedit.dll) using a tool like Process Explorer or Dependency Walker. Ensure the application explicitly loads msftedit.dll (RichEdit 4.1 or later) for better RTF support by linking to it or using LoadLibrary. You can also verify the RichEdit version programmatically via the EM_GETEDITSTYLE message or by checking the DLL's version info.

Color Table Limitations:
The RTF color table (\colortbl) defines colors used in the document. Some RichEdit implementations may have limits on the number of colors they can render (e.g., older versions might cap at 16 or 256 colors). If the RTF document uses more colors than supported, some may be ignored or mapped incorrectly.

Solution: Inspect the RTF document’s color table using a text editor. Simplify the color table to use fewer colors (e.g., under 16) and test if the issue persists. Alternatively, ensure all systems use a newer RichEdit version (msftedit.dll) that supports larger color tables.

System Color Depth and Display Settings:
The display color depth (e.g., 16-bit vs. 32-bit) on some computers may affect color rendering. In lower color depth modes (e.g., 256 colors or 16-bit), the RichEdit control may approximate or skip colors that don’t map well to the system’s color palette.
Solution: Check the display settings on affected computers (Control Panel > Display > Advanced Settings). Ensure they are set to 32-bit True Color. Update graphics drivers if colors are still limited.

RTF Document Compatibility:
The RTF document may contain formatting or color definitions that are not fully compatible with all RichEdit versions. For example, complex color specifications or non-standard RTF tags might be ignored by older RichEdit controls.
Solution: Open the RTF in a text editor to check for unusual color definitions or proprietary tags. Test the document in a newer application (e.g., WordPad or Microsoft Word) to confirm the issue is with RichEdit and not the document. If needed, re-save the RTF in a simpler format using WordPad to ensure compatibility.

Font and Character Set Issues:
Colors in RTF documents are often tied to font or text properties. If the specified font or character set is missing on some systems, RichEdit may fall back to a default font that doesn’t render colors correctly.
Solution: Ensure the fonts referenced in the RTF document (check \fonttbl) are installed on all systems. Use common fonts like Arial or Times New Roman to minimize issues. Also, verify that the character set (\fcharset) is supported.

Graphics and GDI Limitations:
The RichEdit control relies on the Windows Graphics Device Interface (GDI) for rendering. Differences in GDI implementations or graphics hardware acceleration on some systems may cause color rendering issues, especially if the system uses outdated or incompatible graphics drivers.

Solution: Update graphics drivers on affected systems. Test disabling hardware acceleration (via Display Settings or application configuration) to see if it resolves the issue.

Application-Specific Configuration:
Your application may override RichEdit’s default behavior, such as setting a custom color palette or limiting color rendering via messages like EM_SETCHARFORMAT or EM_SETBKGND. These settings might behave differently across systems.
Solution: Review your code for any custom RichEdit configurations. Ensure consistent use of SCF_ALL or SCF_SELECTION when applying character formats and avoid hardcoding color indices that may not exist in the RTF color table.

Diagnostic Steps
Identify the RichEdit DLL: Use a debugger or Process Explorer to confirm whether riched20.dll or msftedit.dll is loaded. Check the file version (e.g., msftedit.dll version 8.5 or higher is preferable).
Test with a Minimal RTF: Create a simple RTF document with a small color table (e.g., 3–5 colors) and test it on affected systems to isolate the issue.

Compare System Configurations: Note the OS version (e.g., Windows 10 vs. Windows 11), display settings, and installed software (e.g., Microsoft Office) on computers where colors display correctly vs. incorrectly.
Log RichEdit Messages: Use EM_GETCHARFORMAT to log the color attributes applied to text and verify if the expected colors from the RTF color table are being used.

Recommended Fix
To maximize compatibility:
Explicitly load msftedit.dll in your application to ensure a modern RichEdit version (RichEdit 4.1 or later).
Simplify the RTF document’s color table to use fewer, standard colors.
Ensure all systems use 32-bit color depth and have updated graphics drivers.

Test the RTF document in WordPad to confirm expected color rendering and re-save if necessary.
If the issue persists, provide details about the OS versions, RichEdit DLL versions, and a sample RTF document to narrow down the cause further.
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: RichEdit and colors :: Reply by cnavarro]]> 2025-05-12T09:08:36-06:00 2025-05-12T09:08:36-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45665&p=279435#p279435
Natter wrote: Mon May 12, 2025 11:35 am To view an RTF document, I use the RichEdit component (riched20.dll or msftedit.dll ) On some computers, RichEdit shows all the colors of the document, on others only some. What could be the reason for this?
What class do you use? TRichEdt or TRichEdt5]]>
Natter wrote: Mon May 12, 2025 11:35 am To view an RTF document, I use the RichEdit component (riched20.dll or msftedit.dll ) On some computers, RichEdit shows all the colors of the document, on others only some. What could be the reason for this?
What class do you use? TRichEdt or TRichEdt5]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: RichEdit and colors :: Reply by Enrico Maria Giordano]]> 2025-05-12T09:47:33-06:00 2025-05-12T09:47:33-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45665&p=279440#p279440
Natter wrote: Mon May 12, 2025 2:25 pm

Code: Select all | Expand

riched20.dll, v 3.1 
msftedit.dll, 2 680 320, v 10.0.10586.494
riched32.dll, 32 768,v 10.0.26100.1 
That's what it says in the properties of these files.
Are these the problematic ones or the working fine ones?]]>
Natter wrote: Mon May 12, 2025 2:25 pm

Code: Select all | Expand

riched20.dll, v 3.1 
msftedit.dll, 2 680 320, v 10.0.10586.494
riched32.dll, 32 768,v 10.0.26100.1 
That's what it says in the properties of these files.
Are these the problematic ones or the working fine ones?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: RichEdit and colors :: Reply by Natter]]> 2025-05-12T10:03:59-06:00 2025-05-12T10:03:59-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45665&p=279442#p279442
All of these libraries are working fine except for color rendering.
This is an RTF file that is the source for RichEdit
https://cloud.mail.ru/public/cEGm/dRTeTxmUu]]>

All of these libraries are working fine except for color rendering.
This is an RTF file that is the source for RichEdit
https://cloud.mail.ru/public/cEGm/dRTeTxmUu]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: RichEdit and colors :: Reply by Enrico Maria Giordano]]> 2025-05-12T10:59:55-06:00 2025-05-12T10:59:55-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45665&p=279447#p279447 <![CDATA[FiveWin for Harbour/xHarbour :: Re: RichEdit and colors :: Reply by Natter]]> 2025-05-12T12:45:55-06:00 2025-05-12T12:45:55-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45665&p=279456#p279456 This explains the lack of color in some of the cells.

I installed Riched20 version 5. But it did not help to solve this problem.]]>
This explains the lack of color in some of the cells.

I installed Riched20 version 5. But it did not help to solve this problem.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: RichEdit and colors :: Reply by Natter]]> 2025-05-14T13:47:09-06:00 2025-05-14T13:47:09-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45665&p=279534#p279534 <![CDATA[FiveWin for Harbour/xHarbour :: Re: RichEdit and colors :: Reply by cnavarro]]> 2025-05-15T04:31:34-06:00 2025-05-15T04:31:34-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45665&p=279540#p279540 Image
Create an RTF document and analyze the text to see the instructions to add to each cell in the table.]]>
Image
Create an RTF document and analyze the text to see the instructions to add to each cell in the table.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: RichEdit and colors :: Reply by Natter]]> 2025-05-15T08:06:23-06:00 2025-05-15T08:06:23-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45665&p=279549#p279549 only allows you to change the background color of the text.
Set the background color (fill) of a cell when creating a table (option Insert Table)
But I can no longer change the background color (fill) of the cell in the future.]]>
only allows you to change the background color of the text.
Set the background color (fill) of a cell when creating a table (option Insert Table)
But I can no longer change the background color (fill) of the cell in the future.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Hablando de un generador de Reportes para FWH :: Author jose_murugosa]]> 2025-05-14T06:59:07-06:00 2025-05-14T06:59:07-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45674&p=279512#p279512
Existe un generador de reportes en C++ bastante interesante, con barcodes, qrcodes y otros, con muchas prestaciones, llamado QtRPT Proyect, es Open Source, y parece funcionar bien.

Sería interesante considerar conectarlo con FWH, este generador de reportes tiene una interesante herramienta de diseño de reportes QRPTDesigner, y quizá sea más facil incorporarlo a FWH que un generador desarrollado en otro lenguaje.

Solo es una sugerencia, dado que como dije es de Código abierto y tiene 7 años de desarrollo, hasta 2019 que aparentemente se enfrió.

Pero parece tener un buen grado de desarrollo y andar bien.]]>

Existe un generador de reportes en C++ bastante interesante, con barcodes, qrcodes y otros, con muchas prestaciones, llamado QtRPT Proyect, es Open Source, y parece funcionar bien.

Sería interesante considerar conectarlo con FWH, este generador de reportes tiene una interesante herramienta de diseño de reportes QRPTDesigner, y quizá sea más facil incorporarlo a FWH que un generador desarrollado en otro lenguaje.

Solo es una sugerencia, dado que como dije es de Código abierto y tiene 7 años de desarrollo, hasta 2019 que aparentemente se enfrió.

Pero parece tener un buen grado de desarrollo y andar bien.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Hablando de un generador de Reportes para FWH :: Reply by Antonio Linares]]> 2025-05-14T07:18:12-06:00 2025-05-14T07:18:12-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45674&p=279518#p279518 viewtopic.php?p=279517#p279517]]> viewtopic.php?p=279517#p279517]]> <![CDATA[FiveWin for Harbour/xHarbour :: Re: Hablando de un generador de Reportes para FWH :: Reply by jose_murugosa]]> 2025-05-14T12:12:01-06:00 2025-05-14T12:12:01-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45674&p=279529#p279529 32 y 64 bits gratuito, que está en desarrollo por Cristóbal, creo que es una opción super interesante y mucha gente del foro ha usado fastreport alguna vez.

Yo estaría dispuesto a hacer una contribución apostando a ese proyecto. :D]]>
32 y 64 bits gratuito, que está en desarrollo por Cristóbal, creo que es una opción super interesante y mucha gente del foro ha usado fastreport alguna vez.

Yo estaría dispuesto a hacer una contribución apostando a ese proyecto. :D]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Hablando de un generador de Reportes para FWH :: Reply by Otto]]> 2025-05-14T12:34:34-06:00 2025-05-14T12:34:34-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45674&p=279531#p279531
May I ask what kind of reports you’re planning to create with it?

I find your reference to QtRPT and also to fastreport.net very interesting. Still, I believe that if you're starting fresh with a reporting tool today, you should seriously consider HTML-based reporting – especially when it comes to flexibility, portability, and integration into modern applications.


**Why HTML for reporting?**
**Advantages:**

✅ Platform-independent – works on any device with a browser (PC, tablet, mobile)

✅ Easy integration into web applications (e.g. PHP, mod\_Harbour, Node.js)

✅ Modern display options (charts, interactive tables, responsive layout)

✅ No deployment needed – reports can simply be accessed via a link

✅ Direct printing via browser or exportable as PDF

✅ Flexibly extendable (e.g. via JavaScript, CSS, or external libraries like Chart.js)

**Comparison Table**

| Feature | QtRPT / FastReport | HTML Reporting (e.g. domPDF, jsPDF, Live HTML) |
| ----------------------- | ------------------ | ---------------------------------------------- |
| Platform dependency | Windows-centric | Fully platform-independent |
| Web integration | Limited | Seamless (e.g. with PHP, Harbour, Node) |
| Interactivity | Low | High (filtering, sorting, live updates) |
| Print/PDF | Good | Good (via browser or HTML2PDF tools) |
| Learning curve / future | Partly legacy | Future-proof & widely adopted |
| Open Source | Yes | Many strong open-source solutions |
If you're already working with FWH and can use HTML via mod\_harbour or embedded browser components, I believe this would be the more sustainable approach.

What do you think?

Best regards]]>

May I ask what kind of reports you’re planning to create with it?

I find your reference to QtRPT and also to fastreport.net very interesting. Still, I believe that if you're starting fresh with a reporting tool today, you should seriously consider HTML-based reporting – especially when it comes to flexibility, portability, and integration into modern applications.


**Why HTML for reporting?**
**Advantages:**

✅ Platform-independent – works on any device with a browser (PC, tablet, mobile)

✅ Easy integration into web applications (e.g. PHP, mod\_Harbour, Node.js)

✅ Modern display options (charts, interactive tables, responsive layout)

✅ No deployment needed – reports can simply be accessed via a link

✅ Direct printing via browser or exportable as PDF

✅ Flexibly extendable (e.g. via JavaScript, CSS, or external libraries like Chart.js)

**Comparison Table**

| Feature | QtRPT / FastReport | HTML Reporting (e.g. domPDF, jsPDF, Live HTML) |
| ----------------------- | ------------------ | ---------------------------------------------- |
| Platform dependency | Windows-centric | Fully platform-independent |
| Web integration | Limited | Seamless (e.g. with PHP, Harbour, Node) |
| Interactivity | Low | High (filtering, sorting, live updates) |
| Print/PDF | Good | Good (via browser or HTML2PDF tools) |
| Learning curve / future | Partly legacy | Future-proof & widely adopted |
| Open Source | Yes | Many strong open-source solutions |
If you're already working with FWH and can use HTML via mod\_harbour or embedded browser components, I believe this would be the more sustainable approach.

What do you think?

Best regards]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Hablando de un generador de Reportes para FWH :: Reply by jose_murugosa]]> 2025-05-15T04:55:42-06:00 2025-05-15T04:55:42-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45674&p=279542#p279542
I haven't tried Mod-Harbour or web applications with FiveWin. To use this type of report, I'd have to go online, right?
Wouldn't that be a bit of a complex step?]]>

I haven't tried Mod-Harbour or web applications with FiveWin. To use this type of report, I'd have to go online, right?
Wouldn't that be a bit of a complex step?]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Hablando de un generador de Reportes para FWH :: Reply by cnavarro]]> 2025-05-15T05:07:33-06:00 2025-05-15T05:07:33-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45674&p=279543#p279543
jose_murugosa wrote: Wed May 14, 2025 6:12 pm Personalmente quisiera ver fastreport.net en 32 y 64 bits gratuito, que está en desarrollo por Cristóbal, creo que es una opción super interesante y mucha gente del foro ha usado fastreport alguna vez.

Yo estaría dispuesto a hacer una contribución apostando a ese proyecto. :D
Bien, recordar que existe un servidor en discord para este tema:
https://discord.gg/636uEet3
Dicho esto, es mi objetivo que para la primera semana de Junio publique la primera version, por fin, si no he podido antes, ya que quiero terminar las nuevas funcionalidades que estoy integrando en FivEdit, que como he dicho en el canal de discord de fivedit han de estar publicadas esta semana, y retome el tema de FastReport NET que es un proyecto que me ilusiona mucho y que tengo muy avanzado
Las principales novedades las ire poniendo en discord, aunque por supuesto, tambien hare mencion en este foro
Jose, este comentario ponlo en el canal de Discord, porque ya ha habido alguna sugerencia al respecto y podremos hablarlo mas profundamente

Okay, remember there's a Discord server for this topic:
https://discord.gg/636uEet3
That said, my goal is to finally publish the first version by the first week of June, if I haven't been able to before, since I want to finish the new features I'm integrating into FivEdit, which, as I said in the FiveDit Discord channel, should be published this week. I also want to get back to the FastReport NET project, which is a project I'm very excited about and well advanced.
I'll be posting the main updates on Discord, although of course, I'll also mention them in this forum.
Jose, please post this comment on the Discord channel, because there have already been some suggestions about it and we can discuss it in more depth.
Thanks]]>
jose_murugosa wrote: Wed May 14, 2025 6:12 pm Personalmente quisiera ver fastreport.net en 32 y 64 bits gratuito, que está en desarrollo por Cristóbal, creo que es una opción super interesante y mucha gente del foro ha usado fastreport alguna vez.

Yo estaría dispuesto a hacer una contribución apostando a ese proyecto. :D
Bien, recordar que existe un servidor en discord para este tema:
https://discord.gg/636uEet3
Dicho esto, es mi objetivo que para la primera semana de Junio publique la primera version, por fin, si no he podido antes, ya que quiero terminar las nuevas funcionalidades que estoy integrando en FivEdit, que como he dicho en el canal de discord de fivedit han de estar publicadas esta semana, y retome el tema de FastReport NET que es un proyecto que me ilusiona mucho y que tengo muy avanzado
Las principales novedades las ire poniendo en discord, aunque por supuesto, tambien hare mencion en este foro
Jose, este comentario ponlo en el canal de Discord, porque ya ha habido alguna sugerencia al respecto y podremos hablarlo mas profundamente

Okay, remember there's a Discord server for this topic:
https://discord.gg/636uEet3
That said, my goal is to finally publish the first version by the first week of June, if I haven't been able to before, since I want to finish the new features I'm integrating into FivEdit, which, as I said in the FiveDit Discord channel, should be published this week. I also want to get back to the FastReport NET project, which is a project I'm very excited about and well advanced.
I'll be posting the main updates on Discord, although of course, I'll also mention them in this forum.
Jose, please post this comment on the Discord channel, because there have already been some suggestions about it and we can discuss it in more depth.
Thanks]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Hablando de un generador de Reportes para FWH :: Reply by Otto]]> 2025-05-15T07:37:37-06:00 2025-05-15T07:37:37-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45674&p=279547#p279547 You could, for example, use Fivewin's WebView2 or a portable PHP setup.
If you're genuinely interested, I believe the first step would be to share your main requirement and maybe a sample—like invoices, labels, or simple business reports. Then I could take a look.
Best regards,
Otto]]>
You could, for example, use Fivewin's WebView2 or a portable PHP setup.
If you're genuinely interested, I believe the first step would be to share your main requirement and maybe a sample—like invoices, labels, or simple business reports. Then I could take a look.
Best regards,
Otto]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Hablando de un generador de Reportes para FWH :: Reply by jose_murugosa]]> 2025-05-15T08:57:26-06:00 2025-05-15T08:57:26-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45674&p=279551#p279551 That's very kind of you! Let me prepare some of what I need so you may have an idea.

I'm extremely busy, but I'll find time, as it's a topic of interest to me.]]>
That's very kind of you! Let me prepare some of what I need so you may have an idea.

I'm extremely busy, but I'll find time, as it's a topic of interest to me.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: xHarbour and latest FWH :: Author Randal]]> 2025-05-12T09:42:34-06:00 2025-05-12T09:42:34-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45666&p=279439#p279439
When I compile testdlg.prg in the \fwh\samples folder using xBuildW.exe the sample compiles however, when run it closes at ACTIVATE DIALOG with no errors or log file. (msginfo function works).

If I just switch back to FWH 2023.06 it compiles and opens fine.

I get the same results using the version of xHarbour I had or the one included with the latest FWH upgrade (xhb10291_xcc.zip).

What could I be doing wrong?

Thanks,
Randal]]>

When I compile testdlg.prg in the \fwh\samples folder using xBuildW.exe the sample compiles however, when run it closes at ACTIVATE DIALOG with no errors or log file. (msginfo function works).

If I just switch back to FWH 2023.06 it compiles and opens fine.

I get the same results using the version of xHarbour I had or the one included with the latest FWH upgrade (xhb10291_xcc.zip).

What could I be doing wrong?

Thanks,
Randal]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xHarbour and latest FWH :: Reply by Antonio Linares]]> 2025-05-12T10:45:59-06:00 2025-05-12T10:45:59-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45666&p=279445#p279445
In FWH 25.01 we had to remove support for GDI+ for xHarbour commercial as our GDI+ was no longer compatible with vc98 (the Microsoft compiler that we use for xcc compatibility).

If you go to FWH\samples and do buildxhb.bat tutor01 you will find many GDIP... unresolved externals.

If you place this code at the bottom then you can build it:

Code: Select all | Expand

FUNCTION GDIP_DRAWARROW()
   RETURN NIL

FUNCTION GDIP_DELETEIMAGE()
   RETURN NIL

FUNCTION GDIP_DELETEBRUSH()
   RETURN NIL

FUNCTION GDIP_COLORBRUSH()
   RETURN NIL

FUNCTION GDIP_IMAGEBRUSH()
   RETURN NIL

FUNCTION GDIP_DRAWTEXT()
   RETURN NIL

FUNCTION GDIP_HOLLOWTEXT()
   RETURN NIL

FUNCTION GDIP_SAYIMAGE()
   RETURN NIL

FUNCTION GDIP_RINGGRAD()
   RETURN NIL

FUNCTION GDIP_CLONEIMAGE()
   RETURN NIL

FUNCTION GDIP_GETHBITMAP()
   RETURN NIL

FUNCTION GDIP_FROMHBITMAP()
   RETURN NIL

FUNCTION GDIP_FROMRESOURCE()
   RETURN NIL

FUNCTION GDIP_IMAGEFROMFILE()
   RETURN NIL

FUNCTION GDIP_IMAGEFROMSTR()
   RETURN NIL

FUNCTION GDIP_IMAGEINFO()
   RETURN NIL

FUNCTION GDIP_ZOOM()
   RETURN NIL

FUNCTION GDIP_NEWALPHABMP()
   RETURN NIL

FUNCTION GDIP_SAVEIMAGE()
   RETURN NIL

FUNCTION GDIP_IMG2BLOB()
   RETURN NIL

FUNCTION GDIP_CROP()
   RETURN NIL

FUNCTION GDIP_ROTATE()
   RETURN NIL

FUNCTION GDIP_DRAWSHAPES()
   RETURN NIL

FUNCTION GDIP_FILLRECT()
   RETURN NIL

FUNCTION GDIP_GRAD()
   RETURN NIL

FUNCTION GDIP_PIE()
   RETURN NIL

FUNCTION GDIP_RATIO()
   RETURN NIL

FUNCTION GDIP_DRAWIMAGE()
   RETURN NIL

FUNCTION GDIP_FONTSTYLE()
   RETURN NIL

FUNCTION GDIPMESURETXT()
   RETURN NIL

FUNCTION GDIPLUSCAPTURERECTWND()
   RETURN NIL

FUNCTION GDIPLUSIMGTOIMG24()
   RETURN NIL

FUNCTION GDIPLUSIMAGECREATETHUMB()
   RETURN NIL

FUNCTION GDIPLUSIMAGETOCLIPBOARD()
   RETURN NIL

FUNCTION GDIPLUSHBITMAPTOCLIPBOARD()
   RETURN NIL

FUNCTION GDIPLUSHIGHQUALITY()
   RETURN NIL

FUNCTION GDIPLUSNORMALQUALITY()
   RETURN NIL

FUNCTION GDIPLUSDRAWLINE()
   RETURN NIL

FUNCTION GDIPLUSDRAWRECT()
   RETURN NIL

FUNCTION GDIPLUSDRAWELLIPSE()
   RETURN NIL

FUNCTION GDIPLUSDRAWARC()
   RETURN NIL

FUNCTION GDIPLUSDRAWPATH()
   RETURN NIL

FUNCTION GDIPLUSFILLPATH()
   RETURN NIL

FUNCTION GDIPLUSCLEARCOLOR()
   RETURN NIL

FUNCTION GDIPLUSDRAWTEXT()
   RETURN NIL

FUNCTION GDIPLUSSETSMOOTHINGGRAPHICS()
   RETURN NIL

FUNCTION GDIPLUSGRAPHTRASLATETRANSFORM()
   RETURN NIL

FUNCTION GDIPLUSGRAPHROTATETRANSFORM()
   RETURN NIL

FUNCTION GDIPLUSGRAPHSCALE()
   RETURN NIL

FUNCTION GDIPLUSNEWGRAPHICS()
   RETURN NIL

FUNCTION SETPAGEUNIT2PIXEL()
   RETURN NIL

FUNCTION GDIPLUSNEWGRAPHICSWND()
   RETURN NIL

FUNCTION GDIPLUSNEWGRAPHICSIMG()
   RETURN NIL

FUNCTION GDIPLUSGRAPHICSFROMIMG()
   RETURN NIL

FUNCTION GDIPLUSDELETEGRAPHICS()
   RETURN NIL

FUNCTION GDIPLUSDRAWIMAGE()
   RETURN NIL

FUNCTION GDIPLUSDRAWTEXTFONT()
   RETURN NIL

FUNCTION GDIPLUSDRAWTEXTLF()
   RETURN NIL

FUNCTION GDIPLUSISINREGION()
   RETURN NIL

FUNCTION GDIPLUSCREATEREGIONFROMGPATH()
   RETURN NIL

FUNCTION GDIPLUSDELETEPEN()
   RETURN NIL

FUNCTION GDIPLUSPENSETCLR()
   RETURN NIL

FUNCTION GDIPLUSALIGN()
   RETURN NIL

FUNCTION GDIPLUSPENSETLINEJOIN()
   RETURN NIL

FUNCTION GDIPLUSNOALIGN()
   RETURN NIL

FUNCTION GDIPLUSPENSIZE()
   RETURN NIL

FUNCTION GDIPLUSNEWPEN()
   RETURN NIL

FUNCTION GDIPLUSPENSTYLE()
   RETURN NIL

FUNCTION GDIPLUSNEWSOLIDBRUSH()
   RETURN NIL

FUNCTION GDIPLUSDELETEBRUSH()
   RETURN NIL

FUNCTION GDIPLUSNEWGRADIENTBRUSH()
   RETURN NIL

FUNCTION GDIPLUSANGLEGRADIENTBRUSH()
   RETURN NIL

FUNCTION GDIPLUSSTARTUP()
   RETURN NIL

FUNCTION GDIPLUSSHUTDOWN()
   RETURN NIL

FUNCTION GDIPLUSPATHADDARC()
   RETURN NIL

FUNCTION GDIPLUSPATHADDELLIPSE()
   RETURN NIL

FUNCTION GDIPLUSPATHADDLINE()
   RETURN NIL

FUNCTION GDIPLUSPATHADDRECTANGLE()
   RETURN NIL

FUNCTION GDIPLUSPATHCLOSEFIGURE()
   RETURN NIL

FUNCTION GDIPLUSPATHSTARTFIGURE()
   RETURN NIL

FUNCTION GDIPLUSROTATEPATH()
   RETURN NIL

FUNCTION GDIPLUSROTATECENTERPATH()
   RETURN NIL

FUNCTION GDIPLUSSCALEPATH()
   RETURN NIL

FUNCTION GDIPLUSTRANSLATEPATH()
   RETURN NIL

FUNCTION GDIPLUSCREATEPATH()
   RETURN NIL

FUNCTION GDIPLUSPATHADDSTRING()
   RETURN NIL

FUNCTION GDIPLUSDELETEPATH()
   RETURN NIL

FUNCTION GDIPLUSCREATEIMAGEFROMRES()
   RETURN NIL

FUNCTION GDIPLUSIMAGEMATRIXTOGRAY()
   RETURN NIL

FUNCTION GDIPLUSIMAGEPIXGETALPHA()
   RETURN NIL

FUNCTION GDIPLUSIMAGEPIXGETBLUE()
   RETURN NIL

FUNCTION GDIPLUSIMAGEGETPIXCOLOR()
   RETURN NIL

FUNCTION GDIPLUSPIXISCOLOR()
   RETURN NIL

FUNCTION GDIPLUSCREATEHBITMAPIMAGE()
   RETURN NIL

FUNCTION GDIPLUSIMAGEPIXGETGREEN()
   RETURN NIL

FUNCTION GDIPLUSGETHEIGHTBITMAP()
   RETURN NIL

FUNCTION GDIPLUSIMAGEPIXGETRED()
   RETURN NIL

FUNCTION GDIPLUSGETWIDTHBITMAP()
   RETURN NIL

FUNCTION GDIPLUSIMAGEIS32BITS()
   RETURN NIL

FUNCTION GDIPLUSIMAGEROTATEANGLE()
   RETURN NIL

FUNCTION GDIPLUSIMAGELOADPNGFROMSTR()
   RETURN NIL

FUNCTION GDIPLUSIMAGEROTATEFLIP()
   RETURN NIL

FUNCTION GDIPLUSIMAGESET32BITS()
   RETURN NIL

FUNCTION GDIPLUSIMAGESETPIXCOLOR()
   RETURN NIL

FUNCTION GDIPLUSIMAGEPIXTOGRAYCOLOR()
   RETURN NIL

FUNCTION GDIPLUSIMAGEMATRIXCUSTOM()
   RETURN NIL

FUNCTION GDIPLUSIMAGESETPIXHCOLOR()
   RETURN NIL

FUNCTION GDIPLUSPIXELCOLORTOALPHA()
   RETURN NIL

FUNCTION GDIPLUSIMAGESCALE()
   RETURN NIL

FUNCTION GDIPLUSIMAGELOADPNGFROMRESOURCES()
   RETURN NIL

FUNCTION GDIPLUSIMAGELOADCACHEDFILE()
   RETURN NIL

FUNCTION GDIPLUSIMAGESAVEQUALITY()
   RETURN NIL

FUNCTION GDIPLUSIMAGESAVE()
   RETURN NIL

FUNCTION GDIPLUSIMAGEDISPOSE()
   RETURN NIL

FUNCTION GDIPLUSIMAGERESIZE()
   RETURN NIL

FUNCTION GDIPLUSEMFTOJPG()
   RETURN NIL

FUNCTION GDIPLUSIMAGECROP()
   RETURN NIL

FUNCTION GDIPLUSEMFTOBMP()
   RETURN NIL

FUNCTION GDIPLUSLOADDIRECTIMAGE()
   RETURN NIL

FUNCTION GDIPLUSIMGGETFRAMECOUNT()
   RETURN NIL

FUNCTION GDIPLUSIMGGETFRAME()
   RETURN NIL

FUNCTION GDIPLUSBMPEMPTY()
   RETURN NIL   
Anyhow it seems as effectively there is a bug when showing a dialog. We are working to fix it.

Many thanks for your feedback and we apologize for the inconveniencies]]>

In FWH 25.01 we had to remove support for GDI+ for xHarbour commercial as our GDI+ was no longer compatible with vc98 (the Microsoft compiler that we use for xcc compatibility).

If you go to FWH\samples and do buildxhb.bat tutor01 you will find many GDIP... unresolved externals.

If you place this code at the bottom then you can build it:

Code: Select all | Expand

FUNCTION GDIP_DRAWARROW()
   RETURN NIL

FUNCTION GDIP_DELETEIMAGE()
   RETURN NIL

FUNCTION GDIP_DELETEBRUSH()
   RETURN NIL

FUNCTION GDIP_COLORBRUSH()
   RETURN NIL

FUNCTION GDIP_IMAGEBRUSH()
   RETURN NIL

FUNCTION GDIP_DRAWTEXT()
   RETURN NIL

FUNCTION GDIP_HOLLOWTEXT()
   RETURN NIL

FUNCTION GDIP_SAYIMAGE()
   RETURN NIL

FUNCTION GDIP_RINGGRAD()
   RETURN NIL

FUNCTION GDIP_CLONEIMAGE()
   RETURN NIL

FUNCTION GDIP_GETHBITMAP()
   RETURN NIL

FUNCTION GDIP_FROMHBITMAP()
   RETURN NIL

FUNCTION GDIP_FROMRESOURCE()
   RETURN NIL

FUNCTION GDIP_IMAGEFROMFILE()
   RETURN NIL

FUNCTION GDIP_IMAGEFROMSTR()
   RETURN NIL

FUNCTION GDIP_IMAGEINFO()
   RETURN NIL

FUNCTION GDIP_ZOOM()
   RETURN NIL

FUNCTION GDIP_NEWALPHABMP()
   RETURN NIL

FUNCTION GDIP_SAVEIMAGE()
   RETURN NIL

FUNCTION GDIP_IMG2BLOB()
   RETURN NIL

FUNCTION GDIP_CROP()
   RETURN NIL

FUNCTION GDIP_ROTATE()
   RETURN NIL

FUNCTION GDIP_DRAWSHAPES()
   RETURN NIL

FUNCTION GDIP_FILLRECT()
   RETURN NIL

FUNCTION GDIP_GRAD()
   RETURN NIL

FUNCTION GDIP_PIE()
   RETURN NIL

FUNCTION GDIP_RATIO()
   RETURN NIL

FUNCTION GDIP_DRAWIMAGE()
   RETURN NIL

FUNCTION GDIP_FONTSTYLE()
   RETURN NIL

FUNCTION GDIPMESURETXT()
   RETURN NIL

FUNCTION GDIPLUSCAPTURERECTWND()
   RETURN NIL

FUNCTION GDIPLUSIMGTOIMG24()
   RETURN NIL

FUNCTION GDIPLUSIMAGECREATETHUMB()
   RETURN NIL

FUNCTION GDIPLUSIMAGETOCLIPBOARD()
   RETURN NIL

FUNCTION GDIPLUSHBITMAPTOCLIPBOARD()
   RETURN NIL

FUNCTION GDIPLUSHIGHQUALITY()
   RETURN NIL

FUNCTION GDIPLUSNORMALQUALITY()
   RETURN NIL

FUNCTION GDIPLUSDRAWLINE()
   RETURN NIL

FUNCTION GDIPLUSDRAWRECT()
   RETURN NIL

FUNCTION GDIPLUSDRAWELLIPSE()
   RETURN NIL

FUNCTION GDIPLUSDRAWARC()
   RETURN NIL

FUNCTION GDIPLUSDRAWPATH()
   RETURN NIL

FUNCTION GDIPLUSFILLPATH()
   RETURN NIL

FUNCTION GDIPLUSCLEARCOLOR()
   RETURN NIL

FUNCTION GDIPLUSDRAWTEXT()
   RETURN NIL

FUNCTION GDIPLUSSETSMOOTHINGGRAPHICS()
   RETURN NIL

FUNCTION GDIPLUSGRAPHTRASLATETRANSFORM()
   RETURN NIL

FUNCTION GDIPLUSGRAPHROTATETRANSFORM()
   RETURN NIL

FUNCTION GDIPLUSGRAPHSCALE()
   RETURN NIL

FUNCTION GDIPLUSNEWGRAPHICS()
   RETURN NIL

FUNCTION SETPAGEUNIT2PIXEL()
   RETURN NIL

FUNCTION GDIPLUSNEWGRAPHICSWND()
   RETURN NIL

FUNCTION GDIPLUSNEWGRAPHICSIMG()
   RETURN NIL

FUNCTION GDIPLUSGRAPHICSFROMIMG()
   RETURN NIL

FUNCTION GDIPLUSDELETEGRAPHICS()
   RETURN NIL

FUNCTION GDIPLUSDRAWIMAGE()
   RETURN NIL

FUNCTION GDIPLUSDRAWTEXTFONT()
   RETURN NIL

FUNCTION GDIPLUSDRAWTEXTLF()
   RETURN NIL

FUNCTION GDIPLUSISINREGION()
   RETURN NIL

FUNCTION GDIPLUSCREATEREGIONFROMGPATH()
   RETURN NIL

FUNCTION GDIPLUSDELETEPEN()
   RETURN NIL

FUNCTION GDIPLUSPENSETCLR()
   RETURN NIL

FUNCTION GDIPLUSALIGN()
   RETURN NIL

FUNCTION GDIPLUSPENSETLINEJOIN()
   RETURN NIL

FUNCTION GDIPLUSNOALIGN()
   RETURN NIL

FUNCTION GDIPLUSPENSIZE()
   RETURN NIL

FUNCTION GDIPLUSNEWPEN()
   RETURN NIL

FUNCTION GDIPLUSPENSTYLE()
   RETURN NIL

FUNCTION GDIPLUSNEWSOLIDBRUSH()
   RETURN NIL

FUNCTION GDIPLUSDELETEBRUSH()
   RETURN NIL

FUNCTION GDIPLUSNEWGRADIENTBRUSH()
   RETURN NIL

FUNCTION GDIPLUSANGLEGRADIENTBRUSH()
   RETURN NIL

FUNCTION GDIPLUSSTARTUP()
   RETURN NIL

FUNCTION GDIPLUSSHUTDOWN()
   RETURN NIL

FUNCTION GDIPLUSPATHADDARC()
   RETURN NIL

FUNCTION GDIPLUSPATHADDELLIPSE()
   RETURN NIL

FUNCTION GDIPLUSPATHADDLINE()
   RETURN NIL

FUNCTION GDIPLUSPATHADDRECTANGLE()
   RETURN NIL

FUNCTION GDIPLUSPATHCLOSEFIGURE()
   RETURN NIL

FUNCTION GDIPLUSPATHSTARTFIGURE()
   RETURN NIL

FUNCTION GDIPLUSROTATEPATH()
   RETURN NIL

FUNCTION GDIPLUSROTATECENTERPATH()
   RETURN NIL

FUNCTION GDIPLUSSCALEPATH()
   RETURN NIL

FUNCTION GDIPLUSTRANSLATEPATH()
   RETURN NIL

FUNCTION GDIPLUSCREATEPATH()
   RETURN NIL

FUNCTION GDIPLUSPATHADDSTRING()
   RETURN NIL

FUNCTION GDIPLUSDELETEPATH()
   RETURN NIL

FUNCTION GDIPLUSCREATEIMAGEFROMRES()
   RETURN NIL

FUNCTION GDIPLUSIMAGEMATRIXTOGRAY()
   RETURN NIL

FUNCTION GDIPLUSIMAGEPIXGETALPHA()
   RETURN NIL

FUNCTION GDIPLUSIMAGEPIXGETBLUE()
   RETURN NIL

FUNCTION GDIPLUSIMAGEGETPIXCOLOR()
   RETURN NIL

FUNCTION GDIPLUSPIXISCOLOR()
   RETURN NIL

FUNCTION GDIPLUSCREATEHBITMAPIMAGE()
   RETURN NIL

FUNCTION GDIPLUSIMAGEPIXGETGREEN()
   RETURN NIL

FUNCTION GDIPLUSGETHEIGHTBITMAP()
   RETURN NIL

FUNCTION GDIPLUSIMAGEPIXGETRED()
   RETURN NIL

FUNCTION GDIPLUSGETWIDTHBITMAP()
   RETURN NIL

FUNCTION GDIPLUSIMAGEIS32BITS()
   RETURN NIL

FUNCTION GDIPLUSIMAGEROTATEANGLE()
   RETURN NIL

FUNCTION GDIPLUSIMAGELOADPNGFROMSTR()
   RETURN NIL

FUNCTION GDIPLUSIMAGEROTATEFLIP()
   RETURN NIL

FUNCTION GDIPLUSIMAGESET32BITS()
   RETURN NIL

FUNCTION GDIPLUSIMAGESETPIXCOLOR()
   RETURN NIL

FUNCTION GDIPLUSIMAGEPIXTOGRAYCOLOR()
   RETURN NIL

FUNCTION GDIPLUSIMAGEMATRIXCUSTOM()
   RETURN NIL

FUNCTION GDIPLUSIMAGESETPIXHCOLOR()
   RETURN NIL

FUNCTION GDIPLUSPIXELCOLORTOALPHA()
   RETURN NIL

FUNCTION GDIPLUSIMAGESCALE()
   RETURN NIL

FUNCTION GDIPLUSIMAGELOADPNGFROMRESOURCES()
   RETURN NIL

FUNCTION GDIPLUSIMAGELOADCACHEDFILE()
   RETURN NIL

FUNCTION GDIPLUSIMAGESAVEQUALITY()
   RETURN NIL

FUNCTION GDIPLUSIMAGESAVE()
   RETURN NIL

FUNCTION GDIPLUSIMAGEDISPOSE()
   RETURN NIL

FUNCTION GDIPLUSIMAGERESIZE()
   RETURN NIL

FUNCTION GDIPLUSEMFTOJPG()
   RETURN NIL

FUNCTION GDIPLUSIMAGECROP()
   RETURN NIL

FUNCTION GDIPLUSEMFTOBMP()
   RETURN NIL

FUNCTION GDIPLUSLOADDIRECTIMAGE()
   RETURN NIL

FUNCTION GDIPLUSIMGGETFRAMECOUNT()
   RETURN NIL

FUNCTION GDIPLUSIMGGETFRAME()
   RETURN NIL

FUNCTION GDIPLUSBMPEMPTY()
   RETURN NIL   
Anyhow it seems as effectively there is a bug when showing a dialog. We are working to fix it.

Many thanks for your feedback and we apologize for the inconveniencies]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xHarbour and latest FWH :: Reply by Antonio Linares]]> 2025-05-12T11:17:07-06:00 2025-05-12T11:17:07-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45666&p=279449#p279449

Code: Select all | Expand

#pragma BEGINDUMP

#include <Windows.h>

#undef SetWindowLongPtr

long int SetWindowLongPtr( HWND hWnd, int nIndex, long int dwNewLong )
{
   return SetWindowLong( hWnd, nIndex, ( LONG_PTR ) dwNewLong );
}

#pragma ENDDUMP   
]]>

Code: Select all | Expand

#pragma BEGINDUMP

#include <Windows.h>

#undef SetWindowLongPtr

long int SetWindowLongPtr( HWND hWnd, int nIndex, long int dwNewLong )
{
   return SetWindowLong( hWnd, nIndex, ( LONG_PTR ) dwNewLong );
}

#pragma ENDDUMP   
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xHarbour and latest FWH :: Reply by Randal]]> 2025-05-12T11:59:23-06:00 2025-05-12T11:59:23-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45666&p=279452#p279452
Thank you for your reply.

I am not getting any unresolved externals as I I had added these functions from another post I saw here on the forum.

I also added dummy functions for
xLINK: error: Unresolved external symbol '_HB_FUN_HB_GETFILESINZIP referenced from FiveHMX.lib(olefuncs.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_HB_UNZIPFILE referenced from FiveHMX.lib(olefuncs.obj)'.

I also included the latest xfw.lib I saw posted here recently on the forum.

This is a copy of xbuilder log.
Type: C >>>xhb.exe -o"testdlg.c" -m -n -p -q -gc0 -I"D:\FWH\include" -I"D:\xHarbour\include" -I"D:\xHarbour\include\w32" "D:\fwh\samples\testdlg.prg"<<<

xHarbour 1.3.2 Intl. (SimpLex) (Build 20250311)
Copyright 1999-2025, http://www.xharbour.org http://www.harbour-project.org/
Generating object output to 'testdlg.obj'...

Type: C >>>xhb.exe -o"dummy2.c" -m -n -p -q -gc0 -I"D:\FWH\include" -I"D:\xHarbour\include" -I"D:\xHarbour\include\w32" "dummy2.prg"<<<

xHarbour 1.3.2 Intl. (SimpLex) (Build 20250311)
Copyright 1999-2025, http://www.xharbour.org http://www.harbour-project.org/
Generating object output to 'dummy2.obj'...

Type: C >>>xlink.exe -NOEXPOBJ -MAP -FORCE:MULTIPLE -NOIMPLIB -subsystem:windows -UNMANGLE -LIBPATH:"D:\FWH\lib" -LIBPATH:"D:\xHarbour\lib" -LIBPATH:"D:\xHarbour\c_lib" -LIBPATH:"D:\xHarbour\c_lib\win" "testdlg.obj" "dummy2.obj" "D:\fwh\lib\xfw.lib" "FiveHCM.lib" "FiveHMX.lib" "OptG.lib" "xhb.lib" "dbf.lib" "nsx.lib" "ntx.lib" "cdx.lib" "rmdbfcdx.lib" "ct3comm.lib" crt.lib kernel32.lib user32.lib winspool.lib ole32.lib oleaut32.lib odbc32.lib odbccp32.lib uuid.lib wsock32.lib ws2_32.lib wininet.lib advapi32.lib shlwapi.lib msimg32.lib mpr.lib OleDlg.lib version.lib comctl32.lib comdlg32.lib gdi32.lib shell32.lib winmm.lib lz32.lib Netapi32.lib -out:"testdlg.exe"<<<

This is a copy of my xbuider .xbp file.
CINI =
C_OUTPUTFOLDER =
DEFFILE =
INCLUDEFOLDERS =
LAUTORUN =
LDEBUG = .F.
LGUI = .T.
LIBFOLDERS =
LMT = .F.
LNOAUTOFWH = .F.
LPRG_CLASSICDEBUG = .F.
LPRG_DEBUG = .F.
LUSEDLL = .F.
MAPFILE =
MYC_FLAGS =
MYDEFINES =
MYLINK_FLAGS =
MYPRG_FLAGS =
MYRC_FLAGS =
MYSLY_FLAGS =
OUTPUTFOLDER =
PRG_OUTPUTFOLDER =
RC_OUTPUTFOLDER =
RUNARGUMENTS =
SLY_OUTPUTFOLDER =
STARTIN =
TARGETFOLDER =

[D:\fwh\samples\testdlg.prg]
MYC_FLAGS =
MYDEFINES =
MYPRG_FLAGS =

[dummy2.prg]
MYC_FLAGS =
MYDEFINES =
MYPRG_FLAGS =

[D:\fwh\lib\xfw.lib]

This is the xbuild.windows.ini file:

[xHB]
Root = D:\xHarbour\
LibFolder = D:\xHarbour\lib\
Flags = -m -n -p -q -gc0
Exe = xhb.exe

[xCC]
Root = D:\xHarbour\
Compile Flags = -Ot
Link Flags = -NOEXPOBJ -MAP -FORCE:MULTIPLE

[FWH]
Root = D:\FWH\
LibFolder = D:\FWH\lib

[GUI]
Root =
LibFolder =

Can you or anyone confirm that building the testdlg.prg sample using xHarbour/xbuildw.exe with the latest FWH works ok? Maybe I have some kind of link, flag, or environment problem?

Thanks,
Randal]]>

Thank you for your reply.

I am not getting any unresolved externals as I I had added these functions from another post I saw here on the forum.

I also added dummy functions for
xLINK: error: Unresolved external symbol '_HB_FUN_HB_GETFILESINZIP referenced from FiveHMX.lib(olefuncs.obj)'.
xLINK: error: Unresolved external symbol '_HB_FUN_HB_UNZIPFILE referenced from FiveHMX.lib(olefuncs.obj)'.

I also included the latest xfw.lib I saw posted here recently on the forum.

This is a copy of xbuilder log.
Type: C >>>xhb.exe -o"testdlg.c" -m -n -p -q -gc0 -I"D:\FWH\include" -I"D:\xHarbour\include" -I"D:\xHarbour\include\w32" "D:\fwh\samples\testdlg.prg"<<<

xHarbour 1.3.2 Intl. (SimpLex) (Build 20250311)
Copyright 1999-2025, http://www.xharbour.org http://www.harbour-project.org/
Generating object output to 'testdlg.obj'...

Type: C >>>xhb.exe -o"dummy2.c" -m -n -p -q -gc0 -I"D:\FWH\include" -I"D:\xHarbour\include" -I"D:\xHarbour\include\w32" "dummy2.prg"<<<

xHarbour 1.3.2 Intl. (SimpLex) (Build 20250311)
Copyright 1999-2025, http://www.xharbour.org http://www.harbour-project.org/
Generating object output to 'dummy2.obj'...

Type: C >>>xlink.exe -NOEXPOBJ -MAP -FORCE:MULTIPLE -NOIMPLIB -subsystem:windows -UNMANGLE -LIBPATH:"D:\FWH\lib" -LIBPATH:"D:\xHarbour\lib" -LIBPATH:"D:\xHarbour\c_lib" -LIBPATH:"D:\xHarbour\c_lib\win" "testdlg.obj" "dummy2.obj" "D:\fwh\lib\xfw.lib" "FiveHCM.lib" "FiveHMX.lib" "OptG.lib" "xhb.lib" "dbf.lib" "nsx.lib" "ntx.lib" "cdx.lib" "rmdbfcdx.lib" "ct3comm.lib" crt.lib kernel32.lib user32.lib winspool.lib ole32.lib oleaut32.lib odbc32.lib odbccp32.lib uuid.lib wsock32.lib ws2_32.lib wininet.lib advapi32.lib shlwapi.lib msimg32.lib mpr.lib OleDlg.lib version.lib comctl32.lib comdlg32.lib gdi32.lib shell32.lib winmm.lib lz32.lib Netapi32.lib -out:"testdlg.exe"<<<

This is a copy of my xbuider .xbp file.
CINI =
C_OUTPUTFOLDER =
DEFFILE =
INCLUDEFOLDERS =
LAUTORUN =
LDEBUG = .F.
LGUI = .T.
LIBFOLDERS =
LMT = .F.
LNOAUTOFWH = .F.
LPRG_CLASSICDEBUG = .F.
LPRG_DEBUG = .F.
LUSEDLL = .F.
MAPFILE =
MYC_FLAGS =
MYDEFINES =
MYLINK_FLAGS =
MYPRG_FLAGS =
MYRC_FLAGS =
MYSLY_FLAGS =
OUTPUTFOLDER =
PRG_OUTPUTFOLDER =
RC_OUTPUTFOLDER =
RUNARGUMENTS =
SLY_OUTPUTFOLDER =
STARTIN =
TARGETFOLDER =

[D:\fwh\samples\testdlg.prg]
MYC_FLAGS =
MYDEFINES =
MYPRG_FLAGS =

[dummy2.prg]
MYC_FLAGS =
MYDEFINES =
MYPRG_FLAGS =

[D:\fwh\lib\xfw.lib]

This is the xbuild.windows.ini file:

[xHB]
Root = D:\xHarbour\
LibFolder = D:\xHarbour\lib\
Flags = -m -n -p -q -gc0
Exe = xhb.exe

[xCC]
Root = D:\xHarbour\
Compile Flags = -Ot
Link Flags = -NOEXPOBJ -MAP -FORCE:MULTIPLE

[FWH]
Root = D:\FWH\
LibFolder = D:\FWH\lib

[GUI]
Root =
LibFolder =

Can you or anyone confirm that building the testdlg.prg sample using xHarbour/xbuildw.exe with the latest FWH works ok? Maybe I have some kind of link, flag, or environment problem?

Thanks,
Randal]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xHarbour and latest FWH :: Reply by Antonio Linares]]> 2025-05-12T13:06:13-06:00 2025-05-12T13:06:13-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45666&p=279457#p279457
It is our bug. It was introduced from FWH 24.09 to FWH 24.10.

With FWH 24.09 it works fine. We are reviewing the changes from 24.09 to 24.10

This bug only shows with xHarbour commercial. With free xHarbour it works fine.

I am going to email you FWH 24.09 so you can confirm that it works fine for you too.

Many thanks for your help]]>

It is our bug. It was introduced from FWH 24.09 to FWH 24.10.

With FWH 24.09 it works fine. We are reviewing the changes from 24.09 to 24.10

This bug only shows with xHarbour commercial. With free xHarbour it works fine.

I am going to email you FWH 24.09 so you can confirm that it works fine for you too.

Many thanks for your help]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xHarbour and latest FWH :: Reply by Antonio Linares]]> 2025-05-13T02:34:41-06:00 2025-05-13T02:34:41-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45666&p=279465#p279465

Code: Select all | Expand

function GPF() 

   hb_memoWrit( "gpf.log", cCallStack( CRLF, 1 ) )

return nil

Code: Select all | Expand

#pragma BEGINDUMP

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

#undef SetWindowLongPtr

LONG WINAPI GPFHandler( PEXCEPTION_POINTERS exceptionInfo ) 
{
   hb_vmPushSymbol( hb_dynsymSymbol( hb_dynsymFindName( "GPF" ) ) );
   hb_vmPushNil();
   hb_vmDo( 0 );

   return EXCEPTION_EXECUTE_HANDLER; // Maneja la excepción y termina
}

unsigned int SetWindowLongPtr( HWND hWnd, int nIndex, long int dwNewLong )
{
   SetUnhandledExceptionFilter( GPFHandler );

   return SetWindowLong( hWnd, nIndex, ( LONG_PTR ) dwNewLong );
}

#pragma ENDDUMP   
]]>

Code: Select all | Expand

function GPF() 

   hb_memoWrit( "gpf.log", cCallStack( CRLF, 1 ) )

return nil

Code: Select all | Expand

#pragma BEGINDUMP

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

#undef SetWindowLongPtr

LONG WINAPI GPFHandler( PEXCEPTION_POINTERS exceptionInfo ) 
{
   hb_vmPushSymbol( hb_dynsymSymbol( hb_dynsymFindName( "GPF" ) ) );
   hb_vmPushNil();
   hb_vmDo( 0 );

   return EXCEPTION_EXECUTE_HANDLER; // Maneja la excepción y termina
}

unsigned int SetWindowLongPtr( HWND hWnd, int nIndex, long int dwNewLong )
{
   SetUnhandledExceptionFilter( GPFHandler );

   return SetWindowLong( hWnd, nIndex, ( LONG_PTR ) dwNewLong );
}

#pragma ENDDUMP   
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xHarbour and latest FWH :: Reply by Randal]]> 2025-05-13T10:02:08-06:00 2025-05-13T10:02:08-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45666&p=279485#p279485
Everything works ok with FWH 2024.09.

I added the above functions to testdlg.prg and tried again with 2025.01. The program closed with no message and no gpf.log file was created.

Thanks,
Randal Ferguson]]>

Everything works ok with FWH 2024.09.

I added the above functions to testdlg.prg and tried again with 2025.01. The program closed with no message and no gpf.log file was created.

Thanks,
Randal Ferguson]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xHarbour and latest FWH :: Reply by Antonio Linares]]> 2025-05-14T10:36:50-06:00 2025-05-14T10:36:50-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45666&p=279526#p279526
Bug located and fixed :)

I have emailed you a new FWH 25.04 build to test it

Many thanks for your feedback!]]>

Bug located and fixed :)

I have emailed you a new FWH 25.04 build to test it

Many thanks for your feedback!]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xHarbour and latest FWH :: Reply by Randal]]> 2025-05-15T09:49:34-06:00 2025-05-15T09:49:34-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45666&p=279553#p279553
Thank you for all your help and yes, the update works.

I did notice a difference in behavior when opening a mdi window.

In the Main function of the testmdi4.prg sample, I added the ON INIT clause to demonstrate what I'm talking about.

function Main()

local oBar

SET _3DLOOK ON

DEFINE WINDOW oWnd TITLE "MDIChilds from resources" MDI

DEFINE BUTTONBAR oBar _3D OF oWnd

DEFINE BUTTON OF oBar ACTION child() //( Child(), MsgInfo( oWnd:oWndClient:aWnd[ 1 ]:cCaption ) )

ACTIVATE WINDOW oWnd maximized ;
ON INIT ( MSGINFO("On Init") ) // Added

return nil

When compiled with 202306, the mid window and buttonbar are displayed, then the msginfo dialog. When compiled with 2025.04 the msginfo dialog is displayed first and when you click Ok the mdi window and buttonbar are displayed.

My app opens with a mdi window and button bar and then I use the ON INIT clause to open a login dialog. Normally, the mdi window and button bar are displayed and then the login dialog on top of that. Now, the login dialog is displayed by itself as per the above example.

How can I achieve the previous behavior?

Thanks,
Randal Ferguson]]>

Thank you for all your help and yes, the update works.

I did notice a difference in behavior when opening a mdi window.

In the Main function of the testmdi4.prg sample, I added the ON INIT clause to demonstrate what I'm talking about.

function Main()

local oBar

SET _3DLOOK ON

DEFINE WINDOW oWnd TITLE "MDIChilds from resources" MDI

DEFINE BUTTONBAR oBar _3D OF oWnd

DEFINE BUTTON OF oBar ACTION child() //( Child(), MsgInfo( oWnd:oWndClient:aWnd[ 1 ]:cCaption ) )

ACTIVATE WINDOW oWnd maximized ;
ON INIT ( MSGINFO("On Init") ) // Added

return nil

When compiled with 202306, the mid window and buttonbar are displayed, then the msginfo dialog. When compiled with 2025.04 the msginfo dialog is displayed first and when you click Ok the mdi window and buttonbar are displayed.

My app opens with a mdi window and button bar and then I use the ON INIT clause to open a login dialog. Normally, the mdi window and button bar are displayed and then the login dialog on top of that. Now, the login dialog is displayed by itself as per the above example.

How can I achieve the previous behavior?

Thanks,
Randal Ferguson]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xHarbour and latest FWH :: Reply by Antonio Linares]]> 2025-05-15T09:55:48-06:00 2025-05-15T09:55:48-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45666&p=279554#p279554
You can do it this way:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

local oBar

SET _3DLOOK ON

DEFINE WINDOW oWnd TITLE "MDIChilds from resources" MDI
oWnd:Maximize()
oWnd:Show()

DEFINE BUTTONBAR oBar _3D OF oWnd

DEFINE BUTTON OF oBar // ACTION child() //( Child(), MsgInfo( oWnd:oWndClient:aWnd[ 1 ]:cCaption ) )

ACTIVATE WINDOW oWnd maximized ;
   ON INIT ( MSGINFO("On Init") ) // Added

return nil
]]>

You can do it this way:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

local oBar

SET _3DLOOK ON

DEFINE WINDOW oWnd TITLE "MDIChilds from resources" MDI
oWnd:Maximize()
oWnd:Show()

DEFINE BUTTONBAR oBar _3D OF oWnd

DEFINE BUTTON OF oBar // ACTION child() //( Child(), MsgInfo( oWnd:oWndClient:aWnd[ 1 ]:cCaption ) )

ACTIVATE WINDOW oWnd maximized ;
   ON INIT ( MSGINFO("On Init") ) // Added

return nil
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xHarbour and latest FWH :: Reply by karinha]]> 2025-05-15T10:32:20-06:00 2025-05-15T10:32:20-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45666&p=279555#p279555

Code: Select all | Expand

// C:\FWH\SAMPLES\MDISHOW.PRG

#include "FiveWin.ch"

STATIC oWnd, oWndChild

FUNCTION Main()

   LOCAL oBar, oChild, oSalida

   SET _3DLOOK ON

   DEFINE WINDOW oWnd TITLE "MDIChilds from resources" MDI

   DEFINE BUTTONBAR oBar BUTTONSIZE 50, 50 _3DLOOK TOP OF oWnd 2015

   DEFINE BUTTON oChild OF OBAR PROMPT "Child()"                             ;
      MESSAGE "Child"                                                        ;
      ACTION( Child() )                                                      ;
      TOOLTIP "Child()"                                                      ;
      NOBORDER GROUP

   DEFINE BUTTON oSalida OF OBAR PROMPT "Exit"                               ;
      MESSAGE "Salida"                                                       ;
      ACTION( oWnd:End() )                                                   ;
      TOOLTIP "Salida"                                                       ;
      NOBORDER GROUP

   ACTIVATE WINDOW oWnd MAXIMIZED ;
      ON INIT( oWnd:oMenu:End(), MsgInfo( "On Init" ) )

RETURN NIL

STATIC FUNCTION Child()

   LOCAL cTitle

   cTitle := ( oWnd:cCaption )

   DEFINE WINDOW oWndChild MDICHILD FROM 0, 0 TO 32, 100 OF oWnd TITLE cTitle

   ACTIVATE WINDOW oWndChild

RETURN NIL

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

Code: Select all | Expand

// C:\FWH\SAMPLES\MDISHOW.PRG

#include "FiveWin.ch"

STATIC oWnd, oWndChild

FUNCTION Main()

   LOCAL oBar, oChild, oSalida

   SET _3DLOOK ON

   DEFINE WINDOW oWnd TITLE "MDIChilds from resources" MDI

   DEFINE BUTTONBAR oBar BUTTONSIZE 50, 50 _3DLOOK TOP OF oWnd 2015

   DEFINE BUTTON oChild OF OBAR PROMPT "Child()"                             ;
      MESSAGE "Child"                                                        ;
      ACTION( Child() )                                                      ;
      TOOLTIP "Child()"                                                      ;
      NOBORDER GROUP

   DEFINE BUTTON oSalida OF OBAR PROMPT "Exit"                               ;
      MESSAGE "Salida"                                                       ;
      ACTION( oWnd:End() )                                                   ;
      TOOLTIP "Salida"                                                       ;
      NOBORDER GROUP

   ACTIVATE WINDOW oWnd MAXIMIZED ;
      ON INIT( oWnd:oMenu:End(), MsgInfo( "On Init" ) )

RETURN NIL

STATIC FUNCTION Child()

   LOCAL cTitle

   cTitle := ( oWnd:cCaption )

   DEFINE WINDOW oWndChild MDICHILD FROM 0, 0 TO 32, 100 OF oWnd TITLE cTitle

   ACTIVATE WINDOW oWndChild

RETURN NIL

// FIN / END
Regards, saludos.]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: xHarbour and latest FWH :: Reply by Randal]]> 2025-05-15T10:41:56-06:00 2025-05-15T10:41:56-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45666&p=279556#p279556
Best Regards,
Randal]]>

Best Regards,
Randal]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Latest xHarbour Commercial and FWH :: Author Randal]]> 2025-05-15T10:44:32-06:00 2025-05-15T10:44:32-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45679&p=279557#p279557
Getting the following unresolved externals

xLINK: error: Unresolved external symbol '_HB_FUN_HB_HGET referenced from (Test.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_global_init_mem referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_global_cleanup referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_slist_free_all referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_setopt referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_mime_free referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_cleanup referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_reset referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_duphandle referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_init referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_pause referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_perform referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_send referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_recv referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_mime_init referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_mime_addpart referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_mime_name referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_mime_filedata referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_slist_append referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_getinfo referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_escape referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_free referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_unescape referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_version referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_version_info referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_strerror referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_getdate referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_escape referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_unescape referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: fatal error: 29 unresolved external(s).

Thanks,
Randal]]>

Getting the following unresolved externals

xLINK: error: Unresolved external symbol '_HB_FUN_HB_HGET referenced from (Test.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_global_init_mem referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_global_cleanup referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_slist_free_all referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_setopt referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_mime_free referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_cleanup referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_reset referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_duphandle referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_init referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_pause referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_perform referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_send referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_recv referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_mime_init referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_mime_addpart referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_mime_name referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_mime_filedata referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_slist_append referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_getinfo referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_escape referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_free referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_unescape referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_version referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_version_info referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_easy_strerror referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_getdate referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_escape referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: error: Unresolved external symbol '__imp__curl_unescape referenced from hbcurl.lib(hbcurl.obj)'.

xLINK: fatal error: 29 unresolved external(s).

Thanks,
Randal]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Latest xHarbour Commercial and FWH :: Reply by Enrico Maria Giordano]]> 2025-05-15T12:34:08-06:00 2025-05-15T12:34:08-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45679&p=279558#p279558

Code: Select all | Expand

hbcurl.lib
libcurl.lib
]]>

Code: Select all | Expand

hbcurl.lib
libcurl.lib
]]>
<![CDATA[FiveWin for Harbour/xHarbour :: Re: Latest xHarbour Commercial and FWH :: Reply by Antonio Linares]]> 2025-05-15T13:03:00-06:00 2025-05-15T13:03:00-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45679&p=279559#p279559 <![CDATA[FiveWin for Harbour/xHarbour :: Re: Latest xHarbour Commercial and FWH :: Reply by Randal]]> 2025-05-15T13:28:26-06:00 2025-05-15T13:28:26-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=3&t=45679&p=279560#p279560
xLINK: fatal error: Corrupt library: 'D:\FWH\lib\libcurl.lib'.

Thanks,
Randal]]>

xLINK: fatal error: Corrupt library: 'D:\FWH\lib\libcurl.lib'.

Thanks,
Randal]]>
<![CDATA[mod_harbour :: Re: tool for documentation :: Reply by Otto]]> 2025-05-01T02:23:25-06:00 2025-05-01T02:23:25-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=45&t=45376&p=279288#p279288 The documentation tool has been greatly enhanced. There’s now a search with filters in the TreeView and a content area that supports text highlighting. A fast full-text search covers the entire topic range. With a single click, a PDF can be generated directly from the content. Videos can also be embedded—especially useful in documentation such as home construction, where video content is becoming increasingly important. Additionally, content can be linked via QR code.

Shown here are notes taken during the installation of the Ubuntu PC for local AI applications. Having had no prior experience with Ubuntu, it was both exciting and surprising to see how much local AI can do right out of the box.
Best regards,
Otto
Image]]>
The documentation tool has been greatly enhanced. There’s now a search with filters in the TreeView and a content area that supports text highlighting. A fast full-text search covers the entire topic range. With a single click, a PDF can be generated directly from the content. Videos can also be embedded—especially useful in documentation such as home construction, where video content is becoming increasingly important. Additionally, content can be linked via QR code.

Shown here are notes taken during the installation of the Ubuntu PC for local AI applications. Having had no prior experience with Ubuntu, it was both exciting and surprising to see how much local AI can do right out of the box.
Best regards,
Otto
Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: ID mariadb :: Author jair]]> 2025-04-16T09:20:26-06:00 2025-04-16T09:20:26-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45627&p=279012#p279012 <![CDATA[FiveWin para Harbour/xHarbour :: Re: ID mariadb :: Reply by cmsoft]]> 2025-04-16T09:43:10-06:00 2025-04-16T09:43:10-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45627&p=279014#p279014 Desde donde queres cambiarlos? Desde un programa Fivewin o desde la misma base de datos?
Si es desde la base de datos, puedes hacerlo simplemente modifcando la estructura de la tabla así.

Code: Select all | Expand

ALTER TABLE `mibase`.`mitabla`  AUTO_INCREMENT=500;
Esto altera el numero del autoincremental al numero que tu desees.
Si por el contrario, lo que quieres hacer es correr los autoincrementales que tiene una tabla a un numero mas grande puedes hacer:

Code: Select all | Expand

UPDATE mitabla SET id = id +60 ORDER BY id DESC
Esto pondrá todos los autoincrementales con su valor mas 60. El order by desc es necesario para que empiece a correr desde el ultimo, sino dará duplicado.
Espero sea eso lo que preguntabas, sino explica el caso y vemos como podemos ayudar]]>
Desde donde queres cambiarlos? Desde un programa Fivewin o desde la misma base de datos?
Si es desde la base de datos, puedes hacerlo simplemente modifcando la estructura de la tabla así.

Code: Select all | Expand

ALTER TABLE `mibase`.`mitabla`  AUTO_INCREMENT=500;
Esto altera el numero del autoincremental al numero que tu desees.
Si por el contrario, lo que quieres hacer es correr los autoincrementales que tiene una tabla a un numero mas grande puedes hacer:

Code: Select all | Expand

UPDATE mitabla SET id = id +60 ORDER BY id DESC
Esto pondrá todos los autoincrementales con su valor mas 60. El order by desc es necesario para que empiece a correr desde el ultimo, sino dará duplicado.
Espero sea eso lo que preguntabas, sino explica el caso y vemos como podemos ayudar]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: ID mariadb :: Reply by jair]]> 2025-04-16T11:07:40-06:00 2025-04-16T11:07:40-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45627&p=279015#p279015 <![CDATA[FiveWin para Harbour/xHarbour :: Re: ButtonBmp() Bordes? :: Reply by karinha]]> 2025-04-17T10:20:48-06:00 2025-04-17T10:20:48-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45617&p=279026#p279026
https://imgur.com/CZenNiU

Image

Gracias, tks.

Regards, saludos.]]>

https://imgur.com/CZenNiU

Image

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Borrar registros de una tabla :: Author acuellar]]> 2025-04-19T08:12:33-06:00 2025-04-19T08:12:33-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45630&p=279046#p279046
Lo hago así:

Code: Select all | Expand

cCOD:="123"
oSql:=oCn:RowSet( "SELECT * FROM  DATOS WHERE CODIGO = ? ORDER BY CODIGO",{cCOD})
oSql:GoTop()
Do While !oSql:Eof()
   oSql:Delete()
   oSql:Skip()
Enddo
No siempre borra todos :(

Existe otra manera de borrar sin recorrer toda la tabla filtrada?
Intenté con oSQL:ZAP() pero borra toda la tabla y lo que necesito es que borre lo filtrado]]>

Lo hago así:

Code: Select all | Expand

cCOD:="123"
oSql:=oCn:RowSet( "SELECT * FROM  DATOS WHERE CODIGO = ? ORDER BY CODIGO",{cCOD})
oSql:GoTop()
Do While !oSql:Eof()
   oSql:Delete()
   oSql:Skip()
Enddo
No siempre borra todos :(

Existe otra manera de borrar sin recorrer toda la tabla filtrada?
Intenté con oSQL:ZAP() pero borra toda la tabla y lo que necesito es que borre lo filtrado]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Borrar registros de una tabla :: Reply by Enrico Maria Giordano]]> 2025-04-19T09:03:39-06:00 2025-04-19T09:03:39-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45630&p=279047#p279047

Code: Select all | Expand

DELETE FROM DATOS WHERE CODIGO = '123'
]]>

Code: Select all | Expand

DELETE FROM DATOS WHERE CODIGO = '123'
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Borrar registros de una tabla :: Reply by Enrico Maria Giordano]]> 2025-04-19T09:05:39-06:00 2025-04-19T09:05:39-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45630&p=279048#p279048

Code: Select all | Expand

"DELETE FROM DATOS WHERE CODIGO = '" + cCod + "'"
]]>

Code: Select all | Expand

"DELETE FROM DATOS WHERE CODIGO = '" + cCod + "'"
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Borrar registros de una tabla :: Reply by acuellar]]> 2025-04-19T09:27:08-06:00 2025-04-19T09:27:08-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45630&p=279049#p279049
Thanks Enrico]]>

Thanks Enrico]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Borrar registros de una tabla :: Reply by sysctrl2]]> 2025-04-21T09:16:56-06:00 2025-04-21T09:16:56-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45630&p=279080#p279080

Code: Select all | Expand

FUNCTION testDelete()
   LOCAL cTabla := "datos" //%1
   LOCAL cCod := "123"     //%2
   LOCAL cQry := ""

   TEXT INTO cQry
      DELETE FROM %1
      WHERE codigo=%2
   ENDTEXT

   cQry := StrFormat( cQry, cTabla, ClipValue2SQL(cCod) )
   oCon:Execute( cQry )

RETURN (NIL)

]]>

Code: Select all | Expand

FUNCTION testDelete()
   LOCAL cTabla := "datos" //%1
   LOCAL cCod := "123"     //%2
   LOCAL cQry := ""

   TEXT INTO cQry
      DELETE FROM %1
      WHERE codigo=%2
   ENDTEXT

   cQry := StrFormat( cQry, cTabla, ClipValue2SQL(cCod) )
   oCon:Execute( cQry )

RETURN (NIL)

]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Lentitud al abrir las tablas :: Author abelcervantes]]> 2025-04-21T15:26:22-06:00 2025-04-21T15:26:22-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45636&p=279084#p279084
Tengo el problema que el proceso para abrir las tablas es muy lento.

FWCONNECT oCn HOST c_SQLHost USER c_SQLUsuar PASSWORD c_SQLPassw DB c_SQLBase

oTab := oCn:RowSet( 'select * from pedidos order by numero' )
oTPediDt := oCn:RowSet( 'select * from pedid_dt where numero = ? order by numero', { 0 } )

Ese proceso a veces tarda 10 segundos, en el mejor de los casos 5 segundos.
Espero sus sabios consejos.]]>

Tengo el problema que el proceso para abrir las tablas es muy lento.

FWCONNECT oCn HOST c_SQLHost USER c_SQLUsuar PASSWORD c_SQLPassw DB c_SQLBase

oTab := oCn:RowSet( 'select * from pedidos order by numero' )
oTPediDt := oCn:RowSet( 'select * from pedid_dt where numero = ? order by numero', { 0 } )

Ese proceso a veces tarda 10 segundos, en el mejor de los casos 5 segundos.
Espero sus sabios consejos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Lentitud al abrir las tablas :: Reply by sysctrl2]]> 2025-04-21T15:33:15-06:00 2025-04-21T15:33:15-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45636&p=279085#p279085 -usar LIMIT 1 en la busqueda
-crear indices en los campos llave]]>
-usar LIMIT 1 en la busqueda
-crear indices en los campos llave]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: emoticons e smiles en un get son posibles? :: Reply by karinha]]> 2025-04-18T07:16:58-06:00 2025-04-18T07:16:58-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45609&p=279041#p279041
https://en.wikipedia.org/wiki/List_of_emoticons

Regards, saludos.]]>

https://en.wikipedia.org/wiki/List_of_emoticons

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: emoticons e smiles en un get son posibles? :: Reply by cnavarro]]> 2025-04-19T20:58:06-06:00 2025-04-19T20:58:06-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45609&p=279053#p279053
karinha wrote: Mon Apr 07, 2025 1:09 pm
cnavarro wrote: Mon Apr 07, 2025 12:23 pm Estimado Joao
En los says, msginfo, etc. si es posible, pero en los gets, como bien sabes, todas las aplicaciones para incluirlo en un campo de tipo input ( get en harbour/fw ) usan un boton para que el usuario seleccione el emoji que desea, imagino que será para evitar tener que validar/analizar lo que se ha introducido y buscar las cadenas unicode que dan lugar al emoji
Tengo que hacer alguna prueba y te comento
Gracias amados maestro.

Regards, saludos.
Image]]>
karinha wrote: Mon Apr 07, 2025 1:09 pm
cnavarro wrote: Mon Apr 07, 2025 12:23 pm Estimado Joao
En los says, msginfo, etc. si es posible, pero en los gets, como bien sabes, todas las aplicaciones para incluirlo en un campo de tipo input ( get en harbour/fw ) usan un boton para que el usuario seleccione el emoji que desea, imagino que será para evitar tener que validar/analizar lo que se ha introducido y buscar las cadenas unicode que dan lugar al emoji
Tengo que hacer alguna prueba y te comento
Gracias amados maestro.

Regards, saludos.
Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: emoticons e smiles en un get son posibles? :: Reply by karinha]]> 2025-04-21T09:04:35-06:00 2025-04-21T09:04:35-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45609&p=279079#p279079
https://www.fontyukle.net/downloadfont/Emoticons

No funciona con SEGOE UI EMOJI, creo que el que tengo instalado no está completo, ¿donde puedo descargar el SEGOE UI EMOJI completo?

Code: Select all | Expand

// C:\FWH\SAMPLES\EMOJI.PRG

#include "FiveWin.Ch"

FUNCTION Main()

   LOCAL oDlg, oGet1, oGet2, oGet3, oGet4, nVar2 := 0, nVar3 := 0, ;
         dVar4 := Date(), oFont, oSay
   LOCAL cEmoj := Space( 100 )

   FW_SetUnicode( .T. )

   cEmoj := "Emoji:   8-) - }:-)  :angry: @};-                                                                    "

   // DEFINE FONT oFont NAME "Segoe UI Emoji" SIZE 0, -14 // No funciona

   // Link: https://www.fontyukle.net/downloadfont/Emoticons
   DEFINE FONT oFont NAME "Emoticons"         SIZE 0, -14 BOLD // Funciona

   DEFINE DIALOG oDlg FROM 0, 0 TO 400, 400 PIXEL

   @ 15, 15 GET oGet1 VAR cEmoj SIZE 200, 16 OF oDlg PIXEL FONT oFont

   @ 40, 15 GET oGet2 VAR nVar2 PICTURE "99999" SIZE 50, 12 OF oDlg PIXEL

   @ 65, 15 GET oGet3 VAR nVar3 PICTURE "99999.99" SIZE 50, 12 OF oDlg PIXEL right

   @ 90, 15 GET oSay  VAR cEmoj SIZE 150, 15 OF oDlg PIXEL FONT oFont NOBORDER

   ACTIVATE DIALOG oDlg CENTERED

RETURN NIL

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

https://www.fontyukle.net/downloadfont/Emoticons

No funciona con SEGOE UI EMOJI, creo que el que tengo instalado no está completo, ¿donde puedo descargar el SEGOE UI EMOJI completo?

Code: Select all | Expand

// C:\FWH\SAMPLES\EMOJI.PRG

#include "FiveWin.Ch"

FUNCTION Main()

   LOCAL oDlg, oGet1, oGet2, oGet3, oGet4, nVar2 := 0, nVar3 := 0, ;
         dVar4 := Date(), oFont, oSay
   LOCAL cEmoj := Space( 100 )

   FW_SetUnicode( .T. )

   cEmoj := "Emoji:   8-) - }:-)  :angry: @};-                                                                    "

   // DEFINE FONT oFont NAME "Segoe UI Emoji" SIZE 0, -14 // No funciona

   // Link: https://www.fontyukle.net/downloadfont/Emoticons
   DEFINE FONT oFont NAME "Emoticons"         SIZE 0, -14 BOLD // Funciona

   DEFINE DIALOG oDlg FROM 0, 0 TO 400, 400 PIXEL

   @ 15, 15 GET oGet1 VAR cEmoj SIZE 200, 16 OF oDlg PIXEL FONT oFont

   @ 40, 15 GET oGet2 VAR nVar2 PICTURE "99999" SIZE 50, 12 OF oDlg PIXEL

   @ 65, 15 GET oGet3 VAR nVar3 PICTURE "99999.99" SIZE 50, 12 OF oDlg PIXEL right

   @ 90, 15 GET oSay  VAR cEmoj SIZE 150, 15 OF oDlg PIXEL FONT oFont NOBORDER

   ACTIVATE DIALOG oDlg CENTERED

RETURN NIL

// FIN / END
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: emoticons e smiles en un get son posibles? :: Reply by cnavarro]]> 2025-04-21T14:25:03-06:00 2025-04-21T14:25:03-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45609&p=279082#p279082 pero he probado

Code: Select all | Expand

// No funciona
DEFINE FONT oFont NAME "Segoe UI Emoji Normal" SIZE 0, -14
]]>
pero he probado

Code: Select all | Expand

// No funciona
DEFINE FONT oFont NAME "Segoe UI Emoji Normal" SIZE 0, -14
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: emoticons e smiles en un get son posibles? :: Reply by karinha]]> 2025-04-22T04:51:03-06:00 2025-04-22T04:51:03-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45609&p=279092#p279092 https://github.com/thedemons/merge_colo ... guiemj.ttf

NO FUNCIONA!

Code: Select all | Expand

// C:\FWH\SAMPLES\EMOJI.PRG

#include "FiveWin.Ch"

FUNCTION Main()

   LOCAL oDlg, oGet1, oGet2, oGet3, oGet4, nVar2 := 0, nVar3 := 0, ;
         dVar4 := Date(), oFont, oSay
   LOCAL cEmoj := Space( 100 )

   FW_SetUnicode( .T. )

   cEmoj := "Emoji:   8-) - }:-)  :angry: @};-                                                                    "

   // https://github.com/thedemons/merge_color_emoji_font/blob/main/seguiemj.ttf
   DEFINE FONT oFont NAME "Segoe UI Emoji Normal" SIZE 0, -14 // No funciona

   // Link: https://www.fontyukle.net/downloadfont/Emoticons
   // DEFINE FONT oFont NAME "Emoticons"         SIZE 0, -14 BOLD // Funciona

   DEFINE DIALOG oDlg FROM 0, 0 TO 400, 400 PIXEL

   @ 15, 15 GET oGet1 VAR cEmoj SIZE 200, 16 OF oDlg PIXEL FONT oFont

   @ 40, 15 GET oGet2 VAR nVar2 PICTURE "99999" SIZE 50, 12 OF oDlg PIXEL

   @ 65, 15 GET oGet3 VAR nVar3 PICTURE "99999.99" SIZE 50, 12 OF oDlg PIXEL right

   @ 90, 15 GET oSay  VAR cEmoj SIZE 150, 15 OF oDlg PIXEL FONT oFont NOBORDER

   ACTIVATE DIALOG oDlg CENTERED

   oFont:End()

RETURN NIL

// FIN / END
Regards, saludos.]]>
https://github.com/thedemons/merge_colo ... guiemj.ttf

NO FUNCIONA!

Code: Select all | Expand

// C:\FWH\SAMPLES\EMOJI.PRG

#include "FiveWin.Ch"

FUNCTION Main()

   LOCAL oDlg, oGet1, oGet2, oGet3, oGet4, nVar2 := 0, nVar3 := 0, ;
         dVar4 := Date(), oFont, oSay
   LOCAL cEmoj := Space( 100 )

   FW_SetUnicode( .T. )

   cEmoj := "Emoji:   8-) - }:-)  :angry: @};-                                                                    "

   // https://github.com/thedemons/merge_color_emoji_font/blob/main/seguiemj.ttf
   DEFINE FONT oFont NAME "Segoe UI Emoji Normal" SIZE 0, -14 // No funciona

   // Link: https://www.fontyukle.net/downloadfont/Emoticons
   // DEFINE FONT oFont NAME "Emoticons"         SIZE 0, -14 BOLD // Funciona

   DEFINE DIALOG oDlg FROM 0, 0 TO 400, 400 PIXEL

   @ 15, 15 GET oGet1 VAR cEmoj SIZE 200, 16 OF oDlg PIXEL FONT oFont

   @ 40, 15 GET oGet2 VAR nVar2 PICTURE "99999" SIZE 50, 12 OF oDlg PIXEL

   @ 65, 15 GET oGet3 VAR nVar3 PICTURE "99999.99" SIZE 50, 12 OF oDlg PIXEL right

   @ 90, 15 GET oSay  VAR cEmoj SIZE 150, 15 OF oDlg PIXEL FONT oFont NOBORDER

   ACTIVATE DIALOG oDlg CENTERED

   oFont:End()

RETURN NIL

// FIN / END
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: emoticons e smiles en un get son posibles? :: Reply by cnavarro]]> 2025-04-22T04:55:13-06:00 2025-04-22T04:55:13-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45609&p=279094#p279094 <![CDATA[FiveWin para Harbour/xHarbour :: Re: emoticons e smiles en un get son posibles? :: Reply by karinha]]> 2025-04-22T05:01:28-06:00 2025-04-22T05:01:28-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45609&p=279096#p279096
cnavarro wrote: Tue Apr 22, 2025 10:55 am No, ya te lo he mencionado en mi post anterior
Este funciona, pero todos los emojis son BLANCOS y NEGROS, terrible. jajajajajaja.

https://www.fontyukle.net/downloadfont/Emoticons

No importa, solo fue para probar. Gracias.

Regards, saludos.]]>
cnavarro wrote: Tue Apr 22, 2025 10:55 am No, ya te lo he mencionado en mi post anterior
Este funciona, pero todos los emojis son BLANCOS y NEGROS, terrible. jajajajajaja.

https://www.fontyukle.net/downloadfont/Emoticons

No importa, solo fue para probar. Gracias.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Consulta sobre Xbrowse :: Author jose_murugosa]]> 2025-04-22T07:36:49-06:00 2025-04-22T07:36:49-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45639&p=279102#p279102 En algunos casos cuando hago un xbrowse de un recordset o array, me aparece arriba una fila como de excel A,B,C,D,E..... por cada columna del array o rowset.
La pregunta es porque no me doy cuenta cual es la diferencia con aquellos en que no sale, ¿que me está faltando para evitar esta fila?

Gracias desde ya por vuestra ayuda.]]>
En algunos casos cuando hago un xbrowse de un recordset o array, me aparece arriba una fila como de excel A,B,C,D,E..... por cada columna del array o rowset.
La pregunta es porque no me doy cuenta cual es la diferencia con aquellos en que no sale, ¿que me está faltando para evitar esta fila?

Gracias desde ya por vuestra ayuda.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Consulta sobre Xbrowse :: Reply by cnavarro]]> 2025-04-22T08:16:27-06:00 2025-04-22T08:16:27-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45639&p=279107#p279107 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Consulta sobre Xbrowse :: Reply by jose_murugosa]]> 2025-04-22T09:45:32-06:00 2025-04-22T09:45:32-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45639&p=279115#p279115
jose_murugosa wrote: Tue Apr 22, 2025 1:36 pm Lo más seguro que es una consulta tonta, pero ...
En algunos casos cuando hago un xbrowse de un recordset o array, me aparece arriba una fila como de excel A,B,C,D,E..... por cada columna del array o rowset.
La pregunta es porque no me doy cuenta cual es la diferencia con aquellos en que no sale, ¿que me está faltando para evitar esta fila?

Gracias desde ya por vuestra ayuda.

Gracias por tu respuesta Cristóbal, creo que no me expresé bien, me refiero que cuando genero la excel a partir de la grilla, me pone una primera fila del excel con las letras A,B,C,D...
NO EN EL BROWSE SINO EN LA EXCEL QUE GENERO A PARTIR DEL MISMO.

adjunto imagen:

Image]]>
jose_murugosa wrote: Tue Apr 22, 2025 1:36 pm Lo más seguro que es una consulta tonta, pero ...
En algunos casos cuando hago un xbrowse de un recordset o array, me aparece arriba una fila como de excel A,B,C,D,E..... por cada columna del array o rowset.
La pregunta es porque no me doy cuenta cual es la diferencia con aquellos en que no sale, ¿que me está faltando para evitar esta fila?

Gracias desde ya por vuestra ayuda.

Gracias por tu respuesta Cristóbal, creo que no me expresé bien, me refiero que cuando genero la excel a partir de la grilla, me pone una primera fila del excel con las letras A,B,C,D...
NO EN EL BROWSE SINO EN LA EXCEL QUE GENERO A PARTIR DEL MISMO.

adjunto imagen:

Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Consulta sobre Xbrowse :: Reply by cnavarro]]> 2025-04-22T10:00:46-06:00 2025-04-22T10:00:46-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45639&p=279116#p279116 Por lo que veo en tu imagen, que antes no me había fijado bien, al crearte el Excel, te pone como titulos de las columnas que genera los headers de las columnas que tuvieras definidos en el xbrowse, al no tener tu headers definidos xbrowse te asigna "A", "B", ..., etc. que es justo lo que te aparece al crear la hoja excel]]> Por lo que veo en tu imagen, que antes no me había fijado bien, al crearte el Excel, te pone como titulos de las columnas que genera los headers de las columnas que tuvieras definidos en el xbrowse, al no tener tu headers definidos xbrowse te asigna "A", "B", ..., etc. que es justo lo que te aparece al crear la hoja excel]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Consulta sobre Xbrowse :: Reply by jose_murugosa]]> 2025-04-23T04:30:14-06:00 2025-04-23T04:30:14-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45639&p=279131#p279131
cnavarro wrote: Tue Apr 22, 2025 4:00 pm Y tiene headers personalizados tu xbrowse del que obtiene los datos ?, o son esos los headers "A", "B", etc
Por lo que veo en tu imagen, que antes no me había fijado bien, al crearte el Excel, te pone como titulos de las columnas que genera los headers de las columnas que tuvieras definidos en el xbrowse, al no tener tu headers definidos xbrowse te asigna "A", "B", ..., etc. que es justo lo que te aparece al crear la hoja excel
Ah, claro, eso debe ser, muchas gracias Cristóbal, como dije....'lo mas seguro es que se trata de una pregunta tonta' :D]]>
cnavarro wrote: Tue Apr 22, 2025 4:00 pm Y tiene headers personalizados tu xbrowse del que obtiene los datos ?, o son esos los headers "A", "B", etc
Por lo que veo en tu imagen, que antes no me había fijado bien, al crearte el Excel, te pone como titulos de las columnas que genera los headers de las columnas que tuvieras definidos en el xbrowse, al no tener tu headers definidos xbrowse te asigna "A", "B", ..., etc. que es justo lo que te aparece al crear la hoja excel
Ah, claro, eso debe ser, muchas gracias Cristóbal, como dije....'lo mas seguro es que se trata de una pregunta tonta' :D]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: España: Normativa sancionadora sistemas informáticos :: Reply by FiveWiDi]]> 2025-04-20T11:45:42-06:00 2025-04-20T11:45:42-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=40705&p=279072#p279072
A ver...
Estoy intentando encontrar la ley/reglamento/real decreto/loquesea en donde se vislumbre como se puede anular una factura.

Si Ustedes, hoy 20/04/2025 deben anular una factura por que se ha hecho mal. ¿Cómo lo hacen?

Muchas gracias,]]>

A ver...
Estoy intentando encontrar la ley/reglamento/real decreto/loquesea en donde se vislumbre como se puede anular una factura.

Si Ustedes, hoy 20/04/2025 deben anular una factura por que se ha hecho mal. ¿Cómo lo hacen?

Muchas gracias,]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: España: Normativa sancionadora sistemas informáticos :: Reply by Verhoven]]> 2025-04-21T04:56:54-06:00 2025-04-21T04:56:54-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=40705&p=279078#p279078 <![CDATA[FiveWin para Harbour/xHarbour :: Re: España: Normativa sancionadora sistemas informáticos :: Reply by paquitohm]]> 2025-04-21T09:35:23-06:00 2025-04-21T09:35:23-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=40705&p=279081#p279081
Si por anular te refieres a borrar (delete) un registro como se borra de una base de datos no se puede. Debes de generar una factura nueva que rectifique la erronea. El término rectificar no se refiere al significado intuitivo que tenemos de modificar. No es modificar. Es generar un nuevo registro enlazado con el original erroneo que en el conjunto de operaciones lo que hace es "rectificar" la factura original erronea. La aeat no quiere que borres nada, todo se queda grabado, permitiendo en una revisión poder ir hacia atrás per secula seculorum.
A riesgo de estar equivocado, no lo veo yo así. La anulación como operacion existe y es perfectamente válida, no ahora, sino desde siempre. Incluso se puede borrar en la base de datos quedando el hueco de la factura.

Ahora bien ¿ En qué condiciones se puede hacer esto ? Pues cuando el cliente te compra, le expides la factura y te dice que desiste de la compra y que no se lleva ni mercancia ni factura. Ahí, IMHO, tiene cabida la anulación. Ahora bien (bis) la agencia dice que de estas facturas anuladas no deberían haber muchas y cada uno se tome el "deberían" como quiera :roll:

Salu2

PD. La generación del xml siempre fue lo fácil. Lo otro es lo complicado]]>
Si por anular te refieres a borrar (delete) un registro como se borra de una base de datos no se puede. Debes de generar una factura nueva que rectifique la erronea. El término rectificar no se refiere al significado intuitivo que tenemos de modificar. No es modificar. Es generar un nuevo registro enlazado con el original erroneo que en el conjunto de operaciones lo que hace es "rectificar" la factura original erronea. La aeat no quiere que borres nada, todo se queda grabado, permitiendo en una revisión poder ir hacia atrás per secula seculorum.
A riesgo de estar equivocado, no lo veo yo así. La anulación como operacion existe y es perfectamente válida, no ahora, sino desde siempre. Incluso se puede borrar en la base de datos quedando el hueco de la factura.

Ahora bien ¿ En qué condiciones se puede hacer esto ? Pues cuando el cliente te compra, le expides la factura y te dice que desiste de la compra y que no se lleva ni mercancia ni factura. Ahí, IMHO, tiene cabida la anulación. Ahora bien (bis) la agencia dice que de estas facturas anuladas no deberían haber muchas y cada uno se tome el "deberían" como quiera :roll:

Salu2

PD. La generación del xml siempre fue lo fácil. Lo otro es lo complicado]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: España: Normativa sancionadora sistemas informáticos :: Reply by FiveWiDi]]> 2025-04-21T14:49:20-06:00 2025-04-21T14:49:20-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=40705&p=279083#p279083
Y Veri*factu se lo come con patatas.

Veri*factu parece ser que está para que se le informe de la actividad que se desarrolla entorno a la facturación, después tu haz lo que quieras que si las huellas no coinciden (y Hacienda pierde el control), ya iran a por ti.

Volviendo a la anulación.
Veri*factu la contempla.
Han dejado toda la responsabilidad a los usuarios que no son 'asesores fiscales'.
Los desarrolladores debemos permitir lo que dice la ley/reglamento, y Veri*factu permite anular.
La acción de facturar la hace el usuario, el desarrollador pone los medios que cumplen la ley/reglamento.
Es un "marrón".

Personalmente creo que hay casos que deben ser anulaciones:
-un cliente que tiene 3 empresas y se le ha facturado a la que no toca.
Por comodidad le haría una rectificativa, pero no es correcto y el cliente me lo puede exigir.

El problema está en cómo validar/controlar estos casos.]]>

Y Veri*factu se lo come con patatas.

Veri*factu parece ser que está para que se le informe de la actividad que se desarrolla entorno a la facturación, después tu haz lo que quieras que si las huellas no coinciden (y Hacienda pierde el control), ya iran a por ti.

Volviendo a la anulación.
Veri*factu la contempla.
Han dejado toda la responsabilidad a los usuarios que no son 'asesores fiscales'.
Los desarrolladores debemos permitir lo que dice la ley/reglamento, y Veri*factu permite anular.
La acción de facturar la hace el usuario, el desarrollador pone los medios que cumplen la ley/reglamento.
Es un "marrón".

Personalmente creo que hay casos que deben ser anulaciones:
-un cliente que tiene 3 empresas y se le ha facturado a la que no toca.
Por comodidad le haría una rectificativa, pero no es correcto y el cliente me lo puede exigir.

El problema está en cómo validar/controlar estos casos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: España: Normativa sancionadora sistemas informáticos :: Reply by quim_]]> 2025-04-24T02:28:08-06:00 2025-04-24T02:28:08-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=40705&p=279147#p279147
Pregunta
Revisando las FAQ del SII que indican e intentando aplicar a la lógica VeriFactu

Ejemplo 1: Disminución de la base imponible, Opcion 2 :
La modificación por sustitución supondría emitir una factura con base imponible de -1000 € y una factura rectificativa en la que se indicará que la base imponible es de 800 €.
* 1a. Factura, TipoFactura = F1
Desglose IVA: se indicará el importe que se rectifica con signo contrario (base imponible: (-1.000), cuota repercutida (-210)
* 2a. Factura, TipoFactura = Rx
TipoRectificativa = S
Desglose IVA: se indicará que la base imponible es de 800, cuota repercutida 168

Pueden indicar la diferencia entre aplicar lo anterior y lo siguiente :
* 1a. Anulacion de factura. Se emite factura por parte del SIF en negativo, pero se informa a VeriFactu como registro de anulación, no de alta (F1)
* 2a. Se emite una nueva factura, como alta inicial (F1) con los datos correctos
Respuesta
El procedimiento sería el mismo que el realizado en el SII. A pesar de que comúnmente se hable de anular una factura cuando estamos emitiendo una factura de abono o negativa para contrarrestar una anterior emitida con errores, lo que realmente se está realizando es emitir una nueva factura de tipo F1 con importes negativos.

Por lo cual, en VERIFACTU se realizaría el mismo proceso que en el SII:

1. Emisión de factura con importes negativos. Su registro de facturación será una alta inicial de tipo F1 con los importes negativos que correspondan.

2. Emisión de factura rectificativa. Su registro de facturación será una alta inicial de tipo RX con los importes que correspondan.


La generación de un RF de anulación está pensado como una forma ágil de dejar constancia que una factura expedida por error (siempre y cuando el ROF no obligue a actuar de otra forma, mediante facturas rectificativas) no debería haberse expedido y, por tanto, que dicha factura no tiene validez y no ha de tenerse en cuenta. Esta forma de actuar (cuando sea posible) no implica la expedición de nuevas facturas que "contrarresten o compensen" la factura expedida por error. No obstante, siempre prima el procedimiento establecido por el reglamento de obligaciones de facturación (un posible factor a tener en cuenta también es si la factura que se plantea anular se ha entregado o no al cliente). Por lo tanto, las anulaciones deberían ser casos excepcionales.
Creo que hay 2 temas a considerar
  1. El tratamiento que damos en nuestro SIF/ERP, es decir, cualquier factura emitida, entendiento por emitida cuando ya se ha numerado/fechado y no son modificables. El reglamento de facturación especifica que hay que conservar las facturas incluso si son erróneas
  2. La información enviada a la AEAT, que puede ser en forma de registro en negativo o de anulación. Para determinar que sea una anulación, personalmente voy a considerar estos 2 criterios :
    1. No se ha impreso/generado PDF, no se ha entregado al cliente
    2. No ha transcurrido más de 1 dia desde la fecha factura a la fecha de anulación. Es decir, la anulacion sólo para casos de errores inmediatos (el cliente rechaza la venta en el mismo momento de realizarse, la venta nunca ha existido, etc) casos muy puntuales y excepcionales
Por otra parte, el tema es bastante ambiguo y en mi opinión van a dejar la puerta bastante abierta para proceder de diversas formas. Mis clientes y creo que en general, no entienden demasiado bien la rectificación de 2 pasos que propone la AEAT y funcionan con el cargo/abono, si una factura es incorrecta, se genera otra en negativo que la anula y una nueva con los datos correctos. Supongo que publicarán pronto unas FAQ con toda la casuística acumulada con las preguntas que hemos realizado los usuarios, veremos ...]]>

Pregunta
Revisando las FAQ del SII que indican e intentando aplicar a la lógica VeriFactu

Ejemplo 1: Disminución de la base imponible, Opcion 2 :
La modificación por sustitución supondría emitir una factura con base imponible de -1000 € y una factura rectificativa en la que se indicará que la base imponible es de 800 €.
* 1a. Factura, TipoFactura = F1
Desglose IVA: se indicará el importe que se rectifica con signo contrario (base imponible: (-1.000), cuota repercutida (-210)
* 2a. Factura, TipoFactura = Rx
TipoRectificativa = S
Desglose IVA: se indicará que la base imponible es de 800, cuota repercutida 168

Pueden indicar la diferencia entre aplicar lo anterior y lo siguiente :
* 1a. Anulacion de factura. Se emite factura por parte del SIF en negativo, pero se informa a VeriFactu como registro de anulación, no de alta (F1)
* 2a. Se emite una nueva factura, como alta inicial (F1) con los datos correctos
Respuesta
El procedimiento sería el mismo que el realizado en el SII. A pesar de que comúnmente se hable de anular una factura cuando estamos emitiendo una factura de abono o negativa para contrarrestar una anterior emitida con errores, lo que realmente se está realizando es emitir una nueva factura de tipo F1 con importes negativos.

Por lo cual, en VERIFACTU se realizaría el mismo proceso que en el SII:

1. Emisión de factura con importes negativos. Su registro de facturación será una alta inicial de tipo F1 con los importes negativos que correspondan.

2. Emisión de factura rectificativa. Su registro de facturación será una alta inicial de tipo RX con los importes que correspondan.


La generación de un RF de anulación está pensado como una forma ágil de dejar constancia que una factura expedida por error (siempre y cuando el ROF no obligue a actuar de otra forma, mediante facturas rectificativas) no debería haberse expedido y, por tanto, que dicha factura no tiene validez y no ha de tenerse en cuenta. Esta forma de actuar (cuando sea posible) no implica la expedición de nuevas facturas que "contrarresten o compensen" la factura expedida por error. No obstante, siempre prima el procedimiento establecido por el reglamento de obligaciones de facturación (un posible factor a tener en cuenta también es si la factura que se plantea anular se ha entregado o no al cliente). Por lo tanto, las anulaciones deberían ser casos excepcionales.
Creo que hay 2 temas a considerar
  1. El tratamiento que damos en nuestro SIF/ERP, es decir, cualquier factura emitida, entendiento por emitida cuando ya se ha numerado/fechado y no son modificables. El reglamento de facturación especifica que hay que conservar las facturas incluso si son erróneas
  2. La información enviada a la AEAT, que puede ser en forma de registro en negativo o de anulación. Para determinar que sea una anulación, personalmente voy a considerar estos 2 criterios :
    1. No se ha impreso/generado PDF, no se ha entregado al cliente
    2. No ha transcurrido más de 1 dia desde la fecha factura a la fecha de anulación. Es decir, la anulacion sólo para casos de errores inmediatos (el cliente rechaza la venta en el mismo momento de realizarse, la venta nunca ha existido, etc) casos muy puntuales y excepcionales
Por otra parte, el tema es bastante ambiguo y en mi opinión van a dejar la puerta bastante abierta para proceder de diversas formas. Mis clientes y creo que en general, no entienden demasiado bien la rectificación de 2 pasos que propone la AEAT y funcionan con el cargo/abono, si una factura es incorrecta, se genera otra en negativo que la anula y una nueva con los datos correctos. Supongo que publicarán pronto unas FAQ con toda la casuística acumulada con las preguntas que hemos realizado los usuarios, veremos ...]]>
<![CDATA[FiveWin para Harbour/xHarbour :: xbrowse() problema con los decimales al enviar a Excel :: Author CARLOS ATUNCAR]]> 2025-04-22T15:25:39-06:00 2025-04-22T15:25:39-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45640&p=279122#p279122 ejemplo
443.4784 en excel sale 443.4800

alguna solución hay que configurar algo]]>
ejemplo
443.4784 en excel sale 443.4800

alguna solución hay que configurar algo]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: xbrowse() problema con los decimales al enviar a Excel :: Reply by cnavarro]]> 2025-04-22T20:42:49-06:00 2025-04-22T20:42:49-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45640&p=279124#p279124 <![CDATA[FiveWin para Harbour/xHarbour :: Re: xbrowse() problema con los decimales al enviar a Excel :: Reply by CARLOS ATUNCAR]]> 2025-04-23T21:04:45-06:00 2025-04-23T21:04:45-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45640&p=279143#p279143

Code: Select all | Expand

cMsg := "SELECT mesv,t AS Aux,vou,cuenta,SUM(debes) AS debe,SUM(habers) AS haber "
cMsg += "FROM voucher_mov "
cMsg += "WHERE empresa=? AND periodo=? AND mesv=? AND ((debes != TRUNCATE(debes, 2)) OR (habers != TRUNCATE(habers, 2))) "
cMsg += "GROUP BY mesv,t,vou,cuenta "
cMsg += "ORDER BY mesv,t,vou"

cQry := aServer:RowSet( cMsg ,{op:empresa,op:ano,op:mes} )

WaitOff( @oWait )
If cQry:lastrec()>0
   XBrowse( cQry,"ANALISIS DE ASIENTOS CON DECIMALES > 2 DIGITOS" )
Else
   MsgStop( "NO EXISTE OPERACIONES A REVISAR","STOP")
EndIf
cQry:End()
]]>

Code: Select all | Expand

cMsg := "SELECT mesv,t AS Aux,vou,cuenta,SUM(debes) AS debe,SUM(habers) AS haber "
cMsg += "FROM voucher_mov "
cMsg += "WHERE empresa=? AND periodo=? AND mesv=? AND ((debes != TRUNCATE(debes, 2)) OR (habers != TRUNCATE(habers, 2))) "
cMsg += "GROUP BY mesv,t,vou,cuenta "
cMsg += "ORDER BY mesv,t,vou"

cQry := aServer:RowSet( cMsg ,{op:empresa,op:ano,op:mes} )

WaitOff( @oWait )
If cQry:lastrec()>0
   XBrowse( cQry,"ANALISIS DE ASIENTOS CON DECIMALES > 2 DIGITOS" )
Else
   MsgStop( "NO EXISTE OPERACIONES A REVISAR","STOP")
EndIf
cQry:End()
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: xbrowse() problema con los decimales al enviar a Excel :: Reply by ertan]]> 2025-04-23T23:19:38-06:00 2025-04-23T23:19:38-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45640&p=279144#p279144
viewtopic.php?t=45548&start=15

I think you are facing the same problem,

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

viewtopic.php?t=45548&start=15

I think you are facing the same problem,

Best regards,
Ertan Hakan ÖZTÜRK
ertan_ozturk@yahoo.com]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: xbrowse() problema con los decimales al enviar a Excel :: Reply by Antonio Linares]]> 2025-04-24T00:10:32-06:00 2025-04-24T00:10:32-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45640&p=279145#p279145
CARLOS ATUNCAR wrote: Tue Apr 22, 2025 9:25 pm tengo una pantalla en XBROWSE() donde hay dos columnas numericas con 4 posiciones en los decimales y al enviarlo al excel lo envia con 4 posiciones en los decimales pero redondeados a 2
ejemplo
443.4784 en excel sale 443.4800

alguna solución hay que configurar algo
Estas usando SET DECIMALS TO 4 ?]]>
CARLOS ATUNCAR wrote: Tue Apr 22, 2025 9:25 pm tengo una pantalla en XBROWSE() donde hay dos columnas numericas con 4 posiciones en los decimales y al enviarlo al excel lo envia con 4 posiciones en los decimales pero redondeados a 2
ejemplo
443.4784 en excel sale 443.4800

alguna solución hay que configurar algo
Estas usando SET DECIMALS TO 4 ?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: xbrowse() problema con los decimales al enviar a Excel :: Reply by cnavarro]]> 2025-04-24T08:38:23-06:00 2025-04-24T08:38:23-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45640&p=279154#p279154
CARLOS ATUNCAR wrote: Thu Apr 24, 2025 3:04 am Saludos cNavarro este es mi codigo usado

Code: Select all | Expand

cMsg := "SELECT mesv,t AS Aux,vou,cuenta,SUM(debes) AS debe,SUM(habers) AS haber "
cMsg += "FROM voucher_mov "
cMsg += "WHERE empresa=? AND periodo=? AND mesv=? AND ((debes != TRUNCATE(debes, 2)) OR (habers != TRUNCATE(habers, 2))) "
cMsg += "GROUP BY mesv,t,vou,cuenta "
cMsg += "ORDER BY mesv,t,vou"

cQry := aServer:RowSet( cMsg ,{op:empresa,op:ano,op:mes} )

WaitOff( @oWait )
If cQry:lastrec()>0
   XBrowse( cQry,"ANALISIS DE ASIENTOS CON DECIMALES > 2 DIGITOS" )
Else
   MsgStop( "NO EXISTE OPERACIONES A REVISAR","STOP")
EndIf
cQry:End()
Oye, el uso de la function TRUNCATE no te produce justo lo que dices que te ocurre?
o solo pretendes que te aparezcan los dos primeros decimales sin redondearlo, me refiero a usar esa function TRUNCATE ?]]>
CARLOS ATUNCAR wrote: Thu Apr 24, 2025 3:04 am Saludos cNavarro este es mi codigo usado

Code: Select all | Expand

cMsg := "SELECT mesv,t AS Aux,vou,cuenta,SUM(debes) AS debe,SUM(habers) AS haber "
cMsg += "FROM voucher_mov "
cMsg += "WHERE empresa=? AND periodo=? AND mesv=? AND ((debes != TRUNCATE(debes, 2)) OR (habers != TRUNCATE(habers, 2))) "
cMsg += "GROUP BY mesv,t,vou,cuenta "
cMsg += "ORDER BY mesv,t,vou"

cQry := aServer:RowSet( cMsg ,{op:empresa,op:ano,op:mes} )

WaitOff( @oWait )
If cQry:lastrec()>0
   XBrowse( cQry,"ANALISIS DE ASIENTOS CON DECIMALES > 2 DIGITOS" )
Else
   MsgStop( "NO EXISTE OPERACIONES A REVISAR","STOP")
EndIf
cQry:End()
Oye, el uso de la function TRUNCATE no te produce justo lo que dices que te ocurre?
o solo pretendes que te aparezcan los dos primeros decimales sin redondearlo, me refiero a usar esa function TRUNCATE ?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: xbrowse() problema con los decimales al enviar a Excel :: Reply by CARLOS ATUNCAR]]> 2025-04-24T17:44:41-06:00 2025-04-24T17:44:41-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45640&p=279165#p279165 <![CDATA[FiveWin para Harbour/xHarbour :: Re: xbrowse() problema con los decimales al enviar a Excel :: Reply by CARLOS ATUNCAR]]> 2025-04-24T17:46:03-06:00 2025-04-24T17:46:03-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45640&p=279166#p279166
Antonio Linares wrote: Thu Apr 24, 2025 6:10 am
CARLOS ATUNCAR wrote: Tue Apr 22, 2025 9:25 pm tengo una pantalla en XBROWSE() donde hay dos columnas numericas con 4 posiciones en los decimales y al enviarlo al excel lo envia con 4 posiciones en los decimales pero redondeados a 2
ejemplo
443.4784 en excel sale 443.4800

alguna solución hay que configurar algo
Estas usando SET DECIMALS TO 4 ?
no lo estoy usando pruebo haber si se soluciona]]>
Antonio Linares wrote: Thu Apr 24, 2025 6:10 am
CARLOS ATUNCAR wrote: Tue Apr 22, 2025 9:25 pm tengo una pantalla en XBROWSE() donde hay dos columnas numericas con 4 posiciones en los decimales y al enviarlo al excel lo envia con 4 posiciones en los decimales pero redondeados a 2
ejemplo
443.4784 en excel sale 443.4800

alguna solución hay que configurar algo
Estas usando SET DECIMALS TO 4 ?
no lo estoy usando pruebo haber si se soluciona]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: xbrowse() problema con los decimales al enviar a Excel :: Reply by cnavarro]]> 2025-04-24T20:01:02-06:00 2025-04-24T20:01:02-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45640&p=279169#p279169 viewtopic.php?p=279144#p279144]]> viewtopic.php?p=279144#p279144]]> <![CDATA[FiveWin para Harbour/xHarbour :: VISUAL FIVEWIN :: Author claudio.leiva]]> 2025-04-24T10:36:45-06:00 2025-04-24T10:36:45-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45643&p=279157#p279157 o algo parecido
no es indispensable que FIVEWIN lo tubiera.. ??

quedo atto. a los comentarios
saludos]]>
o algo parecido
no es indispensable que FIVEWIN lo tubiera.. ??

quedo atto. a los comentarios
saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: VISUAL FIVEWIN :: Reply by karinha]]> 2025-04-24T11:26:06-06:00 2025-04-24T11:26:06-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45643&p=279158#p279158
http://visualfivewin.blogspot.com/

Regards, saludos.]]>

http://visualfivewin.blogspot.com/

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: VISUAL FIVEWIN :: Reply by Antonio Linares]]> 2025-04-24T12:06:21-06:00 2025-04-24T12:06:21-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45643&p=279159#p279159

Le he enviado un email a Patrick

https://www.geocities.ws/ksfanhk/freeware.htm]]>


Le he enviado un email a Patrick

https://www.geocities.ws/ksfanhk/freeware.htm]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: VISUAL FIVEWIN :: Reply by Antonio Linares]]> 2025-04-24T12:18:12-06:00 2025-04-24T12:18:12-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45643&p=279160#p279160
https://github.com/FiveTechSoft/FWH_too ... /jkide.zip

Tal vez alguien tiene una versión más reciente ?

Gracias!]]>

https://github.com/FiveTechSoft/FWH_too ... /jkide.zip

Tal vez alguien tiene una versión más reciente ?

Gracias!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: VISUAL FIVEWIN :: Reply by claudio.leiva]]> 2025-04-24T13:09:11-06:00 2025-04-24T13:09:11-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45643&p=279162#p279162 tendremos que crear algo al los tiempos de HOY ?]]> tendremos que crear algo al los tiempos de HOY ?]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: VISUAL FIVEWIN :: Reply by Antonio Linares]]> 2025-04-24T21:16:48-06:00 2025-04-24T21:16:48-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45643&p=279171#p279171
Puedes ir probándola y agradecemos tu feedback]]>

Puedes ir probándola y agradecemos tu feedback]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by Enrrique Vertiz]]> 2025-04-15T15:42:44-06:00 2025-04-15T15:42:44-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45621&p=278991#p278991
Gracias Carlos, pero me pasa con los 3 proveedores mas grandes aqui Movistar, Claro y Win, cubren el 90% (aprox) de las instalaciones ... ademas Filezilla si me deja y una prueba con Chilkat tambien.

Joao gracias por los links revisare 1x1 a ver si encuentro luz ...]]>

Gracias Carlos, pero me pasa con los 3 proveedores mas grandes aqui Movistar, Claro y Win, cubren el 90% (aprox) de las instalaciones ... ademas Filezilla si me deja y una prueba con Chilkat tambien.

Joao gracias por los links revisare 1x1 a ver si encuentro luz ...]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by cmsoft]]> 2025-04-16T06:15:24-06:00 2025-04-16T06:15:24-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45621&p=279000#p279000

Code: Select all | Expand

FUNCTION Main()
LOCAL  aFiles:={},   cusuario:="user@dominio.com",   cpassword:="pass",   cftpsite:="ftp://dominio.com", oUrl
oUrl := tUrl():New( cftpsite )
oUrl:cUserid := cusuario
oUrl:cPassword := cpassword
oFTP := tIPClientFtp():New( oUrl, .t. )
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .t.
oFtp:bTrace := {|| nil}
oFTP:Open()
IF oFtp <> NIL
   aFiles:=oFtp:ListFiles("data\*.*")
   xbrowse(aFiles)
ENDIF
RETURN nil
]]>

Code: Select all | Expand

FUNCTION Main()
LOCAL  aFiles:={},   cusuario:="user@dominio.com",   cpassword:="pass",   cftpsite:="ftp://dominio.com", oUrl
oUrl := tUrl():New( cftpsite )
oUrl:cUserid := cusuario
oUrl:cPassword := cpassword
oFTP := tIPClientFtp():New( oUrl, .t. )
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .t.
oFtp:bTrace := {|| nil}
oFTP:Open()
IF oFtp <> NIL
   aFiles:=oFtp:ListFiles("data\*.*")
   xbrowse(aFiles)
ENDIF
RETURN nil
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by Enrrique Vertiz]]> 2025-04-16T16:12:37-06:00 2025-04-16T16:12:37-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45621&p=279019#p279019
Cree un PRG solo con lo que me enviaste y me salio este mensaje:

Error BASE/1081 Operation not supported: TIPCLIENTFTP:New()

En esta linea:

oFTP := tIPClientFtp():New( oUrl, .t. )]]>

Cree un PRG solo con lo que me enviaste y me salio este mensaje:

Error BASE/1081 Operation not supported: TIPCLIENTFTP:New()

En esta linea:

oFTP := tIPClientFtp():New( oUrl, .t. )]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by cmsoft]]> 2025-04-17T13:00:45-06:00 2025-04-17T13:00:45-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45621&p=279032#p279032 En mi caso uso harbour y tengo que incluir la libreria hbtip
En xharbour desconozco si existe]]>
En mi caso uso harbour y tengo que incluir la libreria hbtip
En xharbour desconozco si existe]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by Enrrique Vertiz]]> 2025-04-17T14:01:17-06:00 2025-04-17T14:01:17-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45621&p=279034#p279034
Uso xHarbour y enlazo una LIB de nombre tip.lib, pero no tengo idea de si es lo mismo, gracias nuevamente.]]>

Uso xHarbour y enlazo una LIB de nombre tip.lib, pero no tengo idea de si es lo mismo, gracias nuevamente.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by cmsoft]]> 2025-04-17T14:55:55-06:00 2025-04-17T14:55:55-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45621&p=279036#p279036 No puedo probarlo porque no tengo xharbour, pero entiendo que sería algo asi:

Code: Select all | Expand

FUNCTION Main()
LOCAL  aFiles:={},   cusuario:="user@dominio.com",   cpassword:="pass",   cftpsite:="ftp://dominio.com", oUrl, oCredentials
oUrl := tUrl():New( cftpsite )
oCredentials := tIPCredentials():New()
oCredentials:cUserid := cusuario
oCredentials:cPassword := cpassword
oFTP := tIPClientFtp():New( oUrl, .t., oCredentials )
oFTP:nConnTimeout := 20000
oFTP:Open()
IF oFtp <> NIL
   aFiles:=oFtp:ListFiles("data\*.*")
   xbrowse(aFiles)
ENDIF
RETURN nil
No se si funcione, porque no lo probe, pero aca tenes el link por si te interesa mirar.
https://github.com/xHarbour-org/xharbou ... client.prg]]>
No puedo probarlo porque no tengo xharbour, pero entiendo que sería algo asi:

Code: Select all | Expand

FUNCTION Main()
LOCAL  aFiles:={},   cusuario:="user@dominio.com",   cpassword:="pass",   cftpsite:="ftp://dominio.com", oUrl, oCredentials
oUrl := tUrl():New( cftpsite )
oCredentials := tIPCredentials():New()
oCredentials:cUserid := cusuario
oCredentials:cPassword := cpassword
oFTP := tIPClientFtp():New( oUrl, .t., oCredentials )
oFTP:nConnTimeout := 20000
oFTP:Open()
IF oFtp <> NIL
   aFiles:=oFtp:ListFiles("data\*.*")
   xbrowse(aFiles)
ENDIF
RETURN nil
No se si funcione, porque no lo probe, pero aca tenes el link por si te interesa mirar.
https://github.com/xHarbour-org/xharbou ... client.prg]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by Enrrique Vertiz]]> 2025-04-17T16:59:30-06:00 2025-04-17T16:59:30-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45621&p=279039#p279039
Application
===========
Path and name: D:\Fwh\Fwh2501\samples\ftpdir04.exe (32 bits)
Size: 4,267,520 bytes
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)
FiveWin version: FWH 25.01
C compiler version: Borland/Embarcadero C++ 7.7 (32-bit)
Windows 11 64 Bits, version: 6.2, Build 9200

Time from start: 0 hours 0 mins 0 secs
Error occurred at: 04/17/25, 17:50:45
Error description: Error BASE/1081 Operation not supported: TIPCLIENTFTP:New()
Args:
[ 1] = O TIPCLIENTFTP
[ 2] = C


El codigo:

#include "FiveWin.ch"

FUNCTION Main()
LOCAL aFiles:={}, cusuario:="usuario", cpassword:="pass", cftpsite:="ftp.xxx.net", oUrl, oFtp, oCredentials
oUrl := tUrl():New( cftpsite )
oCredentials := tIPCredentials():New()
oCredentials:cUserid := cusuario
oCredentials:cPassword := cpassword
oFTP := tIPClientFtp():New( oUrl, .t., oCredentials )
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .t.
oFtp:bTrace := {|| nil}
oFTP:Open()
IF oFtp <> NIL
aFiles:=oFtp:ListFiles("*.*")
xbrowse(aFiles)
ENDIF
RETURN nil

Seguire viendo, porque si funciona en Hb y no en xHb]]>

Application
===========
Path and name: D:\Fwh\Fwh2501\samples\ftpdir04.exe (32 bits)
Size: 4,267,520 bytes
Compiler version: xHarbour 1.3.1 Intl. (SimpLex) (Build 20250226)
FiveWin version: FWH 25.01
C compiler version: Borland/Embarcadero C++ 7.7 (32-bit)
Windows 11 64 Bits, version: 6.2, Build 9200

Time from start: 0 hours 0 mins 0 secs
Error occurred at: 04/17/25, 17:50:45
Error description: Error BASE/1081 Operation not supported: TIPCLIENTFTP:New()
Args:
[ 1] = O TIPCLIENTFTP
[ 2] = C


El codigo:

#include "FiveWin.ch"

FUNCTION Main()
LOCAL aFiles:={}, cusuario:="usuario", cpassword:="pass", cftpsite:="ftp.xxx.net", oUrl, oFtp, oCredentials
oUrl := tUrl():New( cftpsite )
oCredentials := tIPCredentials():New()
oCredentials:cUserid := cusuario
oCredentials:cPassword := cpassword
oFTP := tIPClientFtp():New( oUrl, .t., oCredentials )
oFTP:nConnTimeout := 20000
oFTP:bUsePasv := .t.
oFtp:bTrace := {|| nil}
oFTP:Open()
IF oFtp <> NIL
aFiles:=oFtp:ListFiles("*.*")
xbrowse(aFiles)
ENDIF
RETURN nil

Seguire viendo, porque si funciona en Hb y no en xHb]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by CARLOS ATUNCAR]]> 2025-04-22T10:07:05-06:00 2025-04-22T10:07:05-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45621&p=279117#p279117
Enrrique Vertiz wrote: Tue Apr 15, 2025 9:42 pm Saludos

Gracias Carlos, pero me pasa con los 3 proveedores mas grandes aqui Movistar, Claro y Win, cubren el 90% (aprox) de las instalaciones ... ademas Filezilla si me deja y una prueba con Chilkat tambien.

Joao gracias por los links revisare 1x1 a ver si encuentro luz ...
si los mismo sintomas tenia con wow y tuve que cambiar el metodo de actualizacion para los clientes con este proveedor a descargar desde la pagina un actualizador y hacer una reinstalacion para actualizar la aplicacion y me cambie a Claro y no tengo ese problema y no recomiendo ni wow, tu servidor ftp esta en una vps o hosting revisa si no esta bloqueado el ip, si gustas podemos probar desde mi pc por anydesk para descartar]]>
Enrrique Vertiz wrote: Tue Apr 15, 2025 9:42 pm Saludos

Gracias Carlos, pero me pasa con los 3 proveedores mas grandes aqui Movistar, Claro y Win, cubren el 90% (aprox) de las instalaciones ... ademas Filezilla si me deja y una prueba con Chilkat tambien.

Joao gracias por los links revisare 1x1 a ver si encuentro luz ...
si los mismo sintomas tenia con wow y tuve que cambiar el metodo de actualizacion para los clientes con este proveedor a descargar desde la pagina un actualizador y hacer una reinstalacion para actualizar la aplicacion y me cambie a Claro y no tengo ese problema y no recomiendo ni wow, tu servidor ftp esta en una vps o hosting revisa si no esta bloqueado el ip, si gustas podemos probar desde mi pc por anydesk para descartar]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by Enrrique Vertiz]]> 2025-04-22T15:22:25-06:00 2025-04-22T15:22:25-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45621&p=279121#p279121
Gracias, ya consegui hacerlo funcionar]]>

Gracias, ya consegui hacerlo funcionar]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by CARLOS ATUNCAR]]> 2025-04-24T17:55:54-06:00 2025-04-24T17:55:54-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45621&p=279167#p279167 <![CDATA[FiveWin para Harbour/xHarbour :: Re: oFTP:Directory() no devuelve los archivos que existem :: Reply by Enrrique Vertiz]]> 2025-04-24T21:57:17-06:00 2025-04-24T21:57:17-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45621&p=279172#p279172
#include "FiveWin.ch"
#include "Struct.ch"

#define INTERNET_SERVICE_FTP 1
#define FTP_PORT 21

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

CLASS TFTP

DATA oInternet // TInternet container object
DATA cSite // URL address
DATA hFTP // handle of the FTP connection
DATA cUserName // user name to login
DATA cPassword // password to login

METHOD New( cFTPSite, oInternet, cUserName, cPassword ) CONSTRUCTOR // generic constructor

METHOD End() // generic destructor

METHOD DeleteFile( cFileName ) // deletes a remote FTP file

METHOD Directory( cMask ) // as Clipper Directory() but on a FTP site!

METHOD RenameFile( cOldFileName, cNewFileName ) // renames a file

METHOD SetCurrentDirectory( cDirName ) INLINE ;
FtpSetCurrentDirectory( ::hFTP, cDirName )

METHOD CreateDirectory( cDirName ) INLINE ;
FtpCreateDirectory( ::hFTP, cDirName )


ENDCLASS

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

//METHOD New( cFTPSite, oInternet, cUserName, cPassword ) CLASS TFTP
//
// ::oInternet = oInternet
// ::cSite = cFTPSite
// ::cUserName = cUserName
// ::cPassword = cPassword
//
// if oInternet:hSession != nil
// ::hFTP = InternetConnect( oInternet:hSession, cFTPSite, FTP_PORT,;
// ::cUserName, ::cPassword,;
// INTERNET_SERVICE_FTP, 0, 0 )
// AAdd( oInternet:aFTPs, Self )
// endif
//
//return Self

METHOD New( cFTPSite, oInternet, cUserName, cPassword, nFlags ) CLASS TFTP

DEFAULT nFlags := INTERNET_FLAG_PASSIVE

::oInternet = oInternet
::cSite = cFTPSite
::cUserName = cUserName
::cPassword = cPassword

if oInternet:hSession != nil
::hFTP = InternetConnect( oInternet:hSession, cFTPSite, FTP_PORT,;
::cUserName, ::cPassword,;
INTERNET_SERVICE_FTP, nFlags, 0 )
AAdd( oInternet:aFTPs, Self )
endif

return Self

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

METHOD End() CLASS TFTP

if ::hFTP != nil
InternetCloseHandle( ::hFTP )
::hFTP = nil
endif

return nil

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

METHOD DeleteFile( cFileName ) CLASS TFTP

return If( ::hFTP != nil, FtpDeleteFile( ::hFTP, cFileName ), .f. )

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

METHOD Directory( cMask ) CLASS TFTP

local hFTPDir, aFiles := {}
local oWin32FindData, cBuffer

DEFAULT cMask := "*.*"

STRUCT oWin32FindData
MEMBER nFileAttributes AS DWORD
MEMBER nCreationTime AS STRING LEN 8
MEMBER nLastReadAccess AS STRING LEN 8
MEMBER nLastWriteAccess AS STRING LEN 8
MEMBER nSizeHight AS DWORD
MEMBER nSizeLow AS DWORD
MEMBER nReserved0 AS DWORD
MEMBER nReserved1 AS DWORD
MEMBER cFileName AS STRING LEN 260
MEMBER cAltName AS STRING LEN 14
MEMBER dummy AS STRING LEN 50
ENDSTRUCT

if ::hFTP != nil
cBuffer = oWin32FindData:cBuffer
hFTPDir = FtpFindFirstFile( ::hFTP, cMask, @cBuffer, 0, 0 )
oWin32FindData:cBuffer = cBuffer
if ! Empty( oWin32FindData:cFileName )
AAdd( aFiles, { oWin32FindData:cFileName,;
oWin32FindData:nSizeLow,;
FileTimeToDate( oWin32FindData:nLastWriteAccess ),;
FileTimeToTime( oWin32FindData:nLastWriteAccess ) } )
while InternetFindNextFile( hFTPDir, @cBuffer )
oWin32FindData:cBuffer = cBuffer
AAdd( aFiles, { oWin32FindData:cFileName,;
oWin32FindData:nSizeLow,;
FileTimeToDate( oWin32FindData:nLastWriteAccess ),;
FileTimeToTime( oWin32FindData:nLastWriteAccess ) } )
end
endif
InternetCloseHandle( hFTPDir )
endif

return aFiles

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

METHOD RenameFile( cOldFileName, cNewFileName ) CLASS TFTP

return If( ::hFTP != nil, FtpRenameFile( ::hFTP, cOldFileName, cNewFileName ), .f. )]]>

#include "FiveWin.ch"
#include "Struct.ch"

#define INTERNET_SERVICE_FTP 1
#define FTP_PORT 21

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

CLASS TFTP

DATA oInternet // TInternet container object
DATA cSite // URL address
DATA hFTP // handle of the FTP connection
DATA cUserName // user name to login
DATA cPassword // password to login

METHOD New( cFTPSite, oInternet, cUserName, cPassword ) CONSTRUCTOR // generic constructor

METHOD End() // generic destructor

METHOD DeleteFile( cFileName ) // deletes a remote FTP file

METHOD Directory( cMask ) // as Clipper Directory() but on a FTP site!

METHOD RenameFile( cOldFileName, cNewFileName ) // renames a file

METHOD SetCurrentDirectory( cDirName ) INLINE ;
FtpSetCurrentDirectory( ::hFTP, cDirName )

METHOD CreateDirectory( cDirName ) INLINE ;
FtpCreateDirectory( ::hFTP, cDirName )


ENDCLASS

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

//METHOD New( cFTPSite, oInternet, cUserName, cPassword ) CLASS TFTP
//
// ::oInternet = oInternet
// ::cSite = cFTPSite
// ::cUserName = cUserName
// ::cPassword = cPassword
//
// if oInternet:hSession != nil
// ::hFTP = InternetConnect( oInternet:hSession, cFTPSite, FTP_PORT,;
// ::cUserName, ::cPassword,;
// INTERNET_SERVICE_FTP, 0, 0 )
// AAdd( oInternet:aFTPs, Self )
// endif
//
//return Self

METHOD New( cFTPSite, oInternet, cUserName, cPassword, nFlags ) CLASS TFTP

DEFAULT nFlags := INTERNET_FLAG_PASSIVE

::oInternet = oInternet
::cSite = cFTPSite
::cUserName = cUserName
::cPassword = cPassword

if oInternet:hSession != nil
::hFTP = InternetConnect( oInternet:hSession, cFTPSite, FTP_PORT,;
::cUserName, ::cPassword,;
INTERNET_SERVICE_FTP, nFlags, 0 )
AAdd( oInternet:aFTPs, Self )
endif

return Self

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

METHOD End() CLASS TFTP

if ::hFTP != nil
InternetCloseHandle( ::hFTP )
::hFTP = nil
endif

return nil

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

METHOD DeleteFile( cFileName ) CLASS TFTP

return If( ::hFTP != nil, FtpDeleteFile( ::hFTP, cFileName ), .f. )

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

METHOD Directory( cMask ) CLASS TFTP

local hFTPDir, aFiles := {}
local oWin32FindData, cBuffer

DEFAULT cMask := "*.*"

STRUCT oWin32FindData
MEMBER nFileAttributes AS DWORD
MEMBER nCreationTime AS STRING LEN 8
MEMBER nLastReadAccess AS STRING LEN 8
MEMBER nLastWriteAccess AS STRING LEN 8
MEMBER nSizeHight AS DWORD
MEMBER nSizeLow AS DWORD
MEMBER nReserved0 AS DWORD
MEMBER nReserved1 AS DWORD
MEMBER cFileName AS STRING LEN 260
MEMBER cAltName AS STRING LEN 14
MEMBER dummy AS STRING LEN 50
ENDSTRUCT

if ::hFTP != nil
cBuffer = oWin32FindData:cBuffer
hFTPDir = FtpFindFirstFile( ::hFTP, cMask, @cBuffer, 0, 0 )
oWin32FindData:cBuffer = cBuffer
if ! Empty( oWin32FindData:cFileName )
AAdd( aFiles, { oWin32FindData:cFileName,;
oWin32FindData:nSizeLow,;
FileTimeToDate( oWin32FindData:nLastWriteAccess ),;
FileTimeToTime( oWin32FindData:nLastWriteAccess ) } )
while InternetFindNextFile( hFTPDir, @cBuffer )
oWin32FindData:cBuffer = cBuffer
AAdd( aFiles, { oWin32FindData:cFileName,;
oWin32FindData:nSizeLow,;
FileTimeToDate( oWin32FindData:nLastWriteAccess ),;
FileTimeToTime( oWin32FindData:nLastWriteAccess ) } )
end
endif
InternetCloseHandle( hFTPDir )
endif

return aFiles

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

METHOD RenameFile( cOldFileName, cNewFileName ) CLASS TFTP

return If( ::hFTP != nil, FtpRenameFile( ::hFTP, cOldFileName, cNewFileName ), .f. )]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Ejemplo chatptg :: Author jgabri]]> 2025-04-22T04:54:10-06:00 2025-04-22T04:54:10-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45638&p=279093#p279093
Alguien tiene algún ejemplo, funcionando con chatptg y chat.html ?

Un nsaludo y gracias

Borland bc77 - fwh 25.01 32 bits]]>

Alguien tiene algún ejemplo, funcionando con chatptg y chat.html ?

Un nsaludo y gracias

Borland bc77 - fwh 25.01 32 bits]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ejemplo chatptg :: Reply by Antonio Linares]]> 2025-04-22T08:23:41-06:00 2025-04-22T08:23:41-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45638&p=279109#p279109
webia.prg

Code: Select all | Expand

#include "FiveWin.ch"

REQUEST HB_CODEPAGE_ESWIN

function Main()

    local oWnd, oWebView
    local oGemini := TGemini():New()

    fw_SetUnicode( .F. )
    hb_SetCodePage( "ESWIN" )

    DEFINE WINDOW oWnd TITLE "Chat AI" SIZE 650, 800

    oWebView = TWebView2():New( oWnd )

    oWebView:SetHtml( hb_memoRead( "chat.html" ) )
    oWebView:bOnBind = { | aInfo, cAnswer | oGemini:Send( aInfo[ 1 ] ),;
                                            cAnswer := "sendResponse('" + hb_Utf8ToStr( oGemini:getValue() ) + "')",;
                                            cAnswer := StrTran( cAnswer, Chr( 10 ), "" ),;
                                            oWebView:Eval( cAnswer ) }

    ACTIVATE WINDOW oWnd CENTER ;
       ON RESIZE oWebView:SetSize( nWidth, nHeight )

    oGemini:End()

return nil    
]]>

webia.prg

Code: Select all | Expand

#include "FiveWin.ch"

REQUEST HB_CODEPAGE_ESWIN

function Main()

    local oWnd, oWebView
    local oGemini := TGemini():New()

    fw_SetUnicode( .F. )
    hb_SetCodePage( "ESWIN" )

    DEFINE WINDOW oWnd TITLE "Chat AI" SIZE 650, 800

    oWebView = TWebView2():New( oWnd )

    oWebView:SetHtml( hb_memoRead( "chat.html" ) )
    oWebView:bOnBind = { | aInfo, cAnswer | oGemini:Send( aInfo[ 1 ] ),;
                                            cAnswer := "sendResponse('" + hb_Utf8ToStr( oGemini:getValue() ) + "')",;
                                            cAnswer := StrTran( cAnswer, Chr( 10 ), "" ),;
                                            oWebView:Eval( cAnswer ) }

    ACTIVATE WINDOW oWnd CENTER ;
       ON RESIZE oWebView:SetSize( nWidth, nHeight )

    oGemini:End()

return nil    
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ejemplo chatptg :: Reply by jgabri]]> 2025-04-22T14:29:58-06:00 2025-04-22T14:29:58-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45638&p=279120#p279120 ]]> ]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Ejemplo chatptg :: Reply by JoseAlvarez]]> 2025-04-26T06:23:15-06:00 2025-04-26T06:23:15-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45638&p=279194#p279194
Disculpe mi total desconocimiento sobre este tema:

El código que muestra es para llamar a la IA desde nuestras aplicaciones? el llamado es de forma general o se puede adaptar a lo nuestro? o sea alimentar a la IA para que responda a los usuarios sus inquietudes sobre nuestra app? a partir de que version de FW se incluye?

Gracias!.]]>

Disculpe mi total desconocimiento sobre este tema:

El código que muestra es para llamar a la IA desde nuestras aplicaciones? el llamado es de forma general o se puede adaptar a lo nuestro? o sea alimentar a la IA para que responda a los usuarios sus inquietudes sobre nuestra app? a partir de que version de FW se incluye?

Gracias!.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ejemplo chatptg :: Reply by Antonio Linares]]> 2025-04-26T08:13:34-06:00 2025-04-26T08:13:34-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45638&p=279195#p279195
Las Clases de inteligencia artificial TOpenAI, TGemini y TOllama están disponibles desde FWH 25.01

Puedes hacerles cualquier tipo de preguntas o por ejemplo darle los datos de un balance de situación y pedirle que lo analice, que valore la evolución de ventas, que traduzca, que resuma, etc.]]>

Las Clases de inteligencia artificial TOpenAI, TGemini y TOllama están disponibles desde FWH 25.01

Puedes hacerles cualquier tipo de preguntas o por ejemplo darle los datos de un balance de situación y pedirle que lo analice, que valore la evolución de ventas, que traduzca, que resuma, etc.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ejemplo chatptg :: Reply by JoseAlvarez]]> 2025-04-26T13:34:40-06:00 2025-04-26T13:34:40-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45638&p=279199#p279199
Excelente.

Toca actualizar!]]>

Excelente.

Toca actualizar!]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ejemplo chatptg :: Reply by jgabri]]> 2025-04-28T02:34:04-06:00 2025-04-28T02:34:04-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45638&p=279216#p279216 Ánimo a todos los grupos actualizar a última versión de fwh, fivewin no ha dado mucho y ahora tenemos que estar más unidos y avanzar.

Un saludo y mil gracias 🫂😊]]>
Ánimo a todos los grupos actualizar a última versión de fwh, fivewin no ha dado mucho y ahora tenemos que estar más unidos y avanzar.

Un saludo y mil gracias 🫂😊]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Combobox con marca visual de obligatoriedad :: Author paquitohm]]> 2025-04-24T04:26:25-06:00 2025-04-24T08:17:44-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279148#p279148
Quisiera que en un Combobox, cuando no tenga nada seleccionado, se pinte un triangulito significando "obligatorio seleccionar"
Le estaba metiendo mano a la clase Combobox pero no hay manera.


Esta caracteristica ya la tengo en Get y se ve asi:
Image

Alguna idea ? Gracias]]>

Quisiera que en un Combobox, cuando no tenga nada seleccionado, se pinte un triangulito significando "obligatorio seleccionar"
Le estaba metiendo mano a la clase Combobox pero no hay manera.


Esta caracteristica ya la tengo en Get y se ve asi:
Image

Alguna idea ? Gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by Antonio Linares]]> 2025-04-24T05:57:56-06:00 2025-04-24T05:57:56-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279150#p279150
Es un combobox editable ?]]>

Es un combobox editable ?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by karinha]]> 2025-04-24T06:52:54-06:00 2025-04-24T06:52:54-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279151#p279151
https://fivewin.com.br/index.php?/topic ... et/page/3/

Regards, saludos.]]>

https://fivewin.com.br/index.php?/topic ... et/page/3/

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by paquitohm]]> 2025-04-24T08:16:16-06:00 2025-04-24T09:18:36-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279152#p279152
Antonio Linares wrote: Thu Apr 24, 2025 11:57 am Paco,

Es un combobox editable ?
Antonio,

No es editable.

[ACTUALIZADO] Ya parece que me van saliendo cositas. Ahora despues informo mejor]]>
Antonio Linares wrote: Thu Apr 24, 2025 11:57 am Paco,

Es un combobox editable ?
Antonio,

No es editable.

[ACTUALIZADO] Ya parece que me van saliendo cositas. Ahora despues informo mejor]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by cnavarro]]> 2025-04-24T08:32:22-06:00 2025-04-24T08:32:22-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279153#p279153 La primera que intentaría sería en el objeto oCombo:oGet meterle un action { || .T- } que no hiciese nada y ponerle el bitmap que consideres, poniéndolo y quitándolo o cambiándolo según la validacion que consideres, lo único es que ese bitmap aparecería a la derecha ( en principio )
Dime qué te parece]]>
La primera que intentaría sería en el objeto oCombo:oGet meterle un action { || .T- } que no hiciese nada y ponerle el bitmap que consideres, poniéndolo y quitándolo o cambiándolo según la validacion que consideres, lo único es que ese bitmap aparecería a la derecha ( en principio )
Dime qué te parece]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by paquitohm]]> 2025-04-24T09:19:58-06:00 2025-04-24T09:19:58-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279155#p279155
cnavarro wrote: Thu Apr 24, 2025 2:32 pm Paquito, se me ocurren varias posibilidades
La primera que intentaría sería en el objeto oCombo:oGet meterle un action { || .T- } que no hiciese nada y ponerle el bitmap que consideres, poniéndolo y quitándolo o cambiándolo según la validacion que consideres, lo único es que ese bitmap aparecería a la derecha ( en principio )
Dime qué te parece
Gracias Cristóbal. Acabo de ver tu comentario. 17:19.
Ya me pinta el triangulito. Creo que con unos pocos ajustes tengo el temo. voy a ver. Ahora despues informaré]]>
cnavarro wrote: Thu Apr 24, 2025 2:32 pm Paquito, se me ocurren varias posibilidades
La primera que intentaría sería en el objeto oCombo:oGet meterle un action { || .T- } que no hiciese nada y ponerle el bitmap que consideres, poniéndolo y quitándolo o cambiándolo según la validacion que consideres, lo único es que ese bitmap aparecería a la derecha ( en principio )
Dime qué te parece
Gracias Cristóbal. Acabo de ver tu comentario. 17:19.
Ya me pinta el triangulito. Creo que con unos pocos ajustes tengo el temo. voy a ver. Ahora despues informaré]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by Antonio Linares]]> 2025-04-24T09:54:47-06:00 2025-04-24T09:54:47-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279156#p279156
Aqui tienes una primera prueba pero funciona a medias:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "Item 1"

    DEFINE DIALOG oDlg TITLE "ComboBox Example" SIZE 300, 200 PIXEL

    @ 2, 3 COMBOBOX oCmb VAR cSelected SIZE 100, 60 ;
        ITEMS { "Item 1", "Item 2", "Item 3" }

    __clsAddMsg( oCmb:ClassH, "Display", @Display(), HB_OO_MSG_METHOD,, 1 )

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ;

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL

static function Display()    

   local Self := QSelf() 

   FillRect( ::GetDC(), { 0, 0, 23, 23 }, TBrush():New( , CLR_RED ):hBrush )
   ::ReleaseDC()

return nil    
]]>

Aqui tienes una primera prueba pero funciona a medias:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "Item 1"

    DEFINE DIALOG oDlg TITLE "ComboBox Example" SIZE 300, 200 PIXEL

    @ 2, 3 COMBOBOX oCmb VAR cSelected SIZE 100, 60 ;
        ITEMS { "Item 1", "Item 2", "Item 3" }

    __clsAddMsg( oCmb:ClassH, "Display", @Display(), HB_OO_MSG_METHOD,, 1 )

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ;

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL

static function Display()    

   local Self := QSelf() 

   FillRect( ::GetDC(), { 0, 0, 23, 23 }, TBrush():New( , CLR_RED ):hBrush )
   ::ReleaseDC()

return nil    
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by paquitohm]]> 2025-04-25T02:44:26-06:00 2025-04-25T02:44:26-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279175#p279175 Unicamente conseguí mostrar el triangulito fuera del combobox

Image]]>
Unicamente conseguí mostrar el triangulito fuera del combobox

Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by paquitohm]]> 2025-04-25T05:15:39-06:00 2025-04-25T05:15:39-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279176#p279176


Image]]>



Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by cnavarro]]> 2025-04-25T08:20:29-06:00 2025-04-25T08:20:29-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279177#p279177 Quedo a tu disposicion si necesitas mas ayuda

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "    "

    DEFINE DIALOG oDlg TITLE "ComboBox Example" SIZE 300, 200 PIXEL

    @ 2, 3 COMBOBOX oCmb VAR cSelected SIZE 100, 60 ;
        ITEMS { "   ", "Item 1", "Item 2", "Item 3" }

   __clsAddMsg( oCmb:ClassH, "Display", @Display(), HB_OO_MSG_METHOD,, 1 )

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL


static function Display( o )    

   local Self := QSelf() 
   local hDC      := ::GetDC()
   local aRect    := GetClientRect( ::hWnd )

   if Empty( ::Varget() )
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_RED, 4 )
   else
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_GREEN, 4 )
   endif
  ::ReleaseDC()

return nil    

]]>
Quedo a tu disposicion si necesitas mas ayuda

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "    "

    DEFINE DIALOG oDlg TITLE "ComboBox Example" SIZE 300, 200 PIXEL

    @ 2, 3 COMBOBOX oCmb VAR cSelected SIZE 100, 60 ;
        ITEMS { "   ", "Item 1", "Item 2", "Item 3" }

   __clsAddMsg( oCmb:ClassH, "Display", @Display(), HB_OO_MSG_METHOD,, 1 )

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL


static function Display( o )    

   local Self := QSelf() 
   local hDC      := ::GetDC()
   local aRect    := GetClientRect( ::hWnd )

   if Empty( ::Varget() )
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_RED, 4 )
   else
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_GREEN, 4 )
   endif
  ::ReleaseDC()

return nil    

]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by paquitohm]]> 2025-04-25T10:07:43-06:00 2025-04-25T10:07:43-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279180#p279180
cnavarro wrote: Fri Apr 25, 2025 2:20 pm Paquito, al hilo de lo que ha hecho Antonio, mira este codigo ( en lugar del box, puedes pintar el bitmap o lo que consideres )
Quedo a tu disposicion si necesitas mas ayuda

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "    "

    DEFINE DIALOG oDlg TITLE "ComboBox Example" SIZE 300, 200 PIXEL

    @ 2, 3 COMBOBOX oCmb VAR cSelected SIZE 100, 60 ;
        ITEMS { "   ", "Item 1", "Item 2", "Item 3" }

   __clsAddMsg( oCmb:ClassH, "Display", @Display(), HB_OO_MSG_METHOD,, 1 )

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL


static function Display( o )    

   local Self := QSelf() 
   local hDC      := ::GetDC()
   local aRect    := GetClientRect( ::hWnd )

   if Empty( ::Varget() )
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_RED, 4 )
   else
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_GREEN, 4 )
   endif
  ::ReleaseDC()

return nil    

Gracias Cristobal, pero me temo que no vale. Se trataría de pintar dentro del combobox que es lo complicado. Fuera ya pude pintar el triangulo. Más arriba puse un ejemplo.
Esto es lo que me pinta con tu ejemplo:
Image]]>
cnavarro wrote: Fri Apr 25, 2025 2:20 pm Paquito, al hilo de lo que ha hecho Antonio, mira este codigo ( en lugar del box, puedes pintar el bitmap o lo que consideres )
Quedo a tu disposicion si necesitas mas ayuda

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "    "

    DEFINE DIALOG oDlg TITLE "ComboBox Example" SIZE 300, 200 PIXEL

    @ 2, 3 COMBOBOX oCmb VAR cSelected SIZE 100, 60 ;
        ITEMS { "   ", "Item 1", "Item 2", "Item 3" }

   __clsAddMsg( oCmb:ClassH, "Display", @Display(), HB_OO_MSG_METHOD,, 1 )

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL


static function Display( o )    

   local Self := QSelf() 
   local hDC      := ::GetDC()
   local aRect    := GetClientRect( ::hWnd )

   if Empty( ::Varget() )
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_RED, 4 )
   else
   RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
                         CLR_GREEN, 4 )
   endif
  ::ReleaseDC()

return nil    

Gracias Cristobal, pero me temo que no vale. Se trataría de pintar dentro del combobox que es lo complicado. Fuera ya pude pintar el triangulo. Más arriba puse un ejemplo.
Esto es lo que me pinta con tu ejemplo:
Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by paquitohm]]> 2025-04-25T10:27:34-06:00 2025-04-25T10:27:34-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279181#p279181
Me parece muy buena idea. Cuadro por fuera rojo y en mi caso le he puesto, en vez de verde, que lo apague cuando se seleccione algo. De esta manera puedo poner la variable "obligatorio" como un codeblock, lo cual mejora mi solucion de un bitmap. Me gustaba más el triangulito, pero así también se queda muy bien: Una marca de "obligatorio" característica y diferenciada de los Gets: Graficamente el usuario lo entiende: Distinto objeto, distinta marca de obligatoriedad.

Una solución elegante y rápida.

Gracias a ti y a Antonio ! :D]]>

Me parece muy buena idea. Cuadro por fuera rojo y en mi caso le he puesto, en vez de verde, que lo apague cuando se seleccione algo. De esta manera puedo poner la variable "obligatorio" como un codeblock, lo cual mejora mi solucion de un bitmap. Me gustaba más el triangulito, pero así también se queda muy bien: Una marca de "obligatorio" característica y diferenciada de los Gets: Graficamente el usuario lo entiende: Distinto objeto, distinta marca de obligatoriedad.

Una solución elegante y rápida.

Gracias a ti y a Antonio ! :D]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by cnavarro]]> 2025-04-25T10:56:23-06:00 2025-04-25T10:56:23-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279182#p279182
paquitohm wrote: Fri Apr 25, 2025 4:27 pm Vale Cristóbal, no había entendido tu solución. Disculpa

Me parece muy buena idea. Cuadro por fuera rojo y en mi caso le he puesto, en vez de verde, que lo apague cuando se seleccione algo. De esta manera puedo poner la variable "obligatorio" como un codeblock, lo cual mejora mi solucion de un bitmap. Me gustaba más el triangulito, pero así también se queda muy bien: Una marca de "obligatorio" característica y diferenciada de los Gets: Graficamente el usuario lo entiende: Distinto objeto, distinta marca de obligatoriedad.

Una solución elegante y rápida.

Gracias a ti y a Antonio ! :D
Si, esa era mi intencion con la solucion que te propuse, pero cuando tenga un rato miro de poner el bitmap dentro del combo, ya como tema de I+D]]>
paquitohm wrote: Fri Apr 25, 2025 4:27 pm Vale Cristóbal, no había entendido tu solución. Disculpa

Me parece muy buena idea. Cuadro por fuera rojo y en mi caso le he puesto, en vez de verde, que lo apague cuando se seleccione algo. De esta manera puedo poner la variable "obligatorio" como un codeblock, lo cual mejora mi solucion de un bitmap. Me gustaba más el triangulito, pero así también se queda muy bien: Una marca de "obligatorio" característica y diferenciada de los Gets: Graficamente el usuario lo entiende: Distinto objeto, distinta marca de obligatoriedad.

Una solución elegante y rápida.

Gracias a ti y a Antonio ! :D
Si, esa era mi intencion con la solucion que te propuse, pero cuando tenga un rato miro de poner el bitmap dentro del combo, ya como tema de I+D]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by paquitohm]]> 2025-04-25T11:10:15-06:00 2025-04-25T11:10:15-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279184#p279184
Recién veo que se me confunde un poco con la marca de focus del Get que consiste tambien en un recuadro rojo alrededor del get.

Pero de momento lo dejo asi. Quiza será cuestion de que busque otra marca o de que cambie el rojo de focus del get por un azul, pongamos por caso.
Image

Gracias]]>

Recién veo que se me confunde un poco con la marca de focus del Get que consiste tambien en un recuadro rojo alrededor del get.

Pero de momento lo dejo asi. Quiza será cuestion de que busque otra marca o de que cambie el rojo de focus del get por un azul, pongamos por caso.
Image

Gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by paquitohm]]> 2025-04-25T12:33:19-06:00 2025-04-25T12:33:19-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279186#p279186
Image]]>

Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by albeiroval]]> 2025-04-25T19:50:01-06:00 2025-04-25T19:50:01-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279190#p279190 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by cnavarro]]> 2025-04-26T05:27:43-06:00 2025-04-26T05:27:43-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279193#p279193
albeiroval wrote: Sat Apr 26, 2025 1:50 am Buen POST, se puede poner un ejemplo con TGET ?
Eso parece mas sencillo, prueba y me comentas

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "                            "

    DEFINE DIALOG oDlg TITLE "ComboBox Example" SIZE 300, 200 PIXEL

    @ 20, 20 GET oCmb VAR cSelected SIZE 110, 16 PIXEL 
   oCmb:bPainted := { || Display( oCmb ) }

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL


static function Display( o )    

   local hDC      := o:oWnd:GetDC()
   local aRect    := GetClientRect( o:hWnd )
   local oBtn

   if Empty( o:Varget() )
   RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                         CLR_RED, 4 )
   else
   RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                         CLR_GREEN, 4 )
   endif
  o:oWnd:ReleaseDC()

return nil    


]]>
albeiroval wrote: Sat Apr 26, 2025 1:50 am Buen POST, se puede poner un ejemplo con TGET ?
Eso parece mas sencillo, prueba y me comentas

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "                            "

    DEFINE DIALOG oDlg TITLE "ComboBox Example" SIZE 300, 200 PIXEL

    @ 20, 20 GET oCmb VAR cSelected SIZE 110, 16 PIXEL 
   oCmb:bPainted := { || Display( oCmb ) }

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL


static function Display( o )    

   local hDC      := o:oWnd:GetDC()
   local aRect    := GetClientRect( o:hWnd )
   local oBtn

   if Empty( o:Varget() )
   RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                         CLR_RED, 4 )
   else
   RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                         CLR_GREEN, 4 )
   endif
  o:oWnd:ReleaseDC()

return nil    


]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by karinha]]> 2025-04-26T11:10:31-06:00 2025-04-26T11:10:31-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279198#p279198
https://imgur.com/v3cXzp8

Image

Regards, saludos.]]>

https://imgur.com/v3cXzp8

Image

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by cnavarro]]> 2025-04-26T18:57:52-06:00 2025-04-26T18:57:52-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279202#p279202

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "                            "

    DEFINE DIALOG oDlg TITLE "TGet Example" SIZE 300, 200 PIXEL

    @ 20, 20 GET oCmb VAR cSelected SIZE 110, 16 PIXEL 
   oCmb:bPainted := { || Display( oCmb ) }

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL


static function Display( o )    

   local hDC      := o:oWnd:GetDC()
   local aRect    := GetClientRect( o:hWnd )
   local oBtn


   RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
             if( Empty( o:Varget() ), CLR_RED, o:oWnd:nClrPane ), ;
             if( Empty( o:Varget() ), 4, 4 ) )    // Esto ultimo es por si queremos poner otro color y cambiar el grueso de la linea
  o:oWnd:ReleaseDC()

return nil    

]]>

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

    local oDlg, oCmb, cSelected := "                            "

    DEFINE DIALOG oDlg TITLE "TGet Example" SIZE 300, 200 PIXEL

    @ 20, 20 GET oCmb VAR cSelected SIZE 110, 16 PIXEL 
   oCmb:bPainted := { || Display( oCmb ) }

    @ 3, 8 BUTTON "OK" SIZE 50, 20 ACTION oDlg:End()

    ACTIVATE DIALOG oDlg CENTERED

    RETURN NIL


static function Display( o )    

   local hDC      := o:oWnd:GetDC()
   local aRect    := GetClientRect( o:hWnd )
   local oBtn


   RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
             if( Empty( o:Varget() ), CLR_RED, o:oWnd:nClrPane ), ;
             if( Empty( o:Varget() ), 4, 4 ) )    // Esto ultimo es por si queremos poner otro color y cambiar el grueso de la linea
  o:oWnd:ReleaseDC()

return nil    

]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by karinha]]> 2025-04-27T10:13:36-06:00 2025-04-27T10:13:36-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279207#p279207
https://imgur.com/sWV9foI

Image

Regards, saludos.]]>

https://imgur.com/sWV9foI

Image

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by karinha]]> 2025-04-27T10:15:30-06:00 2025-04-27T10:15:30-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279208#p279208

Code: Select all | Expand

// C:\GETBORDE\TESTGET3.PRG - 26/04/2025 - By Kapiaba the best.
// MODIFICADO EM: 27/04/2025 - Por: Joao Santos - Sao Paulo/Brazil.

#include "fivewin.ch"

FUNCTION Main()

   LOCAL oWnd, oMenu, oFont, oSkinB

   SetBalloon( .T. ) // Balloon shape required for tooltips

   oSkinB = TSkinButton():New()

   oSkinB:nClrBorder0_N := RGB( 249, 194, 179 )
   oSkinB:nClrBorder1_N := RGB( 181, 61, 29 )
   oSkinB:aClrNormal    := { { .50, nRGB( 210, 235, 216 ), nRGB(   0,  73, 138 ) } }

   SkinButtons( oSkinB )

   DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 00, -14 BOLD

   MENU oMenu 2007

      MenuItem "From Resource" ACTION FromrES( oWnd )

      MENUITEM "&Salida" ACTION( oWnd:End() )

   ENDMENU

   DEFINE WINDOW oWnd TITLE "Test Button Get Transparent" MENU oMenu PIXEL

   oWnd:SetFont( oFont )

   ACTIVATE WINDOW oWnd MAXIMIZED

   oFont:End()

RETURN NIL

FUNCTION FromRes( oWnd )

   LOCAL oDlg, oGet1, oGet2, oGet3, oGet4, cVar1, cVar2, cVar3, cVar4, oFont
   LOCAL oBtnDisp, lActive := .F., cLinares, oGet, oFont2, oBtnVisu, oSay
   LOCAL oSaida, oFnt, oCbx, cItem := "", aGrad

   cVar1 := 0
   cVar2 := 0
   cVar3 := 0
   cVar4 := 0
   cLinares := SPACE(50)

   cLinares := oEmToAnsi( "USER: ANTONIO LI¥ARES CA¥AS" )

   aGrad := { { .50, nRGB( 210, 235, 216 ), nRGB( 255, 255, 255 ) } }

   DEFINE FONT oFnt   NAME "Ms Sans Serif" SIZE 00, -12 BOLD
   DEFINE FONT oFont  NAME "Ms Sans Serif" SIZE 00, -14 BOLD
   DEFINE FONT oFont2 NAME "Ms Sans Serif" SIZE 00, -18 BOLD

   DEFINE DIALOG oDlg RESOURCE "fromres" OF oWnd GRADIENT aGrad FONT oFont

   oDlg:lHelpIcon := .F.

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   REDEFINE SAY ID 401 OF oDlg COLORS METRO_AMBER,  CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 402 OF oDlg COLORS METRO_PINK,   CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 403 OF oDlg COLORS METRO_COBALT, CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 430 OF oDlg COLORS CLR_BLACK,    CLR_WHITE UPDATE FONT oFnt  TRANSPARENT

   REDEFINE GET oGet1 VAR cVar1 id 100 bitmap "on" UPDATE ;
      ACTION( msginfo( "With Transparent" ) ) of oDlg

   oGet1:lBtnTransparent := .T.       // transparent button get oGet1

   REDEFINE GET oGet2 VAR cVar2 id 101 bitmap "on"UPDATE  ;
      ACTION( msginfo( "Without Transparent" ) ) of oDlg

   oGet2:lBtnTransparent := .T.       // transparent button get oGet1

   REDEFINE GET oGet3 VAR cVar3 id 102 bitmap "chkyes" UPDATE ;
      ACTION( msginfo( "With Adjust-Transparent" ) )   ;
      COLOR CLR_BLACK, CLR_CYAN of oDlg

   oGet3:disable()
   oGet3:lBtnTransparent := .T.       // transparent button get oGet3
   oGet3:lAdjustBtn      := .T.       // Button Get Adjust Witdh oGet3
   oGet3:lDisColors      := .F.       // Deactive disable color
   oGet3:nClrTextDis     := CLR_WHITE // Color text disable status
   oGet3:nClrPaneDis     := CLR_BLUE  // Color Pane disable status

   REDEFINE GET oGet4 VAR cVar4 id 103 bitmap "chkyes" UPDATE ;
      ACTION( if( lActive, oGet3:disable(), oGet3:enable() ), ;
                  lActive := !lActive, oDlg:Update() ) of oDlg

   oGet4:lAdjustBtn := .T.

   REDEFINE GET oGet VAR cLinares ID 4001 OF oDlg PICTURE "@!" UPDATE        ;
      COLORS METRO_ORANGE, CLR_WHITE FONT oFont2

   REDEFINE BITMAP oBtnVisu ID 122 RESOURCE "FIVEWIN" TRANSPARENT OF oDlg

   REDEFINE BUTTONBMP oSaida ID 301 OF oDlg RESOURCE "EXIT" TEXTRIGHT        ;
      ACTION ( oDlg:End() ) CANCEL

   oSaida:cTooltip := { "Click no Botão Para Sair",                          ;
                        "Saida - Exit - Cancelar ", 1, CLR_WHITE, CLR_CYAN }

   oGet:bPainted := { || Display( oGet ) }

   REDEFINE BITMAP oBtnDisp ID 121 RESOURCE "HOME"    TRANSPARENT OF oDlg

   REDEFINE COMBOBOX oCbx VAR cItem ITEMS { "Testing", "this", "ComboBox" } ;
      HEIGHTGET 24 ID 210 OF oDlg COLOR "W*/R+"                             ;
      VALID ( MsgBeep(), .t. )

   oCbx:bPainted := { || Display2( oCbx ) }

   ACTIVATE DIALOG oDlg CENTERED

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   oFont:End()
   oFont2:End()
   oFnt:End()

RETURN NIL

STATIC FUNCTION Display( o )  // CON GET FUNCIONA PERFECTO!

   LOCAL hDC      := o:oWnd:GetDC()
   LOCAL aRect    := GetClientRect( o:hWnd )
   LOCAL oBtn

   IF Empty( o:Varget() )

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 6, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_RED, 4 )
   ELSE

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 22, o:nTop + aRect[ 1 ] - 4, o:nLeft + aRect[ 4 ] + 6, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_GREEN, 4 )

   ENDIF

   o:oWnd:ReleaseDC()

RETURN NIL

STATIC FUNCTION Display2( o ) // CON COMBOBOX, NO FUNCIONA!

   local hDC      := o:oWnd:GetDC()
   local aRect    := GetClientRect( o:hWnd )
   local oBtn

   if Empty( o:Varget() )

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_RED, 4 )
   else

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 16, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_GREEN, 4 )

   endif

   o:oWnd:ReleaseDC()

RETURN NIL

// FIN / END - kapiabafwh@gmail.com
Regards, saludos.]]>

Code: Select all | Expand

// C:\GETBORDE\TESTGET3.PRG - 26/04/2025 - By Kapiaba the best.
// MODIFICADO EM: 27/04/2025 - Por: Joao Santos - Sao Paulo/Brazil.

#include "fivewin.ch"

FUNCTION Main()

   LOCAL oWnd, oMenu, oFont, oSkinB

   SetBalloon( .T. ) // Balloon shape required for tooltips

   oSkinB = TSkinButton():New()

   oSkinB:nClrBorder0_N := RGB( 249, 194, 179 )
   oSkinB:nClrBorder1_N := RGB( 181, 61, 29 )
   oSkinB:aClrNormal    := { { .50, nRGB( 210, 235, 216 ), nRGB(   0,  73, 138 ) } }

   SkinButtons( oSkinB )

   DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 00, -14 BOLD

   MENU oMenu 2007

      MenuItem "From Resource" ACTION FromrES( oWnd )

      MENUITEM "&Salida" ACTION( oWnd:End() )

   ENDMENU

   DEFINE WINDOW oWnd TITLE "Test Button Get Transparent" MENU oMenu PIXEL

   oWnd:SetFont( oFont )

   ACTIVATE WINDOW oWnd MAXIMIZED

   oFont:End()

RETURN NIL

FUNCTION FromRes( oWnd )

   LOCAL oDlg, oGet1, oGet2, oGet3, oGet4, cVar1, cVar2, cVar3, cVar4, oFont
   LOCAL oBtnDisp, lActive := .F., cLinares, oGet, oFont2, oBtnVisu, oSay
   LOCAL oSaida, oFnt, oCbx, cItem := "", aGrad

   cVar1 := 0
   cVar2 := 0
   cVar3 := 0
   cVar4 := 0
   cLinares := SPACE(50)

   cLinares := oEmToAnsi( "USER: ANTONIO LI¥ARES CA¥AS" )

   aGrad := { { .50, nRGB( 210, 235, 216 ), nRGB( 255, 255, 255 ) } }

   DEFINE FONT oFnt   NAME "Ms Sans Serif" SIZE 00, -12 BOLD
   DEFINE FONT oFont  NAME "Ms Sans Serif" SIZE 00, -14 BOLD
   DEFINE FONT oFont2 NAME "Ms Sans Serif" SIZE 00, -18 BOLD

   DEFINE DIALOG oDlg RESOURCE "fromres" OF oWnd GRADIENT aGrad FONT oFont

   oDlg:lHelpIcon := .F.

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   REDEFINE SAY ID 401 OF oDlg COLORS METRO_AMBER,  CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 402 OF oDlg COLORS METRO_PINK,   CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 403 OF oDlg COLORS METRO_COBALT, CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 430 OF oDlg COLORS CLR_BLACK,    CLR_WHITE UPDATE FONT oFnt  TRANSPARENT

   REDEFINE GET oGet1 VAR cVar1 id 100 bitmap "on" UPDATE ;
      ACTION( msginfo( "With Transparent" ) ) of oDlg

   oGet1:lBtnTransparent := .T.       // transparent button get oGet1

   REDEFINE GET oGet2 VAR cVar2 id 101 bitmap "on"UPDATE  ;
      ACTION( msginfo( "Without Transparent" ) ) of oDlg

   oGet2:lBtnTransparent := .T.       // transparent button get oGet1

   REDEFINE GET oGet3 VAR cVar3 id 102 bitmap "chkyes" UPDATE ;
      ACTION( msginfo( "With Adjust-Transparent" ) )   ;
      COLOR CLR_BLACK, CLR_CYAN of oDlg

   oGet3:disable()
   oGet3:lBtnTransparent := .T.       // transparent button get oGet3
   oGet3:lAdjustBtn      := .T.       // Button Get Adjust Witdh oGet3
   oGet3:lDisColors      := .F.       // Deactive disable color
   oGet3:nClrTextDis     := CLR_WHITE // Color text disable status
   oGet3:nClrPaneDis     := CLR_BLUE  // Color Pane disable status

   REDEFINE GET oGet4 VAR cVar4 id 103 bitmap "chkyes" UPDATE ;
      ACTION( if( lActive, oGet3:disable(), oGet3:enable() ), ;
                  lActive := !lActive, oDlg:Update() ) of oDlg

   oGet4:lAdjustBtn := .T.

   REDEFINE GET oGet VAR cLinares ID 4001 OF oDlg PICTURE "@!" UPDATE        ;
      COLORS METRO_ORANGE, CLR_WHITE FONT oFont2

   REDEFINE BITMAP oBtnVisu ID 122 RESOURCE "FIVEWIN" TRANSPARENT OF oDlg

   REDEFINE BUTTONBMP oSaida ID 301 OF oDlg RESOURCE "EXIT" TEXTRIGHT        ;
      ACTION ( oDlg:End() ) CANCEL

   oSaida:cTooltip := { "Click no Botão Para Sair",                          ;
                        "Saida - Exit - Cancelar ", 1, CLR_WHITE, CLR_CYAN }

   oGet:bPainted := { || Display( oGet ) }

   REDEFINE BITMAP oBtnDisp ID 121 RESOURCE "HOME"    TRANSPARENT OF oDlg

   REDEFINE COMBOBOX oCbx VAR cItem ITEMS { "Testing", "this", "ComboBox" } ;
      HEIGHTGET 24 ID 210 OF oDlg COLOR "W*/R+"                             ;
      VALID ( MsgBeep(), .t. )

   oCbx:bPainted := { || Display2( oCbx ) }

   ACTIVATE DIALOG oDlg CENTERED

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   oFont:End()
   oFont2:End()
   oFnt:End()

RETURN NIL

STATIC FUNCTION Display( o )  // CON GET FUNCIONA PERFECTO!

   LOCAL hDC      := o:oWnd:GetDC()
   LOCAL aRect    := GetClientRect( o:hWnd )
   LOCAL oBtn

   IF Empty( o:Varget() )

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 6, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_RED, 4 )
   ELSE

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 22, o:nTop + aRect[ 1 ] - 4, o:nLeft + aRect[ 4 ] + 6, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_GREEN, 4 )

   ENDIF

   o:oWnd:ReleaseDC()

RETURN NIL

STATIC FUNCTION Display2( o ) // CON COMBOBOX, NO FUNCIONA!

   local hDC      := o:oWnd:GetDC()
   local aRect    := GetClientRect( o:hWnd )
   local oBtn

   if Empty( o:Varget() )

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_RED, 4 )
   else

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 16, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 12, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_GREEN, 4 )

   endif

   o:oWnd:ReleaseDC()

RETURN NIL

// FIN / END - kapiabafwh@gmail.com
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by Armando]]> 2025-04-27T10:18:36-06:00 2025-04-27T10:18:36-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279209#p279209
Siguiendo este post, me surge la idea, (seguramente ya existe la solución), se puede cambiar el color del marco cuando
tenga el foco?, cómo?, para todos los controles.

Esto es para que el usuario vea donde esta el foco.

Saludos]]>

Siguiendo este post, me surge la idea, (seguramente ya existe la solución), se puede cambiar el color del marco cuando
tenga el foco?, cómo?, para todos los controles.

Esto es para que el usuario vea donde esta el foco.

Saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by karinha]]> 2025-04-27T10:25:14-06:00 2025-04-27T10:25:14-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279210#p279210
https://mega.nz/file/EFkmhJxS#KaPLU6fWt ... q900wjVAFU

Regards, saludos.]]>

https://mega.nz/file/EFkmhJxS#KaPLU6fWt ... q900wjVAFU

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by cnavarro]]> 2025-04-27T17:01:46-06:00 2025-04-27T17:01:46-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279212#p279212
karinha wrote: Sun Apr 27, 2025 4:13 pm Master Navarro, con GET, funciona PERFECTO! Con COMBOBOX, NO FUNCIONA!

https://imgur.com/sWV9foI

Image

Regards, saludos.

Joao, evidentemente no funciona con combobox, el control TCombobox no tiene el method Paint, por lo que no puedes usar el bPainted, tienes que usar la técnica que utilizo en:
viewtopic.php?p=279177#p279177]]>
karinha wrote: Sun Apr 27, 2025 4:13 pm Master Navarro, con GET, funciona PERFECTO! Con COMBOBOX, NO FUNCIONA!

https://imgur.com/sWV9foI

Image

Regards, saludos.

Joao, evidentemente no funciona con combobox, el control TCombobox no tiene el method Paint, por lo que no puedes usar el bPainted, tienes que usar la técnica que utilizo en:
viewtopic.php?p=279177#p279177]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by cnavarro]]> 2025-04-27T17:04:49-06:00 2025-04-27T17:04:49-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279213#p279213
Armando wrote: Sun Apr 27, 2025 4:18 pm Saludos a todo el foro:

Siguiendo este post, me surge la idea, (seguramente ya existe la solución), se puede cambiar el color del marco cuando
tenga el foco?, cómo?, para todos los controles.

Esto es para que el usuario vea donde esta el foco.

Saludos
Solo existe para los GETS

Code: Select all | Expand

     // Ponerlo al principio de tu app
      SetGetColorFocus( 16776960 )    // Color: CLR_CYAN, Rgb( 200, 200, 200 ) o el que consideres
]]>
Armando wrote: Sun Apr 27, 2025 4:18 pm Saludos a todo el foro:

Siguiendo este post, me surge la idea, (seguramente ya existe la solución), se puede cambiar el color del marco cuando
tenga el foco?, cómo?, para todos los controles.

Esto es para que el usuario vea donde esta el foco.

Saludos
Solo existe para los GETS

Code: Select all | Expand

     // Ponerlo al principio de tu app
      SetGetColorFocus( 16776960 )    // Color: CLR_CYAN, Rgb( 200, 200, 200 ) o el que consideres
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by karinha]]> 2025-04-28T07:49:25-06:00 2025-04-28T07:49:25-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279219#p279219
https://imgur.com/ODg5GEM

Image

Muchas gracias.

Regards, saludos.]]>

https://imgur.com/ODg5GEM

Image

Muchas gracias.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by karinha]]> 2025-04-28T07:57:25-06:00 2025-04-28T07:57:25-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279220#p279220

Code: Select all | Expand

// C:\GETBORDE\TESTGET3.PRG - 26/04/2025 - By Kapiaba the best of the World.
// MODIFICADO EM: 28/04/2025 - Por: Joao Santos - Sao Paulo/Brazil.

#Include "FiveWin.ch"

#define METRO_VERDE13 nRGB(  34, 177,  76 )
#define CLR_VSBAR     nRGB( 207, 214, 228 )
#define CLR_VSMAR     nRGB(   0,  73, 138 )

FUNCTION Main()

   LOCAL oWnd, oMenu, oFont, oSkinB, oIco

   SetBalloon( .T. ) // Balloon shape required for tooltips

   oSkinB = TSkinButton():New()

   oSkinB:nClrBorder0_N := RGB( 249, 194, 179 )
   oSkinB:nClrBorder1_N := RGB( 181, 61, 29 )
   oSkinB:aClrNormal    := { { .50, nRGB( 210, 235, 216 ), nRGB(   0,  73, 138 ) } }

   SkinButtons( oSkinB )

   DEFINE ICON oIco   RESOURCE "ICONE05"  // EN: TESTGET3.RES
   DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 00, -14 BOLD

   MENU oMenu 2007

      MenuItem "From Resource" ACTION FromrES( oWnd )

      MENUITEM "&Salida" ACTION( oWnd:End() )

   ENDMENU

   DEFINE WINDOW oWnd TITLE "Test Button Get Transparent" MENU oMenu PIXEL   ;
      ICON oIco MDI

   oWnd:SetFont( oFont )

   ACTIVATE WINDOW oWnd MAXIMIZED

   oFont:End()

RETURN NIL

FUNCTION FromRes( oWnd )

   LOCAL oDlg, oGet1, oGet2, oGet3, oGet4, cVar1, cVar2, cVar3, cVar4, oFont
   LOCAL oBtnDisp, lActive := .F., cLinares, oGet, oFont2, oBtnVisu, oSay
   LOCAL oSaida, oFnt, oCbx, cItem := "", aGrad, oBtnFive, oIco

   cVar1 := 0
   cVar2 := 0
   cVar3 := 0
   cVar4 := 0
   cLinares := SPACE(50)

   cLinares := OemToAnsi( "USER: ANTONIO LI¥ARES CA¥AS" )

   aGrad := { { .50, nRGB( 210, 235, 216 ), nRGB( 255, 255, 255 ) } }

   DEFINE ICON oIco   RESOURCE "ICONE05"  // EN: TESTGET3.RES
   DEFINE FONT oFnt   NAME "Ms Sans Serif" SIZE 00, -12 BOLD
   DEFINE FONT oFont  NAME "Ms Sans Serif" SIZE 00, -14 BOLD
   DEFINE FONT oFont2 NAME "Ms Sans Serif" SIZE 00, -18 BOLD

   DEFINE DIALOG oDlg RESOURCE "fromres" OF oWnd GRADIENT aGrad ICON oIco    ;
      FONT oFont

   oDlg:lHelpIcon := .F.

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   REDEFINE SAY ID 401 OF oDlg COLORS METRO_AMBER,   CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 402 OF oDlg COLORS METRO_PINK,    CLR_WHITE UPDATE FONT oFnt  TRANSPARENT
   REDEFINE SAY ID 403 OF oDlg COLORS METRO_COBALT,  CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 404 OF oDlg COLORS METRO_VERDE13, CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 430 OF oDlg COLORS CLR_VSMAR,     CLR_WHITE UPDATE FONT oFnt  TRANSPARENT

   REDEFINE GET oGet1 VAR cVar1 id 100 bitmap "on" UPDATE ;
      ACTION( MsgInfo( "With Transparent" ) ) of oDlg

   oGet1:lBtnTransparent := .T.       // transparent button get oGet1

   REDEFINE GET oGet2 VAR cVar2 id 101 bitmap "on"UPDATE  ;
      ACTION( MsgInfo( "Without Transparent" ) ) of oDlg

   oGet2:lBtnTransparent := .T.       // transparent button get oGet1

   REDEFINE GET oGet3 VAR cVar3 id 102 bitmap "chkyes" UPDATE ;
      ACTION( MsgInfo( "With Adjust-Transparent" ) )   ;
      COLOR CLR_BLACK, CLR_CYAN of oDlg

   oGet3:disable()
   oGet3:lBtnTransparent := .T.       // transparent button get oGet3
   oGet3:lAdjustBtn      := .T.       // Button Get Adjust Witdh oGet3
   oGet3:lDisColors      := .F.       // Deactive disable color
   oGet3:nClrTextDis     := CLR_WHITE // Color text disable status
   oGet3:nClrPaneDis     := CLR_BLUE  // Color Pane disable status

   REDEFINE GET oGet4 VAR cVar4 id 103 bitmap "chkyes" UPDATE ;
      ACTION( if( lActive, oGet3:disable(), oGet3:enable() ), ;
                  lActive := !lActive, oDlg:Update() ) of oDlg

   oGet4:lAdjustBtn := .T.

   REDEFINE GET oGet VAR cLinares ID 4001 OF oDlg PICTURE "@!" UPDATE        ;
      COLORS METRO_ORANGE, CLR_WHITE FONT oFont2

   oGet:bPainted := { || Display( oGet ) }

   REDEFINE BITMAP oBtnDisp ID 121 RESOURCE "HOME"     TRANSPARENT OF oDlg
   REDEFINE BITMAP oBtnVisu ID 122 RESOURCE "FIVEWIN"  TRANSPARENT OF oDlg
   REDEFINE BITMAP oBtnFive ID 123 RESOURCE "FIVETECH" TRANSPARENT OF oDlg

   REDEFINE BUTTONBMP oSaida ID 301 OF oDlg RESOURCE "EXIT" TEXTRIGHT        ;
      ACTION ( oDlg:End() ) CANCEL

   oSaida:cTooltip := { "Click no Botão Para Sair",                          ;
                        "Saida - Exit - Cancelar ", 1, CLR_WHITE, CLR_CYAN }

   REDEFINE COMBOBOX oCbx VAR cItem ITEMS { "Testing", "this", "ComboBox" } ;
      HEIGHTGET 24 ID 210 OF oDlg COLOR "W*/R+"                             ;
      VALID ( MsgBeep(), .t. )

   __clsAddMsg( oCbx:ClassH, "Display", @Display2(), HB_OO_MSG_METHOD,, 1 )

   ACTIVATE DIALOG oDlg CENTERED

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   oFont:End()
   oFont2:End()
   oFnt:End()

RETURN NIL

STATIC FUNCTION Display( o )  // CON GET FUNCIONA PERFECTO!

   LOCAL hDC      := o:oWnd:GetDC()
   LOCAL aRect    := GetClientRect( o:hWnd )
   LOCAL oBtn

   IF Empty( o:Varget() )

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 6, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_RED, 4 )
   ELSE

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 22, o:nTop + aRect[ 1 ] - 4, o:nLeft + aRect[ 4 ] + 6, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_GREEN, 4 )

   ENDIF

   o:oWnd:ReleaseDC()

RETURN NIL

STATIC FUNCTION Display2( o ) // CON COMBOBOX, FUNCIONA PERFECTO!

   LOCAL Self := QSelf()
   LOCAL hDC      := ::GetDC()
   LOCAL aRect    := GetClientRect( ::hWnd )

   IF Empty( ::Varget() )

      RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
          METRO_ORANGE, 4 )

   ELSE

      RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
          METRO_ORANGE, 4 )

   ENDIF

   ::ReleaseDC()

RETURN NIL

// FIN / END - kapiabafwh@gmail.com
Regards, saludos.]]>

Code: Select all | Expand

// C:\GETBORDE\TESTGET3.PRG - 26/04/2025 - By Kapiaba the best of the World.
// MODIFICADO EM: 28/04/2025 - Por: Joao Santos - Sao Paulo/Brazil.

#Include "FiveWin.ch"

#define METRO_VERDE13 nRGB(  34, 177,  76 )
#define CLR_VSBAR     nRGB( 207, 214, 228 )
#define CLR_VSMAR     nRGB(   0,  73, 138 )

FUNCTION Main()

   LOCAL oWnd, oMenu, oFont, oSkinB, oIco

   SetBalloon( .T. ) // Balloon shape required for tooltips

   oSkinB = TSkinButton():New()

   oSkinB:nClrBorder0_N := RGB( 249, 194, 179 )
   oSkinB:nClrBorder1_N := RGB( 181, 61, 29 )
   oSkinB:aClrNormal    := { { .50, nRGB( 210, 235, 216 ), nRGB(   0,  73, 138 ) } }

   SkinButtons( oSkinB )

   DEFINE ICON oIco   RESOURCE "ICONE05"  // EN: TESTGET3.RES
   DEFINE FONT oFont NAME "Ms Sans Serif" SIZE 00, -14 BOLD

   MENU oMenu 2007

      MenuItem "From Resource" ACTION FromrES( oWnd )

      MENUITEM "&Salida" ACTION( oWnd:End() )

   ENDMENU

   DEFINE WINDOW oWnd TITLE "Test Button Get Transparent" MENU oMenu PIXEL   ;
      ICON oIco MDI

   oWnd:SetFont( oFont )

   ACTIVATE WINDOW oWnd MAXIMIZED

   oFont:End()

RETURN NIL

FUNCTION FromRes( oWnd )

   LOCAL oDlg, oGet1, oGet2, oGet3, oGet4, cVar1, cVar2, cVar3, cVar4, oFont
   LOCAL oBtnDisp, lActive := .F., cLinares, oGet, oFont2, oBtnVisu, oSay
   LOCAL oSaida, oFnt, oCbx, cItem := "", aGrad, oBtnFive, oIco

   cVar1 := 0
   cVar2 := 0
   cVar3 := 0
   cVar4 := 0
   cLinares := SPACE(50)

   cLinares := OemToAnsi( "USER: ANTONIO LI¥ARES CA¥AS" )

   aGrad := { { .50, nRGB( 210, 235, 216 ), nRGB( 255, 255, 255 ) } }

   DEFINE ICON oIco   RESOURCE "ICONE05"  // EN: TESTGET3.RES
   DEFINE FONT oFnt   NAME "Ms Sans Serif" SIZE 00, -12 BOLD
   DEFINE FONT oFont  NAME "Ms Sans Serif" SIZE 00, -14 BOLD
   DEFINE FONT oFont2 NAME "Ms Sans Serif" SIZE 00, -18 BOLD

   DEFINE DIALOG oDlg RESOURCE "fromres" OF oWnd GRADIENT aGrad ICON oIco    ;
      FONT oFont

   oDlg:lHelpIcon := .F.

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   REDEFINE SAY ID 401 OF oDlg COLORS METRO_AMBER,   CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 402 OF oDlg COLORS METRO_PINK,    CLR_WHITE UPDATE FONT oFnt  TRANSPARENT
   REDEFINE SAY ID 403 OF oDlg COLORS METRO_COBALT,  CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 404 OF oDlg COLORS METRO_VERDE13, CLR_WHITE UPDATE FONT oFont TRANSPARENT
   REDEFINE SAY ID 430 OF oDlg COLORS CLR_VSMAR,     CLR_WHITE UPDATE FONT oFnt  TRANSPARENT

   REDEFINE GET oGet1 VAR cVar1 id 100 bitmap "on" UPDATE ;
      ACTION( MsgInfo( "With Transparent" ) ) of oDlg

   oGet1:lBtnTransparent := .T.       // transparent button get oGet1

   REDEFINE GET oGet2 VAR cVar2 id 101 bitmap "on"UPDATE  ;
      ACTION( MsgInfo( "Without Transparent" ) ) of oDlg

   oGet2:lBtnTransparent := .T.       // transparent button get oGet1

   REDEFINE GET oGet3 VAR cVar3 id 102 bitmap "chkyes" UPDATE ;
      ACTION( MsgInfo( "With Adjust-Transparent" ) )   ;
      COLOR CLR_BLACK, CLR_CYAN of oDlg

   oGet3:disable()
   oGet3:lBtnTransparent := .T.       // transparent button get oGet3
   oGet3:lAdjustBtn      := .T.       // Button Get Adjust Witdh oGet3
   oGet3:lDisColors      := .F.       // Deactive disable color
   oGet3:nClrTextDis     := CLR_WHITE // Color text disable status
   oGet3:nClrPaneDis     := CLR_BLUE  // Color Pane disable status

   REDEFINE GET oGet4 VAR cVar4 id 103 bitmap "chkyes" UPDATE ;
      ACTION( if( lActive, oGet3:disable(), oGet3:enable() ), ;
                  lActive := !lActive, oDlg:Update() ) of oDlg

   oGet4:lAdjustBtn := .T.

   REDEFINE GET oGet VAR cLinares ID 4001 OF oDlg PICTURE "@!" UPDATE        ;
      COLORS METRO_ORANGE, CLR_WHITE FONT oFont2

   oGet:bPainted := { || Display( oGet ) }

   REDEFINE BITMAP oBtnDisp ID 121 RESOURCE "HOME"     TRANSPARENT OF oDlg
   REDEFINE BITMAP oBtnVisu ID 122 RESOURCE "FIVEWIN"  TRANSPARENT OF oDlg
   REDEFINE BITMAP oBtnFive ID 123 RESOURCE "FIVETECH" TRANSPARENT OF oDlg

   REDEFINE BUTTONBMP oSaida ID 301 OF oDlg RESOURCE "EXIT" TEXTRIGHT        ;
      ACTION ( oDlg:End() ) CANCEL

   oSaida:cTooltip := { "Click no Botão Para Sair",                          ;
                        "Saida - Exit - Cancelar ", 1, CLR_WHITE, CLR_CYAN }

   REDEFINE COMBOBOX oCbx VAR cItem ITEMS { "Testing", "this", "ComboBox" } ;
      HEIGHTGET 24 ID 210 OF oDlg COLOR "W*/R+"                             ;
      VALID ( MsgBeep(), .t. )

   __clsAddMsg( oCbx:ClassH, "Display", @Display2(), HB_OO_MSG_METHOD,, 1 )

   ACTIVATE DIALOG oDlg CENTERED

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   oFont:End()
   oFont2:End()
   oFnt:End()

RETURN NIL

STATIC FUNCTION Display( o )  // CON GET FUNCIONA PERFECTO!

   LOCAL hDC      := o:oWnd:GetDC()
   LOCAL aRect    := GetClientRect( o:hWnd )
   LOCAL oBtn

   IF Empty( o:Varget() )

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 6, o:nTop + aRect[ 1 ] - 6, o:nLeft + aRect[ 4 ] + 6, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_RED, 4 )
   ELSE

      RoundBox( hDC, aRect[ 2 ] + o:nLeft - 22, o:nTop + aRect[ 1 ] - 4, o:nLeft + aRect[ 4 ] + 6, o:nTop + aRect[ 3 ] + 12, 0, 0, ;
                            CLR_GREEN, 4 )

   ENDIF

   o:oWnd:ReleaseDC()

RETURN NIL

STATIC FUNCTION Display2( o ) // CON COMBOBOX, FUNCIONA PERFECTO!

   LOCAL Self := QSelf()
   LOCAL hDC      := ::GetDC()
   LOCAL aRect    := GetClientRect( ::hWnd )

   IF Empty( ::Varget() )

      RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
          METRO_ORANGE, 4 )

   ELSE

      RoundBox( hDC, aRect[ 2 ] - 6, aRect[ 1 ] - 6, aRect[ 4 ] + 6, aRect[ 3 ] + 6, 0, 0, ;
          METRO_ORANGE, 4 )

   ENDIF

   ::ReleaseDC()

RETURN NIL

// FIN / END - kapiabafwh@gmail.com
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by karinha]]> 2025-04-28T08:04:19-06:00 2025-04-28T08:04:19-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279221#p279221
https://mega.nz/file/5IUlxYpL#m5Kfhm2GL ... -Ytgd3ubaU

Regards, saludos.]]>

https://mega.nz/file/5IUlxYpL#m5Kfhm2GL ... -Ytgd3ubaU

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by sysctrl2]]> 2025-04-28T10:36:09-06:00 2025-04-28T10:36:09-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279224#p279224 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by sysctrl2]]> 2025-04-28T10:46:30-06:00 2025-04-28T10:46:30-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279225#p279225
se puede ? :lol:]]>

se puede ? :lol:]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Combobox con marca visual de obligatoriedad :: Reply by karinha]]> 2025-04-28T10:53:01-06:00 2025-04-28T10:53:01-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45642&p=279226#p279226
sysctrl2 wrote: Mon Apr 28, 2025 4:46 pm El rectángulo de color solo debería de aparecer en el GET activo :shock:
se puede ? :lol:
tal vez:

Code: Select all | Expand

   oGet:lActive
Regards, saludos.]]>
sysctrl2 wrote: Mon Apr 28, 2025 4:46 pm El rectángulo de color solo debería de aparecer en el GET activo :shock:
se puede ? :lol:
tal vez:

Code: Select all | Expand

   oGet:lActive
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: COMPILAR MAKE :: Author claudio.leiva]]> 2025-04-28T09:35:20-06:00 2025-04-28T09:35:20-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45645&p=279222#p279222 yo molestandote nuevamente
compilar con MAKE.. directo.. hay un ejemplo en la carpeta visual de fivewin
se llama go.bat.. y no me sale...

alguien me puede explicar con peras y manzanas como se compila con MAKE.
yo uso buildh.bat y va bien
pero quiero saber como se hace con MAKE
porfass.]]>
yo molestandote nuevamente
compilar con MAKE.. directo.. hay un ejemplo en la carpeta visual de fivewin
se llama go.bat.. y no me sale...

alguien me puede explicar con peras y manzanas como se compila con MAKE.
yo uso buildh.bat y va bien
pero quiero saber como se hace con MAKE
porfass.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-28T10:12:55-06:00 2025-04-28T10:12:55-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45645&p=279223#p279223
https://mega.nz/file/ZMFVBCQC#EhWqJ7Fj- ... DEDXXlLFmc

Regards, saludos.]]>

https://mega.nz/file/ZMFVBCQC#EhWqJ7Fj- ... DEDXXlLFmc

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-28T14:23:21-06:00 2025-04-28T14:23:21-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45645&p=279227#p279227

Code: Select all | Expand

#VisualFW Borland make, (c) FiveTech Software 2005-2025

HBDIR=c:\XHBBCC77
BCDIR=C:\BCC77
FWDIR=C:\FWH

#change these paths as needed
.path.OBJ = .\obj
.path.PRG = ..\acbrreal
.path.CH  = $(FWDIR)\include;$(HBDIR)\include
.path.C   = .\
.path.rc  = .\   

#important: Use Uppercase for filenames extensions!

PRGS =         \
.\ACBRREAL.PRG \
.\FUNCOES.PRG  \
.\ABERTURA.PRG \
.\OUTL2007.PRG \
.\RMAILAMB.PRG \
.\ENVIADOS.PRG \
.\DSAY.PRG     \
.\CONTROL.PRG  \
.\ERRSYSW.PRG  \
.\MSGRUN.PRG   \

OBJ = $(PRGS:.PRG=.OBJ)
OBJS = $(OBJ:.\=.\obj\)

#PROJECT    : TEST.exe
PROJECT    : ACBRREAL.exe

#TEST.exe : $(OBJS)
ACBRREAL.exe : $(OBJS)
  @echo off
    
  @echo -L$(BCDIR)\lib;$(BCDIR)\lib\psdk + > b32.bc   
  @echo $(BCDIR)\lib\c0w32.obj + >> b32.bc
  @echo $(OBJS), + >> b32.bc
  @echo ACBRREAL.exe, + >> b32.bc
  @echo TEST.map, + >> b32.bc
# fivewin
  @echo $(FWDIR)\lib\Fivehx.lib + >> b32.bc 
  @echo $(FWDIR)\lib\FiveHC.lib + >> b32.bc  
  @echo $(FWDIR)\lib\libmysql.lib + >> b32.bc
  @echo $(FWDIR)\lib\pgsql.lib + >> b32.bc  
  @echo $(FWDIR)\lib\libpq.lib + >> b32.bc
# xharbour
  @echo $(HBDIR)\lib\hbhpdf.lib + >> b32.bc
  @echo $(HBDIR)\lib\libharu.lib + >> b32.bc
  @echo $(HBDIR)\lib\png.lib + >> b32.bc
  @echo $(HBDIR)\lib\rtl.lib + >> b32.bc
  @echo $(HBDIR)\lib\vm.lib + >> b32.bc
  @echo $(HBDIR)\lib\gtgui.lib + >> b32.bc
  @echo $(HBDIR)\lib\lang.lib + >> b32.bc
  @echo $(HBDIR)\lib\macro.lib + >> b32.bc
  @echo $(HBDIR)\lib\rdd.lib + >> b32.bc
  @echo $(HBDIR)\lib\dbfntx.lib + >> b32.bc
  @echo $(HBDIR)\lib\dbfcdx.lib + >> b32.bc
  @echo $(HBDIR)\lib\dbffpt.lib + >> b32.bc
  @echo $(HBDIR)\lib\hbsix.lib + >> b32.bc
  @echo $(HBDIR)\lib\debug.lib + >> b32.bc
  @echo $(HBDIR)\lib\common.lib + >> b32.bc
  @echo $(HBDIR)\lib\codepage.lib + >> b32.bc
  @echo $(HBDIR)\lib\pp.lib + >> b32.bc
  @echo $(HBDIR)\lib\pcrepos.lib + >> b32.bc
  @echo $(HBDIR)\lib\ct.lib + >> b32.bc
  @echo $(HBDIR)\lib\zlib.lib + >> b32.bc
  @echo $(HBDIR)\lib\hbzip.lib + >> b32.bc
  @echo $(HBDIR)\lib\libmisc.lib + >> b32.bc
  @echo $(HBDIR)\lib\tip.lib + >> b32.bc
  @echo $(HBDIR)\lib\hbzebra.lib + >> b32.bc
#  BCC77
  @echo $(BCDIR)\lib\cw32.lib + >> b32.bc
  @echo $(BCDIR)\lib\import32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\uuid.lib + >> b32.bc
  @echo $(BCDIR)\lib\ws2_32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\odbc32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\rasapi32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\nddeapi.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\msimg32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\psapi.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\uxtheme.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\gdiplus.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\iphlpapi.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\shell32.lib, >> b32.bc
   
#  @echo TEST.RES  + >> b32.bc
  @echo ACBRREAL.RES + >> b32.bc
  @echo IMAGENS.RES  + >> b32.bc
  @echo IMAGEN2.RES  + >> b32.bc
  @echo IMAGENS4.RES + >> b32.bc
  @echo EMAIL.RES    + >> b32.bc

  $(BCDIR)\bin\BRC32.EXE -R XPLOOK.RC
   
  $(BCDIR)\bin\ilink32 -Gn -aa -Tpe -s @b32.bc
#  del b32.bc

.PRG.OBJ:
  $(HBDIR)\bin\harbour $< /N /Oobj\ /I$(FWDIR)\include;$(HBDIR)\include
  $(BCDIR)\bin\bcc32 -c -tWM -I$(HBDIR)\include -oobj\$& obj\$&.c

.C.OBJ:
  @echo -c -tWM -D__HARBOUR__ > tmp
  @echo -I$(HBDIR)\include;$(FWDIR)\include >> tmp
  $(BCDIR)\bin\bcc32 -oobj\$& @tmp $&.c
  del tmp
Regards, saludos.]]>

Code: Select all | Expand

#VisualFW Borland make, (c) FiveTech Software 2005-2025

HBDIR=c:\XHBBCC77
BCDIR=C:\BCC77
FWDIR=C:\FWH

#change these paths as needed
.path.OBJ = .\obj
.path.PRG = ..\acbrreal
.path.CH  = $(FWDIR)\include;$(HBDIR)\include
.path.C   = .\
.path.rc  = .\   

#important: Use Uppercase for filenames extensions!

PRGS =         \
.\ACBRREAL.PRG \
.\FUNCOES.PRG  \
.\ABERTURA.PRG \
.\OUTL2007.PRG \
.\RMAILAMB.PRG \
.\ENVIADOS.PRG \
.\DSAY.PRG     \
.\CONTROL.PRG  \
.\ERRSYSW.PRG  \
.\MSGRUN.PRG   \

OBJ = $(PRGS:.PRG=.OBJ)
OBJS = $(OBJ:.\=.\obj\)

#PROJECT    : TEST.exe
PROJECT    : ACBRREAL.exe

#TEST.exe : $(OBJS)
ACBRREAL.exe : $(OBJS)
  @echo off
    
  @echo -L$(BCDIR)\lib;$(BCDIR)\lib\psdk + > b32.bc   
  @echo $(BCDIR)\lib\c0w32.obj + >> b32.bc
  @echo $(OBJS), + >> b32.bc
  @echo ACBRREAL.exe, + >> b32.bc
  @echo TEST.map, + >> b32.bc
# fivewin
  @echo $(FWDIR)\lib\Fivehx.lib + >> b32.bc 
  @echo $(FWDIR)\lib\FiveHC.lib + >> b32.bc  
  @echo $(FWDIR)\lib\libmysql.lib + >> b32.bc
  @echo $(FWDIR)\lib\pgsql.lib + >> b32.bc  
  @echo $(FWDIR)\lib\libpq.lib + >> b32.bc
# xharbour
  @echo $(HBDIR)\lib\hbhpdf.lib + >> b32.bc
  @echo $(HBDIR)\lib\libharu.lib + >> b32.bc
  @echo $(HBDIR)\lib\png.lib + >> b32.bc
  @echo $(HBDIR)\lib\rtl.lib + >> b32.bc
  @echo $(HBDIR)\lib\vm.lib + >> b32.bc
  @echo $(HBDIR)\lib\gtgui.lib + >> b32.bc
  @echo $(HBDIR)\lib\lang.lib + >> b32.bc
  @echo $(HBDIR)\lib\macro.lib + >> b32.bc
  @echo $(HBDIR)\lib\rdd.lib + >> b32.bc
  @echo $(HBDIR)\lib\dbfntx.lib + >> b32.bc
  @echo $(HBDIR)\lib\dbfcdx.lib + >> b32.bc
  @echo $(HBDIR)\lib\dbffpt.lib + >> b32.bc
  @echo $(HBDIR)\lib\hbsix.lib + >> b32.bc
  @echo $(HBDIR)\lib\debug.lib + >> b32.bc
  @echo $(HBDIR)\lib\common.lib + >> b32.bc
  @echo $(HBDIR)\lib\codepage.lib + >> b32.bc
  @echo $(HBDIR)\lib\pp.lib + >> b32.bc
  @echo $(HBDIR)\lib\pcrepos.lib + >> b32.bc
  @echo $(HBDIR)\lib\ct.lib + >> b32.bc
  @echo $(HBDIR)\lib\zlib.lib + >> b32.bc
  @echo $(HBDIR)\lib\hbzip.lib + >> b32.bc
  @echo $(HBDIR)\lib\libmisc.lib + >> b32.bc
  @echo $(HBDIR)\lib\tip.lib + >> b32.bc
  @echo $(HBDIR)\lib\hbzebra.lib + >> b32.bc
#  BCC77
  @echo $(BCDIR)\lib\cw32.lib + >> b32.bc
  @echo $(BCDIR)\lib\import32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\uuid.lib + >> b32.bc
  @echo $(BCDIR)\lib\ws2_32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\odbc32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\rasapi32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\nddeapi.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\msimg32.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\psapi.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\uxtheme.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\gdiplus.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\iphlpapi.lib + >> b32.bc
  @echo $(BCDIR)\lib\psdk\shell32.lib, >> b32.bc
   
#  @echo TEST.RES  + >> b32.bc
  @echo ACBRREAL.RES + >> b32.bc
  @echo IMAGENS.RES  + >> b32.bc
  @echo IMAGEN2.RES  + >> b32.bc
  @echo IMAGENS4.RES + >> b32.bc
  @echo EMAIL.RES    + >> b32.bc

  $(BCDIR)\bin\BRC32.EXE -R XPLOOK.RC
   
  $(BCDIR)\bin\ilink32 -Gn -aa -Tpe -s @b32.bc
#  del b32.bc

.PRG.OBJ:
  $(HBDIR)\bin\harbour $< /N /Oobj\ /I$(FWDIR)\include;$(HBDIR)\include
  $(BCDIR)\bin\bcc32 -c -tWM -I$(HBDIR)\include -oobj\$& obj\$&.c

.C.OBJ:
  @echo -c -tWM -D__HARBOUR__ > tmp
  @echo -I$(HBDIR)\include;$(FWDIR)\include >> tmp
  $(BCDIR)\bin\bcc32 -oobj\$& @tmp $&.c
  del tmp
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-28T14:28:48-06:00 2025-04-28T14:28:48-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45645&p=279228#p279228

Code: Select all | Expand

IF EXIST *.MAP DEL  *.MAP
IF EXIST *.TDS DEL  *.TDS
IF EXIST *.C   DEL  *.C
IF EXIST *.EXE DEL  *.EXE

@if not exist obj md obj
c:\bcc77\bin\make -ftest.mak

if exist ACBRREAL.exe C:\PECOMPACT\PEC2 /NB /EMP:Y /TM:Y /CR:Y /MC ACBRREAL.EXE

if exist ACBRREAL.exe ACBRREAL
Regards, saludos.]]>

Code: Select all | Expand

IF EXIST *.MAP DEL  *.MAP
IF EXIST *.TDS DEL  *.TDS
IF EXIST *.C   DEL  *.C
IF EXIST *.EXE DEL  *.EXE

@if not exist obj md obj
c:\bcc77\bin\make -ftest.mak

if exist ACBRREAL.exe C:\PECOMPACT\PEC2 /NB /EMP:Y /TM:Y /CR:Y /MC ACBRREAL.EXE

if exist ACBRREAL.exe ACBRREAL
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by claudio.leiva]]> 2025-04-28T14:50:56-06:00 2025-04-28T14:50:56-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45645&p=279229#p279229
Muito obrigado, vou ver o arquivo e comento.

saludos]]>

Muito obrigado, vou ver o arquivo e comento.

saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by russimicro]]> 2025-04-30T06:22:08-06:00 2025-04-30T06:22:08-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45645&p=279249#p279249
Obtengo este error al trabajar con el ejemplo : // c:\fwh24_10\samples\report

Fatal: Unable to open file 'UUID.LIB'

HBDIR=c:\harbour_2025
BCDIR=c:\bcc77
FWDIR=c:\fwh24_10


if not exist obj mkdir obj
c:\bcc77\bin\make -frepdem32.mak
IF ERRORLEVEL 0 repdemo.exe]]>

Obtengo este error al trabajar con el ejemplo : // c:\fwh24_10\samples\report

Fatal: Unable to open file 'UUID.LIB'

HBDIR=c:\harbour_2025
BCDIR=c:\bcc77
FWDIR=c:\fwh24_10


if not exist obj mkdir obj
c:\bcc77\bin\make -frepdem32.mak
IF ERRORLEVEL 0 repdemo.exe]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-30T06:53:04-06:00 2025-04-30T06:53:04-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45645&p=279251#p279251
Regards, saludos.]]>

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by russimicro]]> 2025-04-30T06:55:16-06:00 2025-04-30T06:55:16-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45645&p=279252#p279252

Code: Select all | Expand

HBDIR=c:\harbour_2025
BCDIR=c:\bcc77
FWDIR=c:\fwh24_10

#change these paths as needed
.path.OBJ = .\obj
.path.PRG = .\
.path.CH  = $(FWDIR)\include;$(HBDIR)\include
.path.C   = .\
.path.rc  = .\

#important: Use Uppercase for filenames extensions!

PRGS = \
.\REPDEMO.PRG \
.\REP02.PRG \
.\REP03.PRG \
.\REP12.PRG \
.\REP05.PRG \
.\REP04.PRG \
.\REP09.PRG \
.\REP07.PRG \
.\REP15.PRG \
.\REP08.PRG \
.\REP06.PRG \
.\REP10.PRG \
.\REP13.PRG \
.\REP11.PRG \
.\REP21.PRG \
.\REP20.PRG \
.\REP16.PRG \
.\REP19.PRG \
.\REP17.PRG \
.\REP14.PRG \
.\REP18.PRG \
.\REP01.PRG \
.\REP22.PRG \
.\REP23.PRG

OBJ = $(PRGS:.PRG=.OBJ)
OBJS = $(OBJ:.\=.\obj\)

PROJECT    : REPDEMO.EXE 

REPDEMO.EXE : $(OBJS) REPDEMO.RES ..\..\lib\FiveH.lib ..\..\lib\FiveHC.lib
   echo off
   echo $(BCDIR)\lib\c0w32.obj + > b32.bc
   echo $(OBJS), + >> b32.bc
   echo repdemo.exe, + >> b32.bc
   echo repdemo.map, + >> b32.bc
   echo $(FWDIR)\lib\FiveH.lib $(FWDIR)\lib\FiveHC.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbrtl.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbvm.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\gtgui.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hblang.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbmacro.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbrdd.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\rddntx.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\rddcdx.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\rddfpt.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbsix.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbdebug.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbcommon.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbpp.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbpcre.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbwin.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbcpage.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbct.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbcplr.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\png.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbzlib.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbziparc.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbmzip.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbzlib.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\minizip.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\xhb.lib + >> b32.bc
   
   
   rem Uncomment these two lines to use Advantage RDD
   rem echo $(HBDIR)\lib\win\bcc\rddads.lib + >> b32.bc
   rem echo $(HBDIR)\lib\win\bcc\Ace32.lib + >> b32.bc

   echo $(BCDIR)\lib\cw32.lib + >> b32.bc
   echo $(BCDIR)\lib\import32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\odbc32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\nddeapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\iphlpapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\msimg32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\psapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\shell32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\rasapi32.lib, >> b32.bc

   IF EXIST repdemo.res echo repdemo.res >> b32.bc
   $(BCDIR)\bin\ilink32 -Gn -aa -Tpe -s @b32.bc
   del b32.bc

.PRG.OBJ:
  $(HBDIR)\bin\win\bcc\harbour $< /N /W /Oobj\ /I$(FWDIR)\include;$(HBDIR)\include
  $(BCDIR)\bin\bcc32 -c -tWM -I$(HBDIR)\include -oobj\$& obj\$&.c

.C.OBJ:
  echo -c -tWM -D__HARBOUR__ > tmp
  echo -I$(HBDIR)\include;$(FWDIR)\include >> tmp
  $(BCDIR)\bin\bcc32 -oobj\$& @tmp $&.c
  del tmp

REPDEMO.RES : REPDEMO.RC
  $(BCDIR)\bin\brc32.exe -r -I$(BCDIR)\include repdemo.rc
]]>

Code: Select all | Expand

HBDIR=c:\harbour_2025
BCDIR=c:\bcc77
FWDIR=c:\fwh24_10

#change these paths as needed
.path.OBJ = .\obj
.path.PRG = .\
.path.CH  = $(FWDIR)\include;$(HBDIR)\include
.path.C   = .\
.path.rc  = .\

#important: Use Uppercase for filenames extensions!

PRGS = \
.\REPDEMO.PRG \
.\REP02.PRG \
.\REP03.PRG \
.\REP12.PRG \
.\REP05.PRG \
.\REP04.PRG \
.\REP09.PRG \
.\REP07.PRG \
.\REP15.PRG \
.\REP08.PRG \
.\REP06.PRG \
.\REP10.PRG \
.\REP13.PRG \
.\REP11.PRG \
.\REP21.PRG \
.\REP20.PRG \
.\REP16.PRG \
.\REP19.PRG \
.\REP17.PRG \
.\REP14.PRG \
.\REP18.PRG \
.\REP01.PRG \
.\REP22.PRG \
.\REP23.PRG

OBJ = $(PRGS:.PRG=.OBJ)
OBJS = $(OBJ:.\=.\obj\)

PROJECT    : REPDEMO.EXE 

REPDEMO.EXE : $(OBJS) REPDEMO.RES ..\..\lib\FiveH.lib ..\..\lib\FiveHC.lib
   echo off
   echo $(BCDIR)\lib\c0w32.obj + > b32.bc
   echo $(OBJS), + >> b32.bc
   echo repdemo.exe, + >> b32.bc
   echo repdemo.map, + >> b32.bc
   echo $(FWDIR)\lib\FiveH.lib $(FWDIR)\lib\FiveHC.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbrtl.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbvm.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\gtgui.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hblang.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbmacro.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbrdd.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\rddntx.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\rddcdx.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\rddfpt.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbsix.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbdebug.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbcommon.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbpp.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbpcre.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbwin.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbcpage.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbct.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbcplr.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\png.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbzlib.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbziparc.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbmzip.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\hbzlib.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\minizip.lib + >> b32.bc
   echo $(HBDIR)\lib\win\bcc\xhb.lib + >> b32.bc
   
   
   rem Uncomment these two lines to use Advantage RDD
   rem echo $(HBDIR)\lib\win\bcc\rddads.lib + >> b32.bc
   rem echo $(HBDIR)\lib\win\bcc\Ace32.lib + >> b32.bc

   echo $(BCDIR)\lib\cw32.lib + >> b32.bc
   echo $(BCDIR)\lib\import32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\odbc32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\nddeapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\iphlpapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\msimg32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\psapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\shell32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\rasapi32.lib, >> b32.bc

   IF EXIST repdemo.res echo repdemo.res >> b32.bc
   $(BCDIR)\bin\ilink32 -Gn -aa -Tpe -s @b32.bc
   del b32.bc

.PRG.OBJ:
  $(HBDIR)\bin\win\bcc\harbour $< /N /W /Oobj\ /I$(FWDIR)\include;$(HBDIR)\include
  $(BCDIR)\bin\bcc32 -c -tWM -I$(HBDIR)\include -oobj\$& obj\$&.c

.C.OBJ:
  echo -c -tWM -D__HARBOUR__ > tmp
  echo -I$(HBDIR)\include;$(FWDIR)\include >> tmp
  $(BCDIR)\bin\bcc32 -oobj\$& @tmp $&.c
  del tmp

REPDEMO.RES : REPDEMO.RC
  $(BCDIR)\bin\brc32.exe -r -I$(BCDIR)\include repdemo.rc
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by russimicro]]> 2025-04-30T06:56:01-06:00 2025-04-30T06:56:01-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45645&p=279253#p279253

Code: Select all | Expand

if not exist obj mkdir obj
c:\bcc77\bin\make -f repdem32.mak
IF ERRORLEVEL 0 repdemo.exe
]]>

Code: Select all | Expand

if not exist obj mkdir obj
c:\bcc77\bin\make -f repdem32.mak
IF ERRORLEVEL 0 repdemo.exe
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-30T07:38:17-06:00 2025-04-30T07:38:17-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45645&p=279255#p279255
https://imgur.com/rKA9PvS

Image

Gracias, tks.

Regards, saludos.]]>

https://imgur.com/rKA9PvS

Image

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-30T08:20:13-06:00 2025-04-30T08:20:13-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45645&p=279256#p279256

Code: Select all | Expand

#VisualFW Borland make, (c) FiveTech Software 2005-2025 - Modificado: Kapiaba.

HBDIR=c:\HBBCC77
BCDIR=c:\BCC77
FWDIR=C:\fwh...

#change these paths as needed
.path.OBJ = .\obj
.path.PRG = ..\repdemo
.path.CH  = $(FWDIR)\include;$(HBDIR)\include
.path.C   = .\
.path.rc  = .\

#important: Use Uppercase for filenames extensions!

PRGS = \
.\REPDEMO.PRG \
.\REP02.PRG \
.\REP03.PRG \
.\REP12.PRG \
.\REP05.PRG \
.\REP04.PRG \
.\REP09.PRG \
.\REP07.PRG \
.\REP15.PRG \
.\REP08.PRG \
.\REP06.PRG \
.\REP10.PRG \
.\REP13.PRG \
.\REP11.PRG \
.\REP21.PRG \
.\REP20.PRG \
.\REP16.PRG \
.\REP19.PRG \
.\REP17.PRG \
.\REP14.PRG \
.\REP18.PRG \
.\REP01.PRG \
.\REP22.PRG \
.\REP23.PRG

OBJ = $(PRGS:.PRG=.OBJ)
OBJS = $(OBJ:.\=.\obj\)

PROJECT    : REPDEMO.EXE 

REPDEMO.EXE : $(OBJS) REPDEMO.RES $(FWDIR)\lib\FiveH.lib $(FWDIR)\lib\FiveHC.lib
   echo off
   echo $(BCDIR)\lib\c0w32.obj + > b32.bc
   echo $(OBJS), + >> b32.bc
   echo repdemo.exe, + >> b32.bc
   echo repdemo.map, + >> b32.bc
   echo $(FWDIR)\lib\FiveH.lib $(FWDIR)\lib\FiveHC.lib + >> b32.bc
   echo $(HBDIR)\lib\hbrtl.lib + >> b32.bc
   echo $(HBDIR)\lib\hbvm.lib + >> b32.bc
   echo $(HBDIR)\lib\gtgui.lib + >> b32.bc
   echo $(HBDIR)\lib\hblang.lib + >> b32.bc
   echo $(HBDIR)\lib\hbmacro.lib + >> b32.bc
   echo $(HBDIR)\lib\hbrdd.lib + >> b32.bc
   echo $(HBDIR)\lib\rddntx.lib + >> b32.bc
   echo $(HBDIR)\lib\rddcdx.lib + >> b32.bc
   echo $(HBDIR)\lib\rddfpt.lib + >> b32.bc
   echo $(HBDIR)\lib\hbsix.lib + >> b32.bc
   echo $(HBDIR)\lib\hbdebug.lib + >> b32.bc
   echo $(HBDIR)\lib\hbcommon.lib + >> b32.bc
   echo $(HBDIR)\lib\hbpp.lib + >> b32.bc
   echo $(HBDIR)\lib\hbpcre.lib + >> b32.bc
   echo $(HBDIR)\lib\hbwin.lib + >> b32.bc
   echo $(HBDIR)\lib\hbcpage.lib + >> b32.bc
   echo $(HBDIR)\lib\hbct.lib + >> b32.bc
   echo $(HBDIR)\lib\hbcplr.lib + >> b32.bc
   echo $(HBDIR)\lib\png.lib + >> b32.bc
   echo $(HBDIR)\lib\hbzlib.lib + >> b32.bc
   echo $(HBDIR)\lib\hbziparc.lib + >> b32.bc
   echo $(HBDIR)\lib\hbmzip.lib + >> b32.bc
   echo $(HBDIR)\lib\hbzlib.lib + >> b32.bc
   echo $(HBDIR)\lib\minizip.lib + >> b32.bc
   echo $(HBDIR)\lib\xhb.lib + >> b32.bc
   
#  BCC77
   echo $(BCDIR)\lib\cw32.lib + >> b32.bc
   echo $(BCDIR)\lib\import32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\uuid.lib + >> b32.bc
   echo $(BCDIR)\lib\ws2_32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\odbc32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\rasapi32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\nddeapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\msimg32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\psapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\uxtheme.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\gdiplus.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\iphlpapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\shell32.lib, >> b32.bc

   IF EXIST repdemo.res echo repdemo.res >> b32.bc
   $(BCDIR)\bin\ilink32 -Gn -aa -Tpe -s @b32.bc

   del b32.bc

.PRG.OBJ:
  $(HBDIR)\bin\harbour $< /N /W /Oobj\ /I$(FWDIR)\include;$(HBDIR)\include
  $(BCDIR)\bin\bcc32 -c -tWM -I$(HBDIR)\include -oobj\$& obj\$&.c

.C.OBJ:
  echo -c -tWM -D__HARBOUR__ > tmp
  echo -I$(HBDIR)\include;$(FWDIR)\include >> tmp
  $(BCDIR)\bin\bcc32 -oobj\$& @tmp $&.c

  del tmp

REPDEMO.RES : REPDEMO.RC
  $(BCDIR)\bin\brc32.exe -r -I$(BCDIR)\include repdemo.rc
Regards, saludos.]]>

Code: Select all | Expand

#VisualFW Borland make, (c) FiveTech Software 2005-2025 - Modificado: Kapiaba.

HBDIR=c:\HBBCC77
BCDIR=c:\BCC77
FWDIR=C:\fwh...

#change these paths as needed
.path.OBJ = .\obj
.path.PRG = ..\repdemo
.path.CH  = $(FWDIR)\include;$(HBDIR)\include
.path.C   = .\
.path.rc  = .\

#important: Use Uppercase for filenames extensions!

PRGS = \
.\REPDEMO.PRG \
.\REP02.PRG \
.\REP03.PRG \
.\REP12.PRG \
.\REP05.PRG \
.\REP04.PRG \
.\REP09.PRG \
.\REP07.PRG \
.\REP15.PRG \
.\REP08.PRG \
.\REP06.PRG \
.\REP10.PRG \
.\REP13.PRG \
.\REP11.PRG \
.\REP21.PRG \
.\REP20.PRG \
.\REP16.PRG \
.\REP19.PRG \
.\REP17.PRG \
.\REP14.PRG \
.\REP18.PRG \
.\REP01.PRG \
.\REP22.PRG \
.\REP23.PRG

OBJ = $(PRGS:.PRG=.OBJ)
OBJS = $(OBJ:.\=.\obj\)

PROJECT    : REPDEMO.EXE 

REPDEMO.EXE : $(OBJS) REPDEMO.RES $(FWDIR)\lib\FiveH.lib $(FWDIR)\lib\FiveHC.lib
   echo off
   echo $(BCDIR)\lib\c0w32.obj + > b32.bc
   echo $(OBJS), + >> b32.bc
   echo repdemo.exe, + >> b32.bc
   echo repdemo.map, + >> b32.bc
   echo $(FWDIR)\lib\FiveH.lib $(FWDIR)\lib\FiveHC.lib + >> b32.bc
   echo $(HBDIR)\lib\hbrtl.lib + >> b32.bc
   echo $(HBDIR)\lib\hbvm.lib + >> b32.bc
   echo $(HBDIR)\lib\gtgui.lib + >> b32.bc
   echo $(HBDIR)\lib\hblang.lib + >> b32.bc
   echo $(HBDIR)\lib\hbmacro.lib + >> b32.bc
   echo $(HBDIR)\lib\hbrdd.lib + >> b32.bc
   echo $(HBDIR)\lib\rddntx.lib + >> b32.bc
   echo $(HBDIR)\lib\rddcdx.lib + >> b32.bc
   echo $(HBDIR)\lib\rddfpt.lib + >> b32.bc
   echo $(HBDIR)\lib\hbsix.lib + >> b32.bc
   echo $(HBDIR)\lib\hbdebug.lib + >> b32.bc
   echo $(HBDIR)\lib\hbcommon.lib + >> b32.bc
   echo $(HBDIR)\lib\hbpp.lib + >> b32.bc
   echo $(HBDIR)\lib\hbpcre.lib + >> b32.bc
   echo $(HBDIR)\lib\hbwin.lib + >> b32.bc
   echo $(HBDIR)\lib\hbcpage.lib + >> b32.bc
   echo $(HBDIR)\lib\hbct.lib + >> b32.bc
   echo $(HBDIR)\lib\hbcplr.lib + >> b32.bc
   echo $(HBDIR)\lib\png.lib + >> b32.bc
   echo $(HBDIR)\lib\hbzlib.lib + >> b32.bc
   echo $(HBDIR)\lib\hbziparc.lib + >> b32.bc
   echo $(HBDIR)\lib\hbmzip.lib + >> b32.bc
   echo $(HBDIR)\lib\hbzlib.lib + >> b32.bc
   echo $(HBDIR)\lib\minizip.lib + >> b32.bc
   echo $(HBDIR)\lib\xhb.lib + >> b32.bc
   
#  BCC77
   echo $(BCDIR)\lib\cw32.lib + >> b32.bc
   echo $(BCDIR)\lib\import32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\uuid.lib + >> b32.bc
   echo $(BCDIR)\lib\ws2_32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\odbc32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\rasapi32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\nddeapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\msimg32.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\psapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\uxtheme.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\gdiplus.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\iphlpapi.lib + >> b32.bc
   echo $(BCDIR)\lib\psdk\shell32.lib, >> b32.bc

   IF EXIST repdemo.res echo repdemo.res >> b32.bc
   $(BCDIR)\bin\ilink32 -Gn -aa -Tpe -s @b32.bc

   del b32.bc

.PRG.OBJ:
  $(HBDIR)\bin\harbour $< /N /W /Oobj\ /I$(FWDIR)\include;$(HBDIR)\include
  $(BCDIR)\bin\bcc32 -c -tWM -I$(HBDIR)\include -oobj\$& obj\$&.c

.C.OBJ:
  echo -c -tWM -D__HARBOUR__ > tmp
  echo -I$(HBDIR)\include;$(FWDIR)\include >> tmp
  $(BCDIR)\bin\bcc32 -oobj\$& @tmp $&.c

  del tmp

REPDEMO.RES : REPDEMO.RC
  $(BCDIR)\bin\brc32.exe -r -I$(BCDIR)\include repdemo.rc
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-30T08:22:02-06:00 2025-04-30T08:22:02-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45645&p=279257#p279257

Code: Select all | Expand

IF EXIST C:\REPDEMO\OBJ\*.OBJ DEL C:\REPDEMO\OBJ\*.OBJ
IF EXIST *.MAP DEL  *.MAP
IF EXIST *.TDS DEL  *.TDS
IF EXIST *.C   DEL  *.C
IF EXIST C:\REPDEMO\OBJ\*.C DEL C:\REPDEMO\OBJ\*.C
IF EXIST *.LOG DEL  *.LOG
IF EXIST *.EXE DEL  *.EXE

if not exist obj mkdir obj

c:\bcc77\bin\make -frepdem32.mak

REM if exist REPDEMO.exe C:\PECOMPACT\PEC2 /NB /EMP:Y /TM:Y /CR:Y /MC REPDEMO.EXE

IF ERRORLEVEL 0 REPDEMO.exe
Regards, saludos.]]>

Code: Select all | Expand

IF EXIST C:\REPDEMO\OBJ\*.OBJ DEL C:\REPDEMO\OBJ\*.OBJ
IF EXIST *.MAP DEL  *.MAP
IF EXIST *.TDS DEL  *.TDS
IF EXIST *.C   DEL  *.C
IF EXIST C:\REPDEMO\OBJ\*.C DEL C:\REPDEMO\OBJ\*.C
IF EXIST *.LOG DEL  *.LOG
IF EXIST *.EXE DEL  *.EXE

if not exist obj mkdir obj

c:\bcc77\bin\make -frepdem32.mak

REM if exist REPDEMO.exe C:\PECOMPACT\PEC2 /NB /EMP:Y /TM:Y /CR:Y /MC REPDEMO.EXE

IF ERRORLEVEL 0 REPDEMO.exe
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-30T08:26:55-06:00 2025-04-30T08:26:55-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45645&p=279258#p279258
https://mega.nz/file/QcE1hIJT#-I2XM65sF ... KZ3ClUjTtA

Regards, saludos.]]>

https://mega.nz/file/QcE1hIJT#-I2XM65sF ... KZ3ClUjTtA

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by russimicro]]> 2025-04-30T08:58:14-06:00 2025-04-30T08:58:14-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45645&p=279259#p279259
Turbo Incremental Link 6.97 Copyright (c) 1997-2022 Embarcadero Technologies, Inc.
Fatal: Unable to open file 'UUID.LIB'

me puedes compartir el harbour que usas

Gracias]]>

Turbo Incremental Link 6.97 Copyright (c) 1997-2022 Embarcadero Technologies, Inc.
Fatal: Unable to open file 'UUID.LIB'

me puedes compartir el harbour que usas

Gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-30T09:03:37-06:00 2025-04-30T09:03:37-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45645&p=279260#p279260
viewtopic.php?p=277699#p277699

Mejor, dowload completo:

https://mega.nz/file/tUFRQCRL#XMH9seQZm ... koghRHVTP4

Regards, saludos.]]>

viewtopic.php?p=277699#p277699

Mejor, dowload completo:

https://mega.nz/file/tUFRQCRL#XMH9seQZm ... koghRHVTP4

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by russimicro]]> 2025-04-30T09:14:57-06:00 2025-04-30T09:14:57-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45645&p=279261#p279261 BCDIR=c:\bcc77
FWDIR=c:\fwh24_10

Fatal: Unable to open file 'UUID.LIB'

sera del bcc77

Favor compartir el que usas

Gracias]]>
BCDIR=c:\bcc77
FWDIR=c:\fwh24_10

Fatal: Unable to open file 'UUID.LIB'

sera del bcc77

Favor compartir el que usas

Gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by russimicro]]> 2025-04-30T09:26:45-06:00 2025-04-30T09:26:45-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45645&p=279263#p279263 ya se solucionó...el error era la versión de borland.. que tenía... ya estoy con la que pasaste

ya funciona con su harbour y con la version harbour_2025

muchas gracias]]>
ya se solucionó...el error era la versión de borland.. que tenía... ya estoy con la que pasaste

ya funciona con su harbour y con la version harbour_2025

muchas gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: COMPILAR MAKE :: Reply by karinha]]> 2025-04-30T09:28:31-06:00 2025-04-30T09:28:31-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45645&p=279264#p279264
russimicro wrote: Wed Apr 30, 2025 3:26 pm ok...
ya se solucionó...el error era la versión de borland.. que tenía... ya estoy con la que pasaste

ya funciona con su harbour y con la version 2025

muchas gracias
Excelente!

Regards, saludos.]]>
russimicro wrote: Wed Apr 30, 2025 3:26 pm ok...
ya se solucionó...el error era la versión de borland.. que tenía... ya estoy con la que pasaste

ya funciona con su harbour y con la version 2025

muchas gracias
Excelente!

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Trabajar Wrapper Java desde C :: Reply by jose_murugosa]]> 2025-04-29T12:00:39-06:00 2025-04-29T12:00:39-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45467&p=279237#p279237 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Trabajar Wrapper Java desde C :: Reply by sysctrl2]]> 2025-04-29T19:09:18-06:00 2025-04-29T19:09:18-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45467&p=279240#p279240
JasperSoft es una plataforma de inteligencia empresarial (Business Intelligence o BI) especializada en la generación de informes y análisis de datos. Algunas de sus características principales incluyen:
1. Creación de informes: Permite diseñar, generar y distribuir informes con datos empresariales en múltiples formatos (PDF, Excel, HTML, etc.)
2. Análisis de datos: Ofrece herramientas para analizar grandes volúmenes de información y transformarlos en visualizaciones comprensibles
3. JasperReports Library: Es el motor de informes de código abierto que sirve como base de la plataforma
4. JasperReports Server: Una aplicación web que permite gestionar informes, paneles y análisis
5. Jaspersoft Studio: Una herramienta de diseño visual para crear informes personalizados

Esta plataforma es especialmente útil para empresas que necesitan organizar y visualizar sus datos de manera estructurada, facilitando la toma de decisiones basadas en información.]]>

JasperSoft es una plataforma de inteligencia empresarial (Business Intelligence o BI) especializada en la generación de informes y análisis de datos. Algunas de sus características principales incluyen:
1. Creación de informes: Permite diseñar, generar y distribuir informes con datos empresariales en múltiples formatos (PDF, Excel, HTML, etc.)
2. Análisis de datos: Ofrece herramientas para analizar grandes volúmenes de información y transformarlos en visualizaciones comprensibles
3. JasperReports Library: Es el motor de informes de código abierto que sirve como base de la plataforma
4. JasperReports Server: Una aplicación web que permite gestionar informes, paneles y análisis
5. Jaspersoft Studio: Una herramienta de diseño visual para crear informes personalizados

Esta plataforma es especialmente útil para empresas que necesitan organizar y visualizar sus datos de manera estructurada, facilitando la toma de decisiones basadas en información.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Trabajar Wrapper Java desde C :: Reply by sysctrl2]]> 2025-04-29T19:14:13-06:00 2025-04-29T19:14:13-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45467&p=279241#p279241 :roll: :lol:]]> :roll: :lol:]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Trabajar Wrapper Java desde C :: Reply by sysctrl2]]> 2025-04-29T19:49:02-06:00 2025-04-29T19:49:02-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45467&p=279242#p279242 no será difícil aprender !
Image]]>
no será difícil aprender !
Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Trabajar Wrapper Java desde C :: Reply by Antonio Linares]]> 2025-04-29T23:08:00-06:00 2025-04-29T23:08:00-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45467&p=279244#p279244
A ver si podemos construirlo:
https://github.com/xHarbour-org/xharbou ... ual-Report]]>

A ver si podemos construirlo:
https://github.com/xHarbour-org/xharbou ... ual-Report]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Trabajar Wrapper Java desde C :: Reply by claudio.leiva]]> 2025-04-30T09:51:21-06:00 2025-04-30T09:51:21-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45467&p=279270#p279270 Master,, podes poner como descargarlos... no doy con el hilo
saludos]]>
Master,, podes poner como descargarlos... no doy con el hilo
saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Trabajar Wrapper Java desde C :: Reply by Antonio Linares]]> 2025-04-30T09:54:47-06:00 2025-04-30T09:54:47-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45467&p=279271#p279271 https://github.com/xHarbour-org/xharbou ... s/main.zip

Estoy al habla con Ron Pinkas para que nos ayude a construir todo correctamente]]>
https://github.com/xHarbour-org/xharbou ... s/main.zip

Estoy al habla con Ron Pinkas para que nos ayude a construir todo correctamente]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Trabajar Wrapper Java desde C :: Reply by sysctrl2]]> 2025-04-30T09:56:22-06:00 2025-04-30T09:56:22-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45467&p=279272#p279272 ]]> ]]> <![CDATA[FiveWin para Harbour/xHarbour :: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Author FiveWiDi]]> 2025-04-30T07:35:23-06:00 2025-04-30T07:35:23-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45647&p=279254#p279254
Si quiero ver un fichero *** XML *** así:

XBROWSER ( cFileXML ) TITLE cTitle

se abre una ventana donde su muestra el contenido del fichero (perfecto), pero el título de la ventana no logro que sea el que yo quiero ( TITLE ), muestra siempre como título de la ventana el nombre completo del fichero.

¿Estoy haciendo algo mal?

******************************************************
Editado:
Hay alguna manera en SETUP de cambiar el título de la ventana?

Cómo?

#xtranslate XBROWSER [<uData>] ;
[ TITLE <cTitle> ] ;
[ <autosort:AUTOSORT> ] ;
[ SETUP <fnSetUp> ] ;
[ COLUMNS <aCols,...> ] ;
[ SELECT <fnSelect> ] ;
[ <excel: CALC> ];
[ <fastedit: FASTEDIT> ];
[ VALID <uValid> ] ;
[ [SHOW] <sl: RECID,SLNUM> ] ;
[ <nomodal: NOMODAL> ] ;
[ <autofit: AUTOFIT> ] ;
=> ;
XBrowse( [<uData>], [<cTitle>], [<.autosort.>], ;
[\{|oBrw|<fnSetUp>\}], [\{<aCols>\}], ;
[\{|oBrw,oCol|<fnSelect>\}],!<.excel.>, <.fastedit.>, [\{|oBrw|<uValid>\}], ;
<(sl)>, <.nomodal.>, <.autofit.> )



Gracias,]]>

Si quiero ver un fichero *** XML *** así:

XBROWSER ( cFileXML ) TITLE cTitle

se abre una ventana donde su muestra el contenido del fichero (perfecto), pero el título de la ventana no logro que sea el que yo quiero ( TITLE ), muestra siempre como título de la ventana el nombre completo del fichero.

¿Estoy haciendo algo mal?

******************************************************
Editado:
Hay alguna manera en SETUP de cambiar el título de la ventana?

Cómo?

#xtranslate XBROWSER [<uData>] ;
[ TITLE <cTitle> ] ;
[ <autosort:AUTOSORT> ] ;
[ SETUP <fnSetUp> ] ;
[ COLUMNS <aCols,...> ] ;
[ SELECT <fnSelect> ] ;
[ <excel: CALC> ];
[ <fastedit: FASTEDIT> ];
[ VALID <uValid> ] ;
[ [SHOW] <sl: RECID,SLNUM> ] ;
[ <nomodal: NOMODAL> ] ;
[ <autofit: AUTOFIT> ] ;
=> ;
XBrowse( [<uData>], [<cTitle>], [<.autosort.>], ;
[\{|oBrw|<fnSetUp>\}], [\{<aCols>\}], ;
[\{|oBrw,oCol|<fnSelect>\}],!<.excel.>, <.fastedit.>, [\{|oBrw|<uValid>\}], ;
<(sl)>, <.nomodal.>, <.autofit.> )



Gracias,]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Reply by Antonio Linares]]> 2025-04-30T09:31:20-06:00 2025-04-30T09:31:20-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45647&p=279265#p279265
Prueba con:

XBROWSER ( cFileXML ) SETUP xsetup( oBrw )

function xsetup( oBrw )

oBrw:oWnd:SetText( "nuevo titulo" )

return nil]]>

Prueba con:

XBROWSER ( cFileXML ) SETUP xsetup( oBrw )

function xsetup( oBrw )

oBrw:oWnd:SetText( "nuevo titulo" )

return nil]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Reply by FiveWiDi]]> 2025-04-30T09:45:31-06:00 2025-04-30T09:45:31-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45647&p=279269#p279269
Antonio Linares wrote: Wed Apr 30, 2025 3:31 pm Carlos,

Prueba con:

XBROWSER ( cFileXML ) SETUP xsetup( oBrw )

function xsetup( oBrw )

oBrw:oWnd:SetText( "nuevo titulo" )

return nil
Muchas gracias Antonio,

Pero no ha funcionado, no peta pero no cambia el Title de la ventana.
Es que no encuentro como gestiona el mostrar el contenido de un XML y no sé como meterle mano.

Para próximas versiones quizás sería interesante que XBrowse() devolviera su oWnd.

A ve si se te ocurre otra manera de como modifcar el Title. No es grave pero a mi usuario le facilita las cosas.]]>
Antonio Linares wrote: Wed Apr 30, 2025 3:31 pm Carlos,

Prueba con:

XBROWSER ( cFileXML ) SETUP xsetup( oBrw )

function xsetup( oBrw )

oBrw:oWnd:SetText( "nuevo titulo" )

return nil
Muchas gracias Antonio,

Pero no ha funcionado, no peta pero no cambia el Title de la ventana.
Es que no encuentro como gestiona el mostrar el contenido de un XML y no sé como meterle mano.

Para próximas versiones quizás sería interesante que XBrowse() devolviera su oWnd.

A ve si se te ocurre otra manera de como modifcar el Title. No es grave pero a mi usuario le facilita las cosas.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Reply by Antonio Linares]]> 2025-04-30T09:59:51-06:00 2025-04-30T09:59:51-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45647&p=279273#p279273
Prueba asi:

Code: Select all | Expand

function xsetup( oBrw )

   oBrw:oWnd:bInit = { || oBrw:oWnd:SetText( "Titulo" ) }

return nil
]]>

Prueba asi:

Code: Select all | Expand

function xsetup( oBrw )

   oBrw:oWnd:bInit = { || oBrw:oWnd:SetText( "Titulo" ) }

return nil
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Reply by FiveWiDi]]> 2025-04-30T10:10:45-06:00 2025-04-30T10:10:45-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45647&p=279274#p279274
Antonio Linares wrote: Wed Apr 30, 2025 3:59 pm Carlos,

Prueba asi:

Code: Select all | Expand

function xsetup( oBrw )

   oBrw:oWnd:bInit = { || oBrw:oWnd:SetText( "Titulo" ) }

return nil
No hay manera.

Debe leer el XML y después le debe aplicar el Title (buenos eso imagino).

Con un doble click en algún lugar de la ventana se podría forzar el cambio del Title?

Recordemos que se está visualizando un XML (creo que en un Tree).]]>
Antonio Linares wrote: Wed Apr 30, 2025 3:59 pm Carlos,

Prueba asi:

Code: Select all | Expand

function xsetup( oBrw )

   oBrw:oWnd:bInit = { || oBrw:oWnd:SetText( "Titulo" ) }

return nil
No hay manera.

Debe leer el XML y después le debe aplicar el Title (buenos eso imagino).

Con un doble click en algún lugar de la ventana se podría forzar el cambio del Title?

Recordemos que se está visualizando un XML (creo que en un Tree).]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Reply by Antonio Linares]]> 2025-04-30T10:40:31-06:00 2025-04-30T10:40:31-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45647&p=279277#p279277
Este código funciona bien aqui desde la carpeta FWH\samples:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   XBROWSER memoRead( "test.xml" ) SETUP xsetup( oBrw )

return nil

function xsetup( oBrw )

   oBrw:oWnd:bInit = { || oBrw:oWnd:SetText( "Titulo" ) }

return nil
Puedes proporcionarme tu XML ?]]>

Este código funciona bien aqui desde la carpeta FWH\samples:

Code: Select all | Expand

#include "FiveWin.ch"

function Main()

   XBROWSER memoRead( "test.xml" ) SETUP xsetup( oBrw )

return nil

function xsetup( oBrw )

   oBrw:oWnd:bInit = { || oBrw:oWnd:SetText( "Titulo" ) }

return nil
Puedes proporcionarme tu XML ?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Reply by FiveWiDi]]> 2025-04-30T10:52:27-06:00 2025-04-30T10:52:27-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45647&p=279278#p279278
Este es el XML:

<!-- Date: 27-04-2025 Time: 22:05:04 -->
<!-- DESKTOP-SPO2CAU -->
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sum="https://www2.agenciatributaria.gob.es/s ... stroLR.xsd" xmlns:sum1="https://www2.agenciatributaria.gob.es/s ... macion.xsd" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soapenv:Header/>
<soapenv:Body>
<sum:RegFactuSistemaFacturacion>
<sum:Cabecera>
<sum1:ObligadoEmision>
<sum1:NombreRazon>LIMON, S.L.</sum1:NombreRazon>
<sum1:NIF>B62195999</sum1:NIF>
</sum1:ObligadoEmision>
</sum:Cabecera>
<sum:RegistroFactura>
<sum1:RegistroAlta>
<sum1:IDVersion>1.0</sum1:IDVersion>
<sum1:IDFactura>
<sum1:IDEmisorFactura>B62195999</sum1:IDEmisorFactura>
<sum1:NumSerieFactura>2025-000-000338</sum1:NumSerieFactura>
<sum1:FechaExpedicionFactura>27-04-2025</sum1:FechaExpedicionFactura>
</sum1:IDFactura>
<sum1:RefExterna>VFR-20250427-220356-255</sum1:RefExterna>
<sum1:NombreRazonEmisor>LIMON, S.L.</sum1:NombreRazonEmisor>
<sum1:Subsanacion>S</sum1:Subsanacion>
<sum1:RechazoPrevio>X</sum1:RechazoPrevio>
<sum1:TipoFactura>F1</sum1:TipoFactura>
<sum1:DescripcionOperacion>Ventas/Prestación de servicios.</sum1:DescripcionOperacion>
<sum1:FacturaSimplificadaArt7273>N</sum1:FacturaSimplificadaArt7273>
<sum1:FacturaSinIdentifDestinatarioArt61d>N</sum1:FacturaSinIdentifDestinatarioArt61d>
<sum1:Macrodato>N</sum1:Macrodato>
<sum1:Destinatarios>
<sum1:IDDestinatario>
<sum1:NombreRazon>HHJJ</sum1:NombreRazon>
<sum1:NIF>B81431999</sum1:NIF>
</sum1:IDDestinatario>
</sum1:Destinatarios>
<sum1:Cupon>N</sum1:Cupon>
<sum1:Desglose>
<sum1:DetalleDesglose>
<sum1:Impuesto>01</sum1:Impuesto>
<sum1:ClaveRegimen>01</sum1:ClaveRegimen>
<sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
<sum1:TipoImpositivo>21.00</sum1:TipoImpositivo>
<sum1:BaseImponibleOimporteNoSujeto>100.00</sum1:BaseImponibleOimporteNoSujeto>
<sum1:CuotaRepercutida>21.00</sum1:CuotaRepercutida>
</sum1:DetalleDesglose>
</sum1:Desglose>
<sum1:CuotaTotal>21.00</sum1:CuotaTotal>
<sum1:ImporteTotal>121.00</sum1:ImporteTotal>
<sum1:Encadenamiento>
<sum1:RegistroAnterior>
<sum1:IDEmisorFactura>B62195999</sum1:IDEmisorFactura>
<sum1:NumSerieFactura>2024-000-000238</sum1:NumSerieFactura>
<sum1:FechaExpedicionFactura>01-11-2024</sum1:FechaExpedicionFactura>
<sum1:Huella>86BDE649CD4194261357D3E37E9F93BE1AB2C7FB3603BFFAE22CFA03D1FABB09</sum1:Huella>
</sum1:RegistroAnterior>
</sum1:Encadenamiento>
<sum1:SistemaInformatico>
<sum1:NombreRazon>LIMON, S.L.</sum1:NombreRazon>
<sum1:NIF>B62195999</sum1:NIF>
<sum1:NombreSistemaInformatico>BECFACT</sum1:NombreSistemaInformatico>
<sum1:IdSistemaInformatico>BF</sum1:IdSistemaInformatico>
<sum1:Version>Beta 1.0</sum1:Version>
<sum1:NumeroInstalacion>BETA01.00</sum1:NumeroInstalacion>
<sum1:TipoUsoPosibleSoloVerifactu>S</sum1:TipoUsoPosibleSoloVerifactu>
<sum1:TipoUsoPosibleMultiOT>N</sum1:TipoUsoPosibleMultiOT>
<sum1:IndicadorMultiplesOT>N</sum1:IndicadorMultiplesOT>
</sum1:SistemaInformatico>
<sum1:FechaHoraHusoGenRegistro>2025-04-27T22:03:56+02:00</sum1:FechaHoraHusoGenRegistro>
<sum1:TipoHuella>01</sum1:TipoHuella>
<sum1:Huella>141E61740CE04E6BC6FC1877965CAB8A3D7E3329C39C53BA3E9B9D596AEE0EC7</sum1:Huella>
</sum1:RegistroAlta>
</sum:RegistroFactura>
</sum:RegFactuSistemaFacturacion>
</soapenv:Body>
</soapenv:Envelope>]]>

Este es el XML:

<!-- Date: 27-04-2025 Time: 22:05:04 -->
<!-- DESKTOP-SPO2CAU -->
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sum="https://www2.agenciatributaria.gob.es/s ... stroLR.xsd" xmlns:sum1="https://www2.agenciatributaria.gob.es/s ... macion.xsd" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
<soapenv:Header/>
<soapenv:Body>
<sum:RegFactuSistemaFacturacion>
<sum:Cabecera>
<sum1:ObligadoEmision>
<sum1:NombreRazon>LIMON, S.L.</sum1:NombreRazon>
<sum1:NIF>B62195999</sum1:NIF>
</sum1:ObligadoEmision>
</sum:Cabecera>
<sum:RegistroFactura>
<sum1:RegistroAlta>
<sum1:IDVersion>1.0</sum1:IDVersion>
<sum1:IDFactura>
<sum1:IDEmisorFactura>B62195999</sum1:IDEmisorFactura>
<sum1:NumSerieFactura>2025-000-000338</sum1:NumSerieFactura>
<sum1:FechaExpedicionFactura>27-04-2025</sum1:FechaExpedicionFactura>
</sum1:IDFactura>
<sum1:RefExterna>VFR-20250427-220356-255</sum1:RefExterna>
<sum1:NombreRazonEmisor>LIMON, S.L.</sum1:NombreRazonEmisor>
<sum1:Subsanacion>S</sum1:Subsanacion>
<sum1:RechazoPrevio>X</sum1:RechazoPrevio>
<sum1:TipoFactura>F1</sum1:TipoFactura>
<sum1:DescripcionOperacion>Ventas/Prestación de servicios.</sum1:DescripcionOperacion>
<sum1:FacturaSimplificadaArt7273>N</sum1:FacturaSimplificadaArt7273>
<sum1:FacturaSinIdentifDestinatarioArt61d>N</sum1:FacturaSinIdentifDestinatarioArt61d>
<sum1:Macrodato>N</sum1:Macrodato>
<sum1:Destinatarios>
<sum1:IDDestinatario>
<sum1:NombreRazon>HHJJ</sum1:NombreRazon>
<sum1:NIF>B81431999</sum1:NIF>
</sum1:IDDestinatario>
</sum1:Destinatarios>
<sum1:Cupon>N</sum1:Cupon>
<sum1:Desglose>
<sum1:DetalleDesglose>
<sum1:Impuesto>01</sum1:Impuesto>
<sum1:ClaveRegimen>01</sum1:ClaveRegimen>
<sum1:CalificacionOperacion>S1</sum1:CalificacionOperacion>
<sum1:TipoImpositivo>21.00</sum1:TipoImpositivo>
<sum1:BaseImponibleOimporteNoSujeto>100.00</sum1:BaseImponibleOimporteNoSujeto>
<sum1:CuotaRepercutida>21.00</sum1:CuotaRepercutida>
</sum1:DetalleDesglose>
</sum1:Desglose>
<sum1:CuotaTotal>21.00</sum1:CuotaTotal>
<sum1:ImporteTotal>121.00</sum1:ImporteTotal>
<sum1:Encadenamiento>
<sum1:RegistroAnterior>
<sum1:IDEmisorFactura>B62195999</sum1:IDEmisorFactura>
<sum1:NumSerieFactura>2024-000-000238</sum1:NumSerieFactura>
<sum1:FechaExpedicionFactura>01-11-2024</sum1:FechaExpedicionFactura>
<sum1:Huella>86BDE649CD4194261357D3E37E9F93BE1AB2C7FB3603BFFAE22CFA03D1FABB09</sum1:Huella>
</sum1:RegistroAnterior>
</sum1:Encadenamiento>
<sum1:SistemaInformatico>
<sum1:NombreRazon>LIMON, S.L.</sum1:NombreRazon>
<sum1:NIF>B62195999</sum1:NIF>
<sum1:NombreSistemaInformatico>BECFACT</sum1:NombreSistemaInformatico>
<sum1:IdSistemaInformatico>BF</sum1:IdSistemaInformatico>
<sum1:Version>Beta 1.0</sum1:Version>
<sum1:NumeroInstalacion>BETA01.00</sum1:NumeroInstalacion>
<sum1:TipoUsoPosibleSoloVerifactu>S</sum1:TipoUsoPosibleSoloVerifactu>
<sum1:TipoUsoPosibleMultiOT>N</sum1:TipoUsoPosibleMultiOT>
<sum1:IndicadorMultiplesOT>N</sum1:IndicadorMultiplesOT>
</sum1:SistemaInformatico>
<sum1:FechaHoraHusoGenRegistro>2025-04-27T22:03:56+02:00</sum1:FechaHoraHusoGenRegistro>
<sum1:TipoHuella>01</sum1:TipoHuella>
<sum1:Huella>141E61740CE04E6BC6FC1877965CAB8A3D7E3329C39C53BA3E9B9D596AEE0EC7</sum1:Huella>
</sum1:RegistroAlta>
</sum:RegistroFactura>
</sum:RegFactuSistemaFacturacion>
</soapenv:Body>
</soapenv:Envelope>]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Reply by FiveWiDi]]> 2025-04-30T10:55:15-06:00 2025-04-30T10:55:15-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45647&p=279279#p279279
Así si funciona:

XBROWSER Memoread( cFileXML ) SETUP xsetup( oBrw )

Así no funciona:

XBROWSER ( cFileXML ) SETUP xsetup( oBrw )

Pero debe ser así:
XBROWSER ( cFileXML ) SETUP xsetup( oBrw )]]>

Así si funciona:

XBROWSER Memoread( cFileXML ) SETUP xsetup( oBrw )

Así no funciona:

XBROWSER ( cFileXML ) SETUP xsetup( oBrw )

Pero debe ser así:
XBROWSER ( cFileXML ) SETUP xsetup( oBrw )]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Reply by Antonio Linares]]> 2025-04-30T10:56:48-06:00 2025-04-30T10:56:48-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45647&p=279280#p279280 <![CDATA[FiveWin para Harbour/xHarbour :: Re: XBrowse( ( cFileXML ), cTitle,,,,,!.F., .F.,,, .F., .F. ) -EDITO :: Reply by FiveWiDi]]> 2025-04-30T11:10:31-06:00 2025-04-30T11:10:31-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45647&p=279283#p279283
Antonio Linares wrote: Wed Apr 30, 2025 4:56 pm Y como le das el valor a cFileXML ? Que valor tiene (nombre del fichero ó contenido del fichero) ?
Nombre, path completo, y se ve perfecto en un Tree (creo que es un Tree) que abre Xbrowse()]]>
Antonio Linares wrote: Wed Apr 30, 2025 4:56 pm Y como le das el valor a cFileXML ? Que valor tiene (nombre del fichero ó contenido del fichero) ?
Nombre, path completo, y se ve perfecto en un Tree (creo que es un Tree) que abre Xbrowse()]]>
<![CDATA[FiveWin para Harbour/xHarbour :: CURSOR EN RADIO NO FUNCIONA? :: Author karinha]]> 2025-04-30T11:02:34-06:00 2025-04-30T11:02:34-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45648&p=279281#p279281

Code: Select all | Expand

   DEFINE CURSOR oHand RESOURCE "Dedo"

   REDEFINE RADIO oRadMenu VAR nOpcaoRadio ID 201, 202 OF oDlg               ;
      COLOR CLR_BROWN, CLR_MARROM                                            ;
      ON CHANGE( TROCA_INDICE( nOpcaoRadio, cAlias, oLbx ),                  ;
                 oLbx:GoTop(), oLbx:Refresh(), oLbx:SetFocus() )

   oRadMenu:aItems[1]:cTooltip := "Por Nome   "
   oRadMenu:aItems[2]:cTooltip := "Por Código "

   oRadMenu:SetFont( oFnt )

   oRadMenu:oCursor := oHand  // NO FUNCIONA.
Gracias, tks.

Regards, saludos.]]>

Code: Select all | Expand

   DEFINE CURSOR oHand RESOURCE "Dedo"

   REDEFINE RADIO oRadMenu VAR nOpcaoRadio ID 201, 202 OF oDlg               ;
      COLOR CLR_BROWN, CLR_MARROM                                            ;
      ON CHANGE( TROCA_INDICE( nOpcaoRadio, cAlias, oLbx ),                  ;
                 oLbx:GoTop(), oLbx:Refresh(), oLbx:SetFocus() )

   oRadMenu:aItems[1]:cTooltip := "Por Nome   "
   oRadMenu:aItems[2]:cTooltip := "Por Código "

   oRadMenu:SetFont( oFnt )

   oRadMenu:oCursor := oHand  // NO FUNCIONA.
Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: CURSOR EN RADIO NO FUNCIONA? :: Reply by Antonio Linares]]> 2025-05-01T00:52:23-06:00 2025-05-01T00:52:23-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45648&p=279286#p279286
Pruba a signar el cursor a cada uno de los objetos radio:

oRadMenu:aItems[1]:oCursor = oHand]]>

Pruba a signar el cursor a cada uno de los objetos radio:

oRadMenu:aItems[1]:oCursor = oHand]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: CURSOR EN RADIO NO FUNCIONA? :: Reply by karinha]]> 2025-05-01T10:45:40-06:00 2025-05-01T10:45:40-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45648&p=279292#p279292
Antonio Linares wrote: Thu May 01, 2025 6:52 am Estimado Joao,

Pruba a signar el cursor a cada uno de los objetos radio:

oRadMenu:aItems[1]:oCursor = oHand
Querido Maestro, FUNCIONA PERFECTO! Muchas gracias!

Regards, saludos.]]>
Antonio Linares wrote: Thu May 01, 2025 6:52 am Estimado Joao,

Pruba a signar el cursor a cada uno de los objetos radio:

oRadMenu:aItems[1]:oCursor = oHand
Querido Maestro, FUNCIONA PERFECTO! Muchas gracias!

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: adscdx|dbfcdx y xbrowse :: Author Vikthor]]> 2025-04-30T19:27:10-06:00 2025-04-30T19:27:10-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45649&p=279284#p279284
Usando la clase xbrowse con archivos abiertos con el rdd dbfcdx, los datos son visualizados sin problema, sin embargo, cuando abro la misma tabla utilizando el driver adscdx no se muestra la información.

¿ Alguna sugerencia ?]]>

Usando la clase xbrowse con archivos abiertos con el rdd dbfcdx, los datos son visualizados sin problema, sin embargo, cuando abro la misma tabla utilizando el driver adscdx no se muestra la información.

¿ Alguna sugerencia ?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: adscdx|dbfcdx y xbrowse :: Reply by karinha]]> 2025-05-02T10:26:51-06:00 2025-05-02T10:26:51-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45649&p=279299#p279299
Skype/Teams:

giovany.vecchi

Regards, saludos.]]>

Skype/Teams:

giovany.vecchi

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: adscdx|dbfcdx y xbrowse :: Reply by Vikthor]]> 2025-05-02T10:41:37-06:00 2025-05-02T10:41:37-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45649&p=279301#p279301 <![CDATA[FiveWin para Harbour/xHarbour :: Re: adscdx|dbfcdx y xbrowse :: Reply by cnavarro]]> 2025-05-02T10:45:25-06:00 2025-05-02T10:45:25-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45649&p=279302#p279302
Vikthor wrote: Fri May 02, 2025 4:41 pm La apertura de las tablas se realiza sin problema e incluso las puedo monitorear en el server.
Vikthor, qué version de fivewin utilizas?]]>
Vikthor wrote: Fri May 02, 2025 4:41 pm La apertura de las tablas se realiza sin problema e incluso las puedo monitorear en el server.
Vikthor, qué version de fivewin utilizas?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: adscdx|dbfcdx y xbrowse :: Reply by karinha]]> 2025-05-02T11:22:00-06:00 2025-05-02T11:22:00-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45649&p=279303#p279303
Regards, saludos.]]>

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: adscdx|dbfcdx y xbrowse :: Reply by Vikthor]]> 2025-05-02T19:59:26-06:00 2025-05-02T19:59:26-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45649&p=279307#p279307 Database odbf y posteriormente en la defición del xbrowse se utiliza el objeto odbf.

Code: Select all | Expand

   database odbf

   define window ownd
   @ 0,0 xbrowse oBrw of oWnd ;
         object odbf ; 
         FONT oFont //;
//         rows { 10, 5, 30, 50, 100 } // Array of record numbers
   oBrw:CreateFromCode()
   oWnd:oClient := oBrw
   
   
Después revisé el código fuente de xbrowse y me dí cuenta que hay distintas fuentes de datos para visualizar el control.
Realicé los ajustes en el programa que estoy probando y la visualización de los datos ya es correcta.

Gracias por la atención.

cnavarro wrote: Fri May 02, 2025 4:45 pm
Vikthor wrote: Fri May 02, 2025 4:41 pm La apertura de las tablas se realiza sin problema e incluso las puedo monitorear en el server.
Vikthor, qué version de fivewin utilizas?
]]>
Database odbf y posteriormente en la defición del xbrowse se utiliza el objeto odbf.

Code: Select all | Expand

   database odbf

   define window ownd
   @ 0,0 xbrowse oBrw of oWnd ;
         object odbf ; 
         FONT oFont //;
//         rows { 10, 5, 30, 50, 100 } // Array of record numbers
   oBrw:CreateFromCode()
   oWnd:oClient := oBrw
   
   
Después revisé el código fuente de xbrowse y me dí cuenta que hay distintas fuentes de datos para visualizar el control.
Realicé los ajustes en el programa que estoy probando y la visualización de los datos ya es correcta.

Gracias por la atención.

cnavarro wrote: Fri May 02, 2025 4:45 pm
Vikthor wrote: Fri May 02, 2025 4:41 pm La apertura de las tablas se realiza sin problema e incluso las puedo monitorear en el server.
Vikthor, qué version de fivewin utilizas?
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: ttaskpanel 64 :: Author Patricio Avalos Aguirre]]> 2025-05-04T00:00:43-06:00 2025-05-04T00:00:43-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45655&p=279312#p279312
consulta alguien tiene la libreria tTaskPanel de Andres reyes funcionando en borland 64bit
al compilar me salen errores en las cabeceras stdafx.h y stdafx.h estos archivos estan en la carpeta include

Code: Select all | Expand

In file included from source\c_themeaux.c:50:
source/stdafx.h:49:9: warning: '__STDAFX_H__' is used as a header guard here, followed by #define of a different macro
      [-Wheader-guard]
#ifndef __STDAFX_H__
        ^~~~~~~~~~~~
source/stdafx.h:50:9: note: '__STADFX_H__' is defined here; did you mean '__STDAFX_H__'?
#define __STADFX_H__
        ^~~~~~~~~~~~
        __STDAFX_H__
source\c_themeaux.c:492:7: warning: implicit declaration of function 'ISCHAR' is invalid in C99
      [-Wimplicit-function-declaration]
  if( ISCHAR(1) )
      ^
source\c_themeaux.c:498:25: warning: implicit declaration of function 'ISNUM' is invalid in C99
      [-Wimplicit-function-declaration]
  else if( ISCHAR(2) || ISNUM(2) )
                        ^
source\c_themeaux.c:500:20: warning: cast to 'HINSTANCE' (aka 'struct HINSTANCE__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
    hInstance    = (HINSTANCE) hb_parnl(1);
                   ^
source\c_themeaux.c:528:20: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   SetScrollRange( ( HWND ) hb_parnl( 1 ),
                   ^
5 warnings generated.
source\c_dibbmp.c:
In file included from source\c_themegdi.c:50:
source/stdafx.h:49:9: warning: '__STDAFX_H__' is used as a header guard here, followed by #define of a different macro
      [-Wheader-guard]
#ifndef __STDAFX_H__
        ^~~~~~~~~~~~
source/stdafx.h:50:9: note: '__STADFX_H__' is defined here; did you mean '__STDAFX_H__'?
#define __STADFX_H__
        ^~~~~~~~~~~~
        __STDAFX_H__
source\c_themegdi.c:172:28: warning: cast to 'HDC' (aka 'struct HDC__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   HDC               hdc = (HDC) hb_parnl(1);
                           ^
source\c_themegdi.c:173:32: warning: cast to 'HBITMAP' (aka 'struct HBITMAP__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   HBITMAP           hBitmap = (HBITMAP) hb_parnl(6);
                               ^
source\c_themegdi.c:210:23: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   HWND        hWnd = (HWND) hb_parnl(1);
                      ^
source\c_themegdi.c:269:22: warning: cast to 'PTHEMEINFO' (aka 'THEMEINFO *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   PTHEMEINFO pti  = (PTHEMEINFO) hb_parnl(1);
                     ^
source\c_themegdi.c:270:22: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   HWND       hWnd = (HWND) hb_parnl(2);
]]>

consulta alguien tiene la libreria tTaskPanel de Andres reyes funcionando en borland 64bit
al compilar me salen errores en las cabeceras stdafx.h y stdafx.h estos archivos estan en la carpeta include

Code: Select all | Expand

In file included from source\c_themeaux.c:50:
source/stdafx.h:49:9: warning: '__STDAFX_H__' is used as a header guard here, followed by #define of a different macro
      [-Wheader-guard]
#ifndef __STDAFX_H__
        ^~~~~~~~~~~~
source/stdafx.h:50:9: note: '__STADFX_H__' is defined here; did you mean '__STDAFX_H__'?
#define __STADFX_H__
        ^~~~~~~~~~~~
        __STDAFX_H__
source\c_themeaux.c:492:7: warning: implicit declaration of function 'ISCHAR' is invalid in C99
      [-Wimplicit-function-declaration]
  if( ISCHAR(1) )
      ^
source\c_themeaux.c:498:25: warning: implicit declaration of function 'ISNUM' is invalid in C99
      [-Wimplicit-function-declaration]
  else if( ISCHAR(2) || ISNUM(2) )
                        ^
source\c_themeaux.c:500:20: warning: cast to 'HINSTANCE' (aka 'struct HINSTANCE__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
    hInstance    = (HINSTANCE) hb_parnl(1);
                   ^
source\c_themeaux.c:528:20: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   SetScrollRange( ( HWND ) hb_parnl( 1 ),
                   ^
5 warnings generated.
source\c_dibbmp.c:
In file included from source\c_themegdi.c:50:
source/stdafx.h:49:9: warning: '__STDAFX_H__' is used as a header guard here, followed by #define of a different macro
      [-Wheader-guard]
#ifndef __STDAFX_H__
        ^~~~~~~~~~~~
source/stdafx.h:50:9: note: '__STADFX_H__' is defined here; did you mean '__STDAFX_H__'?
#define __STADFX_H__
        ^~~~~~~~~~~~
        __STDAFX_H__
source\c_themegdi.c:172:28: warning: cast to 'HDC' (aka 'struct HDC__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   HDC               hdc = (HDC) hb_parnl(1);
                           ^
source\c_themegdi.c:173:32: warning: cast to 'HBITMAP' (aka 'struct HBITMAP__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   HBITMAP           hBitmap = (HBITMAP) hb_parnl(6);
                               ^
source\c_themegdi.c:210:23: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   HWND        hWnd = (HWND) hb_parnl(1);
                      ^
source\c_themegdi.c:269:22: warning: cast to 'PTHEMEINFO' (aka 'THEMEINFO *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   PTHEMEINFO pti  = (PTHEMEINFO) hb_parnl(1);
                     ^
source\c_themegdi.c:270:22: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'long'
      [-Wint-to-pointer-cast]
   HWND       hWnd = (HWND) hb_parnl(2);
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: ttaskpanel 64 :: Reply by Antonio Linares]]> 2025-05-04T00:06:35-06:00 2025-05-04T00:06:35-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45655&p=279313#p279313
Cambia todos esos _parni( ... ) a _parnll( ... ) (DOBLE L)]]>

Cambia todos esos _parni( ... ) a _parnll( ... ) (DOBLE L)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: obtener un pdf via API ( SOLUCIONADO ) :: Author Patricio Avalos Aguirre]]> 2025-04-15T19:37:53-06:00 2025-04-17T15:35:58-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45623&p=278993#p278993
Estimados estoy obteniendo un pdf via api, pero me responde en un formato text
necesito convertirlo a pdf pero si lo graba directo como pdf me sale error en el archivo

alguna forma de poder grabarlo a pdf

se agradece cualquier ayuda

adjunto parte del archivo que devuelve
algo asi

Code: Select all | Expand

%PDF-1.7
%����
1 0 obj
<<
/Type /Catalog
/Pages 4 0 R
/MarkInfo<</Marked true>>
/Metadata 22 0 R
/OutputIntents 24 0 R
/StructTreeRoot 5 0 R
/PageMode /UseNone
/OCProperties << /OCGs [6 0 R] /D << /ON [6 0 R] /AS [<</Event /Print /OCGs [6 0 R] /Category [/Print]>>] >> >>
>>
endobj
]]>

Estimados estoy obteniendo un pdf via api, pero me responde en un formato text
necesito convertirlo a pdf pero si lo graba directo como pdf me sale error en el archivo

alguna forma de poder grabarlo a pdf

se agradece cualquier ayuda

adjunto parte del archivo que devuelve
algo asi

Code: Select all | Expand

%PDF-1.7
%����
1 0 obj
<<
/Type /Catalog
/Pages 4 0 R
/MarkInfo<</Marked true>>
/Metadata 22 0 R
/OutputIntents 24 0 R
/StructTreeRoot 5 0 R
/PageMode /UseNone
/OCProperties << /OCGs [6 0 R] /D << /ON [6 0 R] /AS [<</Event /Print /OCGs [6 0 R] /Category [/Print]>>] >> >>
>>
endobj
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by cnavarro]]> 2025-04-15T22:51:39-06:00 2025-04-15T22:51:39-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45623&p=278995#p278995 Todo indica que en tu request no está definido correctamente el "Content-Type:", que es el que indica lo que se espera del request
https://developer.mozilla.org/en-US/doc ... ntent-Type
Si no te aclaras y me das un poco más de informacion respecto a como haces el request podré ayudarte mejor]]>
Todo indica que en tu request no está definido correctamente el "Content-Type:", que es el que indica lo que se espera del request
https://developer.mozilla.org/en-US/doc ... ntent-Type
Si no te aclaras y me das un poco más de informacion respecto a como haces el request podré ayudarte mejor]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by karinha]]> 2025-04-16T09:13:34-06:00 2025-04-16T09:13:34-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45623&p=279011#p279011
https://www.fpdf.org/?go=script&id=75

Sinceramente no entendí tu pregunta.

Regards, saludos.]]>

https://www.fpdf.org/?go=script&id=75

Sinceramente no entendí tu pregunta.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by Lailton]]> 2025-04-16T18:45:05-06:00 2025-04-16T18:45:05-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45623&p=279020#p279020
Prueba con:

cBuffer es lo que te devolve

Code: Select all | Expand

hb_memoWrit( "file.pdf", cBuffer )
Patricio Avalos Aguirre wrote: Wed Apr 16, 2025 1:37 am hola a tod@s

Estimados estoy obteniendo un pdf via api, pero me responde en un formato text
necesito convertirlo a pdf pero si lo graba directo como pdf me sale error en el archivo

alguna forma de poder grabarlo a pdf

se agradece cualquier ayuda

adjunto parte del archivo que devuelve
algo asi

Code: Select all | Expand

%PDF-1.7
%����
1 0 obj
<<
/Type /Catalog
/Pages 4 0 R
/MarkInfo<</Marked true>>
/Metadata 22 0 R
/OutputIntents 24 0 R
/StructTreeRoot 5 0 R
/PageMode /UseNone
/OCProperties << /OCGs [6 0 R] /D << /ON [6 0 R] /AS [<</Event /Print /OCGs [6 0 R] /Category [/Print]>>] >> >>
>>
endobj
]]>

Prueba con:

cBuffer es lo que te devolve

Code: Select all | Expand

hb_memoWrit( "file.pdf", cBuffer )
Patricio Avalos Aguirre wrote: Wed Apr 16, 2025 1:37 am hola a tod@s

Estimados estoy obteniendo un pdf via api, pero me responde en un formato text
necesito convertirlo a pdf pero si lo graba directo como pdf me sale error en el archivo

alguna forma de poder grabarlo a pdf

se agradece cualquier ayuda

adjunto parte del archivo que devuelve
algo asi

Code: Select all | Expand

%PDF-1.7
%����
1 0 obj
<<
/Type /Catalog
/Pages 4 0 R
/MarkInfo<</Marked true>>
/Metadata 22 0 R
/OutputIntents 24 0 R
/StructTreeRoot 5 0 R
/PageMode /UseNone
/OCProperties << /OCGs [6 0 R] /D << /ON [6 0 R] /AS [<</Event /Print /OCGs [6 0 R] /Category [/Print]>>] >> >>
>>
endobj
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by Patricio Avalos Aguirre]]> 2025-04-17T07:17:17-06:00 2025-04-17T07:17:17-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45623&p=279025#p279025
layton al procesar me genera hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseText )y abrir el pdf error al procesar página. colorSpace no válido

cnavarro, el api tambien tiene en su web para ir probando y me da lo mismo
https://docs.skualo.cl/reference/obtener-pdf-documento

https://ibb.co/kVSbgSgB

Image

gracias por su ayuda :-)]]>

layton al procesar me genera hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseText )y abrir el pdf error al procesar página. colorSpace no válido

cnavarro, el api tambien tiene en su web para ir probando y me da lo mismo
https://docs.skualo.cl/reference/obtener-pdf-documento

https://ibb.co/kVSbgSgB

Image

gracias por su ayuda :-)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by Lailton]]> 2025-04-17T11:56:16-06:00 2025-04-17T11:56:16-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45623&p=279028#p279028

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseBody )
se no funcionar, prueba com asi:

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", hb_strToUtf8( oHttp:ResponseBody ) )
:)]]>

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseBody )
se no funcionar, prueba com asi:

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", hb_strToUtf8( oHttp:ResponseBody ) )
:)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by Patricio Avalos Aguirre]]> 2025-04-17T11:58:08-06:00 2025-04-17T11:58:08-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45623&p=279029#p279029
Te recomiendo hacer la prueba desde Postman, ya que lo que devuelve la api en ese endpoint es el archivo PDF como tal.

:mrgreen:]]>

Te recomiendo hacer la prueba desde Postman, ya que lo que devuelve la api en ese endpoint es el archivo PDF como tal.

:mrgreen:]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by Patricio Avalos Aguirre]]> 2025-04-17T12:14:00-06:00 2025-04-17T12:14:00-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45623&p=279030#p279030

Image]]>


Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by cmsoft]]> 2025-04-17T13:29:35-06:00 2025-04-17T13:29:35-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45623&p=279033#p279033 Pareciera que esta todo bien y lo que te devuelve es el pdf correcto.
Como grabas luego de obtener el texto?
Con lo que te comenta Lailton creo que deberia funcionar bien

Code: Select all | Expand

  hb_memowrit('mipdf.pdf',oHttp:ResponseBody)
   shellexecute(0,"open",hb_curdrive()+":\"+CurDir()+"\mipdf.pdf",,,1)
]]>
Pareciera que esta todo bien y lo que te devuelve es el pdf correcto.
Como grabas luego de obtener el texto?
Con lo que te comenta Lailton creo que deberia funcionar bien

Code: Select all | Expand

  hb_memowrit('mipdf.pdf',oHttp:ResponseBody)
   shellexecute(0,"open",hb_curdrive()+":\"+CurDir()+"\mipdf.pdf",,,1)
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by Lailton]]> 2025-04-17T14:35:27-06:00 2025-04-17T14:35:27-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45623&p=279035#p279035
Lailton wrote: Thu Apr 17, 2025 5:56 pm para PDF te recommendo usar asi:

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseBody )
se no funcionar, prueba com asi:

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", hb_strToUtf8( oHttp:ResponseBody ) )
:)
]]>
Lailton wrote: Thu Apr 17, 2025 5:56 pm para PDF te recommendo usar asi:

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseBody )
se no funcionar, prueba com asi:

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", hb_strToUtf8( oHttp:ResponseBody ) )
:)
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API :: Reply by Patricio Avalos Aguirre]]> 2025-04-17T15:35:31-06:00 2025-04-17T15:35:31-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45623&p=279037#p279037 Laiton funcionooo

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseBody )
]]>
Laiton funcionooo

Code: Select all | Expand

hb_memoWrit( "c:\paso\file.pdf", oHttp:ResponseBody )
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API ( SOLUCIONADO ) :: Reply by Lailton]]> 2025-04-17T20:02:50-06:00 2025-04-17T20:02:50-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45623&p=279040#p279040 ]]> ]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API ( SOLUCIONADO ) :: Reply by elmoiquique]]> 2025-04-30T10:26:58-06:00 2025-04-30T10:26:58-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45623&p=279275#p279275
Podrias colocar parte del programa donde envias la consulta y la respuesta, yo estoy en lo mismo pero no logro construir el PDF

Este es mi programa, te agradeceria tu ayuda

FUNCTION RDOCLPT(TS_TOKEN)
LOCAL oHttp,Doc,cxmLbody,oIni,nHandle
LOCAL ts_exit:=.t.,tw_servidor:='',ts_mj1:='',ts_modulo:=.f.
LOCAL ts_servidor:="https://sveqa.zofri.cl/sveProcDocWSN/Emision?WSDL"

if empty(ts_token)
msginfo('Debe Obtener un Token de Inicio para Autentificarse en Web Service','Token de Sesion')
return .f.
endif

cXmlBody:= '' +;
'<?xml version="1.0" encoding="utf-8"?>' + ;
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cl="cl.zofri.sve" xmlns:wsn="http://cl/zofri/sve/prd/wsn">'+;
' <soapenv:Header>'+;
' <cl:token>'+ts_token+'</cl:token>'+;
' </soapenv:Header>'+;
' <soapenv:Body>'+;
' <wsn:emisionDocumento>'+;
' <wsn:codigoAduaneroDoc>101-25-051206</wsn:codigoAduaneroDoc>'+;
' <wsn:tipoEmision>E</wsn:tipoEmision>'+;
' </wsn:emisionDocumento>'+;
' </soapenv:Body>'+;
'</soapenv:Envelope>'

TRY
oHttp := CreateObject( 'MSXML2.XMLHTTP.6.0' )
CATCH
oHttp := CreateObject( 'Microsoft.XMLHTTP' )
END
doc = CreateObject("MSXML2.DOMDocument.6.0")

oHttp:Open( "POST" , ts_servidor, .F. )
ohttp:SetRequestHeader( "Content-Type" , "text/xml; charset=utf-8" )
oHttp:SetRequestHeader( "Connection:", "Keep-Alive" )
doc:LoadXML( cXmlbody )

TRY
ohttp:Send( doc:xml )
CATCH
cErrorMsg:='No Se Pudo Enviar Documento XML...'+CRLF+CRLF+;
'Sin Conexion a Internet o Servidor Con Problemas'
msginfo(cErrorMsg,"Intente Nuevamente")
return .t.
END
// ?ohttp:status
//status 200 = OK
// 500 = ERROR

response = ohttp:responsetext

hb_memoWrit( "fileout.pdf", oHttp:ResponseBody )

//crear un archivo para leer tag
cFilename:="texto.xml"
MEMOWRIT( cfilename, response, .F. )
//leer archivo para extraer el factura pdf
CTXT:=MEMOREAD(CFILENAME)
pdfin:=at("%PDF-1.4",CTXT)
pdfend:=At("%EOF",CTXT)
largo:=pdfend-pdfin
Cresp:=substr(CTXT,pdfin,largo+4)

//SE CREA EL ARCHIVO PDF
CPDF:="TEXTO.PDF"
MEMOWRIT( cPdf, CRESP, .F. )

RETURN .T.
]]>

Podrias colocar parte del programa donde envias la consulta y la respuesta, yo estoy en lo mismo pero no logro construir el PDF

Este es mi programa, te agradeceria tu ayuda

FUNCTION RDOCLPT(TS_TOKEN)
LOCAL oHttp,Doc,cxmLbody,oIni,nHandle
LOCAL ts_exit:=.t.,tw_servidor:='',ts_mj1:='',ts_modulo:=.f.
LOCAL ts_servidor:="https://sveqa.zofri.cl/sveProcDocWSN/Emision?WSDL"

if empty(ts_token)
msginfo('Debe Obtener un Token de Inicio para Autentificarse en Web Service','Token de Sesion')
return .f.
endif

cXmlBody:= '' +;
'<?xml version="1.0" encoding="utf-8"?>' + ;
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cl="cl.zofri.sve" xmlns:wsn="http://cl/zofri/sve/prd/wsn">'+;
' <soapenv:Header>'+;
' <cl:token>'+ts_token+'</cl:token>'+;
' </soapenv:Header>'+;
' <soapenv:Body>'+;
' <wsn:emisionDocumento>'+;
' <wsn:codigoAduaneroDoc>101-25-051206</wsn:codigoAduaneroDoc>'+;
' <wsn:tipoEmision>E</wsn:tipoEmision>'+;
' </wsn:emisionDocumento>'+;
' </soapenv:Body>'+;
'</soapenv:Envelope>'

TRY
oHttp := CreateObject( 'MSXML2.XMLHTTP.6.0' )
CATCH
oHttp := CreateObject( 'Microsoft.XMLHTTP' )
END
doc = CreateObject("MSXML2.DOMDocument.6.0")

oHttp:Open( "POST" , ts_servidor, .F. )
ohttp:SetRequestHeader( "Content-Type" , "text/xml; charset=utf-8" )
oHttp:SetRequestHeader( "Connection:", "Keep-Alive" )
doc:LoadXML( cXmlbody )

TRY
ohttp:Send( doc:xml )
CATCH
cErrorMsg:='No Se Pudo Enviar Documento XML...'+CRLF+CRLF+;
'Sin Conexion a Internet o Servidor Con Problemas'
msginfo(cErrorMsg,"Intente Nuevamente")
return .t.
END
// ?ohttp:status
//status 200 = OK
// 500 = ERROR

response = ohttp:responsetext

hb_memoWrit( "fileout.pdf", oHttp:ResponseBody )

//crear un archivo para leer tag
cFilename:="texto.xml"
MEMOWRIT( cfilename, response, .F. )
//leer archivo para extraer el factura pdf
CTXT:=MEMOREAD(CFILENAME)
pdfin:=at("%PDF-1.4",CTXT)
pdfend:=At("%EOF",CTXT)
largo:=pdfend-pdfin
Cresp:=substr(CTXT,pdfin,largo+4)

//SE CREA EL ARCHIVO PDF
CPDF:="TEXTO.PDF"
MEMOWRIT( cPdf, CRESP, .F. )

RETURN .T.
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: obtener un pdf via API ( SOLUCIONADO ) :: Reply by Patricio Avalos Aguirre]]> 2025-05-04T09:50:49-06:00 2025-05-04T09:50:49-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45623&p=279314#p279314

Code: Select all | Expand

cUrlSkualo := 'https://api.skualo.cl/'+_TOKENEMP_+'/documentos/'+cId+'/pdf'  //esta info es entregado por el api 

oDoc := CreateObject( "MSXML2.DOMDocument" )
oHttp := CreateObject( "MSXML2.XMLHTTP" )

	do case
	case cOpc = "A"
		ohttp:Open( "POST" ,cUrlSkualo, .F. )
	case cOpc = "M"
		ohttp:Open( 'PUT' ,cUrlSkualo, .F. )
	case cOpc = "L"
		ohttp:Open( 'GET' ,cUrlSkualo, .F. )
	otherwise
		MsgInfo( "Debe enviar Opcion " )
		return("")
endcase

if cFuncion $ "DTE;PDF"
	oHttp:SetRequestHeader("accept", "application/pdf" )
else
	oHttp:SetRequestHeader("accept", "application/json" )
	if cOpc <> "L"
		oHttp:SetRequestHeader("content-type", "application/json" )
	endif
endif

oHttp:SetRequestHeader("Authorization", "Bearer " + _TOKENEMP_ )

TRY
  oHttp:Send( jSon )
CATCH
  lOk := .f.
END

if lOk .and. oHttp:status = 200

	hb_jsonDecode( oHttp:ResponseText,@hReturn )

	if cFuncion = "GETPDF"
		cFilePdf := DRIVELOCAL+'\TEMPORAL\'+cPdf+'.pdf'
		//cPdf = tip_doc + num_doc

		hb_memowrit( cFilePdf, oHttp:ResponseBody )

		if left( cPdf,3) = "BEL"
			cPrinter := ViewUsu():Bel
		else
			cPrinter := ViewUsu():Fel
		endif

		if empty( cPrinter )
			cCmd := cSumatra + " "+cFilePdf
		else
			cCmd := cSumatra + ' -Print-to "' + alltrim( StrToken( cPrinter, 1, "," ) ) + '" -exit-on-print ' + cFilePdf
		endif

		MsgRun( "Imprimiendo archivo "+cFilePdf, "Espere..", { || winexec( cCmd, SW_HIDE )  } )

	else
		//hb_jsonDecode( oHttp:ResponseText,@hReturn )

		hReturn["status"]   	 := 200
		hReturn["statusText"] := "ok"
		hReturn["title"]   	 := "ok"
		hReturn["isError"]    := .f.
	endif

else
	if lOk // hizo la conexion pero skualo rechazo la solicitud
		hb_jsonDecode( oHttp:ResponseText,@hReturn )
		hReturn["status"]   	  := oHttp:status
		hReturn["statusText"]  := oHttp:statusText
		hReturn["title"]   	  := lower(hReturn["title"])
		hReturn["ErrorSkualo"] :=  {strtran(oHttp:ResponseText, ",", ","+CRLF ) }
		hReturn["JsonSkualo"]  :=  { json }
		hReturn["isError"]    := .t.
	else
		hReturn["status"]   	  := 400
		hReturn["title"]   	  := "error"
		hReturn["statusText"]  := "Error en la comunicación con Skualo"+CRLF+"hay q volver hacer la operación"
		hReturn["ErrorSkualo"] :=  {""}
		hReturn["JsonSkualo"]  :=  { json }
		hReturn["isError"]    := .t.
	endif
endif

return( hReturn )
//-----------------------------------------------------------------------------------------------------
]]>

Code: Select all | Expand

cUrlSkualo := 'https://api.skualo.cl/'+_TOKENEMP_+'/documentos/'+cId+'/pdf'  //esta info es entregado por el api 

oDoc := CreateObject( "MSXML2.DOMDocument" )
oHttp := CreateObject( "MSXML2.XMLHTTP" )

	do case
	case cOpc = "A"
		ohttp:Open( "POST" ,cUrlSkualo, .F. )
	case cOpc = "M"
		ohttp:Open( 'PUT' ,cUrlSkualo, .F. )
	case cOpc = "L"
		ohttp:Open( 'GET' ,cUrlSkualo, .F. )
	otherwise
		MsgInfo( "Debe enviar Opcion " )
		return("")
endcase

if cFuncion $ "DTE;PDF"
	oHttp:SetRequestHeader("accept", "application/pdf" )
else
	oHttp:SetRequestHeader("accept", "application/json" )
	if cOpc <> "L"
		oHttp:SetRequestHeader("content-type", "application/json" )
	endif
endif

oHttp:SetRequestHeader("Authorization", "Bearer " + _TOKENEMP_ )

TRY
  oHttp:Send( jSon )
CATCH
  lOk := .f.
END

if lOk .and. oHttp:status = 200

	hb_jsonDecode( oHttp:ResponseText,@hReturn )

	if cFuncion = "GETPDF"
		cFilePdf := DRIVELOCAL+'\TEMPORAL\'+cPdf+'.pdf'
		//cPdf = tip_doc + num_doc

		hb_memowrit( cFilePdf, oHttp:ResponseBody )

		if left( cPdf,3) = "BEL"
			cPrinter := ViewUsu():Bel
		else
			cPrinter := ViewUsu():Fel
		endif

		if empty( cPrinter )
			cCmd := cSumatra + " "+cFilePdf
		else
			cCmd := cSumatra + ' -Print-to "' + alltrim( StrToken( cPrinter, 1, "," ) ) + '" -exit-on-print ' + cFilePdf
		endif

		MsgRun( "Imprimiendo archivo "+cFilePdf, "Espere..", { || winexec( cCmd, SW_HIDE )  } )

	else
		//hb_jsonDecode( oHttp:ResponseText,@hReturn )

		hReturn["status"]   	 := 200
		hReturn["statusText"] := "ok"
		hReturn["title"]   	 := "ok"
		hReturn["isError"]    := .f.
	endif

else
	if lOk // hizo la conexion pero skualo rechazo la solicitud
		hb_jsonDecode( oHttp:ResponseText,@hReturn )
		hReturn["status"]   	  := oHttp:status
		hReturn["statusText"]  := oHttp:statusText
		hReturn["title"]   	  := lower(hReturn["title"])
		hReturn["ErrorSkualo"] :=  {strtran(oHttp:ResponseText, ",", ","+CRLF ) }
		hReturn["JsonSkualo"]  :=  { json }
		hReturn["isError"]    := .t.
	else
		hReturn["status"]   	  := 400
		hReturn["title"]   	  := "error"
		hReturn["statusText"]  := "Error en la comunicación con Skualo"+CRLF+"hay q volver hacer la operación"
		hReturn["ErrorSkualo"] :=  {""}
		hReturn["JsonSkualo"]  :=  { json }
		hReturn["isError"]    := .t.
	endif
endif

return( hReturn )
//-----------------------------------------------------------------------------------------------------
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: FWH 24.02 nueva Clase TWebView2 :: Reply by AIDA]]> 2025-05-09T00:56:59-06:00 2025-05-09T00:56:59-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=44351&p=279379#p279379 ]]> ]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by Vikthor]]> 2025-04-15T17:42:57-06:00 2025-04-15T17:42:57-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45614&p=278992#p278992
¿ Hay algún manual de FivEdit ? ¿ Algún foro ?
cnavarro wrote: Tue Apr 08, 2025 10:30 pm Hola,
A partir de ahora, la descarga se podrá realizar en la siguiente url

https://github.com/cristobalnavarro/Tes ... ivedit.zip

Por favor informen de los problemas que puedan encontrar
Es posible que el explorador les indique "Descarga sospechosa", ignoren dicho mensaje debido a que el .zip contiene ficheros .exe y .dll
Saludos
]]>

¿ Hay algún manual de FivEdit ? ¿ Algún foro ?
cnavarro wrote: Tue Apr 08, 2025 10:30 pm Hola,
A partir de ahora, la descarga se podrá realizar en la siguiente url

https://github.com/cristobalnavarro/Tes ... ivedit.zip

Por favor informen de los problemas que puedan encontrar
Es posible que el explorador les indique "Descarga sospechosa", ignoren dicho mensaje debido a que el .zip contiene ficheros .exe y .dll
Saludos
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by cnavarro]]> 2025-04-15T22:48:51-06:00 2025-04-15T22:48:51-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45614&p=278994#p278994 En breve voy a publicar una nueva version de Fivedit con importantes novedades
Y, ya de paso, intentaré rescatar los videos que se hicieron en su momento, así como un foro para poder tener un mejor soporte del producto
Pero, tambien existe un servidor en discord al que os podéis apuntar
https://discord.gg/d2zyR8UY]]>
En breve voy a publicar una nueva version de Fivedit con importantes novedades
Y, ya de paso, intentaré rescatar los videos que se hicieron en su momento, así como un foro para poder tener un mejor soporte del producto
Pero, tambien existe un servidor en discord al que os podéis apuntar
https://discord.gg/d2zyR8UY]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by cnavarro]]> 2025-04-22T03:45:31-06:00 2025-04-22T03:45:31-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45614&p=279090#p279090 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by karinha]]> 2025-04-22T04:57:29-06:00 2025-04-22T04:57:29-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45614&p=279095#p279095
Regards, saludos.]]>

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by cnavarro]]> 2025-04-22T08:15:09-06:00 2025-04-22T08:15:09-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45614&p=279106#p279106 No puedo construir una version con Borland
Cual es el error que te da ?]]>
No puedo construir una version con Borland
Cual es el error que te da ?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by karinha]]> 2025-04-22T08:40:50-06:00 2025-04-22T08:40:50-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45614&p=279112#p279112
cnavarro wrote: Tue Apr 22, 2025 2:15 pm Estimado Joao
No puedo construir una version con Borland
Cual es el error que te da ?
https://imgur.com/BIEpra9

Image

Gracias,

Regards, saludos.]]>
cnavarro wrote: Tue Apr 22, 2025 2:15 pm Estimado Joao
No puedo construir una version con Borland
Cual es el error que te da ?
https://imgur.com/BIEpra9

Image

Gracias,

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by karinha]]> 2025-04-22T08:43:50-06:00 2025-04-22T08:43:50-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45614&p=279114#p279114

Code: Select all | Expand

Assinatura do problema:
  Nome do Evento de Problema:	APPCRASH
  Nome do Aplicativo:	fivedit.exe
  Versão do Aplicativo:	1.2.19.1
  Carimbo de Data/Hora do Aplicativo:	67685ef7
  Nome do Módulo de Falhas:	fivedit.exe
  Versão do Módulo de Falhas:	1.2.19.1
  Carimbo de Data/Hora do Módulo de Falhas:	67685ef7
  Código de Exceção:	c0000005
  Deslocamento de Exceção:	00170939
  Versão do sistema operacional:	6.1.7601.2.1.0.256.48
  Identificação da Localidade:	1046
  Informações Adicionais 1:	ae6e
  Informações Adicionais 2:	ae6eabe6810bdf4b1e76ea7fc685c8b1
  Informações Adicionais 3:	cc3c
  Informações Adicionais 4:	cc3ca0fc2d2d04aa014954e6cb57d46b

Leia nossa declaração de privacidade online:
  http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0416

Se a declaração de privacidade online não estiver disponível, leia nossa declaração de privacidade offline:
  C:\Windows\system32\pt-BR\erofflps.txt
Regards, saludos.]]>

Code: Select all | Expand

Assinatura do problema:
  Nome do Evento de Problema:	APPCRASH
  Nome do Aplicativo:	fivedit.exe
  Versão do Aplicativo:	1.2.19.1
  Carimbo de Data/Hora do Aplicativo:	67685ef7
  Nome do Módulo de Falhas:	fivedit.exe
  Versão do Módulo de Falhas:	1.2.19.1
  Carimbo de Data/Hora do Módulo de Falhas:	67685ef7
  Código de Exceção:	c0000005
  Deslocamento de Exceção:	00170939
  Versão do sistema operacional:	6.1.7601.2.1.0.256.48
  Identificação da Localidade:	1046
  Informações Adicionais 1:	ae6e
  Informações Adicionais 2:	ae6eabe6810bdf4b1e76ea7fc685c8b1
  Informações Adicionais 3:	cc3c
  Informações Adicionais 4:	cc3ca0fc2d2d04aa014954e6cb57d46b

Leia nossa declaração de privacidade online:
  http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0416

Se a declaração de privacidade online não estiver disponível, leia nossa declaração de privacidade offline:
  C:\Windows\system32\pt-BR\erofflps.txt
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by claudio.leiva]]> 2025-04-24T16:55:34-06:00 2025-04-24T16:55:34-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45614&p=279164#p279164
alguna solucion fivedit no corre en window7
no se porque
alguien tiene alguna idea..]]>

alguna solucion fivedit no corre en window7
no se porque
alguien tiene alguna idea..]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by cnavarro]]> 2025-04-24T19:57:15-06:00 2025-04-24T19:57:15-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45614&p=279168#p279168
claudio.leiva wrote: Thu Apr 24, 2025 10:55 pm buenas tardes

alguna solucion fivedit no corre en window7
no se porque
alguien tiene alguna idea..
Una pregunta, tienes instalado Visual Studio Community ? ( no te estoy diciendo que sea imprescindible, pero necesito saberlo para poder indicarte posibles soluciones )
Si no es asi, seguramente tengas que instalar los redistribuibles par VSC 2019 y para 2022
VSC 2019:
https://learn.microsoft.com/es-es/visua ... stribution]]>
claudio.leiva wrote: Thu Apr 24, 2025 10:55 pm buenas tardes

alguna solucion fivedit no corre en window7
no se porque
alguien tiene alguna idea..
Una pregunta, tienes instalado Visual Studio Community ? ( no te estoy diciendo que sea imprescindible, pero necesito saberlo para poder indicarte posibles soluciones )
Si no es asi, seguramente tengas que instalar los redistribuibles par VSC 2019 y para 2022
VSC 2019:
https://learn.microsoft.com/es-es/visua ... stribution]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by claudio.leiva]]> 2025-04-25T08:48:06-06:00 2025-04-25T08:48:06-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45614&p=279178#p279178 No estimado,, no lo tengo instalado..
pues no me deja en window7 32 bits,
saludos]]>
No estimado,, no lo tengo instalado..
pues no me deja en window7 32 bits,
saludos]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by claudio.leiva]]> 2025-04-25T08:52:19-06:00 2025-04-25T08:52:19-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45614&p=279179#p279179 yo crei que era una herramienta independiente..
quedo atto.]]>
yo crei que era una herramienta independiente..
quedo atto.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by cnavarro]]> 2025-04-25T10:57:42-06:00 2025-04-25T10:57:42-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45614&p=279183#p279183 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by cnavarro]]> 2025-04-26T17:15:41-06:00 2025-04-26T17:15:41-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45614&p=279201#p279201 FIVEDIT 64 BITS, en Discord]]> FIVEDIT 64 BITS, en Discord]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by cnavarro]]> 2025-04-27T07:49:26-06:00 2025-04-27T07:49:26-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45614&p=279206#p279206 https://learn.microsoft.com/es-es/visua ... stribution]]> https://learn.microsoft.com/es-es/visua ... stribution]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by cnavarro]]> 2025-05-12T09:10:00-06:00 2025-05-12T09:10:00-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45614&p=279436#p279436 Image

https://github.com/cristobalnavarro/Tes ... ssh2_2.gif

New version 32 bits
https://github.com/cristobalnavarro/Tes ... nstall.zip

Discord server channel:
https://discord.gg/vd4G2B3b]]>
Image

https://github.com/cristobalnavarro/Tes ... ssh2_2.gif

New version 32 bits
https://github.com/cristobalnavarro/Tes ... nstall.zip

Discord server channel:
https://discord.gg/vd4G2B3b]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by cnavarro]]> 2025-05-12T09:30:23-06:00 2025-05-12T09:30:23-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45614&p=279438#p279438
claudio.leiva wrote: Fri Apr 25, 2025 2:52 pm Estimado, entonces Fivedit no funciona en window7 32 bist si no esta instaldo Visual estudio,, y eso pq seria.. que toma fivedit de VS..
yo crei que era una herramienta independiente..
quedo atto.
La ultima actualizacion de FivEdit, incluye una carpeta con las DLLs que le pueden hacer falta para su ejecucion si no tienes instalado Visual Studio, por favor si lo pruebas dame el feedback, no tengo ninguna version de Windows 7 en la que probar]]>
claudio.leiva wrote: Fri Apr 25, 2025 2:52 pm Estimado, entonces Fivedit no funciona en window7 32 bist si no esta instaldo Visual estudio,, y eso pq seria.. que toma fivedit de VS..
yo crei que era una herramienta independiente..
quedo atto.
La ultima actualizacion de FivEdit, incluye una carpeta con las DLLs que le pueden hacer falta para su ejecucion si no tienes instalado Visual Studio, por favor si lo pruebas dame el feedback, no tengo ninguna version de Windows 7 en la que probar]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Fivedit - Descarga :: Reply by cnavarro]]> 2025-05-12T10:42:57-06:00 2025-05-12T10:42:57-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45614&p=279443#p279443 https://youtu.be/vNHa7FW0588]]> https://youtu.be/vNHa7FW0588]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: TSBROWSE - TSBUTTON 64 bits :: Reply by Patricio Avalos Aguirre]]> 2025-05-03T23:13:17-06:00 2025-05-03T23:13:17-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=44912&p=279310#p279310
alguien tiene corriendo la libreria tsbrowse9 del maestro Manuel Mercado
me sale muchos errores en un prg en C(TSBFuncs.c)

Code: Select all | Expand

..\source\function\TSBFuncs.c:
In file included from ..\source\function\TSBFuncs.c:14:
c:\fwh64\include\ClipApi.h:520:8: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
extern _mdAdd( LONG lClassHandle, PCLIPSYMBOL pMethodName, PCLIPFUNC pMethod );
~~~~~~ ^
..\source\function\TSBFuncs.c:48:23: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HWND hWnd        = (HWND) _parni( 1 ) ;
                      ^
..\source\function\TSBFuncs.c:49:23: warning: cast to 'HDC' (aka 'struct HDC__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HDC  hDC         = (HDC) _parni( 2 ) ;
                      ^
..\source\function\TSBFuncs.c:58:23: warning: cast to 'HFONT' (aka 'struct HFONT__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HFONT hFont      = (HFONT) _parni( 10 ) ;
                      ^
..\source\function\TSBFuncs.c:59:23: warning: cast to 'HBITMAP' (aka 'struct HBITMAP__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HBITMAP hBitMap  = (HBITMAP) _parni( 11 ) ;
                      ^
..\source\function\TSBFuncs.c:74:23: warning: cast to 'HBRUSH' (aka 'struct HBRUSH__ *') from smaller integer type
      'LONG' (aka 'long') [-Wint-to-pointer-cast]
   HBRUSH wBrush    = (HBRUSH) _parnl( 26 ) ;
                      ^
..\source\function\TSBFuncs.c:381:23: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HWND hWnd        = (HWND) _parni( 1 ) ;
                      ^
..\source\function\TSBFuncs.c:383:23: warning: cast to 'HFONT' (aka 'struct HFONT__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HFONT hFont      = (HFONT) _parni( 3 ) ;
                      ^
..\source\function\TSBFuncs.c:417:17: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HWND hWnd  = (HWND) _parni( 1 ) ;
                ^
..\source\function\TSBFuncs.c:448:14: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
        HWND hWnd = ( HWND ) _parni( 1 ) ;
                    ^
..\source\function\TSBFuncs.c:482:18: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HWND  hWnd  = (HWND) _parni( 1 ) ;
                 ^
..\source\function\TSBFuncs.c:483:18: warning: cast to 'HFONT' (aka 'struct HFONT__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HFONT hFont = (HFONT) _parni( 2 ) ;
                 ^
..\source\function\TSBFuncs.c:522:14: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
        HWND hWnd = ( HWND ) _parni( 1 ) ;
                    ^
..\source\function\TSBFuncs.c:547:20: warning: cast to 'HBITMAP' (aka 'struct HBITMAP__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HBITMAP hBmp  = (HBITMAP) _parni( 1 ) ;
                   ^
..\source\function\TSBFuncs.c:563:20: warning: cast to 'HBITMAP' (aka 'struct HBITMAP__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HBITMAP hBmp  = (HBITMAP) _parni( 1 ) ;
   
]]>

alguien tiene corriendo la libreria tsbrowse9 del maestro Manuel Mercado
me sale muchos errores en un prg en C(TSBFuncs.c)

Code: Select all | Expand

..\source\function\TSBFuncs.c:
In file included from ..\source\function\TSBFuncs.c:14:
c:\fwh64\include\ClipApi.h:520:8: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
extern _mdAdd( LONG lClassHandle, PCLIPSYMBOL pMethodName, PCLIPFUNC pMethod );
~~~~~~ ^
..\source\function\TSBFuncs.c:48:23: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HWND hWnd        = (HWND) _parni( 1 ) ;
                      ^
..\source\function\TSBFuncs.c:49:23: warning: cast to 'HDC' (aka 'struct HDC__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HDC  hDC         = (HDC) _parni( 2 ) ;
                      ^
..\source\function\TSBFuncs.c:58:23: warning: cast to 'HFONT' (aka 'struct HFONT__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HFONT hFont      = (HFONT) _parni( 10 ) ;
                      ^
..\source\function\TSBFuncs.c:59:23: warning: cast to 'HBITMAP' (aka 'struct HBITMAP__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HBITMAP hBitMap  = (HBITMAP) _parni( 11 ) ;
                      ^
..\source\function\TSBFuncs.c:74:23: warning: cast to 'HBRUSH' (aka 'struct HBRUSH__ *') from smaller integer type
      'LONG' (aka 'long') [-Wint-to-pointer-cast]
   HBRUSH wBrush    = (HBRUSH) _parnl( 26 ) ;
                      ^
..\source\function\TSBFuncs.c:381:23: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HWND hWnd        = (HWND) _parni( 1 ) ;
                      ^
..\source\function\TSBFuncs.c:383:23: warning: cast to 'HFONT' (aka 'struct HFONT__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HFONT hFont      = (HFONT) _parni( 3 ) ;
                      ^
..\source\function\TSBFuncs.c:417:17: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HWND hWnd  = (HWND) _parni( 1 ) ;
                ^
..\source\function\TSBFuncs.c:448:14: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
        HWND hWnd = ( HWND ) _parni( 1 ) ;
                    ^
..\source\function\TSBFuncs.c:482:18: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
   HWND  hWnd  = (HWND) _parni( 1 ) ;
                 ^
..\source\function\TSBFuncs.c:483:18: warning: cast to 'HFONT' (aka 'struct HFONT__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HFONT hFont = (HFONT) _parni( 2 ) ;
                 ^
..\source\function\TSBFuncs.c:522:14: warning: cast to 'HWND' (aka 'struct HWND__ *') from smaller integer type 'short'
      [-Wint-to-pointer-cast]
        HWND hWnd = ( HWND ) _parni( 1 ) ;
                    ^
..\source\function\TSBFuncs.c:547:20: warning: cast to 'HBITMAP' (aka 'struct HBITMAP__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HBITMAP hBmp  = (HBITMAP) _parni( 1 ) ;
                   ^
..\source\function\TSBFuncs.c:563:20: warning: cast to 'HBITMAP' (aka 'struct HBITMAP__ *') from smaller integer type
      'short' [-Wint-to-pointer-cast]
   HBITMAP hBmp  = (HBITMAP) _parni( 1 ) ;
   
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: TSBROWSE - TSBUTTON 64 bits :: Reply by Antonio Linares]]> 2025-05-03T23:58:33-06:00 2025-05-03T23:58:33-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=44912&p=279311#p279311
Cambia todos esos _parni( ... ) a _parnll( ... ) (DOBLE L)]]>

Cambia todos esos _parni( ... ) a _parnll( ... ) (DOBLE L)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: TSBROWSE - TSBUTTON 64 bits :: Reply by cnavarro]]> 2025-05-05T05:40:20-06:00 2025-05-05T05:40:20-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=44912&p=279331#p279331 https://github.com/FiveTechSoft/FWH_too ... stobal.zip
https://github.com/FiveTechSoft/FWH_too ... uttonu.zip
https://github.com/FiveTechSoft/FWH_too ... browse.zip]]>
https://github.com/FiveTechSoft/FWH_too ... stobal.zip
https://github.com/FiveTechSoft/FWH_too ... uttonu.zip
https://github.com/FiveTechSoft/FWH_too ... browse.zip]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: TSBROWSE - TSBUTTON 64 bits :: Reply by Patricio Avalos Aguirre]]> 2025-05-05T07:54:17-06:00 2025-05-05T07:54:17-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=44912&p=279336#p279336
es una versión antigua la que esta ahí
*=============================================================================
* TSBrowse.ch Version 4.0 1/Jan/2002
* Creating Browse From resources
*=============================================================================
contra esta :-)
=============================================================================
* TSBrowse.ch Version 9.0 1/Nov/2009
* Creating Browse From resources
*=============================================================================]]>

es una versión antigua la que esta ahí
*=============================================================================
* TSBrowse.ch Version 4.0 1/Jan/2002
* Creating Browse From resources
*=============================================================================
contra esta :-)
=============================================================================
* TSBrowse.ch Version 9.0 1/Nov/2009
* Creating Browse From resources
*=============================================================================]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: TSBROWSE - TSBUTTON 64 bits :: Reply by cnavarro]]> 2025-05-09T06:21:18-06:00 2025-05-09T06:21:18-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=44912&p=279391#p279391
Patricio Avalos Aguirre wrote: Mon May 05, 2025 1:54 pm Gracias Cristóbal

es una versión antigua la que esta ahí
*=============================================================================
* TSBrowse.ch Version 4.0 1/Jan/2002
* Creating Browse From resources
*=============================================================================
contra esta :-)
=============================================================================
* TSBrowse.ch Version 9.0 1/Nov/2009
* Creating Browse From resources
*=============================================================================
Las versiones que se colgaron fueron modificadas algunas por mi, aunque evidentemente no se modificara ni el .ch ni el copyright, ni fecha de versiones, deberías probarlas a ver]]>
Patricio Avalos Aguirre wrote: Mon May 05, 2025 1:54 pm Gracias Cristóbal

es una versión antigua la que esta ahí
*=============================================================================
* TSBrowse.ch Version 4.0 1/Jan/2002
* Creating Browse From resources
*=============================================================================
contra esta :-)
=============================================================================
* TSBrowse.ch Version 9.0 1/Nov/2009
* Creating Browse From resources
*=============================================================================
Las versiones que se colgaron fueron modificadas algunas por mi, aunque evidentemente no se modificara ni el .ch ni el copyright, ni fecha de versiones, deberías probarlas a ver]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: TSBROWSE - TSBUTTON 64 bits :: Reply by Patricio Avalos Aguirre]]> 2025-05-11T20:58:16-06:00 2025-05-11T20:58:16-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=44912&p=279416#p279416
alguna ayudita

Code: Select all | Expand

   int nVertText    = hb_parnll( 23 ) ;
   COLORREF clrTo   = hb_parnl( 24 ) ;
   BOOL bOpaque     = hb_parl( 25 ) ;
   HBRUSH wBrush    = (HBRUSH) hb_parnl( 26 ) ;

   BOOL b3DInv      = ( HB_ISLOG( 27 ) ? ! hb_parl( 27 ) : FALSE ) ;
   BOOL b3D         = ( HB_ISLOG( 27 ) ? TRUE : FALSE ) ;

   COLORREF nClr3DL = hb_parnl( 28 ) ;
   COLORREF nClr3DS = hb_parnl( 29 ) ;

..\source\function\TSBFuncs.c:
..\source\function\TSBFuncs.c:58:23: warning: cast to 'HBRUSH' (aka 'struct HBRUSH__ *') from smaller integer type
'long' [-Wint-to-pointer-cast]
HBRUSH wBrush = (HBRUSH) hb_parnl( 26 ) ;]]>

alguna ayudita

Code: Select all | Expand

   int nVertText    = hb_parnll( 23 ) ;
   COLORREF clrTo   = hb_parnl( 24 ) ;
   BOOL bOpaque     = hb_parl( 25 ) ;
   HBRUSH wBrush    = (HBRUSH) hb_parnl( 26 ) ;

   BOOL b3DInv      = ( HB_ISLOG( 27 ) ? ! hb_parl( 27 ) : FALSE ) ;
   BOOL b3D         = ( HB_ISLOG( 27 ) ? TRUE : FALSE ) ;

   COLORREF nClr3DL = hb_parnl( 28 ) ;
   COLORREF nClr3DS = hb_parnl( 29 ) ;

..\source\function\TSBFuncs.c:
..\source\function\TSBFuncs.c:58:23: warning: cast to 'HBRUSH' (aka 'struct HBRUSH__ *') from smaller integer type
'long' [-Wint-to-pointer-cast]
HBRUSH wBrush = (HBRUSH) hb_parnl( 26 ) ;]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: TSBROWSE - TSBUTTON 64 bits :: Reply by Antonio Linares]]> 2025-05-11T22:16:54-06:00 2025-05-11T22:16:54-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=44912&p=279417#p279417 ll( 26 ) ;

Está línea cámbiala así:
int nVertText = hb_parni( 23 ) ; // para un int se usa hb_parni()]]>
ll( 26 ) ;

Está línea cámbiala así:
int nVertText = hb_parni( 23 ) ; // para un int se usa hb_parni()]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: TSBROWSE - TSBUTTON 64 bits :: Reply by Patricio Avalos Aguirre]]> 2025-05-12T14:16:44-06:00 2025-05-12T14:16:44-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=44912&p=279459#p279459 voy a probarla y cuando este 100% operativa la publico para alguien que la necesite]]> voy a probarla y cuando este 100% operativa la publico para alguien que la necesite]]> <![CDATA[FiveWin para Harbour/xHarbour :: WINOLE/1007 No se puede obtener la propiedad Paste de la clase Worksheet. (0x800A03EC): Microsoft Excel :: Author albeiroval]]> 2025-05-12T21:34:14-06:00 2025-05-12T21:34:14-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45668&p=279462#p279462 Uso la funcion oBrw:ToExcel() y me genera el siguiente error
WINOLE/1007 No se puede obtener la propiedad Paste de la clase Worksheet. (0x800A03EC): Microsoft Excel
dejo el error completo :

Code: Select all | Expand

Application
===========
   Path and name: C:\Laboratorio\laboratorio.exe (32 bits)
   Size: 7,392,768 bytes
   Compiler version: Harbour 3.2.0dev (r2403071241)
   FiveWin  version: FWH 24.07
   C compiler version: Borland/Embarcadero C++ 7.7 (32-bit)
   Windows 11 64 Bits, version: 6.2, Build 9200 

   Time from start: 6 hours 15 mins 40 secs 
   Error occurred at: 12/05/2025, 16:44:05
   Error description: (DOS Error -2147352567) WINOLE/1007  No se puede obtener la propiedad Paste de la clase Worksheet. (0x800A03EC): Microsoft Excel

Stack Calls
===========
   Called from: hbwin\oleauto.prg => TOLEAUTO:PASTE( 0 )
   Called from: .\source\classes\xbrowse.prg => TXBROWSE:TOEXCEL( 11113 )
   Called from: source\almacen.prg => (b)CREABUTONBAR( 320 )
   Called from: .\source\classes\btnbmp.prg => TBTNBMP:CLICK( 816 )
   Called from: .\source\classes\btnbmp.prg => TBTNBMP:LBUTTONUP( 1103 )
   Called from: .\source\classes\control.prg => TCONTROL:HANDLEEVENT( 1867 )
   Called from: .\source\classes\btnbmp.prg => TBTNBMP:HANDLEEVENT( 2143 )
   Called from: .\source\classes\window.prg => _FWH( 3699 )
   Called from: .\source\classes\dialog.prg => DIALOGBOX( 0 )
   Called from: .\source\classes\dialog.prg => TDIALOG:ACTIVATE( 309 )
   Called from: source\almacen.prg => DO_ALMACEN( 151 )
   Called from: source\main_laboratorio.prg => (b)POPUPINVENTARIO( 671 )
   Called from: .\source\classes\menu.prg => TMENU:ACTIVATE( 1801 )
   Called from: source\main_laboratorio.prg => POPUPINVENTARIO( 697 )
   Called from: source\main_laboratorio.prg => (b)CREATEBUTTONBAR( 438 )
   Called from: .\source\classes\btnbmp.prg => TBTNBMP:CLICK( 816 )
   Called from: .\source\classes\btnbmp.prg => TBTNBMP:LBUTTONUP( 1103 )
   Called from: .\source\classes\control.prg => TCONTROL:HANDLEEVENT( 1867 )
   Called from: .\source\classes\btnbmp.prg => TBTNBMP:HANDLEEVENT( 2143 )
   Called from: .\source\classes\window.prg => _FWH( 3699 )
   Called from: .\source\classes\window.prg => WINRUN( 0 )
   Called from: .\source\classes\window.prg => TWINDOW:ACTIVATE( 1117 )
   Called from: source\main_laboratorio.prg => MAIN( 241 )

System
======
   CPU type: Intel(R) Core(TM) i7-6700T CPU @ 2.80GHz 2808 Mhz
   Hardware memory: 16276 megs

   Free System resources: 90 %
        GDI    resources: 90 %
        User   resources: 90 %

   Windows total applications running: 1
      1 ,                                                                                                     

Variables in use
================
   Procedure     Type   Value
   ==========================
   TOLEAUTO:PASTE
     Param   1:    O    Class: ERROR
   TXBROWSE:TOEXCEL
     Local   1:    U    
     Local   2:    U    
   (b)CREABUTONBAR
     Local   1:    B    {|| ... }
     Local   2:    U    
     Local   3:    A    Len:   13
     Local   4:    L    .T.
     Local   5:    U    
     Local   6:    U    
     Local   7:    O    Class: TXBROWSE
     Local   8:    O    Class: TOLEAUTO
     Local   9:    O    Class: TOLEAUTO
     Local  10:    U    
     Local  11:    N    13
     Local  12:    N    14
     Local  13:    O    Class: TXBRWCOLUMN
     Local  14:    C    "C"
     Local  15:    U    
     Local  16:    N    1
     Local  17:    N    12394
     Local  18:    N    13422
     Local  19:    C    "FALSO	004-24	1.49 ROUND TOP W 70/24 MM +0.50/2.25	3	1	171,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-240	1.49 PROGRESSIVE W 75/14 MM OVANT +2.25/2.25	3	1	17,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-241	1.49 PROGRESSIVE W 75/14 MM OVANT +2.25/2.50	3	1	3,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-242	1.49 PROGRESSIVE W 75/14 MM OVANT +2.25/2.75	3	1	14,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-243	1.49 PROGRESSIVE W 75/14 MM OVANT +2.25/3.00	3	1	13,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-244	1.49 PROGRESSIVE W 75/14 MM OVANT +2.50/1.00	3	1	18,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-245	1.49 PROGRESSIVE W 75/14 MM OVANT +2.50/1.25	3	1	62,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-246	1.49 PROGRESSIVE W 75/14 MM OVANT +2.50/1.50	3	1	44,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-247	1.49 PROGRESSIVE W 75/14 MM OVANT +2.50/1.75	3	1	37,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-248	1.49 PROGRESSIVE W 75/14 MM OVANT +2.50/2.00	3	1	13,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-249	1.49 PROGRESSIVE W 75/14 MM OVANT +2.50/2.25	3	1	28,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-25	1.49 ROUND TOP W 70/24 MM +0.50/2.50	3	1	149,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-250	1.49 PROGRESSIVE W 75/14 MM OVANT +2.50/2.50	3	1	14,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-251	1.49 PROGRESSIVE W 75/14 MM OVANT +2.50/2.75	3	1	15,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-252	1.49 PROGRESSIVE W 75/14 MM OVANT +2.50/3.00	3	1	7,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-253	1.49 PROGRESSIVE W 75/14 MM OVANT +2.75/1.00	3	1	22,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-254	1.49 PROGRESSIVE W 75/14 MM OVANT +2.75/1.25	3	1	66,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-255	1.49 PROGRESSIVE W 75/14 MM OVANT +2.75/1.50	3	1	52,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-256	1.49 PROGRESSIVE W 75/14 MM OVANT +2.75/1.75	3	1	49,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-257	1.49 PROGRESSIVE W 75/14 MM OVANT +2.75/2.00	3	1	11,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-258	1.49 PROGRESSIVE W 75/14 MM OVANT +2.75/2.25	3	1	11,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-259	1.49 PROGRESSIVE W 75/14 MM OVANT +2.75/2.50	3	1	2,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-26	1.49 ROUND TOP W 70/24 MM +0.50/2.75	3	1	157,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-260	1.49 PROGRESSIVE W 75/14 MM OVANT +2.75/2.75	3	1	18,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-261	1.49 PROGRESSIVE W 75/14 MM OVANT +2.75/3.00	3	1	10,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-262	1.49 PROGRESSIVE W 75/14 MM OVANT +3.00/1.00	3	1	16,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-263	1.49 PROGRESSIVE W 75/14 MM OVANT +3.00/1.25	3	1	13,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-264	1.49 PROGRESSIVE W 75/14 MM OVANT +3.00/1.50	3	1	13,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-265	1.49 PROGRESSIVE W 75/14 MM OVANT +3.00/1.75	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-266	1.49 PROGRESSIVE W 75/14 MM OVANT +3.00/2.00	3	1	3,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-267	1.49 PROGRESSIVE W 75/14 MM OVANT +3.00/2.25	3	1	7,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-268	1.49 PROGRESSIVE W 75/14 MM OVANT +3.00/2.50	3	1	11,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-269	1.49 PROGRESSIVE W 75/14 MM OVANT +3.00/2.75	3	1	14,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-27	1.49 ROUND TOP W 70/24 MM +0.50/3.00	3	1	146,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-270	1.49 PROGRESSIVE W 75/14 MM OVANT +3.00/3.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-271	1.49 PROGRESSIVE W 75/14 MM OVANT +3.25/1.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-272	1.49 PROGRESSIVE W 75/14 MM OVANT +3.25/1.25	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-273	1.49 PROGRESSIVE W 75/14 MM OVANT +3.25/1.50	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-274	1.49 PROGRESSIVE W 75/14 MM OVANT +3.25/1.75	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-275	1.49 PROGRESSIVE W 75/14 MM OVANT +3.25/2.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-276	1.49 PROGRESSIVE W 75/14 MM OVANT +3.25/2.25	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-277	1.49 PROGRESSIVE W 75/14 MM OVANT +3.25/2.50	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-278	1.49 PROGRESSIVE W 75/14 MM OVANT +3.25/2.75	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-279	1.49 PROGRESSIVE W 75/14 MM OVANT +3.25/3.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-28	1.49 ROUND TOP W 70/24 MM +0.75/1.00	3	1	16,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-280	1.49 PROGRESSIVE W 75/14 MM OVANT +3.50/1.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-281	1.49 PROGRESSIVE W 75/14 MM OVANT +3.50/1.25	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-282	1.49 PROGRESSIVE W 75/14 MM OVANT +3.50/1.50	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-283	1.49 PROGRESSIVE W 75/14 MM OVANT +3.50/1.75	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-284	1.49 PROGRESSIVE W 75/14 MM OVANT +3.50/2.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-285	1.49 PROGRESSIVE W 75/14 MM OVANT +3.50/2.25	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-286	1.49 PROGRESSIVE W 75/14 MM OVANT +3.50/2.50	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-287	1.49 PROGRESSIVE W 75/14 MM OVANT +3.50/2.75	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-288	1.49 PROGRESSIVE W 75/14 MM OVANT +3.50/3.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-289	1.49 PROGRESSIVE W 75/14 MM OVANT +3.75/1.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-29	1.49 ROUND TOP W 70/24 MM +0.75/1.25	3	1	31,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-290	1.49 PROGRESSIVE W 75/14 MM OVANT +3.75/1.25	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-291	1.49 PROGRESSIVE W 75/14 MM OVANT +3.75/1.50	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-292	1.49 PROGRESSIVE W 75/14 MM OVANT +3.75/1.75	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-293	1.49 PROGRESSIVE W 75/14 MM OVANT +3.75/2.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-294	1.49 PROGRESSIVE W 75/14 MM OVANT +3.75/2.25	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-295	1.49 PROGRESSIVE W 75/14 MM OVANT +3.75/2.50	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-296	1.49 PROGRESSIVE W 75/14 MM OVANT +3.75/2.75	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-297	1.49 PROGRESSIVE W 75/14 MM OVANT +3.75/3.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-298	1.49 PROGRESSIVE W 75/14 MM OVANT +4.00/1.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-299	1.49 PROGRESSIVE W 75/14 MM OVANT +4.00/1.25	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-3	1.49 ROUND TOP W 70/24 MM +0.00/1.50	3	1	107,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-30	1.49 ROUND TOP W 70/24 MM +0.75/1.50	3	1	0,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-300	1.49 PROGRESSIVE W 75/14 MM OVANT +4.00/1.50	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-301	1.49 PROGRESSIVE W 75/14 MM OVANT +4.00/1.75	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-302	1.49 PROGRESSIVE W 75/14 MM OVANT +4.00/2.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-303	1.49 PROGRESSIVE W 75/14 MM OVANT +4.00/2.25	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-304	1.49 PROGRESSIVE W 75/14 MM OVANT +4.00/2.50	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-305	1.49 PROGRESSIVE W 75/14 MM OVANT +4.00/2.75	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-306	1.49 PROGRESSIVE W 75/14 MM OVANT +4.00/3.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-307	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.00/1.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-308	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.00/1.25	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-309	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.00/1.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-31	1.49 ROUND TOP W 70/24 MM +0.75/1.75	3	1	11,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-310	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.00/1.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-311	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.00/2.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-312	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.00/2.25	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-313	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.00/2.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-314	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.00/2.75	3	1	7,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-315	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.00/3.00	3	1	3,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-316	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.25/1.00	3	1	2,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-317	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.25/1.25	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-318	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.25/1.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-319	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.25/1.75	3	1	1,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-32	1.49 ROUND TOP W 70/24 MM +0.75/2.00	3	1	0,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-320	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.25/2.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-321	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.25/2.25	3	1	1,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-322	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.25/2.50	3	1	5,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-323	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.25/2.75	3	1	11,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-324	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.25/3.00	3	1	44,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-325	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.50/1.00	3	1	6,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-326	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.50/1.25	3	1	3,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-327	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.50/1.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-328	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.50/1.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-329	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.50/2.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-33	1.49 ROUND TOP W 70/24 MM +0.75/2.25	3	1	169,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-330	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.50/2.25	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-331	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.50/2.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-332	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.50/2.75	3	1	6,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-333	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.50/3.00	3	1	6,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-334	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.75/1.00	3	1	18,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-335	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.75/1.25	3	1	11,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-336	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.75/1.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-337	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.75/1.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-338	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.75/2.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-339	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.75/2.25	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-34	1.49 ROUND TOP W 70/24 MM +0.75/2.50	3	1	150,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-340	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.75/2.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-341	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.75/2.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-342	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.75/3.00	3	1	12,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-343	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.00/1.00	3	1	29,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-344	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.00/1.25	3	1	21,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-345	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.00/1.50	3	1	1,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-346	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.00/1.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-347	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.00/2.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-348	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.00/2.25	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-349	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.00/2.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-35	1.49 ROUND TOP W 70/24 MM +0.75/2.75	3	1	161,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-350	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.00/2.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-351	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.00/3.00	3	1	1,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-352	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.25/1.00	3	1	28,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-353	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.25/1.25	3	1	13,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-354	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.25/1.50	3	1	7,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-355	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.25/1.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-356	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.25/2.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-357	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.25/2.25	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-358	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.25/2.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-359	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.25/2.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-36	1.49 ROUND TOP W 70/24 MM +0.75/3.00	3	1	23,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-360	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.25/3.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-361	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.50/1.00	3	1	21,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-362	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.50/1.25	3	1	27,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-363	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.50/1.50	3	1	11,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-364	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.50/1.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-365	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.50/2.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-366	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.50/2.25	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-367	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.50/2.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-368	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.50/2.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-369	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.50/3.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-37	1.49 ROUND TOP W 70/24 MM +1.00/1.00	3	1	40,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-370	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.75/1.00	3	1	20,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-371	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.75/1.25	3	1	23,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-372	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.75/1.50	3	1	16,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-373	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.75/1.75	3	1	8,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-374	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.75/2.00	3	1	1,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-375	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.75/2.25	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-376	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.75/2.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-377	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.75/2.75	3	1	1,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-378	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.75/3.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-379	1.56 PROGRESSIVE HCT 75/13+3 AFINI +2.00/1.00	3	1	21,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-38	1.49 ROUND TOP W 70/24 MM +1.00/1.25	3	1	6,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-380	1.56 PROGRESSIVE HCT 75/13+3 AFINI +2.00/1.25	3	1	16,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-381	1.56 PROGRESSIVE HCT 75/13+3 AFINI +2.00/1.50	3	1	14,000	ACTIVO	315,00	450,00		0,00		NO	"
     Local  20:    N    12236
     Local  21:    N    100
     Local  22:    C    "#.##0,00"
     Local  23:    A    Len:    0
     Local  24:    L    .F.
     Local  25:    A    Len:   13
     Local  26:    L    .T.
     Local  27:    U    
     Local  28:    U    
     Local  29:    U    
     Local  30:    U    
     Local  31:    U    
     Local  32:    U    
   TBTNBMP:CLICK
     Param   1:    O    Class: TBTNBMP
   TBTNBMP:LBUTTONUP
   TCONTROL:HANDLEEVENT
     Param   1:    N    45
     Param   2:    N    45
     Param   3:    N    0
     Local   1:    L    .T.
     Local   2:    N    0
     Local   3:    S    @CLICK()
   TBTNBMP:HANDLEEVENT
     Param   1:    N    514
     Param   2:    N    0
     Param   3:    N    2949165
     Local   1:    U    
   _FWH
     Param   1:    N    514
     Param   2:    N    0
     Param   3:    N    2949165
   DIALOGBOX
     Param   1:    N    2949165
     Param   2:    N    514
     Param   3:    N    0
     Param   4:    N    2949165
     Param   5:    N    53
     Local   1:    O    Class: TBTNBMP
   TDIALOG:ACTIVATE
     Param   1:    N    10354688
     Param   2:    C    "XBROWSE_ALMACEN"
     Param   3:    N    525598
     Param   4:    O    Class: TDIALOG
   DO_ALMACEN
     Param   1:    U    
     Param   2:    U    
     Param   3:    U    
     Param   4:    L    .T.
     Param   5:    U    
     Param   6:    L    .T.
     Param   7:    U    
     Param   8:    U    
     Param   9:    U    
     Param  10:    U    
     Param  11:    U    
     Param  12:    L    .F.
     Param  13:    O    Class: TDIALOG
     Param  14:    U    
     Local   1:    N    525598
     Local   2:    S    @_NRESULT()
     Local   3:    O    Class: TDIALOG
   (b)POPUPINVENTARIO
     Local   1:    O    Class: TDOLPHINQRY
     Local   2:    C    "    SELECT	a.codigo,
  					a.tipo,
  					a.componente,
						b.nombre,
           	b.descripcion,
           	IF(b.activo=1, 'ACTIVO', 'INACTIVO') AS activo, 
  					a.cantidad,
           	a.costo,
           	IF(a.preciofijo=0, "NO", "SI") AS preunico,
           	a.precio1,
           	a.my_recno,
           	a.alicuota, 
						a.fecha,
           	IF(a.costoadicional=0, "NO", "SI") AS costoadi,
						b.marca,  
           	b.medida,   
           	c.descripcion AS namematerial,
           	(SELECT nombre 
						 FROM refemedida 
           	 WHERE medida = id
           	 LIMIT 1) AS namemedida,
            (SELECT descripcion 
           	 FROM refetipo 
           	 WHERE a.tipo = tipo
           	 LIMIT 1) AS nametipo,
           	(SELECT descripcion 
           	 FROM refecomp 
           	 WHERE a.componente = componente
           	 LIMIT 1) AS namecompon  
  	FROM almacen_ AS a
    LEFT JOIN catalogo AS b ON a.codigo = b.codigo
    LEFT JOIN materiales AS c ON b.material = c.codigo
    ORDER BY codigo;
"
     Local   3:    O    Class: TDIALOG
     Local   4:    O    Class: TXBROWSE
     Local   5:    O    Class: TFONT
     Local   6:    U    
     Local   7:    A    Len:   12
     Local   8:    C    "@E 999,999"
     Local   9:    L    .F.
   TMENU:ACTIVATE
     Param   1:    O    Class: TMENUITEM
   POPUPINVENTARIO
     Param   1:    N    76
     Param   2:    N    166
     Param   3:    O    Class: TBAR
     Param   4:    L    .T.
     Param   5:    N    0
     Local   1:    A    Len:    2
   (b)CREATEBUTTONBAR
     Param   1:    O    Class: TBTNBMP
     Local   1:    O    Class: TMENU
   TBTNBMP:CLICK
     Param   1:    O    Class: TBTNBMP
   TBTNBMP:LBUTTONUP
   TCONTROL:HANDLEEVENT
     Param   1:    N    68
     Param   2:    N    30
     Param   3:    N    0
     Local   1:    L    .T.
     Local   2:    N    0
     Local   3:    S    @CLICK()
   TBTNBMP:HANDLEEVENT
     Param   1:    N    514
     Param   2:    N    0
     Param   3:    N    4456478
     Local   1:    U    
   _FWH
     Param   1:    N    514
     Param   2:    N    0
     Param   3:    N    4456478
   WINRUN
     Param   1:    N    4456478
     Param   2:    N    514
     Param   3:    N    0
     Param   4:    N    4456478
     Param   5:    N    6
     Local   1:    O    Class: TBTNBMP
   TWINDOW:ACTIVATE
     Param   1:    N    525598
   MAIN
     Param   1:    C    "MAXIMIZED"
     Param   2:    U    
     Param   3:    U    
     Param   4:    U    
     Param   5:    U    
     Param   6:    B    {|| ... }
     Param   7:    B    {|| ... }
     Param   8:    B    {|| ... }
     Param   9:    U    
     Param  10:    U    
     Param  11:    U    
     Param  12:    U    
     Param  13:    U    
     Param  14:    U    
     Param  15:    U    
     Param  16:    U    
     Param  17:    B    {|| ... }
     Param  18:    U    
     Param  19:    U    
     Param  20:    L    .F.
     Local   1:    O    Class: TWINDOW
     Local   2:    U    
     Local   3:    U    

Linked RDDs
===========
   DBF
   DBFFPT
   DBFBLOB
   DBFCDX
   DBFNTX

DataBases in use
================

Classes in use:
===============
     1 ERROR
     2 HBCLASS
     3 HBOBJECT
     4 TDOLPHINQRY
     5 TWINDOW
     6 TCONTROL
     7 TXBROWSE
     8 TGET
     9 TCOMBOBOX
    10 TVARIABLE
    11 TINI
    12 TMYSQLSERVER
    13 TBRUSH
    14 TFONT
    15 TDIALOG
    16 TSAY
    17 TRECT
    18 TDOLPHINSRV
    19 TICON
    20 TBITMAP
    21 GET
    22 TCLIPGET
    23 TBTNBMP
    24 TBUTTON
    25 TBUTTONBMP
    26 TREG32
    27 TMSGBAR
    28 TMSGITEM
    29 TTIMER
    30 TBAR
    31 TMENU
    32 TMENUITEM
    33 TXBRWCOLUMN
    34 TSCROLLBAR
    35 TCLIPBOARD
    36 WIN_OLEAUTO
    37 TOLEAUTO
    38 TAJUSTE
    39 TMULTIGET
    40 TPASSWORD
    41 TCALC
    42 TWBROWSE
    43 TXIMAGE
    44 FRREPORTMANAGER
    45 FRPRINTOPTIONS
    46 FRPREVIEWOPTIONS
    47 FRENGINEOPTIONS
    48 FRREPORTOPTIONS
    49 TFACTUVENTA
    50 TORDEN
    51 TDATEPICK
    52 TSTRUCT

Memory Analysis
===============
      1085 Static variables

   Dynamic memory consume:
      Actual  Value:    5767168 bytes
      Highest Value:    5963776 bytes

]]>
Uso la funcion oBrw:ToExcel() y me genera el siguiente error
WINOLE/1007 No se puede obtener la propiedad Paste de la clase Worksheet. (0x800A03EC): Microsoft Excel
dejo el error completo :

Code: Select all | Expand

Application
===========
   Path and name: C:\Laboratorio\laboratorio.exe (32 bits)
   Size: 7,392,768 bytes
   Compiler version: Harbour 3.2.0dev (r2403071241)
   FiveWin  version: FWH 24.07
   C compiler version: Borland/Embarcadero C++ 7.7 (32-bit)
   Windows 11 64 Bits, version: 6.2, Build 9200 

   Time from start: 6 hours 15 mins 40 secs 
   Error occurred at: 12/05/2025, 16:44:05
   Error description: (DOS Error -2147352567) WINOLE/1007  No se puede obtener la propiedad Paste de la clase Worksheet. (0x800A03EC): Microsoft Excel

Stack Calls
===========
   Called from: hbwin\oleauto.prg => TOLEAUTO:PASTE( 0 )
   Called from: .\source\classes\xbrowse.prg => TXBROWSE:TOEXCEL( 11113 )
   Called from: source\almacen.prg => (b)CREABUTONBAR( 320 )
   Called from: .\source\classes\btnbmp.prg => TBTNBMP:CLICK( 816 )
   Called from: .\source\classes\btnbmp.prg => TBTNBMP:LBUTTONUP( 1103 )
   Called from: .\source\classes\control.prg => TCONTROL:HANDLEEVENT( 1867 )
   Called from: .\source\classes\btnbmp.prg => TBTNBMP:HANDLEEVENT( 2143 )
   Called from: .\source\classes\window.prg => _FWH( 3699 )
   Called from: .\source\classes\dialog.prg => DIALOGBOX( 0 )
   Called from: .\source\classes\dialog.prg => TDIALOG:ACTIVATE( 309 )
   Called from: source\almacen.prg => DO_ALMACEN( 151 )
   Called from: source\main_laboratorio.prg => (b)POPUPINVENTARIO( 671 )
   Called from: .\source\classes\menu.prg => TMENU:ACTIVATE( 1801 )
   Called from: source\main_laboratorio.prg => POPUPINVENTARIO( 697 )
   Called from: source\main_laboratorio.prg => (b)CREATEBUTTONBAR( 438 )
   Called from: .\source\classes\btnbmp.prg => TBTNBMP:CLICK( 816 )
   Called from: .\source\classes\btnbmp.prg => TBTNBMP:LBUTTONUP( 1103 )
   Called from: .\source\classes\control.prg => TCONTROL:HANDLEEVENT( 1867 )
   Called from: .\source\classes\btnbmp.prg => TBTNBMP:HANDLEEVENT( 2143 )
   Called from: .\source\classes\window.prg => _FWH( 3699 )
   Called from: .\source\classes\window.prg => WINRUN( 0 )
   Called from: .\source\classes\window.prg => TWINDOW:ACTIVATE( 1117 )
   Called from: source\main_laboratorio.prg => MAIN( 241 )

System
======
   CPU type: Intel(R) Core(TM) i7-6700T CPU @ 2.80GHz 2808 Mhz
   Hardware memory: 16276 megs

   Free System resources: 90 %
        GDI    resources: 90 %
        User   resources: 90 %

   Windows total applications running: 1
      1 ,                                                                                                     

Variables in use
================
   Procedure     Type   Value
   ==========================
   TOLEAUTO:PASTE
     Param   1:    O    Class: ERROR
   TXBROWSE:TOEXCEL
     Local   1:    U    
     Local   2:    U    
   (b)CREABUTONBAR
     Local   1:    B    {|| ... }
     Local   2:    U    
     Local   3:    A    Len:   13
     Local   4:    L    .T.
     Local   5:    U    
     Local   6:    U    
     Local   7:    O    Class: TXBROWSE
     Local   8:    O    Class: TOLEAUTO
     Local   9:    O    Class: TOLEAUTO
     Local  10:    U    
     Local  11:    N    13
     Local  12:    N    14
     Local  13:    O    Class: TXBRWCOLUMN
     Local  14:    C    "C"
     Local  15:    U    
     Local  16:    N    1
     Local  17:    N    12394
     Local  18:    N    13422
     Local  19:    C    "FALSO	004-24	1.49 ROUND TOP W 70/24 MM +0.50/2.25	3	1	171,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-240	1.49 PROGRESSIVE W 75/14 MM OVANT +2.25/2.25	3	1	17,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-241	1.49 PROGRESSIVE W 75/14 MM OVANT +2.25/2.50	3	1	3,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-242	1.49 PROGRESSIVE W 75/14 MM OVANT +2.25/2.75	3	1	14,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-243	1.49 PROGRESSIVE W 75/14 MM OVANT +2.25/3.00	3	1	13,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-244	1.49 PROGRESSIVE W 75/14 MM OVANT +2.50/1.00	3	1	18,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-245	1.49 PROGRESSIVE W 75/14 MM OVANT +2.50/1.25	3	1	62,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-246	1.49 PROGRESSIVE W 75/14 MM OVANT +2.50/1.50	3	1	44,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-247	1.49 PROGRESSIVE W 75/14 MM OVANT +2.50/1.75	3	1	37,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-248	1.49 PROGRESSIVE W 75/14 MM OVANT +2.50/2.00	3	1	13,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-249	1.49 PROGRESSIVE W 75/14 MM OVANT +2.50/2.25	3	1	28,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-25	1.49 ROUND TOP W 70/24 MM +0.50/2.50	3	1	149,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-250	1.49 PROGRESSIVE W 75/14 MM OVANT +2.50/2.50	3	1	14,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-251	1.49 PROGRESSIVE W 75/14 MM OVANT +2.50/2.75	3	1	15,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-252	1.49 PROGRESSIVE W 75/14 MM OVANT +2.50/3.00	3	1	7,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-253	1.49 PROGRESSIVE W 75/14 MM OVANT +2.75/1.00	3	1	22,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-254	1.49 PROGRESSIVE W 75/14 MM OVANT +2.75/1.25	3	1	66,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-255	1.49 PROGRESSIVE W 75/14 MM OVANT +2.75/1.50	3	1	52,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-256	1.49 PROGRESSIVE W 75/14 MM OVANT +2.75/1.75	3	1	49,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-257	1.49 PROGRESSIVE W 75/14 MM OVANT +2.75/2.00	3	1	11,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-258	1.49 PROGRESSIVE W 75/14 MM OVANT +2.75/2.25	3	1	11,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-259	1.49 PROGRESSIVE W 75/14 MM OVANT +2.75/2.50	3	1	2,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-26	1.49 ROUND TOP W 70/24 MM +0.50/2.75	3	1	157,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-260	1.49 PROGRESSIVE W 75/14 MM OVANT +2.75/2.75	3	1	18,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-261	1.49 PROGRESSIVE W 75/14 MM OVANT +2.75/3.00	3	1	10,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-262	1.49 PROGRESSIVE W 75/14 MM OVANT +3.00/1.00	3	1	16,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-263	1.49 PROGRESSIVE W 75/14 MM OVANT +3.00/1.25	3	1	13,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-264	1.49 PROGRESSIVE W 75/14 MM OVANT +3.00/1.50	3	1	13,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-265	1.49 PROGRESSIVE W 75/14 MM OVANT +3.00/1.75	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-266	1.49 PROGRESSIVE W 75/14 MM OVANT +3.00/2.00	3	1	3,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-267	1.49 PROGRESSIVE W 75/14 MM OVANT +3.00/2.25	3	1	7,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-268	1.49 PROGRESSIVE W 75/14 MM OVANT +3.00/2.50	3	1	11,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-269	1.49 PROGRESSIVE W 75/14 MM OVANT +3.00/2.75	3	1	14,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-27	1.49 ROUND TOP W 70/24 MM +0.50/3.00	3	1	146,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-270	1.49 PROGRESSIVE W 75/14 MM OVANT +3.00/3.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-271	1.49 PROGRESSIVE W 75/14 MM OVANT +3.25/1.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-272	1.49 PROGRESSIVE W 75/14 MM OVANT +3.25/1.25	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-273	1.49 PROGRESSIVE W 75/14 MM OVANT +3.25/1.50	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-274	1.49 PROGRESSIVE W 75/14 MM OVANT +3.25/1.75	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-275	1.49 PROGRESSIVE W 75/14 MM OVANT +3.25/2.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-276	1.49 PROGRESSIVE W 75/14 MM OVANT +3.25/2.25	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-277	1.49 PROGRESSIVE W 75/14 MM OVANT +3.25/2.50	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-278	1.49 PROGRESSIVE W 75/14 MM OVANT +3.25/2.75	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-279	1.49 PROGRESSIVE W 75/14 MM OVANT +3.25/3.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-28	1.49 ROUND TOP W 70/24 MM +0.75/1.00	3	1	16,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-280	1.49 PROGRESSIVE W 75/14 MM OVANT +3.50/1.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-281	1.49 PROGRESSIVE W 75/14 MM OVANT +3.50/1.25	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-282	1.49 PROGRESSIVE W 75/14 MM OVANT +3.50/1.50	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-283	1.49 PROGRESSIVE W 75/14 MM OVANT +3.50/1.75	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-284	1.49 PROGRESSIVE W 75/14 MM OVANT +3.50/2.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-285	1.49 PROGRESSIVE W 75/14 MM OVANT +3.50/2.25	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-286	1.49 PROGRESSIVE W 75/14 MM OVANT +3.50/2.50	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-287	1.49 PROGRESSIVE W 75/14 MM OVANT +3.50/2.75	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-288	1.49 PROGRESSIVE W 75/14 MM OVANT +3.50/3.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-289	1.49 PROGRESSIVE W 75/14 MM OVANT +3.75/1.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-29	1.49 ROUND TOP W 70/24 MM +0.75/1.25	3	1	31,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-290	1.49 PROGRESSIVE W 75/14 MM OVANT +3.75/1.25	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-291	1.49 PROGRESSIVE W 75/14 MM OVANT +3.75/1.50	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-292	1.49 PROGRESSIVE W 75/14 MM OVANT +3.75/1.75	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-293	1.49 PROGRESSIVE W 75/14 MM OVANT +3.75/2.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-294	1.49 PROGRESSIVE W 75/14 MM OVANT +3.75/2.25	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-295	1.49 PROGRESSIVE W 75/14 MM OVANT +3.75/2.50	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-296	1.49 PROGRESSIVE W 75/14 MM OVANT +3.75/2.75	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-297	1.49 PROGRESSIVE W 75/14 MM OVANT +3.75/3.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-298	1.49 PROGRESSIVE W 75/14 MM OVANT +4.00/1.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-299	1.49 PROGRESSIVE W 75/14 MM OVANT +4.00/1.25	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-3	1.49 ROUND TOP W 70/24 MM +0.00/1.50	3	1	107,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-30	1.49 ROUND TOP W 70/24 MM +0.75/1.50	3	1	0,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-300	1.49 PROGRESSIVE W 75/14 MM OVANT +4.00/1.50	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-301	1.49 PROGRESSIVE W 75/14 MM OVANT +4.00/1.75	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-302	1.49 PROGRESSIVE W 75/14 MM OVANT +4.00/2.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-303	1.49 PROGRESSIVE W 75/14 MM OVANT +4.00/2.25	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-304	1.49 PROGRESSIVE W 75/14 MM OVANT +4.00/2.50	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-305	1.49 PROGRESSIVE W 75/14 MM OVANT +4.00/2.75	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-306	1.49 PROGRESSIVE W 75/14 MM OVANT +4.00/3.00	3	1	0,000	ACTIVO	275,00	350,00		0,00		NO	
FALSO	004-307	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.00/1.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-308	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.00/1.25	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-309	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.00/1.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-31	1.49 ROUND TOP W 70/24 MM +0.75/1.75	3	1	11,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-310	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.00/1.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-311	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.00/2.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-312	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.00/2.25	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-313	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.00/2.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-314	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.00/2.75	3	1	7,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-315	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.00/3.00	3	1	3,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-316	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.25/1.00	3	1	2,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-317	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.25/1.25	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-318	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.25/1.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-319	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.25/1.75	3	1	1,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-32	1.49 ROUND TOP W 70/24 MM +0.75/2.00	3	1	0,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-320	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.25/2.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-321	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.25/2.25	3	1	1,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-322	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.25/2.50	3	1	5,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-323	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.25/2.75	3	1	11,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-324	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.25/3.00	3	1	44,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-325	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.50/1.00	3	1	6,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-326	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.50/1.25	3	1	3,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-327	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.50/1.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-328	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.50/1.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-329	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.50/2.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-33	1.49 ROUND TOP W 70/24 MM +0.75/2.25	3	1	169,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-330	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.50/2.25	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-331	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.50/2.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-332	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.50/2.75	3	1	6,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-333	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.50/3.00	3	1	6,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-334	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.75/1.00	3	1	18,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-335	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.75/1.25	3	1	11,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-336	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.75/1.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-337	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.75/1.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-338	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.75/2.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-339	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.75/2.25	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-34	1.49 ROUND TOP W 70/24 MM +0.75/2.50	3	1	150,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-340	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.75/2.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-341	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.75/2.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-342	1.56 PROGRESSIVE HCT 75/13+3 AFINI +0.75/3.00	3	1	12,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-343	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.00/1.00	3	1	29,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-344	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.00/1.25	3	1	21,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-345	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.00/1.50	3	1	1,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-346	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.00/1.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-347	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.00/2.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-348	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.00/2.25	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-349	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.00/2.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-35	1.49 ROUND TOP W 70/24 MM +0.75/2.75	3	1	161,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-350	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.00/2.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-351	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.00/3.00	3	1	1,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-352	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.25/1.00	3	1	28,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-353	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.25/1.25	3	1	13,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-354	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.25/1.50	3	1	7,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-355	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.25/1.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-356	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.25/2.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-357	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.25/2.25	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-358	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.25/2.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-359	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.25/2.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-36	1.49 ROUND TOP W 70/24 MM +0.75/3.00	3	1	23,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-360	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.25/3.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-361	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.50/1.00	3	1	21,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-362	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.50/1.25	3	1	27,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-363	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.50/1.50	3	1	11,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-364	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.50/1.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-365	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.50/2.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-366	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.50/2.25	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-367	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.50/2.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-368	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.50/2.75	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-369	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.50/3.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-37	1.49 ROUND TOP W 70/24 MM +1.00/1.00	3	1	40,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-370	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.75/1.00	3	1	20,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-371	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.75/1.25	3	1	23,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-372	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.75/1.50	3	1	16,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-373	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.75/1.75	3	1	8,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-374	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.75/2.00	3	1	1,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-375	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.75/2.25	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-376	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.75/2.50	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-377	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.75/2.75	3	1	1,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-378	1.56 PROGRESSIVE HCT 75/13+3 AFINI +1.75/3.00	3	1	0,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-379	1.56 PROGRESSIVE HCT 75/13+3 AFINI +2.00/1.00	3	1	21,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-38	1.49 ROUND TOP W 70/24 MM +1.00/1.25	3	1	6,000	ACTIVO	92,00	130,00		0,00		NO	
FALSO	004-380	1.56 PROGRESSIVE HCT 75/13+3 AFINI +2.00/1.25	3	1	16,000	ACTIVO	315,00	450,00		0,00		NO	
FALSO	004-381	1.56 PROGRESSIVE HCT 75/13+3 AFINI +2.00/1.50	3	1	14,000	ACTIVO	315,00	450,00		0,00		NO	"
     Local  20:    N    12236
     Local  21:    N    100
     Local  22:    C    "#.##0,00"
     Local  23:    A    Len:    0
     Local  24:    L    .F.
     Local  25:    A    Len:   13
     Local  26:    L    .T.
     Local  27:    U    
     Local  28:    U    
     Local  29:    U    
     Local  30:    U    
     Local  31:    U    
     Local  32:    U    
   TBTNBMP:CLICK
     Param   1:    O    Class: TBTNBMP
   TBTNBMP:LBUTTONUP
   TCONTROL:HANDLEEVENT
     Param   1:    N    45
     Param   2:    N    45
     Param   3:    N    0
     Local   1:    L    .T.
     Local   2:    N    0
     Local   3:    S    @CLICK()
   TBTNBMP:HANDLEEVENT
     Param   1:    N    514
     Param   2:    N    0
     Param   3:    N    2949165
     Local   1:    U    
   _FWH
     Param   1:    N    514
     Param   2:    N    0
     Param   3:    N    2949165
   DIALOGBOX
     Param   1:    N    2949165
     Param   2:    N    514
     Param   3:    N    0
     Param   4:    N    2949165
     Param   5:    N    53
     Local   1:    O    Class: TBTNBMP
   TDIALOG:ACTIVATE
     Param   1:    N    10354688
     Param   2:    C    "XBROWSE_ALMACEN"
     Param   3:    N    525598
     Param   4:    O    Class: TDIALOG
   DO_ALMACEN
     Param   1:    U    
     Param   2:    U    
     Param   3:    U    
     Param   4:    L    .T.
     Param   5:    U    
     Param   6:    L    .T.
     Param   7:    U    
     Param   8:    U    
     Param   9:    U    
     Param  10:    U    
     Param  11:    U    
     Param  12:    L    .F.
     Param  13:    O    Class: TDIALOG
     Param  14:    U    
     Local   1:    N    525598
     Local   2:    S    @_NRESULT()
     Local   3:    O    Class: TDIALOG
   (b)POPUPINVENTARIO
     Local   1:    O    Class: TDOLPHINQRY
     Local   2:    C    "    SELECT	a.codigo,
  					a.tipo,
  					a.componente,
						b.nombre,
           	b.descripcion,
           	IF(b.activo=1, 'ACTIVO', 'INACTIVO') AS activo, 
  					a.cantidad,
           	a.costo,
           	IF(a.preciofijo=0, "NO", "SI") AS preunico,
           	a.precio1,
           	a.my_recno,
           	a.alicuota, 
						a.fecha,
           	IF(a.costoadicional=0, "NO", "SI") AS costoadi,
						b.marca,  
           	b.medida,   
           	c.descripcion AS namematerial,
           	(SELECT nombre 
						 FROM refemedida 
           	 WHERE medida = id
           	 LIMIT 1) AS namemedida,
            (SELECT descripcion 
           	 FROM refetipo 
           	 WHERE a.tipo = tipo
           	 LIMIT 1) AS nametipo,
           	(SELECT descripcion 
           	 FROM refecomp 
           	 WHERE a.componente = componente
           	 LIMIT 1) AS namecompon  
  	FROM almacen_ AS a
    LEFT JOIN catalogo AS b ON a.codigo = b.codigo
    LEFT JOIN materiales AS c ON b.material = c.codigo
    ORDER BY codigo;
"
     Local   3:    O    Class: TDIALOG
     Local   4:    O    Class: TXBROWSE
     Local   5:    O    Class: TFONT
     Local   6:    U    
     Local   7:    A    Len:   12
     Local   8:    C    "@E 999,999"
     Local   9:    L    .F.
   TMENU:ACTIVATE
     Param   1:    O    Class: TMENUITEM
   POPUPINVENTARIO
     Param   1:    N    76
     Param   2:    N    166
     Param   3:    O    Class: TBAR
     Param   4:    L    .T.
     Param   5:    N    0
     Local   1:    A    Len:    2
   (b)CREATEBUTTONBAR
     Param   1:    O    Class: TBTNBMP
     Local   1:    O    Class: TMENU
   TBTNBMP:CLICK
     Param   1:    O    Class: TBTNBMP
   TBTNBMP:LBUTTONUP
   TCONTROL:HANDLEEVENT
     Param   1:    N    68
     Param   2:    N    30
     Param   3:    N    0
     Local   1:    L    .T.
     Local   2:    N    0
     Local   3:    S    @CLICK()
   TBTNBMP:HANDLEEVENT
     Param   1:    N    514
     Param   2:    N    0
     Param   3:    N    4456478
     Local   1:    U    
   _FWH
     Param   1:    N    514
     Param   2:    N    0
     Param   3:    N    4456478
   WINRUN
     Param   1:    N    4456478
     Param   2:    N    514
     Param   3:    N    0
     Param   4:    N    4456478
     Param   5:    N    6
     Local   1:    O    Class: TBTNBMP
   TWINDOW:ACTIVATE
     Param   1:    N    525598
   MAIN
     Param   1:    C    "MAXIMIZED"
     Param   2:    U    
     Param   3:    U    
     Param   4:    U    
     Param   5:    U    
     Param   6:    B    {|| ... }
     Param   7:    B    {|| ... }
     Param   8:    B    {|| ... }
     Param   9:    U    
     Param  10:    U    
     Param  11:    U    
     Param  12:    U    
     Param  13:    U    
     Param  14:    U    
     Param  15:    U    
     Param  16:    U    
     Param  17:    B    {|| ... }
     Param  18:    U    
     Param  19:    U    
     Param  20:    L    .F.
     Local   1:    O    Class: TWINDOW
     Local   2:    U    
     Local   3:    U    

Linked RDDs
===========
   DBF
   DBFFPT
   DBFBLOB
   DBFCDX
   DBFNTX

DataBases in use
================

Classes in use:
===============
     1 ERROR
     2 HBCLASS
     3 HBOBJECT
     4 TDOLPHINQRY
     5 TWINDOW
     6 TCONTROL
     7 TXBROWSE
     8 TGET
     9 TCOMBOBOX
    10 TVARIABLE
    11 TINI
    12 TMYSQLSERVER
    13 TBRUSH
    14 TFONT
    15 TDIALOG
    16 TSAY
    17 TRECT
    18 TDOLPHINSRV
    19 TICON
    20 TBITMAP
    21 GET
    22 TCLIPGET
    23 TBTNBMP
    24 TBUTTON
    25 TBUTTONBMP
    26 TREG32
    27 TMSGBAR
    28 TMSGITEM
    29 TTIMER
    30 TBAR
    31 TMENU
    32 TMENUITEM
    33 TXBRWCOLUMN
    34 TSCROLLBAR
    35 TCLIPBOARD
    36 WIN_OLEAUTO
    37 TOLEAUTO
    38 TAJUSTE
    39 TMULTIGET
    40 TPASSWORD
    41 TCALC
    42 TWBROWSE
    43 TXIMAGE
    44 FRREPORTMANAGER
    45 FRPRINTOPTIONS
    46 FRPREVIEWOPTIONS
    47 FRENGINEOPTIONS
    48 FRREPORTOPTIONS
    49 TFACTUVENTA
    50 TORDEN
    51 TDATEPICK
    52 TSTRUCT

Memory Analysis
===============
      1085 Static variables

   Dynamic memory consume:
      Actual  Value:    5767168 bytes
      Highest Value:    5963776 bytes

]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: WINOLE/1007 No se puede obtener la propiedad Paste de la clase Worksheet. (0x800A03EC): Microsoft Excel :: Reply by Antonio Linares]]> 2025-05-12T23:26:07-06:00 2025-05-12T23:26:07-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45668&p=279463#p279463
oBrw:lExcelCellWise := .T.

viewtopic.php?p=262328#p262328]]>

oBrw:lExcelCellWise := .T.

viewtopic.php?p=262328#p262328]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: WINOLE/1007 No se puede obtener la propiedad Paste de la clase Worksheet. (0x800A03EC): Microsoft Excel :: Reply by albeiroval]]> 2025-05-13T15:01:29-06:00 2025-05-13T15:01:29-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45668&p=279496#p279496
Antonio Linares wrote: Tue May 13, 2025 5:26 am Prueba asi:

oBrw:lExcelCellWise := .T.

viewtopic.php?p=262328#p262328
Hola Antonio, es lento pero funciono.
Muchas Gracias]]>
Antonio Linares wrote: Tue May 13, 2025 5:26 am Prueba asi:

oBrw:lExcelCellWise := .T.

viewtopic.php?p=262328#p262328
Hola Antonio, es lento pero funciono.
Muchas Gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Error con TFOLDEREX y xBrowse :: Author JoseAlvarez]]> 2025-05-13T20:54:41-06:00 2025-05-13T20:54:41-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45673&p=279499#p279499
Hice un folderex con 2 pestañas, en cada una necesito mostrar un xBrowse que su datasource son arreglos.

El problema es que en el primero no se muestran los datos, pero en el segundo sí.
Ya todo esta bien revisado, la asignacion de los arreglos al browse, se verfica que tienen datos, se asigna el dialog correcto, pero nada,
el primer browse no muestra nada. dejo las imagenes por si alguien sabe que me puede estar pasando.

Image


Image]]>

Hice un folderex con 2 pestañas, en cada una necesito mostrar un xBrowse que su datasource son arreglos.

El problema es que en el primero no se muestran los datos, pero en el segundo sí.
Ya todo esta bien revisado, la asignacion de los arreglos al browse, se verfica que tienen datos, se asigna el dialog correcto, pero nada,
el primer browse no muestra nada. dejo las imagenes por si alguien sabe que me puede estar pasando.

Image


Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Error con TFOLDEREX y xBrowse :: Reply by Antonio Linares]]> 2025-05-13T21:37:56-06:00 2025-05-13T21:37:56-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45673&p=279500#p279500
Puedes mostrar el código ?

gracias]]>

Puedes mostrar el código ?

gracias]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Error con TFOLDEREX y xBrowse :: Reply by JoseAlvarez]]> 2025-05-14T06:35:42-06:00 2025-05-14T06:35:42-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45673&p=279508#p279508

Code: Select all | Expand

	///////////////  CALL  TO RESUMEN DE FACTURAS //////////////////////////////////////////////////////////////////////////////////
	cQuery := "CALL obtener_saldos_clientes('"+_cPrefijo+"');"

	TRY
           oQry := _oSqlConex:Query( cQuery )
	  _oSqlConex:NextResult()
       CATCH
	  Fnct_MsgErrorBD("NoMySql"  , .f. , "No hay conexión a La Base de Datos" , "Sin Acceso a La Red","Error en servicio de Datos",)
	  _Close()
	  return .f.
       END TRY

	aResumen    :={}
	aResumenBack:= {}

	aResumen:=oQry:FillArray()
	aResumenBack:=aClone(aResumen)

///////////////  CALL  TO DETALLES DE FACTURAS //////////////////////////////////////////////////////////////////////////////////

	cQuery := "CALL ObtenerEstadoFacturas('"+_cPrefijo+"');"
           
	TRY
	    oFacturas := _oSqlConex:Query( cQuery )
	   _oSqlConex:NextResult()
        CATCH
	   Fnct_MsgErrorBD("NoMySql"  , .f. , "No hay conexión a La Base de Datos" , "Sin Acceso a La Red","Error en servicio de Datos",)
	   _Close()
	  return .f.
	END TRY

	aFacturas := {}
	aFacturas := oFacturas:FillArray()
	aFacturasBackup:=aClone(aFacturas)

	Fnct_CuadreToExcel()

	_Close()

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  Define cursor oCursorBar       resource 'manito'
  Define cursor oCursorIndicador resource 'Indicador'
  Define Font   oFHeadBrw Name "Segoe UI SemiBold" Size 0, -14

  Define Dialog oDlg_Facturas resource "oDlg_Facturas" title 'Gestión de Documentos Por Cobrar'
      oDlg_Facturas:lHelpIcon:=.f.

      Redefine Folderex oFolder Id 500 of oDlg_Facturas prompt 'Resumen', 'Detalles' BITMAPS ;
                                                                                   'open2'  , 'close'    DIALOGS ;
                                                                                   'oDlg_FactResumen' ,;
                                                                                   'oDlg_FactDetalle'  ;
																																   TAB HEIGHT 28 ROUND 5on change (Fnct_oFolderBitmaps())
      oFolder:aDialogs[ 1 ]:SetBrush( oBrush )
      oFolder:aDialogs[ 2 ]:SetBrush( oBrush )
       
        
 ////////////////////  XBROWSE   RESUMEN   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            
           
      Redefine get oGetSeek2 Var cSeek2 Id 4061  of oFolder:aDialogs[ 1 ] on change (cSeek2:=oGetSeek2:GetText()), Fnct_Seek(@aResumen), 
      Fnct_PonTotales() ) WHEN len(aResumen)>0
      oGetSeek2:SetFont(_oFontGets)
      oGetSeek2:SetColorFocus( CLR_YELLOW )

      Redefine xBrowse oBrwVer Id 4060  DATASOURCE aResumen AUTOCOLS ;
                                                            COLUMNS     cRif, cNombre, nVencido, nNoVencido, nVenceHoy, nTotalGeneral, nCodigoCliente ;
                                                            HEADERS     "R.I.F", "Nombre", "Vencido", "No Vencido", "Vence Hoy", "Total","" ;
                                                            FIELDSIZES  90, 250, 100, 100, 100, 100, 30 ;
                                                            PICTURE     nil, nil, '@E 9,999,999,999.99', '@E 9,999,999,999.99' '@E 
                                                                        '9,999,999,999.99', '@E 9,999,999,999.99', nil ;
                                                           JUSTIFY     AL_LEFT, AL_LEFT, AL_RIGHT, AL_RIGHT, AL_RIGHT, AL_RIGHT, AL_RIGHT ;
                                                           CELL LINES  ;
                                                           FASTEDIT    ;
                                                           FOOTERS of oFolder:aDialogs[ 1 ] //on dblclick (cVarClien:=alltrim(oBrwVer:aCols[cNombre]:Value))
                                                           
      oBrwVer:aArrayData:=aResumen
      
       WITH object oBrwVer
          nCiclo:= 1
          do while nCiclo<=7
              oBrwVer:aCols[nCiclo] :nHeadStrAlign     := AL_CENTER
              oBrwVer:aCols[nCiclo] :oHeaderFont       := oFHeadBrw
              oBrwVer:aCols[nCiclo] :lAllowSizing      :=.t.
              nCiclo++ 
          enddo
                                            
          oBrwVer:aCols[7]:Hide()
          oBrwVer:lAllowColSwapping  :=.F.
          oBrwVer:nMarqueeStyle  := MARQSTYLE_HIGHLROW
          oBrwVer:l2007          := .f.
          oBrwVer:lFooter        := .t.
          oBrwVer:lRecordSelector:= .f.
          oBrwVer:bClrHeader     := { || { CLR_WHITE, CLR_BLUE, CLR_HGRAY } }
         :bClrFooter            := { || { CLR_WHITE, CLR_BLUE, CLR_HGRAY } }
         :aCols[1] :bFooter := { || 'Total -> '+transform(len(aResumen),"@E 99,999") }
         :aCols[3]:nFooterType := AGGR_SUM
         :bchange := { || Fnct_PonTotales(@aResumen) }
         :aCols[4]:nFooterType := AGGR_SUM
         :bchange := { || Fnct_PonTotales(@aResumen) }
       	 :aCols[5]:nFooterType := AGGR_SUM
         :bchange := { || Fnct_PonTotales(@aResumen) }
         :aCols[6]:nFooterType := AGGR_SUM
         :bchange := { || Fnct_PonTotales(@aResumen) }
                                     
         :MakeTotals()
	 oBrwVer:MakeTotals()
                                    
       END
                                                             
      oBrwVer:gotop()
      oBrwVer:Refresh()
            
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                                                 
      Redefine get oGetSeek Var cSeek Id 11  of oFolder:aDialogs[ 2 ] on change (cSeek:=oGetSeek:GetText(), Fnct_SeekArray(), Fnct_PonTotales() ) WHEN len(aFacturas)>0
      oGetSeek:SetFont(_oFontGets)
      oGetSeek:SetColorFocus( CLR_YELLOW )

      Redefine Radio oRSeek Var nSeek Id 4002,4003 of oFolder:aDialogs[ 2 ] on change (oGetSeek:SetFocus()) WHEN len(aFacturas)>0

      Redefine xBrowse oBrwFac Id 4007  DATASOURCE aFacturas AUTOCOLS ;
                                                             AUTOSORT;
                                                             COLUMNS  cRifCliente, cCliente , cNumeroDoc, dEmision, dVcto, nDiasVcto, FacMonto, ;
		                                                          nFacPagos , nFacSaldo, cConcepto, nCodigoCli, nFacCodigoCli, nEmail, nLimite, cTolera ;
                                                             HEADERS  _cIdEmpresa, "Cliente", "N# Doc. ","Emisión", "Vencto.", "Dias Vcdo.", "Monto "+_cSignoMoneda ,;
                                                                            "Pagos", "Saldo", "Concepto", "", "", "", "", "" ;
                                                             FIELDSIZES   90, 250, 70, 75, 90, 85, 100, 100, 100, 160,20,20,50, 100, 0   ;
                                                             PICTURE      nil, nil, nil, nil, nil, nil, '@E 9,999,999,999.99', '@E 9,999,999,999.99','@E 9,999,999,999.99', ;
                                                                                nil, nil,nil, nil, '@E 9,999,999,999.99', nil ;
                                                             JUSTIFY      AL_LEFT, AL_LEFT, AL_CENTER, AL_CENTER, AL_CENTER, AL_CENTER,;
                                                                          AL_RIGHT, AL_RIGHT, AL_RIGHT, AL_LEFT, AL_LEFT, AL_CENTER, AL_LEFT, AL_LEFT, AL_CENTER  ;
                                                             CELL LINES   FASTEDIT FOOTERS of oFolder:aDialogs[ 2 ] on Dblclick (Fnct_FiltrarCliente(alltrim(oBrwFac:aCols[cCliente]:Value)))//(Fnct_FiltrarCliente(alltrim(oBrwFac:aCols[cCliente]:Value)))


      oBrwFac:aArrayData:=aFacturas

      WITH object oBrwFac
          nCiclo:= 1
          do while nCiclo<=nObrwColsToShow
             oBrwFac:aCols[nCiclo] :nHeadStrAlign     := AL_CENTER
             oBrwFac:aCols[nCiclo] :oHeaderFont       := oFHeadBrw
             oBrwFac:aCols[nCiclo] :lAllowSizing      :=.T.
             nCiclo++
          enddo
                                                                                                           
          oBrwFac:aCols[nCodigoCli]   :Hide()
          oBrwFac:aCols[nFacCodigoCli]:Hide()
          oBrwFac:aCols[11]:Hide()
          oBrwFac:aCols[12]:Hide()
          oBrwFac:aCols[13]:Hide()
          oBrwFac:aCols[14]:Hide()
          oBrwFac:aCols[15]:Hide()
          oBrwFac:lAllowColSwapping   :=.F.
          oBrwFac:nMarqueeStyle  := MARQSTYLE_HIGHLROW
          oBrwFac:l2007          := .f.
          oBrwFac:lFooter        := .t.
          oBrwFac:lRecordSelector:= .f.
          oBrwFac:bOnSort:={|b,oCol| oBrwFac:Gotop() }
          *:aCols[cConcepto]:bLDClickData:= {|| Fnct_VerConcepto()}        //oBrwCiudades:SetFilter( (oBrwCiudades:aCols[2]:value) = 
(oBrwEstados:aCols[1]:Value) )
          *:aCols[nFacPagos]:bLDClickData:= {|| Fnct_VerPagos()}
	  oBrwFac:bClrHeader     := { || iif(lBW, ( { CLR_WHITE, CLR_GRAY, CLR_GRAY }), ({ CLR_WHITE, CLR_BLUE, CLR_HGRAY })) }
          :bClrFooter            := { || iif(lBW, ( { CLR_WHITE, CLR_GRAY, CLR_GRAY }), ({ CLR_WHITE, CLR_BLUE, CLR_HGRAY })) }
          AEval( oBrwFac:aCols, { |oCol| ;
          oCol:bClrSelFocus  := { || { CLR_BLACK, RGB( 255, 224, 126) } }, ;
          oCol:bPaintText := { |oCol, hDC, cData, aRect, aColors| ;
          PaintCol( oCol, hDC, cData, aRect, aColors ) } } ) 
          :nStretchCol      := STRETCHCOL_WIDEST
          :aCols[nFacMonto]:nFooterType := AGGR_SUM  // TOTAL
	  :aCols[nFacPagos]:nFooterType := AGGR_SUM //TOTAL
	  :aCols[nFacSaldo]:nFooterType := AGGR_SUM //TOTAL

	  :bRClicked :={ || Fnct_EditarFactura() }
	  :bchange := { || Fnct_PonTotales() }
	  :aCols[2]:cFooter := { || "  Total Documentos -> "+transform( len(aFacturas), "@E 9,999,999.99") }
	  :MakeTotals()
	  oBrwFac:MakeTotals()
       END
              
       WITH OBJECT oBrwFac:aCols[nDiasVcto]
	   oBrwFac:aCols[nDiasVcto]:bClrStd := ChangeColor()
       END
         
	WITH OBJECT oBrwFac:aCols[nFacPagos]
	      oCol:=oBrwFac:aCols[nFacPagos]
	      oBrwFac:aCols[nFacPagos]:nEditType := EDIT_BUTTON
              oBrwFac:aCols[nFacPagos]:bEditBlock := { |nRow,nCol,oCol,nKey| Fnct_VerPagos( nRow, nCol, oCol, nKey, oBrwFac:aCols[nFacMonto] :Value ,;
             oBrwFac:aCols[dEmision]  :Value ),oBrwFac:Refresh() }
 	   END
                        
           WITH OBJECT oBrwFac:aCols[cConcepto]
	    	 oCol:=oBrwFac:aCols[cConcepto]
	    	 oBrwFac:aCols[cConcepto]:nEditType := EDIT_BUTTON
                oBrwFac:aCols[cConcepto]:bEditBlock := { |nRow,nCol,oCol,nKey| Fnct_VerConcepto( nRow, nCol, oCol, nKey  ) }
 	   END

	  WITH OBJECT oBrwFac:aCols[dVcto]
		 oCol:=oBrwFac:aCols[dVcto]
		 oBrwFac:aCols[dVcto]:nEditType := EDIT_BUTTON
               oBrwFac:aCols[dVcto]:bEditBlock := { |nRow,nCol,oCol,nKey| Fnct_VerDiasCredito( nRow, nCol, oCol, nKey )  }
 	 END

	oBrwFac:gotop()
	oBrwFac:Refresh()
]]>

Code: Select all | Expand

	///////////////  CALL  TO RESUMEN DE FACTURAS //////////////////////////////////////////////////////////////////////////////////
	cQuery := "CALL obtener_saldos_clientes('"+_cPrefijo+"');"

	TRY
           oQry := _oSqlConex:Query( cQuery )
	  _oSqlConex:NextResult()
       CATCH
	  Fnct_MsgErrorBD("NoMySql"  , .f. , "No hay conexión a La Base de Datos" , "Sin Acceso a La Red","Error en servicio de Datos",)
	  _Close()
	  return .f.
       END TRY

	aResumen    :={}
	aResumenBack:= {}

	aResumen:=oQry:FillArray()
	aResumenBack:=aClone(aResumen)

///////////////  CALL  TO DETALLES DE FACTURAS //////////////////////////////////////////////////////////////////////////////////

	cQuery := "CALL ObtenerEstadoFacturas('"+_cPrefijo+"');"
           
	TRY
	    oFacturas := _oSqlConex:Query( cQuery )
	   _oSqlConex:NextResult()
        CATCH
	   Fnct_MsgErrorBD("NoMySql"  , .f. , "No hay conexión a La Base de Datos" , "Sin Acceso a La Red","Error en servicio de Datos",)
	   _Close()
	  return .f.
	END TRY

	aFacturas := {}
	aFacturas := oFacturas:FillArray()
	aFacturasBackup:=aClone(aFacturas)

	Fnct_CuadreToExcel()

	_Close()

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  Define cursor oCursorBar       resource 'manito'
  Define cursor oCursorIndicador resource 'Indicador'
  Define Font   oFHeadBrw Name "Segoe UI SemiBold" Size 0, -14

  Define Dialog oDlg_Facturas resource "oDlg_Facturas" title 'Gestión de Documentos Por Cobrar'
      oDlg_Facturas:lHelpIcon:=.f.

      Redefine Folderex oFolder Id 500 of oDlg_Facturas prompt 'Resumen', 'Detalles' BITMAPS ;
                                                                                   'open2'  , 'close'    DIALOGS ;
                                                                                   'oDlg_FactResumen' ,;
                                                                                   'oDlg_FactDetalle'  ;
																																   TAB HEIGHT 28 ROUND 5on change (Fnct_oFolderBitmaps())
      oFolder:aDialogs[ 1 ]:SetBrush( oBrush )
      oFolder:aDialogs[ 2 ]:SetBrush( oBrush )
       
        
 ////////////////////  XBROWSE   RESUMEN   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            
           
      Redefine get oGetSeek2 Var cSeek2 Id 4061  of oFolder:aDialogs[ 1 ] on change (cSeek2:=oGetSeek2:GetText()), Fnct_Seek(@aResumen), 
      Fnct_PonTotales() ) WHEN len(aResumen)>0
      oGetSeek2:SetFont(_oFontGets)
      oGetSeek2:SetColorFocus( CLR_YELLOW )

      Redefine xBrowse oBrwVer Id 4060  DATASOURCE aResumen AUTOCOLS ;
                                                            COLUMNS     cRif, cNombre, nVencido, nNoVencido, nVenceHoy, nTotalGeneral, nCodigoCliente ;
                                                            HEADERS     "R.I.F", "Nombre", "Vencido", "No Vencido", "Vence Hoy", "Total","" ;
                                                            FIELDSIZES  90, 250, 100, 100, 100, 100, 30 ;
                                                            PICTURE     nil, nil, '@E 9,999,999,999.99', '@E 9,999,999,999.99' '@E 
                                                                        '9,999,999,999.99', '@E 9,999,999,999.99', nil ;
                                                           JUSTIFY     AL_LEFT, AL_LEFT, AL_RIGHT, AL_RIGHT, AL_RIGHT, AL_RIGHT, AL_RIGHT ;
                                                           CELL LINES  ;
                                                           FASTEDIT    ;
                                                           FOOTERS of oFolder:aDialogs[ 1 ] //on dblclick (cVarClien:=alltrim(oBrwVer:aCols[cNombre]:Value))
                                                           
      oBrwVer:aArrayData:=aResumen
      
       WITH object oBrwVer
          nCiclo:= 1
          do while nCiclo<=7
              oBrwVer:aCols[nCiclo] :nHeadStrAlign     := AL_CENTER
              oBrwVer:aCols[nCiclo] :oHeaderFont       := oFHeadBrw
              oBrwVer:aCols[nCiclo] :lAllowSizing      :=.t.
              nCiclo++ 
          enddo
                                            
          oBrwVer:aCols[7]:Hide()
          oBrwVer:lAllowColSwapping  :=.F.
          oBrwVer:nMarqueeStyle  := MARQSTYLE_HIGHLROW
          oBrwVer:l2007          := .f.
          oBrwVer:lFooter        := .t.
          oBrwVer:lRecordSelector:= .f.
          oBrwVer:bClrHeader     := { || { CLR_WHITE, CLR_BLUE, CLR_HGRAY } }
         :bClrFooter            := { || { CLR_WHITE, CLR_BLUE, CLR_HGRAY } }
         :aCols[1] :bFooter := { || 'Total -> '+transform(len(aResumen),"@E 99,999") }
         :aCols[3]:nFooterType := AGGR_SUM
         :bchange := { || Fnct_PonTotales(@aResumen) }
         :aCols[4]:nFooterType := AGGR_SUM
         :bchange := { || Fnct_PonTotales(@aResumen) }
       	 :aCols[5]:nFooterType := AGGR_SUM
         :bchange := { || Fnct_PonTotales(@aResumen) }
         :aCols[6]:nFooterType := AGGR_SUM
         :bchange := { || Fnct_PonTotales(@aResumen) }
                                     
         :MakeTotals()
	 oBrwVer:MakeTotals()
                                    
       END
                                                             
      oBrwVer:gotop()
      oBrwVer:Refresh()
            
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
                                                 
      Redefine get oGetSeek Var cSeek Id 11  of oFolder:aDialogs[ 2 ] on change (cSeek:=oGetSeek:GetText(), Fnct_SeekArray(), Fnct_PonTotales() ) WHEN len(aFacturas)>0
      oGetSeek:SetFont(_oFontGets)
      oGetSeek:SetColorFocus( CLR_YELLOW )

      Redefine Radio oRSeek Var nSeek Id 4002,4003 of oFolder:aDialogs[ 2 ] on change (oGetSeek:SetFocus()) WHEN len(aFacturas)>0

      Redefine xBrowse oBrwFac Id 4007  DATASOURCE aFacturas AUTOCOLS ;
                                                             AUTOSORT;
                                                             COLUMNS  cRifCliente, cCliente , cNumeroDoc, dEmision, dVcto, nDiasVcto, FacMonto, ;
		                                                          nFacPagos , nFacSaldo, cConcepto, nCodigoCli, nFacCodigoCli, nEmail, nLimite, cTolera ;
                                                             HEADERS  _cIdEmpresa, "Cliente", "N# Doc. ","Emisión", "Vencto.", "Dias Vcdo.", "Monto "+_cSignoMoneda ,;
                                                                            "Pagos", "Saldo", "Concepto", "", "", "", "", "" ;
                                                             FIELDSIZES   90, 250, 70, 75, 90, 85, 100, 100, 100, 160,20,20,50, 100, 0   ;
                                                             PICTURE      nil, nil, nil, nil, nil, nil, '@E 9,999,999,999.99', '@E 9,999,999,999.99','@E 9,999,999,999.99', ;
                                                                                nil, nil,nil, nil, '@E 9,999,999,999.99', nil ;
                                                             JUSTIFY      AL_LEFT, AL_LEFT, AL_CENTER, AL_CENTER, AL_CENTER, AL_CENTER,;
                                                                          AL_RIGHT, AL_RIGHT, AL_RIGHT, AL_LEFT, AL_LEFT, AL_CENTER, AL_LEFT, AL_LEFT, AL_CENTER  ;
                                                             CELL LINES   FASTEDIT FOOTERS of oFolder:aDialogs[ 2 ] on Dblclick (Fnct_FiltrarCliente(alltrim(oBrwFac:aCols[cCliente]:Value)))//(Fnct_FiltrarCliente(alltrim(oBrwFac:aCols[cCliente]:Value)))


      oBrwFac:aArrayData:=aFacturas

      WITH object oBrwFac
          nCiclo:= 1
          do while nCiclo<=nObrwColsToShow
             oBrwFac:aCols[nCiclo] :nHeadStrAlign     := AL_CENTER
             oBrwFac:aCols[nCiclo] :oHeaderFont       := oFHeadBrw
             oBrwFac:aCols[nCiclo] :lAllowSizing      :=.T.
             nCiclo++
          enddo
                                                                                                           
          oBrwFac:aCols[nCodigoCli]   :Hide()
          oBrwFac:aCols[nFacCodigoCli]:Hide()
          oBrwFac:aCols[11]:Hide()
          oBrwFac:aCols[12]:Hide()
          oBrwFac:aCols[13]:Hide()
          oBrwFac:aCols[14]:Hide()
          oBrwFac:aCols[15]:Hide()
          oBrwFac:lAllowColSwapping   :=.F.
          oBrwFac:nMarqueeStyle  := MARQSTYLE_HIGHLROW
          oBrwFac:l2007          := .f.
          oBrwFac:lFooter        := .t.
          oBrwFac:lRecordSelector:= .f.
          oBrwFac:bOnSort:={|b,oCol| oBrwFac:Gotop() }
          *:aCols[cConcepto]:bLDClickData:= {|| Fnct_VerConcepto()}        //oBrwCiudades:SetFilter( (oBrwCiudades:aCols[2]:value) = 
(oBrwEstados:aCols[1]:Value) )
          *:aCols[nFacPagos]:bLDClickData:= {|| Fnct_VerPagos()}
	  oBrwFac:bClrHeader     := { || iif(lBW, ( { CLR_WHITE, CLR_GRAY, CLR_GRAY }), ({ CLR_WHITE, CLR_BLUE, CLR_HGRAY })) }
          :bClrFooter            := { || iif(lBW, ( { CLR_WHITE, CLR_GRAY, CLR_GRAY }), ({ CLR_WHITE, CLR_BLUE, CLR_HGRAY })) }
          AEval( oBrwFac:aCols, { |oCol| ;
          oCol:bClrSelFocus  := { || { CLR_BLACK, RGB( 255, 224, 126) } }, ;
          oCol:bPaintText := { |oCol, hDC, cData, aRect, aColors| ;
          PaintCol( oCol, hDC, cData, aRect, aColors ) } } ) 
          :nStretchCol      := STRETCHCOL_WIDEST
          :aCols[nFacMonto]:nFooterType := AGGR_SUM  // TOTAL
	  :aCols[nFacPagos]:nFooterType := AGGR_SUM //TOTAL
	  :aCols[nFacSaldo]:nFooterType := AGGR_SUM //TOTAL

	  :bRClicked :={ || Fnct_EditarFactura() }
	  :bchange := { || Fnct_PonTotales() }
	  :aCols[2]:cFooter := { || "  Total Documentos -> "+transform( len(aFacturas), "@E 9,999,999.99") }
	  :MakeTotals()
	  oBrwFac:MakeTotals()
       END
              
       WITH OBJECT oBrwFac:aCols[nDiasVcto]
	   oBrwFac:aCols[nDiasVcto]:bClrStd := ChangeColor()
       END
         
	WITH OBJECT oBrwFac:aCols[nFacPagos]
	      oCol:=oBrwFac:aCols[nFacPagos]
	      oBrwFac:aCols[nFacPagos]:nEditType := EDIT_BUTTON
              oBrwFac:aCols[nFacPagos]:bEditBlock := { |nRow,nCol,oCol,nKey| Fnct_VerPagos( nRow, nCol, oCol, nKey, oBrwFac:aCols[nFacMonto] :Value ,;
             oBrwFac:aCols[dEmision]  :Value ),oBrwFac:Refresh() }
 	   END
                        
           WITH OBJECT oBrwFac:aCols[cConcepto]
	    	 oCol:=oBrwFac:aCols[cConcepto]
	    	 oBrwFac:aCols[cConcepto]:nEditType := EDIT_BUTTON
                oBrwFac:aCols[cConcepto]:bEditBlock := { |nRow,nCol,oCol,nKey| Fnct_VerConcepto( nRow, nCol, oCol, nKey  ) }
 	   END

	  WITH OBJECT oBrwFac:aCols[dVcto]
		 oCol:=oBrwFac:aCols[dVcto]
		 oBrwFac:aCols[dVcto]:nEditType := EDIT_BUTTON
               oBrwFac:aCols[dVcto]:bEditBlock := { |nRow,nCol,oCol,nKey| Fnct_VerDiasCredito( nRow, nCol, oCol, nKey )  }
 	 END

	oBrwFac:gotop()
	oBrwFac:Refresh()
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Error con TFOLDEREX y xBrowse :: Reply by cnavarro]]> 2025-05-14T06:54:00-06:00 2025-05-14T06:54:00-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45673&p=279510#p279510

Code: Select all | Expand

// Despues de:
	aResumen:=oQry:FillArray()
	XBrowse( aResumen )

y dime si el xbrowse se muestra correctamente]]>

Code: Select all | Expand

// Despues de:
	aResumen:=oQry:FillArray()
	XBrowse( aResumen )

y dime si el xbrowse se muestra correctamente]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Error con TFOLDEREX y xBrowse :: Reply by JoseAlvarez]]> 2025-05-14T07:08:35-06:00 2025-05-14T07:08:35-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45673&p=279514#p279514
Ya esta resuelto, como siempre, el error estaba entre la silla y el teclado.

No habia Asigando valores a las variables de las columnas del xBrowse... error de novato, pero suele suceder.

un abrazo.]]>

Ya esta resuelto, como siempre, el error estaba entre la silla y el teclado.

No habia Asigando valores a las variables de las columnas del xBrowse... error de novato, pero suele suceder.

un abrazo.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Harbour and xHarbour para MingW GCC1501 :: Author karinha]]> 2025-05-10T09:33:56-06:00 2025-05-10T09:33:56-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279412#p279412
Buenas tardes Enrico, ¿tienes el Harbour y xHarbour para MingW GCC1501?

Link para MingW GCC1501:

https://winlibs.com/

Download para 32 bits:

https://github.com/brechtsanders/winlib ... .0.0-r3.7z

Gracias, tks.

Regards, saludos.]]>

Buenas tardes Enrico, ¿tienes el Harbour y xHarbour para MingW GCC1501?

Link para MingW GCC1501:

https://winlibs.com/

Download para 32 bits:

https://github.com/brechtsanders/winlib ... .0.0-r3.7z

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by Enrico Maria Giordano]]> 2025-05-11T08:41:29-06:00 2025-05-11T08:41:29-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279415#p279415 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by karinha]]> 2025-05-12T07:01:13-06:00 2025-05-12T07:01:13-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279422#p279422
¿Cómo sería una instalación de MinGW REDUCIDA?

Regards, saludos.]]>

¿Cómo sería una instalación de MinGW REDUCIDA?

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by Enrico Maria Giordano]]> 2025-05-12T07:05:01-06:00 2025-05-12T07:05:01-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279423#p279423 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by karinha]]> 2025-05-12T07:39:06-06:00 2025-05-12T07:39:06-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279424#p279424
Esto es lo que tengo:

Code: Select all | Expand

c:\GCC1501

12/05/2025  10:36    <DIR>          .
12/05/2025  10:36    <DIR>          ..
09/05/2025  17:49    <DIR>          bin
09/05/2025  17:27    <DIR>          i686-w64-mingw32  // Elimina Enrico?
09/05/2025  17:27    <DIR>          include
09/05/2025  17:27    <DIR>          lib
09/05/2025  17:25    <DIR>          libexec // Elimina?
09/05/2025  17:26    <DIR>          share   // Elimina?
Regards, saludos.]]>

Esto es lo que tengo:

Code: Select all | Expand

c:\GCC1501

12/05/2025  10:36    <DIR>          .
12/05/2025  10:36    <DIR>          ..
09/05/2025  17:49    <DIR>          bin
09/05/2025  17:27    <DIR>          i686-w64-mingw32  // Elimina Enrico?
09/05/2025  17:27    <DIR>          include
09/05/2025  17:27    <DIR>          lib
09/05/2025  17:25    <DIR>          libexec // Elimina?
09/05/2025  17:26    <DIR>          share   // Elimina?
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by Enrico Maria Giordano]]> 2025-05-12T07:41:48-06:00 2025-05-12T07:41:48-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279425#p279425 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by karinha]]> 2025-05-12T07:44:27-06:00 2025-05-12T07:44:27-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279426#p279426
Enrico Maria Giordano wrote: Mon May 12, 2025 1:41 pm Perfect! Can you send me it?
Wait a moment, pls!

Regards, saludos.]]>
Enrico Maria Giordano wrote: Mon May 12, 2025 1:41 pm Perfect! Can you send me it?
Wait a moment, pls!

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by karinha]]> 2025-05-12T07:48:47-06:00 2025-05-12T07:48:47-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279428#p279428
https://mega.nz/file/IVEWxDxa#zPTFWvx9- ... 2J8KmgCmtg

Gracias, tks.

Regards, saludos.]]>

https://mega.nz/file/IVEWxDxa#zPTFWvx9- ... 2J8KmgCmtg

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by Enrico Maria Giordano]]> 2025-05-12T08:07:24-06:00 2025-05-12T08:07:24-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279430#p279430 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by karinha]]> 2025-05-12T08:23:12-06:00 2025-05-12T08:23:12-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279431#p279431
Esto es para 32 bits. Todavía no tengo Windows de 64 bits.

Gracias, tks.

Regards, saludos.]]>

Esto es para 32 bits. Todavía no tengo Windows de 64 bits.

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by Enrico Maria Giordano]]> 2025-05-12T09:49:44-06:00 2025-05-12T09:49:44-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279441#p279441 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by karinha]]> 2025-05-12T10:46:30-06:00 2025-05-12T10:46:30-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279446#p279446 I have attached a DEMO using GO.BAT and .MAK, can you make it work?

Enrico, me encantaría. Esta es mi primera vez, nunca he usado GCC, quiero probarlo para ver si es mejor que BCC.
Adjunto tengo una DEMO usando GO.BAT Y .MAK, ¿puedes hacerla funcionar?

Download DEMO completo:

https://mega.nz/file/kdsGAbzS#5YeItOuiE ... 3uqr5MHH04

Gracias, tks.

Regards, saludos.]]>
I have attached a DEMO using GO.BAT and .MAK, can you make it work?

Enrico, me encantaría. Esta es mi primera vez, nunca he usado GCC, quiero probarlo para ver si es mejor que BCC.
Adjunto tengo una DEMO usando GO.BAT Y .MAK, ¿puedes hacerla funcionar?

Download DEMO completo:

https://mega.nz/file/kdsGAbzS#5YeItOuiE ... 3uqr5MHH04

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by Enrico Maria Giordano]]> 2025-05-12T11:04:45-06:00 2025-05-12T11:04:45-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279448#p279448 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by karinha]]> 2025-05-12T11:25:40-06:00 2025-05-12T11:25:40-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279450#p279450
Enrico Maria Giordano wrote: Mon May 12, 2025 5:04 pm No, sorry. I never used MinGW. Somebody can try it?
Could you post the link to download Harbour/xHarbour so we can try to compile it as 32-bit GCC?

¿Podrías publicar el enlace para descargar Harbour/xHarbour para que podamos intentar compilarlo como GCC de 32 bits?

Gracias, tks.

Regards, saludos.]]>
Enrico Maria Giordano wrote: Mon May 12, 2025 5:04 pm No, sorry. I never used MinGW. Somebody can try it?
Could you post the link to download Harbour/xHarbour so we can try to compile it as 32-bit GCC?

¿Podrías publicar el enlace para descargar Harbour/xHarbour para que podamos intentar compilarlo como GCC de 32 bits?

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by Enrico Maria Giordano]]> 2025-05-12T11:45:14-06:00 2025-05-12T11:45:14-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279451#p279451
https://wormhole.app/m9rEdO#YkbTkB4XeWX6B4cglbKDhA]]>

https://wormhole.app/m9rEdO#YkbTkB4XeWX6B4cglbKDhA]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by karinha]]> 2025-05-12T12:32:16-06:00 2025-05-12T12:32:16-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279454#p279454
Enrico Maria Giordano wrote: Mon May 12, 2025 5:45 pm Here it is:

https://wormhole.app/m9rEdO#YkbTkB4XeWX6B4cglbKDhA
Muchas gracias, tks.

Regards, saludos.]]>
Enrico Maria Giordano wrote: Mon May 12, 2025 5:45 pm Here it is:

https://wormhole.app/m9rEdO#YkbTkB4XeWX6B4cglbKDhA
Muchas gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by Enrico Maria Giordano]]> 2025-05-12T12:34:41-06:00 2025-05-12T12:34:41-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279455#p279455 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by karinha]]> 2025-05-13T08:36:55-06:00 2025-05-13T08:36:55-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279478#p279478
Enrico, apparently, is an excellent quality and super fast compiler. I really liked it.

https://imgur.com/0VDSiVB

Image

Gracias, tks.

Regards, saludos.]]>

Enrico, apparently, is an excellent quality and super fast compiler. I really liked it.

https://imgur.com/0VDSiVB

Image

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by karinha]]> 2025-05-13T08:41:05-06:00 2025-05-13T08:41:05-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279479#p279479
Masters: Enrico/Navarro: How do I create a COMP.BAT and a COMP.LNK or a GO.BAT and TUTOR04.MAK to use GCC151? And how do I incorporate the *.RES files into the project like in BCC?

Gracias, tks.

Regards, saludos.]]>

Masters: Enrico/Navarro: How do I create a COMP.BAT and a COMP.LNK or a GO.BAT and TUTOR04.MAK to use GCC151? And how do I incorporate the *.RES files into the project like in BCC?

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by Enrico Maria Giordano]]> 2025-05-13T08:55:12-06:00 2025-05-13T08:55:12-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279480#p279480
karinha wrote: Tue May 13, 2025 2:36 pm Enrico es aparentemente un compilador muy bueno y súper rápido. Me gustó mucho.

Enrico, apparently, is an excellent quality and super fast compiler. I really liked it.
Are you sure? It is the slower of the 3 compilers I'm using to build [x]Harbour. The faster is MSC. MGW generates the biggest EXEs (MSC the smallest).

Anyway, Is the new build working fine?]]>
karinha wrote: Tue May 13, 2025 2:36 pm Enrico es aparentemente un compilador muy bueno y súper rápido. Me gustó mucho.

Enrico, apparently, is an excellent quality and super fast compiler. I really liked it.
Are you sure? It is the slower of the 3 compilers I'm using to build [x]Harbour. The faster is MSC. MGW generates the biggest EXEs (MSC the smallest).

Anyway, Is the new build working fine?]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by karinha]]> 2025-05-13T09:24:52-06:00 2025-05-13T09:24:52-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279482#p279482
Yes Enrico, absolutely sure. BUILDG.bat works very fast. The executable is as fast or faster than the one generated by BCC, I really liked it. I just don't know yet how to generate the compilation .BATS like in BCC to incorporate the .RES.

Gracias, tks.

Regards, saludos.]]>

Yes Enrico, absolutely sure. BUILDG.bat works very fast. The executable is as fast or faster than the one generated by BCC, I really liked it. I just don't know yet how to generate the compilation .BATS like in BCC to incorporate the .RES.

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by Enrico Maria Giordano]]> 2025-05-13T09:52:03-06:00 2025-05-13T09:52:03-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279484#p279484

Code: Select all | Expand

cannot find -lfivehg
cannot find -lfivehgc
cannot find -l.\..\lib\libmysql32
]]>

Code: Select all | Expand

cannot find -lfivehg
cannot find -lfivehgc
cannot find -l.\..\lib\libmysql32
]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by Enrico Maria Giordano]]> 2025-05-13T10:20:16-06:00 2025-05-13T10:20:16-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279486#p279486 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by karinha]]> 2025-05-13T11:42:48-06:00 2025-05-13T11:42:48-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279488#p279488

Code: Select all | Expand

@ECHO OFF
CLS
ECHO ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
ECHO ³ FiveWin for Harbour...    and GCC - May. 2019   Harbour development power  ³Ü
ECHO ³ (c) FiveTech 1993-2019 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

ECHO Compiling...

if "%fwh%" == "" set fwh=.\..

set hdir=c:\HBGCC151
set hdirc=%hdir%\bin\win\mingw\harbour.exe
set hlibs=%hdir%\lib\win\mingw
set mingw=c:\gcc1501
set path=%mingw%\bin

%hdirc% %1 /n /i%fwh%\include;%hdir%\include /w /p %2 %3 > comp.log 2>> comp2.log

IF ERRORLEVEL 1 GOTO COMPILEERROR

@type comp.log
@type comp2.log

%mingw%\bin\gcc -c %1.c -o%1.o -I%hdir%\include -I%mingw%\include -Wall > comp.log 2>> comp2.log

IF ERRORLEVEL 1 GOTO COMPILEERROR

if exist %1.rc %mingw%\bin\windres -D__FLAT__ -DDIALOG=DIALOGEX -i%1.rc -o_%1.o

IF ERRORLEVEL 1 GOTO RESOURCESERROR

if not exist %1.rc %mingw%\bin\gcc -o%1.exe %1.o -Wall -s -mwindows -L%mingw%\lib -L%hlibs% -L%fwh%\lib -Wl,--enable-stdcall-fixup -Wl,--start-group -lfivehg -lfivehgc -lgtgui -luser32 -lshell32 -lwinspool -lkernel32 -lcomctl32 -lcomdlg32 -lgdi32 -lgdiplus -lole32 -loleaut32 -lpsapi -loledlg -lmfcuia32 -lmsimg32 -lwin32k -lstdc++ -lversion -luuid -lwinmm -lvfw32 -lwsock32 -lshell32 -lmpr -lhbcommon -lhbcpage -lhbcplr -lhbct -lhbdebug -lhbhsx -lhblang -lhbmacro -lhbmainstd -lhbmzip -lodbc32 -lhbpcre -lhbpp -lhbrdd -lhbrtl -lhbsix -lhbsqlit3 -lhbtip -lhbusrrdd -lhbvm -lhbwin -lhbzlib -lrddcdx -lrddfpt -lrddntx -lxhb -lhbziparc -lminizip -lhbmzip -lhbziparc -lpng -Wl,--end-group > b32.gc

if exist %1.rc %mingw%\bin\gcc -o%1.exe %1.o _%1.o -Wall -s -mwindows -L%mingw%\lib -L%hlibs% -L%fwh%\lib -Wl,--enable-stdcall-fixup -Wl,--start-group -lfivehg -lfivehgc -lgtgui -luser32 -lshell32 -lwinspool -lkernel32 -lcomctl32 -lcomdlg32 -lgdi32 -lgdiplus -lole32 -loleaut32 -lpsapi -lmsimg32 -lwin32k -loledlg -lstdc++ -lmfcuia32 -lversion -luuid -lwinmm -lvfw32 -lwsock32 -lshell32 -lmpr -lhbcommon -lhbcpage -lhbcplr -lhbct -lhbdebug -lhbhsx -lhblang -lhbmacro -lhbmainstd -lhbmzip -lodbc32 -lhbpcre -lhbpp -lhbrdd -lhbrtl -lhbsix -lhbsqlit3 -lhbtip -lhbusrrdd -lhbvm -lhbwin -lhbzlib -lrddcdx -lrddfpt -lrddntx -lxhb -lhbziparc -lminizip -lhbmzip -lhbziparc -lpng -Wl,--end-group > b32.gc

IF ERRORLEVEL 1 GOTO LINKERROR
ECHO * Application successfully built

%1

rem delete temporary files

@del %1.c

@if exist %1.rc del _%1.o

GOTO EXIT

ECHO

:RESOURCESERROR
ECHO * Resources errors *
GOTO EXIT

:COMPILEERROR
@type comp.log
ECHO * Compile errors *
GOTO EXIT

:LINKERROR
ECHO * Link errors *
GOTO EXIT

:SINTAX
ECHO    SYNTAX: Buildg [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
Regards, saludos.]]>

Code: Select all | Expand

@ECHO OFF
CLS
ECHO ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
ECHO ³ FiveWin for Harbour...    and GCC - May. 2019   Harbour development power  ³Ü
ECHO ³ (c) FiveTech 1993-2019 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

ECHO Compiling...

if "%fwh%" == "" set fwh=.\..

set hdir=c:\HBGCC151
set hdirc=%hdir%\bin\win\mingw\harbour.exe
set hlibs=%hdir%\lib\win\mingw
set mingw=c:\gcc1501
set path=%mingw%\bin

%hdirc% %1 /n /i%fwh%\include;%hdir%\include /w /p %2 %3 > comp.log 2>> comp2.log

IF ERRORLEVEL 1 GOTO COMPILEERROR

@type comp.log
@type comp2.log

%mingw%\bin\gcc -c %1.c -o%1.o -I%hdir%\include -I%mingw%\include -Wall > comp.log 2>> comp2.log

IF ERRORLEVEL 1 GOTO COMPILEERROR

if exist %1.rc %mingw%\bin\windres -D__FLAT__ -DDIALOG=DIALOGEX -i%1.rc -o_%1.o

IF ERRORLEVEL 1 GOTO RESOURCESERROR

if not exist %1.rc %mingw%\bin\gcc -o%1.exe %1.o -Wall -s -mwindows -L%mingw%\lib -L%hlibs% -L%fwh%\lib -Wl,--enable-stdcall-fixup -Wl,--start-group -lfivehg -lfivehgc -lgtgui -luser32 -lshell32 -lwinspool -lkernel32 -lcomctl32 -lcomdlg32 -lgdi32 -lgdiplus -lole32 -loleaut32 -lpsapi -loledlg -lmfcuia32 -lmsimg32 -lwin32k -lstdc++ -lversion -luuid -lwinmm -lvfw32 -lwsock32 -lshell32 -lmpr -lhbcommon -lhbcpage -lhbcplr -lhbct -lhbdebug -lhbhsx -lhblang -lhbmacro -lhbmainstd -lhbmzip -lodbc32 -lhbpcre -lhbpp -lhbrdd -lhbrtl -lhbsix -lhbsqlit3 -lhbtip -lhbusrrdd -lhbvm -lhbwin -lhbzlib -lrddcdx -lrddfpt -lrddntx -lxhb -lhbziparc -lminizip -lhbmzip -lhbziparc -lpng -Wl,--end-group > b32.gc

if exist %1.rc %mingw%\bin\gcc -o%1.exe %1.o _%1.o -Wall -s -mwindows -L%mingw%\lib -L%hlibs% -L%fwh%\lib -Wl,--enable-stdcall-fixup -Wl,--start-group -lfivehg -lfivehgc -lgtgui -luser32 -lshell32 -lwinspool -lkernel32 -lcomctl32 -lcomdlg32 -lgdi32 -lgdiplus -lole32 -loleaut32 -lpsapi -lmsimg32 -lwin32k -loledlg -lstdc++ -lmfcuia32 -lversion -luuid -lwinmm -lvfw32 -lwsock32 -lshell32 -lmpr -lhbcommon -lhbcpage -lhbcplr -lhbct -lhbdebug -lhbhsx -lhblang -lhbmacro -lhbmainstd -lhbmzip -lodbc32 -lhbpcre -lhbpp -lhbrdd -lhbrtl -lhbsix -lhbsqlit3 -lhbtip -lhbusrrdd -lhbvm -lhbwin -lhbzlib -lrddcdx -lrddfpt -lrddntx -lxhb -lhbziparc -lminizip -lhbmzip -lhbziparc -lpng -Wl,--end-group > b32.gc

IF ERRORLEVEL 1 GOTO LINKERROR
ECHO * Application successfully built

%1

rem delete temporary files

@del %1.c

@if exist %1.rc del _%1.o

GOTO EXIT

ECHO

:RESOURCESERROR
ECHO * Resources errors *
GOTO EXIT

:COMPILEERROR
@type comp.log
ECHO * Compile errors *
GOTO EXIT

:LINKERROR
ECHO * Link errors *
GOTO EXIT

:SINTAX
ECHO    SYNTAX: Buildg [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
Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by karinha]]> 2025-05-13T11:45:05-06:00 2025-05-13T11:45:05-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279489#p279489
Enrico Maria Giordano wrote: Tue May 13, 2025 4:20 pm Never mind, I manage to fix the batch. Ok, the new MGW seems to work fast as MSC with small FWH samples. But it is still very slow building Harbour and xHarbour, sorry. And the EXE generated with MGW is still bigger (6 MB vs. 4 MB).
Esto no es importante Enrico, yo uso PECOMPACT.exe para comprimir el ejecutable.

This is not important Enrico, I use PECOMPACT.exe to compress the executable.

Regards, saludos.]]>
Enrico Maria Giordano wrote: Tue May 13, 2025 4:20 pm Never mind, I manage to fix the batch. Ok, the new MGW seems to work fast as MSC with small FWH samples. But it is still very slow building Harbour and xHarbour, sorry. And the EXE generated with MGW is still bigger (6 MB vs. 4 MB).
Esto no es importante Enrico, yo uso PECOMPACT.exe para comprimir el ejecutable.

This is not important Enrico, I use PECOMPACT.exe to compress the executable.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by Enrico Maria Giordano]]> 2025-05-13T11:58:06-06:00 2025-05-13T11:58:06-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279490#p279490
karinha wrote: Tue May 13, 2025 5:45 pm
Enrico Maria Giordano wrote: Tue May 13, 2025 4:20 pm Never mind, I manage to fix the batch. Ok, the new MGW seems to work fast as MSC with small FWH samples. But it is still very slow building Harbour and xHarbour, sorry. And the EXE generated with MGW is still bigger (6 MB vs. 4 MB).
Esto no es importante Enrico, yo uso PECOMPACT.exe para comprimir el ejecutable.

This is not important Enrico, I use PECOMPACT.exe to compress the executable.

Regards, saludos.
I use a compressor too (upx) but the EXE has to be decompressed before the execution, so the smaller is the better.]]>
karinha wrote: Tue May 13, 2025 5:45 pm
Enrico Maria Giordano wrote: Tue May 13, 2025 4:20 pm Never mind, I manage to fix the batch. Ok, the new MGW seems to work fast as MSC with small FWH samples. But it is still very slow building Harbour and xHarbour, sorry. And the EXE generated with MGW is still bigger (6 MB vs. 4 MB).
Esto no es importante Enrico, yo uso PECOMPACT.exe para comprimir el ejecutable.

This is not important Enrico, I use PECOMPACT.exe to compress the executable.

Regards, saludos.
I use a compressor too (upx) but the EXE has to be decompressed before the execution, so the smaller is the better.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by karinha]]> 2025-05-13T12:05:39-06:00 2025-05-13T12:05:39-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279491#p279491
Enrico, it may be that the .EXE is larger, because of the GCC LIBS, as you gain experience, you will eliminate the LIBS that do not need to be used, do you understand?

Enrico, prefiero esta discusión hasta el final. Lo que necesito ahora, es poder compilar usando MINGW GCC1501, usando un COMP.BAT y COMP.LNK o un GO.BAT y un TUTOR04.MAK o un PROJ.BAT y un PROJ.HBP, ¿me entiendes? ¿Puedes crear uno de estos modelos?

Enrico, puede ser que el .EXE sea más grande, por las GCC LIBS, a medida que ganes experiencia, eliminarás las LIBS que no es necesario utilizar, ¿entiendes?

Gracias, tks.

Regards, saludos.]]>

Enrico, it may be that the .EXE is larger, because of the GCC LIBS, as you gain experience, you will eliminate the LIBS that do not need to be used, do you understand?

Enrico, prefiero esta discusión hasta el final. Lo que necesito ahora, es poder compilar usando MINGW GCC1501, usando un COMP.BAT y COMP.LNK o un GO.BAT y un TUTOR04.MAK o un PROJ.BAT y un PROJ.HBP, ¿me entiendes? ¿Puedes crear uno de estos modelos?

Enrico, puede ser que el .EXE sea más grande, por las GCC LIBS, a medida que ganes experiencia, eliminarás las LIBS que no es necesario utilizar, ¿entiendes?

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by Enrico Maria Giordano]]> 2025-05-14T02:20:49-06:00 2025-05-14T02:20:49-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279505#p279505
karinha wrote: Tue May 13, 2025 6:05 pmEnrico, I prefer this discussion to end. What I need now is to be able to compile using MINGW GCC1501, using a COMP.BAT and COMP.LNK or a GO.BAT and a TUTOR04.MAK or a PROJ.BAT and a PROJ.HBP, do you understand? Can you create one of these models?
No, sorry. What's wrong with buildg.bat?
karinha wrote: Tue May 13, 2025 6:05 pmEnrico, it may be that the .EXE is larger, because of the GCC LIBS, as you gain experience, you will eliminate the LIBS that do not need to be used, do you understand?
The linker already takes care of that. You cannot eliminate any of the used libraries. Anyway, having MinGW as an alternative is certainly a good thing.]]>
karinha wrote: Tue May 13, 2025 6:05 pmEnrico, I prefer this discussion to end. What I need now is to be able to compile using MINGW GCC1501, using a COMP.BAT and COMP.LNK or a GO.BAT and a TUTOR04.MAK or a PROJ.BAT and a PROJ.HBP, do you understand? Can you create one of these models?
No, sorry. What's wrong with buildg.bat?
karinha wrote: Tue May 13, 2025 6:05 pmEnrico, it may be that the .EXE is larger, because of the GCC LIBS, as you gain experience, you will eliminate the LIBS that do not need to be used, do you understand?
The linker already takes care of that. You cannot eliminate any of the used libraries. Anyway, having MinGW as an alternative is certainly a good thing.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by karinha]]> 2025-05-14T06:43:22-06:00 2025-05-14T06:43:22-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279509#p279509 Without a doubt, this version 15.1 of GCC is super stable.

Buenos días Enrico, buildg.bat es para probar un .PRG, quiero compilar un proyecto completo.
Sin duda esta versión 15.1 de GCC es súper estable.

Gracias, tks.

Regards, saludos.]]>
Without a doubt, this version 15.1 of GCC is super stable.

Buenos días Enrico, buildg.bat es para probar un .PRG, quiero compilar un proyecto completo.
Sin duda esta versión 15.1 de GCC es súper estable.

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by JoséQuintas]]> 2025-05-14T09:40:59-06:00 2025-05-14T09:40:59-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279522#p279522

Code: Select all | Expand

incpaths=include

libpaths=lib
{mingw}libs=fwchanged
{mingw}libs=fivehg
{mingw}libs=fivehgc

{mingw}libs=user32 winspool kernel32 comctl32 comdlg32 gdi32 gdiplus ole32
{mingw}libs=oleaut32 psapi oledlg mfcuia32 msimg32 win32k stdc++ version
{mingw}libs=uuid winmm vfw32 wsock32
{mingw}libs=uxtheme

libs=hbwin.hbc
libs=xhb.hbc
libs=hbct.hbc
libs=hbmzip.hbc
libs=hbziparc.hbc
fwchanged is my library to modify fivewin
I do not need to modify physical fivewin libraries, i need only to inform my library first.

Why to complicate ?

I do the same with any library, with no setup change.
hbmk2 fivewin.hbc
hbmk2 hwgui.hbc
hbmk2 hmge.hbc\
hbmk2 hmg3.hbc
hbmk2 oohg.hbc

And on my application, that I group more than one library:
hbmk2 jpa.hbp gtwvg.hbc fivewin.hbc hwgui.hbc]]>

Code: Select all | Expand

incpaths=include

libpaths=lib
{mingw}libs=fwchanged
{mingw}libs=fivehg
{mingw}libs=fivehgc

{mingw}libs=user32 winspool kernel32 comctl32 comdlg32 gdi32 gdiplus ole32
{mingw}libs=oleaut32 psapi oledlg mfcuia32 msimg32 win32k stdc++ version
{mingw}libs=uuid winmm vfw32 wsock32
{mingw}libs=uxtheme

libs=hbwin.hbc
libs=xhb.hbc
libs=hbct.hbc
libs=hbmzip.hbc
libs=hbziparc.hbc
fwchanged is my library to modify fivewin
I do not need to modify physical fivewin libraries, i need only to inform my library first.

Why to complicate ?

I do the same with any library, with no setup change.
hbmk2 fivewin.hbc
hbmk2 hwgui.hbc
hbmk2 hmge.hbc\
hbmk2 hmg3.hbc
hbmk2 oohg.hbc

And on my application, that I group more than one library:
hbmk2 jpa.hbp gtwvg.hbc fivewin.hbc hwgui.hbc]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Harbour and xHarbour para MingW GCC1501 :: Reply by karinha]]> 2025-05-14T09:59:48-06:00 2025-05-14T09:59:48-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45664&p=279523#p279523
Señor Quintas, lo que usted publicó, para mí, ¡es GRIEGO! jajajaja. Nunca he usado esto en mi vida. ¿Él entiende? Por favor escriba en español en este foro.

Gracias, tks.

Regards, saludos.]]>

Señor Quintas, lo que usted publicó, para mí, ¡es GRIEGO! jajajaja. Nunca he usado esto en mi vida. ¿Él entiende? Por favor escriba en español en este foro.

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: tsbutton para msvc 32 y 64 :: Author D.Fernandez]]> 2025-05-14T14:56:54-06:00 2025-05-14T14:56:54-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45678&p=279535#p279535 Alguien tendrá tsButton para MSVC y FWH2501

Gracias

Saludos
Ruben Dario Fernandez]]>
Alguien tendrá tsButton para MSVC y FWH2501

Gracias

Saludos
Ruben Dario Fernandez]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Recordatorio seguridad foros :: Author Antonio Linares]]> 2025-05-08T20:56:24-06:00 2025-05-08T20:56:24-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45660&p=279376#p279376
To check if any infected content is present in the cPanel account, I have initiated a courtesy malware scan. The scan has detected 1 infected file

/home1/fivetec1/public_html/500.php: SL-PHP-EVAL_REQUEST-axog.UNOFFICIAL FOUND

----------- SCAN SUMMARY -----------
Known viruses: 2299997
Engine version: devel-clamav-0.99-beta1-632-g8a582c7
Scanned directories: 2286
Scanned files: 38847
Infected files: 1
Data scanned: 379.62 MB
Data read: 6107.80 MB (ratio 0.06:1)
Time: 1564.957 sec (26 m 4 s)

It is advisable to clean this infected file.
Queremos recordaros que tenemos una copia de estos foros funcionando en:
https://forums.fivetechsoft.com/

Por favor, la próxima vez que tengamos algún problema con estos foros, recordad ir ahí.

Gracias :)]]>
To check if any infected content is present in the cPanel account, I have initiated a courtesy malware scan. The scan has detected 1 infected file

/home1/fivetec1/public_html/500.php: SL-PHP-EVAL_REQUEST-axog.UNOFFICIAL FOUND

----------- SCAN SUMMARY -----------
Known viruses: 2299997
Engine version: devel-clamav-0.99-beta1-632-g8a582c7
Scanned directories: 2286
Scanned files: 38847
Infected files: 1
Data scanned: 379.62 MB
Data read: 6107.80 MB (ratio 0.06:1)
Time: 1564.957 sec (26 m 4 s)

It is advisable to clean this infected file.
Queremos recordaros que tenemos una copia de estos foros funcionando en:
https://forums.fivetechsoft.com/

Por favor, la próxima vez que tengamos algún problema con estos foros, recordad ir ahí.

Gracias :)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Recordatorio seguridad foros :: Reply by acuellar]]> 2025-05-09T05:45:30-06:00 2025-05-09T05:45:30-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45660&p=279388#p279388 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Recordatorio seguridad foros :: Reply by sysctrl2]]> 2025-05-09T12:14:55-06:00 2025-05-09T12:14:55-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45660&p=279402#p279402 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Recordatorio seguridad foros :: Reply by Antonio Linares]]> 2025-05-11T02:40:04-06:00 2025-05-11T02:40:04-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45660&p=279413#p279413
https://dnschecker.org/#NS/fivetechsupport.com

En 24/48 horas deberían estar propagados]]>

https://dnschecker.org/#NS/fivetechsupport.com

En 24/48 horas deberían estar propagados]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Recordatorio seguridad foros :: Reply by Antonio Linares]]> 2025-05-15T01:07:25-06:00 2025-05-15T01:07:25-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45660&p=279538#p279538

También hemos activado el modo de seguridad para evitar ataques, esto es por lo que verás a veces una página de cloudflare.

Si los foros no cargan inmediatamente simplemente vuelve a hacer click y los tendrás!

Larga vida a nuestros foros :D]]>


También hemos activado el modo de seguridad para evitar ataques, esto es por lo que verás a veces una página de cloudflare.

Si los foros no cargan inmediatamente simplemente vuelve a hacer click y los tendrás!

Larga vida a nuestros foros :D]]>
<![CDATA[FiveWin para Harbour/xHarbour :: problema al leer asistencia de relog de asistencia :: Author CARLOS ATUNCAR]]> 2025-05-14T10:46:22-06:00 2025-05-14T10:46:22-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45677&p=279527#p279527 <![CDATA[FiveWin para Harbour/xHarbour :: Re: problema al leer asistencia de relog de asistencia :: Reply by cnavarro]]> 2025-05-15T05:09:06-06:00 2025-05-15T05:09:06-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45677&p=279544#p279544 <![CDATA[FiveWin para Harbour/xHarbour :: Hablando de un generador de reportes para FWH :: Author jose_murugosa]]> 2025-05-14T07:13:18-06:00 2025-05-14T07:13:18-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45675&p=279515#p279515
Existe un generador de reportes en C++ bastante interesante, con barcodes, qrcodes y otros, con muchas prestaciones, llamado QtRPT Proyect, es Open Source, y parece funcionar bien.

Sería interesante considerar conectarlo con FWH, este generador de reportes tiene una interesante herramienta de diseño de reportes QRPTDesigner, y quizá sea más facil incorporarlo a FWH que un generador desarrollado en otro lenguaje.

Solo es una sugerencia, dado que como dije es de Código abierto y tiene 7 años de desarrollo, hasta 2019 que aparentemente se enfrió.

Pero parece tener un buen grado de desarrollo y andar bien.

https://qtrpt.sourceforge.io/

Features
Supported output formats: Printer, PDF, HTML
Universal type of data source
SQL data source
Visual modeling of SQL query
Report elements: Label field, Images, Diagram
Parameters from application side
Several reports together
Page header/footer
Report page/header
Data band
Data grouping
Group header/footer
Aggregate functions: AVG, SUM, COUNT
Mathematic functions
Highlighting of the fields by login conditions
Show/hide fields by logic conditions
System variables
Images: static or from application side
Diagrams with manual data or with aggregate functions
Figure and line drawing
Barcode printing
Rich text fields
Full control of report building from user application
Embedded Script engine
Pure Qt4/Qt5 code
And much more…

Image
Image]]>

Existe un generador de reportes en C++ bastante interesante, con barcodes, qrcodes y otros, con muchas prestaciones, llamado QtRPT Proyect, es Open Source, y parece funcionar bien.

Sería interesante considerar conectarlo con FWH, este generador de reportes tiene una interesante herramienta de diseño de reportes QRPTDesigner, y quizá sea más facil incorporarlo a FWH que un generador desarrollado en otro lenguaje.

Solo es una sugerencia, dado que como dije es de Código abierto y tiene 7 años de desarrollo, hasta 2019 que aparentemente se enfrió.

Pero parece tener un buen grado de desarrollo y andar bien.

https://qtrpt.sourceforge.io/

Features
Supported output formats: Printer, PDF, HTML
Universal type of data source
SQL data source
Visual modeling of SQL query
Report elements: Label field, Images, Diagram
Parameters from application side
Several reports together
Page header/footer
Report page/header
Data band
Data grouping
Group header/footer
Aggregate functions: AVG, SUM, COUNT
Mathematic functions
Highlighting of the fields by login conditions
Show/hide fields by logic conditions
System variables
Images: static or from application side
Diagrams with manual data or with aggregate functions
Figure and line drawing
Barcode printing
Rich text fields
Full control of report building from user application
Embedded Script engine
Pure Qt4/Qt5 code
And much more…

Image
Image]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Hablando de un generador de reportes para FWH :: Reply by Antonio Linares]]> 2025-05-14T07:15:47-06:00 2025-05-14T07:15:47-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45675&p=279517#p279517
Por el nombre parece que usa QT lo cual supone una dependencia importante.

Podriamos hacer una encuesta para saber que generador de reportes se usa más entre los usuarios de FWH y asi aunar nuestras fuerzas para mejorarlo, bien sea EasyReport, ó el que sea :)]]>

Por el nombre parece que usa QT lo cual supone una dependencia importante.

Podriamos hacer una encuesta para saber que generador de reportes se usa más entre los usuarios de FWH y asi aunar nuestras fuerzas para mejorarlo, bien sea EasyReport, ó el que sea :)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Hablando de un generador de reportes para FWH :: Reply by jose_murugosa]]> 2025-05-14T08:51:59-06:00 2025-05-14T08:51:59-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45675&p=279520#p279520 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Hablando de un generador de reportes para FWH :: Reply by karinha]]> 2025-05-14T08:59:39-06:00 2025-05-14T08:59:39-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45675&p=279521#p279521
https://sourceforge.net/projects/qtrpt/

Gracias, tks.

Regards, saludos.]]>

https://sourceforge.net/projects/qtrpt/

Gracias, tks.

Regards, saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Hablando de un generador de reportes para FWH :: Reply by jose_murugosa]]> 2025-05-14T12:14:35-06:00 2025-05-14T12:14:35-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45675&p=279530#p279530 en 32 y 64 bits gratuito, que está en desarrollo por Cristóbal, creo que es una opción super interesante y mucha gente del foro ha usado fastreport alguna vez.

De hecho yo lo he comprado para [x]Harbour a Spirin y luego al otro proveedor posterior, el tema es que me gustaría verlo también en 64 bits.

Yo estaría dispuesto a contribuir economicamente apostando a ese proyecto. :D]]>
en 32 y 64 bits gratuito, que está en desarrollo por Cristóbal, creo que es una opción super interesante y mucha gente del foro ha usado fastreport alguna vez.

De hecho yo lo he comprado para [x]Harbour a Spirin y luego al otro proveedor posterior, el tema es que me gustaría verlo también en 64 bits.

Yo estaría dispuesto a contribuir economicamente apostando a ese proyecto. :D]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Hablando de un generador de reportes para FWH :: Reply by sysctrl2]]> 2025-05-14T12:37:13-06:00 2025-05-14T12:37:13-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45675&p=279532#p279532 para no quedarnos estancados
saludos.]]>
para no quedarnos estancados
saludos.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Hablando de un generador de reportes para FWH :: Reply by cnavarro]]> 2025-05-15T05:10:09-06:00 2025-05-15T05:10:09-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45675&p=279545#p279545 viewtopic.php?p=279543#p279543]]> viewtopic.php?p=279543#p279543]]> <![CDATA[FiveWin para Harbour/xHarbour :: Mr RAO, descansa en paz :: Author Willi Quintana]]> 2025-05-05T18:04:18-06:00 2025-05-05T18:04:18-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279346#p279346 Sr. Rao descansa en paz,]]> Sr. Rao descansa en paz,]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by Cgallegoa]]> 2025-05-05T18:28:25-06:00 2025-05-05T18:28:25-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279349#p279349 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by groiss]]> 2025-05-05T22:59:59-06:00 2025-05-05T22:59:59-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279352#p279352 D.E.P.]]> D.E.P.]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by Sebastián Almirón]]> 2025-05-06T03:09:22-06:00 2025-05-06T03:09:22-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279357#p279357 D.E.P.]]> D.E.P.]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by acuellar]]> 2025-05-06T04:07:03-06:00 2025-05-06T04:07:03-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279360#p279360

Lo extrañaremos mucho. Realmente un excelente coloborador.

Descanza en Paz Mr. Rao]]>


Lo extrañaremos mucho. Realmente un excelente coloborador.

Descanza en Paz Mr. Rao]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by wilsongamboa]]> 2025-05-06T04:46:38-06:00 2025-05-06T04:46:38-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279361#p279361 Wilson Gamboa]]> Wilson Gamboa]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by jose_murugosa]]> 2025-05-06T04:47:54-06:00 2025-05-06T04:47:54-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279362#p279362 Se lo extrañará muchísimo.]]> Se lo extrañará muchísimo.]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by carito]]> 2025-05-06T16:07:22-06:00 2025-05-06T16:07:22-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279365#p279365
Fue una persona muy generosa, siempre dispuesto a ayudar.

Que Dios ayude a su familia a superar este triste momento.
Que descanse en Paz.]]>

Fue una persona muy generosa, siempre dispuesto a ayudar.

Que Dios ayude a su familia a superar este triste momento.
Que descanse en Paz.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by xmanuel]]> 2025-05-07T16:46:21-06:00 2025-05-07T16:46:21-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279368#p279368 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by FiveWiDi]]> 2025-05-07T17:37:59-06:00 2025-05-07T17:37:59-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279369#p279369 Triste e impactado.
D.E.P.]]>
Triste e impactado.
D.E.P.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by ruben Dario]]> 2025-05-08T12:06:32-06:00 2025-05-08T12:06:32-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279371#p279371 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by Marcelo Via Giglio]]> 2025-05-08T19:20:25-06:00 2025-05-08T19:20:25-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279373#p279373 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by JoseAlvarez]]> 2025-05-08T19:27:12-06:00 2025-05-08T19:27:12-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279374#p279374
Descansa en paz Mr. Rao.]]>

Descansa en paz Mr. Rao.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by jgabri]]> 2025-05-09T02:09:48-06:00 2025-05-09T02:09:48-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279382#p279382 Muy mala noticia.
Excelente persona, buena gente, siempre ayudando.

Que Dios lo tenga en su gloria !!!

Un abrazo muy grande]]>
Muy mala noticia.
Excelente persona, buena gente, siempre ayudando.

Que Dios lo tenga en su gloria !!!

Un abrazo muy grande]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by Ariel]]> 2025-05-09T07:43:38-06:00 2025-05-09T07:43:38-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279396#p279396 Mis condolencias a su familia.
D.E.P.]]>
Mis condolencias a su familia.
D.E.P.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by ralph]]> 2025-05-09T08:41:33-06:00 2025-05-09T08:41:33-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279397#p279397 Descansa en paz Mr. Rao.]]> Descansa en paz Mr. Rao.]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by CARLOS ATUNCAR]]> 2025-05-09T08:45:40-06:00 2025-05-09T08:45:40-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279398#p279398 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by Andrés González]]> 2025-05-09T11:13:45-06:00 2025-05-09T11:13:45-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279401#p279401 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by carlos vargas]]> 2025-05-09T16:38:33-06:00 2025-05-09T16:38:33-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279405#p279405 siempre estaba presto a asistirnos. :-(]]> siempre estaba presto a asistirnos. :-(]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by surGom]]> 2025-05-09T17:29:32-06:00 2025-05-09T17:29:32-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279406#p279406 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by FranciscoA]]> 2025-05-13T09:24:11-06:00 2025-05-13T09:24:11-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279481#p279481 Una gran perdida. Mis mas sinceras condolencias.]]> Una gran perdida. Mis mas sinceras condolencias.]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by JESUS MARIN]]> 2025-05-13T11:42:26-06:00 2025-05-13T11:42:26-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279487#p279487 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Mr RAO, descansa en paz :: Reply by arturo tamayo]]> 2025-05-15T08:53:48-06:00 2025-05-15T08:53:48-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45657&p=279550#p279550
Mis mas sinceras condolencia a su familia

Una perdida irreparable para la comunidad]]>

Mis mas sinceras condolencia a su familia

Una perdida irreparable para la comunidad]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Ayuda con Stored Procedure :: Author JoseAlvarez]]> 2025-05-12T12:32:11-06:00 2025-05-12T12:32:11-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45667&p=279453#p279453
Estoy comenzando a trabajar con STORED PROCEDURE. Desde script funciona muy bien.
Pero al llevarlo a FW, no se como recuperar el resultado de la consulta. Aca dejo el codigo:

Code: Select all | Expand

cQuery := "CALL obtener_saldos_clientes();"

TRY
  _oSqlConex:execute( cQuery )
 CATCH
  Fnct_MsgErrorBD("NoMySql"  , .f. , "No hay conexión a La Base de Datos" , "Sin Acceso a La Red","Error en servicio de Datos",)
  _Close()
  return .f.
END TRY
Cuando lo ejecuto, no arroja error. Me imagino que esta bien, la pregunta es ¿como capturo las filas de la consulta?
uso tDolphin.

la base de datos con el stored procedure se encuentra en un servidor de pago en la nube con mysql.

Gracias anticipadas por la ayuda que me puedan prestar.]]>

Estoy comenzando a trabajar con STORED PROCEDURE. Desde script funciona muy bien.
Pero al llevarlo a FW, no se como recuperar el resultado de la consulta. Aca dejo el codigo:

Code: Select all | Expand

cQuery := "CALL obtener_saldos_clientes();"

TRY
  _oSqlConex:execute( cQuery )
 CATCH
  Fnct_MsgErrorBD("NoMySql"  , .f. , "No hay conexión a La Base de Datos" , "Sin Acceso a La Red","Error en servicio de Datos",)
  _Close()
  return .f.
END TRY
Cuando lo ejecuto, no arroja error. Me imagino que esta bien, la pregunta es ¿como capturo las filas de la consulta?
uso tDolphin.

la base de datos con el stored procedure se encuentra en un servidor de pago en la nube con mysql.

Gracias anticipadas por la ayuda que me puedan prestar.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ayuda con Stored Procedure :: Reply by carlos vargas]]> 2025-05-12T13:42:15-06:00 2025-05-12T13:42:15-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45667&p=279458#p279458 ]]> ]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Ayuda con Stored Procedure :: Reply by Willi Quintana]]> 2025-05-12T19:22:34-06:00 2025-05-12T19:22:34-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45667&p=279460#p279460
cQuery := "obtener_saldos_clientes" // nombre del store procedure
oProd := oSqlConex:CallSP( cQuery )

xbrowse(oProd)]]>

cQuery := "obtener_saldos_clientes" // nombre del store procedure
oProd := oSqlConex:CallSP( cQuery )

xbrowse(oProd)]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ayuda con Stored Procedure :: Reply by JoseAlvarez]]> 2025-05-13T14:42:13-06:00 2025-05-13T14:42:13-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45667&p=279494#p279494
Una vez más agradecido con su gentil ayuda y por estar siempre dispuestos a tendernos una mano.

Carlos, tu sugerencia funcionó de 10, excelente. y muchas gracias por tu ayuda personalizada. Ya han sido varias ocasiones, eso habla muy bien de ti como persona y colega.

Willi, tu idea no me funcionó, quizás no supe implementarla. Intente conseguir ese detalle que no me permitió ejecutar el stored procedure, a pesar que mas sencillo que eso, parece no puede ser. Igualmente muchas gracias ¡

a Ambos.. un abrazo.]]>

Una vez más agradecido con su gentil ayuda y por estar siempre dispuestos a tendernos una mano.

Carlos, tu sugerencia funcionó de 10, excelente. y muchas gracias por tu ayuda personalizada. Ya han sido varias ocasiones, eso habla muy bien de ti como persona y colega.

Willi, tu idea no me funcionó, quizás no supe implementarla. Intente conseguir ese detalle que no me permitió ejecutar el stored procedure, a pesar que mas sencillo que eso, parece no puede ser. Igualmente muchas gracias ¡

a Ambos.. un abrazo.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ayuda con Stored Procedure :: Reply by carlos vargas]]> 2025-05-14T02:23:11-06:00 2025-05-14T02:23:11-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45667&p=279506#p279506 Para que quede registro, luego de llamar a ún store procedure, es necesario una llamada al método nextresult.
Otro detalle es que al retornar un valor es necesario llamarlo con el método query.]]>
Para que quede registro, luego de llamar a ún store procedure, es necesario una llamada al método nextresult.
Otro detalle es que al retornar un valor es necesario llamarlo con el método query.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ayuda con Stored Procedure :: Reply by cnavarro]]> 2025-05-14T06:58:01-06:00 2025-05-14T06:58:01-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45667&p=279511#p279511 <![CDATA[FiveWin para Harbour/xHarbour :: Re: Ayuda con Stored Procedure :: Reply by JoseAlvarez]]> 2025-05-14T07:13:44-06:00 2025-05-14T07:13:44-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45667&p=279516#p279516
aqui este el codigo:

Code: Select all | Expand

	cQuery := "CALL obtener_saldos_clientes('"+_cPrefijo+"');"

	TRY
          oQry := _oSqlConex:Query( cQuery )
	  _oSqlConex:NextResult()
        CATCH
	  Fnct_MsgErrorBD("NoMySql"  , .f. , "No hay conexión a La Base de Datos" , "Sin Acceso a La Red","Error en servicio de Datos",)
	  _Close()
	  return .f.
        END TRY
           
       aResumen    :={}
       aResumenBack:= {}

       aResumen:=oQry:FillArray()
       aResumenBack:=aClone(aResumen)
en el cQuery se hace la llamada al procedimiento almacenado que debe existir previamente en la base de datos.
lo demas es una consulta normalita, la magia la hace la instruccion _oSqlConex:NextResult()

Esa instrucción es la que hace posible que oQry se convierta en lo que estamos acostumbrados a recibir de cualquier consulta.]]>

aqui este el codigo:

Code: Select all | Expand

	cQuery := "CALL obtener_saldos_clientes('"+_cPrefijo+"');"

	TRY
          oQry := _oSqlConex:Query( cQuery )
	  _oSqlConex:NextResult()
        CATCH
	  Fnct_MsgErrorBD("NoMySql"  , .f. , "No hay conexión a La Base de Datos" , "Sin Acceso a La Red","Error en servicio de Datos",)
	  _Close()
	  return .f.
        END TRY
           
       aResumen    :={}
       aResumenBack:= {}

       aResumen:=oQry:FillArray()
       aResumenBack:=aClone(aResumen)
en el cQuery se hace la llamada al procedimiento almacenado que debe existir previamente en la base de datos.
lo demas es una consulta normalita, la magia la hace la instruccion _oSqlConex:NextResult()

Esa instrucción es la que hace posible que oQry se convierta en lo que estamos acostumbrados a recibir de cualquier consulta.]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ayuda con Stored Procedure :: Reply by sysctrl2]]> 2025-05-14T13:16:04-06:00 2025-05-14T13:16:04-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45667&p=279533#p279533 como crear el procedimiento desde codigo ? :shock:]]> como crear el procedimiento desde codigo ? :shock:]]> <![CDATA[FiveWin para Harbour/xHarbour :: Re: Ayuda con Stored Procedure :: Reply by JoseAlvarez]]> 2025-05-14T20:58:38-06:00 2025-05-14T20:58:38-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45667&p=279536#p279536
sysctrl2 wrote: Wed May 14, 2025 7:16 pm ya que andamos en eso,
como crear el procedimiento desde codigo ? :shock:
Saludos César,

En realidad apenas me estoy iniciando en esto, explicarte tal cual no sabría decirte. Lo he venido haciendo apoyándome en la IA (copilot).
El procedimiento es así:

1.- creo la consulta con mis conocimientos de mysql.
2.- luego se la paso a la IA y le pido que la optimice. Luego de optimizada la pruebo bien con el editor de scritps de NAVICAT, yo trabajo con el, puede ser cualquiera, como heidi, dbeaver, dbvisualizer o sqlyog.
3. Luego que estoy seguro que funciona como quiero, le pido a la IA que haga el script para hacer el stored procedure y lo hace a la perfección. Solo es cuestión de hacer un "copy & paste" nuevamente en el editor de scripts y ejecutarlo. Así queda hecho el stored procedure.

Hasta ahora va de maravilla.

La IA se ha convertido (al menos para mi) en una extraordinaria herramienta, la uso a diario. El secreto esta en aprender a preguntar correctamente, una vez que lo dominas, el porcentaje de fallas es mínimo.

Inténtalo, de verdad que es un buen camino para optimizar nuestras apps]]>
sysctrl2 wrote: Wed May 14, 2025 7:16 pm ya que andamos en eso,
como crear el procedimiento desde codigo ? :shock:
Saludos César,

En realidad apenas me estoy iniciando en esto, explicarte tal cual no sabría decirte. Lo he venido haciendo apoyándome en la IA (copilot).
El procedimiento es así:

1.- creo la consulta con mis conocimientos de mysql.
2.- luego se la paso a la IA y le pido que la optimice. Luego de optimizada la pruebo bien con el editor de scritps de NAVICAT, yo trabajo con el, puede ser cualquiera, como heidi, dbeaver, dbvisualizer o sqlyog.
3. Luego que estoy seguro que funciona como quiero, le pido a la IA que haga el script para hacer el stored procedure y lo hace a la perfección. Solo es cuestión de hacer un "copy & paste" nuevamente en el editor de scripts y ejecutarlo. Así queda hecho el stored procedure.

Hasta ahora va de maravilla.

La IA se ha convertido (al menos para mi) en una extraordinaria herramienta, la uso a diario. El secreto esta en aprender a preguntar correctamente, una vez que lo dominas, el porcentaje de fallas es mínimo.

Inténtalo, de verdad que es un buen camino para optimizar nuestras apps]]>
<![CDATA[FiveWin para Harbour/xHarbour :: Re: Ayuda con Stored Procedure :: Reply by karinha]]> 2025-05-15T09:41:41-06:00 2025-05-15T09:41:41-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=6&t=45667&p=279552#p279552
https://www.fivetechsupport.com/forums/ ... p?p=266328

Regards, saludos.]]>

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

Regards, saludos.]]>
<![CDATA[WhatsNew / Novedades :: Re: Latest Harbour and xHarbour builds :: Reply by Enrico Maria Giordano]]> 2025-05-15T03:27:08-06:00 2025-05-15T03:27:08-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=16&t=43878&p=279539#p279539
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 Enrico Maria Giordano]]> 2025-05-15T08:02:12-06:00 2025-05-15T08:02:12-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=16&t=43878&p=279548#p279548
https://github.com/FiveTechSoft/harbour ... our_builds]]>

https://github.com/FiveTechSoft/harbour ... our_builds]]>
<![CDATA[Utilities / Utilidades :: Método 42 / Method 42 :: Author Antonio Linares]]> 2025-05-03T15:39:30-06:00 2025-05-03T15:39:30-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=17&t=45654&p=279309#p279309 https://www.42madrid.com/
https://www.42malaga.com
https://42.fr/

El método 42 es un enfoque innovador y disruptivo para aprender programación, desarrollado por la École 42, una escuela de programación fundada en París en 2013 por Xavier Niel. Este método se basa en un modelo educativo sin profesores, sin clases tradicionales y con un fuerte énfasis en el aprendizaje autónomo, colaborativo y práctico. A continuación, te explico en qué consiste:
Pilares del método 42
Aprendizaje autónomo (peer-to-peer learning):
No hay profesores ni clases magistrales. Los estudiantes aprenden resolviendo proyectos prácticos de programación de dificultad progresiva.

Se fomenta la autoaprendizaje: los estudiantes investigan, experimentan y buscan soluciones por sí mismos, utilizando recursos como documentación, foros y la comunidad de compañeros.

Proyectos prácticos:
El currículo se basa en proyectos que simulan problemas reales de programación. Estos proyectos cubren temas como algoritmos, estructuras de datos, programación en C, sistemas Unix, desarrollo web, inteligencia artificial, entre otros.

Los proyectos deben completarse en un orden específico, y cada uno desbloquea el siguiente al ser aprobado.

Evaluación por pares:
Los estudiantes evalúan el trabajo de sus compañeros y son evaluados por ellos. Este sistema fomenta la crítica constructiva y el aprendizaje colaborativo.

También hay correcciones automáticas mediante pruebas unitarias (llamadas "moulinette" en 42), que verifican si el código cumple con los requisitos.

Gamificación:
El proceso de aprendizaje está gamificado. Los estudiantes ganan puntos de experiencia al completar proyectos, lo que les permite avanzar en un sistema de niveles.

Esto crea un entorno motivador donde el progreso es visible y competitivo, pero enfocado en el crecimiento personal.

Sin requisitos académicos previos:
No se necesita un título o experiencia previa en programación para ingresar. La selección se basa en pruebas de lógica y aptitud (como la Piscine, un bootcamp intensivo de un mes).

Esto hace que el método sea accesible a personas de diversos orígenes.

Entorno colaborativo 24/7:
Los campus de 42 están abiertos 24 horas al día, 7 días a la semana, lo que permite a los estudiantes trabajar a su propio ritmo.

Se fomenta el trabajo en equipo, especialmente en proyectos grupales, donde los estudiantes aprenden a colaborar y gestionar conflictos.

Sin costo:
La formación en las escuelas 42 es gratuita, lo que elimina barreras económicas y democratiza el acceso a la educación en programación.

La Piscine: el rito de iniciación
Un elemento clave del método 42 es la Piscine (en francés, "piscina"), un proceso de selección intensivo de 4 semanas donde los candidatos se sumergen en un entorno de aprendizaje acelerado. Durante la Piscine:
Los participantes trabajan en ejercicios diarios de programación.

Se enfrentan a plazos estrictos y alta presión.

Se evalúa no solo su capacidad técnica, sino también su resiliencia, creatividad y habilidades sociales.

Solo los mejores son admitidos al programa completo.

Filosofía del método
El método 42 se basa en la idea de que cualquiera con motivación y disciplina puede convertirse en un programador competente. Al eliminar las estructuras educativas tradicionales, busca:
Fomentar la resolución de problemas en lugar de la memorización.

Desarrollar habilidades blandas como la colaboración, la comunicación y la adaptabilidad.

Preparar a los estudiantes para la industria tecnológica, donde la capacidad de aprender continuamente es crucial.

Ventajas del método 42
Práctico y relevante: Los proyectos están diseñados para reflejar desafíos reales del mundo laboral.

Flexibilidad: Los estudiantes avanzan a su propio ritmo.

Comunidad fuerte: La colaboración entre pares crea una red de apoyo y aprendizaje.

Reconocimiento en la industria: Los graduados de 42 son muy valorados por empresas tecnológicas debido a su enfoque práctico y habilidades sólidas.

Desafíos del método
Alta exigencia: La autonomía y la falta de guía formal pueden ser abrumadoras para algunos.

Intensidad: La Piscine y el programa principal requieren dedicación extrema.

No es para todos: Quienes prefieren un entorno estructurado con profesores pueden encontrar el método desorientador.

Presencia global
El modelo 42 se ha expandido a nivel mundial, con campus en ciudades como Silicon Valley, Madrid, Berlín, Tokio, São Paulo y más. En cada lugar, se adapta al contexto local, pero mantiene los principios fundamentales.
En resumen, el método 42 es un enfoque revolucionario que combina aprendizaje autónomo, colaboración, gamificación y proyectos prácticos para formar programadores altamente capacitados. Es ideal para personas motivadas, curiosas y dispuestas a enfrentar desafíos sin una estructura educativa tradicional. Si estás interesado en probarlo, revisa si hay un campus de 42 en tu país o explora su proceso de admisión en su sitio oficial.]]>
https://www.42madrid.com/
https://www.42malaga.com
https://42.fr/

El método 42 es un enfoque innovador y disruptivo para aprender programación, desarrollado por la École 42, una escuela de programación fundada en París en 2013 por Xavier Niel. Este método se basa en un modelo educativo sin profesores, sin clases tradicionales y con un fuerte énfasis en el aprendizaje autónomo, colaborativo y práctico. A continuación, te explico en qué consiste:
Pilares del método 42
Aprendizaje autónomo (peer-to-peer learning):
No hay profesores ni clases magistrales. Los estudiantes aprenden resolviendo proyectos prácticos de programación de dificultad progresiva.

Se fomenta la autoaprendizaje: los estudiantes investigan, experimentan y buscan soluciones por sí mismos, utilizando recursos como documentación, foros y la comunidad de compañeros.

Proyectos prácticos:
El currículo se basa en proyectos que simulan problemas reales de programación. Estos proyectos cubren temas como algoritmos, estructuras de datos, programación en C, sistemas Unix, desarrollo web, inteligencia artificial, entre otros.

Los proyectos deben completarse en un orden específico, y cada uno desbloquea el siguiente al ser aprobado.

Evaluación por pares:
Los estudiantes evalúan el trabajo de sus compañeros y son evaluados por ellos. Este sistema fomenta la crítica constructiva y el aprendizaje colaborativo.

También hay correcciones automáticas mediante pruebas unitarias (llamadas "moulinette" en 42), que verifican si el código cumple con los requisitos.

Gamificación:
El proceso de aprendizaje está gamificado. Los estudiantes ganan puntos de experiencia al completar proyectos, lo que les permite avanzar en un sistema de niveles.

Esto crea un entorno motivador donde el progreso es visible y competitivo, pero enfocado en el crecimiento personal.

Sin requisitos académicos previos:
No se necesita un título o experiencia previa en programación para ingresar. La selección se basa en pruebas de lógica y aptitud (como la Piscine, un bootcamp intensivo de un mes).

Esto hace que el método sea accesible a personas de diversos orígenes.

Entorno colaborativo 24/7:
Los campus de 42 están abiertos 24 horas al día, 7 días a la semana, lo que permite a los estudiantes trabajar a su propio ritmo.

Se fomenta el trabajo en equipo, especialmente en proyectos grupales, donde los estudiantes aprenden a colaborar y gestionar conflictos.

Sin costo:
La formación en las escuelas 42 es gratuita, lo que elimina barreras económicas y democratiza el acceso a la educación en programación.

La Piscine: el rito de iniciación
Un elemento clave del método 42 es la Piscine (en francés, "piscina"), un proceso de selección intensivo de 4 semanas donde los candidatos se sumergen en un entorno de aprendizaje acelerado. Durante la Piscine:
Los participantes trabajan en ejercicios diarios de programación.

Se enfrentan a plazos estrictos y alta presión.

Se evalúa no solo su capacidad técnica, sino también su resiliencia, creatividad y habilidades sociales.

Solo los mejores son admitidos al programa completo.

Filosofía del método
El método 42 se basa en la idea de que cualquiera con motivación y disciplina puede convertirse en un programador competente. Al eliminar las estructuras educativas tradicionales, busca:
Fomentar la resolución de problemas en lugar de la memorización.

Desarrollar habilidades blandas como la colaboración, la comunicación y la adaptabilidad.

Preparar a los estudiantes para la industria tecnológica, donde la capacidad de aprender continuamente es crucial.

Ventajas del método 42
Práctico y relevante: Los proyectos están diseñados para reflejar desafíos reales del mundo laboral.

Flexibilidad: Los estudiantes avanzan a su propio ritmo.

Comunidad fuerte: La colaboración entre pares crea una red de apoyo y aprendizaje.

Reconocimiento en la industria: Los graduados de 42 son muy valorados por empresas tecnológicas debido a su enfoque práctico y habilidades sólidas.

Desafíos del método
Alta exigencia: La autonomía y la falta de guía formal pueden ser abrumadoras para algunos.

Intensidad: La Piscine y el programa principal requieren dedicación extrema.

No es para todos: Quienes prefieren un entorno estructurado con profesores pueden encontrar el método desorientador.

Presencia global
El modelo 42 se ha expandido a nivel mundial, con campus en ciudades como Silicon Valley, Madrid, Berlín, Tokio, São Paulo y más. En cada lugar, se adapta al contexto local, pero mantiene los principios fundamentales.
En resumen, el método 42 es un enfoque revolucionario que combina aprendizaje autónomo, colaboración, gamificación y proyectos prácticos para formar programadores altamente capacitados. Es ideal para personas motivadas, curiosas y dispuestas a enfrentar desafíos sin una estructura educativa tradicional. Si estás interesado en probarlo, revisa si hay un campus de 42 en tu país o explora su proceso de admisión en su sitio oficial.]]>
<![CDATA[Utilities / Utilidades :: Re: Método 42 / Method 42 :: Reply by Antonio Linares]]> 2025-05-05T09:42:53-06:00 2025-05-05T09:42:53-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=17&t=45654&p=279338#p279338

Image

Image]]>


Image

Image]]>
<![CDATA[Utilities / Utilidades :: phpbb Vectorial search :: Author Antonio Linares]]> 2025-05-08T21:00:02-06:00 2025-05-08T21:00:02-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=17&t=45661&p=279377#p279377
https://www.phpbb.com/community/viewtopic.php?t=2662645

Still it is just a work in progress but we want to push the idea :)]]>

https://www.phpbb.com/community/viewtopic.php?t=2662645

Still it is just a work in progress but we want to push the idea :)]]>
<![CDATA[Off Topic / Otros temas :: Re: VeFa32 - Verifactu :: Reply by FiveWiDi]]> 2025-04-19T07:37:08-06:00 2025-04-19T07:37:08-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=19&t=45519&p=279045#p279045
paquitohm wrote: Thu Apr 10, 2025 4:35 pmEstas usando las anulaciones en tu programa.
Si, las contemplo. Genero el registro de anulación i se enviará con el resto de registros.
Pero lo genero desde el propio VeFa32. Entiendo que se trata de un error y por tanto se gestiona desde VeFa32.

Otro caso sería la 'anulación' de una factura.
Eso yo prefiero resolverlo con una rectificativa con signo contrario.
De esta manera quién debe manejar y obtener información de las facturas, deberá tratarlas TODAS por igual; se evita la duda de 'qué hacer con esta factura que se anuló', pues nada se suma con las otras y el resultado será '0,00'.

Me plantearé que desde el SIF se de la instrución de anular un registro.

Seguimos,]]>
paquitohm wrote: Thu Apr 10, 2025 4:35 pmEstas usando las anulaciones en tu programa.
Si, las contemplo. Genero el registro de anulación i se enviará con el resto de registros.
Pero lo genero desde el propio VeFa32. Entiendo que se trata de un error y por tanto se gestiona desde VeFa32.

Otro caso sería la 'anulación' de una factura.
Eso yo prefiero resolverlo con una rectificativa con signo contrario.
De esta manera quién debe manejar y obtener información de las facturas, deberá tratarlas TODAS por igual; se evita la duda de 'qué hacer con esta factura que se anuló', pues nada se suma con las otras y el resultado será '0,00'.

Me plantearé que desde el SIF se de la instrución de anular un registro.

Seguimos,]]>
<![CDATA[Off Topic / Otros temas :: Re: VeFa32 - Verifactu :: Reply by paquitohm]]> 2025-04-20T09:36:25-06:00 2025-04-20T09:36:25-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=19&t=45519&p=279066#p279066
Perdona por el retraso.

De alguna manera la agencia quiere que creemos un registro de la factura. Asi pues entiendo que pudiera ser conveniente que toda la informacion, incluso aunque pareciera redundante, estuviera unificada en un mismo registro en una misma tabla.

Por otra parte. Te importa si sigo conversando contigo de estos temas por privado-email ? Tengo algunas cosas que comentarte y queria que fuera por privado. Si no lo ves conveniente, sin problema. En mi caso por este medio no voy a seguir mucho más

Salu2]]>

Perdona por el retraso.

De alguna manera la agencia quiere que creemos un registro de la factura. Asi pues entiendo que pudiera ser conveniente que toda la informacion, incluso aunque pareciera redundante, estuviera unificada en un mismo registro en una misma tabla.

Por otra parte. Te importa si sigo conversando contigo de estos temas por privado-email ? Tengo algunas cosas que comentarte y queria que fuera por privado. Si no lo ves conveniente, sin problema. En mi caso por este medio no voy a seguir mucho más

Salu2]]>
<![CDATA[Off Topic / Otros temas :: Re: VeFa32 - Verifactu :: Reply by FiveWiDi]]> 2025-04-20T11:38:46-06:00 2025-04-20T11:38:46-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=19&t=45519&p=279071#p279071
paquitohm wrote: Sun Apr 20, 2025 3:36 pm Felices Pascuas Carlos.
Igualmente
paquitohm wrote: Sun Apr 20, 2025 3:36 pm De alguna manera la agencia quiere que creemos un registro de la factura.
Si y no.
Yo entiendo que lo que busca Hacienda es saber que se están haciendo las cosas de manera correcta y demostrable (huella digital con vinculación al registro anterior), y si fuera necesario poder reproducir (trazabilidad) que se ha hecho con las facturas.

Una vez hacienda ha recibido nuestros registros (modo Veri*factu), Hacienda ya no nos pedirá nada, la ley no nos obliga a guardar estos registros (a los del modo NO Veri*factu sí que les obliga), y tal como me han respondido de Hacienda son ellos una vez han recibido los registros quién los tiene en custodia.
De ahí mi atrevimiento a decir que puedo borrar las tablas de los registros (mientras conserve información del último enviado, claro).
paquitohm wrote: Sun Apr 20, 2025 3:36 pm Asi pues entiendo que pudiera ser conveniente que toda la informacion, incluso aunque pareciera redundante, estuviera unificada en un mismo registro en una misma tabla.
Si, por que no? Pero es una opción no una obligación.
Si quiero los registros enviados, la solución por la que opto es consultar a Hacienda por los registros enviados. Lo que yo le envíe me lo devuelve en la consulta, me lo pone fácil en esta aspecto.
Y ojo! Es imprescindible poder consultar/importar (al menos) el último registro enviado a Veri*factu. Forma parte del plan de contingencia ante una catástrofe.
paquitohm wrote: Sun Apr 20, 2025 3:36 pm Por otra parte. Te importa si sigo conversando contigo de estos temas por privado-email ? Tengo algunas cosas que comentarte y queria que fuera por privado. Si no lo ves conveniente, sin problema. En mi caso por este medio no voy a seguir mucho más
En absoluto, creo que es lo correcto.
siperono@gelbla.com

Seguimos.]]>
paquitohm wrote: Sun Apr 20, 2025 3:36 pm Felices Pascuas Carlos.
Igualmente
paquitohm wrote: Sun Apr 20, 2025 3:36 pm De alguna manera la agencia quiere que creemos un registro de la factura.
Si y no.
Yo entiendo que lo que busca Hacienda es saber que se están haciendo las cosas de manera correcta y demostrable (huella digital con vinculación al registro anterior), y si fuera necesario poder reproducir (trazabilidad) que se ha hecho con las facturas.

Una vez hacienda ha recibido nuestros registros (modo Veri*factu), Hacienda ya no nos pedirá nada, la ley no nos obliga a guardar estos registros (a los del modo NO Veri*factu sí que les obliga), y tal como me han respondido de Hacienda son ellos una vez han recibido los registros quién los tiene en custodia.
De ahí mi atrevimiento a decir que puedo borrar las tablas de los registros (mientras conserve información del último enviado, claro).
paquitohm wrote: Sun Apr 20, 2025 3:36 pm Asi pues entiendo que pudiera ser conveniente que toda la informacion, incluso aunque pareciera redundante, estuviera unificada en un mismo registro en una misma tabla.
Si, por que no? Pero es una opción no una obligación.
Si quiero los registros enviados, la solución por la que opto es consultar a Hacienda por los registros enviados. Lo que yo le envíe me lo devuelve en la consulta, me lo pone fácil en esta aspecto.
Y ojo! Es imprescindible poder consultar/importar (al menos) el último registro enviado a Veri*factu. Forma parte del plan de contingencia ante una catástrofe.
paquitohm wrote: Sun Apr 20, 2025 3:36 pm Por otra parte. Te importa si sigo conversando contigo de estos temas por privado-email ? Tengo algunas cosas que comentarte y queria que fuera por privado. Si no lo ves conveniente, sin problema. En mi caso por este medio no voy a seguir mucho más
En absoluto, creo que es lo correcto.
siperono@gelbla.com

Seguimos.]]>
<![CDATA[latest AI news :: vscode MCP support is already available! :: Author Antonio Linares]]> 2025-04-16T03:30:25-06:00 2025-04-16T03:30:25-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=42&t=45624&p=278998#p278998 <![CDATA[latest AI news :: Re: vscode MCP support is already available! :: Reply by Antonio Linares]]> 2025-04-16T13:35:21-06:00 2025-04-16T13:35:21-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=42&t=45624&p=279017#p279017
go64.bat

Code: Select all | Expand

@setlocal
call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
c:\harbour\bin\win\msvc64\hbmk2 hbmcp.hbp -comp=msvc64
@endlocal
hbmcp.hbp

Code: Select all | Expand

hbmcp.prg

-lgdiplus
-lole32
-lOleDlg
-lversion
-lucrt
-luxtheme

xhb.hbc
hbct.hbc
hbwin.hbc
hbmzip.hbc
hbziparc.hbc
hbfoxpro.hbc

-ldflag=/NODEFAULTLIB:msvcrt 
-ldflag+=/NODEFAULTLIB:libucrt
hbmcp.prg

Code: Select all | Expand

PROCEDURE Main()

    LOCAL cInput, cResponse

    // Bucle para leer continuamente desde stdin
    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
            EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        // Procesar el mensaje
        hb_memoWrit( "c:\temp\stdin.txt", cInput )
        cResponse := ProcessMessage( cInput )
        IF !Empty( cResponse )
            StdOut( cResponse )
        ENDIF
    END

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hJson := hb_jsonDecode( cInput )
    IF HB_ISHASH( hJson ) .AND. "method" $ hJson .AND. "id" $ hJson
        cMethod := hJson[ "method" ]
        cId := ExtractId( cInput )

        // Manejar el método "initialize"
        IF cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2025-03-26",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + ;
                '}' + hb_eol()

        // Manejar el método "tools/list"
        ELSEIF cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        // Manejar el método "tools/call"
        ELSEIF cMethod == "tools/call"
            hParams := hJson[ "params" ]
            IF HB_ISHASH( hParams ) .AND. "name" $ hParams .AND. "arguments" $ hParams
                cToolName := hParams[ "name" ]
                IF cToolName == "get_time" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + hb_DateTime() + '"' + ;
                        '}' + hb_eol()
                ELSEIF cToolName == "hb_version" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener la versión de Harbour
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + StrTran( Version(), '"', '\"' ) + '"' + ;
                        '}' + hb_eol()
                ELSEIF cToolName == "hb_compiler" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener el nombre del compilador
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + StrTran( hb_Compiler(), '"', '\"' ) + '"' + ;
                        '}' + hb_eol()
                ELSE
                    // Error: herramienta no encontrada o argumentos inválidos
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"error":{' + ;
                        '"code":-32602,' + ;
                        '"message":"Invalid params"' + ;
                        '}' + ;
                        '}' + hb_eol()
                ENDIF
            ELSE
                // Error: parámetros inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

        // Manejar métodos no soportados
        ELSE
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"error":{' + ;
                '"code":-32601,' + ;
                '"message":"Method not found"' + ;
                '}' + ;
                '}' + hb_eol()
        ENDIF
    ELSE
        // JSON inválido o sin método/ID
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":null,' + ;
            '"error":{' + ;
            '"code":-32700,' + ;
            '"message":"Parse error"' + ;
            '}' + ;
            '}' + hb_eol()
    ENDIF

RETURN cResponse

// Función para extraer el ID parseando el JSON con hb_jsonDecode()
STATIC FUNCTION ExtractId( cInput )
    LOCAL hJson, cId := '"1"'  // Valor por defecto si falla el parseo
    LOCAL xId

    // Decodificar el JSON en un hash
    hJson := hb_jsonDecode( cInput )
    IF HB_ISHASH( hJson ) .AND. "id" $ hJson
        xId := hJson[ "id" ]
        IF HB_ISSTRING( xId )
            // Si el id es string, incluir comillas
            cId := '"' + xId + '"'
        ELSEIF HB_ISNUMERIC( xId )
            // Si el id es numérico, convertir a string sin comillas
            cId := hb_ntos( xId )
        ELSEIF xId == NIL
            // Si el id es null, retornar "null"
            cId := "null"
        ENDIF
    ENDIF

RETURN cId

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>

go64.bat

Code: Select all | Expand

@setlocal
call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
c:\harbour\bin\win\msvc64\hbmk2 hbmcp.hbp -comp=msvc64
@endlocal
hbmcp.hbp

Code: Select all | Expand

hbmcp.prg

-lgdiplus
-lole32
-lOleDlg
-lversion
-lucrt
-luxtheme

xhb.hbc
hbct.hbc
hbwin.hbc
hbmzip.hbc
hbziparc.hbc
hbfoxpro.hbc

-ldflag=/NODEFAULTLIB:msvcrt 
-ldflag+=/NODEFAULTLIB:libucrt
hbmcp.prg

Code: Select all | Expand

PROCEDURE Main()

    LOCAL cInput, cResponse

    // Bucle para leer continuamente desde stdin
    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
            EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        // Procesar el mensaje
        hb_memoWrit( "c:\temp\stdin.txt", cInput )
        cResponse := ProcessMessage( cInput )
        IF !Empty( cResponse )
            StdOut( cResponse )
        ENDIF
    END

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hJson := hb_jsonDecode( cInput )
    IF HB_ISHASH( hJson ) .AND. "method" $ hJson .AND. "id" $ hJson
        cMethod := hJson[ "method" ]
        cId := ExtractId( cInput )

        // Manejar el método "initialize"
        IF cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2025-03-26",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + ;
                '}' + hb_eol()

        // Manejar el método "tools/list"
        ELSEIF cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        // Manejar el método "tools/call"
        ELSEIF cMethod == "tools/call"
            hParams := hJson[ "params" ]
            IF HB_ISHASH( hParams ) .AND. "name" $ hParams .AND. "arguments" $ hParams
                cToolName := hParams[ "name" ]
                IF cToolName == "get_time" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + hb_DateTime() + '"' + ;
                        '}' + hb_eol()
                ELSEIF cToolName == "hb_version" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener la versión de Harbour
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + StrTran( Version(), '"', '\"' ) + '"' + ;
                        '}' + hb_eol()
                ELSEIF cToolName == "hb_compiler" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener el nombre del compilador
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + StrTran( hb_Compiler(), '"', '\"' ) + '"' + ;
                        '}' + hb_eol()
                ELSE
                    // Error: herramienta no encontrada o argumentos inválidos
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"error":{' + ;
                        '"code":-32602,' + ;
                        '"message":"Invalid params"' + ;
                        '}' + ;
                        '}' + hb_eol()
                ENDIF
            ELSE
                // Error: parámetros inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

        // Manejar métodos no soportados
        ELSE
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"error":{' + ;
                '"code":-32601,' + ;
                '"message":"Method not found"' + ;
                '}' + ;
                '}' + hb_eol()
        ENDIF
    ELSE
        // JSON inválido o sin método/ID
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":null,' + ;
            '"error":{' + ;
            '"code":-32700,' + ;
            '"message":"Parse error"' + ;
            '}' + ;
            '}' + hb_eol()
    ENDIF

RETURN cResponse

// Función para extraer el ID parseando el JSON con hb_jsonDecode()
STATIC FUNCTION ExtractId( cInput )
    LOCAL hJson, cId := '"1"'  // Valor por defecto si falla el parseo
    LOCAL xId

    // Decodificar el JSON en un hash
    hJson := hb_jsonDecode( cInput )
    IF HB_ISHASH( hJson ) .AND. "id" $ hJson
        xId := hJson[ "id" ]
        IF HB_ISSTRING( xId )
            // Si el id es string, incluir comillas
            cId := '"' + xId + '"'
        ELSEIF HB_ISNUMERIC( xId )
            // Si el id es numérico, convertir a string sin comillas
            cId := hb_ntos( xId )
        ELSEIF xId == NIL
            // Si el id es null, retornar "null"
            cId := "null"
        ENDIF
    ENDIF

RETURN cId

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>
<![CDATA[latest AI news :: Re: vscode MCP support is already available! :: Reply by Antonio Linares]]> 2025-04-16T13:36:44-06:00 2025-04-16T13:36:44-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=42&t=45624&p=279018#p279018

Code: Select all | Expand

    "mcp": {
        "servers": {
            "Harbour": {
                "type": "stdio",
                "command": "c:\\temp\\hbmcp.exe",
                "args": []
            }
        }
    }
Image]]>

Code: Select all | Expand

    "mcp": {
        "servers": {
            "Harbour": {
                "type": "stdio",
                "command": "c:\\temp\\hbmcp.exe",
                "args": []
            }
        }
    }
Image]]>
<![CDATA[latest AI news :: Re: vscode MCP support is already available! :: Reply by Antonio Linares]]> 2025-04-17T00:40:46-06:00 2025-04-17T00:40:46-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=42&t=45624&p=279021#p279021
hbmcp.prg

Code: Select all | Expand

#define LogFile( cKey, cValue ) hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + cKey + cValue )

PROCEDURE Main()

    LOCAL cInput, cResponse

    // Bucle para leer continuamente desde stdin
    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
            EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        // Procesar el mensaje
        hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + "in: " + cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + "out: " + cResponse )
            StdOut( cResponse )
        ENDIF
    END

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId := "1", cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    LogFile( "method: ", cMethod )
    // if hb_HHasKey( hJson, "id" )
    //     cId = hJson[ "id" ]
    // else
    //     cId = "null"  // Si no hay id, asignar null
    // endif
    LogFile( "id: ", cId )

    do case
        case cMethod == "initialize"
            LogFile( "initialize: ", cMethod )
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2025-03-26",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"result":{' + ;
                    '"protocolVersion":"2025-03-26",' + ;
                    '"capabilities":{' + ;
                    '"tools":{},' + ;
                    '"resources":{},' + ;
                    '"prompts":{}' + ;
                    '}' + ;
                    '}' + ;
                    '}' + hb_eol()

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            hParams := hJson[ "params" ]
            IF HB_ISHASH( hParams ) .AND. "name" $ hParams .AND. "arguments" $ hParams
                cToolName := hParams[ "name" ]
                IF cToolName == "get_time" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + hb_DateTime() + '"' + ;
                        '}' + hb_eol()
                ELSEIF cToolName == "hb_version" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener la versión de Harbour
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + StrTran( Version(), '"', '\"' ) + '"' + ;
                        '}' + hb_eol()
                ELSEIF cToolName == "hb_compiler" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener el nombre del compilador
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + StrTran( hb_Compiler(), '"', '\"' ) + '"' + ;
                        '}' + hb_eol()
                ELSE
                    // Error: herramienta no encontrada o argumentos inválidos
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"error":{' + ;
                        '"code":-32602,' + ;
                        '"message":"Invalid params"' + ;
                        '}' + ;
                        '}' + hb_eol()
                ENDIF
            ELSE
                // Error: parámetros inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32601,' + ;
            '"message":"Method not found"' + ;
            '}' + ;
            '}' + hb_eol()
    endcase

    hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + "response: " + cResponse )

RETURN cResponse

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>

hbmcp.prg

Code: Select all | Expand

#define LogFile( cKey, cValue ) hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + cKey + cValue )

PROCEDURE Main()

    LOCAL cInput, cResponse

    // Bucle para leer continuamente desde stdin
    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
            EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        // Procesar el mensaje
        hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + "in: " + cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + "out: " + cResponse )
            StdOut( cResponse )
        ENDIF
    END

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId := "1", cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    LogFile( "method: ", cMethod )
    // if hb_HHasKey( hJson, "id" )
    //     cId = hJson[ "id" ]
    // else
    //     cId = "null"  // Si no hay id, asignar null
    // endif
    LogFile( "id: ", cId )

    do case
        case cMethod == "initialize"
            LogFile( "initialize: ", cMethod )
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2025-03-26",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"result":{' + ;
                    '"protocolVersion":"2025-03-26",' + ;
                    '"capabilities":{' + ;
                    '"tools":{},' + ;
                    '"resources":{},' + ;
                    '"prompts":{}' + ;
                    '}' + ;
                    '}' + ;
                    '}' + hb_eol()

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            hParams := hJson[ "params" ]
            IF HB_ISHASH( hParams ) .AND. "name" $ hParams .AND. "arguments" $ hParams
                cToolName := hParams[ "name" ]
                IF cToolName == "get_time" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + hb_DateTime() + '"' + ;
                        '}' + hb_eol()
                ELSEIF cToolName == "hb_version" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener la versión de Harbour
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + StrTran( Version(), '"', '\"' ) + '"' + ;
                        '}' + hb_eol()
                ELSEIF cToolName == "hb_compiler" .AND. HB_ISHASH( hParams[ "arguments" ] ) .AND. Empty( hParams[ "arguments" ] )
                    // Obtener el nombre del compilador
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"result":"' + StrTran( hb_Compiler(), '"', '\"' ) + '"' + ;
                        '}' + hb_eol()
                ELSE
                    // Error: herramienta no encontrada o argumentos inválidos
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"error":{' + ;
                        '"code":-32602,' + ;
                        '"message":"Invalid params"' + ;
                        '}' + ;
                        '}' + hb_eol()
                ENDIF
            ELSE
                // Error: parámetros inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32601,' + ;
            '"message":"Method not found"' + ;
            '}' + ;
            '}' + hb_eol()
    endcase

    hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + "response: " + cResponse )

RETURN cResponse

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>
<![CDATA[latest AI news :: Re: vscode MCP support is already available! :: Reply by Antonio Linares]]> 2025-04-17T15:51:29-06:00 2025-04-17T15:51:29-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=42&t=45624&p=279038#p279038

hbmcp.prg

Code: Select all | Expand

#define LogFile( cKey, cValue ) hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + cKey + cValue )

PROCEDURE Main()

    LOCAL cInput, cResponse

    // Bucle para leer continuamente desde stdin
    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        // Procesar el mensaje
        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    LogFile( "method: ", cMethod )
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            LogFile( "initialize: ", cMethod )
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2025-03-26",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"result":{' + ;
                    '"protocolVersion":"2025-03-26",' + ;
                    '"capabilities":{' + ;
                    '"tools":{},' + ;
                    '"resources":{},' + ;
                    '"prompts":{}' + ;
                    '}' + ;
                    '}' + ;
                    '}' + hb_eol()

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>


hbmcp.prg

Code: Select all | Expand

#define LogFile( cKey, cValue ) hb_memoWrit( "c:\temp\hbmcp.log", hb_memoRead( "c:\temp\hbmcp.log" ) + hb_eol() + cKey + cValue )

PROCEDURE Main()

    LOCAL cInput, cResponse

    // Bucle para leer continuamente desde stdin
    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        // Procesar el mensaje
        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    LogFile( "method: ", cMethod )
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            LogFile( "initialize: ", cMethod )
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2025-03-26",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"result":{' + ;
                    '"protocolVersion":"2025-03-26",' + ;
                    '"capabilities":{' + ;
                    '"tools":{},' + ;
                    '"resources":{},' + ;
                    '"prompts":{}' + ;
                    '}' + ;
                    '}' + ;
                    '}' + hb_eol()

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>
<![CDATA[latest AI news :: Re: vscode MCP support is already available! :: Reply by Antonio Linares]]> 2025-04-20T00:35:44-06:00 2025-04-20T00:35:44-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=42&t=45624&p=279055#p279055
hbmcp.prg

Code: Select all | Expand

#include "fileio.ch"

PROCEDURE Main()

    LOCAL cInput, cResponse

    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2025-03-26",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"result":{' + ;
                    '"protocolVersion":"2025-03-26",' + ;
                    '"capabilities":{' + ;
                    '"tools":{},' + ;
                    '"resources":{},' + ;
                    '"prompts":{}' + ;
                    '}' + ;
                    '}' + ;
                    '}' + hb_eol()

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

FUNCTION LogFile( cKey, cValue )
    LOCAL nHandle, lSuccess
    // Considerar hacer la ruta configurable
    if ! File( "c:\temp\hbmcp.log" )
       // Crear el archivo si no existe
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE + FO_CREAT )
    else
       // Abrir el archivo para añadir contenido
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE )
    endif
    IF nHandle > 0
       FSeek( nHandle, 0, FS_END ) // Mover el puntero al final del archivo
       lSuccess = fWrite( nHandle, cKey + cValue + hb_eol() )
       fclose( nHandle )
       RETURN lSuccess // Opcional: retornar éxito/fallo
    ENDIF
 RETURN .F.

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>

hbmcp.prg

Code: Select all | Expand

#include "fileio.ch"

PROCEDURE Main()

    LOCAL cInput, cResponse

    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2025-03-26",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"result":{' + ;
                    '"protocolVersion":"2025-03-26",' + ;
                    '"capabilities":{' + ;
                    '"tools":{},' + ;
                    '"resources":{},' + ;
                    '"prompts":{}' + ;
                    '}' + ;
                    '}' + ;
                    '}' + hb_eol()

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

FUNCTION LogFile( cKey, cValue )
    LOCAL nHandle, lSuccess
    // Considerar hacer la ruta configurable
    if ! File( "c:\temp\hbmcp.log" )
       // Crear el archivo si no existe
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE + FO_CREAT )
    else
       // Abrir el archivo para añadir contenido
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE )
    endif
    IF nHandle > 0
       FSeek( nHandle, 0, FS_END ) // Mover el puntero al final del archivo
       lSuccess = fWrite( nHandle, cKey + cValue + hb_eol() )
       fclose( nHandle )
       RETURN lSuccess // Opcional: retornar éxito/fallo
    ENDIF
 RETURN .F.

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>
<![CDATA[latest AI news :: Re: vscode MCP support is already available! :: Reply by Antonio Linares]]> 2025-04-20T01:25:32-06:00 2025-04-20T01:25:32-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=42&t=45624&p=279056#p279056

hbmcp.prg

Code: Select all | Expand

#include "fileio.ch"

PROCEDURE Main()

    LOCAL cInput, cResponse

    ErrorBlock( { | oError| LogFile( "error: ", oError:Description ) } )

    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2024-11-05",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '},' + ;
                '"serverInfo":{"name":"Harbour-xbase","version":"0.0.2"}' + ;  
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := hb_eol()

        case cMethod == "resources/list"    
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2024-11-05",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '},' + ;
                '"serverInfo":{"name":"Harbour-xbase","version":"0.0.2"}' + ;  
                '}' + ;
                '}' + hb_eol()

        case cMethod == "prompts/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + hb_eol()        

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

FUNCTION LogFile( cKey, cValue )
    LOCAL nHandle, lSuccess
    // Considerar hacer la ruta configurable
    if ! File( "c:\temp\hbmcp.log" )
       // Crear el archivo si no existe
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE + FO_CREAT )
    else
       // Abrir el archivo para añadir contenido
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE )
    endif
    IF nHandle > 0
       FSeek( nHandle, 0, FS_END ) // Mover el puntero al final del archivo
       lSuccess = fWrite( nHandle, cKey + cValue + hb_eol() )
       fclose( nHandle )
       RETURN lSuccess // Opcional: retornar éxito/fallo
    ENDIF
 RETURN .F.

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>


hbmcp.prg

Code: Select all | Expand

#include "fileio.ch"

PROCEDURE Main()

    LOCAL cInput, cResponse

    ErrorBlock( { | oError| LogFile( "error: ", oError:Description ) } )

    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2024-11-05",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '},' + ;
                '"serverInfo":{"name":"Harbour-xbase","version":"0.0.2"}' + ;  
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := hb_eol()

        case cMethod == "resources/list"    
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2024-11-05",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '},' + ;
                '"serverInfo":{"name":"Harbour-xbase","version":"0.0.2"}' + ;  
                '}' + ;
                '}' + hb_eol()

        case cMethod == "prompts/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"prompts":{}' + ;
                '}' + ;
                '}' + hb_eol()        

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment",' + ;
                '"schema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"additionalProperties":false,' + ;
                '"returns":{' + ;
                '"type":"string"' + ;
                '}' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

FUNCTION LogFile( cKey, cValue )
    LOCAL nHandle, lSuccess
    // Considerar hacer la ruta configurable
    if ! File( "c:\temp\hbmcp.log" )
       // Crear el archivo si no existe
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE + FO_CREAT )
    else
       // Abrir el archivo para añadir contenido
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE )
    endif
    IF nHandle > 0
       FSeek( nHandle, 0, FS_END ) // Mover el puntero al final del archivo
       lSuccess = fWrite( nHandle, cKey + cValue + hb_eol() )
       fclose( nHandle )
       RETURN lSuccess // Opcional: retornar éxito/fallo
    ENDIF
 RETURN .F.

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>
<![CDATA[latest AI news :: Re: vscode MCP support is already available! :: Reply by Antonio Linares]]> 2025-04-20T02:24:42-06:00 2025-04-20T02:24:42-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=42&t=45624&p=279059#p279059 :D :D

hbmcp.prg

Code: Select all | Expand

#include "fileio.ch"

PROCEDURE Main()

    LOCAL cInput, cResponse

    ErrorBlock( { | oError| LogFile( "error: ", oError:Description ) } )

    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2024-11-05",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '},' + ;
                '"serverInfo":{"name":"Harbour-xbase","version":"0.0.2"}' + ;  
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := hb_eol()

        case cMethod == "resources/list"    
            cResponse := ;
                '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{"code":-32601,"message":"Method not found"}' + ;
                '}' + hb_eol()           

        case cMethod == "prompts/list"
            cResponse := ;
                '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{"code":-32601,"message":"Method not found"}' + ;
                '}' + hb_eol()           

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format. Useful for logging or timestamping operations within the Harbour runtime environment.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment. Use this to verify compatibility or for debugging purposes.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment. Helpful for diagnosing build-related issues.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()
            
        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

FUNCTION LogFile( cKey, cValue )
    LOCAL nHandle, lSuccess
    // Considerar hacer la ruta configurable
    if ! File( "c:\temp\hbmcp.log" )
       // Crear el archivo si no existe
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE + FO_CREAT )
    else
       // Abrir el archivo para añadir contenido
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE )
    endif
    IF nHandle > 0
       FSeek( nHandle, 0, FS_END ) // Mover el puntero al final del archivo
       lSuccess = fWrite( nHandle, cKey + cValue + hb_eol() )
       fclose( nHandle )
       RETURN lSuccess // Opcional: retornar éxito/fallo
    ENDIF
 RETURN .F.

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>
:D :D

hbmcp.prg

Code: Select all | Expand

#include "fileio.ch"

PROCEDURE Main()

    LOCAL cInput, cResponse

    ErrorBlock( { | oError| LogFile( "error: ", oError:Description ) } )

    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2024-11-05",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '},' + ;
                '"serverInfo":{"name":"Harbour-xbase","version":"0.0.2"}' + ;  
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := hb_eol()

        case cMethod == "resources/list"    
            cResponse := ;
                '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{"code":-32601,"message":"Method not found"}' + ;
                '}' + hb_eol()           

        case cMethod == "prompts/list"
            cResponse := ;
                '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{"code":-32601,"message":"Method not found"}' + ;
                '}' + hb_eol()           

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in YYYY-MM-DD HH:MM:SS format. Useful for logging or timestamping operations within the Harbour runtime environment.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment. Use this to verify compatibility or for debugging purposes.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment. Helpful for diagnosing build-related issues.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()
            
        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "YYYY-MM-DD HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

FUNCTION LogFile( cKey, cValue )
    LOCAL nHandle, lSuccess
    // Considerar hacer la ruta configurable
    if ! File( "c:\temp\hbmcp.log" )
       // Crear el archivo si no existe
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE + FO_CREAT )
    else
       // Abrir el archivo para añadir contenido
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE )
    endif
    IF nHandle > 0
       FSeek( nHandle, 0, FS_END ) // Mover el puntero al final del archivo
       lSuccess = fWrite( nHandle, cKey + cValue + hb_eol() )
       fclose( nHandle )
       RETURN lSuccess // Opcional: retornar éxito/fallo
    ENDIF
 RETURN .F.

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>
<![CDATA[latest AI news :: Re: vscode MCP support is already available! :: Reply by Antonio Linares]]> 2025-04-20T07:54:57-06:00 2025-04-20T07:54:57-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=42&t=45624&p=279063#p279063

Image

Image]]>


Image

Image]]>
<![CDATA[latest AI news :: Re: vscode MCP support is already available! :: Reply by Antonio Linares]]> 2025-04-20T13:07:34-06:00 2025-04-20T13:07:34-06:00 https://fivetechsupport.com/forums/viewtopic.php?f=42&t=45624&p=279074#p279074
hbmcp.prg

Code: Select all | Expand

#include "fileio.ch"

PROCEDURE Main()

    LOCAL cInput, cResponse

    ErrorBlock( { | oError| LogFile( "error: ", oError:Description ) } )

    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName
    LOCAL cCode, xResult, cResult

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2024-11-05",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '},' + ;
                '"serverInfo":{"name":"Harbour-xbase","version":"0.0.2"}' + ;  
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := hb_eol()

        case cMethod == "resources/list"    
            cResponse := ;
                '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{"code":-32601,"message":"Method not found"}' + ;
                '}' + hb_eol()           

        case cMethod == "prompts/list"
            cResponse := ;
                '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{"code":-32601,"message":"Method not found"}' + ;
                '}' + hb_eol()           

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in HH:MM:SS format. Useful for logging or timestamping operations within the Harbour runtime environment.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment. Use this to verify compatibility or for debugging purposes.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment. Helpful for diagnosing build-related issues.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;  // Nueva herramienta hb_macro
                '"name":"hb_macro",' + ;
                '"description":"Executes a Harbour macro expression provided as a string and returns the result as a string. Useful for dynamic code execution within the Harbour runtime environment.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{"code":{"type":"string"}},' + ;
                '"required":["code"],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_macro"
                // Nueva herramienta: ejecutar macro y devolver resultado como cadena
                // Verificar que el parámetro "code" existe y es una cadena
                IF hb_HHasKey( hJson[ "params" ], "arguments" ) .AND. ;
                   hb_HHasKey( hJson[ "params" ][ "arguments" ], "code" ) .AND. ;
                   ValType( hJson[ "params" ][ "arguments" ][ "code" ] ) == "C"
                    cCode := hJson[ "params" ][ "arguments" ][ "code" ]
                    // Ejecutar la macro y convertir el resultado a cadena
                    BEGIN SEQUENCE
                        xResult := &( cCode )
                        cResult := hb_ValToExp( xResult )
                        cResponse := ;
                            '{' + ;
                            '"jsonrpc":"2.0",' + ;
                            '"id":' + cId + ',' + ;
                            '"result":{"content":[{"type":"text","text":"' + cResult + '"}]}' + ;
                            '}' + hb_eol()
                        cResponse := StrTran( cResponse, '""', '"' )
                    RECOVER
                        // En caso de error en la macro, devolver un error JSON-RPC
                        cResponse := ;
                            '{' + ;
                            '"jsonrpc":"2.0",' + ;
                            '"id":' + cId + ',' + ;
                            '"error":{"code":-32602,"message":"Invalid macro expression"}' + ;
                            '}' + hb_eol()
                    END SEQUENCE
                ELSE
                    // Error: parámetro "code" no proporcionado o inválido
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"error":{"code":-32602,"message":"Missing or invalid code parameter"}' + ;
                        '}' + hb_eol()
                ENDIF                    
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

FUNCTION LogFile( cKey, cValue )
    LOCAL nHandle, lSuccess
    // Considerar hacer la ruta configurable
    if ! File( "c:\temp\hbmcp.log" )
       // Crear el archivo si no existe
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE + FO_CREAT )
    else
       // Abrir el archivo para añadir contenido
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE )
    endif
    IF nHandle > 0
       FSeek( nHandle, 0, FS_END ) // Mover el puntero al final del archivo
       lSuccess = fWrite( nHandle, cKey + cValue + hb_eol() )
       fclose( nHandle )
       RETURN lSuccess // Opcional: retornar éxito/fallo
    ENDIF
 RETURN .F.

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>

hbmcp.prg

Code: Select all | Expand

#include "fileio.ch"

PROCEDURE Main()

    LOCAL cInput, cResponse

    ErrorBlock( { | oError| LogFile( "error: ", oError:Description ) } )

    WHILE .T.
        cInput := StdIn()
        IF Empty( cInput )
           EXIT  // Salir si no hay entrada (EOF)
        ENDIF

        LogFile( "in: ", cInput )
        cResponse := ProcessMessage( cInput )
        IF ! Empty( cResponse )
            LogFile( "out: ", cResponse )
            StdOut( cResponse )
        ENDIF
    END

    LogFile( "exit: ", "termina" )

RETURN

// Función para procesar mensajes JSON-RPC
FUNCTION ProcessMessage( cInput )
    LOCAL cResponse := ""
    LOCAL hJson, cId, cMethod, hParams, cToolName
    LOCAL cCode, xResult, cResult

    // Decodificar el JSON para obtener el método y el ID
    hb_jsonDecode( cInput, @hJson )
    cMethod = hJson[ "method" ]
    if hb_HHasKey( hJson, "id" )
        cId = AllTrim( Str( hJson[ "id" ] ) )
    endif

    do case
        case cMethod == "initialize"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"protocolVersion":"2024-11-05",' + ;
                '"capabilities":{' + ;
                '"tools":{},' + ;
                '"resources":{},' + ;
                '"prompts":{}' + ;
                '},' + ;
                '"serverInfo":{"name":"Harbour-xbase","version":"0.0.2"}' + ;  
                '}' + ;
                '}' + hb_eol()

        case cMethod == "notifications/initialized"
                cResponse := hb_eol()

        case cMethod == "resources/list"    
            cResponse := ;
                '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{"code":-32601,"message":"Method not found"}' + ;
                '}' + hb_eol()           

        case cMethod == "prompts/list"
            cResponse := ;
                '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{"code":-32601,"message":"Method not found"}' + ;
                '}' + hb_eol()           

        case cMethod == "tools/list"
            cResponse := ;
                '{' + ;
                '"jsonrpc":"2.0",' + ;
                '"id":' + cId + ',' + ;
                '"result":{' + ;
                '"tools": [' + ;
                '{' + ;
                '"name":"get_time",' + ;
                '"description":"Returns the current system time in HH:MM:SS format. Useful for logging or timestamping operations within the Harbour runtime environment.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_version",' + ;
                '"description":"Returns the version of the Harbour runtime environment. Use this to verify compatibility or for debugging purposes.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;
                '"name":"hb_compiler",' + ;
                '"description":"Returns the name of the compiler used to build the Harbour runtime environment. Helpful for diagnosing build-related issues.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{},' + ;
                '"required":[],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '},' + ;
                '{' + ;  // Nueva herramienta hb_macro
                '"name":"hb_macro",' + ;
                '"description":"Executes a Harbour macro expression provided as a string and returns the result as a string. Useful for dynamic code execution within the Harbour runtime environment.",' + ;
                '"inputSchema":{' + ;
                '"type":"object",' + ;
                '"properties":{"code":{"type":"string"}},' + ;
                '"required":["code"],' + ;
                '"additionalProperties":false,' + ;
                '"$schema":"http://json-schema.org/draft-07/schema#"' + ;
                '}' + ;
                '}' + ;
                ']' + ;
                '}' + ;
                '}' + hb_eol()

        case cMethod == "tools/call"
            cToolName = hJson[ "params" ][ "name" ]

            IF cToolName == "get_time" 
                // Obtener la hora actual en formato "HH:MM:SS"
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Time() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_version"
                // Obtener la versión de Harbour
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + Version() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_compiler"
                // Obtener el nombre del compilador
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"result":{"content":[{"type":"text","text":"' + hb_Compiler() + '"}]}' + ;
                    '}' + hb_eol()
            ELSEIF cToolName == "hb_macro"
                // Nueva herramienta: ejecutar macro y devolver resultado como cadena
                // Verificar que el parámetro "code" existe y es una cadena
                IF hb_HHasKey( hJson[ "params" ], "arguments" ) .AND. ;
                   hb_HHasKey( hJson[ "params" ][ "arguments" ], "code" ) .AND. ;
                   ValType( hJson[ "params" ][ "arguments" ][ "code" ] ) == "C"
                    cCode := hJson[ "params" ][ "arguments" ][ "code" ]
                    // Ejecutar la macro y convertir el resultado a cadena
                    BEGIN SEQUENCE
                        xResult := &( cCode )
                        cResult := hb_ValToExp( xResult )
                        cResponse := ;
                            '{' + ;
                            '"jsonrpc":"2.0",' + ;
                            '"id":' + cId + ',' + ;
                            '"result":{"content":[{"type":"text","text":"' + cResult + '"}]}' + ;
                            '}' + hb_eol()
                        cResponse := StrTran( cResponse, '""', '"' )
                    RECOVER
                        // En caso de error en la macro, devolver un error JSON-RPC
                        cResponse := ;
                            '{' + ;
                            '"jsonrpc":"2.0",' + ;
                            '"id":' + cId + ',' + ;
                            '"error":{"code":-32602,"message":"Invalid macro expression"}' + ;
                            '}' + hb_eol()
                    END SEQUENCE
                ELSE
                    // Error: parámetro "code" no proporcionado o inválido
                    cResponse := ;
                        '{' + ;
                        '"jsonrpc":"2.0",' + ;
                        '"id":' + cId + ',' + ;
                        '"error":{"code":-32602,"message":"Missing or invalid code parameter"}' + ;
                        '}' + hb_eol()
                ENDIF                    
            ELSE
                // Error: herramienta no encontrada o argumentos inválidos
                cResponse := ;
                    '{' + ;
                    '"jsonrpc":"2.0",' + ;
                    '"id":' + cId + ',' + ;
                    '"error":{' + ;
                    '"code":-32602,' + ;
                    '"message":"Invalid params"' + ;
                    '}' + ;
                    '}' + hb_eol()
            ENDIF

    // Manejar métodos no soportados
    otherwise
        cResponse := ;
            '{' + ;
            '"jsonrpc":"2.0",' + ;
            '"id":' + cId + ',' + ;
            '"error":{' + ;
            '"code":-32604,' + ;
            '"message":"Method not found"' + cMethod +;
            ' }' + ;
            '}' + hb_eol()
    endcase

RETURN cResponse

FUNCTION LogFile( cKey, cValue )
    LOCAL nHandle, lSuccess
    // Considerar hacer la ruta configurable
    if ! File( "c:\temp\hbmcp.log" )
       // Crear el archivo si no existe
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE + FO_CREAT )
    else
       // Abrir el archivo para añadir contenido
       nHandle := fopen( "c:\temp\hbmcp.log", FO_WRITE )
    endif
    IF nHandle > 0
       FSeek( nHandle, 0, FS_END ) // Mover el puntero al final del archivo
       lSuccess = fWrite( nHandle, cKey + cValue + hb_eol() )
       fclose( nHandle )
       RETURN lSuccess // Opcional: retornar éxito/fallo
    ENDIF
 RETURN .F.

#pragma BEGINDUMP

#include <hbapi.h>

HB_FUNC( STDIN )
{
   char buffer[ 1024 ];
      
   if( fgets( buffer, sizeof( buffer ), stdin ) != NULL )
   {
      // Eliminar salto de línea final, si existe
      size_t len = strlen( buffer );
      if( len > 0 && buffer[ len - 1 ] == '\n' )
         buffer[ len - 1 ] = '\0';
      hb_retc( buffer );      
   }
   else
   {
      hb_retc( "" );  // Retornar cadena vacía en caso de EOF
   }
}

HB_FUNC( STDOUT )
{
   if( HB_ISCHAR( 1 ) )
   {
      fputs( hb_parc( 1 ), stdout );
      fflush( stdout );       // Forzar la escritura inmediata
   }
}

#pragma ENDDUMP
]]>