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

(قسم الاعلانات) الموضوع:عبايات استقبال - عبايات صيفي 01102226477 بواسطة: (fareda) :: (قسم الاعلانات) الموضوع:اسماء واماكن مصانع افرولات -شركة السلام لليونيفورم 01118689995 - بواسطة: (fareda) :: (قسم الاعلانات) الموضوع:شركة تشطيبات - تكلفة تشطيب شقة 200 متر 01119959188 بواسطة: (fareda) :: (قسم الاعلانات) الموضوع:شركة الشعلة للخدمات المنزلية 0530242929 بواسطة: (nanafananas) :: (قسم الاعلانات) الموضوع:دليل لإصلاح الطابق السفلي بواسطة: (abueldahb740) :: (قسم التطوير والاقتراحات) الموضوع:احدث الديكورات شركه عقاري 01020115116 بواسطة: (evoveky) :: (أخبار التكنولوجيا) الموضوع:افضل شركة ديكورات وتشطيبات شركه عقاري 01020115116 بواسطة: (evoveky) :: (منتدى ADO.NET العام) الموضوع:تشطيب مطاعم شركه عقاري01020115116 بواسطة: (evoveky) :: (قسم الاعلانات) الموضوع:دورة ادارة وتسوية المطالبات تعقد في تركيا ماليزيا المغرب مصر لبنان ايطاليا برشلونه بواسطة: (مركز تدريب) :: (قسم الاعلانات) الموضوع:دوره التامينات الطبية تعقد في اسطنبول كوالالمبور جورجيا اسبانيا بواسطة: (مركز تدريب) :: (منتدى التصميم والجرافيكس) الموضوع:تشطيب حمامات سباحه شركه عقاري للتنميه واداره المشروعات01020115116 بواسطة: (evoveky) :: (قسم الاعلانات) الموضوع:دورة تدريبية في حفر ابار البترول تعقد في المغرب لندن باريس روما مدريد تايلند بواسطة: (مركز تدريب) :: (قسم الاعلانات) الموضوع:شركات مكافحة الحشرات بجازان بواسطة: (NADENNADER) :: (منتدى الأكسس) الموضوع:كود تشغيل استعلام الحاق بواسطة: (سام7) :: (قسم الاعلانات) الموضوع:دوره التقارير المالية فى الصناعات النفطية تعقد في لندن باريس روما مدريد سنغافورة تونس بواسطة: (مركز تدريب) :: (قسم الاعلانات) الموضوع:دوره معايير المحاسبة الدولية لشركات الغاز والبترول والكيماويات تعقد في كوالالمبور لندن بواسطة: (مركز تدريب) :: (قسم الاعلانات) الموضوع:دوره النظم المحاسبية المتكاملة فى الصناعات النفطية تعقد في فرنسا اسبانيا لندن ايطاليا بواسطة: (مركز تدريب) :: (قسم الاعلانات) الموضوع:دوره التدقيق والمراجعة الداخلية فى الشركات النفطية تعقد في اسطنبول كوالالمبور جورجيا بواسطة: (مركز تدريب) :: (قسم الاعلانات) الموضوع:دوره المحاسبة فى شركات البترول تعقد في الاردن دبي مراكش تونس مصر لبنان تركيا ماليزيا بواسطة: (مركز تدريب) :: (منتدى أنظمة الشبكات وأمنها) الموضوع:CAN WIFI EXTENDER CAUSE PROBLEMS بواسطة: (wilsoneliza)


راديو القرآن

المواضيع المثبته: (منتدى مبرمجي ASP.NET) الموضوع:Visual Web Developer 2010 Express بواسطة: (يوسف جميل جادالله) :: (منتدى ADO.NET العام) الموضوع:انشاء قواعد البيانات برمجيا جداول - علاقات -قيود بواسطة: (شهرزاد) :: (منتدى مبرمجي ASP.NET) الموضوع:كيفية عرض المنتديات والأقسام والمواضيع بواسطة: (عبدالله جابر شقليه) :: (القسم المفتوح) الموضوع:الأعمــــال الصالحة المستمــرة للإنســـان بعد وفاته بواسطة: (عبدالله جابر شقليه) :: (منتدى مبرمجي Microsoft Visual C#.NET) الموضوع:موقع جيد به Tutorials و مشاريع مفتوحة المصدر بواسطة: (يوسف) :: (قسم النسخ والتحويل) الموضوع:برنامج تحويل قواعد البيانات العظيم بواسطة: (arabsboy) :: (قسم التعاميم والشكاوي) الموضوع:هنيئا للشعب المصري بواسطة: (صهيب جاويش) :: (Oracle قسم قواعد البيانات أوراكل) الموضوع:تنصيب أوراكل 8i النسخة الشخصية على ويندوز XP بواسطة: (راحـل) :: (منتدى مبرمجي Microsoft Visual VB.NET) الموضوع:حصرياً : كل شيء يخص الفيجوال بيسك دوت نت - اسطوانات - كتب - أكواد - ال بواسطة: (صائبكو) :: (منتدى الوورد والباور بوينت) الموضوع:دورة انتاج برامج تفاعلية بإستخدام الباور بوينت بواسطة: (خليل إبراهيم) :: (منتدى تصميم صفحات الويب) الموضوع:أرشيف المواضيع المميزة بواسطة: (alanees) :: (منتدى Microsoft SQL Server) الموضوع:يومياً أسئلة sql server مجاناً بواسطة: (m.atassi) :: (منتدى التصميم والجرافيكس) الموضوع:دورة تصميم مواقع بواسطة: (aram) :: (منتدى نظام تشغيل Linux) الموضوع:أوامر لينكس بواسطة: (khaled helal) :: (قسم التعاميم والشكاوي) الموضوع:صفحة منتديات المحيط العربي على الفيس بوك بواسطة: (ramies) :: (Oracle قسم قواعد البيانات أوراكل) الموضوع:جمل استعلام بواسطة: (وليد القدسي) :: (منتدى ADO.NET العام) الموضوع:شرح ado.net بواسطة: (شهرزاد) :: (منتدى الوورد والباور بوينت) الموضوع:مكتبة الباور بوينت بواسطة: (ramies) :: (منتدى أنظمة الشبكات وأمنها) الموضوع:أساسيات تصميم الشبكات بواسطة: (مرحبا الساع) :: (منتدى ال SQL العام) الموضوع:كتاب يشرح اساسيات SQL بواسطة: (محمد جمعة)

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


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


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


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

    

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

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



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

Powered By arabmoheet v3.1

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