تبليغاتX
کاراکتر:کامپیوتر دانشگاه فریمان
عناوین پروژه درس برنامه سازی پیشرفته  
این خبر از طرف استاد آل شیخ برام میل شده:

دانشجویان محترم درس برنامه سازی پیشرفته هر دو گروه (استاد سرخیلی و استاد آل شیخ) می تونن عناوین پروژه هاشون رو از لینک زیر دانلود کنن 

Download

نکات قابل توجه این که :

یکی از دو عنوان رو به دلخواه انتخاب کنین

تحویل هم بصورت حضوری خواهد بود

|+|
نوشته شده توسط  M2Ahdi در پنجشنبه هفتم خرداد 1388 و ساعت 21:39
کنترلهای مفید برای برنامه نویسی شبکه 

 

PDF فارسی معرفی کنترل های کاربردی برای برنامه نویسی شبکه

 

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در پنجشنبه بیست و نهم آذر 1386 و ساعت 22:57
مناسب‌ترين روش براي توليد نرم‌افزارهاي كوچك 

امين صفائي‌
ماهنامه شبکه - تير ۱۳۸۵ شماره 66

اشاره :

در حقيقت ساختن يك نرم‌افزار فقط نوشتن كدهاي برنامه نيست. رويه ساخت نرم‌افزارها مراحل متعددي را دربرمي‌گيرد؛ از جمع آوري نيازهاي كاربران گرفته تا طراحي، نوشتن كد و در آخر امتحان نرم افزار. روش توليد نرم‌افزارهاي كوچك با نرم‌افزارهاي بزرگ متفاوت است و طبعاً رويه توليد نرم‌افزارهاي كوچك نيز متفاوت خواهد بود. البته اين رويه نبايد سنگين و حجيم باشد، بايد مستقيماً به تمامي فعاليت‌هاي لازم براي توليد نرم‌افزاري با كيفيت بالا نظارت داشته باشد و از تمامي رويه‌هاي آسان و متمركز استفاده كند. با استفاده از تكنيك‌هايي مفيد، از روش‌هايي مانند XP،Scrum و RUP مي‌توان رويه‌اي مناسب براي توليد نرم‌افزارهاي كوچك به‌وجود آورد. همچنين مي‌توان از روش‌هايPSP و TSP نيز كه براي توليد نرم‌افزارهاي كوچك مناسب هستند استفاده نمود و به‌وسيله اين روش‌ها كيفيت و قابليت‌هاي نرم‌افزارها را بالا برد و در حداقل زمان ممكن نرم‌افزار را تهيه نمود. اين مقاله با بررسي روش‌هاي جديد و متداول امروزي در توليد نرم‌افزار، بهترين و مناسب‌ترين روش توليد نرم‌افزارهاي كوچك را به شما نشان خواهد داد. گفتني است نوشتار حاضر نتايج تحقيقات من در گروه تحقيقاتي مهندسي نرم‌افزار دانشگاه ساندرلند انگلستان است و آمار و نتيجه‌گيري‌هاي آن براساس مصاحبه‌هاي انجام شده با چندين شركت كوچك و بزرگ توليد نرم‌افزار آن كشور است.


ادامه مطلب
|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در یکشنبه هجدهم آذر 1386 و ساعت 22:2
تكنولوژی‌های نرم‌افزاری  

آشنایی با تكنولوژی‌های نرم‌افزاری قابل استفاده برای ارائه یك معماری خوب و كارا ضروری است. تكنولوژیهای رایج نرم افزاری امروز عمدتا به دو خانواده .Net و J2EE تقسیم ‌می‌شوند، اولی (J2EE) توسط شركت Sun بصورت یك استاندارد جهت پیاده سازی سیستمهای چند لایه تعریف شده كه توسط شركتهای معتبری مانند IBM، Oracle، Bea و Borland حمایت و پیاده سازی شده است در مقابل .Net یك پلتفرم نرم افزاری تجاری از شركت Microsoft می‌باشد كه بصورت گسترده‌ای مورد استفاده قرار می‌گیرد.

J2EE

مروزه، توسعه‌دهندگان بیشتری خواهان نوشتن نرم‌افزارهای کاربردی توزیع‌یافته با مقیاس کلان هستند و در این‌کار، نیازمند سرعت و قابلیت اطمینان تکنولوژی‌های سمت سرور هستند. برای کاهش هزینه طراحی و توسعه نرم‌افزارهای کاربردی، سکوی J2EE یک روش مبتنی بر کامپوننت برای طراحی، توسعه، سرهم بندی و اجرای نرم‌افزارهای کاربردی در مقیاس کلان ارائه کرده است. این سکو، یک مدل توزیع‌یافته چندلایه‌ای عرضه می‌کند که دارای کامپوننت‌های با قابلیت استفاده مجدد است، یک مدل امنیتی یکپارچه دارد، کنترل‌های transaction قابل انعطاف دارد و می‌تواند Web Service ها را از طریق پروتکل استاندارد XML پوشش دهد.
با استفاده از
J2EE، یک توسعه‌گر نه تنها می‌تواند به سرعت، راه‌حل‌های ابداعی تجاری مناسب برای بازار ارائه دهد، بلکه این راه‌حل‌های مبتنی بر کامپوننت و مستقل از سکو، به محصولات و رابط‌های برنامه‌های کاربردی هیچ تولید‌کننده‌ای وابسته نیستند. در حقیقت، مشتریان و تولیدکنندگان نیز از آزادی در انتخاب محصولات و کامپوننت‌هائی که بیشتر بتواند نیازهای تجاری و تکنولوژیکی آنها را برطرف سازد، احساس رضایت می‌کنند.
سکوی
J2EE، از یک مدل چند‌لایه‌ای توزیع‌یافته برای نرم‌افزارهای کاربردی با مقیاس کلان استفاده می‌کند. منطق برنامه کاربردی به یک سری کامپوننت شکسته می‌شود که می‌توانند بر روی چندین ماشین مختلف قرار گیرند.

  • کامپوننت‌های لایه کاربر بر روی ماشین کاربر اجرا می‌شوند.
  • کامپوننت‌های لایه Web بر روی سرور J2EE قرار دارند.
  • کامپوننت‌های کاری نیز بر روی سرور J2EE قرار دارند.
  • نرم‌افزارهای سیستم اطلاعاتی سیستم که بر روی سرور EIS قرار دارند.

  • کامپوننت‌هائی که توسط J2EE معرفی شده‌اند عبارتند از : برنامه کاربردی client و applet ها که بر روی ماشین client اجرا می‌شوند.
  • Servletهای جاوائی و JSPها که بر روی سرور اجرا می‌شوند.
  • کامپوننت‌های EJB که اجزای منطق کاری هستند و بر روی سرور اجرا می‌شوند.

کامپوننت‌های J2EE توسط زبان برنامه‌نویسی جاوا نوشته و کامپایل

Microsoft .Net

دات نت ، پلات فرم جدید ماکروسافت بمنظور تحقق نظریه : " نرم افزار بعنوان سرویس " ، است . دات نت یک محیط پیاده سازی است که بکمک آن می توان اقدام به ایجاد و بکارگیری نرم افزار و نسل جدیدی از عناصر موسوم به " سرویس های وب " ، نمود. تمامی محصولات اصلی ماکروسافت از ویژوال استودیو دات نت تا ویندوز و نهایتا" مجموعه آفیس ، متاثر از پلات فرم فوق شده و خواهند شد . دات نت به پیاده کنندگان این امکان را خواهد داد که با زبان برنامه نویسی مورد علاقه خود ، اقدام به پیاده سازی برنامه ها نمایند. ویژگی ( پتانسیل ) فوق از طریق معرفی Common Language Runtime (CLR) ، میسر شده است .
دات نت، اولین پلات فرم طراحی شده از صدر تا ذیل با در نظر گرفتن واقعیتی با نام اینترنت است. دات نت از یک ماشین مجازی خاص در این زمینه استفاده می نماید . ماهیت ماشین مجازی فوق ، بگونه ای است که از
API ویندوز فاصله و در این رابطه از یک کتابخانه کلاس استفاده می نماید که می توان به جرات این ادعا را داشت که تاکنون نظیر آن، ایجاد نشده است. امکان استفاده از زبانهای متعدد برنامه نویسی، وجود خواهد داشت. معماری دات نت، امکان ارتباط بین زبانها را بسادگی فراهم خواهد کرد. دات نت، یک رویکرد جدید در رابطه با پیاده سازی نرم افزار را مطرح نموده است. نگاه به دات نت ، عمدتا" بصورت سیستم های توزیع شده است.
با استفاده از
XML ،امکان اجرای توابع بر روی کامپیوترهای متفاوت یک سازمان ویا جهان فراهم و جلوه ای زیبا در همیاری بمنظور اجرای یک برنامه، به نمایش در خواهد آمد. از این منظر ، سیستم ها از سرویس دهندگان تا سیستم های بدون کابل، قادر به اشتراک پلات فرم عمومی یکسانی خواهند بود. با استفاده از نسخه های خواهد شد.
دات نت ، بمنظور طراحی و پیاده سازی برنامه های سنتی نیز راهکارها و امکانات خواهد شد. دات نت ، بمنظور طراحی و پیاده سازی برنامه های سنتی نیز راهکارها و امکانات مناسبی را ارائه تا از این طریق امکان پیاده سازی و بکارگیری این نوع از نرم افزارها، بسادگی انجام گیرد . برخی از تکنولوژی ها ی ارائه شده در دات نت نظیر فرم های ویندوز، تلاشی در این راستا است.
Visaul Studio.Net
Visaul Studio.Net جدیدترین ابزار برنامه نویسی شركت Microsoft و شكل گرفته بر اساس فناوری .NET، رویكرد جدید Microsoft برای تولید نرم افزار است و تمام برنامه های این شركت برای آینده، بر مبنای آن خواهد بود.
ریشه .
NET به نشانی های " .NET" در اینترنت بر می گردد. از نظر مفهوم، .NET یك فناوری جدید است كه باعث سهولت هر چه بیشتر انجام بسیاری از كارهای سخت گذشته شده است. خصوصاً ایجاد برنامه های قابل اجرا در شبكه با .NET، بسیار ساده شده است. اگر از دید برنامه نویسان نگاه كنیم، .NET یك سطح تجرید (Abstract) بالاتر برای برنامه سازی است.


مروری بر
Net Framework.
Net Framework.، تمامی لایه های پیاده سازی نرم افزار را از سطح سیستم عامل به  بالا، تحت پوشش قرار می دهد. Framework فوق، سطحی مناسب وقدرتمند از ارتباط و همبستگی بین تکنولوژی  Presentation  ، تکنولوژی های Component و تکنولوژی های  Data  را ارائه می نماید ( نظیر این ارتباط و همبستگی تاکنون در پلات فرم ویندوز مشاهده نشده است) .  معماری فوق ، امکان طراحی و پیاده سازی برنامه های مبتنی بر اینترنت و محیط های Desktop ، را بسادگی فراهم و نیازهای هر گروه از نرم افزارهای فوق را بخوبی جواب می دهد. اجزای اصلی Net Framework. در شکل مقابل نشان داده شده است . Net Framework. از لایه  پائین با عملیاتی نظیر مدیریت حافظه آغاز و بسمت بالا بمنظور ارائه اینترفیس های برنامه ها و کاربران ، دنبال  می شود. در بین لایه ها ، لایه های سیستمی دیگر که هر یک دارای پتانسیل های خاصی برای پیاده کنندگان می باشند ، وجود دارد.
 
CLR) Common Language Runtime) ، بمنزله قلب فریمورک دات نت محسوب و engine لازم بمنظور ارائه قابلیت های کلیدی را ارائه می نماید . CLR ، شامل عناصر اساسی دیگری نظیر:  (Common Type System (CTS ، است. علاوه بر مدیریت حافظه ، CLR ، مراجعات به اشیاء و عملیات Garbage Collection را نیز انجام می دهد .  در لایه میانی ، ما شاهد نسل جدیدی از سرویس های استاندارد نظیر ADO.NET و XML می باشیم .سرویس های فوق، تحت کنترل Framework بوده و امکان بکارگیری آنها بصورت جامع و استاندارد در بین تمامی زبانها ، فراهم می گردد. بالاترین لایه، شامل اینترفیس های برنامه و کاربر است. فرم های ویندوز، روشی جدید بمنظور ایجاد برنامه های Desktop مبتنی بر win32  می باشند. فرم های وب، یک رابط کاربر مناسب برای برنامه های  مبتنی بر وب را ارائه می نمایند.
سرویس های وب ، مکانیزمی بمنظور ارتباط برنامه ها از طریق اینترنت و با استفاده از
SOAP، می باشد. سرویس های وب، قابل مقایسه با عناصر COM و DCOM بوده با این تفاوت مهم که در این راستا از تکنولوژی های متعدد اینترنت، استفاده می گردد. فرم های وب و سرویس های وب ،  اینترفیس اینترنت  دات نت را تشکیل و پیاد ه سازی آنان از طریق بخش دیگری در فریمورک دات نت که  ASP.NET ، نامیده می شود ، محقق می گردد. پتانسیل های موجود در هر لایه فریمورک دات نت ، توسط هر یک از زبان های سازگار با دات نت، قابل استفاده خواهد بود. در پایان لازم است به این نکته اشاره گردد که  در این رابطه ( Net Framework. ) می توان از اینترفیس های مبتنی بر متن ( کاراکتری) نیز استفاده کرد. این نوع برنامه ها اصطلاحا" Console Application، نامیده می شوند .

 

مزایای استفاده از Net Framework.
در آغاز پیاده سازی برنامه های مبتنی بر ویندوز، تمامی برنامه های نوشته شده بمنظور استفاده از
API ، از C و یا ++C استفاده می کردند. با مطرح شدن ویژوال بیسیک و سپس اینترنت، پیاده کنندگان مجبور به سفارشی نمودن ( پیاده سازی نسخه هائی خاص ) برنامه های C++ ، C، برنامه های ویژوال بیسیک و یا ASP بودند.
با استفاده از
Net Framework.، می توان با اتکاء به مهارت های موجود، اقدام به آفرینش هر نوع نرم افزاری کرد. انتخاب Net Framework. بمنظور پیاده سازی برنامه ها، مزایای زیر را بدنبال خواهد داشت :

  • مبتنی بر استانداردهای وب . فریمورک دات نت، بطور کامل تکنولوژی های موجود در اینترنت نظیر : HTML , HTTP,SOAP,XSLT,XPath و سایر استانداردها را حمایت مینماید.
  • طراحی مبتنی بر یک مدل یکسان . از پتانسیل های یک کلاس دات نت ، می توان در هر یک از زبانهای حمایت شده در دات نت و یا مدل برنامه نویسی ، بخوبی استفاده کرد . بنابراین می توان ، بخش هائی از کدهای نوشته شده را در برنامه های متعدد استفاده کرد (برنامه های ویندوز، وب ، سرویس های وب XML ) .
  • پیاده کنندگان بسادگی قادر به استفاده از آن می باشند. در فریمورک دات نت ، کد ، بصورت Namespace های سلسله مراتبی و کلاس ها ، سازماندهی می گردد . فریمورک دات نت یک Common Type System)CTS) را بعنوان سیستم نوع یکسان ، ارائه نموده که توسط هر زبان سازگاز با دات نت، قابل استفاده خواهد بود .در سیستم فوق ، تمامی عناصر زبانها بصورت شی می باشند. این اشیاء قادر به استفاده توسط هر برنامه مبتنی بر دات نت و نوشته شده توسط هر زبان مبتنی بر دا ت نت ، خواهند بود .

کلاس های توسعه پذیر . ماهیت سلسله مراتبی فریمورک دات نت، برای پیاده کنندگان مخفی نخواهد بود .در این راستا می توان به کلا س ها دستیابی و آنها را توسعه داد( مگر اینکه آنها حفاظت شده باشند ). در این زمینه امکان پیاده سازی توارث از نوع Cross - Language ، نیز وجود خواهد داشت .

www.smhoseyni.com

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در شنبه سوم آذر 1386 و ساعت 22:46
Visual Studio 2008 در راه است!  

تقريباً ده سال از توزيع نسخه اول ويژوال ا‌ستوديو مي‌گذرد. اولين نسخه از اين نرم‌افزار سال 1997 به بازار آمد و به نام Visual Studio 97 مشهور شد. براي اولين‌بار برنامه‌اي درست شد كه تعداد زيادي ابزار برنامه‌نويسي را در خود جا داده بود و برنامه‌هايي مانند Visual Basic 5.0 ،Visual C++ 5.0 ،Visual J++ 1.1 ،Visual FoxPro 5.0 و Visual InterDev را شامل مي‌شد.
اين محصول مايكروسافت در آن سال‌ها تقريباً، جوابگوي همه نوع سليقه‌اي بود و برنامه‌نويسان زيادي را به سوي خود كشيد. اين نسخه از ويژوال استوديو، اولين تلاش شركت مايكروسافت در توليد محيط توليد نرم‌افزاري براي ساختن برنامه‌هايي با زبان‌هاي متفاوت بود.

شکل 1

