Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Поведение события OnClick для кнопки не соответствует документации  (Прочитано 2863 раз)

LebedevIS

  • Новичок
  • *
  • Сообщений: 8
  • Keep calm and keep coding
    • Просмотр профиля
Описание

Мне необходимо обработать три типа событий. 1 - клик на кнопку (нажатие и отжатие кнопки), 2 - отжатие кнопки, 3 - нажатие кнопки.
Если в событиях подписаться на OnClick, то обработчик вызывается при нажатии на кнопку (как будто это событие OnMouseDown, которого нет), а при отпускании вызывается обработчик OnMouseUp (как и должно быть).
Получается, что описание события не соответствует действительному поведению https://simple-scada.com/help/manual/general-properties.html?anchor=general_events
Как обработать именно клик на кнопку? И какое поведение должно быть?
И если OnClick это именно клик, то как обработать именно OnMouseDown?

Шаги воспроизведения

1. Добавить кнопку без фиксации на экран
2. Добавить текстовое поле на экран
3. Подписаться на событие OnClick кнопки, в котором будет изменяться текст добавленного текстового поля. Например, ButtonLabel.Text := "Клик";
4. Подписаться на событие OnMouseUp кнопки, в котором будет изменяться текст добавленного текстового поля. Например, ButtonLabel.Text := "Зажата";
5. Сохранить проект и запустить клиент.
6. Нажать на добавленную кнопку.
 
Ожидаемый результат

При нажатии ничего не происходит
При отжатии лкм вызовется обработчик для OnMouseUp, а затем для OnClick

Фактический результат

При нажатии ЛКМ вызывается обработчик для OnClick
При отжатии ЛКМ вызовется обработчик для OnMouseUp

Конфигурация

Windows 10 Pro Версия 22H2
Simple-Client 2.6.5.0 (14.03.23)
« Изменён: 08 Августа 2023, 14:09:02 от LebedevIS »

Simple_Scada

  • Администратор
  • *****
  • Сообщений: 1407
    • Просмотр профиля
Здравствуйте.

Для кнопки "без фиксации" событие OnClick будет вызвано сразу после нажатия ЛКМ на кнопку. Для кнопки "с фиксацией" событие OnClick будет вызвано при нажатии и последующем отпускании ЛКМ. События OnMouseDown нет, поэтому обработать его нельзя.

Кнопка с типом "без фиксации" в реальных проектах обычно используется очень редко. Она применяется только в случаях, когда нужно присваивать значение пока кнопка удерживается. В остальных случаях нужно использовать кнопку "с фиксацией". Также, следует учесть, что при использовании web-клиента на устройствах с сенсорным экраном, кнопки "без фиксации" не будут работать, т.к. на сенсорных экранах невозможно выполнить аналог клика ЛКМ с удержанием.

LebedevIS

  • Новичок
  • *
  • Сообщений: 8
  • Keep calm and keep coding
    • Просмотр профиля
Кнопка с типом "без фиксации" в реальных проектах обычно используется очень редко.
У нас есть не один проект, где подобное используется. То есть, пока оператор удерживает кнопку - выполняется операция. Когда отпускает - операция прекращается.

Также, следует учесть, что при использовании web-клиента на устройствах с сенсорным экраном, кнопки "без фиксации" не будут работать, т.к. на сенсорных экранах невозможно выполнить аналог клика ЛКМ с удержанием.
Жаль, конечно, т.к. большинство панелек и scada систем поддерживают такое поведение.

Спасибо за ответ. Тогда в целом, насколько я понял, для кнопки без фиксации OnClick это OnMouseDown. Это было и нужно.
« Изменён: 09 Августа 2023, 07:20:30 от LebedevIS »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3215
    • Просмотр профиля
    • Simple-Scada
Цитировать
Жаль, конечно, т.к. большинство панелек и scada систем поддерживают такое поведение.
В Simple-Scada используется обычная обработка ввода (средствами API Windows), как в других приложениях и SCADA-системах. Поэтому, если Вы работаете только с устройствами на которых можно нормально выполнить нажатие с удержанием, то просто используйте кнопку без фиксации.