PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Criar menu dinamico através de uma tabela (Duvida) #479792

22/05/2014

0

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

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar