ورود

View Full Version : یک مشکل هنگام عوض شدن صفحات



ghaum
سه شنبه 24 آذر 1383, 10:44 صبح
سلام

من وقتی روی یک فرم کلیک می کنم تا فرم بعدی ظاهر شود
یک کم وقفه ایجاد می شود
آیا این ویژگی vb هستش یا اینکه مشکل دیگری هستش ؟

خیلی متشکرم

Behrouz_Rad
سه شنبه 24 آذر 1383, 11:21 صبح
واااااااااااااا
به حق چیزهای مدیده و نشنیده!!! :گیج:
حتما 1000 تا عنصر گذاشتی رو فرمت.
ولی بیشتر مواقع اشکال از خود سیستم هست. شاید ویندوز مشکل داره.
یا حجم برنامه های مقیم در حافظه بالاست و حافظه کم میاره.
:wise1:

ghaum
سه شنبه 24 آذر 1383, 11:35 صبح
متشکرم
یک سوال دیگر اینکه من چطور می توانم کاری کنم که وقتی یک فرم دیگر ظاهر می شود با یک حالت گرافیکی ظاهر شود
منظورم این هست که مثلا فرم بعدی از گوشه باز شود یا به صورت دایره باز شود و فرم ظاهر شود

متشکرم

Behrouz_Rad
سه شنبه 24 آذر 1383, 13:08 عصر
سلام.
برای اینکه فرم از گوشه باز بشه باید اول Width و Height برابر با کوچکترین مقدار مورد قبول باشند.
دو تا رو برابر با صفر بذار خود VB حداقل رو در نظر می گیره و نمایش میده.
حالا با یک Timer به راحتی در فواصل زمانی دلخواه به عرض یا ارتفاع فرم یا هر دوتاش یک یا چند واحد اضافه کن
و یک شرط هم بذار که وقتی به یک مقدار مشخص رسید، Enable تایمر False بشه.

و اما در مورد فرم گرد...
با سه تا تابع API به نام های CreateRectRgn و SetWindowRgn و CombineRgn می تونی فرم رو گرد کنی.
این کد را هم که نوشتم، گوشه های فرم رو گرد می کنه. مثل XP.
یه کم با پارامتراش ور بری می تونی فرمتو به شکل دلخواه در بیاری.


Private Sub Transparent()
Dim Add As Long
Dim Sum As Long

Dim X As Single
Dim Y As Single

X = FrmMsg.Width / Screen.TwipsPerPixelX
Y = FrmMsg.Height / Screen.TwipsPerPixelY

Sum = CreateRectRgn(5, 0, X - 5, 1)
CombineRgn Sum, Sum, CreateRectRgn(3, 1, X - 3, 2), 2
CombineRgn Sum, Sum, CreateRectRgn(2, 2, X - 2, 3), 2
CombineRgn Sum, Sum, CreateRectRgn(1, 3, X - 1, 4), 2
CombineRgn Sum, Sum, CreateRectRgn(1, 4, X - 1, 5), 2
CombineRgn Sum, Sum, CreateRectRgn(0, 5, X, Y), 2
SetWindowRgn FrmMsg.hWnd, Sum, True
End Sub

موفق باشی
بهروز راد
:wise1:

setarehman
سه شنبه 24 آذر 1383, 13:49 عصر
حتما 1000 تا عنصر گذاشتی رو فرمت.
ولی بیشتر مواقع اشکال از خود سیستم هست. شاید ویندوز مشکل داره.

سرعت لود شدن فرم ها ربطی به ویندوز نداره بلکه اگه ما برنامه رو جوری نوشته باشیم که سرعت debug اون
بالا باشه و حافظه زیادی اشغال نکنه اون وقت اگه برنامه رو روی هر کامپیوتری هم اجرا کنیم میبینید که سرعت لود شدن خیلی پایین نیست

vbprogramer
سه شنبه 24 آذر 1383, 14:22 عصر
http://www.barnamenevis.org/forum/viewtopic.php?t=17858

یه نگاه هم به این بنداز بد نیست :wink:

Behrouz_Rad
سه شنبه 24 آذر 1383, 14:46 عصر
سلام.

سرعت لود شدن فرم ها ربطی به ویندوز نداره
:kaf:
جک 2004
عزیزم شما برو Document های ویندوز XP رو بخون ببین این جمله واست آشنا نیست:
Running Fasten Programs
اصلا چرا راه دوری بریم. موقع نصب ویندوز XP، به عناوین موقع نصب توجه کن.
قربونت بشم.
بهروز راد
:wise1:

ghaum
چهارشنبه 25 آذر 1383, 08:02 صبح
خیلی متشکرم از راهنماییهایتان

ghaum
یک شنبه 29 آذر 1383, 08:38 صبح
ببخشید در کد بالا از خط


CreateRectRgn

خطا می گیرد

Behrouz_Rad
یک شنبه 29 آذر 1383, 10:17 صبح
خوب عزیزم تابع API اش رو تعریف کن تا ایراد نگیره.


Declare Function CreateRectRgn Lib "gdi32" Alias "CreateRectRgn" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

موفق باشید.
بهروز راد
:wise1:

ghaum
دوشنبه 30 آذر 1383, 08:19 صبح
ببخشید این تابع را کجا تعریف کنم
هر جا تعریف می کنم خطا می گیرد

Behrouz_Rad
دوشنبه 30 آذر 1383, 08:31 صبح
اشک منو در آوردی تو.
یک ماژول تعریف کن اون تابع رو کپی کن توش.
خلاص.


Declare Function CreateRectRgn Lib "gdi32" Alias "CreateRectRgn" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

ghaum
سه شنبه 01 دی 1383, 08:51 صبح
این کار را کردم ولی باز از تابع پیغام خطا می گیرد

Behrouz_Rad
سه شنبه 01 دی 1383, 09:18 صبح
آقا جون این فایل رو بگیر.
خودم امتحانش کردم هیچ مشکلی نداره.
اگه کار نداد ویندوزت مشکل داره.
:D

ghaum
سه شنبه 01 دی 1383, 09:35 صبح
خیلی خیلی متشکرم

حالا چه کار کنیم که این فرم با کشیدن موس حرکت کند
مثل حالت resizeable


خیلی ممنون

Behrouz_Rad
سه شنبه 01 دی 1383, 09:40 صبح
:موفق:

ghaum
سه شنبه 01 دی 1383, 10:33 صبح
حالا چه کار کنیم که این فرم با کشیدن موس حرکت کند
مثل حالت resizeable

Behrouz_Rad
سه شنبه 01 دی 1383, 10:43 صبح
Sub MoveForm(FormX As Form, XX, YY, BT)
Static OldX, OldY, Mf
Dim MoveLeft, MoveTop

MoveLeft = FormX.Left + XX - OldX
MoveTop = FormX.Top + YY - OldY
If BT = vbLeftButton Then
If Mf = 0 Then
FormX.Move MoveLeft, MoveTop
Mf = 1
Else
Mf = 0
End If
End If
OldX = XX
OldY = YY
End Sub

و اینجوری هم فراخونیش کن.


Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
MoveForm Me, X, Y, Button
End Sub


البته راه ساده تر دیگه ای هم با استفاده از توابع API وجود داره ولی اینم راه خوبیه.
موفق باشید.
بهروز راد
:wise1:

Morteza Manafpour
پنج شنبه 03 دی 1383, 20:21 عصر
با سلام
دوست عزیز من در مورد دیر اجرا شدن فرم یک راهنمایی انجام می‌دهم
شما بهتر است یک SplashForm در برنامه خود قرار دهید و در زمان نمایش این فرم تمامی فرمهای حجیم را لود کنید تا هر چه سریعتر فرمتان اجرا شود.

Behrouz_Rad
جمعه 04 دی 1383, 09:10 صبح
سلام.
فکر خوبیه ولی در لود شدن سریع تاثیری نداره.
فرم Splash برای زمانی است که زمانی که فرم اصلی برنامه در حال لود شدن است، حوصله کاربر سر نرود و از پیشرفت لود آگاهی پیدا کند.
مثل برنامه های Photoshop، Priemire، .NET Studio و ....
موفق باشید.
بهروز راد
:wise1:

R_BABAZADEH
جمعه 04 دی 1383, 16:35 عصر
یک سوال دیگر اینکه من چطور می توانم کاری کنم که وقتی یک فرم دیگر ظاهر می شود با یک حالت گرافیکی ظاهر شود
منظورم این هست که مثلا فرم بعدی از گوشه باز شود یا به صورت دایره باز شود و فرم ظاهر شود
می تونی از دستورات api استفاده کنی . تابع animate window
البته توهمین سایت نیز بگردی چند مثال پیداخواهی کرد
:sunglass: