Página 1 de 1

remover/Destruir o browse/controle

Enviado: 11 Jan 2024 19:29
por JoséQuintas

Código: Selecionar todos

#include "hwgui.ch"
#define DEFAULT_FONTNAME "MS Sans Serif"

PROCEDURE Main

   LOCAL oFont
   LOCAL xDlg, cTitle := "test"
   LOCAL aList := { "um", "dois", "tres" }

   oFont := HFont():Add( DEFAULT_FONTNAME, 0, -11 )
   INIT DIALOG xDlg ;
      CLIPPER ;
      FONT oFont ;
      NOEXIT ;
      TITLE     cTitle ;
      AT       0, 0 ;
      SIZE      1024, 768
      // BACKCOLOR COLOR_WHITE

   ACTIVATE DIALOG xDlg CENTER ON ACTIVATE { || BrowseMenuBr( xDlg, 10, 10, aList ) }

   RETURN

STATIC FUNCTION BrowseMenuBr( xDlg, nRow, nCol, aList )

   LOCAL xBrowse, aBrowseList := {}, cItem

   hb_Default( @nRow, 0 )
   hb_Default( @nCol, 0 )
   FOR EACH cItem IN aList
      AAdd( aBrowseList, { cItem } )
   NEXT

   @ nCol, nRow BROWSE xBrowse OF xDlg ;
      ARRAY ;
      SIZE 100, (Len(aList)+2)*20 ;
      STYLE WS_BORDER + WS_VSCROLL + WS_HSCROLL ;
      ON CLICK { || xBrowse:End(), xDlg:Refresh() }

   hwg_CREATEARLIST( xBrowse, aBrowseList )

   xBrowse:aColumns[1]:Heading := "titulo"
   xBrowse:aColumns[1]:length := 50

   RETURN Nil
Estou tentando destruir o browse, mas ele continua lá vazio.
Tem como remover/destruir um controle da dialog?

remover/Destruir o browse/controle

Enviado: 12 Jan 2024 00:26
por alxsts
Olá!

Pelo que consta na documentação da HWGUI, o método End() é interno. Deve ter funções específicas do controle.
JoséQuintas escreveu:Estou tentando destruir o browse, mas ele continua lá vazio.
Tem como remover/destruir um controle da dialog?
Não fica clara a tua intenção ao "destruir" um controle. Se for para que ele desapareça da tela, no caso do controle Browse, use o método hide:

Código: Selecionar todos

oBrw:hide

remover/Destruir o browse/controle

Enviado: 12 Jan 2024 08:32
por JoséQuintas
alxsts escreveu:Não fica clara a tua intenção ao "destruir" um controle. Se for para que ele desapareça da tela, no caso do controle Browse, use o método hide:
Destruir é jogar fora mesmo, ficou inútil, precisa ser descartado.

No Windows seria enviar a mensagem WM_CLOSE pra janela do controle.
Mas é lógico, também precisa destruir os objetos criados pela hwgui.

A intenção é criar um sistema de menus usando o browse.

remover/Destruir o browse/controle

Enviado: 12 Jan 2024 10:40
por JoséQuintas
Parece que deu certo.
Precisa testar mais pesado.

Código: Selecionar todos

STATIC FUNCTION Destroy( xDlg, xBrowse )

   LOCAL hWnd

   hWnd := xBrowse:Handle
   xBrowse:End()
   hwg_SendMessage( hWnd, WM_CLOSE, 0, 0 )
   xDlg:Refresh()
   (xDlg)

   RETURN Nil

Código: Selecionar todos

#include "hwgui.ch"
#define DEFAULT_FONTNAME "MS Sans Serif"

PROCEDURE Main

   LOCAL oFont
   LOCAL xDlg, cTitle := "test"
   LOCAL aList := { "um", "dois", "tres" }

   oFont := HFont():Add( DEFAULT_FONTNAME, 0, -11 )
   INIT DIALOG xDlg ;
      CLIPPER ;
      FONT oFont ;
      NOEXIT ;
      TITLE     cTitle ;
      AT       0, 0 ;
      SIZE      1024, 768
      // BACKCOLOR COLOR_WHITE

   ACTIVATE DIALOG xDlg CENTER ON ACTIVATE { || BrowseMenuBr( xDlg, 10, 10, aList ) }

   RETURN

STATIC FUNCTION BrowseMenuBr( xDlg, nRow, nCol, aList )

   LOCAL xBrowse, aBrowseList := {}, cItem

   hb_Default( @nRow, 0 )
   hb_Default( @nCol, 0 )
   FOR EACH cItem IN aList
      AAdd( aBrowseList, { cItem } )
   NEXT

   @ nCol, nRow BROWSE xBrowse OF xDlg ;
      ARRAY ;
      SIZE 100, (Len(aList)+2)*20 ;
      STYLE WS_BORDER + WS_VSCROLL + WS_HSCROLL ;
      ON CLICK { || Destroy( xDlg, xBrowse ) }

   hwg_CREATEARLIST( xBrowse, aBrowseList )

   xBrowse:aColumns[1]:Heading := "titulo"
   xBrowse:aColumns[1]:length := 50

   RETURN Nil

STATIC FUNCTION Destroy( xDlg, xBrowse )

   LOCAL hWnd

   hWnd := xBrowse:Handle
   xBrowse:End()
   hwg_SendMessage( hWnd, WM_CLOSE, 0, 0 )
   xDlg:Refresh()
   (xDlg)

   RETURN Nil