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

كيف يمكن تحميل صور بشكل عشوائي

مغلق
بدأه Toshiba_Laptop في 2 نوفمبر 2004 · 8 رد · 672 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله

أريد تحميل عدة صور بشكل عشوائي عن طريق loadfromfile ولكن المشكلى ليست بتحميل الصور بشكل عشوائي المشكلة هي أنه هل يجب أن أقوم بكتابة السطر التالي لكل صورة على حدة:

image1.picture.loadfromfile

فأنا أفكر أن أضعهم في حلقة تكرارية من أجل عدم إعادة هذا السطر لكل صورة أي image1 ,image2 , image3 .....etc

فهل من حل لديكم

#2

ربما عليك تجريب شيء مثل هذا الإجراء ..

جربة إذا بساعدك :

procedure TForm1.loadrandomimage(Img: timage;filename:string);
begin
img.Picture.LoadFromFile(filename);
end;

وبالتالي أصبح بإمكانك تمرير الImage التي تريدها إلى الإجراء مع مسار الملف .....

#3

شكراً جزيلاً أخي عروة ولكن كنت قد فكرت في هذا الحل ولكن هو أيضاً مشكلة لأني لأريد أن أستدعي التابع أكثر من مرة لأن هناك مجموعة توابع متعلقة بهذه العملية لذلك أنا أفكر في التقليل من حجم الشفرة لذلك الإجرائية لا تعمل من أجل حلقة For مثلاً لأني لا أستطيع تمرير الصور إلا باسمها وأنا عندي على الفورم حولي 52 صورة لذلك لا أريد استدعاء التابع 52 مرة من أجل كل image1,2,3,4,5,6,......,52 أي لا أستطيع وضع متحول بدل الرقم وأكيد أنت تعلم هذا الأمر لذلك نريد فكرة لتمرير الصور دون إعادة نفس السطر لكل صورة

وشكراً لك مرة ثانية أرجو أن نبقى على مناقشة الأمر حتى نجد حلاً مناسباً فنكون قد استفدنا وأفدنا أعضاء المنتدى

#4

السلام عليكم

السؤال غير واضح لي ... لكن هذة محاولة ربما تفيدك :

uses
   Math;
procedure TForm1.Button1Click(Sender: TObject);
var
  x : array of integer;
  xi : integer;
begin
SetLength(x,10);
x[0] := 0; x[1] := 1; x[2] := 2;
x[3] := 3; x[4] := 4; x[5] := 5;
x[6] := 6; x[7] := 7; x[8] := 8;
x[9] := 9;
Randomize;
xi := RandomFrom(x);
form1.Caption:='path\'+inttostr(xi)+'.jpg';  //للتوضيح فقط 
//image1.Picture.LoadFromFile('path'+inttostr(xi)+'jpg');
#5

شكراً جزيلاً لك هذه فكرة تدعم عملي ولكن ليس هذا هو سؤالي وإنما هو كيف أستطيع الوصول إلى جميع عناصر الصورة التي على الفورم وأقوم بعمل تحميل من الملف لها دون أن أكرر نفس التعليمات لكل صورة على حده

أي

      image1.Picture.LoadFromFile('c:\card image\'+inttostr(random(52))+'.bmp');
      image2.Picture.LoadFromFile('c:\card image\'+inttostr(random(52))+'.bmp');
      image3.Picture.LoadFromFile('c:\card image\'+inttostr(random(52))+'.bmp');
      image4.Picture.LoadFromFile('c:\card image\'+inttostr(random(52))+'.bmp');

أي لا نقوم يتكرار هذا لاأمر لأنه شئ غير طبيعي

فما رأيك؟؟؟؟؟؟؟

#6

السلام عليكم

كم هو عدد الـ TImages ؟

لماذا لاتجرب تكوينها داخل الكود .

انتظر ردود من بقية الأخوة

سأنظر في الموضوع لاحقاً فانا الان مشغول بـ windows messages hook لمساعدة الأصدقاء في برنامجه .

تحياتي

CIONO1

هناك حتى الأحلام أصبحت ممنوعة ...

إنه لعار أن ننتمي لهكذا أوطان ... لكن ... ربما العار أن نكون نحن أبناء لتلكم أوطان .. من يدري ؟!!

ليعلم أولئك ... إنّ الشعوب إنْ هي استيقظت تسحق ظُلامََهَا ...

There, even in dreams u r wanted

To be a programmer, how a nice dream it was

Leaving ...

أعيدوا لإسمي لونه المفضل

#7

أظن أني فهمت عليك الآن :

جرب هذا :

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
for i:=0 to Application.ComponentCount-1 do
if Application.Components is Timage then
(Application.Components as timage).Picture.LoadFromFile('c:\card image\'+inttostr(random(52))+'.bmp');
end;
#8

شكراً جزيلاً لك

لقد جربت الشيفرة ولكن لا أعرف لماذا لم تعمل قمت مثلاً بإضافة 4 عناصر صورة إلى الفورم وقمت بالتنفيذ فلم يتغير شئ قمت بمراقية التنفيذ لا حظت أنه لا يدخل على الشرط أبداً وحلقة FOR فقط تأخذ 0و1و2 فقط مع أنه يوجد 5 عناصر على الفورم

ولكن حصل أمر أني بدلت طريقة التفكير بالأمر وبحثت في الHelp فوجدت هنصر في الدلفي هو CONTROLS وهي مصفوفة تحتفظ بلأشياء الموضوعة على الفورم حسب وقت تنزيلها إلى الفورم وهناك العنصر controlcount هو عددهم وهي نفس مبدأ الفكرة التي طرحتها ولكن لا أعلم لماذا لم تعمل فكرتك إريد منك أن تجربها فأنا أعمل على DELPHI 7 هل من المحتمل أنك تعمل على إصدار آخر

وهذه الشفرة

 for i:=0 to controlcount-1 do
  begin
    ListBox1.Items.Add(Controls.Name );
    ListBox2.Items.Add(inttostr(i));
  end;

وعندما راقبت أرقام عناصر Timage في listbox2 عملت حلقة وقمت بنقل العناصر إلى مصفوفة مساعدة من عناصر Timage وبعدها قمت بالتحميل بالطريقة التالية

  for i:=0 to 51 do
          solimage.Picture.LoadFromFile ('c:\my card\'+inttostr(i)+'.bmp');

وشكراً مرة أخرى

تم تعديل هذه المشاركة بواسطة Toshiba_Laptop في 6 نوفمبر 2004 في 15:23

#9

عذرا منك ,, .. لم أنتبة جيدا كان هناك خطأ بالكود

هذة هي الطريقة :

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
for i:=0 to ComponentCount-1 do
if (Components is Timage) then
(Components as timage).Picture.LoadFromFile('c:\card image\'+inttostr(random(52))+'.bmp');
end;

الطريقة التي إتبعتها انت جيدة , ولكنها أطول وأعقد ,, جرب هذة الطريقة فهي أبسط

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…