Daneshjo: انجمنهای گفتگو

Daneshjo :: مشاهده موضوع - بر نامه نویسی موس در توربوc
پرسشهای متداول
پرسشهای متداول
جستجو
جستجو
لیست اعضا
لیست اعضا
گروههای کاربران
گروههای کاربران
مدیران سایت
مدیران سایت
درجات
درجات
مشخصات فردی
مشخصات فردی
ورود
ورود
پیامهای خصوصی
پیامهای خصوصی
فهرست Daneshjo » برنامه نویسی C و نسخه های بالاتر

ارسال موضوع جدید   پاسخ دادن به این موضوع   تشکر کردن از تاپیک
بر نامه نویسی موس در توربوc
مشاهده موضوع قبلی :: مشاهده موضوع بعدی  
نویسنده پیام
Mnasiri
کاربر جدید
کاربر جدید


عضو شده در: 20 مهر 1384
پست: 4
محل سکونت: تهران

اعتبار: 2

پستتاریخ: جمعه 23 دی 1384 - 20:01    عنوان:  بر نامه نویسی موس در توربوc پاسخگویی به این موضوع بهمراه نقل قول

با توجه به اين كه برنامه هاي تحت داس رابط ضعيفي نسبت به ويندوز و لينوكس و... دارند ما حداقل بايد برنامه هايمان را به ماوس مجهز كنيم تا اين نقص تا حدودي برطرف شود. مخصوصا اگر بخواهيم يك برنامه گرافيكي بنويسيم برنامه مان بدون ماوس غير قابل استفاده خواهد بود. خب بهتره بريم سر اصل مطلب. در اين مقاله فعال كردن ماوس در زبان C توضيح داده شده. البته ما ماوس را با استفاده از وقفه ها كه در تمام كامپيوترهاي IBM يكي هستند فعال مي كنيم و كدهاي ارائه شده با كمي تغيير در پاسكال و بيسيك نيز كار خواهند كرد. اگر شما با زبان C آشنايي نداريد ممكن است اين كدها برايتان ناآشنا باشند. پس بهتر است از خواندن اين مقاله صرفنظر كنيد. ابتدا براي اين كه از ماوس استفاده كنيم بايد بفهميم كه درايور ماوس نصب شده يا نه؟ اگر نصب نشده باشد نمي توان ماوس را فعال كرد. براي اين كار از تابع شماره 00hex از وقفه 33hex استفاده مي كنيم. اگر قبلا با وقفه ها كار كرده باشيد حتما مي دانيد كه شماره تابع وقفه در ثبات AH قرار مي گيرد ولي توابع 33hex به جاي AH از AX استفاده مي كنند. يعني براي فراخواني اين وقفه شماره تابع آن را در ثبات AX قرار مي دهيم. پس از فراخواني اين وقفه اگر مقدار ثبات AX برابر 0000hex باشد يعني درايور ماوس نصب نشده و ما نميتوانيم از ماوس استفاده كنيم. پس از اين كار بايد نشانگر ماوس را د ر صفحه ظاهر كنيم. نشانگر ماوس دقيقا در وسط صفحه ظاهر خواهد شد. اگر در حالت متني باشيم اين نشانگر به صورت يك مستطيل و اگر در حالت گرافيكي باشيم نشانگر به صورت يك فلش كوچك نشان داده خواهد شد. براي ظاهر كردن كافي است از تابع شماره 01 وقفه 33h استفاده كنيم. برنامه زير هم درايور ماوس را تشخيص داده و هم آن را در حالت متني نشان ميدهد:

[Automated by GetSmile]

1:

#include <STDIO.H>
#include <CONIO.H>
#include <STDLIB.H>
#include <DOS.H>
void main()
{ union REGS r;
clrscr();
r.x.ax= 0;
int86(0x33,&r,&r);
if(r.x.ax==0)
{
printf("No Mouse Available.....");
getch();
exit(1);
}
r.x.ax=1;//place 01 in AX register
int86(0x33,&r,&r);//showing the mouse pointer
printf(“press any key to exit…”);
getch();
}