يك سال پس از ارائه نسخه 97 اين نرم‌افزار، نسخه 6 آن كه مي‌توانست در پلتفرم Win9x اجرا شود، به بازار آمد. پس از آن در سال 2002 نسخه تحت فريمورك دات‌نت كه مقدمه‌اي بود بر كدهاي مديريت شده، معرفي شد. فرق اين برنامه در اين بود كه برنامه‌ها مانند زبان ++C مستقيماً به زبان ماشين، كامپايل نمي‌شدند و به صورت MSIL يا CIL در مي‌آمدند.
اين نسخه از ويژوال استوديو اولين نسخه از اين نرم‌افزار بود كه حتماً بايد روي ويندوز NT اجرا مي‌شد. در اين نسخه، زبان قدرتمند سي‌شارپ پا به عرصه گذاشت. همچنين زبان ديگري به نام جي شارپ (#J) كه از Syntaxهاي جاوا استفاده مي‌كرد نيز در اين بسته عرضه شد.
پس از نسخه 2002، نسخه جديد ويژوال استوديو 2003 به بازار آمد كه NET Framework. جديدتري داشت و از برنامه‌نويسي موبايل،ASP.NET و NET Compact Framework. پشتيباني مي‌كرد. در اكتبر سال 2005، نسخه ويژوال استوديو 2005 وارد بازار شد و بسيار مورد توجه قرار گرفت.


ادامه مطلب
|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در پنجشنبه هفدهم آبان 1386 و ساعت 21:9
نحوه کامپایل با Flex 

با استفاده از اين مقاله خواهيد توانست گرامرهاي نوشته شده به زبان Flex را کامپايل و اشکالزدايي کنيد ، جهت مشاهده بر روي ادامه مطلب کليک کنيد .


ادامه مطلب
|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در دوشنبه بیست و پنجم تیر 1386 و ساعت 18:26
نمونه برنامه Flex 
  این برنامه به زبان Flex انواع لغات رو تشخیص میده شامل متغییر ، اعداد صحیح و اعشاری و در صورت مواجه شدن با تعریف متغییر هایی که با اعداد شروع میشوند خطا میدهد .
 

%option noyywrap

digit      [0-9]
number     {digit}+
num_ashari {number}"."{number}
lower      [a-z]
upper      [A-Z]
loghat     {lower}|{upper}
variable   {loghat}+({digit}|{loghat})*
%{
%}

%%
({number}|{num_ashari}){variable} {printf("\nError");}
{num_ashari}      {printf("\nAshari");}
{number}       {printf("\nNumber");}
{variable}              {printf("\nVariable");}
%%

int main(void){
 clrscr();
 printf("\nPress Ctr + z to exit\n");
 yylex();
 printf("\nPress any key to exit . . . ");
 getch();
return(0);
}


ادامه مطلب
|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در چهارشنبه ششم تیر 1386 و ساعت 13:46
Flex And Bison 

 

Flex ابزار تولید کننده تحلیلگر لغوی

Bison ابزار تولید کننده تحلیلگر نحوی

*****Parser Generator تحت ویندوز(Lex & Yacc)*****

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در شنبه پانزدهم اردیبهشت 1386 و ساعت 22:42
آموزش rationalrose 
فایل Pdf فارسی آموزش نرم افزار rationalrose جهت رسم نمودارهای درس پایگاه داده:

لینک اصلاح شده : دانلود

 

|+|
نوشته شده توسط   در سه شنبه چهاردهم فروردین 1386 و ساعت 16:9
عدم حمایت مسئولان از تیم دانشجویی ACM دانشگاه صنعتی شریف / شرکت گوگل حامی تیم ایران در مسابقات جهانی 
مسئول برگزاری مسابقات ACM در ایران گفت: جهت اعزام تیم دانشگاه صنعتی شریف به مسابقات جهانی برنامه نویسی رایانه ای (ای سی ام) جز مرکز تحقیقات مخابرات ایران هیچ گونه حمایتی از سوی مسئولان داخلی صورت نگرفت و تیم اعزامی با کمک یک شرکت خارجی به مسابقات اعزام شد.

دکتر "محمد قدسی" در گفتگو با خبرنگار دانشگاهی مهر افزود: تاکنون 2 تن از اعضای تیم دانشگاه صنعتی شریف ویزای خود را اخذ کرده و به آمریکا اعزام شدند. یک عضو دیگر همچنان در انتظار دریافت ویزای خود است و همراه مربی خود در آلمان به سر می برد.

وی اظهار داشت: طی مذاکره با مسئول برگزاری مسابقات در آمریکا توافقات لازم در زمینه شرکت دو نفر از اعضای تیم در مسابقه به عمل آمده است و در صورت عدم اعزام نفر سوم مسابقه با حضور دو نفر اعزام شده برگزار می شود.

مسئول برگزاری مسابقات ACM در ایران خاطر نشان کرد: مرحله نهایی مسابقه برنامه نویسی کامپیوتری در آمریکا از فردا آغاز می شود.

وی یادآور شد: هیچ گونه حمایتی جز مسئولان مرکز تحقیقات مخابرات از سوی ایران جهت اعزام تیم دانشگاه صنعتی شریف به مسابقه ACM جهانی صورت نگرفت و این تیم توسط Google که یک شرکت خارجی است حمایت مالی و اعزام شد.

مسئول برگزاری مسابقات ACM در ایران با بیان این که مسابقه نهایی در آمریکا تا 24 فروردین ماه ادامه دارد، اظهار داشت: سی امین مسابقه نهایی در تگزاس، با حضور 80 تیم از 40 کشور دنیا برگزار می شود و کشورهای چین، اروپای شرقی و تیم هایی از دانشگاه های MIT  و کشور کانادا رقبای سرسخت ایران در این مسابقه به شمار می آیند.

وی اضافه کرد: قرار گرفتن در 20 تیم اول افتخار بزرگی است و دانشگاه صنعتی شریف در سال 2001 مقام نهم و مدال نقره این مسابقات را از آن خود کرد. دانشگاه صنعتی شریف پنجمین بار است که به مسابقه نهایی ACM راه می یابد.

به گزارش مهر، در مسابقات ACM دانشجویان شرکت کننده در قالب گروه ها و تیم های سه نفری و با حضور یک سرپرست به رقابت می پردازند. در این رقابت دانشجویان باید با استفاده از یک دستگاه کامپیوتر به حل هشت مسئله دشوار می پردازند. دانشجویانی که بتوانند این مسائل را در حداقل زمان حل کنند به عنوان برنده مسابقه معرفی می شوند.

محیط برگزاری مسابقات نرم افزار PC2 است که در محیط شبکه های اختصاصی مسابقات، ارتباط بین کلیه تیمها، داوران و مسئولان برگزاری مسابقات و تابلوهای نمایش نتایج ارتباط برقرار می کند.

کامپایلرهای مورد استفاده دانشجویان Visual C++ 6.0 with SP6 و Java J2SE-1.4.2 SDK و eclips 3.0.1 و Borland Delphi7 خواهد بود.

لینک مرتبط

منبع

|+|
نوشته شده توسط   در پنجشنبه هفدهم اسفند 1385 و ساعت 2:5
تاریخچه ویژوال بیسیک 
 

لوگوی برنامه

 

ویژوال بیسیک توسعه یافته زبان Basic می باشد. Basic توسط پروفسور John Kemency و Thomas Kurts از کالج Dartmouth برای نوشتن برنامه های ساده ایجادشد و این طراحی ازاواسط دهه 1960 آغاز گردید.

ویژوال بیسیک تا نسخه ۳ به صورت ۱۶ بیتی بود. از نسخه ۵ به بعد فقط ویرایش ۳۲ بیتی آن ارائه شد. (نسخه ۴ هم به صورت ۱۶ بیتی و هم به صورت ۳۲ بییتی عرضه شده بود.)

ویژوال بیسیک از نسخه ۶ به بعد بر پایه سکوی .NET ارائه شد.

اگر چه با ظهور Visual Basic .NET اکثر برنامه‌نویسان VB6 به .NET کوچ کردند، ولی نسخه ۶ همچنان طرفداران خاص خود را دارد.

Visual Basic برای توسعه سریع نرم افزار (RAD یا Rapid Application Development) بر پایه واسط گرافیگی کاربر (GUI یا Graphical User Interface) توسعه داده شد. دسترسی آسان و سریع به پایگاه دادهها با استفاده از DAO ، RDO یا ADO و ایجاد کنترل‌های ActiveX از جمله مواردی هستند که این زبان را برای RAD مناسب کرده‌اند.

برنامه‌نویسی در VB به صورت رخدادگرا یا Event Driven می‌باشد.

در برنامه‌نویسی تجاری، VB جز محبوب‌ترین‌ها می‌باشد. بنابه آماری که در سال ۲۰۰۳ منتشر شد، ۵۳٪ از برنامه‌های تجاری با استفاده از این زبان تولید شده‌اند.

ویژوال بیسیک.نت یکی از زبانهای معرفی شده جهت نوشتن برنامه‌های مبتنی و با استفاده از چهارچوب دات.نت است. دستورات این زبان مشابه بیسیک است. چون این زبان جزو مجموعه چهارچوب دات.نت است کد تولید شده توسط آن(MSIL)در بیشتر مواقع فرقی با کدهای تولید شده توسط سی‌شارپ ندارد و کتابخانه‌های تولید شده در هر یک از این دو زبان مستقیماً در دیگری قابل استفاده است.

محیط برنامه 

اشتباهی که معمولاً در مورد ویژوال بیسیک دات.نت می‌شود این است که با توجه به ویژگی های بیسیک کلاسیک که زبانی ساده و مخصوص غیرحرفه‌ای‌ها بود، این زبان نیز غیرحرفه‌ای تلقی می‌شود، در حالی که قابلیت‌های آن کاملاً با سی‌شارپ برابر است. در ضمن زبان مفسری نیست. وی بی دات نت علاوه بر امکانات عادی مثل برنامه نویسی برای ویندوز قابلیت برنامه نویسی برای کونسول ها و دستگاه های هوشمند (Smart Device) را هم دارد. سیستم کد ها بسیار منظم تر از وی بی 6 شده و تمام کدها در کلاسها طبقه بندی می شود.(در ضمن محیط بسیار جدید و زیبایی دارد.(نسبت به وی بی 6))

زبان‌های اصلی برنامه‌نویسی (ویرایش)

صنعتی-تجاری: آباپ | آدا | اسمال‌تاک | اسمبلی | ای‌دبلیو‌کی | ایفل | بیسپ معمولی | پاسکال | پاوربیلدر | پایتون | پرل | پی‌اچ‌پی | پی‌ال/اس‌کیوال | تی‌اس‌کیوال | تی‌سی‌ال | جاوا | جاوااسکریپت | دلفی | روبی | ساس | سی | سی شیء‌گرا | سی‌پلاس‌پلاس | سی‌شارپ | فرترن | کوبول | کولدفیوژن | لیسپ | ویژوال بیسیک.نت | ویژوال بیسیک | ویژوال سی نهفته | ویژوال سی.نت | ویژوال سی | ویژوال فاکس‌پرو

دانشگاهی: ای‌پی‌ال/جی | اسکیم | ام‌ال | پاسکال | پرولوگ | لوگو | هسکل |

تاریخی: الگول | بیسیک | پی‌ال/آی | سیمولا | کلیپر | مدول-۲/مدول-۳ | مامپس

منبع : دانشنامه آزاد ویکی پدیا

|+|
نوشته شده توسط   در جمعه یازدهم اسفند 1385 و ساعت 21:37
تبديل تاريخ شمسي يه ميلادي و بالعكس توسط DateC.ocx 
يك كامپوننت براي تبديل تاريخ ميلادي به شمسي و بالعكس.
مهمترين كاربردش اينه كه ميتونيد داخل برنامتون از تاريخ شمسي استفاده كنيد.
البته بايد بگم كه اين رو خودم نوشتم و كار سختي هم نيست، فقط بايد يك مقداري با برنامه‌نويسي اكتيوايكس آشنا باشيد.
ميتونيد اون رو از لينك زير بگيريد. اين فايل به همراه يك سورس جهت آموزش نحوه كار DateC.ocx هست.
در ضمن بعد از رجيستر كردن اين كامپوننت داخل VB ميتونيد اون رو از ليست كامپوننت‌ها با نام ULF Date Convertor پيدا كنيد.

حجم : 38KB

دانلود

لینک منبع

|+|
نوشته شده توسط   در سه شنبه هشتم اسفند 1385 و ساعت 22:37
توابع کار با رشته در ++ VC 

نام تابع
شرح وظیفه
Header مورد نیاز
atof
برای تبدیل یک رشته به عدد اعشاری
Atoi
تبدیل رشته به عددی از نوع Integer
Atol
تبدیل رشته به عددی از نوع Long
ecvt and fcvt
تبدیل عدد اعشاری به رشته
gcvt
تبدیل عدد اعشاری به رشته
strtod
تبدیل رشته به عدد اعشاری از نوع Double
strtol
تبدیل رشته به عددی از نوع Long
_strtold
تبدیل رشته به long double
strtoul
تبدیل رشته به unsigned long

 لینک منبع

|+|
نوشته شده توسط   در شنبه پنجم اسفند 1385 و ساعت 13:19
تبدیل اعداد به حروف  
یادمه چند وقت پیشا یه برنامه فسقلی بود میخواستم بنویسم یه تیکش هم نیاز به یه تابع فسقلی داشت واسه اینکه یه عدد رو بگیره و به حروف تبدیل کنه . خب یه چیزایی نوشتم ولی همچین بگی نگی دلچسب نبود  داشتم وب گردی میکردم یه تابع از تو این سایت www.dev.ir پیدا کردم ، گفتم بزارم که حتما به دردتون میخوره  .

میخواستم بدونم کسی میتونه این تابع رو بست بده که بجای اینکه عدد رو به حرف تبدیل کنه مثل سیستم گویا عدد رو بخونه  حالا یه به شکل کلمه به کلمه که آسونه یا به شکل پیوسته .

 


ادامه مطلب
|+|
نوشته شده توسط   در چهارشنبه هجدهم بهمن 1385 و ساعت 20:37
ايجاد ساختارهاي داده اي در ويژوال بيسيک - بخش دوم 
ليست پيوندي

همانطور که گفته شد ليست پيوندي مجموعه اي از يکسري داده است که اين داده ها از نوع اشيا خودارجاعي هستند . ( هر شي خودارجاعي داراي يک متغير نوع variant براي نگهدار مقدار و يک اشاره گر به شي بعدي است ) . هر عضو ليست پيوندي را يک گره گويند . هر ليست پيوندي از طريق يک اشاره گر به اولين گره قابل دسترسي است . گره هاي بعدي از طريق قسمت لينک موجود در هر گره قابل دسترس هستند . همچنين لينک آخرين گره با Nothing تنظيم مي شود که انتهاي ليست را نشان مي دهد .
مزيت اصلي ليست هاي پيوندي نسبت به آرايه اينست که تعداد عناصر ليست پيوندي قابل تغيير است . بعبارت ديگر ليست هاي پيوندي بصورت ديناميک هستند و طول آنها قابل تغيير است اما سايز آرايه ثابت است . ( البته ويژوال بيسطک از آرايه هاي با سايز متغير نيز پشتيباني مي کند اما اين عمل تغيير سايز اتوماتيک نيست .)
عمل درج در ليست پيوندي ساده است و تنها بايستي دو اشاره گر تغيير يابد .
ليست هاي پيوندي را مي توان به سادگي با قراردادن هر عضو جديد در محل صحيح بصورت sortشده نگهداري کرد .
اعضاي ليست پيوندي در حافظه بصورت پيوسته ذخيره نمي شوند بنابراين نمي توان فوراً به هر عضو ليست دسترسي داشت ( بر خلاف آرايه ) .
براي ايجاد ليست پيوندي در ويژوال بيسيک نياز به سه کلاس است :

ارادتمند شما مهرگان ایرانی


ادامه مطلب
|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در دوشنبه شانزدهم بهمن 1385 و ساعت 21:34
ایجاد ساختارهای داده ای در ویژوال بیسیک 6 
سلامی دوباره به همه ی بر و بچس دی جی

این مطالب رو به همه ی دوستان در دو یا سه بخش جداگانه تقدیم می کنم ولی بخش پشته رو فقط به دوست خوبم جزقاله جان:

مقدمه :

ساختارهاي داده اي از نظر تعداد اعضا به دو دسته استاتيک و ديناميک تقسيم مي شوند . ساختارهاي استاتيک مثل آرايه هاي يک بعدي و آرايه هاي دو بعدي ، تعداد اعضاي آنها در زمان طراحي برنامه مشخص مي شود و در طول اجراي برنامه ثابت است اما تعداد اعضاي ساختارهاي داده اي ديناميک در طول اجراي برنامه تغيير مي کند . ليست پيوندي ( LinkList ) ، پشته ( Stack ) ، صف ( Queue ) و درختهاي باينري ( Tree Binary) ، نمونه هايي از ساختارهاي داده اي ديناميک هستند .
ليست پيوندي شامل مجموعه اي از عناصر داده اي است که اضافه و حذف اعضا در هر جاي ليست ممکن است .
پشته يک ساختار داده اي مهم در کامپايلرها و سيستم هاي عامل است که عمل اضافه و حذف عناصر از ابتداي آن انجام مي شود .
صف يک ساختار داده اي است که عمل اضافه کردن از انتها و عمل حذف کردن از ابتداي آن انجام مي شود .
درختهاي دودويي براي جستجوي بسيار سريع ، ذخيره سازي داده ها و کامپايل عبارات استفاده مي شوند .


ارادتمند شما مهرگان ایرانی
ادامه مطلب
|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در یکشنبه پانزدهم بهمن 1385 و ساعت 22:46
توابع ریاضی در ویژوال بیسیک 6 
 

سلام به همه

برای نوشتن برنامه‌های مهندسی، محاسباتی، گرافیکی و آماری نیاز دارید تا از برخی توابع ریاضی استفاده نمائید. ویژوال بیسیک 6 دارای مجموعه‌ای از توابع است که برای انجام محاسبات عددی پیش بینی شده اند. در این مقاله ابتدا با این توابع آشنا شده و سپس چگونگی ایجاد سایر توابع ریاضی را که در میان این مجموعه وجود ندارند خواهید دید. در پایان نیز با توابع ریاضی موجود در دات نت آشنا می‌شوید.

تابع Abs (قدرمطلق) :
مقدار بدون مثبت یک عدد را برمی‌گرداند.

تابع Atn (آرک تانژانت) :
خروجی این تابع عددی از نوع double است که برابر زاویه‌ای است که تانژانت آن عدد ورودی تابع است.

تابع Cos (کسینوس) :
خروجی این تابع عددی از نوع double است که برابر کسینوس زاویه ورودی است.

و ...

ادامه این توابع در ادامه ی مطلب:

ارادتمند شما مهرگان ایرانی

 


ادامه مطلب
|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در شنبه هفتم بهمن 1385 و ساعت 11:26
لیست الفبایی زبانهای برنامه نویسی 

[edit] 0-9

[edit] A

برای مشاهده بقیه لیست به ادامه مطلب رجوع کنید


ادامه مطلب
|+|
نوشته شده توسط   در یکشنبه هفدهم دی 1385 و ساعت 1:9
امتحانهای خوبی واسه همه آرزو دارم 
 

با عرض سلام به بر و بچس دي جي

 

ميخوام با يک کنترل ocx  آشناتون کنم ، فکر کنم همچي به دردتون بخوره. راستي اگه آقاي رضائي رو ديدين سلام من رو بهش برسونين دلم واسش خيلي تنگ شده. به هر حال اين دفعه با کمک اين اينocx ماماني ، اي همچي يه برنامه کي نوشتم که اطلاعاتي رو در مورد سخت افزار سيستم به شما بردارن و خواهران دي جي ميده . جزقاله جان رانش بکن باور کن سي پي يوتو نمي سوزونه. همتون رو به خدا مي فرستم. اين لينک دانلود برنامه:

 http://www.sharemation.com/mojsad/mehregan%20hardware%20ocx.zip

ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در جمعه هشتم دی 1385 و ساعت 13:54
محاسبه سینوس و کسینوس و تانژانت و ... در وی بی 
 

میخواهیم برنامه ای بنویسیم که عددی را از ورودی گرفته، سینوس، کوسینوس، تانژانت، کوتانژانت، جذر و قدر مطلق آن را محاسبه و هر کدام را در یک برچسب نمایش دهد. میخواهیم نتایج هنگامی محاسبه و نمایش داده شوند که روی دکمه ای کلیک نماییم. عنوان دکمه را Calculate و عنوان فرم را Calling Functions بگذارید.

حل:

ارادتمند شما مهرگان ایرانی


ادامه مطلب
|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در دوشنبه بیستم آذر 1385 و ساعت 21:41
معادلات حرکت پرتابه 
 این هم برنامه ای که نمودار حرکت پرتابه رو با مقاومت هوا و بدون مقاومت هوا رسم میکنه  و نقطه سقوط و سرعت سقوط پرتابه رو هم محاسبه میکنه

 

دانلود پروژه

|+|
نوشته شده توسط   در چهارشنبه پانزدهم آذر 1385 و ساعت 19:11
برای خودتان یک keyloger بسازید 
سلام دوست جون ها و غیر دوست جون های من

ما باید در هر چی به خود کفایی برسیم حتی در نوشتن  برنامه های کرکینگ به عنوان مثال من براتون دکلره کردن یه تابع مامانی در وی بی رو قرار می دم تا مثل باقلوائی که با لباتون بازی می کنه بتونین با هاش keyloger آخر حال و صفا و معرفت بنویسین. در ضمن به اولین نویسنده ی این keyloger جایزه میدم. از اینکه این دفعه به صورت لوس واری نوشتم عذر میخوام چون یه چیزایی در مورد عدم احساسات در وی بی گفته شده بود این هم فوران احساسات !!!!!! که این نبشته اصلا مشت محکمی به دهان اونها نیست گفته باشم باز بعدا جنجال درست نکنین ، در ضمن این شیوه نگارش یوند جدید احساس و کامیوتره ، اینم یه نمونه ی دیگه : عزیزانم امشب بعد از فوران شدید احساساتم  در حالی که وبلاگ را با شب شعر اشتباه گرفته بودم ( البته روی سخنم با شخص خاصی نیست ) در ادامه مطلب آن نازنین رعنا را قرار دادم ، ادامه ی مطلب رو داشته باشین :


ادامه مطلب
|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در دوشنبه بیست و دوم آبان 1385 و ساعت 19:32
پیدا کردن فولدر ویندوز 

با استفاده از این تابع میتونین فولدر نصب ویندوز ویندوز رو پیدا کنین  

|+|
نوشته شده توسط   در پنجشنبه یازدهم آبان 1385 و ساعت 19:8
درج animation gif در vb6 
جهت قرار دادن تصاویر animation gif در پروژه ویژوال از این اکتیو ایکس استفاده کنین

به درد اونایی که پروژه متحرک سازی ترم پیش ورداشته بودن میخوره

در ضمن اکتیو ایکسش کرک شده است اگه مشکل داشتین بگین کله کرکرش رو بکنم

دریافت فایل AniGif.zip

|+|
نوشته شده توسط   در جمعه پنجم آبان 1385 و ساعت 11:45
10 زبان برنامه نویسی که باید آموخت  
سایت eWeek با یکی از برنامه نویسان باسابقه با نام Wayne Duqaine که هم اکنون بخش توسعه نرم افزار کمپانی Grandview Systems در ایالت کالیفرنیا است گفتوگویی انجام داده , او در این گفتگو توصیه می کند که برنامه نویسان نباید خود را منحصر به یادگیری و کار در یک زبان خاص بکنند وی که بیش از 30 سال تجربه برنامه نویسی دارد 10 زبان را برای یادگیری برای برنامه نویسان همراه با دلیل توصیه می کند.
(آمار قسمت شغل های موجود برای یک زبان با توجه به آمار سایت Dice.com می باشد)

ادامه مطلب
|+|
نوشته شده توسط   در پنجشنبه چهارم آبان 1385 و ساعت 11:53
ابزارهای برنامه نویسی 

جهت لود کردن کی بورد فارسی این کد رو ابتدای برنامه کپی کنین

مبدل تاریخ شمسی :

Shamsi DLL

نگارش 2.0.1

شمسي Dll يك مجموعه از توابع كتابخانه اي تحت يك فايل DLL است كه به برنامه نويسان امكان تبديل تاريخ سيستم را به تاريخ دقيق هجري شمسي داده و علاوه بر آن عملياتهاي محاسباتي متنوعي را بر روي تاريخهاي شمسي در اختيار آنان قرار مي دهد. دقت تابع تبديل تاريخ اين مجموعه فوق العاده بالا مي باشد و بر روي سالهاي كبيسه كاملا دقيق عمل مي كند.

درباره‌ي ShamsiDll    دانلود ShamsiDll

|+|
نوشته شده توسط   در سه شنبه دوم آبان 1385 و ساعت 21:25
استفاده از Label و TextBoxها  
 

مثالی ديگر و استفاده از Label و TextBoxها

فرض کنيد بخواهيم فرمی داشته باشيم که دارای دو Text Box (که در VB برای عمليات دريافت اطلاعات از کاربر (DataEntrq) معمولاً از اين کنترل استفاده می شود) برای درجه سيلسيوس و درجه فارنهايت باشد و توسط يک دکمه (و در واقع با فشردن آن توسط کاربر) مقداری که در Text box مربوط به درجه سيلسيوس نوشته شده بود را به فارنهايت تبديل کند و نتيجه را در Text Box مربوط به آن درج نمايد. (توجه: اگر  Cمقدار درجه برحسب سيلسيوس و F مقدار درجه برحسب فارنهايت باشد، تبديل سيلسيوس به فارنهايت از فرمول F=9/5 C+32 محاسبه می شود). شکل نهايی فرم را می توانيد در شکل 4 ببينيد.

figure 4

 

برای اين منظور، از جعبه ابزار (جعبه حاوی کنترلها) ، دو برچسب (Label) که در جعبه ابزار به شکل ديده می شود را بر روی فرم قرار می دهيم(برچسب(Label) ها در VB معمولاً زمانی استفاده می شود که بخواهيم بر روی فرم، عبارتی را به کاربر نشان دهيم که او قابليت تغيير آن را نداشته باشد.) آنها را بوسيله Drag & Drop به مکان دلخواه منتقل می کنيم و برای يکی از آن دو:

1-    مشخصه Name را به lblCelsius

2-    مشخصه Caption  را به Celsius

و برای ديگری:

1- مشخصه Name را به lblFahrenheit

2- مشخصه Caption را به Fahrenheit

تغيير می دهيم. توجه داريم که در نامگذاری Label ها با سه حرف اول lbl آغاز کرده ايم. همچنين توجه داريم که در شکل 4 ، بر روی فرم، عبارات Celsius و Fahrenheit در واقع همين دو Label هستند.

نکته: برای Label هايک مشخصه (Property) ديگر به نام Auto Size وجود دارد که اگر مقدار آن را به True تغيير دهيم، اندازه (size) آن به طور اتوماتيک به اندازه متن (caption) داخل آن خواهد شد و بنابراين معمولاً بهتر است اين مشخصه را نيز set کنيم.

حال دو Text Box (جعبه متن) در مقابل اين Label (Text Box ها در جعبه ابزار به شکل ديده می شوند، معمولاً برای نمايش و دريافت اطلاعات به طور توأم به کار می رود (بر عکس Label ها که فقط وظيفه نمايش اطلاعات را به عهده داشتند) و خصوصاً برای فرمهای DataEntrq (دريافتی اطلاعات) بسيار مناسب هستند. پروژه فعلی ما، نمونه ای کوچک از فرمهای DataEntrq است) و مناسب با هر يک از برچسب ها، برای يکی از آن دو Text Box :

1-    مشخصه Name رابه txtCelsius تغيير می دهيم.

2-    مشخصه Text را خالی می کنيم.

و برای ديگری:

1_ مشخصه Name را به txtFahrenheit تغيير می دهيم.

3-    مشخصه Text را خالی می کنيم.

واضح است که در نامگذاری TextBox ها نيز از قرارداد سه حرف اول متناسب با نوع شئ، استفاده کرديم و سه حرف اول آنها را txt گذاشتيم.

مشخصه Text در Textbox ها آن متنی است که داخل آن متنی است که داخل آن نوشته می شود(شبيه مشخصهCaption در Label ها) و چونقرار است کاربرما آن را وارد کند، آن را خالی (NULL) کرديم.

حال يک دکمه (Command button) نيز به فرم اضافه و:

1-    مشخصه Name را به cmdConvent

2-    مشخصه Caption را به convent

تغيير می دهيم.

خوب، ظاهر (Interface) برنامه آماده شد. حال به کدنويسی برای آن می پردازيم. اين اولين باری است که می خواهيم در زمان اجرا (Run Time) از مشخصه ای استفاده کنيم (مشخصه Text از txtCelsiusکه توسط کاربر وارد شده) و مشخصه ای را در اين حال (Run Time) تغيير دهيم (مشخصه Text ازtxtFahrenheit که بايد نتيجه را بنويسد)

در VB هنگام کدنويسی برای Run Time هر زمان بخواهيم از يک Object استفاده کنيم، کافی است نام (Name) آن را بنويسيم و اگر بخواهيم به يکی از مشخصه های آن دست يابيم، کافی است پس از نام آن يک نقطه (Dot) قرار دهيم و سپس نام مشخصه (Property) مورد نظر خورد را بنويسيم.

با توجه به اين مطلنب، ديگر نوشتن کدهای مثال فوق کار چندان دشواری نيست. اگر بر روی دکمه Convent (البته در Design Time ) دابل کليک نماييد، در اينصورت Procedure مربوط به رويدادِ(Event) کليک از آن باز می شود که کافی است در آن نوشته شود:

txtFahrenheit.Text = (9/5*txtCelsius.Text) + 32

يعنی Procedure بايد به شکل زير شود:

Private Sub cmdConvent_Click ()

     txtFahrenheit.Text = (9/5*txtCelsius.Text) +32

End Sub

واضح است که وقتي مشخصه Text از يک Text Box در سمت يک تساویِ جايگزينی قرار می گيرد، مقدار فعلی آن در عمليات شرکت می کند و وقتی اين مشخصه در سمت چپ اين جايگزين قرار می گيرد، مقادير محاسبه شده در آن قرار می گيرد.
بنابراين، Procedure فوق می گويد که وقتی بر روی دکمه Convent کليک شد، هر مقداری که کاربر، داخل جعبه Celsius نوشته باشد را در 9/5 ضرب و با32 جمع کن و مقدار نهايی را داخل جعبه مربوط به Fahrenheit بنويس.
اين برنامه را حتماً بنويسيد، آن را اجرا منيد و با نحوه استفاده از Property ها در اين کدنويسی بری Run Time آشنا شويد. در ادامه، بيشتر با اين نوع استفاده از Property ها (يعنی set کردن در کدنويسی بجای set کردن در پنجره Properties از Design Time) مواجه خواهيم شد. و مهم است که اين نوع استفاده را خوب درک کنيم.
نکته: مشخصه Text برایText Box ها و مشخصه Caption برای Label ها، مشخصه های پيش فرض آنها محسوب می شوند و اگر نام آنها را بدون هيچ مشخصه ای بنويسيمف اين مشخصه ها در نظر گرفته می شود، اذا مثلاً در Procedure بالا می توانستيم بجای txtCelsius.Text از خود txtCelsius نيز استفاده کنيم.
 

ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در دوشنبه سوم مهر 1385 و ساعت 13:1
یه سئوال 
سلام

چون جناب مفخم العلما از بنده خواسته بودن که مطالبی را هم در قالب ترفند آپ کنم بنده هم اجابت کرده و مطلب زیر به صورت یه برنامه گذاشتم تا ببینم کسی هست که بتونه اونو تحلیل کنه. هر کی این کار رو بکنه کارش دویسته.

اینم لینک دانلود برنامه :

سورس کد و برنامه را دانلود کنید

آرزوی موفقییت واسه همتون دارم.

ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در یکشنبه دوم مهر 1385 و ساعت 14:52
اولین پروژه اولین تجربه با ویژوال 

اولين پروژه و آشنايی با برنامه نويسی بوسيله VB

به عنوان اولين پروژه، قصد داريم فرمی داشته باشيم با دو دکمه Message و Exit که اگر در دکمه Message کليک شد، پيغامی نمايش داده شود و اگر دکمه Exit کليک شد از برنامه خارج شود(شکل3):

Figure 3

ابتدا فرمی که بر روی صفحه نمايش باز است (فعلاً به نام Form 1 ) را به اندازه دلخواه در می آوريم و در حالی که Select است، از پنجره Properties (سمت راست تصوير) ، مشخصه (Property) های زير را چنين Set می کنيم:

1-    مشخصه Name آن را به frmFirstProject تغيير می دهيم.

2-    مشخصه Caption آن را به First Project تغيير می دهيم.

مشخصه Caption معمولاً عنوانها را تغيير می دهد. مثلاً در مورد فرمها، آنچه در اين مشخصه Set شود در Title Bar از آن فرم ديده می شود يا در مورد دکمه ها، آنچه در اين مشخصه قرار داده شود، آن چيزی است که بر روی دکمه ( به عنوان نام دکمه ای که ُکاربر می بيند) ديده می شود.

مشخصه Name يکی از مهمترين مشخصه هايی است که بايد برای تمام کنترلها Set شود. آنچه در اين مشخصه قرار گيرد، نامی است که VB آن کنترل را به اين نام می شناسد (و خصوصاً در هنگام کدنويسی و برای دسترسی به کنترلها، بسيار مورد استفاده واقع می شود). به طور پيش فرض VB برای هر کنترل يک Name در نظر می گيرد، اما در پروژه های واقعی ، معمولاً تعداد کنترلها آنقدر زياد می شوند که نامهای پيش فرض به سختی در ذهن می ماند. برای اين منظور بهتر است به کنترلها، نامهايی را نسبت دهيم که از جهتی با او متناسب باشد. لذا بهتر است اولاً در نام آنها چيزی باشد که نشان از نوع آن کنترل باشد و عبارتی نيز باشد که بيانگر موضوع يا کار فعلی آن باشد. به عنوان مثال شما می بينيد که ما در مشخصه Name از form ، گفتيم که قرار دهيم: frmFirstProject که frm به خاطر تشخيص Form بودن آن است و First Project به خاطر تشخيص اينکه اين فرم برای First Project است. يا مثلاً به فرض اگر بخواهيم دکمه ای به نام Exit بر روی فرمی داشته باشيم، من ترجيح می دهم که نام آن را cmdExit بگذارم که cmd را از Command Button گرفته ام. توجه داريم که اين نامی است که VB آن را می شناسد وگرنه برای زيبايی کار Caption اين دکمه را همان Exit می گذاريم و اين نام گذاری به زيبايی پروژه ما لطمه ای وارد نمی کند.

برای ادامه، دو دکمه (Command Button) بر روی فرم قرار می دهيم (که برای اين منظور از پنجره Controlها که در سمت چپ تصوير است، کنترل Command Button به شکل را دابل کليک می کنيم و يا با يک Click و انتخاب آن، بر روی فرم، به اندازه دلخواه Drag & Drop می کنيم) و جای آنها را به مکان دلخواه مورد نظر (به وسيله Drag & Drop آنها) تغيير می دهيم. آنگاه برای يکی از آنها:

1-    مشخصه Name را به cmdMessage تغيير می دهيم.

2-    مشخصه Caption را به Message تغيير می دهيم.

و برای ديگری تغيير می دهيم:

1- مشخصه Name را به cmdExit .

2- مشخصه Caption را به Exit .

که پس از اين، شمای ظاهری (Interface) برنامه کامل شده است و بايد به کدنويسي آن پرداخت.

اگر بر روی دکمه Exit دابل کليک کنيد (البته هنوز در Design Time هستيم و نه Run TimeEvent Procedure مربوط به رويداد Click (Event) از آن را به صورت زير باز می کند:

Private Sub cmdExit_Click ()

 End Sub

که هر دستوری که در اين Procedure (يعنی بين خط Private و خط End Sub) نوشته شود، در زمان اجرا، وقتی کاربر روی دکمه Exit کليک می کند، اين دستورات اجرا خواهند شد.

دستوری که بايد در cmdExit_Click نوشته شود بسيار ساده است:

Private Sub cmdExit_Click ()

     End

End Sub

دستور End هر جايی از برنامه که اجرا شود فوراً اجرای برنامه را متوقف و از آن خارج می شود.

حال اگر به ترتيبی که در بالا ذکر شد، Event Procedure مربوط به رويداد click از دکمه Message را نيز باز می کنيم و آن را به صورت زير تغيير می دهيم:

Private Sub cmd, Message - Click

     MsgBox “The first project was done successful” و و  “Thanks”

End Sub

پروژه مورد نظر آماده شده شده است. دستور MsgBox (مخفف Message Box )باعث می شود تا يک کادر پيغام بر روی صفحه نمايش ظاهر شود و تا زمانی که دکمه OK از آن را فشار دهيم، پيغامی را نمايش دهد. در اين دستور پارامتر اول، پيغام مورد نظر را به صورت string (يک داده متنی) دريافت مي کند (در VB هر عبارتی که بين دو علامت " " قرار گيرد، string فرض می شود) و پارامتر سوم نيز به عنوان Message Box (که در Title Bar آن آورده خواهد شد) را به صورت متنی دريافت می کند. توجه داريم که بين هر دو پارامتر از علامت کاما (,) استفاده می کنيم و بنابراين در دستور MsgBox برنامه مان برای اينکه پس از پارامتر اول، پارامتر سوم را وارد کنيم بين آن دو پارامتر، دو بار کاما گذاشته ايم.

حال برنامه تان را اجرا کنيد و نتيجه کار را ببينيد (اجرای برنامه در VB توسط کليد F5 صورت می گيرد.

ذکر چند نکته:

1-    اگر بخواهيد فشردن ALT+X همان عمل دکمه Exit را انجام دهد(ايجاد(Hot key) ، کافی است در Caption اين دکمه چنين بنويسيد: E&xit که در اين صورت در زمان اجرا، زير حرف x يک underline (زير خط) می کشد که در ويندوز اين حالت نشانگرHot key داشتن آن حرف است ، همين کار را هم در مورد دکمه Message انجام دهيد.

2-    در هنگام کدنويسي اگر چند حرف اول يک کلمه شناخته شده VB (مانند نام کنترلها و يا Property ها، Method ها و ...) را بنويسيم و CTRL+Space را فشار دهيم، اگر تنها يک کلمه با حرف اول برابر آنچه شما نوشته ايد پيدا کند، بقيه حروف را خود، کامل می کند و اگر تعدادی کلمه با اين مشخصات پيدا کند، ليست آنها را نمايش می دهد که می توانيد يا يکی از آنها را انتخاب کنيد (بر روی کلمه از ليست برويد و کليد space را بزنيد) و يا تعدادی از حروف آن را بنويسيد تا محدوده کلمات مشابه کوتاهتر شود. اين کار را حتماً امتحان کنيد!

3-    زمانی که يک فرم باز می شود، به ترتيب چهار Event بر روی آن رخ می دهد:

  Initialize 

Load

 Activate

 Got focus

که زمانی که رويداد اول رخ می دهد، هنوز object های روی فرم ايجاد نشده اند و قابل دسترسی نيستند. اين object ها در load ساخته می شوند، اما هنوز فرم نمايش داده نشده است. وقتی فرم نمايش داده می شود، رويداد Activate و وقتیfocus به آن داده می شود، رويداد Got focus روی مي دهد. (منظور از گرفتن focus اينست که آن کنترل خاص که در اينجا فرم است، کانون تمام پيامها شود، مثلاً اگر کليدی زده شد به آن فرستاده شود و ...).

4-    برای ذخيره کردن پروژه از منوی فايل و گزينه Save استفاده می شود که بايد تمام فرمها، ماژولها، ... و اصل پروژه را جداگانه ذخيره کرد. لذا اگر شما برنامه First Project راsave کنيد، يکبار نام فرم را save می کند (با پسوند.frm) و يکبار فايل پروژه را (با پسوند.VBP).

ارادتمند شما مهرگان ایرانی
|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در جمعه سی و یکم شهریور 1385 و ساعت 20:32
<marquee behavior="alternate" direction="right">مبانی ویژوال بیسیک</marquee> 
 

مفاهيم بنيادی

درVB، شئ (Object) های بسياری وجود دارد مانند فرمها، دکمه ها، برچسب ها، تصاوير و ... . همانطور که می دانيم هر شئ(Object) دارای يک سری مشخصات(Properties) می باشد. به عنوان مثال اگر يک اتومبيل را به عنوان يک شئ در نظر بگيريم، اين اتومبيل دارای مشخصاتي چون رنگ خاص، وزن خاص، طول و عرض و ارتفاع خاص، ميزان خاص مصرف بنزين و ... می باشد که در تمايز دو اتومبيل از هم، همين مشخصات هستند که به ما کمک می کنند.
درVB نيز هر Object دارای يک تعداد مشخصه (Property) می باشد. به عنوان مثال يک دکمه(Button) دارای مشخصاتی چون عرض(Width) و ارتفاع(Height) خاص و يا يک عنوان(Caption) خاص و ... می باشد.
برخی شئ(object) ها درVB، فقط در کدنويسي قابل دسترسی هستند(مانند شئADODB که در آينده با آن آشنا خواهيد شد) اما برخی ديگر علاوه بر زمان کدنويسي، در زمان طراحی (Design) نيز می توان آنها را بر روی فرمها و در جای دلخواه قرار داد و آنها را تنظيم (Set) نمود. به اشياء نوع اخير، کنترل (Control) گفته می شود.
کنترل ها خود دو گونه اند، برخی علاوه بر زمان طراحی (Design) در زمان اجرا (Run Time) نيز ديده می شوند، به اين نوع کنترل در اصطلاح(Visual Control) VCL گفته می شود که بيشترين انواع کنترلها را در بر می گيرند (مانند دکمه ها، جدولها، برچسبها و بسياری ديگر که در ادامه خواهند آمد) اما برخی ديگر از کنترل ها فقط در هنگام طراحی (Design) ديده می شوند و در هنگام اجرا تنها عمل خاصی انجام می دهند و خود ديده نمی شوند (مانند کنترلTimer)، به اين نوع کنترلها،Non-Visual Control گفته می شود. بايد توجه داشته باشيدکه کنترلهایNon-Visual، ذاتاً درRun Time ديده نمی شوند ولی ممکن است بنابر نيازی و در زمانی خاص از اجرا، خودمان برای يک يا چند VCL نيز مقدار مشخصه Visual آنها را برابرFalse قرار دهيم که مسلماً در اين حالت با وجود اينکه در آن زمان، اين کنترلها ديده نمی شوند ولی VCL بودن آنها تغييری نکرده است.
کنترل ها (اعم ازVCL ها و غير آن) معمولاً دارای تعدادی Event می باشند. Event ، رويداد يا رخدادی است که توسط کاربر و معمولاً با استفاده از ماوس يا صفحه کليد برای يک کنترل خاص روی می دهد.مثلاً يک کنترل ممکن است دارای رويداد (Event) Click باشدکه اين نوع رويداد زمانی که کاربر در هنگام اجرای برنامه (Run Time) بر روی آن کنترل خاص کليک نمايد رخ می دهد.برخی Event های معمول ديگر برای کنترلها عبارتند از: DoubleClick (زمانی که بر روی آن کنترل دابل کليک شود) ، MouseMove (زمانی که نشانگر ماوس بر روی آن کنترل قرار دارد) ، KeyPress (زمانی که کليدی از صفحه کليد زده شد) ، KeyDown (زمانی که کليدی از صفحه کليد پايين بود) ، KeyUp (زمانی که کليد زده شده برداشته شد) ، MouseDown ، MouseUp و ... که در ادامه با آنها بيشتر آشنا خواهيم شد.
برای هر Event (رويداد) می توان يک Event Procedure داشت. Event Procedure پاسخی است که يک کنترل زمانی که يک Event رخ می دهد، از خود نشان می دهد. در واقع Event قطعه برنامه ای است که زمانی که بر روی يک کنترل، يک Event رخ می دهد، به طور اتوماتيک اجرا می شود.
کنترلها معمولاً علاوه بر يک سری مشخصات (Properties) و يک سری رويداد (Event) ، دارای تعدادی نيز متد (Method) می باشد. متدها عملياتهای تعريف شده ای هستند که توسط آنها يک عمل خاص بر روی کنترلها انجام می شود.
توجه داريم که تفاوت متدها و Event Procedure ها در اين است که متدها توسط VB ، شناخته شده اند و عملشان هميشه ثابت است، اما Event Procedure ها توسط برنامه نويس و به دلخواه او تهيه می شود، بنابراين Method های مشابه بر روی کنترلهای متفاوت، پاسخ مشابهی دارد ولی ممکن است Event های مشابه بر روی کنترلهای متفاوت با توجه به Event Procedure های مخصوص هر يک، متفاوت باشد (مثلاً رويداد Click برای يک کنترل، کاری انجام دهد و برای کنترلی ديگر، کاری ديگر).
نکته ديگری که بايد به آن توجه داشت اينست که Procedure ها به طور مستقيم اجرا نمی شوند بلکه فقط زمانی که نامشان فراخوانی شود اجرا می شوند. بنابراين مثلاً در مورد Event Procedure ها بايد بدانيم که با اينکه کد مربوط به آنها نوشته شده است ولی تا وقتی که آن Event خاص (که باعث فرا خوانی Event Procedure مربوط می شود) روی ندهد، اين کدها اجرا نخواهند شد.
 

ارادتمند شما مهرگان ایرانی
|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در سه شنبه بیست و هشتم شهریور 1385 و ساعت 16:35
این خود گویای همه چیز است و خود ناچیز .... 

معرفی بخشهای VB

هنگامی که VB اجرا می شود، توسط پنجره ای (شکل1)، نوع پروژه ای که می خواهيد طراحی کنيد از شما خواسته می شود.

Figure 1

همان طور که ملاحظه می فرماييد، انواع مختلفی از پروژه ها در اين پنجره وجود دارد که در ادامه به برخی از آنها خواهيم پرداخت، ولی فعلاً نوع استاندارد پروژه های VB يعنی نوع Standard EXE را انتخاب و آن را باز(Open) می کنيم. اين نوع پروژه (که غالب پروژه ها را در بر می گيرد) برای تهيه برنامه های کاربردی(Applications) مورد استفاده قرار می گيرد.
پس از باز کردن پروژهStandard Exe ، پنجره اصلیVB (شکل 2 ) برای اين نوع پروژه باز می شود:
 


figure 2

اين پنجره، علاوه بر آنچه عموماً در پنجره های ويندوز می بينيم (مانند Title Bar وMenu Bar)، شامل چند بخش بسيار مهم می باشد:
1- يک فرم(Form) خالی با عنوان (Caption)برابر Form1 وجود دارد. اين همان فرمی است که بلافاصله پس از اجرا (Run) شدن برنامه، روی صفحه نمايش، قرار می گيرد (اين پيش فرض قابل تغيير است).
2- نوار ابزار Standard Buttons که دکمه هايی با کاربرد معمولاً بيشتر را شامل می شود. تعدادی از اين دکمه ها را در ويندوز می شناسيد (مانند Copy, Paste, Undo, Redo, Open وSave) و برخی ديگر را در ادامه خواهيم ديد.
3- پنجره ای سمت چپ تصوير ديده می شود. اين پنجره شامل برخی از کاربردي ترين کنترلهای قابل ديدن (VCL) می باشد. در ادامه با VCLها آشنا خواهيم شد و از آنها بسيار بهره خواهيم برد. به اين پنجره Tool Bar (جعبه ابزار) گفته می شود.
4- در سمت راست تصوير سه پنجره ديگر ديده می شود. در بالا، پنجره پروژه (Project)، سپس پنجره مشخصات(Properties) و در پايين، پنجرهForm Layout قرار دارد. پنجرهProject شامل نام تمام اجزای پروژه مانند فرمها، ماژولها(Moduls)،Activex ها و ... می باشد. مثلاً اگر در پروژه ای چند فرم وجود داشته باشد و بخواهيم به فرم ديگری برويم، کافی است نام آن را در اين پنجره دابل کليک نماييم. پنجره Properties، برخی از مشخصه(Property) های مربوط به VCL ای که انتخاب شده (Select) باشد را نمايش می دهد که می توان آنها را در هنگام طراحی(Design Time) تغيير داد (ساير مشخصه ها بايد در هنگام اجرا(Run Time) تنظيم شوند.) در پنجرهForm Layout نيز می توان مکان قرار گيری Form هنگام اجرای برنامه(Run Time) بر روی صفحه نمايش را تعيين کرد (همچنين اين کار را توسط کدنويسي نيز می توان انجام داد و عموماً همين روش هم توصيه می شود و لذا عموماً حتی می توان اين پنجره را به کل بست).
در اين بخش با شمای کلیVB آشنا شديم، در ادامه درباره VCL ها و نحوه کدنويسي برای آنها مطالب مفيدی خواهيم آموخت.
 

 

ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در شنبه بیست و پنجم شهریور 1385 و ساعت 19:59
آشنائی با بعضی اصطلاحات در ویژوال بیسیک 
visual basic یکی از مجموعه نرم افزارهای visual studio می باشد..visual studio حاوی نرم افزارهای دیگری مثل visual c ، visual InterDev ، visual dBase و چند نرم افزار دیگر می باشد.
ویژال بیسیکرو باز کنید. در ابتدا پنجره New Project باز می شود. این پنجره برای انتخاب نوع پروژه ای است که می خواهیم انجام دهیم. در شما Standard EXE رو باز کنید.Standard EXE همان فایل های اجرایی ویندوز می باشد که توسط سیستم عامل اجرا می شوند.
به زبانه New باز گردید و Standard EXE را انتخاب کرده و دکمه Open را بفشارید. حالا وارد مرحله Design یا طراحی برنامه شده اید.
در قسمت وسط صفحه نمایش یک فرم قرار دارد که این فرم محیط کاری ما می باشد.
در سمت راست بالای صفحه پنجره Project Explorer مشاهده می شود. این پنجره تمام بخش های برنامه را به تفکیک به شما نشان می دهد و به راحتی با دو بار کلیک روی نام فرم یا ماجول یا کلاس و یا هر شیء دیگر می توانید به آن دسترسی پیدا کنید. در قسمت بالای Project Explorer چند دکمه وجود دارد:
دکمه View Code : اگر این دکمه را بفشارید به قسمت کد برنامه وارد می شوید. البته با دو بار کلیک بر روی فرم و یا هر شیء دیگر نیز می توانید به این جا وارد شوید. (قسمت کد بعدا توضیح داده می شود)
دکمه View Object : اگر در قسمت کد برنامه باشید با زدن این دکمه به راحتی به قسمت طراحی برنامه باز می گردید.
دکمه Toggle Folders : اگر این دکمه فشرده باشد اشیاء درون Project Explorer به صورت پوشه بندی از هم جدا می شوند و در غیر این صورت تمام آنها در یک ردیف قرار می گیرند. (می توانید امتحان کنید.)
می توانید بر روی Project Explorer کلیک راست کنید تا گزینه های مختلف آن را مشاهده کنید. یکی از این گزینه ها Add می باشد که می توانید در صورت لزوم اشیاء دیگری را به برنامه تان اضافه کنید.

در قسمت پایین پنجره Project Explorer پنجره Properties می باشد. این پنجره تمام خصوصیات هر شیء را که انتخاب شده باشد به دو صورت الفبایی و طبقه بندی شده نشان می دهد. هر کدام از این خصوصیات بعدا توضیح داده می شود.
در سمت راست پایین صفحه پنجره Form Layout قرار دارد. این پنجره محل قرار گیری فرم را در زمان اجرا روی مانیتور نشان می دهد. با استفاده از Drag & Drop می توانید محل فرم را تغییر دهید. همچنین با کلیک راست روی این پنجره در قسمت Startup Position چند حالت مختلف برای شما در نظر گرفته شده است.
اگر گزینه Manual انتخاب شده باشد فرم در همان قسمتی از صفحه قرار می گیرد که شما آن را با Drag & Drop مشخص کرده بودید.
اگر گزینه Center Owner انتخب شده باشد فرم در قسمت مرکز فرم والد قرار می گیرد. می توان در vb فرم ها را به والد و فرزند تبدیل کرد.
اگر گزینه Center Screen انتخاب شده باشد فرم در زمان اجرا در مرکز صفحه نمایش قرار می گیرد.
اگر گزینه Windows Default انتخاب شده باشد فرم در هر بار اجرا به صورت تصادفی در یک جایی از صفحه قرار می گیرد.

و سرانجام در سمت چپ صفحه پنجره Toolbox قرار دارد.(جعبه ابزار)
این پنجره حاوی تمام کنترل هایی است که در طراحی برنامه از آنها استفاده می کنیم. هر کدام از آنها و بعضی از خصوصیات مهم آنها به اختصار توضیح داده می شود.

کنترل PictureBox :
از این کنترل معمولا برای نمایش عکس روی فرم استفاده می شود.
خاصیت Name : این خاصیت که برای تمام اشیاء وجود دارد نامی است که با آن اسم به آن شی دسترسی پیدا می کنیم.
خاصیت Align : این خاصیت چگونگی قرار گیری شیء را روی فرم مشخص می کند.(بالا ، پایین ،...)
خاصیت Appearance : که وضعیت نمایش را به دو صورت سه بعدی و مسطح نشان می دهد.
خاصیت AutoSize : اگر این خاصیت برابر True باشد طول و عرض PictureBox به اندازه طول و عرض عکس داخل آن در می آید.
خاصیت Backcolor : رنگ پیش زمینه جعبه عکس را تعیین می کند.
خاصیت Height : ارتفاع شیء را مشخص می کند.
خاصیت Left : مقدار فاصله شیء از سمت چپ فرم می باشد.
خاصیت Picture : با استفاده از این خاصیت می توانید یک فایل عکس را در جعبه عکس قرار دهید.
خاصیت ToolTipText : هر متنی را که در این قسمت بنویسید هنگامی که در زمان اجرا ماوس را روی شیء حرکت دهید این متن به صورت pop-up ظاهر می شود.
خاصیت Top : مقدار فاصله شیء از بالای فرم می باشد.

خاصیت Visible : اگر این خاصیت برابر False باشد شیء در زمان اجرا نمایش داده نمی شود.
خاصیت Width : عرض شیء را مشخص می کند.


کنترل Label :
از این کنترل معمولا برای نمایش یک متن که قابل تغییر به وسیله کاربر نباشد استفاده می شود.
خاصیت BackStyle : دو نوع برای پیش زمینه برچسب دارد. Transparent (شفاف) و Opaque (مات)
خاصیت Caption : هر متنی که در این خاصیت نوشته شود درون برچسب نمایش می یابد.
خاصیت Font : می توانید نوع قلم (Font) مورد نظر خود را برای نوشتن متن انتخاب کنید.
خاصیت ForeColor : تعیین رنگ خط
خاصیت MouseIcon : می توانید برای کرسر ماوس خود از شکل های دلخواه خود استفاده کنید. در این صورت باید خاصیت MousePointer را به شماره 99-Custom تغییر دهید.

کنترل TextBox :
از این کنترل معمولا برای وارد کردن یک مقدار خاص به وسیله کاربر استفاده می شود.(مثلا وارد کردن اسم کاربر)
خاصیت Locked : اگر برابر True باشد کاربر مجاز به تغییر متن داخل جعبه در زمان اجرا نمی باشد.
خاصیت MaxLength : اگر مقدار آن صفر باشد هیچ محدودیتی در طول متن وجود ندارد ولی اگر مثلا مقدار آن 5 انتخاب شده باشد کاربر نمی تواند بیش از 5 کاراکتر را وارد کند.
خاصیت MultiLine : اگر برابر True باشد در زمان اجرا با زدن کلید Enter در جعبه ، مکان نما به خط بعد منتقل می شود ولی اگر False باشد تمام متن فقط در یک خط نوشته می شود.
خاصیت PasswordChar : اگر یک کاراکتر را در این خاصیت مشخص کنیم در زمان اجرا هر کاراکتری که به وسیله کاربر زده شود فقط همین کاراکتر نمایش می یابد.(از این خاصیت برای جعبه های ورود رمز (Password) استفاده می شود)
خاصیت ScrollBars : اگر متن ورودی بیشتر از طول و یا عرض جعبه متن باشد به Scroll Bars نیاز داریم. اگر مقدار آن صفر باشد غیر فعال ، یک : افقی ، دو : عمودی ، سه : هم افقی و هم عمودی.
خاصیت Text : از این خاصیت برای نوشتن متنی درون جعبه استفاده می شود.

کنترل Frame :
از این کنترل برای جدا کردن خواص مختلف در روی فرم استفاده می شود. می توانید اشیاء خود را دسته بندی کرده و هر گروه را روی قاب جداگانه ای قرار دهید.

کنترل CommandButton :
احتمالا که نه حتما این کنترل را در ویندوز دیده اید. برای انجام عملیات خاصی با نظر کاربر از این شیء استفاده می شود. هرگاه در زمان اجرا این شیء یا به وسیله ماوس یا به وسیله کیبورد فشرده شود دستورات درون آن اجرا می شوند.
خاصیت Cancel : اگر برابر True باشد دستورات این دکمه هنگامی که دکمه Esc از صفحه کلید فشرده شود نیز اجرا می شوند. فقط یکی از دکمه های روی فرم می توانند این خاصیت را به صورت فعال داشته باشند.
خاصیت Caption : متن روی دکمه را مشخص می کند.
خاصیت Default : اگر برابر True باشد این دکمه به عنوان دکمه پیش به حساب می آید و اگر حتی مکان نما هم در روی شیء دیگری باشد و کلید Enter فشرده شود دستورات درون این دکمه اجرا می شوند. در انجا هم فقط یکی از دکمه های روی فرم می توانند این خاصیت را به صورت فعال داشته باشند.
خاصیت Enabled : اگر برابر False باشد دکمه غیر فعال است (خاموش است) و نمی توان آن را فشرد.

کنترل CheckBox :
از این کنترل می توان برای انتخاب یک حالت از دو حالت ممکن استفاده کرد.این کنترل تداعی گر متغییر منطقی می باشد.
خاصیت Value : که وضعیت ابتدایی دکمه را مشخص می کند. صفر : Unchecked یا انتخاب نشده ، یک : Checked یا انتخاب شده و دو : Grayed یا خاکستری شده.
از Grayed زمانی استفاده می شود که انتخاب ما شرط دار است.مثلا در Setup ویندوز اگر گزینه ای را که انتخاب می کنید تمام زیر مجموعه های آن انتخاب نشده باشد آنگاه به صورت Grayed نمایش می یابد.

کنترل OptionButton :
از این کنترل برای انتخاب یک گزینه از بین چند گزینه استفاده می شود. اگر چند گروه از این دکمه ها را برای عملیات مختلف استفاده می کنید باید هر گروه را درون یک Frame جداگانه قرار دهید.
خاصیت Value : دو مقدار True برای انتخاب شده و False برای انتخاب نشده دارد.

کنترل ComboBox :
از این کنترل بیشتر برای انتخاب یک گزینه از میان چند گزینه استفاده می شود.
خاصیت Sorted : اگر برابر True باشد مقادیری که در Combo Box قرار می گیرند بر اساس حروف الفبا مرتب می شوند.
خاصیت Text : متنی است که در روی Combo Box نمایش می یابد.

کنترل ListBox :
از این کنترل برای نمایش لیستی از اشیاء استفاده می شود.
خاصیت List : برای پر کردن لیست در زمان طراحی می باشد.
خاصیت MultiSelect : صفر : نمی توانید بیش از یک گزینه را انتخاب کنید. یک : Simple به سادگی اگر بر روی هر گزینه کلیک کنید آن گزینه به جمع انتخاب شده ها افزوده می شود. دو : Extended شما می توانید با پایین نگه داشتن کلید Ctrl چندین انتخاب داشته باشید. همچنین با پایین نگه داشتن کلید Shift می توانید یک محدوده را انتخاب کنید.
خاصیت Style : اگر برابر 1 باشد برای هر گزینه یک CheckBox در لیست در نظر گرفته می شود.

کنترل های HScrollBar (افقی) و VScrollBar (عمودی) :
این کنترل ها استفاده های مختلفی دارند. مثلا اگر کنترل های روی فرم در طول و عرض تعیین شده جا نشوند می توان از این کنترل ها استفاده کرد.(البته احتیاج به نوشتن کد دارد)
خاصیت LargeChange و SmallChange : عددی را مشخص می کند که با هر بار تکان دادن مکان نما به آن اندازه تغییر می کند
خاصیت Min و Max : کمترین و بیشترین مقدار ScrllBar را تعیین می کند.

کنترل Timer :
Timer کنترلی است که کار های تکراری را در بازه زمانی دلخواه انجام می دهد.
خاصیت Enabled : اگر برابر True باشد Timer فعال است و دستورات داخل آن به صورت مکرر در بازه معلوم انجام می شود.
خاصیت Interval : بازه زمانی Timer را بر حسب میلی ثانیه تعیین می کند. مثلا اگر این خاصیت را برابر 1000 تنظیم کنید عملیات با بازه یک ثانیه انجام می شوند.

کنترل DriveListBox :
این کنترل تمامی درایو های موجود در روی سیستم را نشان می دهد.

کنترل DirListBox :
این کنترل برای نمایش پوشه های موجود در یک درایو می باشد.

کنترل FileListBox :
این کنترل برای نمایش فایل های موجود در یک درایو می باشد.
خاصیت Pattern : این خاصیت برای تعیین نام و پسوند فایل به کار می رود. مثلا *.* تمامی فایل ها با هر پسوندی را نشان می دهد.
خاصیت Normal,System,ReadOnly : این خواص تعیین کننده صفت فایل ها می باشد. به طوری که اگر هر کدام برابر True باشند فایل هایی با آن صفت نمایش می یابند.

کنترل Shape :
از این کنترل برای نمایش اشکال خاصی استفاده می شود.
خاصیت BorderStyle : نوع خط دور شکل را مشخص می کند.(خط تیره،نقطه و ...)
خاصیت BorderWidth : عددی است که پهنای خط دور را تعیین می کند.
خاصیت Shape : نوع شکل را مشخص می کند.(0:مستطیل ، 1: مربع ، 2: بیضی ، 3: دایره ، 4: مستطیل دور گرد ، 5: مربع دور گرد)

کنترل Line :
از این کنترل برای کشیدن خط به کار می رود.
خاصیت X1: مختصات x ابتدای خط
خاصیت X2: مختصات x انتهای خط
خاصیت Y1: مختصات y انتدای خط
خاصیت Y2: مختصات غ انتهای خط

کنترل Image :
از این کنترل نیز برای نمایش عکس استفاده می شود.
خاصیت Stretch : اگر برابر True باشد هنگامی که Image را Resize می کنید عکس نیز با توجه به آن تغییر اندازه می دهد.

کنترل Data :
این کنترل از امکانات جالب vb می باشد که دسترسی به بانک های اطلاعاتی را به سادگی امکان پذیر می کند.
خصوصیات این کنترل به عنوان یک مثال جامع بعدا توضیح داده می شود.

کنترل OlE(Object Linking and Embedding) :
استاندارد مایکروسافت که اجازه می دهد اشیاء در یک برنامه ساخته شوند و درون برنامه دیگر جاسازی شوند (استفاده از یک پیوند زنده). این جمله تعریفی بود که از OLE در دیکشنری Babylon آورده شده بود.
با استفاده از OLE می توانید اشیائی را از دیگر برنامه ها وارد برنامه خود کنید. خوب فعلا به این کار نداشته باشید چون فعلا لازم تون نمیشه ای از درس امروز تا بعد درسی که بهتون دادم حتما بخونید .

فرموده بودن که بهتره زودتر شروع کنیم اینم زودتر. آرزوی موفقییت واسه همه دارم.لطفا اطلاعات فوق روذخیره کنین و همیشه در دسترس خودتون داشته باشین چون همیشه به دردتون می خوره.

ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در سه شنبه بیست و یکم شهریور 1385 و ساعت 22:3
سلام این دفعه از " ب " بسم الله شروع می کنم نون والضالینش با شما !! 
 

معرفی بخشهای VB

 visual Basic (که زين پس آن را VB خواهيم خواند) از زبانهای برنامه نويسی تحت Windows  می باشد که برای کدنويسی از دستورات زبان Basic سود می برد.

VB (مانند تمام زبانهای برنامه نويسی تحت ويندوز) با استفاده از تمام امکانات زيبای ويندوز (که باعث فراگيرشدن اين سيستم عامل زيبا و توانمند در ميان کاربران شده است)، طراحی محيطی زيبا و قدرتمند را برای  پروژه مورد نظر، بسيار ساده می نمايد.

در حال حاضر، به جرأت می توان گفت که يکی از انتخاب های اصلي برنامه نويسان حرفه ای در سطح جهان برای تهيه پروژه های با قابليت های ويژه، VB می باشد، خصوصاً از VB6 که مايکروسافت عملاً با افزودن توانايی های متنوع بسيار به VB، حتی حاضر شد از ديگر زبانهای معروف تحت ويندوز خود مانند Visual C++ و Visual Foxpro بگذرد و سعی در هدايت تمام برنامه نويسان به سوی VB داشته باشد.

در حال حاضر که به تهيه اين جزوه همت گماردم، نسخه آزمايشی VB.net در بازار وجود دارد ولی عموماً برنامه نويسان ازVB6 استفاده می کنند و لذا ما نيز اين نسخه ازVB را برای آموزش انتخاب می کنيم، هر چند تمام خوانندگان عزيز می دانند که عموماً با فراگيری يک نسخه از يک برنامه، فراگيری نسخه های بعدی آن کار چندان دشواری نخواهد بود.

خوانندگان عزيز توجه داشته باشند که برای فراگيریVB، آشنايی با ويندوز و Basic لازم است. همچنين بهتر است در هنگام مطالعه، VB باز باشد و مطالب را در همان لحظه کار کنند

ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در جمعه هفدهم شهریور 1385 و ساعت 21:49
معرفی اکتیو ایکس 

چند اكتيو ايكس مفيد رو معرفي مي كنم . از قبيل فارسي نويس TextBox ها  - تغيير افكتها و ...



بنام خدا

سلام . برای شروع تصمیم گرفتم یکسری از اکتیو ایکسهای مفید رو بگذارم . امیدوارم بدردتون بخوره :

1- Copy-Past : حجم 5 کیلوبایت

2- FontPicker : حجم 65 کیلوبایت ( برای تغییرات در نوع ، اندازه و رنگ فونتها)

3- Gradient  : حجم 20 کیلوبایت ( تغییر افکت در پس زمینه فرم )

4- Gradientbar  : حجم 23 کیلوبایت

5- Gradientlabel   : حجم 17 کیلوبایت

6- HoverButton : حجم 26 کیلوبایت ( یک Button  جدید )

7- IDAutomation_LinearActiveXDEMO  : حجم 305 کیلوبایت ( برای درج بارکد. البته نسخه آزمایشی می باشد )

8- multi : حجم 15 کیلوبایت

9- Quickload : حجم 6 کیلوبایت

10 - VFOutBar : حجم 44 کیلوبایت ( Bar های جالب مانند Outlook )

11- FarsiTB : حجم 32 کیلوبایت ( در مورد این OCX این توضیح رو بدم که یک اکتیو ایکس TextBox فارسی است و به همراه آن فونتی که در داخل فایل Zip شده هست رو باید نصب کنید . تنها مشکل این اکتیو ایکس اینه که کد پیج استفاده شده در اون استاندارد مایکروسافت نیست و بانکهای اطلاعاتی که با این TextBox پر شده باشند باید از طریق فونت همراه نرم افزار خوانده شوند . البته اگه حوصله داشته باشید می‌تونید از سورس این اکتیو ایکس که در همین فایل هست استفاده کنید و کد پیج رو تغییر بدین .

یک نکته رو لازمه بگم که به همراه بیشتر این اکتیو ایکسها یک Example و یک راهنما موجوده که می‌تونه به شما در استفاده از اونها کمک کنه .

لینک منبع

|+|
نوشته شده توسط   در شنبه چهاردهم مرداد 1385 و ساعت 3:54
چگونه با کنترل mscomm شماره گیری کنیم 
 

با سلام دوست های خوبم

با هم ابتدا متن انگلیسی قسمتی از help این کنترل انتخاب کردم ببینیم:

The DialNumber routine uses an MSComm control to open the modem and send it instructions. For example, it:

  • Sets the control's settings to "9600,N,8,1" (9600 baud, no parity, 8 data bits, 1 stop bit)
  • Sets the PortOpen property to True
  • Sends the control the attention string ATV1Q0
  • Sends the control the ATDT string (attention, dial tone (as opposed to dial pulse))
  • Sends the control the phone number

 همانطور که از قسمت بالا پیداست پنج عمل باید صورت پذیرد:

۱) قسمت setting به طرزی که بالا توضیح داده شده تغییر یابد.( این حالت پیش فرض است.)

۲) قابلیت پورت از غلط به صحیح تبدیل شود.

۳)رشته ی ATV1Q0 برای پاسخگوئی از مودم به آن ارسال شود.

۴) رشته ی ATDT برای انجام عمل dial به مودم ارسال شود.

۵) شماره ی تلفن به مودم ارسال شود.

 

ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در جمعه سی ام تیر 1385 و ساعت 22:53
TAPI در ويژوال بيسيک - جلسه ی سوم 
سلام به همه مباحث مقدماتی تاپی در اینجا به اتمام می رسه ان شا الله به صورت جسته و گریخته مطالبی در موارد پیشرفته تر  در مبحث تاپی خواهم گفت.

