Джон Гулд
Принципы, которые обсуждались выше, адресованы представителям всего "айсберга" проектирования. Инструкции относятся к элементам представления информации и взаимодействия. Инструкции — это правила и объяснения, предназначенные для того, чтобы следовать им при создании элементов интерфейса, их поведения и внешнего вида.
Следование руководствам по проектированию без учета пожеланий пользователя обычно приводит к появлению неудачного интерфейса. Удобный и последовательный интерфейс не будет создан, если слепо следовать инструкции без понимания механизма взаимодействия между собой. Гулд очень хорошо описал: "Многие инструкции слишком много внимания уделяют "расположению кнопок" и мало — пониманию и обучению"[13]. Таким образом, следование руководствам и инструкциям не является единственным критерием успеха.
Руководящие принципы создания интерфейса, отраженные в инструкциях, должны не снижать и ограничивать творческую активность, а позволять пользователю применять к интерфейсу свое знание реального мира(например, если пользователь видит на экране группу кнопок, похожих на кнопки на панели радиоприемника, он может и должен применить свое знание функций кнопок в реальном мире к компьютеру).
Руководящие принципы построения интерфейса рассчитаны на сегодняшние системы вывода и ввода информации. Они затрагивают такие технологии, как использование пера, писание от руки и голосовой ввод. Одна из проблем разработки инструкций, соответствующих новым технологиям, — это расшифровка способов взаимодействия пользователя с системой, так как степень этого взаимодействия еще точно не определена. Инструкции должны базироваться на том, как пользователи реагируют на новшества и создаваться по происшествии некоторого времени, необходимого, чтобы пользователи освоили интерфейс и составили определенное мнение о нем.
Руководящие принципы содержат характеристики стандартов презентаций, поведения и взаимодействия с элементами управления интерфейсом.
В руководствах по элементам интерфейса и его органам управления сказано, когда их нужно исправить, как "подать" и какой должна быть техника работы с ними (например, клавиатурная или с помощью мыши). Полный набор руководств раскрывает сущность каждого объекта и элемента интерфейса в терминах и способах представления на экране, их поведение, механизм взаимодействия с ними пользователей.
Многие программные продукты созданы для работы на разных платформах. С тех пор, как эти платформы имеют различные операционные системы, инструменты и стили интерфейса, очень сложно разрабатывать интерфейс, удовлетворяющий все платформы или работающий на каждой из платформ. Дополнение — подборка индустриальных руководств по проектированию — было разработано Беллкором [12]. Оно содержит описание и руководящие принципы для основных компаний и операционных систем, как IBM CUA, OSF, Microsoft Windows и др.
Задачи руководящих принципов по проектированию однозначны: предоставить пользователям возможность доступа к информации из любого места системы, в любой форме, создать такой интерфейс, который помогал бы людям работать и нравится им. Хорошо разработанный интерфейс позволяет пользователям сфокусироваться на выполнении задач, а не на особенностях программного и аппаратного обеспечения.
Цели и руководящие принципы разработки интерфейса должны быть реалистичными и доступными для пользователей. Специфика того или иного бизнеса накладывает ограничения на данную среду. Данные руководящие принципы по разработке интерфейса также должны проходить тестирование. Чтобы продукт соответствовал руководящим принципам, необходимо иметь поддержку со стороны разработчиков. Ответственность за разработку совместимого интерфейса лежит на проектировщиках и разработчиках.
При разработке руководящих принципов по пользовательскому интерфейсу необходимо убедиться, что и разработка пользовательского интерфейса, и удобство применения анализируются с двух точек зрения — микро- и макроуровня.
Руководящие принципы на микроуровне рассматривают представление пользователям индивидуальных элементов интерфейса(управляющих — кнопок, полей для галочки, полей для текста, линеек для прокручивания и т. Д.), а так же способы интерактивного их взаимодействия.
Разработка интерфейса на макроуровне представляет собой шаблон пользовательского интерфейса — продукт собирается весь целиком и его концепция становится ясна пользователям по мере взаимодействия с ним.
Со временем у вас накопилось много программ в меню "Пуск", и каждый раз для запуска нужной программы вам нужно тратить время на поиски? Программа "Tidy Start Menu" поможет вам навести порядок в меню и сделать работу комфортной!
Для этого программа предлагает разбить все программы из меню на категории. Так, например, программы, которые используются для работы в Интернет, можно объединить в группу "Интернет", а все игры поместить в категорию "Игры".
Программа наглядно демонстрирует второе правило проектирования пользовательского интерфейса: уменьшить нагрузку на пользователя, а также предусматривает "быстрые" пути, предусматривает меню, содержащее объекты, которые можно выбрать, не заставляя пользователей вводить информацию вручную, имеет установки по умолчанию.
Ниже приведены исходники програмы и снимки его интерфейса.
program Man;
uses
Forms,Dialogs,Controls,
Viewing in 'Viewing.pas' {look},
Setuping in 'Setuping.pas' {setup},
Editing in 'Editing.pas' {Edit},
ADOTableofset in 'ADOTableofset.pas' {TabSheetset};
{$R *.res}
begin
try
Application.Initialize;
Application.Title := 'Programs';
Application.CreateForm(Tlook, look);
Application.CreateForm(Tsetup, setup);
Application.CreateForm(TEdit, Edit);
Application.CreateForm(TTabSheetset, TabSheetset);
Application.Run;
except
if MessageDlg('The software is not installed! You wish to instal it?',
mtInformation,[mbYes, mbCancel],0) = mryes then
begin
Application.Initialize;
Application.CreateForm(Tsetup, setup);
Application.Run;
end;end;
end.
unit Viewing;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ComCtrls, ShellCtrls, ToolWin, ImgList;
const
WM_MYICONNOTIFY = WM_USER + 123;
type
Tlook = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
TabSheet5: TTabSheet;
ShellListView1: TShellListView;
ShellListView2: TShellListView;
ShellListView3: TShellListView;
ShellListView4: TShellListView;
ShellListView5: TShellListView;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
MainMenu1: TMainMenu;
Services1: TMenuItem;
oreinstall1: TMenuItem;
Edit1: TMenuItem;
Exit1: TMenuItem;
ToolBar1: TToolBar;
ImageList1: TImageList;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure oreinstall1Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure Edit1Click(Sender: TObject);
private
ShownOnce: Boolean;
public
procedure WMICON(var msg: TMessage); message WM_MYICONNOTIFY;
procedure WMSYSCOMMAND(var msg: TMessage);message WM_SYSCOMMAND;
procedure CreateTrayIcon(n:Integer);
procedure DeleteTrayIcon(n:Integer);
procedure RestoreMainForm;
procedure HideMainForm;
end;
var
look: Tlook;
implementation
{$R *.dfm}
uses
ComObj, activex, ShellApi,
registry,StdCtrls,ADOTableofset, Setuping;
procedure Tlook.CreateTrayIcon(n:Integer);
var
nidata : TNotifyIconData;
begin
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Self.Handle;
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_MYICONNOTIFY;
hIcon := Application.Icon.Handle;
StrPCopy(szTip,Application.Title);
end;
Shell_NotifyIcon(NIM_ADD, @nidata);
end;
procedure Tlook.DeleteTrayIcon(n: Integer);
var nidata : TNotifyIconData;
begin
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Self.Handle;
uID := 1;
end;
Shell_NotifyIcon(NIM_DELETE, @nidata);
end;
procedure Tlook.FormCreate(Sender: TObject);
begin
ShownOnce:= False;
CreateTrayIcon(1);
end;
procedure Tlook.FormDestroy(Sender: TObject);
begin
DeleteTrayIcon(1);
end;
procedure Tlook.HideMainForm;
begin
Application.ShowMainForm := False;
ShowWindow(Application.Handle, SW_HIDE);
ShowWindow(Application.MainForm.Handle, SW_HIDE);
end;
procedure Tlook.N1Click(Sender: TObject);
begin
RestoreMainForm;
DeleteTrayIcon(1);
N1.Enabled := False;
N2.Enabled := True;
end;
procedure Tlook.N2Click(Sender: TObject);
begin
HideMainForm;
CreateTrayIcon(1);
n2.Enabled := False;
n1.Enabled := True;
end;
procedure Tlook.N4Click(Sender: TObject);
begin
close;
end;
procedure Tlook.RestoreMainForm;
var i,j : Integer;
begin
Application.ShowMainForm := True;
ShowWindow(Application.Handle, SW_RESTORE);
ShowWindow(Application.MainForm.Handle, SW_RESTORE);
if not ShownOnce then
begin
for I := 0 to Application.MainForm.ComponentCount -1 do
if Application.MainForm.Components[I] is TWinControl then
with Application.MainForm.Components[I] as TWinControl do
if Visible then
begin
ShowWindow(Handle, SW_SHOWDEFAULT);
for J := 0 to ComponentCount -1 do
if Components[J] is TWinControl then
ShowWindow((Components[J] as TWinControl).Handle, SW_SHOWDEFAULT);
end;
ShownOnce := True;
end;end;
procedure Tlook.WMICON(var msg: TMessage);
var P : TPoint;
begin
case msg.LParam of
WM_LBUTTONDOWN:
begin
GetCursorPos(p);
SetForegroundWindow(Application.MainForm.Handle);
PopupMenu1.Popup(P.X, P.Y);
end;
WM_LBUTTONDBLCLK : n1Click(Self);
end;
end;
procedure Tlook.WMSYSCOMMAND(var msg: TMessage);
begin
inherited;
if (Msg.wParam=SC_MINIMIZE) then n2Click(Self);
end;
procedure Tlook.FormActivate(Sender: TObject);
begin
n2.Click;
end;
procedure Tlook.oreinstall1Click(Sender: TObject);
begin
setup.Show;
end;
procedure Tlook.Exit1Click(Sender: TObject);
begin
close;
end;
procedure Tlook.Edit1Click(Sender: TObject);
begin
hide;
TabSheetset.Show;
end;
end.
Модуль Setup:
unit setuping;
interface
uses