У меня есть небольшая процедура, которая должна проверить, был ли клик, и получить координаты клика. В первый раз это работает, но когда я звоню во второй раз, он даже не дает мне щелкнуть снова ... почему? что не так?
Я все перепробовал, поставил настройки мыши вне процедуры - никаких различий не произошло.
Кроме того, я попытался создать какую-то маленькую вещь, где вы нажимаете один раз, помещаете cx в si и снова вызываете sam click check, сравнивая si и новый cx, и он отличается (si равен 0 в начале, так что мусора нет), но на реальном экране я могу щелкнуть только один раз, прежде чем он перейдет к части сравнения.
IDEAL
MODEL small
STACK 100h
DATASEG
a11 db ?
a12 db ?
b1 db ?
a21 db ?
a22 db ?
b2 db ?
CODESEG
;---------------------------------------------------------
;find color from click of mouse
;---------------------------------------------------------
proc line ;vertical line
mov si,5d
mov bh,0h
startagain: ;;print another pixel
mov ah,0ch
int 10h
inc dx
dec si
cmp si,0
jnz startagain
ret
endp line
;---------------------------------------------------------
proc box1 ; make box 1/7-number 0
mov cx,8
mov dx,8
mov al,4
call line
mov di,10d
here:
;make a box
mov cx,8
mov dx,8
inc cx
call line
dec di
cmp di,0
jnz here
ret
endp box1
;---------------------------------------------------------
proc box2 ; make box 1/7-number 0
mov cx,20
mov dx,20
mov al,8
call line
mov di,10d
here1:
;make a box
mov cx,8
mov dx,8
inc cx
call line
dec di
cmp di,0
jnz here1
ret
endp box2
;---------------------------------------------------------
PROC LeftButtonClick
mov ax, 0000h ; reset mouse
int 33h
cmp ax,0FFFFh
jne NoMouse
mov ax, 0001h ; show mouse
int 33h
MouseLP: ; till cx= x of click & dx= y
mov ax, 0003h ; get mouse position and buttonstatus
int 33h
cmp bx, 1 ; check left mouse click
jne MouseLP ; Loop until mouse click
shr cx,1
dec dx
call findcolor
NoMouse:
ret
ENDP LeftButtonClick
;---------------------------------------------------------
proc findcolor
add dl,'0'
mov ah,02
int 21
ret
endp findcolor
;---------------------------------------------------------
start:
mov ax, @data
mov ds, ax
; Graphic mode
mov ax, 13h
int 10h
call box1
call box2
call LeftButtonClick
xor bx,bx
call LeftButtonClick
; Wait for key press
mov ah,00h
int 16h
; Return to text mode
mov ah, 0
mov al, 2
int 10h
exit:
mov ax, 4c00h
int 21h
END start
В основной программе мне нужно получить 6 различных щелчков по полям, отображаемым на экране, и по координатам каждого щелчка я нахожу цвет блока. Почему я могу щелкнуть только один раз на экране ???