Originariamente inviato da cla80
Certo può essere una soluzione ma credo sia anche valida la forma di attivare un menu ad albero alternativo rispetto al solito menu.
Puoi aiutarmi indicativamente???
Non sto contestando l'idea di usare una TreeView per accedere alle funzionalità, quando il fatto di ripeterlo per ogni singola form figlia: ne basterebbe uno solo, presente nella form principale.
A parte questo, credo che la soluzione più immediata per eseguire l'azione giusta in base al nodo selezionato, che corrisponde poi al menu, sia quella di memorizzare il riferimento al MenuItem nella proprietà Data del singolo nodo della TreeView.
La proprietà Data di ciascun TTreeNode è adatta a contenere riferimenti ad oggetti e strutture dati esterne in quanto è un "puntatore" (Pointer).
In fase di creazione dell'albero, si potrebbe memorizzare nella proprietà Data di ciascun nodo il riferimento al MenuItem che rappresenta, qualcosa come
codice:
CurrentNode.Data := MainMenu.Items[i];
Quando un nodo viene selezionato, è possibile utilizzare la proprietà Data per risalire alla voce di menu corrispondente e richiamare così l'evento OnClick attraverso il metodo Click fornito dalla classe TMenuItem:
codice:
...
MenuItem := TMenuItem(SelectedTreeNode.Data);
if MenuItem <> nil then
MenuItem.Click;
...
Il codice è a puro titolo esemplificativo e non è verificato, ma serve solo a dare l'idea.
Ciao!