Последняя версия DataExpress 3 beta от 9 октября 2018 года. Скачать. Энциклопедия DX. Форум на Develop-Soft

условный запрет редактирования полей

Вопросы, связанные с конструктором приложений баз данных DataExpress.
Аватара пользователя
YurAnt
Эксперт
Сообщения: 3361
Зарегистрирован: Чт апр 13, 2017 8:57 am
Контактная информация:

Re: условный запрет редактирования полей

Сообщение YurAnt » Пт сен 01, 2017 6:20 pm

Попробуйте & вместо |.
Изображение

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

Re: условный запрет редактирования полей

Сообщение YurAnt » Пт сен 01, 2017 6:26 pm

В общем с объектом неколько сложнее (не проверил сразу - кнопка выбора остается). Чуть позже попробую выложить решение...
Изображение

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

Re: условный запрет редактирования полей

Сообщение neitri » Пт сен 01, 2017 6:37 pm

Опять не хватает свойства readonly.
Помогли Тебе. Помоги проекту.
Реквизиты помощи Вы можете найти в окне "О программе"

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

Re: условный запрет редактирования полей

Сообщение YurAnt » Пт сен 01, 2017 6:39 pm

Где?
Изображение

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

Re: условный запрет редактирования полей

Сообщение neitri » Пт сен 01, 2017 7:01 pm

У стандартных элементов. Я уже помнится просил что то такое.
попробуйте такое выражение

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

{@function
OrigName=ObjectEnable
Name=ObjectEnable
Args=sb
Result=
Group=neitri
Description=Функция для управления доступностью объектов.<br>
Если условие истинно, указанный объект отображается иначе будет скрыт.<br><br>
OBJECTVISIBLE(текст, условие)<br><br>
<B>Параметры:</B> текст - имя объекта. условие - условие доступности элемента <br><br>
<B>Пример:</B><br><br>
OBJECTENABLE('dxEdit1',USER='Admin')<br><br>
Поле dxEdit1 будет доступно только пользователю Admin.
@}
procedure ObjectEnable(name: string; Enabled:boolean);
var
  o:TComponent;
  s:string;
  i:integer;
Begin
  o:=self.FindComponent(name);
  if o<> nil then
    begin
      s:=LowerCase(o.Classname);
      if s='tdxedit' then
        tdxedit(o).Enabled:=Enabled
      else if s='tdxcalcedit' then
        begin
          tdxcalcedit(o).Enabled:=Enabled;
          tdxcalcedit(o).HideButton:=not Enabled;
        end
      else if s='tdxdateedit' then
        begin
          tdxdateedit(o).Enabled:=Enabled
          tdxdateedit(o).HideButton:=not Enabled;
        end
      else if s='tdxtimeedit' then
        begin
          tdxtimeedit(o).Enabled:=Enabled;
          tdxtimeedit(o).HideButton:=not Enabled;
        end
      else if s='tdxcombobox' then
        tdxcombobox(o).Enabled:=Enabled
      else if s='tdxlookupcombobox' then
        begin
          tdxlookupcombobox(o).Enabled:=Enabled;
          tdxlookupcombobox(o).Button.Enabled:=Enabled;
        end
      else if s='tdxmemo' then
        tdxmemo(o).Enabled:=Enabled
      else if s='tdxcounter' then
        tdxcounter(o).Enabled:=Enabled
      else if s='tdxchekbox' then
        tdxcheckbox(o).Enabled:=Enabled
      else if s='tdxobjectfield' then
          tdxobjectfield(o).Enabled:=Enabled;
      else if s='tdxfile'then
        begin
          tdxfile(o).Enabled:=Enabled;
          tdxfile(o).Button.Enabled:=Enabled;
        end
      else if s='tdximage'then
        begin
          tdxfile(o).Enabled:=Enabled;
          for i:=0 to tdxfile(o).PopUpMenu.Items.count -1 do
            tdxfile(o).PopUpMenu.Items[i].Enabled:=Enabled;
        end
      else
        TControl(o).Enabled:=Enabled;
    end;
End;   
Помогли Тебе. Помоги проекту.
Реквизиты помощи Вы можете найти в окне "О программе"

Аватара пользователя
rausNT
Знаток
Сообщения: 473
Зарегистрирован: Чт авг 24, 2017 9:23 am

Re: условный запрет редактирования полей

Сообщение rausNT » Пт сен 01, 2017 9:27 pm

Спасибо, попробую.
Столько кода для такой простой вещи :shock: :shock: :shock:

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

Re: условный запрет редактирования полей

Сообщение admin » Пт сен 01, 2017 9:44 pm

rausNT писал(а):Столько кода для такой простой вещи

На самом деле столько кода нужно для нормального работы функции модуля выражений. Если делать это скриптом, то код будет намного проще.

jurist23rus
Эксперт
Сообщения: 2439
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп

Re: условный запрет редактирования полей

Сообщение jurist23rus » Пт сен 01, 2017 10:16 pm

rausNT писал(а):Столько кода для такой простой вещи :shock: :shock: :shock:

Это удивительная штука. Кода много нужно написать один раз, а потом многие люди во многих случаях будут пользоваться функцией и даже не догадываться сколько там кода и как он работает. Не нужно учить языков программирования, не нужно досконально разбираться в DX, вообще ничего не нужно, просто взял модуль выражений, написанный ранее кем-то, установил, написал простенькое

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

OBJECTENABLE('dxEdit1',USER='Admin')


и вуаля, всё работает.Прелесть :)
Destiny is a very convenient word for those who never take decisions.

Аватара пользователя
rausNT
Знаток
Сообщения: 473
Зарегистрирован: Чт авг 24, 2017 9:23 am

Re: условный запрет редактирования полей

Сообщение rausNT » Пт сен 01, 2017 11:08 pm

neitri писал(а):попробуйте такое выражение


А можете это положить в свою библиотеку скриптов?

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

Re: условный запрет редактирования полей

Сообщение neitri » Сб сен 02, 2017 4:43 am

Обновил модуль, версия 15 http://forum.mydataexpress.ru/viewtopic.php?f=16&t=832#p5939

Нашел одну фишку. вместо портянки

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

BLOCK(
OBJECTENABLE('dxEdit1',false),
OBJECTENABLE('dxEdit2',false),
OBJECTENABLE('dxEdit3',false),
OBJECTENABLE('dxDateEdit1',false),
OBJECTENABLE('dxTimeEdit1',false),
OBJECTENABLE('dxCalcEdit1',false),
OBJECTENABLE('dxCalcEdit2',false),
OBJECTENABLE('dxCalcEdit3',false),
OBJECTENABLE('dxCalcEdit4',false))

можно элементы разместить в группе и написать OBJECTENABLE('dxGroupBox1',false)
Судя по рисунку они у вас уже в группе.
Для доступа к именам объектов не забываем включить "режим эксперт" в меню файл.
Помогли Тебе. Помоги проекту.
Реквизиты помощи Вы можете найти в окне "О программе"