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:
programa:
Observar que estou utilizando o Delphi XE4 e ODAC 9.1 (Banco de dados oracle 11g)
Agradeço antecipadamente qualquer ajuda.
Att.,
Lourival Queiroz
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
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)