Clicar no treeview e abrir um item relacionado no menu
Tenho uma rotina para ´jogar´ os item de um MainMenu para um treeview, tudo em tempo de execução. O que eu quero fazer é algo parecido com o programa da receita federal, você seleciona um item do treeview e abre o formulário correspondente, que já foi declarado num item do MainMenu.
Obrigado
Obrigado
Tchoninho
Curtidas 0
Respostas
Motta
26/04/2004
Use o método AddObjects ao invés de simplesmente Add para criar os TTreeNodes, assim vc cria um vinculo com o Menu
AddObjects permite vincular o Node a um objeto, passe o Item de menu neste caso
No evento OnChanching do TreeView faça
TMeNuItem(Node.Data).Click(Nil);
Faça algo parecido, mas não chamo um form, não testei mas creio que funciona...
vide o help para mais detalhes
AddObjects permite vincular o Node a um objeto, passe o Item de menu neste caso
No evento OnChanching do TreeView faça
TMeNuItem(Node.Data).Click(Nil);
Faça algo parecido, mas não chamo um form, não testei mas creio que funciona...
vide o help para mais detalhes
GOSTEI 0
Tchoninho
26/04/2004
Mota,
Tentei mas não deu certo, o código: fica causando erro de violação de acesso.
Se possível me passe parte do código fonte para que eu teste.
Obrigado.
Tentei mas não deu certo, o código:
TMeNuItem(Node.Data).Click(Nil);
Se possível me passe parte do código fonte para que eu teste.
Obrigado.
GOSTEI 0
Motta
26/04/2004
publica o codigo todo
GOSTEI 0
Tchoninho
26/04/2004
Segue o código:
// z é uma variavel púlica z:pointer; procedure TForm1.AualizaTree(tv: TTreeView; fMenuPrinc: TMainMenu; fMenu: TMenu); var i,j,posic:integer; a,b: string; mI,mS: TMenuItem; n,tn: TTreeNode; begin tv.Items.Clear; tn := nil; tn := tv.Items.AddObjectFirst(tn,´Menus liberados´,z); for i := 0 to fMenuPrinc.Items.Count - 1 do begin mI := fMenu.Items[i]; a := mI.Caption; posic := pos(´&´,a); if posic > 0 then Delete(a,posic,1); n := tv.Items.AddObject(tn,a,z); for j := 0 to mI.Count - 1 do begin mS := mI.Items[j]; b := mS.Caption; posic := pos(´&´,b); if posic > 0 then Delete(b,posic,1); if b <> ´-´ then tv.Items.AddObject(n,b,z) end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin AtualizaTree(treeview1,form1.mmenu1,form1.Menu); end; procedure TForm1.sobre1Click(Sender: TObject); begin showmessage(´teste treeview e mainmenu´); end; procedure TForm1.TreeView1Changing(Sender: TObject; Node: TTreeNode; var AllowChange: Boolean); begin z:=tmenuitem(node.Data); end; procedure TForm1.BitBtn1Click(Sender: TObject); begin Tmenuitem(z).Click; end;
GOSTEI 0
Motta
26/04/2004
troque z pelo proprio Item de menu
...
mI := fMenu.Items[i];
a := mI.Caption;
posic := pos(´&´,a);
if posic > 0 then
Delete(a,posic,1);
n := tv.Items.AddObject(tn,a,fMenu.Items[i]);
...
procedure TForm1.TreeView1Changing(Sender: TObject; Node: TTreeNode; var AllowChange: Boolean);
begin
if assigened(node.Data) then
tmenuitem(node.Data).OnClick;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
//
end;
...
mI := fMenu.Items[i];
a := mI.Caption;
posic := pos(´&´,a);
if posic > 0 then
Delete(a,posic,1);
n := tv.Items.AddObject(tn,a,fMenu.Items[i]);
...
procedure TForm1.TreeView1Changing(Sender: TObject; Node: TTreeNode; var AllowChange: Boolean);
begin
if assigened(node.Data) then
tmenuitem(node.Data).OnClick;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
//
end;
GOSTEI 0
Tchoninho
26/04/2004
Motta, não compilou por causa desde comando:
[color=red:00bc0566f1]..if assigened(node.Data) then ..[/color:00bc0566f1]
O delphi não o reconhece.
[color=red:00bc0566f1]..if assigened(node.Data) then ..[/color:00bc0566f1]
O delphi não o reconhece.
procedure TForm1.TreeView1Changing(Sender: TObject; Node: TTreeNode; var AllowChange: Boolean); begin if assigened(node.Data) then tmenuitem(node.Data).OnClick; end;
GOSTEI 0
Motta
26/04/2004
if assigned(node.Data) then
fazer as coisas no bloco di notas ....
fazer as coisas no bloco di notas ....
GOSTEI 0
Tchoninho
26/04/2004
Cara compilou legal mas quando clico no treeview não executa o que esta relacionado no menu;
O código esta abaixo:
[color=darkblue:763bb5ca9f]
[/color:763bb5ca9f]
O código esta abaixo:
[color=darkblue:763bb5ca9f]
procedure TForm1.AtualizaTree(tv: TTreeView; fMenuPrinc: TMainMenu; fMenu: TMenu); var i,j,posic:integer; a,b: string; mI,mS: TMenuItem; n,tn: TTreeNode; begin tv.Items.Clear; i:=0; tn := nil; // tn := tv.Items.AddChildObjectFirst(tn,´Menus liberados´,fMenu.Items[i]); for i := 0 to fMenuPrinc.Items.Count - 1 do begin mI := fMenu.Items[i]; a := mI.Caption; posic := pos(´&´,a); if posic > 0 then Delete(a,posic,1); n := tv.Items.AddChildObject(tn,a,fmenu.items[i]); for j := 0 to mI.Count - 1 do begin mS := mI.Items[j]; b := mS.Caption; posic := pos(´&´,b); if posic > 0 then Delete(b,posic,1); if b <> ´-´ then tv.Items.AddChildObject(n,b,fmenu.items[i]); end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin AtualizaTree(treeview1,form1.mainmenu1,form1.Menu); end; procedure TForm1.TreeView1Changing(Sender: TObject; Node: TTreeNode; var AllowChange: Boolean); begin if assigned(node.Data) then tmenuitem(node.Data).Click; end; procedure TForm1.web1Click(Sender: TObject); begin showmessage(´vc clicou em web ´); end; procedure TForm1.Colar1Click(Sender: TObject); begin showmessage(´vc clicou em colar´); end; procedure TForm1.Abrir1Click(Sender: TObject); begin showmessage(´vc clicou em abrir´); end; procedure TForm1.Fechar1Click(Sender: TObject); begin showmessage(´vc clicou em fechar´); end; end.
GOSTEI 0
Motta
26/04/2004
procedure TForm1.AtualizaTree(tv: TTreeView; fMenuPrinc: TMainMenu;
fMenu: TMenu);
var i,j,posic:integer;
a,b: string;
mI,mS: TMenuItem;
n,tn: TTreeNode;
begin
tv.Items.Clear;
i:=0;
tn := nil;
// tn := tv.Items.AddChildObjectFirst(tn,´Menus liberados´,fMenu.Items[i]);
for i := 0 to fMenuPrinc.Items.Count - 1 do begin
mI := fMenu.Items[i];
a := mI.Caption;
posic := pos(´&´,a);
if posic > 0 then
Delete(a,posic,1);
n := tv.Items.AddChildObject(tn,a,fmenu.items[i]);
for j := 0 to mI.Count - 1 do begin
mS := mI.Items[j];
b := mS.Caption;
posic := pos(´&´,b);
if posic > 0 then
Delete(b,posic,1);
if b <> ´-´ then
tv.Items.AddChildObject(n,b,mI.Items[j]); // <<== aqui vc guarda o objeto que tem a lógica
end;
end;
end;
fMenu: TMenu);
var i,j,posic:integer;
a,b: string;
mI,mS: TMenuItem;
n,tn: TTreeNode;
begin
tv.Items.Clear;
i:=0;
tn := nil;
// tn := tv.Items.AddChildObjectFirst(tn,´Menus liberados´,fMenu.Items[i]);
for i := 0 to fMenuPrinc.Items.Count - 1 do begin
mI := fMenu.Items[i];
a := mI.Caption;
posic := pos(´&´,a);
if posic > 0 then
Delete(a,posic,1);
n := tv.Items.AddChildObject(tn,a,fmenu.items[i]);
for j := 0 to mI.Count - 1 do begin
mS := mI.Items[j];
b := mS.Caption;
posic := pos(´&´,b);
if posic > 0 then
Delete(b,posic,1);
if b <> ´-´ then
tv.Items.AddChildObject(n,b,mI.Items[j]); // <<== aqui vc guarda o objeto que tem a lógica
end;
end;
end;
GOSTEI 0