كيف أختصر هذا الكود؟
#1
السلام عليكم

هل يمكن إختصار هذا الكود؟

كود :
procedure TForm2.SpeedButton1Click(Sender: TObject); begin if panel1.tag =0 then   begin    panel1.Height:=345;    panel1.Tag:=1;    panel2.Height:=40;    panel2.Tag:=0;    panel3.Height:=40;    panel3.Tag:=0;    panel4.Height:=40;    panel4.Tag:=0;   end else   begin    panel1.Height:=40;    panel1.Tag:=0;   end; end; procedure TForm2.SpeedButton2Click(Sender: TObject); begin if panel2.tag =0 then   begin    panel1.Height:=40;    panel1.Tag:=0;    panel2.Height:=345;    panel2.Tag:=1;    panel3.Height:=40;    panel3.Tag:=0;    panel4.Height:=40;    panel4.Tag:=0;   end else   begin    panel2.Height:=40;    panel2.Tag:=0;   end; end; procedure TForm2.SpeedButton3Click(Sender: TObject); begin if panel3.tag =0 then   begin    panel1.Height:=40;    panel1.Tag:=0;    panel2.Height:=40;    panel2.Tag:=0;    panel3.Height:=345;    panel3.Tag:=1;    panel4.Height:=40;    panel4.Tag:=0;   end else   begin    panel3.Height:=40;    panel3.Tag:=0;   end; end; procedure TForm2.SpeedButton4Click(Sender: TObject); begin if panel4.tag =0 then   begin    panel1.Height:=40;    panel1.Tag:=0;    panel2.Height:=40;    panel2.Tag:=0;    panel3.Height:=40;    panel3.Tag:=0;    panel4.Height:=345;    panel4.Tag:=1;   end else   begin    panel4.Height:=40;    panel4.Tag:=0;   end; end;
الرد
#2
السلام عليكم

لما لا تستعمل :
PHP كود :
Case then 
أدبني الدهر فأراني نقص عقلي وإذا ما ازددت علما زادني علما بجهلي
[-] كل من 1 user says قال شكرا ل لؤي على المشاركة المفيدة
  • ELARAPY
الرد
#3
كيف تستخدم Case وكل كود في زر (button)

مع العلم أن هذه الازرار والبانل الخاص بها موجودون داخل بانل Panel مشترك
ممكن يكون الاختصار بشئ مثل If panel is sender أو مثل هذا القبيل لأني حاولت فهم السندر وتطبيقاتها ولم أستطع
الرد
#4
السلام عليكم

يمكنك استخدام الـ Sender
و لرب نازلة يضيق لها الفتى ذرعا و عند الله منها المخرج
ضاقت فلما استحكمت حلقاتها فرجت و كنت اضنها لا تفرج
[-] كل من 1 user says قال شكرا ل S.FATEH على المشاركة المفيدة
  • ELARAPY
الرد
#5
(30-09-2021, 03:03 PM)S.FATEH كتب : السلام عليكم

يمكنك استخدام الـ Sender

مشكلتي مع الـ Sender أني لم أفهمه
من يرسل الأمر هل هو الزر الـ Panel كيف يعمل الساندر هذا ما لم  أفهمه
الرد
#6
السلام عليكم 

كود :
procedure ResizePanels(CheckedPanel : TPanel; ChangedPanels : array of TPanel; ChangedPanelsHeights : array of Integer; ChangedPanelsTagss : array of Integer); begin   if CheckedPanel.Tag = 0 then     begin       for var I := Low(ChangedPanels) to High(ChangedPanels) do         begin           ChangedPanels[I].Height := ChangedPanelsHeights[I];           ChangedPanels[I].Tag    := ChangedPanelsTagss[I];         end;     end   else     begin       CheckedPanel.Height := 40;       CheckedPanel.Tag    := 0;     end; end;


طريقة الاستعمال 

كود :
procedure TForm1.Button1Click(Sender: TObject); begin   ResizePanels(panel1, [panel1, panel2, panel3, panel4], [345, 40, 40, 40], [1, 0, 0, 0]); end;


كما يمكنك استعمال Sender
:: من يملك المعلومة يملك الميدان :: 
[-] كل من 2 users say قال شكرا ل AX302 على المشاركة المفيدة
  • ELARAPY, ALG2009
الرد
#7
جزاك الله خيرا
الطريقة فعالة وتعمل

وأتمنى أن أطلع على كيفية عملها بالـ Sender
الرد
#8
(01-10-2021, 01:09 AM)ALG2009 كتب : جزاك الله خيرا
الطريقة فعالة وتعمل

وأتمنى أن أطلع على كيفية عملها بالـ Sender

طريقة عمل Sender جد بسيطة فهو مجرد برامتر من نوع TObject , يمكنك الاستعانة به لاكنك سوف تقع في مشكل التكرار عن طريق ال IF / AS , ادا كنت تريد استعماله فوق قم بعمل Select للازرار التي تريد تغيير حجم Panels بها كما في الصورة ادناه و في حدث OnClick اضغط مرتين لانتاج Method يقوم بمناداتها كل الازرار التي عملت لها Selection بعدها مجرد استعمال لل IF داخل هاته Method.

كود :
if Sender = Button1 then

كود :
if Sender as TButton then


[صورة: CwrLfLS.png]
:: من يملك المعلومة يملك الميدان :: 
[-] كل من 1 user says قال شكرا ل AX302 على المشاركة المفيدة
  • ALG2009
الرد
#9
الله يرضى عليك وزادك الله خيرا وزادك من علمه
شكرا جزيلا AX302
الرد
#10
[صورة: I6Ob5a1.jpeg]
[-] كل من 2 users say قال شكرا ل ferrero على المشاركة المفيدة
  • invocker, ALG2009
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم