Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Чт мар 30, 2017 7:42 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 5 сообщений ] 
Автор Сообщение
 Заголовок сообщения: SysFn48.7:GetSkinMargins
СообщениеДобавлено: Вт окт 25, 2016 12:39 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 905
Это может её нужно использовать для предотвращения проблем с текстом в заголовке окна?
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


Вернуться к началу
 Заголовок сообщения: Re: SysFn48.7:GetSkinMargins
СообщениеДобавлено: Вт окт 25, 2016 1:03 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1113
Я уже понял, что ошибка в текущем скине: SkinMargins.Right должен быть больше 43. Только где это редактировать?


Вернуться к началу
 Заголовок сообщения: Re: SysFn48.7:GetSkinMargins
СообщениеДобавлено: Вт окт 25, 2016 1:06 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4078
Я тоже никогда не знал о ней О_о
Возвращаемые значения странные (похоже неправильные причем все). Где они задаются?

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: SysFn48.7:GetSkinMargins
СообщениеДобавлено: Вт окт 25, 2016 2:25 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1113
Ты ж менял скин, где ты его взял?


Вернуться к началу
 Заголовок сообщения: Re: SysFn48.7:GetSkinMargins
СообщениеДобавлено: Вт окт 25, 2016 3:25 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1591
Leency писал(а):
Я тоже никогда не знал о ней О_о
Возвращаемые значения странные (похоже неправильные причем все). Где они задаются?

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

_________________
Сделаем мир лучше!


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 5 сообщений ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB