Смекни!
smekni.com

Основные принципы разработки графического пользовательского интерфейса (стр. 3 из 4)

Джон Гулд

Для чего нужны руководящие принципы

Принципы, которые обсуждались выше, адресованы представителям всего "айсберга" проектирования. Инструкции относятся к элементам представления информации и взаимодействия. Инструкции — это правила и объяснения, предназначенные для того, чтобы следовать им при создании элементов интерфейса, их поведения и внешнего вида.

Следование руководствам по проектированию без учета пожеланий пользователя обычно приводит к появлению неудачного интерфейса. Удобный и последовательный интерфейс не будет создан, если слепо следовать инструкции без понимания механизма взаимодействия между собой. Гулд очень хорошо описал: "Многие инструкции слишком много внимания уделяют "расположению кнопок" и мало — пониманию и обучению"[13]. Таким образом, следование руководствам и инструкциям не является единственным критерием успеха.

Руководящие принципы создания интерфейса, отраженные в инструкциях, должны не снижать и ограничивать творческую активность, а позволять пользователю применять к интерфейсу свое знание реального мира(например, если пользователь видит на экране группу кнопок, похожих на кнопки на панели радиоприемника, он может и должен применить свое знание функций кнопок в реальном мире к компьютеру).

Руководящие принципы построения интерфейса рассчитаны на сегодняшние системы вывода и ввода информации. Они затрагивают такие технологии, как использование пера, писание от руки и голосовой ввод. Одна из проблем разработки инструкций, соответствующих новым технологиям, — это расшифровка способов взаимодействия пользователя с системой, так как степень этого взаимодействия еще точно не определена. Инструкции должны базироваться на том, как пользователи реагируют на новшества и создаваться по происшествии некоторого времени, необходимого, чтобы пользователи освоили интерфейс и составили определенное мнение о нем.

Нормативы

Руководящие принципы содержат характеристики стандартов презентаций, поведения и взаимодействия с элементами управления интерфейсом.

В руководствах по элементам интерфейса и его органам управления сказано, когда их нужно исправить, как "подать" и какой должна быть техника работы с ними (например, клавиатурная или с помощью мыши). Полный набор руководств раскрывает сущность каждого объекта и элемента интерфейса в терминах и способах представления на экране, их поведение, механизм взаимодействия с ними пользователей.

Развитие существующих руководящих принципов проектирования интерфейса

Многие программные продукты созданы для работы на разных платформах. С тех пор, как эти платформы имеют различные операционные системы, инструменты и стили интерфейса, очень сложно разрабатывать интерфейс, удовлетворяющий все платформы или работающий на каждой из платформ. Дополнение — подборка индустриальных руководств по проектированию — было разработано Беллкором [12]. Оно содержит описание и руководящие принципы для основных компаний и операционных систем, как IBM CUA, OSF, Microsoft Windows и др.

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

Применение руководящих принципов

Цели и руководящие принципы разработки интерфейса должны быть реалистичными и доступными для пользователей. Специфика того или иного бизнеса накладывает ограничения на данную среду. Данные руководящие принципы по разработке интерфейса также должны проходить тестирование. Чтобы продукт соответствовал руководящим принципам, необходимо иметь поддержку со стороны разработчиков. Ответственность за разработку совместимого интерфейса лежит на проектировщиках и разработчиках.

Руководящие принципы по разработке интерфейса на макро- и микроуровне

При разработке руководящих принципов по пользовательскому интерфейсу необходимо убедиться, что и разработка пользовательского интерфейса, и удобство применения анализируются с двух точек зрения — микро- и макроуровня.

Руководящие принципы на микроуровне рассматривают представление пользователям индивидуальных элементов интерфейса(управляющих — кнопок, полей для галочки, полей для текста, линеек для прокручивания и т. Д.), а так же способы интерактивного их взаимодействия.

Разработка интерфейса на макроуровне представляет собой шаблон пользовательского интерфейса — продукт собирается весь целиком и его концепция становится ясна пользователям по мере взаимодействия с ним.


Программа "TidyStartMenu"

Со временем у вас накопилось много программ в меню "Пуск", и каждый раз для запуска нужной программы вам нужно тратить время на поиски? Программа "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