EasyDelphi Q&A
0 تصويتات
32 مشاهدات

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

عيد سعيد وكل عام وأنتم بخير

لديا عدة إجراءات لتشغيل فورمات معينة

مثلا

public
    F:TForm;
    { Public declarations }

procedure TFrmHome.spdbtn1Click(Sender: TObject);
begin
  if Assigned(F) then
   F.free ;
   F:=TFrmStudent.Create(Self);
   F.ShowModal;
end;

procedure TFrmHome.spdbtn2Click(Sender: TObject);
begin
  if Assigned(F) then
   F.free ; 
   F:=TfrmGraduate.Create(Self);
   F.ShowModal;
end; 

هل من طريقة لإختصار الكود عن طريق إجراء

جربت الإجراء التالي ولم أفلح في ذلك

procedure CreateForm(FF:TForm);
begin
 if Assigned(F) then
   F.free ;
   F:=FF.Create(Self);
   F.ShowModal;
end;
procedure TFrmHome.spdbtn1Click(Sender: TObject);
begin
  CreateForm(TFrmStudent);
end;

وبارك الله فيكم

سُئل في تصنيف Delphi بواسطة (990 نقاط) | 32 مشاهدات

1 إجابة واحدة

+1 تصويت
أفضل إجابة

هذا لا يسمى اختصار . ما تحاول عمله هو تمرير اسم كلاس النافذة كبرمتر في اجراء ما . 
الاختصار شيء اخر تماما . 

الكود فيه مشاكل واضحة : 

١ ـ اسم الاجراء مستخدم في مكتبات الدلفي . موجود في TApplication . واذا صدف وجود استخدام لهذه المكتبة في مكتبة ما من برنامجك لا تحتوي على اجراءك فقد يستخدم الموجودة في TApplication وليس اجراءك . فمن الافضل تغير الاسم لمثلا Create_Form .

٢ ـ برمتر الاجراء من نوع TForm . وانت تمرر TFrmStudent . وهذا نوع مختلف . واعتقد هذا اساس مشكلتك.

٣ ـ الاجراء نفسه خارج سكوب TFrmHome . يعني لن يستطيع الاجراء استخدام F . هو لا يراها ابدا.  (لا استطيع تحديد اذا كنت بحاجة لها خارج الاجراء ام لا . فهذا تحدده انت )  
لهذا لن يكون method من TFrmHome . ( طبعا هذا على فرض انك تريد استخدام F لاحقا في مكان ما من برنامجك ) . بالاضافة للاهم ان Self هنا اصبحت لا تعني الـ TFrmHome وبالتالي النافذة الناتجة ليست ابن لها . وسيتبعها عدة مشاكل حسب طبيعة برنامجك مثل عدم تحررها بتحرر النافذة FrmHome . 

توجد عدة طرق لكن هذه اسهلها ( الموضوع يعود لحسب الحاجة في التطبيق وتصميمه ) . 

 
procedure TFrmHome.Create_Form(aForm: TFormClass);
begin
 if Assigned(F) then
   F.free ;
   F:= aForm.Create(Self);
   F.show;
end;
 

ويكون الاستخدام هكذا 

Create_Form ( TForm4 );

 

تم الرد عليه بواسطة (25,980 نقاط)
مختارة بواسطة
فعلا هو المطلوب بارك الله فيك
في الوهلة الاولى لم يشتغل تظهر رسالة مفادها أن الإجراء غير معرف
تم تعريفه فنجح الأمر
لكن عندي إستفسار
من الناحية الصحيحة أين يتم تعريف الإجراء ضمن public أو مع إجراءات الفورم
لم افهم !
الاجراءات التي في public هي من اجراءات الفورم . فماذا تقصد بكلمة ( او ) ؟
بشكل عام . اذا اردت استخدام الاجراء في unit اخرى يجب ان يكون الاجراء public
اذا كانت الاجابة وافية ومناسبة لما طلبت . يرجى اختيارها ( كاجابة الافضل ) حتى يعرف الجميع بان هذه الاجابة هي ما تبحث عنه

اسئلة متعلقة

+2 تصويتات
1 إجابة
سُئل يوليو 21، 2018 في تصنيف Delphi بواسطة Amar Gozim (10,690 نقاط) | 93 مشاهدات
+3 تصويتات
2 إجابة
سُئل سبتمبر 26، 2018 في تصنيف vcl بواسطة Yamada Fakir (1,640 نقاط) | 64 مشاهدات
+6 تصويتات
1 إجابة
ادعُ اصدقائك في الفايسبوك لمشاركتك
Comodo SSL

مرحبًا بك إلى EasyDelphi Q&A، حيث يمكنك طرح الأسئلة والحصول على الإجابة عليها من المستخدمين الآخرين.

لا يسمح بطلب او السؤال عن كراك او تفعيل او كسر او فك او اي شيء يخالف اتفاقيات الترخيص  مهما كان السبب ومهما كان البرنامج ونوعه. ولا حتى نشر روابط تحتوي على مثل هذه الاشياء لا في الاسئلة ولا في الاجابات ولا التعليقات . نهائيا

396 سؤال
634 إجابة
1,130 تعليق
237 مستخدم