Difference between revisions of "SysFn37/ru"

From KolibriOS wiki
Jump to navigation Jump to search
(Add more info)
(9 intermediate revisions by 4 users not shown)
Line 3: Line 3:
 
----
 
----
  
 
+
===Подфункция 0 - экранные координаты мыши===
===- Подфункция 0 - экранные координаты мыши ===
 
 
Параметры:
 
Параметры:
  * eax = 37 - номер функции
+
* eax = 37 - номер функции
  * ebx = 0 - номер подфункции
+
* ebx = 0 - номер подфункции
 
Возвращаемое значение:
 
Возвращаемое значение:
  * eax = x*65536 + y, (x,y)=координаты курсора мыши (считая от 0)
+
* eax = x*65536 + y, (x,y)=координаты курсора мыши (считая от 0) (как посчитать? - http://board.kolibrios.org/viewtopic.php?f=2&t=684&p=69834#p69834)
 +
 
 +
'''Константы для регистров:'''
 +
::eax - SF_MOUSE_GET (37)
 +
::ebx - SSF_SCREEN_POSITION (0)
  
=== Подфункция 1 - координаты мыши относительно окна ===
+
===Подфункция 1 - координаты мыши относительно окна===
 
Параметры:
 
Параметры:
 
* eax = 37 - номер функции
 
* eax = 37 - номер функции
 
* ebx = 1 - номер подфункции
 
* ebx = 1 - номер подфункции
 
Возвращаемое значение:
 
Возвращаемое значение:
* eax = x*65536 + y, (x,y)=координаты курсора мыши относительно окна приложения (считая от 0)
+
* eax = x*65536 + y, (x,y)=координаты курсора мыши относительно окна приложения (считая от 0) (как посчитать? - http://board.kolibrios.org/viewtopic.php?f=2&t=684&p=69834#p69834)
 
Замечания:
 
Замечания:
* Значение вычисляется по формуле (x-xwnd)*65536 + (y-ywnd). Если y>=ywnd, то младшее слово неотрицательно и содержит относительную y-координату, а старшее - относительную х-координату (правильного знака). В противном случае младшее слово отрицательно и всё равно содержит относительную y-координату, а к старшему слову следует прибавить 1.
+
* Значение вычисляется по формуле (x-xwnd)*65536 + (y-ywnd).
 +
:Если y>=ywnd, то младшее слово неотрицательно и содержит относительную y-координату, а старшее - относительную x-координату (правильного знака). В противном случае младшее слово отрицательно и всё равно содержит относительную y-координату, а к старшему слову следует прибавить 1.
 +
 
 +
'''Константы для регистров:'''
 +
::eax - SF_MOUSE_GET (37)
 +
::ebx - SSF_WINDOW_POSITION (1)
  
=== Подфункция 2 - нажатые кнопки мыши ===
+
===Подфункция 2 - нажатые кнопки мыши===
 
Параметры:
 
Параметры:
 
* eax = 37 - номер функции
 
* eax = 37 - номер функции
Line 26: Line 34:
 
Возвращаемое значение:
 
Возвращаемое значение:
 
* eax содержит информацию о нажатых кнопках мыши:
 
* eax содержит информацию о нажатых кнопках мыши:
** бит 0 установлен = левая кнопка нажата
+
* бит 0 установлен = левая кнопка нажата
** бит 1 установлен = правая кнопка нажата
+
* бит 1 установлен = правая кнопка нажата
** бит 2 установлен = средняя кнопка нажата
+
* бит 2 установлен = средняя кнопка нажата
** бит 3 установлен = 4-я кнопка нажата
+
* бит 3 установлен = 4-я кнопка нажата
** бит 4 установлен = 5-я кнопка нажата
+
* бит 4 установлен = 5-я кнопка нажата
** прочие биты сброшены
+
* прочие биты сброшены
 +
 
 +
'''Константы для регистров:'''
 +
::eax - SF_MOUSE_GET (37)
 +
::ebx - SSF_BUTTON (2)
 +
 
 +
===Подфункция 3 - состояния и события кнопок мыши===
 +
Параметры:
 +
:* eax = 37 - номер функции
 +
:* ebx = 3 - номер подфункции
 +
Возвращаемое значение:
 +
:* eax содержит следующую информацию:
 +
 
 +
состояния:
 +
:* бит 0 установлен = удерживается левая кнопка
 +
:* бит 1 установлен = удерживается правая кнопка
 +
:* бит 2 установлен = удерживается средняя кнопка
 +
:* бит 3 установлен = удерживается 4-я кнопка
 +
:* бит 4 установлен = удерживается 5-я кнопка
 +
 
 +
события:
 +
:* бит 8 установлен  = нажата левая кнопка
 +
:* бит 9 установлен  = нажата правая кнопка
 +
:* бит 10 установлен = нажата средняя кнопка
 +
 
 +
:* бит 15 установлен = используется вертикальная прокрутка
 +
 
 +
:* бит 16 установлен = отпущена левая кнопка
 +
:* бит 17 установлен = отпущена правая кнопка
 +
:* бит 18 установлен = отпущена средняя кнопка
 +
 
 +
:* бит 23 установлен = используется горизонтальная прокрутка
 +
 
 +
:* бит 24 установлен = двойной щелчёк левой кнопкой
  
=== Подфункция 4 - загрузить курсор ===
+
'''Константы для регистров:'''
 +
::eax - SF_MOUSE_GET (37)
 +
::ebx - SSF_BUTTON_EXT (3)
 +
===Подфункция 4 - загрузить курсор===
 
Параметры:
 
Параметры:
 
* eax = 37 - номер функции
 
* eax = 37 - номер функции
 
* ebx = 4 - номер подфункции
 
* ebx = 4 - номер подфункции
 
* dx = источник данных:
 
* dx = источник данных:
* dx = LOAD_FROM_FILE = 0 - данные в файле
+
:* dx = LOAD_FROM_FILE = 0 - данные в файле
** ecx = указатель на полный путь к файлу курсора
+
:* ecx = указатель на полный путь к файлу курсора
** файл курсора должен быть в формате .cur, стандартном для MS Windows, причём размером 32*32 пикселя
+
::файл курсора должен быть в формате .cur, стандартном для MS Windows, причём размером 32*32 пикселя
* dx = LOAD_FROM_MEM = 1 - данные файла уже загружены в память
+
:* dx = LOAD_FROM_MEM = 1 - данные файла уже загружены в память
** ecx = указатель на данные файла курсора
+
:* ecx = указатель на данные файла курсора
** формат данных такой же, как и в предыдущем случае
+
::формат данных такой же, как и в предыдущем случае
* dx = LOAD_INDIRECT = 2 - данные в памяти
+
:* dx = LOAD_INDIRECT = 2 - данные в памяти
** ecx = указатель на образ курсора в формате ARGB 32*32 пикселя
+
:* ecx = указатель на образ курсора в формате ARGB 32*32 пикселя
 
* edx = 0xXXYY0002, где
 
* edx = 0xXXYY0002, где
** XX = x-координата "горячей точки" курсора
+
:* XX = x-координата "горячей точки" курсора
** YY = y-координата
+
:* YY = y-координата
** 0 <= XX, YY <= 31
+
:* 0 <= XX, YY <= 31
 
Возвращаемое значение:
 
Возвращаемое значение:
* eax = 0 - неудача
+
* eax = 0 - неудача
 
* иначе eax = хэндл курсора
 
* иначе eax = хэндл курсора
  
=== Подфункция 5 - установить курсор ===
+
'''Константы для регистров:'''
 +
::eax - SF_MOUSE_GET (37)
 +
::ebx - SSF_LOAD_CURSOR (4)
 +
 
 +
===Подфункция 5 - установить курсор===
 
Устанавливает новый курсор для окна текущего потока.
 
Устанавливает новый курсор для окна текущего потока.
 
Параметры:
 
Параметры:
Line 65: Line 113:
 
* Если передан некорректный хэндл, то функция восстановит курсор по умолчанию (стандартную стрелку). В частности, к восстановлению курсора по умолчанию приводит передача ecx=0.
 
* Если передан некорректный хэндл, то функция восстановит курсор по умолчанию (стандартную стрелку). В частности, к восстановлению курсора по умолчанию приводит передача ecx=0.
  
=== Подфункция 6 - удалить курсор ===
+
'''Константы для регистров:'''
 +
::eax - SF_MOUSE_GET (37)
 +
::ebx - SSF_SET_CURSOR (5)
 +
 
 +
===Подфункция 6 - удалить курсор===
 
Параметры:
 
Параметры:
 
* eax = 37 - номер функции
 
* eax = 37 - номер функции
Line 76: Line 128:
 
* Если удаляется активный (установленный подфункцией 5) курсор, то восстанавливается курсор по умолчанию (стандартная стрелка).
 
* Если удаляется активный (установленный подфункцией 5) курсор, то восстанавливается курсор по умолчанию (стандартная стрелка).
  
=== Подфункция 7 - данные прокрутки ===
+
'''Константы для регистров:'''
 +
::eax - SF_MOUSE_GET (37)
 +
::ebx - SSF_DEL_CURSOR (6)
 +
 
 +
===Подфункция 7 - данные прокрутки===
 
Параметры:
 
Параметры:
 
* eax = 37 - номер функции
 
* eax = 37 - номер функции
Line 86: Line 142:
 
* После прочтения значения обнуляются.
 
* После прочтения значения обнуляются.
 
* Данные имеют знаковые значения.
 
* Данные имеют знаковые значения.
 +
 +
'''Константы для регистров:'''
 +
::eax - SF_MOUSE_GET (37)
 +
::ebx - SSF_SCROLL_DATA (7)
 +
 +
===Подфункция 8 - загрузить курсор с указанием кодировки===
 +
Параметры:
 +
* eax = 37 - номер функции
 +
* ebx = 8 - номер подфункции
 +
* ecx = указатель на строку с путём к файлу курсора
 +
* edx = кодировка строки, подробности указаны в описании функции 80.
 +
Возвращаемое значение:
 +
* eax = хэндл курсора, 0 - неудача
  
 
{{System_functions}}
 
{{System_functions}}
 
[[Category: SysCalls]]
 
[[Category: SysCalls]]

Revision as of 08:37, 28 February 2021

Функция 37 - работа с мышью.


Подфункция 0 - экранные координаты мыши

Параметры:

  • eax = 37 - номер функции
  • ebx = 0 - номер подфункции

Возвращаемое значение:

Константы для регистров:

eax - SF_MOUSE_GET (37)
ebx - SSF_SCREEN_POSITION (0)

Подфункция 1 - координаты мыши относительно окна

Параметры:

  • eax = 37 - номер функции
  • ebx = 1 - номер подфункции

Возвращаемое значение:

Замечания:

  • Значение вычисляется по формуле (x-xwnd)*65536 + (y-ywnd).
Если y>=ywnd, то младшее слово неотрицательно и содержит относительную y-координату, а старшее - относительную x-координату (правильного знака). В противном случае младшее слово отрицательно и всё равно содержит относительную y-координату, а к старшему слову следует прибавить 1.

Константы для регистров:

eax - SF_MOUSE_GET (37)
ebx - SSF_WINDOW_POSITION (1)

Подфункция 2 - нажатые кнопки мыши

Параметры:

  • eax = 37 - номер функции
  • ebx = 2 - номер подфункции

Возвращаемое значение:

  • eax содержит информацию о нажатых кнопках мыши:
  • бит 0 установлен = левая кнопка нажата
  • бит 1 установлен = правая кнопка нажата
  • бит 2 установлен = средняя кнопка нажата
  • бит 3 установлен = 4-я кнопка нажата
  • бит 4 установлен = 5-я кнопка нажата
  • прочие биты сброшены

Константы для регистров:

eax - SF_MOUSE_GET (37)
ebx - SSF_BUTTON (2)

Подфункция 3 - состояния и события кнопок мыши

Параметры:

  • eax = 37 - номер функции
  • ebx = 3 - номер подфункции

Возвращаемое значение:

  • eax содержит следующую информацию:

состояния:

  • бит 0 установлен = удерживается левая кнопка
  • бит 1 установлен = удерживается правая кнопка
  • бит 2 установлен = удерживается средняя кнопка
  • бит 3 установлен = удерживается 4-я кнопка
  • бит 4 установлен = удерживается 5-я кнопка

события:

  • бит 8 установлен = нажата левая кнопка
  • бит 9 установлен = нажата правая кнопка
  • бит 10 установлен = нажата средняя кнопка
  • бит 15 установлен = используется вертикальная прокрутка
  • бит 16 установлен = отпущена левая кнопка
  • бит 17 установлен = отпущена правая кнопка
  • бит 18 установлен = отпущена средняя кнопка
  • бит 23 установлен = используется горизонтальная прокрутка
  • бит 24 установлен = двойной щелчёк левой кнопкой

Константы для регистров:

eax - SF_MOUSE_GET (37)
ebx - SSF_BUTTON_EXT (3)

Подфункция 4 - загрузить курсор

Параметры:

  • eax = 37 - номер функции
  • ebx = 4 - номер подфункции
  • dx = источник данных:
  • dx = LOAD_FROM_FILE = 0 - данные в файле
  • ecx = указатель на полный путь к файлу курсора
файл курсора должен быть в формате .cur, стандартном для MS Windows, причём размером 32*32 пикселя
  • dx = LOAD_FROM_MEM = 1 - данные файла уже загружены в память
  • ecx = указатель на данные файла курсора
формат данных такой же, как и в предыдущем случае
  • dx = LOAD_INDIRECT = 2 - данные в памяти
  • ecx = указатель на образ курсора в формате ARGB 32*32 пикселя
  • edx = 0xXXYY0002, где
  • XX = x-координата "горячей точки" курсора
  • YY = y-координата
  • 0 <= XX, YY <= 31

Возвращаемое значение:

  • eax = 0 - неудача
  • иначе eax = хэндл курсора

Константы для регистров:

eax - SF_MOUSE_GET (37)
ebx - SSF_LOAD_CURSOR (4)

Подфункция 5 - установить курсор

Устанавливает новый курсор для окна текущего потока. Параметры:

  • eax = 37 - номер функции
  • ebx = 5 - номер подфункции
  • ecx = хэндл курсора

Возвращаемое значение:

  • eax = хэндл предыдущего установленного курсора

Замечания:

  • Если передан некорректный хэндл, то функция восстановит курсор по умолчанию (стандартную стрелку). В частности, к восстановлению курсора по умолчанию приводит передача ecx=0.

Константы для регистров:

eax - SF_MOUSE_GET (37)
ebx - SSF_SET_CURSOR (5)

Подфункция 6 - удалить курсор

Параметры:

  • eax = 37 - номер функции
  • ebx = 6 - номер подфункции
  • ecx = хэндл курсора

Возвращаемое значение:

  • eax разрушается

Замечания:

  • Курсор должен был быть ранее загружен текущим потоком (вызовом подфункции 4). Функция не удаляет системные курсоры и курсоры, загруженные другими приложениями.
  • Если удаляется активный (установленный подфункцией 5) курсор, то восстанавливается курсор по умолчанию (стандартная стрелка).

Константы для регистров:

eax - SF_MOUSE_GET (37)
ebx - SSF_DEL_CURSOR (6)

Подфункция 7 - данные прокрутки

Параметры:

  • eax = 37 - номер функции
  • ebx = 7 - номер подфункции

Возвращаемое значение:

  • eax = [horizontal offset]*65536 + [vertical offset]

Замечания:

  • Данные доступны только активному окну.
  • После прочтения значения обнуляются.
  • Данные имеют знаковые значения.

Константы для регистров:

eax - SF_MOUSE_GET (37)
ebx - SSF_SCROLL_DATA (7)

Подфункция 8 - загрузить курсор с указанием кодировки

Параметры:

  • eax = 37 - номер функции
  • ebx = 8 - номер подфункции
  • ecx = указатель на строку с путём к файлу курсора
  • edx = кодировка строки, подробности указаны в описании функции 80.

Возвращаемое значение:

  • eax = хэндл курсора, 0 - неудача