0
inkvizitr
13.11.18
✎
09:29
|
Возможно ли задать ширину и высоту колонок и строк в ТЗ на форме? тут решился написать для себя обработку сапер, немного бывает свободного времени, не пойму как программно задать размеры колонок и строк, ниже текст кода
&НаКлиенте
Процедура Играть(Команда)
КолонкиИгровогоПоля = Колонки;
СтрокиИгровогоПоля = Строки;
БомбыНаИгровомПоле = КолБомб;
СгенерироватьИгровоеПоле(КолонкиИгровогоПоля, СтрокиИгровогоПоля, БомбыНаИгровомПоле);
КонецПроцедуры
&НаСервере
Процедура СгенерироватьИгровоеПоле(Колонки, Строки, Бомбы)
ТЗИгровогоПоля = СформируемИгровоеПолеСБомбами(Колонки, Строки, Бомбы);
ПоместитьТЗИгровогоПоляВРеквизитФормы(ЭтаФорма, "ИгровоеПоле", ТЗИгровогоПоля);
ЗначениеВРеквизитФормы(ТЗИгровогоПоля, "ИгровоеПоле");
КонецПроцедуры
Функция СформируемИгровоеПолеСБомбами(Колонки, Строки, Бомбы)
ТЗИгровогоПоля = Новый ТаблицаЗначений;
// Создаю колонки игрового поля
Для ИндексКолонки = 1 По Строки Цикл
ТЗИгровогоПоля.Колонки.Добавить("К" + ИндексКолонки);
КонецЦикла;
// Создаю строки игрового поля
Для ИндексСтрока = 0 По Строки Цикл
НоваяСтрока = ТЗИгровогоПоля.Добавить();
Для ИндексКолонки = 0 ПО Колонки - 1 Цикл
НоваяСтрока.Установить(ИндексКолонки, 0);
КонецЦикла;
КонецЦикла;
// Подключаю генератор
ГенСлучЧисел = Новый ГенераторСлучайныхЧисел;
КолВоБомб = 10;
РазмерПоля_Х = Строки;
РазмерПоля_У = Колонки;
// Разбрасываю по полю бомбы
СчГенБомб = 1;
Пока СчГенБомб <= КолВоБомб Цикл
// Ищим свободную ячейку и вставляем бомбу
Пока Истина Цикл
БомбаПоХ = ГенСлучЧисел.СлучайноеЧисло(0, РазмерПоля_Х - 1);
БомбаПоУ = ГенСлучЧисел.СлучайноеЧисло(0, РазмерПоля_У - 1);
Если ТЗИгровогоПоля[БомбаПоХ][БомбаПоУ] = 0 Тогда
ТЗИгровогоПоля[БомбаПоХ][БомбаПоУ] = Истина;
СчГенБомб = СчГенБомб + 1;
Прервать; // Бомбу вставили, цель достигнута
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат ТЗИгровогоПоля;
КонецФункции
&НаСервере
Процедура ПоместитьТЗИгровогоПоляВРеквизитФормы(Форма, ИмяРеквизитаФормы, ТаблицаЗначений)
МассивДобавляемыхРеквизитов = Новый Массив;
МассивДобавляемыхПолей = Новый Массив;
Для каждого Колонка Из ТаблицаЗначений.Колонки Цикл
Колонка.Ширина = 2;
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения,ИмяРеквизитаФормы , Колонка.Заголовок));
НоваяКолонка = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), Элементы[ИмяРеквизитаФормы]);
МассивДобавляемыхПолей.Добавить(НоваяКолонка);
КонецЦикла;
ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);
Для каждого ПолеФормы Из МассивДобавляемыхПолей Цикл
ПолеФормы.Заголовок = ПолеФормы.Имя;
ПолеФормы.ПутьКДанным = ИмяРеквизитаФормы +"."+ПолеФормы.Имя;
ПолеФормы.Вид = ВидПоляФормы.ПолеВвода;
ПолеФормы.Ширина = 2;
КонецЦикла;
КонецПроцедуры
|
|