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

مساعدة في تقليص كود بمعرفة رقم العنصر من خلال حدث يخصه

بدأه مراد23 في 7 سبتمبر 2010 · 6 رد · 945 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركته من لا يشكر الناس لا يشكر الله

أنا مشترك جديد وهذه أول مرة أضع فيها سؤال أنا مهتم بلغة دلفي

كنت على الدوام مكتفي بالبحث والناهل من للمعلومات الثمينة التي يضعها الجميع بارك الله فيكم جميعا .

الموضوع لديا فورم عليه أكثر من أربعين CheckBox وكلها تحتاج لبرمجتها على حدى

لديا فكرة لكن قبل ذلك أريد ان ترو الكود

[/code procedure TFormSaiseEnqute.CheckBoxVisiteDentisteClick(Sender: TObject);

begin

if CheckBoxVisiteDentiste.Checked = true then

begin

CheckBoxVisiteDentiste.Caption:='Oui';

CheckBoxVisiteDentiste.Font.Color:=clRed;

end

else

begin

CheckBoxVisiteDentiste.Caption:='Non';

CheckBoxVisiteDentiste.Font.Color:=clBlue;

end;

end;]

يقوم بتلوين CheckBox وطباعة كلمة Oui عليها وكما قلت هذا كود واحد من 40 عنصر

وجدت كود أخر في المنتدى وهو [code][/codeprocedure efasserTCheckBox;

var i : Word;

begin

for i := 0 to FormSaiseEnqute.ComponentCount-1 do

begin

if FormSaiseEnqute.Componentsis TCheckBox then

begin

// fait CheckBox comme Checked=False

TCheckBox( FormSaiseEnqute.Components).Checked:=False;

end;

end;

end;] يقوم بعمل تخميد لجميع TCheckBox الموجود على الفورم

فكرتي هي الحصول على رقم العنصر من داخل الحدث وهو الضغط عليه و وضعه في متغير ثم استدعاء بروسيدير السالف الذكر وتمرير قيمة المتغير له وتنفيذ الحدث

وشكرا جزيلا لكم وتقبل اللله منكم الصيام والقيام وأثابكم على ما تقدمونه من عون للجميع.

ربي اشرح لي صدري و يسر لي أمري واحلل عقدة من لساني يفقهوا قولي، باسم الله الفتاح اللهم لا سهل إلا ما جعلته سهلاٌُ يا أرحم الراحمين.

#2

السلام عليكم

على حسب فهمي قد يساعدك الكود التالي

procedure chkbox(sndr : TObject);

begin

if (sndr as TCheckBox).Checked then

(sndr as TCheckBox).Caption:='Yes'

else

(sndr as TCheckBox).Caption:='No';

end;

procedure TForm1.CheckBox1Click(Sender: TObject);

begin

chkbox(Sender);

end;

procedure TForm1.CheckBox2Click(Sender: TObject);

begin

chkbox(Sender);

end;

procedure TForm1.CheckBox3Click(Sender: TObject);

begin

chkbox(Sender);

end;

#3

السلام عليكم...

لقد سبقني أخونا hez124 بتقديم الحل، إلا أنه يجب بعض التصحيح:

اكتب الكود في الحدث OnClick لأول CheckBox، مثلاً CheckBoxVisiteDentiste. الكود ينبغي أن يكون بالشكل التالي:

procedure TForm1.CheckBoxVisiteDentisteClick(Sender: TObject);
begin
    if TCheckBox(Sender).Checked then begin
        TCheckBox(Sender).Caption := 'Oui';
        TCheckBox(Sender).Font.Color := clRed;
        end
    else begin
        TCheckBox(Sender).Caption := 'Non';
        TCheckBox(Sender).Font.Color := clBlue;
    end;
end;

* لاحظ أننا بدل الاسم CheckBoxVisiteDentiste استعملنا عبارة:

TCheckBox(Sender)
// أو
(Sender as TCheckBox)

و هذا ما يسمى بـ "التحويل القسري للأنواع" (Typecasting).

بعد ذلك حدد كل CheckBox آخر تريده أن ينفذ نفس الكود، و اذهب إلى نافذة مستعرض الكائنات (Object Inspecter) و انتقل إلى صفحة الأحداث (Events) و افتح القائمة المقابلة للحدث OnClick و اختر منها اسم الإجراء نفسه، أي CheckBoxVisiteDentisteClick.

post-28631-089183800 1283837981_thumb.jp

يمكنك فعل ذلك لكل CheckBox لوحده أو تحديد كل الـ CheckBoxes معاً و ضبطهم في مرة واحدة لينفذوا نفس الإجراء.

نرجو الاستفادة و السلام.

