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

واجهة اعدادات للداتابيز

بدأه الحلفاوي في 14 فبراير 2012 · 3 رد · 498 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

اريد عمل واجهة ضمن قائمة الاعدادات هذه الواجهة بها 1 - 5 CheckBox مثلا كل واحد منهم صفة لصلاحية معينة في قاعدة البيانات وبها Memo بحيث اذا قمت بالـChecking على احدها تضاف الى الميمو مسبوقا او متبوعا بفاصلة

الى هنا لا ارى ثمة مشكلة ولكن هب انني اخترت كل الصلاحيات والان اريد ان احذف الصلاحية بالرقم CheckBox3 فكيف اجعل البرنامج يقوم بمسح الصلاحية من وسط النص الموجود الان في مكون الميمو حتى يمكنني من اضافته لامر سيكوال لتحديد صلاحيات مستخدم ما , بكلمات اخرى يعني كل مكون CheckBox يعرف النص الخاص به حتى لولم تكتب هذه الصلاحيات وفق الترتيب كان اختار الصلاحية الاخيرة ثم الاولى ثم الثانية....

CheckBox1 Create

CheckBox2 Select

CheckBox3 Update

CheckBox4 Delete

CheckBox1 ........

خذ مثالا مشابهاً على ذلك عند اختيارك عدة ملفات صوتية لفتحها جميعاً على مربع حوار OpenFIleDialog قم باختيار عدد منها واسترجع ملفات بعدما تم اختيارها وانظر الى صندوق اسماء الفايلات

ارجو ان اكون موفقاً في ايصال المعنى بشكل واضح

وفقتم وبوركتم وشكر الله لكم

أخوكم

#2

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

لتنفيذ ذلك تحتاج إلى إجراء موحد يقوم بفحص حالات الـ CheckBoxes جميعاً و إنشاء الـ String المطلوب.

مثال:

ضع على الـ Form 4 مكونات CheckBox و اضبط عناويتنها (Caption) على تسميات الصلاحيات لديك.

ضع Memo على الـ Form، و امسح النص من الخاصية Lines التابعة للـ Memo.

انقر نقراً مزدوجاً على CheckBox1 لإنشاء كود الحدث OnClick الخاص به.

اكتب الكود التالي:

procedure TForm1.CheckBox1Click(Sender: TObject);
var
    MyStr: string;
begin
    MyStr := '';

    if CheckBox1.Checked then MyStr := CheckBox1.Caption;

    if CheckBox2.Checked then begin
        if MyStr <> '' then MyStr := MyStr + ';';
        MyStr := MyStr + CheckBox2.Caption;
    end;

    if CheckBox3.Checked then begin
        if MyStr <> '' then MyStr := MyStr + ';';
        MyStr := MyStr + CheckBox3.Caption;
    end;

    if CheckBox4.Checked then begin
        if MyStr <> '' then MyStr := MyStr + ';';
        MyStr := MyStr + CheckBox4.Caption;
    end;

    Memo1.Text := MyStr;
end;

حدد الـ CheckBoxes الثلاث الباقية و اضبط معالج الحدث OnClick لها جميعاً على نفس المعالج CheckBox1Click الخاص بالـ CheckBox1. بهذا الشكل ستعمل الـ CheckBoxes الأربعة على تنفيذ نفس الكود عند النقر على أي منها.

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

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

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

#3
najy_zl كتب:

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

لتنفيذ ذلك تحتاج إلى إجراء موحد يقوم بفحص حالات الـ CheckBoxes جميعاً و إنشاء الـ String المطلوب.

مثال:

ضع على الـ Form 4 مكونات CheckBox و اضبط عناويتنها (Caption) على تسميات الصلاحيات لديك.

ضع Memo على الـ Form، و امسح النص من الخاصية Lines التابعة للـ Memo.

انقر نقراً مزدوجاً على CheckBox1 لإنشاء كود الحدث OnClick الخاص به.

اكتب الكود التالي:

procedure TForm1.CheckBox1Click(Sender: TObject);
var
    MyStr: string;
begin
    MyStr := '';

    if CheckBox1.Checked then MyStr := CheckBox1.Caption;

    if CheckBox2.Checked then begin
        if MyStr <> '' then MyStr := MyStr + ';';
        MyStr := MyStr + CheckBox2.Caption;
    end;

    if CheckBox3.Checked then begin
        if MyStr <> '' then MyStr := MyStr + ';';
        MyStr := MyStr + CheckBox3.Caption;
    end;

    if CheckBox4.Checked then begin
        if MyStr <> '' then MyStr := MyStr + ';';
        MyStr := MyStr + CheckBox4.Caption;
    end;

    Memo1.Text := MyStr;
end;

حدد الـ CheckBoxes الثلاث الباقية و اضبط معالج الحدث OnClick لها جميعاً على نفس المعالج CheckBox1Click الخاص بالـ CheckBox1. بهذا الشكل ستعمل الـ CheckBoxes الأربعة على تنفيذ نفس الكود عند النقر على أي منها.

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

هذا ما كنت ارجوه فعلا و اقول حصلت الاستفادة ولكم من الله خير الثناء والشكر , ولكن بالمناسبة ولان اجابتك احضرتني السؤال هل يمكن من ارفاق اكثر من معالج احداث لمكون واحد بمثالنا هذا ان يكون للمكون CheckBox2 معالج حدث CheckBox1 مع احداث مكونات اخرى مثلا ComboBoxCloseup على التوالي؟ وبتتابع معين في بعض الاحيان اتمنى ان تكون مثل هذه المعالجة موجودة بدلاً من كتابة اجراءات جديدة

سلمكم الله

#4

طريقة أخرى:

procedure TForm1.CheckBox1Click(Sender: TObject);
var
  I: Integer;
begin
  Memo1.Lines.Clear;
  for I := 0 to ControlCount-1 do
    if (Controls is TCheckBox) then
      with (Controls as TCheckBox) do
      if Checked then Memo1.Lines.Add(Caption);
  Memo1.Lines.Delimiter := ';';
  Memo1.Lines.Text := Memo1.Lines.DelimitedText;
end;

أجل يمكن ذلك إذا كانت المعلمات Parameters متكافئة لكل معالجات الأحداث، مثال:

procedure TForm1.Button1Click(Sender: TObject);
procedure TForm1.Edit1Change(Sender: TObject);

لاحظ كلاهما يأخذ TObject

بينهما هنا الأمر مختلف إذا كان الحدث يأخذ معلمات مختلفة:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

لكن يمكن استدعاء الحدث الأصلي باعتباره Function/Procedure في هذه الحال:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Edit1Change(Edit1);
end;

بالتوفيق.

تم تعديل هذه المشاركة بواسطة kachwahed في 18 فبراير 2012 في 01:45

1

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

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

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

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

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