Последняя версия DataExpress 3 beta от 1 сентября 2019 года.
Изображение Скачать | Изображение Что нового?
См. также: Энциклопедия DX | Форум на develop-soft | Песочница
ИзображениеИзображениеИзображение

Скрыть пункт меню MainWindow

Все о том как сделать что-то с помощью скриптов.
Stalker
Заглянувший
Сообщения: 5
Зарегистрирован: Ср янв 18, 2017 10:18 pm

Скрыть пункт меню MainWindow

Сообщение Stalker » Пт янв 26, 2018 2:03 am

Добрый день!

Пытаюсь с помощью скрипта скрыть некоторые пункты в MainMenu.
В процедуру Database_Open, поместил строку MainWindow.Menu.Items[4].Visible:= False; ( например выключить пункт "Помощь" )
В режиме "разработчик" - все ОК, а вот если войти в систему под пользователем у которого назначен "интерфейс"( меню и закладки), то данное выражение не работает.

Можно ли написать правильный пример как с этим бороться или это баг?

Спасибо!

Аватара пользователя
admin
Разработчик
Сообщения: 4516
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская
Благодарил (а): 19 раз
Поблагодарили: 73 раза

Re: Скрыть пункт меню MainWindow

Сообщение admin » Пт янв 26, 2018 8:26 am

С меню не так просто, т. к. оно может быть разным для каждого пользователя. Лучше не ссылаться на пункты по индексу, а искать по названию пункта. Скрывая пункт "Помощь", Вы тем самым скрываете автора конструктора. В лицензии это не прописано, но вообще так делать не желательно.

Аватара пользователя
YurAnt
Эксперт
Сообщения: 3361
Зарегистрирован: Чт апр 13, 2017 8:57 am
Поблагодарили: 4 раза
Контактная информация:

Re: Скрыть пункт меню MainWindow

Сообщение YurAnt » Пт янв 26, 2018 9:36 am

admin писал(а):В лицензии это не прописано.

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

Stalker
Заглянувший
Сообщения: 5
Зарегистрирован: Ср янв 18, 2017 10:18 pm

Re: Скрыть пункт меню MainWindow

Сообщение Stalker » Пт янв 26, 2018 12:45 pm

Умысла скрывать автора действительно не было и нет, просто я думаю, что конечному пользователю,которому нужно вбить данные в форму и распечатать отчет, не очень интересно будет читать разделы "Статьи", "Видеоуроки", "Программистам".

тимур
Интересующийся
Сообщения: 67
Зарегистрирован: Ср авг 01, 2018 4:06 am
Благодарил (а): 8 раз

Re: Скрыть пункт меню MainWindow

Сообщение тимур » Ср авг 01, 2018 4:43 am

Stalker писал(а):Умысла скрывать автора действительно не было и нет, просто я думаю, что конечному пользователю,которому нужно вбить данные в форму и распечатать отчет, не очень интересно будет читать разделы "Статьи", "Видеоуроки", "Программистам".


Подскажите Вы нашли решение? В данном случае у большинства действительно нет задачи как-то нарушить лицензию и права автора, пусть они (пункт о программе и т.п.) остаются, задача в том что действительно допустим сотруднику с ограниченными правами и с должностью кладовщика не зачем лишний раз- процитирую "читать разделы "Статьи", "Видеоуроки", "Программистам". Ведь отчасти данные пункты нужны именно разработчику (дизайнеру), либо также можно вынести в отдельное меню. Спасибо.

Kiss
Интересующийся
Сообщения: 191
Зарегистрирован: Вт мар 14, 2017 11:41 am
Откуда: Гомель, Беларусь
Благодарил (а): 5 раз
Поблагодарили: 8 раз

Re: Скрыть пункт меню MainWindow

Сообщение Kiss » Пт фев 08, 2019 4:31 pm

admin писал(а):Скрывая пункт "Помощь", Вы тем самым скрываете автора конструктора. В лицензии это не прописано, но вообще так делать не желательно.

Stalker писал(а):Умысла скрывать автора действительно не было и нет, просто я думаю, что конечному пользователю,которому нужно вбить данные в форму и распечатать отчет, не очень интересно будет читать разделы "Статьи", "Видеоуроки", "Программистам".
Согласен. Сам столкнулся.
Взяли бухгалтера, показали, когда как и зачем мы пользуемся базой. Вроде всё просто. Позже она открыла "Помощь", нажала "Руководство пользователя" и пошла на сайт читать про "Флажок", "Надпись" итп.
Потом приходит ко мне и спрашивает: "А что в инструкции по базе за Дизайнеры, Модули такие",
я говорю: "Это для разработчиков",
она "А сделай тогда инструкцию, чтоб в "Помощи" было для сотрудников что-то полезное или убери вообще, чтоб народ не пугать".
---
Так-то "О программе" - это понятно, там автор программы, кнопочка "поддержи проект", лицензия... А вот остальные пункты хотелось бы оставить только для юзеров с ролью Разработчик.
---
Так что, думаю, вопрос актуален. Получилось у кого-нибудь?
admin писал(а):Лучше не ссылаться на пункты по индексу, а искать по названию пункта.
Вот конкретно тут я вообще не нашел "как". В руководстве написано: "Все возможные константы для разных элементов интерфейса вы можете найти в дереве классов в подразделах «Mainmenuitems», «Popupmenuitems», «Toolbarbuttons» раздела «Constants»".
Только вот «Mainmenuitems» там нету((

Код: Выделить всё

MainWindow.Menu.Items[?????].Visible:= False

Аватара пользователя
rausNT
Специалист
Сообщения: 692
Зарегистрирован: Чт авг 24, 2017 9:23 am
Благодарил (а): 63 раза
Поблагодарили: 6 раз

Re: Скрыть пункт меню MainWindow

Сообщение rausNT » Пт фев 08, 2019 4:49 pm

Kiss писал(а): Только вот «Mainmenuitems» там нету((

Код: Выделить всё

MainWindow.Menu.Items[?????].Visible:= False


Вот тут разработчик так обращается к пунктам меню. Правда не скрывает их, а запрещает использовать, но смысл в принципе понятен.

Код: Выделить всё

var
  DesignerHandler, ExtHandler: TNotifyEvent;

procedure MenuHandler(Sender: TObject);
begin
  MsgBox('Внимание!', 'Доступ запрещен!');
end;

procedure Database_Open;
begin
  if GetCurrentUser = 'Админ' then
  begin
    DesignerHandler := MainWindow.Menu.Items[0].Items[5].OnClick;
    ExtHandler := MainWindow.Menu.Items[0].Items[8].OnClick;
    MainWindow.Menu.Items[0].Items[5].OnClick := @MenuHandler;
    MainWindow.Menu.Items[0].Items[8].OnClick := @MenuHandler;
  end;
end;

procedure Database_Close;
begin
  if GetCurrentUser = 'Админ' then
  begin
    MainWindow.Menu.Items[0].Items[5].OnClick := DesignerHandler;
    MainWindow.Menu.Items[0].Items[8].OnClick := ExtHandler;
  end;
end;

Blastpv
Новичок
Сообщения: 44
Зарегистрирован: Пн янв 14, 2019 12:13 pm
Откуда: Ноябрьск
Контактная информация:

Re: Скрыть пункт меню MainWindow

Сообщение Blastpv » Пт фев 08, 2019 7:27 pm

admin писал(а):С меню не так просто, т. к. оно может быть разным для каждого пользователя. Лучше не ссылаться на пункты по индексу, а искать по названию пункта. Скрывая пункт "Помощь", Вы тем самым скрываете автора конструктора. В лицензии это не прописано, но вообще так делать не желательно.


Заставку запуска программы сделать с задержкой и крупным шрифтом Имя автора на ней указывать 8-)

jurist23rus
Эксперт
Сообщения: 2624
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп
Благодарил (а): 2 раза
Поблагодарили: 10 раз

Re: Скрыть пункт меню MainWindow

Сообщение jurist23rus » Пт фев 08, 2019 7:30 pm

rausNT писал(а):Вот тут разработчик так обращается к пунктам меню. Правда не скрывает их, а запрещает использовать, но смысл в принципе понятен.


Если быть точным, то в примере автор подменяет обработчики событий кликов по пунктам меню своими. Таким образом меняя их функционал со штатного на свой, в данном случае при клике показывается сообщение.
Destiny is a very convenient word for those who never take decisions.

jurist23rus
Эксперт
Сообщения: 2624
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп
Благодарил (а): 2 раза
Поблагодарили: 10 раз

Re: Скрыть пункт меню MainWindow

Сообщение jurist23rus » Пт фев 08, 2019 7:32 pm

Blastpv писал(а):Заставку запуска программы сделать с задержкой и крупным шрифтом Имя автора на ней указывать 8-)


Просто не скрывайте пункт меню "О программе".
Destiny is a very convenient word for those who never take decisions.