المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : استخدام timer لأنجاز مهمه


NOna
02-05-2009, 09:47 AM
كيف ممكن أن استخدم مقياس وقت لإنجاز مهمه معينه

أستخدمت TTimer component لكني للأسف لا أعرف ما هو الكود الذي يجب أن استخدمه لقياس الوقت الذي أنجز فيه مهمه معينه وأين يجب أن أضع هذا الكود
يعني مثلا عندي button معين إذا ضغطت عليه يحسب معادله معينه ويظهر النتيجه
المطلوب هو قياس الوقت من ضغط هذا الزر إلى أن تخرج النتيجه مع ظهور النتيجه على واجهة البرنامج في Panel

جزاكم الله خيرا

Dr.MOT
02-05-2009, 11:33 AM
اخي على حسب فهمي للسؤال ,,

فأنت تريد عند الضغط على الزر أن يبدأ يحسب ,, وبعد الانتهاء والضغط على زر آخر مثلا يظهر الوقت !؟

أولا لا تنسى : غير الخاصية Enabled إلى False للتآيمر

وتأكد أن الخاصية Inetval للتآيمر = 1000 >> هذا يعني ثانية واحدة


التآيمر :

procedure TForm1.Timer1Timer(Sender: TObject);
begin
i := i + 1 ; //حساب عدد الثواني حيث عند كل ثانية يزيد واحد
end;

الزر الأول ( زر البدء ) :

procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled := True ; //بدء عمل التآيمر
end;

الزر الثاني ( زر الإيقاف وإظهار الوقت ) :

procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled := False; //إيقاف عمل التآير
ShowMessage(IntToStr(i) + ' Sec'); //إظهار رسالة بالوقت المستغرق
end;


ولكن لا تنسى أن تتأكد أن يكون تعريف المتغير i عام ,, أي هنا :

var
Form1: TForm1;
i : integer ;

implementation

-------------------------

والسلام عليكم ,, وعذرا على الإطالة

NOna
02-05-2009, 01:18 PM
المطلوب (حساب الوقت لتنفيذ العمليه)
يعني يبدأ التيمر يحسب الوقت عند الضغط على الزر لتنفيذ العمليه وبمجرد انتهاء العمليه وظهور النتيجه على ال Richedit يظهر الوقت الذي تمت فيه العمليه ، **** أن أكون وضحت المطلوب
وجزاك الله الف خير

AL-MOB4RM3G
02-05-2009, 01:26 PM
المطلوب (حساب الوقت لتنفيذ العمليه)
يعني يبدأ التيمر يحسب الوقت عند الضغط على الزر لتنفيذ العمليه وبمجرد انتهاء العمليه وظهور النتيجه على ال richedit يظهر الوقت الذي تمت فيه العمليه ، **** أن أكون وضحت المطلوب
وجزاك الله الف خير

اذا ممكن عمل ذلك بكل سهلوة والله اعلم,,

بدل من ان تستخدم 2 من الأزرار كما فعل الأخ دوكتور موت,, استخدم الأولى في بداية العملية و الثانية في نهايتها,, يعني في نفس الحدث,, وتنحل المشكلة,,

ان شاء الله الفكرة واضحة؟

لكن يبقى السؤآل,, هل العملية ستأخذ ثواني ام دقأئق,, ام بضع من الثواني ؟ هذا يعود اليك ,,

بارك الله لكم

NOna
02-05-2009, 01:59 PM
نعم جزاك الجنه فعلا سوالك هو المشكله التي اواجهها الان
لأن العمليه عندي تأخذ جزء من الثانيه ولذلك النيجه عندي تظهر صفر
كما أعرف في ال C++ نوع المتغير هو الذي يتحكم في العمليه وهناك نستخدم float type فهل في الدلفي نفس الشيء

AL-MOB4RM3G
02-05-2009, 05:09 PM
نعم جزاك الجنه فعلا سوالك هو المشكله التي اواجهها الان

نعم لا عليكم اخي الكريم,, وفيكم بارك الله

كما أعرف في ال C++ نوع المتغير هو الذي يتحكم في العمليه وهناك نستخدم float type فهل في الدلفي نفس الشيء

والله انا لا اعرف شئ عن السي ++ ولهذا لا استطيع ان افيدك في هذه النقطة,, اعذرني,,

لأن العمليه عندي تأخذ جزء من الثانيه ولذلك النيجه عندي تظهر صفر

نعم اخي الكريم,,

اعلم كما ذكر لك الأخ دوكتور موت من قبل,, في التايمر 1000 يساوى ثانية واحدة,,

وعمليتك انت هي اقل من الثانية,,

هل ينفع عشر الثانية ؟

اذا ما عليك الّى ان تظبط الخاصّيّة intervall الى 100,,, حينها يتم استنتاج عشر الثانية,,,

يعني بكلامة آخر,, الثنية الواحدة تعطي 10 احتمالات,,

وهكذا مع البقيّة ,, ان ضبطه الى 10 ,, يصبح الناتج هو 100 احتمال,,, لأن 100 * 10 = 1000,,,


ان شاء الله الأمر واضح الآن ؟

وان كان هناك اي استفسار فأنا جاهز ان شاء الله,, والإخوة لن يقصّرو,,

بارك الله لكم وبكم

والسلام عليكم ورحمة الله

NOna
02-05-2009, 06:54 PM
أنا أقصد لكي تظهر على شكل جزء من الثانيه يجب أن تكون في هذا الشكل (0.00 ) وهذا لا يمكن ظهوره اذا كان المتغير من نوع Integer فما هو النوع الذي يجب استخدمه

AL-MOB4RM3G
02-05-2009, 07:47 PM
أنا أقصد لكي تظهر على شكل جزء من الثانيه يجب أن تكون في هذا الشكل (0.00 ) وهذا لا يمكن ظهوره اذا كان المتغير من نوع Integer فما هو النوع الذي يجب استخدمه

اها نعم الآن فهمت,,

صراحة يا اخي الغالي,, لا اعلم حلّ جيدا لهذا الغرض,, ان شاء الله الإخوة يفيدونا في هذا المجال,,

الّى انه ممكن استخدام خدعة,, ولكن ليست جيّدة ولا انصح بستخدامها,,

وهي الإستفادة من مثلا 3 label و 3 timer ,, نعم وانت تدري البقيّية,, لكن كما قلت سابقا,,

هذا ليس حلّ جيدا,, وننتظر الإخوة ان يفيدونا في هذا المجال,,

بارك الله فيكم جميعا,,

Maher Tannous
03-05-2009, 09:14 AM
ربما يفيدك المثال الذي في المرفقات
بإمكانك التعديل على المثال
مثلاً وضع interval للتايمر على 100
و في الحدث تايمر لتايمر كتابة مايلي :
label1.Caption:=floattostr(i/10);

Maher Tannous
03-05-2009, 09:25 AM
يمكن أيضاً تحويل الأرقام التي تظهر في label
إلى عداد لساعة نظامية
يعني ثواني و أجزاء الثانية
تفضل في المرفقات

AL-MOB4RM3G
03-05-2009, 10:10 AM
بارك الله فيكم اخي Maher Tannous ,, مثال رآئع ومفيد ما شاء الله عليك,,

بارك الله لك,,