PDA

View Full Version : سوال: تعیین فرم جلویی



shahabbasic
یک شنبه 15 آبان 1390, 18:42 عصر
من دو تا فرم دارم و بعد از یک رخدادی فرم دومم که از اول نبوده ظاهر میشه و من میخوام این فرم روی فرم اول قرار بگیره و همینطور هم میشه اما.... وقتی روی آیکون برنامه در نوار وظیفه کلیک میشه (آیکون فرم دوم در تسک بار وجود نداره و فقط آیکون فرم اولی در تسک بار هست) فرم اول روی فرم دوم رو میگیره !!!!
میشه بگید چکار کنم که اینجوری نشه؟؟؟

M.T.P
یک شنبه 15 آبان 1390, 18:55 عصر
فرم دوم رو بصورت Modal نمایش بدهید.


Dim CForm As New Form2
CForm.Show vbModal
Set CForm = Nothing

shahabbasic
دوشنبه 16 آبان 1390, 12:16 عصر
من خودم این کار رو قبلا کردم و جواب هم گرفتم ولی چون من فرمم رو با کد زیر بصورت شفاف نمایش میدم کد زیر با کدی که فرم رو به صورت Modal نمایش میده سازگار نیست و اصلا فرم ظاهر نمیشه

General
Const LWA_COLORKEY = &H1
Const LWA_ALPHA = &H2
Const GWL_EXSTYLE = (-20)
Const WS_EX_LAYERED = &H80000
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long

Form _ load
Dim Ret As Long
SetWindowLong Me.hWnd, GWL_EXSTYLE, WS_EX_LAYERED
SetLayeredWindowAttributes Form2.hWnd, 0, 200, LWA_ALPHA

شما خودت این دوتا کد رو با هم تست کن میبینی که جواب نمیگیری... راه حل دیگه ای هم داره؟

ASedJavad
دوشنبه 16 آبان 1390, 19:38 عصر
شما این کدی رو که نوشتی، تو فرم دو نوشتی یا تو فرم 1؟
اگه تو فرم2 بنویسی بعید میدونم مشکلی ایجاد کنه.
تو سیستم من که به مشکل برنخورد.

shahabbasic
دوشنبه 16 آبان 1390, 21:42 عصر
کدی رو که فرم رو به شکل Modal نمایش میده گذاشتم توی یک دکمه که در فرم اولی قرار داره
کدی که مربوط به شفاف کردن هست رو در فرم دوم گذاشتم

ASedJavad
دوشنبه 16 آبان 1390, 22:34 عصر
میتونی نمونه برنامت رو بذاری؟

shahabbasic
سه شنبه 17 آبان 1390, 22:12 عصر
بله چرا نشه بفرمایید

ِDownload (http://up9.iranblog.com/images/zjmlda31bwmkfh3w6cqn.zip)

M.T.P
چهارشنبه 18 آبان 1390, 00:19 صبح
////////////////////////// :بوس:

ASedJavad
چهارشنبه 18 آبان 1390, 00:19 صبح
عزیز!
شما بجای کد

Dim CForm As New Form2
CForm.Show vbModal
Set CForm = Nothing
از کد
[CODEForm2.Show vbModal[/CODE]
استفاده کن

M.T.P
چهارشنبه 18 آبان 1390, 01:07 صبح
سلام دوست عزیز...
بله ، البته به شکلی هم که شما فرمودید میشه فرم ها رو نشون داد.
اما روش اصولی نمایش فرم ها اینه که یک آبجکت از کلاس فرم ساخته و نمایش دهیم.
اگه بخوایم کل تاپیک های بخش vb6 رو مرور کنیم ، تاپیک های زیادی هستن که مشکلاتی رو مطرح کردن و همگی ناشی از نمایش فرم به شکل زیر هست.



Form2.Show vbModal

تاپیک هایی با عنوان مثال { چرا بعد از بستن برنامم هنوز عنوانش در پروسه ها هست و بصورت کامل بسته نمیشه :عصبانی++: }

بنده خودم شخصا دردسر بزرگی با این روش داشتم و لذا هیچ وقت این اشتباه رو تکرار نمی کنم.



It's important to set the object to Nothing to free up memory because if you open up too many forms
without releasing the memory they use, the computer could run out of memory and cause your program to freeze or crash.

shahabbasic
چهارشنبه 18 آبان 1390, 15:30 عصر
M.T.P کاملا درست میگه
از ویرایشی که کردی ممنونم
درست شد
راهی که آسد جواد گفت جواب میده ولی برنامه در تسک منیجر باقی میمونه

shahabbasic
چهارشنبه 18 آبان 1390, 21:15 عصر
آقا من ظهر زیاد با این کد ور نرفتم ولی الان یک مشکل جدید پیدا شده
در حالت کد زیر صدا اجرا میشه ولی اسکینی مد نظر من به فرم اعمال نمیشه
Private Sub Command3_Click()
Skin1.LoadSkin App.Path & "\skin\skin5.skn"
Skin1.ApplySkin Form2.hWnd
Sound = sndSound(App.Path + "\sounds\p.wav", 1)
Dim CForm As New Form2
CForm.Left = Me.Left
CForm.Top = Me.Top
CForm.Show vbModal
Set CForm = Nothing
end sub

اما در همین وضعیت هم کد آسد جواد جواب میده و اسکین اعمال میشه
اگر راهی به ذهنتون نمیرسه مشکلی نیست من در آخر میتونم کاری کنم تا برنامه بطور کامل از حافظه خارج بشه

M.T.P
چهارشنبه 18 آبان 1390, 23:11 عصر
Private Sub Command3_Click()
Sound = sndSound(App.Path + "\sounds\p.wav", 1)
Dim CForm As New Form2
Skin1.LoadSkin App.Path & "\skin\skin5.skn"
Skin1.ApplySkin CForm.hWnd
CForm.Left = Me.Left
CForm.Top = Me.Top
CForm.Show vbModal
Set CForm = Nothing
End Sub