ScreenUnlock
 
Разблокирывает рабочую страницу фреймбуфера

Синтаксис

Declare Sub ScreenUnlock ( ByVal startline As Integer = -1, ByVal endline As Integer = -1 )

Использование

ScreenUnlock [ start_line ] [, end_line ]

Параметры

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

Описание

ScreenUnlock разблокирует текущую рабочую страницу, предполагая , что она ранее была заблокирована вызовом ScreenLock и позволяет регулярно перезагружать систему обновления экрана. При вызове с start_line и end_line , предполагается изменение и обновление области экрана только между этими линиями.

Существует внутренний счетчик, который помнит состояние блокировки экрана, таким образом, ScreenUnlock влияет только на экран, который заперт. Экран, который не был заблокирован с ScreenLock не может получить разблокировку, однако ScreenUnlock будет по-прежнему принудительно обновлять данную область или полноэкранный режим.

Вызовы ScreenUnlock должны работать в паре с соответствующим вызовом ScreenLock. Только первый вызов ScreenLock фактически выполняет операцию блокировки. Последующие вызовы ScreenLock только увеличивают счетчик блокировки. И наоборот, ScreenUnlock только уменьшает счетчик блокировки, пока он не достигнет нуля,  в это время будет выполняться фактическая процедура разблокировки. Использование Screen или ScreenRes обнуляет все блокировки и устанавливает счетчик блокировки на ноль перед изменением режимов экрана.

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

Внимание (Win32, Linux) : Экран блокируется, останавливая поток, который обрабатывает также события ОС . Это означает, что экран должен быть заблокирован только в течение короткого времени, необходимого, чтобы перерисовать его, и события пользователя не будут получены в то время пока экран заблокирован. Если время блокировки становится слишком длинным, лучше используйте метод двойной буферизации (с ScreenCopy).

Пример

See ScreenPtr example.

Различия диалектов

  • Не доступен в диалекте -lang qb , но есть псевдоним __Screenunlock.

Отличия от QB

  • Новое в FreeBASIC

См. также