PDA

View Full Version : قفل سیستم برای چند ثانیه



aleas2
سه شنبه 07 آذر 1391, 18:54 عصر
سلام خسته نباشید دوستان بنده برای مرتب سازی یک listbox بطور مثال که بیش از 1000 رکورد داره چند ثانیه شایدم یک دقیقه طول بکشه ولی وقتی برنامه داره کار میکنه اگر با سیستم کاری کنی برنامه هنگ میکنه
برای همین میخوام برنامه یه پیغام بده لطفا صبر کنید و سیستم ماوس و صفحه کلید قفل بشه
چطور میتونم سیستم رو برای چند ثانیه قفل کنم؟

shellx
سه شنبه 07 آذر 1391, 19:01 عصر
قفل کردن ماوس و کیبرد رو نمیدونم.
اما شما نیتونید یه فرم دیگه رو نشون بدید و فرمتون را Hide کنید . درآخر کدها هم اضافه کنید که اون فرم Unload بشه و فرم اصلی Show بشه

من خودم از این راه استفاده می کنم

:
چشمک:\\\موفق باشید///:چشمک:

farazjalili
سه شنبه 07 آذر 1391, 19:57 عصر
سلام عزیز خوب چرا از thread استفاده نمی کنی ؟ که برنامه هم زمان هم لیست رو مرتب کنه و هم کاربر کار خودشو انجام بده و اگه نخوای از اون استفاده کنی فکر می کنم تنها راهش همونی باشه که دوستمون shellx گفتن باشه

SHD.NET
سه شنبه 07 آذر 1391, 20:04 عصر
شما این دستور رو توی حلقه ها و جاهایی که برنامه برای چند ثانیه هنگ میکنه قبل کد مورد نظر به کار ببرین تا برنامتون هنگ نکنه
DoEvents
:چشمک:\\\موفق باشید///:چشمک:

محسن واژدی
سه شنبه 07 آذر 1391, 20:06 عصر
سلام خسته نباشید دوستان بنده برای مرتب سازی یک listbox بطور مثال که بیش از 1000 رکورد داره چند ثانیه شایدم یک دقیقه طول بکشه ولی وقتی برنامه داره کار میکنه اگر با سیستم کاری کنی برنامه هنگ میکنه
برای همین میخوام برنامه یه پیغام بده لطفا صبر کنید و سیستم ماوس و صفحه کلید قفل بشه
چطور میتونم سیستم رو برای چند ثانیه قفل کنم؟

سلام علیکم
میتوانید از apiی BlockInput استفاده کنید

کد نمونه زیر را بررسی کنید:
Private Declare Function BlockInput Lib "user32" (ByVal fBlock As Long) As Long
Private Sub Timer1_Timer()
Static i
i = i + 1
If i = 1 Then
BlockInput 1
ElseIf i >= 500 Then
BlockInput 0
End If

If i < 500 Then
Caption = "Please waiting for 500sec. (" & i & ")"
Else
Caption = "Released Keyboard and Mouse"
MsgBox Caption, vbInformation
Timer1 = False
End If
End Sub

Private Sub Command1_Click()
Timer1.Interval = 1
Timer1 = True
End Sub
برای استفاده یک Timer1 و Command1 بر روی فرم قرار بدین

البته استفاده از این روش اصلا پیشنهاد نمیشه چرا که اگر برنامه به هر دلیلی با مشکل مواجه شود کاربر مجبور به راه اندازی دوباره رایانه هست، روش پسندیده راهی هست که جناب shellx فرمودن یا روش های مشابه اون


سلام عزیز خوب چرا از thread استفاده نمی کنی ؟ که برنامه هم زمان هم لیست رو مرتب کنه و هم کاربر کار خودشو انجام بده و اگه نخوای از اون استفاده کنی فکر می کنم تنها راهش همونی باشه که دوستمون shellx گفتن باشه
متاسفانه تقریبا multi-threading در vb6 پشتیبانی نمیشه

موفق باشید