Listando Widgets

Hoje vamos mostrar como listar todos widgets de uma sessão do Progress. A principal utilidade disso é podermos manipular qualquer objeto da tela usando procedures externas ou as famosas UPC’s da Datasul.

O código abaixo usa uma função recursiva para ler os Widgets da tela e gravar em uma temp-table.

SESSION:HANDLE -> Pega o handle da sessão, esse comando handle pode ser usado com qualquer objeto como você pode perceber ao utilizar o código abaixo.

/*Variavel que guarda o Widget que esta sendo gravada*/

DEFINE VARIABLE hCurrentWidget      AS WIDGET-HANDLE NO-UNDO.

DEFINE TEMP-TABLE Widgets NO-UNDO

FIELD WidgetHandle AS WIDGET-HANDLE

FIELD WidgetName   AS CHARACTER

FIELD WidgetType   AS CHARACTER

FIELD WidgetParent AS WIDGET-HANDLE.

/*Grava o handle da Sessão*/

ASSIGN hCurrentWidget = SESSION:HANDLE.

/*Chama a procedure passando o primeiro Widget*/

RUN WidgetList(hCurrentWidget).

OUTPUT TO myfile.txt. /* joga os valores do display para um arquivo. */

FOR EACH Widgets NO-LOCK BY WidgetHandle:

DISPLAY

INTEGER(WidgetHandle) FORMAT “9999999”

WidgetName            FORMAT “X(15)”

WidgetType            FORMAT “X(15)”

INTEGER(WidgetParent) FORMAT “9999999”.

END.

OUTPUT CLOSE.

/* Essa procedure abaixo é o coração do programa, é uma função recursiva que pega todos os widgets que estejam abaixo do handle passado pra ela, no caso o handle da sessão. Veja que ela pode ser usada de diversas outras formas, caso você passe o handle de uma janela ela vai retornar tudo que ela encontrar nessa janela. */

PROCEDURE WidgetList:

DEFINE INPUT  PARAMETER hWidgetScope AS WIDGET-HANDLE NO-UNDO.

DEFINE VARIABLE hCurrentWidget      AS WIDGET-HANDLE NO-UNDO.

ASSIGN

hCurrentWidget = hWidgetScope:FIRST-CHILD NO-ERROR.

/*Enquando o Handle for valido, cria a tabela e pega o próximo handle*/

DO WHILE VALID-HANDLE(hCurrentWidget):

CREATE Widgets.

ASSIGN

WidgetHandle = hCurrentWidget

WidgetName   = hCurrentWidget:NAME

WidgetType   = hCurrentWidget:TYPE

WidgetParent = hCurrentWidget:PARENT.

RUN WidgetList(hCurrentWidget).

ASSIGN

hCurrentWidget = hCurrentWidget:NEXT-SIBLING.

END.

END PROCEDURE

FDantas

Formado pela FPJ (Faculdade Politecnica de Jundiai), atualmente atuando como analista de sistemas. Trabalha há mais de 10 anos com analise, desenvolvimento e customização de sistemas desenvolvidos em Progress 4GL como Magnus, EMS e HCM. Atua também com desenvolvimento web, utilizando a ferramenta WebSpeed.

Você pode gostar...

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *