Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

01. VISÃO GERAL

Este componente TreeView4glTreeView, feito em progress, tem como objetivo substituir o componente TreeView fornecido pela Microsoft (mscomctrl.ocx), pois este OCX não possui compatibilidade com o OpenEdge 64Bits.

...

VariávelTipoDescrição
h-4gltreeviewHandleContem o handle da instância do TreeView
c-codigo-nodeCharContem o pcKe (chave) do node selecionado
cImageCharContem a imagem que será apresentada no node
cFgColorCharContem a cor de frente do node
cFontCharContem o código da fonte utilizada no node
cExpClpCharExpande ou fecha o node
ProcedureParâmetrosDescriçãoExemplo/Utilização
pi-create-node
ParâmetrosTipoDescrição
pcKe (I)CharChave do node
pcKePar (I)CharPai do node
pcLabel (I)CharLabel do node
pcIco(I)CharÍcone do node
pcOptn (I)CharParâmetros do node



Cria um node no treeviewTreeView.

O pcOptn é uma lista de parâmetros que são separados por chrCHR(1).

Valores válidos para o pcOtnpcOptn:

ParâmetroDescrição
expandedInicia o node expendido
collapsedInicia o node fechado (não expandido) - opção default
selectedSeleciona o node ate o próximo refresh
refreshRealiza o refresh do treeviewTreeView
AutoSort=yes/noLiga ou desliga a ordenação do treeviewTreeView
font=nDefine uma fonte para o node
fgcolor=nDefine uma cor de frente para o node
bgcolor=nDefine uma cor de fundo para o node
tooltip=xxxDefine um help para o node
DO ON ERROR UNDO, LEAVE:
    RUN pi-create-node
("n1","","node 1","","").
    RUN pi-create-node
("n2","","node 2","","expanded").
END.
pi-update-node
ParâmetroTipoDescrição
pcKe (I)CharChave do node a mover
pcFieldNames (I)CharLista de campos, exemplo: "lab,ico"
pcFieldValues (I)CharLista de valores separados por chr(1)
pcOptn (I)CharParâmetros do node

Atualiza o label, ícone ou a lista de opções de um determinado node.

Para remover um item do pcOptn existente, coloque "!" na frente da opção, conforme o exemplo abaixo:

pcOptn="!font"

A opção acima removerá o fonte definido para o node.

ASSIGN cFgColor = "font=1".
RUN pi-update-node
(c-codigo-node, "", "", cFgColor).
RUN pi-atualizaTreeview.
pi-node-is-expanded
ParâmetroTipoDescrição
pcKe (I)CharChave do node

Retorno "YES" ou "NO" indicando se o node está expandido.

RUN pi-node-is-expanded 
(INPUT c-codigo-node).
IF RETURN-VALUE = "YES" THEN
 MESSAGE "O NÓ ESTÁ EXPANDIDO"
VIEW-AS ALERT-BOX.
ELSE
  MESSAGE "O NÓ NÃO ESTÁ EXPANDIDO"
VIEW-AS ALERT-BOX.
pi-atualizaTreeview
Faz uma atualização/refresh do TreeView.
RUN pi-atualizaTreeview.
tvNodeEvent
ParâmetroTipoDescrição
pcEvent (I)CharEvento que aconteceu
pcNodeKey (I)CharChave do node

Procedure auxiliar que é assinada no TreeView, onde todos os eventos que ocorrerem no TreeView chamarão esta procedure.

Você não precisa chamar esta procedure diretamente, pois quem irá chamá-la é o TreeView.

Nesta procedure será alimentada a variável c-codigo-node com a chave do node selecionado.


pi-ClickTreeview

Procedure que será chamada pelo tvNodeEvent sempre que ocorrer um evento de "select" (click em um node) no TreeView.

Caso queria capturar este evento, esta Procedure deve ser definida no seu programa.

A variável c-codigo-node irá conter a chave do node selecionado.

PROCEDURE pi-ClickTreeView:
MESSAGE "Chave do Nó: " +
c-codigo-node
VIEW-AS ALERT-BOX.
END PROCEDURE.
pi-CtrlPopupTreeview
ParâmetroTipoDescrição
pcAction (I)Char

Ação do Popup:

"build" ou "choose"

pcEvent (I)CharItem do Popup escolhido
pcNodeKey (I)
Chave do node

Procedure utilizada para criar e controlar o Popup do TreeviewTreeView.

Ela será chamada pelo tvNodeEvent em dois momentos:

1) Criação do Menu

Executada na momento em que o componente é criado. Passando como parâmetro o Ação "build". Neste momento a Procedure deverá retornar uma String com a lista dos itens que devem ser apresentados no Popup. A lista deve utilizar o separador "chr(1)" e deve ser composta por Label e Valor de cada item. Ex: "LabelItem1" + chr(1) + "valoritem1" + chr(1) + "LabelItem2" + chr(1) + "valoritem2". É possível acrescentar uma regra entre os itens, para isto, basta incluir um item com o Label "RULE" e o  valor igual a branco.

xxxxProcedure que será chamada pelo tvNodeEvent sempre que ocorrer um evento de "select" (click em um node) no TreeView.

xxxxCaso queria capturar este evento, esta Procedure deve ser definida no seu programa.

xxxxxA variável c-codigo-node irá conter a chave do node selecionado.


pi-GenericEventTreeview
ParâmetroTipoDescrição
pcEvent (I)CharEvento que aconteceu
pcNodeKey (I)CharChave do node

xxxxProcedure que será chamada pelo tvNodeEvent sempre que ocorrer um evento de "select" (click em um node) no TreeView.

xxxxCaso queria capturar este evento, esta Procedure deve ser definida no seu programa.

xxxA variável c-codigo-node irá conter a chave do node selecionado.


...

03. PROCEDURES E FUNÇÕES DO COMPONENTE

O componente 4GLTreeView 4glTreeView possui um código altamente documentado que pode ser utilizado.

...

ProcedureParâmetrosDescriçãoExemplo/Utilização
addNode *
ParâmetrosTipoDescrição
pcKe (I)CharChave do node
pcKePar (I)CharPai do node
pcLabel (I)CharLabel do node
pcIco (I)CharÍcone do node
pcOptn (I)CharParâmetros do node

Adiciona um node no treeviewTreeView.

Se o node for adicionado a um

node pai, ele será o último filho.

DO ON ERROR UNDO, LEAVE:
 RUN addNode IN h-4gltreeview
("n1","","node1","","").
 RUN addNode IN h-4gltreeview
("n2","","node2","","expanded").
  RUN addNode IN h-4gltreeview
("n21","n2","node21","","").
  RUN addNode IN h-4gltreeview
("n22","n2","node22","","expanded").
 RUN addNode IN h-4gltreeview
("n221","n22","node221","image/book02.bmp","").
 RUN addNode IN h-4gltreeview
("n222","n22","node222","image/book02.bmp","").
  RUN addNode IN h-4gltreeview
("n3","","node3","present1.bmp","expanded").
  RUN addNode IN h-4gltreeview
("n31","n3","node31","image/$.bmp","").
 RUN addNode IN h-4gltreeview
("n4","","node4","image/smile56.bmp","").
END.

updateNode *


ParâmetroTipoDescrição
pcKe (I)CharChave do node a mover
pcFieldNames (I)CharList de campos, exemplo: "lab,ico"
pcFieldValues (I)CharLista de valores separados por chr(1)
pcOptn (I)CharParâmetros do node
Atualiza o label, ícone ou a lista de opções de um determinado node.
RUN updateNode IN h-4gltreeview
(c-codigo-node, "", "", cFgColor).
deleteNode
ParâmetroTipoDescrição
pcKe (I)CharChave do node
pcOptn (I)CharParâmetros do node
Elimina um node de uma chave especificada.
RUN deleteNode IN h-4gltreeview
(c-codigo-node, "refresh").
moveNode
ParâmetroTipoDescrição
pcKe (I)CharChave do node a mover
pcToKe (I)CharMover para o node
pcMode (I)CharModos possíveis: after, before, parent
pcOptn (I)CharOpção possível: refresh
Move um node origem como filho de outro node destino. Caso o pcMode = "parent" e o node destino seja em branco, ele jogara o node origem como o último node do nível 0.
RUN moveNode IN h-4gltreeview 
(c-codigo-node, c-codigo-node-pai, "after", "refresh").
enableObject
Habilita o treeviewTreeView
RUN enableObject IN h-4gltreeview.
initializeObject
Inicializa o treeviewTreeView
RUN initializeObject IN h-4gltreeview.
destroyObject
Elimina o treeview TreeView da memória.
IF  VALID-HANDLE(h-4gltreeview) THEN DO:
    RUN destroyObject IN h-4gltreeview.
    DELETE PROCEDURE h-4gltreeview.
END.
getFrameTreeview
ParâmetroTipoDescrição
hFrame (O)HandleHandle da frame do treeviewTreeView
Retorna o handle da frame do treeviewTreeView.
RUN getFrameTreeview IN h-4gltreeview 
(OUTPUT hFrameTV).
emptyTree
Zera o conteúdo da treeviewTreeView.
RUN emptyTree IN h-4gltreeview.
applyEntryPassar o parâmetro vazio ("")Faz um entry no treeviewTreeView.
RUN applyEntry IN h-4gltreeview
(INPUT "").
expandBranch
ParâmetroTipoDescrição
pcKe (I)CharChave do node

Expande o node e todos os seus filhos. 

Obs: Caso queria expandir apenas o node (e não os filhos), use a função "expandNode".

RUN expandBranch IN h-4gltreeview
(c-codigo-node).
RUN pi-atualizaTreeview.

getNodeDetails
ParâmetroTipoDescrição
pcKe (I)CharChave do node
Retorna detalhes de um node do treeviewTreeView.
RUN getNodeDetails IN h-4gltreeview
(c-codigo-node, OUTPUT hNdBf).
MESSAGE 
    "id:" hNdBf:BUFFER-FIELD("id"):BUFFER-VALUE SKIP
    "label:" hNdBf:BUFFER-FIELD("lab"):BUFFER-VALUE SKIP
    "ico:" hNdBf:BUFFER-FIELD("ico"):BUFFER-VALUE SKIP
    "level:" hNdBf:BUFFER-FIELD("level"):BUFFER-VALUE SKIP
   "parent:" hNdBf:BUFFER-FIELD("par"):BUFFER-VALUE SKIP
   "prev-sib:" hNdBf:BUFFER-FIELD("pre"):BUFFER-VALUE SKIP
  "next-sib:" hNdBf:BUFFER-FIELD("nex"):BUFFER-VALUE SKIP
  "expand:" hNdBf:BUFFER-FIELD("expanded"):BUFFER-VALUE SKIP
    "optn:" hNdBf:BUFFER-FIELD("optn"):BUFFER-VALUE
    VIEW-AS ALERT-BOX INFO BUTTONS OK.
DELETE OBJECT hNdBf.
hasNodes
ParâmetroTipoDescrição
pcHasN (O)LogicalExiste node
Retorna Verdadeiro ou False se o TreeView possui nodes.
IF DYNAMIC-FUNCTION('hasNodes' IN h-4gltreeview) THEN DO:
MESSAGE "Existe nós na Treeview"
VIEW-AS ALERT-BOX.
END.
getTreeCount
ParâmetroTipoDescrição
pcCount (O)Integerquantidade nodes
Retorna a quantidade de nodes da TreeView.
ASSIGN iTreeCount = 
   DYNAMIC-FUNCTION('getTreeCount' IN h-4gltreeview).
MESSAGE "A Treeview possui " + string(iTreeCount) + " nós !"
VIEW-AS ALERT-BOX.
getNodeParentKey
ParâmetroTipoDescrição
pcKe (I)CharChave do node
pcKePar (O)CharChave do node Pai
Retorna a chave do node Pai do node informado.
ASSIGN cParentKey = 
   DYNAMIC-FUNCTION('getNodeParentKey' IN h-4gltreeview,
c-codigo-node).
selectNode
ParâmetroTipoDescrição
pcKe (I)CharChave do node
pcOk (O)LogicalIndica se foi possível selecionar o node.
Seleciona o node informado.
ASSIGN lOk =
DYNAMIC-FUNCTION('selectNode':U IN h-4gltreeview,
c-codigo-node).
collapseNode
ParâmetroTipoDescrição
pcKe (I)CharChave do node
pcOptn (I)CharOpção possível: refresh
pcOk (O)LogicalIndica se foi possível contrair o node.
Contrai o node informado.
ASSIGN lOk =
DYNAMIC-FUNCTION('collapseNode' IN h-4gltreeview,
c-codigo-node, "refresh").
expandNode
ParâmetroTipoDescrição
pcKe (I)CharChave do node
pcOptn (I)CharOpção possível: refresh
pcOk (O)LogicalIndica se foi possível expandir o node.

Expande o node informado.

Obs: Os filhos não serão expandidos. Para isto, utilize a procedure "expandBranch".

ASSIGN lOk =
DYNAMIC-FUNCTION('expandNode' IN h-4gltreeview,
c-codigo-node, "refresh").
setNodeTag
ParâmetroTipoDescrição
pcKe (I)CharChave do node
pcTag (I)CharUma informação qualquer
pcOk (O)LogicalIndica se foi possível gravar a Tag no node.
Atualiza a TAG do node. A TAG é um campo "coringa", onde pode ser gravada qualquer informação para recuperar depois.
ASSIGN lOk =
DYNAMIC-FUNCTION('setNodeTag' IN h-4gltreeview,
c-codigo-node, "minha informação").
getNodeTag
ParâmetroTipoDescrição
pcKe (I)CharChave do node
pcTag (O)CharA informação gravada na Tag do node.
Retornar a TAG gravada no node.
ASSIGN cNodeTag = 
DYNAMIC-FUNCTION('getNodeTag' IN h-4gltreeview,
c-codigo-node).
MESSAGE "TAG do Nó: " + cNodeTag
VIEW-AS ALERT-BOX.

...

Estamos disponibilizando um exemplo de um programa com thin-templates que utiliza esse componente de treeviewTreeView.

View file
namewmainten.w
height250

...