67 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Как создавать диалоговые окна

Содержание

Как создавать диалоговые окна в Windows?

Как создавать диалоговые окна

Всем привет, в этом уроке я вам покажу, как создавать диалоговые окна в Windows, с помощью которых мы так часто подшучиваем над своими коллегами. Я представлю небольшой обзор команд с пояснениями для того, чтобы вы не просто копировали диалоговые окна с сайта, а смогли сами импровизировать, одновременно обучаясь. Это будет знакомый вам по предыдущим компьютерным приколам скриптовый язык VBScript, и всё, что нам как всегда понадобится, это простой Блокнот, который мы, после заполнения кода, будем сохранять в укромном месте с расширением .txt.

VBScript – это простой язык программирования, исполняемый в системе сценарием Windows Script Host. Легко кодируется в Блокноте, а лучше в специальных текстовых редакторах с расширенными возможностями, как например, AkelPad или Notepad ++ (они понимают русскую кодировку). Именно эта связка сценария и скрипта используется Windows для того, чтобы создавать диалоговые окна . Это гораздо проще, чем использовать такие языки как С и С ++.

Как создавать диалоговые окна с ошибкой?

Итак, создадим простое диалоговое окно с двумя кнопками. Чтобы время зря не проходило, мы создадим окно с псевдоошибкой. Откроем текстовый редактор, и создадим сообщение, в котором:

Кавычки и скобки обязательны. В поле «содержание ошибки» вы можете написать любое сообщение, которое впоследствии прочитает пользователь. А в поле «автор ошибки» напишите того, кто это сообщение якобы пришлёт. Ими могут быть сама система Windows, или сосед по офису. А может быть директор или администратор. Решать опять же вам. Останавливаться не буду, идём дальше.

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

Поле «5+16» приказывает системе создавать диалоговые окна с ярлыком критической ошибки и двумя кнопками. Это, как видно, кнопки «повтор» и «отмена». Но как вы уже поняли, можно создавать диалоговые окна и с другими кнопками, и всё это благодаря комбинации цифр или чисел. Поподробнее смотрим ниже:

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

Если понадобится перенести строки в диалоговых окнах, можно воспользоваться написанием скрипта в формате:

Потренируйтесь дома на создании разного рода сообщений и следите за новыми статьями в разделе. Успехов.

Форум Pawn-Wiki.Ru — Воплоти мечту в реальность!: Диалоговые Окна — Форум Pawn-Wiki.Ru — Воплоти мечту в реальность!

  • Pawn скриптинг
  • Школа скриптинга
  • Уроки
  • Правила форума
  • Просмотр новых публикаций

  • (8 Страниц)
  • 1
  • 2
  • 3
  • >
  • Последняя »
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

  • Группа: Администраторы
  • Сообщений: 2 622
  • Регистрация: 13 октября 11

Здравствуйте уважаемые пользователи! В этом уроке я вам расскажу про диалоги.
Итак, начнем.
Диалоги бывают всего 4 вида, это:
1) Диалог, который показывает просто сообщение игроку
Ид: 0
Название: DIALOG_STYLE_MSGBOX
Скриншот:
Код диалога:

2) Диалог с полем, в которое можно ввести что-либо
Ид: 1
Название: DIALOG_STYLE_INPUT
Скриншот:
Код диалога:

3) Диалог, со списком
Ид: 2
Название: DIALOG_STYLE_LIST
Скриншот:
Код диалога:

4) Диалог, с полем ввода(используется для ввода пароля) он просто шифрует введеные символы точками
Внимание: диалог был добавлен в версию клиента samp 0.3d (я его не тестировал, поэтому и скрин с офф сайта)
Ид: 3
Название: DIALOG_STYLE_PASSWORD
Скриншот:
Код диалога:

Использование:
• Диалог 1 ( DIALOG_STYLE_MSGBOX )

• Диалог 2 ( DIALOG_STYLE_INPUT )

• Диалог 3 ( DIALOG_STYLE_LIST )

• Диалог 4 ( DIALOG_STYLE_PASSWORD )

Автор: Mike

© При копировании на посторонние ресурсы ссылка на pawn-wiki.ru и автор должны быть написаны обязательно!

Сообщение отредактировал Romzes: 30 апреля 2018 — 16:53

