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

اكثر من موضوع مدموج ومن ضمنها باب النماذج

مثبّترائج
بدأه VFPman في 17 مارس 2008 · 171 رد · 72,638 مشاهدة · في قواعد بيانات Visual FoxPro
مشاركة: واتساب X فيسبوك تيليجرام
#76

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

أعتذر إخوانى الكرام وسامحونى وادعوا لى . وانصحوا الأخ مصطفى أن يبقى على سعادته .

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

والجديد سيكون فى بعض الأمور :

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

2- وفى كل الأحوال أى بعد الإضافة أو عدمها نمسح الذى كنا قد كتبناه وتمت إضافته عن طريق المربعات أى نجعل قيمة كل مربع نص لا شئ أى علامتين تنصيص ليس بينهما شئ

thisform.textboxname.value = ''

3- ذكرنا من قبل أن هناك جزئيات واسمها event نستعين بها فى تنفيذ الأمور : ومنها ما يتم تنفيذها بمجرد استدعاء الفورم مثل load ثم init ومنها ما يتم تنفيذه عند غلق الفورم مثل queryunload ثم destroy ثم unload والباقى تستدعيه بالطلب .

4- الخاصية الجديدة visible ومعناها (مرئى) وعند ربطها بـ object تجعله مرئيا إن كانت قيمتها t أو مخفى إن كان قيمتها f

thisform.objectname.visible = .t.

أو

thisform.objectname.visible = .f.

5- الـ event التى اسمها setfocus (ومعناها اجعل التركيز على ) أيضا استدعيناها لكى نجعل مربع النص الأول هو محل التركيز أى تكون مؤشرة الكتابة به عند بدء الفورم (من init) ثم وضعناها فى الأزرار . وأيضا بعد الضغط على أى زر نريد أن نمسح محتويات المربعات القديمة.

thisform.text1.setfocus()

6- عند البدء فى الإدخال يكون مربع النص الأول هو البادئ وبعد الكتابة وتضغط مفتاح enter تنتقل المؤشرة إلى المربع التالى وهكذا مع المربع الثالث . ولكن هناك مشكلة تركتها لحضراتكم لحلها . ألا وهى بعد الضغط على enter بعد المربع الثالث تنتقل المؤشرة إلى مفتاح (خروج) فإن ضغطت enter أغلقت الفورم لأن المؤشرة ستكون واقفة الآن على زر (خروج). والمطلوب أن تنتقل المؤشرة إلى مفتاح (أضف) بدلا من ذلك . فما هى الطريقة ؟

أيضا وجدت أن الفورم التى فى المشاركة السابقة بها class خاص بى مرة أخرى فأصلحت الفورم وأرفقتها أو بمعنى أدق تركتها فى المشروع الحالى لحضراتكم .

وإلى حضراتكم المثال :

forms.zip

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

اللهم علمنا ما جهلنا وانفعنا بما علمتنا

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

تم تعديل هذه المشاركة بواسطة عبد المنعم محمد عبد الخالق في 28 يونيو 2008 في 15:06

#77

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

الحمد لله انكم بخير الواحد في الفترة دي مش عارف يعمل اي شيء كل همي انتظركم بفارغ الصبر حتى اكتسب معلمومة جديدة والحمد لله انكم لم تتاخروا علينا بس انا مش عارف اعمل اي شيء حتى اطمئن عليكم لو من غير احراج رقم تليفونك حتى اطمئن عليكم على العموم رقم تليفوني 00966543240704

والشكر ايضا للأخ / محمود سمير لدعمه لنا .

#78

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

الأخ أحمد جزاك الله خيرا أنت والأخ إبراهيم وجميع الأخوة وأنا أتشرف بمعرفتكم والله والقرب دائما منكم ، وكيف يكون هناك حرج يا أخى الكريم فى إعطائكم رقم تليفونى فهذا شئ يشرفنى جدا . الرقم هو 0102006136 مصر . أى 002 قبله . وأى اتصال أرحب من كل قلبى به وياريت ولو حتى بالرسائل التليفونية .

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

أخى الكريم أهنئك لقربك من الأماكن التى يحبها الله ورسوله والقرب من رسوله . فأحسن الجوار . أنا أزور هذه الأماكن سنويا بفضل الله تعالى وأدعو الله ألا يقطعنى هذا .

وفعلا ماشاء الله على ظهور النجم الأخ محمود سمير فأجد اسمه متكرر فى مشاركات كثيرة جزاه الله خيرا .

ومرة أخرى أرجو سماحكم فوالله الأمر أكبر منى أعاننى الله وإياكم .

تم تعديل هذه المشاركة بواسطة عبد المنعم محمد عبد الخالق في 28 يونيو 2008 في 19:39

#79

السلام عليكم

مرحبا بعودتك اخونا عبد المنعم

ارجوا الله ان يعينك ويوفقك

بالمناسبة رقم تليفوني

002107138299

اعذروني لفترة 15 يوم لاني سأكون في زيارات عائليه وسأذهب ايضا الي الاسكندريه واي استفسار لا حرج من الاتصال في اي وقت

الحمد لله الذي هدانا لهذا وما كنا لنهتدي لولا ان هدانا الله

450x250_1.gif

طريقك لاحتراف برمجة قواعد البيانات باستخدام Visual FoxPro

#80

السلام عليكم

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

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

post-148605-1214758019_thumb.gif

#81

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

الله يسلمك أخ إبراهيم ويسلم جميع الأخوة الكرام .

لماذا أخونا الحبيب لم تترك رقم تليفونك ؟

أنت ودود ونحب ودك ونتمنى دوامه ودوام ود كل الأخوة الأحبة فى هذا المنتدى .

اللهم اجمعنا جميعا فى جنتك .

وإن شاء الله لو تغيبت لأية ظروف سوف أجد نفسى ملزما بالدخول إلى المنتدى إن وصلتنى رسالة بالتليفون لأى استفسار . وأنا والله أحاول عدم التغيب . ولكن ليس كل ما يتمناه المرء يدركه ولا تسير الرياح حسب ما تشتهيه الأنفس . فالحمد لله .

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

شكرا وألف شكر . والسلام عليكم ورحمة الله وبركاته . أخوكم عبد المنعم

تم تعديل هذه المشاركة بواسطة عبد المنعم محمد عبد الخالق في 29 يونيو 2008 في 20:20

#82

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

الأخوة الكرام كيف حالكم ؟

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

اليوم سنتعامل مع شكل آخر (object) مما هو موجود على أرضية الفورم ويفيد فى الاختيار من بين عدة بنود معروفة مسبقا .

وهو تماما مثل مجموعة الاختيارات (OptionGroup)السابق الكلام عنها فى المشاركة السابقة .

موضوع اليوم هو combo box والكلام عنه يطول قليلا . وسنتناول إن شاء الله بعض المفيد عنه فوسعوا صدوركم .

سيشمل الكلام بعض الخصائص الجديدة أيضا .

بالنسبة لهذا الكمبو فإن معطياته تكون متعددة : منها قيم تعطيها أنت أو بنود مصفوفة أو حقول جدول أو ملفات أو جملة استعلام وغير ذلك .

وأفضل ما يمكن التعامل به عندى شخصيا : قيم أو حقول أو مصفوفة . ولم يحدث أن احتجت أكثر من ذلك من قبل

كيف ننشئ الكمبو ؟ تابع الصورة التالية :

post-154340-1214845255.jpg

وعند إنشائه يكون من اليسار إلى اليمين . كيف نجعله من اليمين لليسار ؟

post-154340-1214845476.jpg

كيف ندخل معطياته ؟

post-154340-1214845649.jpg

واليوم سنكتفى بالاختيار رقم 1 وهو القيم value أى أننا سنعطى نحن القيم .

كيف ندخل القيم ؟

نكتبها هنا فى rowsource وبين القيم فاصلة :

post-154340-1214845954.jpg

ولإعطائه اسما نتعامل به معه بعد ذلك :

post-154340-1214845801.jpg

ولكن عند تنفيذ الفورم لأول مرة سيكون هذا الكمبو فارغ . لذا نحتاج أن نجعله يبدأ بإحدى القيم الموجودة به التى أعطيناه إياها .

thisform.who.listindex = 1

هذا بفرض أننا قد أسميناه who وبفرض أننا نريده أن يبدأ بالقيمة الأول .

وأيضا عند التعامل أثناء كتابة الكود يكون كذلك . فمثلا إن أردنا قياس شرط :

if thisform.who.listindex = 1

بمعنى : إن كان المستخدم قد اختار القيمة الأولى ....... وهكذا .

وإلى حضراتكم الملف المثال وبه 2 فورم منفصلتان إحداهما للإضافة والثانية للبحث . وتطبيق الكمبو فى فورم البحث .

وأيضا ضمنت فى فورم الإضافة مربع نص تاريخ وأضفت خانة فى الجدول تاريخ .

combo.zip

إضافة بسيطة وهى جعل الحقول فارغة بعد كل عملية إدخال :

combo_new.zip

وأيضا فى المثالين تركت لحضراتكم واجبان :

ترتيب الانتقال بين الحقول عند الضغط على enter . أرجو الاهتمام والتفضل بشرح كيف يكون ذلك ؟

اللهم علمنا ما جهلنا وانفعنا بما علمتنا

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

تم تعديل هذه المشاركة بواسطة عبد المنعم محمد عبد الخالق في 30 يونيو 2008 في 21:56

#83

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

اخي واستاذي الفاضل / عبد المنعم

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

وهل الكود

if not empty(thisform.text1.value)

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

IF NOT EMPTY VAL(THISFORM..TEXT1.VALUE ) .AND. (THISFORM.TEXT4.VALUE ) ده تفكيري بس ظهر انه خطاء

اتمننى لك التوفيق ودوام الصحه ،،

#84

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

أخى وأستاذى الفاضل / أحمد عامر ,جميع الأخوة الفضلاء .

بالنسبة للحقل المفهرس لا يفضل أن تجعل فيه قيمة واحدة متكررة وإن كان هذا ممكن .

بالنسبة للبحث فى الملف المفهرس يفضل استخدام الأمر seek أو find والفارق فقط هو وضع علامات تنصيص مع find وهو أسرع فى البحث فى الملف المفهرس .

أما بالنسبة للإضافة فى الملف المفهرس بشكل مكرر فيمكن ذلك بالأمر :

set unique off

فهنا سيقبل القيمة نفسها أكثر من مرة . وعكس ذلك :

set unique on

لن يقبل تكرار القيمة . وهكذا معك حق .

بالنسبة للجمع بين الأمرين كما ذكرت : نقص جزئية بسيطة : جربها :

IF NOT EMPTY VAL(THISFORM..TEXT1.VALUE ) .AND. not empty (THISFORM.TEXT4.VALUE )

أى not empty كانت غير موجودة قبل مربع النص الثانى .

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

تم تعديل هذه المشاركة بواسطة عبد المنعم محمد عبد الخالق في 30 يونيو 2008 في 21:41

#85

السلام عليكم

أخي الفاضل عبد المنعم شكرا جزيلا على كل شيء و أعتذر على الرقم و هو :2130775195675

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

#86

الأستاذ عبد المنعم

أرجو ان يكون المانع فى تأخيرك خيرا

ملك الطغـــــــــــــاة عرينها إذ غـــــــــــــاب حيدرها الأشم

#87

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

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

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

وشكرا للكرام المتصلين والمشاركين بالمنتدى . ويبدو أن المنتدى ينتعش أكثر فأكثر بالكرام هؤلاء .

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

كما ندعو الله أن يطمئنا على الأخوة الذين لا يتثاقلون علينا بودهم أمثال الأخ بيشاى والأخ جلال السوهاجى . أين أنتم ؟

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

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

تم تعديل هذه المشاركة بواسطة عبد المنعم محمد عبد الخالق في 9 يوليو 2008 في 21:43

#88

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

رغم اشتياق حضراتكم للجديد إلا أننى أعتب على حضراتكم فى أنى تركت مشكلة بسيطة لجزئية كنا قد تناولناها من قبل . وتركتها على سبيل الواجب ولكن لم يبال أحد للأسف بمناقشتها ولم يحاول أحد حلها , وذلك من المشاركة السابقة .

فأرجو المراجعة والاهتمام كى أشعر بأن المتابع مستفيد أيضا ، وليس متابع وفقط .

سنتناول اليوم جزئية مريحة جدا برمجيا . مع الإبقاء على المشكلة ذاتها . راجيا من حضراتكم المحاولة ، وأنا معكم إن شاء الله تعالى .

فى مثالنا السابق وجدنا زر إضافة ينفذ مجموعة أوامر لإضافة بعد البحث فإن كان نتيجة البحث أن البيان هذا موجود من قبل ، هنا يظهر مفتاح إضافة آخر يستشيرك فى هل تضيف على أية حال أم لا .

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

أو فى عدة أماكن مختلفة من البرنامج كله باشتماله على العديد من forms .

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

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

إذن الأفضل بدلا من عمل جزئية تجميع لكل مادة مضروبا ذلك فى عدد المواد كم سطر سينتج ؟ وإن كان مثل الذى عملته بأن كان البرنامج لمدرسة الصنايع التى فيها اثنا عشر قسم كل قسم له مواده الخاصة فضلا عن مواد مشتركة بين الجميع .إذن عدد المواد مضروب فى 12 . لو تخيلت كم سطر ستكرر لكل جزئية ولو حتى بالنسخ واللصق لدب الملل فى ذهنك من متابعة سطور أنتجتها أنت شخصيا .

أطلت فى التقديم والشرح فلا تملوا ولكنى أحاول التقريب وتبيين الفائدة التى نحصل عليها من هذه الجزئية التى لا غنى عنها .

موضوعنا هو من القوائم أننا سننشئ method جديدة من قائمة form نختر new method

post-154340-1215641314_thumb.jpg

هنا تكون قد أضفت method جديدة تجدها فى قائمة methods و properties الخاص بالفورم هذه وتجد أن اسمها فى الأسفل .

كيف أستخدم هذه الـ method ؟

بعد إنشائها اغلق صندوق الحوار الذى كتبت اسمها به . وانقر على أرضية الفورم نقرتين . تنفتح نافذة الـ methods والـ properties الخاصة بهذه الفورم . مثل init و refresh والتى أضفناها من صنعنا وغيرهم .

ستجد هذه التى أنشأتها فى الآخر وفارغة وباهتة وبعد كتابة سطور بها أنها صارت غامقة وفى الأعلى .

وأيضا ستجدها فى نافذة properties فى النهاية أيضا . والدخول من هنا أو من هناك سواء .

ماذا أكتب فيها ؟

مجموعة الأوامر التى يتكرر طلب تنفيذها فى عدة أماكن أو فى عدة حالات أو من عدة أزرار .

ما صيغة تنفيذها ؟

بفرض أننا أنشأنا واحدة باسم toadd فتكون الصيغة كالتالى :

thisform.toadd()

وبهذا الشكل لم نمرر معاملات ولن نصعب الأمر حاليا . بل سنكتفى باستدعائها مثلها مثل init أو release أو refreshوغيرهم . والفارق الوحيد أنها من إنشائنا .

ماذا يتم تنفيذه بعد استدعائها ؟ أى إلى أين يذهب البرنامج ؟

اسمها عبارة عن سطر فى برنامج سيتم ترجمته إلى عدة أسطر يذهب ينفذهم ثم يعود لتنفيذ السطر التالى .

وهذا مهم لك جدا كمبرمج أن تعرف إلى أين يتجه برنامجك الآن ؟ وبعده إلى أين ؟ وأين مؤشر جدولك الآن ؟ وإلى أين سيذهب بعد تنفيذ هذا الأمر ؟ وهكذا من تشغيل خيالك البرمجى .

وإلى حضراتكم الملف المثال وتضمنت الفورم adding الشرح هذا .

New_Method.zip

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

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

تم تعديل هذه المشاركة بواسطة عبد المنعم محمد عبد الخالق في 10 يوليو 2008 في 01:22

#89

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

أخي الفاضل / عبد المنعم

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

الطريقه الثانية وهي من شريط الادوات توجد ايقونة الترتيب وبالضغط على shift ,وبالضغط على الخانة حسب الترتيب المراد .

#90

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

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

#91

السلام عليكم

أخي الفاضل عبد المنعم أين أنت أتمنى أن تكون بخير و تباشر الدروس

و الله الموفق و السلام عليكم

#92

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

موضوعنا اليوم إن شاء الله تعالى هو cobmo box و الـ array :

تناولنا فى المرة السابقة فى طريقة التعامل مع الـ combo box طريقة عمل new method :

واليوم إن شاء الله سوف ننشئ new property .

ما الفارق بين method و property ؟

الـ method وظيفة مستقلة وتستدعيها كما تستدعى refresh و release وغيرهم .

والـ property خاصية وتستدعيها على object آخر وغير مستقلة . كما تستدعى visible و enabled و width وغيرهم ممن نستدعيهم مع object آخر يستندوا عليه ويعملوا عليه .

فاليوم سننشئ property جديد أى خاصية جديدة وستكون فى شكل مصفوفة .

وهذا يستدعينا أن نجمل بسرعة ماهية المصفوفة .

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

1- سعة خيالك ودقة متابعتك لهذه السعة .

2- مقدرتك على متابعة المتغيرات التى أنشأتها وخط سيرها .

3- وكذلك أسماء الحقول فى الجدول وعلى أى منها يقف المؤشر حاليا وأين سيذهب بعد تنفيذ الأمر هذا .

4- دقة منطقك فى تخيل خطوات التنفيذ وتسلسلها لأداء ما تخطط له

وعلى ذكر المتغيرات : بغض النظر عن نوعها وطولها فأنتم تعرفون هذا جيدا ، ولكن مع نوع المصفوفة array نتوقف قليلا :

المصفوفة هى عبارة عن مخزن متغير واحد لعدة محتويات . وهذا المخزن الواحد باسم واحد وترقيم مختلف. كأن تقول box1 و box2 وهكذا المتغير box منه واحد واثنين ، فى رقم واحد نخزن شئ مختلف عن boxرقم اثنين .

تسمية المصفوفة تكون arrayname[] وبين هذين الضلعين نضع عدد المخازن لهذا الاسم ، بمعنى إن قلنا arrayname[3] فمعنى هذا أنها ستحوى ثلاث مخازن arrayname[1] وarrayname[2] و arrayname[3] وهكذا تكون التسمية .

ما هى طريقة إنشاء المصفوفة ؟

Dimension arrayname[5]

أى أعلنا عن مصفوفة اسمها arrayname وعدد مخازنها خمسة .

ماهى طريقة ملء مخزن فى المصفوفة ؟

Arrayname[1]=' sadfasfdasdf '

ما هى طريقة استخراج محتوى مخزن رقم 2 بالمصفوفة ؟

? arrayname[2]

أو تخصيص المحتوى لمربع نص :

Thisform.text1.value = arrayname[2]

ما هى طريقة شرط المخزن بالمصفوفة ؟

If arrayname[1] = 'sdsdfsdf '

وهناك دوال كثيرة للتعامل مع المصفوفة منها لنسخ مصفوفة فى أخرى ومنها لمسح بند فى مصفوفة ومنا لنسخ مصفوفة إلى أخرى ومنها لفهرسة مصفوفة ومنها لإضافة بند إلى مصفوفة وغيرهم إن ظهرت حاجة لهم أوردناهم إن شاء الله تعالى .

متى تحتاج إلى المصفوفة ؟

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

ويمكن أن يكون المصفوفة عندئذ من نوع public أى يراها البرنامج فى كل الأماكن .

Public array arrayname[5]

اليوم سنعمل مصفوفة array وتكون هى مصدر الـ combo box . وذلك عن طريق إنشاء property جديدة تكون بمثابة المصفوفة ، وتكون هذه الـ property هى اختيارات الـ combo box .

الخطوات :

1- انشئى property جديدة واسمها مثلا combo_array[1]

كيف تنشئها ؟ من قائمة form وهى أول اختيار . سينفتح لك صندوق اكتب الاسم ثم add ثم close .

2- فى الـ form نفسها اختر load وهى event كما عرفنا .

وفيها يتم كتابة الأوامر التى تريد الـ form أن تحملها عند تحميل الـ form نفسها .

وفيها عرف الـ array واملأها : كالتالى :

Dimension this.combo_array[5] && عرف مصفوفة بعدد خمسة مثلا
with this
	 .combo_array[1] = 'company name 1'
	 .combo_array[2]= 'company name 2'
	 **   وهكذا مع العدد الذى تريد فى مصفوفتك من عناوين الشركات مثلا
endwith

لاحظ :

1- أننا استعملنا this ولم نقل thisform والاثنين صحيحان ولكن لأننا فى الفورم نفسها لم نحتج لذكر form ويمكن الاكتفاء بكلمة this .

2- التعامل مع بنود المصفوفة صار مثل التعامل مع أى property فتجد قبله نقطة ويتواجد بين with و endwith كخواص أى object فى الفورم .

3- فى نافذة properties وأنت تشير إلى الـ combo الذى صنعته غير الخصائص التالية :

rowsource = thisform.combo_array
rowsourcetype = array

وهكذا ربطنا بين الـ array والـ combo بحيث أنها تصبح مصدر له .

4- الخطوة التالية تبقى طلب أو الإشارة لأى عنصر فى المصفوفة وسيكون بالطريقة السابق ذكرها مع زيادة أن يكون التعامل معها على أنها أيضا property إضافة إلى أنها مصفوفة .

كيفية الإشارة لعنصر فى المصفوفة : يكون ذلك بالإشارة إلى الفورم نفسها أولا thisform ثم اسم المصفوفة ثانيا ومعه رقم العنصر كالتالى :

فرضا عندك حقل text على ظهر الـ form اسمه company_name وستجعل محتوى الـ combo يحل به :

company_name = thisform.combo_array[1]

أى اجعل محتوى مربع النص هذا يساوى محتوى الـمصفوفة رقم 1

وهكذا الإشارة إلى باقى أو إلى جميع عناصر الـ combo

والمطلوب من حضراتكم عمل مثال وإرفاقه لمناقشته سويا .

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

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

تم تعديل هذه المشاركة بواسطة عبد المنعم محمد عبد الخالق في 24 يوليو 2008 في 10:09

#93

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

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

#94

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

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

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

وأنا تحت أمرك ولن أتأخر قدر استطاعتى .

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

#95

السلام عليكم

حمد لله على سلامتك اخي عبد المنعم

الدرس جميل جدا وفقك الله واعانك

الحمد لله الذي هدانا لهذا وما كنا لنهتدي لولا ان هدانا الله

450x250_1.gif

طريقك لاحتراف برمجة قواعد البيانات باستخدام Visual FoxPro

#96

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

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

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

1- مهارة متابعة مكان المؤشر الآن .

