Подсветка контролов в диалоге
От: edton  
Дата: 07.05.13 14:01
Оценка:
Привет,

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

Вопрос — как оптимально и наиболее наглядно выделить контрол или их группу в диалоге?

На вскидку приходят в голову следующие варианты:

1) Заблокировать все остальные контролы на вкладке (имхо, самое неудачное решение, т.к. никаких функциональных ограничений на то, чтобы изменять одновременно другие настройки нет)
2) Изменить фон диалога в том месте где находится нужные контролы,
3) Отобразить иконки рядом с контролами
4)

Что посоветуете?
Re: Подсветка контролов в диалоге
От: Anpek  
Дата: 07.05.13 14:05
Оценка:
Здравствуйте, edton, Вы писали:

Табы (только если не больше 4-5) или список слева (если много)
Плюс списка — можно ввести свою группировку
Re[2]: Подсветка контролов в диалоге
От: edton  
Дата: 07.05.13 14:13
Оценка:
Здравствуйте, Anpek, Вы писали:

A>Табы (только если не больше 4-5) или список слева (если много)

A>Плюс списка — можно ввести свою группировку

Табы как раз в диалоге есть. Проще говоря задача такая: выбираем из меню главного окна "изменить настройку #25" (причем нужные варианты меняются в зависимости от контекста), нужная вкладка открывается, но нужно "подвести" пользователя к нужным контролам для изменения этой настройки.
Re[3]: Подсветка контролов в диалоге
От: Anpek  
Дата: 07.05.13 14:16
Оценка: 2 (1)
Здравствуйте, edton, Вы писали:

E>Табы как раз в диалоге есть. Проще говоря задача такая: выбираем из меню главного окна "изменить настройку #25" (причем нужные варианты меняются в зависимости от контекста), нужная вкладка открывается, но нужно "подвести" пользователя к нужным контролам для изменения этой настройки.


Ну тогда список слева (ну просто он в прогах слева обычно) внутри таба
Хотя это не айс, если так много — я б убрал табы и сделал один большой список — и содержимое диалога меняется в зависимости какой элемент списка выбран (так же разные строки списка выбраны при вызове из разных мест меню)
Re: Подсветка контролов в диалоге
От: . Великобритания  
Дата: 07.05.13 14:26
Оценка: 4 (1)
Здравствуйте, edton, Вы писали:

E>2) Изменить фон диалога в том месте где находится нужные контролы,

E>Что посоветуете?
Посмотри IntelliJ IDEA, там это сделано для диалога настроек. Весь диалог темнеет, места которые релевантны — остаются светлыми.
В дереве слева остаются только относящиеся категории.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[4]: Подсветка контролов в диалоге
От: edton  
Дата: 07.05.13 14:28
Оценка:
Здравствуйте, Anpek, Вы писали:

A>Ну тогда список слева (ну просто он в прогах слева обычно) внутри таба

A>Хотя это не айс, если так много — я б убрал табы и сделал один большой список — и содержимое диалога меняется в зависимости какой элемент списка выбран (так же разные строки списка выбраны при вызове из разных мест меню)

Тоже минусы есть. Во первых, есть настройки где изменение сводится к установке или снятию одного чекбокса, следовательно диалогов будет очень много или нужно создавать контролы динамически. Во вторых, отсутствие группировки контролов и сложная иерархия. Честно говоря, хотел решить эту задачу с помощью одного из вариантов подсветки контролов.
Re[2]: Подсветка контролов в диалоге
От: edton  
Дата: 07.05.13 14:35
Оценка:
Здравствуйте, ., Вы писали:

.>Посмотри IntelliJ IDEA, там это сделано для диалога настроек. Весь диалог темнеет, места которые релевантны — остаются светлыми.

.>В дереве слева остаются только относящиеся категории.

Спасибо. Примерно так себе это и представлял. Зачем только выделять каждый контрол? Хотя конечно, если контролы относящиеся к одной настройке в разных частях диалога...
Re[3]: Подсветка контролов в диалоге
От: . Великобритания  
Дата: 07.05.13 14:52
Оценка:
Здравствуйте, edton, Вы писали:

.>>Посмотри IntelliJ IDEA, там это сделано для диалога настроек. Весь диалог темнеет, места которые релевантны — остаются светлыми.

.>>В дереве слева остаются только относящиеся категории.

E>Спасибо. Примерно так себе это и представлял. Зачем только выделять каждый контрол? Хотя конечно, если контролы относящиеся к одной настройке в разных частях диалога...

Там помимо перехода на данную настройку можно поискать, скажем, все, которые содержат слово "delay" в описании. И тут тебе подсветятся настройки тултипов, автодополнения и т.п.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: Подсветка контролов в диалоге
От: Carc Россия https://vk.com/gosha_mazov
Дата: 08.05.13 07:28
Оценка: 2 (1)
Здравствуйте, edton, Вы писали:

E>Привет,


E>Есть увесистое диалоговое окно с множеством вкладок, назовем его "Свойства". Естественно есть возможность открыть его из главного окна. Есть функции изменения отдельных "настроек", когда этот диалог открывается уже с заданной вкладкой и пользователь может изменить отдельную "настройку" с помощью одного контрола или их группы.


E>Вопрос — как оптимально и наиболее наглядно выделить контрол или их группу в диалоге?


E>На вскидку приходят в голову следующие варианты:


E>1) Заблокировать все остальные контролы на вкладке (имхо, самое неудачное решение, т.к. никаких функциональных ограничений на то, чтобы изменять одновременно другие настройки нет)

E>2) Изменить фон диалога в том месте где находится нужные контролы,
E>3) Отобразить иконки рядом с контролами
E>4)

E>Что посоветуете?


Можно подсвечиваевым контролам сменить шрифт на другой, на какой-нить полужирный например.
Как-то так:
void DoHightLightControl(const HWND hwndControl)
{
const HGDIOBJ hOldFont=::SendMessage(hwndControl, WM_GETFONT,0,0);//получили старый шрифт
//парсим шрифт
LOGFONT lf;
GetObject(hOldFont,sizeof(LOGFONT),&lf);
//меняем жирность на обратную
lf.lfWeight=FW_BOLD==lf.lfWeight ? FW_NORMAL : FW_BOLD;
const HFONT hFontNew=CreateFontIndirect(&lf);

//назначаем новый шрифт
SendMessage(hwndControl,WM_SETFONT,(WPARAM)hFontNew, TRUE /*перерисовать контрол после назначения или ну его нафиг*/);
}


Думаю идея понятна. Ну ясное дело писалось из головы, на деле конечно в 99 из 100 достаточно создать один шрифт и юзать его для всех контролов.
Ну и всяки моменты чтобы полужирный шрифт влезал в текст контролов. Опять же можно хиромантить с другими атрибутами шрифта (кегль, italic и.т.д.). Разве что поиграться надо. Кегль смотреть чтобы опять же влезло. Как показывает опыт, если выставить наклонный шрифт — это частенько херовато читаемо становится. Подчеркнутый шрифт иногда не наводит пользователя на нужную мысль — типа подчеркнутость это только гиперссылки и только, другие идиомы юзерами не воспринимаются.

Ну да думаю ход мысли ясен.
Aml Pages Home
Re[2]: Подсветка контролов в диалоге
От: edton  
Дата: 08.05.13 10:09
Оценка:
Здравствуйте, Carc, Вы писали:

C>Можно подсвечиваевым контролам сменить шрифт на другой, на какой-нить полужирный например.


Тоже вариант, спасибо. Единственное, не понятно как таким образом выделить edit или listbox. Комменты (static) присутствуют можно конечно их выделять, но мне больше все таки нравиться изменение фона под группой контролов.
Re[3]: Подсветка контролов в диалоге
От: Carc Россия https://vk.com/gosha_mazov
Дата: 08.05.13 10:32
Оценка:
Здравствуйте, edton, Вы писали:

E>Здравствуйте, Carc, Вы писали:


C>>Можно подсвечиваевым контролам сменить шрифт на другой, на какой-нить полужирный например.


Единственное, не понятно как таким образом выделить edit или listbox.
Да также. Что мешает сделать SendMessage(hwndEditBox, WM_SETFONT, ...)?
Aml Pages Home
Re[4]: Подсветка контролов в диалоге
От: edton  
Дата: 08.05.13 11:58
Оценка:
Здравствуйте, Carc, Вы писали:

C>Единственное, не понятно как таким образом выделить edit или listbox.

C>Да также. Что мешает сделать SendMessage(hwndEditBox, WM_SETFONT, ...)?

А если в нем текста нет?
Re[5]: Подсветка контролов в диалоге
От: Carc Россия https://vk.com/gosha_mazov
Дата: 08.05.13 12:17
Оценка:
Здравствуйте, edton, Вы писали:

E>Здравствуйте, Carc, Вы писали:


C>>Единственное, не понятно как таким образом выделить edit или listbox.

C>>Да также. Что мешает сделать SendMessage(hwndEditBox, WM_SETFONT, ...)?
E>А если в нем текста нет?
Ну если нужно подсветить Edit, причем явно привлечь к нему внимание, то стоит подумать о другом способе. Что-то вроде помигать им (скрыть\показать, раза 3, с таймаутом в полсекунды). Я так делал в одной софтине, когда нужно было привлечь внимание к выпадающему списку выбора языков при первом запуске. То бишь список сразу сам выпадал, фокус ставился на него, а рядом надпись нечто вроде "Choose Your language of UI" мигала раза 4 таким образом.

Ну или что-нить помудрить с рамками на Edit в таком же стиле. Поставить какой-нить WS_EX_CLIENTEDGE, убрать и в том же духе с таймаутом в полсекунды раза 3-4. Ну или банально в лоб, не манипулировать стилями — а помучить контрол через ту же FrameRect.

Ну как-то так. Правда, чтобы прям Edit подсветить у меня такого не было. Чтобы просто привлечь внимание я делал placeholder для Edit\RichEdit. Соответственно при потере фокуса и пустом тексте такие контролы чего-то писали в стиле "х*рачить данные сюда бочками и прямо щас".
Aml Pages Home
Re: Подсветка контролов в диалоге
От: matumba  
Дата: 26.05.13 11:43
Оценка:
Здравствуйте, edton, Вы писали:

E> Есть функции изменения отдельных "настроек", когда этот диалог открывается уже с заданной вкладкой


Мне уже такое поведение не нравится. В меню — ДВА пункта, а попадаешь в ОДНО окно => недоумение => попаболь => кинуть в автора гантелей.
Один пункт меню "установки" => окно с тэбами => выбирай что хошь.
Re[2]: Подсветка контролов в диалоге
От: Carc Россия https://vk.com/gosha_mazov
Дата: 26.05.13 12:18
Оценка:
Здравствуйте, matumba, Вы писали:

M>Здравствуйте, edton, Вы писали:


E>> Есть функции изменения отдельных "настроек", когда этот диалог открывается уже с заданной вкладкой


M>Мне уже такое поведение не нравится. В меню — ДВА пункта, а попадаешь в ОДНО окно => недоумение => попаболь => кинуть в автора гантелей.

M>Один пункт меню "установки" => окно с тэбами => выбирай что хошь.
Удивительное рядом! Но пользователь, который платит за софт денежку, испытывает чуйство глубочайшего пофига на то, что нравится автору софтины. Но зато испытывает прямо противоположное "чуйвство", по поводу того, что нравится именно ему.

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

Но коль уж нужно ему что-то подкрутить в настройках, то стоит сократить пользоваелю путь — число кликов да прочих шагов — до нужных настроек.
Aml Pages Home
Re: Подсветка контролов в диалоге
От: herethere  
Дата: 06.08.13 18:59
Оценка: -3
Здравствуйте, edton, Вы писали:

E>Вопрос — как оптимально и наиболее наглядно выделить контрол или их группу в диалоге?


Старый, добрый друг — СКРЕПКА!



Окно открывается, скрепка тычет в контрол и прячется под панель диалога с эффектом отлистнутой страницы.

Вопрос: а обязательно пугать юзера вашим громадным диалогом настроек? Если уж вы опускаетесь до "точечной настройки" через главное окно, почему бы сразу не дать эти настройки прямо в меню? Туда можно забабахать много чего — радиокнопки, чекбоксы, деревья... ну на крайняк сделаете всплывающее окно только с нужными контролами!
И потом, а что вам мешает поставить на нужный контрол просто ФОКУС ВВОДА?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.