ايجاد يک تماس ( Make a Call ) :
+ قبل از اين بخش بايستی مراحل TAPI Initialization و عمل انتخاب آدرس انجام شده باشد .
اين بخش برای ايجاد يک شی تماس ، بررسی و مشخص کردن استريمی که با اين تماس در ارتباط است ، انتخاب و ايجاد ترمينالهای مناسب و کامل کردن ارتباط استفاده می شود .
قبل TAPI Initialization و عمل انتخاب آدرس و انتخاب ترمينال انجام شده باشد .
در ابتدا با استفاده از متد CreateCall يک شی تماس ساخته می شود :

Set gobjCall = gobjOrigAddress.CreateCall(strDestAddress, nSelectedType,lMediaTypes)x


سپس در اينجا بايستی کدی که در بخش اول اين درس برای انتخاب ترمينال نوشته شد آورده شود :

}
Select Terminal Code
{


سپس بايستی دستور Connect اجرا شود :

gobjCall.Connect (False)x


False بدين معناست که ارتباط بصورت آسنکرون برقرار می شود .
دريافت يک تماس :

کد زير برای يافتن و يا ايجاد يک ترمينال مناسب برای دريافت يک تماس بکار می رود . بايستی توجه داشته باشيد که قبل از اجرای کد زير بايستی مراحل مقداردهی اوليه ، انتخاب يک آدرس و رجيسر کردن event ها را انجام دهيد . همچنين در کد زير بايستی مرحله انتخاب ترمينال را نيز انجام دهيد . توجه داشته باشيد که در کد زير متغير pEvent يک اشاره گر برای واسط ITCallNotificationEvent است که توسط TAPI به event Handler داده می شود :

If TapiEvent = TE_CALLNOTIFICATION Then
Dim objCallNotificationEvent As ITCallNotificationEvent
Set objCallNotificationEvent = pEvent
Dim gobjReceivedCallInfo As ITCallInfo
Set gobjReceivedCallInfo = objCallNotificationEvent.Call
Dim objCallControl As ITBasicCallControl
Set objCallControl = gobjReceivedCallInfo
objCallControl.Answer
End If

یکی از دوستان سئوالی رو در مورد پروژه نرم افزار طراحی سئوالات چهار گزینه ای مطرح کرده بودند اگه لطف کنن و اصل سئوال در این مورد رو مطرح کنن خیلی ممنون می شم.با آرزوی موفقییت برای کلیه دوستان

ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در سه شنبه سیزدهم تیر 1385 و ساعت 19:53
TAPI در ويژوال بيسيک - جلسه ی سوم 
سلام

انجام Event Handling در TAPI :

کد زير شامل يک event handler ساده برای TAPI ، رجيستر کردن واسط event ، تنظيم فيلتر event و رجيستر کردن تمام فراخوانيهای دادن اخطار است . هدف اصلی از اين کد اينست که مطمئن شويم بخشی از TAPI که event ها را دريافت می کند پردازشی را قبل از انتقال به بخشهای ديگر انجام دهد .

تعاريفها :

Dim WithEvents gobjTapiWithEvents As TAPI
Attribute gobjTapiWithEvents.VB_VarHelpID = -1
Dim glRegistrationToken As Long


 

Const TAPI3_CALL_EVENTS =TE_CALLMEDIA Or
TE_CALLNOTIFICATION Or TE_CALLSTATE



تنظيم eventfilter بصورتيکه تمام event های تعريف شده برای TAPI را بپذيرد :

objTapi.EventFilter = TAPI3_CALL_EVENTS


رجيستر کردن event ها :

Set gobjTapiWithEvents = objTapi
Dim fOwner As Boolean, fMonitor As Boolean
Dim lMediaTypes As Long, lCallbackInstance As Long

fOwner = True
fOwner = True
fMonitor = False
lMediaTypes = TAPIMEDIATYPE_AUDIO
lCallbackInstance = 1

glRegistrationToken = gobjTapi.RegisterCallNotifications(gobjAddress,fMonitor,
fOwner,lMediaTypes,lCallbackInstance)x


انتخاب يک ترمينال :

+ قبل از اينکه يک ترمينال را برای برقراری ارتباط انتخاب کنيد بايستی TAPI Initialization و عمل انتخاب آدرس را انجام داده باشيد .

ابتدا يک متغير از نوع ITBasicCallControl ( واسط کنترل تماس ) تعريف می کنيم :

Dim objCallControl As ITBasicCallControl
Set objCallControl = gobjReceivedCallInfo


سپس يک متغير از نوع ITTerminalSupport ( کوئری از شی آدرس ) تعريف می کنيم :

Dim objTerminalSupport As ITTerminalSupport
Set objTerminalSupport = gobjAddress


سپس متغير ترمينال را تعريف کرده و توسط شی objTerminalSupport يک ترمينال را برای آن استخراج می کنيم :

Dim objTerminal As ITTerminal
Set objTerminal = objTerminalSupport.GetDefaultStaticTerminal(lMediaType, dir)x


در اينجا ديگر نيازی به شی objTerminalSupport نيست بنابراين آنرا آزاد می کنيم :

Set objTerminalSupport = Nothing


سپس نياز به تعريف شی objStreamControl برای کنترل ترمينال است :

Dim objStreamControl As ITStreamControl
Set objStreamControl = objCallControl


در صورتيکه اين شی ايجاد شود ، به ازای استريم های موجود در ITCollection امکان ايجاد ترمينال در يک حلقه for بررسی می شود و ترمينال مناسب انتخاب می گردد :

If Not (objStreamControl Is Nothing) Then
Dim objITCollStreams As ITCollection

Set objITCollStreams = objStreamControl.Streams

Dim nIndex As Long, objCrtStream As ITStream

For nIndex = 1 To objITCollStreams.Count
Set objCrtStream = objITCollStreams.Item(nIndex)x
If objCrtStream.MediaType = lMediaType Then
If objCrtStream.Direction = dir Then
Call objCrtStream.SelectTerminal(objTerminal)x
End If
End If
Set objCrtStream = Nothing
Next nIndex

Set objITCollStreams = Nothing
Set objStreamControl = Nothing

End If

ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در شنبه دهم تیر 1385 و ساعت 11:36
TAPI در ويژوال بيسيک - جلسه ی دوم 
سلام

مقداردهی اوليه TAPI در ويژوال بيسيک :

از منوی Project گزينه References را انتخاب کرده و از ليست مربوطه مورد Microsoft TAPI 3.0 Type Library را انتخاب کنيد .
حال وارد بخش کد نويسی فرمتان شويد و متغير objTAPI را بصورت زير تعريف کنيد :

Dim objTapi As TAPI


سپس در بخش مربوط به Form Load شی objTAPI را بصورت زير ايجاد می کنيم :

Set objTapi = New TAPI


همانطور که در بخشهای قبلی گفته شد ، قبل از فراخوانی هر تابع TAPI ابتدا بايستی آنرا مقداردهی اوليه کنيم . برای مقداردهی اوليه کردن شی TAPI عبارت زير را بنويسيد :

Call objTapi.Initialize


انتخاب يک آدرس :
کد زير نشان می دهد که چگونه می توان با استفاده از شی TAPI در ويژوال بيسيک منابع تلفنی در دسترس را برای يک آدرس که بتواند يک مجموعه مشخص از نيازها را مديريت کند ، بررسی کرد .
توجه داشته باشيد که قبل از انجام اين کار بايستی عمل مقداردهی اوليه TAPI را که در بخش قبل ررسی شد ، انجام دهيد .

نکته : در کد زير عمل error checking انجام نگرفته است و برای استفاده از کد زير در برنامه های واقعی بايستی بخش بررسی خطا را به آن اضافه کنيد .
۱ - تعريف يک شی آدرس و يک شی مجموعه آدرس :

Dim gobjAddress As ITAddress
Dim objCollAddresses As ITCollection


۲ - تنظيم شی objCollAddress بعنوان يک مجموعه آدرس از شی objTapi :

Set objCollAddresses = objTapi.Addresses


۳ - پيدا کردن آدرسی که بتواند از واسط مورد نظر ما پشتيبانی کند :

bFound = False
For indexAddr = 1 To objCollAddresses.Count
Set objCrtAddress = objCollAddresses.Item(indexAddr)x
Set objMediaSupport = objCrtAddress
Set objAddressCapabilities = objCrtAddress

If objMediaSupport.QueryMediaType( nSelectedType ) x
bFound = True
End If

Set objAddressCapabilities = Nothing
Set objMediaSupport = Nothing
Set objCrtAddress = Nothing

If bFound = True Then Exit For
Next indexAddr



در صورتيکه آدرس مورد نظزر پيدا شود برنامه از حلقه خارج شده و gobjAddress يک آدرس قابل استفاده خواهد بود :

Set gobjAddress = objcollAddresses.Item(indexAddr)x


ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در جمعه نهم تیر 1385 و ساعت 12:5
TAPI در ويژوال بيسيک - جلسه ی اول 
سلام

TAPI چيست ؟

TAPI يا Telephony API يک کتابخانه استاندارد برای کار با مودم و نوشتن برنامه های تلفنی می باشد . برای نمونه می توان از برنامه های Phone Dialer ( شماره گير تلفن ) ، برنامه شبکه سازی تلفنی ( Dialup Networking ) ، برنامه تشخيص پالس مودم برای ضبط اطلاعات وارد شده از طرف کاربران و کاربردهای ديگر در اين زمينه نام برد . اين کتابخانه به شما کمک کمک می کند تا بدون درگير شدن با برنامه نويسی سخت افزار مودم و درايور آن بطور مستقيم بتوانيد برنامه های کاربردیي در اين زمينه بنويسيد .
مروری بر Microsoft Telephony :

Telephony امکان مجتمع سازی کامپيوترها با دستگاههای ارتباطی و شبکه ها را فراهم نموده است . معمولاً دستگاه ارتباطی يک مودم و خط ارتباطی نيز شبکه PSTN ( شبکه عمومی تلفن سوئيچينگ ) می باشد . برخی از کاربردهای Telephony عبارتند از :

۱ - کنفرانسهای مالتی مديا بصورت Multicast
۲ - VoIP
۳ - مرکز پاسخ گويي اتوماتيک
۴ - تماس تلفنی از طريق کامپيوتر روی شبکه PSTN

دياگرام زير معماری Microsoft Telephony را نشان می دهد :
برنامه های TAPI :

برای نوشتن برنامه های کاربردی با استفاده از TAPI بايستی ابتدا در مورد سطح سرويسی که می خواهيم ارائه دهيم تصميم گيری کنيم . برای مثال برای نوشتن يک برنامه شماره گير تلفن نياز به استفاده کامل از TAPI نيست و می توان از قابليتهای خود ويندوز در اين زمينه استفاده کرد ( Assisted Telephony ) . در بخشهای بعدی در مورد سطوح مختلف سرويس در TAPI بيشتر صحبت خواهم کرد .
دومين مطلبی که بايد مورد توجه قرار داد اينست که می خواهيم از TAPI 2.x استفاده کنيم يا از TAPI 3.x . تفاوت ايندو آنست که TAPI ورژن ۲ يک API برمبنای C است در حاليکه ورژن ۳ آن بر مبنای تکنولوژی COM می باشد . در بخشهای بعدی مطالب بيشتری در مورد تفاوتهای اين دو نسخه بيان خواهم کرد .
بخشهای اصلی يک برنامه کامل TAPI عبارتند از :

۱ - TAPI Initialization : شامل load کردن TAPI dll ، اتصال به TAPI Server ، مذاکره در مورد ورژن TAPI و برپاسازی سيستم اطلاع رسانی event می باشد .

۲ - Session Control : مقداردهی اوليه ، دريافت و کنترل تماسها

۳ - Device Control : دريافت و تنظيم اطلاعات دستگاه

۴ - Media Control : تشخيص و يا توليد تونها و ارقام ، کنترل stream

۵ - TAPI Shutdown : آزاد سازی منابع
مقداردهی اوليه TAPI :

عملکرد درست اجزای TAPI نياز به برپاسازی محيط ارتباطی روی کامپيوتر مورد نظر دارد . مراحل اين امر عبارتند از :

۱ - نصب TAPI : زمانيکه سخت افزار و يا نرم افزار برای اولين بار به کامپيوتر اضافه می شود انجام می گيرد . جزئيات کار به سيستم عامل و نرم افزار بستگی دارد .

۲ - مقداردهی ابتدائی : ساخت اشيا و مسيرهای ارتباطی

۳ - مذاکره در مورد ورژن TAPI : برای اطمينان از اينکه اجزای TAPI قادر به تبادل داده ها باشند .

۴ - استخراج اطلاعات منابع : بدست آوردن اطلاعاتی در مورد دستگاهی که می توان از آن در برنامه TAPI مورد نظرمان استفاده نمود .

۵ - Event notification : برپاسازی سيستم اطلاع رسانی event

ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در دوشنبه پنجم تیر 1385 و ساعت 10:9
روزهای آخر ... 
 

سلام

ماشین حسابهای مختلفی با ویژوال میشه نوشت به این ماشین حساب تجاری که برای حل مسائل مالی به کار می ره یه نگاهی بیاندازین بد نیست:

https://www.sharemation.com/mojsad/calculator.zip?uniq=rbhc08 

ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در جمعه دوم تیر 1385 و ساعت 8:53
جلسه یازدهم ( جلسه ی اول کار با مودم ) 
 

سلام

دوست های مهربون و خوب من. اگه تا حالا فکری برای پروژه برنداشتین آستین هاتون بالا بزنین تا شایداین سری مطالب بشه پروژه ی ارسال فایل از طریق مودم که از نظر من آسون تر از دو پروژه ی دیگه هم هست رو به استاد تحویل بدیم. از طریق کد های زیر که اونها رو در فرم لود برنامتون قرار می دین و با گذاشتن یک کلید می تونید برنامتون رو به صورت اتوماتیک به یک مودم متصل کنین:

 

https://www.sharemation.com/mojsad/modem.rtf

ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در دوشنبه پانزدهم خرداد 1385 و ساعت 15:1
زنگ تفریح 
سلام دوست های خوبم

توی این زنگ تفریح می خواهیم با کمک هم یه ساعت دیجیتالی بسازیم ( به قول مرحوم کاووسی دیجیتالم کجا بود ) ولی خوب چون ساعت عقربه ای رو گفتم بدک نیست ساعت دیجیتالی رو هم با هم تمرین کنیم تا این استاد رضائی نگه شما ها برنامه های کودکستانی ویژوال رو هم نمی تونید بنویسید. آخه دوست جون های من ویژوال رو باید واقعا خوب همه با هم امتحان بدیم تا اثبات کنیم اگه یک کم به دانشجوی پیام نوری برسن می تونه دنیا رو هم کن فیکون بکنه.

حالا دوست های مهربونه من لطفا یه فرم جدید باز کنید و دو تا لیبل به نام های labelSec و labelMin  و کپشن اونها رو صفر قرار بدین. بعد یه تایمر به نام timer1 به فرمتون اضافه کنین. حالا با نوشتن کد های زیر می تونیم اون ساعت دیجیتالی رو داشته باشیم:

Option Explicit

()Private Sub Form_Load
    Timer1_Timer
End Sub

()Private Sub Timer1_Timer

Timer1.Interval = 1000
    LabelSec.Caption = LabelSec.Caption + 1
   
    If LabelSec.Caption = 60 Then
        LabelSec.Caption = "00"                                                                             LabelMin.Caption = LabelMin.Caption + 1
        If LabelMin.Caption > 0 And LabelMin.Caption < 10 Then
            LabelMin.Caption = "0" & LabelMin.Caption
        End If
    End If
   
    If LabelSec.Caption > 0 And LabelSec.Caption < 10 Then
        LabelSec.Caption = "0" & LabelSec.Caption
    End If
End Sub
ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در جمعه دوازدهم خرداد 1385 و ساعت 12:15
جلسه ی دهم ( جلسه آخر متحرک سازی ) 
سلام دوست های مهربونم

موضوع : ترسيم اشيا سه بعدي با استفاده از شي Mesh
شي Mesh که جزو اشيا D3DX مي باشد امکان ترسيم اشيا سه بعدي پايه و همچنين ترسيم مش هاي custom دلخواه را به شما مي دهد . در اين درس از شي Mesh براي ترسيم يک کره ( sphere ) استفاده مي کنيم . ابتدا متغير sphere را بصورت زير تعريف کنيد :


Dim sphere as D3DXMesh


همچنين براي نورپردازي و اختصاص material به کره به متغيرهاي زير نياز داريم :


Dim d3dLight As D3DLIGHT8
Dim material As D3DMATERIAL8
Dim Col As D3DCOLORVALUE


در تابع Initial پس از ساخت اشيا D3D و D3DX و D3DDevice بايستي پارامترهاي رنگ ، نورپردازي و اختصاص ماده ( material ) به کره را بصورت زير تنظيم کنيد :


Col.a = 1
Col.b = 1
Col.g = 1
Col.r = 1
d3dLight.Type = D3DLIGHT_DIRECTIONAL
d3dLight.diffuse = Col
d3dLight.Direction = vec(-1, -1, -1)x


نورپردازي از نوع جهت دار با رنگ col و بردار جهت (1-,1-,1-) است .
نکته :
رنگ ambient رنگي است که هنگاميکه جسم در سايه باشد به خود مي گيرد . بعبارت ديگر اين رنگ را جسم وقتي که در معرض يک نور ambient باشد از خود منعکس مي کند .
رنگ diffuse رنگي است که هنگاميکه جسم در معرض نور مستقيم قرار بگيرد از خود منعکس مي کند .


material.Ambient = Col
material.diffuse = Col
d3dDevice.SetMaterial material
d3dDevice.SetLight 0, d3dLight
d3dDevice.LightEnable 0, 1


سپس بايستي پارامترهاي rendering را تنظيم کنيد :


d3dDevice.SetRenderState D3DRS_LIGHTING, 1
d3dDevice.SetRenderState D3DRS_ZENABLE, 1
d3dDevice.SetRenderState D3DRS_LIGHTING, 1
d3dDevice.SetRenderState D3DRS_ZENABLE, 1
d3dDevice.SetRenderState D3DRS_SHADEMODE, D3DSHADE_GOURAUD
d3dDevice.SetRenderState D3DRS_AMBIENT, &H202020
d3dDevice.SetTextureStageState 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR
d3dDevice.SetTextureStageState 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR


حال بايستي شي sphere را بسازيم :


Set Sphere = d3dx.CreateSphere(d3dDevice, 2, 1000, 20, Nothing)x


که ۲ شعاع کره و ۱۰۰۰ تعداد slice هايي است که کره با آن ساخته مي شود .
سپس بردارهاي نقطه ديد و مکان دوربين و رنگ زمينه را تنظيم کنيد ( viewpoint و camerapoint از نوع D3DVECTOR هستند ) .


ViewPoint = vec(0, 0, 0)
CameraPoint = vec(4, 4, 4)
BackColor = &H404040


در روتين Render ابتدا ماتريسها و بردارهاي صحنه را تنظيم مي کنيم :


D3DXMatrixIdentity matWorld
d3dDevice.SetTransform D3DTS_WORLD, matWorld
D3DXMatrixRotationY matView, Rotation
D3DXMatrixLookAtLH matTemp, CameraPoint, ViewPoint, vec(0, 1, 0)
D3DXMatrixMultiply matView, matView, matTemp
d3dDevice.SetTransform D3DTS_VIEW, matView
D3DXMatrixPerspectiveFovLH matProj, pi / 4, 1, 0.1, 500
d3dDevice.SetTransform D3DTS_PROJECTION, matProj


در پايان نيز شروع به رندر صحنه مي کنيم :


d3dDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, BackColor, 1, 0
d3dDevice.BeginScene
Sphere.DrawSubset 0
d3dDevice.EndScene
d3dDevice.Present ByVal 0, ByVal 0, 0, ByVal 0


                                                               ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در جمعه دوازدهم خرداد 1385 و ساعت 11:26
جلسه نهم 
سلام دوست های خوبم

موضوع :‌ترسيم متن دو بعدي در DirectX

در اين درس روش ترسيم متن با دو نوع فونت را نشان خواهم داد :
براي رسم يک متن با فونت تعريف شده در سيستم از شي D3DXFont استفاده مي کنيم :


Dim MainFont as D3DXFont
Dim MainFontDesc as IFont
Dim TextRect as RECT
Dim fnt as new stdFont


در حاليکه براي ايجاد يک متن با فونت custom ابتدا يک texture تعريف مي کنيم :


Dim fntTex as Direct3DTexture8


همچنين براي ترسيم هر کاراکتر يک آرايه vertex اي را از نوع TLVERTEX تعريف مي نمائيم :


Dim vertchar(3) as TLVERTEX


حال به سراغ تابع Initialize مي رويم . در اين تابع ابتدا دستورات مربوط به ايجاد اشيا D3D و D3Dx را قرا دهيد سپس دستورات مربوط به اختصاص آداپتور و نيز ايجاد شي D3DDevice را انجام مي دهيم . حال دستورات تنظيم shader و rendering را مي آوريم :


D3DDevice.SetVertexShader TL_FVF
D3DDevice.SetRenderState D3DRS_LIGHTING, False


سپس تنظيمات پارامترهاي transparency براي rendering را انجام مي دهيم :


D3DDevice.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHA
D3DDevice.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA
D3DDevice.SetRenderState D3DRS_ALPHABLENDENABLE, True


حال بايستي textureرا طوري فيلتر کنيم که در زمان stretch شدن يا squash شدن بهتر بنظر برسد :


D3DDevice.SetTextureStageState 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR
D3DDevice.SetTextureStageState 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR


حال فيلتر Z را فعال مي کنيم :


D3DDevice.SetRenderState D3DRS_ZENABLE, 1


سپس ماتريسهاي world ، view و projection را تنظيم مي کنيم :


D3DXMatrixIdentity matWorld
D3DDevice.SetTransform D3DTS_WORLD, matWorld
D3DXMatrixLookAtLH matView, MakeVector(0, 9, -9), MakeVector(0, 0, 0), MakeVector(0, 1, 0)
D3DDevice.SetTransform D3DTS_VIEW, matView
D3DXMatrixPerspectiveFovLH matProj, pi / 4, 1, 0.1, 500
D3DDevice.SetTransform D3DTS_PROJECTION, matProj


حال به بخش تنظيم پارامترهاي فونت مي رسيم . در مورد فونت دو بعدي عادي :


fnt.Name = "Verdana"x
fnt.Size = 18
fnt.Bold = True
Set MainFontDesc = fnt
Set MainFont = D3DX.CreateFont(D3DDevice, MainFontDesc.hFont)x


و در مورد فونت custom :


Set fntTex = D3DX.CreateTextureFromFileEx(D3DDevice, yourfilename, 256, 128, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_FILTER_POINT, D3DX_FILTER_POINT, &HFF00FF00, ByVal 0, ByVal 0)x
end function


روتين Render بصورت زير خواهد بود :


Public Sub Render()x
D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, 0, 1#, 0
D3DDevice.BeginScene


براي رندر متن با فونت عادي بصورت زير عمل مي کنيم :


TextRect.Top = 440
TextRect.Left = 1
TextRect.bottom = 480
TextRect.Right = 640
D3DX.DrawText MainFont, &HFFCCCCFF, "Current Frame Rate: " & FPS_Current, TextRect, DT_TOP Or DT_CENTER


براي رندر متن با فونت custom بصورت زير عمل مي کنيم :


RenderStringFromCustomFont_2D "mehregan irani", 1, 1, 16, 16
D3DDevice.EndScene
D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
End Sub


همانطور که مشاهده مي کنيد از روتيني با نام RenderStringFromCustomFont_2D استفاده شده است :


Private Sub RenderStringFromCustomFont_2D(strText As String, startX As Single, StartY As Single, Height As Integer, Width As Integer)x
Dim I As Integer
Dim CharX As Integer, CharY As Integer
Dim Char As String
Dim LinearEntry As Integer
If Len(strText) = 0 Then Exit Sub
For I = 1 To Len(strText)x


1 - ابتدا بايستي مختصات texture را انتخاب کنيم . براي اينکار بايستي هر entry را در texture جدا کنيم :


Char = Mid$(strText, I, 1)x
If Asc(Char) >= 65 And Asc(Char) <= 90 Then
LinearEntry = Asc(Char) - 65
ElseIf Asc(Char) >= 97 And Asc(Char) <= 122 Then
LinearEntry = Asc(Char) - 71
ElseIf Asc(Char) >= 48 And Asc(Char) <= 57 Then
LinearEntry = Asc(Char) + 4
ElseIf Char = " " Then
LinearEntry = 63
ElseIf Char = "." Then
LinearEntry = 62
ElseIf Char = ";" Then
LinearEntry = 66
ElseIf Char = "/" Then
LinearEntry = 64
ElseIf Char = "," Then
LinearEntry = 65
End If


بعد از مقداردهي LinearEntry بايستي مختصات grid کاراکتر را پردازش کنيم :


If LinearEntry <= 15 Then
CharY = 0
CharX = LinearEntry
End If
If LinearEntry >= 16 And LinearEntry <= 31 Then
CharY = 1
CharX = LinearEntry - 16
End If
If LinearEntry >= 32 And LinearEntry <= 47 Then
CharY = 2
CharX = LinearEntry - 32
End If
If LinearEntry >= 48 And LinearEntry <= 63 Then
CharY = 3
CharX = LinearEntry - 48
End If
If LinearEntry >= 64 And LinearEntry <= 79 Then
CharY = 4
CharX = LinearEntry - 64
End If


۲ - حال بايستي vertex هاي مورد نياز براي رسم کاراکتر را توليد کنيم :


vertChar(0) = CreateTLVertex(startX + (Width * I), StartY, 0, 1, &HFFFFF
(F,0,(1/16)*CharX,(1/8)*CharY
vertChar(1) = CreateTLVertex(startX + (Width * I) + Width, StartY, 0, 1, &HFFFFF
(F, 0,((1 / 16) * CharX) + (1 / 16), (1 / 8) * CharY
vertChar(2) = CreateTLVertex(startX + (Width * I), StartY + Height, 0, 1, &HFFFFF
((F, 0, (1 / 16) * CharX, ((1 / 8) * CharY) + (1 / 8
vertChar(3) = CreateTLVertex(startX + (Width * I) + Width, StartY + Height, 0, 1, HFFFFFF, 0, ((1 / 16) * CharX) + (1 / 16), ((1 / 8) * CharY) + (1 / 8))x


۳ - رندر vertex ها :


D3DDevice.SetTexture 0, fntTex
D3DDevice.DrawPrimitiveUP D3DPT_TRIANGLESTRIP, 2, vertChar(0), Len(vertChar(0))x
Next I
End Sub

ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در چهارشنبه دهم خرداد 1385 و ساعت 22:6
جلسه هشتم 
سلام به همه ی دوستان

موضوع : نورپردازي و اختصاص بافت به اشيای سه بعدي



در اين درس مي خواهيم به مکعب درس قبل بافت اختصاص داده و نيز آنرا با يک منبع نور ، نورپردازي کنيم .
ابتدا تايپ vertex ها را بصورت زير تعريف مي کنيم :


Private Type UnlitVertex
X As Single
Y As Single
Z As Single
nx As Single
ny As Single
nz As Single
tu As Single
tv As Single
End Type


توصيفگر اين فرمت بصورت زير خواهد بود :


Const Unlit_FVF = (D3DFVF_XYZ Or D3DFVF_NORMAL Or D3DFVF_TEX1)


همچنين مکعب ما توسط ارايه زير مشخص مي شود :


Dim Cube2(35) As UnlitVertex


دو ثابت pi و rad را نيز بصورت زير تعريف مي کنيم :


Const pi As Single = 3.141592
Const Rad = pi / 180


براي اختصاص بافت به مکعب ، از شي Direct3DTexture8 استفاده مي شود :


Dim CubeTexture As Direct3DTexture8


براي نورپردازي ، از شي D3DLIGHT8 استفاده مي شود :


Dim Lights As D3DLIGHT8



تغييرات مورد نياز در تابع Initialize
بعد از ساخت شي D3DDevice در اين تابع ، پارامترهاي آنرا بصورت زير تنظيم مي کنيم :


D3DDevice.SetVertexShader Unlit_FVF
D3DDevice.SetRenderState D3DRS_LIGHTING, 1
D3DDevice.SetRenderState D3DRS_ZENABLE, 1
D3DDevice.SetRenderState D3DRS_AMBIENT, &H202020


مقدار ambient يک کد هگزا RRGGBB است .
بعد از دستورات فوق ماتريسهاي matworld ، matview و matproj مطابق مطابل درس قبل تعريف مي شوند . پس از آن بايستي بافت مکعب را از درون فايل تصويري مورد نظرتان load کنيد :


Set CubeTexture = D3DX.CreateTextureFromFileEx(D3DDevice, yourfilename, 128, 128, D3DX_DEFAULT, 0, DispMode.Format, D3DPOOL_MANAGED, D3DX_FILTER_LINEAR, D3DX_FILTER_LINEAR, 0, ByVal 0, ByVal 0)x


حال بايستي تابع InitializeGeometry صدا زده شود و سپس تابع SetupLights فراخواني شوند . ابتدا به توضيح تابع InitializeGeometry مي پردازيم :


Private Function InitialiseGeometry() As Boolean


ابتدا يک بردار نرمال تعريف مي کنيم :


Dim vN As D3DVECTOR


سپس آرايه cube2 را با مقادير عددي پر مي کنيم . نرمالهاي تمام vertex ها را ابتدا با بردار
[0,0,0 ] تعريف مي کنيم . اين مقدا بعداً تغيير خواهد کرد :


Cube2(0) = CreateVertex(-1, -1, 1, 0, 0, 0, 0, 0)
Cube2(1) = CreateVertex(1, 1, 1, 0, 0, 0, 1, 1)
Cube2(2) = CreateVertex(-1, 1, 1, 0, 0, 0, 0, 1)
vN = GenerateTriangleNormals(Cube2(0), Cube2(1), Cube2(2))
Cube2(0).nx = vN.X: Cube2(0).ny = vN.Y: Cube2(0).nz = vN.Z
Cube2(1).nx = vN.X: Cube2(1).ny = vN.Y: Cube2(1).nz = vN.Z
Cube2(2).nx = vN.X: Cube2(2).ny = vN.Y: Cube2(2).nz = vN.Z


Cube2(3) = CreateVertex(1, 1, 1, 0, 0, 0, 1, 1)
Cube2(4) = CreateVertex(-1, -1, 1, 0, 0, 0, 0, 0)
Cube2(5) = CreateVertex(1, -1, 1, 0, 0, 0, 1, 0)
vN = GenerateTriangleNormals(Cube2(3), Cube2(4), Cube2(5))
Cube2(3).nx = vN.X: Cube2(3).ny = vN.Y: Cube2(3).nz = vN.Z
Cube2(4).nx = vN.X: Cube2(4).ny = vN.Y: Cube2(4).nz = vN.Z
Cube2(5).nx = vN.X: Cube2(5).ny = vN.Y: Cube2(5).nz = vN.Z

'Back
Cube2(6) = CreateVertex(-1, 1, -1, 0, 0, 0, 0, 1)
Cube2(7) = CreateVertex(1, 1, -1, 0, 0, 0, 1, 1)
Cube2(8) = CreateVertex(-1, -1, -1, 0, 0, 0, 0, 0)
vN = GenerateTriangleNormals(Cube2(6), Cube2(7), Cube2(8))
Cube2(6).nx = vN.X: Cube2(6).ny = vN.Y: Cube2(6).nz = vN.Z
Cube2(7).nx = vN.X: Cube2(7).ny = vN.Y: Cube2(7).nz = vN.Z
Cube2(8).nx = vN.X: Cube2(8).ny = vN.Y: Cube2(8).nz = vN.Z

Cube2(9) = CreateVertex(1, -1, -1, 0, 0, 0, 1, 0)
Cube2(10) = CreateVertex(-1, -1, -1, 0, 0, 0, 0, 0)
Cube2(11) = CreateVertex(1, 1, -1, 0, 0, 0, 1, 1)
vN = GenerateTriangleNormals(Cube2(9), Cube2(10), Cube2(11))
Cube2(9).nx = vN.X: Cube2(9).ny = vN.Y: Cube2(9).nz = vN.Z
Cube2(10).nx = vN.X: Cube2(10).ny = vN.Y: Cube2(10).nz = vN.Z
Cube2(11).nx = vN.X: Cube2(11).ny = vN.Y: Cube2(11).nz = vN.Z

'Right
Cube2(12) = CreateVertex(-1, -1, -1, 0, 0, 0, 0, 0)
Cube2(13) = CreateVertex(-1, 1, 1, 0, 0, 0, 1, 1)
Cube2(14) = CreateVertex(-1, 1, -1, 0, 0, 0, 1, 0)
vN = GenerateTriangleNormals(Cube2(12), Cube2(13), Cube2(14))
Cube2(12).nx = vN.X: Cube2(12).ny = vN.Y: Cube2(12).nz = vN.Z
Cube2(13).nx = vN.X: Cube2(13).ny = vN.Y: Cube2(13).nz = vN.Z
Cube2(14).nx = vN.X: Cube2(14).ny = vN.Y: Cube2(14).nz = vN.Z

Cube2(15) = CreateVertex(-1, 1, 1, 0, 0, 0, 1, 1)
Cube2(16) = CreateVertex(-1, -1, -1, 0, 0, 0, 0, 0)
Cube2(17) = CreateVertex(-1, -1, 1, 0, 0, 0, 0, 1)
vN = GenerateTriangleNormals(Cube2(15), Cube2(16), Cube2(17))
Cube2(15).nx = vN.X: Cube2(15).ny = vN.Y: Cube2(15).nz = vN.Z
Cube2(16).nx = vN.X: Cube2(16).ny = vN.Y: Cube2(16).nz = vN.Z
Cube2(17).nx = vN.X: Cube2(17).ny = vN.Y: Cube2(17).nz = vN.Z

'Left
Cube2(18) = CreateVertex(1, 1, -1, 0, 0, 0, 1, 0)
Cube2(19) = CreateVertex(1, 1, 1, 0, 0, 0, 1, 1)
Cube2(20) = CreateVertex(1, -1, -1, 0, 0, 0, 0, 0)
vN = GenerateTriangleNormals(Cube2(18), Cube2(19), Cube2(20))
Cube2(18).nx = vN.X: Cube2(18).ny = vN.Y: Cube2(18).nz = vN.Z
Cube2(19).nx = vN.X: Cube2(19).ny = vN.Y: Cube2(19).nz = vN.Z
Cube2(20).nx = vN.X: Cube2(20).ny = vN.Y: Cube2(20).nz = vN.Z

Cube2(21) = CreateVertex(1, -1, 1, 0, 0, 0, 0, 1)
Cube2(22) = CreateVertex(1, -1, -1, 0, 0, 0, 0, 0)
Cube2(23) = CreateVertex(1, 1, 1, 0, 0, 0, 1, 1)
vN = GenerateTriangleNormals(Cube2(21), Cube2(22), Cube2(23))
Cube2(21).nx = vN.X: Cube2(21).ny = vN.Y: Cube2(21).nz = vN.Z
Cube2(22).nx = vN.X: Cube2(22).ny = vN.Y: Cube2(22).nz = vN.Z
Cube2(23).nx = vN.X: Cube2(23).ny = vN.Y: Cube2(23).nz = vN.Z

'Top
Cube2(24) = CreateVertex(-1, 1, 1, 0, 0, 0, 0, 1)
Cube2(25) = CreateVertex(1, 1, 1, 0, 0, 0, 1, 1)
Cube2(26) = CreateVertex(-1, 1, -1, 0, 0, 0, 0, 0)
vN = GenerateTriangleNormals(Cube2(24), Cube2(25), Cube2(26))
Cube2(24).nx = vN.X: Cube2(24).ny = vN.Y: Cube2(24).nz = vN.Z
Cube2(25).nx = vN.X: Cube2(25).ny = vN.Y: Cube2(25).nz = vN.Z
Cube2(26).nx = vN.X: Cube2(26).ny = vN.Y: Cube2(26).nz = vN.Z

Cube2(27) = CreateVertex(1, 1, -1, 0, 0, 0, 1, 0)
Cube2(28) = CreateVertex(-1, 1, -1, 0, 0, 0, 0, 0)
Cube2(29) = CreateVertex(1, 1, 1, 0, 0, 0, 1, 1)
vN = GenerateTriangleNormals(Cube2(27), Cube2(28), Cube2(29))
Cube2(27).nx = vN.X: Cube2(27).ny = vN.Y: Cube2(27).nz = vN.Z
Cube2(28).nx = vN.X: Cube2(28).ny = vN.Y: Cube2(28).nz = vN.Z
Cube2(29).nx = vN.X: Cube2(29).ny = vN.Y: Cube2(29).nz = vN.Z

'Top
Cube2(30) = CreateVertex(-1, -1, -1, 0, 0, 0, 0, 0)
Cube2(31) = CreateVertex(1, -1, 1, 0, 0, 0, 1, 1)
Cube2(32) = CreateVertex(-1, -1, 1, 0, 0, 0, 0, 1)
vN = GenerateTriangleNormals(Cube2(30), Cube2(31), Cube2(32))
Cube2(30).nx = vN.X: Cube2(30).ny = vN.Y: Cube2(30).nz = vN.Z
Cube2(31).nx = vN.X: Cube2(31).ny = vN.Y: Cube2(31).nz = vN.Z
Cube2(32).nx = vN.X: Cube2(32).ny = vN.Y: Cube2(32).nz = vN.Z

Cube2(33) = CreateVertex(1, -1, 1, 0, 0, 0, 1, 1)
Cube2(34) = CreateVertex(-1, -1, -1, 0, 0, 0, 0, 0)
Cube2(35) = CreateVertex(1, -1, -1, 0, 0, 0, 1, 0)
vN = GenerateTriangleNormals(Cube2(33), Cube2(34), Cube2(35))
Cube2(33).nx = vN.X: Cube2(33).ny = vN.Y: Cube2(33).nz = vN.Z
Cube2(34).nx = vN.X: Cube2(34).ny = vN.Y: Cube2(34).nz = vN.Z
Cube2(35).nx = vN.X: Cube2(35).ny = vN.Y: Cube2(35).nz = vN.Z


سپس يک بافر vertex خالي با ساير موردنظر مي سازيم :


Set VBuffer = D3DDevice.CreateVertexBuffer(Len(Cube2(0)) * 36, 0, Unlit_FVF, D3DPOOL_DEFAULT)x


سپس اين بافر vertex ساخته شده را با داده هاي cube2 پر مي کنيم :


D3DVertexBuffer8SetData VBuffer, 0, Len(Cube2(0)) * 36, 0, Cube2(0)x


در دستورات فوق تابعي با نام GenerateTraingleNormals استفاده شده است . اين تابع دو بردار را از روي سه vertex داده شده با آن مي سازد و سپس ضرب برداري ايندو را حساب مي کند و سپس بردار حاصله را نرمال مي نمايد :


Private Function GenerateTriangleNormals(p0 As UnlitVertex, p1 As UnlitVertex, p2 As UnlitVertex) As D3DVECTOR
Dim v01 As D3DVECTOR 'Vector from points 0 to 1
Dim v02 As D3DVECTOR 'Vector from points 0 to 2
Dim vNorm As D3DVECTOR 'The final vector

'Create the vectors from points 0 to 1 and 0 to 2
D3DXVec3Subtract v01, MakeVector(p1.X, p1.Y, p1.Z), MakeVector(p0.X, p0.Y, p0.Z)
D3DXVec3Subtract v02, MakeVector(p2.X, p2.Y, p2.Z), MakeVector(p0.X, p0.Y, p0.Z)

'Get the cross product
D3DXVec3Cross vNorm, v01, v02

'Normalize this vector
D3DXVec3Normalize vNorm, vNorm

'Return the value
GenerateTriangleNormals.X = vNorm.X
GenerateTriangleNormals.Y = vNorm.Y
GenerateTriangleNormals.Z = vNorm.Z
End Function



حال به توضيح تابع SetupLights مي پردازيم . در اين تابع دو شي D3DMATERIAL8 و D3DCOLORVALUE استفاده شده است :


Private Function SetupLights() As Boolean
Dim Mtrl As D3DMATERIAL8, Col As D3DCOLORVALUE
Col.a = 1: Col.r = 1: Col.g = 1: Col.b = 1
Mtrl.Ambient = Col
Mtrl.diffuse = Col
D3DDevice.SetMaterial Mtrl

Lights.Type = D3DLIGHT_DIRECTIONAL
Lights.diffuse.r = 1
Lights.diffuse.g = 1
Lights.diffuse.b = 1
Lights.Direction = MakeVector(1, -1, 0)

D3DDevice.SetLight 0, Lights

SetupLights = True
End Function



تابع Render بصورت زير است :


Public Sub Render()
D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, 0, 1#, 0 '//Clear the screen black
D3DDevice.BeginScene
'Draw the cube
D3DDevice.SetTexture 0, CubeTexture
D3DDevice.SetStreamSource 0, VBuffer, Len(Cube2(0))
D3DDevice.DrawPrimitive D3DPT_TRIANGLELIST, 0, 12
D3DDevice.EndScene
D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
End Sub



ساختار اصلي برنامه بصورت زير است :


Call Initialise
Do While bRunning
RotateAngle = RotateAngle + 0.1
If RotateAngle >= 360 Then RotateAngle = RotateAngle - 360

D3DXMatrixIdentity matWorld

D3DXMatrixIdentity matTemp
D3DXMatrixRotationX matTemp, RotateAngle * (pi / 180)
D3DXMatrixMultiply matWorld, matWorld, matTemp

D3DXMatrixIdentity matTemp
D3DXMatrixRotationY matTemp, RotateAngle * (pi / 180)
D3DXMatrixMultiply matWorld, matWorld, matTemp

D3DXMatrixIdentity matTemp
D3DXMatrixRotationZ matTemp, RotateAngle * (pi / 180)
D3DXMatrixMultiply matWorld, matWorld, matTemp


D3DDevice.SetTransform D3DTS_WORLD, matWorld

D3DDevice.LightEnable 0, 0 خاموش کردن light

D3DDevice.LightEnable 0, 1 روشن کردن light

Render
DoEvents
Loop

ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در سه شنبه نهم خرداد 1385 و ساعت 23:5
جلسه هفتم 
سلام دوست های خوب و مهربونم

در بحث قبلي به تعريف ماترسها رسيديم .

1 - World Matrix : اين ماتريس براي نگهداري تمام vertex هايي که براي رندر فرستاده مي شوند بکار مي رود . مقادير موجود در اين ماتريس ، موقعيت يک vertex را مي تواند تغيير دهد . يکي از کاربردهاي آن انجام دورانrotation ، انتقال transmittion و تغییر اندازه scaling است .
برای ساخت اين ماتريس از دستور زير استفاده می کنيم :


D3DXMatrixIdentify matworld


حال اين ماتريس را براي device مربوطه تاييد مي کنيم :


D3DDevice.SetTransform D3DTS_WORLD,matworld


۲ - View Matrix : اين ماتريس را بعنوان يک دوربين در نظر بگيريد که بوسيله يک نقطه شروع و يک نقطه پاياني مشخص مي شود ( مشابه يک up vector که معمولاً در طول محور y رو به بالاست ) :


D3DXMatrixLookAtLH matView, MakeV(0, 5, 9), MakeV(0, 0, 0),MakeV(0, 1, 0) x
D3DDevice.SetTransform D3DTS_VIEW, matView


تابع MakeV که در اينجا استفاده شده بصورت زير است :


Private Function MakeV(x As Single, y As Single, z As Single) As D3DVECTOR
MakeV.x = x
MakeV.y = y
MakeV.z = z
End Function


۳ - Projection Matrix : اين ماتريس مشخص مي کند چه منطقه اي از فضاي جهاني براي رندر کردن visible باشد . همچنين مشخص مي کند چه مقدار مي توانيم بطور افقي ببينيم ( زاويه ديد بزرگتر منجر به ديد بزرگتر مي شود ) :


D3DXMatrixPerspectiveFovLH matProj, pi / 4, 1, 0.1, 500


در دستور فوق از زاويه ديد pi/4 راديان استفاده شده همچنين نسبت 1:1 استفاده شده است . قسمتهاي سوم و چهارم مشخص مي کنند فقط مثلثهايي کشيده شوند که با ابعاد بزرگتر از يکدهم دوربين و کوچکتر از ۵۰۰ برابر دوربين هستند .
حال دستور اختصاص به device را خواهيم داشت :


D3DDevice.SetTransform D3DTS_PROJECTION, matProj


بعد از تعريف ماتريسها بايستي تابع InitializeGeometry را صدا کنيم . در اين تابع از يک ثابت با نام DFC استفاده شده است . اگر DFC=1 باشد مکعب بطور کامل کشيده مي شود و اگر بزرگتر از يک باشد ، face هاي آن جدا از هم ديده خواهند شد . همچنين توجه کنيد که از بافرهاي vertex براي ذخيره داده vertex ها استفاده شده است . ساختار اين تابع بصورت زير خواهد بود :
۱ - پر کردن ساختارهاي vertex


'Front
Cube(0) = CreateLitVertex(-1, 1, DFC, color, 0, 0, 0)x
Cube(1) = CreateLitVertex(1, 1, DFC, color, 0, 0, 0)x
Cube(2) = CreateLitVertex(-1, -1, DFCcolor, 0, 0, 0)x
Cube(4) = CreateLitVertex(-1, -1, DFC, color, 0, 0, 0)x
Cube(5) = CreateLitVertex(1, -1, DFC, color, 0, 0, 0)x
'Back
Cube(6) = CreateLitVertex(-1, 1, -DFC, color, 0, 0, 0)x
Cube(7) = CreateLitVertex(1, 1, -DFC, color, 0, 0, 0)x
Cube(8) = CreateLitVertex(-1, -1, -DFC, color, 0, 0, 0)x
Cube(9) = CreateLitVertex(1, 1, -DFC, color, 0, 0, 0)x
Cube(10) = CreateLitVertex(-1, -1, -DFC, color, 0, 0, 0)x
Cube(11) = CreateLitVertex(1, -1, -DFC, color, 0, 0, 0)x
'Right
Cube(12) = CreateLitVertex(-DFC, 1, -1, color, 0, 0, 0)x
Cube(13) = CreateLitVertex(-DFC, 1, 1, color, 0, 0, 0)x
Cube(14) = CreateLitVertex(-DFC, -1, -1, color, 0, 0, 0)x
Cube(15) = CreateLitVertex(-DFC, 1, 1, color, 0, 0, 0)x
Cube(16) = CreateLitVertex(-DFC, -1, -1, color, 0, 0, 0)x
Cube(17) = CreateLitVertex(-DFC, -1, 1, color, 0, 0, 0)x
'Left
Cube(18) = CreateLitVertex(DFC, 1, -1, color, 0, 0, 0)x
Cube(20) = CreateLitVertex(DFC, -1, -1, color, 0, 0, 0)x
Cube(21) = CreateLitVertex(DFC, 1, 1, color, 0, 0, 0)x
Cube(22) = CreateLitVertex(DFC, -1, -1, color, 0, 0, 0)x
Cube(23) = CreateLitVertex(DFC, -1, 1, color, 0, 0, 0)x
'Top
Cube(24) = CreateLitVertex(-1, DFC, 1, color, 0, 0, 0)x
Cube(25) = CreateLitVertex(1, DFC, 1, color, 0, 0, 0)x
Cube(26) = CreateLitVertex(-1, DFC, -1, color, 0, 0, 0)x
Cube(27) = CreateLitVertex(1, DFC, 1, cocolor, 0, 0, 0)x
Cube(29) = CreateLitVertex(1, DFC, -1, color, 0, 0, 0)x
'Bottom
Cube(30) = CreateLitVertex(-1, -DFC, 1, color, 0, 0, 0)x
Cube(31) = CreateLitVertex(1, -DFC, 1, color, 0, 0, 0)x
Cube(32) = CreateLitVertex(-1, -DFC, -1, color, 0, 0, 0)x
Cube(33) = CreateLitVertex(1, -DFC, 1, color, 0, 0, 0)x
Cube(34) = CreateLitVertex(-1, -DFC, -1, color, 0, 0, 0)x
Cube(35) = CreateLitVertex(1, -DFC, -1, color, 0, 0, 0)x


2 - ساخت يک بافر vertex خالي با سايز مورد نظر :


Set VBuffer = D3DDevice.CreateVertexBuffer(Len(Cube(0)) * 36, 0, Lit_FVF, D3DPOOL_DEFAULT)x


3 - پر کردن بافر مربوطه با داده ها :


D3DVertexBuffer8SetData VBuffer, 0, Len(Cube(0)) * 36, 0, Cube(0)x


حال به سراغ روتين Render مي رويم :


Public Sub Render
D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, 0, 1#, 0 '//Clear the screen black
D3DDevice.BeginScene
D3DDevice.SetStreamSource 0, VBuffer, Len(Cube(0))x
D3DDevice.DrawPrimitive D3DPT_TRIANGLELIST, 0, 12
D3DDevice.EndScene
D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
End Sub


ساختار اصلي برنامه بصورت زير خواهد بود :


Dim RotateAngle As Single
Dim matTemp As D3DMATRIX '//To hold temporary
call Initialize
Do While bRunning
RotateAngle = RotateAngle + 0.1
If RotateAngle >= 360 Then RotateAngle = RotateAngle - 360
D3DXMatrixIdentity matWorld '//Reset our world matrix
D3DXMatrixIdentity matTemp
D3DXMatrixRotationX matTemp, RotateAngle * (pi / 180) x
D3DXMatrixMultiply matWorld, matWorld, matTemp
D3DXMatrixIdentity matTemp
D3DXMatrixRotationZ matTemp, RotateAngle * (pi / 180) x
D3DXMatrixMultiply matWorld, matWorld, matTemp
D3DDevice.SetTransform D3DTS_WORLD, matWorld
Render
DoEvents
Loop
ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در دوشنبه هشتم خرداد 1385 و ساعت 22:37
جلسه ششم 
سلام

موضوع : مفاهيم اوليه رسم اشکال سه بعدي در DirectX 8

در اين درس با استفاده از Direct3D يک مکعب را رسم مي کنيم . براي اين منظور ابتدا نياز به يک بافر داريم که بتوانيم شکل مورد نظر خود را در آن ذخيره کنيم :


Dim VBuffer as Direct3DVertexBuffer8


براي رسم مکعب از vertex هاي سه بعدي استفاده مي کنيم . براي اينکار نياز به تعريف يک تايپ جديد داريم :


Private Type LITVERTEX
x as single
y as single
z as single
color as long
specular as long
tu as single
tv as single
end type


توصيف گر اين فرمت ، بصورت زير است :


Const Lit_FVF = (D3DFVF_XYZ Or D3DFVF_DIFFUSE Or D3DFVF_SPECULAR Or D3DFVF_TEX1)x


براي توصيف مکعب در اين درس از روشي غيرکارامد استفاده شده است . به اين ترتيب که از ۳۶ عدد vertex استفاده شده ( در درسهاي بعدي متدهايي معرفي خواهند شد که اجازه مي دهند از ۸ عدد vertex باري توصيف مکعب استفاده کنيد ) .


Dim cube(35) as LITVERTEX


سپس بايد يکسري ماتريس سه بعدي تعريف کنيم :
اولين ماتريس ، matworld است که نشان مي دهد چگونه vertex ها در فضاي سه بعدي قرار گرفته اند . دومين ماتريس ، matview است که نشان مي دهد دوربين ( نقطه ديد ) در کجا قرار گرفته و سومين ماتريس ، matproj است که نشان مي دهد دوربين چگونه دنياي سه بعدي را روي صفحه دو بعدي نشان مي دهد :


Dim matworld as D3DMATRIX
Dim matview as D3DMATRIX
Dim matproj as D3DMATRIX


در تابع Initialize قبل از ساخت device بايستي چک کنيم که آيا مي توانيم از يک بافر Z شانزده بيتي استفاده کنيم يا نه ؟


If D3D.CheckDeviceFormat(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, DispMode.Format, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, D3DFMT_D16) = D3D_OK Then
D3DWindow.AutoDepthStencilFormat = D3DFMT_D16 '16 bit Z-Buffer


حال بايستي متد D3DCreateDevice را اجرا کنيد . سپس بايد سيستم سايه زني vertex را با فرمت vertex مان تنظيم کنيم :


D3DDevice.SetVertexShader Lit_FVF


همچنين سيستم نورپردازي را غير فعال مي کنيم :


D3DDevice.SetRenderState D3DRS_LIGHTING, False


Direct3D هيچ مثلثي را که در ديد شما نباشد رسم نخواهد کرد . براي متوقف کردن اين امر بايستي حالت culling آنرا متوقف کنيد همچنين vertex ها را بترتيب عقربه هاي ساعت معرفي کنيد :


D3DDevice.SetRenderState D3DRS_CULLMODE, D3DCULL_NONE


سپس بايد فرمت بافر Z را فعال سازيد :


D3DDevice.SetRenderState D3DRS_ZENABLE, 1


حال به بخش تعريف ماتريسها مي رسيم :
ان شا الله بحث ماتریس ها در جلسه ی بعد.

                                                                                              ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در دوشنبه هشتم خرداد 1385 و ساعت 12:15
جلسه ی پنجم 
 

موضوع : اختصاص بافت Texture به اشکال دو بعدي

در اين درس مي خواهيم يک مربع که داراي بافت مي باشد را رسم کنيم . براي اينکار از کتابخانه کمکي D3DX8 استفاده مي کنيم . همچنين شي Direct3DTexture8 را نيز استفاده مي نمائيم .


Dim D3DX as D3DX8
Dim Texture as Direct3DTexture8


حال بايستي در تابع Initialize بافت مربوطه را از روي يک فايل تصويري load کنيم :


Private Function Initialize as boolean
.
.
.
Set Texture=D3DX8.CreateTextureFromFile(D3DDevice,app.path & yourfilename) x
end function


تابع Render نيز بصورت زير خواهد بود :


Private Sub Render
D3DDevice.clear 0,byval 0,D3DCLEAR_TARGET,0,1#,0
D3DDevice.beginscence
D3DDevice.SetTexture 0,Texture
D3DDevice.DrawprimitiveUP D3DPT_TRIANGLESTRIP,2,Tripstrip(0),len(Tristrip(0))x
.
.
.
end function

ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در شنبه ششم خرداد 1385 و ساعت 22:45
زنگ تفریح 
سلام

دوستان خوب و مهربونم این هم یه زنگ تفریح. خیلی ها فکر می کنن نوشتن یه ساعت عقربه ای آنالوگ خیلی سخته من که این طور فکر نمی کنم شما هم بخونین بعد ببینین که سخته یا نه:

اول يک تايمر به فرم اضافه کنيد و Interval اون رو برابر ۱۰۰۰ قرار بدين. بعد :

Private Sub Form_Load()
  Me.BackColor = vbBlack
End Sub

Private Sub Timer1_Timer()
 
 Form1.Refresh
 X = Form1.Width / 2
 Y = Form1.Height / 2.2
 Circle (X, Y), Y - 200, vbWhite
 Circle (X, Y), Y - 220, vbWhite
  For i = 1 To 12
   Circle (X + (Y - 400) * Cos(i * 22 / 42), Y + (Y - 400) * Sin(i * 22 / 42)), 50, vbRed
  Next
 h = Hour(Time())
  If h > 12 Then
   h = h - 12
  End If
 m = Minute(Time())
 s = Second(Time())
 Line (X, Y)-(X + (Y - 600) * Cos((66 / 14 + s * (44 / 420))), Y + (Y - 600) * Sin((66 / 14 + s * (44 / 420)))), vbBlue
 Line (X, Y)-(X + (Y - 800) * Cos((66 / 14 + m * (44 / 420))), Y + (Y - 800) * Sin((66 / 14 + m * (44 / 420)))), vbYellow
 Line (X, Y)-(X + (Y - 1200) * Cos(66 / 14 + h * (44 / 84) + (m / 12) * (44 / 420)), Y + (Y - 1200) * Sin(66 / 14 + h * (44 / 84) + (m / 12) * (44 / 420))), vbWhite

End Sub

ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در جمعه پنجم خرداد 1385 و ساعت 14:32
جلسه چهارم 
 

سلام

بیشتر با این ابزار آشنا شویم:

موضوع : آشنايي با برخي اصطلاحات

1- Mesh : مش ، مجموعه اي از face ها است که يک شي سه بعدي را روي صفحه تشکيل مي دهند .

۲ - Face : يک چند ضلعی است که توسط مجموعه ای از نقاط به نام vertex ساخته مي شود .

۳ - Vertex : يک نقطه در فضاي سه بعدي است که براي دادن موقعيت ، scale و زاويه يک face استفاده مي شود .

۴ - Direct3D از شيي بنام D3DVERTEX براي نمايش يک Vertex استفاده مي کند . براي ساخت face نيز از آرايه اي از vertex ها استفاده مي شود . آرايه هميشه بايستي قابل تقسيم به سه باشد زيرا اشکال از face هاي مثلثي ساخته مي شوند . هنگاميکه اين مثلثها کنار هم گذاشته شوند ، شي سه بعدي را مي سازند . Direct3D از بافري با نام Index Buffer استفاده مي کند که با direct3D مي گويد که با چه ترتيبي vertex ها را رسم نمايد . index ها بايستي هميشه در جهت عقربه هاي ساعت مشخص شوند .

                                        ارادتمند شما مهرگان ایرانی    

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در جمعه پنجم خرداد 1385 و ساعت 12:24
جلسه ی سوم 
سلام

کم کم می تونیم اشکال دو بعدی رو رسم کنیم البته قبل از هر چیز مطلب زیر رو با دقت بخونید:

موضوع : رسم اشکال دو بعدي

مروري بر object هاي DirectX8
1 - DirectX8 : اين شي ، شي مرکزي براي directX است و به شما امکان دسترسي به توابع و اشيا DirectX را مي دهد .
۲ - Direct3D8 : شي اصلي براي کار با محيط سه بعدي مي باشد . هدف از آن ، ساخت Direct3DDevice8 است و همچنين شامل توابعي براي مشخص کردن توانايي هاي کارت گرافيک است .
۳ - Direct3DDevice8 : اين شي مسئول ساخت بافتها textures ، مديريت نورها در يک صحنه ، مديريت مواد materials و همچنين render صحنه است . در واقع اين شي ، قلب نمايشي کار شماست .
4 - D3DX8 : گر چه هميشه نيازي به استفاده از اين شي نيست ، اما اين شي شامل توابعي براي ساخت برنامه هاي userfriendly تر توسط DirectX است . مثلاً ساخت اشيا سه بعدي ( مثل کره ، مکعب و ... ) ، ساخت بافتها ، ساخت سطوح و غيره
شروع کار براي رسم اشيا دوبعدي
ابتدا ثابت FVF را تعريف مي کنيم . اين ثابت توصيف " فرمت قابل انعطاف نقطه flexible-vertex-format " براي يک vertex دو بعدي انتقال يافته و ساده شده مي باشد .
سپس بايستي يک ساختار براي توصيف اين vertex معرفي کنيم :


Const FVF = D3DFVF_XYZRHW Or D3DFVF_TEX1 Or D3DFVF_DIFFUSE Or D3DFVF_SPECULAR
Private Type TLVERTEX
X As Single
Y As Single
Z As Single
rhw As Single
color As Long
specular As Long
tu As Single
tv As Single
End Type


فرض کنيد بخواهيم يک مربع را در صفحه رسم کنيم . براي رسم آن نياز به 4 عدد vertex داريم . بنابراين آرايه TriStrip را از نوع TLVERTEX تعريف ميکنيم :


Dim TriStrip (0 To 3) As TLVERTEX


حال به سراغ تابع initialize که در درس ۱ با آن آشنا شديد مي رويم و دستورات زير را به آن اضافه مي کنيم :


Private Function Initialize as boolean
.
.
.


ابتدا سيستم سايه زني vertex را طوري تنظيم مي کنيم که از FVF استفاده کند .


D3DDevice.SetVertexShader FVF


حال سيستم lighting را براي vertex هاي دو بعدي غير فعال مي کنيم زيرا نيازي به آن نداريم :


D3DDevice.SetRenderState D3DRS_LIGHTING,false


حال بايستي تابع initializeGeometry را اجرا کنيم . اين تابع را در ادامه توضيح خواهم داد . اگر نتيجه اين تابع true باشد دراينصورت initialize به درستي انجام شده است :


if initializeGeometry()=true then initialize=true
end function


تابع initializeGeometry در اين درس ، تابعي ساده است که تنها آرايه Vertex ها را مقدار دهي مي کند . براي رسم يک مربع نياز به مقداردهي ۴ vertex در جهت عقربه هاي ساعت داريم ( اين مربع شامل ۲ مثلث است )


Private Function InitialiseGeometry() As Boolean
On Error GoTo BOut:
color = RGB(200, 100, 0)
TriStrip(0) = CreateTLVertex(100, 100, 0, 1, color, 0, 0, 0)
TriStrip(1) = CreateTLVertex(300, 100, 0, 1, color, 0, 0, 0)
TriStrip(2) = CreateTLVertex(100, 300, 0, 1, color, 0, 0, 0)
TriStrip(3) = CreateTLVertex(300, 300, 0, 1, color, 0, 0, 0)
InitialiseGeometry = True
Exit Function
BOut:
InitialiseGeometry = False
End Function


همانطور که مشاهده مي کنيد براي تعريف vertex از تابع CreateTLVERTEX استفاده شده است . اين تابع صرفاً مقادير ساختار TLVERTEX را مقداردهي مي کند :


Private Function CreateTLVertex(X As Single, Y As Single, Z As Single, rhw As Single, color As Long, specular As Long, tu As Single, tv As Single) As TLVERTEX


نکته : ضمن اينکه شما مي توانيد مقادير اعشاري floating point را براي مختصاتهاي x و y و z بکار ببريد ، Direct3D مختصاتها را با گردکردن آنها تخمين مي زند و بنابراين ممکنست باعث ايجاد نتايج ناخواسته شود .


CreateTLVertex.X = X
CreateTLVertex.Y = Y
CreateTLVertex.Z = Z
CreateTLVertex.rhw = rhw
CreateTLVertex.color = color
CreateTLVertex.specular = specular
CreateTLVertex.tu = tu
CreateTLVertex.tv = tv
End Function
حال بايستي تابع Render را بنويسيم :
Public Sub Render()
D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, 0, 1#, 0
D3DDevice.BeginScene
D3DDevice.DrawPrimitiveUP D3DPT_TRIANGLESTRIP, 2, TriStrip(0), Len(TriStrip(0))x
D3DDevice.EndScene
D3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
End Sub


ساختار اصلي براي اجراي توابع فوق بصورت زير است :


--Main part--
Initialize
Do While yourevent=true
Render
DoEvents
Loop

ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در پنجشنبه چهارم خرداد 1385 و ساعت 22:30
جلسه دوم 
 سلام

ادامه ی مطلب ساخت انیمشن های دو بعدی و سه بعدی:

موضوع : بدست آوردن مشخصات و تواناييهاي گرافيکي يک سيستم توسط DirectX-Graphic


1 - شمارش تعداد آداپتورهاي گرافيکي يک سيستم : فرض کنيد متغير nAdapters متغيري از نوع long باشد . همچنين شي D3DADAPTER_IDENTIFIER8 يک ساختار است که اطلاعات مربوط به آداپتور را نگه مي دارد . در اينصورت روتين enumerateAdapters بصورت زير خواهد بود :


Dim adapterinfo as D3DADAPTER_IDENTIFIER8
Private Sub EnumerateAdapters
Dim i as integer
nadapters=D3D.Getadaptercount


براي بدست آوردن جزئيات آداپبورها بصورت زير عمل مي کنيم :


for i=0 to nadapters-1
D3D.GetadapterIdentifier i ,0,adapterinfo


نام اين آداپتور بصورت ليستي از کدهاي اسکي است که بايستي آنها را درون يک string قرار دهيم :


for j=0 to 511
name=name & chr$(adapterinfo.description(j)) x
next j
name=replace(name,chr$(0)," ") x
end sub


بنابراين در متغير name نام آداپتور قرار خواهد گرفت .

۲ - مشخص کردن نوع Rendering : فرض کنيد شي D3DCAPS8 توانايي rendering آداپتور را نشان دهد . در اينصورت روتين EnumerateDevices بصورت زير خواهد بود :


Private EnumerateDevices
On Local Error resume next
Dim Caps as D3DCAPS8
deviceindex=0 'For Example
D3D.Getdevicecaps deviceindex,D3DDEVTYPE_HAL,caps
if err.number=D3DERR_NOTAVAILABLE then


اگر آداپتور امکان رندر سخت افزاري نداشته باشد در اينصورت :


MsgBox("Reference Rasterizer(REF)") x
else
MsgBox("Hardware Acceleration(HAL)+Reference Rasterizer(REF)") x
end if
end sub


3 - شمارش تعداد Mode نمايشي آداپتور :
فرض کنيد در صورت REF بودن امکان رندر ، متغير r=2 و در غيراينصورت r=1
باشد . همچنين شي D3DDISPLAYMODE اطلاعات مدهاي نمايشي را در خود
دارد . همچنين فرض کنيد متغير nModes از نوع longباشد . در اينصورت روتين enumeratedispmodes بصورت زير خواهد بود :


Private Sub EnumerateDispModes(r as Long,n as Long) x
Dim i as integer
Dim mode_tmp as D3DDISPLAYMODE
deviceindex=0 'For Example
nModes=D3D.Getadaptermodecount(deviceindex) x
for i=0 to nModes-1
D3D.EnumAdapterModes(deviceindex,i,mode_tmp) x


ابتدا Mode ها را به دو گروه ۱۶ بيتي و ۳۲ بيتي تقسيم مي کنيم :


if mode_tmp.format=D3DFMT_R8G8B8 or mode_tmp=D3DFMT_X8R8G8B8 or mode_tmp=D3DFMT_A8R8G8B8 then


حال چک مي کنيم که device قابل پذيرش و معتبر است يا نه :


if D3D.checkdevicetype(deviceindex,r,mode_tmp.format,mode_tmp.format,Flase)>=0 then
MsgBox(mode_tmp.width & "X" & mode_tmp.height & "32 Bit
FMT:" & mode_tmp.format ) x & "
end if
else
if D3D.checkdevicetype(deviceindex,r,mode_tmp.format,mode_tmp.format,Flase)>=0 then
MsgBox(mode_tmp.width & "X" & mode_tmp.height & "16 Bit
FMT:" & mode_tmp.format ) x & "
end if
end if
next i


4 - مشخص کردن توانايي هاي آداپتور گرافيکي : فرض کنيد در صورت REF بودن امکان رندر ، متغير r=2 و در غيراينصورت r=1 باشد :


Private Sub EnumerateHardware(r as long) x
Dim caps as D3DCAPS8
D3D.Getdevicecaps deviceindex,r,caps
If Caps.MaxActiveLights = -1 Then
MsgBox "Maximum Active Lights: Unlimited" x
Else
MsgBox "Maximum Active Lights: " & Caps.MaxActiveLights
End If
MsgBox "Maximum Point Vertex size: " & Caps.MaxPointSize
MsgBox "Maximum Texture Size: " & Caps.MaxTextureWidth & "X" & Caps.MaxTextureHeight
MsgBox "Maximum Primatives in one call: " & Caps.MaxPrimitiveCount
If Caps.TextureCaps And D3DPTEXTURECAPS_SQUAREONLY Then
MsgBox "Textures must always be square" x
End If
If Caps.TextureCaps And D3DPTEXTURECAPS_CUBEMAP Then
MsgBox "Device Supports Cube Mapping" x
End If
If Caps.TextureCaps And D3DPTEXTURECAPS_VOLUMEMAP Then
MsgBox "Device Supports Volume Mapping" x
End If
If Caps.DevCaps And D3DDEVCAPS_PUREDEVICE Then
MsgBox "Device supports the Pure Device Option" x
End If
If Caps.DevCaps And D3DDEVCAPS_HWTRANSFORMANDLIGHT Then
MsgBox "Device supports hardware transform and lighting" x
End If
If Caps.DevCaps And D3DDEVCAPS_HWRASTERIZATION Then
MsgBox "Device can use Hardware Rasterization" x
End If
If Caps.Caps2 And D3DCAPS2_CANCALIBRATEGAMMA Then
MsgBox "Device can Calibrate Gamma" x
End If
If Caps.Caps2 And D3DCAPS2_CANRENDERWINDOWED Then
MsgBox "Device can Render in Windowed Mode" x
End If
If Caps.Caps2 And D3DCAPS2_FULLSCREENGAMMA Then
MsgBox "Device can calibrate gamma in fullscreen mode" x
End If
If Caps.RasterCaps And D3DPRASTERCAPS_FOGRANGE Then
MsgBox "Device supports range based fog calculations" x
End If
If Caps.RasterCaps And D3DPRASTERCAPS_ANISOTROPY Then
MsgBox "Device supports Anisotropic Filtering" x
End If
If Caps.RasterCaps And D3DPRASTERCAPS_ZBUFFERLESSHSR Then
MsgBox "Device does not require a Z-Buffer/Depth Buffer" x
End If

ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در چهارشنبه سوم خرداد 1385 و ساعت 23:9
تا بیست و پنج تیرماه هر روز یک مطلب راجع به ویژوال بیسیک 
سلام

دوستان گرامی در نظر داریم امتحان ویژوال رو همگی با هم خیلی قدرتمند بدیم به همین دلیل تصمیم گرفتم هر روز یک مطلب راجع به ویژوال بنویسم:

فکر می کنم یه تعدادی از دوستان پروژه شون رو در مورد طراحی یه نرم افزار انیمشن سازی برداشتند فکر می کنم این سلسله مطلب بهشون کمک کنه:

موضوع : ساخت يک واسط direct3D
DirectX8 ابزاري براي ساخت تصاوير ثابت و متحرک دو بعدي و سه بعدي مي باشد .
براي کار با DirectX8 ابتدا بايستي آنرا روي سيستم خود نصب کنيد . سپس در محيط vb از منوي project گزينه References را انتخاب کنيد . در فرمي که ظاهر مي شود اطمينان حاصل کنيد که گزينه DirectX8 for VB type library فعال باشد .
براي کار با DirectX8 بايستي از تعريف نمودن شي پايه DirectX8 شروع نمود :


Dim Dx as DirectX8


شي Direct3D8 براي کنترل اشيا‌‌ سه بعدي بکار مي رود :


Dim D3D as Direct3D8


شي Direct3DDevice8 ، سخت افزار مربوط به رندر تصاوير را مشخص مي کند :


Dim D3DDevice as Direct3DDevice8


حال براي شروع کار با Direct3D ، تابع ( ) initialise را تعريف مي کنيم . اگر اينکار درست انجام شود تابع ، مقدار true را برمي گرداند :


public function initialise () as boolean
Dim DispMode as D3DISPLAYMODE


شي D3DISPLAYMODE حالت نمايش را مشخص مي نمايد .


Dim D3Dwindow as D3DPRESENT_PARAMETERS


شي فوق مشخص مي کند که viewport شما چگونه باشد .
حال شي اصلي DirectX8 را مي سازيم :


Set Dx=New DirectX8


سپس شي اصلي ساخت واسط سه بعدي را مي سازيم :


()set D3D.Dx.Direct3Dcreate


سپس حالت فعلي نمايش را با دستور زير استخراج مي کنيم :


D3D.getadapterdisplaymode D3DADAPTER_DEFAULT,dispmode


حال دو حالت براي کار با DirectX داريم :
1 - windowed mode
2 - fullscrean mode
1 - براي کار با حالت پنجره اي ابتدا اين موضوع را به DirectX اطلاع مي دهيم :


D3Dwindow.windowed=1


سپس نوع referesh تصوير را مشخص مي کنيم


D3Dwindow.swapeffect=D3DSWAPEFFECT_COPY_VSYNC


سپس بايستي فرمت بافر نگهدارنده تصاوير را مشخص کنيم :


D3Dwindow.backbufferformat=dispmode.format


2 - براي کار با حالت تمام صفحه ، ابتدا نوع refresh را مشخص کرده سپس تعداد بافر هاي تصوير و سرانجام نوع و سايز بافر را مشخص مي نمائيم :


D3Dwindow.swapeffect=D3DSWAPEFFECT_DISCARD
D3Dwindow.backbuffercount=1
D3Dwindow.backbufferformat=dispmode.format
D3Dwindow.backbufferheight=dispmode.height
D3Dwindow.backbufferwidth=dispmode.width


سپس پنجره نمايش مشخص مي گردد :


D3Dwindow.hdevicewindow=frmMain.hwnd



@حال بايستی يک device ساخته شود که يا از طريق سخت افزار و يا نرم افزار تصاوير را رندر نمايد :


Set D3DDevice=D3Dcreatedevice(D3DADAPTER_DEFAULT
,D3DDEVTYPE_HAL,
frmMain.hwnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,
D3Dwindow)x,
end sub


درصورتي که کارت گرافيک شما امکانات رندر سخت افزاري تصاوير را ندارد از D3DDEVTYPE_REF بجاي D3DDEVTYPE_HAL استفاده کنيد .
حال بايستي روتين render را بنويسيم . البته در اين درس تصويري براي رندر نداريم و تنها چگونگي نوشتن اين روتين را بيان خواهم کرد :
۱ - ابتدا بايستي device مربوط به رندر ، قبل از کشيدن تصوير در آن پاک شود :


D3DDevice.clear 0,byval 0,D3DCLEAR_TARGET,&H0,1#,0


عدد hex اي که در دستور فوق آمده رنگ زمينه صفحه را مشخص مي کند
۲ - سپس بايستي تصاوير مورد نظر را رندر کنيم . اينکار توسط دستورات زير انجام مي شود :


D3DDevice.beginscence
all rendering calls go between these two lines '
D3DDEvice.endscence


3 - در پايان بايستي صفحه را update کنيد :


D3DDevice.present byval 0,byval 0,0,byval 0

ارادتمند شما مهرگان ایرانی

|+|
نوشته شده توسط  دانشجویان رشته کامپیوتر در سه شنبه دوم خرداد 1385 و ساعت 21:6
ActiveX جالب براي VB6  
دکمه و دیگر ابزار Xp برای وی بی 6

برای دانلود کنترل ocx این ابزار به نشانی زیر رفته
http://www.vbcorner.net/
سپس از قسمت سمت راست XPControls را انتخاب کرده و با زدن دکمه دانلود دانلودشان کنید.

۲- پرینت پریویو
http://www.qwerks.com/download/3693/report.zip
۳- کنترل روی فایل های mp3
http://www.activex.moonvalley.com/samples/mp3player.zip
اگر توضیحات می خواهید به این آدرس مراجع کنید
http://activex.moonvalley.com/Mp3PControl.HTM
۴- کنترل playlist
http://www.activex.moonvalley.com/samples/playlist.zip

|+|
نوشته شده توسط   در شنبه سی ام اردیبهشت 1385 و ساعت 23:16
يك ActiveX جالب براي VB6 (طراحي دكمه)  
براي طراحي دكه هاي فانتزي در VB6 از اين نرم افزار استفاده كنيد
3D Active Button Magic 7.0

براي Download كردن برنامه :
http://www.multimediasoft.com/bins/3dabm7.exe

سورس راهنما براي VB6 :
http://www.multimediasoft.com/3dabm/btndemo.zip
|+|
نوشته شده توسط   در شنبه سی ام اردیبهشت 1385 و ساعت 23:2
پياده سازي ليست پيوندي  
|+|
نوشته شده توسط   در جمعه بیست و دوم اردیبهشت 1385 و ساعت 16:49
ويژوال بيسيك 
  • آشنایی با شیئ پرینتر در ویژوال بیسیک
    شیئ پرینتر، شیی است که پرینتر پیش فرض سیستم را کنترل می‌کند. در این مقاله با برخی از خواص و متدهای این شیئ آشنا خواهید شد.
  • توابع ریاضی در ویژوال بیسیک
    ویژوال بیسیک 6 دارای مجموعه‌ای از توابع است که برای انجام محاسبات عددی پیش بینی شده اند. در این مقاله ابتدا با این توابع آشنا شده و سپس چگونگی ایجاد سایر توابع ریاضی را یاد خواهید گرفت.
  • بررسی توابع مدیریت رشته‌ها در ویژوال بیسیک
    در این مقاله توابعی که در کار با رشته‌ها (Strings) در ویژوال بیسیک می‌توان از آنها استفاده کرد بهمراه مثال‌هایی از کاربرد هر تابع معرفی شده است.
  • ایجاد کلاسی برای کار با فایلهای XML در ویژوال بیسیک
    هدف از این مبحث ایجاد یک کلاس مقدماتی برای خواندن داده ها از فایلهای XML می باشد. توجه داشته باشید که کلاسی که در این بخش معرفی می شود کلاسی ساده می باشد که فقط با آن می توان مقدار یک گره (Node) از در فایل XML را خواند.
  • |+|
    نوشته شده توسط   در شنبه بیست و ششم فروردین 1385 و ساعت 22:54
    آموزش پاسكال 

    Pascal

    زبان پاسكال يكي از زبانهاي برنامه سازي است كه ويژگيهاي آموزشي آن بسيار بالاست يعني زبان خوبي براي آموزش برنامه نويسي منظم و دقيق است.قابليت خوانايي و درك برنامه هاي اين زبان بالاست وميتوان برنامه هايي نوشت كه احتمال خطاهاي آنها بسيار اندك باشد علتش اين است كه يك زبان ساختار يافته (structed) است .


    ادامه مطلب
    |+|
    نوشته شده توسط   در شنبه بیست و ششم فروردین 1385 و ساعت 22:42
    چگونه يك هكر شويد ؟ 

    براي هكر شدن بايد يادبگيريد كه چگونه برنامه نويسي كنيد، البته برنامه نويسي از مهارت هاي اصلي(پايه) هك كردن است.اگر شما هيچ زبان برنامه نويسي بلد نيستيد توصيه مي كنيم با زبان python شروع كنيد. اين زبان بطور عالي طراحي ومستند سازي شده است ،و براي مبتدي ها بسيار مناسب است.

    با وجود اينكه اولين زبان مفيد برنامه نويسي است اما اسباب بازي نيست و خيلي قدرتمند و انعطاف پذير است. وبراي پروژه هاي بزرگ مناسب است. من دريك صفحه بنام سايت ارزيابي زبان python   جزئيات بيشتري را توضيح داده ام ، خود آموزهاي خوبي هم در وب سايت python در دسترس است.

    Java هم يك زبان خوب براي يادگيري برنامه نويسي است . اين زبان مشكل تر از زبان python است.اما توليد كد آن سريعتر است.من فكر ميكنم زبان دوم براي شما عالي به حساب آيد. اما آگاه باشيد شما به سطح مهارتهاي يك هكر و حتي يك   برنامه نويس نخواهيد رسيد اگرفقط يك يا دو زبان را بدانيد.

    شما لازم است ياد بگيريد كه چطور راجع به مسئله هاي برنامه نويسي در يك راه عمومي (جامع)فكر بكنيد.

    براي اينكه يك هكر واقعي شويد، بايد به نقطه اي برسيد كه درآن بتوانيد براساس چيزهايي كه ميدانيد ،يك زبان را در ظرف چند روز ياد بگيريد .

    اين بدين معني است كه شما بايد چند زبان خيلي سخت مختلف را يادبگيريد. اگر شما قرار است بطور جدي وارد برنامه نويسي شويد ،شما بايد زبان C كه هسته اصلي سيستم عامل يونيكس است را ياد بگيريد.

    C++ خيلي به C نزديك است(مشابه است). اگر شما يكي را(c/c++ )بدانيد، يادگيري ديگري مشكل نخواهد بود. به هر حال هيچكدام از اين دو زبان براي شروع يادگيري برنامه نويسي خوب نيست. واقعاً شما هرچه از برنامه نويسي در C پرهيز كنيد ،كاراتر خواهيد بود.C خيلي كار آمد است . وخيلي در منابع ماشيني صرفه جو مي باشد.

    متاسفانه ،C  بخاطر نياز داشتن به مديريت منابع سطح پايين (مانندحافظه) كارايي را كم ميكند ، كه شما بايد آنرا بوسيله دستي انجام بدهيد. كد گذاري زبانهاي سح پايين ،پيچيده و همراه با اشكال وعيب است.و مقدار زيادي از وقت شما در اشكال زدايي هدر مي دهد. با ماشينهاي امروزي كه قدرتمند هستند،اين زرنگي است كه از يك زبان برنامه نويسي كه وقت كمتري ميگيرد استفاده كنيد.بنابراين از python استفاده كنيد.

    زبان هاي ديگري كه اهميت ويژهاي براي هكرها دارند ،زبانهاي Lisp و Perl هستند. Perl به علت قدرت استدلال مفيدش ارزش يادگيري دارد.براي فعال كردن صفحات وب و سيستم مديريت شبكه هاي كامپيوتري زياد مورد استفاده قرا مي گيرد.

    بنابراين حتي اگر هيچ وقت قرارنيست با Perl برنامه بنويسيد اما حداقل خواندن آنرا يادبگيريد.اغلب مردم از Perl استفاده مي كنند در صورتي كه من توصيه مي كنم از python استفاده كنيد. براي اجتناب كردن از برنامه نويسي C در كارهايي كه اين زبان كارآيي ندارد لازم است كه كدهاي آنرا(Perl)ياد بگيريد.

    يادگيري Lisp نيز به دلايل مختلفي با ارزش است زيرا وقتي آنرا تمام كرديد ،تجربه اي عميق واساسي خواهيد يافت.

    آن تجربه از شما يك برنامه نويس بهتري خواهد ساخت حتي اگر در آينده از Lisp استفاده نكنيد . واقعاً اين عالي است كه تمام اين 5 زبان(perl,java,(c/c++),lisp,perl ) را يادبگيريد.

     لينك منبع

    |+|
    نوشته شده توسط   در شنبه بیست و ششم فروردین 1385 و ساعت 22:30
    آرايه ها در c 
    آرايه ها مي توانند داراي ابعاد بيشتري نيز باشند. در زبان C نيز مي توان يك آرايه چند بعدي را بصورت زير اعلان كرد:

    <type> <var-name> [<size 1>][<size 2>]  …   [<size n>] ;

    بعنوان مثال، اعلان زير يك آرايه دوبعدي را معرفي مي نمايد:

    int A[5][8] ;

    براي دسترسي به هر عنصر از اين آرايه بايد از دو علامت [] استفاده كرد. توجه كنيد كه انديس سطرها و ستونها هر دو از 0 آغاز مي گردند. بعنوان مثال:

    int A[5][8] ;
    A[3][1] = 24;

    البته در مورد آرايه هاي با ابعاد بالاتر نيز به شكل مشابهي عمل مي گردد. بعنوان مثال به نحوه استفاده از يك آرايه سه بعدي در مثال زير دقت كنيد:

    int B[5][8][6] ;
    B[2][4][0] = 12;

    برنامه 3) برنامه اي بنويسيد كه نمرات تعدادي دانشجو را براي 5 درس دريافت و آنها را بهمراه معدل دانشجو ذخيره نمايد، سپس براي هر دانشجو معدل وي را چاپ نمايد.

    void main() {
    const int maxStudent = 100;
    float grades[maxStudent][5] ;
    float average[maxStudent];
    int i, j, n;
    printf("enter student number:");
    scanf("%d",&n);
    for (i=0 ; i< n ; i++) {
    printf("student no %d:\n",i+1);
    sum = 0;
    for (j= 0 ;j<5 ; j++) {
    printf("enter grade : ");
    scanf("%f", &grades[i][j]);
    sum += grades[i][j] ;
    }
    average[i] = sum / 5 ;
    }
    for (i=0 ; i< n ; i++)
    printf("average of student %d is %f \n",i+1, average[i]);
    }

    و نكته آخر اينكه مقداردهي اوليه به آرايه هاي چندبعدي امكان پذير است و بصورت زير انجام مي پذيرد:

    int A[3][4] = { {12, 5, 3, 8} , {-3, 7, -9, 2}, {4, 22, 18, 6} };

    يعني يك علامت {} براي كل مقداردهي قرار مي گيرد، سپس هر رديف از آرايه در داخل يك {} مجزا قرار مي گيرد. براي ابعاد بالاتر نيز به روش مشابهي عمل مي گردد. بعنوان مثال براي آرايه هاي سه بعدي داريم:

    int A[2][3][4] = { { {12, 5, 3, 8} , {-3, 7, -9, 2}, {4, 22, 18, 6} } , { {8, 1, -3, 4} , {-2, 8, 11, 21} , {7, 3, -15, -8} } };

    لينك منبع

    |+|
    نوشته شده توسط   در سه شنبه بیست و دوم فروردین 1385 و ساعت 23:57
    نشريه برنامه نويس 
    نشريه برنامه نويس ايراني هر 2 ماه يکبار منتشر ميگردد و محتوي مقالاتي خواهد بود که مناسب براي سطوح مختلف برنامه نويسان باشد.

    تعدادي از مفاهيم و مطالب مورد بحث در نشريه به شرح زير ميباشند:

    آموزش: متون آموزشي کوچک در مورد مباحث مختلف برنامه نويسي
    مهندسي نرم افزار: مديريت و مهندسي پروژه هاي برنامه نويسي
    برنامه نويسي پايگاههاي داده : MySQL, MS-SQL, PostgreSQL, Oracle
    برنامه نويسي وب : ASP, PHP, ISAPI, Perl, CGI, ...
    برنامه نويسي تحت محيط عامل Linux : کدهاي نمونه ، متون آموزشي کوچک
    بحث و گفتگو: عنوانهاي مهم مورد بحث در تابلوهاي بحث و گفتگو
    اخبار : ابزارها و تازه هاي مهندسي نرم افزار و برنامه نويسي

    براي اشتراک در نشريه ماهانه برنامه نويس ايراني بر روي آدرس زير اشاره کرده و سپس در پنجره ظاهر شده آدرس پست الکترونيک خود را وارد کرده و دکه ارسال را فشار دهيد.

    هرماه يک نسخه از نشريه با فرمت PDF برای شما ارسال خواهد شد.

    اشتراک نشريه الکترونيک                           لينك سايت نشريه

    |+|
    نوشته شده توسط   در سه شنبه بیست و دوم فروردین 1385 و ساعت 23:45
    ايجاد كاراكترهاي فارسي مستقر در حافظه تحت داس: 

    //i#include <stdio.h> //#include <conio.h> //#include <stdlib.h> #include <dos.h> void farsi(void) { unsigned int font; struct REGPACK reg; union REGS regs1; char ex_array[1457] ; char font_def[91][14]={ /* 128 - 175 */ {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x8 ,0x1c,0x8 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x20,0x30,0x38,0x18,0xc ,0xc ,0x4 ,0x4 ,0x4 ,0x4 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x42,0x7e,0x7c,0x30,0x18,0x18,0x8 ,0x8 ,0x8 ,0x8 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x49,0x7f,0x76,0x30,0x18,0x18,0x8 ,0x8 ,0x8 ,0x8 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x8 ,0x10,0x20,0x18,0x8 ,0x10,0x20,0x21,0x3e,0x1c,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x8 ,0x8 ,0xc ,0x16,0x23,0x41,0x49,0x7f,0x36,0x0 ,0x0 }, {0x0 ,0x0 ,0x42,0x7e,0x3e,0x4 ,0x4 ,0x4 ,0x6 ,0x3 ,0x3 ,0x1 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x41,0x41,0x63,0x36,0x1c,0x1c,0x8 ,0x8 ,0x8 ,0x8 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x8 ,0x8 ,0x8 ,0x8 ,0x1c,0x1c,0x36,0x63,0x41,0x41,0x0 ,0x0 }, {0x0 ,0x0 ,0x18,0x3c,0x44,0x44,0x3c,0x4 ,0x6 ,0x3 ,0x3 ,0x1 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0xc ,0x18,0x18,0x18,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0xff,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x3c,0x42,0x40,0x60,0x10,0xc ,0xc ,0x0 ,0xc ,0xc ,0x0 ,0x0 }, {0x0 ,0x1 ,0x3e,0x40,0x8 ,0x8 ,0x8 ,0x8 ,0x8 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0xc ,0x10,0x3c,0x0 ,0x1 ,0x1 ,0xfe,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0xc ,0x10,0x1c,0x20,0xc ,0x10,0x0 ,0x0 ,0x0 }, {0x0 ,0x8 ,0xc ,0x8 ,0x8 ,0x8 ,0x8 ,0x8 ,0x8 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x4 ,0x4 ,0x4 ,0x4 ,0x4 ,0x4 ,0x4 ,0x3 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x40,0x81,0x81,0x7e,0x0 ,0x0 ,0x10,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x1 ,0x1 ,0xfe,0x0 ,0x0 ,0x20,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x40,0x81,0x81,0x7e,0x0 ,0x0 ,0x28,0x10,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x1 ,0x1 ,0xfe,0x0 ,0x0 ,0x28,0x10,0x0 }, {0x0 ,0x0 ,0x0 ,0x14,0x0 ,0x40,0x81,0x81,0x7e,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x14,0x0 ,0x0 ,0x1 ,0x1 ,0xfe,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x8 ,0x14,0x0 ,0x40,0x81,0x81,0x7e,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x8 ,0x14,0x0 ,0x0 ,0x1 ,0x1 ,0xfe,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x18,0x24,0x2 ,0x3f,0x40,0x80,0x88,0x80,0x41,0x3e}, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x18,0x24,0x3 ,0xfc,0x0 ,0x0 ,0x8 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x18,0x24,0x2 ,0x3f,0x40,0x80,0x94,0x88,0x41,0x3e}, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x18,0x24,0x3 ,0xfc,0x0 ,0x0 ,0x28,0x10,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x18,0x24,0x2 ,0x3f,0x40,0x80,0x80,0x80,0x41,0x3e}, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x18,0x24,0x3 ,0xfc,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x10,0x0 ,0x18,0x24,0x2 ,0x3f,0x40,0x80,0x80,0x80,0x41,0x3e}, {0x0 ,0x0 ,0x8 ,0x0 ,0x0 ,0x18,0x24,0x3 ,0xfc,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x4 ,0x2 ,0x1 ,0x21,0x3e,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x8 ,0x0 ,0x0 ,0x4 ,0x2 ,0x1 ,0x21,0x3e,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x1 ,0x1 ,0x1 ,0x2 ,0x24,0x18,0x0 }, {0x0 ,0x0 ,0x0 ,0x2 ,0x0 ,0x0 ,0x0 ,0x1 ,0x1 ,0x1 ,0x2 ,0x24,0x18,0x0 }, {0x0 ,0x0 ,0x2 ,0x5 ,0x0 ,0x0 ,0x0 ,0x1 ,0x1 ,0x1 ,0x2 ,0x24,0x18,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x15,0x15,0x9a,0x88,0x88,0x88,0x70,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x15,0x15,0xea,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x4 ,0xa ,0x0 ,0x0 ,0x15,0x15,0x9a,0x88,0x88,0x88,0x70,0x0 }, {0x0 ,0x4 ,0xa ,0x0 ,0x0 ,0x0 ,0x15,0x15,0xea,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x2 ,0x5 ,0x29,0x1e,0x88,0x88,0x88,0x70,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x6 ,0x29,0x31,0xde,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x2 ,0x0 ,0x0 ,0x2 ,0x5 ,0x29,0x1e,0x88,0x88,0x88,0x70,0x0 }, {0x0 ,0x4 ,0x0 ,0x0 ,0x0 ,0x6 ,0x29,0x31,0xde,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x20,0x30,0x20,0x20,0x26,0x29,0x31,0xfe,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, /* 225 - 255 */ {0x0 ,0x20,0x34,0x20,0x20,0x26,0x29,0x31,0xfe,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0xc ,0x12,0x10,0x3e,0x40,0x80,0x80,0x80,0x42,0x3c}, {0x0 ,0x0 ,0x0 ,0x0 ,0xc ,0x1e,0xc ,0x12,0x21,0x40,0x40,0x40,0x21,0x1e}, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x1c,0x3c,0x18,0xe7,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x6 ,0x9 ,0x8 ,0xff,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x8 ,0x0 ,0x0 ,0xc ,0x12,0x10,0x3e,0x40,0x80,0x80,0x80,0x42,0x3c}, {0x0 ,0x4 ,0x0 ,0x0 ,0xe ,0x1e,0xc ,0x12,0x21,0x40,0x40,0x40,0x21,0x1e}, {0x0 ,0x0 ,0x8 ,0x0 ,0x0 ,0x1c,0x3c,0x18,0xe7,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x4 ,0x0 ,0x0 ,0x0 ,0x6 ,0x9 ,0x8 ,0xff,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x4 ,0x0 ,0x0 ,0x6 ,0x49,0x89,0x87,0x7e,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x4 ,0x0 ,0x0 ,0x6 ,0x9 ,0x9 ,0x7 ,0xfe,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0xa ,0x0 ,0x0 ,0x2 ,0x5 ,0x45,0x83,0x81,0x81,0x42,0x3c,0x0 }, {0x0 ,0xa ,0x0 ,0x0 ,0x6 ,0x9 ,0x9 ,0x7 ,0xfe,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x2 ,0x4 ,0x8 ,0x8 ,0x4 ,0x2 ,0x41,0x81,0x7e,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x3 ,0x4 ,0x8 ,0x8 ,0x6 ,0x1 ,0x1 ,0xfe,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x12,0x24,0x8 ,0x8 ,0x4 ,0x2 ,0x41,0x81,0x7e,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x13,0x24,0x8 ,0x8 ,0x6 ,0x1 ,0x1 ,0xfe,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x1 ,0x3 ,0x1 ,0x1 ,0x1 ,0x1 ,0x41,0x81,0x81,0x81,0x42,0x3c,0x0 }, {0x0 ,0x21,0x21,0x11,0x11,0x9 ,0x9 ,0x7 ,0x1e,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x1 ,0x3 ,0x1 ,0x1 ,0x1 ,0x1 ,0x1 ,0xfe,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x6 ,0x9 ,0x3e,0x40,0x40,0x40,0x40,0x40}, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x6 ,0x9 ,0x9 ,0xf6,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x8 ,0x0 ,0x41,0x81,0x81,0x81,0x42,0x3c,0x0 }, {0x0 ,0x0 ,0x0 ,0x8 ,0x0 ,0x0 ,0x1 ,0x1 ,0xfe,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x6 ,0x9 ,0x9 ,0x7 ,0x1 ,0x2 ,0x44,0x38,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0xc ,0x12,0x11,0x11,0xe ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x1c,0x24,0x28,0xf3,0x24,0x14,0xc ,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x8 ,0x1c,0x26,0x25,0x19,0xee,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x7 ,0x48,0x8c,0x82,0x82,0x7c}, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x3 ,0x44,0x88,0x8e,0x81,0x81,0x7e,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x1 ,0x1 ,0xfe,0x0 ,0x0 ,0x28,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 ,0x0 }, /***** latin number patterns */ {0x0 ,0x0 ,0x0 ,0x7c,0xc6,0xce,0xde,0xf6,0xe6,0xc6,0xc6,0x7c,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x18,0x38,0x78,0x18,0x18,0x18,0x18,0x18,0x7e,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x7c,0xc6,0x6 ,0xc ,0x18,0x30,0x60,0xc6,0xfe,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x7c,0xc6,0x6 ,0x6 ,0x3c,0x6 ,0x6 ,0xc6,0x7c,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0xc ,0x1c,0x3c,0x6c,0xcc,0xfe,0xc ,0xc ,0x1e,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0xfe,0xc0,0xc0,0xc0,0xfc,0x6 ,0x6 ,0xc6,0x7c,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x38,0x60,0xc0,0xc0,0xfc,0xc6,0xc6,0xc6,0x7c,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0xfe,0xc6,0x6 ,0xc ,0x18,0x30,0x30,0x30,0x30,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x7c,0xc6,0xc6,0xc6,0x7c,0xc6,0xc6,0xc6,0x7c,0x0 ,0x0 }, {0x0 ,0x0 ,0x0 ,0x7c,0xc6,0xc6,0xc6,0x7e,0x6 ,0x6 ,0xc ,0x78,0x0 ,0x0 } }; regs1.h.ah = 0x12; regs1.h.bl = 0x10; int86(0x10,&regs1,&regs1); font = regs1.h.bl; if(font==0x10) font=0; /* neither EGA nor VGA */ else { regs1.x.ax = 0x1130 ; regs1.h.bh = 6 ; int86(0x10,&regs1,&regs1); font = regs1.x.cx; /* download graphic chr.s here */ } /*********** Make Font Data ************************************/ if((char )font) /* EGA or VGA */ { register unsigned int j ; char i ; for (j=0 ; j<91 ; j++ ) { for (i=0 ; i< 14 ; i++ ) ex_array[i+ j * font]=font_def[j][i]; if(font==16) ex_array[14+j*16]=ex_array[15+j*16]=0; } /* download */ reg.r_bx=font<<8; reg.r_cx=48; reg.r_dx=128; reg.r_es=FP_SEG(ex_array); reg.r_bp=FP_OFF(ex_array); reg.r_ax=0x1110; intr(0x10,&reg); reg.r_bx=font<<8; reg.r_cx=32; reg.r_dx=224; reg.r_es=FP_SEG(ex_array+48*font); reg.r_bp=FP_OFF(ex_array+48*font); reg.r_ax=0x1110; intr(0x10,&reg); } } void main(void) { farsi(); }

    |+|
    نوشته شده توسط   در یکشنبه بیستم فروردین 1385 و ساعت 0:8
    آرشيو کاراکتر:کامپیوتر دانشگاه فریمان
    نوشته هاي پيشين
    <-ArchiveTitle->