Board.KolibriOS.org

Official KolibriOS board
It is currently Sat Nov 23, 2019 3:02 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 10 posts ] 
Author Message
 Post subject: SysFn48.7:GetSkinMargins
PostPosted: Tue Oct 25, 2016 12:39 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Это может её нужно использовать для предотвращения проблем с текстом в заголовке окна?
http://websvn.kolibrios.org/filedetails.php?repname=Kolibri+OS&path=%2Fkernel%2Ftrunk%2Fdocs%2Fsysfuncs.txt#line-2315
Вот она что возвращает
Spoiler: Show
Image
Исходник
Spoiler: Show
Code:
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


Top
   
PostPosted: Tue Oct 25, 2016 1:03 pm 
Offline
Mentor/Kernel Developer
User avatar

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


Top
   
PostPosted: Tue Oct 25, 2016 1:06 pm 
Offline
Designer
User avatar

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

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


Top
   
PostPosted: Tue Oct 25, 2016 2:25 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
Ты ж менял скин, где ты его взял?


Top
   
PostPosted: Tue Oct 25, 2016 3:25 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
Leency wrote:
Я тоже никогда не знал о ней О_о
Возвращаемые значения странные (похоже неправильные причем все). Где они задаются?

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

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


Top
   
PostPosted: Fri Oct 20, 2017 2:25 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
#7102
Исправил SkinMargins.Right для текущего скина по умолчанию Shkvorka.
Теперь текст в заголовке не должен налезать на кнопки.


Top
   
PostPosted: Sat Oct 21, 2017 1:24 am 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5066
Ооо, вот это респект.

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


Top
   
PostPosted: Sat Oct 21, 2017 1:49 am 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
Действительно, кому-то стало не пофиг, редкий случай.


Top
   
PostPosted: Sat Oct 21, 2017 6:10 am 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Странно, что человек, который уже знал до этого, что нужно править, так и не поправил это.
Хотя это — секундное дело.


Top
   
PostPosted: Sat Oct 21, 2017 2:35 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5066
Я не знал, что это в скине настраивается.

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 10 posts ] 

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 4 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited