Doga |
Отправлено: 04.03.2006, 20:49 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Некоторое время назад я начал разработку компонента TRGrid. Надеюсь, Уважаемые Коллеги, Вы поняли о чём я говорю .
Подходит к концу начальный этап разработки компонента, он уже дышит и иногда даже уверенно
Вот уже неделю не могу прийти к окончательному решению в реализации методов выделения ячеек с помощью мыши и клавиатуры.
В присоединённом файле (Project1.zip) находится рабочий EXEшник с этим компонентом. Маркировка производится следующим образом:
мышь — Shift + LButton далее MouseMove
клавиатура — Shift + VK_UP(VK_DOWN, VK_LEFT, VK_RIGHT)
Хотелось бы узнать Ваше мнение о том какой способ маркировки более правильный в текущей реализации, т.е. мышиный или клавиатурный?
Должна ли клавиатурная маркировка работать так же как и мышыная?
Или наоборот — мышиная должна работать как клавиатурная?
Если Вам не трудно — загрузите файл, протестируйте и выскажите своё мнение.
Что касается самого TRGrid :
Умеет скрывать/показывать колонки и строки
Умеет объединять ячейки
3 режима маркировок — строки, колонки, ячейки
Маркировка не пропадает после перемещения фокуса с ячейки на ячейку
Фиксированные ячейки могут работать как кнопки
Набор цветов для ячеек (то же будет и со шрифтами)
Каждая ячейка имеет свойство Data (void *) для хранения дополнительных данных а ля TTreeView
Свойство Images для иконок ячеек
И события (помимо прочих):
property OnFreeCell;
property OnInitCell;
property OnGetCellText;
property OnGetImageIndex;
property OnBeforeCellPaint;
property OnAfterCellPaint;
Когда наконец закончится начальный этап разработки, выложу исходники . Все может быть
Отредактировано Doga — 04/03/2006, 23:10
|
|
Grigoriy |
Отправлено: 04.03.2006, 21:31 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
Просто одной мышью без использования клавиатуры можно теоретически выделять и это будет самый быстрый и удобный метод.
Отредактировано Grigoriy — 04/03/2006, 22:23
|
|
Doga |
Отправлено: 04.03.2006, 22:52 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Согласен, но не хотелось бы пренебрегать пользователями у которых слишком много кошек!
Тут дело не в том чем выделять, а в том как это происходит. Клавиатурой можно выделить только предидущую ячейку на которой перед этим стоял курсор. А можно было бы выделять так же как мышой — прямоугольник ячеек...
|
|
Grigoriy |
Отправлено: 04.03.2006, 23:18 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE |
у которых слишком много кошек!
|
Это Вы про кого ?
QUOTE | Тут дело не в том чем выделять, а в том как это происходит. |
А чем неудобна мышь, если выделять ячейки, которые находятся в поле видимости прямоугольной области, отображающей таблицу ?
Обоснуйте свою мысль.
QUOTE |
мышь — Shift + LButton далее MouseMove
|
Этот метод можно оставить как один из методов выделения ячеек.
Отредактировано Grigoriy — 04/03/2006, 23:18
|
|
Doga |
Отправлено: 05.03.2006, 00:07 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Если в доме есть кошки то мыши там обычно не водятся
А свыделением мышью никто не спорит — удобно.
Выделение клавиатурой отличается от выделения мышью:
Мышью выделяется прямоугольник ячеек, а клавиатурой только те ячейки по которым прошёлся курсор. Я потому и спрашиваю какой способ лучше. А как определюсь — сделаю что б работало одинаково.
|
|
Grigoriy |
Отправлено: 05.03.2006, 12:12 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
Тогда можно использовать выделение нужных ячеек таблицы так
мышь — RButton далее MouseMove.
Локальное меню появляется только если нажмете правую кнопку мыши и отпустите ее же на той же ячейке.
|
|
AVC |
Отправлено: 06.03.2006, 09:32 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE |
мышь — Shift + LButton далее MouseMove
клавиатура — Shift + VK_UP(VK_DOWN, VK_LEFT, VK_RIGHT)
Хотелось бы узнать Ваше мнение о том какой способ маркировки более правильный
|
В "промышленном" компоненте должны присутствовать оба. Клавиши я бы выбрал те же |
|
Gedeon |
Отправлено: 06.03.2006, 13:23 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Безусловно нельзя не предусматривать выделение клавой, т.к. я очень часто крысу вообще не трогаю, если без нее мона и соотв. оч. раздражает необходимость ее хватать.
|
|
Grigoriy |
Отправлено: 06.03.2006, 13:38 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE | Безусловно нельзя не предусматривать выделение клавой, т.к. я очень часто крысу вообще не трогаю, если без нее мона и соотв. оч. раздражает необходимость ее хватать.
|
QUOTE |
В "промышленном" компоненте должны присутствовать оба. Клавиши я бы выбрал те же
|
У каждого свое мнение.
Вывод выделение ячеек должно производится как минимум тремя путями.
1. С помощью только одной мыши без клавиатуры.
2. С помощью одной клавиатуры без мыши.
3. С использованием обеих устройств (клавиатуры и мыши).
Отредактировано Grigoriy — 06/03/2006, 13:39
|
|
Doga |
Отправлено: 06.03.2006, 16:38 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Уважаемые коллеги! Видно я плохо обьяснил чего хочу от Вас добиться — каюсь
Давайте абстрагируемся от конкретных устройств ввода (KeyBoard, Mouse, TouchScreen, ...), пусть оно будет всего лишь одно, и не важно какое.
Допустим нам необходимо выделить в гриде прямоуголник ячеек размером 6х6. Как я понимаю, существуют 2 способа это сделать.
(В данном контексте КУРСОРом будем называть сфокусированную ячейку грида)
Рассмотрим 1ый вариант: Рис. 1
Этот способ работает так:
Перед началом маркировки запоминаются координаты первой выделяемой ячейки (допустим COORD1). Перемещая курсор мы получаем второй набор координат (допустим COORD2). Все ячейки оказавшиеся между координатами COORD1 и COORD2 будут выделены при перемещении курсора. Таким образом, наша цель будет достигнута всего за 10 перемещений курсора. На рисунке 1 одинаковаым числами обозначены группы ячеек, маркируемые за одно перемещение курсора.
Рассмотрим 2ой вриант: Рис. 2
Здесь маркируются только те ячейки, по которым прошёл курсор. С помощью этого способа наша цель будет достигнута за 35 перемещений курсора. Здесь я даже не стал обозначать промежуточные ячейки маркируемые за одно перемещение курсора.
Понятно, что этот способ требует несколько больше усилий от пользователя для достижения конечной цели, чем первый.
А на рисунке 3 показан недостаток первого способа маркировки. Такое выделение с помощью первого способа можно получить как минимум в 6 этапов. Хотя и второй способ тут эргономикой не блещет...
Преимущества какого либо из этих двух способов при маркировке сложных конфигураций, как на рисунке 3, мне кажутся спорными. Но налицо явное преимущество 1го способа при маркировке прямоугольных областей грида. Но это пока только моё личное мнение.
Вот, собственно, об этом я Вас и спрашивал. В данный момент 1ый способ исползуется при выделении мышью, 2ой с помощю клавиатуры. Мне кажется неправильным, что они работают по-разному, т.к. это может ввести пользователя в заблуждение...
Так какой способ маркировки более "правильный"?
|
|
avc* |
Отправлено: 06.03.2006, 17:22 |
|
Не зарегистрирован
|
Мне, как пользователю Excel'я, первый способ кажется более привычным и, кроме того, он легко превращается во второй, например, нажатием и/или удерживанием определенной клавиши. Хотя и во втором можно сделать нечто подобное.
По моему мнению сетка должна уметь работать в двух режимах выделения — область, заданная границами и перечень элементов, а конечный пользователь должен иметь легкий и естественный переключатель способа выделения. |
|
Grigoriy |
Отправлено: 06.03.2006, 18:04 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE (avc* @ 06/03/2006, 17:22) | ...кроме того, он легко превращается во второй, например, нажатием и/или удерживанием определенной клавиши. ... |
Да, есть клавиша Ctrl.
Ее удерживаешь и получается, что можно выделить несколько прямоугольных областей ячеек.
Отредактировано Grigoriy — 06/03/2006, 18:06
|
|
Doga |
Отправлено: 10.03.2006, 15:28 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
2Grigoriy
Не, Ctrl уже занят
2AVC
Вы правы — должны быть оба варианта
С Shift'ом будет работать по 1ому способу, с Alt'ом по 2ому...
|
|
Grigoriy |
Отправлено: 10.03.2006, 18:09 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE (Doga @ 10/03/2006, 15:28) | 2Grigoriy
Не, Ctrl уже занят
|
Удивительно.
Получается, что при нажатии одной только клавиши Ctrl выполняется какое-то другое действие ?
Или последовательность действий
мышь — Ctrl + LButton далее MouseMove
предназначена для чего-то другого ?
|
|
Doga |
Отправлено: 10.03.2006, 18:47 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Нет, Ctrl сам по себе ничего не делает, но используется в комбинации c кнопками VK_Left, VK_Right, VK_Next, VK_Prior, VK_Home, VK_End — для навигации по сетке. Так работают, по моему, все гриды.
А все эти VK_... так же используются при выделении. Так что остаётся только либо Shift, либо Alt...
|
|
Grigoriy |
Отправлено: 10.03.2006, 20:02 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
Ну тогда просто одной правой кнопкой мыши можно выделять ячейки без использования клавиатуры в случае мышиного выделения.
Только нужно динамически обнулять свойство, ссылающееся на локальное меню.
|
|