SysFn48.7:GetSkinMargins
Posted: Tue Oct 25, 2016 12:39 pm
Это может её нужно использовать для предотвращения проблем с текстом в заголовке окна?
http://websvn.kolibrios.org/filedetails ... #line-2315
Вот она что возвращаетИсходник
Я, например, никогда не использовал её, а использовал только SysFn48.4:GetSkinHeight http://websvn.kolibrios.org/filedetails ... #line-2240
http://websvn.kolibrios.org/filedetails ... #line-2315
Вот она что возвращает
Spoiler:
Spoiler:
Code: Select all
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.