PDA

Visualizza la versione completa : [delphi] - GetBitmap ImageList


cla80
14-05-2004, 17:11
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:



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.

alka
14-05-2004, 17:43
Credo che non esista alcuna soluzione diversa dallo scrivere il codice per eseguire la procedura "manualmente".

A parte questo, non hai scritto qual il tuo problema con il codice che hai postato. Funziona oppure no? Cosa non riesci ad ottenere?

Snoccioliamo il problema e risolviamolo a piccoli passi, poich non ho il tempo di scriverti una procedura ad hoc (altrimenti i miei clienti avrebbero qualcosa da dire...).

Ciao! :ciauz:

cla80
14-05-2004, 17:57
non riesco a passare l'icona corretta legato al nome del menu corrispondente.
Non riesco a capire come poter associare l'icona corretta.
Aiutami ti prego

alka
14-05-2004, 18:04
Non avevi gi aperto una discussione simile a questa?

Comunque, sufficiente associare lo stesso indice di icona per avere...la stessa icona. :confused:
Sia la TreeView che il Menu devono avere la stessa ImageList.



TreeViewMain.Items[j].ImageIndex := MenuItem.ImageIndex; TreeViewMain.Items[j].SelectedIndex := MenuItem.ImageIndex;

cla80
14-05-2004, 18:21
no, perch devo prendere e associare il tutto da un altra form.
ossia ho su di una form sia l'imagelist che il mainmenu. e devo dinamicamente popolare una treeview con gli stessi nomi e le stesse icone corrispondenti.
aiutami ALKA ti prego.

alka
14-05-2004, 18:27
Originariamente inviato da cla80
ossia ho su di una form sia l'imagelist che il mainmenu. e devo dinamicamente popolare una treeview con gli stessi nomi e le stesse icone corrispondenti.
Il fatto che il controllo TreeView da popolare si trovi su un'altra form, non ti impedisce comunque di assegnare a quel controllo il componente ImageList che si trova su una form completamente differente.


Originariamente inviato da cla80
aiutami ALKA ti prego.
Purtroppo non pregando che il mio tempo aumenta. :)
Sorry, faccio quel che posso.

cla80
15-05-2004, 09:13
vi prego un caso di lavoro che potrebbe portare ad un licenziamento.

Loading