Простое создание модального окна с помощью элемента HTML5 dialog

Модальное окно – один из наиболее часто используемых элементов пользовательского интерфейса, который мы можем найти на веб-сайтах всемирной паутины.

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


В настоящее время чаще всего для отображения модальных окон используются плагины jQuery, например jQuery UI Dialog , Twitter Bootstrap Modal , или Popeasy .

Однако в HTML5 представлен новый тэг , который позволяет нам создать настоящее модальное окно гораздо более простым способом.

Использование элемента dialog

Использование элемента ничем не отличается от использования других элементов HTML.

Достаточно просто добавить контент, который мы желаем отобразить внутри модального окна:

Однако заметьте, что когда вы откроете этот пример в Google Chrome (единственный браузер, который на данный момент поддерживает тэг dialog ), диалоговое окно по умолчанию скрыто.

И приведённый выше HTML код отобразит только кнопку « Показать диалоговое окно ». Чтобы отобразить диалоговое окно, мы можем использовать JavaScript.

Читать еще:  Взлом пароля WiFi из-под операционной системы Window?

Нажмите на кнопку « Показать диалоговое окно », и оно отобразиться посередине окна браузера.

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

Также элемент имеет псевдо-элемент ::backdrop . Он используется, чтобы настроить затемнение фона, которое обычно применяется при отображении модальных окон.

Оно помогает посетителям сконцентрироваться на диалоговом окне и скрыть всё, что расположено за ним. Судя по всему, на данный момент эта опция не реализована, однако будет поддерживаться в будущем.

Заключение

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

Пожалуйста, учтите, что этот элемент является экспериментальным и ещё не готов для использования повсеместно. Пока он работает только в браузере Google Chrome с включённой на странице chrome://flags/ опцией Experimental Features .

Данная публикация представляет собой перевод статьи « Creating Modal Window Easily With HTML5 Dialog » , подготовленной дружной командой проекта Интернет-технологии.ру

Создание собственного диалогового окна

Оглавление

  • Создание диалоговых окон в Qt
  • Класс QDialog
  • Создание собственного диалогового окна

Программа, показанная на рисунке, является результатом создания собственного диалогового окна. При запуске на экране окно с кнопкой Press Me (Нажми меня), нажатие на которую отображает диалоговое окно ввода имени First Name (Имя) и фамилии Last Name (Фамилия).

В файле main.cpp создается виджет класса StartDialog, предназначенный для запуска диалогового окна.

Класс StartDialog унаследован от класса кнопки нажатия. Сигнал clicked() соединяется в методе connect() со слотом slotButtonClicked(). В этом слоте создается объект диалогового окна InputDialog, который не имеет предка.

Примечание: Диалоговые окна, не имеющее предка, будут центрироваться по экрану. Окна с предками будут отцентрированы относительно предка.

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

Для создания своего собственного диалогового окна нужно унаследовать класс QDialog. Класс InputDialog содержит два атрибута — указатели m_ptxtFirstName и m_ptxtLastName на виджеты однострочного текстового поля, и два метода, возвращающие содержимое этих полей — firstName() и lastName().

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

В нашем примере я решил пренебречь ею — для этого необходимо установить флаги окна, поэтому вторым параметром передаются флаги Qt::WindowTitleHint и Qt::WindowSystemMenuHint, первый устанавливает заголовок окна, а второй — добавляет системное меню с возможностью закрытия окна.

Модальное диалоговое окно всегда должно содержать кнопку Cancel (Отмена). Сигналы clicked() кнопок Ok и Cancel (Отмена) соединяются со слотами accept() и rejected() соответственно. Это делается для того, чтобы метод exec() возвращал при нажатии кнопки Ok значение QDialog::Accepted, а при нажатии на кнопку Cancel (Отмена) — значение QDialog::Rejected.

Метод firstName() возвращает введенное пользователем имя:

Метод lastName() возвращает введенную пользователем фамилию.

АйТи бубен

Инструменты пользователя

Инструменты сайта

Боковая панель

Содержание

Диалоговые окна С++

Диалоговые окна существуют модальные(modal dialog box создаются функцией DialogBox)и немодальные (modeless dialog box создаются функцией CreateDialog). Эти две функции загружают шаблон диалогового окна из исполняемого файла прикладной программы и создают выскакивающее окно, которое соответствует спецификации шаблона. Имеются и другие функции, которые создают диалоговое окно, используя шаблоны в памяти; они передают дополнительную информацию в процедуру диалогового окна, как создается диалоговое окно.

Чтобы создать или модальное, или немодальное диалоговое окно, прикладная программа должна снабдить блок диалога шаблоном, чтобы описать стиль и содержание диалогового окна; приложение должно также снабдить диалоговое окно процедурой, чтобы выполнять задачи. Шаблон диалогового окна (dialog box template) — бинарное описание диалогового окна и органов управления, которое оно содержит. Разработчик может создать этот шаблон как ресурс, который будет загружен из исполняемого файла прикладной программы, или создать в памяти, пока прикладная программа выполняется. Процедура диалогового окна (dialog box procedure) — определяемая программой функция повторного вызова, которую система вызывает, когда операционная система получает ввод данных для диалогового окна или задачу для выполнения в блоке диалога. Хотя процедура диалогового окна подобна оконной процедуре, у нее нет тех же самых обязанностей.

Шаблон диалогового окна — это двоичные данные, который описывают диалоговое окно, определяя его высоту, ширину, стиль и органы управления, который он содержит. Чтобы создать диалоговое окно, система или загружает его шаблон из ресурсов в исполняемом файле приложения, или использует шаблон, переданный приложением для неё в глобальной памяти. В любом случае, приложение при создании диалогового окна должно предоставлять шаблон. Разработчик создает ресурсы шаблона, используя компилятор ресурса или редактор диалогового окна. Компилятор ресурса преобразует описание текста в двоичный ресурс, а редактор диалогового окна сохраняет в интерактивном режиме созданное диалоговое окно как двоичный ресурс.

Органы управления диалогового окна

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

Для каждого органа управления шаблон устанавливает значения стиля, которые определяют внешний вид и работу органа управления. Каждый орган управления — это дочернее окно и, поэтому, должно иметь стиль WS_CHILD. Чтобы гарантировать, что орган управления видимый, когда на экране показывается диалоговое окно, каждый орган управления должен иметь также и стиль WS_VISIBLE. Другие, обычно используемые стили окна — это WS_BORDER для органов управления, которые не обязательно имеют рамки, WS_DISABLED для органов управления, которые должны быть блокированы, когда создается первоначальное диалоговое окно и WS_TABSTOP и WS_GROUP для органов управления, к которым можно обращаться, используя клавиатуру. Стили WS_TABSTOP и WS_GROUP используются совместно с клавиатурным интерфейсом диалога, рассмотренным позже в этой главе.

Читать еще:  Почему Windows 7/10 долго загружается при включении компьютера

Шаблон может также установить стили, специфические для класса окна органа управления. Например, шаблон, который определяет кнопку управления, должен дать ей стиль, такой как BS_PUSHBUTTON или BS_CHECKBOX. Система передает стили органов управления в оконную процедуру этого элемента через посредство сообщения WM_CREATE, разрешая процедуре приспосабливать внешний вид и работу органа управления.

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

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

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

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

Процедуры диалогового окна

Процедура диалогового окна похожа на оконную процедуру тем, что система отправляет сообщения процедуре тогда, когда она имеет информацию, чтобы задать или выполнить задачи. В отличие от оконной процедуры, процедура диалогового окна никогда не вызывает функцию DefWindowProc. Вместо этого, она возвращает значение ИСТИНА (TRUE), если обрабатывает это сообщение, или ЛОЖЬ (FALSE), если этого она не делает.

Каждая процедура диалогового окна имеет нижеследующую форму:

Параметры процедуры служат одной и той же цели, что и в оконной процедуре, параметр hwndDlg получает дескриптор окна блока диалога.

Большинство процедур диалогового окна обрабатывает сообщение WM_INITDIALOG и сообщения WM_COMMAND, отправляемые органами управления, но обрабатывает не все, если есть другие сообщения. Если процедура диалогового окна не обрабатывает сообщение, она должна возвратить значение ЛОЖЬ (FALSE), чтобы предписать системе обработать сообщения внутри. Единственным исключением из этого правила является сообщение WM_INITDIALOG. Процедура диалогового окна должна возвратить значение ИСТИНА (TRUE), чтобы предписать системе далее обрабатывать сообщение WM_INITDIALOG. В любом случае, процедура не должна вызвать DefWindowProc.

DialogBox -модальные

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

Пример WinAPI приложения. Нет главного окна. Все приложение построено на диалоговых окнах.

BestProg

Пример создания диалогового окна в MS Visual Studio 2010 — C++ (MFC)

Содержание

Поиск на других ресурсах:

Условие задачи

1. Разработать диалоговое окно, которое содержит две кнопки OK и Cancel (рис. 1).

Рис. 1. Форма, которую нужно создать

2. Осуществить вызов диалогового окна из основного окна приложения. Вывести соответствующее сообщение, если в диалоговом окне нажатая одна из двух клавиш: OK и Cancel .

Выполнение

1. Запустить MS Visual Studio 2010
2. Создать проект на C++ по шаблону Dialog Based Application

Подробный пример создания проекта по шаблону Dialog Based Application описывается здесь .

В окне создания нового проекта задать имя приложения как MFCApp . В будущем будем привязываться к этому имени.

Папка приложения в нашем случае (не важно):

Во время создания нового проекта в мастере выбираем Dialog Based Application . Все другие настройки оставляем по умолчанию.

В результате будут сгенерированы два класса с именами CMFCAppApp и CMFCAppDlg .

Окно MS Visual Studio после выполненных действий будет иметь вид как показано на рисунке 2.

Рис. 2. Форма приложения после создания Dialog Based Application

3. Изменение внешнего вида главной формы

Осуществим удаление кнопки OK . А кнопку Cancel переименуем в Exit .

Для удаления кнопки OK нужно сначала ее выделить, а потом нажать клавишу Delete .

Таким самым образом удаляем элемент в котором написано:

Чтобы переименовать кнопку Cancel , сначала выделим ее, а потом в окне Properties в свойстве Caption набираем слово « Exit » (рис. 3). Таким образом, приложение уже настроено на нажатие на кнопку « Exit » таким образом, что происходит выход из приложения.

Читать еще:  Как установить обновления прошивки htc desire v. Как прошить htc desire x, и где скачать прошивку? Нестандартная прошивка HTC Desire — инструкция

Рис. 3. Переименование имени кнопки с « Cancel » на « Exit «

Пока что, в окне панели Properties имеем два элемента:

  • IDD_MFCAPP_DIALOG – главное окно приложения;
  • IDCANCEL – кнопка « Exit » (бывшая « Cancel «).

Можно загрузить приложение на выполнение и протестовать его работу.

Выносим на форму другую кнопку, не привязанную к обработчикам событий. В окне панели Properties появляется еще один элемент IDC_BUTTON1 .

Форма приложения будет иметь вид, как показано на рисунке 4.

Рис. 4. Вынесение кнопки не привязанной к обработчику событий

Свойство Caption кнопки IDC_BUTTON1 изменяем на Form2 . После нажатия на этой кнопке будет вызываться диалоговое окно.

4. Этапы построения диалогового окна

В Visual C++ любое диалоговое окно строится в три этапа:

  • формирование ресурсов диалогового окна;
  • создание класса диалогового окна;
  • использование класса диалогового окна.
5. Формирование класса и ресурсов диалогового окна

В MS Visual Studio ресурсы диалогового окна автоматически создаются после создания класса окна. Таким образом, создав класс окна, мы автоматически создаем ресурс окна.

Для работы с классами используется мастер классов Class Wizard . Чтобы вызвать Class Wizard делаем клик правой кнопкой мышки и в контекстном меню выбираем команду « Class Wizard… » (Рис. 5).

Рис. 5. Вызов « Class Wizard… » для создания класса и ресурса диалогового окна

В результате откроется окно, которое изображено на рисунке 6.

Рис. 6. Окно « MFC Class Wizard «

Окно имеет такие поля:

1. Поле « Project: » – имеющиеся проекты в решении ( Solution ).

2. Поле « Class Name: » указывает имеющиеся классы в проекте. В нашем случае есть три класса с именами:

  • CMFCAppApp – класс приложения в целом;
  • CMFCAppDlg – класс диалогового окна приложения;
  • CAboutDlg – класс диалогового окна About , что было сформировано при создании проекта мастером AppWizard .

3. Поле « Base Class: » указывает на базовый класс, из которого унаследован класс, который отображается в поле « Class Name: «.

4. Поле « Resource: » определяет название ресурса, который отвечает классу из поля « Class Name: «.

5. Поле « Class declaration: » определяет название файла-заголовка для класса, который отображается в поле « Class Name: «.

6. Поле « Class implementation: » определяет название файла, в котором реализованы функции из класса, который отображается в поле « Class Name: «.

Также окно имеет пять вкладок, которые для класса из поля « Class Name :» описывают:

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

Чтобы добавить новый класс, вызовем команду « Add Class » (рис. 7).

Рис. 7. Команда добавления нового класса

В результате откроется окно « MFC Add Class Wizard «, в котором устанавливаем поля в значения, как изображено на рисунке 8. Для установления полей, достаточно в поле « Class Name: » набрать текст « CForm2 «. Автоматически будут заполнены все другие поля за исключением поля « Base class: «.

В поле «Base class:» указывается базовый класс CDialog .

Название ресурса устанавливается как IDD_FORM2 .

Заголовочный файл и файл реализации класса имеют названия « Form2.h » и « Form2.cpp «.

Рис. 8. Создание нового класса CForm2 и ресурса IDD_FORM2 , которые базируются на классе CDialog

Делаем клик на « Finish «. В предшествующем окне видно, что к трем предшествующим классам добавлен класс CForm2 .

Снова делаем клик на « OK «.

6. Окно MS Visual Studio и панель Solution Explorer

После выполненных действий, окно панели Solution Explorer имеет вид, как показано на рисунке 9.

Рис. 9. Окно Solution Explorer

Как видно из рисунка 9, в списке заголовочных файлов появились файлы « Form2.h » и « Form2.cpp «. Соответственно, это являются файлы заголовка и реализации для новообразованного класса CForm2 .

7. Вызов диалогового окна класса CForm2 как ресурса

Чтобы начать формировать новое диалоговое окно (класс CForm2 ), нужно вызвать его как ресурс. Для этого в Solution Explorer делаем двойной клик мышкой на файле « MFCApp.rc » из вкладыша Resources (рис. 10).

Рис. 10. Вызов списка имен ресурсов приложения

Получаем список имен имеющихся ресурсов:

  • IDD_ABOUTBOX – ресурс диалогового окна About ;
  • IDD_FORM2 – ресурс новосозданного окна;
  • IDD_MFC_APP_DIALOG – ресурс главного окна приложения.

Для вызова нужного ресурса, необходимо на нем сделать двойной клик мышкой. Делаем двойной клик на ресурсе IDD_FORM2 . В результате, откроется новосозданное диалоговое окно (рис. 11). Как видно из рисунка 11, оно похоже на начальное окно приложения типа Dialog Based Application .

Рис. 11. Окно класса CForm2 , который унаследован от класса CDialog

Можно изменить размеры формы и размещение кнопок « OK » и « Cancel «.

8. Программирование события клика на кнопке « Form2 » главного окна приложения

Используя « Solution Explorer » и файл ресурсов « MFCApp.rc » (см. п. 7) переходим к ресурсу IDD_MFCAPP_DIALOG главного окна приложения (рис. 12).

Рис. 12. Главное окно приложения

В окне « Properties » выделяем кнопку с идентификатором IDC_BUTTON1 . Потом переходим на вкладыш « Control Events » (рис. 13).

Рис. 13. Список событий из вкладыша Control Events элемента управления IDC_BUTTON1

В списке событий находим событие с названием BN_CLICKED . Потом выбираем кнопку выбора нисходящего меню и в меню выбираем « OnBnClickedButton1 » (рис. 14).

Рис. 14. Выбор события BN_CLICKED и вызов обработчика события OnBnClickedButton1

В результате откроется окно файла « MFCAppDlg.cpp » с выделенным фрагментом кода обработчика события OnBnClickedButton1 .

Между скобками нужно вставить свой собственный код обработки события.

Программный код функции обработки события клика на кнопке IDC_BUTTON1 следующий:

Теперь можно запустить приложение на выполнение и протестировать его работу.

Ссылка на основную публикацию
Статьи c упоминанием слов:

Adblock
detector