• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

سئوال و جوابهاي بيسيكي(VISUAL BASIC)

littlerabbit

مدیر بازنشسته
کاربر فعال
تاریخ عضویت
13 جولای 2003
نوشته‌ها
678
لایک‌ها
6
سن
43
محل سکونت
Iran
سلام
اينجا چند تا سوال بود كه فكر ميكنم بتونم جواب بدم.
اول مساله OnTop كردن يه فرم اينو به كد فرمتون اضافه كنيد :


[code:1]Option Explicit

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



' SetWindowPos() hwndInsertAfter values

Private Const HWND_TOP = 0            'Send To Front

Private Const HWND_BOTTOM = 1         'Send To Back

Private Const HWND_TOPMOST = -1       'Always On Top

Private Const HWND_NOTOPMOST = -2     'Normal

' SetWindowPos Flags

Private Const SWP_NOSIZE = &H1

Private Const SWP_NOMOVE = &H2

Private Const SWP_NOZORDER = &H4

Private Const SWP_NOREDRAW = &H8

Private Const SWP_NOACTIVATE = &H10

Private Const SWP_FRAMECHANGED = &H20        '  The frame changed: send WM_NCCALCSIZE

Private Const SWP_SHOWWINDOW = &H40

Private Const SWP_HIDEWINDOW = &H80

Private Const SWP_NOCOPYBITS = &H100

Private Const SWP_NOOWNERZORDER = &H200      '  Don't do owner Z ordering





Private mOnTop As Boolean



Public Property Get OnTop() As Boolean



   OnTop = mOnTop

End Property



Public Property Let OnTop(ByVal vNewValue As Boolean)



   mOnTop = vNewValue

   Dim Temp As Long

   Temp = IIf(mOnTop, HWND_TOPMOST, HWND_NOTOPMOST)

   SetWindowPos hwnd, Temp, Left / Screen.TwipsPerPixelY, Top / Screen.TwipsPerPixelX, Width / Screen.TwipsPerPixelX, Height / Screen.TwipsPerPixelY, SWP_NOACTIVATE Or SWP_SHOWWINDOW

   

End Property[/code:1]

حالا هر وقت احتياج شد كه فرم OnTop بشه راحت بنويس :
ّForm1.OnTop=True
اين جواب اين سوال آخري هم بود.

در مورد فرمي كه مستطيل نباشه . تو ويندوز يه چيزي هست به نام Region و یه سری تابع برای خودش داره (یه سر بزن به MSDN) حالا من یه برنامه اینجا میذارم که فرمو گرد میکنه بعدم واسه اینکه فقط سوال جواب نداده باشم یه تیکه هم خودم اضافه میکنم که باعث میشه فرم رو بتونید با گرفتن کلیک موس روی هر کجای اون (نه فقط روی نوار عنوانش) جابجا کنید.
[code:1]

Option Explicit



Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

Private Declare Function CreateEllipticRgnIndirect Lib "gdi32" (lpRect As RECT) As Long

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



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

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const WM_NCLBUTTONDOWN = &HA1

Private Const HTCAPTION = 2

Private Const WM_CAPTURECHANGED = &H215



Private Type RECT

       Left As Long

       Top As Long

       Right As Long

       Bottom As Long

End Type





Private Sub Form_Load()

   Dim Temp As RECT

   Dim Rgn As Long

   

   GetWindowRect hwnd, Temp

   With Temp

       .Top = .Top - Top / Screen.TwipsPerPixelY

       .Bottom = .Bottom - Top / Screen.TwipsPerPixelY

       .Left = .Left - Left / Screen.TwipsPerPixelX

       .Right = .Right - Left / Screen.TwipsPerPixelX

  End With

   Rgn = CreateEllipticRgnIndirect(Temp)

   SetWindowRgn hwnd, Rgn, True

End Sub



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

   If Button = vbLeftButton Then

       ReleaseCapture

       SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&

   End If

End Sub[/code:1]
در مورد Region توابع دیگه ای هم هست که مثلا لبه های فرمو <پخ> میکنه یا اینکه فرمو چند ضلعی میکنه ولی چون این از همه راحت تر بود و منهم یک گلابی تنبل هستم راحتترینشونو انتخاب کردم و نوشتم.

دوستدار شما خرگوش کوچولو(گلابی خانواده)

تا بعد ....
( ;<

شرمنده گويا سوتي داده بودم. ولي خوب شد كه اول از همه خودم متوجه شدم(البته فكر ميكنم!)
 

amirnezhad

کاربر تازه وارد
تاریخ عضویت
26 جولای 2003
نوشته‌ها
136
لایک‌ها
0
با تشكر از littlerabbit كه جواب سوالات رو به طور كامل دادند (البته من اونها رو امتحان نكردم!)

فقط يه پيشنهاد داشتم. اونهم اينكه قبل از هر چيزي اگه VB كار مي كنيد يه نگاهي به اين سايت بكنين!
<a href='http://www.planet-source-code.com/' target='_blank'>http://www.planet-source-code.com/</a>

خيلي از اين سوالات رو ميشه اونجا پيدا كرد. مثلا دو نمونه از Sourceهايي كه براي تغيير شكل فرم اونجا هست رو ببينين!

<a href='http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=28986&lngWId=1' target='_blank'>http://www.planet-source-code.com/vb/scrip...=28986&lngWId=1</a>
<a href='http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=11217&lngWId=1' target='_blank'>http://www.planet-source-code.com/vb/scrip...=11217&lngWId=1</a>

دوم هم اينكه اينطوري تو يه بحث به همه موارد نپردازين. به نظر من همين تغيير شكل فرم و همچنين فرم هاي OnTOP خوذشون مي تونن يه بحث جدا باشن. اينطوري پيدا كردن موارد مختلف هم خيلي ساده تر ميشه!!!

قربان همگي :)
 

Gt_Max

Registered User
تاریخ عضویت
13 آگوست 2003
نوشته‌ها
1,663
لایک‌ها
80
محل سکونت
In Your Pantz
مارو باش كه فكر كرديم اين اموزشش تصويريه! :(
 

mahdi3466

کاربر تازه وارد
تاریخ عضویت
27 جولای 2003
نوشته‌ها
138
لایک‌ها
0
ولى خداييش آموزش vb تو سايت خودم .. خداوكليلش كه عاليه

www.mahdikh.5u.com
 

saloome

کاربر تازه وارد
تاریخ عضویت
30 آگوست 2003
نوشته‌ها
8
لایک‌ها
0
من 1 سوال داشتم اونم اينه كه ايا ميشه روي اين برنامه اهنگ گذوشت يا نه؟
 

ned

کاربر تازه وارد
تاریخ عضویت
21 آگوست 2004
نوشته‌ها
36
لایک‌ها
0
سن
42
محل سکونت
tehran
خيلي خوبه لطفا ادامه بدين
 

ned

کاربر تازه وارد
تاریخ عضویت
21 آگوست 2004
نوشته‌ها
36
لایک‌ها
0
سن
42
محل سکونت
tehran
منم اگه براي هر قسمت مثالهاي جالب داشته باشم مي گم . فقط چون بيشتر اشكلاتم تو قسمتهاي آخر وي بيه سعي كنيد اولا رو كه همه معمولا بلدن سريعتر رد بشيد
مخلص همه ندا
 
بالا