Topic: триггер формы

можно ли создать триггер на изменения в форме ?

2 (edited by k245 2022-03-19 07:24:46)

Re: триггер формы

Если я правильно понял, речь идет о проверке, были ли внесены на форме какие-либо изменения в каждом элементе ввода данных. То есть в сравнении с исходными данными, которые были на форме редактирования в момент отображения. Я бы не стал делать именно триггер, так как в процессе изменения пользователь может многократно  менять данные, например, при наборе текста. Лучше иметь возможность в нужный момент узнать, были ли реальные изменения.


Это можно использовать для оптимизации процесса сохранения данных: если пользователь нажал кнопку "Сохранить", но никакие данные не вводил, то и сохранять ничего не нужно. Или наоборот: пользователь что-то поменял, а потом жмет кнопку "Отмена". Тогда можно предупредить его о том, что все изменения будут потеряны.


Готового решения у меня нет, но я бы сделал так.


1. В обработчике onShow пробежать по всем компонентам формы (свойство TForm.components[])   и в свойство TagStr записать текущее значение, при необходимости сконвертировав его в строку. Тут придется использовать проверку на класс (оператор is) и приведение к нужному типу. Это позволит создать один универсальный обработчик и подключить его ко всем формам редактирования.


2. В функции Form_isDataChange опять пробежать по всем компонентам и сравниmь текущее значение и свойство TagStr. Если есть различия, значит были изменения.


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

Визуальное программирование: блог и телеграм-канал.

3 (edited by sibprogsistem 2022-03-20 07:16:13)

Re: триггер формы

k245 wrote:

1. В обработчике onShow пробежать по всем компонентам формы (свойство TForm.components[])   и в свойство TagStr записать текущее значение, при необходимости сконвертировав его в строку. Тут придется использовать проверку на класс (оператор is) и приведение к нужному типу. Это позволит создать один универсальный обработчик и подключить его ко всем формам редактирования.


2. В функции Form_isDataChange опять пробежать по всем компонентам и сравниmь текущее значение и свойство TagStr. Если есть различия, значит были изменения.


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

тогда наверное лучше json
при загрузке пробежать по компонентам и записать их в json
   
trigger (массив)[
  объект(компонент){
     " ключ ":" значение",
     " ключ ":" значение"
  }
  объект(компонент){
     " ключ ":" значение",
     " ключ ":" значение"
  }
]