SysFn48/ru: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
m (обновление: "@panel" -> "@taskbar")
 
(8 intermediate revisions by 3 users not shown)
Line 6: Line 6:


Параметры:
Параметры:
* eax = 48 - номер функции
:* eax = 48 - номер функции
* ebx = 0 - номер подфункции
:* ebx = 0 - номер подфункции
* ecx = 0 - зарезервировано
:* ecx = 0 - зарезервировано
Возвращаемое значение:
Возвращаемое значение:
* функция не возвращает значения
:* функция не возвращает значения
Замечания:
Замечания:
* Функция перерисовывает экран после изменения параметров подфункциями 1 и 2.
:* Функция перерисовывает экран после изменения параметров подфункциями 1 и 2.
* Вызов функции без предшествующих вызовов указанных подфункций игнорируется.
:* Вызов функции без предшествующих вызовов указанных подфункций игнорируется.
* Вызов функции с ненулевым ecx игнорируется.
:* Вызов функции с ненулевым ecx игнорируется.
 
'''Константы для регистров:'''
::eax - SF_STYLE_SETTINGS (48)
::ebx - SSF_APPLY (0)


=== Подфункция 1 - установить стиль кнопок. ===
=== Подфункция 1 - установить стиль кнопок. ===


Параметры:
Параметры:
* eax = 48 - номер функции
:* eax = 48 - номер функции
* ebx = 1 - номер подфункции
:* ebx = 1 - номер подфункции
* ecx = тип кнопок:
:* ecx = тип кнопок:
:* 0 = плоские
::* 0 = плоские
:* 1 = объёмные
::* 1 = объёмные
Возвращаемое значение:
Возвращаемое значение:
* функция не возвращает значения
:* функция не возвращает значения
Замечания:
Замечания:
* После вызова описываемой функции следует перерисовать экран подфункцией 0.
:* После вызова описываемой функции следует перерисовать экран подфункцией 0.
* Тип кнопок влияет только на их прорисовку [[SysFn08/ru|функцией 8]].
:* Тип кнопок влияет только на их прорисовку [[SysFn08/ru|функцией 8]].
 
'''Константы для регистров:'''
::eax - SF_STYLE_SETTINGS (48)
::ebx - SSF_SET_BUTTON_STYLE (1)


=== Подфункция 2 - установить стандартные цвета окон. ===
=== Подфункция 2 - установить стандартные цвета окон. ===


Параметры:
Параметры:
* eax = 48 - номер функции
:* eax = 48 - номер функции
* ebx = 2 - номер подфункции
:* ebx = 2 - номер подфункции
* ecx = указатель на таблицу цветов
:* ecx = указатель на таблицу цветов
* edx = размер таблицы цветов (должен быть 192 байт для будущей совместимости)
:* edx = размер таблицы цветов (должен быть 192 байта для будущей совместимости)
Формат таблицы цветов указан в описании подфункции 3.
::Формат таблицы цветов указан в описании подфункции 3.
Возвращаемое значение:
Возвращаемое значение:
* функция не возвращает значения
:* функция не возвращает значения
Замечания:
Замечания:
* После вызова описываемой функции следует перерисовать экран подфункцией 0.
:* После вызова описываемой функции следует перерисовать экран подфункцией 0.
* Таблица стандартных цветов влияет только на приложения, которые эту таблицу явным образом получают (подфункцией 3) и используют (указывая цвета из неё при вызовах функций рисования).
:* Таблица стандартных цветов влияет только на приложения, которые эту таблицу явным образом получают (подфункцией 3) и используют (указывая цвета из неё при вызовах функций рисования).
* Таблица стандартных цветов входит в скин и устанавливается заново при установке скина (подфункции 8).
:* Таблица стандартных цветов входит в скин и устанавливается заново при установке скина (подфункции 8).
* Таблицу цветов можно просматривать/изменять интерактивно с помощью приложения desktop.
:* Таблицу цветов можно просматривать/изменять интерактивно с помощью приложения [[desktop/ru|desktop]].
* Таблицу цветов можно просматривать/изменять интерактивно с помощью приложения [[desktop/ru|desktop]].
 
'''Константы для регистров:'''
::eax - SF_STYLE_SETTINGS (48)
::ebx - SSF_SET_COLORS (2)


=== Подфункция 3 - получить стандартные цвета окон. ===
=== Подфункция 3 - получить стандартные цвета окон. ===


Параметры:
Параметры:
* eax = 48 - номер функции
:* eax = 48 - номер функции
* ebx = 3 - номер подфункции
:* ebx = 3 - номер подфункции
* ecx = указатель на буфер размером edx байт, куда будет записана таблица
:* ecx = указатель на буфер размером edx байт, куда будет записана таблица
* edx = размер таблицы цветов (должен быть 40 байт для будущей совместимости)
:* edx = размер таблицы цветов (должен быть 192 байта для будущей совместимости)
Возвращаемое значение:
Возвращаемое значение:
* функция не возвращает значения
:* функция не возвращает значения
Формат таблицы цветов: каждый элемент - dword-значение цвета 0x00RRGGBB
Формат таблицы цветов: каждый элемент - dword-значение цвета 0x00RRGGBB
:* +0: dword: frames - цвет рамки
:* +0: dword: menu_body - цвет фона системного меню
:* +4: dword: grab - цвет заголовка
:* +4: dword: 3d_face - цвет фона для придания 3D эффекта
:* +8: dword: grab_button - цвет кнопки на полосе заголовка
:* +8: dword: 3d_dark - цвет темной обводки для придания 3D эффекта
:* +12 = +0xC: dword: grab_button_text - цвет текста на кнопке на полосе заголовка
:* +12: dword: 3d_light - цвет светлой обводки для придания 3D эффекта
:* +16 = +0x10: dword: grab_text - цвет текста на заголовке
:* +16: dword: win_title - цвет текста в заголовке окна приложения
:* +20 = +0x14: dword: work - цвет рабочей области
:* +20: dword: win_body - цвет фона окна
:* +24 = +0x18: dword: work_button - цвет кнопки в рабочей области
:* +24: dword: btn_face - цвет активной кнопки
:* +28 = +0x1C: dword: work_button_text - цвет текста на кнопке в рабочей области
:* +28: dword: btn_text - цвет текста активной кнопки
:* +32 = +0x20: dword: work_text - цвет текста в рабочей области
:* +32: dword: win_text - цвет текста в рабочей области окна
:* +36 = +0x24: dword: work_graph - цвет графики в рабочей области
:* +36: dword: panel_frame - цвет рамки области панели
:* +40: dword: win_face - цвет бордюра окна между внешней и внутренней рамкой
:* +44: dword: win_inface - цвет бордюра "неактивного" окна между внешней и внутренней рамкой
:* +48: dword: win_frame - цвет внешней рамки окна
:* +52: dword: win_inframe - цвет внешней рамки "неактивного" окна
:* +56: dword: win_border - цвет внутренней рамки окна
:* +60: dword: win_inborder - цвет внутренней рамки "неактивного" окна
:* +64: dword: win_graytext - цвет в оттенках серого в рабочей области окна.
:* +68: dword: menu_frame - цвет рамки системного меню
:* +72: dword: menu_text - цвет текста системного меню
:* +76: dword: panel_body - цвет фона области панели
:* +80: dword: panel_text - цвет текста области панели
:* +84: dword: hint_frame - цвет рамки всплывающей подсказки
:* +88: dword: hint_body - цвет фона всплывающей подсказки
:* +92: dword: hint_text - цвет текста всплывающей подсказки
:* +96: dword: btn_inface - цвет фона "неактивной" кнопки
:* +100: dword: btn_fcface - цвет фона кнопки при наведении курсора (focus)
:* +104: dword: btn_frame - цвет рамки кнопки
:* +108: dword: btn_inframe - цвет рамки "неактивной" кнопки
:* +112: dword: btn_fcframe - цвет рамки кнопки при наведении курсора (focus)
:* +116: dword: btn_intext - цвет текста "неактивной" кнопки
:* +120: dword: btn_fctext - цвет текста кнопки при наведении курсора (focus)
:* +124: dword: gui_shadow - цвет тени от любого текста
:* +128: dword: gui_face - цвет фона элемента (edit,listbox,checkbox...)
:* +132: dword: gui_inface - цвет фона "неактивного" элемента
:* +136: dword: gui_fcface - цвет фона элемента при наведении курсора
:* +140: dword: gui_frame - цвет рамки элемента
:* +144: dword: gui_inframe - цвет рамки "неактивного" элемента
:* +148: dword: gui_fcframe - цвет рамки элемента при наведении курсора
:* +152: dword: gui_text - цвет текста элемента
:* +156: dword: gui_intext - цвет текста "неактивного" элемента
:* +160: dword: gui_fctext - цвет текста элемента при наведении курсора
:* +164: dword: gui_select - цвет выделения текста
:* +168: dword: res_var_a - зарезервированно
:* +172: dword: res_var_b - зарезервированно
:* +176: dword: res_var_c - зарезервированно
:* +180: dword: res_var_d - зарезервированно
:* +184: dword: res_var_e - зарезервированно
:* +188: dword: res_var_f - зарезервированно


