• 0
a.jallad

تنظيم العمل والاستفادة من امكانات الفوكس برو

سؤال

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

اخواني الاعزاء،، والله محسوبكم اليوم مبسوط كثير... وجاي على بالي احكي كثير.. والله يبسطكم كلكم ان شاء الله

وأخي العزيز جواد ( خاصة ) خلي عيونك على هل الموضوع

سنتطرق في هذا الموضوع ان شاء الله لكيفية تنظيم المشروع وكيفية الاستفادة من عنصر الـــ Class اكبر قدر ممكن.

ان الطبيعي عند البدء بتصميم برنامج جديد هو

- تحديد كافة أهداف البرنامج

- بناء قاعدة البيانات والجداول بناءاً صحيحا مبنيا على دراسة تحليلية شاملة لطبيعة المدخلات والمخرجات المطلوبة

- انشاء مجلد جديد للبرنامج والبدء على بركة الله

قد تقولون وعلى اعتبار أن كل هذا بديهي فما الجديد هنا؟!! لا شيء..

حسنا لنقل وعلى سبيل المثال لا الحصر كم مرة قد نعيد كتابة الملف المفتاحي للبرنامج؟ كم مرة قد نعيد تشكيل أساسيات الشاشة الرئيسية؟ كم مرة نغير خاصية RighttoLeft الخاصة بالــ Text Box لغايات اللغة العربية؟ كم مرة نقيس خانة التاريخ لتظهر بشكل لائق على النموذج؟ كم نموذج سأضطر للتعديل اذا أردت تغيير نوع أو حجم الخط ، أو لتغيير الــ Icon ؟؟ كم وكم وكم من الامور التي قد نكررها مع كل نموذج جديد أو برنامج جديد،،،

وسؤالي هل يوفر الفوكس برو الإمكانات لجعل حياتنا مع لوحة المفاتيح والشاشة أقصر قليلا وأسهل قليلا وأكثر مرونة، ويريحني من عناء التكرار المستمر للأبد في بعض الحالات، الجواب الأكيد هو نعم والأسلوب الأكيد هو الاستفادة من مرونة الفوكس برو ومن الامكانات التي يوفرها عنصرالــ CLASS الذي سنتطرق له هنا بشكل مباشر بعد قليل، ولتعم الفائدة من الموضوع فسوف نقوم بتصميم برنامج فيه كافة الاساسيات التي نبدأ بها أي مشروع، أي اننا سنصمم نموذج نستخدمه في أي مشروع جديد

سيكون الكلام هنا عن مشروع اسمه MyTemplate ضمن مجلد ولنسميه MyProject

ولنبدأ خطوة بخطوة من شاشة الــ Command

أولا: انشاء مجلد ومشروع جديدين

Set defa to C:\
md MyProject
cd MyProject
Create project MyTemplate

ستظهر لنا تلقائيا الشاشة التالية والتي تتميز كما تعلمون بالقدرة على فرز كل نوع من الملفات المستخدمة ضمن مجموعة معينة حسب طبيعة الملف وحسب ما هو ظاهر بالصورة ( والاوامر المتوفرة هي انشاء ملف جديد، اضافة ملف موجود، تعديل ملف، ازالة ملف، بناء البرنامج )

وللاختصار من تكرار التعليمات هنا ولمن لم يستخدم الــ Project سابقا فالكلام عموما سيكون على النحو التالي: اذا اردنا مثلا ان نضيف نموذج جديد فهذا يعني ان علينا اختيار البند Form من المشروع ثم اختيار الامر New

post-113506-1240513347_thumb.jpg

ثانيا: والان سنقوم بانشاء مجلد نسميه myData داخل المجلد الرئيسي نضع فيه قاعدة البيانات المسماة myDataBae وننشىء جدولا فيه نسميه Customers

Md MyData
Cd MyData
Create DataBase myDataBase
Create table Customers (cId i(4) Autoinc, cName c(40), cTel c(20))
Close databases all
Set defa to C:\MyProject

ثم نضيف الــ Database للمشروع باستخدام Add

تالثا: سنقوم بانشاء البرنامج المفتاحي للمشروع وسنسميه هنا Main

وسنضع فيه الاوامر التالية:

set talk off
local MainPath, DataPath, CurrentPath
MainPath = addbs[ sys(5) + sys(2003) ]
DataPath = [MyData]
CurrentPath = MainPath + [;] + MainPath+DataPath
set default to &MainPath
Set path to &CurrentPath
on shutdown do MyShutDown

do form frmMain
read events

function MyShutDown
set sysmenu to default
on shutdown
clear dlls
close databases all
* Set Path To
on error
if _vfp.startmode > 0 && Run time
quit
endif
clear events
clear
return
endfunc

تم تعديل بواسطه a.jallad
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

24 إجابة على هذا السؤال .

  • 0

ولا ننسى أن نحدد البرنامج بعد اضافته كبرنامج مفتاحي على النحو التالي: نختاره ثم نختار من القائمة Project >> Set Main

رابعا: تصميم الشاشة الرئيسية frmMain

نقوم باضافة Form جديد للمشروع نغير فيه الخصائص حسب الرغبة ( وعلى الاقل حسب الصورة ) وطبعا هذا النموذج سيمثل الـواجه الاساسية للبرنامج التي سنقوم بتغيير محتوياتها حسب الرغبة

post-113506-1240521044_thumb.jpg

ونضيف لها الاوامر التالية في اجراء الـــ Load وذلك لاستدعاء دالة GetWindowLong الموجودة في الــ Windows وعكس النموذج بواسطتها من اليسار الى اليمين وذلك فقط لجعل القائمة Menu التي سنصممها لاحقا تظهر من الجهة اليمنى على اعتبار انها مصممة باللغة العربية

وللأسف لم أجد طريقة مباشرة بالفوكس برو لعكس القائمة من اليسار الى اليمين مع نموذج صمم على اساس ان يكون Top Level form حتى وان صممت القائمة على ذلك الاساس ( ويا ريت اذا في طريقة اخرى..دلوني عليها مع انه هذه الطريقة مش حاكية اشي)

#defi gwl_Exstyle -20

#defi ws_Ex_Layoutrtl 0x400000

#defi ws_Ex_Noinheritlayout 0x100000

declare integer GetWindowLong in user32.dll integer hwnd, integer nIndex

declare integer SetWindowLong in user32.dll integer hwnd, integer nIndex, integer dwNewLong

oldlong = GetWindowLong(this.hwnd, gwl_Exstyle)

SetWindowLong(this.hwnd,gwl_Exstyle, bitor(oldlong,ws_Ex_Layoutrtl,ws_Ex_Noinheritlayout))

ونضيف لاجراء الــ Init الامر التالي لاستدعاء الــ Menu التي ستصمم لاحقا

Do mnuMain.mpr With This,.T.

ونضيف لاجراء Unload الامر التالي فقط

Quit

خامسا: نضيف الــ Menu المرغوب بها للمشروع ونسميها mnuMain

ولا ننسى ان نختار ان تكون Top Level Menu من الـ General Option الخاصة بها من القائمة View وذلك لتثبيت انها ستستخدم مع شاشة رئيسية غير شاشة الفوكس برو

post-113506-1240521070_thumb.jpg

ونضيف لامر الخروج فيها الاجراء التالي للتأكد من عدم وجود أي نماذج اخرى مفتوحة خلافا للشاشة الرئيسية

 if _vfp.forms.count=1

_vfp.activeform.release

endif

تم تعديل بواسطه a.jallad
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لو جربت تنفيذ البرنامج الان ستجد بأن لديك شاشة رئيسية وقائمة وآليه لاقفال البرنامج والخروج من الفوكس برو.

سادسا والأهم الــ Class

بالابتعاد عن التفسير المعتاد له

