如题!
解决方案 »
- delphi中如何让treeview打开时默认自动展开到第三级(共6级)
- SQL 数据表求救!!!
- 请教:ADOQuery在两个Access数据库中的数据导入问题?
- in 方法的用法,这样写错了,奇怪,请求帮助。。。。
- PARADOX数据库导入导出问题,急----
- 倒霉!外语6级59分,挂了,来者有分
- Delphi自带的图片虽然好,但是看久了不免乏味,请问哪儿有别的图片下载?
- 我也想知道
- #0是什么?if not(key in['0'..'9',#8]) then key:=#0;这边的#0是?
- 难题:delphi在Image等控件中有实现图形的平面旋转的算法
- override引发的问题
- 菜鸟问题,早回答早给分!
var
i, j: integer;
node: TTreenode;
begin
for i := 0 to MainMenu1.Items.Count - 1 do
begin
node := TreeView1.Items.Add(nil, MainMenu1.Items[i].Caption);
for j := 0 to mainmenu1.Items[i].Count - 1 do
begin
TreeView1.Items.Addchild(node, mainmenu1.Items[i].Items[j].Caption);
end;
end;end;
TForm1 = class(TForm)
MainMenu1: TMainMenu;
...
Button1: TButton;
TreeView1: TTreeView;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure AddAMenuItem(AMenuItem:TMenuItem;ANode:TTreeNode);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}{ TForm1 }procedure TForm1.AddAMenuItem(AMenuItem: TMenuItem;aNode:TTreeNode);
var
i,j,k:Integer;
s:String;
curNode:TTreeNode;
begin
curNode := nil;
s:=AMenuItem.Caption; //取菜单项的标题!
k:=Pos('&',s);
if k > 0 then
Delete(s,k,1); //删除菜单项标题中的“&”符
if s <> '-' then //如果是菜单分隔符“-”就不处理!
curNode := TreeView1.Items.AddChild(aNode,s);
J:=AMenuItem.Count;
if J > 0 then //有子菜单,就遍历
for i := 0 to j - 1 do
begin
AddAMenuItem(AMenuItem.Items[i],curNode);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
a:Integer;
aNode:TTreeNode;
begin
aNode := TreeView1.Items.GetFirstNode; //取Treeview的根
for a := 0 to MainMenu1.Items.Count - 1 do
begin
AddAMenuItem(MainMenu1.Items[a],aNode);
end;
end;end.
if (Frm_main.Components[i] is TMenuItem) then begin
showmessage((Frm_main.Components[i] as TMenuItem).Caption);
end;
end;
if (Frm_main.Components[i] is TMenuItem) then begin
showmessage((Frm_main.Components[i] as TMenuItem).Caption);
end;
end;这个循环找不到TMenuItem组件哦
var
i:integer;
begin
for i:=0 to self.ComponentCount-1 do
if self.Components[i] is TMenuItem then
listbox1.Items.Add((self.Components[i] as TMenuItem).Caption);
end;
var
i:integer;
begin
for i:=0 to self.ComponentCount-1 do
if self.Components[i] is TMenuItem then
listbox1.Items.Add((self.Components[i] as TMenuItem).Caption);
end;ListBox1为空!!!
procedure TfrmMain.SetAction();
var
i: Integer;
iTag:Integer;
begin
if G_bAdmin then
for i:=0 to AlModule.ActionCount -1 do
(AlModule.Actions[i] as TAction).Enabled :=G_bAdmin// and G_bTakeEffect
else
for i:=0 to AlModule.ActionCount -1 do
begin
iTag:= (AlModule.Actions[i] as TAction).Tag;
//ȨÏÞ±íÖÐÊÇ·ñÓдËÄ£¿é
(AlModule.Actions[i] as TAction).Enabled :=
DModule.spUserRight.Locate('fModuleID',iTag,[]);
//and G_bTakeEffect;
end;
var MainMenu: TMainMenu);
var
i, j: Integer;
Level: Integer;
MenuStrs: string;
ItemID: string;
ItemName: string;
StrLst: TStringList;
Flag: Boolean;
ParentID: Integer;
PParentItem: ^TMenuITem;
begin
MenuStrs := StrNodes;
StrLst := TStringList.Create;
try
StrLst.Text := StringReplace(MenuStrs, #8, #13#10, [rfReplaceAll]);
FMenuItemCount := StrLst.Count;
SetLength(FMenuItem, FMenuItemCount); // FMenuItem定义为Private
for i := 0 to StrLst.Count - 1 do
begin
FMenuItem[i] := TMenuITem.Create(nil);
FMenuItem[i].Name := 'SubItem' + IntToStr(i);
end;
j := 0;
PParentItem := nil; // 为了使Delphi不提示警告, 其实一定会被赋值的;
while SplitStr(MenuStrs, ItemName, ItemID) do
begin
Flag := False;
with MainMenu do
begin
Level := Length(ItemID) div 2;
if Level = 1 then
begin
FMenuItem[j].Tag := StrToInt(ItemID);
FMenuItem[j].Caption := ItemName;
FMainMenu.Items.Add(FMenuItem[j]);
FMenuItem[j].OnClick := TestClick;
Inc(j);
Continue;
end
else begin
for i := 0 to Items.Count - 1 do
if Items[i].Tag = StrToInt((Copy(ItemID,1,Level * 2 -2))) then
begin
FMenuItem[j].Tag := StrToInt(ItemID);
FMenuItem[j].Caption := ItemName;
Items[i].Add(FMenuItem[j]);
FMenuItem[j].OnClick := TestClick;
inc(j);
Flag := True;
end;
if Flag then Continue;
if FMenuItem[j - 1].Tag = StrToInt(Copy(ItemID,1,Level * 2 -2)) then
begin
FMenuItem[j].Tag := StrToInt(ItemID);
FMenuItem[j].Caption := ItemName;
ParentID := j - 1;
FMenuItem[ParentID].Add(FmenuItem[j]);
PParentItem := @FMenuItem[ParentID];
FMenuItem[j].OnClick := TestClick;
inc(j);
Continue;
end; if Length(IntToStr(FMenuItem[j - 1].Tag)) =
Length(ItemID) then
begin
FMenuItem[j].Tag := StrToInt(ItemID);
FMenuItem[j].Caption := ItemName;
PParentItem^.Add(FMenuItem[j]);
FMenuItem[j].OnClick := TestClick;
inc(j);
end;
end;
end;
end;
finally
StrLst.Free;
end;
end;// 自己搞定的,只是与库结构和中间层返回的字符串格式有关.
// 不过还是很多谢大家的,不管是骂我的还是帮我的,一起谢谢了!!!!