Árvore de páginas

Versões comparadas

Chave

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

...

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 utilizada como ícone 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
addNode *
ParâmetrosTipoDescrição
pcKe (I)CharChave do node
pcKePar (I)CharChave Pai do node
pcLabel (I)CharLabel do node
pcIco (I)CharÍcone do node
pcOptn (I)CharParâmetros do node

Adiciona um node no TreeView.

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/treeview/tvpics/book02.bmp","").
 RUN addNode IN h-4gltreeview
("n222","n22","node222",
"image/treeview/tvpics/book02.bmp","").
  RUN addNode IN h-4gltreeview
("n3","","node3",
"image/treeview/tvpics/present1.bmp","expanded").
  RUN addNode IN h-4gltreeview
("n31","n3","node31",
"image/treeview/tvpics/$SDO.bmp","").
 RUN addNode IN h-4gltreeview
("n4","","node4",
"image/treeview/tvpics/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 o node informado.
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 TreeView.
RUN enableObject IN h-4gltreeview.
initializeObject
Inicializa o TreeView.
RUN initializeObject IN h-4gltreeview.
destroyObject
Elimina o 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 TreeView
Retorna o handle da frame do TreeView.
RUN getFrameTreeview IN h-4gltreeview 
(OUTPUT hFrameTV).
emptyTree
Zera o conteúdo da TreeView.
RUN emptyTree IN h-4gltreeview.
applyEntryPassar o parâmetro vazio ("")Faz um entry no TreeView.
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 do node do informado.
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 possuir nodes.
IF DYNAMIC-FUNCTION('hasNodes' IN h-4gltreeview) THEN DO:
MESSAGE "Existe Nós no Treeview"
VIEW-AS ALERT-BOX.
END.
getTreeCount
ParâmetroTipoDescrição
pcCount (O)Integerquantidade nodes
Retorna a quantidade de nodes do 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' 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").
isNodeExpanded
ParâmetroTipoDescrição
pcKe (I)CharChave do node
pcExpend (O)LogicalIndica se o node informado está expandido.

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

IF DYNAMIC-FUNCTION('isNodeExpanded' IN h-4gltreeview, 
c-codigo-node) THEN
 MESSAGE "O NÓ ESTÁ EXPANDIDO"
VIEW-AS ALERT-BOX.
ELSE
  MESSAGE "O NÓ NÃO ESTÁ EXPANDIDO"
VIEW-AS ALERT-BOX.
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.

...

ProcessoOCX4glTreeView
Definição de Variáveis
DEFINE VARIABLE chTreeView  AS COM-HANDLE       NO-UNDO.
DEFINE VARIABLE CtrlFrame AS WIDGET-HANDLE NO-UNDO.
DEFINE VARIABLE chCtrlFrame AS COMPONENT-HANDLE NO-UNDO.
// Definições Treeview
{utp/ut-4gltreeview.i}
Carregar o TreeView
Carrega o OCX através da procedure "control_load".
Criar um procedure como exemplo da "carregaTreeView"
apresentada no tópico de exemplo.
Posicionar a TreeView na tela
CREATE CONTROL-FRAME CtrlFrame ASSIGN
       FRAME           = FRAME fpage0:HANDLE
       ROW             = 2.46
       COLUMN          = 1
       HEIGHT          = 13.5
       WIDTH           = 31
     HIDDEN          = NO
     SENSITIVE       = YES.
RUN repositionObject IN h-4gltreeview (2.46, 1.00).
RUN resizeObject IN h-4gltreeview (13.5, 31.00).
Menu Popup
DEFINE VARIABLE pop-menu AS WIDGET-HANDLE NO-UNDO.
CREATE MENU pop-menu
  ASSIGN popup-only = TRUE
  TITLE = "POPUP".
CtrlFrame:POPUP-MENU = pop-menu.
Criar a procedure "pi-CtrlPopupTreeview"
apresentada no tópico de procedures da include.
Jogar o foco para o TreeView
APPLY "Entry" TO CtrlFrame.
RUN applyEntry IN h-4gltreeview (INPUT "").
Apagar todos os nós do TreeView
ChTreeView:Nodes:Clear().
RUN emptyTree IN h-4gltreeview.
Expandir o nó e seus filhos
DO i-cont = 1 TO chTreeView:Nodes:Count:
  ASSIGN chTreeView:Nodes(i-cont):Expanded = TRUE.
END.
RUN expandBranch IN h-4gltreeview (c-codigo-node).
RUN pi-atualizaTreeview.
Selecionar um nó
ASSIGN chTreeView:SelectedItem = 
chTreeView:Nodes(cNodeId).
IF NOT ERROR-STATUS:ERROR THEN
  RUN CtrlFrame.TreeView.NodeClick
(INPUT chTreeView:Nodes:Item(cNodeId)).
ASSIGN lOk = DYNAMIC-FUNCTION('selectNode' IN h-4gltreeview,
c-codigo-node).
Verificar se existem nós
IF chTreeView:Nodes:COUNT > 0 THEN DO:
  ...
END.
IF DYNAMIC-FUNCTION('hasNodes' IN h-4gltreeview) THEN DO:
...
END.
Verificar se o nó está expandido
IF chTreeView:SelectedItem:Expanded THEN DO:
...
END.
IF DYNAMIC-FUNCTION('isNodeExpanded' IN h-4gltreeview, 
c-codigo-node) THEN DO:
...
END.
Pegar a chave do nó selecionado
ASSIGN cNodeId = chTreeView:SelectedItem:key().
ASSIGN cNodeId = c-codigo-node.
Monitorar o evento de click
PROCEDURE CtrlFrame.TreeView.NodeClick :
...
END PROCEDURE.
Criar a procedure "pi-ClickTreeView"
apresentada no tópico de procedures da include.
Incluir um nó
chTreeView:Nodes:Add (cNodeIdPai,
4,
                     cNodeId,
cNodeLabel,
iNodeimage).
RUN pi-create-node (cNodeId, 
cNodeIdPai,
cNodeLabel,
cNodeImage,
cNodeOptn).
Gravar e recuperar a TAG
// Gravar TAG
ASSIGN chTreeView:Nodes:Item(cNodeId):Tag =
STRING(ROWID(ttDados)).

// Recuperar TAG
ASSIGN rRowid =
TO-ROWID(hTreeView:Nodes:Item(cNodeId):Tag).
// Gravar TAG
ASSIGN lOk = DYNAMIC-FUNCTION('setNodeTag' IN h-4gltreeview,
cNodeId, STRING(ROWID(ttDados)).

// Recuperar TAG
ASSIGN rRowid =
TO-ROWID(DYNAMIC-FUNCTION('getNodeTag' IN h-4gltreeview,
                            cNodeId))).

Criar um relacionamento entre a TreeView e a TempTable de Negócio

De preferencia por utilizar o Rowid como chave do Node,
desta forma, fica mais fácil de achar o Node a partir
da Temp-Table.
Mas, também é possível utilizar a TAG para armazenar o
Rowid.
De preferencia por utilizar o Rowid como chave do Node,
desta forma, fica mais fácil de achar o Node a partir
da Temp-Table.
Mas, também é possível utilizar a TAG para armazenar o
Rowid.
Definir a imagem do nóum ícone para o node
Utiliza o componente ImageList para determinar o arquivoícone
dedo imagemnode, associando informando o arquivo de imagem e associando
a um índice numérico.
No momento de criar o node, envia este índice.:

FILE-INFO:FILE-NAME =
SUBSTRING(SEARCH("image\conecta.ico"),1,
R-INDEX(SEARCH("image\conecta.ico"),"~\")).
chImageList:ListImages:Add(5,,
  LOAD-PICTURE(FILE-INFO:PATHNAME + "/" +
"conecta.ico")).
chTreeView:Nodes:Add(,, cNodeId, cNodeLabel, 5). As
imagens utilizadasOs arquivos de imagem, utilizados pelo componente para determinar
o ícone do node, estão disponíveis na
pasta:
image\treeview\tvpics

Sendo que, para cada "ícone" usado no node, existemexiste um
conjunto de 4 5arquivos imagensde
imagem.
Por exemplo, para o ícone "user", são utilizadas as utilizados os
seguintes arquivos de imagens:
user.bmp
userMinus.bmp
usersNoSign.bmp
usersPlus.bmp
xxxxxxx
minus.bmp
plus.bmp - Somente ícone (raiz)
userMinus.bmp - Símbolo de menos e ícone (expandido com filhos)
usersNoSign.bmp - Ícone com deslocamento p/ direita (sem filhos)
usersPlus.bmp - Símbolo de mais e ícone (contraído com filhos)

No momento de criar o node, deve-se sempre informar o arquivo
raiz, desta forma o componente irá carregar os demais arquivos
conforme a necessidade:
RUN pi-create-node (cNodeId, "", cNodeLabel,
"image/treeview/tvpics/user.bmp", "").

Caso o ícone necessário não exista, deverão ser criados os
arquivos de imagem, na pasta descrita acima, e seguindo o mesmo
padrão de nomenclatura de ícone e sufixos (Minus, NoSign e Plus).


06. TELAS DO TREEVIEW
Âncora
telas
telas

...