2- قدرة استخدام المتغيرات والمهارة فى السيطرة عليها .

3- منطق البرمجة فى ذهنك .

وغير ذلك من إتقان الأوامر وتتاليها ومن الممكن أن تكتب أوامر لتؤدى مهمة ما ويكتب غيرك سلسلة أخرى ولكنها تؤدى نفس المهمة ، والمهم أنه فى نهاية الأمر يتم إنجاز المهمة .

والمتغيرات ( حقول الذاكرة ) هى عبارة عن وسيلة هامة للمبرمج يؤدى بها ما شاء .

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

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

وهذه الحقول لها أنواع وأطوال مثل حقول الجدول فمنها الرقمى والحرفى والتاريخ والمنطقى .

والمصفوفة هى عبارة عن وعاء من نفس الفصيلة ولكنه وعاء يسع عدة أوعية تحت مسمى واحد .

أى مثل كرتونه بها عدة علب كل علبة بها محتوى مختلف والكل فى كرتونة واحدة .

والاحتياجات إلى المصفوفة كثيرة جدا وفى مواطن كثيرة جدا . وإتقانها مطلوب للمبرمج .

وهى ليست صعبة بالمرة . وبساطتها إجمالا فيما يأتى وهو يعد اختصار لما سبق :

إعلانها

Dimension arrayname[5]

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

إذن سيكون عندى مخزن اسمه arrayname[1] و arrayname[2] و هكذا .

وتخزين قيمة فى داخل أى مخزن منهم يكون بكل بساطة :

Arrayname[1]='asasdfasdf '

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

نرجع لموضوعنا اليوم وهو موقع المؤشر فى الجدول .

ما أهمية هذا الموضوع ؟

إن بعض الأوامر فى الفوكس تؤدى بالمؤشرة إلى الحركة عن موضعها ، وهذا إن لم تعرفه وتتابعه بخيالك كانت النتائج مختلفة عن المتوقع .

فكم من مرة فى بدايتى عندما كنت أعطى الأمر set filter مثلا وتكون النتيجة مختلفة فى المرة التالية عن المرة السابقة وهكذا أمر البحث locate مثلا الذى يذهب بالمؤشرة إلى نهاية الملف .

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

وهنا تظهر الحاجة إلى معرفة أوامر الحركة : مثل goto و skip وأيضا معرفة أثر كل أمر ماذا يفعل بالمؤشرة . ويفضل لكل متعلم أن يعمل جدول به خمسة سجلات مثلا فالذى يتم على خمسة يتم على خمسين ألف ويعطى أوامر ويتابع فى الـ status bar (مسطرة الحالة) موقع المؤشرة .

وأيضا دراسة موقع المؤشر يستلزم معرفة بعض الدوال الخاصة بالسجلات : وهى قليلة :

مثل()eof أى نهاية الملف و bof() أى بداية الملف و recno() أى السجل الحالى و reccount() أى عدد سجلات الجدول المفتوح وهناك المتغير _tally الذى يخزن تلقائيا أن الجدول غير فارغ بعد أى أمر حركة .

وفى عجالة سنربط كل ما فات كالتالى :

للذهاب إلى السجل رقم خمسة :

Goto 5

ويمكن أن يتم تخزين رقم السجل الحالى فى متغير ذاكرة :

Var = recno()

أى أن رقم السجل الحالى سوف يتم تخزينه فى متغير اسمه var وممكن حينئذ الذهاب إليه مرة أخرى عن طريق المتغير :

Goto var

الدالة eof() معناها أن المؤشرة تقف الآن بعد آخر سجل ، وليس هناك بيانات . ونحتاجها فى وقف الحركة التى بدأناها إن وصلنا إلى نهاية الملف : عن طريق الشرط :

if eof()

الأمر skip معناه اقفز بمقدار سجل واحد . فإن كتبت رقم بعده :

skip 5

أى اقفز إلى خمس سجلات تالية .

skip - 1

أى ارجع سجل واحد

ويمكن الجمع بين skip والدالة eof() للتحكم فى ألا يقفز المؤشر بعد النهاية فيعطى رسالة خطأ ويوقف البرنامج ، فهنا يلزم التحكم بالحركة كالتالى :

If not eof()

وأيضا فى الحركة للخلف

If not bof()

متى نحتاج إلى skip ؟

فى الحلقات التكرارية التى نطلقها للتعامل مع الجدول سجلا سجلا واحدا تلو الآخر .

عندما نعطى الأمر locate أى ابحث ، إن وجد المبحوث عنه وقف عنده وإلا وقف فى eof() وذهب بعدها ولا يصح أى أمر بعد ذلك إلا بإعادة تحريك المؤشر .

وعندما يقف المؤشر على الذى وجده إن نجح البحث ربما يكون هناك سجل آخر ينطبق عليه البحث ، وللذهاب إليه نعطى الأمر continue فيذهب إلى السجل الذى ينطبق عليه البحث ، وإن لم يكن هناك سجل ينطبق عليه البحث ذهب أيضا إلى eof() .

الأمر goto top يذهب بالمؤشرة إلى أول سجل بالملف وعكسه goto bottom الذى يذهب إلى نهاية الجدول .

يبقى أمر واحد يحضرنى وهو أنه يمكن وضع أى أمر تحريك للمؤشرة فى زر على أرضية form .

ونصعب الأمر قليلا :

فى الفورم نحتاج إلى سهولة التحرك بين السجلات السابق والتالى . وهنا سندخل فى event التى اسمها keypress وهذا بالنقر على أرضية الفورم نقرتين . وندخل كود نجعل مفتاح السهم الأعلى يذهب إلى السجل السابق ومفتاح السهم لأسفل يحرك المؤشرة للسجل التالى وهكذا . وهنا نتعرف على كود المفتاحين ، حيث إن لكل مفتاح رقم كودى ، والضغط عليه يتم ترجمة المدخل إلى الرقم المناسب لهذا المفتاح ، ووجود هذا الكود فى جزئية keypress أى (ضغطة مفتاح( فضغطة مفتاح السهم تحرك المؤشرة كما ذكرنا . وهذا كالتالى :

arrows.zip

وهذه السطور إن وضعتها فى الـ event التى اسمها keypress فى أى فورم ستمكنك من التحرك بمفاتيح السهم لأعلى والسهم لأسفل بمقدار سجل واحد لأعلى ولأسفل حسب المفتاح . ورقم كود مفتاح السهم لأعلى هو 5 والمفتاح لأسفل رقمه 24 والمتغير nkeycode هو الذى يستقبل ضغطة المفتاح ويمرره إلى keypress event

تم الجمع بين الأوامر السابقة من تحريك المؤشرة skip والدوال eof() و bof() و goto

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

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

تم تعديل هذه المشاركة بواسطة عبد المنعم محمد عبد الخالق في 12 أغسطس 2008 في 23:21

#97

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

اليوم إن شاء الله تعالى سأسوق إلى حضراتكم مثال على أزرار التحرك على الفورم للتحرك فى ملف جدول البيانات .

وبما أننا وضعنا الأزرار على فورم فسنتعامل مع بعض الأمور نذكر منها ما يلى :

الآن المفروض أن يكون قد تكون لدينا ولو مفهوم بسيط عن الـ method والـ event :

الأول : إن الـ method عبارة عن مجموعة أوامر داخل اسم واحد وتستدعيها باسمها كالتالى :

Thisform.release

Thisform.refresh

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

أما الـ event فلا تستدعيها بل هى من اسمها نعرف وظيفتها . فاسمها حادثة ، أى نضع مجموعة أوامر فى داخل هذه الـ event يتم تنفيذها عندما يحدث كذا ، كما هو الحال فى مثالنا هذا : استخدمنا keypress ووضعنا فيها عدة أوامر يتم تنفيذها عندما يحدث الـ keypress هذا . والمعنى ضغطة مفتاح . أى سوف يحدث كذا ( هذه الأوامر) عند الضغط على المفتاح الذى حددناه ( وفى مثالنا حددنا مفتاح السهم لأعلى ورقمه 5 ومفتاح السهم لأسفل ورقمه 24 . والـ event التى اسمها keypress تقف وتتابع ضغط المفاتيح وعندما يقع نظرها على المفاتيح المذكورة تنفذ الأوامر التى بداخلها ( وفى مثالنا : الحركة بين السجلات لأعلى ولأسفل بمقدار سجل واحد فى أى اتجاه )

أيضا يمكننا التفريق بين الـ method والـ event من نافذة properties بأن الأولى لها أيقونة خضراء والثانية لها أيقونة صفراء .

أما النوع الثالث فى هذه النافذة وله أيقونة يد تشير بإصبع فهى للخواص properties .

وقد استخدمنا فى مثالنا بعضها , مثل alignment التى تحدد التنسيق ، خصصنا بها مربع النص الخاص بالاسم وجعلناها تظهر محتواها من right اليمين .

ومنها أيضا tabstop وجعلناها f أى false للأزرار بحيث إن التنقل بين الموجود على أرضية الفورم لا تشملهم أى لا تنتقل إليهم المؤشرة عند التنقل بين الـ objects التى على أرضية الفورم .

وأيضا خاصية enabled أى ممكنة أم لا وقيمتها أيضا f لمربعات النص أى لا يمكن التعديل فيها .

وخاصية disabledbackcolor أى لون الذى جعلت خاصية الـ enabled له f وتريد تحديد لون خلفيته .

وعكسها disabledforecolor لتحديد لون الواجهة للذى enabled تساوى f .

وأيضا لاحظ استخدام الـ method التى اسمها refresh بعد أى أمر انتقال فى الأزرار وهذا لإعادة عرض الفورم حسب السجل الجديد . ولم نضع فيها أوامر بل اكتفينا بالمبنى داخلها .

واستخدمنا method أخيرة اسمها release فى زر الخروج . وأيضا لم نضع فيها أوامر.

والآن إلى حضراتكم المثال :

motion.zip

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

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

تم تعديل هذه المشاركة بواسطة عبد المنعم محمد عبد الخالق في 16 أغسطس 2008 في 13:32

#98

أستاذ عبد المنعم أرجو منك ألا تتأخر عنا نحن والله نتابع شرحك اللذيذ بشغف و ياريت لا تأيئس منا وبين الحين و الأخر |أعطينا نغزة لنصحو ونفوق :blush:

تلميذك

عمر

ملك الطغـــــــــــــاة عرينها إذ غـــــــــــــاب حيدرها الأشم

#99

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

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

وهى الخطوة الثالثة بعد (اسرع طريق لتعلم البرمجة) و (برنامج الخطة الدراسية)

للتعرف على اللغة بشكل جيد ان شاء الله.

post-167987-1218908664_thumb.jpg

post-167987-1218908685_thumb.jpg

Fayed_ESHOP.zip

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

والله الموفق

تم تعديل هذه المشاركة بواسطة PWCT Maker في 16 أغسطس 2008 في 20:45

#100

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

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

(للأخ عمر : كما ترى حضرتك ، المشاركتان السابقتان عدد التحميل للمثال فى الأولى 5 مرات والمثال فى المشاركة التالية صفر . وتقول هناك متابعة !!! وقرأت فى مشاركة أحد الفضلاء اللوم والتعنيف على عدم وجود شرح ولا أمثلة ومطلوب تبويب وكذا وكذا . ولا أدرى هل يطالعون المنتدى ؟ أم فقط ينتقدون ؟ )

استخدمنا أيضا خاصية cancel وربطناه بمفتاح (خروج) وهنا جعلنا قيمته t أى true ومعنى هذا أن مفتاح الخروج هذا سيكون مساويا للضغط على مفتاح escape فى اللوحة . أى أنه بالضغط على أحدهما ستخرج من الفورم وتغلقها .

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

تكلمنا عن الـ event التى اسمها keypress وضبطناها أن تستجيب عند الضغط على مفتاحى السهم . ومن الممكن أيضا استخدامها مع مفاتيح أخرى . والأغلب فى الاحتياج فى رأيى هو مفتاح enter ورقمه 13 .

ولكن متى نحتاج إليه ؟

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

كيف يتسنى لنا ذلك ؟

عند النقر مرتين على مربع النص تنفتح نافذة الـ methods والـ events التى يمكن رب مربع النص بها . فنختار keypress ونكتب بها الأوامر المطلوبة .

والمتغير nKeyCode هو المسئول عن ترجمة المفتاح المضغوط ولذلك نقيس عنده .

هنا استعملنا بعض الدوال :

الدالة Empty ومن معناها (فاضى) نعرف وظيفتها أى أنها تقيس إن كان هذا المتغير فاضى ( ليس به مدخلات أو قيمة )

الدالة val ومعناها (قيمة) أى قيمة المدخل النصى تصبح رقمى بهذه الدالة . أى تحولها من نص إلى رقم .

استخدمنا علامة التعجب ! وهى تساوى not أى ليس . و!empty معناها ليس فارغ .

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

لاحظ أننا استخدمنا متغيرات ( هنا مربعات النص) لتستقبل القيم المدخلة ثم بعد ذلك أضفنا سجل فاضى وبدلنا محتوياته بمحتويات هذه المربعات . وهذه مفيدة فى أى عملية قياس للبيانات قبل إدخالها إلى الجدول .

هناك أيضا ملحوظة أخرى وهى طريقة الدقة فى الإشارة فى الفوكس : table1.salary أى الجدول الذى اسمه table1 ومنه الحقل الذى اسمه salary وهذه الطريقة للدقة فى الإشارة للمطلوب وعدم تداخله أو تشوشه مع غيره .

thisform.text1.Value = ''

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

وإلى حضراتكم الملف المثال :

ente_key.zip

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

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

تم تعديل هذه المشاركة بواسطة عبد المنعم محمد عبد الخالق في 16 أغسطس 2008 في 22:31

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