Written by xinyiman Novembre 07, 2011, 12:11:00 pm21239 ViewsRating: 0 (0 Rates)Print
Non vi è mai capitato di dover usare dei menù nei vostri programmi? Se la risposta è si allora sappiate che è possibile tabellare i menù (con le dovute premure) e visualizzare tali menù in una TTreeview in maniere tale da rendere il programma pulito ed efficente.
Per prima cosa vediamo il codice d'esempio che potete trovare in versione integrale all'indirizzo: www.lazaruspascal.it/esempi/MenuTabellato.zip
function TForm1.InserisciNodiFigli(NodoPadre: integer): boolean;
var
MyQuery2: TZQuery;
app: TTreeNode;
begin
if NodoPadre>1 then
app:=TreeView1.Items.GetLastSubNode;
MyQuery2:=TZQuery.Create(nil);
MyQuery2.Connection:=MyConn;
MyQuery2.SQL.Text:='select * FROM T_Menu WHERE NodoPadre=' + IntToStr(NodoPadre) + ' order by Posizione ASC;';
MyQuery2.Open;
if not MyQuery2.EOF then
begin
MyQuery2.First;
while not MyQuery2.EOF do
begin
if NodoPadre=0 then
begin
TreeView1.Items.Add(nil, MyQuery2.FieldByName('Descrizione').Text);
end
else if NodoPadre=1 then
begin
TreeView1.Items.AddChild(TreeView1.Items.GetLastNode, MyQuery2.FieldByName('Descrizione').Text);
end
else
begin
TreeView1.Items.AddChild(app , MyQuery2.FieldByName('Descrizione').Text);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
MyConn.Disconnect;
end;
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
begin
MyQuery.SQL.Text:='select NumTab FROM T_Menu WHERE Descrizione="' + StringReplace(TreeView1.Selected.Text,'''','''''', [rfReplaceAll]) + '";';
MyQuery.Open;
if not MyQuery.EOF then
begin
MyQuery.First;
PageControl1.TabIndex:=MyQuery.FieldByName('NumTab').AsInteger;
end;
MyQuery.Close;
end;
end.
Come potete notare la funzione ricorsiva InserisciNodiFigli crea il menù popolato con i dati tabellati, e nell'esempio che abbiamo appena visto i dati sono così espressi
Descrizione
NodoPadre
Posizione
NumTab
Clienti
0
1
0
Inserisci
1
2
0
Modifica
1
3
0
Ins1
3
4
1
Ins2
3
5
1
Elimina
1
6
2
Magazzino
0
7
0
Quello che bisogna capire è che il NodoPadre deve essere zero per tutte le righe che devono comparire come voci primarie del menù, mentre il campo Posizione identifica l'ordine assoluto con il quale vengono inseriti nel menù, quindi non ci devono essere voci duplicate e i valori devono essere incrementali da 1 a N.
Per capire meglio vi consiglio di scaricare l'esempio e analizzarlo, è più facile da farlo che dirlo. Buona programmazione.
About the author
xinyiman registered at Italian community of Lazarus and Free Pascal on Ottobre 14, 2011, 10:56:28 pm and has posted 3286 posts in the boards since then. Last visit was Oggi alle 05:45:31 pm.
Questo blog non rappresenta una testata giornalistica poiché viene
aggiornato senza alcuna periodicità. Non può pertanto considerarsi un
prodotto editoriale ai sensi della legge n. 62/2001.
Questo sito utilizza cookie, anche di terze parti, per offriti servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina, cliccando su un link o proseguendo la navigazione in altra maniera, acconsenti all’uso dei cookie.