Difference between revisions of "Talk:SysFn00/ru"

From KolibriOS wiki
Jump to navigation Jump to search
m
m
 
(13 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{DISPLAYTITLE: Функция 0 — определить и нарисовать окно}}
+
__NOTOC__ {{DISPLAYTITLE: Функция 0 — определить и нарисовать окно}}
 
== Параметры ==
 
== Параметры ==
  
{| border="1" width="100%" id="table1" class="wikitable" style="font-size:88%;line-height:1.1em"
+
{| border="1" id="table1" class="wikitable sysfunc"
 +
|-
 +
!  class="header" | биты
 +
!  class="header" | тип
 +
class="header" | значение
 +
!  class="header" | описание
 
|-  
 
|-  
style="background:#ccccff;font-size:88%;padding:0" | биты
+
colspan="4" class="register" | eax
!  style="background:#ccccff;font-size:88%;padding:0" | тип
 
!  style="background:#ccccff;font-size:88%;padding:0" | значение
 
!  style="background:#ccccff;font-size:88%;padding:0" | описание
 
 
|-  
 
|-  
!  colspan="4" style="background:#e4e4ff" | eax
+
class="bits" | 0–31
|-
+
class="type" | [[DataTypes/ru#UInt32|uint32]]
align="right" | <tt>&nbsp;0..31</tt>
 
align="center" | [[DataTypes/ru#UInt32|uint32]]
 
 
|  0
 
|  0
 
|  Номер функции.
 
|  Номер функции.
 
|-  
 
|-  
!  colspan="4" style="background:#e4e4ff" | ebx
+
!  colspan="4" class="register" | ebx
 
|-  
 
|-  
align="right" | <tt>&nbsp;0..15</tt>
+
class="bits" | 0&ndash;15
align="center" | [[DataTypes/ru#UInt16|uint16]]
+
class="type" | [[DataTypes/ru#UInt16|uint16]]
 
|  ширина окна
 
|  ширина окна
 
|  rowspan="2" | Расположение окна относительно оси X.
 
|  rowspan="2" | Расположение окна относительно оси X.
 
|-  
 
|-  
align="right" | <tt>16..31</tt>
+
class="bits" | 16&ndash;31
align="center" | [[DataTypes/ru#Int16|int16]]
+
class="type" | [[DataTypes/ru#Int16|int16]]
 
|  позиция окна по X
 
|  позиция окна по X
 
|-  
 
|-  
!  colspan="4" style="background:#e4e4ff" | ecx
+
!  colspan="4" class="register" | ecx
 
|-  
 
|-  
align="right" | <tt>&nbsp;0..15</tt>
+
class="bits" | 0&ndash;15
align="center" | [[DataTypes/ru#UInt16|uint16]]
+
class="type" | [[DataTypes/ru#UInt16|uint16]]
 
|  высота окна
 
|  высота окна
 
|  rowspan="2" | Расположение окна относительно оси Y.
 
|  rowspan="2" | Расположение окна относительно оси Y.
 
|-  
 
|-  
align="right" | <tt>16..31</tt>
+
class="bits" | 16&ndash;31
align="center" | [[DataTypes/ru#Int16|int16]]
+
class="type" | [[DataTypes/ru#Int16|int16]]
 
|  позиция окна по Y
 
|  позиция окна по Y
 
|-  
 
|-  
!  colspan="4" style="background:#e4e4ff" | edx
+
!  colspan="4" class="register" | edx
 
|-  
 
|-  
align="right" | <tt>&nbsp;0..23</tt>
+
class="bits" | 0&ndash;23
align="center" | [[DataTypes/ru#RGB888|rgb888]]
+
class="type" | [[DataTypes/ru#RGB888|rgb888]]
 
|  цвет клиентской области
 
|  цвет клиентской области
 
|   
 
|   
 
|-  
 
|-  
align="right" | <tt>24..27</tt>
+
class="bits" | 24&ndash;27
align="center" | [[DataTypes/ru#UInt4|uint4]]
+
class="type" | [[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) зарезервированы, вызов функции с такими значениями игнорируется.
 
|-  
 
|-  
align="right" | <tt>28</tt>
+
class="bits" | 28
align="center" | [[DataTypes/ru#Bit|bit]]
+
class="type" | [[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>
+
class="bits" | 29
align="center" | [[DataTypes/ru#Bit|bit]]
+
class="type" | [[DataTypes/ru#Bit|bit]]
 
|  флаг: начало координат
 
|  флаг: начало координат
 
|  Начало координат совпадает с:
 
|  Начало координат совпадает с:
* 0 - левым верхним углом окна: 0 по горизонтали, 0 по вертикали;
+
* 0 &mdash; левым верхним углом окна: 0 по X, 0 по Y;
* 1 - левым верхним углом клиентской области: &lt;ширина рамки&gt; по горизонтали, &lt;высота заголовка&gt; по вертикали.
+
* 1 &mdash; левым верхним углом клиентской области: &lt;ширина рамки&gt; по X, &lt;высота заголовка&gt; по Y.
 
|-  
 
|-  
align="right" | <tt>30</tt>
+
class="bits" | 30
align="center" | [[DataTypes/ru#Bit|bit]]
+
class="type" | [[DataTypes/ru#Bit|bit]]
 
|  флаг: сплошной фон
 
|  флаг: сплошной фон
 
|  Клиентская область при отрисовке окна:
 
|  Клиентская область при отрисовке окна:
* 0 - заполняется;
+
* 0 &mdash; заполняется;
* 1 - не заполняется.
+
* 1 &mdash; не заполняется.
 
|-  
 
|-  
align="right" | <tt>31</tt>
+
class="bits" | 31
align="center" | [[DataTypes/ru#Bit|bit]]
+
class="type" | [[DataTypes/ru#Bit|bit]]
 
|  флаг: градиентный фон
 
|  флаг: градиентный фон
 
|  Клиентская область заполняется:
 
|  Клиентская область заполняется:
* 0 - сплошным цветом;
+
* 0 &mdash; сплошным цветом;
* 1 - градиентом от указанного цвета к чёрному.
+
* 1 &mdash; градиентом от указанного цвета к чёрному.
 
|-  
 
|-  
!  colspan="4" style="background:#e4e4ff" | esi
+
!  colspan="4" class="register" | esi
 
|-  
 
|-  
align="right" | <tt>&nbsp;0..23</tt>
+
class="bits" | 0&ndash;23
align="center" | [[DataTypes/ru#RGB888|rgb888]]
+
class="type" | [[DataTypes/ru#RGB888|rgb888]]
 
|  цвет заголовка окна
 
|  цвет заголовка окна
|  Только для окон типа I и II.
+
|  Только для окон типа I&ndash;II.
 
|-  
 
|-  
align="right" | <tt>24</tt>
+
class="bits" | 24
align="center" | [[DataTypes/ru#Bit|bit]]
+
class="type" | [[DataTypes/ru#Bit|bit]]
 
|  флаг: неперемещаемое окно
 
|  флаг: неперемещаемое окно
 
|
 
|
* 0 - окно может быть перемещено пользователем;
+
* 0 &mdash; окно может быть перемещено пользователем;
* 1 - окно не может быть перемещено пользователем.
+
* 1 &mdash; окно не может быть перемещено пользователем.
 
|-  
 
|-  
align="right" | <tt>25..27</tt>
+
class="bits" | 25&ndash;27
 
|   
 
|   
 
|  0
 
|  0
 
|  Зарезервированы.
 
|  Зарезервированы.
 
|-  
 
|-  
align="right" | <tt>28..31</tt>
+
class="bits" | 28&ndash;31
align="center" | [[DataTypes/ru#UInt4|uint4]]
+
class="type" | [[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" class="register" | edi
 
|-  
 
|-  
align="right" rowspan="2" | <tt>&nbsp;0..31</tt>
+
class="bits" rowspan="2" | 0&ndash;31
align="center" | [[DataTypes/ru#RGB888|rgb888]]
+
class="type" | [[DataTypes/ru#RGB888|rgb888]]
 
|  цвет рамки окна
 
|  цвет рамки окна
|  Только для окон типа I и II.
+
|  Только для окон типа I&ndash;II.
 
|-  
 
|-  
align="center" | [[DataTypes/ru#Pointer|pointer]]
+
class="type" | [[DataTypes/ru#C_String|char*]]
 
|  адрес строки заголовка
 
|  адрес строки заголовка
|  Только для окон типа III и IV при <b>edx</b><sub>28</sub> = 1.
+
|  Только для окон типа III&ndash;IV при '''edx'''<sub>28</sub> = 1.
 
|}
 
|}
  
Line 132: Line 132:
 
Функция не возвращает значения.
 
Функция не возвращает значения.
  
== Замечания ==
+
== Примеры ==
 +
 
 +
<source>
 +
        ;; без макросов
 +
 
 +
        ; номер функции: 0
 +
        xor    eax, eax
 +
        ; расположение окна: <смещение> * 65536 + <размер>
 +
        ; альтернативы: 100 shl 16 + 300, 0x0064012C
 +
        mov    ebx, 100 * 65536 + 300
 +
        mov    eсx, 200 * 65536 + 150
 +
        ; цвет фона: 0x0080ff (красный 0, зелёный 128, синий 255)
 +
        ; тип окна: III (со скином, изменяемых размеров)
 +
        ; флаги: есть текст заголовка, рисование относительно (0, 0), сплошная заливка фона без градиента
 +
        mov    edx, 0x130080ff
 +
        ; адрес строки заголовка
 +
        mov    edi, window_title
 +
        ; вызов функции
 +
        int    0x40
 +
 
 +
        ;; то же самое с использованием mcall
 +
 
 +
        mcall  0, <100, 300>, <200, 150>, 0x130080ff, , window_title
 +
 
 +
; ...
 +
window_title db 'Foobar', 0
 +
; ...
 +
</source>
 +
 
 +
== Примечания ==
  
* Положение и размеры окна устанавливаются при первом вызове этой функции и игнорируются при последующих; для изменения положения и/или размеров уже созданного окна используйте 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).