MainMenu em Banco

Delphi

18/04/2013

Bom dia pessoal,

Estou precisando gravar a estrutura do MainMenu numa tabela:

Codigo - Integer
Descricao - Varchar(30)
CodigoPai - Integer

A tabela é essa, mas podem sugerir outras. Preciso pegar os menus e sub-menus e gravar no banco de dados.

Obrigado.
Frederico Brigatte***

Frederico Brigatte***

Curtidas 0

Respostas

Frederico Brigatte***

Frederico Brigatte***

18/04/2013

O banco é Firebird.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Rapaz, qual é a real necessidade?
Pelo que vi, você já tem vários posts abertos sobre isso. Você está tentando implementar um controle de acesso?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Quero gravar a estrutura do mainmenu com os itens e sub-itens no banco de dados. Isso que preciso por enquanto.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

A ideia é fazer um procedimento recursivo, como você já deve saber. Por exemplo:

procedure TForm2.CriarNoTreeView(item: TMenuItem);
var
  i: Integer;
begin
  //dataSet.fieldbyname('descricao').value := item.caption
  //...gravar o que precisar
  for i := 0 to item.Count -1 do
  begin
    CriarNoTreeView(item.Items[i]);
  end;
end;

Note que primeiramente se grav o item no banco e em seguida repetimos o processo para os filhos desse item.

Para chamar o método, poderia ser feito o seguinte:
  for i := 0 to MainMenu1.Items.Count -1 do
  begin
    CriarNoTreeView(MainMenu1.Items[i]);
  end;
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Obrigado Joel,

No código abaixo nas parte comentada é onde vai gravar?

//dataSet.fieldbyname('descricao').value := item.caption
//...gravar o que precisar

Como seria a parte de gravar?

procedure TForm2.CriarNoTreeView(item: TMenuItem);
var
i: Integer;
begin
//dataSet.fieldbyname('descricao').value := item.caption
//...gravar o que precisar
for i := 0 to item.Count -1 do
begin
CriarNoTreeView(item.Items[i]);
end;
end;
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Joel, acho que faltou o Post no código. Ficaria assim?

procedure TForm2.CriarNoTreeView(item: TMenuItem);
var
i: Integer;
begin
//dataSet.fieldbyname('descricao').value := item.caption
//...gravar o que precisar
  dataSet.Post;
for i := 0 to item.Count -1 do
begin
CriarNoTreeView(item.Items[i]);
end;
end;

GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Exato, é só gravar da forma mais comum possível. Preenche os campos do DataSet e dá um post.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Faltou também o

   DataSet.Append;


Precisa também do

   DataSet.ApplyUpdates(0); 


no final do código, né?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Isso, amigo... tudo que você usa pra inserir um registro como outro qualquer.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Ok, vou fazer o teste aqui. Em qual evento posso colocar esse código para que seja automático? E fazer apenas uma vez.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Uma duvida:

Como ficaria a linha para gravar o Codigo e CodigoPai no banco?

A tabela é assim:

Codigo - Integer
Descricao - Varchar
CodigoPai - Integer
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Nessa linha, certo?

dataSet.fieldbyname('codigo').value := item.caption    // aqui não sei como fica
dataSet.fieldbyname('descricao').value := item.caption
dataSet.fieldbyname('codigopai').value := item.caption // aqui não sei como fica

GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Aí depende. O que é esse "código"? É um auto incremento? É o nome do componente? O que é?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Ta certo assim ou teria que ter mais alguma coisa pra gravar os códigos?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Não deixa de estar certo, mas aí está gravando o mesmo valor nos três campos. O QUE É O CÓDIGO?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Código seria um número do menu, pode ate ser auto-numerico, codigo-pai seria a que menu corresponde o item, por exemplo:

Cadastro
Clientes
xxxxx - Menu qualquer dentro de clientes


Vc teria alguma sugestão para montar a tabela?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Rapaz, eu armazenaria o NOME do menu. Afinal, é uma propriedade única de cada elemento. E depois você pode acessar qualquer objeto pela função FindComponent(nome).
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Dessa forma daria pra fazer assim:
dataSet.fieldbyname('nome').value := item.name;
dataSet.fieldbyname('descricao').value := item.caption;
if Assigned(item.Parent) then
dataSet.fieldbyname('nome_pai').value := item.Parent.name
else
dataSet.fieldbyname('nome_pai').value := '';//Não tem pai, é do primeiro nível
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Esse código ai colocaria onde?


Fiz assim:

procedure TForm1.CriarNoTreeView(item: TMenuItem);
var
i: Integer;
begin
Menu.Append;
Menu.fieldbyname('descricao').value := item.caption
Menu.Post;
for i := 0 to item.Count -1 do
begin
CriarNoTreeView(item.Items[i]);
end;
end;





procedure TForm1.btnGravarClick(Sender: TObject); // Botão
begin

end;



GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Então o campo CodigoPai na tabela não precisa?

Somente Codigo e Descricao?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Esse código coloco no CriarNoTreeview?

A tabela ficaria assim:

Codigo ---- teria esse? Integer
Nome ---- Varchar
Descricao ---- Varchar
Nome_Pai ---- Seria Varchar???
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Joel,

Não estou conseguindo montar aqui. Como que ficaria o banco a procedure e a chamada dela?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Não vejo necessidade do Código nesse caso. E para o nome, sim, é varchar.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Então como ficaria a tabela, a procedure e a chamada de um botão, por exemplo?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

A tabela é como você sugeriu, tirando apenas o código. E o código pra salvar você já tem, aí nas postagens anteriores, é só adaptar.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Fiz assim:

procedure TForm1.CriarNoTreeView(item: TMenuItem);
var
i: Integer;
begin
for i := 0 to item.Count -1 do
begin
Menu.Append;
Menu.fieldbyname('descricao').value := item[i].caption;
Menu.Post;
CriarNoTreeView(item.Items[i]);
end;

end;



procedure TForm1.btnGravarClick(Sender: TObject);
begin
  CriarNoTreeView(MainMenu1.Items);
end;



Não está gravando os Sub-Menus, gravou apenas o primeiro item do sub-menu. Meu Menu está assim:

Administração
Cadastro
Clientes
Funcionários
Serviços
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Gravou até Clientes.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

E esse código aqui, onde coloco?


dataSet.fieldbyname('nome').value := item.name;
dataSet.fieldbyname('descricao').value := item.caption;
if Assigned(item.Parent) then
dataSet.fieldbyname('nome_pai').value := item.Parent.name
else
dataSet.fieldbyname('nome_pai').value := '';//Não tem pai, é do primeiro nível
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Como eu disse no início, é preciso chamar essa função em um loop:

GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Como eu disse no início, para chamar essa função é preciso fazer um loop no primeiro nível do menu:

for i := 0 to item.Count -1 do
begin
CriarNoTreeView(item.Items[i]);
end;
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

E esse código aqui, onde coloco?


dataSet.fieldbyname('nome').value := item.name;
dataSet.fieldbyname('descricao').value := item.caption;
if Assigned(item.Parent) then
dataSet.fieldbyname('nome_pai').value := item.Parent.name
else
dataSet.fieldbyname('nome_pai').value := '';//Não tem pai, é do primeiro nível


Cara, esse é o código pra preencher o dataset, considerando a nova estrutura da sua tabela. Logo, você vai botar entre o append e o post, certo?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Fiz assim, veja se está correto:

procedure TForm1.CriarNoTreeView(item: TMenuItem);
var
i: Integer;
begin
for i := 0 to item.Count -1 do
begin
Menu.Append;

Menu.fieldbyname('nome').value := item[i].name;
Menu.fieldbyname('descricao').value := item[i].caption;
if Assigned(item.Parent) then
Menu.fieldbyname('nome_pai').value := item[i].Parent.name
else
Menu.fieldbyname('nome_pai').value := '';//Não tem pai, é do primeiro nível
Menu.Post;

CriarNoTreeView(item.Items[i]);
end;

end;





procedure TForm1.btnGravarClick(Sender: TObject);
begin
  CriarNoTreeView(MainMenu1.Items);
end;

GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

O que estou fazendo de errado?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Joel, desse jeito gravou, só não entendi como gravar o NomePai:

procedure TForm1.mtdLoopingRecursivo(aoMenuItem: TMenuItem);
var
i: Integer;
begin
Menu.Open;
for i := 0 to aoMenuItem.Count -1 do
begin
  Menu.Append;
  MenuNome.AsString := aoMenuItem.Items[i].Name;
  MenuDescricao.AsString := AnsiReplaceStr(aoMenuItem.Items[i].Caption, '&', EmptyStr);
  // Se tiver mais campos, coloque aqui
  Menu.Post;
  mtdLoopingRecursivo(aoMenuItem.Items[i]);
end;
end;

procedure TForm1.btnGravarClick(Sender: TObject);
begin
  mtdLoopingRecursivo(MainMenu1.Items);
  showMessage('Inclusão efetuada com sucesso !');
end;


GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Essa parte:
Menu.fieldbyname('nome').value := item[i].name;
Menu.fieldbyname('descricao').value := item[i].caption;
if Assigned(item.Parent) then
Menu.fieldbyname('nome_pai').value := item[i].Parent.name
else
Menu.fieldbyname('nome_pai').value := '';//Não tem pai, é do primeiro nível
Menu.Post;


Fica DENTRO do método CriarNoTreView, lá onde eu tinha comentado.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

O correto é:
procedure TForm1.CriarNoTreeView(item: TMenuItem);
var
i: Integer;
begin

Menu.Append;

Menu.fieldbyname('nome').value := item[i].name;
Menu.fieldbyname('descricao').value := item[i].caption;
if Assigned(item.Parent) then
Menu.fieldbyname('nome_pai').value := item[i].Parent.name
else
Menu.fieldbyname('nome_pai').value := '';//Não tem pai, é do primeiro nível
Menu.Post;

for i := 0 to item.Count -1 do
begin
CriarNoTreeView(item.Items[i]);
end;

end;
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

É fora do laço mesmo?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Som, pois esse código será executado uma vez a cada chamada da função, que será repetida devido à recursividade aplicada.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Ok, vou testar aqui e ja posto o resultado
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

E a chamada da procedure no botão, como fica?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Como eu disse no início:
for i := 0 to MainMenu1.Items.Count -1 do
begin
CriarNoTreeView(MainMenu1.Items[i]);
end;
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

No botão, certo?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Amigo, uma dica: TESTE. Você precisa arriscar e SE DER ERRADO, aí buscar a solução.
Coloque esse código no botão ou em qualquer outro lugar que vá realizar a gravação do menu no banco.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Já fiz o teste, deu erro de LIST INDEX OUT OF BOUNDS. O código ta assim:

procedure TForm1.CriarNoTreeView(item: TMenuItem);
var
  i: Integer;
begin

  Menu.Append;
  Menu.fieldbyname('nome').value := item[i].name;
  Menu.fieldbyname('descricao').value := item[i].caption;
  if Assigned(item.Parent) then
    Menu.fieldbyname('nome_pai').value := item[i].Parent.name
  else
    Menu.fieldbyname('nome_pai').value := '';//Não tem pai, é do primeiro nível
    Menu.Post;

 for i := 0 to item.Count -1 do
 begin
    CriarNoTreeView(item.Items[i]);
 end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  i : Integer;
begin
   for i := 0 to MainMenu1.Items.Count -1 do
   begin
     CriarNoTreeView(MainMenu1.Items[i]);
   end;
end;

GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Não tem aquele indexador [i] no item. O correto é
dataSet.fieldbyname('nome').value := item.name;
dataSet.fieldbyname('descricao').value := item.caption;
if Assigned(item.Parent) then
dataSet.fieldbyname('nome_pai').value := item.Parent.name
else
dataSet.fieldbyname('nome_pai').value := '';//Não tem pai, é do primeiro nível


Repare que é item.name e não item[i].name, por exemplo.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Vou testar agora. Já posto a resposta
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Ok, funcionou, só uma dúvida, se tivesse o campo Codigo_Pai na tabela, como pegaria esse valor? Seria o [i], certo?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Se por acaso a tabela fosse assim:

Codigo - Integer
Descricao - Varchar(30)
CodigoPai - Integer


Exemplo do Menu:

Opção 1
Opção 1.1
Opção 1.2
Opção 1.3
Opção 1.3.1
Opção 1.3.2
Opção 2
Opção 2.1

Codigo Descricao Codigo_Pai
1 Opção 1 0
2 Opção 1.1 1
3 Opção 1.2 1
4 Opção 1.3 1
5 Opção 1.3.1 4
6 Opção 1.3.2 4
7 Opção 2 0
8 Opção 2.1 7

É isso que estou querendo gravar no banco.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Bom, cara, esse "Código" originalmente não existe. Você teria de dar um jeito de ir montando esse código de acordo com o nível do menu, usando um contador qualquer.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

O Código poderia ser auto-numérico.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

O problema está em pegar o valor do CodigoPai. Não sei qual propriedade é para gravar no banco.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

É como eu lhe disse: esse código NÃO EXISTE no componente, entende? Por isso eu sugeri usar a propriedade Name, que é única para cada componente.
Você pode criar um auto incremento ou bolar uma estrategia, como eu falei, pra ir montando esse código a cada nível do menu.
Repetindo: NÃO EXISTE UM "CÓDIGO" desse tipo no componente.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Entendi, e como bolaria isso, to tentado a noite toda isso. Me da mais uma ajuda.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Como poderia bolar uma solução para esse problema?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

E ai, alguma solução para esse problema?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Empaquei nisso, alguém ajuda? Como que faria de um jeito que pudesse mostrar num dgrid ou treeview esses dados? Minha tabela está assim no momento:

Nome
Descricao
Nome_Pai

Todos varchar
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Cara, eu não estou podendo ver isso agora, mas mais tarde tentarei dar um jeito pra você. Com relação a esse treeview, você já abriu um tópico pra isso, então vamos manter o foco da questão que estamos tratando aqui. Depois vemos essa questão do treeview.
Abraço e até já.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Ok, vamos por parte então, aguardo um retorno seu, Joel, obrigado.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

E ai Joel, alguma novidade?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Vamos lá. Para começar, eu adicionei um parâmetro no método. Que fica assim:
procedure TForm2.CriarNoTreeView(item: TMenuItem; nivel:string );
var
  i: Integer;
begin
  //aqui agora, além de preencher o dataset como já está sendo feito, vc pode usar mais um campo e prenchelo com a variável "nivel"
  for i := 0 to item.Count -1 do
  begin
    CriarNoTreeView(item.Items[i], nivel+inttostr(i+1)+'.');
  end;
end;


E a chamada agora fica:
  for i := 0 to MainMenu1.Items.Count -1 do
  begin
    CriarNoTreeView(MainMenu1.Items[i], inttostr(i+1)+'.');
  end;


Teste aí.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

No seu caso, deve ficar parecido com isto:
procedure TForm1.CriarNoTreeView(item: TMenuItem; nivel:string );
var
	i: Integer;
begin
	Menu.Append;

	//adicionada essa linha, ou algo equivalente para gravar esse novo campo
	Menu.fieldbyname('CODIGO').value := nivel;


	Menu.fieldbyname('nome').value := item.name;
	Menu.fieldbyname('descricao').value := item.caption;
	if Assigned(item.Parent) then
		Menu.fieldbyname('nome_pai').value := item.Parent.name
	else
		Menu.fieldbyname('nome_pai').value := '';//Não tem pai, é do primeiro nível
	Menu.Post;

	for i := 0 to item.Count -1 do
	begin
		CriarNoTreeView(item.Items[i]);
	end;
end
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

No banco o Codigo_Pai ta número, troca la pra texto?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Não é Codigo_Pai. Aí no caso é o código do item em si. E como é string, obviamente vai ser varchar no banco.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Ta dando erro nessa linha ao compilar:

CriarNoTreeView(item.Items[i], nivel+inttostr(i+1)+'.');
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Fiz assim:

procedure TForm1.CriarNoTreeView2(item: TMenuItem; nivel:string);
var
i: Integer;
begin
  Menu2.Append;
  Menu2.fieldbyname('CODIGO').value := nivel;
  Menu2.fieldbyname('Descricao').value := item.caption;
  if Assigned(item.Parent) then
    Menu2.fieldbyname('Nome_Pai').value := item.Parent.name
  else
    Menu2.fieldbyname('Nome_Pai').value := '';//Não tem pai, é do primeiro nível
    Menu2.Post;
  for i := 0 to item.Count -1 do
  begin
    CriarNoTreeView(item.Items[i], nivel+inttostr(i+1)+'.');
  end;
end;


procedure TForm1.Button2Click(Sender: TObject);
var
  i : Integer;
begin
 for i := 0 to MainMenu1.Items.Count -1 do
 begin
  CriarNoTreeView(item.Items[i], nivel+inttostr(i+1)+'.');
 end;
end;

GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Fiz assim, arrumei uma coisa errada:

procedure TForm1.CriarNoTreeView2(item: TMenuItem; nivel:string);
var
i: Integer;
begin
  Menu2.Append;
  Menu2.fieldbyname('CODIGO').value := nivel;
  Menu2.fieldbyname('Descricao').value := item.caption;
  if Assigned(item.Parent) then
    Menu2.fieldbyname('Nome_Pai').value := item.Parent.name
  else
    Menu2.fieldbyname('Nome_Pai').value := '';//Não tem pai, é do primeiro nível
    Menu2.Post;
  for i := 0 to item.Count -1 do
  begin
    CriarNoTreeView2(item.Items[i], nivel+inttostr(i+1)+'.');
  end;
end;


procedure TForm1.Button2Click(Sender: TObject);
var
  i : Integer;
begin
 for i := 0 to MainMenu1.Items.Count -1 do
 begin
  CriarNoTreeView2(item.Items[i]); // Ta dando erro aqui
 end;
end;
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Que erro?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Tá, então tá dando certo agora?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Não estava em casa. Ta dando erro.

Undeclared identifier: item

procedure TForm1.Button2Click(Sender: TObject);
var
  i : Integer;
begin
 for i := 0 to MainMenu1.Items.Count -1 do
 begin
   CriarNoTreeView2(item.Items[i]); // para nessa linha
 end;
end;
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Oi Joel, postei o erro.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Ta simples. Nesse código, troque item por MainMenu1.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Ainda deu erro.

Not enough actual parameters.

procedure TForm1.Button2Click(Sender: TObject);
var
  i : Integer;
begin
 for i := 0 to MainMenu1.Items.Count -1 do
 begin
   CriarNoTreeView2(MainMenu1.Items[i]);
 end;
end;
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Velho, você não fez o que eu falei:

for i := 0 to MainMenu1.Items.Count -1 do
begin
CriarNoTreeView(MainMenu1.Items[i], inttostr(i+1)+'.');
end;


Se foi adicionado um parâmetro, tem de passar, né?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Ok, ja arrumei. Tinha que declarar a variável nivel também, fiz isso e funcionou.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Ou não precisa do nivel? Eu coloquei e funcionou

procedure TForm1.Button2Click(Sender: TObject);
var
  i : Integer;
  nivel : String;
begin
 for i := 0 to MainMenu1.Items.Count -1 do
 begin
//   CriarNoTreeView2(MainMenu1.Items[i]);
     CriarNoTreeView2(MainMenu1.Items[i], nivel+inttostr(i+1)+'.');
 end;
end;
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Joel, Não precisa colocar a var nivel?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Não, amigo. Não esse ponto.
Tanto que esse nivel aí tá sempre vazio, ou seja, não vei interferir.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Eu tirei, e funcionou beleza.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Acho que poderia encerrar esse tópico e passar para o Treeview, o que acha?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Você falou, está falado.
Depois vejo o do TreeView e tento te ajudar, pois só terei acesso ao Delphi na segunda-feira.
Tópico Concluído.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Ok, sabe o que quero, né? Montar o TreeView com as informações que foram gravadas no banco desse exemplo.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Muito obrigado pela sua ajuda nesse tópico. Vamos atacar o próximo. Quer que eu já abra o tópico?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Você já abriu o tópico. Depois eu vejo lá.
Fique tranquilo e já vou adiantando que não vou poder ajudar até segunda-feira, infelizmente, pois não tenho Delphi aqui.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Nem lembro mais que tópico que abri. Ok, fico no aguardo.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

18/04/2013

Joel Rodrigues, esqueceu de mim?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

18/04/2013

Tópico CONCLUÍDO.
GOSTEI 0
POSTAR