TMainMenu 里面怎么判断TmenuItem下面是否已经加有TmenuItem;
象TtreeView 那样可用 isHasChild 来判断?
就是在MItem 没有加任何TmenuItem的时候, 下面的语句
MItem.Items[0] = nil
提示超出索引了! 其实我就是想实现动态生成菜单!
菜单的“Caption"是从数据库取出来的!
ID Name PID Ishaschild
1 菜单1 0 1
2 菜单2 0 1
3 菜单3 1 0
4 菜单4 1 0
5 菜单5 1 0
6 菜单6 2 0
7 菜单7 2 0
其中 PID 如果是”0“ 表示最定层的菜单
Ishaschild 如果是”1"表示 该菜单下有子菜单
如上表最终在界面的结果是:菜单1 菜单2
菜单3 菜单6
菜单4 菜单7
菜单5
我想实现的是不管菜有多少层我多能动态添加!
象TtreeView 那样可用 isHasChild 来判断?
就是在MItem 没有加任何TmenuItem的时候, 下面的语句
MItem.Items[0] = nil
提示超出索引了! 其实我就是想实现动态生成菜单!
菜单的“Caption"是从数据库取出来的!
ID Name PID Ishaschild
1 菜单1 0 1
2 菜单2 0 1
3 菜单3 1 0
4 菜单4 1 0
5 菜单5 1 0
6 菜单6 2 0
7 菜单7 2 0
其中 PID 如果是”0“ 表示最定层的菜单
Ishaschild 如果是”1"表示 该菜单下有子菜单
如上表最终在界面的结果是:菜单1 菜单2
菜单3 菜单6
菜单4 菜单7
菜单5
我想实现的是不管菜有多少层我多能动态添加!
解决方案 »
- 如何将 39916.3792726389 转换成 2009-04-13 09:06:09?
- 用DELPHI进行单位换算,combobox里面位数不一样怎么办?
- 求救如何通过使用ado 和sql server 2000 开发c/s数据库
- 程序如何读取ini文件里内容并应用?
- ServerSocket和ClientSocket问题
- 把若干图片紧挨着排成一行,如何才能使它们在屏幕上横向滚动,反复循环出现,请大家帮帮忙,谢谢
- 以前的程序现在打开运行提示“不能建立输入文件.dcu"
- gif的播放
- 编程高手资源转手
- 我遇到的一个可能很简单的问题
- 菜鸟提问:MessageBox的英文按钮显示!在线等待!!!多谢!!!
- 求助各位高手,有关combobox的特殊应用
procedure GenerateMenu(sPID: string; PM: TMenuItem)
var DestDataSet: TADODataSet;
sCurID, sCurCap: string;
M: TMenuItem
begin
DestDataSet := TADODataSet.Create(Self);
...
/*先通过SQL取出PID=sPID的记录,然后循环DestDataSet*/
while not DataSet.Eof do
begin
sCurID := DestDataSet.FieldByName('ID').AsString;
sCurCap := DestDataSet.FieldByName('Name').AsString;
M := TMenuItem.Create(Self);
M.Cap := sCurCap;
PM.Add(M);
GenerateMenu(sPID, M);
DestDataSet.Next;
end;
DestDataSet.Free;
end;定义好上面的函数之后,执行GenerateMenu函数就可以了,上面有点出路,可以自己完善
id name parentid
1 n1 0
2 n1_1 1
3 n1_2 1
4 n2 0
5 n2_1 4
6 n2_2 4设想生成的菜单为下面的样子(点选n1菜单为n1_1和n1_2,点选n2菜单为n2_1和n2_2) n1 n2
| |
n1_1 n2_1
n1_2 n2_2=============================================
procedure TForm1.CMClick(Sender: TObject);
begin
ShowMessage((Sender as TMenuItem).Caption);
end;procedure TForm1.InitMainMenu;
var
AItem,AItem1:TMenuItem;
begin
Query1.Close;
Query1.SQL.Text := 'select name from xxxxxx where parentid=0 order by name';
query1.Open;
while not query1.Eof do begin
AItem := TMenuItem.Create(self);
AItem.Caption := Query1.fieldbyname('name').AsString;
MainMenu.Items.Add(AItem);
query2.Close;
Query2.Close;
Query2.SQL.Text := 'select name from xxxxxx where name like "'+AItem.Caption+'%" and parentid<>0';
query2.Open;
while not query2.Eof do begin
AItem1 := TMenuItem.Create(self);
AItem1.Caption := Query2.fieldbyname('name').AsString;
AItem.Add(AItem1);
query2.Next;
end;
query2.close;
query1.next;
end;
query1.close;
end;