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

هل تريد ان تصنع مكون خاص بك؟

مغلق
بدأه romanof في 15 يونيو 2005 · 18 رد · 8,151 مشاهدة · في قسم بناء المكونات والأدوات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخي الكريم قبل ان تقرا هذا الموضوع انصحك بقراءة كتاب البرمجة الموجهة في دلفي في مكتبة الكتب

من هنا

محاولة بسيطة لتوضيح الموضوع وارجو ان تعدلوا اخطائي فانا جديد على الموضوع

your own component.rar

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#2

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

مشكور اخي romanof بارك الله بيك

#3

انظر الى بقية الموضوع من هنا

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#4
http://www.orwah.net/modules/newbb/viewtop..._id=239&forum=6

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#5

يعطيك العافية

بصراحة معلومات من ذهب

عندي أسئلة لعند ما وصلت

التعبير inherited create(Aowner);

قصدك فيه منادات الباني تبع TEdit

التعبير override

يقصد فيه التطوير المستقبلي للمكون

ليه الصفات من النوع boolean ذات اسم

و الصفات يلي في Object Inspector بإسم أخر

التعبير TNotifyEvent شو بيعمل بالضبط .

اقتباس
if assigned(Fclear) then

Onclear(self); // OnClear // البرنامج ينفذ ما كتبته داخل الحدث //

أول شي assigned ما عم يقدر يلاقيها

الغرض من هل التحقق هاذ لحتى تعرف إذا المستخدم كتب شي

في المنهج OnClear و بالتالي بالتنفذه بالأول .

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

أنا بشتغل على بلدر سي ++

شاكر ردك

#6
اقتباس
التعبير inherited create(Aowner);

قصدك فيه منادات الباني تبع TEdit

نعم

اقتباس
التعبير override

يقصد فيه التطوير المستقبلي للمكون

هناك قاعدة عند بناء المكون لابد من إعادة تعريف الباني المورث

اقتباس
ليه الصفات من النوع boolean ذات اسم

و الصفات يلي في Object Inspector بإسم أخر

في الحقيقة بما أنهما صفتان فلابد ان اسميهما مختلفان

لاحظ ان الصفات في المجموعة الاولى تقع في القسم private وبالتالي لايمكن الوصول اليها مباشرة يدويا

لذلك قمنا بإنشاء صفة في القسم published لتكون واجهة اثناء العمل يدويا لاحظ ان الصفات التي Object Inspector

تستدعي الدالة Set عند منحها قيمة وهذا يحدث تلقائيا حتى عند العمل يدويا

قد تسال لماذا لم نضع الصفات التي في القسم private في القسم published وتعمل دالتين Set و Get

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

في الملف المرفق مشاركة كنت نشرتها في موقع الاستاذ العزيز عروة جاولت فيها توضيح اسس التعامل مع الخواص

كنت قد توقفت عن مواصلته لكن الان ساعود

اقتباس
التعبير TNotifyEvent

معناه ان الحدث من النوع الافتراضي ذو بارامتر وحيد

اقتباس
أول شي assigned ما عم يقدر يلاقيها

الغرض من هل التحقق هاذ لحتى تعرف إذا المستخدم كتب شي

في المنهج OnClear و بالتالي بالتنفذه بالأول

نعم

اقتباس
أنا بشتغل على بلدر سي ++  :wacko:  :wacko:

حول على الدلفي احسن لك :lol: :lol:

your_component.rar

your_component.rar

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#7

بكمل قراءة الموضوع و بحاول لاقي أسئلة محيرة

لكن أنا مافي اترك السي لأني سأعتبر ناكر للجميل

سلام

#8
اقتباس
لكن أنا مافي اترك السي لأني سأعتبر ناكر للجميل  :lol:  :lol:

على راحتك اخي العزيز

لكن تذكر اخي العزيز وقتما تفكر تنكر الجميل :wacko: معشر الشباب الدلفاوية جاهز لمنحك هذا اللقب :lol: :lol:

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#9

ربما لاداعي لترك السي ++ ..

بل زيادة الإضطلاع على دلفي .. وبرأيي يمكن التعامل مع لغتين معا , ولو كان الواحد يحب لغة اكثر ويتعامل معها اكثر ..

أنا مثلا أعمل كذلك على C# ولكني أحب دلفي أكثر , ومعظم شغلي أقوم به على الدلفي ... ولذلك تراني أفكر بطريقة دلفي وليس طريقة C# .. ولكن رغم ذلك أظن أن الانسان يستطيع إتقان لغتين معا , ولو كان ذلك سيبب البطيء في كل منهما ...

بس مشان ضمان المستقبل يضع الواحد اكثر من بضاعة في سلته بحيث إذا فسدت بضاعة يلحق حالة ويبيع البضاعة الثانية .. (آسف للتشبيه)

----

التعبير inherited create(Aowner);

قصدك فيه منادات الباني تبع TEdit

دائما inherited المقصود فيها شيء واحد .. أننا عندما نورث أبن من أب .. يمكننا استخدام هذه ال inherited لاستخدام تابع الأب من أجل الأبن .. وبإمكاننا إضافة بعدها أو قبلها شفرةخاصة فيها , وهذا عادة ما يحدث ..

مثلا inhereted ستقوم باستدعاء create الأب , وتقوم بكل ماعليها من وظائف حجز ذاكره وتهيئة .. ثم نحن نقوم إذا أردنا بوضع وظائف جديدة بعدها من اجل تهيئة الأبن بشكل كامل

التعبير override

يقصد فيه التطوير المستقبلي للمكون

المقصود فيه .. ان تابع ما يكون خاص بالأب , ونريد تعريفة من جديد من أجل الأبن (أي لانريد توريثة كما هو .. بل نريد بناءة من جديد ) لذلك نعيد تعريفة باستخدام override مما يسمح لنا ببناءة حسب ما يناسب الأبن

ليه الصفات من النوع boolean ذات اسم

و الصفات يلي في Object Inspector بإسم أخر

فعليا كل خاصة (الخصائص أو properity هي فقط التي تظهر في ضابط الكائنات) يكون لكل خاصة جزأين , قراءة وكتابة , بالإضافة إلى متحول محلي (أي متحول معرف ضمن Private) يقوم بحفظ قيمة الخاصة ... وبالتالي أكتملت الحلقة , فالخاصة هي تعبير افتراضي له دالة قراءة ودالة كتابة وهاتان الدالتان تتعامل مع متحول محلي يحفظ القيمة , لذلك يجب أن يكون اسم المتحول المحلي (الضروري حتما) مختلف عن اسم الخاصة لكي لايحدث تضارب ..

ملاحظة , يمكن الاستغناء عن دالتي القراءة والكتابة , أو واحد منهما , ولكن المتحول مطلوب عادة ..

التعبير TNotifyEvent شو بيعمل بالضبط .

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

procedure (Sender: TObject);

أي عندما نريد وضع أحداث للمكون مثل OnClick وغيرها , فإذا كانت قياسية (لاتحتاج برامترات سوى Sender) فلا داعي لتعريفها , بل مباشرة نقول انها من النوع TNotifyEvent , وهو يبلغ عن المكون الذي سبب الحدث عن طريق المتحول Sender

if assigned(Fclear) then

Onclear(self); // OnClear // البرنامج ينفذ ما كتبته داخل الحدث //

أول شي assigned ما عم يقدر يلاقيها

الغرض من هل التحقق هاذ لحتى تعرف إذا المستخدم كتب شي

في المنهج OnClear و بالتالي بالتنفذه بالأول .

assigned تساوي العبارة التالية

if Fclear <> nil then

بالسي نكتب null بدل nil

