powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получить имя меню при вызове процедуры
25 сообщений из 38, страница 1 из 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
25 сообщений из 38, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получить имя меню при вызове процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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