Salve,
ho una form MDI contenenti le ImageList e un MainMenu, ove all'interno di quest'ultimo sono associati per ogni item di Menu, è associata un'icona corrispondente nella ImageList.
Il mio problema è questo:
Devo prelevare da il MainMenu, sia la voce di menu che l'icona corrispondente e mettere il tutto su di una TreeView.
questo è una parte di codice che ho fatto:
codice:
procedure TFormTreeView.FillTreeView(aMenu: TMenu; var ListName : TStringList);
//
// sub procedure: elimina la & dalla caption
function Etichetta(aStr: string):string;
begin
Delete(aStr, pos('&', aStr),1);
Result:= aStr;
end;
//
// riempie i nodi ricorsivamete
procedure FillN(aMenuItem: TMenuItem; var ListName: TStringList);
var
lNodoF: TTreeNode;
lMenuItemS: TMenuItem;
j, NodeCount : integer;
lTag: integer;
AImageList: TImageList;
tmpBMP:TBitmap;
begin
try
NodeCount:=TreeViewMain.Items.Count - 1 ;
for j := 0 to aMenuItem.Count -1 do
begin
lMenuItemS:= aMenuItem.Items[j];
if not (lMenuItemS.Caption ='-') or (lMenuItemS.visible) then
begin
lNodoF:= TreeViewMain.Items[NodeCount];
TreeViewMain.Items.AddChild(lNodoF, Etichetta(lMenuItemS.Caption));
if lMenuItemS.Enabled and aMenuItem.Enabled then
begin
tmpBMP:=TBitmap.Create;
if lMenuItemS.ImageIndex >= 0 then
begin
AImageList.GetBitmap(lMenuItemS.ImageIndex, tmpBMP);
TreeViewMain.Items[j].ImageIndex := imgAlberoMenu.Add(tmpBMP, nil);;
TreeViewMain.Items[j].SelectedIndex := imgAlberoMenu.Add(tmpBMP, nil);;
tmpBMP.Free;
end;
end
else begin
TreeViewMain.Items[TreeViewMain.Items.Count - 1].ImageIndex:= _disabledImage;
TreeViewMain.Items[TreeViewMain.Items.Count - 1].SelectedIndex := _disabledImage;
end;
ListName.Add(lMenuItemS.Name);
if lMenuItemS.Count > 0 then
FillN(lMenuItemS,ListName);
end;
end;
except
end;
end;
//
// procedure principale FillTreeView
var
lNodoP : TTreeNode;
lMenuItem: TMenuItem;
lTag: integer;
i: integer;
tmpBMP:TBitmap;
begin
try
lMenuItem:= aMenu.Items[0];
if (not (lMenuItem.Caption ='-')) or (lMenuItem.visible) then
begin
lNodoP:=TTreenode.Create(TreeViewMain.Items);
TreeViewMain.Items.Add(lNodoP, Etichetta(lMenuItem.Caption));
if lMenuItem.Enabled then
begin
TreeViewMain.Items[TreeViewMain.Items.Count - 1].ImageIndex := 0;
TreeViewMain.Items[TreeViewMain.Items.Count - 1].SelectedIndex := 0;
end
else begin
TreeViewMain.Items[TreeViewMain.Items.Count - 1].ImageIndex:= _disabledImage;
TreeViewMain.Items[TreeViewMain.Items.Count - 1].SelectedIndex := _disabledImage;
end;
ListName.Add(lMenuItem.Name);
if lMenuItem.Count > 0 then
FillN(lMenuItem, ListName);
end;
except end;
end;
AIUTO VI PREGO SE CONOSCETE UNA SOLUZIONE DIVERSA.