فببساطة فان هذا العنصر قد يكون كأي عنصر من عناصر الفوكس برو المتنوعة قد يكون Form أو Command Button أو label أو اجراء معين، أو Combo Box ..... والصورة التالية تعطيك فكرة عما قد يمثله

post-113506-1240531440_thumb.jpg

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

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

وطبعا هذه العناصر قد تكون عامة نستخدمها لكافة متطلبات البرنامج او خاصة لا نستخدمها الا لبرامج معينة، وقد تكون غاية في التعقيد أو غاية في البساطة، وكون ان الموضوع مختص بانشاء Project Template ستكون العناصر التي سنصممها عامة وبسيطة ،

وسنتعامل هنا مبدئيا مع Textbox

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

- انشاء العناصر الاساسية ضمن Class معينة سنطلق عليها اسم BaseClas

- انشاء عناصر للواجهة العربية مبينة على BaseClas وسنسميها ArbClas

- انشاء عناصر للواجهة الانجليزية مبينة على BaseClas وسنسميها EngClas

لنختر من المشروع أمر انشاء Class جديد مبني على الــ TextBox

على النحو التالي

post-113506-1240531562_thumb.jpg

طبعا Class Name تمثل الاسم الذي سنختاره للــ Class وهو هنا bc_txt

Based On تمثل نوعية الــ Class المراد انشاؤه وهو هنا Textbox

Store In تمثل اسم الــ Class Library التي سنحفظه فيها وهي هنا BaseClas

وفور ان نعطيه امر التخزين سوف تظهر لنا شاشة فيها Textbox ، لنغيير بعض خصائصها كما هو موضح الصورة ثم نحفظ التعديلات

post-113506-1240531636_thumb.jpg

الان سوف ننشئ Class مبينة على هذه الــ Class وذلك لتعديلها لتناسب الواجهة العربية

لنختر من المشروع أمر انشاءClass جديد مبني على الــ BaseClas\ bc_txt كما في الصورة، ونسمي الجديدة arTxt ونحفظها في ArbClas والتي ستظهر تلقائيا عند عملية الحفظ

post-113506-1240531681_thumb.jpg

غير فيها Alignment لتصبح 1 وغير خاصية RighttoLeft لتصبح .T. ثم احفظها

افتح النموذج frmMain للتعديل والان اعمل Drag and Drop لكل من bc_txt و arTxt

جرب البرنامج فسترى ان كل منهما قد اخذ خصائصه المحددة واشترك الاثنان في Select On Entry

هذه الــ Class على بساطتها توفر عليك عناء اختيار Select on Entry وعناء اختيار RighttoLeft وعناء تحديد Alignment في كل مرة تريد ان تستخدم فيها Textbox عربي الاستخدام

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

وهذا الملف الذي تم تنفيذه MyProject.rar

تم تعديل بواسطه a.jallad
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

مشكور اخي

a.jallad

معلوماتك كلها قيمة

بارك الله فيك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

الاخوة AkramBrave و Hindoda

شكرا لكم على حسن ظنكم، والغاية ان تعم الفائدة ان شاء الله، واذا كان لكم أي استفسار فلا تترددوا

الان وكما انشأنا سابقا TextBox اسميناه bc_Txt في الــ BaseClas وبنينا عليه ar_Txt في ArClas

سننشأ بقية العناصر التي قد نحتاج لها :

دعونا هنا ننشأ مجموعة الــ BaseClas قبل كل شيء، وطبعا نستطيع تطبيق نفس الخطوات التي أنشأنا بها bc_text لانشاء كافة العناصر الاخرى

او ببساطة بامكاننا انشاءها مباشرة من خلال الــ Command Window على النحو التالي:

CREATE CLASS bc_Lbl OF BaseClas as "Label"

CREATE CLASS bc_Cmd OF baseclas as "CommandButton"

CREATE CLASS bc_Chk OF baseclas as "Checkbox"

CREATE CLASS bc_Opt OF baseclas as "OptionGroup"

CREATE CLASS bc_Cbo OF baseclas as "ComboBox"

CREATE CLASS bc_Cnt OF baseclas as "Container"

CREATE CLASS bc_Edt OF baseclas as "EditBox"

CREATE CLASS bc_Lst OF baseclas as "ListBox"

وسنكتفي بهذه العناصر الان،،

والان وبنفس الطريقة سننشأ عناصر ArClas ولكن مبينة على عناصر BaseClas

CREATE CLASS ar_Lbl OF arClas as bc_Lbl FROM BaseClas

CREATE CLASS ar_Cmd OF arClas as bc_Cmd FROM BaseClas

CREATE CLASS ar_Chk OF arClas as bc_Chk FROM BaseClas

CREATE CLASS ar_Opt OF arClas as bc_Opt FROM BaseClas

CREATE CLASS ar_Cbo OF arClas as bc_Cbo FROM BaseClas

CREATE CLASS ar_Cnt OF arClas as bc_Cnt FROM BaseClas

CREATE CLASS ar_Edt OF arClas as bc_Edt FROM BaseClas

CREATE CLASS ar_Lst OF arClas as bc_lst FROM BaseClas

الان لدينا المجموعتين بشكل كامل،،،

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

فمثلا نحن نريد ان يكون BackStyle لكل الــ Labels المستخدمة Transparent

فهنا نذهب للاصل وهو BaseClas\bc_Lbl ونغير هذه الخاصية فيه فتلقائيا تنعكس على الفرع في arClas\ar_Lbl وبالتالي على النماذج التي استخدمت فيه

وقد نود أن تظهر بعض الخصائص في الفرع فقط فهنا نتوجه مباشرة للفرع ونعدل عليه، وعلى سبيل المثال وبما أننا أنشأنا arClas لتخدمنا في النماذج العربية اللغة فهنا يفيدنا ان تكون المحاذاة من اليمين الى اليسار، فنعدل خاصية الـ Alignment في arClas\ar_Lbl لتصبح Right لتنعكس بالتالي على كافة النماذج المستخدمة فيها

وهذا ينطبق على كافة الخصائص والاجراءات، بالاضافة اننا نستطيع ان نضيف لكل عنصر رئيسي او فرعي خصائص واجراءات كما فعلنا بالنماذج

تم تعديل بواسطه a.jallad
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

وهنا يتبقى علينا النموذج، فهو بالنهاية احد العناصر التي يمكن ان تستخدم كــ Class بل واهمها، خصوصا في حالة استحداث خصائص واجراءات مشتركة مثل اجراءات التنقل بين السجلات، الية حفظ البيانات، الية فتح واقفال الجداول المستخدمة، وحتى تنسيق النموذج من ناحية الالوان والمحتويات....

هذا وبعد انشاء النموذج وحفظه كــ Class يمكنكم جعله النموذج المعتمد عند انشاء نموذج جديد أي Standard Template

على النحو التالي:

  • من القائمة نختار Tools>>Options>>
  • ثم من شاشة الخيارات نختار Forms
  • ستجدون فيه Template Classes
  • نختار Form

والباقي كما في الصورة

post-113506-1240784197_thumb.jpg

  • ثم Set As Default

ولاتمام بقيمة المعلومة فيما يتعلق بانشاء الــ Class فهناك طريقة ثالثة قد تكون عملية نوعا ما :

وهي وضع عنصر أو كافة العناصر المرغوب فيها في نموذج وتحديد خصائص هذه العناصر والقيام بالخطوات التالية لتخزينها ضمن Class library

  • اختيار العنصر
  • الذهاب للقائمة واختيار File >> Save As Class
  • ثم اتمام العملية من ناحية خيارات الحفظ

