Помимо больших, заметных изменений в платформе бывают и небольшие нововведения, которые призваны упростить процесс разработки и сделать его более приятным. И именно о таких приятных дополнениях пойдет речь в этой статье.
Традиционно работа с диалогами осуществлялось только с помощью функций InputDialog и InputDialogEx. При этом настройка такого диалога ограничивалась только параметрами этих функций. В Directum 4.9 появилась возможность работать с диалогом как с объектом IDialog. Свойства и методы объекта схожи со свойствами и методами объекта IComponent. В результате мы получаем доступ и до IForm диалога, и до значений каждого реквизита и так далее. Все это дает разработчику большие возможности на проектирование собственных форм через объектную модель.
Хотите заблокировать поля в зависимости от условий? Пожалуйста! Хочется переместить поле в правый нижний угол? И это возможно! Теперь можно отказаться от “тяжелой” обработки результата работы диалога, использовать несколько раз диалог без повторного его создания, а также многое другое.
Создать диалог как объект можно с помощью новой функции CreateInputDialog, которая своими параметрами похожа на функцию InputDialogEx. Различие в том, что CreateInputDialog возвращает IDialog, после чего можно заняться его гибкой настройкой.
Пример кода выше описанного диалога:
Dialog = CreateInputDialog(
"||Пример строки|Пример признака";
"Так как методы и свойства объекта IDialog соответствуют методами и свойствам IComponent, мы получаем возможность настраивать блокировку полей, их расположение на форме и многое другое.";
"String|String:30|String:30|Pick:Да,Нет"; "Пример работы с диалогом как работы с объектом")
// Настроить размеры формы
DialogForm = Dialog.Form
DialogForm.Width = 415
DialogForm.Height = 190
Controls = DialogForm.Controls
// Настроить расположение первого поля
Control = Controls.Values(0)
Control.Left = 5
Control.Width = 400
Control.Height = 80
Control.ReadOnly = TRUE
// Настроить расположение второго поля
Control = Controls.Values(1)
Control.Left = 85
Control.Top = 55
// Настроить расположение третьего поля
Control = Controls.Values(2)
Control.Left = 100
Control.Top = 100
//Control.Height = 30
Control.Width = 110
// Настроить расположение четвертого поля
Control = Controls.Values(3)
Control.Top = 100
Control.Left = 335
DialogForm.Show
// Получить результат работы диалога
if Dialog.RecordCount > 0
ResultStringList = CreateStringList()
ResultStringList.Delimiter = '|'
I = 1
while I < 4
Comment = Dialog.RequisiteValues.Values(I)
ResultStringList.Add(ifThen(Assigned(Comment); Comment; ''))
I = I + 1
endwhile
Result = ResultStringList.DelimitedText
endif
Диалог с возможность выбирать элементы из одного списка и добавлять в другой обзавелся интересным дополнением: теперь можно искать элементы в списке доступных элементов. Такое нововведение упрощает работу с диалогом для пользователя, а для разработчика расширяет область применения DualList’a.
У папок поиска появилось собственное событие! Данный механизм отлично подходит для перенастройки критериев поиска, что позволяет настроить поиска так, как вам нужно.
Событие поиска отрабатывается в случаи открытия папки или при ее обновлении. В событии также доступны объекты Object и Sender:
Приятные дополнения для разработчиков призваны по-новому взглянуть на уже всем знакомые элементы разработки, привнести в платформу больше удобства и открыть новые горизонты. А нам, прикладным разработчикам, следует использовать максимально возможности платформы и ожидать еще больше приятностей.
Денис, очень интересно было прочитать про IDialog с примером кода.
Мне кажется, в разделе Папки поиска. События. именно этого не хватает (решаемой задачи и куска кода).
Смайлик прелесть) А можно в IDialog задать произвольные кнопки? Напр. Далее
Денис, в параметрах функции CreateInputDialog не нашла параметра, отвечающего за кнопки, может я не там искала?
Анна, не CreateInputDialog, а InputDialogEx.
Михаил, InputDialogEx не предполагает гибкую настройку, нежели CreateInputDialog, что описано выше. Меня интересуют кнопки в CreateInputDialog - как их создать, и можно ли создать.
И, судя по запрашиваемым параметрам, мне кажется, что CreateInputDialog больше похожа на InputDialog, чем на InputDialogEx.
Добавьте, пожалуйста, пример для событий поиска.
Можно ли создавать программно папки поиска с кодом в событии?
Здорово!!!
А кнопка событие, надеюсь, доступна только администраторам?
Можно ли устанавливать событие программно? Например при создании папки?
Можно ли устанавливать обработчики событий на контролы формы inputDialog'a, как это делается с реквизитами справочников (Событие изменения, событие "Выбор из справочника")?
Можно ли устанавливать фильтры на поля типа "Справочник" на форме inputDialog'a?
Это очень круто.
а можно как-то программно "нажать" в реквизите типа справочник кнопку выбора из справочника?
А многострочное поле нельзя в InputDialog показать?
А что случилось с этой функцией в версии 5.2 и выше с появлением компоненты отдельной компоненты Диалоги? пытаюсь выполнить приведенный код, а мне выходит пустая форма без полей!
Это дефект в новой версии. Его зарегистрировали.
Принцип работы функции изменился в версии 5.2, несовместимость останется, к сожалению. Информация об этом будет внесена в справку по системе. Для корректной работы в версии 5.2 обращение к контролам формы необходимо осуществлять, начиная с индекса 1, а не 0 - Dialog.Form.Controls.Values(1)
Авторизуйтесь, чтобы написать комментарий