超难问题!!!!高手请进!!!! (解决问题,110分相送!!) (10分)

  • 主题发起人 主题发起人 abigfrog
  • 开始时间 开始时间
A

abigfrog

Unregistered / Unconfirmed
GUEST, unregistred user!
我想实现程序自动从数据库取数据,动态生成菜单,包括主菜单和子菜单,效果就如下
|------|
| 主 | _____
| 菜 | 子 |
| 单 | 菜 |
| | 单 |
| | ------
----------------------
主菜单的项是动态生成的,子菜单也是动态生成,请问如何实现?
 
我的QQ 778608,请大侠不吝赐教!thanx!
 
解决问题,100分相送!!绝不食言!!
 
你先动态生成主菜单,当点击主菜单上的一项时,再创建下面的子菜单
 
建议你去:
http://wolfsoft.nugoo.com/srcdetail.asp?flag=2&id=85
下载一个管理系统的源代码,里面有你需要的,也是从数据库取数据动态生成菜单。
 
to antic_ant
我是初学者,有例子么?
 
你的所谓的动态菜单是不是通过修改数据库实现菜单的增删?如果是我有办法。
 
to yxzymh:
是啊!不过关键还有一点,就是支持子菜单动态创建加载,这里面有一个树型结构,你
有办法么?
 
我有段代码不过不是用的标准Menu控件,你看看么?包括生成菜单和调用,生成事件

标准菜单也有,调用好象就没有了,

看看吧,其中定义了一个TfrmMain的成员变量MTAuto : Array[0..100] of TMenuItem;

procedure TfrmMain.MenuMainPopup(Sender: TObject);
Var
i: Integer;
begin
for i := 0 to 100 do
if MTAuto[ i ] <> nil then
Begin
MTAuto[ i ].Free;
MTAuto[ i ] := Nil;
End
else Begin End;

dmMainADO.TSelection.Open;
dmMainADO.TSelection.First;
i := 0;
while not dmMainADO.TSelection.Eof do
Begin
MTAuto[ i ] := TMenuItem.Create( Application );
MTPope_.Insert(i,MTAuto[ i ]);
MTAuto[ i ].Visible := True;
MTAuto[ i ].Name := 'MTSelection_' + IntToStr( dmMainADO.TSelection['ID'] );
MTAuto[ i ].Caption := dmMainADO.TSelection['Name'];
MTAuto[ i ].Enabled := True;
dmMainADO.TSelection.Next;
i := i + 1;
End;
MTCount := i;
dmMainADO.TSelection.Close;
end;


procedure TfrmMain.MenuMainMenuCommand(Sender: TObject);
Var
ID : Integer;
MTName : String;
begin
With Sender as TMenuItem do
MTName := Name;

if Copy( MTName ,1,12 ) = 'MTSelection_' then
Begin

frmNBDBDataView := TfrmNBDBDataView.Create( Application );
ID := StrToInt( Copy( MTName , 13, Length(MTName) - 12 ) );

dmMainADO.QSelection.Close;
dmMainADO.QSelection.Parameters.ParamByName('ID').Value := ID;
dmMainADO.QSelection.Open;
frmNBDBDataView.Caption := dmMainADO.QSelection['Name'];
frmNBDBDataView.Title.Caption.Caption := dmMainADO.QSelection['Name'];
dmMainADO.QParams.Parameters.ParamByName('ID').Value := ID;
dmMainADO.QParams.Close;
dmMainADO.QParams.Open;
frmNBDBDataView.QDataView.Close;
frmNBDBDataView.QDataView.SQL.Clear;
frmNBDBDataView.QDataView.SQL.Add( dmMainADO.QSelection['SQLRun'] );
dmMainADO.QSelection.Close;
if frmNBDBDataView.QDataView.Parameters.Count >0 then
Begin
frmNIParams := TfrmNIParams.Create( Application );
frmNIParams.Caption := frmNBDBDataView.Caption;
frmNIParams.Title.Caption.Caption := frmNBDBDataView.Title.Caption.Caption;
frmNIParams.SQLData := frmNBDBDataView.QDataView;
frmNIParams.ParamsData := dmMainADO.QParams;
if not frmNIParams.SetParams then
Begin
dmMainADO.QParams.Close;
frmNIParams.Free;
frmNBDBDataView.Free;
Exit;
End
else Begin End;
End
else Begin End;
frmNBDBDataView.ShowModal;
frmNBDBDataView.Free;
End
end;
 
简单的问题,
 
真是超难?!
 
easy! 这也是超难大伙明天去Borland,MS了,呵呵!啊Q同去同去!
 
呵呵,我建议刚学delphi 的同志们先看一本好书啊。。。
 
to satoni
可以推荐一本么?thx!
 
呵呵,我也不记得我当年看的书什么名字了。不过你可以去找找一本就是做一个实例的书,
虽然会有很多错误,但是你慢慢学习就可以解决这些错误,反而学习的更快些;
 
我有完整实例,是司法系统的一部分,呵呵,
你的Email是 honey_365@hotmail.com 吧,我已向此地址发了Email,注意查收!
 
to nutshell:
我也是初学者,能不能也给我发一份!
我的Email:butcher524@163.com!
thanks!
 
to butcher524:
给你发过去了!
 
方法有多种,如果是MIS,可以充分利用数据库的SQL语句,可以做到按你的要求自动排序。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
后退
顶部