تابع مفيد ديگري براي كار با ماوس تابع 02 از وقفه 33hex ميباشد. اين تابع نشانگر ماوس را پنهان مي كند. فرض كنيد مي خواهيد مانند برنامه Paint وقتي ماوس را ميكشيد يك خط هم با آن كشيده شود. در اين حالت اگر نشانگر ماوس ديده شود بعضي از نقاط خط پاك خواهند شد و بهتر است كه در اين مواقع نشانگر را پنهان كنيم. بعدا مثال كاملتري برايتان خواهم نوشت. براي كار با ماوس ما بايد بدانيم كه نشانگر اكنون د ركجاي صفحه مي باشد يعني مختصات (x,y) آن را بدست آوريم. براي اين كار از تابع شماره 03 استفاده مي كنيم. كه پس از فراخواني تابع ثبات CX حاوي مختصات افقي(x) و DX حاوي مختصات عمودي نشانگر خواهد بود. كار مهم ديگر تشخيص كليدهاي فشرده شده ماوس است. تابع 03 همچنين تعيين مي كند كه كدام كليد از ماوس فشرده شده است. اين كليدها را ثبات BX تعيين ميكند. فقط همين كافي است كه بدانيد پس از فراخواني وقفه اگر BX برابر با 00000001)Hex (باشد كليد چپ ماوس فشار داده شده است. راجع به فشار دادن كليدهاي ديگر اگر علاقه مند بوديد به من ايميل بزنيد تا نحوه تشخيص آنها را هم بنويسم. مثال زير نحوه كار را مشخص مي كند:< /P>< /P>


2:


#include <STDIO.H>
#include <CONIO.H>
#include <STDLIB.H>
#include <DOS.H>
void main() {
union REGS i,o;
clrscr();
i.x.ax=0;
int86(0x33,&i,&o);
if(o.x.ax==0) {
printf("No Mouse Available...");
exit(1);
}
i.x.ax=1;
int86(0x33,&i,&o);
gotoxy(25,23);
printf("Press any key to exit...");
while(!kbhit())
{
i.x.ax=3;
int86(0x33,&i,&o);
gotoxy(2,2);
printf("x->co-ordinate=(%d) \n y->co-ordinate=(%d) ",o.x.cx,o.x.dx);
if(o.x.bx==0x01) printf(“Right button of mouse pressed.”); }
i.x.ax=2; int86(0x33,&i,&o);
}


براي پايان كار مي خواهيم يك برنامه كه ابزار pencil برنامه هاي گرافيكي را شبيه سازي مي كند بنويسيم. براي اين كار ما ابتداصفحه را درحالت گرافيكي قرار مي دهيم براي اين كهبرنامه زير كار كند در دستور initgraph(&gd,&gm,""); در داخل كوتيشن مسيرفايلهاي .bgi را بنويسيد.




3:


#include <CONIO.H>
#include <STDIO.H>
#include <STDLIB.H>
#include <GRAPHICS.H>
#include <DOS.H>
union REGS i,o;
main() {
int show_mouse();
int hide_mouse();
int get_mouse_pos(int *,int *,int *);
int gd=DETECT,gm,button,x1,y1,x2,y2;
initgraph(&gd,&gm,"");
i.x.ax=0; int86(0x33,&i,&o);
if(o.x.ax==0)
{ printf("No Mouse is available..");
exit(1);
restorecrtmode();
}
outtextxy(230,400,"Press any key to exit....");
while(!kbhit())
{
show_mouse(); get_mouse_pos(&x1,&y1,&button);
x2=x1;
y2=y1;
while(button==1) {
hide_mouse();
line(x1,y1,x2,y2);
x1=x2;
y1=y2;
get_mouse_pos(&x2,&y2,&button); }
}
restorecrtmode();
} show_mouse()
{
i.x.ax=1; int86(0x33,&i,&o);
}
hide_mouse()
{
i.x.ax=2; int86(0x33,&i,&o);
}
get_mouse_pos(int *x,int *y,int *button)
{
i.x.ax=3;
int86(0x33,&i,&o);
*x=o.x.cx;
*y=o.x.dx; *button=o.x.bx&1;
}



good luck

بازگشت به بالای صفحه
خواندن مشخصات فردی ارسال پیام شخصی ارسال email مشاهده وب سایت این کاربر نام شناسایی در AIM [وضعيت كاربر:آفلاین]
تشکرها از این تاپیک
Mnasiri از این تاپیک تشکر میکنم 
نمایش پستها:   
ارسال موضوع جدید   پاسخ دادن به این موضوع   تشکر کردن از تاپیک تمام زمانها بر حسب GMT + 3.5 Hours می‌باشند
صفحه 1 از 1

 
پرش به:  
شما نمی توانید در این بخش موضوع جدید پست کنید
شما نمی توانید در این بخش به موضوعها پاسخ دهید
شما نمی توانید موضوع های خودتان را در این بخش ویرایش کنید
شما نمی توانید موضوع های خودتان را در این بخش حذف کنید
شما نمی توانید در این بخش رای دهید
شما نمیتوانید به نوشته های خود فایلی پیوست نمایید
شما نمیتوانید فایلهای پیوست این انجمن را دریافت نمایید

Powered by phpBB © 2001, 2002 phpBB Group

Copyright Daneshjo.Net 2005-2006 , 2010-2011
- Powered : Zomorod Net


مدت زمان ایجاد صفحه : 0.07 ثانیه