powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как указать имя события для каждого пункта подменю Item.OnClick в цикле?
9 сообщений из 9, страница 1 из 1
Как указать имя события для каждого пункта подменю Item.OnClick в цикле?
    #39918887
Леон4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как указать имя события для каждого пункта подменю Item.onclick в цикле(Там, где многоточие...........). Если точнее то, нужна функция по типу findMethod('имя метода'+IntToStr(i)) которая бы указывала бы на нужное событие. Пробовал использовать простую процедуру(типа если имя такое то, то делай это, иначе делай то), но компилятор ясное дело начал ругаться, т.к. NotifyEvent. В интернете ничего похожего не нашел. События могут быть созданы заранее. Количество подменю в процессе программы может меняться.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
procedure TFClass.AddMenuItem;
var Item:TMenuItem;i:integer;str:string;
begin
for i:=1 to count do begin
  Item:=TMenuItem.Create(MainMenu1);
  Item.Name:='Name'+IntToStr(i);
  Item.Caption:=str;
  item.Onclick:=..............
  MenuOpenRecentFile.Add(Item);
end;
end;
...
Рейтинг: 0 / 0
Как указать имя события для каждого пункта подменю Item.OnClick в цикле?
    #39918889
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леон4ik,

Если это реализация MRU листа, то не проще сделать какой-нибудь TStringsList с именами файлов, на каждую его строку - элемент меню, индекс записать в MenuItem.Tag и общий обработчик, который будет по этому .Tag открывать файл?

Или вообще, полный путь файла в .Hint писать.
...
Рейтинг: 0 / 0
Как указать имя события для каждого пункта подменю Item.OnClick в цикле?
    #39918890
Леон4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp, У меня все имена файлов хранятся в Ini-файле
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
procedure TFAsm.AddFilePathMenu;
var Item:TMenuItem;i,count,c:integer;Ini:TIniFile;str:string;
begin
strExePath:= ExtractFilePath(ParamStr(0));
Ini := TIniFile.Create(strExePath + 'SettingsAsm.ini');
c:=Ini.ReadInteger('RecentFiles','Count',0);
if c<=10 then count:=c
else count=10;
for i:=1 to count do begin
  str:=Ini.ReadString('RecentFiles','File'+IntToStr(i),'');
  Item:=TMenuItem.Create(MainMenu1);
  Item.Name:='M'+IntToStr(i);
  Item.Caption:=str;
  item.Onclick:=
  MenuOpenRecentFile.Add(Item);
end;
Ini.Free;
end;
...
Рейтинг: 0 / 0
Как указать имя события для каждого пункта подменю Item.OnClick в цикле?
    #39918891
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леон4ik
alekcvp, У меня все имена файлов хранятся в Ini-файле

Ну а в чём тогда проблема?
Сделать общий обработчик событий для всех пунктов меню, полный путь файла писать в Item.Hint и в обработчике его оттуда читать ((Sender as TMenuItem).Hint) и открывать файл.

Или сразу по заголовку (Caption) открывать, раз у тебя туда имя полностью пишется.
...
Рейтинг: 0 / 0
Как указать имя события для каждого пункта подменю Item.OnClick в цикле?
    #39918893
Леон4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp, а можно маленький примерчик, чтоб я уж прям точно понял? Я так понял вы имеете ввиду что писать обработчик не при создании пункта меню а где то потом? Прост, я не могу понять как программа поймет на какой пункт меню я нажал
...
Рейтинг: 0 / 0
Как указать имя события для каждого пункта подменю Item.OnClick в цикле?
    #39918896
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леон4ikкак программа поймет на какой пункт меню я нажал

Для этого у обработчика есть параметр по фамилии Sender.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как указать имя события для каждого пункта подменю Item.OnClick в цикле?
    #39918909
Ghost Writer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леон4ik
а можно маленький примерчик
вот примерчик
Только может лучше, как советовали выше, полное имя хранить в Hint, а в Caption просто имя файла, а то путь к файлу бывает весьма длинный.
...
Рейтинг: 0 / 0
Как указать имя события для каждого пункта подменю Item.OnClick в цикле?
    #39918924
northener
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ghost Writer
Леон4ik
а можно маленький примерчик
вот примерчик
Только может лучше, как советовали выше, полное имя хранить в Hint, а в Caption просто имя файла, а то путь к файлу бывает весьма длинный.

Но бывает что имя файла у нескольких пунктов одинаковое, а пути к ним разные.
...
Рейтинг: 0 / 0
Как указать имя события для каждого пункта подменю Item.OnClick в цикле?
    #39918956
Леон4ik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А подскажите, пожалуйста, как удалить подпункты меню если они есть. Думал так,только не знаю что в скобках писать MenuOpenRecentFile.Items[ ].Clear;
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как указать имя события для каждого пункта подменю Item.OnClick в цикле?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]