06-10-2014, 01:07 PM
06-10-2014, 04:21 PM
السلام عليكم ورحمة الله وبركاتة
تستطيع عمل ذلك من خلال عدة طرق
اسهلها هي من خلال إنشاء TListActions وتقوم بوضع الأحداث التي تريد نسبها إلى الازرار
لنفرض انك تريد عمل اربعه ازرار (زر جمع, زر طرح, زر قسمة, زر ضرب)
بعد ذلك نقوم بتعبئة الأحداث الخاصة بالازرار في الـ TListActions
وسنسمي الأحداث كتالي : (actSum, actMaines, actDiv, actMultiplication)
وسيكون شكل الاحداث كتالي :
الآن بقي لنا عمل مصفوفة تحتوي الأزرار كي نستطيع التحكم بالأزرار وسنقوم بتعريفها في الـ Global
أي متغير عام :
الآن بقيي ان نضع امر الإنشاء(create) وأمر التدمير(Destroy) او المسح او اين كان اسمه
بالنسبة لأمر الإنشاء تستطيع وضعه في اي مكان
اما امر التدمير يجب ان تضعه في الحدث FormDestroy الخاص بالنافذ التي تحتوي على الأزرار
كي يتم حذف الازرار قبل خروج البرنامج ويكون عملنا نضيف
لنضع زر في النافذة ونضع داخله امر إنشاء الازرار الآخرى وسيكون الأمر كتالي :
ونضع امر التدمير كتالي :
إذا اشكل عليك امر لم تفهمه تفضل بالسؤال
الكود بالمرفقات
تستطيع عمل ذلك من خلال عدة طرق
اسهلها هي من خلال إنشاء TListActions وتقوم بوضع الأحداث التي تريد نسبها إلى الازرار
لنفرض انك تريد عمل اربعه ازرار (زر جمع, زر طرح, زر قسمة, زر ضرب)
بعد ذلك نقوم بتعبئة الأحداث الخاصة بالازرار في الـ TListActions
وسنسمي الأحداث كتالي : (actSum, actMaines, actDiv, actMultiplication)
وسيكون شكل الاحداث كتالي :
PHP كود :
procedure TForm1.actMainesExecute(Sender: TObject);
begin
ShowMessage(IntToStr(9 - 3));
end;
procedure TForm1.actMultiplicationExecute(Sender: TObject);
begin
ShowMessage(IntToStr(9 * 3));
end;
procedure TForm1.actDivExecute(Sender: TObject);
begin
ShowMessage(IntToStr(9 div 3));
end;
procedure TForm1.actSumExecute(Sender: TObject);
begin
ShowMessage(IntToStr(9 + 3));
end;
الآن بقي لنا عمل مصفوفة تحتوي الأزرار كي نستطيع التحكم بالأزرار وسنقوم بتعريفها في الـ Global
أي متغير عام :
PHP كود :
var
Form1: TForm1;
arrBtn : array[0..3] of TButton; // add this line
الآن بقيي ان نضع امر الإنشاء(create) وأمر التدمير(Destroy) او المسح او اين كان اسمه
بالنسبة لأمر الإنشاء تستطيع وضعه في اي مكان
اما امر التدمير يجب ان تضعه في الحدث FormDestroy الخاص بالنافذ التي تحتوي على الأزرار
كي يتم حذف الازرار قبل خروج البرنامج ويكون عملنا نضيف
لنضع زر في النافذة ونضع داخله امر إنشاء الازرار الآخرى وسيكون الأمر كتالي :
PHP كود :
procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
begin
for i := 1 to 4 do
begin
arrBtn[i] := TButton.create(Self);
arrBtn[i].Left := 60 * i;
arrBtn[i].Top := 15;
arrBtn[i].Width := 50;
arrBtn[i].Height := 20;
arrBtn[i].Visible := True;
arrBtn[i].Parent := Self;
case i of
1 : arrBtn[i].Action := actSum;
// 1 : arrBtn[i].OnClick := actSum.OnExecute; You can do somethink like this
2 : arrBtn[i].Action := actMaines;
3 : arrBtn[i].Action := actDiv;
4 : arrBtn[i].Action := actMultiplication;
else ;
end;
end;
end;
ونضع امر التدمير كتالي :
PHP كود :
procedure TForm1.FormDestroy(Sender: TObject);
var
i : Integer;
begin
for i := 0 to 3 do
arrBtn[i].Free
end;
إذا اشكل عليك امر لم تفهمه تفضل بالسؤال
الكود بالمرفقات
06-10-2014, 04:42 PM
طريقة أخرى أسهل باستعمال ال Generics :
PHP كود :
var
BtnsList: TDictionary<Integer, TButton>;
procedure TForm2.BtnFreeClick(Sender: TObject);
begin
BtnsList.Free;
end;
procedure TForm2.BtnsClick(Sender: TObject);
var
Btn: TButton;
begin
if not(Sender is TCustomButton) then
exit;
Btn := TButton(Sender);
case Btn.Tag of
0:
begin
ShowMessage('0');
// You clicked button 0;
end;
1:
begin
ShowMessage('1');
// You clicked button 1;
end;
end;
end;
procedure TForm2.BtnInitClick(Sender: TObject);
var
i: Integer;
Btn: TButton;
begin
BtnsList := TDictionary<Integer, TButton>.Create;
for i := 0 to 10 do
begin
Btn := TButton.Create(Self);
Btn.Parent := Self;
Btn.Left := (i * Btn.Width);
Btn.Caption := Format('Button %d', [i]);
Btn.Tag := i;
Btn.OnClick := BtnsClick;
BtnsList.Add(i, Btn);
end;
end;
07-10-2014, 04:12 PM
السلام عليكم
في المرفقات كود بسيط يوضح حل جميل للمشكلة
في المرفقات كود بسيط يوضح حل جميل للمشكلة
08-10-2014, 07:02 PM
آسف على التأخر وشكرا للاخوة ALmuhhnadو ,S.FATEH,وSMP3وmemoz
كل أجاب على سؤالي وبطريقة مختلفة شكرا لكم بقي فقط سؤال واحد
وهو أن المكونات المنتجة تختفي عند غلق البرنامج فكيف يكون الحل الأمثل هل بالحفظ في قاعدة البيانات أو استخدام ملف اعدادات
كل أجاب على سؤالي وبطريقة مختلفة شكرا لكم بقي فقط سؤال واحد
وهو أن المكونات المنتجة تختفي عند غلق البرنامج فكيف يكون الحل الأمثل هل بالحفظ في قاعدة البيانات أو استخدام ملف اعدادات
08-10-2014, 10:55 PM
لا فرق باستتخدام ملف أو قاعدة بيانات ..... هذا امر تحدده انت ... حسب حجم العمل و اهميته .... باعتقادي.
08-10-2014, 11:27 PM
إقتباس :لا فرق باستتخدام ملف أو قاعدة بيانات ..... هذا امر تحدده انت ... حسب حجم العمل و اهميته .... باعتقادي.+1
اغلب البرامج تحفظ إعدادات النوافذة ..إلخ على هيئة ini
بالتوفيق