سلام.
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 تحت ویندوز ، برنامه های ویژوال بیسیک توی این زمینه فرق دارند و سیستم اتوماتیک بررسی پیغامش کلا آدم رو میتونه تا ناکجا آباد ببره !!
درسته. من تایمر رو ران کردم. بعد لیست همه پنجره های موجود رو گرفتم. دیدم که یه پنجره هم برای تایمر بین همه پنجره ها وجود داره. بعد سعی کردم با ای پی آی های مختلف نمایشش بدم. نتونستم نمایشش بدم. ولی یه کار جالب تونستم بکنم. مینیمایزش کردم و دیدم یه پنجره پایین صفحه به صورت مینیمایز شده به نمایش در اومد. میتونستم با کلیک ببندمش یا به حالت ماکزیمایز در بیارم. ولی اگه ماکزیمایز میکردم دوباره ناپدید میشد. حتی میتونستم با setwindowpos محل پنجره رو تغییر بدم. بعد دفعه بعد که مینیمایز میکردم میدیدم از اون محل جدید به پایین جمع میشد.
Mamad2003 نوشته است:نکته ای که پیمان جان نباید فراموش بکنی اینه که همون طور که گفتم اینکه شما توی برنامه ویژوال بیسیک حضور WM_TIMER رو احساس نمیکنی وجود سیستم اتوماتیک کنترل و dispatch پیغامی هست که بطور اتوماتیک و پشت پرده داره به شما حال میده !! نه اینکه وجود نداره . اگر با ساختار برنامه های ویندوز آشنا باشید حتما میدونید که برنامه های ویندوز یک حلقه بررسی پیغام دارند در صورتیکه توی وی بی همچین چیزی مفهوم نداره . خود وی بی وظیفه کنترل پیغام ها رو بر عهده میگیره و گاهی هم اینطور سردرگمی ها رو هم ایجاد میکنه !
بهتر. چرا سر در گمی. کار مارو راحت میکنه.
راستی پدارم کجاست؟ پدرام که خوراکش این جور بحثاست.