• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

SB4

اعضاء
  • عدد المشاركات

    252
  • تاريخ الانضمام

  • تاريخ اخر زياره

السمعه بالموقع

1 عادي

عن SB4

  • الرتبة
    عضو

طرق الإتصال

  • ICQ 0

معلومات الملف الشخصي

  • الجنس ذكر
  • الدولة : Q8
  1. السلام عليكم أقوم بالعمل على إعداد قاعدة البيانات لتجربة بعض الأمور لاحقاً ولدي عده أسئلة وهي: 1) في نموذج addBehavior عند تحديد الأسم أريد أن يقوم النموذج تلقائية بتعبئة بيانات الحقول ( الرقم المدني - الفصل - الصف ) تلقائياً ؟ لاحظ أنني قمت بتعبئة حقل الرقم المدني ولكن لم استطيع أن اقوم بالمثل مع باقي الحقول. 2) عند تحديد الفصل مثلاً "العاشر الثانوي" يتم عرض جميع الاسماء التي تنتمي لهذا الفصل أو المرحلة بمعنى أصح ؟ لاحظ أنني قمت بشىء مشابة من خلال تعبئة حقل الصف بناءاً على تحديد المستخدم في حقل الفصل ولكن عند عدم اختيار فصل فإنه لا يعرض أي شيء وما أريده في حقل اسم الطالب هو أن تعرض جميع اسماء الطلاب تلقائياً وعند تحديد فصل محدد تعرض فقط الاسماء التي تنتمي لهذا الفصل.   مع جزيل الشكر... student1516.accdb
  2. عرض الكاميرا وأحفظ لقطة على سطح المكتب       سوف نخرج قليلاً عن المألوف وذلك بإنشاء برنامج يقوم بعرض كاميرا الكمبيوتر وباستخدام مؤشر الفأرة نقوم بالضبط لأخذ لقطة وحفظها على سطح المكتب. هذا البرنامج سوف نقوم بعملة باستخدام تقنية أدوبي الجديدة وهي AIR والتي تتيح لنا تطوير وتصميم برامج منفصلة عن المتصفح كـ برامج سطح المكتب والأندرويد والأيفون. الخطوات التي سوف نقوم بها هي: 1) عرض كاميرا الكمبيوتر باستخدام الأكشن سكريبت 3. 2) كيفية استخدام الكلاس PNGEncoder. 3) كيفية حفظ الملفات على سطح المكتب بواسطة تقنية AIR. في البداية يجب أن نقوم بتحميل الكلاس PNGEncoder لأنها لا تأتي متضمنه في مكتب الأكشن سكريبت 3 من خلال الرابط التالي:     https://code.google.com/p/as3corelib/  وحتى يكون العمل منظم سوف أقوم بوضع جميع الملفات في مجلد واحد فقط. بعد تحميل الملف قم بفتحة ثم أدخل إلى المجلد as3corelib-.93 ثم src وفك الضغط عن المجلد com بداخل هذا المجلد جميع الأوامر التي نحتاجها لهذا الكلاس. ثم قم بإنشاء ملف AIR باسم webcam وسوف تكون ابعاد الملف 320 x 240. هذا الملف سوف يحتوي على طبقة واحدة فقط باسم Actions لنضع فيها أوامر الأكشن سكريبت فقط لأننا سوف نقوم بكل شيء باستخدام الأوامر فقط. في البداية يجب أن نقوم باستيراد ملف الكلاس الذي نحتاجه وهو PNGEncoder وذلك من خلال كتابة الأمر import ثم مسافة ونكتب اسم المجلد وهو com ثم نقطة ونكتب اسم المجلد الفرعي الذي يحتوي على جميع الملفات وهو adobe ثم نقطة ونكتب images ثم نقطة ونكتب اسم الكلاس الذي نريده وهو PNGEncoder بالإضافة لاستيراد هذا الكلاس نحن بحاجة لاستيراد بعض الكلاسات لملف الفلاش والتي نحتاجها لحفظ الملفات على سطح المكتب. ليكون الأمر في النهاية بهذا الشكل:     import com.adobe.images.PNGEncoder;import flash.filesystem.File;import flash.filesystem.FileStream;import flash.filesystem.FileMode;  حسناً والآن نريد عرض كاميرا الكمبيوتر في البرنامج لذلك سوف نبدأ بإنشاء متغير باسم cam نوعه Camera وللحصول على الكاميرا بإمكاننا استخدام الأمر getCamera من الكلاس Camera وذلك بكتابة اسم الكلاس وهو Camera ثم نقطة ونكتب اسم الخاصية أو السلوك وهو getCamera وسوف يقوم هذا الأمر بالحصول على الكاميرا الافتراضية لجهازك أو بإمكانك كتابة اسم الكاميرا بين القوسين. ليكون الأمر في النهاية بهذا الشكل:     var cam:Camera = Camera.getCamera();  والآن بعد أن حصلنا على الكاميرا نحن بحاجة لعرضها ويمكن القيام بذلك عن طريق كائن من نوع Video والذي سوف يتولى عملية عرض الكاميرا في ملف الفلاش. إذاً لنقم أولاً بتعريف متغير vdo نوعة Video ثم يساوي ونقوم بإنشاء كائن نوعه Video عن طريق كتابة الأمر new ثم اسم الكائن وهو Video وبين القوسين نحدد أبعاد الفيديو لتكن 320x240 ليكون الأمر في النهاية بهذا الشكل:     var vdo:Video = new Video(320,240);  بعد إنشاء الفيديو يجب أن نحدد الكاميرا التي نريد عرضها والمرتبط بها المتغير cam وذلك باستخدام الأمر attachCamera فكل ما علينا القيام به هو كتابة اسم المتغير وهو vdo ثم نقطة ونكتب أسم الخاصية أو السلوك وهو attachCamera وبين القوسين نكتب اسم المتغير المرتبط به الكاميرا وهو cam ليكون الأمر في النهاية بهذا الشكل:     vdo.attachCamera(cam);  عندما تقوم باختبار العمل لن ترى شيء وذلك ببساطة أنك لم تقم بعرض الكائن لقائمة Display List لكي يعرض أثناء تشغيل ملف الفلاش ويمكن القيام بذلك بسهولة عن طريق الخاصية addChild وذلك بكتابة اسم الموفي كليب الذي تريد إضافة هذا الكائن له وبما أننا نريد عرض هذا الكائن في الموفي كليب الرئيسي يمكن أن نشير له باستخدام الأمر this ثم نقطة ونكتب الأمر addChild وبين القوسين نقوم بكتابة اسم الكائن الذي نريد عرضة وهو vdo ليكون الأمر في النهاية كما يلي:     this.addChild(vdo);  وبذلك عند اختبار للعمل سوف تلاحظ عرض الكاميرا الافتراضية لجهازك. الآن نريد أن نقوم بإنشاء حدث وهو عندما يقوم المستخدم بالضغط بزر الفأرة على المشهد الرئيسي stage سوف يتم أخذ لقطة من الفيديو في هذه اللحظة وحفظها على سطح المكتب. إذاً بما أننا نريد إضافة الحدث للمشهد الرئيسي نكتب الأمر stage ثم نقطة ونكتب الأمر addEventListener ونحدد الحدث وهو MouseEvent.MOUSE_DOWN وعند تنفيذ الحدث نقوم باستدعاء الدالة snapshot لذلك سوف نقوم بإنشاء الدالة snapshot تستقبل متغير من نفس نوع الحدث وهو MouseEvent ولا تقوم بإعادة أي قيمة void ليكون الأمر في النهاية بهذا الشكل:     stage.addEventListener(MouseEvent.MOUSE_DOWN, snapshot);function snapshot(e:MouseEvent):void{               }  في داخل هذه الدالة سوف نقوم بإنشاء كائن من نوع BitmapData لأنه عندما الأمر PNGEncoder سوف يستقبل قيمة من نوع BitmapData لذلك سوف نقوم بتعريف متغير باسم bmp نوعه BitmapData ثم يساوي وننشيء هذا الكائن عن طريق استخدام كلمة new ثم اسم الكائن وهو BitmapData وبداخل القوسين نقوم بكتابة حجم اللقطة التي نريد أخذها ولتكن 320x240 ليكون الأمر في النهاية:     var bmd:BitmapData = new BitmapData(320,240);  الآن يجب أن نأخذ لقطة من الكائن Video حتى نستطيع حفظها على سطح المكتب ونقوم بذلك عن طريق كتابة اسم المتغير الذي نوعه BitmapData وهو bmp ثم نقطة ونكتب الأمر draw وبين القوسين نكتب اسم كائن Video وهو vdo ليكون الأمر في النهاية بهذا الشكل:     bmp.draw(vdo);  وبهذا المتغير bmp الآن سوف يحتوي على لقطة من كائن Video. والآن لكي نستخدم PNGEncoder يجب أن نقوم بتعريف متغير باسم ba نوعه ByteArray وذلك لأن الأمر PNGEncoder يقوم بإعادة مصفوفة نوعها ByteArray إذاً نقوم بإنشاء متغير باسم ba من نوع ByteArray ثم يساوي ونكتب الأمر PNGEncoder ثم نقطة ونكتب encode وبين القوسين نكتب اسم الكائن الذي من النوع BitmapData وهو bmp ليكون الأمر كما يلي:     var ba:ByteArray = PNGEncoder.encode(bmp);  الآن يجب أن نحفظ هذه البيانات على سطح المكتب بصيغة .png في البداية سوف نقوم بإنشاء الملف على سطح المكتب وذلك عن طريق إنشاء متغير باسم fle نوعه File ثم يساوي ونريد الآن الوصول لمجلد سطح المكتب ولفعل ذلك هناك خاصية desktopDirectory الموجودة في الكلاس File إذاً سوف نقوم بكتابة اسم الكلاس وهو File ثم نقطة ونكتب الخاصية desktopDirectory ثم نقطة ونكتب السلوك resolvePath والذي يرى ما إذا كان الملف قم تم إنشائه فإنه سوف يحفظ الملف الجديد فوقة أما إن لم يكن موجوداً فإنه يقوم بإنشائه هذا السلوك يستقبل اسم الملف الذي نريد استخدامه متبوعاً بصيغة الملف. ولكي نحفظ كل لقطة باسم مختلف نحن بحاجة لإنشاء متغير int باسم count خارجة الدالة snapshot ونسند القيمة صفر لهذا المتغير بعد ذلك نقوم بزيادة القيامة بداخل الدالة عند إنشاء الملف يكون الأمر في النهاية بهذا الشكل:     stage.addEventListener(MouseEvent.MOUSE_DOWN, snapshot);var count:int = 0function snapshot(e:MouseEvent):void{                var bmd:BitmapData = new BitmapData(320,240);                bmd.draw(vdo);                var ba:ByteArray = PNGEncoder.encode(bmd);                var fle:File = File.desktopDirectory.resolvePath("webcam" + count++ + ".png");}  الآن لدينا الملف الذي نريده يجب أن نقوم بعد ذلك بكتابة بيانات الـ ByteArray الذي يحتوي على اللقطة والمتمثلة في المتغير ba من خلال استخدام كائن FileStream إذاً سوف نقوم بإنشاء متغير باسم fStream نوعه FileStream ثم يساوي ونشئ هذا المتغير عن طريقة كتابة الأمر new ثم نوع المتغير وهو FileStream ليكون الأمر في النهاية كما يلي:     var fStream:FileStream = new FileStream();  بعد ذلك نريد أن نقوم بفتح الملف الذي نريد الكتابة فيه وذلك عن طريق كتابة اسم المتغير fStream ثم نقطة ونكتب الأمر open وبين القوسين نكتب اسم المتغير الذي يقوم بإنشاء الملف وهو fle ثم فاصلة ونكتب نوع الوضع الذي نريد فتح الملف فيه وهو وضع القراءة إذاّ نكتب FileMode.WRITE ليكون الأمر كما يلي:     fStream.open(fle, FileMode.WRITE);  والآن سوف نكتب بيانات ByteArray والمخزنة بالمتغير ba لذلك سوف نستخدم الخاصية writeBytes إذاً سوف نكتب اسم المتغير وهو fStream ثم نقطة نكتب الأمر writeBytes وبين القوسين نكتب اسم المتغير ba والذي يحتوي على بيانات الصورة ليكون الأمر كما يلي:     fStream.writeBytes(ba);  وفي النهاية يجب أن نغلق الملف بعد الكتابة عن طريق استخدام الأمر close ليكون الأمر كما يلي:     fStream.close();  الآن قم باختبار العمل واستمتع بالنتيجة...       تمنياتي لكم بالتوفيق
  3. التعامل مع ملف XML خارجي باستخدام الأكشن سكريبت 3     في السابق تحدثنا عن كيفية إنشاء ملف XML باستخدام الأكشن سكريبت 3. في الحقيقة هو ليس ملف XML فعلي ولكن تركيبة ملف XML ولكن العمل معها بهذه الطريقة لا يعفينا من تعديل ملف الفلاش الأصلي وإنتاجه ثم رفعه من جديد على الانترنت بل أننا لم نستفد كذلك من قوة ملفات XML الخارجية وهذا ما سنفعله الآن بالتحديد. في البداية يجب أن يكون لدينا ملف XML موجود بنفس مكان حفظ ملف الفلاش وهو هنا ملف class.xml ويحتوي على البيانات التالية:     <?xml version="1.0" encoding="UTF-8"?><grade>                <student>                                <st_id>297020280492</st_id>                                <st_name>عبدالله محمد عبدالله العنزي</st_name>                                <quran>11</quran>                                <islamic>24</islamic>                                <arabic>36</arabic>                                <english>31.5</english>                </student>                <student>                                <st_id>296087601625</st_id>                                <st_name>منصور ناصر محمد الخالدي</st_name>                                <quran>3</quran>                                <islamic>22</islamic>                                <arabic>36</arabic>                                <english>26</english>                </student>                <student>                                <st_id>296032401125</st_id>                                <st_name>ناصر فايز عبدالحميد العتيبي</st_name>                                <quran>13</quran>                                <islamic>24.5</islamic>                                <arabic>35</arabic>                                <english>35</english>                </student></grade>  هذه عبارة عن قاعدة بيانات تحتوي على درجات ثلاث طلاب لكل طالب هناك رقم مدني واسمه بالإضافة لدرجته في بعض المواد. سوف نقوم باستيراد هذه البيانات للفلاش عن طريق الأكشن سكريبت وذلك من خلال إنشاء متغير باسم sGrade نوعه XML دون إسناء أي قيمة له كما يلي:     var sGrade:XML;  سوف نقوم بإسناد القيمة في وقت لاحق عندما نقوم بتحميل البيانات من ملف XML. الآن سوف نقوم بتحديد مكان ملف XML وذلك عن طريق تعريف متغير xmlReq نوعه URLRequest ثم يساوي نكتب الأمر new ثم نوع الكائن هو URLRequest وبين القوسين نكتب مسار ملف XML بين علامتي تنصيص إذا كان الملف بنفس مكان حفظ ملف الفلاش نكتب فقط اسم ملف XML ليكون الأمر في النهاية بالشكل التالي:     var xmlReq:URLRequest = new URLRequest("class.xml");  ما قمنا به حتى الآن هو إنشاء متغير نوعيه XML حتى يتيح لنا التحكم بالبيانات الموجودة بداخل ملف XML ولكن قبل ذلك يجب أن نحدد مكان حفظ ملف XML وهذا ما قمنا به عن طريق تعريف متغير من نوع URLRequest. والآن يجب أن نقوم بتحميل البيانات إلى ملف الفلاش وذلك بتعريف متغير باسم xmlLoader نوعه URLLoader ثم يساوي ونكتب الأمر new ثم اسم الكائن وهو URLLoader ليكون الأمر في النهاية بهذا الشكل:     var xmlLoader:URLLoader = new URLLoader();  ما قمنا به هو إنشاء المتغير التي سوف يتولى عمليه تحميل بيانات ملف XML يجب أن نقوم بتحميل البيانات بداخل هذا المتغير وذلك عن طريق استخدام الخاصية load ثم نكتب بين القوسين موقع ملف XML والذي تم تخزينه في المتغير xmlReq لذلك سوف نكتب اسم المتغير فقط ليكون الأمر في النهاية بهذا الشكل:     xmlLoader.load(xmlReq);  بعد أن قمنا بتحميل بيانات ملف XML في المتغير xmlReq يجب أننصت لهذا المتغير ففي حاله تحميل البيانات كاملة في المتغير نقوم بإضافة البيانات إلى الكائن XML وهو sGrade لكي نتحكم بهذه البيانات. لذلك نحن بحاجة لإنشاء حدث للكائن xmlLoader وهو Event.COMPLETE وهو يرى أهل أنتهى تحميل البيانات في المتغير exlLoader أم لا فإذا أنتهى تحميل البيانات فإنه سوف ينادي على داله معينه. لن أقوم بشرح طريقة عمل الاحداث لأنه سبق وقمنا بشرحها لذلك سوف أتحدث عن الأهم وهو ما سوف يحدث بداخل الداله وليكن اسم الداله هو xmlLoaded. ما نريد هو أن يتم تحميل بيانات ملف XML بداخل المتغير sGrade حتى يمكننا التحكم بها ويمكن القيام بذلك عن طريق كتابة اسم المتغير sGrade ثم يساوي ونكتب الأمر new ثم نوع الكائن وهو XML وبداخل القوسين نكتب اسم المتغير التي يتولى عمليه تحميل البيانات وهو xmlLoader ثم نقطة ونكتب الأمر التي سوف يقوم بإسناد بيانات ملف XML إلى المتغير sGrade وهو ببساطه الأمر data ليكون الأمر في النهاية بهذا الشكل:     xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);function xmlLoaded(e:Event):void{                sGrade = new XML(xmlLoader.data);}  حتى الآن قمنا بتحميل البيانات في المتغير sGrade فقط حتى يتسنى لنا التحكم بها وذلك إما عن طريق عرضها في مربع النص أو في نافذة المخرجات Output كما شرحنا في السابق. لنفرض أننا نريد عرض البيانات في مربع نص يحمل الاسم info_txt كل ما علينا فعله هو بداخل الدالة xmlLoaded نكتب اسم مربع النص وهو info_txt ثم نقطة ونكتب الخاصية التي تتيح لنا إضافة نص إلى مربع النص وهي text ثم يساوي ونكتب اسم المتغير الذي يحمل البيانات وهو sGrade ثم نكتب نقطة ونكتب الخاصية التي تقوم بتحويل البيانات إلى نص وهي toXMLString ليكون الأمر في النهاية بهذا الشكل:     function xmlLoaded(e:Event):void{                sGrade = new XML(xmlLoader.data);                info_txt.text = sGrade.toXMLString();}  في الحقيقة أنك لست بحاجة إلى استخدام الخاصية toXMLString إذ يمكنك استخدام اسم المتغير الذي يحمل البيانات فقط وهو sGrade. بعد تحميل البيانات يجب أن نقوم الآن بعرض هذه البيانات. كما لاحظنا أن ملف XML يحتوي على عنصر أساسي وهو grade وعدد من العناصر الفرعية تحميل نفس الاسم وهو student تكرار هذه العناصر يمثل شيء اسمه XMLList بحيث أن هذه العناصر الفرعية فعلياً تمثل مصفوفة Array. في السابق عندما نريد عرض عنصر معين في مربع النص المسمى info_txt يمكن كتابة اسم المتغير الذي يحمل البيانات وهو sGrade ثم نقطه ونكتب اسم العنصر الذي نريد عرضة وليكن العنصر الأول وهو student ليكون الأمر في النهاية بهذا الشكل:     info_txt.text = sGrade.student;  عند عرض هذه البيانات في مربع النص أو حتى نافذة المخرجات باستخدام الأمر trace فإنك سوف تلاحظ أنه تم عرض جميع العناصر الفرعية التي تحمل الاسم student وليس العنصر الفرعي الأول لنفس الاسم. هذا بالضبط ما يجب أن يحدث لذلك نعود لما ذكرناه سابقاً أولا وهو XMLList فكل عنصر من هذه العناصر والتي لها نفس الاسم سوف تمثل عنصر في مصفوفة بحيث إذا كان مجموعه التي باسم student ثلاثة فإنها تكون ثلاث عناصر لمصفوفة اسمها student وبالتالي عندما نريد الوصول للعنصر الأول بإمكاننا كتابة اسم العنصر وهو student وبعد ذلك نكتب فهرس العنصر بين قوسين وبما أننا نريد العنصر الأول فإنه بهذه الحالة يحمل الفهرس رقم صفر بما أن المصفوفة تبدأ الفهرسة من الصفر وليس الواحد ليكون الأمر بالنهاية بهذا الشكل:     info_txt.text = sGrade.student[0];  وعند اختبار للعمل سوف تلاحظ أنه تم عرض العنصر الأول فقط. وبالمثل بإمكانك عرض باقي العناصر ولكن لنفترض أن لديك الكثير من العناصر وتريد عرض العنصر الأخير فقط يمكن القيام بذلك عن طريق استخدام الخاصية length وهي تعرض لك عدد العناصر في XMLList وهي هنا ثلاث عناصر ولكن تذكر أن فهرسة المصفوفة تبدأ بصفر إذاً من المفترض أن يكون فهرس آخر عنصر هو اثنان وليس ثلاثة ذلك يجب حذف واحد من العدد الإجمالي للعناصر. وفيما يلي توضيح لطريقة كتابة الأمر لعرض عدد العناصر في المصفوفة بالإضافة لعرض العنصر الأخير كما يلي:     info_txt.text = sGrade.student.length(); // عرض عدد العناصرinfo_txt.text = sGrade.student[sGrade.student.length() - 1]; // عرض العنصر الأخير  هناك طريقة أخرى للوصول إلى جميع عناصر student أو عنصر محدد وهو باستخدام علامه النجمة * مثلا إذا كنا نريد جميع العناصر الموجودة في العنصر sGrade بإمكاننا كتابة اسم العنصر ثم نقطة ونضع علامة النجمة  وبذلك سوف يعرض العناصر الموجودة بداخل sGrade وهي هنا فقط عناصر student ولكن إذا كنا نريد العنصر الأول فقط من عناصر sGrade بإمكاننا استخدام الفهرسة لعمل ذلك. أيضاً يمكننا عرض عدد عناصر في المصفوفة وعرض العنصر الأخير باستخدام نفس الطريقة وهي النجمة ويمكن كتابة الأوامر بالشكل التالي:     trace(sGrade.*); // sGrade عرض جميع العناصر بداخلtrace(sGrade.*[0]); // sGrade عرض العنصر الأخير بداخلtrace(sGrade.*.length()); // sGrade عرض عدد العناصر بداخلtrace(sGrade.*[sGrade.*.length() - 1]); // sGrade عرض العنصر الأخير بداخل  حسناً لنتحدث قليلاً عن البحث في ملفات XML في الحقيقة هذا سهل جداً لنفترض أننا نريد البحث عن الطالب الذي يحمل الرقم المدني 296087601625 كل ما علينا فعله هو كتابة اسم المتغير الذي يحمل بيانات XML وهو sGrade وبغض النظر عما كنت عرف اسم العنصر الفرعي أو لا بإمكانك استخدام علامه النجمة إذا سوف نضع نقطة ونضع علامة النجمة ثم نقطة وبداخل القوسين نكتب ما نريد البحث عنه بما أننا نريد البحث عن الطالب الذي يحمل الرقم المدني 296087601625 إذا نكتب اسم حقل الرقم المدني وهو st_id ثم نضع علامتي يساوي والغرض منها التحقق من تساوي قيمتين ثم بعد ذلك نضع الرقم المدني بين علامتي تنصيص ليكون الأمر في النهاية بهذا الشكل:     trace(sGrade.*.(st_id == "296087601625"));  وعند اختبار العمل سوف تلاحظ عرض العنصر الذي يحتوي على الرقم المدني 296087601625. لنفترض أننا نريد عرض جميع أسماء الطلاب الموجودة في ملف XML يمكننا عمل ذلك باستخدام for each وذلك عن طريق كتابة الأمر for each وبين القوسين نقوم بتعريف متغير باسم names ونوعه XML لأنه سوف تخزن به بيانات من نفس النوع ثم نكتب الأمر in ونضع المتغير الذي يحمل بيانات ملف XML وهو sGrade ثم نقطة ونضع علامة النجمة لأننا نريد أن نبحث عن اسم الطالب في جميع العناصر الفرعية سواء كان اسمها student أو غير ذلك. وفي داخل القوس المموج سوف نقوم بعرض البيانات في نافذة المخرجات بواسطة الأمر trace بما أننا نريد عرض اسم الطالب وهذا الحقل باسم st_name إذا سوف نكتب اسم المتغير names والذي سوف تخزن به البيانات كل عملية بحث ثم نقطة ونكتب اسم الحقل وهو st_name ليكون الأمر في النهاية بهذا الشكل:     for each(var names:XML in sGrade.*){                trace(names.st_name);}  وعند اختبارك للعمل سوف تلاحظ عرض جميع أسماء الطلاب. هذا شيء حتى الآن وفي وقت لاحق سوف نقوم بالعمل بشكل أكبر من ملفات XML لنستفيد من قوة الفلاش الفعلية في التعامل مع الملفات الخارجية...     تمنياتي لكم بالتوفيق
  4. إنشاء ملفات XML عن طريق الأكشن سكريبت 3     سوف نتعرف من خلال هذا الدرس على كيفية تعامل الفلاش أو تحديداً الأكشن سكريبت 3 مع ملفات XML... في البداية ما الفائدة من استخدام XML في الفلاش...؟! الحقيقة أن العمل مع ملفات XML في الفلاش سوف يجعل من محتوى أكثر مرونة وسهل التحديث مستقبلاً على سبيل المثال لنفترض أنك تريد عمل عارض للصور باستخدام الفلاش في البداية تقوم باستيراد الصور إلى الفلاش سواء كانت 4, 5 أو حتى 10 بعد ذلك تقوم بإعداد ملف الفلاش لكي يقوم بعرض الصور بالطريقة التي تريد ثم تنتج الملف النهائي swf وتقوم برفعه على الانترنت, هذا جيد ولكن ماذا لو أنك أردت إضافة صوره جديدة أو عدد من الصور أو إزاله أحدها سوف نضطر في هذه الحالة إلى تعديل ملف الملفات واستيراد بعد الإضافية أو حذف بعضها ثم تنتج العمل وتقوم برفعه على الانترنت. هذا شيء متعب قليلاً لاسيما إذا كان حجم الملف المنتج كبير وسرعه النت لديك بطيئه لذلك ما رأيك أن نقوم بإنتاج العمل مره واحده فقط مع تقليل الحجم واستخدام XML لتحديد عدد الصور وعرضها. مثال آخر لنفترض أن لديك قاعدة بيانات قمت بإنشائها باستخدام مايكروسوفت أكسس تحتوي على معلومات عن مجموعه من الطلاب فيها اسم الطالب والرقم المدني ودرجات الطالب في بعض المواد وتريد أن تقوم بعرض هذه البيانات باستخدام الفلاش أسهل طريقة لعمل ذلك هي بتحويل قاعده البيانات أو بمعنى أصح أحد الجداول إلى ملف XML باستخدام برنامج الأكسس بعد ذلك تقوم عن طريق الفلاش بعرض هذه البيانات. لنتعرف في البداية على شكل ملف XML...؟! أبسط مثال ممكن أن نبدأ به كـ توضيح لملف XML هي قاعد بيانات للطلاب تحتوي على اسم الطالب ورقمه المدني بالإضافة لدرجته في بعض المواد بالشكل التالي: <?xml version="1.0" encoding="UTF-8"?>   [ltr]<grade>                <student>                                <st_id>297020280492</st_id>                                <st_name>عبدالله محمد عبدالله العنزي</st_name>                                <quran>11</quran>                                <islamic>24</islamic>                                <arabic>36</arabic>                                <english>31.5</english>                </ student >                < student >                                <st_id>296087601625</st_id>                                <st_name>منصور ناصر محمد الخالدي</st_name>                                <quran>3</quran>                                <islamic>22</islamic>                                <arabic>36</arabic>                                <english>26</english>                </ student >                < student >                                <st_id>296032401125</st_id>                                <st_name>ناصر فايز عبدالحميد العتيبي</st_name>                                <quran>13</quran>                                <islamic>24.5</islamic>                                <arabic>35</arabic>                                <english>35</english>                </ student ></grade>[/ltr]  الملف السابق يمثل ملف XML في بداية الملف هو تعريف للغة XML يبدأ برقم الإصدار ثم نوع ترميز الملف. ننتقل بعد ذلك للجزء الأهم وهو تعريف tage أو لنقل العنصر الأساسي لملف xml وبداخله جميع معلومات الملف وهو هنا يبدأ <grade> وينتهي بنفس الرمز ولكن تسبقه علامه باك سلاش </grade> بداخل هذا العنصر نقوم بتعريف عدد العناصر التي نريدها لنفترض أن لدينا ثلاث طلاب إذا نقوم بإنشاء ثلاث عناصر رئيسية باسم student بداخل كل عنصر من هذه العناصر الثلاث يحتوي على بيانات طالب واحد على سبيل المثال العنصر الأول < student> يحتوي على بيانات الطالب  عبدالله محمد عبدالله العنزي كـ الرقم المدني ودرجته في مادة القرآن الكريم والتربية الإسلامية واللغة العربية والانجليزية وبإمكانك إضافة بيانات أخرى ولكن سوف نكتفي هنا بهذه البيانات فقط. كما لاحظنا أن تعريف أو بمعنى أصح إنشاء ملف XML سهل جداً وتبدل وكأنها شكل شجري. وكل هذا يمكن عمله باستخدام Notepad مع حفظ الملف بصيغه XML. حسناً. لنعد مجدداً للحديث عن الفلاش بعد أن تعرفنا على لغة XML أو طريقة كتابة ملف XML. في الحقيقة بإمكاننا إنشاء ملف XML عن طريق الفلاش وباستخدام أوامر الأكشن سكريبت 3 وذلك من خلال تعريف متغير باسم sGrade من نوع XML ثم نضع علامه يساوي وننشئ كائن من نوع XML باستخدام الأمر new ثم نوع الكائن وهو XML وبداخل الأقواس نضع العنصر الأساسي كائن XML لنفترض أنه grade إذا سوف نضع بداخل القوسين <grade/> هذا الأمر يقوم بتعريف العنصر ويغلقه في نفس الوقت. ليكون الأمر في النهاية بهذا الشكل:     [ltr]var sGrade:XML = new XML(<grade/>);[/ltr]    بإمكاننا بعد ذلك إضافة العناصر والبيانات للـ XML وذلك من خلال كتابه اسم العنصر الأساسي بعد ذلك اسم العنصر الفرعي ثم علامة يساوي ونكتب البيانات التي نريدها بين علامتي تنصيص. لنفترض أننا نريد إضافة الرقم المدني st_id نقوم أولاً بكتابه أسم العنصر الأساسي وهو sGrade ثم نقطة ونكتب العنصر الفرعي وهو st_id ثم يساوي ونكتب الرقم المدني بين علامتي تنصيص وليكن “297020280492” ليكون الأمر في النهاية بالشكل التالي:     [ltr]sGrade.st_id = "297020280492";[/ltr]    وبإمكاننا إضافة اسم الطالب بنفس الطريقة السابقة ليكون الأمر في النهاية بهذا الشكل:     [ltr]sGrade.st_name = "عبدالله محمد عبدالله العنزي";[/ltr]    والآن نقوم بعرض البيانات في نافذة المخرجات Output لنختبر العمل وذلك بكتابه الأمر trace وبداخل القوسين نضع أسم الكائن وهو sGrade كما يلي:     [ltr]trace(sGrade);[/ltr]  لعرض لنا البيانات كما قمنا بإنشائها وبنفس نمط ملفات XML كما يلي:     [ltr]<grade>  <st_id>297020280492</st_id>  <st_name>عبدالله محمد عبدالله العنزي</st_name></grade>[/ltr]  بعد إنشاء ملف XML باستخدام الأكشن سكريبت 3 يمكننا الآن عرض البيانات في ملف الفلاش. يجب أولاً أن يكون لدينا مربع نص يعمل اسم instance name وليكن اسم مربع النص info_txt ثم نضع النص في هذا المربع باستخدام الخاصية text ثم يساوي ونكتب اسم الكائن وهو sGrade ثم نضع نقطه بعد ذلك نكتب العنصر الذي نريد عرض بياناته في مربع النص ولنفترض أنه st_id ليكون الأمر في النهاية بهذا الشكل:   [ltr]Info_txt.text = sGrade.st_id;[/ltr]  قم باختبار العمل لترى أن الرقم المدني تم عرضة في مربع النص. هناك أمور كثير يمكن أن نقوم بها لنفترض أننا نريد أن يكون الرقم المدني خاصية أو ما يعرف باسم attributes بدلاً من أن يكون عنصر ببساطه قبل كتابة اسم العنصر نضع علامة @ ليكون الأمر بالنهاية بهذا الشكل:     [ltr][email protected]_id = "297020280492";[/ltr]  الآن عندما نقوم باختبار العمل باستخدام الأمر trace لترى أن الرقم المدني أصبح خاصيه أو attributes للعنصر grade ولكي نقوم بعرض هذه الخاصية في مربع النص نقوم بنفس الخطوات السابقة أي كتابه اسم الخاصية تسبقها علامه @ ليكون الأمر كما يلي:     [ltr]info_txt.text = [email protected]_id;[/ltr]  لنتحدث الآن عن الخصائص الموجودة في لغة الأكشن سكريبت 3 تتيح لنا التعامل مع XML أحد هذه الخصائص هي خاصية appendChild وهي تقوم بإضافة عنصر جديد في آخر الملف ويمكن استخدام هذه الخاصية بكتابه اسم  الكائن أولاً وهو sGrade ثم نقطة ونكتب اسم الخاصية appendChild وبين القوسين نقوم بكتابة العنصر الجديد ولكن quran ويحتوي على درجة القرآن الكريم وهي 11 ليكون الأمر في النهاية بالشكل التالي:     [ltr]sGrade.appendChild(<quran>11</quran>);[/ltr]  الآن عندما نقوم بعرض الملف باستخدام الأمر trace سوف تلاحظ إضافة عنصر جديد باسم quran اسفل العناصر السابقة. حسناً لنفترض أننا نريد أن يكون العنصر في البداية وقبل جميع العناصر السابقة بإمكاننا ذلك باستخدام الأمر prependChild وبنفس الطريقة السابقة ليكون الأمر بهذا الشكل:     [ltr]sGrade.prependChild(<quran>11</quran>);[/ltr]  وعندك اختبار للعمل ترى أنه تم إضافة العنصر quran في بداية الملف. لنفترض أننا نريد إضافة عنصر جديد بعد عنصر معين مثلاً إضافة عنصر جديد وهو Islamic بعد العنصر quran بإمكاننا القيام بذلك ببساطه باستخدام الخاصية insertChildAfter هذه الخاصية تستقبل معاملين بين القوسين أولاً اسم العنصر الذي تريد إضافة العنصر الجديد بعده أما المعامل الثاني هو العنصر الجديد الذي تريد إضافته وليكن هو Islamic ونضع 24 كـ بيانات لهذا ليكون الأمر في النهاية بهذا الشكل:     [ltr]sGrade.insertChildAfter(sGrade.quran, <islamic>24</islamic>);[/ltr]  ولكن إذا كنت تريد إضافة عنصر جديد قبل عنصر معين يمكنك ذلك باستخدام الأمر insertChildBefore وذلك بنفس الطريقة السابقة كما يلي:     [ltr]sGrade.insertChildBefore(sGrade.quran, <islamic>24</islamic>);[/ltr]  وهناك العديد من الخصائص بإمكانك الاطلاع عليها من خلال الملفات المساعدة للفلاش. لنتحدث الآن عن تغيير البيانات وحذف عنصر معين لنبدأ أولاً بتغيير البيانات. لنفترض أننا نريد تغيير درجة مادة القرآن الكريم من 11 إلى 13 يمكننا القيام بذلك بسهولة عن طريق إسناد قيمة جديدة لهذا العنصر عن طريقة كتابة اسم الكائن sGrade ثم نقطة بعد ذلك اسم العنصر التي تريد تغيير بياناته وهو quran ثم يساوي ونضع القيمة الجديدة بين علامتي تنصيص بالشكل التالي:     [ltr]sGrade.quran = "13";[/ltr]  الأمر السابق سوف يقوم بحذف البيانات القديمة ووضع البيانات الجديدة بدلاً منها. لنتحدث الآن عن حذف عنصر معين لنفترض أننا نريد حذف درجة مادة التربية الإسلامية بإمكاننا ذلك عن طريقة كتابة الخاصية delete ثم بعد ذلك نكتب اسم الكائن sGrade ثم نقطة ونكتب اسم العنصر الذي نريد حذفة وهو Islamic ليكون الأمر في النهاية بهذا الشكل:     [ltr]delete sGrade.islamic;[/ltr]  وعند اختبارك للعمل سوف ترى أنه تم حذف العنصر islamic. من خلال ما استعرضناه سابقاً يتضح أنه بإمكاننا إنشاء ملف XML باستخدام الفلاش والتعامل مع هذا الملف بسهولة من خلال أوامر الأكشن سكريبت ولكن هذه ليست القوة الحقيقية في التعامل مع ملفات XML إذ أنه سوف تواجهنا نفس المشاكل السابقة وهو أننا سوف نضطر إلى تعديل ملف الفلاش وإنتاجه ثم رفعه على الانترنت من جديد. إذ أننا نريد أن يكون ملف XML منفصل عن الفلاش حتى يسهل علينا تحديث البيانات دون تعديل ملف الفلاش باستمرار وهذا ما سوف نتحدث عنه في الدرس القادم.     تمنياتي لكم بالتوفيق
  5. السلام عليكم ورحمه الله وبركاته عندما تعمل على بيانات كثيره من أفضل أن تجد طريقه لتنظيم وترتيب هذه البيانات حتى تتمكن من الوصول إليها بسهوله. وهذه الطريقة هي باستخدام المصفوفات. لنفترض أننا نريد تحميل 50 صوره في البرنامج. أليس من الأفضل أن نقوم بتخزين اسماء هذه الصور بطريقه منظمه أليس كذلك ...؟! باستخدام المصفوفات نستطيع فعل ذلك أحد هذه المصفوفات يطلق عليها اسم Array ويمكن تعريف هذا النوع من المصفوفات بنفس الطريقة التي نعرف بها المتغيرات وذلك بكتابه كلمه var ثم مسافه بعدها نكتب اسم المتغير ولتكن thumbnails ونوع هذا المتغير هو Array ثم مسافه ونضع علامه يساوي ثم مسافه وأخيراً نكتب new Array(); لإنشاء المصفوفة. والآن بإمكاننا إضافة القيم إلى المصفوفة وذلك بالانتقال لسطر جديد ثم نكتب اسم المصفوفة وهي thumbnails ثم نقطه ونكتب الأمر push وهو يقوم بإضافة قيمة إلى المصفوفة. وبداخل قوسين سوف نقوم بإضافة العنصر أو القيمة التي نريد إضافتها ولتكن مثلاً (“image1.jpg”); وبالمثل بإمكانك إضافة الصورة الثانية والثالثة ...الخ. ليكون الأمر بالنهاية بالشكل التالي: var thumbnails:Array = new Array(); thumbnails.push(“image1.jpg”); thumbnails.push(“image2.jpg”); thumbnails.push(“image3.jpg”); في الحقيقة هي إحدى الطرق لإنشاء المصفوفة هناك طريقه أخرى وهي بكتابه القيم بداخل أقواس الأمر Array دون الحاجه لأمر push ليكون الأمر بالشكل التالي: var thumbnails:Array = new Array(“image1.jpg”, “image2.jpg”, image3.jpg”); الأمور سوف تزداد إثارة الآن عندما تعلم أن هناك طريقه ثالثه لإنشاء المصفوفة وهي بالشكل التالي: var thumbnails:Array = [“image1.jpg”, “image2.jpg”, image3.jpg”]; جميع الطرق السابقة تقوم بإنشاء مصفوفة باسم thumbnails تحمل القيم image1.jpg, image2.jpg & image3.jpg بقي أمر واحد فقط وهو كيف يمكن الوصول أو استخدام أحد هذه القيم ...؟! يمكن الوصول لأحد هذه القيم بسهوله وذلك باستخدام طريقه Array Access Notation ولكن قبل التطرق لهذه الطريقة يجب أن تعلم أن الترقيم أو الفهرسة Index في المصفوفات يبدأ من الرقم صفر هذا يعني أن أول عنصر أو قيمه في المصفوفة سوف يكون رقمها صفر أما القيمة الثانية فهي تحمل الرقم واحد ...الخ. والآن لنبدأ بعرض مثلاً أول قيمة في المصفوفة في نافذة المخرجات Output إذاً لنبدأ أولاً بكتابه الأمر trace ثم نفتح قوس ونكتب اسم المصفوفة thumbnails ثم نفتح قوس آخر ونكتب رقم أو فهرس Index العنصر الأول وهو صفر ثم نقوم بإغلاق القوسين ليكون الأمر في النهاية بهذا الشكل: var thumbnails:Array = [“image1.jpg”, “image2.jpg”, image3.jpg”]; trace(thumbnails[0]); الطريقة الأخرى لتخزين بيانات كثيره هي باستخدام نوع آخر من المصفوفات يدعى Vector هذا الأمر يعمل فقط بدءاً من مشغل الفلاش الإصدار العاشر ما فوق. الفريق الوحيد بين الـ Array و الـ Vector هو أن Array بإمكانها تخزين بيانات بأنواع مختلف قد تكون بعض هذه البيانات جمل String والبعض الآخر أرقام Number بينما في Vector يجب أن تكون جميع البيانات أما جمل String أو أرقام Number. وبإمكاننا إنشاء هذا النوع من المصفوفات بتعريف متغير من نوع Vector وذلك بكتابه كلمه var ثم مسافه ونكتب اسم المتغير وهو thumbnails هناك يجب أن نحدد نوع البيانات التي سوف تحملها أو تقوم بتخزينها هذه المصفوفة لذلك نضع نقطه ونكتب نوع البيانات بين علامتي < > وليكن String ثم مسافه ونضع علامه يساوي ثم مسافه ونكتب كلمه new ثم مسافة ونكتب الأمر Vector بالإضافة لنوع البيانات ثم نفتح قوس ونقوم بإغلاقه ليكون الأمر في النهاية بهذا الشكل: var thumbnails:Vector.<String> = new Vector.<String>(); يمكن بعد ذلك اسناد القيم لهذا النوع من المصفوفات بنفس الطريقة السابقة. المهم هنا يجب أن تعلم أن المصفوفات هي الطريقة المثالية لتنظيم البيانات لكي تستطيع الوصول إليها بسهولة وسوف نعتمد في هذه الدروس على استخدام Array لأنها أسهل ويمكن أن تحمل أكثر من نوع من البيانات... تمنياتي لكم بالتوفيق
  6. السلام عليكم ورحمه الله وبركاته الأمر switch: في السابق قمنا بشرح الأحداث وتطرقنا إلى الأحداث المرتبطة بـ لوحه المفاتيح من خلال المثال التالي: // import Sprite & KeyboardEvent Class import flash.display.Sprite; import flash.events.KeyboardEvent; // create Rectangel object in the stage var listener:Sprite = new Sprite(); listener.graphics.beginFill(0xCC9900, 1); listener.graphics.drawRect(30, 30, 100, 50); listener.graphics.endFill(); addChild(listener); // add event listener to the object stage.addEventListener(KeyboardEvent.KEY_DOWN, moveRect); // functions be called execute when the event is received to move the Rectangle function moveRect(evt:KeyboardEvent):void { switch (evt.keyCode) { case Kayboard.LEFT : listener.x -= 5; break; case Keyboard.UP : listener.y -= 5; break; case Keyboard.RIGHT : listener.x += 5; break; case Keyboard.DOWN : listener.y += 5; break; } } في هذا الأمر هناك قمنا باستخدام أحد أدوات الشرط وهو الأمر switch وذلك لكي نحدد شيء معين بناءاً على حركه المستخدم. في الأمر السابق يقوم الأمر switch بمقارنه رمز زر الكيبورد الذي يتم الضغط عليه من قبل المستخدم مع القيمة المستخدمة في كل حاله case في البداية سوف يقوم يتحقق من الشرط evt.keyCode والموجود في الأمر switch بين القوسين ثم ينتقل إلى الحالة الأولى وهي case Keyboard.LEFT ليقارنها مع الشرط هل يتفق رمز الزر الذي قام بالضغط عليه المستخدم مع رمز السهم الأيسر Keyboard.LEFT إذا أتفق الرمزان في هذه الحالة سوف ينفذ الأمر listener.x -= 5; وهي تقوم بتحريك المربع جهة اليسار بعدها ذلك يخرج من الشرط مستخدماً الأمر break; لأن في هذه الحالة تحقق الشرط ليس هناك حاجة لتنفيذ أو التحقق من باقي الحالات. ولكن إن لم يجد البرنامج الأمر break; في هذه الحالة سوف يقوم بتنفيذ الأمر التالي مباشرة دون التحقق من الحالة Keyboard.UP وعليه سوف ينفذ الأمر listener.y -=5; ويحرك المربع لأعلى إلى أن يصادف الأمر break; ليخرج من الشرط. في الأمر السابق تحققنا من ما إذا كان المستخدم سوف يضغط على أحد الأسهم أم لا فقط ولكن ماذا لو أنني كنت أريد أن يعرض رساله معينة في نافذة المخرجات Output في حالة الضغط على أي زر آخر من أزرار الكيبورد هنا يأتي دور الأمر default وهو يقوم بتنفيذ بعض الأوامر في حاله عدم تحقق أي من الحالات السابقة ويمكن إعادة كتابة الدالة السابقة بإضافة هذا الأمر بالشكل التالي: // functions be called execute when the event is received to move the Rectangle function moveRect(evt:KeyboardEvent):void { switch (evt.keyCode) { case Kayboard.LEFT : listener.x -= 5; break; case Keyboard.UP : listener.y -= 5; break; case Keyboard.RIGHT : listener.x += 5; break; case Keyboard.DOWN : listener.y += 5; break; defualt : trace(“a different key was pressed”); break; } } الأمر if: هناك أداة أخرى من أدوات الشرط وهي if وهي تقوم بنفس عمل أداة الشرط السابقة ولكن مع اختلاف الطريقة ولكن كتابة الدالة السابقة باستخدام if بالشكل التالي: // functions be called execute when the event is received to move the Rectangle function moveRect(evt:KeyboardEvent):void { if (evt.keyCode == Kayboard.LEFT ) { listener.x -= 5; } else if (evt.keyCode == Keyboard.UP ) { listener.y -= 5; } else if (evt.keyCode == Keyboard.RIGHT ) { listener.x += 5; } else if (evt.keyCode == Keyboard.DOWN ) { listener.y += 5; } else { trace(“a different key was pressed”); } } هنا أختلف الوضع تماماً بحيث أنه يتحقق شرط واحد فقط فـ لا مجال لتحقق أكثر من شرط في نفس الوقت كما حدث مع أداة switch في حاله إزالة الأمر break إلا في حاله أردت أنت ذلك...!!!. في بداية الامر السابق نتحقق من تساوي قيمتين من خلال علامتي == لنرى هل الجزء الأيسر يساوي الجزء الأيمن أم لا...؟! هنا نرى هل رمز الزر التي قام بالضغط عليه المستخدم يساوي رمز السهم لليسار إذا كانا متساويين فإن سوف يقوم بتحريك المربع جهة اليسار وبالمثل مع باقي المقارنات ولكن في حاله عدم تحقق أي من الشروط السابقة فإنه سوف يقوم بتنفيذ ما بداخل الأمر else ليعرض عبارة في نافذة المخرجات Output... المعاملات: هناك العديد من المعاملات التي يمكن استخدامها مع أدوات الشرط وهي بالشكل التالي: سوف تزداد الأمور إثارة كلما تابعنا وسوف يكون الدرس القادم أكثر إثاره ^_^ تمنياتي لكم بالتوفيق
  7. السلام عليكم ورحمه الله وبركاته عندما نتحدث الأحداث في الأكشن سكريبت 3 فإننا نتحدث عن شيء أساسي وهو Listener. في الاصدارات السابقة للاكشن سكريبت كنا نقوم بإضافة الحدث مباشرة للكائن على السبيل المثال عند الضغط على الزر تعرض عبارة في نافذة Output فإننا نقوم بذلك بالشكل التالي : bClick.onRelease = function():Void { trace("Button is Clicked"); }; فنبدأ أولا باسم الكائن وهو الزر باسم bClick ثم نستخدم اسلوب dot syntax وهي ببساطة نضع نقطة ونكتب الاحدث Event او الخاصية Property او السلوك Method المطلوب وهنا نريد الحدث onRelease ثم بعد ذلك نقوم بتعريف inline function وهي دالة عادية لكن ليس لها اسم وبداخل هذه الداله الاوامر التي تنفذ في حالة الضغط على الزر .الآن في الاصدار الجديد الاكشن سكريبت 3 اختلف الأمر واصبح اكثر سهوله ومتعه يكفي ان طريقة او شكل كتابة الأوامر Syntax ثابته وهو اننا نقوم بالاستماع للحدث بدلاً من اسنادة مباشرة للكائن فالمثال السابق يكتب بالاكشن سكريبت 3 بالشكل التالي : bClick.addEventListener(MouseEvent.CLICK, btnClicked); function btnClicked(evt:MouseEvent):void { trace("Button is Clicked"); } ما حدث هنا اننا قمنا بكتابة اسم الكائن وهو bClick ثم نقطة وقمنا بإضافة الأمر addEventLestener والذي يقوم بالاستماع للأحداث التي تصدر من هذا الكائن وهو الزر bClick ثم نفتح القوس وهذا الامر يمرر له معاملين الأول هو الحدث الذي سوف نستمع إليه فإذا صَدَرَ من الكائن فإنه سوف ينتفذ اوامر معينه أما المعامل الثاني يعرف باسم Event Handler وهو ببساطة اسم الدالة التي سوف يتم تنفيذها عن حدوث هذا الحدث واسم الدالة هنا btnClicked عند تعريف هذه الداله يجب أن تمرر لها معامل نوعه من نفس نوع الحدث MouseEvent وهذا ما قمنا به والسبب في ذلك أن الأمر addEventListener يقوم بإعادة أو توليد كائن event Object وهو يحتوي على معلومات عن الحدث او على أقل تقدير تحتوي على معلومات عن الكائن ( الزر bClicked ) الذي قام بتوليد هذا الحدث. في الحقيقة هناك نوعين رئيسيين من الأحداث اولها هي الأحداث المرتبطة بالمستخدم user-based event وهي الأحداث التي تنفذ بناءاً على طلب المستخدم مثل الأحداث المرتبطة بالفأرة أو الكيبورد اما النوع الثاني هي الأحداث التي تنفذ دون تدخل المستخدم time-based event وهي الأحداث التي يتم إضافتها في إطار معين فعندما ينتقل رأس التسجيل PlayHead لهذا الإطار فإن هذا الحدث سوف ينفذ مباشرة مثل Timer & EnterFrame. التعرف على الصنف MouseEvent Class : الصنف MouseEvent Class يحتوي على العديد من الأحداث المرتبطة بالفأرة. نبدأ بمثال وبعد ذلك نشرح كل حدث على حده. المثال كالتالي : // import Sprite & MouseEvent Class import flash.display.Sprite; import flash.events.MouseEvent; // create Rectangel object in the stage var listener:Sprite = new Sprite(); listener.graphics.beginFill(0xCC9900, 1); listener.graphics.drawRect(30, 30, 100, 50); listener.graphics.endFill(); listener.doubleClickEnabled = true; addChild(listener); // add event listener to object listener.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); //listener.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler); listener.addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler); listener.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); listener.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheelHandler); listener.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler); listener.addEventListener(MouseEvent.DOUBLE_CLICK, doubleClickHandler); // functions be called execute when the event is received to change Rectangle fill color function mouseDownHandler(mouseEvent:MouseEvent):void { //Color black listener.graphics.beginFill(0x000000, 1); listener.graphics.drawRect(30, 30, 100, 50); listener.graphics.endFill(); } function mouseMoveHandler(mouseEvent:MouseEvent):void { // Color red listener.graphics.beginFill(0xff0000, 1); listener.graphics.drawRect(30, 30, 100, 50); listener.graphics.endFill(); } function mouseOutHandler(mouseEvent:MouseEvent):void { // Color green listener.graphics.beginFill(0x00ff00, 1); listener.graphics.drawRect(30, 30, 100, 50); listener.graphics.endFill(); } function mouseUpHandler(mouseEvent:MouseEvent):void { // Color yellow listener.graphics.beginFill(0xffff00, 1); listener.graphics.drawRect(30, 30, 100, 50); listener.graphics.endFill(); } function mouseWheelHandler(mouseEvent:MouseEvent):void { // Color pink listener.graphics.beginFill(0xff00ff, 1); listener.graphics.drawRect(30, 30, 100, 50); listener.graphics.endFill(); } function mouseOverHandler(mouseEvent:MouseEvent):void { // Color blue listener.graphics.beginFill(0x0000ff, 1); listener.graphics.drawRect(30, 30, 100, 50); listener.graphics.endFill(); } function doubleClickHandler(mouseEvent:MouseEvent):void { // Color brown listener.graphics.beginFill(0x800000, 1); listener.graphics.drawRect(30, 30, 100, 50); listener.graphics.endFill(); } - الحدث MouseEvent.CLICK: يتم تنفيذ هذا الحدث عندما يقوم المستخدم بالضغط على الزر تحديداً عندما يقوم المستخدم بإفلات زر الفأرة الايسر. - الحدث MouseEvent.DOUBLE_CLICK: يتم تنفيذ هذا الحدث عندما يقوم المستخدم بالضغط ضغطاً مزدوجاً على الزر. - الحدث MouseEvent.MOUSE_DOWN: يتم تنفيذ هذا الحدث عندما يقوم المستخدم بالضغط على الزر وقبل إفلات زر الفأرة الايسر. - الحدث MouseEvent.MOUSE_UP: يتم تنفيذ هذا الحدث عندما يقوم المستخدم بالضغط على الزر تحديداً عندما يقوم المستخدم بإفلات زر الفأرة الايسر. وهو مشابه للحدث MouseEvent.CLICK. - الحدث MouseEvent.MOUSE_MOVE: يتم تنفيذ هذا الحدث عندما يتحرك مؤشر الفأرة في أي مكان فوق الزر. - الحدث MouseEvent.MOUSE_OVER: يتم تنفيذ هذا الحدث عندما يكون مؤشر الفأرة فوق الزر. وهو مشابه للحدث MouseEvent.MOUSE_MOVE. - الحدث MouseEvent.MOUSE_OUT: يتم تنفيذ هذا الحدث عندما يكون مؤشر الفأرة فوق الزر ثم ينتقل إلى خارج الزر وليس فوقة. - الحدث MouseEvent.MOUSE_WHEEL: يتم تنفيذ هذا الحدث عندما يكون مؤشر الفأرة فوق الزر وتحريك عجلة wheel الفأرة. - الحدث MouseEvent.ROLL_OUT: مشابه للحدث MouseEvent.MOUSE_OUT. - الحدث MouseEvent.ROLL_OVER: يتم تنفيذ هذا الحدث عندما يكون مؤشر الفأرة فوق الزر. وهو مشابه للحدث MouseEvent.MOUSE_OVER. التعرف على الصنف KeyboardEvent: هذا الصنف يحتوي على الاحداث المرتبطة في لوحة المفاتيح Keyboard. هذا النوع من الاحداث يختلف عن السابق في انه يجب أن يكون الكائن مفعل أي تم تحديده لكي يقوم الكائن بتوليد الاحدث ولذلك في الغالب فإن هذا النوع من الأحداث يضاف إلى الكائن stage objects او باختصار يضاف لمنطقة العمل لأنها تكون مفعله تلقائياً مع بداية تشغيل البرنامج مباشرة. لنبدأ بالمثال اولا وهو كالتالي : // import Sprite & KeyboardEvent Class import flash.display.Sprite; import flash.events.KeyboardEvent; // create Rectangel object in the stage var listener:Sprite = new Sprite(); listener.graphics.beginFill(0xCC9900, 1); listener.graphics.drawRect(30, 30, 100, 50); listener.graphics.endFill(); addChild(listener); // add event listener to the object stage.addEventListener(KeyboardEvent.KEY_DOWN, moveRect); // functions be called execute when the event is received to move the Rectangle function moveRect(evt:KeyboardEvent):void { switch (evt.keyCode) { case 37 : listener.x -= 5; break; case 38 : listener.y -= 5; break; case 39 : listener.x += 5; break; case 40 : listener.y += 5; break; } } ما قمنا به اولا هو رسم مستطيل بعد ذلك قمنا بإضافة الحدث Key_DOWN للكائن stage فعند توليد الحدث نقوم باستدعاء الدالة moveRect وهي ببساطة تقوم بتحريك المستطيل اما للاعلى او الاسفل او يمين او يسار. - الحدث KEY_DOWN: يتم توليد هذا الحدث عند الضغط على احد مفاتيح الكيبورد وقبل افلات او ترك المفتاح. - الحدث KEY_UP: يتم توليد هذا الحدث عند إفلات او ترك احد مفاتيح الكيبورد. - الخاصية ctrlKey: تقوم بإعادة return القيمة true إذا قام المستخدم بالضغط على مفتاح Ctrl والقيمة false إلى لم يتم الضغط على نفس المفتاح. - الخاصية shiftKey: تقوم بإعادة return القيمة true إذا قام المستخدم بالضغط على مفتاح Shift والقيمة false إلى لم يتم الضغط على نفس المفتاح. - الخاصية keyCode: هذه الخاصية تقوم بإعطائك رمز كل مفتاح فمثلا السهل للأعلى رمزه 38 ورمز السهم لليسار هو 37 وأيضاً يمكن الوصول لنفس الرمز عن طريق الامر Keyboard.LEFT ورمز السهم لليمين هو 39 وأيضاً يمكن الوصول لنفس الرمز عن طريق الأمر Keyboard.RIGHT ورمز السهم للاسفل هو 40 كما يمكن الوصول لرمز المفتاح Space عن طريق الامر Keyboard.SPACE والمفتاح Backspaceعن طريق الامر Keyboard.BACKSPACE بالإضافة للمفتاح Enter عن طريقة الأمر Keyboard.ENTER. الحدث ENTER_FRAME: هذا الحدث هو احد الاحداث التي لا يتدخل المستخدم فيها فهي تحدث تلقائياً. الحدث ENTER_FRAME يتم توليده بناءاَ على سرعه ملف الفلاش فإذا كانت سرعه ملف الفلاش 12 fps فإذا هذا الحدث سوف يتم توليده 12 مره في الثانية, وهي تضاف للكائن stage object مباشرة. المثال التالي يوضح عمل هذا الحدث: // import Sprite & Event Class import flash.display.Sprite; import flash.events.Event; // create Circle object in the stage var drawCir:Sprite = new Sprite(); drawCir.graphics.beginFill(0xCC9900, 1); drawCir.graphics.drawCircle( 30, 30, 30); drawCir.graphics.endFill(); addChild(drawCir); // add event listener to the object stage.addEventListener(Event.ENTER_FRAME, moveCir); // functions be called execute when the event is received to move the Circle function moveCir(evt:Event):void { drawCir.x += 5; drawCir.y += 5; } هذه الاوامر تقوم اولاً برسم دائرة باسم drawCir بعد ذلك قمنا بإضافة الحدث ENTER_FRAME لمنطقة العمل او الكائن stage object بحيث يتم توليد هذا الحدث 12 مره في الثانية الواحده ( على فرض ان سرعه ملف الفلاش 12 fps ) وبالتالي سوف يتم استدعاء الداله 12 مره في الثانية وهذه الداله تحتوي على اوامر لتحريك الدائرة. الحدث TIMER: هناك نوع آخر من الأحداث وهو TIMER يتم توليد هذا الحدث كل وقت معين يحدد مطور البرنامج بنفسه بعكس الحدث ENTER_FRAME الذي يتم توليده بناءاً على سرعه ملف الفلاش. لنبدأ بهذا المثال للتوضيح: // import Sprite & TimerEvent Class import flash.display.Sprite; import flash.events.TimerEvent; // create Circle object in the stage var drawCir:Sprite = new Sprite(); drawCir.graphics.beginFill(0xCC9900, 1); drawCir.graphics.drawCircle( 30, 30, 30); drawCir.graphics.endFill(); addChild(drawCir); // create Timer object and add event listener to the object var moveTimer:Timer = new Timer(1000); moveTimer.addEventListener(TimerEvent.TIMER, moveCir); // functions be called execute when the event is received to move the Circle function moveCir(evt:TimerEvent):void { drawCir.x += 5; drawCir.y += 5; evt.updateAfterEvent(); // update the screen everytime the function call } moveTimer.start(); // start the Timer قمنا اولا بانشاء كائن نوعه Timer باسم moveTimer وذلك عن طريق الأمر new بالإضافة لداله خاصة تعرف باسم Constructor ( وهي داله لها نفس اسم الصنف وتنفذ تلقائياً عندما يتم انشاء نسخة من الصنف instance of Class ) وهذه الداله يمرر لها معامل وهو delay اي الفترة الزمنية التي يتم فيها توليد هذا الحدث وتقاس بالـ millisecond. فقمنا بإضافة الوقت 1000 أي ان هذا الحدث سوف يتم توليده مره واحده في الثانية وبالتالي يقوم باستدعاء الداله مره واحد أيضاً كل ثانية لتقوم الدالة بتحريك الدائرة. السلوك updateAfterEvent() Method يقوم بتحديث الشاشة في كل مره يتم فيها استدعاء الدالة وذلك لكي تعرض الحركة بشكل اكثر انسيابية ومرونه. هذا الأمر يمكن استخدامه مع كل من الكائنات KeyboardEvent, TimerEvent & MouseEvent. حالياً ما قمنا به هو انشاء الحدث فقط لا غير وبالتالي عند اختبار العمل لن يحدث شيء إذ يجب أن نقوم بتفعيل هذا الحدث ونقوم بذلك باستخدام السلوك start() Method ليتم تفعيل الحدث وتبدأ الدائرة بالحركة. الأمر removeEventListener: الأمر addEventListener يقوم بإضافة الاحداث الى الكائن او بشكل ادق يستمع لكائن معين حتى يصدر من هذا الكائن حدث معين فيقوم بتنفيذ بعض الأوامر اما الامر removeEventListener فهو العكس فيقوم بحذف الامر الاول وعدم الاستماع لحدث معين مرتبط بهذا الكائن. لنأخذ مثال للتوضيح: import flash.events.KeyboardEvent; import flash.events.Event; var drawCir:Sprite = new Sprite(); drawCir.graphics.beginFill(0x0000ff); drawCir.graphics.drawCircle(30, 30, 30); drawCir.graphics.endFill(); addChild(drawCir); stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyPress); function KeyPress(evt:KeyboardEvent):void{ switch(evt.keyCode){ case Keyboard.RIGHT: stage.addEventListener(Event.ENTER_FRAME, moveCir); break; case Keyboard.LEFT: stage.removeEventListener(Event.ENTER_FRAME, moveCir); break; } } function moveCir(evt:Event):void{ drawCir.x += 5; drawCir.y += 5; } هذه الاوامر تقوم اولاً بإنشاء دائرة ثم نقوم بالاستماع الاحداث الكيبورد بالتحديد عن الضغط على السهم لليمين والسهم لليسار فعند الضغط على السهم لليمين فسوف يتم إضافة الحدث ENTER_FRAME وبالتالي يتم تحريك الدائرة أما عند الضغط على السهم لليسار فسوف يتم حذف الحدث ENTER_FRAME وعليه تتوقف الدائرة عن الحركة. تمنياتي لكم بالتوفيق
  8. وعليكم السلاو ورحمة الله وبركاته الله يجزاك خير اخوي VB Helper الحمدلله المسافة والمحاذاة تمت بنجاح ^_^
  9. السلام عليكم لدي مشكلة متمثلة في أن مجاذاة Menu جهة اليسار وعند إضافة العناصر للقائمة تعرض من اليسار إلى اليمين هل بالإمكان تغيير محاذاة القائمة لتعرض العناصر بشكل صحيح...؟! والسؤال الثاني هل يمكن فصل العناصر بحيث يكون هناك مسافة معينة بين عنصر وآخر...؟! <div class="header"> <table class="style1"> <tr> <td class="style2">  </td> <td class="style3"> <br /> <br /> </td> </tr> <tr> <td class="style4"> <asp:Menu ID="Menu1" runat="server" Orientation="Horizontal"> <Items> <asp:MenuItem NavigateUrl="~/default.aspx" Text="الرئيسية" Value="home"> </asp:MenuItem> <asp:MenuItem Text="المناهج" Value="books" NavigateUrl="~/books.aspx"></asp:MenuItem> <asp:MenuItem Text="الجداول" Value="tables" NavigateUrl="~/tables.aspx"></asp:MenuItem> <asp:MenuItem Text="الاستعلام" Value="request" NavigateUrl="~/request.aspx"></asp:MenuItem> <asp:MenuItem Text="المدرسة" Value="school" NavigateUrl="~/school.aspx"></asp:MenuItem> <asp:MenuItem Text="أتصل بنا" Value="contactus" NavigateUrl="~/contactus.aspx"></asp:MenuItem> </Items> <StaticHoverStyle BackColor="#DADADA" ForeColor="White" /> <StaticMenuItemStyle Font-Bold="True" Font-Size="Larger" ForeColor="#7F7F7F" /> </asp:Menu> </td> <td class="style5">  </td> </tr> </table> </div> مع الشكر مقدماً...
  10. السلام عليكم ورحمة الله وبركاته بعد أن تحدثنا عن كيفية التحكم في بواجهة البرنامج. لنبدأ الآن بالتحدث عن كيفية رسم الأشكال أو الكائنات بشكل أدق, هناك نوعين من الأدوات لرسم الأشكال النوع الأول هي الأدوات المخصصة لرسم الخطوط أو الحدود بينما النوع الآخر هو لرسم تعبئة الأشكال. لنتحدث عن النوع الأول أحد الأدوات التي تساعدنا في رسم الخطوط ببساطة وسهولة هي أداة قلم الرصاص Pencil Tool في البداية يجب تحديد هذه الأداة عن الطريق الضغط عليها بزر الفأرة الأيمن ضغطة واحدة فقط لتقوم بتحديدها كما في الشكل التالي: بعد تحديد الأداة يمكنك تحديد لون الخط الذي سوف تقوم برسمه عن طريق تغيير لون الحدود Stroke Color في الأسفل بجانب قلم الرصاص والمعلم عليها بالمربع الأحمر في الصورة السابقة. في الحقيقة هذه الأداة تحتوي على ثلاث أنماط لرسم الحدود ويمكن الوصول لهذه الأنماط عن طريق خصائص أداة قلم الرصاص في السطر الأخير لصندوق الأدوات وهي باسم Pencil Mode تلاحظ أن أسفل هذه الأداة سهم صغير عن الضغط على هذه الأداة سوف تظهر قائمة الأنماط المتوفرة لأداة قلم الرصاص وهي بالشكل التالي: سوف تلاحظ أن هناك ثلاث أنماط وهي بالشكل التالي: - Straighten: وهي تقوم برسم الخطوط على أن تكون زوايا هذه الخطوط ذات حواف حادة كما في الشكل التالي: - Smooth: وهي تقوم برسم الخطوط على أن تكون زوايا هذه الخطوط ذات حواف مستديرة كما في الشكل التالي: - Ink: وهو يمكنك من الرسم الحر عن طريق أداة قلم الرصاص وقد يجمع في خصائص الأنماط السابقة كما في الشكل التالي: هناك أداة أخرى تتيح لنا القيام بما تقوم به أداة قلم الرصاص والمخصصة رسم الخطوط ألا وهي أداة قلم الحبر Pen Tool هذه الأداة تختلف طريقة عملها عن الأداة السابقة فهي تتيح لك التحكم في موقع زويا الخط وذلك عن طريق وضع عدد من النقاط ويقوم البرنامج توصيل هذه النقاط ببعضها البعض لتكون في النهاية الخط كما في الشكل التالي: تلاحظ أن زوايا الخط تكون حادة فـ ماذا إذا كنا نريدها مستديرة ؟! سؤال جيد بإمكانك رسم الحواف المستديرة أثناء وضعك للنقاط فـ عندما تريد أن تكون الحواف مستديرة عند نقطة معينة عليك بعد الضغط على لإضافة النقطة أن تواصل الضغط على زر الفأرة الأيمن وتحريك مؤشر الفأرة لتقوم برسم زاوية مستديرة كما في الشكل التالي: بإمكانك التحكم بهذه النقاط في أي وقت تريد عن طريقة أداة التحديد الفرعية Subselection Tool وذلك تحديد هذه الأداة أولاً بعد ذلك نقوم بالضغط على الخط كما في الشكل التالي: سوف تلاحظ أنه ظهرت لديك النقاط التي تشكل لديك هذا الخط بغض النظر عن الأداة المستخدمة لرسمه وهذه النقاط تمثل زوايا الخط ومن خلال أداة التحديد الفرعية يمكنك تحديد أحد النقاط والتحكم بها كما تريد سواء تغيير مكان النقطة أو التحكم في مقدار الاستدارة عند أحد النقاط وذلك تحديد النقطة أولاً عن طريق تحديد هذه النقطة بعد ذلك سوف يظهر لديك خط مستقيم للتحكم في مقدار استدارة الزوايا كما في الشكل التالي: بالإضافة لذلك فإن أداة قلم الحبر تحتوي على أدوات فرعية للتحكم أكثر في النقاط الموجودة في الخط. فـ عند الضغط على أداة قلم الحبر Pen Tool سوف تعرض لك الأدوات الفرعية كما في الشكل التالي: كما قلنا سابقاً بإمكانك استخدام هذه الأدوات للتحكم في نقاط الخط الذي قمت برسمه مسبقاً ووظيفة هذه الأدوات تتمثل في التالي: - Add Anchor Pont Tool: لإضافة نقطة جديدة إلى الخط. - Delete Anchor Point Tool: لحذف نقطة موجودة في الخط. - Convert Anchor Pont Tool: بما أن النقاط تمثل زوايا الخط فإن هذه بالتحكم في هذه الزوايا وذلك بتحويل الزوايا المستديرة إلى زوايا حادة والعكس صحيح وذلك عن طريق الزاوية المستديرة لتحويلها إلى زاوية حادة أو الضغط على الزاوية الحادة مع السحب لتحويلها لزاوية مستديرة كما يمكنك التحكم في استدارة الزوايا بشكل أكبر كما تلاحظ عند الضغط على أحد النقاط فإنه يظهر لديك خط مستقيم للتحكم في مدى الاستدارة وهو ينقسم إلى جزئيين على يمين النطة ويسار النقطة كما يلي: في الوضع الافتراضي عند تحريك أحد النقاط المشار إليها بالسهم الأحمر في الصورة السابقة بأنك تلقائياً تتحكم بالنقطة الثانية ولكن باستخدام هذه الأداة بإمكانك التحكم في كل جزء على حدة. هناك أداة أخرى تستخدم لتحديد الأشكال وهي أداة التحديد Selection Tool تستخدم هذه الأداة لتحديد شكل معين ومن ثم تحريك في الحقيقة أن أي شكل تريد أن تتعامل معه سواء بتحريكه أو تغيير خصائصه فإنك بحاجة أولاً لتحديده عن طريق هذه الأداة ولاستخدامها عليك بتحديد الأداة أولاً ومن ثم الضغط على الشكل المطلوب تحديده كما يلي: عندما تقوم بالضغط على أحد الخطوط لتحديده عن طريق الضغط مره واحده بزر الفأرة الأيسر سوف تلاحظ أنه تم تحديد جزء من الخط وليس الخط كاملاً وذلك لأنه في حاله الضغط مرة واحدة فوق الخط يقوم البرنامج بتحديد الخط الذي يصل بين نقطتين فقط أو بمعنى أصح إذا كان الخط في أوله يحتوي على زوايا مستديرة وبعد ذلك زوايا حادة فإنه يقوم بتحديد الخط الذي يمثل الزوايا المستديرة وعندما يصل لأول زاوية حادة هنا يحدث تغيير وبالتالي لا يكمل تحديد الخط ولكن في حالة أردت تحديد الخط كاملاً فإنه يجب أن تقوم بالضغط المزدوج فوق الخط لتحديده بالكامل. عندما تقوم بتحديد الخط سوف تلاحظ أن أداة التحديد لديها ثلاث خصائص للتحكم في شكل الخط وهي بالشكل التالي: وتقوم هذه الخصائص بالتحكم أكثر في شكل وطريق التعامل مع الخط ووظيفة كل منها هي: - Smooth: وهي تقوم بجعل الخط أكثر انسيابية وتقوم بتحويل الزوايا الحادة إلى مستديرة في كل مرة تقوم بالضغط على هذه الأداة تزيد استدارة الخط. - Straighten: وهي تقوم بتحويل الزوايا المستديرة إلى زوايا حادة تدريجياً في كل مرة تقوم بالضغط على هذه الأداة حتى يتحول الخط في النهاية إلى خط مستقيم. - Snap to Object: تستخدم هذه الأداة عندما تقوم بتحريك نقطة معينة من نقاط الخط وعندما تقترب هذه النقطة من خط آخر أو شكل آخر فإنها تلقائياً ترتبط بها الشكل مباشرة كما في الشكل التالي: في حالة قمت بإزالة التحديد عن طريق الضغط على أي مكان خارج الخط فإنه يمكنك التحكم في الشكل باستخدام أداة التحديد فـ عندما تضع مؤشر الفأرة فوق خط معين تستطيع التحكم في شكل الخط ولكن عندما يكون الخط فوق نقطة معينة فإنك تستطيع تغيير مكان هذه النقطة كما في الشكل التالي: بقي شيء أخير وهو خصائص الخطوط فـ عندما تقوم بتحديد خط معين تجد في نافذة الخصائص العديد من الخصائص التي تتيح لك التحكم في الخط وهي بالشكل التالي: تستطيع من خلال هذه النافذة التحكم بالعديد من الخصائص وهي: - Stroke Color: لتغيير لون الخط. - Stroke: وهي تستخدم لتغيير سمك الخطوط سواء بتحريك المزلاج أو تحديد القيمة بالخانة الموجودة في الأمامية. - Style: وهي تقوم بتغيير شكل الخط عن طريق اختيار الشكل من القائمة كما يمكنك الضغط على زر Edit stroke style وبالتالي يمكنك التحكم بالشكل الافتراضي بشكل أكبر. - Cap: وهي تمكنك من تحديد شكل نهاية الخط سواء تكون حادة أم مستديرة. - Join: وهي تمكنك من تحديد شكل النقاط سواء كانت مستديرة أو حادة أم مستقيمة. تمنياتي لكم بالتوفيق
  11. السلام عليكم ورحمة الله وبركاته إنشاء ملف جديد والتحكم في واجهة البرنامج: في البداية وقبل أن نتحدث عن كيفية إنشاء المؤثرات الحركية وفي برنامج الفلاش يجب أن نتعلم أولاً كيف يمكن أن نتحكم في شكل واجهة البرنامج وتنظيم الألواح والأدوات ...الخ كما يجب أن نتعلم كيفية إدراج الكائنات والتحكم بها عن طريق الأدوات. وهذا ما سوف نقوم به الآن عندما تقوم بفتح برنامج الفلاش فإن أول نافذة سوف تراها في نافذة الترحيب الخاصة ببرنامج الفلاش بالشكل التالي: هذه النافذة تنقسم إلى عدة أقسام وهي : 1- في هذا الجزء هناك طريقتين لفتح ملف الفلاش الأولى Create from Template هي إنشاء ملف فلاش من القوالب الجاهزة في برنامج الفلاش وبعد ذلك بإمكانك التعديل عليها كما يناسبك أما الثانية Open a Recent Item وهي تعرض لك آخر عشرة ملفات قمت بالعمل عليها مسبقاً وبإمكانك الضغط على Open لفتح ملف فلاشي غير موجود في القائمة. 2- في هذا الجزء تحدد نوع المشروع الذي تريد العمل عليه Create New فهناك العديد من المشاريع التي يمكن أن تنشئها باستخدام الفلاش فبإمكانك إنشاء ملف فلاش مع أوامر الأكشن سكريبت الإصدار الثالث أو الثاني أما إنشاء برنامج انترنت تفاعلي باستخدام ملف AIR كذلك بإمكانك تطبيقات لأجهز الهاتف المحمول والمتمثلة في iPhone OS & Flash Lite 4 بالإضافة لبعض الملفات الأخرى. كما أن هناك الجزء الخاص بالإضافات Extend لبرنامج الفلاش فعند الضغط عليها تنقلك لموقع شركة أدوبي قسم تبادل الملفات والتطبيقات الخاصة ببرنامج الفلاش والذي يحتوي على بعض الإضافات والتطبيقات الجاهزة للبرنامج لتسهيل عملك وغالباً ما تكون بمقابل مادي. 3- هذا الجزء يمكنك من الوصول لملفات المساعدة الخاصة بالبرنامج ولكن يجب أن تكون متصل بالانترنت. 4- أما هذا الجزء فيحتوي على بعض أقسام البرنامج الموجودة في موقع الشركة. قد تريد أخفاء هذا الجزء واختيار أن يقوم الفلاش بشيء معين عند فتح البرنامج بإمكانك إخفاء شاشة الترحيب من خلال وضع علامة صح في المربع المخصص للعبارة Don’t show again سوف يقوم البرنامج بعرض رسالة تفيد بأنه سوف يتم إخفاء شاشة ترحيب البرنامج وبإمكانك أن تقوم بإعادة ظهور هذه الشاشة من جديد من خلال قائمة Edit ثم اختيار Preferences سوف تعرض لك شاشة أعدادات البرنامج في قسم General هناك أمر On launch من خلال هذا الأمر بإمكانك تحديد ماذا تريد أن يحدث عند فتح البرنامج كما يلي: هناك العديد من الخيارات فعندما تقوم بتعطيل نافذة ترحيب البرنامج سوف يقوم البرنامج ببساطة باختيار No Document بمعنى لا يفعل أي شيء يترك لك حرية الاختيار بإمكانك تغيير هذا الخيار إلى New Document ليقوم البرنامج بإنشاء ملف جديدة عند فتح البرنامج أو اختيار Last Documents Open لفتح آخر ملف قمت بالعمل علية أول إضافة ظهور شاشة الترحيب المخصص للبرنامج عن طريق اختيار Welcome Screen وهو ما سوف نقوم به الآن ثم اضغط على زر Ok. سوف نقوم بإنشاء ملف فلاشي جديد يحتوي على أوامر الأكشن سكريبت الإصدار الثالث وذلك من خلال الضغط على ActionScript 3.0 من الجزء المخصص لإنشاء ملف جديد Create New أو من خلال قائمة File نقوم باختيار New ثم حدد ملف ActionScript 3.0 وأضغط على زر Ok. الآن تظهر لك واجهة برنامج الفلاش في الوضع الافتراضي سوف تظهر لك الواجهة الكلاسيكية Classic لبرنامج الفلاش ولكن بإمكانك أن تقوم بتغيير هذه الواجهة فالبرنامج يحتوي على عدد من الواجهات الافتراضية كل منها لها اسمها يحدد طبيعة العمل الذي سوف تقوم به على سبيل المثال الواجهة Animator تقوم بتنظيم واجهة البرنامج بحيث تسهل عليك عملية إنشاء المؤثرات الحركية Animation بينما واجهة Designer مخصصة بتنظيم واجهة البرنامج لتسهل على المصمم أن يقوم بتعديل التصميم بالطريقة المناسبة ...الخ بإمكاننا الوصول لهذه الواجهات المختلفة عن طريقة واجهة البرنامج في أعلى اليمين أو من خلال قائمة Windows ثم اختيار Workspace ومنها تقوم باختيار الواجهة التي تناسب طبيعة عملك كما يلي: في الحقيقة بإمكانك أن تقوم بأكثر من مجرد اختيار واجهة جهازه في البرنامج بل بإمكانك أن تقوم بإعادة ترتيب وتنظيم طريقة عرض الألواح والأدوات. فإمكانك أن تقوم بإخفاء بعض الألواح من لوحة شريط الزمن Timeline والموجود في الأعلى عن طريق الضغط على الجزء الرمادي ضغطاً مزدوجاً بزر الفأرة الأيسر كما يلي: وبالتالي سوف يختفي شريط الزمن أو بمعنى أصح سوف يقل حجم شريط الزمن ليكون بالشكل التالي: أيضاً بإمكانك تغيير طريقة عرض الأدوات الموجودة على يسار شاشة البرنامج وذلك من خلال تغيير حجمها عن طريقة وضع مؤشر الفأرة على الخط الفاصل بين منطقة العمل وشريط الأدوات سوف تلاحظ تغيير شكل مؤشر الفأرة ليكون عبارة عن سهم لليمين واليسار ثم استخدام السحب والإفلات لتغيير شكل عرض الأدوات كما يلي: كما يمكنك عرض الأدوات كـ أيقونه واحد عند الضغط عليها تظهر لك جميع الأدوات وذلك من خلال الضغط على السهمين في الشريط الأسود في أعلى شريط الأدوات كما يلي: أيضاً بإمكانك تغيير مكان أحد الألواح إلى مكان آخر على سبيل المثال لنفترض أننا نريد تغيير مكان مجموعة من الألواح دفعة واحد إلى مكان آخر سوف تحد أن في أعلى المجموعة يوجد عدد من النقاط تكون سطرين باستخدام مؤشر الفأرة الأيسر اضغط على هذه النقاط ثم اسحب الألواح لتقوم بتغيير مكانها كما يلي: ويمكنك أن تقوم بإعادة هذه المجموعة بنفس الطريقة السابقة كما يقوم برنامج بمساعدتك أيضاً في عملية ترتيب الواجهة وذلك من خلال عرض خط أزرق اللون وفقاً لموقع مؤشر الفأرة يوضح لك المكان الذي تريد وضع المجموعة به كما يلي: بالمثل بإمكانك نقل لوحة أو أيقونة معينة لمكان آخر كما يمكن الوصول للألواح التي تساعدك في العمل على البرنامج من خلال قائمة Windows على سبيل المثال عندما تقوم بالعمل على أوامر الأكشن سكريبت فإنك بحاجة إلى لوحة الأكشن سكريبت لتقوم بكتابة الأوامر بإمكانك الوصول لهذه اللوحة من خلال قامة Windows ثم اختيار Actions. عندما تقوم بالانتهاء من ترتيب وتنظيم عرض الأدوات والألواح في برنامج الفلاش يمكنك أن تقوم بحفظها بأي اسم تريد وذلك من خلال قائمة اختيار الواجهة الافتراضية في أعلى يمين نافذة البرنامج واختيار New Workspace ثم تحديد الاسم الذي تريده كما يلي: وعند حفظ هذه الواجهة سوف تجدها مع بقية الواجهات في البرنامج فكل ما عليك فعله هو اختيار الواجهة. كما يمكنك أن تقوم بحذف الواجهة التي قمت بإنشائها عن طريق اختيارك Manager Workspaces من قائمة الواجهات المرفقة مع البرنامج كما يلي: لتظهر لك نافذة Manager Workspaces وتقوم بتحديد الواجهة التي تريد حذفها ثم الضغط على زر حذف Delete كما يلي: البيضاء هي التي سوف تعرض عند تصدير ملف الفلاش لموقع الويب غير ذلك فإنه لن يتم عرض الكائنات. بإمكانك أن تقوم بعرض منطقة العمل بحجمها الطبيعي وهو الوضع الافتراضية بتحديد نسبة العرض 100% وهذا جيد ولكن في حاله كانت منطقة العمل كبيرة نسبياً بالتالي سوف تكون الأشكال أيضاً بحجم كبير فـ أنت بحاجة لطريقة توفر لك إمكانية التحكم في نسبة عرض منطقة العمل يمكنك القيام بذلك عن طريق تحديد نسبة العرض وذلك بوضع النسبة التي تناسبك بحرية في أعلى يمين منطقة العمل كما يلي: أو بإمكانك الذهاب لقائمة View ومنها إلى Magnification ثم اختر طريقة عرض منطقة العمل التي تناسبك كما أنه بإمكانك تغيير طريقة العرض عن طريق استخدام مفتاحي Ctrl/+ للتكبير أو مفتاحي Ctrl/- لتصغير منطقة العمل وأيضاً بإمكانك استخدام أداة التكبير Zoom Tool للقيام بنفس المهمة: كما يمكنك العودة لنسبة العرض 100% في أي وقت عن طريق الضغط بزر الفأرة الأيمن ضغطاً مزدوجاً فوق أداة Zoom Tool. ليس هذا فقط بل بإمكانك أن تقوم بتحريك منطقة العمل وذلك من خلال استخدام أداة اليد Hand Tool كما يلي: بعد تحديد الأيقونة عن طريق الضغط عليها بإمكانك تحريك منطقة العمل أو بإمكانك استخدام طريقة أسهل وهي الضغط على مفتاح المسافة Space سوف تلاحظ تغير شكل مؤشر الفأرة بإمكانك الآن تحريك منطقة العمل وعند الانتهاء أترك مفتاح المسافة ليعود مؤشر الفأرة لشكله الطبيعي. تمنياتي لكم بالتوفيق
  12. السلام عليكم حالياً أقوم بإعداد مشروع وهو تحليل للنظام الاستعلام عن الدكاتره والقاعات وأحتاج لبعض المعلومات من الاخوه المختصين في قواعد البيانات لأن المشروع أساساً يتم بشكل عملي في قاعده البيانات ولكن ما اقوم به انا هو فقط دراسه وصفيه للمشروع المقترح. لنفترض أن لدي قاعده بيانات للاستعلام عن الدكاتره والقاعات بالشكل التالي: اولا: الدكاتره:- بحيث نقوم بإدخال اسم الدكتور ( وذلك من خلال قائمه منسدله تأخذ بياناتها من جدول الدكاتره) لـ يعرض لنا المعلومات التاليه: رمز المقرر - اسم المقرر - عدد الساعات - رقم القاعه - اليوم والوقت ثانيا: القاعات:- بحيث نقوم بإدخال رقم القاعه (وذلك من خلال قائمه منسدله تأخذ بياناتها من جدول المواد) لـ يعرض لنا المعلومات التاليه: رمز المقرر - اسم المقرر - عدد الساعات - اليوم والوقت - اسم الدكتور الهدف من النظام هو ان يقوم عضو هيئه التدريس او نائب رئيس القسم بالبحث أو الاستعلام عن مكان تواجد دكتور معين أو الاستعلام عن ما إذا كانت قاعه معينه متوفره ام لا ؟ وإن لم تكن متوفره من المحاضره فيها ووقت المحاضره. ما سبق هو شرح للنظام والمطلوب هو في حاله كان الدكتور يعتذر عن إحدى المحاضرات وأثناء قيام نائب رئيس القسم بالاستعلام عن الدكتور وجد أن الدكتور لديه محاضره ولكن لا يعلم هل موجود فعلياً ام اعتذر عن المحاضره. فكيف نقوم بهذا العمل من خلال قاعده البيانات ؟ أحتاج لبعض المعلومات من الاخوه المتخصصين في قواعد البيانات لأكمل مابقي في المشروع من تحليل مع الشكر مقدماً
  13. شكرا للرد على السؤال راح أشوف المكتبة cctype وأرد عليك
  14. السلام عليكم صبحكم الله بالخير وكل عام وأنتوا بخير أنا حالياً قاعد أصمم برنامج للتحويل بين الأنظمة الثلاثة Binary, Decimal & Hexadecimal الحمدلله انجزت جميع التحويلات باستثناء التحويل من Hexadecimal إلى Binary راح أشرح البرنامج علشان الفكرة توصل بالشكل الصحيح أنا راح أطلب من المستخدم يدخل بيانات بالـ hex أما يدخل E2 أو 29 أو AC ...الخ بحيث يكون مدخلين فقط بحيث يدخل الأول ثم يخزنه بمتغير وبعدها يدخل المدخل الثاني كـ توضيح للطريقة فقط: for( int i = 0; i < 2; ++i) { cin >> hexNum; } ألحين أنا ما أعرف نوع البيانات أللي راح يدخلها المستخدم هل هي رقمين أو رقم وحرف أو حرفين وبالتالي ما أقدر أحدد نوع البيانات مسبقاً. أنا أعتقد أنه كان هناك نوع من البيانات يحدد نوع بيانات المتغير بناءاً على نوع البيانات التي يحملها هذا المتغير ولكن ما أدري هل بـ C++ أو لغة ثانية ما أذكر. فـ أتمنى مساعدتي في حل هذي المشكلة ؟ مع الشكر مقدماً
  15. اخوي نور الله يجزاك خير