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

مشكلة إنشاء مكون رسومي يقوم بالتعرف على الاوامر البرمجية ويقوم باضافة السمات لها

بدأه Framework2 في 3 نوفمبر 2008 · 12 رد · 1,756 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

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

منذ فترة بعيدة استخدمت بعض ادوات Activex والتي تقوم على التعرف على الاوامر البرمجة وتقوم باضافة بعض السمات لها

يعني عندما تكتب بلغة الدلفي مثلا في الاداة والتي هي عبارة ربما عن الاداة RithTextBox

ولا اعرف ما تتبع في الدلفي ربما TRithText

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

والتعليقات تجعلها خضراء أي بمعنى اي سطر يبداء بالحروف //

مثلا

قمت ببرمجة اداة في الفجوال وعملت بنسبة نجاح حوالي 80%

ولكن كان لها عيب كبير وهو انها تاخذ وقتا في هذه العملية

والادوات الاحترافية التي رأيتها لا تأخذ الا اجزاء من الثانية

أي انها لا تستخدم أي عمليات بحث تقليدية.

وخمنت انها تقوم بتغيير النص ليس بعملية التضليل واضافة اللون المطلوب.

وانما تاخذ النص وتضيف له السمات الخاصة بالاداة Rithtext

تم تعاود اسناده الى الاداة من جديد.

طبعا النص بحاله العادية لا سمات له ولكن اذا كان له سمات وما تشير له الاداة بالـ Rtf

وهو التنسيق المسئول عن اضافة النص بالالوان واحجام مختلفة وغيرها.

بمعنى اخر

اذا كتبت في الاداة كلمة Begin

من لعبث ان اضللها تم اسند لها لون معين لان الاداة سيكون ادائها بطئ.

ولكن ماذا اذا اضفت لها السمة التالية مثلا.

/C1/ Begin/

أي كل كلمة مثلها اضيف لها هذه السمة والتي تعني اللون الازرق.

وطبعا من الممكن ان تتغير على حسب تعريفنا لهذا المتغير C1

على العموم هذه الطريقة افلحت نوعا ما ولكنني الان اقول

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

وايضا بحال النسخ واللصق كذلك.

بصراحة لا اعرف انا مبتدئ لغة دلفي

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

هذا كل ما في الموضوع

وشكرا

مبتدئ في الدلفي

#2

استخدم SynEdit بها كل الذي تريده جاهز ودعم لحوالي نصوص 40 لغة برمجة أو اكثر

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#3

بســم الله الـرحمــن الرحيــم

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

ماشاء الله عليك يا اخ محمد وما شاء الله على الدلفي

كل شئ جاهز

حتى في منتداه حتى الكلمات المشهورة وشائعة الاستخدام موجودة بنقرة زر عند كتابة المواضيع

الله يرحمك يا فجوال بيسك 6

مبتدئ في الدلفي

#4
اقتباس
الله يرحمك يا فجوال بيسك 6

لا زال هناك الكثير يستعملونه ... :)

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#5

بالنسبة لي واحد من أفضل القرارات التى اخذتها في تاريخي التقني هوا الانتقال من فيجوال بيسيك الى دلفي ;-)، وكان ذلك قبل ان تقوم ميكروسوفت بتجاهلها وتجاهل جميع مبرمجيه

تم تعديل هذه المشاركة بواسطة محمد نسمان في 4 نوفمبر 2008 في 01:05

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#6

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

الاخوة الاعزاء

لا يستخدم الميت الا ميت

بمعنى لا يستخدم برنامج ميت الا مبرمج طموحه البرمجي ميت

انا كنت مبرمج فجوال بيسك 6 منذ زمن بعيد

ويا لخسارة الايام والليالي التي قضيتها ادرسه وامحصه.

احيانا ابقى حتى شروق الشمس

الى درجة جعلتني متمكننا فيه كثيرا

وانشاءت مكتباتي الخاصة وادواتي الخاصة

وكان هناك شيئا لا يريحني فيه.

فازيد من البحث والدراسة

وكلما ازددت معرفة كلما ازداد شكي فيه انه برنامج ينفع للهو اكثر من نفعه لانشاء برامج جدية

مشاكل لاحدود لها ورسائل اخطاء كثيرة

ويا للروعة لانشاء برامج جدية تحتاج الى استخدام مكتبات وادوات خارجية

واستعد للمشاكل.

أعجبتني فكرة الملف التنفيدي الواحد في الدلفي قبل ان انتقل الى الفجوال نت

الفجوال نت احياء المبرمجين الفجوالليين

وانا واحد منهم بعد اكثر من خمس سنوات دراسة متواصلة للفجوال 6 قررت الانتقال الى لغة برمجة اخرى وظهر الفجوال نت

وكان هو بالضبط ما احتاجه

ولكن ظهرت عيوب جديدة

بطئ

اعتماده على الفرامم وورك

عدم استقلاليته عن نظام التشغيل

وغيرها

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

او التعبئة السريعة للبيانات في الادوات

الدلفي مثال جيد للاستقلالية والجدية

حتى وان كان به شئ من التعقيد

وهو ربما لتعودنا نحن على لاسهولة في الفجوال بيسك

فمثلا عند كتابتك

Text1.Visbale=

بمجرد كتابة =

يظهر لك التركيب ويحتوي على

True and False

وهو ما ليس موجودا بالدلفي

أي يجب كتابتك لذلك يدوياً

كما ان الدلفي له عيوب في IDE

فهو غير مرتب ونوافذة موجودة بشكل مزعج

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

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

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

وحتى الان لا زلت احاول انشاء وحدة جديدة بها متغيرات عامة وخاصة ولم افلح

كما بالشكل التالي

unit Unit2;

interface


uses
  Windows, Messages, SysUtils,Classes, Controls;

  type

  private
	{ Private declarations }
  public
	{ Public declarations }
  end;

implementation

end.

من القائمة ملف جديد اخترت Unit

ولكن الدلفي يعترض

أعلم ان الامر سهل كثيرا ولكن لي كمبتدئ صعب

لاي لغة برمجة تنسيق في مواقع وجود الاوامر والتعريفات وغيرها

وهناك هنا ترتيب لا اعرفه

اذا احد من الاخوة وضح لنا هنا بالتفصيل ما الذي يحدث وما يجب ان يكون وما يجب ان لا يكون وله جزيل الشكر

وهذا موجز بسيط لنتيجة ما لاحظته

وإن شاء الله مبرمجي الفجوال 6 يهجرون البرنامج العديم الفائدة المسمى Visual Basic 6

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

مبتدئ في الدلفي

#7
اقتباس
حتى وان كان به شئ من التعقيد

البداية فقط ... فترة الانتقال الاولى إلى دلفي تظهر انها معقدة , وهذا طبعاً لانه مرنة , وهذا ما لم تعتد أنت عليه ...

عادي , Relax :D

اقتباس
If A is success in life, then A equals x plus y plus z. Work is x; y is play; and z is keeping your mouth shut

Albert Einstein

مدخل إلى برمجة وتصميم الألعاب : كيف أبدأ ؟

#8
اقتباس
الدلفي مثال جيد للاستقلالية والجدية

حتى وان كان به شئ من التعقيد

وهو ربما لتعودنا نحن على لاسهولة في الفجوال بيسك

أعتقد أن هذه فكرة خاطئة، انا كنت مبرمج VB سابق ومدرب معتمد من ميكروسوفت في VB ودوت نت أيضاً

مشكلة VB أنه يعودك على الأشياء بشكل سهل ولكن بشكل غير منطقي كمبرمج، باسكال اللغة الأم لدلفي صممت أصلاً لتعليم اللبرمجة بشكلك صحيح، وهنا أقتبس مقولة من ويكيبيديا

اقتباس
Pascal is an influential imperative and procedural programming language, designed in 1968/9 and published in 1970 by Niklaus Wirth as a small and efficient language intended to encourage good programming practices using structured programming and data structuring.

الصعوبة التى يواجهها الكثيرين عند الانتقال لدلفي هي محاولة تطبيق فهمهم للغة السابقة على دلفي، وهذا يسبب اللبس، فمثلاً هذه الجملة صحيحة في VB

x = 5
 Text1 = x

