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

Управление доступом в Компоненте "Файл"

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

Re: Управление доступом в Компоненте "Файл"

Сообщение admin » Сб май 27, 2017 4:10 pm

neitri писал(а):Да заблокирует всю кнопку.

В дереве объектов есть
Constants -> Popup menu items -> dxFile.Button
С контантами MI_FILE_OPEN MI_FILE_LOAD MI_FILE_SAVE MI_FILE_CLEAR
А где само меню не могу найти.
dxFile.PopupMenu nil
dxFile.Button.PopupMenu тоже nil

Надо будет исправить.

neitri
Мастер скриптов
Сообщения: 539
Зарегистрирован: Пн фев 13, 2017 5:42 pm

Re: Управление доступом в Компоненте "Файл"

Сообщение neitri » Вс май 28, 2017 7:55 pm

Меню появилось. Но раскурить не получилось.
Заблокировать пункты меню не получается можно только скрыть.

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

var
  OldOnClick:TNotifyEvent;

Procedure ClickFile(Sender:TObject);
begin
  if TSpeedButton(Sender).PopupMenu=nil then
    debug('no popupMenu')
  else
    begin
      debug('popup menu ok');
      TSpeedButton(Sender).PopupMenu.Items[MI_FILE_LOAD].enabled:=false;
      TSpeedButton(Sender).PopupMenu.Items[MI_FILE_OPEN].enabled:=false;
      TSpeedButton(Sender).PopupMenu.Items[MI_FILE_SAVE].enabled:=false;
      TSpeedButton(Sender).PopupMenu.Items[MI_FILE_CLEAR].enabled:=false;
//      TSpeedButton(Sender).PopupMenu.Popup;  //вариант 3
    end;
  OldOnClick(Sender); // вариант 2
end;

procedure Form_Create;
begin
//dxButton1.onclick:=@
OldOnClick:=dxFile1.Button.OnClick;
dxFile1.Button.OnClick:=@ClickFile;
// код ниже не работает вариант 1
  if dxFile1.Button.PopupMenu=nil then
    debug('no popupMenu')
  else
    begin
      dxFile1.Button.PopupMenu.items.Items[MI_FILE_LOAD].visible:=false;  // работает
      dxFile1.Button.PopupMenu.items.Items[MI_FILE_OPEN].visible:=false;  // работает
      dxFile1.Button.PopupMenu.items.Items[MI_FILE_SAVE].enabled:=false;  // не работает
      dxFile1.Button.PopupMenu.items.Items[MI_FILE_CLEAR].enabled:=false;  // не работает
    end;
end;


Думаю лучше добавить перечисление [miOpen, miLoad, miSave, miClear] и добавить в TdxFile соответствующее свойство Permission например.
Помогли Тебе. Помоги проекту.
Реквизиты помощи Вы можете найти в окне "О программе"

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

Re: Управление доступом в Компоненте "Файл"

Сообщение admin » Вс май 28, 2017 9:04 pm

neitri писал(а):Меню появилось. Но раскурить не получилось.

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