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

Скрипты. Урок 6.

Для тех кто считает, что лучше один раз увидеть, чем сто раз услышать. Тут же можно комментировать, предлагать, обсуждать просмотренное.
jurist23rus
Эксперт
Сообщения: 2165
Зарегистрирован: Пт сен 30, 2016 9:42 am
Откуда: Майкоп

Скрипты. Урок 6.

Сообщение jurist23rus » Вс мар 05, 2017 9:49 pm

phpBB [video]
Destiny is a very convenient word for those who never take decisions.

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

Re: Скрипты. Урок 6.

Сообщение neitri » Вс апр 02, 2017 7:14 pm

Для изменения булевого значения в примере используется следующий код.

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

if Sender = Button_Enabled then
   begin
      if dxEdit1.Enabled = true then dxEdit1.Enabled := false
         else dxEdit1.Enabled := true;
   end;

Для данного типа используется два типа True и False. Если использовать оператор not можно получить противоположное значение.
True тоже самое что not False. Аналогично False равно not True.
Поэтому для изменения значения переменной на противоположное, можно использовать оператор not.

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

dxEdit1.Enabled := not dxEdit1.Enabled;

При выполнении данного кода произойдет следующее.
Предположим dxEdit1.Enabled имеет значение False. код исполняется справа налево, т.е. операция присваивания будет последней. Берем значение dxEdit1.Enabled, оно равно False. Читаем левее not. Нам нужно инвертировать наше значение False, результат будет True. Читаем дальше ":=" присвоить еще левее куда присвоить - dxEdit1.Enabled . Присваиваем dxEdit1.Enabled то что у нас получилось - True.
При следующем выполнении будет начальное значение True, соответственно инвертированное будет False.

итоговый код может быть таким

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

if Sender = Button_Enabled then dxEdit1.Enabled := not dxEdit1.Enabled;
if Sender = Button_Hide then dxEdit1.Visible := not dxEdit1.Visible;
Но такой пример мне кажется не очень удачным.

Использование одного обработчика для изменения разных свойств, требует больше времени для понимания что к чему. Использование Переменной Sender я оцениваю для более глубокого изучения.
Пример я бы разделил на три отдельных процедуры.
TogleEnabled, TogleVisible, TogleText

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

procedure TogleText(Sender:TObject);
begin
  If self['текстовое поле']=null then
    begin
      self['текстовое поле']='Нажата кнопка';
      dxButton1.Caption:='Очистить';
    end
  else
    begin
      self['текстовое поле']:=null;
      dxButton1.Caption:='Текст';
    end;
end;

procedure TogleEnabled(Sender:TObject);
begin
 dxEdit1.Enabled := not dxEdit1.Enabled;
end;

procedure TogleVisible(Sender:TObject);
begin
  dxEdit1.Visible := not dxEdit1.Visible;
end;
 
Procedure Form_Create()
begin
dxButton1.OnClick:=@TogleText;
Button_Enabled.OnClick:=@TogleEnabled;
Button_Visible.OnClick:=@TogleVisible;
end;


Другой пример .
Задача есть некая форма учета общежития в которой указывается площадь помещения и количество проживающих. Необходимо контролировать чтобы на каждого проживающего приходилось не менее X квадратных метров.
Если считать площадь на человека по формуле Self['Площадь']/self['Количество'] то оно может даже долго будет работать. Пока не попадется комната в которой никто не будет жить. Для исключения данной ситуации необходимо проверять, что количество проживающих больше 0.

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

function test:integer;
begin
if self['Количество']=0 then
  Result:=0 // Если количество проживающих = 0  возвращаем 0
else
  Result:=Self['Площадь']/self['Количество']; // Все условия проверены считаем площадь на человека.
end;

Но и это еще не все. наши значения могут быть не определены, их перед расчетом необходимо проверить.

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

function test:integer;
begin
Result:=-1; // если расчет не будет выполнен это значение вернется по завершению функции.
if self['Количество']=null or Self['Площадь']=null then
  debug('Одно или оба значения не определены')
else if Self['Площадь']<0 then
  debug('Площадь не может быть отрицательной')
else if self['Количество']<0 then
  debug('Количество проживающих не может быть отрицательным')
else if self['Количество']=0 then
  Result:=0 // Если количество проживающих = 0  возвращаем 0
else
  Result:=Self['Площадь']/self['Количество']; // Все условия проверены считаем площадь на человека.
end;
Помогли Тебе. Помоги проекту.
Реквизиты помощи Вы можете найти в окне "О программе"

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

Re: Скрипты. Урок 6.

Сообщение jurist23rus » Вс апр 02, 2017 7:42 pm

Neitri вы смотрите видеоуроки по скриптам? Они как бы "немного не для программистов" :) Но мне приятно.
Destiny is a very convenient word for those who never take decisions.


Вернуться в «Обучающее видео по работе с DataExpress.»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость