.AnimateWindow
این تابع رو باید در حالتی که یه پنجره هنوز رسم نشده(یا Hide هست و ...) و یا قبل از پنهان شدن هست باید فراخوانی کرد
بعد از فراخوانی تابع پنجره در حالتهای مختلف به صورت انیمیت رسم میشه یا پنهان میشه.مثلا از سمت چپ طولش افزایش پیدا میکنه تا کاملا رسم بشه.این تابع توی API Viewer نیست:
Private Declare Function AnimateWindow Lib "user32" (ByVal hwnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Boolean
این تابع 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