Criar menu dinamico através de uma tabela (Duvida)

Delphi

22/05/2014

Sou iniciante em Delphi, e estou tentando criar um menu dinâmico através de uma tabela e não consegui, será que alguém poderia me ajudar no mesmo ?

tabela contem um sequencial o menu pai e até 5 menus subordinados ao menu anterior:

SEQUENCIAL                          NOT NULL NUMBER
MENU_PAI                                VARCHAR2(50)
TAG_PAI                                     NUMBER
MENU_FILHO_1                      VARCHAR2(50)
TAG_FILHO_1                           NUMBER
MENU_FILHO_2                       VARCHAR2(50)
TAG_FILHO_2                           NUMBER
MENU_FILHO_3                       VARCHAR2(50)
TAG_FILHO_3                           NUMBER
MENU_FILHO_4                      VARCHAR2(50)
TAG_FILHO_4                           NUMBER
MENU_FILHO_5                       VARCHAR2(50)
TAG_FILHO_5                           NUMBER
FORM                                          VARCHAR2(200)


programa:

unit Menu;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, MemDS, DBAccess, Ora,
  Vcl.StdCtrls, Vcl.Buttons, Vcl.Menus;

type
  TForm1 = class(TForm)
    fMenu: TMainMenu;
    BitBtn1: TBitBtn;
    dbOra: TOraSession;
    qMenu: TOraQuery;
    qMenuSEQUENCIAL: TFloatField;
    qMenuMENU_PAI: TStringField;
    qMenuTAG_PAI: TFloatField;
    qMenuMENU_FILHO_1: TStringField;
    qMenuTAG_FILHO_1: TFloatField;
    qMenuMENU_FILHO_2: TStringField;
    qMenuTAG_FILHO_2: TFloatField;
    qMenuMENU_FILHO_3: TStringField;
    qMenuTAG_FILHO_3: TFloatField;
    qMenuMENU_FILHO_4: TStringField;
    qMenuTAG_FILHO_4: TFloatField;
    qMenuMENU_FILHO_5: TStringField;
    qMenuTAG_FILHO_5: TFloatField;
    qMenuFORM: TStringField;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
var i, i1, i2, i3, i4, i5 : Integer;
    s, s1, s2, s3, s4, s5 : String;
begin
 s:='';s1:='';s2:='';s3:='';s4:='';s5:='';
 i:=0;i1:=0;i2:=0;i3:=0;i4:=0;i5:=0;
 qMenu.Open;
 qMenu.First;
 while not qMenu.Eof do
  begin
   if (s = '') then
      begin
       i:=i + 1;
       s:=qMenuMENU_PAI.AsString;
       fMenu.Items[i].Visible := True;
       fMenu.Items[i].Enabled := True;
       fMenu.Items[i].Caption := qMenuMENU_PAI.AsString;
       fMenu.Items[i].Tag     := qMenuTAG_PAI.AsInteger;
      end
   else
      if (s <> qMenuMENU_PAI.AsString) then
         begin
          i:=i + 1;
          s:=qMenuMENU_PAI.AsString;
          fMenu.Items[i].Visible := True;
          fMenu.Items[i].Enabled := True;
          fMenu.Items[i].Caption := qMenuMENU_PAI.AsString;
          fMenu.Items[i].Tag     := qMenuTAG_PAI.AsInteger;
         end;
   if (s1 = '') then
      if (not qMenuMENU_FILHO_1.IsNull) then
         begin
          i1:=i1 + 1;
          s1:=qMenuMENU_FILHO_1.AsString;
          fMenu.Items[i].Items[i1].Visible := True;
          fMenu.Items[i].Items[i1].Enabled := True;
          fMenu.Items[i].Items[i1].Caption := qMenuMENU_FILHO_1.AsString;
          fMenu.Items[i].Items[i1].Tag     := qMenuTAG_FILHO_1.AsInteger;
         end
   else
      if (s1 <> qMenuMENU_FILHO_1.AsString) then
         if (not qMenuMENU_FILHO_1.IsNull) then
            begin
             i1:=i1 + 1;
             s1:=qMenuMENU_FILHO_1.AsString;
             fMenu.Items[i].Items[i1].Visible := True;
             fMenu.Items[i].Items[i1].Enabled := True;
             fMenu.Items[i].Items[i1].Caption := qMenuMENU_FILHO_1.AsString;
             fMenu.Items[i].Items[i1].Tag     := qMenuTAG_FILHO_1.AsInteger;
            end;
   if (s2 = '') then
      if (not qMenuMENU_FILHO_2.IsNull) then
         begin
          i2:=i2 + 1;
          s2:=qMenuMENU_FILHO_2.AsString;
          fMenu.Items[i].Items[i1].Items[i2].Visible := True;
          fMenu.Items[i].Items[i1].Items[i2].Enabled := True;
          fMenu.Items[i].Items[i1].Items[i2].Caption := qMenuMENU_FILHO_2.AsString;
          fMenu.Items[i].Items[i1].Items[i2].Tag     := qMenuTAG_FILHO_2.AsInteger;
         end
   else
      if (s2 <> qMenuMENU_FILHO_2.AsString) then
         if (not qMenuMENU_FILHO_2.IsNull) then
            begin
             i2:=i2 + 1;
             s2:=qMenuMENU_FILHO_2.AsString;
             fMenu.Items[i].Items[i1].Items[i2].Visible := True;
             fMenu.Items[i].Items[i1].Items[i2].Enabled := True;
             fMenu.Items[i].Items[i1].Items[i2].Caption := qMenuMENU_FILHO_2.AsString;
             fMenu.Items[i].Items[i1].Items[i2].Tag     := qMenuTAG_FILHO_2.AsInteger;
            end;
   if (s3 = '') then
      if (not qMenuMENU_FILHO_3.IsNull) then
         begin
          i3:=i3 + 1;
          s3:=qMenuMENU_FILHO_3.AsString;
          fMenu.Items[i].Items[i1].Items[i2].Items[i3].Visible := True;
          fMenu.Items[i].Items[i1].Items[i2].Items[i3].Enabled := True;
          fMenu.Items[i].Items[i1].Items[i2].Items[i3].Caption := qMenuMENU_FILHO_3.AsString;
          fMenu.Items[i].Items[i1].Items[i2].Items[i3].Tag     := qMenuTAG_FILHO_3.AsInteger;
         end
   else
      if (s3 <> qMenuMENU_FILHO_3.AsString) then
         if (not qMenuMENU_FILHO_3.IsNull) then
            begin
             i3:=i3 + 1;
             s3:=qMenuMENU_FILHO_3.AsString;
             fMenu.Items[i].Items[i1].Items[i2].Items[i3].Visible := True;
             fMenu.Items[i].Items[i1].Items[i2].Items[i3].Enabled := True;
             fMenu.Items[i].Items[i1].Items[i2].Items[i3].Caption := qMenuMENU_FILHO_3.AsString;
             fMenu.Items[i].Items[i1].Items[i2].Items[i3].Tag     := qMenuTAG_FILHO_3.AsInteger;
            end;
   if (s4 = '') then
      if (not qMenuMENU_FILHO_4.IsNull) then
         begin
          i4:=i4 + 1;
          s4:=qMenuMENU_FILHO_4.AsString;
          fMenu.Items[i].Items[i1].Items[i2].Items[i3].Items[i4].Visible := True;
          fMenu.Items[i].Items[i1].Items[i2].Items[i3].Items[i4].Enabled := True;
          fMenu.Items[i].Items[i1].Items[i2].Items[i3].Items[i4].Caption := qMenuMENU_FILHO_4.AsString;
          fMenu.Items[i].Items[i1].Items[i2].Items[i3].Items[i4].Tag     := qMenuTAG_FILHO_4.AsInteger;
         end
   else
      if (s4 <> qMenuMENU_FILHO_4.AsString) then
         if (not qMenuMENU_FILHO_4.IsNull) then
            begin
             i4:=i4 + 1;
             s4:=qMenuMENU_FILHO_4.AsString;
             fMenu.Items[i].Items[i1].Items[i2].Items[i3].Items[i4].Visible := True;
             fMenu.Items[i].Items[i1].Items[i2].Items[i3].Items[i4].Enabled := True;
             fMenu.Items[i].Items[i1].Items[i2].Items[i3].Items[i4].Caption := qMenuMENU_FILHO_4.AsString;
             fMenu.Items[i].Items[i1].Items[i2].Items[i3].Items[i4].Tag     := qMenuTAG_FILHO_4.AsInteger;
            end;
   if (s5 = '') then
      if (not qMenuMENU_FILHO_5.IsNull) then
         begin
          i5:=i5 + 1;
          s5:=qMenuMENU_FILHO_5.AsString;
          fMenu.Items[i].Items[i1].Items[i2].Items[i3].Items[i4].Items[i5].Visible := True;
          fMenu.Items[i].Items[i1].Items[i2].Items[i3].Items[i4].Items[i5].Enabled := True;
          fMenu.Items[i].Items[i1].Items[i2].Items[i3].Items[i4].Items[i5].Caption := qMenuMENU_FILHO_5.AsString;
          fMenu.Items[i].Items[i1].Items[i2].Items[i3].Items[i4].Items[i5].Tag     := qMenuTAG_FILHO_5.AsInteger;
         end
   else
      if (s5 <> qMenuMENU_FILHO_5.AsString) then
         if (not qMenuMENU_FILHO_5.IsNull) then
            begin
             i5:=i5 + 1;
             s5:=qMenuMENU_FILHO_5.AsString;
             fMenu.Items[i].Items[i1].Items[i2].Items[i3].Items[i4].Items[i5].Visible := True;
             fMenu.Items[i].Items[i1].Items[i2].Items[i3].Items[i4].Items[i5].Enabled := True;
             fMenu.Items[i].Items[i1].Items[i2].Items[i3].Items[i4].Items[i5].Caption := qMenuMENU_FILHO_5.AsString;
             fMenu.Items[i].Items[i1].Items[i2].Items[i3].Items[i4].Items[i5].Tag     := qMenuTAG_FILHO_5.AsInteger;
            end;
   Next;
  end;
end;

end.


Observar que estou utilizando o Delphi XE4 e ODAC 9.1 (Banco de dados oracle 11g)

Agradeço antecipadamente qualquer ajuda.

Att.,

Lourival Queiroz
Lourival Queiroz

Lourival Queiroz

Curtidas 0
POSTAR