0,0 → 1,545 |
if lang eq ru |
MinRMenuW equ 18*6+10 |
else |
MinRMenuW equ 15*6+10 |
end if |
|
idbRRedrawFon equ 100 |
idbRAlign equ 101 |
idbRFixIcons equ 102 |
idbRAdd equ 103 |
idbRDel equ 104 |
idbRProp equ 105 |
|
;---- thread for rbutton ----------------------------------------------------------------------- |
RButtonWin: |
mcall 40,100101b ;SetMaskMessage 100101b |
|
stdcall GetNumIcon,[MouseX],[MouseY],-1 |
mov [SelIcon],eax |
|
cmp eax,-1 |
jne @f |
mov [RMenuH],16*4+3+3 |
mov [RMenuHsb],16*4+3+3 |
jmp .rbw1 |
@@: |
mov [RMenuH],16*5+3+3 |
mov [RMenuHsb],16*5+3+3 |
.rbw1: |
|
mov [NumUserButt],0 |
mov [RMenuW],0 |
mcall 70,fiIni |
mcall 68,12,dword[bufIni+32] |
mov [RBUser],eax |
stdcall [ini_enum_keys],IconIni,secRButt,GetUserBut |
|
|
RBWRedraw: |
mcall 12,1 ;RedrawWinBeg |
mov ebx,[MouseX] |
shl ebx,16 |
mov bx,[RMenuW] |
mov ecx,[MouseY] |
shl ecx,16 |
mov cx,[RMenuH] |
mov edx,0177CCFFh |
mov esi,01000000h |
xor eax,eax |
int 40h |
|
;----------- |
mov ecx,[NumUserButt] |
.DrawUB: |
push ecx |
|
mov eax,[NumUserButt] |
sub eax,ecx |
mov edx,eax ;button ID |
shl eax,4+16 ;*16*10000h |
mov ecx,eax |
mov cx,16 |
|
xor ebx,ebx |
mov bx,[RMenuW] |
mov esi,0888888h |
mcall 8 |
|
mov ebx,50000h |
shr ecx,16 |
mov bx,cx |
add bx,5 |
|
mov ecx,80000000h |
|
mov eax,[NumUserButt] |
sub eax,[esp] |
mov edx,[RBUser+eax*8] |
|
mcall 4 |
|
pop ecx |
loop .DrawUB |
|
;----------- |
xor ebx,ebx |
mov bx,[RMenuW] |
mov cx,[RMenuH] |
sub cx,[RMenuHsb] |
push ecx |
mov dx,cx |
shl ecx,16 |
mov cx,dx |
|
;¯¥à¢ ï à §¤¥«¨â¥«ì ï «¨¨ï |
mcall 38,,,0888888h |
add ecx,00010001h |
mcall ,,, |
|
;------------ |
mov ecx,[esp] |
add ecx,2 |
shl ecx,16 |
mov cx,16 |
|
mcall 8,,,idbRRedrawFon,0888888h ;3 ª®¯ª¨ ¢â®à®£® ¡«®ª |
add ecx,00100000h |
mcall ,,,idbRAlign |
add ecx,00100000h |
mcall ,,,idbRFixIcons |
|
mov ebx,50000h |
mov bx,word[esp] |
add bx,2+5 |
mcall 4,,80000000h,RMenuRedrawFon |
add ebx,16 |
mcall ,,,RMenuAlign |
|
add ebx,16 |
cmp [bFixIcons],0 |
jne @f |
mov edx,RMenuOffMoving |
jmp .RBWR1 |
@@: |
mov edx,RMenuOnMoving |
.RBWR1: |
mcall |
|
;------------ |
xor ebx,ebx ;¢â®à ï à §¤¥«¨â¥«ì ï «¨¨ï |
mov bx,[RMenuW] |
mov ecx,[esp] |
add ecx,16*3+2 |
mov dx,cx |
shl ecx,16 |
mov cx,dx |
mcall 38,,,0888888h |
add ecx,00010001h |
mcall ,,, |
;------------ |
;1 ¨«¨ 2 ª®¯ª¨ âà¥â쥣® ¡«®ª |
mov ecx,[esp] |
add ecx,16*3+4 |
shl ecx,16 |
mov cx,16 |
cmp dword[SelIcon],-1 |
je @f |
|
mcall 8,,,idbRDel,0888888h |
add ecx,00100000h |
mcall ,,,idbRProp,0888888h |
|
mov ebx,50000h |
mov bx,word[esp] |
add bx,16*3+4+5 |
mcall 4,,80000000h,RMenuDel |
add bx,16 |
mcall ,, ,RMenuProp |
|
jmp .endRM |
@@: |
|
mcall 8,,,idbRAdd,0888888h |
mov ebx,50000h |
mov bx,word[esp] |
add bx,16*3+4+5 |
mcall 4,,80000000h,RMenuAdd |
|
.endRM: |
|
pop ecx |
mcall 12,2 ;RedrawWinEnd |
|
mcall 9,RBProcInfo,-1 ;GetThreadInfo RBProcInfo,-1 |
mcall 18,21,dword[RBProcInfo+30] |
m2m dword[RBSlot],eax |
|
RBWMessages: |
mcall 10 ;WaitMessage |
dec eax |
jz RBWRedraw |
sub eax,2 |
jz RBWButton |
sub eax,3 |
jz RBWMouse |
jmp RBWMessages |
|
RBWButton: |
mcall 17 ;GetButtonPressed |
shr eax,8 |
cmp eax,idbRRedrawFon |
jz RBRedrawFon |
cmp eax,idbRAlign |
jz RBAlign |
cmp eax,idbRFixIcons |
jz RBFixIcons |
cmp eax,idbRAdd |
jz RBAdd |
cmp eax,idbRDel |
jz RBDelete |
cmp eax,idbRProp |
jz RBPropeties |
|
cmp eax,[NumUserButt] |
ja @f |
|
mov eax,[RBUser+eax*8+4] |
mov dword[fiRunProg+8],0 |
mov dword[fiRunProg+21],eax |
mcall 70,fiRunProg |
@@: |
jmp RBWExit |
|
RBWMouse: |
mcall 37,2 ;GetMouseKey |
test eax,111b |
jz RBWMessages |
mcall 37,0 ;GetMousePos |
xor ebx,ebx |
mov bx,ax ;y |
shr eax,16 ;x |
|
xor ecx,ecx |
mov cx,bx |
mov bx,ax |
|
mcall 34 |
cmp eax,[RBSlot] |
je RBWMessages |
|
RBWExit: |
mcall 68,13,[RBUser] |
mov [RButtonActiv],0 |
mcall -1 ;ExitProcess |
|
|
RBRedrawFon: |
mcall 15,3 |
jmp RBWExit |
|
RBAlign: |
call AlignIcons |
|
m2m [PIcoDB],[BegData] |
stdcall [ini_enum_sections],IconIni,Ini_SavePos |
|
mov dword[fiRunProg+8],WarningSave |
mov dword[fiRunProg+21],pthNotify |
mcall 70,fiRunProg |
mov [bNotSave],0 |
|
jmp RBRedrawFon |
|
RBFixIcons: |
xor dword[bFixIcons],1 |
|
cmp [bNotSave],0 |
je @f |
|
mov dword[fiRunProg+8],WarningSave |
mov dword[fiRunProg+21],pthNotify |
mcall 70,fiRunProg |
mov [bNotSave],0 |
|
@@: |
jmp RBWExit |
|
RBAdd: |
; mov [DlgAddActiv],1 |
mcall 51,1,DlgAdd,stack_dlg ;CreateThread DlgAdd,stack_dlg |
jmp RBWExit |
|
RBDelete: |
|
mov eax,[SelIcon] |
mov eax,[IconsOffs+eax*4] |
stdcall [ini_del_section],IconIni,eax |
|
stdcall DelIcon,[SelIcon] |
; mov dword[fiStdIco],2 |
; m2m dword[fInfo+12],dword[SizeData] |
; mcall 70,fInfo |
|
mov dword[fiRunProg+8],WarningSave |
mov dword[fiRunProg+21],pthNotify |
mcall 70,fiRunProg |
mov [bNotSave],0 |
|
jmp RBRedrawFon |
|
RBPropeties: |
; mov [DlgAddActiv],1 |
mcall 51,1,DlgProp,stack_dlg ;CreateThread DlgProp,stack_dlg |
jmp RBWExit |
|
|
|
proc AlignIcons |
local posX:WORD,\ |
posY:WORD,\ |
negatX:WORD,\ |
negatY:WORD |
|
xor ebx,ebx |
|
mov ecx,[MaxNumIcon] |
test ecx,ecx |
jnz .AlignIco |
ret |
.AlignIco: |
push ecx |
or ecx,-1 |
mov edi,dword[IconsOffs+ebx] |
xor eax,eax |
repne scasb |
repne scasb |
repne scasb |
repne scasb |
|
mov dword[negatX],0 |
|
;-------- ¯à¥®¡à §ã¥¬ ª®®à¤¨ âë ¢ ¯®«®¦¨â¥«ìë¥ |
mov ax,[edi+2] |
test ax,8000h |
jz @f |
neg ax |
mov word[negatX],1 |
@@: |
mov [posX],ax |
|
mov ax,[edi] |
test ax,8000h |
jz @f |
neg ax |
mov word[negatY],1 |
@@: |
mov [posY],ax |
|
;----- |
mov ax,[posY] |
mov dx,ALIGN_SIZE |
|
cmp ax,dx |
jb .AI0 |
@@: sub ax,dx |
cmp ax,dx |
jae @b |
.AI0: |
|
mov dx,ax |
cmp dx,ALIGN_SIZE/2 |
jb .AI1 |
|
mov ax,ALIGN_SIZE |
sub ax,dx |
add [posY],ax |
|
jmp .AI2 |
.AI1: |
sub [posY],dx |
.AI2: |
;----- |
mov ax,[posX] |
mov dx,ALIGN_SIZE |
|
cmp ax,dx |
jb .AI3 |
@@: sub ax,dx |
cmp ax,dx |
jae @b |
.AI3: |
|
mov dx,ax |
cmp dx,ALIGN_SIZE/2 |
jb .AI4 |
|
mov ax,ALIGN_SIZE |
sub ax,dx |
add [posX],ax |
|
jmp .AI5 |
.AI4: |
sub [posX],dx |
.AI5: |
|
;----- ¯à¥®¡à §®¢ ¨¥ § ¤ ¨ ¯®¯à ¢ª ¢ ®âà¨æ ⥫ìëå ª®®à¤¨ â |
mov ax,[posX] |
|
cmp [negatX],1 |
jne @f |
neg ax |
inc ax |
jmp .AI6 |
@@: |
|
mov dx,[ScreenX] |
shr dx,1 |
cmp ax,dx |
jbe .AI6 |
sub ax,[ScreenX] |
.AI6: |
mov word[edi+2],ax |
|
|
mov ax,[posY] |
cmp [negatY],1 |
jne @f |
neg ax |
inc ax |
jmp .AI7 |
@@: |
|
mov dx,[ScreenY] |
shr dx,1 |
cmp ax,dx |
jbe .AI7 |
sub ax,[ScreenY] |
.AI7: |
mov word[edi],ax |
|
;-------- |
|
|
|
pop ecx |
add ebx,4 |
dec ecx |
jnz .AlignIco |
; loop .AlignIco |
|
|
; mov dword[fInfo],2 |
; mcall 70,fInfo |
ret |
endp |
|
;------------------------------------------------------------------------------- |
proc GetUserBut stdcall,f_name,sec_name,key_name,key_value |
cmp [NumUserButt],16 |
jne @f |
ret |
@@: |
|
push ebx esi edi |
|
mov edi,[key_name] ;®¯à¥¤¥«ï¥¬ è¨à¨ã ¬¥î |
xor eax,eax |
or ecx,-1 |
repne scasb |
sub edi,[key_name] |
mov eax,edi |
shl eax,1 |
lea eax,[eax*2+eax+5*2] |
cmp ax,[RMenuW] |
jbe @f |
mov [RMenuW],ax |
@@: |
cmp [RMenuW],MinRMenuW |
jae @f |
mov [RMenuW],MinRMenuW |
@@: |
|
mov ebx,[NumUserButt] |
|
mov esi,[key_name] |
mov edi,[RBUser+ebx*8] |
@@: lodsb |
stosb |
test al,al |
jnz @b |
|
;debug_newline |
|
|
mov [RBUser+ebx*8+4],edi |
mov esi,[key_value] |
@@: lodsb |
stosb |
test al,al |
jnz @b |
|
mov [RBUser+ebx*8+8],edi |
|
inc [NumUserButt] |
add [RMenuH],16 |
|
pop edi esi ebx |
mov eax,1 |
ret |
endp |
|
proc Ini_SavePos stdcall,f_name,sec_name |
push ebx edi esi |
;int3 |
xor ebx,ebx |
.SearchSect: |
mov edi,[IconsOffs+ebx*4] |
mov esi,[sec_name] |
@@: |
lodsb |
scasb |
jne @f |
test al,al |
jnz @b |
|
jmp .IcoDataFound |
@@: |
|
inc ebx |
cmp ebx,[MaxNumIcon] |
jb .SearchSect |
|
mov eax,1 |
pop esi edi ebx |
ret |
|
.IcoDataFound: |
or ecx,-1 |
repne scasb |
repne scasb |
repne scasb |
|
movzx eax,word[edi+2] |
test eax,8000h |
jz @f |
or eax,0FFFF0000h |
@@: |
|
stdcall [ini_set_int],[f_name],[sec_name],keyX,eax |
|
movzx eax,word[edi] |
test eax,8000h |
jz @f |
or eax,0FFFF0000h |
@@: |
|
stdcall [ini_set_int],[f_name],[sec_name],keyY,eax |
|
mov eax,1 |
pop esi edi ebx |
ret |
endp |
|
|
|