Контекстное меню windows. Контекстное меню, буфер обмена и основные операции в Windows

Со всеми объектами, которые расположены на рабочем столе, с каждым или папкой, можно совершить огромное множество действий и операций. Самое привычное — это запуск. Для этого стоит только щелкнуть 2 раза левой кнопкой мыши на нужном объекте.
Но возможных действий существует огромное количество. Любую папку, или скажем, значок, можно создать, переименовать, удалить, переместить и копировать. Для любого объекта можно сделать ярлык. А еще можно изменять внешний вид и свойства. В общем, список получается внушительный.
Универсального списка действий нет. Для каждого объекта, или группы объектов, существует свой набор возможных операций. Разве что, базовые, вроде копировать, можно применять практически ко всем.
Как же нам увидеть список того, что мы можем сделать с тем или иным объектом. Все просто, щелкните по нему правой кнопкой мыши, и вы увидите контекстное меню windows. Оно предложит вам доступные операции. Теперь щелкайте по нужной строчке левой кнопкой мыши.
Строго говоря, описать контекстное меню , очень сложная задача. Отчасти, потому, что как мы уже упоминали выше, универсального меню нет. Другая же причина в том, что при установке программ, изменяются некоторые пункты контекстного меню. Допустим, вы установили дополнительный текстовый редактор. Если вы вызовете контекстное меня для файла с текстовой информацией, пункт «открыть с помощью» пополниться, там будет ярлык вновь установленной программа.
Но некоторые пункты контекстного меню windows, можно встретить практически всегда. На них стоит остановиться поподробнее.
Вырезать. Благодаря этому пункты, вы можете временно перемещать объект в так называемый . Это пригодиться вам, когда есть необходимость переместить объект из одного места в другое. Этим можно пользоваться и применительно к части документа — выделите кусочек текста, примените к нему действие вырезать , и переместите в другой документ.
Копировать. Этот пункт практически аналогичен предыдущему, с тем лишь отличием, что в буфер обмена операционная система поместить не сам файл, а его копию. Отсюда применение — если вам нужен дубль объекта в отличном от исходного, месте, действие копировать будет вам как раз кстати.
Вставить. Благодаря этой функции, мы будем брать из буфера обмена, помещенный туда ранее объект, и вставлять его целиком, или некоторые фрагменты, в нужное нам место.
Свойства. Выбрав эту строку, вы сможете узнать множество информации об объекте: дата создания, размер, место расположения и тд. Большинство свойств объекта доступно для изменения.
Создать ярлык. Используя эту функцию, мы создадим объект, который будет хранить в себе указатель места расположения основного объекта, а также служить средством запуска.
Удалить. Некоторый объект перестал быть необходим? Отправьте его в корзину, или удалите навсегда, нажав Shift+Del.
Переименовать. При необходимости, задайте с помощью этого пункта нужно имя для объекта, или измените его .

Итак, подводя итог можно сказать следующее — контекстное меню windows, это набор действий и свойств для выбранного объекта.

Объект есть некоторые данные плюс методы для работы с ними. Такое определение подходит, например, к объектам, с которыми вы имели дело в языке программирования С++. Программист может порождать объекты из других объектов, наследуя их свойства и добавляя новые.

Объекты Workplace Shell также соответствуют приведенному выше определению. Каждому объекту Workplace Shell соответствуют данные (не обязательно расположенные в отдельных файлах). Для каждого объекта определен набор операций, которые пользователь может над ним выполнить.

Выделение объектов

Любой объект, представленный в виде пиктограммы на поверхности рабочего стола или в открытой папке можно выделить. Проще всего это сделать мышью.

Обратите внимание: вокруг пиктограммы появится точечная рамка. Эта рамка означает, что объект получил фокус ввода от клавиатуры. Теперь для работы с объектом можно использовать клавиатуру. Если, например, нажать клавишу , объект будет открыт (операцию открывания объекта мы опишем немного позже).

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


Рис. 3.1. Выделение нескольких объектов

Пиктограммы всех выделенных объектов отображаются на сером фоне, но только одна пиктограмма имеет фокус ввода. На рис. 3.1 это пиктограмма Minimized Window Viewer.

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

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

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

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

Вызов контекстного меню объекта

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

Рис. 3.2. Контекстное меню для папки OS/2 System

Обратите внимание на точечную рамку, которая появилась около папки OS/2 System при отображении соответствующего контекстного меню. Эта рамка появилась потому, что объект получил фокус ввода и теперь пользователь может при помощи клавиатуры работать с меню.

Внешний вид контекстного меню зависит от объекта (поэтому оно и называется контекстным).

Кнопка со стрелкой, расположенная напротив строк "Open", "Help" и "Create another" открывает доступ к меню второго уровня. На рис. 3.2 мы раскрыли меню второго уровня для строки "Open", нажав соответствующую кнопку левой клавишей мыши.

С помощью строки "Open" пользователь может открыть объект. Если вы открываете папку, на экране отображается ее содержимое. Способ отображения можно выбрать из меню второго уровня. На рис. 3.2 строка "Icon view" отмечена галочкой. Это способ отображения выбран по умолчанию и используется, если пользователь сделал двойной щелчок левой клавишей мыши по изображению папки OS/2 System.

В результате отображения содержимого папки методом "Icon view" на экране появится окно с пиктограммами, представляющими объекты, хранящиеся в папке. Это показано на рис. 3.1.

Выбрав строку "Tree view", вы можете просмотреть содержимое папки в виде дерева (рис. 3.3). Возможно, такой способ покажется вам более удобным, особенно если вы привыкли работать с иерархической системой каталогов DOS.

Рис. 3.3. Отображение содержимого папки OS/2 System в виде дерева

При этом вы можете открывать папки, отмеченные знаком "+", делая по этому знаку щелчок левой клавишей мыши, а также закрывать папки, отмеченные знаком "-".

Если вам требуется получить детальное описание объектов, хранящихся в папке, вы можете выбрать из меню "Open" строку "Details view" (рис. 3.4).


Рис. 3.4. Отображение детального описания объектов, хранящихся в папке OS/2 System

Так как рабочий стол тоже является объектом Workplace Shell, вы можете отобразить для него контекстное меню, сделав щелчок правой кнопкой мыши по свободному участку рабочего стола. При этом вокруг всего стола появится точечная рамка (рис. 3.5).

Рис. 3.5. Контекстное меню для рабочего стола

Обратим ваше внимание на строку "Shut down...". Эта строка предназначена для завершения работы операционной системы IBM OS/2 Warp . Ни при каких обстоятельствах, за исключением полного "зависания" операционной системы, вы не должны выключать питание или нажимать кнопку Reset, расположенную на корпусе компьютера, не завершив правильно работу IBM OS/2 Warp. В противном случае вы рискуете потерять целостность файловой системы. В крайнем случае, можно нажать комбинацию клавиш .

Если и это не помогает, попробуйте другую магическую комбинацию: . Повторение клавиши не ошибка - вы должны нажать эту клавишу два раза. Эта "секретная" комбинация клавиш предназначена для записи на дискеты аварийного дампа памяти и работает в большинстве случаев. После того как система попытается приступить к записи дампа памяти, попробуйте еще раз завершить работу системы с помощью комбинации клавиш .

Кстати, приведем еще одну "секретную" комбинацию клавиш, которая может быть интересна для вас: . Если сделать щелчок левой клавишей мыши по поверхности рабочего стола Workplace Shell и затем нажать указанные клавиши именно в том порядке, в котором они перечислены, на экране появится список разработчиков IBM OS/2 Warp и посвящение.

Немного о других строках контекстного меню.

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


Рис. 3.6. Изменение свойств объекта при помощи строки "Settings" контекстного меню папки OS/2 System

С помощью строки Settings пользователь может полностью изменить внешний вид и поведение объекта, настроив его по своему вкусу.

Строка контекстного меню "Help" открывает доступ к справочной системе IBM OS/2 Warp , организованной в виде гипертекста с графическими иллюстрациями и перекрестными ссылками. Если вы не испытываете трудностей с английским языком, то можете извлечь из этой справочной системы любые нужные вам сведения (напомним также, что IBM подготовила локализованную версию IBM OS/2 Warp, которая "говорит" на русском языке).

С помощью строки "Create another" пользователь может создать новый объект, используя текущий объект в качестве базового объекта. Таким образом, например, из любой папки вы можете сделать новую пустую папку, а из пиктограммы, соответствующей программе - новую пиктограмму, соответствующую этой же или другой программе.

Для копирования и перемещения объектов можно использовать, соответственно, строки "Copy..." и "Move...". Однако такую операцию удобнее выполнять мышью, просто перемещая пиктограммы по экрану. Соответствующие методики будут описаны позже.

Выбрав из контекстного меню строку "Create shadow...", пользователь может создать теневую пиктограмму, соответствующую данному объекту. Эта пиктограмма может быть создана на рабочем столе или в другой папке. Она является как бы "тенью" объекта, отсюда и ее название.

Контекстное меню может содержать и другие строки - все зависит от того, для какого объекта это меню вызвано.

Вы можете легко убрать контекстное меню, нажав клавишу или сделав щелчок левой клавишей мыши по свободному участку рабочего стола.

Что можно сделать мышью

Только что описанное контекстное меню удобно в работе, однако в большинстве случаев вы можете обойтись и без него. Например, с помощью мыши удобно перемещать объекты, изменять размеры окон и их расположение.

В этом разделе мы расскажем о некоторых операциях, которые вы можете делать над объектами Workplace Shell при помощи мыши. Одну такую операцию - выделение объектов - вы уже освоили. Техника изменения размеров окон при помощи мыши будет описана позже.

Перемещение объектов

Для того чтобы переместить объект, установите на соответствующую пиктограмму курсор мыши, нажмите правую кнопку и, не отпуская ее, двигайте пиктограмму по поверхности рабочего стола.

Куда можно переместить пиктограмму?

Вы можете перемещать пиктограммы объектов по поверхности рабочего стола или внутри открытых папок. Можно также переместить пиктограмму с поверхности стола в папку или наоборот, из папки на поверхность стола. Разумеется, вы сможете переложить пиктограмму из одной папки в другую, для чего нужно открыть обе папки.

В некоторых случаях вам может потребоваться сдвинуть пиктограмму немного в сторону. Однако Workplace Shell не дает вам положить пиктограмму рядом с исходной позицией, отображая запрещающий знак.

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

Удаление объектов

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

Рис. 3.7. Диалоговая панель с предупреждающим сообщением, которая появляется при удалении объекта

Если вы не собираетесь удалять объект, нажмите кнопку "Cancel". Если же вы собираетесь удалить объект, нажмите кнопку "Delete". При удалении папки на экране появится предупреждающее сообщение (рис. 3.8).

Рис. 3.8. Диалоговая панель с предупреждающим сообщением о том, что будет выполнено удаление самой папки и ее содержимого

При удалении непустой папки для каждого содержащегося в ней объекта на экране появляется предупреждающее сообщение, показанное на рис. 3.9.


Рис. 3.9. Предупреждение об удалении объекта, расположенного в удаляемой папке

Выключив переключатели "Confirm on folder delete" и "Confirm on object delete", вы можете избежать появления предупреждающих сообщений.

Копирование объектов

Копирование объектов мышью выполняется таким же образом, что и перемещение, однако перед копированием надо нажать клавишу .

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

Печать объектов

Процедура печати документов в IBM OS/2 Warp с использованием возможностей Workplace Shell очень проста. Для того чтобы распечатать документ, достаточно переместить изображение пиктограммы, представляющей документ, на изображение пиктограммы принтера.

300     Глава 18. Контекстные меню и режим контекстных действий

преобразуем тип результата getMenuInfo() и получаем подробную информацию о выбранном элементе списка, включая его позицию в наборе данных. Позиция используется для получения искомого объектаCrime .

Запустите приложение CriminalIntent, добавьте новое преступление и удалите его долгим нажатием. (Чтобы имитировать долгое нажатие в эмуляторе, удерживайте нажатой левую кнопку мыши до появления меню.)

Реализация режима контекстных действий

Код, написанный нами для удаления преступления из контекстного меню, будет работать на любом устройстве Android. Например, на рис. 18.2 показано контекстное меню на устройстве с Jelly Bean.

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

Рис. 18.3. Контекстная панель действий появляется при долгом нажатии

Чтобы реализовать контекстную панель действий, необходимо написать специальный код, отдельный от кода контекстного меню. Кроме того, код контекстной панели

действий содержит классы и методы, недоступные в Froyo и Gingerbread, поэтому необходимо проследить за тем, чтобы в таких ситуациях этот код не вызывался.

Множественное выделение

Когда представление списка находится в режиме контекстных действий, вы можете включить режим множественного выделения элементов списка. Любое действие, выбранное на контекстной панели действий, будет применяться ко всем выделенным представлениям.

В методе назначьте представлению списка режимCHOICE_MODE_MULTIPLE_MODAL . Используйте константы версии сборки для отделения кода, регистрирующегоListView , от кода, назначающего режим выделения.

Листинг 18.6. Назначение режима выделения

