• 0
  • مالي خلق
  • أتهاوش
  • متضايق
  • مريض
  • مستانس
  • مستغرب
  • مشتط
  • أسولف
  • مغرم
  • معصب
  • منحرج
  • آكل
  • ابكي
  • ارقص
  • اصلي
  • استهبل
  • اضحك
  • اضحك  2
  • تعجبني
  • بضبطلك
  • رايق
  • زعلان
  • عبقري
  • نايم
  • طبيعي
  • كشخة
  • النتائج 1 إلى 15 من 15

    الموضوع: مذكرة في التعامل مع ملفات الفلاش في بيئة الفجوال بيسك

    1. #1
      التسجيل
      22-11-2006
      المشاركات
      300
      المواضيع
      22
      شكر / اعجاب مشاركة

      مذكرة في التعامل مع ملفات الفلاش في بيئة الفجوال بيسك

      منتدى المنتدى
      قسم لغات البرمجة
      أبو هاجر الحلوة
      الجزائر
      2007

      مذكرة في التعامل مع ملفات الفلاش في بيئة الفجوال بيسك

      بسم الله الرحمن الرحيم و الصلاة و السلام على سيدنا محمد و على آله و صحبه و التابعين

      و بعد :

      يمكن التعامل مع ملفات الفلاش ذات الإمتداد swf في البيسك بفضل الأداة ShockwaveFlash بسهولة إذا أحسن التعامل مع بعض ما تعرضه من خصائص و طرق و أحداث بل يمكن التعامل حتى مع العروض التنفيذية ذات الإمتداد exe كما سنرى ذلك لاحقا لكن قبل ذلك سنتطرق في هذا الجزء إلى بعض الأمور الأولية و الأساسية

      الجزء الأول : الأساسيات

      نقوم بإضافة الأداة ShockwaveFlash إلى مشروعنا كأي أداة أخرى من خلال القائمة Project/Components ثم نختار الأداة في قائمة الأدوات المعروضة ثم نضغط على Ok

      تحميل و قراءة العروض :

      بعد إضافة الأداة إلى النموذج يمكننا تحميل أي عرض فلاش ذي امتداد swf في الخاصية Movie و لقراءته نستعمل الطريقة Play .
      مثال :
      كود:
      ShockwaveFlash1.Movie="C:\Test.swf"
      ShockwaveFlash1.Play
      التعامل مع العروض :

      لاسترجاع أو تعديل لون خلفية العرض نستعمل الخاصية BackgroundColor
      مثال :
      كود:
      ShockwaveFlash1.BackgroundColor=RGB(0,0,0)'لجعل لون الخلفية سوداء
      لتكبير و تصغير العرض نستعمل الخاصية Zoom
      مثال :
      كود:
      ShockwaveFlash1.Zoom=0  'العرض بحجمه العادي
      ShockwaveFlash1.Zoom=95  'تكبير العرض
      ShockwaveFlash1.Zoom=105  'تصغير العرض
      ShockwaveFlash1.Zoom=100  'ليس هناك أي تعديل
      لتعديل جودة العرض نستعمل الخاصية Quality2
      مثال :
      كود:
      ShockwaveFlash1.Quality2="Low"  'جودة منخفضة
      ShockwaveFlash1.Quality2="Medium"  'جودة متوسطة
      ShockwaveFlash1.Quality2="High"  'جودة عالية
      لضبط و استرجاع حجم العرض نستعمل الخاصية ScaleMode
      مثال :
      كود:
      ShockwaveFlash1.ScaleMode =0  'عرض الكل دون مراعاة التناسب
      ShockwaveFlash1.ScaleMode =1  'العرض في المنطقة المتاحة دون مراعاة التناسب
      ShockwaveFlash1.ScaleMode =2  ' عرض الكل مع مراعاة التناسب
      ShockwaveFlash1.ScaleMode =3 'عدم تحجيم العرض
      لضبط و استرجاع مكان العرض نستعمل الخاصية AlignMode
      مثال :
      كود:
      ShockwaveFlash1.AlignMode =0 'توسيط
      ShockwaveFlash1.AlignMode =1  'يسار
      ShockwaveFlash1.AlignMode =2 ' يمين
      ShockwaveFlash1.AlignMode =4 'أعلى
      ShockwaveFlash1.AlignMode =8 'أسفل
      لضبط حجم و مكان العرض نستعمل الطريقة SetZoomRect و القيم محسوبة بالـ Twips
      مثال :
      كود:
      ShockwaveFlash1.ScaleMode =0  'عرض الكل دون مراعاة التناسب
      ShockwaveFlash1.SetZoomRect 0,0,3000,3000
      لاسترجاع عدد الشرائح في العرض نستعمل الخاصية TotalFrames
      لاسترجاع رقم الشرائحة الحالية في العرض نستعمل الخاصية CurrentFrame
      لعرض شريحة معلومة نستعمل الطريقة GotoFrame
      مثال :
      كود:
      MsgBox  ShockwaveFlash1.TotalFrames  'لمعرفة عدد الشرائح في العرض
      TotalFrames.GotoFrame 0    'لعرض الشريحة الأولى
      MsgBox  ShockwaveFlash1.CurrentFrame 'لمعرفة رقم الشرائحة الحالية
      و فيما يلي بعض الطرق و الخواص و الأحداث للتحكم الجيد بالعرض:

      الطريقة Stop لتوقيف العرض
      الطريقة Rewind للف العرض و الرجوع به إلى الشريحة الأولى
      الطريقة Back للتراجع بالعرض إلى الخلف
      الطريقة Forward للتقدم بالعرض إلى الأمام
      الخاصية Loop تجعل القراءة متواصلة إذا كانت قيمتها True أو غير متواصلة إذا كانت قيمتها False
      الخاصية Playing لمعرفة حالة القراءة حسب القيمة المسترجعة (True or False)
      الخاصية ReadyState لمعرفة حالة العرض حسب القيمة المسترجعة ( 1: الخاصية Movie="" , 3: عملية تحميل العرض جارية , 4: تم تحميل كل العرض)
      الحدث OnReadyStateChange يسمح بتتبع حالة العرض من خلال البارامتر newState
      الخاصية PercentLoaded لمعرفة النسبة المئوية المحملة من العرض
      تم الجزء الأول بحمد الله و يليه الجزء الثاني نتطرق فيه إنشاء الله لكيفية التحكم بالكائنات التي يحويها العرض من خلال الفجوال بيسك.

    2. #2
      التسجيل
      12-01-2007
      المشاركات
      12
      المواضيع
      1
      شكر / اعجاب مشاركة

      رد: مذكرة في التعامل مع ملفات الفلاش في بيئة الفجوال بيسك

      مشكور أخى العزيز
      تحياتى

    3. #3
      التسجيل
      02-02-2005
      الدولة
      سلطنة عمان
      المشاركات
      18
      المواضيع
      1
      شكر / اعجاب مشاركة

      رد: مذكرة في التعامل مع ملفات الفلاش في بيئة الفجوال بيسك

      مشكور أخى العزيز وبارك الله فيك

    4. #4
      التسجيل
      22-11-2006
      المشاركات
      300
      المواضيع
      22
      شكر / اعجاب مشاركة

      رد: مذكرة في التعامل مع ملفات الفلاش في بيئة الفجوال بيسك

      مشكورين على التواصل
      آسف على التأخير في نشر الجزء الثاني , إنشاء الله سيتم إكمال المذكرة في أقرب أجل
      إلى الملتقى.

    5. #5
      التسجيل
      15-10-2004
      الدولة
      حائر
      المشاركات
      1,537
      المواضيع
      99
      شكر / اعجاب مشاركة
      بطاقات الألعاب

      Gamertag: OmarIQ

      رد: مذكرة في التعامل مع ملفات الفلاش في بيئة الفجوال بيسك

      ..

      هذا المجال يهمني كثيرا ..
      تعلمت الدمج بينهما منذ زمن ..

      لكن قعدنا أنا وساموجي .. وسوينا أفكار رهيبة ..
      هو صاحب اللب وأنا ساعدته ..
      سترى النتائج في لعبة أسد الفلوجة قريبا ..

      لو تكتب عن طريقة تبادل الأوامر بينهما أكون شاكر لك ..
      صحيح أنني أعرف طريقة لكنها ركيكة ..
      مثال لما أطلب :
      عند الضغط على (Button1) الفلاش تظهر (MsgBox) فيها ("Pressed") ـ

      وفقك الله
      جديد موقعي .


      رابط الصفحة .. من هنا:
      من المدونة [هنا]


    6. #6
      التسجيل
      22-11-2006
      المشاركات
      300
      المواضيع
      22
      شكر / اعجاب مشاركة

      رد: مذكرة في التعامل مع ملفات الفلاش في بيئة الفجوال بيسك

      فعلا لقد اطلعت على أمثلة الأخ ساموجي و هي فعلا رائعة أرجو أن تجد فيما يلي بعض الفائدة

    7. #7
      التسجيل
      22-11-2006
      المشاركات
      300
      المواضيع
      22
      شكر / اعجاب مشاركة

      رد: مذكرة في التعامل مع ملفات الفلاش في بيئة الفجوال بيسك

      الجزء الثاني: التحكم بالكائنات التي يحويها العرض من خلال الفجوال بيسك
      لتغيير محتوى كائن معين
      نستعمل الطريقة SetVariable

      لاسترجاع محتوى كائن معين
      نستعمل الطريقة GetVariable

      أمثلة
      : على فرض أن العرض يحتوي على مربع نص Text

      لتغيير محتوى مربع نص
      كود:
      ShockwaveFlash1.SetVariable "Text","Hello world" 'Text
      لاسترجاع محتوى مربع نص
      كود:
      MsgBox ShockwaveFlash1.GetVariable("Text") 'Text
      فائدة :

      لاسترجاع نسخة الفلاش نستعمل الطريقة
      GetVariable مع مع الثابت "$version"

      مثال
      كود:
      MsgBox ShockwaveFlash1.GetVariable("$version")
      القيمة المسترجعة تكون من الشكل
      WIN x,x,0 و هي على الترتيب نظام التشغيل المستعمل , رقم النسخة الأكبر, رقم النسخة الأصغر.


      لتغيير خاصية معينة لكائن ما في العرض نستعمل الطريقة
      TSetProperty

      مثال : لإخفاء الكائن
      Object


      لإخفاء الكائن
      كود:
      ShockwaveFlash1.TSetProperty "Object ","7","0" 'Object
      حيث
      Object اسم الكائن , "7" رقم الخاصية Visible , ثم 0 قيمة الخاصية

      فيما يلي أرقام بعض الخصائص :

      كود:
      0 :Left (Pixels) 1 : Top (Pixels) 6 : transparency(%) 7 : Visible(0 / 1) 8 : Width(Pixels) 9 : Height (en Pixels) 10:Rotation (degree) 13:Name 19:Quality(LOW,MEDIUM,HIGH)

      للتنبيه : رغم أننا نستعمل أرقام للتعامل مع هذه الخصائص لكن ينبغي أن نستعملها كثوابت نصية
      (String) كما هو مستعمل في المثال أعلاه.


      لاسترجاع قيمة خاصية معينة لكائن ما في العرض نستعمل الطريقة
      TGetProperty

      مثال :
      لاسترجاع قيمة الخاصية 7 للكائن
      كود:
      ShockwaveFlash1.TGetProperty "Object ","7" 'Object
      الحدث
      FSCommand يمكننا من معرفة الأوامر المرسلة إلى العرض و البارامترات الخاصة بهذه الأوامر بواسطة المتغيرتين command و args

      مثال : إذا كان العرض ملء الشاشة و وضعنا الأمر التالي في الحدث
      FSCommand
      كود:
      MsgBox command & VbCrlf & args

      فإءن النتيجة تكون من الشكل
      fullscreen
      true

      ملاحظات :

      لم أتمكن من تجربة الطريقتين
      TSetProperty و TGetProperty و إنما نقلتهما هنا كما و جدتهما.

      تم الجزء الثاني بحمد الله ويليه الجزء الثالث نتطرق فيه لبعض المسائل المتقدمة في برجمة الأداة
      ShockwaveFlash إنشاء الله




    8. #8
      التسجيل
      15-10-2004
      الدولة
      حائر
      المشاركات
      1,537
      المواضيع
      99
      شكر / اعجاب مشاركة
      بطاقات الألعاب

      Gamertag: OmarIQ

      رد: مذكرة في التعامل مع ملفات الفلاش في بيئة الفجوال بيسك

      مثال : إذا كان العرض ملء الشاشة و وضعنا الأمر التالي في الحدث
      ليس جيداً ..
      لا فرق بينها وبين إعطاء قيمة لمتغير ما ..

      يبدوا أنني سأضل على طريقة ساموجي ..
      على كل حال .. الموضوع سيفيد الكثيرين ..
      شكرا لك ..
      جديد موقعي .


      رابط الصفحة .. من هنا:
      من المدونة [هنا]


    9. #9
      التسجيل
      22-11-2006
      المشاركات
      300
      المواضيع
      22
      شكر / اعجاب مشاركة

      رد: مذكرة في التعامل مع ملفات الفلاش في بيئة الفجوال بيسك

      أكيدأن إستعمال MsgBox في الحدث FSCommand غير ذي فائدة و لكنه مجرد مثال لإظهار طريقة اعتراض الأوامر المرسلة للأداة
      ممكن أن تستعمل Select case و تعالج الثوابت المرسلة لتحدث تفاعلا بين البرنامج و العرض حسب الأوامر التي قمت بأدراجها بواسطة الفلاش
      إنشاء الله يكون الجزء الثالث أكثر نفعا من هذا الجزء
      و إنشاء الله تكون الفائدة أعم و أحسن عندما خروج لعبة أسد الفلوجة
      بالتوفيق بعون الله

    10. #10
      التسجيل
      22-10-2006
      المشاركات
      124
      المواضيع
      6
      شكر / اعجاب مشاركة

      رد: مذكرة في التعامل مع ملفات الفلاش في بيئة الفجوال بيسك

      ممكن المذكرة دى فى كتاب بى دى اف ؟

    11. #11
      التسجيل
      15-10-2004
      الدولة
      حائر
      المشاركات
      1,537
      المواضيع
      99
      شكر / اعجاب مشاركة
      بطاقات الألعاب

      Gamertag: OmarIQ

      رد: مذكرة في التعامل مع ملفات الفلاش في بيئة الفجوال بيسك

      ممكن أن تستعمل Select case و تعالج الثوابت المرسلة لتحدث تفاعلا بين البرنامج و العرض حسب الأوامر التي قمت بأدراجها بواسطة الفلاش
      طيب أنا أريد أن أعرف وبالضبط .. طريقة تبادل إستدعاء الدوال!
      يعني لما أضغط على زر معين بالفلاش .. يستدعي الدالة (show_the_result) والموجودة بأكواد الفيجوال بيسك ـ
      أدري إن الأمر معقد .. لكن هذا ما نريده بالضبط!

      إنشاء الله يكون الجزء الثالث أكثر نفعا من هذا الجزء
      إن شاء الله ..


      أدري أن أسئلتي محيرة لكن هذا طبعي
      جديد موقعي .


      رابط الصفحة .. من هنا:
      من المدونة [هنا]


    12. #12
      التسجيل
      22-11-2006
      المشاركات
      300
      المواضيع
      22
      شكر / اعجاب مشاركة

      رد: مذكرة في التعامل مع ملفات الفلاش في بيئة الفجوال بيسك

      بنفس الطريقة التي تستعمل بها MsgBox و التي ما هي إلا دالة
      مثال نفرض أنك قمت بإدراج الأمر التالي للزر في العرض عن طريق الفلاش
      كود:
      on (release) { fscommand ("show_the_result"); }
      في الفجوال بيسك و في الحدث FSCommand للأداة تستطيع أن تدرج الأمر Select Case كما يلي
      كود:
      Select Case command Case "show_the_result" show_the_result Case ......................... . . . . End Select
      هذا طبعا مجرد مثال و إذا كنت متمكنا من الـ Action Script فأظن أنك تستطيع فعل ما هو أحسن أنا صراحة ضعيف فيها و ليس لي تجربة كبيرة معها و لا أستعمل الفلا ش في البيسك إلا لتحسين الواجهة فقط و حتى هذا التفاعل الذي نتكلم عنه أعتقد أن إستعماله سيكون محدودا مثلا لإظهار نافذة About... أو أشياء من هذا القبيل يعني أمور جمالية
      فيما يخص اللعبة التي تكلمت عنها لما لا تقوم بإنجازها كليا بالفلاش و تستغني عن البيسك أو تنجز كل الأوامر بالـ Action Script و تستعمل البيسك كحاو فقط للعرض للأسف معلوماتي عن مرادك بالضبط تكاد تكون معدومة ربما إذا توفرت لدي عناصر أكثر أستطيع مساعدتك
      بالتوفيق إنشاء الله

    13. #13
      التسجيل
      22-11-2006
      المشاركات
      300
      المواضيع
      22
      شكر / اعجاب مشاركة

      رد: مذكرة في التعامل مع ملفات الفلاش في بيئة الفجوال بيسك

      الجزء الثالث و الأخير : بعض الطرق و الفوائد المتعلقة بالأداة Shockwave

      أولا : إسترجاع مقبض نافذة الأداة :


      لعلك لاحظت أن الأداة لا توفر أي خاصية لإسترجاع مقبض النافذة (hwnd) الخاص بها مما يجعل التعامل معها بواسطة واجهة برمجة التطبيقات (api) صعبا إن لم يكن مستحيلا لهذا نلجأ إستعمال بعض الحيل لاسترجاع هذا المقبض (hwnd) وهذه حسب رأيي أحد أحسن الطرق و أسهلها :


      1 - قم بإضافة PictureBox إلى النافذة ثم قم بإدراج أداة Shockwave داخل الـ PictureBox السابقة
      2 - ثم أضف الكود التالي
      كود:
      Private Const GW_CHILD = 5
      Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
      
      Private Sub Form_Load()
      Dim hFlh as Long
      hFlh = GetWindow(Pic.hwnd, GW_CHILD)
      End Sub
      بهذا نكون قد استرجعنا مقبض الأداة في المتغيرة hFlh

      ربما تتساءل عن الفائدة من استرجاع هذا المقبض و الجواب هناك فوائد كثيرة هذه بعضها :


      1 - 1 - التخلص من القائمة المنبثقة للأداة و تعويضها بقائمة منبثقة من تصميمنا :


      على إفتراض أننا نريد تعويض قائمة الفلاش المنبثقة بالقائمة mnuPopUp التي قمنا بتميمها نتبع الخطوات التالية :

      نقوم أولا باسترجاع مقبض الأداة ثم نقوم باستعمال تقنية الـ Sub classing كما يلي :

      نقوم بإضافة وحدة Module نمطية و ندرج فيها الكود التالي :
      كود:
       
      Option Explicit
      Public OrgProc As Long
      Private Const WM_RBUTTONDOWN = &H204
      Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
      Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
      Public Function WindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
      If Msg = WM_RBUTTONDOWN Then
      frmMain.PopupMenu frmMain.mnuPopUp 
      SendKeys "{ESC}"
      End If
      WindowProc = CallWindowProc(OrgProc, hwnd, Msg, wParam, lParam)
      End Function

      في الحدث Form_Load نظيف السطر التالي :
      كود:
      OrgProc = SetWindowLong(hFlh, GWL_WNDPROC, AddressOf WindowProc)

      و في الحدث Form_QueryUnload نظيف الكود التالي :
      كود:
      Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
      SetWindowLong hFlh, GWL_WNDPROC, OrgProc
      End Sub

      1 - 2 - حفظ أي شريحة في العرض في شكل Bitmap

      نقوم باسترجاع مقبض الأداة كما سبق ثم نقوم باستدعاء الإجراء التالي :
      كود:
      Private Sub SaveFrame()
      Dim hdcf As Long
      Dim hr As Long
      Picture1.AutoRedraw = True
      hdcf = GetWindowDC(hFlh)
      hr = BitBlt(Pic.hDC, 0, 0, Pic.ScaleWidth, Pic.ScaleHeight, hdcf, 0, 0, vbSrcCopy)
      SavePicture Pic.Image, "C:\Test.bmp"
      Pic.AutoRedraw = False
      Pic.Cls
      End Sub

      لا تنسى أن hFlh هو مقبض الأداة Shockwave الذي قمنا باسترجاعه لذا إذا أردت أن تستفيد منه هنا فيجب أن نصرح به في قسم التصريحات و ليس داخل الحدث Form_Loadكما فعلنا سابقا.
      كما لا تنسى تغيير المسار "C:\Test.bmp" بالمسار الذي يناسبك.

      ثانيا : استخراج ملفات الـ swf من العروض التنفيذية ( ذات الامتداد EXE )
      المبدأ بسيط يقوم على الافتراض التالي :
      Exe File = Flash Player + Swf File
      طبعا هذا الافتراض غير دقيق تماما لكنه الإجراءات التي تعتمد عليه ستكون ناجحة بنسبة عالية ربما 80% أو 90% الطريقة تتمثل في البحث عن موقع آخر ثابت "swf" في الملف ثم اقتطاع الجزء الممتد من هذا الموقع و حتى آخر الملف .
      الإجراء التالي مثال على ذلك :
      كود:
      Public Function ExtractSwf(szFile As String) As Boolean
      Dim NumFile As Integer
      Dim Buffer As String
      Dim SwfData As String
      Dim StarPos As Long
      NumFile = FreeFile
      StarPos = 1
      Open szFile For Binary As #NumFile
      Buffer = String(LOF(NumFile), 0)
      Get #NumFile, StarPos, Buffer
      Close #NumFile
      Do While StarPos > 0
      DoEvents
      StarPos = InStr(StarPos, UCase(Buffer), "FWS")
      If StarPos > 0 Then
      SwfData = Right(Buffer, Len(Buffer) - StarPos + 1)
      StarPos = StarPos + 3
      End If
      Loop
      If Len(SwfData) = 0 Then
      ExtractSwf = False
      Else
      If Dir(App.Path & "\Temp.swf") <> "" Then Kill App.Path & "\Temp.swf"
      NumFile = FreeFile
      StarPos = 1
      Open App.Path & "\Temp.swf" For Binary As #NumFile
      Put #NumFile, StarPos, SwfData
      Close #NumFile
      ExtractSwf = True
      End If
      End Function
      أنظر المرفقات
      الملفات المرفقة الملفات المرفقة

    14. #14
      التسجيل
      22-11-2006
      المشاركات
      300
      المواضيع
      22
      شكر / اعجاب مشاركة

      رد: مذكرة في التعامل مع ملفات الفلاش في بيئة الفجوال بيسك

      بعد اعتماد المشاركة ظهر لي أن بعض أجزاء الكود غير منسقة بصورة جيدة لهذا قم بنسخها في نافذة محرر أكواد البيسك لتتمكن من قراءتها بصورة أوضح
      فييما يخص الملف المرفق فهو عبارة عن مشروع يبين كيفية تعويض القائمة المنبثقة للفلاش بقائمة مخصصة كما هو مشروح في المذكرة

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

    15. #15
      التسجيل
      23-01-2007
      المشاركات
      25
      المواضيع
      3
      شكر / اعجاب مشاركة

      رد: مذكرة في التعامل مع ملفات الفلاش في بيئة الفجوال بيسك

      شكرا لك وبارك الله فيك

    ضوابط المشاركة

    • لا تستطيع إضافة مواضيع جديدة
    • لا تستطيع الرد على المواضيع
    • لا تستطيع إرفاق ملفات
    • لا تستطيع تعديل مشاركاتك
    •