PDA

View Full Version : استفاده از دو تایمر



آوا123
دوشنبه 15 مرداد 1386, 20:02 عصر
سلام ..خسته نباشید
من یه برنامه دفترچه تلفن نوشتم یه زبان دلفی از اونجایی که تازه کار هستم در مورد استفاده از تایمر برام مشکل پیش اومده و اونم این هست که :
در برنامه از دو تایمر استفاده کردم تایمر اولی واسه خوش آمد گویی splashکه فرم اول رو بعد مدت 5 ثانیه میبنده
تایمر دوم واسه حذف کردن یک رکورد مورد استفاده قرار میگیره و صفحه پاک کردن فایل رو نشون میده
کد تایمر اولی
interval = 5000
----------------------------------
timer1.enable := true;
form1.close;
form2.show;
timer1.enable := false;

تایمر دومی
Timer1.Enabled := true;
Gauge1.Progress := Gauge1.Progress + 10;
Timer1.Enabled:= false;
//ShowMessage('Deleteing is complete');
form7.Close;
form6.show
اما عملکردشون با هم قاطی میشه وقتی اجرا میکنم قبل از اینکه صفحه خوش آمد گویی بسته شده صفحه مربوط به حذف باز میشه
و مشکل دیگه اینکه
gauge
کار نمیکنه؟
اگه راهنمایی کنید ممنون میشم

البته من این سوالم رو تو p30world هم مطرح کردم اما جواب نگرفتم:اشتباه:

پست 248 توضیحات بیشتر [/B]

http://forum.p30world.com/showthread.php?t=62126&page=25

SYNDROME
دوشنبه 15 مرداد 1386, 20:32 عصر
من یه برنامه دفترچه تلفن نوشتم یه زبان دلفی از اونجایی که تازه کار هستم در مورد استفاده از تایمر برام مشکل پیش اومده و اونم این هست که :
در برنامه از دو تایمر استفاده کردم تایمر اولی واسه خوش آمد گویی splashکه فرم اول رو بعد مدت 5 ثانیه میبنده
تایمر دوم واسه حذف کردن یک رکورد مورد استفاده قرار میگیره و صفحه پاک کردن فایل رو نشون میده
کد تایمر اولی
interval = 5000
----------------------------------
timer1.enable := true;
form1.close;
form2.show;
timer1.enable := false;
تایمر دومی
Timer1.Enabled := true;
Gauge1.Progress := Gauge1.Progress + 10;
Timer1.Enabled:= false;
//ShowMessage('Deleteing is complete');
form7.Close;
form6.show
اما عملکردشون با هم قاطی میشه وقتی اجرا میکنم قبل از اینکه صفحه خوش آمد گویی بسته شده صفحه مربوط به حذف باز میشه

شما می توانید Enabelمربوط به Timerدوم را Falseکرده و در آنتهای کار Timeاول آن را Trueکنید تا بعد از پایان تایمر اول تایمر دوم فعال شده و کارش را آغاز کند تا تداخل پیش نیاید.

و مشکل دیگه اینکه
gauge
کار نمیکنه؟

یعنی چی کار نمی کند؟
شاید مقدار MaxValue و MinValueرا درست تنطیم نکردی.(بیشتر توضیح بده)
موفق باشی

ghabil
دوشنبه 15 مرداد 1386, 21:29 عصر
شما کلا طرز استفاده از Timer رو اشتباه متوجه شده اید ، هرچند برای این کارهایی که می کنید شاید اصلا تایمر نیازی نباشد....
از طرفی درست هم نگفتی چه کدی توی اینتروالهای اینها گذاشتی که بشه دقیق گفت چی کار باید بکنی ولی در مورد اولی حدس میزنم اینطوری عوضش کنی درست بشه :
Enabled تایمر و False کن بعد این کد رو بنویس:


Form1.Close;
Form2.Show;
Timer1.Enabled := True;

و در OnInterval تایمر هم این کد


Form2.Close;
Timer1.Enabled := False;
Form3.Show;

به این ترتیب فرم1 بسته میشه فرم 2 به مدت 5 ثاتیه نشون داده میشه و بعد فرم 2 هم بسته میشه و به سراغ فرم 3 میریم .
ابته این کد معنی واقعی اسپلش رو میبره زیر سوال چون معمولا در زمان اولین بالا اومدن برنامه و برای پر کردن اون مدتاولیه استفاده میشه ، ولی شما دارین خیلی بعدش میاریدش.

در مورد کد دوم هم راستش متوجه نشدم چوری توی Delete میخوای از Timer استفاده کنی ولی به هر حال کدی که نوشتی حتما Guage رو پر نمیکنه چون یکبار بیشتر اجرا نمیشه.

راستی اگر حدسم درست باشه این بیشتر به دردت میخوره :
برو توی تب Win32 یک TAnimate (عکس ذره بین داره) بزار روی فرم بعد پراپرتی CommonAvir رو بزار aviDeleteFile و هر موقع خواستی دیلیت کنی Activeش رو True کن

آوا123
دوشنبه 15 مرداد 1386, 21:40 عصر
با سلام
این کار رو قبلا هم انجام دادم اما مشکل حل نشده

یه کم بیشتر توضیح میدم
یه phone book دارم مینویسم که 7 تا فرم داره و یه دیتا ماژول عناصر ADo , .... که روی همین دیتا ماژول

و اما فرم اول یا همون splash من یه تایمر داره که بعد 5 ثانیه فرم 1 رو میبنده و فرم ورود رو باز میکنه
تایمر اول و splash
http://eternity.persiangig.com/Ava/untitled3.bmp

فرم ورود
http://eternity.persiangig.com/Ava/untitled4.bmp


بقیه فرم ها واسه add , edit , .... است تا اینکه میرسه به فرم 7 که ازشکل animate
استفاده شده

http://eternity.persiangig.com/Ava/untitled2.gif
تایمر این فرم با فرم splash قاطی میشه یعنی قبل از باز شدن فرم ورود پیغام showmesagam باز میشه و با کلیک کردن اون میره تو صفحه delete

http://eternity.persiangig.com/Ava/untitled1.gif

بهتر از این نمی تونستم توضیحش رو بدم

اون کاری رو هم که شما میگید من انجام دادم یعنی تو فرم splash اومدم تایمر دوم رو false کردم و بعد در جای مورد نظر true کردم
علاوه بر این کارا کد زیر رو هم امتحان کردم



Gauge1.Progress := Gauge1.Progress + 10;
if Gauge1.Progress = 100 then begin
ShowMessage('Deleteing is complete');
Timer1.Enabled:= false;
form7.Close;
form6.show;
end;


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

منظورم از این که guage کار نمیکنه اینه که تو 0 درصد میمونه و پیش نمی ره

آوا123
دوشنبه 15 مرداد 1386, 21:56 عصر
خیلی ببخشید آقای کوشا من اصلا متوجه نشدم اگه من
Form1.Close;
Form2.Show;

Timer1.Enabled := True;

رو واسه splash قرار بدم که کار نمیکنه timer. enabled که به صورت پیش فرض true هست حالامن بیام دوباره true بذارم

مطلب دیگه این که
در OnInterval تایمر هم این کد

کد:
Form2.Close;
Timer1.Enabled := False;
Form3.Show;

مگه میشه تو interval کد نوشت ؟؟؟
ما فقط یه خاصیت on timer داریم interval که جز properties هاست
البته من تازه کارم منتها تا حالاش فک میکردم که عدد ( مدت زمان ) رو که باید تایمر کار کنه میگیره
میشه بیشتر توضیح بدین

منتظرم.....

ghabil
دوشنبه 15 مرداد 1386, 23:38 عصر
خیلی ببخشید آقای کوشا من اصلا متوجه نشدم اگه من
Form1.Close;
Form2.Show;

Timer1.Enabled := True;

رو واسه splash قرار بدم که کار نمیکنه timer. enabled که به صورت پیش فرض true هست حالامن بیام دوباره true بذارم


ببین نکته مهم همینه . وقتی یک Interval تعیین میکنی مثلا 5 ثانیه یعنی تا وقتی که Timer.Enabled هست هر 5 ثانیه یکبار این اتفاق بیفته ، و چون از اول هم Timerت Enabled هست پس از وقتی که فرمت Create میشه Timer شروع به کار میکنه ، در حالیکه ما اینو نمیخواهیم ، پس همیشه اول تایمر رو Disable میکنیم ، بعد هر موقع که لازم بود Enable میکنیم و اگر میخواستیم مثلا هر 5 ثانیه یکبار این کد به کرات تکرار بشه میزاریم rnabled بمونه اما اگر مثل این کار شما یکبار بیشتر نمیخواهیم اجرا باشه همون موقع که اجرا شد Disableش میکنیم.



مگه میشه تو interval کد نوشت ؟؟؟
.
ببخشید من یک لحظه دلفی رو با IHTML قاطی کردم منظورم همون OnTimer بود.

Hamid.Kad
سه شنبه 16 مرداد 1386, 10:30 صبح
برای Splash لازم نیست از Timer استفاده کنید. می تونید کدی مثل زیر رو توی Project Source برنامه بنویسید.
Application.Initialize;
;(Application.CreateForm(TSPlashForm, SplashForm
;(ShowWindow(SplashForm.Handle,SW_SHOWNORMAL
;(Sleep(5000
;SplashForm.Close
.
.
.
;Application.Run
البته واحد SysUtils و Windpws رو توی سورس پروژه Use کنید.

آوا123
چهارشنبه 17 مرداد 1386, 00:34 صبح
سلام

با تشکر از شما ، خیلی الان خوشحالم چون درست شد حالاهم guage کار میکنه هم تایمر ها قاطی نمیشه

MR hamid .Kad متاسفانه نتونستم از کد شما استفاده کنم و splash رو با همون تایمر درست کردم وقتی کد شما رو می زدم نمی تونست فایل Windpws را پیدا کنه :گریه:

آوا123
چهارشنبه 17 مرداد 1386, 00:40 صبح
راستی آقای کوشا guage هم الان کار میکنه البته با دادان همین یه دستور
gauge1.progress := gauge1.progress + 10;

از همتون ممنونم

ghabil
چهارشنبه 17 مرداد 1386, 00:46 صبح
شما از اول هم همین کد رو گذاشته بودید ، درست ست کردن enabled تایمرها موجب شده این کد درست کار بکنه. ولی به هر حال تبریک ، انشالا بقیه ش هم خوب پیش بره.

Hamid.Kad
چهارشنبه 17 مرداد 1386, 12:23 عصر
اشتباه تایپی بود. منظورم واحد Windows بود