المرفقات
PropWinDelphi.jpg

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#4

ما شاء الله ما أحلئ ان ناخذ العلم عن معلم

الاجابة كانت واضحة وشافية وكافيه وبارك الله في كل من الاخوين

لقد بقي جزء من سؤالي لم أعرف الاجابة عليه وهو

كيف احصل على رقم العنصر الموجود على الفورم من داخل حدثه

شاهد الكود التالي

TCheckBox( FormSaiseEnqute.Components).Checked:=False;

اريد الحصول على رقم i الذي يعين لي في التعليمة عنصر

وهذا من اجل تطبيق فكرني سالفة الذكر

وشكرا لكم وصحة رمضانكم

تم تعديل هذه المشاركة بواسطة مراد23 في 9 سبتمبر 2010 في 00:29

ربي اشرح لي صدري و يسر لي أمري واحلل عقدة من لساني يفقهوا قولي، باسم الله الفتاح اللهم لا سهل إلا ما جعلته سهلاٌُ يا أرحم الراحمين.

#5

السلام عليكم...

لكل مكون (Component) على الـ Form توجد الخاصية ComponentIndex التي تعطي رقمه ضمن مجموعة الـ Components، حيث أول مكون رقمه 0 (صفر) و الثاني رقمه 1 و الثالث رقمه 2... إلخ. (الأخير رقمه ComponentCount - 1).

المثال التالي يملأ ListBox بأرقام و أسماء المكونات الموجودة في النافذة:

var
    I: Integer;
begin
    for I := 0 to Form1.ComponentCount - 1 do begin
        ListBox1.Items.Add(IntToStr(Form1.Components.ComponentIndex) + ' = ' + Form1.Components.Name);
    end;
end;

و يمكنك بنفس الطريقة الحصول على رقم العنصر من داخل الإجراء (إجراء واحد - مثلاً OnClick - يعمل مع الكل):

ShowMessage(IntToStr(TComponent(Sender).ComponentIndex));

لكني لم أفهم لماذا تريد الحصول على رقم المكون أو العنصر. إذا كنت تريد ضبط كافة الـ CheckBoxes على قيم معينة موحدة فإن الكود الذي قدمته أنت في سؤالك الأول يفي بالغرض:

var
    I: Integer;
begin
    for I := 0 to Form1.ComponentCount - 1 do begin
        if Form1.Components is TCheckBox then begin
            with Form1.Components as TCheckBox do begin
                Checked := True;
                Font.Color := clRed;
                Caption := 'Oui';
            end;
        end;
    end;
end;

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#6

السلام عليكم ورحمة الله وبركاته من لا يشكر الناس لا يشكر الله

أخي العزيز ناجي شكرا لك أجابتك كانت ممتازة لكن الشئ الذي أردت معرفته هو

في ردك الاخير هذا

ShowMessage(IntToStr(TComponent(Sender).ComponentIndex));

وهذا من أجل تطبيق فكرتي وقد صلحت وهي تعمل جرب هذا الكود يعمل مثل أجابتك الممتازة

procedure TForm2.CheckBox1Click(Sender: TObject);
var i :word;
begin

i:=(TComponent(Sender).ComponentIndex);


if TCheckBox( Form2.Components).Checked =true then
  begin
    TCheckBox( Form2.Components).Caption :='Oui';
    TCheckBox( Form2.Components).Font.Color :=clRed;
  end
      else
      TCheckBox( Form2.Components).Caption :='Non';
      TCheckBox( Form2.Components).Font.Color:=clBlue;
end;

أكرر شكري الكبير لك ولجميع المهتمين بنشر العلم بين المسلمين في هذ الموقع .

أخي أنا جديد على الاشتراك في المنتديات

أنا لا أعرف كيف أرفق صورة أو مثال خاص بي مع موضوع مشاركتي حبذا لو تعلمني علمك الله ورعاك

كذلك كيف أصل الى مشاركتي والمشاركات التي تخص لغة البرمجة دلفي

فسرعان ماتضيع مشاركتي بين المشاركات فلا أعرف هل تم الرد على سِؤالي أم يتم الرد لا

لم أفهم طريقة النقاط ومدة بقاء السؤال ..... أشياء كثيرة أجهلها

ربي اشرح لي صدري و يسر لي أمري واحلل عقدة من لساني يفقهوا قولي، باسم الله الفتاح اللهم لا سهل إلا ما جعلته سهلاٌُ يا أرحم الراحمين.

#7

السلام عليكم...

أرجو لك التوفيق.

بالنسبة إلى رفع الملفات و الصور و إدراجها في مشاركاتك انظر هذا الموضوع.

و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

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

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

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

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

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