Ver Mensaje Individual
  #13  
Antiguo 14-06-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
En el siguiente código, tengo un popupMenu ppPredef (PoPupPredefinidos ) y partiendo de cada línea de un TStringList (listPredef), se crea el menú:

Código Delphi [-]
var
  listPredef, NombreListado: TStringList;
  mnu, Seleccionar: TMenuItem;
  i: Integer;
begin
    ListPredef := TStringList.Create;
    ListPredef.Add('primera opción de menú');
    ListPredef.Add('segunda opción de menú');   
    if listPredef.Count > 0 then  // esto es un TStringList que guarda el caption que ha de poner en el popup menú
    begin
      for i := 0 to pred(listPredef.Count) do
      begin
        // mnu es el menuItem que vamos a añadir
        // ppPredef es el popupMenu

        mnu := TMenuItem.Create(ppPredef);
        ppPredef.Items.Add(mnu);
        mnu.Caption := listPredef[i]
        mnu.OnClick := CargarListadoPredefinido;
        mnu.Visible := True;
       // le añado la opción de RadioItem a cada menuItem
        // solo un TmenuItem activado a la vez
        mnu.AutoCheck  := True;
        mnu.GroupIndex := 0;
        mnu.RadioItem  := True;
      end;
     // esto crea un Separador (linea horizontal) en el popupmenu
      mnu := TMenuItem.Create(ppPredef);
      ppPredef.Items.Add(mnu);
      mnu.Caption := '-';
      mnu.Tag     := 1;

    end;
  end; // fin de predefinidos

procedure TFrmListadosC.CargarListadoPredefinido(Sender: TObject);
begin                                         //( el mnuitem   )

// cuando se haga clic en un elemento del menú, se ejecuta este procedimiento.

  if not (Sender as TMenuItem).IsLine then // si no es una linea separadora
  begin
    
    ShowMessage(TMenuItem(Sender).Caption);
    // con TMenuItem(Sender) puedes acceder a todas las propiedades del MenuItem

  end;
end;

PD: Yo no inserto en posiciones, porque el TStringList de los títulos lo tengo ordenado alfabéticamente y me interesa que aparezca en ese órden en el PopupMenu.

El truco está en crear un TmenuItem por cada ciclo : mnu := TmenuItem.Create(nombreDelPopup);
y despues añadirlo al menú: ppPredef.Items.Add(mnu);

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 21-06-2006 a las 09:10:08.
Responder Con Cita