Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 22.07.2010, 12:22   #1
Anfall
Форумчанин
 
Регистрация: 10.02.2009
Сообщений: 181
По умолчанию Динамическое SubMenu в PopupMenu

Доброго времени суток всем.
Собственно нагуглил как сделать динамические пункты меню в PopUp. Вроде работает. Но как сделать, чтобы они появлялись в СубМеню у N5 например?

Нашел в поиске:
Цитата:
Сообщение от mihali4
Код:
var newitem,newsubitem: TMenuItem;
begin
newitem:=TMenuItem.Create(PopupMenu1);
newitem.Caption:='3';
PopupMenu1.Items.Add(newitem);
newsubitem:=TMenuItem.Create(PopupMenu1);
newsubitem.Caption:='31';
newitem.Add(newsubitem);
end;
Но как сделать чтобы подменю появлялось именно у N8 и как добавить к ним события onclick?
Заранее благодарен.

Последний раз редактировалось Anfall; 22.07.2010 в 12:27.
Anfall вне форума
Старый 22.07.2010, 12:35   #2
ov_lab
Пользователь
 
Регистрация: 24.07.2009
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Anfall Посмотреть сообщение
Доброго времени суток всем.
Собственно нагуглил как сделать динамические пункты меню в PopUp. Вроде работает. Но как сделать, чтобы они появлялись в СубМеню у N5 например?

Нашел в поиске:


Но как сделать чтобы подменю появлялось именно у N8 и как добавить к ним события onclick?
Заранее благодарен.
N8.Items.Insert(0,MyPopupMenu.Items );

где MyPopupMenu - это уже заполненное ваше PopUp

Последний раз редактировалось ov_lab; 22.07.2010 в 12:38.
ov_lab вне форума
Старый 22.07.2010, 20:55   #3
Anfall
Форумчанин
 
Регистрация: 10.02.2009
Сообщений: 181
По умолчанию

Цитата:
Сообщение от ov_lab Посмотреть сообщение
N8.Items.Insert(0,MyPopupMenu.Items );

где MyPopupMenu - это уже заполненное ваше PopUp
Спасибо, но не работает. Пишет, что нельзя такое с n8 делать(

Нашел код:
Цитата:
Сообщение от Alter Посмотреть сообщение
Простой способ:
Код:
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    Button1: TButton;
    PopupMenu1: TPopupMenu;
    N3: TMenuItem;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Procedure AddSubItm(Mi :TMenuItem; Cap :String);

implementation

{$R *.dfm}

Procedure AddSubItm(Mi :TMenuItem; Cap :String);
var Itm :TMenuItem;
begin {простая процедура для добавления пунктов}
 Itm := TMenuItem.Create(Mi);
 Itm.Caption := Cap;
 Mi.Add(Itm);
end;

procedure TForm1.Button1Click(Sender: TObject);
Var I :Byte;
begin
 For I:=1 To 25 Do
 begin
  AddSubItm(N2, Format('ПодМеню=%d', [I]));
  AddSubItm(N3, Format('ПодМеню=%d', [I]));
 end;
 TControl(Sender).Enabled := False;
end;
Но как сделать событие onlick?

Последний раз редактировалось artemavd; 23.07.2010 в 10:52.
Anfall вне форума
Старый 22.07.2010, 21:11   #4
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  SubItem: TMenuItem;
begin
  SubItem := TMenuItem.Create(PopupMenu1);
  SubItem.Caption := 'Вход. меню';
  h8.Add(SubItem);  //Здесь h8 имя твоего меню
end;
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.

Последний раз редактировалось chertovich; 22.07.2010 в 21:15. Причина: ))
chertovich вне форума
Старый 22.07.2010, 21:12   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Компонент.OnClick := Процедура
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума
Старый 22.07.2010, 21:16   #6
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

А событию просто присваивешь какую-нить процедуру и все)
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума
Старый 22.07.2010, 21:18   #7
Anfall
Форумчанин
 
Регистрация: 10.02.2009
Сообщений: 181
По умолчанию

Спасибо.

Я вот присваиваю, например:
Itm.Onclick:= Button2Click;

А пишет: Undeclared identifier Button2Click.
хотя такая процедура создана.
Anfall вне форума
Старый 22.07.2010, 21:19   #8
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Itm.Onclick:= Button2Click(sender);
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума
Старый 22.07.2010, 21:21   #9
Simply-Art
Программист и
Участник клуба
 
