PDA

Visualizza la versione completa : [delphi] - Avvio Programmi TreeView


cla80
17-05-2004, 14:23
Ho inserito in una treeview tutte le voci di menu contenenti i programmi.
Su di una form ho la MDI - Form ove è presente il MainMenu Principale dove si avviano i programmi.
In Un altra Form ho prelevato tutte le voci di menu e ho inserito il tutto in una TreeView. es. nel nodo File ho il sottonodo Archivi.

Come faccio ad avviare i programmi da questa form, semplicemente cliccando sulla TreeView.

Grazie Claudio

P.S. sei un grande Alka.

cla80
17-05-2004, 15:44
Aiuto

AlbertoPicca
17-05-2004, 16:24
Non ho capito! :(

alka
17-05-2004, 16:29
Originariamente inviato da cla80
Ho inserito in una treeview tutte le voci di menu contenenti i programmi. Su di una form ho la MDI - Form ove è presente il MainMenu Principale dove si avviano i programmi.
A quali programmi ti riferisci? :)
La frase "su una form ho la MDI" è un po' criptica: MDI (Multiple Document Interface) è un tipo di interfaccia in cui una finestra principale (MDI Form) ospita tante finestre "figlie" (MDI Child).

Nel tuo messaggio, non si capisce se ti riferisci alla prima o alla seconda, a quali programmi ti riferisci nel MainMenu e cosa significa, per te, "avviare i programmi".

In definitiva, devi porre maggiore attenzione e precisione nel formulare la tua domanda perchè altrimenti non è possibile aiutarti.


Originariamente inviato da cla80
In Un altra Form ho prelevato tutte le voci di menu e ho inserito il tutto in una TreeView. es. nel nodo File ho il sottonodo Archivi.
Come faccio ad avviare i programmi da questa form, semplicemente cliccando sulla TreeView.
Pur non avendo ben compreso la tua situazione, provo a darti un'indicazione sperando sia proprio quella che ti serva.

Quando un elemento della TreeView viene selezionato, l'evento OnChange esegue il suo codice passando come parametro il nuovo nodo selezionato (Node di tipo TTreeNode); attraverso quel riferimento, è possibile ispezionare tutte le proprietà del nodo (Caption, ecc.) e quindi intraprendere l'azione specifica che si desidera.

P.S.: ti suggerisco caldamente di munirti di un buon testo che spieghi i concetti fondamentali e i rudimenti della programmazione in Delphi, altrimenti sei sempre fermo e costretto a chiedere aiuto, magari introducendo poi errori difficili da individuare nei tuoi programmi.

Ciao! :ciauz:

alka
17-05-2004, 16:31
Originariamente inviato da cla80
Aiuto
Dovresti avere almeno la pazienza di aspettare una giornata prima di sollecitare, poichè non è detto che i frequentatori abituali del forum (e non) abbiano il tempo immediato di rispondere alle tue richieste o che siano effettivamente in grado di farlo, soprattutto quando la domanda che hai scritto, come ti ho già segnalato, non è decisamente chiara.

Per chiuderla con uno slogan: "aiutaci ad aiutarti" :)

cla80
17-05-2004, 16:39
Chiedo scusa, ma credo che questo si un problema un po complicato.

Il problema è il seguente:

Dispongo di una Main Form di tipo MDI (fsMDIForm) - nella quale ho posizionato il mio MainMenu con le rispettive icone collegate:

in un altra form secondaria, popolo la mia treeview di tutti gli elementi corrispondenti nella MainMenu della FormMain.

Il problema è il seguente: poiche sulla MainForm quando clicco dal Menu per attivare una form secondaria eseguo il seguente codice:



with TFormCom.Create(Application) do
begin
AccessMode:= userdata.GetAccessMode;
formStyle := fsMDIChild;
end;


Come faccio a richiamare tale operazione dalla form secondaria???

Ossia sulla TreeView??

alka
17-05-2004, 16:46
Il tuo messaggio era molto più chiaro questa volta.

Posso chiederti il perchè di questa soluzione? Secondo me, ti stai complicando la vita cercando di realizzare un meccanismo che può comodamente essere sostituito adottando qualche altra soluzione altrettanto valida.

Cosa stai cercando di ottenere? Non potresti inserire la TreeView nella form MDI principale allineando il controllo al bordo sinistro e facendo in modo che le finestre figlie occupino lo spazio rimanente?

cla80
17-05-2004, 17:00
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???

alka
17-05-2004, 17:12
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


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:


...
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! :ciauz:

Loading