Динамічне створення елементів форм, на прикладі оновлюваної сторінки зображень (керовані форми).
Однією із зручних можливостей програмування форм є програмне створення елементів форми, не вдаючись до конструктора форм. І важливою особливістю цього є - програмне зміна типових форм, тим самим полегшуючи оновлення типових конфігурацій.
Створюємо порожню конфігурацію.
Створюємо новий Справочнік.Номенклатура
На вкладці «Дані» додаємо нову табличну частину «ДополнітельниеІзображенія», і колонку «ІмяФайлаІзображенія», тип даних - рядок, необмеженої довжини.
На вкладці «Форми» додаємо нову форму «ФормаЕлемента».
На форму додамо нову групу «Сторінки». Кнопка Додати (зелен. +), Вибираємо тип елемента «Група - сторінки».
Ім'я групи (сторінки) залишаємо як «Группа1», далі
Додаємо в цю групу (Группа1) дві сторінки.
Группа2 і Группа3, в поле заголовок для групи 2 - вводимо «Зображення», для
группи3 - «Каталог»
Тепер переносимо табличну частину «ДополнітельниеІзображенія» в «Группу2»,
і для видимості другої сторінки додали на страніцу2 - «Декорацію - Напис». Має вийти так, як на картинці:
У властивостях елементу управління «ДополнітельниеІзображеніяІмяФайлаІзображенія» табличній частині встановіть параметр «КнопкаВибора» в значення «ТАК».
Також у властивостях цього поля задайте Подія «НачалоВибора» для кнопки вибору
На цьому проектування форми закінчимо і приступимо безпосередньо до написання коду. За кнопці вибору при додаванні нового рядка з зображеннями будемо відкривати діалог вибору файлу і прописувати в імені файлу - шлях до обраного зображенню.
процедура
ДополнітельниеІзображеніяІмяФайлаІзображеніяНачалоВибора (Елемент. ДанниеВибора. СтандартнаяОбработка)
// Вставити вміст обробника.
Режим = РежімДіалогаВибораФайла. відкриття;
ДіалогОткритіяФайла = Новий ДіалогВибораФайла (Режим);
ДіалогОткритіяФайла. ПолноеІмяФайла = «»;
ДіалогОткритіяФайла. Фільтр = Фільтр;
ДіалогОткритіяФайла. МножественнийВибор = Брехня;
ДіалогОткритіяФайла. Тема = «Виберіть файл»;
Якщо ДіалогОткритіяФайла. Вибрати () Тоді
Имяфайла = ДіалогОткритіяФайла. ПолноеІмяФайла;
ТекСтрока = Елементи. ДополнітельниеІзображенія. ТекущіеДанние;
ТекСтрока. ІмяФайлаІзображенія = имяфайла;
В даному випадку ми визначаємо поведінку кнопки вибору - відкриваємо діалог відкриття файлів в якому користувач вибере зображення. Якщо користувач зображення вибрав - то в поточний рядок табличної частини додаємо повний шлях і ім'я файлу з діалогу.
Тепер нам необхідно зробити наступне: якщо користувач вибирає вкладку «Группа3» з заголовком «Каталог» - ми видаляємо всі раніше програмно-створені елементи і на основі табличній частині «Додаткові зображення» додаємо нові елементи управління в яких виводимо картинки.
Робимо це наступним чином: Вибираємо «Группа1», тиснемо на праву кнопку миші для виклику «Властивості». У властивостях групи створюємо нову зумовлену процедуру події «ПріСменеСтраніци» натиснувши на значок «лупи».
Напишемо наступний код для цієї предпределенной процедури:
Процедура Группа1ПріСменеСтраніци (Елемент.
ТекущаяСтраніца)
Якщо ТекущаяСтраніца. Ім'я = "Группа3" Тоді
// перенаповнений список зображень
Якщо поточна сторінка буде «Группа3», тоді спочатку видаляємо елементи на вкладці «Группа3» і створюємо нові реквізити, давайте подивимося складу процедури
«УдалітьРеквізітиСервер ()» і «ДобавітьДополнітельниеРеквізітиСервер ()».
УдаляемиеРеквізіти = Новий Масив ();
Колві = Реквізити. Кількість ();
Для n = 0 по Колві - 1 Цикл
ТекЕлемент = Реквізити. Отримати (п);
Якщо Серед (ТекЕлемент. Ім'я. 1. 3) = «Рек» Тоді
УдаляемиеРеквізіти. Додати (ТекЕлемент. Ім'я);
ДобавляемиеРеквізіти = Новий Масив;
Для кожного Стрка з Об'єкт. ДополнітельниеІзображенія
Цикл СчетчікК = СчетчікК + 1;
Реквізит = Новий
РеквізітФорми ( «Реквізит» + Рядок (СчетчікК), Новий ОпісаніеТіпов ( «Рядок»). «». Істина);
ДобавляемиеРеквізіти. Додати (Реквізит);
// Додаємо новий перші пів я введення на форму
Для кожного Стрка з Об'єкт. ДополнітельниеІзображенія Цикл
СчетчікК = СчетчікК + 1;
Елемент = ЕтаФорма. Елементи. Додати ( «Реквізит» + Рядок (СчетчікК), Тип ( «ПолеФорми»), ЕтаФорма. Елементи. Группа3);
Елемент. Від = ВідПоляФорми. ПолеКартінкі;
Елемент. ПутьКДанним = "Реквізит" + Рядок (СчетчікК);
Елемент. Тема = «Зображення» + С Троки (СчетчікК) + «(« + Стрка. ІмяФайлаІзображенія + «)»;
Картинка = Новий ДвоічниеДанние (Стрка. ІмяФайлаІзображенія);
ЕтаФорма [ "Реквізит" + Рядок (Счетчікк)] = ПоместітьВоВременноеХраніліще (Картинка. Новий УнікальнийІдентіфікатор);
Отже, що ми маємо?
Розглянемо спочатку процедуру «УдалітьРеквізітиСервер». Спочатку для того щоб видалити реквізити процедурою «ІзменітьРеквізіти» - нам необхідно підготувати масив в якому будуть перераховані всі реквізити підлягають видаленню.
Ми отримуємо все реквізити форми (хоча ми і можемо отримати реквізити сторінки «Каталог») і в циклі перебираємо їх. У разі якщо ім'я реквізиту буде починатися з «Рек», тоді ми такий реквізит додаємо в масив і він підлягає видаленню.
В процедура ДобавітьДополнітельниеРеквізітиСервер () відбувається наступне: В залежності від кількості доданих файлів із зображеннями ми формуємо масив реквізитів до додавання, причому варто відзначити, що для виведення зображень - ми будемо використовувати елемент форми, реквізит якого матиме тип значення - рядок. Імена одержуваних реквізитів будуть такими «Реквізіт1, Реквізіт2», ... «Реквізит N».
Далі процедура ІзменітьРеквізіти) в якій перший параметр - це додаються реквізити, другий видаляються реквізити) - додає нові реквізити.
Далі в циклі ми додаємо нові елементи на форму. Не забуваємо вказувати важливий параметр відображення нашої рядки - ВідПоляФорми. ПолеКартінкі. Шлях до даних - прописуємо щойно створені нами реквізити.
І залишається також завантажити з файлу і вивести на екран наші картинки. У поточному прикладі ми не додаємо їх в нашу інформаційну базу - а зчитуємо їх кожен раз з файлів. Спочатку зчитуємо файл картинки, як двійкові дані, далі поміщаємо дані в тимчасове сховище процедурою ПоместітьВоВременноеХраніліще. тим самим отримуємо рядок.
У підсумку ми отримуємо динамічне створення елементів форми і реквізитів, і в залежності від складу табличній частині - ми виводимо на вкладці «Каталог» зображення.