public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {

View v = super.onCreateView(inflater, parent, savedInstanceState);

ListView listView = (ListView)v.findViewById(android.R.id.list);

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {

// Контекстные меню для Froyo и Gingerbread registerForContextMenu(listView);

} else {

// Контекстная панель действий для Honeycomb и выше listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);

Методы обратного вызова режима действий в представлении списка

Следующий шаг - назначение для ListView слушателя, реализующего интерфейсAbsListView.MultiChoiceModeListener . Этот интерфейс содержит следующий метод, который вызывается при выделении или отмене выделения представления.

public abstract void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked)

Интерфейс MultiChoiceModeListenerреализует другой интерфейс - ActionMode. Callback. Когда экран переходит в режим контекстных действий, создается экземпляр класса ActionMode, а методы ActionMode.Callbackвызываются в разных точках жизненого цикла ActionMode. ActionMode.Callbackсодержит четыре обязательных метода:

public abstract boolean onCreateActionMode(ActionMode mode, Menu menu)

302     Глава 18. Контекстные меню и режим контекстных действий

Вызывается при создании ActionMode . Именно здесь заполняется ресурс контекстного меню, которое будет отображаться на контекстной панели действий.

public abstract boolean onPrepareActionMode(ActionMode mode, Menu menu)

Вызывается после onCreateActionMode(…) и каждый раз, когда существующую контекстную панель действий необходимо актуализировать новыми данными.

public abstract boolean onActionItemClicked(ActionMode mode, MenuItem item)

Вызывается, когда пользователь выбирает действие. Здесь программируется обработка контекстных действий, определенных в ресурсе меню.

public abstract void onDestroyActionMode(ActionMode mode)

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

В методе CrimeListFragment.onCreateView(…) назначьте слушателя, реализующегоMultiChoiceModeListener для представления списка. В нашем случае что-то делать

нужно только в методах onCreateActionMode(…)и onActionItemClicked(ActionMode, MenuItem).

Листинг 18.7. Назначение слушателя MultiChoiceModeListener (CrimeListFragment.java)

listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); listView.setMultiChoiceModeListener(new MultiChoiceModeListener() {

public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {

// в этой реализации

// Методы ActionMode.Callback

public boolean onCreateActionMode(ActionMode mode, Menu menu) { MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(R.menu.crime_list_item_context, menu); return true;

public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false;

// Метод является обязательным, но не используется

// в этой реализации

public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) {

case R.id.menu_item_delete_crime:

CrimeAdapter adapter = (CrimeAdapter)getListAdapter(); CrimeLab crimeLab = CrimeLab.get(getActivity());

for (int i = adapter.getCount() - 1; i >= 0; i--) {

if (getListView().isItemChecked(i)) { crimeLab.deleteCrime(adapter.getItem(i));

adapter.notifyDataSetChanged(); return true;

public void onDestroyActionMode(ActionMode mode) {

// Метод является обязательным, но не используется

// в этой реализации

}); return v;

Если вы использовали функцию автозавершения Eclipse для создания этого интерфейса, обратите внимание: заглушка, сгенерированная для onCreateActionMode(…) , возвращаетfalse . Обязательно измените возвращаемое значение наtrue ; возвращениеfalse отменяет создание режима действий.

В коде метода onCreateActionMode(…) обратите внимание на то, что мы получаем экземплярMenuInflater от объектаActionMode , а не от активности. Режим действий содержит подробную информацию для настройки контекстной панели действий. Например, вызовActionMode.setTitle(…) позволяет назначить контекстной панели действий специальный заголовок. ОбъектMenuInflater активности не будет знать об этом заголовке.

Рис. 18.4. Второй и третий элемент списка выделены

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

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

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


Пример окна контекстного меню

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

Буфер обмена - это промежуточное хранилище данных, предоставляемое операционной системой при копировании информации или обмена ей между приложениями. То есть это такой своеобразный «карман» Windows, в который пользователь, сначала может поместить определенную информацию (скопировать), а потом в любой момент ее оттуда достать (вставить). Данные содержащиеся в буфере обмена можно вставлять неограниченное количество раз. При копировании новой информации в буфер обмена, его старое содержимое удаляется.

Теперь, когда мы определили, что такое буфер обмена, самое время вернуться к самым распространенным пунктам контекстного меню, которые являются основными операциями, производимыми в системе Windows.

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

Копировать - операция, очень похожая на предыдущую. Только в отличие от команды Вставить , в буфер обмена помещается не сам объект, а его копия. Это значит, что выбранный элемент не удаляется из своего месторасположения.

Вставить - действие, обратное Вырезать и Копировать . То есть объект из буфера обмена помещается в выбранное место при этом, не удаляясь оттуда.

Удалить - операция, удаляющая объект без помещения его в буфер обмена.

Переименовать - действие, позволяющее изменить имя файла или папки.

Открыть - команда, аналогичная двойному щелчку левой кнопки мыши и позволяющая запускать приложения, открывать файлы (документы, изображения и прочие) или папки.

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

Создать ярлык - команда, позволяющая создать ярлык выбранного объекта.

Свойства - пункт меню, позволяющий узнать об объекте немало полезной информации, будь то программа, документ или одна из панелей Windows. Например, Свойства файла покажут, его тип, размер, месторасположение на компьютере, дату создания, название программы, с помощью которой его можно открыть и многое другое. Еще одной важной функцией, которой обладает эта команда, является возможность изменять собственные свойства выбранного объекта. Например, вызовите контекстное меню, щелкнув на значке Компьютер (Мой компьютер), расположенного на рабочем столе и выберите пункт Свойства . Перед вами откроется окно, открывающее доступ к различным параметрам и настройкам системы. Таким образом, вы сможете самостоятельно изменять свойства Windows.

Теперь, попробуйте применить полученные знания на практике. Создайте самостоятельно на новый текстовый файл, а затем новую папку. Переименуйте их на собственное усмотрение. Затем попробуйте в новую папку скопировать и вырезать созданный файл, а также применить к нему другие возможные действия. В заключении, понаблюдайте, как изменяется содержание контекстного меню, в зависимости от того, из какого места вы его вызываете, а так же попробуйте изучить свойства различных объектов.