Этот extention шаблон выводит в текущее окно "обои". В качестве обоев используется графический файл с фрагментом фона, который размножается (tiled) по всему окну.
#!
=================================
#EXTENSION (WallPaper, 'Обои окна')
#! =================================
#DISPLAY ('')
#DISPLAY ('Вывод "обоев" окна')
#DISPLAY ('')
#DISPLAY ('')
#PROMPT ('Имя процедуры:', @s30), %ProcName, REQ, DEFAULT(%Procedure)
#PROMPT ('Гл.переменная:', @s20), %GloVar, DEFAULT( 'G:Tabl1')
#DISPLAY ('')
#! ------ После открытия окна ------
#AT (%AfterWindowOpening)
if G:PatternFlag = False
%window{prop:WallPaper} = ''
else
if LocalRequest = SelectRecord
%window{prop:WallPaper} = GetINI( '%ProcName', 'WallPaper',
G:TablSel, '%IniFileName' )
#IF UPPER(%ProcedureTemplate) = 'FORM'
elsif LocalRequest = DeleteRecord
%window{prop:Wallpaper} = G:FormDel
! Сделать поля неактивными
loop X#=firstfield() to lastfield()
if X#{Prop:Type} <> CREATE:PROMPT
X#{Prop:Disable} = '1'
.
. ! end loop
enable( ?Ok ) ! Разрешить кнопку 'OK'
#ENDIF
else
%window{prop:WallPaper} = GetINI( '%ProcName', 'WallPaper',
%GloVar, '%IniFileName' )
.
%window{prop:TILED} = '1'
! Сделать строки прозрачными
loop X#=firstfield() to lastfield()
if X#{Prop:Type}=CREATE:PROMPT or X#{Prop:Type}=CREATE:CHECK or |
X#{Prop:Type}=CREATE:STRING or
X#{Prop:Type}=CREATE:GROUP
X#{Prop:TRN} = '1'
.
. ! end loop
.
#ENDAT
При добавлении шаблона к окну он запрашивает имя процедуры и название глобальной переменной, в которой хранится имя файла "обоев". Имя процедуры по умолчанию проинициализировано именем текущей процедуры и его изменять не нужно. В качестве имени глобальной переменной по умолчанию выводится 'G:Tabl1' - переменная с именем файла обоев для таблиц (такая переменная, конечно, должна существовать).
Я придерживаюсь следующей системы применения "обоев" окон. Имеются разные "обои" для таблиц, для форм, для ведомостей документов и документов. Кроме этого есть отдельные "обои" для таблиц, предназначенных для выбора (LocalRequest = SelectRecord), и для удаляемой формы (LocalRequest=DeleteRecord). Все это направлено на то, чтобы пользователь уже по внешнему виду окна "чувствовал" что он должен делать, то есть на повышение степени интуитивной понятности действий с окном. Обычно, у меня имеется несколько глобальных переменных, проинициализированных именами файлов "обоев":
Шаблон WallPaper, проверяет значение глобальной переменной G:PatternFlag и, если этот флаг установлен, то устанавливает свойство {prop:WallPaper} текущего окна равным содержимому заданной глобальной переменной с именем файла обоев. При этом имеется возможность в INI-файле переопределить "обои" для каждой конкретной процедуры.
Все глобальные переменные, используемые в этой процедуре (начинаются с префикса 'G:'), объявляются и инициализируются в специальных шаблонах GsmGlob, InitGlob и SetupGlob.
Шаблон также делает controls типа Prompt, Check, String и Group прозрачными, иначе они плохо смотрятся на фоне обоев.
Некоторые рекомендации по выбору изображений "обоев":
Чтобы вы не занимались нудными поисками подходящих файлов для "обоев" предлагаю вам свой набор файлов. Знаю, что использование текстур, имитирующих материальные фактуры, считается плохим тоном в дизайне, но я не дизайнер и мне лень искать более подходящие файлы "обоев" :)
Загрузить образцы обоев.