FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour How to show a large text
Posts: 1387
Joined: Fri May 23, 2008 01:33 PM
Re: How to show a large text
Posted: Mon Sep 15, 2025 01:03 PM
Hi,

I have change the sample app like below.
#include "FiveWin.ch"

#define EM_LIMITTEXT            197

request HB_CODEPAGE_UTF8
request HB_CODEPAGE_UTF16LE
REQUEST HB_CODEPAGE_TRWIN

Function Main()
	Local oDlg, oFont, oFld_Not
	Local oGet1, oGet2
	local cVar1 := Create_Text(100000)+CRLF+"xxx"
	local cVar2 := ""
	
	HB_CDPSELECT( "TRWIN" )
	FW_SetUnicode( .f. )
	TFont():nDefaultCharSet  := 162
	
	oFont := TFont():New("Verdana", 0, -11) 
	
		DEFINE DIALOG oDlg SIZE 650,450 PIXEL ;
			FONT oFont TITLE "Sample - "+STR(LEN(cVar1)) ;
			STYLE nOr( WS_OVERLAPPEDWINDOW ) transparent

  @ 3, 3 FOLDERex oFld_Not OF oDlg PIXEL ; 
      PROMPTS "Page 1","Page 2";
      ROUND 10	
	
	@ 5,5 get oGet1 var cVar1 MEMO;
		size 280,140 of oFld_Not:aDialogs[1] pixel 

	@ 150,5 get oGet2 var cVar2 MEMO;					<--------- This lines.
		size 280,30 of oFld_Not:aDialogs[1] pixel 			<---------


    oDlg:bStart = { || oGet1:GoBottom() }

	ACTIVATE DIALOG oDlg CENTER ON INIT MyOninit(oget1)
	
return nil

FUNCTION MyOninit(oget1)
	oGet1:LimitText( -1 )
RETURN nil

FUNCTION Create_Text(nByte)
LOCAL cResult := "", cText := "bla bla bla blaaa bla blaa "
	DO WHILE LEN(cResult) < nByte
		cResult += cText
	ENDDO
RETURN cResult
It does not give any errors during compilation. However, when run, I get the following error message.
Application
===========
   Path and name: C:\fwh\samples\testmget1.exe (32 bits)
   Size: 4,719,104 bytes
   Compiler version: Harbour 3.2.0dev (r2503251254)
   FiveWin  version: FWH 25.04.2
   C compiler version: Microsoft Visual C 19.32.31329 (32-bit)
   Windows 11 64 Bits, version: 6.2, Build 9200 

   Time from start: 0 sec
   Error occurred at: 09/15/25, 15:57:48
   Error description: Error FiveWin/3  Cannot create Dialog Box: 
                      Title: , System Error: İşlem başarıyla tamamlandı.


Stack Calls
===========
   Called from: .\source\classes\dialog.prg => CREATEDLGERROR( 804 )
   Called from: .\source\classes\dialog.prg => TDIALOG:ACTIVATE( 342 )
   Called from: .\source\classes\tfoldex.prg => TFOLDEREX:DEFAULT( 843 )
   Called from: .\source\classes\tfoldex.prg => TFOLDEREX:INITIATE( 1039 )
   Called from:  => __OBJSENDMSG( 0 )
   Called from: .\source\function\harbour.prg => OSEND( 296 )
   Called from: .\source\function\harbour.prg => ASEND( 264 )
   Called from: .\source\classes\dialog.prg => TDIALOG:INITIATE( 902 )
   Called from: .\source\classes\dialog.prg => TDIALOG:HANDLEEVENT( 1238 )
   Called from:  => DIALOGBOXINDIRECT( 0 )
   Called from: .\source\classes\dialog.prg => TDIALOG:ACTIVATE( 325 )
   Called from: testmget1.prg => MAIN( 38 )

System
======
   CPU type: 12th Gen Intel(R) Core(TM) i7-1255U 2611 Mhz
   Hardware memory: 32401 megs

   Free System resources: 90 %
        GDI    resources: 90 %
        User   resources: 90 %

   Windows total applications running: 1
      1 ,                                                                                                     

Variables in use
================
   Procedure     Type   Value
   ==========================
   CREATEDLGERROR
     Param   1:    O    Class: ERROR
   TDIALOG:ACTIVATE
     Param   1:    O    Class: TDIALOG
     Param   2:    N    0
     Local   1:    U    
     Local   2:    C    "                      "
   TFOLDEREX:DEFAULT
     Param   1:    U    
     Param   2:    U    
     Param   3:    U    
     Param   4:    L    .F.
     Param   5:    B    {|| ... }
     Param   6:    L    .F.
     Param   7:    B    {|| ... }
     Param   8:    U    
     Param   9:    U    
     Param  10:    U    
     Param  11:    U    
     Param  12:    L    .F.
     Param  13:    O    Class: TDIALOG
     Param  14:    U    
     Param  15:    U    
     Local   1:    N    855106
   TFOLDEREX:INITIATE
     Local   1:    O    Class: TDIALOG
     Local   2:    N    27
     Local   3:    A    Len:    4
     Local   4:    U    
     Local   5:    N    0
     Local   6:    U    
     Local   7:    O    Class: TDIALOG
     Local   8:    N    1
   __OBJSENDMSG
     Param   1:    N    134240
     Local   1:    U    
     Local   2:    N    1375797248
   OSEND
     Param   1:    O    Class: TFOLDEREX
     Param   2:    C    "INITIATE"
     Param   3:    N    134240
   ASEND
     Param   1:    O    Class: TFOLDEREX
     Param   2:    C    "INITIATE"
     Param   3:    N    134240
   TDIALOG:INITIATE
     Param   1:    A    Len:    1
     Param   2:    C    "INITIATE()"
     Param   3:    N    134240
     Local   1:    S    @OSEND()
   TDIALOG:HANDLEEVENT
     Param   1:    N    855106
     Param   2:    N    134240
     Local   1:    L    .T.
     Local   2:    U    
     Local   3:    U    
     Local   4:    L    .F.
     Local   5:    U    
     Local   6:    U    
   DIALOGBOXINDIRECT
     Param   1:    N    272
     Param   2:    N    855106
     Param   3:    N    134240
   TDIALOG:ACTIVATE
     Param   1:    N    11337728
     Param   2:    C    "  Ï          Fâ     S a m p l e   -           1 0 0 0 1 3       R      ,È e T F O L D E R E X         "
     Param   3:    N    0
     Param   4:    O    Class: TDIALOG
   MAIN
     Param   1:    U    
     Param   2:    U    
     Param   3:    U    
     Param   4:    L    .T.
     Param   5:    U    
     Param   6:    L    .T.
     Param   7:    B    {|| ... }
     Param   8:    U    
     Param   9:    U    
     Param  10:    U    
     Param  11:    U    
     Param  12:    L    .F.
     Param  13:    O    Class: TDIALOG
     Param  14:    U    
     Param  15:    U    
     Local   1:    N    0
     Local   2:    S    @_NRESULT()
     Local   3:    O    Class: TDIALOG

Linked RDDs
===========
   DBF
   DBFFPT
   DBFBLOB
   DBFCDX
   DBFNTX

DataBases in use
================

Classes in use:
===============
     1 ERROR
     2 HBCLASS
     3 HBOBJECT
     4 TFONT
     5 TWINDOW
     6 TDIALOG
     7 TBRUSH
     8 TCONTROL
     9 TFOLDEREX
    10 TREG32
    11 TSTRUCT
    12 TMULTIGET

Memory Analysis
===============
      735 Static variables

   Dynamic memory consume:
      Actual  Value:     983040 bytes
      Highest Value:     983040 bytes
If I remove the following lines, the application runs without errors but is incomplete.
	@ 150,5 get oGet2 var cVar2 MEMO;
		size 280,30 of oFld_Not:aDialogs[1] pixel
if I changed this line like this. it compiles and run ok.
local cVar1 := Create_Text(32000)+CRLF+"xxx"
I need to add two get memos to the same TFolderEx page. How can I solve this problem?
Regards,



Hakan ONEMLI



Harbour & MSVC 2022 & FWH 23.06
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: How to show a large text
Posted: Mon Sep 15, 2025 02:30 PM
Change this
	@ 150,5 get oGet2 var cVar2 MEMO;
		size 280,30 of oFld_Not:aDialogs[1] pixel
