На вкус и цвет, как известно, товарища нет, но все же рискну здесь изложить свои приемы построения пользовательского интерфейса.
Основные требования, которым должен соответствовать пользовательский интерфейс программы:
Размещение кнопок
Где только возможно, я стараюсь разместить
кнопки управления в верхнюю часть окна, то есть в
панель инструментов окна, (хотя сам toolbar я, обычно,
не использую). Все кнопки стандартного
размера 16 х 16, с пиктограммами и установленными
атрибутами TIP и MESAGE, разъясняющими их назначение.
Текст на кнопке оставляю только если она
выполняет какое-либо редкое и нестандартное
действие. Практика показывает, что
размещение кнопок в самом окне понятней и
удобней, чем в общем toolbar-е всего приложения. К
тому же, такое размещение кнопок укорачивает
путь, который должен проделать курсор
пользователя на экране при нажатии на кнопки.
Конечно, "стандартные" кнопки
размещаются в одних и тех же местах во всех окнах.
В формах ввода я размещаю кнопки "Ок" и
"Cancel" размером 24 х 16 в нижнем правом углу
экрана. Это бросается в глаза и пользователь
сразу понимает, что в этом окне надо вводить
данные. Для каждой из "стандартных"
кнопок (или группы кнопок) имеются control-шаблоны,
при помощи которых и достигается их
стандартизация. Смотрите, например, шаблоны Button_Copy, Button Help, MoveRec, TListButtons, DFilter, HistList
...
Цвета окон
Я применяю "обои" (фоновые картинки) для
окон нескольких типов. Это делает их
непохожими на уныло-серые похожие друг на друга
окна большинства Windows-приложений. Для окон,
предназначенных для разных целей имеются разные
"обои". Имеются "обои" для таблиц
справочников, для таблиц в режиме выбора записи
(с активной кнопкой "Select"), для форм
справочников, для форм в режиме удаления
записи, для Документов, для Ведомостей
Документов и т.п. Это, по моему, увеличивает
степень интуитивной понятности назначения окон.
Поддержка "обоев" окон реализована в
виде шаблона WallPaper.
RedBox
Выделяет текущий активный control красной
рамочкой, что визуально выделяет его
относительно других полей. Это упрощает жизнь
пользователю, так как он всегда знает где в
данный момент находится фокус. Реализован в
виде control-шаблона RedBox. Я
использую этот шаблон в каждой форме ввода
данных.
Кнопка Cancel в форме
Пока в форме не изменено ни одно поле, кнопка
?Cancel имеет атрибуты ICON('Close.ico') и
TIP('Выход'). После того как было
изменено хотя бы одно поле, кнопка ?Cancel
изменяет свой вид: ICON('Cancel.ico') и TIP('Отменить').
Этот эффект реализован в виде следующих
строк в шаблоне RedBox:
#AT (%PrepareAlerts)
if LocalRequest = ChangeRecord
?Cancel{prop:Icon} = '~Close.ico'
?Cancel{prop:Tip} = 'Выход'
elsif LocalRequest = DeleteRecord
THIS{prop:Wallpaper} = g:FormDel
THIS{prop:TILED} = '1'
.
#ENDAT
#! --- 'Accept Loop, After CASE FIELD() handling'
#AT (%AcceptLoopAfterFieldHandling)
if ~THIS{prop:AcceptAll} and event()=EVENT:Accepted
if Sav::%PrimaryFilePrefix:Record <> %PrimaryFilePrefix:Record
?Ok{prop:Disable} = ''
?Cancel{prop:Icon} = '~Cancel.ico'
?Cancel{prop:Tip} = 'Отменить'
.
.
#ENDAT