Árvore de páginas

Versões comparadas

Chave

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

...

  1. Visão Geral
  2. Procedures do Include ut-4gltreeview.i (facilitador)
  3. Procedures e Funções do Componente
  4. Exemplo de Utilização
  5. Dicas de Conversão do OCX para o utl4gltreeview4glTreeView
  6. Telas do TreeView
  7. Documentação Complementar do 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          = 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 node 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 node
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 nodes
IF chTreeView:Nodes:COUNT > 0 THEN DO:
  ...
END.
IF DYNAMIC-FUNCTION('hasNodes' IN h-4gltreeview) THEN DO:
...
END.
Verificar se o node 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 node 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 node
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 um ícone para o node
Utiliza o componente ImageList para determinar o ícone
do node, 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).
Os 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, existe um conjunto de 4 arquivos de
imagem. Por exemplo, para o ícone "user", são utilizados os
seguintes arquivos de imagens:
user.bmp - Somente ícone (raiz)
userMinus.bmp - Símbolo de menos e ícone (expandido com filhos)
usersNoSignuserNoSign.bmp - Ícone com deslocamento p/ direita (sem filhos)
usersPlususerPlus.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).

...