برای بهترین ها

هر کاری که بتونم

برای بهترین ها

هر کاری که بتونم

آموزش برنامه نویسی

آموزش برنامه نویسی  

 

 

 

 

 
 
 
 
معماری Intel Core2 در مقابل AMD Athlon 64
 

معماری Intel Core2 در مقابل AMD Athlon 64 (قسمت 1)
 

نزدیک به یک سال پیش در همایش IDF 2005، اینتل رسما جایگزینی معماری NetBrust پردازنده های پنتیوم 4 خود را با معماری قدرتمند دیگری به نام Core™ اعلام کرد، این معماری جدید به تدریج به کلیه پردازنده های این شرکت از پردازنده های کامپیوترهای همراه گرفته تا پردازنده های سرورهای Xeon نفوذ خواهد کرد. از ماه آپریل سال 2001 که پردازنده های پنتیوم 4 معرفی شدند، معماری NetBrust تنها معماری پردازنده های حوزه کامپیوتر‌های «روی‌میزی» اینتل به شمار می رفت، با وجود اینکه این معماری در مقابل معماری K8 به کار گرفته شده در پردازنده های Athlon 64 شرکت AMD (برای مطالعه بیشتر دراین مورد به سایر مقالات سایت میکرو رایانه مراجعه نمایید) ضعف های متعددی داشت، اصرار شرکت اینتل بر حکم فرمایی آن به روی پردازنده های پنتیوم 4 بخش بسیار بزرگی از بازار پردازنده ها را به شرکت AMD با معماری موفق K8 خود اهدا کرد.

معماری جدید Core™ که تا چند ماه دیگر در پردازنده های Core2 Duo و Core2 Extreme تجلی پیدا خواهد کرد، آغاز یکه تازی مجدد اینتل در بازار پردازنده ها خواهد بود. در این مقاله ابتدا ساختار CPU و معماری آن به طور ساده بیان خواهد شد سپس به بررسی نوآوری های معماری Core™ و تفاوت های آن با معماری K8 خواهیم پرداخت و در انتها عملکرد پردازنده هایCore2 را بررسی خواهیم کرد.
نسل بعدی پردازنده های اینتل
از زمان نسل اول پردازنده های اینتل که با معرفی پردازنده 8086 در سال 1978 آغاز شد تا کنون تنها مجموعه ای از دستورالعمل های آن زنده باقی مانده و هنوز در اکثر نرم افزارها از آنها استفاده می شود، هرچند نسل های جدید محدوده این دستورالعمل ها را که به نام دستورالعمل های x86 شناخته می‌شوند گسترده تر کردند ، اما سازگاری با دستورالعمل‌های نسل‌های پیشین هرگز در طراحی معماری نسل‌های بعدی فراموش نشد.

معماری نسل ششم پردازنده‌های اینتل که از «پنتیوم پرو» تا «پنتیوم III» را در برمی گرفت یکی از موفق ترین معماری های اینتل به شمار می رود، این معماری که P6 نام دارد توانست به پردازنده های اینتل آن چنان قدرتی بخشد که مدتها رقیبی برای آنها پیدا نمی شد، اما پس از آن، معماری NetBrust به کار برده شده در پردازنده های «پنتیوم 4»، دیگر نتوانست به یکه تازی های اینتل در بازار پردازنده های کامپیوترهای شخصی ادامه دهد.

معماری نسل آینده پردازنده های اینتل که Core™ نام گرفته است، آن چنان متفاوت است که شرکت اینتل تصمیم گرفته نام پردازنده هایی که از این معماری در آنها بهره برده شده دیگر «پنتیوم» نباشد، با این که پیش بینی مرگ «پنتیوم» در سیزدهمین سال حیاتش چندان دور از انتظار نبود.

 



لوگو و شعار جدید اینتل
نام تجاری جدیدی که از این پس بر روی کلیه پردازنده های اینتل گذاشته خواهد شد، بسیار به معماری آنها نزدیک است: Core2. تا کنون عرضه دو خانواده پردازنده های Core2 Duo برای کامپیوتر های میان قیمت و Core2 Extreme برای کامپیوترهای گرانقیمت در حوزه کامپیوترهای روی میزی قطعی شده و در ماه های آینده شاهد حضور آنها در بازار خواهیم بود، هر دو این پردازنده ها با هسته Conroe تجهیز شده اند که از پیکر بندی دوهسته بهره می‌برد. در حوزه کامپیوترهای همراه نیز هسته Merom و در حوزه کامپیوترهای سرویس دهنده، هسته Woodcrest معرفی شده اند اما هنوز جزئیات دقیقی در مورد پردازنده هایی که این هسته ها در آن به کار گرفته خواهد شد داده نشده است.

شباهت بسیار زیادی میان نام پردازنده های Core2 با پردازنده های Core Duo وجود دارد، Core Duo و برادر ارزانقیمتش Core Solo نام پردازنده های مدرن حوزه کامپیوترهای همراه اینتل می باشند که بر پایه معماری P-M (نسخه تکامل یافته معماری P6) با هسته Yonah عرضه می شوند، این پردازنده های 32 بیتی هم اکنون در اکثر کامپیوترهای همراه مدرن و iMac‌های جدید Apple استفاده می‌شوند.

 
 
 
 
در ویژوال بیسیک TAPI
 

چیست ؟ TAPI

یک کتابخانه استاندارد برای کار با مودم و Telephony API یا TAPI

نوشتن برنامه های تلفنی می باشد . برای نمونه می توان از برنامه های

Dialup ) شماره گیر تلفن ) ، برنامه شبکه سازی تلفنی ) Phone Dialer

برنامه تشخیص پالس مودم برای ضبط اطلاعات وارد ، ( Networking

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

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

سخت افزار مودم و درایور آن بطور مستقیم بتوانید برنامه های کاربردیی

در این زمینه بنویسید .

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

٨١

و چگونگی استفاده از TAPI در این سلسه مقالات سعی می کنم تا مفاهیم

آنرا در ویژوال بیسیک آموزش بدهم

  •  
 
 
 
های ویندوز API
 
های ویندوز و چگونگی استفاده از آنها API امروز قصد دارم در مورد

در ویژوال بیسیک بطور خلاصه توضیح دهم و همچنین دو مثال

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

و ساخت یک تایمر با دقت بالا : Wav فایلهای

Application مخفف API واژه : Windows API 1 - آشنایی با

های ویندوز مجموعه ای API . می باشد Programming Interface

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

آنها را در برنامه های خود فراخوانی کنید
. این توابع در چندین کتابخانه

ویندوز ذخیره شده اند . برای دسترسی به این توابع در ویژوال DLL

کنید . برای مثال : declare بیسیک ابتدا باید آنها را برنامه خود

Declare Function sndPlaySound Lib "winmm.dll" Alias

sndPlaySoundA" (ByVal lpszSoundName As String, "

Long ByVal uFlags As Long) As

sndPlaySound
از تابع Declare همانطور که می بینید مثال فوق یک

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

دارد . سایر بخشها dll نشان می دهد که این تابع نام دیگری در Alias

مربوط به تعریف پارامترهای تابع می باشند که در مورد مثال فوق ، این

دارد . Long تابع دو پارامتر ورودی و یک خروجی از نوع

در برنامه می توانید از آن استفاده نمائید . API کردن Delare پس از

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

٢٨

استفاده Wav تابعی که برای پخش فایلهای : Wav 2 - پخش فایلهای

است که در بالا با آن آشنا شدید . sndPlaySound می شود تابع

uFlags و پارامتر Wav نام و مسیر فایل lpzSoundName پارامتر

چگونگی پخش فایل را مشخص می کند . مقادیر ممکن این پارامتر

عبارتند از :

پخش شود که آنرا Wav اجازه می دهد طوری فایل : SND_ASYNC -

تان را هر Wav بتوان وقفه داد . بعبارت دیگر قادر خواهید بود فایل

زمان که بخواهید پخش کنید و مطمئن باشید که حتما شنیده می شود .

را بطور ممتد پخش می کند . Wav فایل : SND_LOOP -

پیدا نشود صدای دیگری Wav اگر فایل : SND_NODEFAULT -

ویندوز ) default پخش نخواهد شد ( مثلا برخی صداهای

کنترل به برنامه داده نمی Wav در طول پخش فایل : SND_SYNC -

ای را در پس زمینه Wav شود . این پارامتر در زمانیکه می خواهید فایل

برنامه تان پخش کنید مناسب نمی باشد .

ای قبلا در حال پخش باشد ، فایل Wav اگر فایل : SND_NOSTOP -

شما آنرا دچار وقفه نمی کند . از این پارامتر زمانی استفاده می Wav

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

Or اگر بخواهید از بیش از یکی از این پارامترها استفاده کنید توسط

آنها را ترکیب نمائید مثال :

or ding.wav", SND_ASYNC\" & sndPlaySound App.path

SND_LOOP

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

می باشد استفاده کنید . در DirectX که یکی از اجزای DirectSound

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

٢٩

بعدا صحبت خواهم کرد . DirectSound مورد

3 - ساخت یک تایمر با دقت بالا : شاید تا بحال از کنترل تایمر موجود در

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

55 میلی ثانیه است . برای دستیابی به زمانهای با دقت بالاتر این

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

Kernel32.dll موجود در کتابخانه API یک GetTickCount تابع

است . این تابع طول زمانی را که سیستم شروع به کار کرده است رابرحسب میلی ثانیه برمی گرداند

:

() "Private Declare Function GetTickCount Lib "kernel32

As Long

برای بررسی طی شدن یک مدت زمانی خاص شما ابتدا باید مقدار این

قرار دهید سپس در یک TempTime تابع را در یک متغیر کمکی مثلجدید و زمان

GetTickCount باید اختلاف زمان Do-Loop حلقهرا با مقدار زمانی که می خواهید سپری شود مقایسه کنید : TempTime

TempTime = GetTickCount()x

GetTickCount() - TempTime > Do While DesiredTime

'Do some things

Loop

توسط کد بالا می توان یک عملیات خاص را برای یک مدت زمانی

مشخص اجرا کرد .

کد زیر نشان می دهد که چگونه می توان دستورات خاصی را در فواصل

زمانی خاص اجرار کرد :

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

٣٠

ExitFunction = False

GetTickCount()x
= TempTime

Do While not(ExitFunction)x

GetTickCount() - TempTime then > If DesiredTime

'Reset the temporary variable

GetTickCount()x
= TempTime

'Do some things

End If

Loop

برنامه benchmark می توان برای GetTickCount همچنین از تابع

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

خاص را بدست آورد .

  •  
 
 
 
کار با فایل در ویژوال بیسیک - بخش سوم
 

سایر عملیات کار با فایل :

استفاده می Kill 1 - حذف فایل : برای حذف یک یا چند فایل از دستور

شود :

Kill "C:\Temp\MyFile.txt"x

C:\Temp\*.txt"x" Kill

2 - انتقال فایل : برای انتقال یک فایل از یک دایرکتوری به دایرکتوری

استفاده می شود . مبدا و مقصد بایستی روی یک Name دیگر از دستوردرایو باشند

. اگر دایرکتوری مبدا و مقصد یکی باشد فایل تغییر نام داده

می شود :

C:\Temp\File1.txt" To "C:\Temp2\File2.txt"x" Name

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

٢٥

3 - کپی کردن فایل : برای کپی کردن یک فایل از یک دایرکتوری به

استفاده می شود : FileCopy دایرکتوری دیگر از دستور

FileCopy "\File1.txt\ To "C:\Temp\File2.txt"x

4 - بدست آوردن تاریخ و زمان آخرین تغییر فایل و یا زمان ایجاد فایل :

استفاده می شود . ابتدا بایستی FileDateTime برای این کار از دستور

تعریف کرده و سپس توسط این دستور Variant یک متغیر از نوع

تاریخ و زمان موردنظر را استخراج کنیم :

Variant Dim FileInfo As

FileInfo=FileDateTime("C:\Temp\MyFile.txt")x

5 - استخراج طول فایل : برای بدست آوردن طول یک فایل بر حسب بایت

استفاده می شود : FileLen از دستور

FileSize=FileLen("C:\MyFile.txt")x

SetAttr
6 - تغییر صفت یک فایل : برای تغییر صفت یک فایل از دستور

استفاده می شود . پارامترهای این دستور عبارتند از :

0 : فایل معمولی

2 : فایل مخفی

4 : فایل سیستمی

FileNumber,FileAttrib SetAttr

مقابله با خطاهای کار با فایل :

در زمان کار با فایلهای احتمال زیادی وجود دارد که خطا بوجود آید .

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

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

٢٦

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

52 : شماره یا نام فایل صحیح نیست

53 : فایل پیدا نشد

54 : حالت فایل صحیح نیست

55 : فایل قبلاً باز شده

58 : فایل از قبل وجود دارد

59 : طول رکورد صحیح نیست

61 : دیسک پر است

62 : عبور از انتهای فایل

63 : شماره رکورد صحیح نیست

70 : دسترسی ممنوع است

71 : دیسک آماده نیست

76 : مسیر پیدا نشد

استفاده Select-Case در هنگام مقابله با خطا بهتراست از یک ساختار

کنید :

Err Select Case

Case 71

MsgBox "Drive is Not Ready"x

.

.

.

End Select

 
 
 
 
کار با فایل در ویژوال بیسیک - بخش دوم
 

خواندن از فایل :

می توان Input Line و Input توسط دستورهای : Input 1 - دستور

محتوای فایلهای متنی و باینری را خواند .

به دو صورت بکار می رود : Input دستور

Filenumber,ReadData# Input

ReadData=Input(Charnum,Filenumber)x

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

Filenumber بایت از فایلی با شماره Charnum دستور دوم ، تعداد

قرار می دهد . ReadData را خوانده و در متغیراین دو دستور تمام کاراکترهای موجود در فایل را می خوانند

. برای

استفاده Line Input اینکه بتوان فایل را خط به خط خواند ، از دستور

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

٢٢

کنید :

Filenumber,ReadData# Line Input

بیشتر برای خواندن فایلهای متنی استفاده Line Input البته از دستور

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

وجود نداشته باشد و یکباره کل فایل خوانده شود . ( CRLF

از این دستور برای خواندن فایلهای باینری با : Get 2 - دستور

استفاده میشود : ( Random Access ) دسترسی تصادفی

Get #Filenumber,[Recordnum%],ReadData

را از فایلی با شماره Recordnum این دستور رکورد شماره

قرار می دهد . علامت ReadData می خواند و در متغیر Filenumber

اختیاری است و در Recordnum کروشه نشان می دهد که پارامتر

صورتیکه ذکر نشود داده ها از رکورد بعدی فایل ( جائیکه اشاره گر فایل

آنجا قرار دارد ) خوانده می شوند .

 
 
کار با فایل در ویژوال بیسیک
 

کار با فایل در ویژوال بیسیک - بخش اول

مقدمه

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

نسبتاً ساده می باشد .

بطور کلی فایلها بر دو نوع هستند :

این فایلها فقط شامل کاراکترهای اسکی و : Text File 1 - فایلهای متنی

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

شامل هر نوع کاراکتری می توانند : Binary File 2 - فایلهای باینری

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

اجرائی ، فایلهای گرافیکی و غیره

ویژوال بیسیک می تواند با هر دو نوع فایل کار کند .

چگونگی باز کردن فایلها

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

١٨

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

ابتدا بایستی آنرا باز کرد . باز کردن فایلها در ویژوال بیسیک توسط

انجام می شود . فرمت کلی این دستور بصورت زیر است Open دستور

:

Open filename [For mode] [Access access][lock] As

filenumber [Len=reclen]x
[#]

[ پارامترهای داخل کروشه اختیاری هستند . ]

نام فایلی است که می خواهیم آنرا باز کنیم . filename

حالت باز کردن فایل است . این حالتها عبارتند از : mode

فایل بعنوان ورودی باز می شود . : Input -

فایل بعنوان خروجی باز می شود . : Output -

فایل از نوع باینری باز می شود . : Binary -

فایل طوری باز می شود که بتوان به انتهای آن چیزی : Append -

اضافه کرد .

Random -

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

عبارتند از :

خواندن فایل : Read -

نوشتن در فایل : Write -

خواندن و نوشتن فایل : ReadWrite -

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

انواع دسترسیها عبارتند از :

دسترسی اشتراکی : Shared -

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

١٩

Lock Read -

Lock Write -

Lock Read Write -

عددی است که ویژوال بیسیک از آن برای دسترسی به filenumber

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

1 تا 511 باشد . برای بدست آوردن اولین شماره آزاد می توان از تابع

استفاده کرد . FreeFile

طول بافر فایل است . این عدد بایستی از 32767 کو چکتر باشد . : reclen

مشخص شده وجود نداشته و filename در صورتی که فایلی که توسط

باز شده باشد Random و یا Output ،Binary ،Append فایل برای

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

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

گرفته می شود .

  •  
 
 
VB.Net توابع ریاضی و
 

مجموعه توابع ریاضی در در ویژوال بیسیک دات نت وجود دارند بسیار

System.Math قویتر و کاملتر هستند . این مجموعه توابع در کلاس

موجود می باشند :

برای نشان دادن پایه لگاریتم PI و E دو ثابت به اسم Math - در کلاس

طبیعی و عدد پی وجود دارند .

آرک سینوس) ، ) Asin ، ( آرک کسینوس ) Acos : - توابع مثلثاتی

آرک تانژانت خارج قسمت تقسیم ) Atan آرک تانژانت) ، 2 ) Atan

تانژانت ) ) Tan ، ( سینوس ) Sin ، ( کسینوس ) Cos ، ( ورودی ها

حاصلضرب کامل دو ) BigMul ، ( قدرمطلق ) Abs : - توابع عمومیخارج قسمت نقسیم

) DivRem ، ( تابع سقف ) Ceiling ، ( عدد 32 بیتی

باقیمانده نقسیم ) IEEERemainder ، ( تابع کف ) Floor ، ( دو عدد

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

٧

مینیمم بین دو عدد ) ، ) Min ، ( ماکزیمم بین دو عدد ) Max ، ( دو عدد

تابع جذر ) ) Sqrt ، ( تابع علامت ) Sign ، ( تابع گرد کردن ) Round

سینوس ) Sinh ، ( کسینوس هیپربولیک ) Cosh : - توابع هیپربولیک

تانژانت هیپربولیک ) ) Tanh ، ( هیپربولیک

) Log ، ( به توان مقدار ورودی e عدد ) Exp : - توابع نمایی و لگاریتمی

تابع توان ) ) Pow ، ( لگاریتم بر پایه 10 ) Log لگاریتم ) ، 10

 
 
 
توابع ریاضی و ویژوال بیسیک
 

مقدمه:

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

دارید تا از برخی توابع ریاضی استفاده نمائید
. ویژوال بیسیک 6 دارای

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

شده اند
. در این مقاله ابتدا با این توابع آشنا شده و سپس چگونگی

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

خواهید دید
. در پایان نیز با توابع ریاضی موجود در دات نت آشنا می

شوید .

توابع ریاضی موجود در ویژوال بیسیک 6

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

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

برابر زاویه ای است که تانژانت آن عدد ورودی تابع است .

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

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

است که double توان نمانی) : خروجی تابع عددی از نوع ) Exp - تابع

به توان ورودی تابع است . e برابر

تابع کف یا تابع جزء صحیح) : نزدیکترین عدد صحیح ) Int - تابع

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

 
 
 
 
در ویژوال بیسیک 6 e و π اعداد
 
در برنامه های خود ثوابت زیر را e برای استفاده از عدد پی و عدد

تعریف نمائید :

Const Pi = 3.14159265358979

Const e = 2.71828182845904

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

Pi = 4*Atn(1)

تبدیل رادیان / درجه

http://sheidaian.persianblog.com

http://iranmehr.bizhat.com توسط گروه ایران مھر sheidaian.persianblog برگرفتھ از سایت

٦

چون اکثر توابع مثلثاتی بر حسب رادیان کار می کنند گاهی اوقات نیاز

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

یک زاویه که بر حسب رادیان می باشد به درجه آنرا در 180 ضرب کرده

و سپس بر عدد پی تقسیم می کنیم :

Degree(x) =x*180/Pi

برای تبدیل یک زاویه که بر حسب درجه بیان شده به رادیان آنرا در عدد

پی ضرب کرده و سپس بر 180 تقسیم می کنیم :

Rad(x) =x*Pi/180

 
 
 
 
اموزش Visual Basic 6.0
 
مقایسه VB و C++ از نظر سرعت ترجمه
شاید وقتی یک برنامه ی ساده که عملیات سنگینی نداره رو مینویسیم با مشکل سرعت اجرا مواجه نشیم.اما گاهی یکی از بزرگترین مشکل ها همین سرعت اجرا هستش.مثلا یک بازی کامپیوتری 3 بعدی به خاطر اینکه روون باشه و اصلا بشه باش بازی کرد باید تا اونجا که ممکنه سرعت اجرای کد رو بالا برد.

میخوام یک کد ساده رو با VB و با سی بنویسم و کامپایل کنم و اختلاف زمان اجرای این کد روببینیم.
کارش ساده هستش.یه حلفه ی معمولی که 1000 بار تکرار میشه و هر بار 0.00001 به یک مقدار double اضافه میکنه.

*** کد VB ***
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Form_Load()
Dim start_time As Long: start_time = GetTickCount()
Dim i As Double: i = 0
Do While (i < 1000)
i = i + 0.00001
Loop
Dim op_time As Long: op_time = GetTickCount() - start_time
MsgBox "Elapsed time : " & op_time & "ms"
End Sub

*** کد C++ ***
#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
#include "conio.h"
int main(int argc, char* argv[])
{
DWORD start_time = GetTickCount();
double i=0;
while (i < 1000) {
i += 0.00001;
}
DWORD op_time = GetTickCount() - start_time;
printf("Elapsed time : %dms\n",op_time);
getch();
return 0;
}

نتایج :
C++ : 437 میلی ثانیه
VB : 2047 میلی ثانیه
یعنی یه چیزی بیشتر از 5 برابر توی این عملیات سرعت C++ بیشتر هستش. 
  •  
 
 
 
FlashWindow
 
تابع واسه آبی کردن و بعد به رنگ معمولی در آوردن (میشه گفت نور انداختن) عنوان و اسم یه (پنجره)فرم توی TaskBar بکار میره .شاید منظورمو نفهمیده باشین.ازش استفاده کنین تا بفهمین:

Private Declare Function FlashWindow Lib "user32" Alias "FlashWindow" (ByVal hwnd As Long, ByVal bInvert As Long) As Long

آرگومان اول هندل پنجره مورد نظر هست.
آرگومان دوم رو 1 قرار بدین (اگه صفر قرار بدین عمل مورد نظر–اگر در حال انجام باشه- متوقف میشه)
یه دکمه توی فرم بزارین:

Private Declare Function FlashWindow Lib "user32" Alias "FlashWindow" (ByVal hwnd As Long, ByVal bInvert As Long) As Long

Private sub Command1_Click()
FlashWindow Me.hWnd , 1
End Sub

Delphi:

procedure TForm1.Command1Click(Sender: TObject);
begin
FlashWindow(form1.Handle,true);
end;

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

2.GetForeGroundWindow
این تابع هندل فرم فعال(که رنگ نوار عنوانش با بقیه فرق داره و معمولا آبیه) رو برمیگردونه:

Private Declare Function GetForegroundWindow Lib "user32" () As Long

هیچ مقداری هم نیاز نیست بش بدیم.یه تایمر توی فرم بزارین و Interval ش رو 1 بزارین:

Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Sub Timer1_Timer()
Me.Caption = GetForegroundWindow()
End Sub

Delphi:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.Caption := IntToStr(GetForegroundWindow());
end;

3.GetComputerName

این تابع نام کامپیوتری که برنامه داره توش اجرا میشه رو برمیگردونه.این اسم رو میتونین توی قسمت
System Properties (راست کلیک روی My Computer ؛ رفتن به Properties ) توی قسمت Computer Name ببینین.

Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

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

Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Private Sub Form_Load()
Dim buffer As String * 255
GetComputerName buffer, 255
MsgBox "Computer name : '" & Replace(buffer, Chr(0), "") & "'"
End Sub

Delphi:

procedure TForm1.FormCreate(Sender: TObject);
var Buffer : Array[1..MAX_PATH] of char ;
var MAX_SIZE : Cardinal;
begin
MAX_SIZE := sizeof(buffer) -1 ;
GetComputerName(@buffer,MAX_SIZE) ;
ShowMessage('Computer Name : ' + StrPas(@buffer));
end;

4.GetCurrentDirectory

این تابع آدرس پوشه ای که برنامه جاری توش داره اجرا میشه رو برمیگردونه.یعنی کار App.path رو انجام میده:

Private Declare Function GetCurrentDirectory Lib "kernel32" Alias "GetCurrentDirectory" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

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

Private Declare Function GetCurrentDirectoryA Lib "kernel32" Alias "GetCurrentDirectory" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

Private Sub Form_Load()
Dim buffer As String * 255
GetCurrentDirectoryA 255,Buffer
MsgBox "Current Directory : '" & Replace(buffer, Chr(0), "") & "'"
End Sub

Delphi:

procedure TForm1.FormCreate(Sender: TObject);
var buffer : array[1..MAX_PATH] of char;
begin
GetCurrentDirectoryA(sizeof(buffer),@buffer);
ShowMessage('Current Directory : ' + strpas(@buffer));
end;

5.GetDoubleClickTime
این تابع هم زمان Double Click که توی کنترل پنل توی قسمت موس مشخص شده رو برمیگردوونه:

Private Declare Function GetDoubleClickTime Lib "user32" Alias "GetDoubleClickTime" () As Long

هیچ مقداری هم نمیگیره:
Private Declare Function GetDoubleClickTime Lib "user32" Alias "GetDoubleClickTime" () As Long
Private Sub Form_Load()
Msgbox "DoubleClickTime : " & GetDoubleClickTime()
End Sub

Delphi:

procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage('DoubleClickTime : ' + IntToStr(GetDoubleClickTime()));
end;
 
 
 
 
SetWindowPos
 
این تابع واسه تغییر مکان و تغییر اندازه Window ها بکار میره و چند تا کاره دیگه هم میکنه:

Private Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

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

Private Const HWND_BOTTOM = 1
Private Const HWND_BROADCAST = &HFFFF&
Private Const HWND_DESKTOP = 0
Private Const HWND_NOTOPMOST = -2
Private Const HWND_TOP = 0
Private Const HWND_TOPMOST = -1

هر کدوم از اینارو بزارین ببینین چی میشه . مثلا topmost بالای پنجره های دیگه جتی اونایی که از قبل
Top بودن قرار میگیره.

مقدار سومی و چهارم هم x و y مختصات پنجره هستش که نسبت به پنجره parent (مادر) ش هستش به طوری که بالا و سمت چپ پنجره ء مادر نقطه (0 ، 0 ) حساب میشه.مقدار بعدی هم عرض و طول پنجره مورد نظر هستش.
حالا اگه نخواهیم همه این خصوصیات پنجره رو تغییر بدیم نمیشه مثل ویبی اونا رو مقدار دهی نکنیم.بعضی از مواقع میشه از Byval 0& استفاده کرد اما در مورد این تابع واسه اینکه نخواهیم همه خصوصیاتش رو تغییر بدیم باید آرگومان آخر رو مقدار دهی کنیم.بعضی از مقدار هایی که این میگیره :

Private Const SWP_NOMOVE = &H2 پنچره تغییر مکان نمیده
Private Const SWP_NOACTIVATE = &H10 پنجره فعال نمیشه
Private Const SWP_NOSIZE = &H1 پنجره تغییر اندازه نمیده
Private Const SWP_NOZORDER = &H4 جای پنجره در محور z عوض نمیشه
Private Const SWP_NOREDRAW = &H8 پنجره دوباره رسم نمیشه

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

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOZORDER = &H4
Dim x As Integer, y As Integer

Private Sub Form_Paint()
Command1.SetFocus
Timer1.Interval = 100
End Sub

Private Sub timer1_timer()
x = Int(800 * Rnd())
y = Int(600 * Rnd())
SetWindowPos Me.hwnd, 0, x, y, 0, 0, SWP_NOSIZE Or SWP_NOZORDER
End Sub
Private Sub command1_click()
Unload Me
End Sub

اول focus رو به دکمه میدیم بعد .Interval مربوط به تایمر رو مقدار دهی میکنیم.توی Private Sub timer1_timer هم یه x و y
به طور تصادفی بدست میاریم توی خط بعد هم با استفاده از تابع مورد نظر پنجره رو حرکت میدیم.
حالا بعد از اجرا کردن برنامه کلید اینتر رو که بزنین برنامه بسته میشه.

2.CreateDirectory
این تابع واسه ساختن Folder بکار میره :

Private Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long

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

Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type

برای مثال :

Private Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type

Dim SA as SECURITY_ATTRIBUTES
Private Sub Form_Load()
Createdirectory "D:\APItest",SA
End Sub

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

Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click()
Sleep 2000 '2000 ms = 2 s
End Sub

4.BlockInput
این تابع بعد از فراخوانیش موس و کیبرد رو قفل میکنه یعنی دیگه کلید هایی که میزنین بر پنجره ها اثر نداره و موس رو که تکون میدین کرسرش حرکت نمیکنه:

Private Declare Function BlockInput Lib "user32" (ByVal fBlock As Long) As Long

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

Private Declare Function BlockInput Lib "user32" (ByVal fBlock As Long) As Long

Private Sub Form_Load()
Timer1.Interval = 5000
BlockInput True
End Sub
Private Sub Timer1_Timer()
BlockInput False
End Sub

با این کد عمل قفل شدن 5 ثانیه طول میکشه.
  •  
 
 
 
تابع PlaySound
 
این تابع واسه پخش کردن یه فایل با فرمت wav از توی speaker هاست.آرگومان اول آدرس فایل و دومی و سومی باید 1 باشه.یه دکمه توی فرم بزارین و کد زیر رو وارد کنین:

Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
Private Sub Command1_Click()
PlaySound "D:\File.wav",1,1
End Sub

که باید به جای D:\File.wav آدرس یه فایل با پسوند wav بزارین.

2.GetClassName
این تابع هندل یه پنجره رو میگیره و ClassName ش رو برمیردونه.آرگومان اول هندل پنجره.آرگومان دوم یه متغیر که نام کلاس توش قرار میگیره طول این متغییر باید تعیین شده باشه.سومی هم یه عدد مثل n که وقتی به تابع داده میشه تابع n-1 کاراکتر اول نام کلاس رو داخل متغییر قرار میده.(البته مطمین نستم شایدم n کاراکتر اول رو برگردونه.خودم امتحان کردم n-1 کاراکتر اول رو قرار داد)این عدد رو 255 قرار بدین خیال خودتونو راحت کنین.

Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long

Private Sub Command1_Click()
Dim ipCName as String * 255
GetClassname Me.hWnd,ipCName,255
Msgbox Replace(ipCName,chr(0),"")
End Sub

واسه توضیح در مورد طول متغیر و چرا اینطوریش کردیم به آموزش تابع GetSystemDirectory سر بزنین.

3. GetAsyncKeyState
با این تابع میتونین بفهمین که قبل از فراخوانی تابع آیا یه کلید فشرده شده یه نه.آرگومانی که تابع میگیره کلیدی که مورد نظرمون هست رو مشخص میکنه.برای مثال

Private Const VK_LEFT = &H25

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

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Const VK_LEFT = &H25

Private Sub Command1_Click()
If GetAsyncKeyState(VK_LEFT) Then
Print "<--"
End if
End Sub

در ضمن اگه شما مقدار &H8000 رو هم توی شرط If بزارین عمل چاپ فقط در صورتی که اجرا میشه که کلید چپ در زمان فشره شدن دکمه فشرده شده باشه نه قبلش.
البته در حالت اول برای یک بار فشردن دکمه چپ فقط یک بار عمل چاپ با فشردن دکمه انجام میشه.امتحان کنین تا منظورمو بفهمین.

4.LoadCursorFromFile
این تابع اشاره گر یه فایل کرسر (.cur) رو به مامیده که ازش میشه توی تابع SetSystemCursor استفاده کرد.مثالش رو توی تابع بعدی ببینین.

Private Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long

5. SetSystemCursor
با این تابع میشه کرسر سیستم رو تعیین کرد.این تابع اول یه اشاره گر از کرسر مورد نظر ما میخواد که ما این رو با استفاده از تابع LoadCursorFromFile میگیریم آرگوما دوم رو هم Private Const OCR_NORMAL = 32512 قرار بدین(مقدار های دیگه رو میتونین توی API Viewer ببینین).یه دکمه توی فرم بزارین:

Private Declare Function SetSystemCursor Lib "user32" Alias "SetSystemCursor" (ByVal hcur As Long, ByVal id As Long) As Long
Private Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long
Private Const OCR_NORMAL = 32512

Private Sub Command1_Click()
Dim hc as long
hc = LoadCursorFromFile("D:\c.cur")
SetSystemCursor hc,32512
End Sub

فایلهای با پسوند .cur که با ویژوال بیسیک نصب شدن رو توی شاخه …\COMMON\GRAPHICS\CURSORS پیدا کنین.به امید دیدار.
  •  
 
 
 
طبق روال چند تا تابع و روش کار با اونارو آموزش میدم.
 
۴. GetTempPath
این تابع هم مسیر پوشه Temp رو به ما میده و یه فرق کوچیک با قبلیه داره . جای آرگومان هاش عوض شده:

Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nSize As Long,ByVal pBuffer As String) As Long
Private Sub Form_Load()
Dim tmpPath as String * 255
GetTempPath 255,tmpPath
Msgbox Replace(tmpPath,chr(0),"")
End Sub

5.SetForegroundWindow این تابع هندل یم پنجره رو میگیره و اونو فعال میکنه:

Private Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long

با استفاده از تابع GetCursorPos مکان موس رو میگیریم و با استفاده از از تابع WindowFromPoint بوسیله مختصات هندل رو میگیریم و به تابع میدیم(یه تایمر توی فرم بزارین):

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Dim PAPI As POINTAPI,phWnd as long

Private Sub Form_Load()
Timer1.Interval = 100
End Sub

Private Sub Timer1_Timer()
GetCursorPos PAPI
phWnd = WindowFromPoint(PAPI.x, PAPI.y)
SetForeGroundWindow phWnd
End Sub
 
 
 
 
طبق روال چند تا تابع و روش کار با اونارو آموزش میدم.
 
.AnimateWindow
این تابع رو باید در حالتی که یه پنجره هنوز رسم نشده(یا Hide هست و ...) و یا قبل از پنهان شدن هست باید فراخوانی کرد
بعد از فراخوانی تابع پنجره در حالتهای مختلف به صورت انیمیت رسم میشه یا پنهان میشه.مثلا از سمت چپ طولش افزایش پیدا میکنه تا کاملا رسم بشه.این تابع توی API Viewer نیست:

Private Declare Function AnimateWindow Lib "user32" (ByVal hwnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Boolean

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

Const AW_HOR_POSITIVE = &H1
Const AW_HOR_NEGATIVE = &H2
Const AW_VER_POSITIVE = &H4
Const AW_VER_NEGATIVE = &H8
Const AW_CENTER = &H10
Const AW_HIDE = &H10000
Const AW_ACTIVATE = &H20000
Const AW_SLIDE = &H40000
Const AW_BLEND = &H80000

این تابع 3 تا مقدار به صورت byVal میگیره.اول هندل پنجره مورد نظر.دومی زمانی که میخواهیم عمل رسم انجام بشه سومی هم روش رسم هست که باید ثابت ها را به این بدیم.بعضی از مقادیر (آخر) رو میشه از طریق Or با هم استفاده کرد.
موقتی که میخواهیم یک پنجره از حالت رسم شده به حالت پنهان بره باید مقدار AW_HIDE رو هم به پارامتر آخر (با استفاده از Or) اضافه کنید.کارهایی که این ثابت ها میکنن:

AW_HOR_POSITIVE پنجره از چپ به راست رسم یا پاک میشه
AW_HOR_POSITIVE پنجره از راست به چپ رسم یا پاک میشه
AW_VER_POSITIVE پنجره از بالا به پایین رسم یا پاک میشه
AW_VER_NEGATIVE پنجره از پایین به بالا رسم یا پاک میشه
AW_CENTER پنجره از مرکز باز میشه یا بالعکس
AW_ACTIVATE پنجره رو فعال میکنه

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

Private Declare Function AnimateWindow Lib "user32" (ByVal hwnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Boolean
Const AW_HOR_POSITIVE = &H1
Const AW_HOR_NEGATIVE = &H2
Const AW_VER_POSITIVE = &H4
Const AW_VER_NEGATIVE = &H8
Const AW_CENTER = &H10
Const AW_HIDE = &H10000
Const AW_ACTIVATE = &H20000
Const AW_SLIDE = &H40000
Const AW_BLEND = &H80000
Private Sub Form_Load()
Me.BackColor = vbBlue
AnimateWindow Me.hwnd, 1000, AW_HOR_POSITIVE Or AW_VER_NEGATIVE
Me.Cls
End Sub
Private Sub Command1_Click()
If Command2.Visible = True Then
AnimateWindow Command2.hwnd, 1000, AW_CENTER Or AW_HIDE: Command2.Visible = False
Else
AnimateWindow Command2.hwnd, 1000, AW_CENTER: Command2.Visible = True
End If
End Sub

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

2.GetBkColor : این تابع BackColor یا رنگ زمینه پنجره ای که hDC ش رو بش دادیم برمیگردونه:

Private Declare Function GetBkColor Lib "gdi32" Alias "GetBkColor" (ByVal hdc As Long) As Long

برای مثال Hdc فرم خودمون رو بش میدیم و مقدار بازگشتیشو با BACKcOLOR فرممون مقایسه میکنیم(1 دکمه توی فرم بزارین):

Private Declare Function GetBkColor Lib "gdi32" Alias "GetBkColor" (ByVal hdc As Long) As Long
Private Sub Form_Load()
Me.BackColor=VbBlue
End sub
Private Sub Command1_Click()
Dim BKcolor as Long
BKcolor = GetBkColor(Me.hdc)
If BKcolor = Me.BackColor Then
Msgbox "Good!",vbinformation
Else
Msgbox "Wrong!!",vbCritical
End If
End Sub

توجه کنین که من در Private Sub Form_Load() رنگ زمینه فرم رو از حالت پیشفرض خارج کردم و یه رنگ معمولی بش دادم این به این دلیل بود که فرم در حالت پیشفرض دارای رنگ زمینه VbFaceButton (یه رنگ سیستمی) هست و برای همین هم خصوصیت Me.BackColor بجای اینکه رنگ زمینه واقعی رو برگردونه یه چیز دیگه برمیگردونه.

3. GetSystemDirectory
این تابع برای گرفتن آدرس پوشه سیستم بکار میره مثلا در ویندوز 98 اگه ویندوز در درایو C نصب شده باشه محل اغلبا"
C:\Windows\System هست.
این تابع به این صورته:

Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

مقدار اول یه متغیر از نوع String هست که باید به تابع بدیم تا مسیر رو توی اون قرار بده.و دومی رو 255 قرار بدین.این مقدار
نشون میده که تابع حداکثر چند کاراکتر اول مسیر رو برگردونه.چون طول این مسیر به ندرت 255 میشه ما این عدد رو بش میدیم.یه نکته رو توجه کنین که این تابع مقدار 255 کاراکتر(که خودمون مشخص کردیم) رو داخل متغییری که بش دادیم قرار میده که کاراکتر های اول رو مسیر پوشه سیستم و بقیه رو با کاراکتر 0 پر میکنه.بنابراین ما باید طور متغیر که در عادی 0 هست رو به 255 تغییر بدیم و گرنه چون تابع میخواد مقدار رو درون تابع جا بده و تابع جا نداره(طولش 0 هستش) اشکال ایجاد میشه و برنامه ما بسته میشه.همن این ها به این علت هستش که تابع طول متغیر ما رو تغییر نمیده(ولی در خود ویبی اگر یه مقداری رو به یه متغیر از نوع String بدیم طول متغییر خودکار اضافه میشه.)
برای اینکه ما طول متغیر رو برای این تابع به مقدار 255 کاراکتر تغییر بدیم 2 کار میتونیم بکنیم.یکی از این روشه:
Dim sysPath as string * 255
توی این روش طول متغیر با استفاده از 255 کاراکتر تغییر میکنه.(با استفاده از کاراکتر 0‌)
یا اینکه یه مقدار با طول 255 به متغییر میدیم:

Dim sysPath as String
sysPath = String(255," ")

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

Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Sub Form_Load()
Dim sysPath as String * 255
GetSystemDirectory sysPath,255
Msgbox Replace(sysPath,chr(0),"")
End Sub

در خط یکی مونده به آخر با استفاده از تابع Replace مقدار کاراکتر 0 اضافی که با تابع داده شده حذف میشه.
3.GetWindowsDirectory
این تابع مسیر پوشه ویندوز رو برمیگردونه و روش کار باش مشابه قبلی هست :

Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Sub Form_Load()
Dim winPath as String * 255
GetWindowsDirectory winPath,255
Msgbox Replace(winPath,chr(0),"")
End Sub
 
 
 
 
اموزش روش های Shut Down
 
برای Shut Down کردن سیستم از تابعExitWindowEx استفاده میشه :

Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

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

Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4

همش به غیر از آخری واضحه.آخری با هر کدوم از بقیه که ترکیب بشه (با Or ) موجب میشه که ویندوز برنامه ها رو مجبور به بستن کنه.پارامتر دوم رو هم VbNullString قرار بدین
.مثال :

Private Sub Command1_Click()
ExitWindowsEx EWX_SHUTDOWN or EWX_FORCE, VbNULLString
End Sub

توی ویندوز XP این روش کار نمیکنه.برای شات دانون کردن ویندوز باید از فایل ShutDown.Exe که توی دایرکتوری سیستم هست استفاده کرد.این فایل واسه Shut Down کردن چند تا پارامتر میتونه بگیره که یکیش رو حتما باید بش بدین :

-I

یه واسط کاربری نشون میده که توی اون کاربر Options ها رو مشخص میکنه و بعد OK میکنه تا سیستم خاموش بشه و اگه این رو استفاده کردین دیگه نیاز به پارامتر دیکه ای نیست .البته این پارامتر اصلا به کار ما نمیاد.ما میخواهیم به طور اتوماتیک سیستم رو Shut Down کنیم.

-l

سیستم Logoff میشه

-s

سیستم Shutdown میشه.(توی قسمت های قبلی هرجا گفتم Shut Down منظورم Restart , Shutdown , Logoff بود)

-r

سیستم Restart میشه.

-a

اگه سیستم در حال Shut Down شدن باشه ،این کار لغو (abort)میشه.

-t [Seconds]

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

-c "[This is a comment] "

اگه از پارامتر t استفاده کرده باشین با این پارامتر (c) میتونین توی قسمت Message یه پیغام برای کاربر نشون بدین مثل اینی که من گذاشتم (This is a comment) در ضمن طول این پیغام حداکثر باید 127 کاراکتر باشه.


-f

مثل مقدار EWX_FORCE توی تابع ExitWindowsEx عمل میکنه یعنی اگه ازش استفاده کنین ویندوز برنامه ها رو مجبور به بستن میکنه.
حالا ما برای Shut Down کردن باید این فایل رو با پارامتر ها باز کنیم.از تابع Shell استفاده میکنیم :
2 تا دکمه یکی cmdShutDown و یکی دیگه cmdAbort درست کنین :

Private Sub cmdShutDown_Click()
Shell "Shutdown.exe -r –t 30 –f –c " & """" & "This is a comment" & """"
End Sub
Private Sub cmdAbort_Click()
Shell "Shutdown.exe –a"
End Sub

وقتی دکمه cmdShutDown رو بزنین یه پنجره مثل پنجره ای که عکسش رو گذاشتم ظاهر میشه و شمارش معکوس از 30 شروع میشه.اگه به 30 برسه ویندوز رستارت میشه.اگه دکمه cmdAbort رو بزنین پنجره ی Shut Down بسته میشه.
حالا یه کد واسه رستارت در همون لحظه :

Private Sub cmdShutDown_Click()
If MsgBox("Are you sure? ",VbCritical + VbYesNo) = VbYes Then
Shell "ShutDown.exe –r –f –t 0"
End If
End Sub
  •  
 
 
اموزش Visual Basic 6.0
 
.GetWindowRect

این تابع مختصات چهار سمت(چپ راست بالا پایین) یه پنجره رو توی یه متغیر از نوع rect قرار میده:

Private Declare Function GetWindowRect Lib "user32" Alias "GetWindowRect" (ByVal hwnd As Long, lpRect As RECT) As Long

آرگومان اول هندل پنجره مورد نظره.دومی هم یه متغییر از نوع rect هستش که تابع مقدار مورد نظر رو توی اون قرار میده.یه label و یه timer توی فرم بزارین و :

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Type POINTAPI
x As Long
y As Long
End Type

Private Sub Form_Load()
Timer1.Interval = 10
End Sub

Private Sub Timer1_Timer()
Dim PAPI As POINTAPI, R As RECT
GetCursorPos PAPI
GetWindowRect WindowFromPoint(PAPI.x, PAPI.y), R
Label1.Caption = "Top : " & R.Top & " Bottom : " & R.Bottom _
& " Left : " & R.Left & " Right : " & R.Right _
& " Height : " & R.Bottom - R.Top & " Width : " & R.Right - R.Left
End Sub

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

4.InternetGetConnectedState

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

Private Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As Long,ByVal dwReserved As Long) As Long

آرگومان اول یه متغیر از نوع Long هستش که تابع مقداری که مربوط به نوع ارتباط میشه رو توی این قرار میده.دومی رو هم byval 0& بزارین.

وقتی تابع مقدار رو توی متغیر قرار داد باید با if های متعدد نوع ارتباط رو پیدا کنیم.مقدار میتونه یکی (یا چند تا) از اینا باشه:

Private Const INTERNET_CONNECTION_MODEM As Long = &H1 MODEM ارتباط از طریق
Private Const INTERNET_CONNECTION_LAN As Long = &H2 LAN ارتباط از طریقProxy
Private Const INTERNET_CONNECTION_PROXY As Long = &H4 ارتباط دارای پراکسی هستش
Private Const INTERNET_CONNECTION_MODEM_BUSY As Long = &H8 مودم Busy هستش (؟)
Private Const INTERNET_CONNECTION_OFFLINE As Long = &H20 کامپیوتر در حالتOffline هستش
Private Const INTERNET_CONNECTION_CONFIGURED As Long = &H40 کامپیوتر به اینترنت متصل هستش
Private Const INTERNET_RAS_INSTALLED As Long = &H10 روی کامپیوتر نصب شدهRas

اگه مقدار برگشتی تابع 0 باشه کامپیوتر به اینترنت وصل نیست و اگه 1 باشه وصله.

چون ممکنه مقداری که به متغییر داده میشه چند تا از مقدار های بالا باشه (مثلا CONNECTION_CONFIGURED و CONNECTION_MODEM) باید توی If از AND استفاده کنیم و نمیشه از = استفاده کرد:

Private Const INTERNET_CONNECTION_LAN As Long = &H2
Private Const INTERNET_CONNECTION_PROXY As Long = &H4
Private Const INTERNET_CONNECTION_MODEM_BUSY As Long = &H8
Private Const INTERNET_CONNECTION_OFFLINE As Long = &H20
Private Const INTERNET_CONNECTION_CONFIGURED As Long = &H40
Private Const INTERNET_RAS_INSTALLED As Long = &H10

Private Sub Form_Load()
Dim lpF As Long, MBStr As String
If InternetGetConnectedState(lpF, ByVal 0&) = 1 Then
If lpF And INTERNET_CONNECTION_CONFIGURED Then
MBStr = "Connection to the internet = True ..." & vbNewLine
End If
If lpF And INTERNET_CONNECTION_MODEM Then
MBStr = "By MODEM" & vbNewLine
End If
If lpF And INTERNET_CONNECTION_LAN Then
MBStr = "By LAN" & vbNewLine
End If
If lpF And INTERNET_CONNECTION_MODEM_BUSY Then
MBStr = "MODEM Busy" & vbNewLine
End If
If lpF And INTERNET_CONNECTION_OFFLINE Then
MBStr = "Offline" & vbNewLine
End If
If lpF And INTERNET_CONNECTION_PROXY Then
MBStr = "Proxy" & vbNewLine
End If
If lpF And INTERNET_RAS_INSTALLED Then
MBStr = "Ras Installed" & vbNewLine

End I
Else
MBStr = "Connected to the internet = False"
End If
MsgBox MBStr
End Sub
  •  
 
 
 
اموزش Visual Basic 6.0
 
معرفی و اموزش چند تابع API

1.Mouse_event

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

Private Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

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

Private Const MOUSEEVENTF_LEFTDOWN = &H2 دکمه سمت چپ فشرده میشه
Private Const MOUSEEVENTF_LEFTUP = &H4 دکمه سمت چپ رها میشه
Private Const MOUSEEVENTF_MIDDLEDOWN = &H20 دکمه وسطی فشرده میشه
Private Const MOUSEEVENTF_MIDDLEUP = &H40 دکمه وسطی رها میشه
Private Const MOUSEEVENTF_RIGHTUP = &H10 دکمه سمت راست فشرده میشه
Private Const MOUSEEVENTF_RIGHTDOWN = &H8 دکمه سمت راست رها میشه

بقیه آرگومان ها رو ۰ قرار بدین

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

Private Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down
Private Const MOUSEEVENTF_LEFTUP = &H4 ' left button up
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Sub Command1_Click()
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub

kb_event.۲

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

Private Declare Sub keybd_event Lib "user32" Alias "keybd_event" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

آرگومان اول کلید مورد نظر هستش که توی ویبی میشه از vbkeyA , vbkeyB , ... استفاده کرد.یا میشه از ثابت هایی که توی ای پی آی ویور هست VK_A ... , VK_B , ... استفاده کرد.

آرگومان دوم رو 0 بزارین.سومی آگه 0 باشه عمل فشرده شدن و اگه 2 باشه عمل رها شدن کلید بازسازی میشه.چهارمی رو هم 0 قرار بدین:

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Sub Form_Click()
keybd_event vbKeyA, 0, 0, 0
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
MsgBox KeyCode
End Sub 
  •  
 
 
 
اینم سری آخر
 
. Switch یک تعداد آرگومان که تعدادشون باید زوج باشه میگیره به طوری که :
آرگومان های فرد( اولی ، سومی ، پنجمی و ...) باید یک عبارت باشن(یا میشه گفت عبارت در نظر گرفته میشن)
آرگومان های زوج هم باید مقدار باشن(یا میشه گفت مقدار در نظر گرفته میشن)
تابع میاد به ترتیب تک تک آرگومان های فرد رو مورد بررسی قرار میده.به اولین آرگومانی که ارزشش درست (True) باشه که رسید آرگومان بعد از اون(که یک مقدار هست) رو برمیگردونه.

مثلا فرض کنین شما میخواهین یک تابعی درست کنین که یک عدد از 1 تا 5 بگیره و معادل رشته ای اون رو (“One” ، “Two” و ...) رو برگردونه.با استفاده از این تابع شما میتونین اینطوری عمل کنین :
Function nToS(Byval n as Integer) As String
If n > 5 Or n < 1 Then Exit Function
nToS = Switch(n=1,”One”,n=2,”Two”,n=3,”Three”,n=4,”Four”,n=5,”Five”)
End Function

کد این تابع اول چک میکنه که عددی که بهش داده شده بین 1 تا 5 هست یا نه.اگه نبود از تابع خارج میشه.
اما اگه بود با استفاده از تابع Swich مقدار ها ی مختلفی که n میتونه داشته باشه رو چک میکنه و مقدار معادل رشته ای رو برمیگردونه.مثلا nToS(4)=”Four” .

162. SYD

163. Tan این هم تانژانت یک زاویه (بر حسب رادیان) رو برمیگردونه.

164. TextHeight یک رشته میگیره و ارتفاعی رو که اون رشته اشغال میکنه رو باتوجه به فونت فرم و واحد فرم(ScaleMode) برمیگردونه.مثلا اگه واحد و فونت فرم پیشفرض باشه :
TextHeight(“m”) = TextHeight(“MA”) = 195

یعنی اینکه ارتفاعی که اشغال میکنه به طول رشته و یا کوچک و بزرگ بودن کاراکتر ها بستگی نداره(که این هم بدیهیه!)

165. TextWidth کار تابع قبلی رو برای عرض یک رشته انجام میده.با این فرق که همونطور که میدونیم با تغییر تعداد کاراکتر یک رشته و یا کوچک و بزرگ بودن کاراکتر ها عرضی که رشته اشغال میکنه فرق میکنه.مثلا
TextWidth(“a”) = 90 ، TextWidth(“A”) = 166 و TextWidth(“Abcd”) = 375

167. TimeSerial ساعت و دقیقه و ثانیه رو میگیره و زمان رو با نوع Dateبرمیگردونه مثلا
Debug.Print TimeSerial(10, 20, 30) ‘ prints 10:20:30 AM

168. TimeValueمثل قبلیه با این فرق که یه تا مقدار رو یکجا و از نوع رشته میگیره .مثلا :
Debug.Print TimeValue(“10:20:30”) ‘ prints 10:20:30 AM

169. Trim (و Trim$) یک رشته میگیره و فاصله های اول و آخرش رو حذف میکنه(کار LTrim و RTrim رو با هم میکنه) مثلا :
Debug.Print Trim(“ Visual Basic “) ‘prints “Visual Basic”

170. TypeName یک مقدار میگیره و نوعش رو برمیگردونه.اون مقدار میتونه از هر نوعی باشه.مثلا :

Debug.Print TypeName(Me) ‘ prints Form1
Debug.Print TypeName(Command1) ‘ prints CommandButton
Debug.Print TypeName(“Hello”) ‘ prints String
Debug.Print TypeName(2.2) ‘ prints Double
Debug.Print TypeName(Err) ‘ prints ErrObject

171. UCase (و UCase$) یک رشته میگیره و همه ی حروف کوچک اون رو به حروف بزرگ تبدیل میکنه مثلا ”!UCase(“Hello!”) = “HELLO.این تابع برعکس LCase کار میکنه.

172. Unload یک آبجک رو از حافظه پاک میکنه.مثلا Unload Form1

173. Val یک رشته میگیره و عدد های سمت چپش رو جدا میکنه و وقتی به یک کاراکتر غیر عددی یا غیر نقطه برسه کارش رو ادامه میده .عددی که برمیگردونه از نوع Double هستش.مثلا
Val(“2 4 7 11 323.23 adas”) = 24711323.23

174. در مورد کار تابع های ValidateControls و WhatsThisMode هم چیزی نفهمیدم :

MSDN :
ValidateControls: Ensures that the contents of the last control on the form are valid before exiting the form.
WhatsThisMode: Duplicates the functionality of the WhatsThisMode method of a Visual Basic 6.0 form.

175. VarType هم یک مقدار میگیره و نوع اون رو از نوع vbVarType برمیگردونه و فرقش هم با TypeName همینه.مثلا
VarType(2.2) = vbDouble

176. Year یه تاریخ میگیره و سال اون رو استخراج میکنه.مثلا
Year(Now()) = 2005

177. ‌ZOrder مختصات Z یک کنترل(به طور پیشفرض فرمی که توش فراخوانی میشه) رو تعیین میکنه.مختصات Z تیعیین میکنه که کدوم کنترل ها باید زیر بقیه و کدوم باید روی دیگری باشه.مقدار 0 (مقدار پیشفرض) یه کنترل رو به رو میاره و مقدار 1 به زیر میبره
 
 
 
آموزش توابع سری هشتم
 
141. SaveSetting با گرفتن نام برنامه(دلخواه) Setion و Key و یه رشته ه عنوان اطلاعات یا تنظیم مورد نظر ، یک Key توی رجیستری با اسم ]نام برنامه[ درست میکنه.توی اون یک Key دیگه با اسم [Section] درست میکنه و توی اون یک Value از نوع رشته (SZ)با اسم [Key] درست میکنه و مقدار اون رو برابر رشته ای که بهش دادیم (Setting) قرار میده.که بعدا با تابع GetSetting و یا GetAllSettings میتونین به این اطلاعات دسترسی پیدا کنین.این اطلاعات توی رجیستری توی شاخه ی :
HKEY_CURRENT_USER\Software\VB and VBA Program Settings

درست میشن. با توجه به مقدار هایی که بهشون دادیم:
HKEY_CURRENT_USER\Software\VB and VBA Program Settings\[appName]\[Section]

ScaleX .142-3 و ScaleY یه مقدار و 2 تا واحد میگیرن و واحد مقداری رو که گرفتن تغییر میدن مثلا از Pixel به Inch .آرگومان اول همون مقدار مورد نظره مثلا 1000 دومی واحدیه که برای مقدار باید در نظر گرفته بشه بطور پیشفرض vbHimetric هستش.بعدی واحد خروجیه که بطور بیشفرض برابر با ScaleMode فرم هستش که اون هم به طور پیشفرض vbTwips هستش.مثلا اگه بخواهیم ببینیم 10اینچ چند میلیمتره :
ScaleX(10, vbInches, vbMillimeters)

Seek .144 شماره ی فایلی که باز شده رو میگیره و برای حالت Random شماره رکورد بعدی (که قراره نوشته یا خوانده بشه) و برای حالت های دیگه شماره بایت بعدی که قراره نوشته یا خوانده بشه رو برمیگردونه که قبل از اینکه چیزی نوشته یا خونده بشه مقدار یک رو برمیگردونه بعد 2 و به همین ترتیب.فرقش هم با Loc همینه.Loc شماره آخرین رکورد یا بایتی که نوشته یا خوانده شده رو برمیگردونه.

145. SendKeys یک یا چند کارکتر یا دکمه های کیبرد رو به پنجره ی فعال ارسال میکنه درست مثل اینکه دکمه های کیبرد فشار داده شده باشن.2 تا آرگومان میگیره که دومی اختیاریه.آرگومان اولی کاراکتر هایی هستن که میخواهیم ارسال کنیم مثلا “vb” .واسه دکمه های خاص کیبرد مثل HOME ها DELETE و ... باید اون ها رو توی آکلاد قرار بدین مثلا :
برای insert از “{INSERT}” یا “{INS}” استفاده میشه.
برای end از “{END}” استفاده میشه.
برای delete از “{DELETE}” یا “{DEL}” استفاده میشه.
برای page down از “{PGDN}” استفاده میشه.
برای page up از “{PGUP}” استفاده میشه.
برای home از “{HOME}” استفاده میشه.
برای علامت چپ از “{LEFT}” استفاده میشه.
برای علامت بالا از “{UP}” استفاده میشه.
برای علامت راست از “{RIGHT}” استفاده میشه.
برای علامت پایین از “{DOWN}” استفاده میشه.
برای print screen از “{PRTSC}” استفاده میشه.
برای scroll lock از “{SCROLLLOCK}” استفاده میشه.
برای break از “{BREAK}” استفاده میشه.
برای back space از “{BACKSPACE}” یا“{BS}” یا “{BKSP}” استفاده میشه.
برای enter از “{ENTER}” یا "~" (بدون آکلاد) استفاده میشه.
برای F1 ، F2 و... هم از “{F1}” ، “{F2}” و ... استفاده میشه.
برای escape از “{ESC}” استفاده میشه.
برای tab از “{TAB}” استفاده میشه.
برای caps lock از “CAPSLOCK” استفاده میشه.

واسه نگه داشتنه شدن کلید های Control و Alt و Shift به ترتیب از ^ ، % ، + استفاده کنین.مثلا برای کنترل بعلاوه ی v از “^v” استفاده کنین.اگه میخواهین یکی ازین دکمه ها واسه مجموعه ای از کلید ها مورد استفاده قرار بگیره از پرانتز استفاده کنین مثلا برای کنترل بعلاوه ی vb از “^(vb)” استفاده کنین.برای استفاده همزمان از چند تا ازین کلید ها هم اون ها رو پشت سر هم استفاده کنین مثلا برای شیفت بعلاوه ی کنترل بعلاوه v از “+^v” استفاده کنین.این کار رو برای دکمه های HOME و INSERT و ... هم میتونین بکنین.مثلا کنترل بعلاوه یHOME میشه “^{HOME}” .

آرگومان دوم از نوع Boolean هستش که بطور پیشفرض False هستش.اگه True باشه وقتی که کلیدی به یک پنجره ارسال میشه تابع منتظر میشه تا اون پنجره عملیات فشرده شدن کلید رو برای خودش پردازش کنه بعد کنترل به تابع برمیگرده.

146. SetAttr آدرس یه فایل رو میگیره و Attributes مربوط به اون رو تغییر میده.(مثل سیستم آرشیو نرمان و ...)

147. Focus این تابع Focus رو به کنترلی که این متد از اون فراخوانی بشه میده.اگه قبلش اسم کنترل رو نیاریم بطور پیشفرض Focus به فرم ی که تابع توش فراخوانی شده داده میشه.

148. Sng کار تابع Sign( علامت) توی ریاضی رو میکنه.به این صورت که یک عدد میگیره.اگه عدد بزرگتر از صفر باشه مقدار 1 اگه برابر با صفر باشه مقدار صفر و اگه کوچکتر از صفر باشه مقدار 1- رو برمیگردونه.

149. Shell آدرس یه فایل اجرایی رو میگیره و اون رو اجرا میکنه و Process ID اون رو برمیگردونه.آرگومان اولی آدرس فایل هستش که میتونه آدرس کامل باشه یا فقط اسم فایل (برای فایل هایی که توی پوشه ویندوز یا سیستم یا دایرکتوری جاری هستن) .آرگومان دومی هم نوع نمایش اون ها هست که مشخصه مثلا اگه بخواهیم برنامه توی حالت Maximize باز بشه از vbMaximizedFocus استفاده میکنیم.

150. Show متد مربوط به فرم هستش که یک فرم رو لود میکنه و نشون میده.آرگومان اول اگه vbModal باشه فرم اول(که کد توش نوشته شده) تا زمانی که فرم دوم(که با استفاده از متد Show نشون داده شده) بسته نشه قابل دسترسی نیست و کد بعد توی فرم اجرا نمیشه.مثل وقتی که توی فرم یه MsgBox نشون میدین؛تا وقتی که پنجره ی MsgBox رو نبندین فرم غیر قابل دسترسه و برنامه به خط بعد نمیره.آرگومان بعدی هم فرمیه که به عنوان والد فرمی که قراره نشون داده بشه در نظر گرفته میشه و مقدار دهیش هم اختیاریه.مثلا

‘ ‘In Form 1 :
Form2.Show vbModal,Form1

151. Sin سینوس زاویه ی داده شده(بر حسب رادیان) رو حساب میکنه.

152. SLN

153. Space(و Space$) یک عدد میگیره و به تعداد اون عدد Space برمیگردونه مثلا Space(4) مقدار “ “ رو برمیگردونه.

154. Split یه رشته و یه کاراکتر جدا کننده میگیره و با توجه به اون کاراکتر کلمه های موجود توی اون رشته رو توی یک آرایه رشته ای قرار میده.مثلا اگه رشته ی “VB Is Easy” و کاراکتر “ “ رو بهش بدیم اعضای آرایه ای که برمیگردونه “VB" ، “Is” و “Easy” هستن.یا اگه “One_Two_Three” و “_” رو بهش بدیم اعضای آرایه “One” ، “Two” و “Three” میشن.آرگومان اول رشته ی مورد نظره.آرگومان بعدی کاراکتر مورد نظره که بطور پیشفرض “ “ (Space) در نظر گرفته میشه.آرگومان بعدی حداکثر تعداد اعضا هستش مثلا اگه برای مثال قبلی این آرگمان رو 2 میگذاشتین اعضای آرایه “One” و “Two” میشدن(عضو سومی وجود نداشت) آرگومان بعدی هم نوع مقایسه برای کاراکتریه که بهش میدیم.(توی توضیح تابع InStr در مورد نوع مقایسه توضیح دادم.)

155. Sqr رادیکال یک عدد رو میگیره.مثلا Sqr(9) = 3. .برای جذر گرفتن یک عدد با فرجه بغیر از 2 از توان استفاده کنین مثلا اگه بخواهین از 8 با فرجه 3 جذر بگیرین از 8 ^ (1/3) استفاده کنین.

156. Str (و Str$) یه مقدار رو به نوع Str تبدیل میکنه.مثلا “Str(1) = “1

StrComp .157 دو تا رشته رو مقایسه میکنه.اگه رشته ها برابر بودن مقدار 0 .اگه اولی از دومی بزرگتر بود مقدار1 و اگه دومی از اولی بزرگتر بود مقدار -1 رو برمیگردونه.2 تا آرگومان اول 2 تا رشته ی مورد نظر هستن.سومی هم نوع مقایسه دو تا رشته هستش که توی توضیح تابع Instr درموردش گفتم اما چون به این تابع بیشتر مربوط میشه اینجا هم میگم. اگه از vbBinaryCompare استفاده کنین بین حروف کوچک و بزرگ تفاوت گذاشته میشه و اون ها مساوی حساب نمیشن (Case Sensitive) اگه از vbTextCompare استفاده کنین حروف بزرگ و کوچک یکی حساب میشن. vbDatabaseCompare هم مربوط به Access هستش و کاری بهش نداریم.مثلا (StrComp(“abCD”,”abcd”,vbBinaryCompare مقدار -1 رو برمیگردونه یعنی رشته ها با هم مساوی نیستن.در صورتی که 0= (StrComp(“abCD”,”abcd”,vbTextCompare.

این رو هم بگم که ویبی به طور پیشفرض Case Sensitive هستش و حروف بزرگ و کوچک مساوی نیستن یعنی “VB” <> “Vb” اما اگه کد Option Compare Text رو اول کدها(بالای فرم یا ماژول) بزارین این حساسیت ویبی از بین میره.

158. StrConv واسه تبدیل کردن نوع یک رشته به یک نوع دیگه بکار میره.آرگومان اول رشته ی مورد نظره .آرگومان بعدی هم نوع جدید هستش.که یکی از مقدار های زیر میتونه باشه :
vbFromUnicode – با این آرگومان تابع رشته ای که بش دادیم رو Unicode در نظر میگیره و اون رو به ANSI تبدیل میکنه.
vbHiragana - کاراکتر های Katakana ی توی رشته رو به Hiragana تبدیل میکنه.(مربوط به Encoding کره ایه و بدرد ما نمیخوره اصلا!)
vbKatakana – برعکس قبلی.
vbLowerCase – همه ی حروف بزرگ توی رشته رو به حروف کوچک تبدیل میکنه.مثلا “Visual Basic” میشه “visual basic”
vbNarrow – کاراکتر های 2 بایتی رو به کاراکتر های تک بایتی تبدیل میکنه
vbWide - برعکس قبلی.
vbPopperCase – اولین حروف همه ی کلمه های موجود توی رشته(رشته ای که بعد از فاصله قرار داره) رو به حروف بزرگ تبدیل میکنه.مثلا “Visual basic is easy” رو به “Visual Basic Is Easy” تبدیل میکنه.
vbUnicode - کاراکتر های متن رو به کاراکتر های Unicode تبدیل میکنه.
vbUpperCase - همه ی حروف کوچک توی رشته رو به حروف بزرگ تبدیل میکنه.مثلا “Visual Basic” میشه “VISUAL BASIC”

این رو هم بگم که این تابع مثل بقیه تابع های کار با رشته ی ویبی رشته ای که بهش میدیم رو تغییر نمیده و رشته ی جدید رو برمیگردونه.

159. String (و String$) یک عدد(n) و یه کاراکتر میگیره و یه رشته که حاوی n تا از اون کاراکتره برمیگردونه .(مثل Space که n تا فاصله برمیگردونه) مثلا ”String(4,”a”) = “aaaa.در ضمن به جای اون کاراکتر میتونین کد اسکیش رو هم به تابع بدین مثلا ”String(4,65)=”aaaa.

160. StrReverse یه رشته رو برعکس میکنه مثلا ”StrReverse(“VisualBasic”) = “cisaBlausiV
 
 
 
آموزش سری هفتم
 
. Pmt

122. Point مختصات یه نقطه از فرم رو میگیره و رنگ اون نقطه(بر اساس RGB:Red-Green-Blue) رو برمیگردونه.

123. PopupMenu یه Popup Menu روی فرم نشون میده.آرگومان اولی اسم اون منو هست که اونو توی محیط ویبی ساختین.
دومی Flags یا میشه گفت Options مربوط به نحوه ی نمایش منو هستش که یکی (یا چند تا) از اینها میتونه باشه :

vbPopupMenuRightAlign منو رو سمت راست مختصاتی که بهش دادین نمایش میده
vbPopupMenuLeftAlign منو رو سمت چپ مختصاتی که بهش دادین نمایش میده(پیشفرض)
vbPopupMenuCenterAlign منو رو وسط مختصاتی که بهش دادین نمایش میده
vbPopupMenuLeftButton منو فقط دکمه چپ موس رو تشخیص میده.(اگه روی گزینه هاش راست کلیک کنین اتفاقی نمیفته) (پیشفرض)
vbPopupMenuRightButton منو دکمه چپ و راست موس رو تشخیص میده.

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

Edit (mnuEdit)
Copy (mnuCopy)
Cut (mnuCut)
Delete (mnuDel)
Paste (mnuPaste)

برای نمایش منوی Edit برای وقتی که روی TextBox کلیک میشه :

Private Sub TextBox1_Click()
Call PopUpMenu(mnuEdit, vbPopupMenuRightAlign Or vbPopupMenuRightButton,,,mnuCopy)
End Sub

که در این حالت منوی کپی پیشفرض میشه.

124. PPmt

125. PrintForm صفحه ی فرمی که توش تابع فراخوانی شده رو واسه چاپ به پرینتر میبره.

126. PSet واسه رسم نقطه با رنگ داخواه روی فرم بکار میره.آرگومان اول مختصات نقطه.بعدی هم رنگ هستش مثلا PSet (100,100),vbRed یا Form1.Pset… یا Picture1.PSet..

127. PV

128. QBColor یک عدد بین 0 تا 15 میگیره و بر اساس اون ها یک رنگ از نوع RGB برمیگردونه.
0 برای سیاه 1 برای آبی تیره 2 برای سبز تیره 3 برای فسفری تیره 4 برای قرمز تیره 5 برای بنفش 6 برای زرد 7 برای سفید تیره!(خاکستری کم رنگ) 8 برای خاکستری 9 برای آبی 10 برای سبز .11 برای فسفری 12 برای قرمز 13 برای صورتی 14 برای زرد 15 برای سفید. مثلا (Form.BackColor = QBColor(9) ‘=vbRed = RGB(255,0,0

129. Randomize واسه این به کار میره که نتایج تابع Rnd() که واسه بدست آوردن اعداد تصادفی بکار میره هر دفعه تکراری نباشه.مثلا این کد رو در نظر بگیرین :

Debug.Print Rnd()
Debug.Print Rnd()
Debug.Print Rnd()
‘Prints :
0.7055475
0.533424
0.5795186

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

130. Rate

131. Refresh فرم( یا هر آبجک دیگه ای که متد مربوط بهش باشه) رو Refresh میکنه.یعنی اون شی دوباره رسم میشه.

132. Replace توی رشته ای که بهش میدیم یک رشته رو جایگزین یه رشته ی دیگه میکنه و رشته ی جدید رو برمیگردونه.آرگومان اول رشته ی اصلیه.دومی رشته ای هستش که باید پیدا بشه و رشته ی جدید جایگزینش بشه.رشته ی بعدی رشته ی جدید هستش که قراره جایگزین بشه.آرگومان بعدی هم جایی هستش که عمل جایگزینی باید از اونجا شروع بشه.بعدی حداکثر تعداد جایگزینیه .بعدی هم نوع مقایسه هستش که توی توضیح تابع InStr در موردش گفتم.مثلا :
Debug.Print Replace(“It’s Visual Basic!”,”a”,”XX”) ‘ It’s VisuXXl BXXsic!
Debug.Print Replace(“It’s Visual Basic!”,”a”,”XX”,7) ‘ It’s Visual BXXsic!
Debug.Print Replace(“It’s Visual Basic!”,”a”,”XX”,,1) ‘ It’s VisuXXl Basic!
Debug.Print Replace(“It’s Visual Basic!”,”A”,”XX”) ‘ It’s Visual Basic!
Debug.Print Replace(“It’s Visual Basic!”,”A”,”XX”,,,vbTextCompare) ‘ It’s VisuXXl BXXsic!

133. Reset هم ی فایل های باز شده رو میبنده.

134. RGB سه مولفه ی قرمز و سبز و آبیه یک رنگ رو میگیره و اون رو برمیگردونه(از نوع Long) مثلا برای رنگ قرمز : (RGB(255,0,0 و یا برای زرد (RGB(255, 255, 0
در ضمن هر آرگومان باید بین 0 تا 255 باشه.

135. Right (و $Right) برعکس Left عمل میکنه یعنی یه تعداد کاراکتر از سمت راست یک رشته جدا میکنه.

135. RightB (و $RightB) یک رشته رو میگیره و به تعداد دلخواه بایت از سمت راست جدا میکنه.مثلا ”LeftB("Visual", 2)=”l چون هر کاراکتر 2 بایت حساب میشه.

136. RmDir یک دایرکتوری رو حذف میکنه.توی اون دایرکتوری نباید فولدر یا فایل دیگه ای باشه.

137. Rnd یک عدد تصادفی بین 0 تا 1 (0,1] با سه رقم اعشار از نوع Single برمیگردونه مثلا 0.492

138. Round برای یک عدد اعشاری تعداد اعشار دلخواه رو نگه میداره و بقیه رو حذف میکنه.مثلا Round(1.2345,2) = 1.23 اینجا 2 تا از ارقام اعشار نگه داشته شدن.

139. RTrim (و $RTrim) یه رشته میگیره و هرچی Space سمت راست رشته باشه رو حذف میکنه و رشته ی جدید رو برمیگردونه مثلا :
Debug.Print “ Visual Basic “ ‘ = “ Visual Basic“

140. SavePicture یک عکس رو میگیره و اون رو توی یک فایل ذخیره میکنه(با فرمت Bitmap) اون عکس میتونه یک Picture یا Image رسم شده ی یک فرم یا Picture Box باشه.
  •  
 
 
 
آموزش سری ششم
 
101. LoadResString هم واسه لود کردن یه Resource رشته هستش.فقط هم آیدی رو نیاز داره.

102. Loc با گرفتن شماره فایل باز شده برای حالت Randomشماره آخرین رکوردی که نوشته یا خونده شده ، برای حالت Binary مکان آخرین بایتی از فایل(Position) که خونده یا نوشته شده و برای ترتیبی مکان بایت فعلی در فایل تقسیم بر 128 رو برمیگردونه.

103. LOF با گرفتن شماره فایل باز شده طول اون رو برمیگردونه.

104. Log تابع لگاریتم هستش البته در مبنای Ln .برای بدست آوردن لگاریتم یک عدد توی مبنای دلخواه از این فرمول استفاده کنین :

Log(x) / Log(n)

مثلا لگاریتم 8 در مبنای 2 :

Debug.Print Log(8)/Log(2) ‘3

105. LTrim (و LTrim$) یه رشته میگیره و هرچی Space سمت چپ رشته باشه رو حذف میکنه و رشته ی جدید رو برمیگردونه مثلا :

Debug.Print “ Visual Basic “ ‘ = “Visual Basic “

106. Mid (و$Mid) واسه جدا کردن یک قسمت از یک رشته هستش.آرگومان اول رشته ی مورد نظره.دومی عددی که جدا کردن از اونجا شروع میشه و سومی هم طول قسمتیه که میخواهیم جدا کنیم و اگه مقدار دهی نکنیمش تابع تا آخر رشته رو در نظر میگیره:

Debug.Print Mid(“Visual Basic”,3,2) ‘su
Debug.Print Mid(“Visual Basic”,3) ‘sual Basic

107. MidB (و MidB$) مثل قبلیه فقط اطلاعات رو بایت به بایت در نظر میگیره و جدا میکنه (نه کاراکتر به کاراکتر).فرقش با Mid مثل فرق InStr با InStrB هستش.توی قسمت InStrB بیشتر در این باره توضیح دادم.

108. Minute یه زمان رو میگیره دقیقه رو ازش جدا میکنه.مثلا (”Minute(“02:15:00برابر 15 هستش.

109. MIRR

110. MkDir واسه درست کردن یه Folder به کار میره که اگه از قبل وجود داشته باشه تابع Error میده.

111. Month یه تاریخ میگیره و ماه رو از اون استخراج میکنه.(به طور عددی البته) مثلا Month(Date()) = 5

112. MonthName عدد یک ماه رو میگیره (1 تا 12) و اسم اون ماه رو برمیگردونه.اگه آرگومان دومش True باشه اسم رو به صورت خلاصه برمیگردونه.مثلا MonthName(10) = Octobr و MonthName(10,True) = Oct

113. Move واسه حرکت دادن فرم توی صفحه بکار میره آرگوما هاش هم مشخص هستن.

114. MsgBox هم یه پیغام توی صفحه نشون میده.آرگومان اول اجباریه و متن اون پیغام هستش.آرگومان بعدی هم مربوط به Options نشون دادن پیغام مثلا نوع آیکن(vbCritical vbExclamation vbInformation vbQuestion) نوع دکمه ها (vbOKCancel vbYesNoCancel vbOKOnly vbAbortRetryIgnore vbRetryCancel vbYesNo vbMsgBoxHelpButton) دکمه های پیشفرض (که Focus بشون داده میشه)

تغییر vbMsgBoxRight vbMsgBoxRtlReading) Alignment) نحوه ی نمایش توی صفحه (vbSystemModal vbApplicationModal) هستش.
آرگومان بعدی عنوان پیغام هستش.بعدی فایل Help مربوط به این پیغام.بعدی هم Context موضوع مورد نظره(توی فایل Help)
مقدار برگشتی تابع هم با توجه به دکمه ای که کاربر فشار داده یکی از مقدار های vbAbort vbRetry vbIgnore vbCancel vbOK vbYes vbNo هستش.

115. NPer

116. NPV

117. Oct (وOct$ ) عدد رو به مبنای هشت میبره مثلا Oct(8) = 10

118. OLEDrag واسه شروع عمل OLE Drag (مثلا مثل وقتی که یکسری فایل رو یک فولد به فولدر دیگه میکشین) برای فرم بکار میره.اگه قبلش از اسم یه شیی دیگه مثلا یه لیست باکس استفاده کرده باشین –مسلما- عمل واسه اون شی انجام میشه منظورم اینه که این فقط مختص فرم نیست.2 تا فرم بسازین.توی دومی 1 تکست باکس درست کنین خصوصیت OLEDropMode مربوط به TextBox رو Manual قرار بدین.توی فرم اول کد زیر رو وارد کنین :

Private Sub Form_Load()
Form2.Show
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
OLEDrag
End Sub

Private Sub Form_OLECompleteDrag(Effect As Long)
MsgBox "Drag completed!"
End Sub

Private Sub Form_OLEStartDrag(Data As DataObject, AllowedEffects As Long)
AllowedEffects = vbDropEffectMove
Data.SetData Me.Caption
End Sub

و توی دومی :

Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Data.GetFormat(vbCFText) Then
Text1.Text = Data.GetData(vbCFText)
End If
End Sub

وقتی فرم یک Load میشه فرم 2 هم نشون داده میشه.حالا اگه موس رو روی فرم 1 فشار بدین OLEDrag برای فرم فراخوانی میشه و رویداد OLECompleteDrag اتفاق میفته.طبق کد حالت قابل قبول فقط vbDropEffect)Move) در نظر گرفته میشه.و اطلاعاتی هم که باید از فرم به جای مقصد انتقال پیدا کنه برابر با متن فرم میشه که هر چیزه دیگه ای با فرمت دیگه ای مثل یه فایل هم میتونه باشه.وقتی بدون اینکه دکمه ی موس رو رها کنین اون رو روی TextBox فرم دوم ببرین رویداد OLEDragDrop برای TextBox اتفاق میفته.بعد چک میشه که اگه فرمت اطلاعات متنی بود اطلاعات توی TextBox نشون داده بشه.بعد از رها کردن دکمه ی موس رویداد OLECompleteDrag (تومو شده عمل کشیدن) برای فرم اتفاق میفته و یک پیغام نشون داده میشه.

119. PaintPicture واسه رسم کردن یه عکس روی فرم هست.این تابع مال PictureBox هم هست.
آرگومان اول عکسیه که باید رسم بشه که میتونه عکسی باشه که با LoadPicture لود شده.یا عکس توی یک PictureBox(مثلا Picture1.Picture) .آرگومان دوم و سوم مختصات بالا سمت چپ جایی هستن که قرار عکس اونجا رسم بشه.مثلا اگه 0و0 باشن عکس کاملا توی بالا و سمت چپ فرم قرار میگیره یا اگه 100و20 باشن عکس با سمت چپ فرم 100 و با بالای فرم 20 تا (واحدش بر اساس واحد فرم هستش بطور پیشفرض Twip ) آرگومان های بعدی طول و عرض عکسی هستن که قرار چاپ بشه.اگه مقدار دهیشون نکنین عکس با اندازه ی اصلیش چاپ میشه.دو تا آرگومان بعدی جایی از عکس هستن که عمل رسم شدن باید از اونجا شروع بشه که اگه مثلا 100و100 باشن همه ی عکس روی فرم رسم نمیشه و از عمل رسم از بالا و سمت چپ فرم با مختصات 100و100 شروع میشه . دو تا آرگومان بعدی هم مثل قبلی واسه جدا کردن قسمتی از عکس هستن.این ها طول و عرضی از عکس رو مشخص میکنن که قرار رسم بشه.مثل قبلی ها اگه مقدار دهیشون نکنین (با توجه به 2 تا آرگومان قبلی) همه ی قسمت ها در نظر گرفته میشه.آرگومان آخر هم نحوه ی رسم هست(از نظر رنگ) که میتونه یکی از مقدار های زیر باشه :
vbSrcCopy عکس جدید رو کاملا جایگزین عکس قبلی میکنه یعنی اگه از قبل توی فرم عکسی وجود داشته باشه هیچ
اثری ازش نمیمونه.
vbSrcAnd عکس مبدا و مقصد(در صورت وجود) رو AND میکنه (دو عکس ادغام میشن)
vbNotSrcErase عکس و مبدا و مقصد(در صورت وجود) رو OR میکنه و نتیجه رو Invert میکنه.
vbSrcPaint عکس مبدا و مقصد(در صورت وجود) رو OR میکنه.
vbDstInvert عکس مقصد (در صورت وجود) رو Invert میکنه.
vbSrcInvert عکس مبدا و مقصد(در صورت وجود) رو XOR میکنه.
vbSrcErase عکس مقصد(در صورت وجود) رو Invert (معکوس) میکنه و با عکس مبدا AND میکنه.
vbNotSrcCopy عکس مبدا رو Invert میکنه و کاملا جایگزین عکس مقصد میکنه.

برای اینکه بهتر متوجه بشین همه رو امتحان کنین.

120. Partition چهار تا عدد به عنوان شروع(Start) ،پایان(Stop) فاصله(Intrerval) و عدد مورد نظر(Number) میگیره و یک سیری از اعداد به صورت

Start + (n-1) * Interval تا Start + n * Interval -1 …………… Start + (n-1) * Interval تا Stop

تا رسیدن به مقدار Stop میسازه.مثلا اگه Start=1 , Stop=110 ,Interval=20 اینطوری میشه :

1…20 21…40 41…60 61…80 81…100 101…110

حالا تابع عددی که بش دادیم(Number) رو بررسی میکنه که جزو کدوم یک از این بازه ها(بازه های بسته) هستش.جزو هر کدوم که بود تابع یه رشته به صورت بالاترین عضو : پایین ترین عضو برمیگردونه.مثلا اگه عدد 52 یا 60 باشه تابع مقدار “41:60” رو برمیگردونه.اگه عددی که بش میدیم کمتر از کمترین عضو سری باشه تابع مقدار “ : [Start -1] ” رو برمیگردونه مثلا اینجا برای 3- تابع مقدار “ : 0 ” رو برمیگردونه و اگه بزرگ تر باشه “[Stop + 1] : ” رو برمیگردونه.
  •  
 
 
 
آموزش سری پنجم
 
81. IsArray هم از اسمش پیداست.یک متغیر میگیره و مشخص میکنه آرایه هست یا نه.

82. IsDate هم مثل قبلیه فقط برای تاریخ یا زمان.

83. IsEmpty برای اینه که چک کنیم یک مقدار اعلان شده یا نه.مثلا

Dim x as long
Debug.Print IsEmpty(x) ‘False
Debug.Print IsEmpty(y) ‘True
x = Empty
Debug.Print IsEmpty(x) ‘True

84. IsError هم واسه اینه که چک کنیم یه مقدار از نوع Error هستش یه یا نه.مثلا IsError(Err) = True یا IsError(CVErr(0))= True

85. IsMissing این تابع برای وقتی به کار میره که شما توی یه Function یا Sub که آرگومان اختیاری(Optional)از نوع Variant داره میخواهین ببینین که اون آرگومان مقدار دهی شده یا نه.این مثال رو ببینین:

Private Sub Command1_Click()
MsgBox TestIsMissingFunc()
MsgBox TestIsMissingFunc(2)
MsgBox TestIsMissingFunc(“A”)
End Sub

Private Function TestIsMissingFunc(Optional testArg As Variant) As String
If IsMissing(testArg) Then
TestIsMissingFunc = “You are not passed any value!”
Else
TestIsMissingFunc = “You are passed “ & CStr(testArg)
End If
End Function

مقدارهایی که با پیغام نشون داده میشن به این صورته :

You are not passed any value
You are passed 2
Your are passed A

یعنی اگه اون پارامتر اختیاری مقدار دهی نشده باشه تابع IsMissing مقدار True رو برمیگردونه.اگه پارامتری از نوع غیر از Variant بهش بدین همواره مقدار False رو برمیگردونه.

86. IsNull واسه اینه که بفهمیم یک مقدارNull هست یا نه. توجه کنین که Null با خالی بودن یه رشته یا 0 بودن یه عدد فرق داره.مثلا

Deug.Print IsNull(“”) ‘false
Dim S As String
Debug.Print IsNull(S) ‘false
S = “”
Debug.Print IsNull(S) ‘false
S = Null
Debug.Print IsNull(S) ‘True

87. IsNumeric چک میکنه که یه مقدار عدد هست یا نه .البته کاری به نوعش نداره و محتویاتش رو بررسی میکنه مثلا:

Debug.Print IsNumeric(2) ‘true
Debug.Print IsNumeric("2.2") ‘true
Dim v As Variant
v = "$2.2"
Debug.Print IsNumeric(v) ‘true
v = “vb6”
Debug.Print IsNumeric(v) ‘false

88. IsObject هم چک میکنه یه مقدار از نوع Object هستش یا نه مثلا :

Private Sub Command1_Click()
Debug.Print IsObject(Command1) ‘true
Debug.Print IsObject(Err) ‘true
Dim Obj As Object, v As Variant
Debug.Print IsObject(Obj) ‘true
Debug.Print IsObject(v) ‘false
Set v = Err
Debug.Print IsObject(v) ‘true
Debug.Print IsObject("s") ‘false
End Sub

89. Join یه آرایه از نوع رشته میگیره و همه مقدار های عضو های آرایه رو به هم متصل میکنه و به صورت یه متغیر از نوع رشته بیرون میده.بین هر کدوم از String ها رو هم با کاراکتر دلخواهی که بهش میدیم قرار میده(بطور پیشفرض فاصله)
مثلا :

Private Sub Command1_Click()
Dim words(3)
words(0) = "Learning"
words(1) = "VB"
words(2) = "is"
words(3) = "easy"
Debug.Print Join(words, "_") ‘ Learning_VB_is_Easy
End Sub

90. Kill آدرس یه فایل رو میگیره و اون رو پاک میکنه.

91. LCase (و LCase$) (مخففLower Case)یک رشته رو میگیره و همه حروف رو به حروف کوچک تبدیل میکنه و رشته جدید رو برمیگردونه مثلا ”LCase(“Visual”)=”visual

92. Left (وLeft$)یک رشته رو میگیره و به تعداد دلخواه کاراکتر از سمت چپ جدا میکنه مثلا :

Left("Visual",2) = "Vi"

93. LeftB (و LeftB$) یک رشته رو میگیره و به تعداد دلخواه بایت از سمت چپ جدا میکنه.مثلا

LeftB("Visual", 2)="V"

چون هر کاراکتر 2 بایت حساب میشه.

94. Len یه مقدار میگیره و طولش رو برمیگردونه.برای رشته تعداد کاراکتر ها رو . برای متغیر عددی هم تعداد بایتی که متغیری که عدد رو شامل میشه اشغال کرده رو برمیگردونه نه تعداد ارقام رو(مگر اینکه قبلش عدد رو به رشته تبدیل کنین) مثلا :

Debug.Print Len("visual") ‘8
Dim n As Integer: n = 245
Debug.Print Len(n) ‘2
Debug.Print Len(CStr(n)) ‘3

Dim V As Variant
Debug.Print Len(V) ‘0
Set V = Command1
Debug.Print Len(V) ‘4

95. LenB تعداد بایتی که یه متغیر(یا یک مقدار) اشغال کرده رو برمیگردونه.مثلا :

Debug.Print LenB("visual") ‘12
Dim n As Integer: n = 245
Debug.Print LenB(n) ‘2
Debug.Print LenB(CStr(n)) ‘6
Dim V As Variant
Debug.Print LenB(V) ‘0
Set V = Command1
Debug.Print LenB(V) ‘8

96. Line واسه رسم یه خط یا مستطیل روی فرم بکار میره.آرگومان اول مختصات نقطه شروع و پایان خط و یا مختصات بالا سمت چپ و پایین سمت راست مستطیل هستش.بعدی رنگ خط و مستطیل هستش.بعدی اگه B باشه مستطیل رسم میشه.اگه BF باشه مستطیل توپر رسم میشه.اگه هم مقدار دهی نکنینش خط رسم میشه.مثلا :

Line (0, 0)-(300, 300), vbRed, BF ‘مستطیل توپر قرمز
Line (0, 0)-(300, 300), vbRed ‘خط قرمز

97. Load یه فرم یا Control رو توی حافظه Load میکنه.

98. LoadPicture یک عکس رو توی حافظه Load میکنه و مشخصات اون رو توی یک متغیر از نوع IPictureDisp برمیگردونه.اگه آرگومان اول رشته ی خالی باشه تابع یه عکس خالی برمیگردونه.آرگومان های بعدی فقط برای فایل های آیکن و کرسر هستن:دومی سایز هستش.که یکی از مقدار های زیر میتونه باشه :
vbLPLarge که اندازه آیکن یا کرسر برابر اندازه آیکن یا کرسر بزرگ پیشفرض سیستم میشه.
vbLPSmall که اندازه آیکن یا کرسر برابر اندازه آیکن یا کرسر کوچک پیشفرض سیستم میشه.
vbLPSmallShell اندازه ایه که توی قسمت Caption Buttons size setting توی قسمت AppearRance مربوط بهDisplay propertiesتنظیم شده.
vbLPLargShell اندازه ایه که توی قسمت Icon size setting توی قسمت AppearRance مربوط بهDisplay properties تنظیم شده.
vbLPCustom اندازه بر اساس 2 تا آرگومان x و y تنظیم میشه.

آرگومان بعدی (ColorDepth) عمق رنگ هستش که یکی از مقدار های زیر میتونه باشه :
vbLPDefault مقدار پیشفرض هستش.

vbLPMonochromeدو رنگ
vbLPVGAColorشونزده رنگ
vbLPColor دویست و پنجاه وشش رنگ

2 تا آرگومان بعدی هم طول و عرض هستن.که فقط برای وقتی که آرگومان size برابر vbLPCustom باشه استفاده دارن.
یکباره دیگه هم بگم که آرگومان های 2 به بعد این تابع فقط واسه فایل های آیکون و کرسر هستن.

99. LoadResData اآیدی یک Resouce و نوع اون رو میگیره و اطلاعاتش رو برمیگردونه.مثلا (”LoadResData(101,”CUSTOM
واسه ویرایش Resource های برنامه از منوی Add-Ins گزینه ی Add-In Manager رو انتخاب کنین.اونجا توی لیست روی VB6 Resource Editor کلیک کنین تا جلوش متن Loaded بیاد.OK کنین تا پنجره بسته شه.حالا از منوی Tools گزینه ی Resouce Editor رو انتخاب کنین.توی پنجره ای که باز میشه میتونین Resource های مختلف برای برنامتون بسازین...

100. LoadResPicture مثل قبلیه منتها واسه Load کردن Picture هستش.چه Icon چه Bitmap و چه Cursor . آرگومان اولیش آیدی Resource هستش .دومی هم یکی از سه نوعی که گفتم یعنی vbResBitmap ، vbResIcon و vbRescCursor .مقداری برگشتیش هم از نوع Picture هستش(IPictureDisp)
  •  
 
 
آموزش توابع سری چهارم
 
 مثل قبلیه هست با این فرق که درصد عددی که بهش میدیم رو حساب میکنه.مثلا :

FormatPercent(-10 / 100, 4, vbFalse, vbFalse, vbFalse) = -10.0000%

FreeFile .62 اولین شماره ای که برای باز کردن فایل ها آماده باشه (آزاد باشه) رو برمیگردونه.حداکثر هم 255 فایل میتونن باز باشن.

FV .63

GetAllSettings .64 این تابع همه ی تنظیماتی که توی Section و appName ی که بش میدیم ذخیره شده رو به صورت یه آرایه 2 بعدی برمیگردونه.(بهتره اول SaveSetting رو ببینین) ما این مقدار رو توی یه متغیر از نوع Variant قرار میدیم.به طوری که (v(0,0 اسم اولین تنظیممون(یا همون اسم Value توی رجیستری یا همون Key توی تابع SaveSetting) هستش و (v(0,1 مقدار اون تنظیم.به همین ترتیب v(1,0) هم اسم دومین تنظیم میشه... .

GetAttr .65 هم با گرفتن آدرس فایل Attribute های اون فایل رو برمیگردونه.

GetObject .66 شبیه CreateObject کار میکنه با این فرق که نام فایل رو هم میتونه بگیره و معمولا برای ارتباط با برنامه هایی بکار میره که از قبل اجرا شدن ولی CreateObject یه رابط به instance جدید اون Application ایجاد میکنه و وقتی استفاده میشه که نمیدونیم برنامه از قبل اجرا شده یا نه.مثلا میخواهیم یه شی word رو با CreateObject درست کنیم :

Private Sub Command1_Click()
Dim wApp As Object,wDoc as Object
Set wApp = CreateObject("word.application")
Set wDoc = wApp.Documents.Add
wApp.Selection.Font.Name = "verdana"
wApp.Selection.TypeText "Hello!!"
wDoc.SaveAs "D:\w1.doc"
wDoc.Close
Set wDoc = Nothing
Set wApp = Nothing
End Sub

با این کد فایل w1.doc توی درایو ِD ساخته میشه که محتویایش متن Hello!! هستش.به جای CreateObject میشد از GetObject به این صورت استفاده کرد :

Set wApp = GetObject(, "word.application")

چون میخواستیم فایل جدیدی ایجاد کنیم نیاز به دادن آدرس فایل نبود واسه همین فقط آرگومان دوم رو مقدار دهی کردیم.
حالا میخواهیم توی فایلی که درست کردیم یه متن تایپ کنیم.اول اون فایل رو با word باز کنین .اینبار از GetObject استفاده میکنیم :

Private Sub Command1_Click()
Dim wApp As Object
Set wApp = CreateObject("D:\w1.doc").Application
wApp.Documents(1).Application.Selection.TypeText " how are you ?"
Set wApp = Nothing
End Sub

به این صورت ما تونستیم با GetObject با برنامه Word ارتباط برقرار کنیم.

GetSetting .67 با گرفتن appName و Section و Key ، اطلاعاتی رو که با تابع SaveSetting توی رجیستری ذخیره شده رو برمیگردونه(به توضیح SaveSetting توجه کنین) آرگومان چهارم هم مقداریه که اگه اطلاعات مورد نظر توی رجیستری پیدا نشد تابع اون رو برمیگردونه.

Hex .69 (و Hex$) هم با گرفتن یک عدد معادل اون رو به مبنای 16 برمیگردونه مثلا Hex(255) = “FF”

70. Hide فرم رو پنهان میکنه و واسه نشون دادنش باید از Show استفاده کنین (این تابع ها هر دو عضو های Form هستن و اگه توی یه ماژول یا کلاس دارین کد مینویسین باید اسم فرم مورد نظر رو هم بیارین مثلا ()Form1.Hide)

71. Hour زمان رو میگره و ساعت رو از اون استخراج میکنه .مثلا Hour ("19:12:03") = 19

72. IIf یک If…Then…Else یک خطی هستش.آرگومان اول همون عبارتیه که میخواهیم درستیش رو بررسی کنیم.آرگومان دوم و سوم هم مقدار های بازگشتیه تابع هستش.اگه عبارتی که به تابع دادیم درست باشه آرگومان دوم و گرنه آرگومان سوم رو برمیگردونه.مثلا

IIf(2+2 = 4, "Yes", "No") = "Yes"

73. IMEStatus توی ویبی 6 وضعیت Input Method Editor رو برمیگردونه که فقط توی ویندوز های چینی و کره ای و ژاپنی کاربرد داره.

74. InputBox یه Input Box یا همون Prompt رو باز میکنه و یه ورودی از کاربر میگیره.آرگومان اول اون متنی هستش که توی Prompt نشون داده میشه و حتما باید مقدار دهی بشه ولی آرگومان های بعدی اختیاری هستن.
دومی Title یا همون عنوان پنجره Prompt هستش.سومی هم متنیه که به طور پیشفرض توی TextBox ی که توی InputBox هست نمایش داده میشه.2 تا آرگومان بعدی هم مختصات پنجره InputBox هستن.آرگومان بعدی (HelpFile) فایل Help ی که مربوط به این InputBox هستش.بعدی هم Context اون موضوعیه که میخواهین نشون بدین.مقدار برگشتی تابع همون مقداریه که کاربر وارد میکنه اگر هم کاربر Cancel رو بزنه مقدار برگشتی یه رشته خالیه (vbNullString).

75. InStr برای جستجوی یک متن توی یک متن دیگه بکار میره.آرگومان اول جاییه که جستجو توی رشته از اونجا شروع میشه. اگه 1 بگذارین جستجو از اولین کاراکتر شروع میشه میتونین هم مقداری به این آرگومان ندین.دومی رشته ی مبدا هستش یعنی رشته ای که میخواهین توش جستجو کنین.آرگومان بعدی رشته مقصد هست یعنی اون متن ی که میخواهین جستجوش کنین.آرگومان بعدی هم نوع مقایسه هستش.اگه از vbBinaryCompare استفاده کنین بین حروف کوچک و بزرگ تفاوت گذاشته میشه و اون ها مساوی حساب نمیشن (Case Sensitive) اگه از vbTextCompare استفاده کنین حروف بزرگ و کوچک یکی حساب میشن. vbDatabaseCompare هم مربوط به Access هستش و کاری بهش نداریم.مثلا InStr(1,”Visual Basic”,”b”,vbTextCompare) مقدار هشت رو برمیگردونه در صورتی که اگه از vbBinaryCompare استفاده کنین یا اصلا این آرگومان رو مقدار دهی نکنین مقدار 0 نشون داده میشه.یعنی رشته ی مورد نظر پیدا نشد! یا مثلا اگه به جای 1 از 9 استفاده کنین جستجو از حرف نهم یعنی a شروع میشه و چون حرف b بعد از a (منظور دومین a هستش که بعد از b قرار داره) قرار نداره تابع b رو پیدا نمیکنه و مقدار 0 رو برمیگردونه.

این رو هم بگم که ویبی به طور پیشفرض Case Sensitive هستش و حروف بزرگ و کوچک مساوی نیستن یعنی “VB” <> “Vb” اما اگه کد Option Compare Text رو اول کدها(بالای فرم یا ماژول) بزارین این حساسیت ویبی از بین میره.

76. InStrB مثل قبلیه با این فرق که واسه داد های بایتی که توی یک رشته قرار گرفتن استفاده میشه و محل بایت (Byte Position)رو برمیگردونه.مثلا چون یه کاراکتر توی رشته ی معمولی 2 بایت حساب میشه (از لحاظ طول رشته ای 1 هست اما از لحاظ طول بایت 2) مقدار (”InStrB(1,”Visual Basic”,”B برابر 15 هستش.

77. InStrRev مثل InStr هستش با این فرق که جستجو رو از آخرین کاراکتر رشته ی که بش دیدیم شروع میکنه و به اولین کاراکتر میرسه.(برعکس قبلی)آرگومان اول رشته مبدا دومی رشته ی مقصد و سومی هم شروع جستجو هست که به طور پیشفرض -1 هستش یعنی جستجو از آخرین کاراکتر.آرگومان بعدی هم مثل آرگومان آخر InStr.مثلا (”InStrRev(“VisualBasic”,”a برابر 8 هستش نه 5.ولی ( InStrRev("VisualBasic", "a", 7 برابر 5 هستش چون جستجو از حرف B شروع میشه و به سمت اولین کاراکتر میره.

78. Int براکت یک عدد رو برمیگردونه.مثلا Int(2.2) = 2 و Int(-2.2) = -3

79. IPmt

80. IRR
  •  
 
 
آموزش سری سوم
 
Day .41 روز یک تاریخ رو برمیگردونه.مثلا (Day(Now عدد 5 رو برمیگردونه.

DDB .42

DeleteSetting .43 تنظیماتی که با تابع SaveSetting توی رجستری ذخیره شده (value ها)رو پاک میکنه.واسه توضیح بیشتر به SaveSetting مراجع کنین.

Dir .44 فایل ها و فولدر های داخل یه فولدر(یا درایو) رو برمیگردونه.که میشه با مشخص کردن Attribute فایل ها یا فولدر های خاص رو بدست آورد.آرگومانی که میگیره یه رشتس که Path مورد نظر هستش که میشه توش از کاراکتر هایی مثل * و ؟ هم استفاده کرد.
مثلا میخوامیم همه ی فایل های با پسوند .sys رو که توی درایو C هستن بدست بیاریم.
برای اولین بار تابع Dir رو با دادن مقدار “C:\*.sys” فراخوانی میکنیم.مقدار برگشتیش اولین فایل با پسوند bat هست که توی درایو C (فقط درایو C یعنی شامل SubDirectory ها نمیشه) پیدا میکنه.برای بدست آوردن دومین فایل تابع رو بدون دادن مقدار بهش فراخوانی میکنیم ()Dir که مقدار برگشتیش همون دومین فایل هستش.این کار رو تا زمانی که مقدار برگشتی "" (رشته ی خالی) نباشه ادامه میدیم.کدش به این صورت میشه:

Private Sub CmdPrintDirs_Click()
Dim strPath as String,strDir as String
strPath = "C:\*.sys"
strDir = Dir(strPath)
Do
Print strDir
strDir = Dir()
Loop While strDir <> ""
End Sub

البته اگه Attribute رو درست تعیین نکنین همه فولدر ها و فایل ها برگردونده نمیشن.مثلا با قرار دادن این مقدار :
vbArchive Or vbDirectory Or vbHidden Or vbNormal Or vbReadOnly Or vbSystem
به جای Attribute میشه گفت همه فایل ها و فلدر ها (چه سیستم چه معمولی و...) برگردونده میشن.برای بدست آوردن فقط Directory ها به این صورت عمل کنین که به Attribute ، vbDirectoy رو هم اضافه کنین. بعد از اینکه اسم دایرکتوری ها رو گفتین باز هم با تابع GetAttr چک کنین که اسمی که برگردونده شده حتما Directory هستش :

Private Sub CmdPrintDirs_Click()
Dim strPath As String, strDir As String
strPath = "C:\"
strDir = Dir(strPath, vbDirectory)
Do
If (GetAttr(strPath & strDir) And vbDirectory) = vbDirectory Then
Print strDir
End If
strDir = Dir()
Loop While strDir <> ""
End Sub

اینو نگفتم که اگه بعد از مسیری که مشخص کردین اینجا (\:c) چیزی نگذارین همه فایل ها و فولدر هاش در نظر گرفته میشن.

DoEvents .45 این تابع رو وقتی دارین توی برنامتون از یک حلقه تکرار که ممکنه تموم شدنش طول بکشه استفاده میکنین توی حلقه فراخوانی کنین.حالا چکار میکنه؟
بطور عادی وقتی دارین توی یه حلقه تکرار(یا هر کدی!!) یکسری محاسبات رو انجام میدین تا زمانی که حلقه تموم نشه برنامتون در مقابل Message هایی که بش ارسال میشه عکس العملی انجام نمیده و همه عکس العمل ها رو بعد از تموم شدن حلقه انجام میده و یا اگه شما توی حلقه یه کدمربوط به چاپ کردن یه رشته روی فرم رو نوشته باشین عمل چاپ شدن رو بعد از تمام شدن حلقه مشاهده میکنین.به قولی تا زمان پایان حلقه برنامه هیچ Event ی انجام نمیده(البته این مساله 100 در 100 هم نیست).تابع DoEvents این کار رو براتون میکنه.این دو کد رو تست کنین :

Private Sub Command1_Click()
Dim i As Long
Do While i < 10000000
i = i + 1
If i < 20 Then List1.AddItem i
Loop
End Sub
Private Sub Command1_Click()
Dim i As Long
Do While i < 10000000
i = i + 1
If i < 20 Then List1.AddItem i
DoEvents
Loop
End Sub

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

46. Environ (و Environ$) این تابع با گرفتن عدد ها(اینجا index ها) ی بیشتر از 0 و یا رشته ها اطلاعات خاصی از سیستم مثل دایرکتوری ویندوز Program Files ، Temp و یا UserName یا تعداد پردازشگر ها و ... رو برمیگردونه.با دادن عدد های مختلف از 1 به بالا مقدار های مختلفش رو میتونین ببینین.رشته هایی رو هم میگیره مثل WinDir یا OS یا SystemDrive یا ... که این رشته ها رو با استفاده از اعداد میتونین بدست بیارین :

Private Sub Command1_Click()
Dim strEv As String, i As Integer
i = 1
Do
strEv = Environ(i)
Print strEv
i = i + 1
Loop While strEv <> ""
End Sub

EOF .47 برای کار با فایل هاست که با دادن شماره ای که باهاش فایل رو باز کردین میتونین بفهمین به آخر فایل رسیدین یا نه.

Err .48 آبجکتیه که اطلاعات مربوط به آخرین خطایی(منظور Runtime Error) که توی کد اتفاق افتاده رو نگه میداده.مثلا :
Err.Number شماره خطا Err.Clear پاک کردن خطا (همه اطلاعات در مورد آخرین حذف میشه و فرض بر این میشه که خطایی اتفاق نیفتاده باشه) Err.Description توضیح خطا Err.Source منبع خطا.Err.Raise هم یه خطا تولید میکنه!!

Error .49 اگه این تابع رو برابر یه مقدار قرار نداره باشین کار Err.Raise رو میکنه با این فرق که فقط شماره خطا رو میگیره(به تعداد آرگومان هایی که میگیرن توجه کنین) (در این حالت میشه گفت اصلا تابع نیست!) در غیر این صورت توضیح خطایی که تولید کرده رو هم برمیگردونه

Error$ .50 فقط حالت دوم Error هستش

Exp .51 معادلش توی ریاضی e x

FileAttr .52 با گرفتن شماره ای که فایل باش باز شده Attribute هاش رو برمیگردونه.مثلا :

Private Sub Command1_Click()
Open "C:\io.sys" For Random As #1
If FileAttr(1) And vbSystem Then
MsgBox "This is a Syetem file!"
End If
Close #1
End Sub

FileCopy .53 واسه کپی کردن فایل هستش که آرگومان اولی آدرس فایل مبدا و بعدی مقصده.اگه فایل مقصد وجود داشته باشه عمل کپی انجام نمیشه.

FileDateTime آدرس یه فایل رو میگیره و زمان آخرین ویرایش یا زمانی که درست شده رو برمیگردونه.

FileLen .54 آدرس یه فایل رو میگیره و طولش رو برمیگردونه.(به بایت)

Fix .55 یه چیزی شبیه تابع براکت توی ریاضی هستش با این فرض که اعداد منفی رو رو به بالا گرد میکنه .مثلا:

Fix(2.1) = 2 و Fix(-2.1) = -2

Filter .56 یه آرایه رشته ای میگیره و آرایه ی جدیدی رو برمیگردونه به طوری که اون آرایه شامل عضو هایی از آرایه ی اول میشه که یک رشته ی خاص رو دارا هستن یا دارا نیستن.(تابع 2 حالت داره).آرگومان اول آرایه مورد نظره.دومی رشته ی مورد نظره.سومی اگه False باشه اون عضو هایی که شامل رشته نیستن انتخاب میشن و برگردونده میشن و اگه True باشه عضو هایی که شامل رشته هستن.بعدی هم نوع مقایسه هست که توی توضیح تابع InStr درموردش توضیح دادم.اونجا رو ببینین.
مثلا این آرایه رو تصور کنین :

Dim MainArr(3) As String
MainArr(0) = “Visual Basic”
MainArr(1) = “Visual C++”
MainArr(2) = “W32 Assembly”
MainArr(3) = “Java Script”

حالا ما میخوایم همه ی اون عضو هایی از MainArr که کلمه ی Visual داخلشون نیست رو توی یک آرایه دیگه ذخیره کنیم :

Dim NewArr() As String
NewArr = Filter(MainArr,”Visual”,False)

با این کد عضو های آرایه NewArr ، W32 Assembly و Java Script میشن.اگه به جای False از True استفاده میکردین عضو ها Visual Basic و++ Visual C میشدن.

Format .57 (و Format$)یه تابع پر کاربرده که کارهای زیادی در رابطه با رشته ها میکنه و اگه بخوام همشونو بگم به اندازه ای که تاحالا نوشتم باید بنویسم!!در کل یه رشته به عنوان آرگومان اول میگیره.دومی هم یه رشتس که Style یا حالت یا همون فرمت اون رشته رو تعیین میکنه .مثلا میخواهین با داشتن ثانیه – دقیقه و ساعت،زمان رو با فرمت درست بدست بیارین :

MsgBox (Format("125802", "00:00:00"))

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

FormatCurrency .58 این تابع یه عدد رو به نوع Currency (نوعی که توی ویبی برای نگه داشتن مقدار پول بکار میره) با فرمت دلخواه تبدیل میکنه.آرگومان اول عدد مورد نظره.آرگومان های بعدی اختیاری هستن: دومی تعداد صفرهایی که بعد از عدد و نقطه ی آخر اون نشون داده میشن هستش که بطور پیشفرض 1-(Default) هستش و برای من 2 تا نشون میده مثلا 100 رو 100.00 نشون میده.

آرگومان بعدی مشخص میکنه که برای عدد های کسری .0 قبل از عدد رو نشون بده یا نه.بعدی مشخص میکنه که برای عدد های منفی از پرانتز استفاده بشه یا نه.بعدی مشخص میکنه که عدد هارو (سه تا سه تا) با کاما گروه بندی کنه یا نه.مثلا 100000 رو 10,000 نشون بده یا نه.یه مثال کلی : FormatCurrency(10000,3,vbTrue,vbTrue,vbTrue)مقدار 10,000.000$ رو برمیگردونه.
این رو هم بگم که آرگومان های 3 ، 4 و 5 به غیر از vbTrue و vbFalse مقدار vbUseDefault رو هم میتونن بگیرن که این مقدار به مقدار بیشفرض که به تنظیم های ویندوز بستگی داره ارجاع میکنه.

FormatDateTime .59 این تابع واسه تغییر فرمت زمان و تاریخ به کار میره.آرگومان اول تاریخ یا زمان مورد نظره .دومی هم فرمت مورد نظر.مقدار بازگشتی با توجه به نوع فرمت و نوع مقداری که بش دادیم فرق میکنه :

FormatDateTime(Now(), vbGeneralDate) = 10/5/2005 10:49:07 PM

FormatNumber .60 مثل FormatCurreny هستش با 2 تا فرق.یکی اینکه علامت دلار ($) کنار عدد نمیگذاره. یکی دیگه اینکه اگه مقدار منفی باشه و آرگومان 3 False ، علامت منفی رو کنار عدد نشون میده.
  •  
 
 
 
اموزش سری دوم
 
اموزش توابع داخلی Visual Basic ( نزدیک به 180 تابع )
ChrW .21 (و ChrW$) واسه کاراکتر های Unicode استفاده میشه.یعنی کد یه کاراکتر Unicode (فکر کنم بین 0 تا 2 بتوان 16) رو میگیره و یه کاراکتر Unicode برمیگردونه

CInt .22 تبدیل نوع یه مقدار به Integer

Circle .23 واسه رسم یه دایره ، بیضی ، قطاع یا کمان روی فرم هستش.مثلا
Circle(20,20),10,vbred,0,3.141,2 یه کمان با مرکز 20و20 و با شعاع 10 با رنگ قرمز از 0 تا پی رو طوری رسم میکنه که ارتفاعش 2 برابر عرضش هستش.برای رسم قطاع باید ارگومان های 4 و 5 منفی باشن.واسه رسم دایر بعد از vbred نیاز نیست مقدار بزارین.واسه رسم بیضی(کامل) آرگومان های 4 و 5 رو مقدار ندین در عوض با تغییر دادن آرگومان 6 میتونین بیضی های مختلفی رسم کنین.

Clng .24 واسه تغییر نوع یه مقدار به Long هستش

Cls .25 مثل دستور معادلش توی داس هستش.یعنی فرم رو پاک میکنه.

Command .26 و Command$ اون پارامتر هایی که به برنامه ارسال شدن رو برمیگردونن.مثلا وقتی برنامه رو با دستور
Project1.exe “-hidden” باز کنیم Command برابر “hidden-” میشه.

Cos .27 کسینویس زاویه ای که –بر حسب رادیان – بهش میدیم رو برمیگردونه.

CreateObject .28با گرفتن ClassName یک شی رو درست میکنه.مثلا

Set fso = CreateObject("Scripting.FileSystemObject")

آبجکت معروف FSO رو دست میکنه که خیلی هم توی ASP کاربرد داره.حالا که این آبجکت رو ساختین میتونین ازش استفاده کنین.مثلا واسه بدست آوردن پوشه temp :

MsgBox fso.getspecialfolder(2)

بعد از اینکه کارمون با شی تموم شد باید حافظه ای که بش اختصاص پیدا کرده رو آزاد کنیم :

Set FSO = Nothing

CSng .29-30 و CStr واسه تبدیل نوع یه مقدار به Single و String هستن.

CDir .31 و CDir$ هم دایرکتوری پیشفرض رو برمیگردونن(واسه توضیح بیشتر یه سر به chDir بزنین)

CVar .32 واسه تبدیل نوع یه مقدار به Var هست

CVDate .33 واسه تبدیل یه مقدار(رشته یا عدد) به نوع Date بکار میره.

CVErr .34 یه شماره خطا یا یه آبجک از نوع ErrObject میگیره و یه مقدار از نوع Error برمیگردونه مثلا : “Cstr(CVErr(13)) = “Error 13
اما اینکه به چه درد میخوره نمیدونم.اینم توضیح : MSDN

The CVErr function in Visual Basic 6.0 returned a Variant of the subtype Error that contained an error number

DateAdd .35 واسه کم یا زیاد کردن یه مقدار از یه تاریخ یا ساعت بکار میره.آرگومان اولی نوع مقداری که میخواهیم کم یا زیاد کنیم هستش که باید یکی از اینا باشه : s ثانیه n دقیقه h ساعت w روزهای هفته w هفته d روز(مثل 12) y روز از سال(مثل 224) m ماه q یک چهارم سال(فصل) yyyy سال.آرگومان دومی مقداریه که میخواهیم اضافه یا کم کنیم مثل 2 1 ... .آرگومان بعدی زمان یا تاریخ مورد نظره.
مثلا (()DateAdd(“m”,3,Date سه ماه به تاریخ فعلی(()Date) اضافه میکنه و تاریخ جدید رو برمیگردونه.

DateDiff .36 برای مقایسه کردن یکی از قسمت های 2 مقدار تاریخ هستش.ارگومان اول همون قسمت مورد نظره که مثل تابع قبلی مقدار دهی میشه.آرگومان دوم تاریخ1 بعدی تاریخ 2 هستش.مثلا (()DateDiff(“yyyy”,Date(),DateAdd(“yyyy”,3,Date مقدار 3 رو برمیگردونه.

DatePart .37 یک قسمت از یک تاریخ ( یا زمان) رو برمیگردونه.آرگومان اول مثل 2 تابع قبلیه.دومی هم تاریخ مورد نظر.مثلا (()DatePart(“h”,Time الان برای من 17 رو برمیگردونه (ساعت 5 بعد از ظهر).

DateSerial .39 روز و ماه و سال رو به عدد میگیره و تاریخ رو برمیگردونه.

DateValue .40 کار قبلی رو میکنه فقط مقدار رو یکجا(از نوع رشته) میگیره.مثلx (“DateValue(“2002/09/11 رو میگیره و تاریخ رو از نوع Date برمیگردونه.
 
 
 
 
اموزش
 
اموزش توابع داخلی Visual Basic ( نزدیک به 180 تابع )

Abs .1 قدر مطلق یک عدد رو برمیگردونه

appActivate .2 عنوان یه پنجره رو میگیره و اونو فعال میکنه

Asc .3 یه کاراکتر میگیره و کد اسکی اون رو برمیگردونه (بین 0 تا 255) .اگه بهش رشته بدین کاراکتر اول رو بررسی میکنه .مثلاAsc(“A”)= 65

AscB .4 کار قبلی رو با بایت اول مقداری که بش میدیم انجام میده(نه با کاراکتر اول).خروجیش هم از نوع Byte هستش(قبلی Integer بود)

AscW .5 واسه کاراکتر های Unicode هستش یعنی مقدار کد کاراکتر Unicode (w مخفف Wide هستش) رو برمیگردونه که بین 0 تا 2 بتوان 16

Atn .6 آرک تانژانت مقداری رو که بش دادیم برمیگردونه.البته زاویه رو بر حسب رادیان برمیگردونه که اگه میخواهین بر حسب درجه بکنینش باید ضرب در 180 تقسیم بر پی بکنینش مثلا (180 * 3.14 * 1) Atnمقدار 45.0228246533569 رو برمیگردونه
البته برای بدست آوردن مقدار دقیق تر پی از (Atn(1) * 4) میتونین استفاده کنین.

Beep .7 صدای beep در میاره.

CallByName .8 با این تابع میشه با استفاده از اسم یه متد یا Property مربوط به یه شی که توی یه رشته هست متد رو فراخوانی کرد یا Property رو گرفت یا مقدار داد و ... .آرگومان اول شی مورد نظره مثل Command2 دومی متد یا Property مورد نظره مثل “Set Focus” یا “Caption” سومی نوع فراخوانییه که میخوانیم انجام بدیم .مثل vbLet مقدار دهی یه Property یا VbMethod واسه یه متد و ... .بعدی هم آرگومان هایی هستن که به اون متد باید ارسال بشن یا اگه بخواهیم Property رو عوض کنیم اون مقدار مورد نظرمون هست.اگه هم نیازی به آرگومان نباشه خالی میزاریمش.مثلا با این دستور :

CallByName Command2, "setFocus", VbMethod

فوکوس به Command2 اختصاص داده میشه یعنی کاره Command2.SetFocus رو میکنه.یا با این دستور :

CallByName Command2, "Caption", VbLet, "MyCaption!"

مقدار Caption دکمه 2 برابر MyCaption میشه

9 ta 14 . Cbool ، Cbyte،CCur ،CDate ، CDbl،CDec توابع تبدیل نوع هستن و نوع مقداری که میگیرن رو به نوعی که از اسمشون پیداست تبدیل میکنن مثلا CBool مقداری گه بش دادیم رو به نوع Boolean تبدیل میکنه.

chDir .15 دایرکتویری پیشفرض رو برای هر درایو عوض میکنه.مثلا (“chDir(“C:\windows دایرکتوری پیشفرض درایو C رو C:\Windows میکنه.بعد از این کد اگه تابع (“CurDir(“C رو فراخوانی کنین مقدار C:\windows (همون مقدار پیشفرض) برگردونده میشه.در صورتی که اگه chDir رو فراخوانی نمیکردین مقدار C:\windows\System32 رو برمیگردوند.

chDrive .16 درایو پیشفرض رو تعیین میکنه.در حالت عادی درایو پیشفرض همون درایویه که برنامه داخلش اجرا شده.یعنی وقتی تابع CurDir رو بدون دادن درایو فراخوانی کنین سراغ درایوی میره که برنامه توش اجرا شده.مثلا برای من که برنامم داره توی درایو D اجرا میشه CurDir قبل از فراخوانی (“:ChDrive(“C مقدار “D:\vb\myproj” رو برگردوند بعد از فراخوانی مقدار C:\windows\System32 رو.

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

Choose(3, "Arg1", "Arg2", "Arg3", "Arg4", "Arg5")

مقدار “Arg3” رو برمیگردونه.

Chr .18 یه کد اسکی میگیره و کاراکتر مربوط به اون رو برمیگردونه.مثلا Chr(65) = “A”

Chr$ .19 مثل قبلیه فقط مقداری که برمیگردونه از نوع رشته هستش(بهتره از این به جای قبلی استفاده کنین)

ChrB .20 مثل Chr فقط همیشه یه مقدار تک بایتی Single-Byte برمیگردونه یعنی طول مقداری که برمیگردونه از لحاظ بایت 1 هستش در صورتی که برای تابع قبلی 2 مثلا توی حافظه : Chr(65) => 65 00 ولی 65 <=(ChrB(65
 
 
 
 
برخی اپراتور های Visual Basic
 
 اپراتور

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

TypeOf ControlName Is ControlType

مثال:کنترلی از نوع فایل بوکس رابه تایع زیر می فرستیم یرای تعیین عضو انتخاب شده

Private Function GetSelectItem(LST as Contol) as String
if TypeOf lst is listbox then
GetselectItem=Lst.text:Exit Function
else :GetselectItem=Lst.FileName:Exit Sub
End if

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

DoEvents اپراتور

این اپراتور برای ارجاع تمام عملییات به سی پی یو برای انجام می باشد.اکثرآ از این اپراتور برای مواقعی استفاده می گردد که یک عملیات وقتگیر در حال انجام است مانند اعمال افکت روی تصویر و حلقه های تکرار طولانی. این اپراتور در درون حلقه قرار گرفته و کامپایل نمی شود مانند رهنمود ها در پاسکال عمل می کندوبه سی پی یو می گوید تمام کارهیت را به صورت یکسان انجام بده واز اولویت ها صرف نظر کن .در برنامه هایی که یک عملیات در درون یک حلقه هر دور انجام می شود آکثرآ باعث هنک کردن آن برنامه تا پایان عملیات می شود.چون برنامه بین واکنش به تکان خوردن موس -جابه جاکردن برنامه یا بزرگ و کوچک کردن برنامه وپردازش روی عملیات مورد نظر(مثلآ کپی فایل)عملییاتی که دارای اولویت پردازش است را انتخاب می کند.این اپراتور در چنین مواقعی بسیار مفید است وباعث می شود کاربر گمان نکند که برنامه هنک کرده و آن را ببندد.مثال:ِ

For i=0 to list1.listCount -1
if list1.list(i)<>"" then call Copy(list1.list(i),App.path+"\")
DoEvents
Next

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

استفاده می کنندSleepبه نام APIباعث کارکرد زیاد وشدید سی پی یو می شود وبرخی ترجیح می دهند از آن استفاده نکنند ویه جای ان از یک

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

آن نوشته می شود به استراحت بپردازد.ِ

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

Shell دستور

توسط این دستور می تونید فایلی را در وی بی اجرا کنید .آدرسی که جلوی این دستور نوشته می شه اجرا میشه .شکل این دستور به این صورت است:ِ

Shell ProgramPath,RunModel

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

vbHide=0 vbMaximizedFocus=1 vbMinimizedFocus=2 vbMinimizedNoFocus=3 vbNormalFocus=4 vbNormalNoFocus=5

در مدل صفر برنامه به صورت پنهان ظاهر می شود.برای مواقعی که می خواهیم عمل اجرا را از دید کاربر پنهان کنیم .در مدل 2 برنامه اجرا می شود به صورت کمینه(روی منوی استارت-مینیمایز شده)وفاکس هم روی ان می رود یعنی این که بعد از اجرا هی زرد و آبی می شود تا کار بر روی آن کلیک کند.مدل 3برنامه به

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

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

Shell "NotPath.Exe"+" C:\Text1.txt" ,4
 
 
 
فرمت فایل M3U
 
فرمت فایل M3U
چگونه یک فایل PlayList با پسوند M3U بسازیم

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

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

Public Sub SaveList(OutPath As String,Lst as ListBox)
On Error Resume Next '--------------------------------------------------
Dim T3 As String, T2, strans As String, L As Single, i As Integer
T3 = "": T2 = ""
If Lst.List(1) = "" Then
strans = MsgBox("File Not Found!", vbCritical)
Exit Sub '------------------------------------------------------
End If
If UCase(Right(OutPath, 3)) <> "M3U" Then Exit Sub
Open OutPath For Output As #1
Print #1, "#EXTM3U:"
For i = 1 To Lst.ListCount '----------------------------
Print #1, "#EXTNIF:"
Print #1, Lst.List(i)
Next i '------------------------------------------------------
Close #1
End Sub

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

SaveList "C:\1.M3U",List1

 
 
 
 
دستور Shell
 
توسط این دستور می تونید فایلی را در وی بی اجرا کنید .آدرسی که جلوی این دستور نوشته می شه اجرا میشه .شکل این دستور به این صورت است

Shell ProgramPath,RunModel

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

vbHide=0 vbMaximizedFocus=1 vbMinimizedFocus=2 vbMinimizedNoFocus=3 vbNormalFocus=4 vbNormalNoFocus=5

در مدل صفر برنامه به صورت پنهان ظاهر می شود.برای مواقعی که می خواهیم عمل اجرا را از دید کاربر پنهان کنیم .در مدل 2 برنامه اجرا می شود به صورت کمینه(روی منوی استارت-مینیمایز شده)وفاکس هم روی ان می رود یعنی این که بعد از اجرا هی زرد و آبی می شود تا کار بر روی آن کلیک کند.مدل 3برنامه به

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

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

Shell "NotPath.Exe"+" C:\Text1.txt" ,4

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

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

shell "notpath.exe"+(app.path+"\"+"your File Name")

کلاسی است که به برنامه اشاره می کند ومی توان اطلاعات برنامه مانند مسیر-نام فایل اجرائی-کمپانی وغیرهapp

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

اجرا کنید به مسیر کامل نیاز نیست برنامه ای مانند کامند پرامپت بازی ها واسکرین سیور ها در این پوشه system32

است.مثال hell "cmd.exe",4

اجرای یک فولدر با شل

واقع در درایو ویندوز را به همراه نام فیل اجرا می کنیمexplorer.exeبرای این کار فایل اجرائی

shell "explorer.exe"+" c:\windows" ,3

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

Shell "rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl "کادر حذف برنامه ها
Shell "rundll32.exe shell32.dll,Control_RunDLL desk.cpl"کادر تغییر پس زمینه
Shell "rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl"کادر اینتر نت
Shell "rundll32.exe shell32.dll,Control_RunDLL modem.cpl"کادر مودم
Shell "rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl"کادر صدا
Shell "rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl"کادر شبکه
Shell "rundll32.exe shell32.dll,Control_RunDLL powercfg.cpl"کادر پاور-برق
Shell "rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl"کادر سیستم
Shell "rundll32.exe shell32.dll,Control_RunDLL telephon.cpl"کادر تلفن
Shell "rundll32.exe shell32.dll,Control_RunDLL timedate.cpl"کادر ساعت

کتابخانه وسیع Shell

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal_ lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal_ nShowCmd As Long) As Long

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

Shell "arp"
Shell "drvspace"
Shell "drwatson"
Shell "explorer"برای my document
Shell "freecell"
Shell "ftp"برای تنظیم اف تی پی
Shell "ipconfig"کادر آی پی
Shell "mplayer"مدیا پلیر
Shell "mshearts"
Shell "nbtstat"
Shell "netstat"
Shell "calc"ماشین حساب
Shell "notepad"نوت پد
Shell "packager"
Shell "pbrush"نقاشی
Shell "ping"
Shell "regedit"ریجیستری
Shell "route"روت
Shell "scandskw"اسکن دیسک
Shell "scanregw"اسکن رگ
Shell "setdebug"کخک تری تنظیم ویندوز
Shell "sigverif"
Shell "cdplayer"سی دی پلیر
Shell "sndrec32"ضبط صدا
Shell "sndvol32"تنظیم ولوم صدا
Shell "sol"همون سول
Shell "taskman"وضعیت سی پی یو
Shell "telnet"تلفن
Shell "vcmui"
Shell "winfile"
Shell "winipcfg"
Shell "winmine"
Shell "winrep"
Shell "charmap"کاراکتر مپ
Shell "winver"
Shell "write"وورد پد
Shell "wscript"
Shell "cleanmgr"کلنر پاک کننده اشغال درایو
Shell "control"کنترل پنل
Shell "cvt1"
Shell "defrag"دفراگمنت
Shell "drvspace" فضای خالی دیسک

اجرای فایل اینترنت با Shell
shell "Explorer.exe"+" http://www.VBLog.blogfa.comن به یک سایت
shell "explorer.exe"+" maileto:Mahdi_VBLog@yahoo.com"کادر ارسال ایمیل
shell "explorer.exe"+" yor HTML File.html"کادر اجرای یک فایل اینترنت از حافظه
shell "explorer.exe"+" file://www.سایت شما.com/11.zip"کادردانلود یک فایل از اینترنت

 

 

 

موفقیت شما ارزوی من است  

 
 
 
نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد