Форма.КартинкаЗаголовка

Свойства · CaptionPicture

Тип: Картинка. Содержит картинку, отображаемую в заголовке формы.

Полное описание, параметры и ограничения

Форма.КартинкаЗаголовка (Form.CaptionPicture)

Форма (Form)

КартинкаЗаголовка (CaptionPicture)

Доступен, начиная с версии 8.0.

Использование:
Чтение и запись.
Описание:
Тип: Картинка.
Содержит картинку, отображаемую в заголовке формы.
Доступность:

Толстый клиент.

Примечание:
Если картинка задается программно, может быть установлена картина вида Пустая или ИзБиблиотеки.
Использование в версии:

Доступен, начиная с версии 8.0.

Методическая информация

Практические примеры

Настроить собственное окно до открытия и восстановить профиль

Обычное окно и прикреплённая панель получают разные размеры, положения и разрешения. Полный пульт проверяет 17 скалярных свойств до открытия, а значок и стиль задаёт отдельно собственными пустыми значениями.

Где и как запускать

Полный модуль собственной обычной формы Пульт; настраивает только ещё закрытую Панель. Толстый клиент, не запускался.

Подготовка

  1. Создайте НОВУЮ пустую конфигурацию УчебныеОкна85 на платформе 8.5.1.1343, без бизнес-объектов, расширений, подписок и регламентных заданий. Уроки относятся только к обычным формам толстого клиента, не к управляемой форме, тонкому или веб-клиенту. Ничего в рабочих УТ, КА, УНФ или БП не изменяйте. Здесь база, формы и код в 1С не запускались: runtimeVerifiedScenarios=0.

  2. Создайте общий модуль УчебныеОкна85: Клиент (обычное приложение)=Да, Сервер=Нет, Глобальный=Нет, Вызов сервера=Нет. Вставьте полный отдельный модуль проверки стенда из блока ниже. Он проверяет собственную пустую конфигурацию.

  3. Добавьте только свою обработку УчебнаяПанель85 с обычными формами Пульт и Панель. Пульт — основная форма. Панель: реквизит ТекстПанели (Строка,80), поле ввода и кнопки ПоказатьТекст/ЗакрытьПанель. Кнопка ПоказатьТекст — кнопка по умолчанию; она только выводит текст, не закрывает окно. Размер панели в редакторе сделайте не больше 120×90 логических единиц.

  4. Назначьте одноимённые действия кнопок и событие ПриОткрытии обеих форм. Вставьте отдельно полный основной модуль Пульта и полный модуль Панели ниже. Код нельзя перенести в модуль управляемой формы. Проверьте F7.

  5. В Пульт добавьте кнопки ОбычноеОкно, ПрикрепленнаяПанель, ПроверитьВосстановление, ЗакрытьСвоюПанель и одноимённые обработчики. Каждую новую видимую панель сначала закрывайте своей кнопкой; модуль отказывается менять профиль уже открытого окна.

Перем Окно;

Процедура ПриОткрытии()
    УчебныеОкна85.ПроверитьСвойПустойСтенд();
    Если Метаданные.Обработки.Количество() <> 1 Или Метаданные.Обработки[0].Имя <> "УчебнаяПанель85" Тогда
        ВызватьИсключение "Подготовьте только собственную обработку УчебнаяПанель85";
    КонецЕсли;
    Окно = Неопределено;
КонецПроцедуры

Функция СоздатьЗакрытоеОкно()
    Если Окно <> Неопределено И Окно.Открыта() Тогда
        ВызватьИсключение "Сначала закройте только свою учебную панель";
    КонецЕсли;
    Идентификатор = Новый УникальныйИдентификатор;
    Окно = Обработки.УчебнаяПанель85.ПолучитьФорму("Панель", ЭтаФорма, Идентификатор);
    Если ТипЗнч(Окно) <> Тип("Форма") Или Окно.Открыта() Тогда
        ВызватьИсключение "Нужна собственная ещё не открытая обычная форма Панель";
    КонецЕсли;
    Окно.КлючСохраненияПоложенияОкна = "УчебнаяПанель85.НовыйОпыт." + Строка(Идентификатор);
    Окно.КартинкаЗаголовка = Новый Картинка;
    Окно.Стиль = Новый Стиль;
    Если ТипЗнч(Окно.КартинкаЗаголовка) <> Тип("Картинка") Или Окно.КартинкаЗаголовка.Вид <> ВидКартинки.Пустая
        Или ТипЗнч(Окно.Стиль) <> Тип("Стиль") Тогда
        ВызватьИсключение "Для своего опыта нужен пустой значок и стиль Авто";
    КонецЕсли;
    Возврат Окно;
КонецФункции

Функция СоздатьПрофиль(Прикрепленный)
    Если Прикрепленный Тогда
        Возврат Новый Структура("Ширина,Высота,ИзменениеРазмера,ПоложениеОкна,СостояниеОкна,СпособОтображенияОкна,ИзменятьСпособОтображенияОкна,СоединяемоеОкно,РежимРабочегоСтола,ПоложениеПрикрепленногоОкна,РазрешитьСоединятьОкно,РазрешитьСостояниеОбычное,РазрешитьСостояниеПрикрепленное,РазрешитьСостояниеПрячущееся,РазрешитьСостояниеСвободное,РазрешитьЗакрытие,ПоведениеКлавишиEnter",
            160, 110, ИзменениеРазмераОкна.НеИзменять, ВариантПоложенияОкна.НеПерекрыватьВладельца,
            ВариантСостоянияОкна.Прикрепленное, ВариантСпособаОтображенияОкна.Нормальное,
            ИзменениеСпособаОтображенияОкна.Запретить, Истина, Ложь, ВариантПрикрепленияОкна.Лево,
            Истина, Истина, Истина, Истина, Истина, Истина, ТипПоведенияКлавишиEnter.КнопкаПоУмолчанию);
    Иначе
        Возврат Новый Структура("Ширина,Высота,ИзменениеРазмера,ПоложениеОкна,СостояниеОкна,СпособОтображенияОкна,ИзменятьСпособОтображенияОкна,СоединяемоеОкно,РежимРабочегоСтола,ПоложениеПрикрепленногоОкна,РазрешитьСоединятьОкно,РазрешитьСостояниеОбычное,РазрешитьСостояниеПрикрепленное,РазрешитьСостояниеПрячущееся,РазрешитьСостояниеСвободное,РазрешитьЗакрытие,ПоведениеКлавишиEnter",
            220, 150, ИзменениеРазмераОкна.Изменять, ВариантПоложенияОкна.Центрировать,
            ВариантСостоянияОкна.Обычное, ВариантСпособаОтображенияОкна.Нормальное,
            ИзменениеСпособаОтображенияОкна.Разрешить, Ложь, Ложь, ВариантПрикрепленияОкна.Право,
            Ложь, Истина, Ложь, Ложь, Ложь, Истина, ТипПоведенияКлавишиEnter.ПереходПоЭлементамФормы);
    КонецЕсли;
КонецФункции

Процедура ПрименитьПрофиль(ФормаПанели, Профиль)
    ПроверитьЗакрытоеОкно(ФормаПанели);
    ФормаПанели.Ширина = Профиль.Ширина;
    ФормаПанели.Высота = Профиль.Высота;
    ФормаПанели.ИзменениеРазмера = Профиль.ИзменениеРазмера;
    ФормаПанели.ПоложениеОкна = Профиль.ПоложениеОкна;
    ФормаПанели.СостояниеОкна = Профиль.СостояниеОкна;
    ФормаПанели.СпособОтображенияОкна = Профиль.СпособОтображенияОкна;
    ФормаПанели.ИзменятьСпособОтображенияОкна = Профиль.ИзменятьСпособОтображенияОкна;
    ФормаПанели.СоединяемоеОкно = Профиль.СоединяемоеОкно;
    ФормаПанели.РежимРабочегоСтола = Профиль.РежимРабочегоСтола;
    ФормаПанели.ПоложениеПрикрепленногоОкна = Профиль.ПоложениеПрикрепленногоОкна;
    ФормаПанели.РазрешитьСоединятьОкно = Профиль.РазрешитьСоединятьОкно;
    ФормаПанели.РазрешитьСостояниеОбычное = Профиль.РазрешитьСостояниеОбычное;
    ФормаПанели.РазрешитьСостояниеПрикрепленное = Профиль.РазрешитьСостояниеПрикрепленное;
    ФормаПанели.РазрешитьСостояниеПрячущееся = Профиль.РазрешитьСостояниеПрячущееся;
    ФормаПанели.РазрешитьСостояниеСвободное = Профиль.РазрешитьСостояниеСвободное;
    ФормаПанели.РазрешитьЗакрытие = Профиль.РазрешитьЗакрытие;
    ФормаПанели.ПоведениеКлавишиEnter = Профиль.ПоведениеКлавишиEnter;
КонецПроцедуры

Функция СнятьПрофиль(ФормаПанели)
    ПроверитьЗакрытоеОкно(ФормаПанели);
    Возврат Новый Структура("Ширина,Высота,ИзменениеРазмера,ПоложениеОкна,СостояниеОкна,СпособОтображенияОкна,ИзменятьСпособОтображенияОкна,СоединяемоеОкно,РежимРабочегоСтола,ПоложениеПрикрепленногоОкна,РазрешитьСоединятьОкно,РазрешитьСостояниеОбычное,РазрешитьСостояниеПрикрепленное,РазрешитьСостояниеПрячущееся,РазрешитьСостояниеСвободное,РазрешитьЗакрытие,ПоведениеКлавишиEnter",
        ФормаПанели.Ширина, ФормаПанели.Высота, ФормаПанели.ИзменениеРазмера,
        ФормаПанели.ПоложениеОкна, ФормаПанели.СостояниеОкна, ФормаПанели.СпособОтображенияОкна,
        ФормаПанели.ИзменятьСпособОтображенияОкна, ФормаПанели.СоединяемоеОкно, ФормаПанели.РежимРабочегоСтола,
        ФормаПанели.ПоложениеПрикрепленногоОкна, ФормаПанели.РазрешитьСоединятьОкно, ФормаПанели.РазрешитьСостояниеОбычное,
        ФормаПанели.РазрешитьСостояниеПрикрепленное, ФормаПанели.РазрешитьСостояниеПрячущееся, ФормаПанели.РазрешитьСостояниеСвободное,
        ФормаПанели.РазрешитьЗакрытие, ФормаПанели.ПоведениеКлавишиEnter);
КонецФункции

Процедура ОбычноеОкно(Кнопка)
    ФормаПанели = СоздатьЗакрытоеОкно();
    Профиль = СоздатьПрофиль(Ложь);
    ПрименитьПрофиль(ФормаПанели, Профиль);
    ПроверитьПрофиль(ФормаПанели, Профиль);
    ФормаПанели.Открыть();
КонецПроцедуры

Процедура ПрикрепленнаяПанель(Кнопка)
    ФормаПанели = СоздатьЗакрытоеОкно();
    Профиль = СоздатьПрофиль(Истина);
    ПрименитьПрофиль(ФормаПанели, Профиль);
    ПроверитьПрофиль(ФормаПанели, Профиль);
    ФормаПанели.Открыть();
КонецПроцедуры

Процедура ПроверитьВосстановление(Кнопка)
    ФормаПанели = СоздатьЗакрытоеОкно();
    ПрименитьПрофиль(ФормаПанели, СоздатьПрофиль(Ложь));
    Снимок = СнятьПрофиль(ФормаПанели);
    Попытка
        Профиль = СоздатьПрофиль(Истина);
        ПрименитьПрофиль(ФормаПанели, Профиль);
        ПроверитьПрофиль(ФормаПанели, Профиль);
    Исключение
        ПрименитьПрофиль(ФормаПанели, Снимок);
        ПроверитьПрофиль(ФормаПанели, Снимок);
        ВызватьИсключение;
    КонецПопытки;
    ПрименитьПрофиль(ФормаПанели, Снимок);
    ПроверитьПрофиль(ФормаПанели, Снимок);
    Сообщить("17 скалярных настроек восстановлены до открытия окна");
КонецПроцедуры

Процедура ЗакрытьСвоюПанель(Кнопка)
    Если Окно <> Неопределено И Окно.Открыта() Тогда
        Окно.Закрыть();
    КонецЕсли;
КонецПроцедуры

Процедура ПроверитьЗакрытоеОкно(ФормаПанели)
    Если ТипЗнч(ФормаПанели) <> Тип("Форма") Или ФормаПанели.Открыта() Тогда
        ВызватьИсключение "Профиль задаётся только своей закрытой форме";
    КонецЕсли;
КонецПроцедуры

Процедура ПроверитьПрофиль(ФормаПанели, Ожидание)
    Факт = СнятьПрофиль(ФормаПанели);
    Если Факт.Количество() <> 17 Или Ожидание.Количество() <> 17 Тогда
        ВызватьИсключение "Проверяются все 17 скалярных настроек";
    КонецЕсли;
    Для Каждого Пара Из Ожидание Цикл
        Если ТипЗнч(Факт[Пара.Ключ]) <> ТипЗнч(Пара.Значение) Или Факт[Пара.Ключ] <> Пара.Значение Тогда
            ВызватьИсключение "Не совпала настройка " + Пара.Ключ;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры
УчебнаяПанель85.Панель

Своя обработка УчебнаяПанель85 → Формы → Панель → Модуль

Полный отдельный модуль обычной формы Панель, не вставлять внутрь модуля Пульта; не выполнялся.

Процедура ПриОткрытии()
    УчебныеОкна85.ПроверитьСвойПустойСтенд();
    ТекстПанели = "Собственная учебная панель";
КонецПроцедуры

Процедура ПоказатьТекст(Кнопка)
    Сообщить(ТекстПанели);
КонецПроцедуры

Процедура ЗакрытьПанель(Кнопка)
    ЭтаФорма.Закрыть();
КонецПроцедуры
УчебныеОкна85.ПроверкаСтенда

Своя конфигурация УчебныеОкна85 → Общие → Общие модули → УчебныеОкна85

Полный общий модуль только обычного клиента; не выполнялся.

Процедура ПроверитьСвойПустойСтенд() Экспорт
    Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
    КонецЕсли;
    Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
    КонецЕсли;
    Источники = Новый Массив;
    Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
    Для Каждого Источник Из Источники Цикл
        Расширения = РасширенияКонфигурации.Получить(, Источник);
        Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
            ВызватьИсключение "Native список расширений должен иметь тип Массив";
        КонецЕсли;
        Если Расширения.Количество() <> 0 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры

Разбор по шагам

  1. СоздатьЗакрытоеОкно получает только свою Панель с новым UUID. Уникальный ключ сохранения снижает влияние старого пользовательского расположения на новый опыт; последующие открытия могут сохранять внутренние параметры этого окна. Это не очистка чужих профилей.

  2. Ширина/Высота — логические единицы, не пиксели. Обычный профиль 220×150 разрешает изменение размера; прикреплённый 160×110 запрещает. Свойства проверяются до показа; действительный размер экрана и ограничения интерфейса проверяются отдельно.

  3. ПоложениеОкна относится к обычному/свободному состоянию, ПоложениеПрикрепленногоОкна — к прикреплённому/прячущемуся. СостояниеОкна и СпособОтображенияОкна — разные перечисления. Оба профиля открываются нормально, не минимизированно.

  4. РазрешитьСостояние... задают допустимые переключения, но сами по себе не переводят окно в состояние. СоединяемоеОкно и РазрешитьСоединятьОкно также не равны друг другу. Эти настройки, положение и состояние задаются только перед Открыть.

  5. РежимРабочегоСтола=Ложь и РазрешитьЗакрытие=Истина заданы явно: учебная панель не перекрывает системные панели и её можно закрыть. Для отдельного ручного опыта поменяйте только эти флаги в копии профиля; программная кнопка ЗакрытьПанель остаётся доступным способом выхода.

  6. ПоведениеКлавишиEnter сравнивает переход по полям с нажатием безопасной кнопки ПоказатьТекст. КартинкаЗаголовка=Новый Картинка убирает значок; Стиль=Новый Стиль задаёт Авто. Эти два объекта не входят в скалярный снимок и не изменяются при цикле.

  7. ПроверитьВосстановление снимает состояние после собственного обычного профиля, применяет прикреплённый, проверяет типы/значения и возвращает 17 полей. При исключении тоже восстанавливает их и передаёт ошибку дальше; окно в цикле вообще не открывается.

Как проверить результат

  1. В будущем ручном запуске сначала проверьте закрытый цикл. Затем по отдельности ОбычноеОкно и ПрикрепленнаяПанель: положение, размер, разрешённые переключения и Enter нужно сверить глазами, не только через свойства.

  2. Если сохранённый профиль или ограничение экрана меняет видимое положение, не объявляйте успех по присвоенным значениям. Положение, СостояниеОкна и соединение применяются только при отсутствии ранее сохранённых параметров; здесь используются отдельные новые ключи.

  3. Для проверки обнаружения ошибки на копии модуля в цикле после ПрименитьПрофиль(ФормаПанели, Профиль), до ПроверитьПрофиль вставьте ФормаПанели.ПоведениеКлавишиEnter = ТипПоведенияКлавишиEnter.ПереходПоЭлементамФормы;. Сравнение должно отказать и восстановить исходные 17 полей. Не меняйте ожидание или восстановление.

  4. Свободное и прячущееся состояния дополнительно испытайте в копии прикреплённого профиля, сохранив разрешающие флаги. Для РежимРабочегоСтола=Истина свободная или модальная форма может перекрыть системные панели Windows; делайте это только на своём стенде и с рабочей кнопкой выхода. Здесь таких окон не было.

Ожидаемый результат

Подготовлены полный модуль Пульта, полный модуль Панели и проверка пустого стенда. Ожидается настройка двух оконных профилей и восстановление 17 скалярных полей до открытия. runtimeVerifiedScenarios=0.

На что обратить внимание

  1. Не задавайте свойства, отмеченные «до открытия», в ПриОткрытии самой Панели: их устанавливает Пульт до Открыть.

  2. Оконный профиль может сохраняться платформой. Уникальные собственные ключи не доказывают отсутствие внутренних записей и не удаляют их.

  3. Стиль Авто и пустая картинка — отдельные неизменяемые значения в этом опыте; урок не обещает глубокое клонирование любых стилей и картинок.

  4. Положение НеПерекрыватьВладельца ограничено доступным пространством родительского окна. Разрешения и считанные значения не являются доказательством внешнего вида.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.