Шаблон WallPaper

Этот 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 прозрачными, иначе они плохо смотрятся на фоне обоев.

Некоторые рекомендации по выбору изображений "обоев":

Чтобы вы не занимались нудными поисками подходящих файлов для "обоев" предлагаю вам свой набор файлов.  Знаю, что использование текстур, имитирующих материальные фактуры, считается плохим тоном в дизайне, но я не дизайнер и мне лень искать более подходящие файлы "обоев" :)

Загрузить образцы обоев.                   

 

Hosted by uCoz