Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Динамическое создание меню в MainMenu


Автор: ivan219 28.9.2006, 16:38
Как в MainMenu динамически создовать пункты меню и под меню smile 

Автор: Romikgy 28.9.2006, 16:52
с помощью винапи или вцл?

Автор: ivan219 28.9.2006, 17:24
Romikgy, нет уменя компонент уже на форме мне надо только его меню и.т.д.

Но как создавать я нашол.

А вот как создавать под меню и под под меню я не нашол smile 

Код

var
  NewMenuItem: TMenuItem;
begin
  inc(I);
  NewMenuItem:= TMenuItem.Create(Self);
  NewMenuItem.Caption:= 'N'+FloatToStr(I);
  NewMenuItem.OnClick:= SomeMenuItemClick;
  NewMenuItem.Name:='N'+FloatToStr(I);
  MainMenu1.Items.Add(NewMenuItem);
end;


Нужно зделать вот так.
http://imageshack.us

Автор: Zero 28.9.2006, 21:56
Используй метод вставки:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  m,pm,sm:tmenuitem;
begin
  m := TMenuItem.Create(MainMenu1);
  m.Caption := 'Меню';
  mainmenu1.Items.Add(m);

  pm := TMenuItem.Create(m);
  pm.Caption := 'Пункт меню';
  m.Insert(0,pm);

  sm := TMenuItem.Create(pm);
  sm.Caption := 'Подменю';
  pm.Insert(0,sm);
end;


Добавлено @ 22:01 
Первый индекс означает порядковый номер пункта меню.
Для хранения пунктов можно использовать динамический массив типа TMenuItem.

Автор: ivan219 29.9.2006, 09:43
Zero, спасибо  smile  +1

Весь код и некоторые дополнения.
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, XPMan;

type
  TForm1 = class(TForm)
    Button1: TButton;
    MainMenu1: TMainMenu;
    Label1: TLabel;
    XPManifest: TXPManifest;
    procedure Button1Click(Sender: TObject);
    procedure SomeMenuItemClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  I:Integer;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SomeMenuItemClick(Sender: TObject);
begin
 Label1.Caption:=TMenuItem(Sender).Name;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  m,pm,sm:tmenuitem;
begin
  inc(I);
  m := TMenuItem.Create(MainMenu1);
  m.Caption := 'Меню';
  m.Name:='N'+FloatToStr(I);
  m.OnClick:= SomeMenuItemClick; // Вызываемая процедура при клике мышкой
  mainmenu1.Items.Add(m);

  pm := TMenuItem.Create(m);
  pm.Caption := 'Пункт меню';
  pm.Name:='N1'+FloatToStr(I);
  pm.OnClick:= SomeMenuItemClick;
  m.Insert(0,pm);

  sm := TMenuItem.Create(pm);
  sm.Caption := 'Под меню';
  sm.Name:='N2'+FloatToStr(I);
  sm.OnClick:= SomeMenuItemClick;
  pm.Insert(0,sm);
end;
end.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)