Pide una consulta ordenada por nivel, así ya puedes crear primero el A.1 y haces un bucle recorriendo esa consulta, mientras que el nivel sea el mismo, añades dentro, y cuando el nivel sea distinto, saltas de MenuItem.
Necesitarás una variable
NivelActual:integer, para comparar el nivel del elemento que quieres crear con el último que se creó.
Tambien te será util una variable
ElPadre:Tmenuitem, que al cambiar de nivel, lo vas cambiando, y te sirves de él para añadir dentro los submenus.
Código Delphi
[-]
var ElPadre:Tmenuitem;
NivelActual : integer;
begin
nivelactual := 1;
elpadre := MenuPpal; while not query1.eof do
begin
a := TMenuItem.Create(form1);
a.Caption:= query1.fieldbyname('Caption').AsString;
elpadre.Add(a);
if query1.fieldbyname('nivel').asInteger - nivelactual > 0 then
elpadre := a
query1.next;
end;
Espero que me haya explicado.
Si necesitas más ayuda, dinos exactamente que guardas en esa tabla, todos los campos y definición de cada uno.
Un saludo