Árvore de páginas

Versões comparadas

Chave

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

...

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/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 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':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.

...

Bloco de código
titleExemplo de utilização do TreeView
linenumberstrue
// Deficoes do treeview
{utp/ut-4gltreeview.i}

PROCEDURE afterDisplayFields :
   RUN carregaTreeView.
   RUN criaTreeView.
END PROCEDURE.

// Carregando o componente treeview
PROCEDURE carregaTreeView :
   IF NOT VALID-HANDLE(h-4gltreeview) THEN DO:
      // Instancia o treeview
      RUN utp/ut-4gltreeview.w PERSISTENT SET h-4gltreeview.
   
      // Indica a Frame "Pai" do componente
      RUN setParentFrame IN h-4gltreeview (INPUT FRAME fPage0:HANDLE).

      // Inicializa o treeview
      RUN initializeObject IN h-4gltreeview.
   
      // Faz a subscricao dos eventos do treeview
      SUBSCRIBE TO "tvNodeEvent" IN h-4gltreeview.

      // Reposiciona o treeview 
      RUN repositionObject IN h-4gltreeview (6.35, 2.00).

      // Ajusta o tamanho do treeview 
      RUN resizeObject IN h-4gltreeview (10.70, 28.00).
   END.
END PROCEDURE.

// Cria os nodes no treeview
PROCEDURE criaTreeView :
   // Limpa o treeview
   RUN emptyTree IN h-4gltreeview.
   ASSIGN c-codigo-node = "".

   // Logica para criar nos nodes do treeview
   ...
   RUN pi-create-node (cNodeId, cNodeIdPai, cDescNode, cImage, cOptn).
   ...

   // Faz o refresh do treeview
   RUN pi-atualizaTreeview.

   // Coloca o cursor no treeview
   RUN applyEntry IN h-4gltreeview (INPUT "").
END PROCEDURE.

// Procedure executada toda vez que ocorrer um evento de click em um node
PROCEDURE pi-ClickTreeView :
   MESSAGE c-codigo-node VIEW_AS ALERT-BOX.
END PROCEDURE.

// Retira o treeview da memoria
PROCEDURE beforeDestroyInterface :
   IF VALID-HANDLE(h-4gltreeview) THEN DO:
      RUN destroyObject IN h-4gltreeview.
      DELETE PROCEDURE h-4gltreeview.
   END.     

   RETURN "OK":U.
END PROCEDURE.


Programas de exemplo no produto que estão utilizando este componente:

...

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          = noNO
       SENSITIVE       = yesYES.
RUN repositionObject IN h-4gltreeview (2.46, 1.00).    
RUN resizeObject IN h-4gltreeview ( 13.5, 31.00).
Menu Popup
defineDEFINE variableVARIABLE pop-menu       as widget-handle no-undo.create menuAS WIDGET-HANDLE NO-UNDO.
CREATE MENU pop-menu
    assignASSIGN popup-only = trueTRUE
    title TITLE = "POPUP":u.
       CtrlFrame:popup-menu     = pop-menu
CtrlFrame:POPUP-MENU = pop-menu.
Criar a procedure "pi-CtrlPopupTreeview"
apresentada no tópico de procedures da include
PROCEDURE pi-CtrlPopupTreeview :
....
END PROCEDURE.
Jogar o foco para o TreeView
APPLY "Entry":U 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ós e seus filhos
doDO i-cont = 1 toTO chTreeView:Nodes:Count:
   assignASSIGN chTreeView:Nodes(i-cont):Expanded = l-expandeTRUE.
endEND.
RUN expandBranch IN h-4gltreeview (c-codigo-node).
RUN pi-atualizaTreeview.
Seleciontar Selecionar um nó
assignASSIGN chTreeView:SelectedItem = chTreeView:Nodes(1).
chTreeView:Nodes(cChaveNode).
IF NOT ERROR-STATUS:ERROR THENif not error-status:error then
  runRUN CtrlFrame.TreeView.NodeClick
(inputINPUT chTreeView:Nodes:Item("i" + string(1))cChaveNode)).
ASSIGN lOk = DYNAMIC-FUNCTION('selectNode' IN h-4gltreeview,
c-codigo-node).
Verificar se existem nós
IF chTreeView:Nodes:COUNT > 0 THEN DO:
  RUN piExcel IN THIS-PROCEDURE...
END.
IF DYNAMIC-FUNCTION('hasNodes' IN h-4gltreeview) THEN DO:
    RUN piExcel IN THIS-PROCEDURE.
END.
APPLY "ENTRY":U TO btExcel IN FRAME fPage0 THEN DO:
...
END.
Verificar se o nó está expandido
ifIF chTreeView:SelectedItem:Expanded THEN DO:
...
END.
RUN pi-node-is-expanded (INPUT c-codigo-node).
IF RETURN-VALUE = false then cExpande"YES" THEN
...
END.
Pegar a chave do nó selecionado
c-tag-tree = chTreeView:SelectedItem:key().
assign rRow = to-rowid(c-codigo-node).
Monitorar o evento de click
PROCEDURE CtrlFrame.TreeView.NodeClick :
...
END PROCEDURE.
PROCEDURE pi-ClickTreeView :
....
END PROCEDURE.
Incluir um nó
chTreeView:Nodes:Add (,, "i" + string(i-cont), 
string(ttDados.cod-oficial)
+ " - " + ttDados.desc-dimensao, i-img) .
RUN pi-create-node (cNodeId, cNodeIdPai,
string(ttDados.cod-oficial) + " - "
+ ttDados.desc-dimensao, cImage, "") NO-ERROR.
Gravar e recuperar a TAG
assign chTreeView:Nodes:Item ("i" + string(i-cont)):Tag = 
string(rowid(ttDados))
+ ",1," + string(ttDados.r-rowid).
assign rRowid = 
to-rowid(entry(1,chTreeView:SelectedItem:Tag)).
DYNAMIC-FUNCTION('setNodeTag' IN h-4gltreeview, 
cNodeId, ttDados.p-image).
assign rRow = to-rowid(entry(1,
DYNAMIC-FUNCTION('getNodeTag' IN h-4gltreeview, c-codigo-node))).

Criar um relacionamento entre a

TreeView e a TempTable de Negócio

assign rRow =
to-rowid(entry(1,chTreeView:SelectedItem:Tag))
assign rRow       = to-rowid(c-codigo-node).
Definir a imagem do nó


06. TELAS DO TREEVIEW
Âncora
telas
telas

...