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

(قسم الاعلانات) الموضوع:افضل شركات انشاء متجر الكتروني في دبي بواسطة: (ضيااء) :: (قسم الاعلانات) الموضوع:مشروع مساكن نسمة بواسطة: (عمر تاج الدين) :: (قسم الاعلانات) الموضوع:صحيفة السعودية بواسطة: (maha_ayad) :: (قسم الاعلانات) الموضوع:برنامج سياحى فى ماليزيا شهر عسل لمده 12 يوم 11 ليالى مميز عرض الصيف2019 بواسطة: (ماليزيا الساحره) :: (قسم الاعلانات) الموضوع:،تطبيق موعدكم تطبيق حجز مواعيد طبية إلكترونيا حمل التطبيق ووفر وقتك ،،للإستفسار 0539147400 حجز موعد طبي ،تطبيق حجز موعد طبيب ،تطبيق حجز موعد مستوصف ،تطبيق حجز موعد مستشفي ،برنامج حجز موعد طبي مجانا بواسطة: (birtane) :: (قسم الاعلانات) الموضوع:نكت بواسطة: (reemheeh) :: (قسم الاعلانات) الموضوع:مقاول في الرياض 0533266762 مقاول عظم بالرياض مقاول ملاحق بالرياض بواسطة: (birtane) :: (قسم الاعلانات) الموضوع:مركز زراعة الشعر لمرضى السكر في اسطنبول بواسطة: (سلام العتيبي) :: (قسم الاعلانات) الموضوع:سارع بتملك شقتك في مشروع الجادة بالشارقة من شركة أرادا للتطوير العقاري وبالتقسيط المريح بواسطة: (Marketing Designer) :: (قسم الاعلانات) الموضوع:حصرى رحلة عائلية فى ماليزيا لمده 10 يوم 9 ليالى بواسطة: (محب للسفر) :: (منتدى ADO.NET العام) الموضوع:شركة تنظيف منازل الجهراء بواسطة: (محسن محمد) :: (منتدى الكتب الالكترونية) الموضوع:افضل شركة مكافحة حشرات بالمملكة بواسطة: (NADENNADER) :: (قسم الاعلانات) الموضوع:دورات في إدارة العلاقات العامة وفن التعامل مع كبار الشخصيات تعقد في اسبانيا برشلونه بواسطة: (مركز تدريب) :: (قسم الاعلانات) الموضوع:شات عربي دردشة عربية Arab Chat بواسطة: (Marketing Designer) :: (قسم الاعلانات) الموضوع:دوره الاتجاهات الحديثه في العلاقات العامة والإعلام الإقناعي تعقد في اسبانيا لندن دبي بواسطة: (مركز تدريب) :: (منتدى ADO.NET العام) الموضوع:مميزات منصة برادفورد للتدريب بواسطة: (عيون للرياض) :: (قسم الاعلانات) الموضوع:دورة أخصائي الاعلام الرقمي وشبكات التواصل الاجتماعي من مركز المجد للتدريب بواسطة: (مركز تدريب) :: (منتدى ADO.NET العام) الموضوع:شركة تنظيف مسابح بالرياض 0503370076 بواسطة: (داليا عادل) :: (قسم الاعلانات) الموضوع:دورة هندسه العلاقات العامه وتنظيمها وفق معايير الجودة الشاملة تعقد في مدريد برشلونه بواسطة: (مركز تدريب) :: (قسم الاعلانات) الموضوع:دوره العلاقات العامه وفن الإدارة الإعلامية للأزمات و الكوارث تعقد في الاردن المغرب بواسطة: (مركز تدريب)


راديو القرآن

المواضيع المثبته: (قسم الدعم الفني) الموضوع:هل تريد التحكم بجهازك كأنك محترف بواسطة: (ياسر جمال) :: (منتدى الكتب و المقالات) الموضوع:أرغب فى تعلم Microsoft Access وإحترافه بواسطة: (Prince4ever) :: (منتدى الكتب الالكترونية) الموضوع:مجموعة كبيرة من السرفرات بواسطة: (يوسف) :: (منتدى برمجة التقارير) الموضوع:مثال Crystal Report بواسطة: (شهرزاد) :: (منتدى برمجة الجرافكس) الموضوع:مجموعة دروس لتعليم الدايركت اكس بواسطة: (alaa gomaa) :: (منتدى Microsoft Excel) الموضوع:شرح الفيجوال بيزيك للمتوسطين vba بواسطة: (hs889) :: (منتدى Microsoft Visual Basic) الموضوع:الدليل الأسرع لأبرز المواضيع بواسطة: (HnHn) :: (منتدى Microsoft SQL Server) الموضوع:كيف أقوم بنسخ البيانات فقط من جهازي الى الويب بواسطة: (أبو محمـد) :: (منتدى مبرمجي ASP.NET) الموضوع:Visual Web Developer 2010 Express بواسطة: (يوسف جميل جادالله) :: (منتدى الكتب و المقالات) الموضوع:كتب في الاكسس باللغة العربية بواسطة: (ابو حسام) :: (منتدى ال SQL العام) الموضوع:كتاب يشرح اساسيات SQL بواسطة: (محمد جمعة) :: (منتدى مبرمجي ASP) الموضوع:شرح كود موقع شؤون الموظفين النسخة الأولى بواسطة: (alanees) :: (منتدى Microsoft SQL Server) الموضوع:يومياً أسئلة sql server مجاناً بواسطة: (m.atassi) :: (منتدى Microsoft Visual Basic) الموضوع:دورة التعامل مع Data Report باستخدام ADODC ( شرح بالصور ) بواسطة: (Max Bayne) :: (منتدى ADO.NET العام) الموضوع:البدء مع ADO.NET بواسطة: (HnHn) :: (القسم المفتوح) الموضوع:شاهد واشكر ربك على نعمة الاسلام بواسطة: (غزاوية أصيلة) :: (منتدى برمجة التقارير) الموضوع:شرح طريقة اضافة تقرير Crystal Reports في الـ ASP.NET بواسطة: (FunctionSys) :: (منتدى Microsoft Visual Basic) الموضوع:برنامج الحسابات مع الكود بواسطة: (د.أنس عباس) :: (منتدى مبرمجي لغة جافا JAVA) الموضوع:درس : الاستثناءات في جافا Exceptions بواسطة: (nardien28) :: (منتدى تصميم صفحات الويب) الموضوع:أرشيف المواضيع المميزة بواسطة: (alanees)

عدد الصفحات : 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ك ) عدد مرات التنزيل: 5047


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالثلاثاء,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ك ) عدد مرات التنزيل: 4124


--------------------
للأعلىأبلغ المشرف عن هذه المشاركة
لتعقيب على هذه المشاركة مباشرة
مشاركةالخميس,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ك ) عدد مرات التنزيل: 3516


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

    

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

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



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

Powered By arabmoheet v3.1

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