to this
	@ 150,5 get oGet2 var cVar2 MEMO;
		size 280,30 of oFld_Not:aDialogs[2] pixel
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: How to show a large text
Posted: Mon Sep 15, 2025 04:37 PM
Good afternoon, use a normal window or a child window (that's what I use).

Buenas tardes, utiliza una ventana normal o una ventana secundaria (es la que yo uso).
// C:\FWH\SAMPLES\TESTFX9.PRG -kapiabafwh@gmail.com-

#include "FiveWin.ch"

FUNCTION Main()

   LOCAL oWnd, i, oBrush2, oFld
   LOCAL oGet1, oGet2, oGet3
   LOCAL cVar1 := Create_Text( 100000 ) + CRLF + "xxx"
   LOCAL cVar2 := SPACE(200)

   cVar2 := "bla bla bla blaaa bla blaa "
                      
   DEFINE BRUSH oBrush2 FILE "..\bitmaps\backgrnd\metal.bmp"                      

   DEFINE WINDOW oWnd TITLE "TFolderex - Testing -"
     
   @ 3, 3 FOLDEREX oFld PIXEL ADJUST      ;
      PROMPT  "Page 1", "Page 2", "&Exit" ;
      TOP OPTION 1 ALIGN 2, 2, 2 ROUND 5  ;
      COLOR CLR_WHITE

   WITH OBJECT oFld

      :lTransparent := .T.
      :aGradSel   := { { 1.0, 3926784, 16777215 }, { 0.1, 3926784, 16777215 } } // Green
      :aGradUnSel := { { 1.0, 16744448, 16777215 }, { 0.1, 16744448, 16777215 } } // Blue
      :aGradOver  := { { 1.0, 255, 16777215 }, { 0.1, 255, 16777215 } } // Red
      :aGradOverUnSel := { { 1.0, 12824535, 16777215 }, { 0.1, 12824535, 16777215 } } // Purple
      :aGradDis := { { 1.0, 15790320, 16777215 }, { 0.1, 15790320, 167772 } }
      //
      :SetOption( 1 )
      :aEnable = { .T., .T., .T., .F. }
      :Show()
      // :DisableTab( 3 )  // idem a :aEnable
      // :oCursor := oHand

   END

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   @ 5, 5 GET oGet1 VAR cVar1 MEMO ;
      SIZE 280, 140 of oFld:aDialogs[1] PIXEL

   @ 150, 5 GET oGet2 VAR cVar2 MEMO ; // <- -------- This lines.
      SIZE 280, 30 of oFld:aDialogs[1] PIXEL //  <- --------

   // IN 2
   @ 150, 5 GET oGet2 VAR cVar2 MEMO ; // <- -------- This lines.
      SIZE 280, 30 of oFld:aDialogs[2] PIXEL //  <- --------

   @ 150, 05 GET oGet3 VAR cVar2 OF oFld:aDialogs[3] PIXEL SIZE 280,30

   @  60, 150 BUTTONBMP PROMPT "" BITMAP "..\bitmaps\EXIT.bmp" OF oFld:aDialogs[3] ;
      PIXEL ACTION ( oWnd:End() )

   oFld:aDialogs[1]:bStart = { || oGet1:GoBottom() }

   oFld:aDialogs[1]:Gradient( { { 1, RGB( 236,  90, 128 ), RGB( 236, 150, 136 ) } } )  // Gradiente Dialogo 1 dentro del folder
   oFld:aDialogs[2]:Gradient( { { 1, RGB( 100, 180, 228 ), RGB( 100, 242, 238 ) } } )  // Gradiente Dialogo 2 dentro del folder
   oFld:aDialogs[3]:SetBrush( oBrush2 )


   ACTIVATE WINDOW oWnd ON INIT( oFld:Resize(), XFOCUS( oGet1 ) )

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF
   
RETURN NIL

FUNCTION MyOninit( oGet1 )

   oGet1:LimitText( - 1 )

RETURN NIL

FUNCTION Create_Text( nByte )

   LOCAL cResult := "", cText := "bla bla bla blaaa bla blaa "

   WHILE LEN( cResult ) < nByte

      SYSREFRESH()

      cResult += cText

   ENDDO

RETURN( cResult )
//-------------------------------------------------------------------------//
// As vezes simples SetFocus( oObj ) nao faz um objeto ganhar foco
// neste caso pode apelar para estas duas funcoes a seguir
// Forcar foco para um objeto especifico - Ednaldo Rolim...
//-------------------------------------------------------------------------//
FUNCTION xFocus( oObj )

   xSetFocus( oObj )
   xSetFocus( oObj )

RETURN( .T. )

FUNCTION xSetFocus( oObj )    

   LOCAL _oWnd := oObj:oWnd, _oTempo := ""

   DEFINE TIMER _oTempo INTERVAL 10 OF _oWnd ;
      ACTION ( oObj:SetFocus(), _oTempo:End() )

   ACTIVATE TIMER _oTempo

RETURN( .T. )

// FIN / END                  -kapiabafw@gmail.com-
Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: How to show a large text
Posted: Mon Sep 15, 2025 04:42 PM

By the way: I prefer to use RESOURCES BY BORLAND RESOURCES WORKSHOP.exe much better than code.

Por cierto: prefiero utilizar RESOURCES BY BORLAND RESOURCES WORKSHOP.exe mucho mejor que el código.

P.S.: You can use DIALOGO inside the child window without any problems.

P.D.: Puedes utilizar DIALOGO dentro de la ventana secundaria sin ningún problema.

Regards, saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1387
Joined: Fri May 23, 2008 01:33 PM
Re: How to show a large text
Posted: Mon Sep 15, 2025 05:27 PM
Enrico Maria Giordano wrote: Change this
	@ 150,5 get oGet2 var cVar2 MEMO;
		size 280,30 of oFld_Not:aDialogs[1] pixel
to this
	@ 150,5 get oGet2 var cVar2 MEMO;
		size 280,30 of oFld_Not:aDialogs[2] pixel
Why? I want the second memo get to be on the first page, one below the other.
Regards,



Hakan ONEMLI



Harbour & MSVC 2022 & FWH 23.06
Posts: 1387
Joined: Fri May 23, 2008 01:33 PM
Re: How to show a large text
Posted: Mon Sep 15, 2025 05:31 PM
karinha wrote: Good afternoon, use a normal window or a child window (that's what I use).

Buenas tardes, utiliza una ventana normal o una ventana secundaria (es la que yo uso).
// C:\FWH\SAMPLES\TESTFX9.PRG -kapiabafwh@gmail.com-

#include "FiveWin.ch"

FUNCTION Main()

   LOCAL oWnd, i, oBrush2, oFld
   LOCAL oGet1, oGet2, oGet3
   LOCAL cVar1 := Create_Text( 100000 ) + CRLF + "xxx"
   LOCAL cVar2 := SPACE(200)

   cVar2 := "bla bla bla blaaa bla blaa "
                      
   DEFINE BRUSH oBrush2 FILE "..\bitmaps\backgrnd\metal.bmp"                      

   DEFINE WINDOW oWnd TITLE "TFolderex - Testing -"
     
   @ 3, 3 FOLDEREX oFld PIXEL ADJUST      ;
      PROMPT  "Page 1", "Page 2", "&Exit" ;
      TOP OPTION 1 ALIGN 2, 2, 2 ROUND 5  ;
      COLOR CLR_WHITE

   WITH OBJECT oFld

      :lTransparent := .T.
      :aGradSel   := { { 1.0, 3926784, 16777215 }, { 0.1, 3926784, 16777215 } } // Green
      :aGradUnSel := { { 1.0, 16744448, 16777215 }, { 0.1, 16744448, 16777215 } } // Blue
      :aGradOver  := { { 1.0, 255, 16777215 }, { 0.1, 255, 16777215 } } // Red
      :aGradOverUnSel := { { 1.0, 12824535, 16777215 }, { 0.1, 12824535, 16777215 } } // Purple
      :aGradDis := { { 1.0, 15790320, 16777215 }, { 0.1, 15790320, 167772 } }
      //
      :SetOption( 1 )
      :aEnable = { .T., .T., .T., .F. }
      :Show()
      // :DisableTab( 3 )  // idem a :aEnable
      // :oCursor := oHand

   END

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   @ 5, 5 GET oGet1 VAR cVar1 MEMO ;
      SIZE 280, 140 of oFld:aDialogs[1] PIXEL

   @ 150, 5 GET oGet2 VAR cVar2 MEMO ; // <- -------- This lines.
      SIZE 280, 30 of oFld:aDialogs[1] PIXEL //  <- --------

   // IN 2
   @ 150, 5 GET oGet2 VAR cVar2 MEMO ; // <- -------- This lines.
      SIZE 280, 30 of oFld:aDialogs[2] PIXEL //  <- --------

   @ 150, 05 GET oGet3 VAR cVar2 OF oFld:aDialogs[3] PIXEL SIZE 280,30

   @  60, 150 BUTTONBMP PROMPT "" BITMAP "..\bitmaps\EXIT.bmp" OF oFld:aDialogs[3] ;
      PIXEL ACTION ( oWnd:End() )

   oFld:aDialogs[1]:bStart = { || oGet1:GoBottom() }

   oFld:aDialogs[1]:Gradient( { { 1, RGB( 236,  90, 128 ), RGB( 236, 150, 136 ) } } )  // Gradiente Dialogo 1 dentro del folder
   oFld:aDialogs[2]:Gradient( { { 1, RGB( 100, 180, 228 ), RGB( 100, 242, 238 ) } } )  // Gradiente Dialogo 2 dentro del folder
   oFld:aDialogs[3]:SetBrush( oBrush2 )


   ACTIVATE WINDOW oWnd ON INIT( oFld:Resize(), XFOCUS( oGet1 ) )

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF
   
RETURN NIL

FUNCTION MyOninit( oGet1 )

   oGet1:LimitText( - 1 )

RETURN NIL

FUNCTION Create_Text( nByte )

   LOCAL cResult := "", cText := "bla bla bla blaaa bla blaa "

   WHILE LEN( cResult ) < nByte

      SYSREFRESH()

      cResult += cText

   ENDDO

RETURN( cResult )
//-------------------------------------------------------------------------//
// As vezes simples SetFocus( oObj ) nao faz um objeto ganhar foco
// neste caso pode apelar para estas duas funcoes a seguir
// Forcar foco para um objeto especifico - Ednaldo Rolim...
//-------------------------------------------------------------------------//
FUNCTION xFocus( oObj )

   xSetFocus( oObj )
   xSetFocus( oObj )

RETURN( .T. )

FUNCTION xSetFocus( oObj )    

   LOCAL _oWnd := oObj:oWnd, _oTempo := ""

   DEFINE TIMER _oTempo INTERVAL 10 OF _oWnd ;
      ACTION ( oObj:SetFocus(), _oTempo:End() )

   ACTIVATE TIMER _oTempo

RETURN( .T. )

// FIN / END                  -kapiabafw@gmail.com-
Regards, saludos.
I'm sorry. I didn't explain what I wanted. I want two memo get fields on the first page of folderex. Also, your example is too complex.
Regards,



Hakan ONEMLI



Harbour & MSVC 2022 & FWH 23.06
Posts: 1387
Joined: Fri May 23, 2008 01:33 PM
Re: How to show a large text
Posted: Mon Sep 15, 2025 05:35 PM

Hi,

Firstly, Could you please confirm if my example is working correctly with buildh32.bat in the samples directory?

if not, how can we solve this problem?

Thanks.

Regards,



Hakan ONEMLI



Harbour & MSVC 2022 & FWH 23.06
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: How to show a large text
Posted: Mon Sep 15, 2025 05:36 PM
What's your question? What did you find complex? The code is published for you to test.

¿Cuál es tu pregunta? ¿Qué te resultó complejo? El código está disponible para que lo pruebes.

https://imgur.com/CTxNLKS



Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: How to show a large text
Posted: Mon Sep 15, 2025 05:40 PM
Try this, it works fine here:
#include "FiveWin.ch"

#define EM_LIMITTEXT            197

request HB_CODEPAGE_UTF8
request HB_CODEPAGE_UTF16LE
REQUEST HB_CODEPAGE_TRWIN

Function Main()
	Local oDlg, oFont, oFld_Not
	Local oGet1
	local cVar1 := ""
	local cVar2 := ""
	
	HB_CDPSELECT( "TRWIN" )
	FW_SetUnicode( .f. )
	TFont():nDefaultCharSet  := 162
	
	oFont := TFont():New("Verdana", 0, -11) 
	
		DEFINE DIALOG oDlg SIZE 650,450 PIXEL ;
			FONT oFont TITLE "Sample - "+STR(LEN(cVar1)) ;
			STYLE nOr( WS_OVERLAPPEDWINDOW ) transparent

  @ 3, 3 FOLDERex oFld_Not OF oDlg PIXEL ; 
      PROMPTS "Page 1","Page 2";
      ROUND 10	
	
	@ 5,5 get oGet1 var cVar1 MEMO;
		size 280,140 of oFld_Not:aDialogs[1] pixel 

	@ 150,5 get cVar2 MEMO;					//<--------- This lines.
		size 280,30 of oFld_Not:aDialogs[1] pixel 			//<---------

    @ 210, 50 BUTTON "CHECK" SIZE 40, 10 PIXEL OF oDlg;
              ACTION ( oGet1:VarPut( REPLICATE( ".", 100000 ) + CRLF + "XXX" ), oGet1:Refresh(), oGet1:GoBottom() )

    oDlg:bStart = { || oGet1:GoBottom() }

	ACTIVATE DIALOG oDlg CENTER ON INIT MyOninit(oget1)
	
return nil

FUNCTION MyOninit(oget1)
	oGet1:LimitText( -1 )
RETURN nil
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: How to show a large text
Posted: Mon Sep 15, 2025 05:41 PM
Example, ejemplo:

   // WORKSHOP.EXE
   IF( XRESOLUCAO = "R1024_768" )

      // PARA RESOLUCAO: 1024 X 768 - Joao - 02/10/2020 Inicio da Mudanca radical
      DEFINE WINDOW oWndChild MDICHILD FROM 00, 00 TO 38.0, 127.9               ;
         COLOR CLR_CYAN, CLR_WHITE TITLE cTitle MDI BORDER NONE NOMAXIMIZE // NOMINIMIZE // prevent resizing

      // ESTA EM: AMBIENT3.RES
      DEFINE DIALOG oDlg RESOURCE "FOLDER_PROPOSTA_1024_768" OF oWndChild GRADIENT aGrad

      REDEFINE FOLDEREX oFld ID 101 OF oDlg UPDATE                   ;
         PROMPTS "&Proposta", "Se&rviços", "&Cliente"                ;
         BITMAPS "Agenda1", "Agenda2"                                ;
         DIALOGS "FLD_PROPOSTA1_1024_768", "FLD_PROPOSTA2_1024_768", ;
                 "FLD_PROPOSTA2"                                     ;
         TAB HEIGHT 30 ROUND 5 FONT oFont COLOR CLR_WHITE TOP ALIGN

   ELSEIF( XRESOLUCAO = "R1280_768" )

      // PARA RESOLUCAO: 1280 X 768 - Joao
      DEFINE WINDOW oWndChild MDICHILD FROM 00, 00 TO 38.0, 160.2    ;
         COLOR CLR_CYAN, CLR_WHITE TITLE cTitle  MDI BORDER NONE NOMAXIMIZE // NOMINIMIZE // prevent resizing

      DEFINE DIALOG oDlg RESOURCE "FOLDER_PROPOSTA_1280_768" OF oWndChild GRADIENT aGrad

      // DIMENSOES(SIZE): FLD: 830 FOLDEREX: 840 FOLDER: 850
      REDEFINE FOLDEREX oFld ID 101 OF oDlg UPDATE                   ;
         PROMPTS "&Proposta", "Se&rviços", "&Cliente"                ;
         BITMAPS "Agenda1", "Agenda2"                                ;
         DIALOGS "FLD_PROPOSTA1_1280_768", "FLD_PROPOSTA2_1280_768", ;
                 "FLD_PROPOSTA2"                                     ;
         TAB HEIGHT 30 ROUND 5 FONT oFont COLOR CLR_WHITE TOP ALIGN

   ENDIF

   oWndChild:bGotFocus  = { || oDlg:SetFocus() }

   oDlg:lHelpIcon := .F.

   // says / gets...

   ACTIVATE DIALOG oDlg NOWAIT                                               ;
      ON INIT( IIF( lAppend, XFOCUS( aGet[1] ), XFOCUS( aGet[10] ) ) )       ;
      VALID( .NOT. GETKEYSTATE( 27 ) )

   ACTIVATE WINDOW oWndChild CENTERED
Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 1387
Joined: Fri May 23, 2008 01:33 PM
Re: How to show a large text
Posted: Mon Sep 15, 2025 06:06 PM
karinha wrote: Example, ejemplo:

   // WORKSHOP.EXE
   IF( XRESOLUCAO = "R1024_768" )

      // PARA RESOLUCAO: 1024 X 768 - Joao - 02/10/2020 Inicio da Mudanca radical
      DEFINE WINDOW oWndChild MDICHILD FROM 00, 00 TO 38.0, 127.9               ;
         COLOR CLR_CYAN, CLR_WHITE TITLE cTitle MDI BORDER NONE NOMAXIMIZE // NOMINIMIZE // prevent resizing

      // ESTA EM: AMBIENT3.RES
      DEFINE DIALOG oDlg RESOURCE "FOLDER_PROPOSTA_1024_768" OF oWndChild GRADIENT aGrad

      REDEFINE FOLDEREX oFld ID 101 OF oDlg UPDATE                   ;
         PROMPTS "&Proposta", "Se&rviços", "&Cliente"                ;
         BITMAPS "Agenda1", "Agenda2"                                ;
         DIALOGS "FLD_PROPOSTA1_1024_768", "FLD_PROPOSTA2_1024_768", ;
                 "FLD_PROPOSTA2"                                     ;
         TAB HEIGHT 30 ROUND 5 FONT oFont COLOR CLR_WHITE TOP ALIGN

   ELSEIF( XRESOLUCAO = "R1280_768" )

      // PARA RESOLUCAO: 1280 X 768 - Joao
      DEFINE WINDOW oWndChild MDICHILD FROM 00, 00 TO 38.0, 160.2    ;
         COLOR CLR_CYAN, CLR_WHITE TITLE cTitle  MDI BORDER NONE NOMAXIMIZE // NOMINIMIZE // prevent resizing

      DEFINE DIALOG oDlg RESOURCE "FOLDER_PROPOSTA_1280_768" OF oWndChild GRADIENT aGrad

      // DIMENSOES(SIZE): FLD: 830 FOLDEREX: 840 FOLDER: 850
      REDEFINE FOLDEREX oFld ID 101 OF oDlg UPDATE                   ;
         PROMPTS "&Proposta", "Se&rviços", "&Cliente"                ;
         BITMAPS "Agenda1", "Agenda2"                                ;
         DIALOGS "FLD_PROPOSTA1_1280_768", "FLD_PROPOSTA2_1280_768", ;
                 "FLD_PROPOSTA2"                                     ;
         TAB HEIGHT 30 ROUND 5 FONT oFont COLOR CLR_WHITE TOP ALIGN

   ENDIF

   oWndChild:bGotFocus  = { || oDlg:SetFocus() }

   oDlg:lHelpIcon := .F.

   // says / gets...

   ACTIVATE DIALOG oDlg NOWAIT                                               ;
      ON INIT( IIF( lAppend, XFOCUS( aGet[1] ), XFOCUS( aGet[10] ) ) )       ;
      VALID( .NOT. GETKEYSTATE( 27 ) )

   ACTIVATE WINDOW oWndChild CENTERED
Regards, saludos.
Thank you so much for your efforts. I don't use RESOURCES. I don't plan on using it. Your first example works just fine. You used WINDOW. In my example, I used DIALOG. When I adapted your example to DIALOG, I got the same error. Thank you so much.
Regards,



Hakan ONEMLI



Harbour & MSVC 2022 & FWH 23.06
Posts: 1387
Joined: Fri May 23, 2008 01:33 PM
Re: How to show a large text
Posted: Mon Sep 15, 2025 06:12 PM
Enrico Maria Giordano wrote: Try this, it works fine here:
#include "FiveWin.ch"

#define EM_LIMITTEXT            197

request HB_CODEPAGE_UTF8
request HB_CODEPAGE_UTF16LE
REQUEST HB_CODEPAGE_TRWIN

Function Main()
	Local oDlg, oFont, oFld_Not
	Local oGet1
	local cVar1 := ""
	local cVar2 := ""
	
	HB_CDPSELECT( "TRWIN" )
	FW_SetUnicode( .f. )
	TFont():nDefaultCharSet  := 162
	
	oFont := TFont():New("Verdana", 0, -11) 
	
		DEFINE DIALOG oDlg SIZE 650,450 PIXEL ;
			FONT oFont TITLE "Sample - "+STR(LEN(cVar1)) ;
			STYLE nOr( WS_OVERLAPPEDWINDOW ) transparent

  @ 3, 3 FOLDERex oFld_Not OF oDlg PIXEL ; 
      PROMPTS "Page 1","Page 2";
      ROUND 10	
	
	@ 5,5 get oGet1 var cVar1 MEMO;
		size 280,140 of oFld_Not:aDialogs[1] pixel 

	@ 150,5 get cVar2 MEMO;					//<--------- This lines.
		size 280,30 of oFld_Not:aDialogs[1] pixel 			//<---------

    @ 210, 50 BUTTON "CHECK" SIZE 40, 10 PIXEL OF oDlg;
              ACTION ( oGet1:VarPut( REPLICATE( ".", 100000 ) + CRLF + "XXX" ), oGet1:Refresh(), oGet1:GoBottom() )

    oDlg:bStart = { || oGet1:GoBottom() }

	ACTIVATE DIALOG oDlg CENTER ON INIT MyOninit(oget1)
	
return nil

FUNCTION MyOninit(oget1)
	oGet1:LimitText( -1 )
RETURN nil
Thank you very much, Enrico. Apparently, when I used get memo, I used Varput instead of the initial content, as you described in the ON INIT section, and the problem disappeared.
#include "FiveWin.ch"

#define EM_LIMITTEXT            197

request HB_CODEPAGE_UTF8
request HB_CODEPAGE_UTF16LE
REQUEST HB_CODEPAGE_TRWIN

Function Main()
	Local oDlg, oFont, oFld_Not
	Local oGet1, oGet2
	local cVar1 := "" //Create_Text(100000)+CRLF+"xxx"
	local cVar2 := ""
	
	HB_CDPSELECT( "TRWIN" )
	FW_SetUnicode( .f. )
	TFont():nDefaultCharSet  := 162
	
	oFont := TFont():New("Verdana", 0, -11) 
	
		DEFINE DIALOG oDlg SIZE 650,450 PIXEL ;
			FONT oFont TITLE "Sample - "+STR(LEN(cVar1)) ;
			STYLE nOr( WS_OVERLAPPEDWINDOW ) 

  @ 3, 3 FOLDERex oFld_Not OF oDlg PIXEL ADJUST; 
      PROMPTS "Page 1","Page 2";
      ROUND 10	
  oFld_Not:lTransparent := .T.
	
	@ 5,5 get oGet1 var cVar1 MEMO;
		size 280,140 of oFld_Not:aDialogs[1] pixel 

	@ 150,5 get oGet2 var cVar2 MEMO;
		size 280,30 of oFld_Not:aDialogs[1] pixel 


//    oDlg:bStart = { || oGet1:GoBottom() }

	ACTIVATE DIALOG oDlg CENTER ON INIT MyOninit(oget1)
	
return nil

FUNCTION MyOninit(oget1)
	oGet1:VarPut(Create_Text(100000)+CRLF+"xxx")
	oGet1:LimitText( -1 )
	oGet1:Refresh()
	oGet1:GoBottom() 
RETURN nil

FUNCTION Create_Text(nByte)
LOCAL cResult := "", cText := "bla bla bla blaaa bla blaa "
	DO WHILE LEN(cResult) < nByte
		cResult += cText
	ENDDO
RETURN cResult
Thank you.
Regards,



Hakan ONEMLI



Harbour & MSVC 2022 & FWH 23.06
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: How to show a large text
Posted: Mon Sep 15, 2025 09:32 PM
It really doesn't work with two GETS with MEMO in the same FOLDEREX. Master Antonio, error in FWH?

Realmente no funciona con dos GETS con MEMO en la misma FOLDEREX. Maestro Antonio, ¿error en FWH?
// C:\FWH\SAMPLES\HORIZON0.PRG

#include "FiveWin.ch"

STATIC oWnd, oWndChild

FUNCTION Main()

   LOCAL oIco, oBar, oBmp, cTitle

   cTitle := "Folderex - Sample"

   DEFINE ICON oIco FILE "..\icons\fax.ico"

   DEFINE WINDOW oWnd TITLE cTitle                                 ;
      MENU BuildMenu( oWnd ) MENUINFO 3 ICON oIco MDI

   DEFINE BUTTONBAR oBar _3D SIZE 26, 27 OF oWnd 2007

   DEFINE BUTTON OF oBar FILENAME "..\bitmaps\16x16\open.bmp" FLAT ;
      ACTION( HORIZON_FOLDEREX() )                                 ;
      TOOLTIP "Open a Folderex" GROUP

   DEFINE BUTTON OF oBar FILENAME "..\bitmaps\16x16\Exit.bmp" FLAT ;
      ACTION oWnd:End() TOOLTIP "Exit this app" GROUP

   DEFINE MESSAGE OF oWnd PROMPT "FOLDEREX SAMPLE" NOINSET CENTERED KEYBOARD DATE CLOCK 2007

   DEFINE BITMAP oBmp FILENAME "..\bitmaps\BACK.bmp"

   oWnd:bPainted = { | hDC | BmpTiled( hDC, oWnd, oBmp ) }

   ACTIVATE WINDOW oWnd CENTERED

RETURN NIL

FUNCTION BuildMenu()

   LOCAL oMenu

   MENU oMenu 2007
      MENUITEM "Information"
      MENU
         MENUITEM "&About..." ;
            ACTION MsgInfo( FWDESCRIPTION ) ;
            FILENAME "..\bitmaps\16x16\info.bmp"
         SEPARATOR
         MENUITEM "&End..."  ;
            ACTION oWnd:End() FILENAME "..\bitmaps\16x16\exit.bmp"

      ENDMENU

      MENUITEM "&Clients"
      MENU
         MENUITEM "&New..." ;
            ACTION ( MsgStop( "New Clients" ),;
                     oWnd:Say( 5, 5, "New Clients...", "GR+/G" ) ) ;
            FILENAME "..\bitmaps\16x16\faces.bmp"

         MENUITEM "&Modify..."  ACTION MsgInfo( "Modif. Clients" ) ;
            FILENAME "..\bitmaps\edit.bmp"

         MENUITEM "&Delete..."  ACTION MsgAlert( "Del Clients" ) ;
            FILENAME "..\bitmaps\16x16\delete.bmp"

         SEPARATOR

         MENUITEM "&Browse..."  ACTION MsgInfo( "Browse Clients" ) ;
            FILENAME "..\bitmaps\16x16\browse.bmp"

      ENDMENU

      MENUITEM "&Utilities"
      MENU
         MENUITEM "&Calculator..." ACTION WinExec( "Calc" ) ;
            FILENAME "..\bitmaps\16x16\calc.bmp"

         MENUITEM "&Internet..." ;
            ACTION WinExec( "start iexplore www.fivetech.com", 0 ) ;
            FILENAME "..\bitmaps\16x16\explorer.bmp"
      ENDMENU
   ENDMENU

RETURN( oMenu )

STATIC FUNCTION BmpTiled( hDC, oWnd, oBmp )

   local nWidth := oWnd:nWidth(), nHeight := oWnd:nHeight()
   local nRow := 0, nCol := 0, n
   local nBmpWidth  := oBmp:nWidth(),  nBmpHeight := oBmp:nHeight()

   if oBmp:hBitmap == 0
      return nil
   endif

   while nRow < nHeight
      nCol = 0
      while nCol < nWidth
         PalBmpDraw( hDC, nRow, nCol, oBmp:hBitmap )
         nCol += nBmpWidth
      end
      nRow += nBmpHeight
   end

RETURN NIL

FUNCTION HORIZON_FOLDEREX()

   LOCAL cTitle, oDlg, oFld
   LOCAL oWnd, i, oBrush2
   LOCAL oGet1, oGet2, oGet3
   LOCAL cVar1 := Create_Text( 100000 ) + CRLF + "xxx"
   LOCAL cVar2 := SPACE(200)

   cVar2 := "bla bla bla blaaa bla blaa "
                      
   DEFINE BRUSH oBrush2 FILE "..\bitmaps\backgrnd\metal.bmp"

   cTitle := "Folderex - Sample"

   DEFINE WINDOW oWndChild MDICHILD FROM 00, 00 TO 38.0, 095                 ;
     COLOR CLR_CYAN, CLR_WHITE TITLE cTitle BORDER NONE NOMAXIMIZE

                        // LIN  COL Height Width
   DEFINE DIALOG oDlg FROM 235, 138 TO 612, 875 PIXEL TITLE "FOLDEREX" ;
      STYLE NOR( WS_VISIBLE, WS_DLGFRAME, WS_SYSMENU )

   @ 3, 3 FOLDEREX oFld PIXEL ADJUST      ;
      PROMPT  "Page 1", "Page 2", "&Exit" ;
      TOP OPTION 1 ALIGN 2, 2, 2 ROUND 5 COLOR CLR_WHITE

   oWndChild:bGotFocus  = { || oDlg:SetFocus() }

   oDlg:lHelpIcon := .F.

   WITH OBJECT oFld

      :lTransparent := .T.
      :aGradSel   := { { 1.0, 3926784, 16777215 }, { 0.1, 3926784, 16777215 } } // Green
      :aGradUnSel := { { 1.0, 16744448, 16777215 }, { 0.1, 16744448, 16777215 } } // Blue
      :aGradOver  := { { 1.0, 255, 16777215 }, { 0.1, 255, 16777215 } } // Red
      :aGradOverUnSel := { { 1.0, 12824535, 16777215 }, { 0.1, 12824535, 16777215 } } // Purple
      :aGradDis := { { 1.0, 15790320, 16777215 }, { 0.1, 15790320, 167772 } }
      //
      // :SetOption( 1 )
      :aEnable = { .T., .T., .T., .F. }
      :Show()
      // :DisableTab( 3 )  // idem a :aEnable
      // :oCursor := oHand

   END

   // says / gets...

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

   @ 5, 5 GET oGet1 VAR cVar1 MEMO ;
      SIZE 280, 140 of oFld:aDialogs[1] PIXEL

   // NO FUNCIONA CON CODIGO @ - Maestro Antonio? ERROR EN FWH?
//   @ 150, 5 GET oGet2 VAR cVar2 MEMO ; // <- -------- This lines.
//      SIZE 280, 30 of oFld:aDialogs[1] PIXEL //  <- --------

   // IN 2 FUNCIONA
   @ 150, 5 GET oGet2 VAR cVar2 MEMO ; // <- -------- This lines.
      SIZE 280, 30 of oFld:aDialogs[2] PIXEL //  <- --------

   // FUNCIONA
   @ 150, 05 GET oGet3 VAR cVar2 OF oFld:aDialogs[3] PIXEL SIZE 280,30

   @  60, 150 BUTTONBMP PROMPT "" BITMAP "..\bitmaps\EXIT.bmp" OF oFld:aDialogs[3] ;
      PIXEL ACTION ( oDlg:End(), oWndChild:End() )

//   oFld:aDialogs[1]:bStart = { || oGet1:GoBottom() }

   oFld:aDialogs[1]:Gradient( { { 1, RGB( 236,  90, 128 ), RGB( 236, 150, 136 ) } } )  // Gradiente Dialogo 1 dentro del folder
   oFld:aDialogs[2]:Gradient( { { 1, RGB( 100, 180, 228 ), RGB( 100, 242, 238 ) } } )  // Gradiente Dialogo 2 dentro del folder
   oFld:aDialogs[3]:SetBrush( oBrush2 )

   ACTIVATE DIALOG oDlg NOWAIT  ;
      ON INIT( oDlg:Resize() )  ; // -> For FOLDEREX RESIZE()
      VALID( .NOT. GETKEYSTATE( 27 ) )

   ACTIVATE WINDOW oWndChild CENTERED

   IF Set( _SET_INSERT, ! Set( _SET_INSERT ) )
      Set( _SET_INSERT, ! Set( _SET_INSERT ) )
   ENDIF

RETURN NIL

FUNCTION MyOninit( oGet1 )

   oGet1:LimitText( - 1 )

RETURN NIL

FUNCTION Create_Text( nByte )

   LOCAL cResult := "", cText := "bla bla bla blaaa bla blaa "

   WHILE LEN( cResult ) < nByte

      SYSREFRESH()

      cResult += cText

   ENDDO

RETURN( cResult )
//-------------------------------------------------------------------------//
// As vezes simples SetFocus( oObj ) nao faz um objeto ganhar foco
// neste caso pode apelar para estas duas funcoes a seguir
// Forcar foco para um objeto especifico - Ednaldo Rolim...
//-------------------------------------------------------------------------//
FUNCTION xFocus( oObj )

   xSetFocus( oObj )
   xSetFocus( oObj )

RETURN( .T. )

FUNCTION xSetFocus( oObj )    

   LOCAL _oWnd := oObj:oWnd, _oTempo := ""

   DEFINE TIMER _oTempo INTERVAL 10 OF _oWnd ;
      ACTION ( oObj:SetFocus(), _oTempo:End() )

   ACTIVATE TIMER _oTempo

RETURN( .T. )

// FIN / END                  -kapiabafw@gmail.com-
Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: How to show a large text
Posted: Tue Sep 16, 2025 03:02 AM
Puede ser un error de "alineación de memoria" en la función cDlg2Chr()

Habria que modificar este método y comparar los valores resultantes en resource.bin:
METHOD cToChar( hActiveWnd ) CLASS TDialog

   local cResult
   local aControls := ::aControls
   local n     := GetDlgBaseUnits()
   local aRect := GetWndRect( hActiveWnd )
   local hDC

   DEFAULT ::cCaption := ""

   if ! lAnd( ::nStyle, DS_SETFONT )
      cResult = cDlg2Chr( Len( aControls ),;
                          Int( 8 * ( ::nTop  - aRect[ 1 ]   ) / nHiWord( n ) ),;
                          Int( 4 * ( ::nLeft - aRect[ 2 ]   ) / nLoWord( n ) ),;
                          Int( 8 * ( ::nBottom - aRect[ 1 ] ) / nHiWord( n ) ),;
                          Int( 4 * ( ::nRight  - aRect[ 2 ] ) / nLoWord( n ) ),;
                          ::cCaption, ::nStyle )
   else
      cResult = cDlg2Chr( Len( aControls ),;
         Int( 8 * ( ::nTop  - aRect[ 1 ]   ) / nHiWord( n ) ),;
         Int( 4 * ( ::nLeft - aRect[ 2 ]   ) / nLoWord( n ) ),;
         Int( 8 * ( ::nBottom - aRect[ 1 ] ) / nHiWord( n ) ),;
         Int( 4 * ( ::nRight  - aRect[ 2 ] ) / nLoWord( n ) ),;
         ::cCaption, ::nStyle, -::oFont:nInpHeight * GetDeviceCaps( hDC := GetDC( 0 ), LOGPIXELSY ) / 72,;
         ::oFont:cFaceName )
         ReleaseDC( 0, hDC )
   endif

   for n = 1 to Len( aControls )
      cResult += aControls[ n ]:cToChar()
   next

   hb_memoWrit( "resource.bin", cResult )

return cResult
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: How to show a large text
Posted: Tue Sep 16, 2025 03:16 AM
https://github.com/FiveTechSoft/FWH_tools/blob/master/resources.zip

resource_ok.bin 3.476 bytes
resource_bad.bin 3.560 bytes
regards, saludos

Antonio Linares
www.fivetechsoft.com