Операционная система может хранить некоторое не слишком большое количество кодов последовательных нажатий на клавиши в своём буфере клавиатуры. Функция get_key() будет выдавать данные из буфера о каждом следующем нажатии на клавишу или -1, если буфер пуст.
Запустите программу key.bat, чтобы увидеть, какие коды генерируются при нажатии на каждую из клавиш именно вашей клавиатуры, так как возможны отличия.
См. также:
wait_key, getc
get_mouse
Платформа:
DOS32
Синтаксис:
include mouse.e
x1 = get_mouse()
Описание:
Выдаёт данные о последнем мышином событии по форме: {событие, x, y} или выдаёт -1, если никаких событий с момента последнего вызова get_mouse() не было.
В файле mouse.e определены глобальные константы для следующих возможных мышиных событий (нажатий на кнопки):
global constant MOVE = 1, -- движение
LEFT_DOWN = 2, -- левая нажата
LEFT_UP = 4, -- левая отпущена
RIGHT_DOWN = 8, -- правая нажата
RIGHT_UP = 16, -- правая отпущена
MIDDLE_DOWN = 32, -- средняя нажата
MIDDLE_UP = 64 -- средняя отпущена
Величины x и y являются координатами курсора мыши на момент произошедшего события. Функция get_mouse() выдаёт немедленно или -1, или событие. Функция не ожидает событий. Вы должны проверять обстановку на мыши достаточно часто, чтобы избежать пропуска событий. Когда случается очередное событие, данные о предыдущем теряются, если вы не успели прочитать их. На практике несложно отследить практически все события. Потеря события MOVE в общем случае не очень критична, так как следующие MOVE покажут вам, где находится курсор мыши.
Информация о нескольких событиях, происходящих одновременно, также может выдаваться. Например, если мышь передвигается с нажатой левой кнопкой, get_mouse() будет выдавать величину события LEFT_DOWN + MOVE, т.е. 2 + 1, что равно 3. По этой причине вы должны проверять информацию и выделять частные события с помощью and_bits(). Просмотрите примеры ниже, чтобы уяснить детали.
Комментарии:
В пиксельных режимах с шириной экрана 320 пикселов вам необходимо будет делить значение координаты x на 2, чтобы получать правильную позицию курсора на экране (странная особенность DOS.)
В текстовых режимах DOS32 вам необходимо масштабировать координаты x и y, чтобы получить позицию по строкам и колонкам.
Чтобы использовать get_mouse() под DOS32, вам необходим загруженный драйвер DOS для программной связи с подключенной к порту мышью.
Вы можете вызывать get_mouse() в большинстве текстовых и пиксельных режимов.
Первый вызов get_mouse(), который вы делаете, включает курсор мыши или подсвечивает позицию символа, в которой находится курсор.
DOS в общем случае не обеспечивает использование мыши в графических режимах SVGA (экраны с числом пикселов более 640x480). Это ограничение снято в Windows 95 (DOS 7.0). Грэм Барки, Питер Блю и другие программисты распространяют подпрограммы для мыши, которые решают проблемы, связанные с использованием мыши в SVGA. Посетите в Интернет страницу Архива файлов Euphoria.
Координаты x и y, выдаваемые функцией, будут совпадать с положением острия курсора мыши или могут относиться к ближайшему пикселу, на который это острие указывает. Проверьте это, если вы пытаетесь прочесть цвет пиксела с помощью функции get_pixel(). Может оказаться, что вам нужны координаты x-1, y-1 вместо x, y.
Пример 1:
Выданные величины:
{2, 100, 50}
говорят о том, что в данный момент левая кнопка нажата, а курсор мыши находится на экране в точке с координатами x=100, y=50.
Пример 2:
Чтобы проверить LEFT_DOWN, т.е. не нажата ли левая кнопка, напишите программу наподобие следующей:
object event
while 1 do
event = get_mouse()
if sequence(event) then
if and_bits(event[1], LEFT_DOWN) then
-- левая кнопка была нажата
exit
end if
end if
end while
См. также:
mouse_events, mouse_pointer, and_bits
get_pixel
Платформа:
DOS32
Синтаксис:
x = get_pixel(s)
Описание:
Когда s является 2-х элементным рядом экранных координат {x, y}, get_pixel() выдаёт номер цвета пиксела на пиксельном экране в этой точке (небольшое целое число).
Когда s является 3-х элементным рядом формы {x, y, n}, get_pixel() выдаёт ряд из n номеров цветов для точек, начиная с {x, y} и с шагом 1 вправо, {x+1, y}, {x+2, y} и т.д.
Точки за пределами экрана имеют непредсказуемые номера цветов.
Комментарии:
Когда аргумент n задан, для чтения цветов пикселов используется очень быстрый алгоритм. Он значительно быстрее, чем поочерёдный вызов get_pixel() для чтения цвета каждого следующего пиксела.
Пример:
object x
x = get_pixel({30,40})
-- x даёт значение цвета в точке x=30, y=40
x = get_pixel({30,40,100})
-- x даёт ряд из 100 номеров цвета, представляющих
-- строчку пикселов, начинающуюся в точке {30,40} и идущую вправо
См. также:
pixel, graphics_mode, get_position
get_position
Синтаксис:
include graphics.e
s = get_position()
Описание:
Выдаёт номера текущих строки и колонки позиции, в которой находится курсор, как 2-х элементный ряд вида {строка, колонка}.
Комментарии:
Функция get_position() работает в обоих режимах - текстовом и пиксельном. В пиксельных режимах курсор не будет виден, но get_position() будет выдавать строку и колонку, в которых появится следующий символ.
Система координат, в которой отображаются символы, отличается от той, в которой отображаются пикселы. Пикселы отображаются так, что верхний левый находится в точке (x=0,y=0) и первая координата управляет горизонтальным положением, слева направо. Для символов же первая координата управляет вертикальным положением, сверху вниз, а верхний левый находится в позиции 1,1. В пиксельных режимах вы можете одновременно выводить на экран и пикселы, и текст. Функция get_position() выдаёт текущие строку и колонку для выводимого вами текста, а не для пиксела, который вы собираетесь включить. Соответствующая функция для получения текущей позиции пиксела в языке Euphoria отсутствует.
См. также:
position, get_pixel
get_screen_char
Синтаксис:
include image.e
s = get_screen_char(i1, i2)
Описание:
Выдаёт 2-элементный ряд s в форме {код ascii, атрибут} для символа на экране в строке i1, колонке i2. Ряд s состоит из двух атомов. Первый даёт код ASCII для символа. Второй же содержит информацию о цветах символа и фона и, возможно, другие данные, относящиеся к внешнему виду символа на экране.
Комментарии:
С помощью подпрограмм get_screen_char() и put_screen_char() вы можете запоминать и выводить на экран символы с их атрибутами.
Пример:
-- запоминает в ряде s символ и его атрибут из верхнего левого угла экрана
s = get_screen_char(1,1)
-- выводит из ряда s символ с его атрибутом в позицию строка 25, колонка 10
put_screen_char(25, 10, {s})
См. также:
put_screen_char, save_text_image
get_vector
Платформа:
DOS32
Синтаксис:
include machine.e
s = get_vector(i)
Описание:
Выдаёт текущий дальний адрес защищенного режима для обработчика прерывания номер i. Ряд s будет иметь 2 элемента: {16-битный сегмент, 32-битное смещение}.