امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
استفاده از تایمر بدون فرم
نویسنده پیام
Payman62 آفلاین
مدیر بخش ویژوال بیسیک
*****

ارسال‌ها: 2,273
موضوع‌ها: 149
تاریخ عضویت: اسفند ۱۳۸۴

تشکرها : 1308
( 3661 تشکر در 942 ارسال )
ارسال: #23
RE: استفاده از تایمر بدون فرم
سلام.
Darg نوشته است:خوب من یک اشتباهی کردم... که فکر می کردم حتما باید هندل با ارزش داد برای ایجاد
تایمر!
که در برنامه شما با هندل صفر تونسته تایمر رو بسازه نمی دونستم...
ولی مشکل اینجاست که سیستم در زمانی که می خواد مثلا فرم رو ببینده با توجه به
هندلش تایمر های وابسته رو هم خواهد بست. اما در کد شما هندلی وجود نداره بنابراین
حتی وقتی که برنامهتون رو در ویژوال بیسیک Stop می کنید باز هم تایمر به کار خودش
ادامه می ده!
جواب این سوال رو که ممد عزیز داد. با کامپایل کردن مشکل حل میشه.

Darg نوشته است:اما منظور کلی من و بخصوص محمد2003 این بود که در ماژول تنها ما پایان عمر برناممون
همون پایان کد های ساب ماین هست! که در فرم این اتفاق نمی افته, پس ایجاد تایمر
در ماژول بی معنی میشه که البته شما با اون حلقه تونستید این مشکل رو هم حل کنید!
اگه روشی وجود داشت که ماژول با پایان ساب مین بسته نشه مشکل حل بود و تایمر کاملا استاندارد میشد.
Darg نوشته است:یک سوال دیگه: شما با ارسال Sleep 500 چطور می خوایند تطابق ایجاد کنید با عدد
تناوب تایمر که ازش کوچیکتره؟
این تایمر که برای مثال بود و مسلما دقت کافی رو نداشت. هر چند تایمر خود ویبی هم چندان با دقت نیست. شما با دادن sleep 1 هم میتونی جلوی کارکرد بالای cpu رو بگیری و دقت تایمرت رو هم بالا ببری.
این یکی تایمر رو هم که گذاشتم ببینید. این روش استفاده از تایمر یه مزیت به قرار دادن کدها داخل حلقه داره و اون اینه که توابع مورد نظر موازی با هم اجرا میشن. (البته ظاهرا موازی). اگه داخل حلقه 5 تا تابع باشه هر کدوم باید بعد از دیگری اجرا شن. ولی با این روش که به هر تابع یه تایمر اختصاص میدیم 5 تابع موازی اجرا میشن. هر کدوم هم اینترول مخصوص خودشون رو دارن. ولی اگه داخل حلقه باشن اینترولشون میشه پارامتر sleep و برای همه توابع یکسان خواهد بود. ضمنا داخل حلقه هم میتونیم چک کنیم و اگه لازم باشه تایمر یکی از توابع رو با killtimer متوقف کنیم.


Mamad2003 نوشته است:برنامه رو دیدم و به نتیجه جالبی رسیدم که خیلی از فرضیات من رو نقض میکنه ! شاید بهتر بود اینطور بیان میکردم که وجود پنجره یا Window الزامیه نه فرم چون متوجه شدم فرم توی ویژوال بیسیک الزاما پنجره نیست !
فکر کنم منظورت این بود که پنجره در ویژوال بیسیک الزاما فرم نیست.

Mamad2003 نوشته است:به این خط از برنامه خودت دقت کن :

کد:
lngTimerID = SetTimer(0, 0, 200, AddressOf TimerProc)

در مورد کد شما ، مایکروسافت میگه اگر شما توی تابع settime مقدار صفر رو به عنوان پارامتر اول یا هدل پنجره ارسال کنی ( توی خط بالا پارامتر اول صفر هست ) و از تابع callback استفاده کنی ( همون تابع با نام TimerProc) خودت مسئولی که پیغام های WM_TIMER رو dispatch کنی . یعنی چی ؟ یعنی اینکه چون شما هندل هیچ پنجره ای رو مشخص نکردی این وظیفه خودته که پیغام های WM_TIMER رو به پنجره منورد نظرت بفرستی .
اما متاسفانه ویژوال بیسیک خودش این عملیات رو برای ساده تر کردن کار شما پشت پرده انجام میده . حدسی که من میزنم و علت اینکه تایمری که شما نوشتی درست عمل میکنه یک چیز بیشتر نیست . اونهم اینکه توی وی بی همه برنامه ها پنجره دارند ( چه کنسول و چه فرم دار و ... ) فقط ویژوال بیسیک کلاس اون پنجره اصلی رو اتوماتیک رجیستر میکنه ولی نمایشش نمیده !!! چیزی که متوجه شدم این بود که بر خلاف برنامه های C تحت ویندوز ، برنامه های ویژوال بیسیک توی این زمینه فرق دارند و سیستم اتوماتیک بررسی پیغامش کلا آدم رو میتونه تا ناکجا آباد ببره !! Sad
درسته. من تایمر رو ران کردم. بعد لیست همه پنجره های موجود رو گرفتم. دیدم که یه پنجره هم برای تایمر بین همه پنجره ها وجود داره. بعد سعی کردم با ای پی آی های مختلف نمایشش بدم. نتونستم نمایشش بدم. ولی یه کار جالب تونستم بکنم. مینیمایزش کردم و دیدم یه پنجره پایین صفحه به صورت مینیمایز شده به نمایش در اومد. میتونستم با کلیک ببندمش یا به حالت ماکزیمایز در بیارم. ولی اگه ماکزیمایز میکردم دوباره ناپدید میشد. حتی میتونستم با setwindowpos محل پنجره رو تغییر بدم. بعد دفعه بعد که مینیمایز میکردم میدیدم از اون محل جدید به پایین جمع میشد.

Mamad2003 نوشته است:نکته ای که پیمان جان نباید فراموش بکنی اینه که همون طور که گفتم اینکه شما توی برنامه ویژوال بیسیک حضور WM_TIMER رو احساس نمیکنی وجود سیستم اتوماتیک کنترل و dispatch پیغامی هست که بطور اتوماتیک و پشت پرده داره به شما حال میده !! Biggrin نه اینکه وجود نداره . اگر با ساختار برنامه های ویندوز آشنا باشید حتما میدونید که برنامه های ویندوز یک حلقه بررسی پیغام دارند در صورتیکه توی وی بی همچین چیزی مفهوم نداره . خود وی بی وظیفه کنترل پیغام ها رو بر عهده میگیره و گاهی هم اینطور سردرگمی ها رو هم ایجاد میکنه !
بهتر. چرا سر در گمی. کار مارو راحت میکنه.

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


فایل‌(های) پیوست شده
.zip   Timer2.zip (اندازه: 4 KB / تعداد دفعات دریافت: 45)
(آخرین ویرایش در این ارسال: ۲۱-مهر-۱۳۸۶, ۱۵:۲۹:۲۰، توسط Payman62.)
۲۱-مهر-۱۳۸۶, ۱۵:۱۸:۲۹
ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #24
RE: استفاده از تایمر بدون فرم
نقل قول: درسته. من تایمر رو ران کردم. بعد لیست همه پنجره های موجود رو گرفتم. دیدم که یه پنجره هم برای تایمر بین همه پنجره ها وجود داره. بعد سعی کردم با ای پی آی های مختلف نمایشش بدم. نتونستم نمایشش بدم. ولی یه کار جالب تونستم بکنم. مینیمایزش کردم و دیدم یه پنجره پایین صفحه به صورت مینیمایز شده به نمایش در اومد. میتونستم با کلیک ببندمش یا به حالت ماکزیمایز در بیارم. ولی اگه ماکزیمایز میکردم دوباره ناپدید میشد. حتی میتونستم با setwindowpos محل پنجره رو تغییر بدم. بعد دفعه بعد که مینیمایز میکردم میدیدم از اون محل جدید به پایین جمع میشد.

پس حدس من درسته !! Clap

نقل قول: فکر کنم منظورت این بود که پنجره در ویژوال بیسیک الزاما فرم نیست.

بله و این حدس من بازهم نسبت به گفته شما صحیحه Cool

نقل قول: بهتر. چرا سر در گمی. کار مارو راحت میکنه.

واسه ما که با C که زبانه اصلی ویندوزه برنامه نوشیم مطمعنا این چیزها گیج کننده است ! منهم که اون اول ها وی بی کار میکردم از این چیزها سر در نمیآوردم تا اینکه رفتم سراغ اصل زیر بنای ویندوز و بعدش همه اینها رو متوجه شدم Wink

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
۲۲-مهر-۱۳۸۶, ۰۰:۴۶:۲۲
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  [سوال] تغییر مقدار ComboBox با تایمر محمدعلي 1 2,327 ۲۷-مرداد-۱۳۹۳, ۱۱:۵۱:۳۵
آخرین ارسال: Vb6Moderator
  [سوال] آدرس‌دهی مطلق بدون استفاده از Sheet Name eppagh 0 2,012 ۲۲-مرداد-۱۳۹۳, ۱۰:۴۹:۲۵
آخرین ارسال: eppagh
  وصل شدن به یاهو و ارسال و دریافت پیام بدون کامپوننت sobhan93 1 3,354 ۱۸-شهریور-۱۳۹۰, ۱۴:۱۷:۳۴
آخرین ارسال: ~XT~
Wink [ایرانویجی] حرکت دادن فرمهای بدون نوار عنوان! [Moosa] 1 3,759 ۰۷-خرداد-۱۳۹۰, ۰۲:۴۶:۱۰
آخرین ارسال: zirak
  [سوال] سوال در مورد تایمر (فوری) fuzzer 1 2,377 ۲۳-اسفند-۱۳۸۹, ۲۲:۳۸:۲۲
آخرین ارسال: Payman62
  اجرای فایل nc با vb بدون نیاز به Nc matilda 8 7,675 ۲۴-بهمن-۱۳۸۹, ۰۹:۰۳:۱۵
آخرین ارسال: farshid_vb
  آنتی تروجانی بدون نیاز به آپدیت farshid_vb 2 3,560 ۲۳-بهمن-۱۳۸۹, ۱۲:۳۴:۴۰
آخرین ارسال: farshid_vb
Shy سورس ارسال محتویات یک فایل متنی بدون هیچ سوال به یک ایمیل reza-ezdeham 5 5,733 ۲۱-بهمن-۱۳۸۹, ۱۳:۴۱:۴۴
آخرین ارسال: lord_viper
  استفاده از کامپوننت بدون نصب relax_cp 9 9,734 ۲۳-تير-۱۳۸۹, ۲۱:۳۲:۲۸
آخرین ارسال: CRazYFULL
  در مورد تایمر behroz1992 6 4,448 ۱۵-بهمن-۱۳۸۸, ۰۰:۴۲:۲۷
آخرین ارسال: 1120

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS