Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Criar Um Diagrama


Pirambu!

Pergunta

21 respostass a esta questão

Posts Recomendados

  • 0
Guest --Jonas --
Alguém sabe como eu poderia fazer para Criar um Diagrama

Ex.: diagrama de um determinado produto "A" que é formado por outros produtos A1 e A2 e são composto por A1.1 E A2.1

Amigo... não deu pra entender ... diagrama ou matriz ? diagrama eu entendo por desenho é isso ?

Link para o comentário
Compartilhar em outros sites

  • 0
QUOTE(--Jonas -- @ 18/08/2007 - 17:38)

diagrama eu entendo por desenho é isso ?

Pirambú!, se enveredar por estas bandas, este componente (free) pode ser útil - TSimpleGraph (download do componente e demo estão no final da página)

Abraços

é isso que estou procurando, vou tentar, depois post o resultado.

Link para o comentário
Compartilhar em outros sites

  • 0
Micheus, é para adicionar uma nova paleta no delphi?

como posso usar?

Você tem que instalar ele.

Após o download, digamos que você extraia os arquivos em uma pasta chamada c:\Delphi\Source\SimpleGraph.

Para instalar o componente, você acessa o menu Component -> Install component..., na janela que aparece, você pode escolher instalar em um pacote já existente (guia: Into existing package) ou em um novo (guia: Into new package). Em Unit file name você selecionar o arquivo fonte do componente, seguindo o exemplo seria "c:\Delphi\Source\SimpleGraph\SimpleGraph.pas".

Conforme opção (pacote existente ou novo), você deverá preencher as outras informações.

Quando clicar em OK, a próxima etapa será utilizar a opção Install para instalar o componente.

Pelo que está no código fonte do mesmo, será criada uma paleta chamada "Delphi Area" com o componente nela. Caso você queira colocá-la em outra paleta (uma já existente), basta que você edite o código fonte antes de instalar o componente. Procure pelo procedimento Register e troque o texto "Delphi Area" na chamada:

RegisterComponents('Delphi Area', [TSimpleGraph]);

para o nome da paleta desejada.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Micheus, conseguir instalar, agora vem as dúvidas, eu consigo vincular a uma tabela?
acredito que não, porque ele não é um componente data-aware (e não conheço outro que seja). Voce terá que gerenciar a integração dos dados da tabela como ele.

Apenas o conheço, utilizei o demo que vem com ele, mas não fiz nada de útil...

Eu poderia até tentar ajudá-lo, mas precisaria entender o que você está fazendo, as estruturas de tabelas (registreos) envolvidos...

Voce vai ter que avançar aos poucos, falou?!

Link para o comentário
Compartilhar em outros sites

  • 0
acredito que não, porque ele não é um componente data-aware (e não conheço outro que seja). Voce terá que gerenciar a integração dos dados da tabela como ele.

tudo em.
Eu poderia até tentar ajudá-lo, mas precisaria entender o que você está fazendo, as estruturas de tabelas (registreos) envolvidos...

Na verdade o que eu estou tentando fazer é montar uma árvore de hierarquia de liderança. talvés você conheça outra forma de representar o que eu estou querendo fazer.

Se realmente não tiver jeito, possa até tentar representar usando trueview, mas não como Relacionar a tabela talvés você possa me ajudar.

Link para o comentário
Compartilhar em outros sites

  • 0
Eu poderia até tentar ajudá-lo, mas precisaria entender o que você está fazendo, as estruturas de tabelas (registreos) envolvidos...

Na verdade o que eu estou tentando fazer é montar uma árvore de hierarquia de liderança. talvés você conheça outra forma de representar o que eu estou querendo fazer.

acho que a utilização do tal componente seria mesmo interessante.

mas não como Relacionar a tabela talvés você possa me ajudar.
você quiz dizer que "não sabe como relacionar a tabela", é isso?

Talvez se você explicar como a "coisa" deveria funcionar, eu ou outro colega possamos lhe ajudar. O que eu imagino ser necessário, pode não estar de acordo com as informações que você tem que que o seu usuário necessita. Tente exemplificar, desenha se for o caso...

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Tente exemplificar, desenha se for o caso...
Ok.

o objetivo como falei e montar uma "árvore de hierarquia de liderança" como exemplo eu tenho um diretor "1" de uma empresa, que tem como subordinado dois gerente: gerente "1" e gerente "2", para o gerente "1" tenho os supervisores 1.1.1 , 1.1.2 e 1.1.3 e para gerente "2" tenho os supervisores 1.2.1, 1.2.2 e 1.2.3, e para cada supervisor tenhos 5 encarregado de produção, 1.1.1.1, 1.1.1.2 e ... e mesmo para o gerente "2".

Resumo.

Eu quero mostrar que na empresa tenho diretor e como subordinado a ele tem dois gerentes e subordinado a cada gerente tenho dois supervidores e subordinado a cada supervisor tenho 5 encarregado.

eu imaginei isso em um diagrama, ficaria ótimo

ou talvés usando um trueview na tabela ficaria como mostrado acima 1.1.1.1 - o primeiro 1 seria o "Diretor", segundo seria "Gerência", o terceiro seria o "Supervisor" o quarto seria o "Encarregado de produção". mas não sei como relacionar uma tabela ao trueview.

Espero ter facilitado a juda. :rolleyes:

Link para o comentário
Compartilhar em outros sites

  • 0
o objetivo como falei e montar uma "árvore de hierarquia de liderança" como exemplo eu tenho um diretor "1" de uma empresa, que tem como subordinado dois gerente: gerente "1" e gerente "2", para o gerente "1" tenho os supervisores 1.1.1 , 1.1.2 e 1.1.3 e para gerente "2" tenho os supervisores 1.2.1, 1.2.2 e 1.2.3, e para cada supervisor tenhos 5 encarregado de produção, 1.1.1.1, 1.1.1.2 e ... e mesmo para o gerente "2".

Resumo.

Eu quero mostrar que na empresa tenho diretor e como subordinado a ele tem dois gerentes e subordinado a cada gerente tenho dois supervidores e subordinado a cada supervisor tenho 5 encarregado.

eu imaginei isso em um diagrama, ficaria ótimo

ficará legal sim. Posso verificar isso com aquele componente apenas amanhã (estou sem tempo hoje)

ou talvés usando um trueview na tabela ficaria como mostrado acima 1.1.1.1 - o primeiro 1 seria o "Diretor", segundo seria "Gerência", o terceiro seria o "Supervisor" o quarto seria o "Encarregado de produção". mas não sei como relacionar uma tabela ao trueview.
esta é a opção mais simples (mas visualmente não é aquilo tudo).

se você tem realmente o campo da tabela formatado do jeito que mostrou, não tem erro:

- faze uma consulta na tabela (via query), ordenando pelo campo em questão. Deve ficar algo assim:

1 (diretor)

1.1 (gerente 1)

1.1.1 (supervisor 1)

1.1.1.1 (encarregado de produção 1)

1.1.1.2 (encarregado de produção 2)

...

1.1.1.5 (encarregado de produção 2)

1.1.2 (supervisor 2)

1.1.3 (supervisor 3)

1.2 (gerente 2)

1.2.1 (supervisor 1)

1.2.2 (supervisor 2)

1.2.3 (supervisor 3)

Percebeu, vai ficar direto na seqüência, daí é só implementar um loop para inserir no nível correto.

Vai pensando aí. Se optar por utilizar o componente de diagrama, então não gaste tempo com isso que coloquei.

Não esqueça de informar o nome das tabelas e campos envolvidos - facilita a exemplificação.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Micheus como poderia fazer para usar um trueview, criar a query eu sei, mas como lincar ao trueview?

Pirambu!, utilizando um arquivo temporário e, é claro, aquela estrutura já citada (ordenação pelo campo em questão) daria para fazer isto de forma simples:

procedure TForm1.Button1Click(Sender: TObject);
var
  SLTree :TStringList;
  IdxPoint :Integer;
  StrAux,
  StrNivel :string;
  TmpFileName :array[0..256] of char;
begin
  ...
  QryHierarquia.Open;
  GetTempFileName('.', 'tre', 0, TmpFileName); // obter nome p/ arquivo temporário
  SLTree := TStringList.Create;
  try
    StrAux := '';
    while not QryHierarquia.EOF do
    begin
      StrNivel := '';  // armazena os TAB equivalente a níveis
      StrAux := QryHierarquiaNOM_NIVEL.AsString;  // aqui vai o campo que contém 1;1.1;1.2;...
      IdxPoint := Pos('.', StrAux);  // localiza marcador de nível
      if IdxPoint > 0 then
      repeat
        Delete(StrAux, 1, IdxPoint +1);
        StrNivel := StrNivel +#9;
        IdxPoint := Pos('.', StrAux);
      until IdxPoint = 0;
      SLTree.Add(StrNivel +QryHierarquiaNOM_NIVEL.AsString);
      QryHierarquia.Next;
    end;
    SLTree.SaveToFile(TmpFileName);  // grava no arquivo temporário
    Treeview1.LoadFromFile(TmpFileName);  // carrega árvore do arquico
    Treeview1.FullExpand;  // mostra arvore expandida
    DeleteFile(TmpFileName);  // elimina arquivo temporário
  finally
    SLTree.Free;
  end;
  QryHierarquia.Close;
end;

Veja se você consegue compreender e implementar. Veja se o resultado é o esperado.

Se for utilizar um algorítmo para inclusão em níveis, então fica um pouco mais complexo, mas tem como.

Link para o comentário
Compartilhar em outros sites

  • 0

Micheus,não deu certo pois tentei fazer desta forma, eu pensei em fazer 4 níveis de herarquias usando 4 tabelas,

colocando vínculos nas tabelas Tb1-> Tb2->Tb3->Tb4. então usei uma query para fazer a lista e com 4 campos

sendo que cada numero estar em um campo ( 1.1.2.1 ). é desta forma mesmo? ou teria outra maneira usando apenas uma tabela ( Paradox)?

Link para o comentário
Compartilhar em outros sites

  • 0
Micheus,não deu certo pois tentei fazer desta forma, eu pensei em fazer 4 níveis de herarquias usando 4 tabelas, colocando vínculos nas tabelas Tb1-> Tb2->Tb3->Tb4. então usei uma query para fazer a lista e com 4 campos sendo que cada numero estar em um campo ( 1.1.2.1 ). é desta forma mesmo? ou teria outra maneira usando apenas uma tabela ( Paradox)?
Pirambu!, qual é a estrutura e nome da tabela em questão?

Link para o comentário
Compartilhar em outros sites

  • 0
QUOTE(Pirambu! @ 29/08/2007 - 13:03)

Micheus,não deu certo pois tentei fazer desta forma, eu pensei em fazer 4 níveis de herarquias usando 4 tabelas, colocando vínculos nas tabelas Tb1-> Tb2->Tb3->Tb4. então usei uma query para fazer a lista e com 4 campos sendo que cada numero estar em um campo ( 1.1.2.1 ). é desta forma mesmo? ou teria outra maneira usando apenas uma tabela ( Paradox)?

Pirambu!, qual é a estrutura e nome da tabela em questão?

A estrutura seria

na tabela 1 teria os campos

Her1ID, + , *

Nome2 , A, 30

na tabela 2

Her1ID, I, *

Her2ID, + , *

Nome2, A, 30

a tabela 2 estaria relacionada com a tabela 1 pelo "Her1ID"

na tabela 3teria os campos

Her2ID, I, *

Her3ID, + , *

Nome3, A, 30

a tabela 3 estaria relacionada com a tabela 2 pelo "Her2ID"

na tabela 4

Her3ID, I, *

Her4ID, + , *

Nome4, A, 30

a tabela 4 estaria relacionada com a tabela 3 pelo "Her3ID"

Então usei uma query1 para fazer a consulta

with query do
begin
Close;
sql.clear;
sql.add('select * from ((tabela1 left join tabela2 on tabela1.her1ID = tabela2.her1ID) left join tabela3 on Tabela2.Her2ID = Tabela3.Her2ID) left join tabela4 on Tabela4.Her3ID = Tabela4.Her3ID');
open;
end;

foi desta forma que tentei.

Micheus, seria assim:

vou usar nome no lugar de cargo

+ Raimundo (Diretor)

+ Pedro (Gerente)

+ Francisco(supervisor)

- Soares(Encarregado)

- Antonio(Encarregado)

Usando Banco de dados do paradox.

Link para o comentário
Compartilhar em outros sites

  • 0

Pirambu!, desculpe a demora.

Eu não achei um meio de lhe explicar como fazer, então implementei a rotina. Não sei se é a melhor ou se é 100% infalível (tem que testar), mas funciona de acordo com o "figurino".

O fato de você utilizar uma estrutura diferente daquela inicialmente comentada, dificultou um pouco as coisas.

Quanto a consulta SQL, utilizando as 4 tabelas, a que você apresentou não retorna o resultado adequadamente. Pelo menos com a base que montei e os testes que fiz. Ela ficou assim:

select T1.Her1ID, T2.Her2ID, T3.Her3ID, T4.Her4ID, Nome1, Nome2, Nome3, Nome4 
from Tabela4 T4 left join Tabela3 T3 on (T4.Her3ID = T3.Her3ID)
                left join Tabela2 T2 on (T3.Her2ID = T2.Her2ID)
                left join Tabela1 T1 on (T2.Her1ID = T1.Her1ID)
order by T1.Her1ID, T2.Her2ID, T3.Her3ID, T4.Her4ID
Com os dados que coloquei nas tabelas, este é o resultado:
1|1|1|1|Raimundo (Diretor) |Pedro (Gerente) |Francisco (Supervisor) |Soares (Encarregado)  |
1|1|1|2|Raimundo (Diretor) |Pedro (Gerente) |Francisco (Supervisor) |Antônio (Encarregado) |
1|1|3|4|Raimundo (Diretor) |Pedro (Gerente) |Jacinto (Supervisor)   |Dionísio (Encarregado)|
2|2|2|3|Tonico (Diretor)   |Mário (Gerente) |Tonico (Supervisor)    |Josefina (Encarregada)|
O código está logo abaixo. Eu utilizei uma função com recursividade para fazer a navegação entre os "ramos da árvore". Veja se com os comentários no código, você consegue entender o funcionamento.
procedure TForm1.Button1Click(Sender: TObject);
 // a função "InsertNode" retorna o nó recém inserido
  function InsertNode(NodeLevel :Integer;  // indica o nível a ser avaliado
                      ParentNode :TTreeNode;  // nó pai
                      NodeName :string) :TTreeNode;  // nome do nó
  var
    LocalNode :TTreeNode;
  begin
   // utilizamos uma variável local para não
   // manipularmos o parâmetro passado
    LocalNode := ParentNode;
    if LocalNode <> nil then
    begin
     // se o nível do nó é inferior ao desejado
      if LocalNode.Level < NodeLevel then
      begin
       // verificamos se o próximo nível ainda não existe
        if LocalNode.GetFirstChild = nil then
         // não existindo, inserimos o novo nó
          Result := TreeView1.Items.AddChild(ParentNode, NodeName)
        else
         // existinhdo, chamamos recursivamente o procedimento
         // passando o primeiro nó do próximo nível
          Result := InsertNode(NodeLevel, LocalNode.GetFirstChild, NodeName);
      end else
      begin
         // salvamos em result o conteúdo do nó antes
         // de buscarmos o próximo
          Result := LocalNode;
         // buscamos os próximo nó "irmão" (no mesmo nível)
          LocalNode := LocalNode.GetNextSibling;
          if (LocalNode <> nil) and
             (LocalNode.Text = NodeName) then
          begin
           // há um nó com o texto encerramos a procura e saímos
            Result := LocalNode;
            Break;
          end;
        end;
       // se não há nó com o nome, adiciona ele
        if (LocalNode = nil) and
           (Result.Text <> NodeName) then
          Result := TreeView1.Items.Add(Result, NodeName);
      end;
    end else
      if NodeLevel = 0 then // adiciona o nó pai na raiz
        Result := TreeView1.Items.Add(nil, NodeName);
  end;
var
  NodeAnt :TTreeNode;
begin
  NodeAnt := nil;
  TreeView1.Items.Clear;
  TreeView1.Items.BeginUpdate;
  QryHierarquia.Open;
  while not QryHierarquia.EOF do
  begin
   // começamos sempre pela raiz -> GetFirstNode
    NodeAnt := InsertNode(0, TreeView1.Items.GetFirstNode, QryHierarquiaNome1.Value);
   // após inserido o nó no 1º nível, inserimos o 2º a partir deste -> NodeAnt
    NodeAnt := InsertNode(1, NodeAnt, QryHierarquiaNome2.Value);
   // após inserido o nó no 2º nível, inserimos o 3º a partir deste -> NodeAnt
    NodeAnt := InsertNode(2, NodeAnt, QryHierarquiaNome3.Value);
   // após inserido o nó no 3º nível, inserimos o 4º a partir deste -> NodeAnt
    InsertNode(3, NodeAnt, QryHierarquiaNome4.Value);

   // avançamos para a próxima linha no resultado
    QryHierarquia.Next;
  end;
  QryHierarquia.Close;
  TreeView1.FullExpand;
  TreeView1.Items.EndUpdate;
end;

Espero que funcione corretamente para o que você quer fazer. Fica aqui anexo as tabelas teste e o código fonte.

Abraços

Project1.zip

Link para o comentário
Compartilhar em outros sites

  • 0
Micheus, ficou ótimo, só mais uma coisa, coloquei em "pagecontrol" como eu faço para mostrar a árvore sem clicar no botão, apenas ao entrar no TabSheet2 onde estar o treeview?
Pirambu!, acredito que você possa utizar no evento OnShow do TabSheet.

Se você ainda vai manter o botão então, no evento OnShow você coloca:

Button1.Click;

Se não vai mais utilizar o botão, então coloca todo o código neste evento.

Como eu disse lá no outro post, o procedimento não deve estar 100% a prova de falhas, mas se você manter o critério da ordenação e sequências das chamadas a InsertNode, tudo deve funcionar perfeitamente.

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...