Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    389

    [delphi] - GetBitmap ImageList

    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.

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    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!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    389

    hai perfettamente ragione..

    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

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Non avevi già aperto una discussione simile a questa?

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

    codice:
    TreeViewMain.Items[j].ImageIndex := MenuItem.ImageIndex;            TreeViewMain.Items[j].SelectedIndex := MenuItem.ImageIndex;
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    389

    ho paura di no

    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.

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296

    Re: ho paura di no

    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.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    389

    aiutooo

    vi prego è un caso di lavoro che potrebbe portare ad un licenziamento.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.