PDA

View Full Version : سوال: چاپ یک کاراکتر وقتی کاربر کلیک کرد



ali682344
پنج شنبه 20 آبان 1389, 21:47 عصر
سلام

من با استفاده از وقفه های موس می خوام وقتی کلید چپ فشار داده میشه یه کاراکتر رو چاپ کنم

من با این کدها انجام دادم ولی نتیجه ای نداشت؟
XOR AX,0
INT 33H

MOV AX,1
INT 33H

MOV AX,3
INT 33H
cmp bx,1
jnz aa
mov ah,2
mov dl,'a'
int 21h

aa:

یه سوال دیگه، اگر وقفه ماوس اجرا بشه سیستم عامل منتظر کلیک کردن میمونه؟:متفکر:
چون من دارم با کیبرد هم کار می کنم مثلا وقتی می خوام یه کلید از کیبرد رو با وقفه 16 بخونم
باید حتما یه کلید رو بزنم تا سایر عملیات انجام بشه.

در کل من چطوری می تونم یه کد بنویسم که هر وقت ماوس رو کلیک کردیم یه سری عملایت انجام بده و وقتی کلیدی از صفحه کلید (مثلا جهت) فشار داده بشه یه سری کار دیگه انجام بده

ممنون

tdkhakpur
شنبه 22 آبان 1389, 20:05 عصر
یه سوال دیگه، اگر وقفه ماوس اجرا بشه سیستم عامل منتظر کلیک کردن میمونه؟
نه باید خودتان کد کنید.


در کل من چطوری می تونم یه کد بنویسم که هر وقت ماوس رو کلیک کردیم یه سری عملایت انجام بده و وقتی کلیدی از صفحه کلید (مثلا جهت) فشار داده بشه یه سری کار دیگه انجام بده

تاپیک زیر رو مطالعه کنید.
http://barnamenevis.org/forum/showpost.php?p=1151414&postcount=3

ali682344
شنبه 22 آبان 1389, 22:20 عصر
دوست عزیز ممنون از پاسختون

میشه نحوه استفاده از وقفه 16h وتابع 2 رو برای کلید های جهت لطف بفرمائید

ممنون

tdkhakpur
یک شنبه 23 آبان 1389, 02:09 صبح
ماکروی ارسالی منتظر نمیماند و میتوانید داخل برنامه مقدار رو چک کنید اگر هیچ کلید فشار داده نشود مقدار 0 برگشت داده میشه و اگر کلید عادی باشد عدد خود کلید قید میشه و اگر کلید های توسعه یافته ای مانند جهت نماها باشه عدد استاندارد برای این نوع کلیدها به اضافه 1000 میشه مثلا عدد استاندارد برای جهت نمای بالا 80 هست و به اضافه 1000 میشه 1080 .


getkey macro key
local exit_, jmp1
mov key, 0
mov ah, 1
int 16h
jz exit_ ; if buffer is empty jz else jnz
mov ah, 0 ; wait for pressed one key.
int 16h
cmp al, 0
je jmp1
mov byte ptr key, al
jmp exit_
jmp1:
mov byte ptr key, ah
add key , 1000
jmp exit_
exit_:
endm
;---------------------------------------------------
putstr macro buffer ;print string
mov ah,09h
mov dx,offset buffer
int 21h
endm
;---------------------------------------------------
stacksg segment para stack 'stack'
stacksg ends
datasg segment para 'data'
text db ' press esc to exit', '$'
text1 db ' [cursor down ] ', '$'
text2 db ' [cursor up ] ', '$'
text3 db ' [cursor left ] ', '$'
text4 db ' [cursor right]', '$'
text5 db ' esc ', '$'
buff db 255 dup(?)
key dw ?
datasg ends
codes segment para 'code'
main proc far
assume ss:stacksg, ds:datasg, cs:codes
mov ax, datasg
mov ds, ax
;------------ ur programm
putstr text
again:
getkey key
cmp key, 1080 ;----------; cursor down
jne check1 ;
putstr text1 ;
check1: ;----------;
cmp key, 1072 ;----------; cursor up
jne check2 ;
putstr text2 ;
check2: ;----------;
cmp key, 1075 ;----------; cursor left
jne check3 ;
putstr text3 ;
check3: ;----------;
cmp key, 1077 ;----------; cursor right
jne check4 ;
putstr text4 ;
check4: ;----------;
cmp key, 27
je exit_
jmp again
exit_:
;------------ end of program
mov ax, 4c00h
int 21h
main endp
codes ends
end main