powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получить имя меню при вызове процедуры
38 сообщений из 38, показаны все 2 страниц
Получить имя меню при вызове процедуры
    #39997623
Midasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый день.
Есть задача создания динамического меню.
Я написал код
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
procedure TForm4.ComboBox1Change(Sender: TObject);
var
i:integer;
Menu1,MItem:TMenuItem;
begin
for i := 0 to TreeView1.Items.Count-1 do
 begin
  if TreeView1.Items.Item[i].Level=0 then
   begin
   Menu1:=TMenuItem.Create(MainMenu1);
   Menu1.Caption:=TreeView1.Items.Item[i].Text;
   MainMenu1.Items.Add(Menu1);
   end;
   if TreeView1.Items.Item[i].Level<>0 then
    begin
    MItem:=TMenuItem.Create(MainMenu1);
    MItem:=NewItem(TreeView1.Items.Item[i].Text, TextToShortCut('F1'), false, true, a1Click, 0, MItem.Caption);
    Menu1.Add(MItem);
    end;
     end;
end;


Данные в TreeView1 загружаются из файла через
Код: pascal
1.
TreeView1.LoadFromFile();


В строке
Код: pascal
1.
MItem:=NewItem(TreeView1.Items.Item[i].Text, TextToShortCut('F1'), false, true, a1Click, 0, MItem.Caption);


Вы можете видеть a1Click который должен отвечать за клик по меню который был оформлен в виде
Код: pascal
1.
2.
3.
4.
procedure TForm4.a1Click(Sender: TObject);
begin
//Пока пусто
end;


и MItem.Caption который отвечает за имя меню.
Есть ли возможность получить имя меню при вызове a1Click?
Если да то как?
Заранее спасибо.
Среда разработки Delphi 10.2 Architect
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39997628
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
медитируй над Сендером
(Sender)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39997630
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MidastaЕсли да то как?

Задумайся: зачем у обработчика события параметр Sender?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39997631
Midasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,
Добрый день.
В a1Click я пишу
Код: pascal
1.
Showmessage(Sender.toString);


и получаю TMenuItem.
Не подскажите как его использовать?
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39997632
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На выбор
Код: pascal
1.
2.
TMenuItem(Sender).
(Sender as TMenuItem).
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39997634
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
11.09.2020 13:43, Midasta пишет:
> и получаю TMenuItem.

да шо ты говоришь!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39997635
Midasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий

11.09.2020 13:43, Midasta пишет:
> и получаю TMenuItem.

да шо ты говоришь!


Спасибо за направление)))
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39997637
Midasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X-Cite
На выбор
Код: pascal
1.
2.
TMenuItem(Sender).
(Sender as TMenuItem).



Все получилось. Большое спасибо)))
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39997676
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем имя? Попахивает кривизной архитектуры...
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39997681
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
11.09.2020 15:31, white_nigger пишет:
> А зачем имя? Попахивает кривизной архитектуры...

нет там архитектуры
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39997870
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне вообще непонятна цель переноса из Tree в Menu - "или крестик снимите, или трусы наденьте"....
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39997900
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DarkMaster
Мне вообще непонятна цель переноса из Tree в Menu

Ну просто у меню нет метода LoadFromFile.
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998216
Midasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster
Мне вообще непонятна цель переноса из Tree в Menu - "или крестик снимите, или трусы наденьте"....

Добрый день. Просто есть цель позволить пользователю переключатся между классическим и стандартным видом меню.Все пункты я храню в базе данных
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998250
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
14.09.2020 10:26, Midasta пишет:
> Все пункты я храню в базе данных

нахрена?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998257
Midasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий

14.09.2020 10:26, Midasta пишет:
> Все пункты я храню в базе данных

нахрена?


У каждого меню есть свой ID который задается во время добавления нового пункта меню и сразу же сохраняется базу
и в соответствии с этим ID открывается форма связанная с этим меню
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998258
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
нахрена?

Это один из стандартных идиотизмов, с которых начинают ламеры, пытающиеся спроектировать суперпупервундервафлю. Следующими шагами обычно становятся отказ от визуального дизайнера, "все формы мы храним в БД" итдитп.
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998260
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
14.09.2020 12:03, Midasta пишет:
> У каждого меню есть свой ID который задается во время добавления нового пункта меню и сразу же сохраняется базу
> и в соответствии с этим ID открывается форма связанная с этим меню

повторяю вопрос.
нахрена?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998270
Midasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,
При двойном клике программа обращается в базу и в соответствии с ID открывает форму привязанную к пункту меню
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998272
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
14.09.2020 12:32, Midasta пишет:
>
> При двойном клике программа обращается в базу

уточняющий вопрос.
нахрена в базу?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998275
Midasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий,
Может произойти динамическое добавление пункта меню пользователем такое как добавление отчета который сохранен в текстовом файле.И для хранения пути к этому файлу мне удобней хранить эти данные в базе. У Вас есть какие то предложения чтобы оптимизировать этот процесс?
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998362
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
14.09.2020 12:41, Midasta пишет:
> Может произойти динамическое добавление пункта меню пользователем

а динамическое добавление КОДА, который будет обрабатывать
этот "динамически добавленный пункт меню" кто будет делать?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998407
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Мимопроходящий
нахрена?

Это один из стандартных идиотизмов, с которых начинают ламеры, пытающиеся спроектировать суперпупервундервафлю. Следующими шагами обычно становятся отказ от визуального дизайнера, "все формы мы храним в БД" итдитп.

Хранение идентификаторов пунктов главного меню в базе - отличная практика.
Таким образом очень легко и удобно настроить права доступа, видимость и порядок пунктов. У разных клиентов (и их пользователей) они разные.
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998414
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
14.09.2020 12:41, Midasta пишет:
> Может произойти динамическое добавление пункта меню пользователем

а динамическое добавление КОДА, который будет обрабатывать
этот "динамически добавленный пункт меню" кто будет делать?
Один и тот же код обработчика менюитема вполне способен обрабатывать множество однотипных разных задач.
Например, вызов функции плагина, или ShellExecute имени файла-отчета...
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998431
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Таким образом очень легко и удобно настроить права доступа, видимость и порядок пунктов.

Настройка на этом уровне прав доступа - идея крайне сомнительная. Проще всего её прокомментировать следующим образом: а все кнопки приложения тоже в БД записывать?

Видимость - частное следствие прав доступа.

Что касается порядка пунктов... скажем так, лично мне никогда не требовалось такого делать. Я поработал с одной системой, где такое было, и вынес для себя решение, что это дикий и ничем не оправданный бардак. В результате коммуникации с пользователем - что и где ему нужно нажать или что он нажимает и у него не работает - стали отдельным квестом на любителя.
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998495
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer

Настройка на этом уровне прав доступа - идея крайне сомнительная. Проще всего её прокомментировать следующим образом: а все кнопки приложения тоже в БД записывать?


Кнопки приложения по-хорошему должны соответствовать Actions. Из имени Action можно получить имя чего-то (таблицы или функции) в БД. Я так и делал - проверял есть ли у данного усера право на соответствующий объект базы и соответственно енайблил Action. В результате все права настраивались на уровне ролей в БД. Очень удобно.

softwarer
Что касается порядка пунктов... скажем так, лично мне никогда не требовалось такого делать. Я поработал с одной системой, где такое было, и вынес для себя решение, что это дикий и ничем не оправданный бардак. В результате коммуникации с пользователем - что и где ему нужно нажать или что он нажимает и у него не работает - стали отдельным квестом на любителя.


Тут согласен.
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998499
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookin
Кнопки приложения по-хорошему должны соответствовать Actions.

Именно. Следующий пункт - связь между Action-ом и ролью. И для "идентификаторов пункта меню" места ну совершенно не остаётся.
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998517
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Настройка на этом уровне прав доступа - идея крайне сомнительная. Проще всего её прокомментировать следующим образом: а все кнопки приложения тоже в БД записывать?
Ну, на самом деле, права доступа - конечно, должны на более глубокие объекты настраиваться. На формы, например, которые могут открываться как из меню, так и из других форм.
Но иногда и это может быть удобно.

softwarer
Видимость - частное следствие прав доступа.


Нет, и близко.
Один клиент говорит - уберите эти отчеты из меню, мы ими не пользуемся!
А другой - так про другие говорит, и так далее.

softwarer
это дикий и ничем не оправданный бардак


Да какой бардак. Есть порядок по умолчанию, который и используется всегда.
И только если, опять же, какой-то клиент хочет поменять пункты местами - можно добавить исключение.
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998518
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Midasta
Может произойти динамическое добавление пункта меню пользователем такое как добавление отчета который сохранен в текстовом файле.И для хранения пути к этому файлу мне удобней хранить эти данные в базе.

Меню храним в базе, а отчёты - в локальном файле, зашибись.
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998520
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Victor Cookin
Кнопки приложения по-хорошему должны соответствовать Actions.

Именно. Следующий пункт - связь между Action-ом и ролью. И для "идентификаторов пункта меню" места ну совершенно не остаётся.
В вашем случае - "идентификатор пункта меню" равен наименованию экшена.
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998522
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Midasta
Может произойти динамическое добавление пункта меню пользователем такое как добавление отчета который сохранен в текстовом файле.И для хранения пути к этому файлу мне удобней хранить эти данные в базе.

Меню храним в базе, а отчёты - в локальном файле, зашибись.
А смысл отчет в базу пихать?
В базе - данные отчета, а отчет нужен, чтобы на него глянуть и при желании распечатать, всё.
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998531
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
Но иногда и это может быть удобно.

Как обоснование выбора архитектурного решения такое "иногда" совершенно не катит.

YuRock
Один клиент говорит - уберите эти отчеты из меню, мы ими не пользуемся!

Так это модульная структура приложения. Не поставлять ему эти модули и всё.

YuRock
Да какой бардак.

Самый что ни на есть конкретный. Видел я приложение, в котором решили дать аналитикам настраивать расположение кнопок, картинки, надписи итп. непосредственно в exe - с благородной целью "чтобы не отвлекать разработчиков на эти мелочи". В итоге на dev-сервере приложение выглядит одним образом, на test-сервере другим, а на проде и вовсе третьим, и переключаясь между ними, регулярно лезешь в конфигуратор дабы найти "да куда ж блин засунули мою кнопку-то??"

YuRock
Есть порядок по умолчанию, который и используется всегда. И только если, опять же, какой-то клиент хочет поменять пункты местами - можно добавить исключение.

"За всю свою жизнь" я не встречал клиентов, которые бы этого всерьёз хотели. Если позарез потребуется, то приделать, конечно, несложно, но опять же, как обоснование архитектурного решения - ну просто и близко недостаточно.
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998543
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
А смысл отчет в базу пихать?
В базе - данные отчета, а отчет нужен, чтобы на него глянуть и при желании распечатать, всё.


1000 пользователей, отчёт поменялся - как деплоить будем?
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998555
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Так это модульная структура приложения. Не поставлять ему эти модули и всё.
Мой жизненный этап, когда я готовил сборки под каждого клиента, слава богу, уже закончился лет 15 назад.
С тех пор только настройки и разрешения в лицензионных ключах.
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998556
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookin
YuRock
А смысл отчет в базу пихать?
В базе - данные отчета, а отчет нужен, чтобы на него глянуть и при желании распечатать, всё.


1000 пользователей, отчёт поменялся - как деплоить будем?
Мы про разные вещи говорим.
Если "текстовый файл отчета" - это код отчета, то я согласен, конечно.
Мне показалось, что это у ТС - результат отчета.
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998557
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Видел я приложение, в котором решили дать аналитикам настраивать расположение кнопок, картинки, надписи итп. непосредственно в exe - с благородной целью
Этого я не предлагал
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998559
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
"За всю свою жизнь" я не встречал клиентов, которые бы этого всерьёз хотели
Ну, я встречал.
Некоторые кнопки (я их называю "быстрыми") я даже разрешил настраивать (или убирать) по многочисленным просьбам.
Как раньше в кнопочных нокиях было "Menu Active". Очень удобно было поставить в это меню то, что нужно.

Я вот видел прогу Microsoft Retalix, даже частично драйвер для нее писал для работы с отпуском топлива.

Так вот там - настраиваются вообще, фактически все кнопки в программе
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998613
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
softwarer
Так это модульная структура приложения. Не поставлять ему эти модули и всё.
Мой жизненный этап, когда я готовил сборки под каждого клиента, слава богу, уже закончился лет 15 назад.
С тех пор только настройки и разрешения в лицензионных ключах.

Не вижу сложности в том, чтобы клиенту отправилась или не отправилась dll-ка. Да, конечно, с тем же успехом можно сделать так, что модуль едет всегда, просто в конфиге стоит "не включать его". Но опять-таки, это настройка модуля, а не пункта меню.
...
Рейтинг: 0 / 0
Получить имя меню при вызове процедуры
    #39998618
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
YuRock
пропущено...
Мой жизненный этап, когда я готовил сборки под каждого клиента, слава богу, уже закончился лет 15 назад.
С тех пор только настройки и разрешения в лицензионных ключах.

Не вижу сложности в том, чтобы клиенту отправилась или не отправилась dll-ка. Да, конечно, с тем же успехом можно сделать так, что модуль едет всегда, просто в конфиге стоит "не включать его". Но опять-таки, это настройка модуля, а не пункта меню.
Про модули вообще не я беседу начал.
И пункты меню далеко не всегда вызывают что-то из отдельного модуля.
В общем, мне нового сказать уже нечего, всё удобство держать настройки видимости/порядка пунктов меню в базе я уже описал со своей точки зрения, и добавить нечего.
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получить имя меню при вызове процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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