PDA

View Full Version : سوال: تفاوت بین Const و Const#



kami_63
پنج شنبه 07 مهر 1390, 11:15 صبح
با سلام
می خواستم بدون فرق بین تفاوت بین Const و Const# چیه و جچوری تعریف و مقدار دهی میشن

محسن واژدی
پنج شنبه 07 مهر 1390, 11:35 صبح
سلام
Const : ثابت هایی را برای استفاده در برنامه تعریف میکند،
Const#: ثابت هایی را برای شرطی کردن کامپایلر ویژوال بیسیک تعریف میکند،

موفق باشید

kami_63
پنج شنبه 07 مهر 1390, 11:41 صبح
در مورد Const# میشه بیشتر توضیح بدین

محسن واژدی
پنج شنبه 07 مهر 1390, 12:14 عصر
در ویژوال بیسیک دو دستور یکی برای تعریف ثابت و دیگری برای شرطی کردن کمپایلر وجود دارد، این دستورات تنها در کمپایلر کاربر دارند:
#If...Then...#Else : شرطی که تعیین میکنیم کدام کدها کمپایل شوند
#Const: یک ثابت variant را منحصرا" برای استفاده در شرط #If تعریف میکند

به عنوان مثال برنامه ای نوشته ایم که قصد انتشار آن را در دو نسخه demo و fullversion داریم، در اینصورت میتوانیم با دو دستور فوق انتخاب کنیم که کدام کدها در نسخه demo و کدام در نسخه fullversion کمپایل شوند که در اینصورت کدهای نسخه کامل برنامهدر نسخه دمو وجود ندارند، کد زیر را ببینید:

#Const fullVer = 0

Private Sub Command1_Click()
#If fullVer Then
MsgBox "Full version", vbInformation
#Else
MsgBox "Trial version", vbExclamation
#End If
End Sub


دو ثابت از پیش تعریف شده نیز وجود دارند که از آنها برای تشخیص win16,32 استفاده میشود، در اینصورت میتوانید مانع از کمپایل دستورات علل الخصوص توابع api win16 در win32 و بالعکس شوید، کد زیر را بررسی کنید:

#If Win16 Then
Const WinVer$ = "Win16"
#ElseIf Win32 Then
Const WinVer$ = "Win32"
#End If
Private Sub Command1_Click()
MsgBox WinVer$
End Sub


همچنین میتوانید ثابت های #Const را در ProjectSettings در جعبه "Conditional Compilation Arguments" نیز تعریف کنید، در اینصورت لازم نیست #Const را صریحا" در ماژول تعریف کنیم، اگر تعداد ثابت های تعریف شده در جعبه "Conditional Compilation Arguments" بیش از یکی است آنها را بوسیله ":" از هم جدا کنید
مثلا":
Arg1=1 : Arg2=2

موفق باشید

kami_63
پنج شنبه 07 مهر 1390, 13:06 عصر
خيلي ممنون از جوابتون. حالا هيج راهي نداره مقداري كه در arg هستش رو چاپ كنيم فقط تو دستور شرطي كاربرد داره؟؟

محسن واژدی
پنج شنبه 07 مهر 1390, 13:33 عصر
خيلي ممنون از جوابتون. حالا هيج راهي نداره مقداري كه در arg هستش رو چاپ كنيم فقط تو دستور شرطي كاربرد داره؟؟

خیر، این ثابت فقط در دستور شرطی #If کاربرد داره، و نمیتوان از آن در جایی بجز #If استفاده کرد، و اگر در ماژول، دستور Option Explicit وجود داشته باشد، در صورت تلاش برای بدست آوردن مقدار #Const خطای Not defiend داده میشود
کد زیر را هم بررسی کنید:

Option Explicit
#Const MyVal = "CConstant"
Const MyVal = "UConstant"

Private Sub Command1_Click()
MsgBox MyVal
End Sub

همانطور که میدانیم اگه دوتا متغیر هم نام در یک ماژول یا روال اعلان شوند خطای Ambiguous Name ظاهر میشود، حال اینکه در کد بالا اینطور نیست، MsgBox محتویات Const MyVal را نشان میدهد

موفق باشید

kitcat_m18
پنج شنبه 07 مهر 1390, 20:24 عصر
سلام،

ببخشيد آقاي واژدي من متوجه نشدم چجوري ميشه فول ورژن يا تريال بودن رو مشخص کرد





#Const fullVer = 0

Private Sub Command1_Click()
#If fullVer Then
MsgBox "Full version", vbInformation
#Else
MsgBox "Trial version", vbExclamation
#End If
End Sub




متوجه شدم که کاربرد کد چيه و چي ميگه اما چجوري بگيم که برنامه فول ورژنه يا تريال؟؟؟:متفکر:

با تشکر

محسن واژدی
پنج شنبه 07 مهر 1390, 21:26 عصر
چجوري ميشه فول ورژن يا تريال بودن رو مشخص کرد


سلام علیکم
در نمونه کد زیر کد های نسخه کامل را جایگزین پیام اول یعنی:
MsgBox "Full version", vbInformation میکنیم، و کدهایی که حاوی محدودیت هایی در استفاده است جایگزین پیام دوم میکنیم
در پایان برای کمپایل برنامه در نسخه دمو مقدار fullVer را برابر صفر و برای انتشار نسخه کامل fullVer را یک مقدار دهی میکنیم


#Const fullVer = 0



Private Sub Command1_Click()

#If fullVer Then

MsgBox "Full version", vbInformation

#Else

MsgBox "Trial version", vbExclamation

#End If

End Sub

موفق باشید