musvc
05-07-2010, 04:45 PM
بسم الله الرحمن الرحيم
من عنوان الموضوع "نبذة بسيطة عن عملية تغيير الوحدات"
فقط سأعرض بعض الأمثلة عن تغيير الوحدات لأخلق فكرة بسيطة للمبتدئين عنها..
اولا ً تغيير الـ String الى Integer :
ما هو الـ String ؟؟
هو سلسلة حرفية غير منتهية الطول ( اي غير محددة ), تبدأ بـ 4 بايت و تتجه تصاعديا مع ازدياد حجم النص
يتكون من (احرف, رموز, ارقام, غيرها) لكن ليست ارقام يستطيع الشخص التعامل معها مباشرتا ً في العمليات الرياضية
لهذا نحتاج الى تحويلها الى ارقام و ليس نص رقمي, و تتم ذلك بعدة طرق اهمها هو الأجراء Val
قد يصعب على المبتدئين استخدام الأجراء, لذلك تم استدعائه من قبل دالة تعرف بـ StrToInt الموجودة في ملف SysUtils و ذلك
لتبسيط عملية تحويل النص الى رقم ( نضرا ً لكثرة استخدامه )
ما هو الـ Integer ؟؟
هو مجموعة من الأرقام ارقام تبدأ من رقم -2147483648 و تنتهي بـ 2147483647 و ايضا ً حجمها 4 بايت و طبعا ً لا تحتوي على فاصلة
عشرية
قد يلاحض المبتدئ وجود تشابه بين الـ Cardinal و الـ Integer, الصحيح هما متشابهان كثيرا ً من ناحية الحجم لكن الـ Cardinal
لا يحتوي على ارقام سالبة, حيث يبدأ من الـ 0 و يتنهي بـ 2147483647 ( لذلك لا تقم بأستخدامها في العمليات الحسابية التي
يقوم المستخدم بنفسه ِ بأدخال الأرقام في البرنامج )
بالرجوع الى عملية التحويل, ايضا ً يمكن تحويلها الى String (نص) بواسطة الأجراء Str
و ايضا ً قد يلاقي المبتدء صعوبة في استخدام الأجراء لذلك تم تسدعائه من قبل الدالة IntToStr الموجودة ايضا ً في ملف SysUtils
لتبسيط عملية تحويل النص الى رقم ( نضرا ً لكثرة استخدامه ايضا ً )
عدم اتبعاع هذه ِ الطرق سيواجه المستخدم العديد من الأخطأء من الـ Compiler او ربما من البرنامج بعد الـ Compile (لان الـ Compile
لا يستطيع التنبؤ عن الأحداث المستقبلية..)
ثانيا ً تغيير الـ Integer الى Boolean و العكس :
يعلم الجميع ان الرقمان 1 و 0 هما اساس جميع فعاليات الجهاز, و قد يعلم البعض ان 1 تشير الى الـ True اي صح
و 0 تشير الى False اي الخطأ..
يمكن تحويل الأرقام الى قيمة صواب و خطأ, لنفرض ان A هو متغير رقمي Integer و B هو متغير من نوع Boolean
و قيمة A هي 1 لنحول A الى B نكتب :
B := Boolean(A);
القيمة B تسكون عبارة True, لنفرض ان A كان 2 ماذا سيحدث ؟؟
ببساطة جميع القيم عدا 1 هي False , و ايضا ً عملية تحويل الـ Boolean الى Integer شبيهة لكن بالعكس
A := Integer(B);
ماذا يمكننا ان نستفيد من هذه ِ العمليات ؟؟
الأستفادة كبيرة جدا ً لايسما في صناعة الألعاب او بعض البرامج, لاننا نحول الـ Integer الى متغير آخر
و تذكر كلما استطعت تحول الـ Integer الى متغير آخر تستطيع الأستفادة منه لاننا ببساطة نستطيع اجراء العمليات الحسابية المختلفة عليه
وايضا ً يساخدم الـ Integer في دوال الـ API كثيرا ً لا سيما الدالة SendMessage
مثال على استخدامها في دالة EnableWindow :
EnableWindow(Handle, Boolean(0));
الكود يقوم بعمل Disable للنافذة و ذلك لآننا مررنا اليه الرقم 0, اما اذا كان 1 عندها يعمل Enable للنافذة
و ايضا ً مفيد جدا ً لأختصار الوقت و ايضا ً التقليل من كتابة شرط تحقق IF
بما انه اغلب قيم الريجستري هي 1 و 0, اي 1 تشير الى الصواب و 0 تشير الى الخطأ
و لدي RadioButton اريـد ان تكون مفعلة في حالة اذا كان الرقم 1 و غير مفعلة اذا كان الرقم 0
نكتب الأمر كالتالي بعد الحصول على النتيجة من الريجستري :
RadioButton.Check := Boolean(A);
بفرض ان A هو متغير Integer او Cardinal يحمل القيمة التي اردناها من الريجستري
ثالثا ً تمرير نص في متغير Integer :
يعلم البعض ان دالة SendMessage تحتوي على lParam و wParam و كلتاهما من نوع Integer
لذلك هذا هو السؤال المهم, لماذا توجد رسائل مثل WM_SETTEXT و ليس بأمكاني ارسال نص ؟؟
نعم بلأمكان, فقط عليك تحويل الوحدات اولا ً من الـ Integer الى String لكي تستطيع تمرير نص محدد, مثال :
var
A: String;
begin
A := 'Delphi4Arab.com';
SendMessage(Handle, WM_SETTEXT, 0, Integer(A));
End;
يقوم المثال بتسمية الـ Title الخاص بالـ Form الى Delphi4Arab.com
رابعا ً تحويل الـ String الى PChar و العكس :
من المعروف ان المتغيرين يستخدمان في عملية حفض النصوص, الـ PChar يستخدم بكثرة في دوال النضام, اما الـ String
فيستخدم بكثرة ( او بشكل كلي ) في دوال و اجرائات الدلفي
طريقة التحويل بينهما سهلة جدا ً على الرغم من هذا توجد دالة StrPas في ملف SysUitls تقوم بتحويل PChar الى String
لنفرض ان A هو String و B هو PChar اذا هذه ِ هي طريقة تحويل الـ String الى PChar :
A := String(B);
قد يعتبرها المبتدئين شيئا ً عاديا ً لانهم اعتادوا على هذه ِ الطريقة ( مجرد اقتباس من غير معرفة السبب)
اما طريقة تحويل الـ PChar الى String فهي نفس الشيئ لكن بالعكس :
B := PChar(A);
خامسا ً تحويل الـ Float الى String و العكس :
الـ Float هو عبارة ان ارقام تحتوي على فاصلة عشرية, تستخدم في العمليات الحسابية الدقيقة و بكثرة في مجال الألعاب
طريقة التحويل النص String الى Float شبيهة بتحويل الـ String الى Integer لانها تتحول بنفس الدوال Val و Str
للتسهيل طبعا ً تمت عملية استدعائها في دالتين FloatToStr و StrToFloat الموجودتين في ملف SysUtils
و السلام عليكم
من عنوان الموضوع "نبذة بسيطة عن عملية تغيير الوحدات"
فقط سأعرض بعض الأمثلة عن تغيير الوحدات لأخلق فكرة بسيطة للمبتدئين عنها..
اولا ً تغيير الـ String الى Integer :
ما هو الـ String ؟؟
هو سلسلة حرفية غير منتهية الطول ( اي غير محددة ), تبدأ بـ 4 بايت و تتجه تصاعديا مع ازدياد حجم النص
يتكون من (احرف, رموز, ارقام, غيرها) لكن ليست ارقام يستطيع الشخص التعامل معها مباشرتا ً في العمليات الرياضية
لهذا نحتاج الى تحويلها الى ارقام و ليس نص رقمي, و تتم ذلك بعدة طرق اهمها هو الأجراء Val
قد يصعب على المبتدئين استخدام الأجراء, لذلك تم استدعائه من قبل دالة تعرف بـ StrToInt الموجودة في ملف SysUtils و ذلك
لتبسيط عملية تحويل النص الى رقم ( نضرا ً لكثرة استخدامه )
ما هو الـ Integer ؟؟
هو مجموعة من الأرقام ارقام تبدأ من رقم -2147483648 و تنتهي بـ 2147483647 و ايضا ً حجمها 4 بايت و طبعا ً لا تحتوي على فاصلة
عشرية
قد يلاحض المبتدئ وجود تشابه بين الـ Cardinal و الـ Integer, الصحيح هما متشابهان كثيرا ً من ناحية الحجم لكن الـ Cardinal
لا يحتوي على ارقام سالبة, حيث يبدأ من الـ 0 و يتنهي بـ 2147483647 ( لذلك لا تقم بأستخدامها في العمليات الحسابية التي
يقوم المستخدم بنفسه ِ بأدخال الأرقام في البرنامج )
بالرجوع الى عملية التحويل, ايضا ً يمكن تحويلها الى String (نص) بواسطة الأجراء Str
و ايضا ً قد يلاقي المبتدء صعوبة في استخدام الأجراء لذلك تم تسدعائه من قبل الدالة IntToStr الموجودة ايضا ً في ملف SysUtils
لتبسيط عملية تحويل النص الى رقم ( نضرا ً لكثرة استخدامه ايضا ً )
عدم اتبعاع هذه ِ الطرق سيواجه المستخدم العديد من الأخطأء من الـ Compiler او ربما من البرنامج بعد الـ Compile (لان الـ Compile
لا يستطيع التنبؤ عن الأحداث المستقبلية..)
ثانيا ً تغيير الـ Integer الى Boolean و العكس :
يعلم الجميع ان الرقمان 1 و 0 هما اساس جميع فعاليات الجهاز, و قد يعلم البعض ان 1 تشير الى الـ True اي صح
و 0 تشير الى False اي الخطأ..
يمكن تحويل الأرقام الى قيمة صواب و خطأ, لنفرض ان A هو متغير رقمي Integer و B هو متغير من نوع Boolean
و قيمة A هي 1 لنحول A الى B نكتب :
B := Boolean(A);
القيمة B تسكون عبارة True, لنفرض ان A كان 2 ماذا سيحدث ؟؟
ببساطة جميع القيم عدا 1 هي False , و ايضا ً عملية تحويل الـ Boolean الى Integer شبيهة لكن بالعكس
A := Integer(B);
ماذا يمكننا ان نستفيد من هذه ِ العمليات ؟؟
الأستفادة كبيرة جدا ً لايسما في صناعة الألعاب او بعض البرامج, لاننا نحول الـ Integer الى متغير آخر
و تذكر كلما استطعت تحول الـ Integer الى متغير آخر تستطيع الأستفادة منه لاننا ببساطة نستطيع اجراء العمليات الحسابية المختلفة عليه
وايضا ً يساخدم الـ Integer في دوال الـ API كثيرا ً لا سيما الدالة SendMessage
مثال على استخدامها في دالة EnableWindow :
EnableWindow(Handle, Boolean(0));
الكود يقوم بعمل Disable للنافذة و ذلك لآننا مررنا اليه الرقم 0, اما اذا كان 1 عندها يعمل Enable للنافذة
و ايضا ً مفيد جدا ً لأختصار الوقت و ايضا ً التقليل من كتابة شرط تحقق IF
بما انه اغلب قيم الريجستري هي 1 و 0, اي 1 تشير الى الصواب و 0 تشير الى الخطأ
و لدي RadioButton اريـد ان تكون مفعلة في حالة اذا كان الرقم 1 و غير مفعلة اذا كان الرقم 0
نكتب الأمر كالتالي بعد الحصول على النتيجة من الريجستري :
RadioButton.Check := Boolean(A);
بفرض ان A هو متغير Integer او Cardinal يحمل القيمة التي اردناها من الريجستري
ثالثا ً تمرير نص في متغير Integer :
يعلم البعض ان دالة SendMessage تحتوي على lParam و wParam و كلتاهما من نوع Integer
لذلك هذا هو السؤال المهم, لماذا توجد رسائل مثل WM_SETTEXT و ليس بأمكاني ارسال نص ؟؟
نعم بلأمكان, فقط عليك تحويل الوحدات اولا ً من الـ Integer الى String لكي تستطيع تمرير نص محدد, مثال :
var
A: String;
begin
A := 'Delphi4Arab.com';
SendMessage(Handle, WM_SETTEXT, 0, Integer(A));
End;
يقوم المثال بتسمية الـ Title الخاص بالـ Form الى Delphi4Arab.com
رابعا ً تحويل الـ String الى PChar و العكس :
من المعروف ان المتغيرين يستخدمان في عملية حفض النصوص, الـ PChar يستخدم بكثرة في دوال النضام, اما الـ String
فيستخدم بكثرة ( او بشكل كلي ) في دوال و اجرائات الدلفي
طريقة التحويل بينهما سهلة جدا ً على الرغم من هذا توجد دالة StrPas في ملف SysUitls تقوم بتحويل PChar الى String
لنفرض ان A هو String و B هو PChar اذا هذه ِ هي طريقة تحويل الـ String الى PChar :
A := String(B);
قد يعتبرها المبتدئين شيئا ً عاديا ً لانهم اعتادوا على هذه ِ الطريقة ( مجرد اقتباس من غير معرفة السبب)
اما طريقة تحويل الـ PChar الى String فهي نفس الشيئ لكن بالعكس :
B := PChar(A);
خامسا ً تحويل الـ Float الى String و العكس :
الـ Float هو عبارة ان ارقام تحتوي على فاصلة عشرية, تستخدم في العمليات الحسابية الدقيقة و بكثرة في مجال الألعاب
طريقة التحويل النص String الى Float شبيهة بتحويل الـ String الى Integer لانها تتحول بنفس الدوال Val و Str
للتسهيل طبعا ً تمت عملية استدعائها في دالتين FloatToStr و StrToFloat الموجودتين في ملف SysUtils
و السلام عليكم