Аватар для Simply-Art
 
Регистрация: 29.10.2006
Сообщений: 1,265
По умолчанию

Код:
  private
    procedure ClickM(Sender: TObject);
//бла бла бла
var
 NewItem:TMenuItem;
begin
NewItem:=TMenuItem.Create(Self);
NewItem.Caption:='Кнопа';
NewItem.OnClick:=ClickM; // здесь и присваиваем куда кликать
PopupMenu.Items[1].Add(NewItem); // тут указываем куда вклинить надо [1] первый пункт, нумерация сверху-вниз с нуля
end;
// бла бла бла
procedure TForm1.ClickM(Sender: TObject); // Важна штука!
begin

end;
Вроде так, пробуй
Simply-Art вне форума
Старый 22.07.2010, 21:22   #10
Anfall
Форумчанин
 
Регистрация: 10.02.2009
Сообщений: 181
По умолчанию

DIgorevich, спасибо большое. Я до этого использовал код от Alter'а.
Я кода попробовал вот это:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  SubItem: TMenuItem;
begin
  SubItem := TMenuItem.Create(PopupMenu1);
  SubItem.Caption := 'Вход. меню';
  h8.Add(SubItem);  //Здесь h8 имя твоего меню
end;
Все отлично заработало! Еще раз спасибо!

Simply-Art, спасибо! Тоже попробую!

Ребята, а вот такой вопрос.
У меня список пунктов в подменю неизвестен.
Названия берутся из listbox, например с помощью for to do.
А для каждого пункта должно быть уникальное действие.
Если проще то в пунктах субменю будут содержаться список путей к папкам. Надо, чтобы при нажатии на пункт подменю открывался проводник с этим путем. Как сделать такое действие, чтобы путь брался из названия этого подменю, например. Ну или как-то по-другому.
Попытался сделать так (сам уже понимаю что бред):
Код:
  subitem.OnClick:= ShellExecute(0,'explore',pchar(SubItem.Caption),nil,nil,SW_SHOWNORMAL);
но incompatible types.

Заранее благодарен.

Попробовал сделать отдельную процедуру, а в нее прописал:
Код:
ShellExecute(0,'explore',pchar(TMenuItem(sender).Caption),nil,nil,SW_SHOWNORMAL);
Но почему-то когда создаешь одно подменю - проводник не открывается , а если создать еще одно подменю - то открывается.
В чем же трабл!?(

Код:
procedure TForm1.Svoy;
begin
ShellExecute(0,'explore',pchar(TMenuItem(sender).Caption),nil,nil,SW_SHOWNORMAL);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  SubItem: TMenuItem;
begin
  SubItem := TMenuItem.Create(PopupMenu1);

  SubItem.Caption := 'D:\';

  n1.Add(SubItem);  //Çäåñü h8 èìÿ òâîåãî ìåíþ
     SubItem.Onclick := svoy;
  end;
Нашел проблему. В начале строки еще передается зачем-то лишний символ &
Решил проблему с StringReplace.
Вот рабочий код:
Код:
  public
    { Public declarations }
      procedure test(Sender: TObject);

{$R *.dfm}
procedure TForm1.test;
var
i:string;
begin
i:=TMenuItem(sender).Caption; 
i:=StringReplace(i, '&', '', [rfReplaceAll, rfIgnoreCase]); //убираем ненужные символы
ShellExecute(0,'explore',pchar(i),nil,nil,SW_SHOWNORMAL); //открываем проводник
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  SubItem: TMenuItem;
begin
  SubItem := TMenuItem.Create(PopupMenu1);
  SubItem.Caption := 'C:\test';
  n1.Add(SubItem);  //n1 - имя подменю
  SubItem.Onclick := test;
  end;
Тему можно закрывать... Но
И откуда берутся эти лишние символы?

Последний раз редактировалось artemavd; 23.07.2010 в 10:50.
Anfall вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SubMenu AidarBik Win Api 6 30.08.2020 10:34
Динамическое добавление в PopupMenu k1r1ch Общие вопросы Delphi 1 02.10.2009 10:29
Отключить событие OnClick у MenuItem с SubMenu Juni Компоненты Delphi 0 17.05.2009 12:17
PopupMenu + SubMenu tarasov Компоненты Delphi 6 09.10.2008 15:06
PopupMenu TaTT DoGG Компоненты Delphi 13 23.05.2008 13:19