لكنها لن تعمل في أي لغة برمجة أخرى حتى فيجوال بيسيك دوت نت، الكثير كان يعتبر استخدام المتغيرات دون تعريف عبارة عن مرونة، وايضاً اسناد متغيرات والتحويل الضمني، لكن نجد اللغات الجديدة كلها اعتمدت منهج لغة باسكال وهو لابد من التحويل الصريح

وايضا جملة مثل

dim x,y,z as integer

أي مبرمج من أي لغة أخرى (وكثير من مبرمجي فيجوال بيسيك) سوف يتصور أنها تعرف المتغيرات من integer ولكن المتغير الوحيد من نوع Integer هنا هو z والباقي سوف يكون من نوع variant لذا فالجملة التالية صحيحة في نظر VB ولكن لا تصلح لاي لغة اخرى

Dim x, y, z As Integer
x = "Hello World"

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

تم تعديل هذه المشاركة بواسطة محمد نسمان في 5 نوفمبر 2008 في 10:42

لا تحزن:

إن كنت فقيرا فغيرك محبوس في دين، وإن كنت لا تملك وسيلة نقل فسواك مبتور القدمين، وان كنت تشكوا من آلام فغيرك يرقدون على الاسرة البيضاء و من سنوات، وان فقدت ولدا فغيرك فقد عددا من الأولاد و في حادث واحد.

لا تحزن:

فأنت تشرب الماء الزلال، و تستنشق الهواء الطلق، و تمشي على قدميك معافى، و تنام ليلك آمنا.

#9

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

ربما تكون هذه المشاركة غير متعلقة بعنوان الموضوع، لكنها إجابة على تساؤل الأخ Framework2:

اقتباس
احاول انشاء وحدة جديدة بها متغيرات عامة وخاصة ولم افلح

بالنسبة إلى تحديد المتغيرات و الثوابت و الإجراءات و الدوال الخاصة (Private) و العامة (Public) في دلفي فالأمر سهل:

* كل ما هو مصرح عنه في القسم interface فهو عام، أي يمكنك الوصول إليه من وحدات برمجية أخرى بشرط تضمين الوحدة البرمجية الحالية في تلك الوحدة البرمجية الأخرى باستعمال جملة uses.

* كل ما هو مصرح عنه في القسم implementation فهو خاص بتلك الوحدة فقط.

ملاحظة: بالنسبة إلى الإجراءات (Procedures) و الدوال (Functions) فإنه لا يمكن كتابة التعريف (Definition)، أي جسم الإجراء أو الدالة الذي يحتوي على التعليمات المطلوب تنفيذها، إلا ضمن القسم implementation، و لكي نجعل الإجراء أو الدالة عامة (Public) فإننا نضع تصريحاً لها (Declaration) في القسم interface. و التصريح عبارة عن رأس الإجراء أو الدالة فقط.

  1. //...
  2.  
  3. interface // كل ما يكتب تحت هذا القسم فهو عام
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms;
  7.  
  8. type // Public types here:
  9.  
  10. TDataOperation = (doAddNew, doModify, doDelete); // public enumeration.
  11.  
  12. TEmplyeeInf = record // public record type
  13. ID: Integer;
  14. Name: string;
  15. BDate: TDate;
  16. end;
  17.  
  18. TForm1 = class(TForm) // public class
  19.  
  20. private
  21. // private members of the class
  22. public
  23. //public members of the class
  24. end;
  25.  
  26. const // public constants:
  27. PI = 3.141592;
  28. MyDbName = 'EmpData.mdb';
  29.  
  30. var // public variables:
  31. Form1: TForm1;
  32.  
  33. StepCounter: Integer;
  34. EmpInfo: TEmplyeeInf;
  35. FileSaved: Boolean;
  36.  
  37. function CircleArea(Radius: Real): Real; // تصريح مسبق عن دالة معرفة فيما بعد - و بالتالي فه
    ي عامة
  38.  
  39. implementation // كل ما يكتب تحت هذا القسم فهو خاص
  40.  
  41. {$R *.dfm}
  42.  
  43. type // private types:
  44. TEngNums = (enOne, enTwo, enThree, enFour);
  45. TByteBits: 0..7;
  46. TSomeArabs = set of (Libya, Tunisia, Algeria, Morocco);
  47.  
  48. const // private constants:
  49. SECONDS_IN_HOUR = 3600;
  50.  
  51. var // private variables:
  52. LastIndex: Integer;
  53.  
  54. procedure ShowMe(); // private procedure
  55. begin
  56. // ...
  57. // ...
  58. end;
  59.  
  60. function CircleArea(Radius: Real): Real; // public function because it is declared in the in
    terface section
  61. begin
  62. Result := PI * Radius * Radius;
  63. end;
  64.  
  65. // ...
  66. // ...
  67.  
  68. end.
  69.  

أما الكلمتين Private و Public (بالإضافة إلى Protected و Published) فتستخدم ضمن تعريف الـ Class لتحديد الأعضاء الخاصة (Private Members) و الأعضاء العامة (Public Members) للكائنات (Objects) المشتقة من تلك الـ Class. طبعاً الأعضاء الـ Public و الـ Published تشكل الخصائص (Properties) و المناهج (Methods) و الأحداث (Events) المتعلقة بتلك الـ Class.

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

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

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

#10

بســم الله الـرحمــن الرحيــم

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

الاخوة الاعزاء

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

كما يفعل مبرمجي الفجوال عندما اذكر لهم عيوب برنامجهم مادحا الدلفي.

كما قال خبير دلفي عن المتغيرات صحيح فانا لم اعيب الدلفي كلغة

والمتغيرات تلك ستكون من النوع Object على ما اعتقد

ولكنني عبت مثلا عدم تكملته للكود بالتركيب المناسب للخاصية

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

Begin

end;

كما ان الواجهة ليست مريحة كثيرا في العمل.

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

وقريبا جدا سانتقل الى الدلفي 2007 فلابد وان هناك تطويرات كثيرة بالواجهة وغيرها

وانا من البداية قلت ان الدلفي افصضل من الفجوال بيسك

هذا لا يختلف عليه أثنان مدركين جيدا للغتين.

اما بخصوص رد الاخ خبير ديلفي

واجابته عن التسأل

فشكرا كثيرا يا خبير ديلفي

اجابتك فيها بعض المطلوب

ولكن ياليت تخبرني ما الخطاء في الـ Unit التي كتبتها

اي بخصوص انشاء Unit جديدة

عندما احاول تعريف متغيرات عامة او خاصة فيها احصل على خطاء

وايضا لي سؤال اخر

عندي نموذجين النموذج الاول به زر والنموذج الثاني عليه مؤقت قيمة الخاصية Enabled=false;

عندما اشغل البرنامج اجد ان المؤقت يعمل مع ان النموذج الرئيسي للبرنامج هو النموذج الاول.

والسؤال الثاني

لماذا لا يضيف الدلفي اداة Activex الى المشروع ويضيفه كمشروع مستقل

وهل الاداة Frame تعتبر بديل له للاستخدامات بداخل المشروع

عذرا يا جماعة انني اسأل قبل البحث الكثير ولكن في الحقيقة اضعت الكثير من الوقت على الفجوال واريد ان اتقدم بسرعة مع الدلفي وليس لدي خيار اخر

الا ان اخذ المعلومات جاهزة

ولاحضوا جملة ليس عندي وقت

يعني من المهم ان اجيد الدلفي في شهر واحد على الاقل

وشكرا جزيلا لكم مرة أخرى

والله الموفق

مبتدئ في الدلفي

#11

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

اقتباس
ولكن ياليت تخبرني ما الخطاء في الـ Unit التي كتبتها

اي بخصوص انشاء Unit جديدة

عندما احاول تعريف متغيرات عامة او خاصة فيها احصل على خطاء

إذا كنت تقصد الكود المرفق في المشاركة رقم 6 فالتوضيح هو:

الخطأ هو استعمال كلمتي Private و Public كجمل مستقلة. هاتان الكلمتان تستعملان فقط ضمن تعريف الـ Class و التي يمكنها أن تضم 4 أنواع من المحددات (Private و Protected و Public و Published) كما في الشكل التالي (دون توسع في الشرح):

  1. type
  2.  
  3. TMyNewClass = class(T...) // بداية تعريف الصنف
  4. private
  5. // المتغيرات و الإجراءات و الدوال الخاصة
  6. protected
  7. // المتغيرات و الإجراءات و الدوال المحمية
  8. public
  9. // المتغيرات و الإجراءات و الدوال العامة
  10. published
  11. // المتغيرات و الإجراءات و الدوال المنشورة - و هي التي تظهر في نافذة الخصائص أثناء التصميم
  12. end; // نهاية تعريف الصنف
  13.  

