الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال بالكود التالي

مغلق
بدأه أبو محمـد في 26 أبريل 2004 · 7 رد · 763 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لدي فورم يحتوي على 3 Buttons و image

عند النقر على الزر الأول يقوم بتكرار بتكرار عدة صور في ال image بحيث تعمل مثل الصور المتحركة .

المشكلة يتوقف البرنامج عند الضغط على هذا الزر الى ان يتم ايقاف تحريك الصورة .

ما أرغب بعمله هو : عند الضغط على الزر اريده ان يكرر الصورة بحيث يعمل هذا الكود بشكل مستقل عن باقي الاكواد ، وبالتالي استطيع الضغط على باقي الازرة وعمل ما اريد كما يحدث في برامج المحاكاة

أتمنى ان تكون المشكلة واضحة .

وتقبلوا تحياتي

#2

استخدام timer

//CommandClick event
begin
Timer1.Enabled := true;
end;

//TimerTick event
begin
picture1.picture := path + inttostr('1')  + '.jpg'
end;

تم تعديل هذه المشاركة بواسطة Maverick في 26 أبريل 2004 في 10:56

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#3

السلام عليكم

بارك الله فيك اخي Maverick

لقد أدت المطلوب ، ولكن واجهتني مشكلة واحدة فقط وهي :

التايمر يبدل الصور بسرعة عالية وهذا المطلوب ولكن فجأة يبطئ تبديل الصور ثم يعود بعد فترة قصيرة جدا ويبدل الصور بنفس السرعة السابقة ، ما سبب البطئ المفاجئ بتبديل الصور . ولقد استخدمت الكودي التالي

procedure TForm1.Timer1Timer(Sender: TObject);
var i  : integer;
begin
for i := 0 to 14 do
begin
sleep(s.Position);
image1.Refresh;
image1.Picture.LoadFromFile('acgen' + inttostr(i)  + '.jpg' );
end;
end;

(s.Position قيمتها تساوي صفر في البداية وتتغير حسب تغير الشريط الزالق . الموضوع في الفورم .

timer1.Interval قيمتها تساوي واحد

#4

ممكن يكون وقت ال load time للصورة

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#5

لا يا أخي ليس وقت تحميل الصورة هو السبب بل لأن تغيير الصور يتم داخل حلقة for

أي أنه عند كل دقة للمؤقت تقوم الحلقة بتغيير جميع الصور دفعة واحدة دون توقف إلى آخر صورة و يتكرر ذلك كل دقة للتايمر .

عليك إزالة حلقة for نهائياً واستعمل متحول i:integer خارجي (لا تعرفه داخل إجرائية التايمر بل في القسم var الرئيسي) وقم بزيادة هذا المتحول بمقدار واحد عند كل دقة للتايمر حتى يصل إلى 14 قم بتصفيره

أي يصبح الكود كالتالي:

var i:integer=0;

implementation

procedure TForm1.Timer1Timer(Sender: TObject);
begin

if i=14 then
i:=0;

i:=i+1;
sleep(s.Position);
image1.Refresh;
image1.Picture.LoadFromFile('acgen' + inttostr(i)  + '.jpg' );

end;
#6

السلام عليكم

أشكركم على ردودكم

أخي eiadkasem1982

لقد حاولت في السابق الطريقة التي ذكرتها ولكن لم تنجح معي ، لذلك استخدمة الحلقة for

الخطأ الذي يظهر لي هو يسند الى المتغير i هذا الرقم : 4359085 ، على الرغم من أن الكود المكتوب هذ نفس الكود الذي ذكرت ، يقوم بسناد رقم الصفر الى المتغير إذا تجاوز العدد 14 او زيادة المتغير رقم 1 .

اتمنى ان توضح لي سبب هذا الخطأ .

#7

والرقم الذي ذكرت في الرد السابق رقم من الارقام التي يظهرها لي وكلها من 7 خانات .

#8

السلام عليكم

أخي eiadkasem1982

آسف لم انتبه لكودك كاملا ، لقد حليت المشكلة وكانت المشكلة في موضع الاعلان عن المتغير .

شكرا جزيلا لك ولاخي Maverick

وأدعوا الله عز وجل أن يوفقكم ويسهل لكم اموركم .

تم تعديل هذه المشاركة بواسطة أبو محمـد في 27 أبريل 2004 في 00:38

هذا الموضوع مغلق.

مواضيع مشابهة