Замечания:
Замечания:
* До ревизии #4788 скины использовали только первые 40 байт (причина разрозненности структуры таблицы - совместимость).
* Структура таблицы цветов описана в стандартном включаемом файле macros.inc под названием system_colors; например, можно писать:
* Структура таблицы цветов описана в стандартном включаемом файле macros.inc под названием system_colors; например, можно писать:
     sc system_colors ; объявление переменной
     sc sys_colors ; объявление переменной
     ... ; где-то надо вызвать
     ... ; где-то надо вызвать
     ; описываемую функцию с ecx=sc
     ; описываемую функцию с ecx=sc
     mov ecx, [sc.work_button_text] ; читаем цвет текста
     mov ecx, [sc.win_text] ; читаем цвет текста
     ; на кнопке в рабочей области
     ; в рабочей области окна
* Использование/неиспользование этих цветов - дело исключительно самой программы. Для использования нужно просто при вызове функций рисования указывать цвет, взятый из этой таблицы.
* Использование/неиспользование этих цветов - дело исключительно самой программы. Для использования нужно просто при вызове функций рисования указывать цвет, взятый из этой таблицы.
* При изменении таблицы стандартных цветов (подфункцией 2 с последующим применением изменений подфункцией 0 или при установке скина подфункцией 8) всем окнам посылается сообщение о необходимости перерисовки (событие с кодом 1).
* При изменении таблицы стандартных цветов (подфункцией 2 с последующим применением изменений подфункцией 0 или при установке скина подфункцией 8) всем окнам посылается сообщение о необходимости перерисовки (событие с кодом 1).
* Стандартные цвета можно просматривать/изменять интерактивно с помощью приложения [[desktop/ru|desktop]].
* Стандартные цвета можно просматривать/изменять интерактивно с помощью приложения [[desktop/ru|desktop]].
'''Константы для регистров:'''
::eax - SF_STYLE_SETTINGS (48)
::ebx - SSF_GET_COLORS (3)


=== Подфункция 4 - получить высоту скина. ===
=== Подфункция 4 - получить высоту скина. ===
Параметры:
Параметры:
* eax = 48 - номер функции
:* eax = 48 - номер функции
* ebx = 4 - номер подфункции
:* ebx = 4 - номер подфункции
Возвращаемое значение:
Возвращаемое значение:
* eax = высота скина
:* eax = высота скина
Замечания:
Замечания:
* Высотой скина по определению считается высота заголовка окон, использующих скин.
:* Высотой скина по определению считается высота заголовка окон, использующих скин.
* Смотри также общую структуру окна в описании [[SysFn00/ru|функции 0]].
:* Смотри также общую структуру окна в описании [[SysFn00/ru|функции 0]].
 
'''Константы для регистров:'''
::eax - SF_STYLE_SETTINGS (48)
::ebx - SSF_GET_SKIN_HEIGHT (4)


=== Подфункция 5 - получить рабочую область экрана. ===
=== Подфункция 5 - получить рабочую область экрана. ===