لاحظ أن تلك الكلمات الأربع جاءت ضمن كتلة تعريف الصنف (Class) أي بين السطر TMyNewClass = class و كلمة end في النهاية.

أعتقد أن ما يسبب اللخبطة للبعض هو السؤال التالي:

إذا قلنا أن المتغيرات المصرح عنها في القسم interface (كمتغيرات مستقلة لوحدها) هي متغيرات عامة (Public) فما الفرق بينها و بين المتغيرات المعرفة في القسم Public ضمن تعريف الـ Class؟

المتغيرات المعرفة ضمن القسم interface هي متغيرات مستقلة، أي غير مرتبطة بكائن، و بالتالي يمكنني الوصول إليها مباشرة من أي مكان في الكود بشكل مباشر بمجرد ذكر اسم المتغير، أما المتغيرات المصرح عنها في القسم public التابع للـ Class فإنه يمكن الوصول إليها مقترنة باسم الكائن المشتق من تلك الـ Class. و هي في الواقع تمثل خصائص (Properties) لذلك الكائن.

مثلاً:

  1. //...
  2. interface
  3. // ....
  4. type
  5. TMyNewClass = class(Tobject)
  6. private
  7. //
  8. public
  9. MyID: Integer;
  10. MyName: string;
  11. end; // نهاية تعريف الصنف
  12.  
  13. var
  14. MyID: Integer;
  15. MyName: string;
  16.  
  17. MyNewObject: TMyNewClass;
  18.  
  19. implementation
  20. // ....
  21.  
  22. end.
  23.  

لاحظ أننا عرفنا كائن باسم MyNewObject مشتق من الصنف TMyNewClass.

لو أخذنا MyID كمثال. لدينا نسختان منه: الأول هو المصرح عنه ضمن تعريف الصنف TMyNewClass، و لذلك فهو يسمى عضو عام (Public Member) في ذلك الصنف، و بالتالي فهو عضو عام في الكائن MyNewObject المشتق من الصنف TMyNewClass.

الثاني مصرح عنه كمتغير مستقل في القسم interface.

أيضاً ما الفرق؟

المتغير المستقل نصل إليه بذكر اسمه لوحده كما يلي:

  1. MyID := 100; // تخزين قيمة في المتغير
  2. // أو
  3. Edit1.Text := IntToStr(MyID); // قراءة قيمة المتغير
  4.  

أما المصرح عنه ضمن القسم public التابع للـ Class فلابد من اقترانه باسم كائن مشتق من تلك الـ Class، مثلا:

  1. MyNewObject.MyID := 100; // تخزين قيمة في المتغير
  2. // أو
  3. Edit1.Text := IntToStr(MyNewObject.MyID); // قراءة قيمة المتغير
  4.  

في الحالة الثانية (المصرح عنه ضمن القسم public التابع للـ Class) أنت في الواقع تتعامل مع خاصية (Property) تابعة لكائن (Object) و إن كانت هذه الطريقة ليست هي الطريقة المفضلة لإنشاء خصائص للكائنات.

أرجو أن تكون تلك النقطة قد أصبحت واضحة.

==============================

اقتباس
عندي نموذجين النموذج الاول به زر والنموذج الثاني عليه مؤقت قيمة الخاصية Enabled=false;

عندما اشغل البرنامج اجد ان المؤقت يعمل مع ان النموذج الرئيسي للبرنامج هو النموذج الاول.

ذلك يعود لطريقة دلفي الافتراضية في إنشاء النوافذ أثناء التشغيل! حيث أن كل نافذة تضيفها إلى مشروعك يتم إنشاؤها تلقائياً بمجرد تشغيل البرنامج إلا أنها تظل مخفية حتى يتم عرضها بواسطة Show أو ShowModal. و مع ذلك فهي موجودة في الذاكرة و يمكنك الوصول إليها بالكود و الوصول إلى مكوناتها. مثلاً يمكن كتابة السطر التالي في الـ Form1

  1. X := Form2.Edit1.Text;
  2.  

مع أن Form2 لا تظهر على الشاشة و لم تطلب أنت أصلاً عرضها... إنها موجودة في الذاكرة و يمكن الوصول إليهأ، ينقصها فقط أن تصبح مرئية.

و بالتالي إن الإجابة على سؤالك هي: الـ Form2 موجودة في الذاكرة و بالتالي فإن الـ Timer يعمل!

مسألة إلغاء الإنشاء التلقائي (Auto-Create) للنوافذ مسألة مهمة إذا كان المشروع يتكون من العديد من النوافذ و خاصة عند التعامل مع قواعد البيانات. إذا كان العديد من النوافذ يحتوي على عدة جداول أو استعلامات، و يتم فتحها جميعاً معاً عند تشغيل البرنامج فإن ذلك قد يستهلك الكثير من الذاكرة أو ازدحام الشبكة و قد يؤدي إلى توقف البرنامج.

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

للقيام بذلك اتبع الخطوات التالية:

1. من القائمة Project اختر الأمر Options

2. في نافذة الخيارات تأكد من اختيار الصفحة Forms

3. ستجد لديك في الأسفل قائمتين: القائمة اليسرى تسمي Auto-create forms و القائمة اليمينى تسمى Available forms

4. في القائمة اليسرى حدد اسم الـ Form التي تريد نقلها ثم انقر زر السهم لنقاها إلى القائمة اليمنى.

5. انقر الزر OK

بهذا الشكل لن يتم إنشاء الـ Form التي تم نقلها إلى اليمين. لكن كيف يمكن إنشاؤها عند الحاجة إليها؟

نفرض أن لدينا الزر Botton1 في الـ Form1 و عند النقر عليه نريد عرض الـ Form2. بدلاً من استخدام سطر واحد للعرض: Form2.Show نحتاج إلى كود كالتالي:

  1. procedure TFRtlForm1.Button1Click(Sender: TObject);
  2. begin
  3. // إنشاء النافذة إذا لم تكن كذلك
  4. if not Assigned(Form2) then Form2 := TForm2.Create(Application);
  5. // عرض النافذة
  6. Form2.Show; // OR Form2.ShowModal;
  7. end;
  8.  

السطر الأول يتأكد مما إذا كان المتغير Form2 الذي يمثل النافذة فارغاً (nil) أم لا ، و إذا كان nil فإنه يقوم بإنشاء النافذة باستخدام اسم الـ Class الذي تنتمي إليه النافذة (TForm2). ثم يتم عرض النافذة بالسطر الثاني.

و لكن ما زالت هناك خدعة في دلفي!! و هي أنه عند إغلاق النافذة فإنها تختفي من على الشاشة لكنها تبقى في الذاكرة شغالة! هذا هو السلوك الافتراضي في نوافذ دلفي.

لكي يتم فعلاً إغلاق النافذة و إزالتها من الذاكرة نستعمل معالج الحدث OnClose للـ Form

  1.  
  2. procedure TFRtlForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  3. begin
  4. Action := caFree; // تغيير السلوك الافتراضي للإغلاق
  5. Form2 := nil; // ضبط المتغير على لا شيء
  6. end;
  7.  

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

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

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

#12

بســم الله الـرحمــن الرحيــم

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

جميل

و

رائع

هذا هو

بدأت افهمك يادلفي

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

وكيف يمكننا اضافة مكون من نوع Activex او شبيه له للمشروع واستخدامه

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

وهل Fream هل الحل الوحيد

وهل يمكن اضافة واسقاطه على النموذج بزمن التصميم

وشكرا لكم كثيرا

مبتدئ في الدلفي

#13
Framework2 كتب:

بســم الله الـرحمــن الرحيــم

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

جميل

و

رائع

هذا هو

بدأت افهمك يادلفي

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

وكيف يمكننا اضافة مكون من نوع Activex او شبيه له للمشروع واستخدامه

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

وهل Fream هل الحل الوحيد

وهل يمكن اضافة واسقاطه على النموذج بزمن التصميم

وشكرا لكم كثيرا

رفع من قيمة الموضوع

نرجو منكم الاجابة او وضع روابط ان كان الموضوع مكرر

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

تم تعديل هذه المشاركة بواسطة HMAMH في 12 يونيو 2010 في 13:12

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