Пользовательский интерфейс. Обмен опытом.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
WAYFARER
энтузиаст
Сообщения: 564
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Пользовательский интерфейс. Обмен опытом.

Сообщение WAYFARER »

Так сложились обстоятельства, что мне в данный момент приходится думать об этом, в этот раз я решил подойти к этому вопросу очень критично, и, как оказалось, моего опыта и знаний недостаточно.
Думаю каждый разработчик сталкивался с проблемой проектирования GUI.
Вот и мне хотелось бы получше понять концепцию построения пользовательских интерфейсов.
Я понимаю, что для эффективного взаимодействия пользователя с программой интерфейс должен прост, интуитивно понятен, и в то же время привлекателен, иначе, как оказывается в большинстве случаев, какой бы функциональной программа не была, особого успеха она иметь не будет. Так как все таки должен выглядеть хороший программный продукт? Как должны выглядеть окна программы(SDI, MDI и прочее), элементы управления, как правильно сгруппировать и расположить эти самые элементы и т.д. и т.п. Собственно это целая наука.
Я предлагаю в данной теме устроить этакий небольшой "семинар" на тему "Пользовательский интерфейс", где люди смогут обменяться опытом, поделиться мыслями, соображениями, мнениями, ссылками, статьями, какими либо примерами, cкриншотами...
Думается, если данная тема двинется, то каждый её участник сможет почерпнуть что то новое и полезное для себя.
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

Очень важная вещь в интерфейсе, это время реакции! Весьмя раздражают "забелённые окна", ожидающие обработки сообщения WM_PAINT (или её аналогов)

Посему, всех призываю отказываться от Application.ProcessMessages, а использовать TThread + TTimer, где по событию таймера опрашивается состояние потока.

Код: Выделить всё

  TWorkThread = class(TThread)
  public
    procedure CancelWork;
    property Progress : Single read GetProgress; // все свойства обёрнуты в CriticalSection
    property Comment  : String read GetString;
    property WantUser: Boolean read GetWantUser;
    property WorkDone: Boolean read GetWorkDone;
  end;

  TForm1 = class(TForm)
    Timer1: TTimer;
    WorkThread : TWorkThread;
  ....

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if not Assigned(WorkThread) then Exit;
  Label1.Caption:=WorkThread.Comment;
  ProgressBar1.Position:=Round(ProgressBar1.Max*WorkThread.Progress);
  if WorkThread.WantUser then begin
    if MessageDlg(...) = mrCancel then begin
      WorkThread.CancelWork;
      Timer1.Enabled:=false;
    end;
  end;
  if Workthread.WorkDone then
    Timer1.Enabled:=false;
end;     


Это конечно, не так "весело", с точки зрения разработчика. Всех же пугали, о том, что многопоточность это страшно?! Но в итоге из программы получается просто конфетка!
Climber
постоялец
Сообщения: 415
Зарегистрирован: 03.06.2007 20:09:57
Откуда: Москва

Сообщение Climber »

WAYFARER писал(а):Вот и мне хотелось бы получше понять концепцию построения пользовательских интерфейсов.

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

Добавлено спустя 2 минуты 24 секунды:
P. S. books.ru - сайт издательства. Можно заказать и забрать в подвальчике на Беговой, самый дешевый вариант в Москве. Только, боюсь, все уже раскупили.
Odyssey
энтузиаст
Сообщения: 580
Зарегистрирован: 29.11.2007 16:32:24

Сообщение Odyssey »

Я бы добавил ещё ".ру/Ководство" А. Лебедева. Оно относится скорее к веб-дизайну и поэтому не вся информация оттуда будет полезной, но то что всё же окажется полезным -- довольно интересно читается и хорошо запоминается.
Аватара пользователя
coyot.rush
постоялец
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Сообщение coyot.rush »

скалогрыз 23.01.2010 19:23:28
Очень важная вещь в интерфейсе, это время реакции! Весьмя раздражают "забелённые окна", ожидающие обработки сообщения WM_PAINT (или её аналогов)

Согласен. От себя добавлю что ноходяться умники пишушие гуи на питоне. причем весь код кидают в обрабочики событий и прога "подвешиваеться". Обидно что так пишут в Fedor'e Mandiva и т.д . Плюс несовместимомть разный версий интерпритатора :(
Помоему,имхо, после обучения азам паскаля нужно учить потоки.

Лучшей IDE создания гуи считаю MSE. Например somewidget.face.fade.colorcount, настраиваем цвета (вроде cl_dkcyan,cl_gray) градиен (gd_up) . Красота :D
Аватара пользователя
WAYFARER
энтузиаст
Сообщения: 564
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Сообщение WAYFARER »

Коротенькая, но, на мой взгляд, очень интересная статья
Реализм в дизайне пользовательских интерфейсов
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

Лично я предпочитаю надпись иконке :)

Конечно, требуется перевод, и зачастую больше места, но тем неменее, смысл более ясный.
Если есть на кнопке иконка (без надписи), то лучше добавить к ней Hint.
Аватара пользователя
dunin
энтузиаст
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и
Контактная информация:

Сообщение dunin »

WAYFARER писал(а):...Так как все таки должен выглядеть хороший программный продукт? Как должны выглядеть окна программы(SDI, MDI и прочее), элементы управления, как правильно сгруппировать и расположить эти самые элементы и т.д. и т.п. ...

Вопрос, конечно, интересный. По мне, так ответ на поставленный вопрос должен начинать искаться с ответа на другой: а для чего программный продукт? К примеру никому не придет в голову делать вэб браузер или текстовый редактор с SDI интерфейсом. Равно как и среда разработки с MDI тоже будет (ИМХО) не особо удобна... Как-то так...

А по поводу иконок и кнопок, меня лично бесят две вещи: когда меню работает как кнопка и когда кнопка как меню. Например в меню написано "выход". Нажимаем в надежде, что выпадет подменю и там можно будет нажать, что требуется, а в место этого хлоп - программа закрылась. Или жмем на кнопку, но вместо результата выпадает еще "подкнопка", или как ее там назвать...

Мне думается, что хороший интерфейс обязательно должен обладать одним свойством - работать с программой можно без мыши, или наоборот - без клавиатуры. Т.е. или так или так или вместе.
Аватара пользователя
FedeX
постоялец
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение FedeX »

Ещё люблю, когда используют AutoHint статус бара. Ненавижу ждать по пол часа пока над какой-нибудь кнопкой появиться подсказка.
И ещё люблю, когда в приложении не используют fixed-size форм. Толи у меня клаустрафобия, но не люблю их :roll: Люблю растягивать окна как сам считаю нужным, и ожидаю, что элементы интерфейса сами подстрояться под новый размер.
И ещё... Не люблю модальные формы, точнее когда их много и особенно когда одна модальная форма вызывает другую - стараюсь проэктировать интерфейс так, чтобы таких ситуаций не возникало.
А потоки люблю..) только в примере скалогрыза, не помешало-бы добавить критических секций ..
Аватара пользователя
AbakAngelSoft
постоялец
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар
Контактная информация:

Сообщение AbakAngelSoft »

Очень рекомендую Алан Купер "Психбольница в руках пациентов" и Джоэла Спольски "Руководство по UI дизайну для программистов".
А модальность должна быть вымарана из приличного приложения в любом ее виде!
скалогрыз
долгожитель
Сообщения: 1804
Зарегистрирован: 03.09.2008 02:36:48

Сообщение скалогрыз »

AbakAngelSoft писал(а):А модальность должна быть вымарана из приличного приложения в любом ее виде!

даже Open/Save диалоги? :(
Аватара пользователя
FedeX
постоялец
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение FedeX »

Ну полностью модальность пока не вымараеш, но подумать о том как её минимизировать перед проектированием не помешает :wink:
Аватара пользователя
AbakAngelSoft
постоялец
Сообщения: 273
Зарегистрирован: 06.08.2008 19:28:26
Откуда: Краснодар
Контактная информация:

Сообщение AbakAngelSoft »

скалогрыз писал(а):даже Open/Save диалоги?

В идеале - да.
Но модальность проявляется не только и не столько в модальных окнах. Часто весь интерфейс приложения настолько "модален", что у пользователя через пять минут работы целиком переполняется оперативная память.
Аватара пользователя
qivi
энтузиаст
Сообщения: 703
Зарегистрирован: 19.01.2009 12:45:54
Откуда: Россия

Сообщение qivi »

1. А чем так плохо окно фиксированного размера? Речь не идёт же обо всех окнах подряд, но есть элементы приложения которые лучьще что б имели фиксированный размер окна?

2. А "вымарать" модальность для меня вообще откровением стало, нет кучу форточек аш глаза разбегаются я и сам не люблю но использование модульных окон с умом делает приложение более удобным, структурированным, более нативно понятным пользователю... а категорический отказ от них в графическом приложении чуть больше маленькой утилитки приведёт к хаусу...

3.:
А потоки люблю..) только в примере скалогрыза, не помешало-бы добавить критических секций ..


А что за критические секции? Как с ними будет выглядеть код?
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

AbakAngelSoft писал(а):Часто весь интерфейс приложения настолько "модален", что у пользователя через пять минут работы целиком переполняется оперативная память.

ИМХО это уже проблемы освобождения ресурсов. В памяти должны быть загружены только те формы, с которыми пользователь работает
Ответить