Talk:SysFn00/ru: Difference between revisions

From KolibriOS wiki
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
Line 11: Line 11:
!  colspan="4" style="background:#e4e4ff" | eax
!  colspan="4" style="background:#e4e4ff" | eax
|-  
|-  
|  align="right" | <tt>&nbsp;0..31</tt>
|  align="right" | <tt>&nbsp;0&ndash;31</tt>
|  align="center" | [[DataTypes/ru#UInt32|uint32]]
|  align="center" | [[DataTypes/ru#UInt32|uint32]]
|  0
|  0
Line 18: Line 18:
!  colspan="4" style="background:#e4e4ff" | ebx
!  colspan="4" style="background:#e4e4ff" | ebx
|-  
|-  
|  align="right" | <tt>&nbsp;0..15</tt>
|  align="right" | <tt>&nbsp;0&ndash;15</tt>
|  align="center" | [[DataTypes/ru#UInt16|uint16]]
|  align="center" | [[DataTypes/ru#UInt16|uint16]]
|  ширина окна
|  ширина окна
|  rowspan="2" | Расположение окна относительно оси X.
|  rowspan="2" | Расположение окна относительно оси X.
|-  
|-  
|  align="right" | <tt>16..31</tt>
|  align="right" | <tt>16&ndash;31</tt>
|  align="center" | [[DataTypes/ru#Int16|int16]]
|  align="center" | [[DataTypes/ru#Int16|int16]]
|  позиция окна по X
|  позиция окна по X
Line 29: Line 29:
!  colspan="4" style="background:#e4e4ff" | ecx
!  colspan="4" style="background:#e4e4ff" | ecx
|-  
|-  
|  align="right" | <tt>&nbsp;0..15</tt>
|  align="right" | <tt>&nbsp;0&ndash;15</tt>
|  align="center" | [[DataTypes/ru#UInt16|uint16]]
|  align="center" | [[DataTypes/ru#UInt16|uint16]]
|  высота окна
|  высота окна
|  rowspan="2" | Расположение окна относительно оси Y.
|  rowspan="2" | Расположение окна относительно оси Y.
|-  
|-  
|  align="right" | <tt>16..31</tt>
|  align="right" | <tt>16&ndash;31</tt>
|  align="center" | [[DataTypes/ru#Int16|int16]]
|  align="center" | [[DataTypes/ru#Int16|int16]]
|  позиция окна по Y
|  позиция окна по Y
Line 40: Line 40:
!  colspan="4" style="background:#e4e4ff" | edx
!  colspan="4" style="background:#e4e4ff" | edx
|-  
|-  
|  align="right" | <tt>&nbsp;0..23</tt>
|  align="right" | <tt>&nbsp;0&ndash;23</tt>
|  align="center" | [[DataTypes/ru#RGB888|rgb888]]
|  align="center" | [[DataTypes/ru#RGB888|rgb888]]
|  цвет клиентской области
|  цвет клиентской области
|   
|   
|-  
|-  
|  align="right" | <tt>24..27</tt>
|  align="right" | <tt>24&ndash;27</tt>
|  align="center" | [[DataTypes/ru#UInt4|uint4]]
|  align="center" | [[DataTypes/ru#UInt4|uint4]]
|  тип окна
|  тип окна
|
|
* 0 - тип окна I - окно фиксированных размеров;
* 0 &mdash; тип окна I &mdash; окно фиксированных размеров;
* 1 - только определить область окна, ничего не рисовать;
* 1 &mdash; только определить область окна, ничего не рисовать;
* 2 - тип окна II - окно изменяемых размеров;
* 2 &mdash; тип окна II &mdash; окно изменяемых размеров;
* 3 - тип окна III - окно со скином;
* 3 &mdash; тип окна III &mdash; окно со скином;
* 4 - тип окна IV - окно со скином фиксированных размеров.
* 4 &mdash; тип окна IV &mdash; окно со скином фиксированных размеров.
Остальные возможные значения (от 5 до 15) зарезервированы, вызов функции с такими значениями игнорируется.
Остальные возможные значения (от 5 до 15) зарезервированы, вызов функции с такими значениями игнорируется.
|-  
|-  
Line 59: Line 59:
|  align="center" | [[DataTypes/ru#Bit|bit]]
|  align="center" | [[DataTypes/ru#Bit|bit]]
|  флаг: текст заголовка
|  флаг: текст заголовка
|  Тип окна I-II: игнорируется.
|  Тип окна I&ndash;II: игнорируется.


Тип окна III-IV:
Тип окна III&ndash;IV:
* 0 - нет заголовка;
* 0 &mdash; нет заголовка;
* 1 - адрес строки заголовка задаётся в edi.
* 1 &mdash; адрес строки заголовка задаётся в edi.
|-  
|-  
|  align="right" | <tt>29</tt>
|  align="right" | <tt>29</tt>
Line 69: Line 69:
|  флаг: начало координат
|  флаг: начало координат
|  Начало координат совпадает с:
|  Начало координат совпадает с:
* 0 - левым верхним углом окна: 0 по горизонтали, 0 по вертикали;
* 0 &mdash; левым верхним углом окна: 0 по горизонтали, 0 по вертикали;
* 1 - левым верхним углом клиентской области: &lt;ширина рамки&gt; по горизонтали, &lt;высота заголовка&gt; по вертикали.
* 1 &mdash; левым верхним углом клиентской области: &lt;ширина рамки&gt; по горизонтали, &lt;высота заголовка&gt; по вертикали.
|-  
|-  
|  align="right" | <tt>30</tt>
|  align="right" | <tt>30</tt>
Line 76: Line 76:
|  флаг: сплошной фон
|  флаг: сплошной фон
|  Клиентская область при отрисовке окна:
|  Клиентская область при отрисовке окна:
* 0 - заполняется;
* 0 &mdash; заполняется;
* 1 - не заполняется.
* 1 &mdash; не заполняется.
|-  
|-  
|  align="right" | <tt>31</tt>
|  align="right" | <tt>31</tt>
Line 83: Line 83:
|  флаг: градиентный фон
|  флаг: градиентный фон
|  Клиентская область заполняется:
|  Клиентская область заполняется:
* 0 - сплошным цветом;
* 0 &mdash; сплошным цветом;
* 1 - градиентом от указанного цвета к чёрному.
* 1 &mdash; градиентом от указанного цвета к чёрному.
|-  
|-  
!  colspan="4" style="background:#e4e4ff" | esi
!  colspan="4" style="background:#e4e4ff" | esi
|-  
|-  
|  align="right" | <tt>&nbsp;0..23</tt>
|  align="right" | <tt>&nbsp;0&ndash;23</tt>
|  align="center" | [[DataTypes/ru#RGB888|rgb888]]
|  align="center" | [[DataTypes/ru#RGB888|rgb888]]
|  цвет заголовка окна
|  цвет заголовка окна
|  Только для окон типа I и II.
|  Только для окон типа I&ndash;II.
|-  
|-  
|  align="right" | <tt>24</tt>
|  align="right" | <tt>24</tt>
Line 97: Line 97:
|  флаг: неперемещаемое окно
|  флаг: неперемещаемое окно
|
|
* 0 - окно может быть перемещено пользователем;
* 0 &mdash; окно может быть перемещено пользователем;
* 1 - окно не может быть перемещено пользователем.
* 1 &mdash; окно не может быть перемещено пользователем.
|-  
|-  
|  align="right" | <tt>25..27</tt>
|  align="right" | <tt>25&ndash;27</tt>
|   
|   
|  0
|  0
|  Зарезервированы.
|  Зарезервированы.
|-  
|-  
|  align="right" | <tt>28..31</tt>
|  align="right" | <tt>28&ndash;31</tt>
|  align="center" | [[DataTypes/ru#UInt4|uint4]]
|  align="center" | [[DataTypes/ru#UInt4|uint4]]
|  стиль заголовка окна
|  стиль заголовка окна
|  Тип окна I-II:
|  Тип окна I&ndash;II:
* 0 - нет градиента;
* 0 &mdash; нет градиента;
* 4 - негативный градиент;
* 4 &mdash; негативный градиент;
* 8 - обычный градиент.
* 8 &mdash; обычный градиент.
Другие значения зарезервированы.
Другие значения зарезервированы.


Тип окна III-IV: игнорируется.
Тип окна III&ndash;IV: игнорируется.
|-  
|-  
!  colspan="4" style="background:#e4e4ff" | edi
!  colspan="4" style="background:#e4e4ff" | edi
|-  
|-  
|  align="right" rowspan="2" | <tt>&nbsp;0..31</tt>
|  align="right" rowspan="2" | <tt>&nbsp;0&ndash;31</tt>
|  align="center" | [[DataTypes/ru#RGB888|rgb888]]
|  align="center" | [[DataTypes/ru#RGB888|rgb888]]
|  цвет рамки окна
|  цвет рамки окна
|  Только для окон типа I и II.
|  Только для окон типа I&ndash;II.
|-  
|-  
|  align="center" | [[DataTypes/ru#Pointer|pointer]]
|  align="center" | [[DataTypes/ru#Pointer|pointer]]
|  адрес строки заголовка
|  адрес строки заголовка
|  Только для окон типа III и IV при <b>edx</b><sub>28</sub> = 1.
|  Только для окон типа III&ndash;IV при <b>edx</b><sub>28</sub> = 1.
|}
|}


Line 134: Line 134:
== Замечания ==
== Замечания ==


* Положение и размеры окна устанавливаются при первом вызове этой функции и игнорируются при последующих; для изменения положения и/или размеров уже созданного окна используйте 67-ю функцию.
Положение и размеры окна устанавливаются при первом вызове этой функции и игнорируются при последующих; для изменения положения и/или размеров уже созданного окна используйте 67-ю функцию.
* Для окон стилей Y=3,4 с заголовком (A=1) строка заголовка устанавливается при первом вызове этой функции и игнорируется при последующих (точнее говоря, игнорируется после вызова подфункции 2 функции 12 - конца перерисовки); для изменения строки заголовка уже созданного окна используйте подфункцию 1 функции 71.
* Если использовать окна соответствующих стилей, то положение и/или размеры окна могут меняться пользователем. Текущие положение и размеры могут быть получены вызовом функции 9.
* Окно должно умещаться на экране. Если переданные координаты и размеры не удовлетворяют этому условию, то соответствующая координата (или, возможно, обе) считается нулем, а если и это не помогает, то соответствующий размер (или, возможно, оба) устанавливается в размер экрана.


  Далее обозначим xpos,ypos,xsize,ysize - значения, передаваемые в ebx,ecx.  
Для окон типа III&ndash;IV с заголовком ('''edx'''<sub>28</sub> = 1) строка заголовка устанавливается при первом вызове этой функции и игнорируется при последующих (точнее говоря, игнорируется после вызова [[SysFn12/ru|функции 12.2]] &mdash; конца перерисовки); для изменения строки заголовка уже созданного окна используйте [[SysFn71/ru|функцию 71.1]].
  Координаты приводятся относительно левого верхнего угла окна, который, таким образом, задается как (0,0),  
 
  координаты правого нижнего угла суть (xsize,ysize).
Если использовать окна соответствующих стилей, то положение и/или размеры окна могут меняться пользователем. Текущие положение и размеры могут быть получены вызовом [[SysFn09/ru|функции 9]].
 
Окно должно умещаться на экране. Если переданные координаты и размеры не удовлетворяют этому условию, то соответствующая координата (или, возможно, обе) считается нулем, а если и это не помогает, то соответствующий размер (или, возможно, оба) устанавливается в размер экрана.
 
  Далее обозначим xpos, ypos, xsize, ysize - значения, передаваемые в ebx, ecx.  
  Координаты приводятся относительно левого верхнего угла окна, который, таким образом, задается как (0, 0),  
  координаты правого нижнего угла суть (xsize, ysize).
 
Размеры окна понимаются в смысле координат правого нижнего угла.


* Размеры окна понимаются в смысле координат правого нижнего угла.
  Это же относится и ко всем остальным функциям.
  Это же относится и ко всем остальным функциям.
  Это означает, что реальные размеры на 1 пиксель больше.
  Это означает, что реальные размеры на 1 пиксель больше.
Line 149: Line 153:
=== Вид окна типа I ===
=== Вид окна типа I ===


* рисуется внешняя рамка цвета, указанного в edi,шириной 1 пиксель
* рисуется внешняя рамка цвета, указанного в '''edi''', шириной 1 пиксель
* рисуется заголовок - прямоугольник с левым верхним углом (1,1)и правым нижним (xsize-1,min(25,ysize)) цвета, указанного в esi (с учетом градиента)
* рисуется заголовок &mdash; прямоугольник с левым верхним углом (1, 1) и правым нижним ('''xsize''' &minus; 1, min(25, '''ysize''')) цвета, указанного в '''esi''' (с учетом градиента)
* если ysize>=26, то закрашивается рабочая область окна - прямоугольник с левым верхним углом (1,21) и правым нижним (xsize-1,ysize-1) (размерами (xsize-1)*(ysize-21)) - цветом, указанным в edx (с учетом градиента)
* если '''ysize''' &ge; 26, то закрашивается рабочая область окна &mdash; прямоугольник с левым верхним углом (1, 21) и правым нижним ('''xsize''' &minus; 1, '''ysize''' &minus; 1) (размерами ('''xsize''' &minus; 1) &times; ('''ysize''' &minus; 21)) &mdash; цветом, указанным в '''edx''' (с учетом градиента)
* если A=1 и строка заголовка установлена подфункцией 1 функции 71, то она выводится в соответствующем месте заголовка
* если '''edx'''<sub>28</sub> = 1 и строка заголовка установлена [[SysFn71/ru|функцией 71.1]], то она выводится в соответствующем месте заголовка


=== Вид окна типа II ===
=== Вид окна типа II ===
* рисуется внешняя рамка шириной 1 пиксель "затенённого" цвета edi (все составляющие цвета уменьшаются в два раза)
 
* рисуется промежуточная рамка шириной 3 пикселя цвета edi
* рисуется внешняя рамка шириной 1 пиксель "затенённого" цвета '''edi''' (все составляющие цвета уменьшаются в два раза)
* рисуется внутренняя рамка шириной 1 пиксель "затенённого" цвета edi
* рисуется промежуточная рамка шириной 3 пикселя цвета '''edi'''
* рисуется заголовок - прямоугольник с левым верхним углом (4,4) и правым нижним (xsize-4,min(20,ysize)) цвета, указанного в esi (с учетом градиента)
* рисуется внутренняя рамка шириной 1 пиксель "затенённого" цвета '''edi'''
* если ysize>=26, то закрашивается рабочая область окна - прямоугольник с левым верхним углом (5,20) и правым нижним (xsize-5,ysize-5) - цветом, указанным в edx (с учетом градиента)
* рисуется заголовок &mdash; прямоугольник с левым верхним углом (4, 4) и правым нижним ('''xsize''' &minus; 4, min(20, '''ysize''')) цвета, указанного в '''esi''' (с учетом градиента)
* если A=1 и строка заголовка установлена подфункцией 1 функции 71, то она выводится в соответствующем месте заголовка
* если '''ysize''' &ge; 26, то закрашивается рабочая область окна &mdash; прямоугольник с левым верхним углом (5, 20) и правым нижним ('''xsize''' &minus; 5, '''ysize''' &minus; 5) &mdash; цветом, указанным в '''edx''' (с учетом градиента)
* если '''edx'''<sub>28</sub> = 1 и строка заголовка установлена [[SysFn71/ru|функцией 71.1]], то она выводится в соответствующем месте заголовка


=== Вид окна со скином (типа III и IV) ===
=== Вид окна со скином (типа III и IV) ===
* рисуется внешняя рамка шириной 1 пиксель цвета 'outer' из скина
* рисуется внешняя рамка шириной 1 пиксель цвета 'outer' из скина
* рисуется промежуточная рамка шириной 3 пикселя цвета 'frame' из скина
* рисуется промежуточная рамка шириной 3 пикселя цвета 'frame' из скина
* рисуется внутренняя рамка шириной 1 пиксель цвета 'inner' из скина
* рисуется внутренняя рамка шириной 1 пиксель цвета 'inner' из скина
* рисуется заголовок (по картинкам из скина) в прямоугольнике (0,0) - (xsize,_skinh-1)
* рисуется заголовок (по картинкам из скина) в прямоугольнике (0, 0) &ndash; ('''xsize''', _skinh &minus; 1)
* если ysize>=26, то закрашивается рабочая область окна - прямоугольник с левым верхним углом (5,_skinh) и правым нижним (xsize-5,ysize-5) - цветом, указанным в edx (с учетом градиента)
* если '''ysize''' &ge; 26, то закрашивается рабочая область окна &mdash; прямоугольник с левым верхним углом (5, _skinh) и правым нижним ('''xsize''' &minus; 5, '''ysize''' &minus; 5) &mdash; цветом, указанным в '''edx''' (с учетом градиента)
* определяются две стандартные кнопки: закрытия и минимизации (смотри функцию 8)
* определяются две стандартные кнопки: закрытия и минимизации (смотри [[SysFn08/ru|функцию 8]])
* если A=1 и в edi (ненулевой) указатель на строку заголовка, то она выводится в заголовке в месте, определяемом скином
* если '''edx'''<sub>28</sub> = 1 и в '''edi''' (ненулевой) указатель на строку заголовка, то она выводится в заголовке в месте, определяемом скином
* Значение переменной _skinh доступно как результат вызова подфункции 4 функции 48
 
Значение переменной _skinh доступно как результат вызова [[SysFn48/ru|функции 48.4]]

Revision as of 07:09, 4 April 2010

Параметры

биты тип значение описание
eax
 0–31 uint32 0 Номер функции.
ebx
 0–15 uint16 ширина окна Расположение окна относительно оси X.
16–31 int16 позиция окна по X
ecx
 0–15 uint16 высота окна Расположение окна относительно оси Y.
16–31 int16 позиция окна по Y
edx
 0–23 rgb888 цвет клиентской области
24–27 uint4 тип окна
  • 0 — тип окна I — окно фиксированных размеров;
  • 1 — только определить область окна, ничего не рисовать;
  • 2 — тип окна II — окно изменяемых размеров;
  • 3 — тип окна III — окно со скином;
  • 4 — тип окна IV — окно со скином фиксированных размеров.

Остальные возможные значения (от 5 до 15) зарезервированы, вызов функции с такими значениями игнорируется.

28 bit флаг: текст заголовка Тип окна I–II: игнорируется.

Тип окна III–IV:

  • 0 — нет заголовка;
  • 1 — адрес строки заголовка задаётся в edi.
29 bit флаг: начало координат Начало координат совпадает с:
  • 0 — левым верхним углом окна: 0 по горизонтали, 0 по вертикали;
  • 1 — левым верхним углом клиентской области: <ширина рамки> по горизонтали, <высота заголовка> по вертикали.
30 bit флаг: сплошной фон Клиентская область при отрисовке окна:
  • 0 — заполняется;
  • 1 — не заполняется.
31 bit флаг: градиентный фон Клиентская область заполняется:
  • 0 — сплошным цветом;
  • 1 — градиентом от указанного цвета к чёрному.
esi
 0–23 rgb888 цвет заголовка окна Только для окон типа I–II.
24 bit флаг: неперемещаемое окно
  • 0 — окно может быть перемещено пользователем;
  • 1 — окно не может быть перемещено пользователем.
25–27 0 Зарезервированы.
28–31 uint4 стиль заголовка окна Тип окна I–II:
  • 0 — нет градиента;
  • 4 — негативный градиент;
  • 8 — обычный градиент.

Другие значения зарезервированы.

Тип окна III–IV: игнорируется.

edi
 0–31 rgb888 цвет рамки окна Только для окон типа I–II.
pointer адрес строки заголовка Только для окон типа III–IV при edx28 = 1.

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

Функция не возвращает значения.

Замечания

Положение и размеры окна устанавливаются при первом вызове этой функции и игнорируются при последующих; для изменения положения и/или размеров уже созданного окна используйте 67-ю функцию.

Для окон типа III–IV с заголовком (edx28 = 1) строка заголовка устанавливается при первом вызове этой функции и игнорируется при последующих (точнее говоря, игнорируется после вызова функции 12.2 — конца перерисовки); для изменения строки заголовка уже созданного окна используйте функцию 71.1.

Если использовать окна соответствующих стилей, то положение и/или размеры окна могут меняться пользователем. Текущие положение и размеры могут быть получены вызовом функции 9.

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

Далее обозначим xpos, ypos, xsize, ysize - значения, передаваемые в ebx, ecx. 
Координаты приводятся относительно левого верхнего угла окна, который, таким образом, задается как (0, 0), 
координаты правого нижнего угла суть (xsize, ysize).

Размеры окна понимаются в смысле координат правого нижнего угла.

Это же относится и ко всем остальным функциям.
Это означает, что реальные размеры на 1 пиксель больше.

Вид окна типа I

  • рисуется внешняя рамка цвета, указанного в edi, шириной 1 пиксель
  • рисуется заголовок — прямоугольник с левым верхним углом (1, 1) и правым нижним (xsize − 1, min(25, ysize)) цвета, указанного в esi (с учетом градиента)
  • если ysize ≥ 26, то закрашивается рабочая область окна — прямоугольник с левым верхним углом (1, 21) и правым нижним (xsize − 1, ysize − 1) (размерами (xsize − 1) × (ysize − 21)) — цветом, указанным в edx (с учетом градиента)
  • если edx28 = 1 и строка заголовка установлена функцией 71.1, то она выводится в соответствующем месте заголовка

Вид окна типа II

  • рисуется внешняя рамка шириной 1 пиксель "затенённого" цвета edi (все составляющие цвета уменьшаются в два раза)
  • рисуется промежуточная рамка шириной 3 пикселя цвета edi
  • рисуется внутренняя рамка шириной 1 пиксель "затенённого" цвета edi
  • рисуется заголовок — прямоугольник с левым верхним углом (4, 4) и правым нижним (xsize − 4, min(20, ysize)) цвета, указанного в esi (с учетом градиента)
  • если ysize ≥ 26, то закрашивается рабочая область окна — прямоугольник с левым верхним углом (5, 20) и правым нижним (xsize − 5, ysize − 5) — цветом, указанным в edx (с учетом градиента)
  • если edx28 = 1 и строка заголовка установлена функцией 71.1, то она выводится в соответствующем месте заголовка

Вид окна со скином (типа III и IV)

  • рисуется внешняя рамка шириной 1 пиксель цвета 'outer' из скина
  • рисуется промежуточная рамка шириной 3 пикселя цвета 'frame' из скина
  • рисуется внутренняя рамка шириной 1 пиксель цвета 'inner' из скина
  • рисуется заголовок (по картинкам из скина) в прямоугольнике (0, 0) – (xsize, _skinh − 1)
  • если ysize ≥ 26, то закрашивается рабочая область окна — прямоугольник с левым верхним углом (5, _skinh) и правым нижним (xsize − 5, ysize − 5) — цветом, указанным в edx (с учетом градиента)
  • определяются две стандартные кнопки: закрытия и минимизации (смотри функцию 8)
  • если edx28 = 1 и в edi (ненулевой) указатель на строку заголовка, то она выводится в заголовке в месте, определяемом скином

Значение переменной _skinh доступно как результат вызова функции 48.4