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 begin
for i := 0 to pred(listPredef.Count) do
begin
mnu := TMenuItem.Create(ppPredef);
ppPredef.Items.Add(mnu);
mnu.Caption := listPredef[i]
mnu.OnClick := CargarListadoPredefinido;
mnu.Visible := True;
mnu.AutoCheck := True;
mnu.GroupIndex := 0;
mnu.RadioItem := True;
end;
mnu := TMenuItem.Create(ppPredef);
ppPredef.Items.Add(mnu);
mnu.Caption := '-';
mnu.Tag := 1;
end;
end;
procedure TFrmListadosC.CargarListadoPredefinido(Sender: TObject);
begin
if not (Sender as TMenuItem).IsLine then begin
ShowMessage(TMenuItem(Sender).Caption);
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