Board.KolibriOS.org
http://board.kolibrios.org/

SysFn48.7:GetSkinMargins
http://board.kolibrios.org/viewtopic.php?f=2&t=3407
Страница 1 из 1

Автор:  0CodErr [ Вт окт 25, 2016 12:39 pm ]
Заголовок сообщения:  SysFn48.7:GetSkinMargins

Это может её нужно использовать для предотвращения проблем с текстом в заголовке окна?
http://websvn.kolibrios.org/filedetails.php?repname=Kolibri+OS&path=%2Fkernel%2Ftrunk%2Fdocs%2Fsysfuncs.txt#line-2315
Вот она что возвращает
Спойлер: Показать
Изображение
Исходник
Спойлер: Показать
Код:
Unit Unit1;
(* -------------------------------------------------------- *)
Interface
(* -------------------------------------------------------- *)
Type

  Dword = Cardinal;

  TRect = Packed Record
    Left:   Dword;
    Top:    Dword;
    Right:  Dword;
    Bottom: Dword;
  End;

Var
  hConsole: Pointer;
  ConsoleInit:       Procedure(WndWidth, WndHeight, ScrWidth, ScrHeight: Dword; Caption: PChar); StdCall;
  ConsoleExit:       Procedure(bCloseWindow: Cardinal); StdCall;
  printf:            Function(Const Format: PChar): Integer; CDecl VarArgs;
(* -------------------------------------------------------- *)
  Procedure Main; Forward;
  Procedure ThreadTerminate; Forward;
  Function  LoadLibrary(Path: PChar): Pointer; StdCall; Forward;
  Function  GetProcAddress(hLib: Pointer; ProcName: PChar): Pointer; StdCall; Forward;
  Function  GetSkinMargins: TRect; Forward;
(* -------------------------------------------------------- *)
Implementation
(* -------------------------------------------------------- *)
Procedure Main();
Var
   SkinMargins: TRect;
Begin

   hConsole          := LoadLibrary('/sys/lib/console.obj');
   ConsoleInit       := GetProcAddress(hConsole, 'con_init');
   ConsoleExit       := GetProcAddress(hConsole, 'con_exit');
   printf            := GetProcAddress(hConsole, 'con_printf');

   ConsoleInit($FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, 'Test');

   SkinMargins := GetSkinMargins();

   printf('SkinMargins.Left   = %d'#10, SkinMargins.Left);
   printf('SkinMargins.Right  = %d'#10, SkinMargins.Right);
   printf('SkinMargins.Top    = %d'#10, SkinMargins.Top);
   printf('SkinMargins.Bottom = %d'#10, SkinMargins.Bottom);

   ConsoleExit(0);
   ThreadTerminate;
End;
(* -------------------------------------------------------- *)
Function  GetSkinMargins: TRect;
Asm
        push   ebx
        push   edi
        mov    edi, eax
        mov    eax, 48
        mov    ebx, 7
        int    64
        movzx  edx, ax
        movzx  ecx, bx
        shr    eax, 16
        shr    ebx, 16
        mov    [edi].TRect.Left, eax
        mov    [edi].TRect.Right, edx
        mov    [edi].TRect.Top, ebx
        mov    [edi].TRect.Bottom, ecx
        pop    edi
        pop    ebx
End;
(* -------------------------------------------------------- *)
Procedure ThreadTerminate();
Asm
        mov    eax, $FFFFFFFF
        int    64
End;
(* -------------------------------------------------------- *)
Function GetProcAddress(hLib: Pointer; ProcName: PChar): Pointer;
Asm
        push   esi
        push   edi
        push   ebx
        mov    edx, hLib
        xor    eax, eax
        test   edx, edx
        jz     @end
        mov    edi, ProcName
        mov    ecx, $FFFFFFFF
        repne scasb
        mov    ebx, ecx
        not    ebx
@next:
        mov    esi, [edx]
        test   esi, esi
        jz     @end
        mov    ecx, ebx
        mov    edi, ProcName
        add    edx, 8
        repe cmpsb
        jne    @next
        mov    eax, [edx - 4]
@end:
        pop    ebx
        pop    edi
        pop    esi
End;
(* -------------------------------------------------------- *)
Function LoadLibrary(Path: PChar): Pointer;
Asm
        push   ebx
        mov    eax, 68
        mov    ebx, 19
        mov    ecx, Path
        int    64
        pop    ebx
End;
(* -------------------------------------------------------- *)
End.

Я, например, никогда не использовал её, а использовал только SysFn48.4:GetSkinHeight http://websvn.kolibrios.org/filedetails.php?repname=Kolibri+OS&path=%2Fkernel%2Ftrunk%2Fdocs%2Fsysfuncs.txt#line-2240

Автор:  Pathoswithin [ Вт окт 25, 2016 1:03 pm ]
Заголовок сообщения:  Re: SysFn48.7:GetSkinMargins

Я уже понял, что ошибка в текущем скине: SkinMargins.Right должен быть больше 43. Только где это редактировать?

Автор:  Leency [ Вт окт 25, 2016 1:06 pm ]
Заголовок сообщения:  Re: SysFn48.7:GetSkinMargins

Я тоже никогда не знал о ней О_о
Возвращаемые значения странные (похоже неправильные причем все). Где они задаются?

Автор:  Pathoswithin [ Вт окт 25, 2016 2:25 pm ]
Заголовок сообщения:  Re: SysFn48.7:GetSkinMargins

Ты ж менял скин, где ты его взял?

Автор:  CleverMouse [ Вт окт 25, 2016 3:25 pm ]
Заголовок сообщения:  Re: SysFn48.7:GetSkinMargins

Leency писал(а):
Я тоже никогда не знал о ней О_о
Возвращаемые значения странные (похоже неправильные причем все). Где они задаются?

В параметре margins макроса SKIN_PARAMS из исходника скина. Неожиданно, правда?

Автор:  0CodErr [ Пт окт 20, 2017 2:25 pm ]
Заголовок сообщения:  Re: SysFn48.7:GetSkinMargins

#7102
Исправил SkinMargins.Right для текущего скина по умолчанию Shkvorka.
Теперь текст в заголовке не должен налезать на кнопки.

Автор:  Leency [ Сб окт 21, 2017 1:24 am ]
Заголовок сообщения:  Re: SysFn48.7:GetSkinMargins

Ооо, вот это респект.

Автор:  Pathoswithin [ Сб окт 21, 2017 1:49 am ]
Заголовок сообщения:  Re: SysFn48.7:GetSkinMargins

Действительно, кому-то стало не пофиг, редкий случай.

Автор:  0CodErr [ Сб окт 21, 2017 6:10 am ]
Заголовок сообщения:  Re: SysFn48.7:GetSkinMargins

Странно, что человек, который уже знал до этого, что нужно править, так и не поправил это.
Хотя это — секундное дело.

Автор:  Leency [ Сб окт 21, 2017 2:35 pm ]
Заголовок сообщения:  Re: SysFn48.7:GetSkinMargins

Я не знал, что это в скине настраивается.

Страница 1 из 1 Часовой пояс: UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/