۱۶-مهر-۱۳۸۶, ۰۳:۴۶:۲۵
۱۶-مهر-۱۳۸۶, ۱۳:۳۸:۱۰
عزیز اینجا فروم برنامه نویسیه !
چرا کسی نخواهد کمکت کنه ؟
شما بگو !
http://forum.iranled.com/forumdisplay.php?fid=175
اینجا !
هرکی بتونه کمکت میکنه !
چرا کسی نخواهد کمکت کنه ؟
شما بگو !
http://forum.iranled.com/forumdisplay.php?fid=175
اینجا !
هرکی بتونه کمکت میکنه !
۱۶-مهر-۱۳۸۶, ۱۹:۵۹:۰۵
بچه ها تاپیک رو ساختم بیاین اونجا همگی
http://forum.iranled.com/showthread.php?tid=6128
http://forum.iranled.com/showthread.php?tid=6128
۱۹-مرداد-۱۳۸۷, ۱۸:۱۲:۲۹
یه فرم درست کردم برای لودینگ .
این کداشه :
بعد حالا چند تا فرم دیگه دارم که لود شدنشون خیلی طول میکشه . به دلیل اینکه به محض بالا اومندن چندین پروسیژر دیگه رو فراخونی می کنن .
توی اون فرمها این کارو انجام دادم :
در واقع این خیلی وقت گیره : tvp_init به همین خاطر قبلش لودینگ می خام بیاد و بعدش بره .
حالا نمی دونم چرا توی این حالت پروگرس بار هم ثابت می مونه و حرکت نمی کنه ! تا زمانی که این 3-4 ثانیه برای اون ساب وقت گیر بگذره و فرم اصلی نمایش داده بشه !
علت چیه ؟
این کداشه :
کد:
Private Sub Form_Load()
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Static i As Integer
i = i + 1
ProgressBar1.Value = i
If i = 100 Then i = 0
End Sub
بعد حالا چند تا فرم دیگه دارم که لود شدنشون خیلی طول میکشه . به دلیل اینکه به محض بالا اومندن چندین پروسیژر دیگه رو فراخونی می کنن .
توی اون فرمها این کارو انجام دادم :
کد:
Private Sub Form_Load()
DoEvents
Me.Visible = False
Load frm_loading
Call SetRtoL(tvp)
tvp_init
Me.Visible = True
Unload frm_loading
End Sub
در واقع این خیلی وقت گیره : tvp_init به همین خاطر قبلش لودینگ می خام بیاد و بعدش بره .
حالا نمی دونم چرا توی این حالت پروگرس بار هم ثابت می مونه و حرکت نمی کنه ! تا زمانی که این 3-4 ثانیه برای اون ساب وقت گیر بگذره و فرم اصلی نمایش داده بشه !
علت چیه ؟
۱۹-مرداد-۱۳۸۷, ۱۹:۰۶:۳۰
تو تابع tvp_init بايد از DoEventsاستفاده كني.
البته لود شدن رو بد نوشتي! اون تايمر خيلي مسخره ! اگه يه حلقه وقت گير داري كه توي همون بايد progressbar رو مقدار بدي. يا اگه كد هاي زيادي قبلش بايد اجرا بشه بين اونا بايد peogressbar تغيير كنه.
البته لود شدن رو بد نوشتي! اون تايمر خيلي مسخره ! اگه يه حلقه وقت گير داري كه توي همون بايد progressbar رو مقدار بدي. يا اگه كد هاي زيادي قبلش بايد اجرا بشه بين اونا بايد peogressbar تغيير كنه.
۱۹-مرداد-۱۳۸۷, ۱۹:۱۹:۵۸
ممنون
دوایونت رو توی همه ی ساب های وقت گیر گذاشته بودم . مشکل چی می تونه باشه ؟
اینکه نمی تونم از تو حلقه مقدار بهش بدم به این خاطره که می خام این فرم لودینگ رو از توی همه ی فرمها صدا کنم و خودش مقداردهی بشه و بره جلو . ظاهرش برام زیاد مهم نیست . فقط می خام زمانی که سیستم درگیر لود شدنه این پروگرس بار حرکت کنه و هر زمان که فرم اصلی لود شد این بره کنار !
همین فقط .
حالا چرا تو حالت بالا تایمر توی فرم لودینگ از کار میفته ؟
دوایونت رو توی همه ی ساب های وقت گیر گذاشته بودم . مشکل چی می تونه باشه ؟
اینکه نمی تونم از تو حلقه مقدار بهش بدم به این خاطره که می خام این فرم لودینگ رو از توی همه ی فرمها صدا کنم و خودش مقداردهی بشه و بره جلو . ظاهرش برام زیاد مهم نیست . فقط می خام زمانی که سیستم درگیر لود شدنه این پروگرس بار حرکت کنه و هر زمان که فرم اصلی لود شد این بره کنار !
همین فقط .
حالا چرا تو حالت بالا تایمر توی فرم لودینگ از کار میفته ؟
۱۹-مرداد-۱۳۸۷, ۲۰:۰۹:۴۱
نقل قول: حالا چرا تو حالت بالا تایمر توی فرم لودینگ از کار میفته ؟احتمالا یه جایی ، یه حلقه ای چیزی هست که یادت رفته DoEvents بذاری .
یه پیشنهاد : اگه نمی خوای از Doevents استفاده کنی ، باتوجه به اینکه وی بی 6 singel thread هست ، لودینگ رو کلا از برنامت جدا کن ! یه فایل exe جدا برای لودینگ بساز . هر وقت می خوای لودش کن ، هر وقت کارت تموم شد ببندش !
۱۹-مرداد-۱۳۸۷, ۲۲:۰۶:۳۳
در پست 8 جناب far222000 یه مثال گذاشتن
۱۹-مرداد-۱۳۸۷, ۲۳:۳۲:۳۷
نقل قول: اینکه نمی تونم از تو حلقه مقدار بهش بدم به این خاطره که می خام این فرم لودینگ رو از توی همه ی فرمها صدا کنم و خودش مقداردهی بشه و بره جلو .خوب همین کار رو بکن. یه کاری کن به ترتیب جلو بره.
نقل قول: یه پیشنهاد : اگه نمی خوای از Doevents استفاده کنی ، باتوجه به اینکه وی بی 6 singel thread هست ، لودینگ رو کلا از برنامت جدا کن ! یه فایل exe جدا برای لودینگ بساز . هر وقت می خوای لودش کن ، هر وقت کارت تموم شد ببندش !اینم یه روشه. خوبیش اینه که چون از DoEvents استفاده نمی کنی سرعت کم نمیشه. DoEvents سرعت حلقه رو خیلی کم می کنه. ولی یه جوریه !

من تو این چند سالی که برنامه نویسی کردم. فقط یه برنامه نوشتم که واقعا احتیاج به لودینگ داشت. اونم بعد از گذشت هر مرحله و پایان هر حلقه progressbar رو جلو بردم. اون برنامه 10 مگابایت شده بود. برای بقیه برنامه ها یه صفحه wait ... می زارم.
نقل قول: در پست 8 جناب far222000 یه مثال گذاشتنباز برگشتیم به عقب ! اون اصلا لود نیست که ! اینبار نمی تونم ساکت باشم !

۲۰-مرداد-۱۳۸۷, ۰۰:۲۶:۱۳
نقل قول: DoEvents سرعت حلقه رو خیلی کم می کنه.پیشنهاد : اگه یه حلقه داری مثل حلقه زیر. لازم نیست دقیقا توی هر مرحله doevents بزاری ، می تونی هر 100 تا، یک بار doevents بزنی :
نقل قول: For i = 1 To 5000
For j = 2 To i - 1
prime = 1
If i Mod j = 0 Then prime = 0: Exit For
If j Mod 100 = 0 Then DoEvents
Next j
If prime = 1 Then prime_n = prime_n & i & ","
Next i
Text1.Text = "Prime Numbers : " & prime_n
۲۰-مرداد-۱۳۸۷, ۱۹:۰۱:۰۸
اگه هنوز مشكل تايمر داري يه كار ديگه هم مي توني بكني.
يه تابع callback بساز. با Settimer يه تايمر تعريف كن و به اون تابع آدرس بده. البته من هنوز با تايمر مخالفم. چون اصلا منطقي نيست. ولي خوب ظاهرش برات مهم نيست ديگه !
يه تابع callback بساز. با Settimer يه تايمر تعريف كن و به اون تابع آدرس بده. البته من هنوز با تايمر مخالفم. چون اصلا منطقي نيست. ولي خوب ظاهرش برات مهم نيست ديگه !
نقل قول: If i = 100 Then i = 0