Página 1 de 2

Como iniciar o conteúdo de HCEDIT

Enviado: 23 Jan 2023 14:31
por JoséQuintas

Código: Selecionar todos

#include "hwgui.ch"
#include "directry.ch"

FUNCTION DlgTextView()

   LOCAL aFileList, nIndex, cFileSpec := "*.prg"
   LOCAL oDlg, oEdit, oFont := HFont():Add( "MS Sans Serif", 0, -13 )

   aFileList := Directory( cFileSpec )
   nIndex := 1

   INIT DIALOG oDlg CLIPPER TITLE "Text view"  ;
      AT 0,0  SIZE 800, 600 ;
      FONT oFont ON INIT Dlg_Init( oEdit, aFileList, nIndex )

   @ 10, 10 HCEDIT oEdit SIZE oDlg:nWidth - 40, oDlg:nHeight - 100

   ACTIVATE DIALOG oDlg

RETURN Nil

STATIC FUNCTION Dlg_Init( oEdit, aFileList, nIndex )

   LOCAL cTxt

   IF Len( aFileList ) == 0
      cTxt := ""
   ELSE
      cTxt := MemoRead( aFileList[ nIndex ], F_NAME )
   ENDIF
   oEdit:SetText( cTxt )
   (cTxt)
   (oEdit)
   (aFileList)
   (nIndex)

RETURN Nil
Como iniciar o conteúdo de HCEDIT ?
Desse jeito dá erro de não existir o método SetText()

Como iniciar o conteúdo de HCEDIT

Enviado: 23 Jan 2023 15:27
por Itamar M. Lins Jr.
Olá!
Tente com VALUE
oEdit:VALUE( cTxt )

Código: Selecionar todos

CLASS HEdit INHERIT HControl

   CLASS VAR winclass  INIT "EDIT"
   DATA lMultiLine     INIT .F.
   DATA cType INIT "C"
   DATA bSetGet
   DATA bValid
   DATA cPicFunc, cPicMask
   DATA lPicComplex    INIT .F.
   DATA lFirst         INIT .T.
   DATA lChanged       INIT .F.
   DATA lNoPaste       INIT .F.
   DATA nMaxLength     INIT Nil
   DATA bkeydown, bkeyup, bchange
   DATA aColorOld      INIT { 0,0 }
   DATA bColorBlock

   METHOD New( oWndParent, nId, vari, bSetGet, nStyle, nLeft, nTop, nWidth, nHeight, ;
      oFont, bInit, bSize, bGfocus, bLfocus, ctooltip, ;
      tcolor, bcolor, cPicture, lNoBorder, nMaxLength, lPassword, bKeyDown, bChange )
   METHOD Activate()
   METHOD Init()
   METHOD onEvent( msg, wParam, lParam )
   METHOD Redefine( oWndParent, nId, vari, bSetGet, oFont, bInit, bSize, bGfocus, ;
      bLfocus, ctooltip, tcolor, bcolor, cPicture, nMaxLength )
   METHOD SetGet( value ) INLINE Eval( ::bSetGet, value, self )
   METHOD Refresh()
   METHOD Value ( xValue ) SETGET
   METHOD SelStart( nStart ) SETGET
   METHOD SelLength( nLength ) SETGET
   METHOD ParsePict( cPicture, vari )

ENDCLASS
Se entendi direito.

Saudações,
Itamar M. Lins Jr.

Como iniciar o conteúdo de HCEDIT

Enviado: 23 Jan 2023 15:31
por Itamar M. Lins Jr.
Olá!
Editando um campo MEMO, ou texto grande. Tanto faz.
cMinhaVar := oBJTxt:GetText()

Código: Selecionar todos

   @ 085,380 Get oCl21 Var vCl21 size 330,130 VALID {||vCl21:=oCl21:GetText(),.T.} BACKCOLOR 16777215 STYLE ES_MULTILINE + ES_AUTOVSCROLL + ;
                                                                                    WS_VSCROLL + ES_WANTRETURN ;
                                                                                    TOOLTIP "Observação sobre o cliente."                                                                                                                                   
Saudações,
Itamar M. Lins Jr.

Como iniciar o conteúdo de HCEDIT

Enviado: 23 Jan 2023 15:44
por JoséQuintas
Me baseei aqui:

Código: Selecionar todos

FUNCTION hwg_MemoEdit(mpmemo , cTextTitME , cTextSave ,  cTextClose , ;
 cTTSave , cTTClose , oHCfont )
...
   IF oHCfont == NIL
    @ 10, 10 HCEDIT oEdit SIZE oModDlg:nWidth - 20, 240
   ELSE
    @ 10, 10 HCEDIT oEdit SIZE oModDlg:nWidth - 20, 240 ;
       FONT  oHCfont
   ENDIF
...
a classe tem:

Código: Selecionar todos

CLASS HCEdit INHERIT HControl
...
   METHOD SetText( xText, cPageIn, cPageOut )
Vou testar a outra opção.

Como iniciar o conteúdo de HCEDIT

Enviado: 23 Jan 2023 15:47
por Itamar M. Lins Jr.
Olá!
Entendi...(acredito)
Precisa primeiro colocar tudo na DIALOG.
Depois que você vai usar funções para mostrar os conteúdos das variáveis no caso os GETS.

Por exemplo:

Código: Selecionar todos

ANTES aqui em cima eu digo:

   INIT DIALOG oDlg CLIPPER NOEXIT TITLE cTitulo Font oFont AT 0,0 SIZE 1280,640 STYLE WS_OVERLAPPEDWINDOW ;
   On Init {|| hwg_WriteStatus( oDlg,2,'Reg: ' + Transform( cl->(lastRec()) ,"9,999,999" )) }  

   //coloco browse, botões de navegação etc...

  cNomeCliente :=  -> posso "MARIA" ou alias->cliente //Posso já começar com browse no primeiro recno() clientes.dbf
  ou 
  cNomeCliente := space(60)

[b]   @ 085,010 get oNomeCliente var cNomeCliente  [/b]

  //desenho TODOS OS CONTROLES

   oDlg:Activate(,,,.T.) //EQUIVALENTE AO READ

Saudações,
Itamar M. Lins Jr.

Como iniciar o conteúdo de HCEDIT

Enviado: 23 Jan 2023 15:50
por Itamar M. Lins Jr.
Olá!
Não pode fazer USO do OBJETO ANTES de colocar (FECHAR) eles dentro da DIALOG.
O OBJETO só passa a existir DEPOIS DO:
ACTIVATE DIALOG oDlg

Saudações,
Itamar M. Lins Jr.

Como iniciar o conteúdo de HCEDIT

Enviado: 23 Jan 2023 16:05
por Itamar M. Lins Jr.
Olá!
ON INIT Dlg_Init( oEdit, aFileList, nIndex )
Bem... Aqui acredtio que está fazendo uso do objeto oEDIT, ANTES dele ser criado.
Me ensinaram a usar dessa forma:

Código: Selecionar todos


 //Objetos da DIALOG

  oDlg:bActivate := {||oDlg:Show(),FuncaoA(),FuncaoB(),FuncaoC(),oEDIT:Disable() }

 ACTIVATE DIALOG oDlg

Esse :bActivate só vai executar depois que a DIALOG mostrar todos os (objetos) ou seja ativada.

Saudações,
Itamar M. Lins Jr.

Como iniciar o conteúdo de HCEDIT

Enviado: 23 Jan 2023 16:35
por JoséQuintas
Mesmo erro, agora não existe :Value ao invés de :SetText()

E com MEMVAR dá que variável não existe.
O que tem de errado então?

Código: Selecionar todos

#include "hwgui.ch"
#include "directry.ch"

MEMVAR oEdit

FUNCTION DlgTextView()

   LOCAL aFileList, nIndex, cFileSpec := "*.prg"
   LOCAL oDlg, oFont := HFont():Add( "MS Sans Serif", 0, -13 )

   aFileList := Directory( cFileSpec )
   nIndex := 1

   INIT DIALOG oDlg CLIPPER TITLE "Text view"  ;
      AT 0,0  SIZE 800, 600 ;
      FONT oFont ON INIT Dlg_Init( aFileList, nIndex )

   @ 10, 10 GET oEdit SIZE oDlg:nWidth - 40, oDlg:nHeight - 100 FONT oFont ;
      STYLE ES_MULTILINE + ES_AUTOVSCROLL + WS_VSCROLL + WS_HSCROLL

   ACTIVATE DIALOG oDlg

RETURN Nil

STATIC FUNCTION Dlg_Init( aFileList, nIndex )

   LOCAL cTxt

   IF Len( aFileList ) == 0
      cTxt := ""
   ELSE
      cTxt := MemoRead( aFileList[ nIndex ], F_NAME )
   ENDIF
   oEdit:Value := cTxt
   (cTxt)
   (oEdit)
   (aFileList)
   (nIndex)

RETURN Nil

Como iniciar o conteúdo de HCEDIT

Enviado: 23 Jan 2023 16:47
por Itamar M. Lins Jr.
Olá!
Tá respondido nas 3 ai em cima o pq.
Tente assim:

Código: Selecionar todos

#include "hwgui.ch"
#include "directry.ch"

MEMVAR oEdit

FUNCTION DlgTextView()

   LOCAL aFileList, nIndex, cFileSpec := "*.prg"
   LOCAL oDlg, oFont := HFont():Add( "MS Sans Serif", 0, -13 )

   aFileList := Directory( cFileSpec )
   nIndex := 1

   INIT DIALOG oDlg CLIPPER TITLE "Text view"  ;
      AT 0,0  SIZE 800, 600 ;
      FONT oFont //ON INIT Dlg_Init( aFileList, nIndex )

   @ 10, 10 GET oEdit SIZE oDlg:nWidth - 40, oDlg:nHeight - 100 FONT oFont ;
      STYLE ES_MULTILINE + ES_AUTOVSCROLL + WS_VSCROLL + WS_HSCROLL

   oDlg:bActivate := {|| Dlg_Init( aFileList, nIndex ) }

   ACTIVATE DIALOG oDlg

RETURN Nil

STATIC FUNCTION Dlg_Init( aFileList, nIndex )

   LOCAL cTxt

   IF Len( aFileList ) == 0
      cTxt := ""
   ELSE
      cTxt := MemoRead( aFileList[ nIndex ], F_NAME )
   ENDIF
   oEdit:Value := cTxt
   (cTxt)
   (oEdit)
   (aFileList)
   (nIndex)

RETURN Nil
Saudações,
Itamar M. Lins Jr.

Como iniciar o conteúdo de HCEDIT

Enviado: 23 Jan 2023 16:56
por Itamar M. Lins Jr.
Olá!
Fix, do FIX, do fix...

Código: Selecionar todos

FUNCTION DlgTextView()

   LOCAL aFileList, nIndex, cFileSpec := "*.prg"
   LOCAL oDlg, oFont := HFont():Add( "MS Sans Serif", 0, -13 )
   LOCAL cEdit := ""

   aFileList := Directory( cFileSpec )
   nIndex := 1

   INIT DIALOG oDlg CLIPPER TITLE "Text view"  ;
      AT 0,0  SIZE 800, 600 ;
      FONT oFont //ON INIT Dlg_Init( aFileList, nIndex )

   @ 10, 10 GET oEdit var cEdit SIZE oDlg:nWidth - 40, oDlg:nHeight - 100 FONT oFont STYLE ES_MULTILINE + ES_AUTOVSCROLL + WS_VSCROLL + WS_HSCROLL

   oDlg:bActivate := {|| Dlg_Init( aFileList, nIndex, oDlg ) }

   ACTIVATE DIALOG oDlg

RETURN Nil

STATIC FUNCTION Dlg_Init( aFileList, nIndex, oDlg )

   LOCAL cTxt

   IF Len( aFileList ) == 0
      cTxt := ""
   ELSE
      cTxt := MemoRead( aFileList[ nIndex ], F_NAME )
   ENDIF
   oDlg:oEdit:Value := cTxt

   (cTxt)
   (oEdit)
   (aFileList)
   (nIndex)

RETURN Nil
Aqui rodou e não deu erro, só a DIALOG com GET em BRANCO.

Saudações,
Itamar M. Lins Jr.

Como iniciar o conteúdo de HCEDIT

Enviado: 23 Jan 2023 18:02
por JoséQuintas
novo.png
Tem que funcionar do jeito que eu quero.
Assim foi.

Conjunto de erros:

INIT é com codeblock e não direto como eu tinha feito.
HCEDIT NÃO TEM VAR, EDIT tem, SEM VAR não funciona.

Não tinha chegado lá ainda:
Tava errado FC_NAME, fora do colchete
Refresh após atualizar

Valeu pelo GET, fazer o que.....
Sair do console que usa GETS pra...... usar GETS kkkkk

Como iniciar o conteúdo de HCEDIT

Enviado: 23 Jan 2023 18:20
por JoséQuintas
Faltam os buttons...

Como HCEDIT não é pra usar, é GET....

O que usar pra button ? ownbutton mesmo? (chute do nome)

Como iniciar o conteúdo de HCEDIT

Enviado: 23 Jan 2023 18:31
por Itamar M. Lins Jr.
Ola!
Aqui dá erro: ON INIT {|| Dlg_Init( @oEdit, aFileList, nIndex ) }

Código: Selecionar todos

Error BASE/1004  No exported method: OEDIT
Called from ->OEDIT(0)
Called from hedit.prg->DLG_INIT(37)
Called from hedit.prg->(b)DLGTEXTVIEW(17)
Called from source\winapi\hdialog.prg->INITMODALDLG(312)
Called from source\winapi\hdialog.prg->(b)(_INITSTATICS00003)(0)
Called from source\winapi\hdialog.prg->HDIALOG:ONEVENT(232)
Called from ->HWG_DLGBOXINDIRECT(0)
Called from source\winapi\hdialog.prg->HDIALOG:ACTIVATE(177)
Called from hedit.prg->DLGTEXTVIEW(23)

HWGUI 2.23 dev Build 3
Date:01/23/23
Time:18:30:13
Vc está cansando a minha beleza...
Linha 37 é: oDlg:oEdit:Value := cTxt
Não quer usar GET use EDITBOX:

Código: Selecionar todos

#xcommand @ <x>,<y> EDITBOX [ <oEdit> CAPTION ] <caption> ;
            [ OF <oWnd> ]              ;
            [ ID <nId> ]               ;
            [ SIZE <width>, <height> ] ;
            [ COLOR <color> ]          ;
            [ BACKCOLOR <bcolor> ]     ;
            [ ON INIT <bInit> ]        ;
            [ ON SIZE <bSize> ]        ;
            [ ON GETFOCUS <bGfocus> ]  ;
            [ ON LOSTFOCUS <bLfocus> ] ;
            [ ON KEYDOWN <bKeyDown>]   ;
            [ ON CHANGE <bChange> ]    ;
            [ STYLE <nStyle> ]         ;
            [<lnoborder: NOBORDER>]    ;
            [<lPassword: PASSWORD>]    ;
            [ FONT <oFont> ]           ;
            [ TOOLTIP <ctoolt> ]       ;
Ou faz com a palavra que te agradar...

Saudações,
Itamar M. Lins Jr.

Como iniciar o conteúdo de HCEDIT

Enviado: 23 Jan 2023 18:35
por Itamar M. Lins Jr.
Olá!
O que usar pra button ? ownbutton mesmo? (chute do nome)
Ta tudo aqui: \include\guilib.ch

Button:

Código: Selecionar todos

#xcommand @ <x>,<y> BUTTON [ <oBut> CAPTION ] <caption> ;
            [ OF <oWnd> ]              ;
            [ ID <nId> ]               ;
            [ SIZE <width>, <height> ] ;
            [ COLOR <color> ]          ;
            [ BACKCOLOR <bcolor> ]     ;
            [ ON INIT <bInit> ]        ;
            [ ON SIZE <bSize> ]        ;
            [ ON PAINT <bDraw> ]       ;
            [ ON CLICK <bClick> ]      ;
            [ STYLE <nStyle> ]         ;
            [ FONT <oFont> ]           ;
            [ TOOLTIP <ctoolt> ]       ;
OwnerButton:

Código: Selecionar todos

#xcommand @ <x>,<y> OWNERBUTTON [ <oOwnBtn> ]  ;
            [ OF <oWnd> ]              ;
            [ ID <nId> ]               ;
            [ SIZE <width>, <height> ] ;
            [ BACKCOLOR <bcolor> ]     ;
            [ ON INIT <bInit> ]        ;
            [ ON SIZE <bSize> ]        ;
            [ ON PAINT <bPaint> ]      ;
            [ ON CLICK <bClick> ]      ;
            [ HSTYLES <aStyles,...> ]  ;
            [ <flat: FLAT> ]           ;
            [ <enable: DISABLED> ]     ;
            [ TEXT <cText>             ;
                 [ COLOR <color>] [ FONT <font> ] ;
                 [ COORDINATES  <xt>, <yt>, <widtht>, <heightt> ] ;
            ] ;
            [ BITMAP <bmp>  [<res: FROM RESOURCE>] [<ltr: TRANSPARENT> [COLOR  <trcolor> ]] ;
                 [ COORDINATES  <xb>, <yb>, <widthb>, <heightb> ] ;
            ] ;
            [ TOOLTIP <ctoolt> ]    ;
            [ <lCheck: CHECK> ]     ;
          => ;
    [<oOwnBtn> :=] HOWNBUTTON():New( <oWnd>,<nId>,\{<aStyles>\},<x>,<y>,<width>, ;
          <height>,<bInit>,<bSize>,<bPaint>, ;
          <bClick>,<.flat.>, ;
              <cText>,<color>,<font>,<xt>, <yt>,<widtht>,<heightt>, ;
              <bmp>,<.res.>,<xb>,<yb>,<widthb>,<heightb>,<.ltr.>,<trcolor>, <ctoolt>,!<.enable.>,<.lCheck.>,<bcolor> );
    [; hwg_SetCtrlName( <oOwnBtn>,<(oOwnBtn)> )]
E os demais controles.

Saudações,
Itamar M. Lins Jr.

Como iniciar o conteúdo de HCEDIT

Enviado: 23 Jan 2023 18:47
por JoséQuintas
testhwgui.png
Aqui normal.
Segue fonte, talvez tenha faltado alterar o codeblock no init?

Código: Selecionar todos

#include "hwgui.ch"
#include "directry.ch"

FUNCTION DlgTextView()

   LOCAL aFileList, nIndex, cFileSpec := hb_cwd() + "*.prg"
   LOCAL oDlg, oEdit, cEdit, oFont := HFont():Add( "MS Sans Serif", 0, -13 )

   aFileList := Directory( cFileSpec )
   nIndex := 1

   INIT DIALOG oDlg CLIPPER TITLE "Text view"  ;
      AT 0,0  SIZE 800, 600 ;
      FONT oFont ON INIT { || Dlg_Init( oEdit, aFileList, nIndex ) }

   @ 10, 10 GET oEdit VAR cEdit SIZE oDlg:nWidth - 40, oDlg:nHeight - 100 FONT oFont ;
       STYLE ES_MULTILINE + ES_AUTOVSCROLL + WS_VSCROLL + WS_HSCROLL

   ACTIVATE DIALOG oDlg

RETURN Nil

STATIC FUNCTION Dlg_Init( oEdit, aFileList, nIndex )

   LOCAL cTxt

   IF Len( aFileList ) == 0
      cTxt := ""
   ELSE
      cTxt := MemoRead( aFileList[ nIndex, F_NAME ] )
   ENDIF
   oEdit:Value := cTxt
   oEdit:Refresh()

RETURN Nil