Árvore de páginas

Versões comparadas

Chave

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

...

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 NO-ERROR.
   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.

...

05. DICAS DE CONVERSÃO DO OCX PARA O 4GLTREEVIEW

xxxx

...

Segue abaixo uma tabela com algumas dicas para facilitar o processo de conversão dos programas que atualmente utilizar o TreeView OCX.

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 PROCEDURE control_load :RUN carregaTreeView.
Posicionar a Treeview na telaCREATE 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":u.

       CtrlFrame:popup-menu     = pop-menu

PROCEDURE pi-CtrlPopupTreeview :

....

END PROCEDURE.

Jogar o foco para o TreeViewAPPLY "Entry":U TO CtrlFrame.
Apagar os nós do TreeViewChTreeView:Nodes:Clear().RUN emptyTree IN h-4gltreeview.
Expandir o nós e filhos        do i-cont = 1 to chTreeView:Nodes:Count:
           assign chTreeView:Nodes(i-cont):Expanded = l-expande.
        end.
        RUN expandBranch IN h-4gltreeview (c-codigo-node).
        RUN pi-atualizaTreeview.  
Seleciontar um nó

    assign chTreeView:SelectedItem = chTreeView:Nodes(1).

    if not error-status:error then
        run CtrlFrame.TreeView.NodeClick (input chTreeView:Nodes:Item("i" + string(1))).


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.
Verificar se o nó está expandido           assign exp-con:label = if chTreeView:SelectedItem:Expanded = false then cExpande
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



07. DOCUMENTAÇÃO COMPLEMENTAR DO COMPONENTE

...