صحيح , يعني هل يوجد حدث وضعه المستخدم حتى نذهب وننفذة , ولا نتابع

أنا بشتغل على بلدر سي ++

C++ Builder محرر ممتاز , ومهم , وسيتم تضمينه مع Delphi 2006 Studio (لاحظ ان أسم delphi هو اسم الاستوديو , مثلا مثل MS Visual Studio يحوي عدة لغات)

تم تعديل هذه المشاركة بواسطة ORWA في 2 يوليو 2005 في 14:38

#10

آخ يا عروة يا ديبلوماسي!! B)

:lol:

انا متفق استاذي

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#11

يعطيكم العافية

بس حتى إفهم شو عم يصير

فتحت TEdit ووجدت التالي

اقتباس
virtual void __fastcall KeyPress ( char & Key ) ;

بالسي كلمة virtual تعني التطوير المستقبلي

__fastcall لتسريع مناداة الإجراء

& نتعامل مع المحرف بالمرجع

يعني غير قية الـ Key تتغير الأساسية .

اقتباس
__property OnKeyPress ;

السطر السابق يدل على الخاصية OnKeyPress

عندي سؤالين الآن

بدى إلغي أحد الخواص للكائن الإبن القادمة من الأب

و لتكن OnChange و إعطاءة حدث من TLable وهو

OnMouseLeave

في هيك شي

ثاني سؤال :

مترجم اللغة عم يعطيني خطأ إنه في تشابه و تكرار في توابع الأحداث

virtual void __fastcall KeyPress ( char & Key );

مع إنه كلمة virtual مكتوبة

إن شالله ما يطولوا بالسي بلدر لإنه نزلت عدة نسخ من ديلفي

و نحنا عم ننتظر تنزل بلدر تدعم الدت نت و تكون مثل ديلفي 8

سلام

#12
اقتباس
و لتكن OnChange و إعطاءة حدث من TLable وهو

OnMouseLeave

في هيك شي

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

وذلك بالوراثة مش من الاب وانما مباشرة من الجد :lol:

TCustomEdit

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#13

صحيح , وهذا اقتباس من Delphi component writers guide

so if an existing component class contains properties that you do not want to
include in yours, you should derive from that component’s ancestor.

, ودلفي تقوم آليا بتزويدما بجد قابل للتوريث المريح ,, مثال

بدلا من Tedit ورث من TcustomEdit , وفقط حدد الخصائص التي تريد إظهارها , والتي لن تضعها لن تظهر ...

الأصناف التي لها Custom وجدت خصيصا لهذه الغاية, ويفضل التعامل معها دوما

#14

up

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#16
اقتباس
لقد كان هذا مثالا بسيطا عن التعامل مع الاحداث ولكن ماذا لوكان الحدث يستقبل أكثر من بارامتر

في الحلقة القادمة سوف نتعرف على كيفية القيام  بذلك  مع السلامة ...

لحظة انا امزح معكم ... لكي تقوم  بذلك  سوف نحتاج الى  تعريف نوع جديد من الاحداث  يعنى قبل تعريف المكون نفسه

TClearFunc=procedure (Sender:Tobject;var  CanClear:Boolean) of object;

هذه النقطة لم افهمها بشكل جيد كيف نعرف نمط هو اجرائية

و ماذا يسمى هذا في اللغة ارجوا التوضيح

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#17

مرحبا

يدعى نمط مؤشر إلى منهج

يستخدم هذا النوع عندما نريد تعريف

أحداث تحتوي على بارامترات غير البارامترSender

إننا محكومون بالأمل وما يحدث الآن ليس نهاية العالم

#18

عفوا على التاخر في الرد

بالفعل اجابة الاخ M_Asize صحيحة

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#19

شكراً على الموضوع الرااااااااااااااااائع والمعلومات القيمة

ودلفي وبسسسسسسسسسسسسسسسسسس

هذا الموضوع مغلق.

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