PDA

View Full Version : ظاهر شدن یک تصویر بعد از چند دقیقه فشار ندادن هیچ کلیدی ....



alireza_63
شنبه 10 مرداد 1383, 19:48 عصر
با سلام ...

برای اینکه بعد از فشار ندادن هیچ کلیدی تا چند دقیقه خاص ،‌
تصویری ظاهر شود ،‌ چه دستوراتی لازم است ؟

ممنون میشم از راهنمایی تون .

Delphi-Clinic
شنبه 10 مرداد 1383, 20:00 عصر
سلام

شی Application داری یک Event بنام OnIdle می باشد.
به نظر من بهترین راه استفاده از این رویداد به علاوه یک تایمر است.

alireza_63
یک شنبه 11 مرداد 1383, 06:31 صبح
ممنونم دوست عزیز ....
ولی اگر امکان داره لطف کنید یکم کامل تر توضیح بدید ....

با تشکر ...

orion188
یک شنبه 11 مرداد 1383, 09:47 صبح
سلام
شما میخواین این کار برای یک application انجام بشه یا کلا" در ویندوز؟
منظورم اینه که کلیدهای فشرده شده در برنامه رو دنبال کنه یا هر کلیدی که حتی در موقع minimize بودن برنامه هم فشرده میشه؟

alireza_63
یک شنبه 11 مرداد 1383, 17:33 عصر
با عرض سلام مجدد...

می خوام این کار برای application انجام بشه ...
هدف اینه که در زمانی که برنامه فعاله و در حالت minimize قرار نداره ،
اگر برای چند دقیقه خاص کاربر کلیدی رو فشار نده ، ‌تصویری ظاهر بشه ....

ممنون میشم از راهنمایی تون.

orion188
یک شنبه 11 مرداد 1383, 21:47 عصر
سلام
از یه Timer استفاده کنین. مدت زمان Interval رو هم روی زمانی که میخواین تنظیم کنین. ولی Enabled نباشه.
بعد هر زمانی که کلیدی زده شد و رها شد، یعنی برای مثال در رویداد OnKeyUp اون Timer رو Enable کنین.
البته هر دفعه باید اول Disable کنین که reset بشه.

در رویداد OnTimer مربوط به Timer هم دستورات مربوط به نمایش عکس رو بنویسید.

امیدوارم تونسته باشم کمکی بکنم.

abedi vida
دوشنبه 12 مرداد 1383, 11:21 صبح
سلام یه نگاه اینجا بهنداز من هم این مشگل رو داشتم ولی رفع شد
http://www.barnamenevis.org/forum/viewtopic.php?t=12231

alireza_63
چهارشنبه 14 مرداد 1383, 06:59 صبح
سلام دوباره به دوستان عزیز

و تشکر از Delphi-Clinic و orion188 و abedi vida ....

خدمت abedi vida عرض کنم که مشکل من در استفاده از تایمر نیست ..... مشکل در اینه که اگر هیچ کلیدی فشار داده نشد ، این اتفاق بیفته ....

دوست گرامی orion188 راهنمایی شما موثر بود اما مشکل رو رفع نکرد .... هدف اینه که تا موقعی که کاربر با برنامه کار میکنه و در حال فشردن کلیدهاست ، تایمر فعال نشه ( یا مدام ریست بشه ) تا اینکه بعد از مثلا 3 دقیقه فشار ندادن کلیدی تایمر عمل کنه و بعد از اون هم دوباره این موضوع بتونه تکرار بشه ....

دوست گرامی Delphi-Clinic خوب بود کمی بیشتر راجع به OnIdle توضیح میدادید ....


ممنون از لطف تمامی دوستان.

orion188
چهارشنبه 14 مرداد 1383, 07:32 صبح
سلام
به دو دلیل نمیتونم براتون الان کد رو بفرستم:
الف)تازه واردم و هنوز نمیدونم چجوری توی پیغامم code با اون فرمت خاص زردرنگ بفرستم
ب) من C کارم و Delphi ندارم

اما روش کار اینه:

--- در تابع مربوط به OnShow مربوط به Form اصلی تنظیمات را قرار دهید:
1- Interval را برای Timer1 تنظیم کنید
2- Form1->KeyPreview = true

--- در تابع مربوط به رویداد OnTimer مربوط به Timer1 قرار بدهید:
1- تصویر را نمایش بده

--- در تابع مربوط به OnKeyUp مربوط به Form اصلی قرار دهید:
1- Timer1 را غیر فعال کن
2- تصویر را پاک کن
3- Timer1 را فعال کن

سوالی بود در خدمتم

abedi vida
چهارشنبه 14 مرداد 1383, 09:53 صبح
[quote="orion188"]سلام
به دو دلیل نمیتونم براتون الان کد رو بفرستم:
الف)تازه واردم و هنوز نمیدونم چجوری توی پیغامم code با اون فرمت خاص زردرنگ بفرستم

سلام شما کد رو بنویسید خودش درست میشه

abedi vida
چهارشنبه 14 مرداد 1383, 09:58 صبح
سلام
اینج هم بدون زدن کیلیدی عکس نشون داده میشه فقط باید همونطور که دوستمون در بالا گفته KeyPreview = true
قرار بدی

(فرض می کنیم برنامه ما شامل یک فرم است که 3 ثانیه بعد از اجرا یک عکس در فرم فقط به مدت 2 ثانیه نمایش داده می شود.
دو تا Timer با یک Image رو فرم بذارید.
Interval تایمر اول را 3000 ( 3 ثانیه ) و interval تایمر دوم را 2000 ( 2 ثانیه ) قرار دهید . ( این اعداد صرفا برای این برنامه است )

و کد نویسی:



procedure TForm1.FormShow(Sender: TObject);
begin
timer1.Enabled:=true;
timer2.Enabled:=false;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
timer2.Enabled:=true;
image1.Visible:=true;
timer1.Enabled:=false;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
image1.Visible:=false;
end; )

alireza_63
چهارشنبه 14 مرداد 1383, 19:49 عصر
سلام دوباره

نیازی به استفاده از 2 Timer نبود و همان یکی کافی بود ، مشکل به همان KeyPreview = true برمی گشت که با تنظیم آن ، حل شد! :wink:

به هر حال abedi vida و orion188 عزیز ،‌ از راهنمایی شما خیلی خیلی ممنونم.

abedi vida
یک شنبه 18 مرداد 1383, 12:02 عصر
سلام اگه بخواهیم وقتی mouse تکون نمی خوره این اتفاق بی افته باید چکار کرد؟

Delphi-Clinic
یک شنبه 18 مرداد 1383, 13:09 عصر
سلام

بد نیست یه نگاهی به این کد بکنید:



{ Private declarations }
procedure IdleEventHandler(Sender: TObject; var Done: Boolean);
In then implementation section, define the procedure:
procedure TForm .IdleEventHandler(Sender: TObject;
var Done: Boolean);
begin
{Do a small bit of work here}
Done := false;
end;
Then assign the Application's OnIdle event to point to your new procedure(You may do this whereever you like, but a good place would be the Forms OnCreate method):
Application.OnIdle := IdleEventHandler;

alireza_63
یک شنبه 18 مرداد 1383, 21:43 عصر
Delphi-Clinic عزیز ممنونم از توجهتون!

abedi vida عزیز

برای این کار کافی است در رویداد OnMouseMove فرم ، تایمر رو غیرفعال کنید...

orion188
دوشنبه 19 مرداد 1383, 00:33 صبح
در رویداد OnMouseMove فرم ، تایمر رو غیرفعال کنید...

یا به عبارتی Reset کنید ( اول Enabled = false و دوباره Enabled = true)
چون اگه فقط Disable کنین هیچوقت نمایش نمیده.

موفق باشید

alireza_63
دوشنبه 19 مرداد 1383, 07:45 صبح
orion188 عزیز

دقیقا همین طوره که فرمودید ...
حتما لازمه که Reset بشه ....

پیروز باشید.