Параметры:
Параметры:
* eax = 48 - номер функции
:* eax = 48 - номер функции
* ebx = 5 - номер подфункции
:* ebx = 5 - номер подфункции
Возвращаемое значение:
Возвращаемое значение:
* eax = [left]*65536 + [right]
:* eax = [left]*65536 + [right]
* ebx = [top]*65536 + [bottom]
:* ebx = [top]*65536 + [bottom]
Замечания:
Замечания:
* Рабочая область экрана определяет положение и координаты максимизированного окна.
:* Рабочая область экрана определяет положение и координаты максимизированного окна.
* Рабочая область экрана при нормальной работе есть весь экран за вычетом панели (@panel).
:* Рабочая область экрана при нормальной работе есть весь экран за вычетом панели (@taskbar).
* (left,top) - координаты левого верхнего угла,
:* (left,top) - координаты левого верхнего угла,
:(right,bottom) - координаты правого нижнего.
::(right,bottom) - координаты правого нижнего.
:Таким образом, размер рабочей области по оси x определяется формулой right-left+1, по оси y - формулой bottom-right+1.
::Таким образом, размер рабочей области по оси x определяется формулой right-left+1, по оси y - формулой bottom-right+1.
* Смотри также функцию 14, позволяющую определить размеры всего экрана.
:* Смотри также [[SysFn14/ru|функцию 14]], позволяющую определить размеры всего экрана.
* Есть парная функция установки рабочей области - подфункция 6.
:* Есть парная функция установки рабочей области - подфункция 6.
 
'''Константы для регистров:'''
::eax - SF_STYLE_SETTINGS (48)
::ebx - SSF_GET_SCREEN_AREA (5)


=== Подфункция 6 - установить рабочую область экрана. ===
=== Подфункция 6 - установить рабочую область экрана. ===


Параметры:
Параметры:
* eax = 48 - номер функции
:* eax = 48 - номер функции
* ebx = 6 - номер подфункции
:* ebx = 6 - номер подфункции
* ecx = [left]*65536 + [right]
:* ecx = [left]*65536 + [right]
* edx = [top]*65536 + [bottom]
:* edx = [top]*65536 + [bottom]
Возвращаемое значение:
Возвращаемое значение:
* функция не возвращает значения
:* функция не возвращает значения
Замечания:
Замечания:
* Рабочая область экрана определяет положение и координаты максимизированного окна.
:* Рабочая область экрана определяет положение и координаты максимизированного окна.
* Эта функция используется только приложением @panel, устанавливающим рабочей областью весь экран за вычетом панели.
:* Эта функция используется только приложением @taskbar, устанавливающим рабочей областью весь экран за вычетом панели.
* (left,top) - координаты левого верхнего угла,
:* (left,top) - координаты левого верхнего угла,
:(right,bottom) - координаты правого нижнего.
::(right,bottom) - координаты правого нижнего.
:Таким образом, размер рабочей области по оси x определяется формулой right-left+1, по оси y - формулой bottom-right+1.
::Таким образом, размер рабочей области по оси x определяется формулой right-left+1, по оси y - формулой bottom-right+1.
* Если left>=right, то x-координаты рабочей области не изменяются.
:* Если left>=right, то x-координаты рабочей области не изменяются.
:Если left<0, то left не устанавливается. Если right больше или равно ширины экрана, то right не устанавливается.
::Если left<0, то left не устанавливается. Если right больше или равно ширины экрана, то right не устанавливается.
:Аналогично по оси y.
::Аналогично по оси y.
* Смотри также функцию 14, позволяющую определить размеры всего экрана.
:* Смотри также [[SysFn14/ru|функцию 14]], позволяющую определить размеры всего экрана.
* Есть парная функция получения рабочей области - подфункция 5.
:* Есть парная функция получения рабочей области - подфункция 5.
* Эта функция автоматически перерисовывает экран, по ходу дела обновляет координаты и размеры максимизированных окон.
:* Эта функция автоматически перерисовывает экран, по ходу дела обновляет координаты и размеры максимизированных окон.
:Все окна извещаются о необходимости перерисовки (событие 1).
::Все окна извещаются о необходимости перерисовки (событие 1).
 
'''Константы для регистров:'''
::eax - SF_STYLE_SETTINGS (48)
::ebx - SSF_SET_SCREEN_AREA (6)


=== Подфункция 7 - получить область скина для текста заголовка. ===
=== Подфункция 7 - получить область скина для текста заголовка. ===
Line 133: Line 200:
Возвращает область заголовка окна со скином, предназначенную
Возвращает область заголовка окна со скином, предназначенную
для вывода текста заголовка.
для вывода текста заголовка.
Параметры:
<br>Параметры:
* eax = 48 - номер функции
:* eax = 48 - номер функции
* ebx = 7 - номер подфункции
:* ebx = 7 - номер подфункции
Возвращаемое значение:
Возвращаемое значение:
* eax = [left]*65536 + [right]
:* eax = [left]*65536 + [right]
* ebx = [top]*65536 + [bottom]
:* ebx = [top]*65536 + [bottom]
Замечания:
Замечания:
* Использование/неиспользование этой функции - личное дело приложения.
:* Использование/неиспользование этой функции - личное дело приложения.
* Рекомендуется учитывать значения, возвращаемые этой функцией, при выборе места для рисования текста заголовка (функцией 4) или какого-нибудь заменителя текста заголовка (по усмотрению приложения).
:* Рекомендуется учитывать значения, возвращаемые этой функцией, при выборе места для рисования текста заголовка ([[SysFn04/ru|функцией 4]]) или какого-нибудь заменителя текста заголовка (по усмотрению приложения).
 
'''Константы для регистров:'''
::eax - SF_STYLE_SETTINGS (48)
::ebx - SSF_GET_SKIN_MARGINS (7)


=== Подфункция 8 - установить используемый скин окон. ===
=== Подфункция 8 - установить используемый скин окон. ===


Параметры:
Параметры:
* eax = 48 - номер функции
:* eax = 48 - номер функции
* ebx = 8 - номер подфункции
:* ebx = 8 - номер подфункции
* ecx = указатель на имя файла скина
:* ecx = указатель на имя файла скина
Возвращаемое значение:
Возвращаемое значение:
* eax = 0 - успешно
:* eax = 0 - успешно
* eax = 1 - не удалось загрузить файл
:* eax = 1 - не удалось загрузить файл
* eax = 2 - файл не является файлом скина
:* eax = 2 - файл не является файлом скина
Замечания:
Замечания:
* При успешной загрузке скина все окна извещаются о необходимости перерисовки (событие 1).
:* При успешной загрузке скина все окна извещаются о необходимости перерисовки (событие 1).
* При загрузке система считывает скин из файла default.skn на рамдиске.
:* При загрузке система считывает скин из файла default.skn на рамдиске.
* Пользователь может изменять скин статически, создав свой default.skn, или динамически с помощью приложения [[desktop/ru|desktop]].
:* Пользователь может изменять скин статически, создав свой default.skn, или динамически с помощью приложения [[desktop/ru|desktop]].
 
'''Константы для регистров:'''
::eax - SF_STYLE_SETTINGS (48)
::ebx - SSF_SET_SKIN (8)
 
=== Подфункция 9 - получить настройку сглаживания шрифтов. ===
Параметры:
:* eax = 48 - номер функции
:* ebx = 9 - номер подфункции
Возвращаемое значение:
:* eax = 2 - субпиксельное, 1 - обычное, 0 - выключить
 
'''Константы для регистров:'''
::eax - SF_STYLE_SETTINGS (48)
::ebx - SSF_GET_FONT_SMOOTH (9)
 
=== Подфункция 10 - настроить сглаживание шрифтов. ===
 
Параметры:
:* eax = 48 - номер функции
:* ebx = 10 - номер подфункции
:* cl  = 2 - субпиксельное, 1 - обычное, 0 - выключить
 
'''Константы для регистров:'''
::eax - SF_STYLE_SETTINGS (48)
::ebx - SSF_SET_FONT_SMOOTH (10)
 
=== Подфункция 11 - получить размер шрифтов. ===
 
Параметры:
:* eax = 48 - номер функции
:* ebx = 11 - номер подфункции
Возвращаемое значение:
:* eax = текущая высота шрифта в пикселях
 
'''Константы для регистров:'''
::eax - SF_STYLE_SETTINGS (48)
::ebx - SSF_GET_FONT_SIZE (11)
 
=== Подфункция 12 - установить размер шрифтов. ===
 
Параметры:
:* eax = 48 - номер функции
:* ebx = 12 - номер подфункции
:* cl  = новая высота шрифта в пикселях
 
'''Константы для регистров:'''
::eax - SF_STYLE_SETTINGS (48)
::ebx - SSF_SET_FONT_SIZE (12)
 
=== Подфункция 13 - установить скин с указанием кодировки. ===


Параметры:
:* eax = 48 - номер функции
:* ebx = 13 - номер подфункции
:* ecx = указатель на строку с путём к файлу скина
:* edx = кодировка строки, подробности указаны в описании функции 80.
Возвращаемое значение:
:* eax = 0 - успешно
:* eax = 1 - не удалось загрузить файл
:* eax = 2 - файл не является файлом скина
Замечания:
:* При успешной загрузке скина все окна извещаются о необходимости перерисовки (событие 1).
:* При загрузке система считывает скин из файла default.skn на рамдиске.
:* Пользователь может изменять скин статически, создав свой default.skn, или динамически с помощью приложения desktop.


{{System_functions}}
{{System_functions}}
[[Category: SysCalls]]
[[Category: SysCalls]]

Latest revision as of 15:35, 12 January 2022

Функция 48 - стили отображения окон


Подфункция 0 - применить настройки экрана.

Параметры:

  • eax = 48 - номер функции
  • ebx = 0 - номер подфункции
  • ecx = 0 - зарезервировано

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

  • функция не возвращает значения

Замечания:

  • Функция перерисовывает экран после изменения параметров подфункциями 1 и 2.
  • Вызов функции без предшествующих вызовов указанных подфункций игнорируется.
  • Вызов функции с ненулевым ecx игнорируется.

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

eax - SF_STYLE_SETTINGS (48)
ebx - SSF_APPLY (0)

Подфункция 1 - установить стиль кнопок.

Параметры:

  • eax = 48 - номер функции
  • ebx = 1 - номер подфункции
  • ecx = тип кнопок:
  • 0 = плоские
  • 1 = объёмные

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

  • функция не возвращает значения

Замечания:

  • После вызова описываемой функции следует перерисовать экран подфункцией 0.
  • Тип кнопок влияет только на их прорисовку функцией 8.

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

eax - SF_STYLE_SETTINGS (48)
ebx - SSF_SET_BUTTON_STYLE (1)

Подфункция 2 - установить стандартные цвета окон.

Параметры:

  • eax = 48 - номер функции
  • ebx = 2 - номер подфункции
  • ecx = указатель на таблицу цветов
  • edx = размер таблицы цветов (должен быть 192 байта для будущей совместимости)
Формат таблицы цветов указан в описании подфункции 3.

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

  • функция не возвращает значения

Замечания:

  • После вызова описываемой функции следует перерисовать экран подфункцией 0.
  • Таблица стандартных цветов влияет только на приложения, которые эту таблицу явным образом получают (подфункцией 3) и используют (указывая цвета из неё при вызовах функций рисования).
  • Таблица стандартных цветов входит в скин и устанавливается заново при установке скина (подфункции 8).
  • Таблицу цветов можно просматривать/изменять интерактивно с помощью приложения desktop.

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

eax - SF_STYLE_SETTINGS (48)
ebx - SSF_SET_COLORS (2)

Подфункция 3 - получить стандартные цвета окон.

Параметры:

  • eax = 48 - номер функции
  • ebx = 3 - номер подфункции
  • ecx = указатель на буфер размером edx байт, куда будет записана таблица
  • edx = размер таблицы цветов (должен быть 192 байта для будущей совместимости)

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

  • функция не возвращает значения

Формат таблицы цветов: каждый элемент - dword-значение цвета 0x00RRGGBB

  • +0: dword: menu_body - цвет фона системного меню
  • +4: dword: 3d_face - цвет фона для придания 3D эффекта
  • +8: dword: 3d_dark - цвет темной обводки для придания 3D эффекта
  • +12: dword: 3d_light - цвет светлой обводки для придания 3D эффекта
  • +16: dword: win_title - цвет текста в заголовке окна приложения
  • +20: dword: win_body - цвет фона окна
  • +24: dword: btn_face - цвет активной кнопки
  • +28: dword: btn_text - цвет текста активной кнопки
  • +32: dword: win_text - цвет текста в рабочей области окна
  • +36: dword: panel_frame - цвет рамки области панели
  • +40: dword: win_face - цвет бордюра окна между внешней и внутренней рамкой
  • +44: dword: win_inface - цвет бордюра "неактивного" окна между внешней и внутренней рамкой
  • +48: dword: win_frame - цвет внешней рамки окна
  • +52: dword: win_inframe - цвет внешней рамки "неактивного" окна
  • +56: dword: win_border - цвет внутренней рамки окна
  • +60: dword: win_inborder - цвет внутренней рамки "неактивного" окна
  • +64: dword: win_graytext - цвет в оттенках серого в рабочей области окна.
  • +68: dword: menu_frame - цвет рамки системного меню
  • +72: dword: menu_text - цвет текста системного меню
  • +76: dword: panel_body - цвет фона области панели
  • +80: dword: panel_text - цвет текста области панели
  • +84: dword: hint_frame - цвет рамки всплывающей подсказки
  • +88: dword: hint_body - цвет фона всплывающей подсказки
  • +92: dword: hint_text - цвет текста всплывающей подсказки
  • +96: dword: btn_inface - цвет фона "неактивной" кнопки
  • +100: dword: btn_fcface - цвет фона кнопки при наведении курсора (focus)
  • +104: dword: btn_frame - цвет рамки кнопки
  • +108: dword: btn_inframe - цвет рамки "неактивной" кнопки
  • +112: dword: btn_fcframe - цвет рамки кнопки при наведении курсора (focus)
  • +116: dword: btn_intext - цвет текста "неактивной" кнопки
  • +120: dword: btn_fctext - цвет текста кнопки при наведении курсора (focus)
  • +124: dword: gui_shadow - цвет тени от любого текста
  • +128: dword: gui_face - цвет фона элемента (edit,listbox,checkbox...)
  • +132: dword: gui_inface - цвет фона "неактивного" элемента
  • +136: dword: gui_fcface - цвет фона элемента при наведении курсора
  • +140: dword: gui_frame - цвет рамки элемента
  • +144: dword: gui_inframe - цвет рамки "неактивного" элемента
  • +148: dword: gui_fcframe - цвет рамки элемента при наведении курсора
  • +152: dword: gui_text - цвет текста элемента
  • +156: dword: gui_intext - цвет текста "неактивного" элемента
  • +160: dword: gui_fctext - цвет текста элемента при наведении курсора
  • +164: dword: gui_select - цвет выделения текста
  • +168: dword: res_var_a - зарезервированно
  • +172: dword: res_var_b - зарезервированно
  • +176: dword: res_var_c - зарезервированно
  • +180: dword: res_var_d - зарезервированно
  • +184: dword: res_var_e - зарезервированно
  • +188: dword: res_var_f - зарезервированно

Замечания:

  • До ревизии #4788 скины использовали только первые 40 байт (причина разрозненности структуры таблицы - совместимость).
  • Структура таблицы цветов описана в стандартном включаемом файле macros.inc под названием system_colors; например, можно писать:
   	sc	sys_colors		; объявление переменной
   	...				; где-то надо вызвать
   					; описываемую функцию с ecx=sc
   	mov	ecx, [sc.win_text]	; читаем цвет текста
   					; в рабочей области окна
  • Использование/неиспользование этих цветов - дело исключительно самой программы. Для использования нужно просто при вызове функций рисования указывать цвет, взятый из этой таблицы.
  • При изменении таблицы стандартных цветов (подфункцией 2 с последующим применением изменений подфункцией 0 или при установке скина подфункцией 8) всем окнам посылается сообщение о необходимости перерисовки (событие с кодом 1).
  • Стандартные цвета можно просматривать/изменять интерактивно с помощью приложения desktop.

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

eax - SF_STYLE_SETTINGS (48)
ebx - SSF_GET_COLORS (3)

Подфункция 4 - получить высоту скина.

Параметры:

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

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

  • eax = высота скина

Замечания:

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

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

eax - SF_STYLE_SETTINGS (48)
ebx - SSF_GET_SKIN_HEIGHT (4)

Подфункция 5 - получить рабочую область экрана.

Параметры:

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

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

  • eax = [left]*65536 + [right]
  • ebx = [top]*65536 + [bottom]

Замечания:

  • Рабочая область экрана определяет положение и координаты максимизированного окна.
  • Рабочая область экрана при нормальной работе есть весь экран за вычетом панели (@taskbar).
  • (left,top) - координаты левого верхнего угла,
(right,bottom) - координаты правого нижнего.
Таким образом, размер рабочей области по оси x определяется формулой right-left+1, по оси y - формулой bottom-right+1.
  • Смотри также функцию 14, позволяющую определить размеры всего экрана.
  • Есть парная функция установки рабочей области - подфункция 6.

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

eax - SF_STYLE_SETTINGS (48)
ebx - SSF_GET_SCREEN_AREA (5)

Подфункция 6 - установить рабочую область экрана.

Параметры:

  • eax = 48 - номер функции
  • ebx = 6 - номер подфункции
  • ecx = [left]*65536 + [right]
  • edx = [top]*65536 + [bottom]

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

  • функция не возвращает значения

Замечания:

  • Рабочая область экрана определяет положение и координаты максимизированного окна.
  • Эта функция используется только приложением @taskbar, устанавливающим рабочей областью весь экран за вычетом панели.
  • (left,top) - координаты левого верхнего угла,
(right,bottom) - координаты правого нижнего.
Таким образом, размер рабочей области по оси x определяется формулой right-left+1, по оси y - формулой bottom-right+1.
  • Если left>=right, то x-координаты рабочей области не изменяются.
Если left<0, то left не устанавливается. Если right больше или равно ширины экрана, то right не устанавливается.
Аналогично по оси y.
  • Смотри также функцию 14, позволяющую определить размеры всего экрана.
  • Есть парная функция получения рабочей области - подфункция 5.
  • Эта функция автоматически перерисовывает экран, по ходу дела обновляет координаты и размеры максимизированных окон.
Все окна извещаются о необходимости перерисовки (событие 1).

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

eax - SF_STYLE_SETTINGS (48)
ebx - SSF_SET_SCREEN_AREA (6)

Подфункция 7 - получить область скина для текста заголовка.

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

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

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

  • eax = [left]*65536 + [right]
  • ebx = [top]*65536 + [bottom]

Замечания:

  • Использование/неиспользование этой функции - личное дело приложения.
  • Рекомендуется учитывать значения, возвращаемые этой функцией, при выборе места для рисования текста заголовка (функцией 4) или какого-нибудь заменителя текста заголовка (по усмотрению приложения).

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

eax - SF_STYLE_SETTINGS (48)
ebx - SSF_GET_SKIN_MARGINS (7)

Подфункция 8 - установить используемый скин окон.

Параметры:

  • eax = 48 - номер функции
  • ebx = 8 - номер подфункции
  • ecx = указатель на имя файла скина

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

  • eax = 0 - успешно
  • eax = 1 - не удалось загрузить файл
  • eax = 2 - файл не является файлом скина

Замечания:

  • При успешной загрузке скина все окна извещаются о необходимости перерисовки (событие 1).
  • При загрузке система считывает скин из файла default.skn на рамдиске.
  • Пользователь может изменять скин статически, создав свой default.skn, или динамически с помощью приложения desktop.

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

eax - SF_STYLE_SETTINGS (48)
ebx - SSF_SET_SKIN (8)

Подфункция 9 - получить настройку сглаживания шрифтов.

Параметры:

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

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

  • eax = 2 - субпиксельное, 1 - обычное, 0 - выключить

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

eax - SF_STYLE_SETTINGS (48)
ebx - SSF_GET_FONT_SMOOTH (9)

Подфункция 10 - настроить сглаживание шрифтов.

Параметры:

  • eax = 48 - номер функции
  • ebx = 10 - номер подфункции
  • cl = 2 - субпиксельное, 1 - обычное, 0 - выключить

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

eax - SF_STYLE_SETTINGS (48)
ebx - SSF_SET_FONT_SMOOTH (10)

Подфункция 11 - получить размер шрифтов.

Параметры:

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

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

  • eax = текущая высота шрифта в пикселях

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

eax - SF_STYLE_SETTINGS (48)
ebx - SSF_GET_FONT_SIZE (11)

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

Параметры:

  • eax = 48 - номер функции
  • ebx = 12 - номер подфункции
  • cl = новая высота шрифта в пикселях

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

eax - SF_STYLE_SETTINGS (48)
ebx - SSF_SET_FONT_SIZE (12)

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

Параметры:

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

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

  • eax = 0 - успешно
  • eax = 1 - не удалось загрузить файл
  • eax = 2 - файл не является файлом скина

Замечания:

  • При успешной загрузке скина все окна извещаются о необходимости перерисовки (событие 1).
  • При загрузке система считывает скин из файла default.skn на рамдиске.
  • Пользователь может изменять скин статически, создав свой default.skn, или динамически с помощью приложения desktop.