ملاحظات اخيرة :

  • لا تضع ابدا مسار الملف كاملا عند كتابة الكود وخصوصا فيما يتعلق بالجداول فمثلا لا داعي لان نكتب use c:\MyFolder\MyData\MyTable وبدلا من ذلك حدد مسارات المجلدات المستخدمة في الملف الابتدائي للبرنامج بواسطة Set Path فبواسطة الامر Set Path To c:\MyFolder, c:\MyFolder\ MyData نحدد مسارات العمل الافتراضية للفوكس برو مسبقا فبالتالي يكفي وضع الامر Use MyTable لاجراء اللازم وفتح الجدول سواء اكان موجودا في المجلد الرئيسي او الفرعي
  • مع الـ Project Manager اعتقد اننا لسنا بحاجة للاكثار من المجلدات المستخدمة اثناء التصميم فهو كفيل بفرز الملفات المستخدمة بشكل واضح الا ان استدعى الامر غير ذلك
  • للعلم ايضا يخزن الــ Project Manager بياناته في جدول عادي ويأخذ الامتداد Pjx، ففي حال وان تعرض هذه الجدول للتلف فلا تأثير له على الملفات، فكل ما عليك فعله هو انشاء مشروع جديد ووضع الملفات فيه.

مع التحية،،

تم تعديل بواسطه a.jallad
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

ما شاء الله ، بارك الله لكم فى مجهودكم وزادكم علما

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

اهلا اخي عبدالمنعم وشكرا لك وهذا بعض ما عندكم

فقد أثريتم المنتدى بالكثير من المواضيع المفيدة في فترة لم أتمكن فيها من المشاركة لظروف عملي

متمنيا أن تسمح ظروفك وترجع وتشد حيلك بالمنتدى

مع التحية

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

الاخ .. عبدالله لا استطيع الا ان اقول لك وفقك الله .. وجزاك الله عنا كل خير ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

سلمك الله أخي أكرم ووفقك وجزاك أيضا كل الخير ان شاء

وان شاء الله قريبا سنتعمق في موضوع الــ Class أكثر

مع التحية

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

سلمت اخي الكريم واهلا وسهلا بك بيننا....ولا تترد في طرح أي سؤال حول الموضوع

تم تعديل بواسطه Shadowz
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

:thumb_up: شو هالحلاوة يا Shadows انا هلا وصلت للصفحة الرابعة من سلسلة بحثي في هذا المنتدى والله ان اوصي وبشدة بتثبيت هذا الموضوع وكذلك موضوع التقارير واذا كان فيك تتعمق في موضوع الكلاس يارييت لانه موضوع عن جد حلو كثير ولك مني +3 وانا بكل مشاركة امر فيها اشوف جهد متميز لا استطيع الا ان اقول الله يزيدك من علمو والله يعطيك العافية الف مرة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أهلا يا عصفور

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

وان شاء الله بحاول اتوسع بالموضوع في أقرب وقت ممكن

واذا عندك أي سؤال لا تتردد

مع التحية

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكووووووور اخي شبح

واريد ان اسال كيف اجعل الكود مخفي ضد برامج ريفوركس وما يشبهه وهل يوجد شبيه لهُ

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكووووووور اخي شبح

واريد ان اسال كيف اجعل الكود مخفي ضد برامج ريفوركس وما يشبهه وهل يوجد شبيه لهُ

العفو يا آسيا

وستجد ردي في موضوع الكراك

مع التحية

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

قمة الابداع اخي العزيز عبد الله بوركت

ما الذي تفعلة عندما تكون في قمة عطائك

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

مع امنياتي لك بدوام الصحة و العافية

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أهلا أخي علي ... كيفك وين هالغيبة ؟

الحمد لله أنك وجدت ما يفيد في الموضوع وشكرا على كلماتك الجميلة وهذا كله من ذوقك

مع التحية

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخوي Shadowz

مشكور على المعلومات القيمه

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

تحياتي للجميع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكــم ورحمـة الله وبركاتــه 
 وفقك الله .. وجزاك الله عنا كل خير 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جزاك الله كل خير 

ابداع وتألق وبساطة وموضوع قمة الروعة والاهمية 

يعطيك الله كل عافية وصحة جيدة وزادك من علمه وزادك نفعا للناس 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

العفو أخي الكريم

الله يعافيك  وسلمكم الله أجمعين

 

تم تعديل بواسطه a.jallad
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .