قواعد المشاركة في المنتدى

(قسم الاعلانات) الموضوع:عيش حياة الملوك بكومبوند سكاي كوندوز 01153211799 بواسطة: (مسوق كوم) :: (قسم الاعلانات) الموضوع:الرأس والكتفين أسفل بواسطة: (evapattern) :: (قسم الاعلانات) الموضوع:شركة تاج المملكة للخدمات المنزلية بالرياض 0502209026 بواسطة: (انجى) :: (قسم الاعلانات) الموضوع:عرض بمناسبة شهر رمضان الكريم جهاز حضور وانصراف موديل K50 بواسطة: (lamst) :: (قسم الاعلانات) الموضوع:تطبيق سيارتك تطبيق يوفر جميع خدمات السيارات على الهواتف الذكية بواسطة: (اسامة الا) :: (قسم الاعلانات) الموضوع:مؤسسة إبراهيم الشمري 0500331591 متخصصون في إنتاج المنتجات الخرسانيه بالرياض بواسطة: (birtane) :: (قسم الاعلانات) الموضوع:أقوى عروض أجهزة كاشفات المعادن و الذهب و الكنوز الدفينة و المياه الجوفية بواسطة: (اسامة الا) :: (قسم الاعلانات) الموضوع:تأسيس شركة في تركيا من الخارج بواسطة: (سلام العتيبي) :: (قسم الاعلانات) الموضوع:شركات تشطيب ، اقل وقت تنفيذ ، عقد ، ضمان 01277166796 بواسطة: (زياد طارق) :: (قسم الاعلانات) الموضوع:تشطيب شاليه ، اقل وقت تنفيذ ، عقد ، ضمان01277166796 بواسطة: (تهاني سام) :: (قسم الاعلانات) الموضوع:كشف تسربات المياه - البيوت بواسطة: (انجين محمد) :: (قسم الاعلانات) الموضوع:وحدات حمام خشب. عروض متنوعة 01270001596 بواسطة: (juanagogo) :: (قسم الاعلانات) الموضوع:تكلفة تشطيب شقة 100 متر ،اقل وقت تنفيذ ،عقد ، ضمان01277166796 بواسطة: (تهاني سام) :: (قسم الاعلانات) الموضوع:تصميم غرف ملابس ، اتصل لعمل معاينة 01270001596 بواسطة: (عفاف امير) :: (قسم الاعلانات) الموضوع:معرض وحدات حمام .عروض متنوعة 01270001597 بواسطة: (juanagogo) :: (قسم الاعلانات) الموضوع:مقطورات ثلاجة للبيع بحالة مميزة وأسعار تضمن لك أقل تكلفة للشراء بواسطة: (برادات وشاحنات) :: (قسم الاعلانات) الموضوع:للبيع برادة شيمتز ألماني أصلي مع مبرد ثيرموكنج sl200 e موديل 2004 بواسطة: (برادات وشاحنات) :: (قسم الاعلانات) الموضوع:اجهزة مطابخ بلت ان عروض فضية 01110060597 بواسطة: (شريهان سمير) :: (قسم الاعلانات) الموضوع:عرض خاص للباحثين عن براد استعمال بسيط وبسعر مناسب ؟ بواسطة: (برادات وشاحنات) :: (قسم الاعلانات) الموضوع:تكلفة تشطيب شقق ، اقل وقت تنفيذ ، عقد ، ضمان 01277166796 بواسطة: (تهاني سام)


راديو القرآن

المواضيع المثبته: (قسم الدروس و الدورات) الموضوع:برمجة بصمة الاصبع مع الدوت نت Microsoft FingerPrint Reader بواسطة: (FunctionSys) :: (منتدى الكتب الالكترونية) الموضوع:موقع لتحقق من وجود الكتاب الذى تبحث عنه بواسطة: (يوسف) :: (القسم المفتوح) الموضوع:لقاء صحفى بواسطة: (ramies) :: (منتدى أنظمة الشبكات وأمنها) الموضوع:موسوعة كتب واسطوانات تعليم الشبكات Networking بواسطة: (مرحبا الساع) :: (منتدى الكتب الالكترونية) الموضوع:كتاب لبرامج مصممة بالفيجوال مع أكوادها (الجزء الثاني) بواسطة: (First Star) :: (قسم الـ portable) الموضوع:أفضل برامج مفيدة للكمبيوتر وتعمل Portable اي بدون تنصيب بواسطة: (أبو ليان) :: (كتب عن VB.NET) الموضوع:مكتبة مرفقات الدوت نت (المحيط العربى) بواسطة: (alaa gomaa) :: (منتدى مبرمجي ASP) الموضوع:تحزين سجلات داخل ملفات اكسل و xml وورد ..إلخ بواسطة: (عبدالله جابر شقليه) :: (منتدى الكتب و المقالات) الموضوع:هل فكرت يوما أن تستغني عن شريط أوامر الأكسيس ؟ بواسطة: (alasomed) :: (قسم التعاميم والشكاوي) الموضوع:صفحة منتديات المحيط العربي على الفيس بوك بواسطة: (ramies) :: (منتدى مبرمجي لغة جافا JAVA) الموضوع:درس : الاستثناءات في جافا Exceptions بواسطة: (nardien28) :: (منتدى ADO.NET العام) الموضوع:الكامل في قواعد البيانات مع VB.net بواسطة: (المهندس عدي) :: (منتدى Microsoft Excel) الموضوع:شرح الفيجوال بيزيك للمتوسطين vba بواسطة: (hs889) :: (قسم التعاميم والشكاوي) الموضوع:هنيئا للشعب المصري بواسطة: (صهيب جاويش) :: (منتدى Microsoft SQL Server) الموضوع:مراحل تصميم قاعدة بيانات ناجحة بواسطة: (m.atassi) :: (منتدى مبرمجي Microsoft Visual VB.NET) الموضوع:الادوات الجديده Controls فى الدوت نت بواسطة: (alaa gomaa) :: (منتدى مبرمجي لغة جافا JAVA) الموضوع:برنامج للموبايل بلغة الجافا للبحث على جوجل بواسطة: (Doctors) :: (Oracle قسم قواعد البيانات أوراكل) الموضوع:تفقيط الأرقام للغة العربية تحت بيئة oracle pl sql بواسطة: (adnan_som) :: (Oracle قسم قواعد البيانات أوراكل) الموضوع:اعداد و تنصيب اوراكل 9i ويندز NT/2000/XP بواسطة: (oracle_egypt) :: (منتدى أجاكس(Asynchronous JavaScript and XML)) الموضوع:إستخدام Web Services مع ASP.NET AJAX بواسطة: (يوسف جميل جادالله)

عدد الصفحات : 6  1  2  3  4  5   > » إضافة رد إضافة موضوع جديد

> دورة تعليمية في تصميم دليل هاتف في دلفي
Bookmark and Share
تقييم الموضوع Label معدل التقيم:0
مشاركةالاثنين,13/محرم/1426 هـ,09:23 مساءً
المشاركة #1

نائب منتديات المحيط العربي
الرتبة في المنتدى:عقيد



المجموعة: الإدارة
المشاركات: 701
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:سوريا
رقم العضوية: 15





الأخوة الأكارم ..


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

المطلوب من أجل الاستفادة من الدورة الالمام بأساسيات الدلفي

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

أرجو المتابعة والتفاعل ..

مع تحياتي


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالاثنين,13/محرم/1426 هـ,09:55 مساءً
المشاركة #2

نائب منتديات المحيط العربي
الرتبة في المنتدى:عقيد



المجموعة: الإدارة
المشاركات: 701
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:سوريا
رقم العضوية: 15



الدرس الأول



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

البرنامج هو برنامج بسيط جداً عبارة على دليل هاتف بسيط ، يتم تخزين الاسم - الكنية - العنوان - هاتف المنزل - هاتف العمل - الفاكس - المحمول - البريد الالكتروني - الموقع - ملاحظات

لن نعتمد على قواعد البيانات بل سنتعامل مع ملف نصي عادي

المطلوب من البرنامج : حفظ واستعراض الأسماء - البحث وفق أي حقل

إذاً .. دعونا نبدأ بالعمل :

نشغل برنامج دلفي وسيكون أمامنا الآن مشروع جديد به فورم فارغ طبعاً

سننجز القسم الأول من البرنامج ( تصميم الشكل) :
بعد وضع كلفة الحقول .. نستخدم زر BitBtn من مجموعة Additional .. نضعه ثم نعين خاصية Kind تساوي bkClose
ثم نغير الـ Caption إلى إغلاق (هذا الزر سيقوم الآن بإغلاق الفورم فوراً دون الحاجة إلى كنابة كود الإغلاق)
سيبدو الفورم كما يلي بعد الانتهاء من تصميم الشكل :


وهذا هو الملف مرفق


الملفات المرفقة
 Tel.rar ( 3.16ك ) عدد مرات التنزيل: 5059


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالثلاثاء,14/محرم/1426 هـ,11:12 مساءً
المشاركة #3

نائب منتديات المحيط العربي
الرتبة في المنتدى:عقيد



المجموعة: الإدارة
المشاركات: 701
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:سوريا
رقم العضوية: 15



الدرس الثاني


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

تعريف الأنماط الخاصة بالبرنامج :
1- يتم وضع تعريف الأنماط الخاصة بالبرنامج ضمن تعريفات كلمة Type الموجودة في أعلى Unit1
2- يأخذ تعريف نمط جديد مؤلف من عدة سجلات هذه الصيغة :

كود:


MyType = Record
Rec1 : Type ;
Rec2 : Type;
.
.
end;


3- بالنسبة لحالتنا سنسمي النمط الجديد PhoneCard وسيتم تعريفه كما يلي :

كود:


phoneCard = Record
FName,LName,Address : string;
HomeNo,JobNo,FaxNo,Mobile : string;
Email , Page, Rem : string;
End;



من أجل التعامل مع عدد من السجلات المرتبة يفضل استخدام تقنية اللوائح المترابطة وهي تقنية مهمة جداً في دلفي سيتم شرحها الآن بالتفصيل :
اللوائح المترابطة :تعتمد هذه التقنية على ربط مجموعة من أنماط السجلات مع بعضها البعض بواسطة متحولات من النمط مؤشر ، فما هو نمط المؤشر ؟؟
المؤشر : هو نمط معطيات يتم استخدامه لتخزين عنوان في الذاكرة أي أنه يدل على عنوان كائن ما في الذاكرة ، حيث يمكننا استخدام هذا العنوان للتعامل مع الكائن المعنون مباشرة
>> يتم تعريف متحول من النمط مؤشر لأحد الأنماط بوضع إشارة ^ قبل النمط
>> يتم اتخزين قيمة مؤشر في متحول بوضع إشارة @ قبل اسم الكائن المراد عنونته في متحول المؤشر
>> يتم التعامل مع الكائن المخزن في متحول من خلال وضع إشارة ^ بعد اسم المتحول من النمط مؤشر
مثال :

كود:


var
X, Y: Integer; // X and Y are Integer variables
P: ^Integer; // P points to an Integer
begin
X := 17; // assign a value to X
P := @X; // assign the address of X to P
Y := P^; // dereference P; assign the result to Y
end;


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

كود:


New(VarPointer)



مثال :

كود:


type
PListEntry = ^TListEntry;
TListEntry = record
Next: PListEntry;
Text: string;
Count: Integer;
end;
var
List, P: PListEntry;
begin
...
New(P);
P^.Next := List;
P^.Text := 'Hello world';
P^.Count := 1;
List := P;
...
end;




بناءً على ما تقدم سنقوم بتعريف نمط جديد من نوع مؤشر إلى النمط PhoneCard سنسمية PhonePointer
أيضاً سنقوم بتعديل النمط phoneCard وإضافة سجلان عليه هما Next و Prev من النمط PhonePointer
وسيصبح الكود كما يلي :

كود:


PhonePointer = ^PhoneCard;
phoneCard = Record
FName,LName,Address : string;
HomeNo,JobNo,FaxNo,Mobile : string;
Email , Page, Rem : string;
Next,Prev : PhonePointer;
End;




--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالأربعاء,15/محرم/1426 هـ,11:04 مساءً
المشاركة #4

نائب منتديات المحيط العربي
الرتبة في المنتدى:عقيد



المجموعة: الإدارة
المشاركات: 701
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:سوريا
رقم العضوية: 15



الدرس الثالث


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


وسنسمي الأزرار على التوالي : GoNew - GoPrevious - GoNext - GoLast
ولعرض تعليقات Hints للأزرار نكتب في خاصية Hint لكل زر شرح عنه .. ثم نجعل خاصية ShowHint تساوي True


لنقم الآن بتحديد الإجراءات والدوال التي تلزم لنا في البرنامج لكي نقوم ببرمجتها وهي :
>> دالة لإضافة عنصر جديد من النمط phoneCard وربطه في اللائحة المترابطة والبطاقات الموجودة
>> إجراء تخزين القيم الموجودة في الفورم ضمن عنصر من النمط phoneCard
>> إجراء عرض عنصرphoneCard في فورم
>> إجراء تفريغ الحقول في الفورم
>> إجراء إظهار رقم السجل الحالي في الـ Panel بالإضافة إلى تحديد حالة Enabled للأزرار حسب السجل الحالي


1- دالة إضافة عنصر جديد من النوع phoneCard وربطه في اللائحة المترابطة والبطاقات الموجودة :
هذه الدالة وظيفتها إنشاء عنصر جديد من النمط phoneCard وتخزين عنوان العنصر السابق لها في خاصية Prev وتخزين عنوان العنصر الجديد في خاصية Next للعنصر السابق وتعود هذه الدالة بقيمة من النوع PhonePointer كمؤشر للعنصر الجديد الذي تم إنشاؤه
وسنمرر لهذه الدالة موشر للعنصر السابق
وهذه هي الدالة(نكتبها في آخر ال Unit1 قبل كلمة End.) :

كود:


Function NewPhoneCard(PLastCard : PhonePointer):PhonePointer;
Var
NewCard : PhonePointer;
Begin
New(PNewCard);
PNewCard^.Prev := PLastCard;
If PlastCard <> nil then
PLastCard^.Next := PNewCard
Else
FirstPoint:=PNewCard;
NewPhoneCard := PNewCard;
End;


ويجب أن لا ننسى أننا يجب أن نصرح عن أي إجراء أو دالة أعلى الـ Unit1 بعد التصريح عن المتحولات العامة حتى نتمكن من استعماله في أجزاء الـ Unit الأخرى
كما نشاهد :

كود:


var
Form1: TForm1;

Function NewPhoneCard(var PLastCard : PhonePointer):PhonePointer;

implementation



2- إجراء تخزين القيم الموجودة في الفورم ضمن عنصر من النمط phoneCard

كود:


Procedure SaveToCard(PCard : PhonePointer);
Begin
With Form1 Do
Begin
Pcard^.FName := Edit1.Text;
Pcard^.LName := Edit2.Text;
Pcard^.Address := Edit3.Text;
Pcard^.HomeNo := Edit4.Text;
Pcard^.JobNo := Edit5.Text;
Pcard^.FaxNo := Edit6.Text;
Pcard^.Mobile := Edit7.Text;
Pcard^.Email := Edit8.Text;
Pcard^.Page := Edit9.Text;
Pcard^.Rem := Edit10.Text;
End;
End;



3- إجراء عرض عنصرphoneCard في الفورم :

كود:


Procedure GetFromCard(PCard : PhonePointer);
Begin
With Form1 Do
Begin
Edit1.Text := Pcard^.FName;
Edit2.Text := Pcard^.LName;
Edit3.Text := Pcard^.Address;
Edit4.Text := Pcard^.HomeNo;
Edit5.Text := Pcard^.JobNo;
Edit6.Text := Pcard^.FaxNo;
Edit7.Text := Pcard^.Mobile;
Edit8.Text := Pcard^.Email;
Edit9.Text := Pcard^.Page;
Edit10.Text := Pcard^.Rem;
End;
End;



4- إجراء تفريغ الحقول في الفورم :

كود:


Procedure EmptyFields;
Begin
With Form1 Do
Begin
Edit1.text := ';
Edit2.text := ';
Edit3.text := ';
Edit4.text := ';
Edit5.text := ';
Edit6.text := ';
Edit7.text := ';
Edit8.text := ';
Edit9.text := ';
Edit10.text := ';
End;
End;



5- إجراء إظهار رقم السجل الحالي في الـ Panel بالإضافة إلى تحديد حالة Enabled للأزرار حسب السجل الحالي
رقم السجل الحالي : يمكننا معرفة رقم السجل الحالي إذا استخدمنا متحول عام رقمي كعداد للسجلات .. ويتم التعريف عن المتحولات العامة في بداية الـ Unit1 بعد كلمة var
سنسمي هذا المتحول الذي يدل على السجل الحالي CurrentRec .. وسنضيف متحول عام آخر يدل على عدد السجلات بشكل عام سنسميه RecordCount .. وهذان المتحولان يجب أن يكونا من النمط LongInt
وبالاعتماد على قيمة هذين المتحولين يمكننا أن نكتب في Panel قيمة السجل الحالي وعدد السجلات الإجمالي كما يلي :

كود:


Form1.Panel1.Caption := IntToStr(CurrentRec) + ' من ' + IntToStr(RecordCount);


وأيضاً بالاعتماد عليها بإمكاننا تحديد حالة أزرار التنقل (متاحة/غير متاحة) كما يلي :
السجل الحالي = 1 : عدم تفعيل أزرار GoFirst - GoPrevious
السجل الحالي هو الأخير : عدم تفعيل أزرار GoNext - GoLast
وهكذا يكون الإجراء كما يلي :

كود:


Procedure ConfigMovePanel;
Begin
With Form1 Do
Begin
Panel1.Caption := IntToStr(CurrentRec) + ' من ' + IntToStr(RecordCount);
GoFirst.Enabled := (CurrentRec > 1);
GoPrevious.Enabled := GoFirst.Enabled ;
GoNext.Enabled := (CurrentRec < RecordCount);
GoLast.Enabled := GoNext.Enabled;
End;





الملفات المرفقة
 Tel1.rar ( 7.13ك ) عدد مرات التنزيل: 4135


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالخميس,16/محرم/1426 هـ,05:37 صباحاً
المشاركة #5

الرتبة في المنتدى:رقيب

أيقونة المجموعة

المجموعة: الأعضاء
المشاركات: 30
سجل في:الخميس,03/ذو الحجة/1425 هـ,08:22 صباحاً
الدولة:فلسطين
رقم العضوية: 1164



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


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالخميس,16/محرم/1426 هـ,07:01 صباحاً
المشاركة #6

الرتبة في المنتدى:رقيب

أيقونة المجموعة

المجموعة: الأعضاء
المشاركات: 3
سجل في:الخميس,16/محرم/1426 هـ,06:02 صباحاً
الدولة:مصر
رقم العضوية: 1717



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


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالخميس,16/محرم/1426 هـ,02:46 مساءً
المشاركة #7

الرتبة في المنتدى:رقيب

أيقونة المجموعة

المجموعة: الأعضاء
المشاركات: 2
سجل في:الخميس,16/محرم/1426 هـ,02:42 مساءً
الدولة:سوريا
رقم العضوية: 1727



وفقك الله وجزاك الخير


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالخميس,16/محرم/1426 هـ,03:17 مساءً
المشاركة #8

الرتبة في المنتدى:رقيب

أيقونة المجموعة

المجموعة: الأعضاء
المشاركات: 16
سجل في:الثلاثاء,25/شوال/1425 هـ,02:25 مساءً
الدولة:السعودية
رقم العضوية: 766



ألف شكر لك أستاذنا القدير مهند عبادي

وعندي سؤال لو سمحت ..

لماذا لا نستخدم المصفوفات بدل اللوائح المترابطة خاصة وأنها أسهل بالاستخدام ؟؟


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالخميس,16/محرم/1426 هـ,05:17 مساءً
المشاركة #9

نائب منتديات المحيط العربي
الرتبة في المنتدى:عقيد



المجموعة: الإدارة
المشاركات: 701
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:سوريا
رقم العضوية: 15



الأخوة : أبو ربيع - lord369 - محمد ربيع - أبو ديب ..

شكراً لمساهمتكم ومروركم على الموضوع


الأخ أبو ديب ..

بالنسبة لعدم استعمال المصفوفات بدلاً عن اللوائح المترابطة فهذا لأن اللوائح المترابطة أكثر تلبية لاحتياجات البرنامج من حيث عدم محدودية عددها بعدد معين كما أنني قصدت من هذا المثال تعريف المتابعين للمؤشرات وأسلوب التعامل مع اللوائح المترابطة (وهي تقنية القليل فقط من يجيدها)..

تحياتي لك


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالخميس,16/محرم/1426 هـ,11:41 مساءً
المشاركة #10

نائب منتديات المحيط العربي
الرتبة في المنتدى:عقيد



المجموعة: الإدارة
المشاركات: 701
سجل في:الخميس,09/شعبان/1425 هـ,08:02 صباحاً
الدولة:سوريا
رقم العضوية: 15



الدرس الرابع



الآن يجب أن نستخدم الإجراءات التي سبق لنا تصميمها :
عند عملية الانتقال بالأزرار يجب تخزين محتويات المعلومات الظاهرة على الشاشة في السجل في الذاكرة .. و إذا كان سجل جديد يجب قبلها أن يتم إضافة عنصر جديد من النوع phoneCard ... وبعد ذلك يجب اجراء عملية الانتقال ثم استدعاء إجراء ConfigMovePanel .. لذلك يجب تعريف متحول عام على مستوى الـ Unit من النوع Boolean سنسميه IsNewRec
كما سيلزم لنا تحديد السجل الأول والسجل الأخير والسجل الحالي لذلك سنقوم بتعريف 3 متحولات عامة من النوع PhonePointer سنسميها : FirstPoint , CurrPoint , LastPoint .
بحيث تصبح التعريفات العامة لمتحولات الوحدة Unit1 هكذا :
كود:


var
Form1: TForm1;
CurrentRec , RecordCount : LongInt;
IsNewRec : Boolean;
FirstPoint,CurrPoint,LastPoint : PhonePointer;



وبالاعتماد على المتحول IsNewRec سنقوم ببعض التعديلات على إجراء ConfigMovePanel وسنضيف غليه معالجة تفعيل زر سجل جديد حسب الحالة ، حيث أن زر GoNew يجب أن يكون غير متاح إذا كان السجل الحالي سجل جديد وكانت حقل الاسم فارغاً وسيصبح الإجراء بعد التعديل كما يلي:
كود:


Procedure ConfigMovePanel;
Begin
With Form1 Do
Begin
If IsNewRec then
Panel1.Caption := 'سجل جديد من '+ IntToStr(RecordCount)
Else
Panel1.Caption := IntToStr(CurrentRec) + ' من ' + IntToStr(RecordCount);
GoFirst.Enabled := (CurrentRec > 1);
GoPrevious.Enabled := GoFirst.Enabled ;
GoNext.Enabled := (CurrentRec < RecordCount);
GoLast.Enabled := GoNext.Enabled;
GoNew.Enabled := (Not IsNewRec) Or (Edit1.Text > ');
End;
End;



>> حدث الضغط على زر الانتقال للسجل الأول :

كود:


procedure TForm1.GoFirstClick(Sender: TObject);
begin
If IsNewRec then
Begin
CurrPoint := NewPhoneCard(CurrPoint);
LastPoint := CurrPoint;
End;
SaveToCard (CurrPoint);
CurrPoint:= FirstPoint;
GetFromCard (CurrPoint);
CurrentRec := 1;
IsNewRec := False;
ConfigMovePanel;
end;



>> حدث الضغط على زر الانتقال للسجل السابق :

كود:


procedure TForm1.GoPreviousClick(Sender: TObject);
begin
If IsNewRec then
Begin
CurrPoint := NewPhoneCard(CurrPoint);
LastPoint := CurrPoint;
End;
SaveToCard (CurrPoint);
CurrPoint:= CurrPoint^.Prev ;
GetFromCard (CurrPoint);
Dec(CurrentRec);
IsNewRec := False;
ConfigMovePanel;
end;



>> حدث الضغط على زر الانتقال للسجل التالي :

كود:


procedure TForm1.GoNextClick(Sender: TObject);
begin
SaveToCard (CurrPoint);
CurrPoint:= CurrPoint^.Next ;
GetFromCard (CurrPoint);
Inc(CurrentRec);
ConfigMovePanel;
end;



>> حدث الضغط على زر الانتقال للسجل الأخير :

كود:


procedure TForm1.GoLastClick(Sender: TObject);
begin
SaveToCard (CurrPoint);
CurrPoint:= LastPoint ;
GetFromCard (CurrPoint);
CurrentRec := RecordCount;
ConfigMovePanel;
end;



>> حدث الضغط على زر سجل جديد :

كود:


procedure TForm1.GoNewClick(Sender: TObject);
begin
If IsNewRec then
Begin
CurrPoint := NewPhoneCard(CurrPoint);
LastPoint := CurrPoint;
End;
SaveToCard(CurrPoint);
IsNewRec := True;
EmptyFields;
Inc(RecordCount);
CurrentRec := RecordCount;
ConfigMovePanel;
end;



>> أما الحالة التي يجب أن يبدأ بها البرنامج فيتم تحديدها من خلال حدث FormCreate كما يلي :

كود:


procedure TForm1.FormCreate(Sender: TObject);
begin
IsNewRec := true;
CurrentRec := 1;
RecordCount := 1;
ConfigMovePanel;
end;


نلاحظ في الإجراءات السابقة استخدامنا لتعليمة inc ووظيفتها زيادة قيمة المتحول الممرر وتعليمة Dec ووظيفتها انقاص قيمة المتحول الممرر
وأهم ما يجب الاستفادة منه في الإجراءات السابقة والانتباه له هو أسلوب بناء اللوائح المترابطة والتعامل مع المؤشرات


>> حدث عند تغير النص في حقل الاسم نضع هذا الكود :

كود:


GoNew.Enabled := (Not IsNew) Or (Edit1.Text > ');


ووظيفة هذا الكود هي أن يفعّل زر سجل جديد عند إدخال نص في حقل الاسم في حالة سجل جديد

عند هذه النقطة نكون قد أنجزنا الجزء الأساسي من البرنامج وأصبح قابلاً للاختبار ..




الملفات المرفقة
 Tel3.rar ( 8.4ك ) عدد مرات التنزيل: 3530


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة

    

عدد المتصفحين لهذا المنتدى «1»: (الضيوف «1» - المتخفون «0»)
الأعضاء «0»: .

عدد الصفحات : 6  1  2  3  4  5   > » إضافة رد جديد إضافة موضوع جديد



 
الوقت الأن:اليوم,12:23 صباحاً بتوقيت القدس المحتلة

Powered By arabmoheet v3.1

منتديات المحيط العربي  -  راسلنا  -   أعلى
X   رسالة المنتدى
(سوف يتم اغلاق هذه النافذة بعد 2 ثانية)
X   رسالة المنتدى
(سوف يتم اغلاق هذه النافذة بعد 2 ثانية)