الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تشغيل فلاش على فورم شفافه

بدأه C++er في 11 يناير 2008 · 7 رد · 2,488 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كنت اتصفح الأمثله التى صنعتها من قبل على جهازى فوجدت هذا المثال فقررت مشاركتكم أياه

المثال عبارة عن تشغيل فلاشه على الفورم و إخفاء كل شئ على الفورم ماعدا الفلاشه و الناتج سيكون كالتالى

post-135620-1200082720_thumb.gif

المثال بالمرفقات و التالى هو شرح الكود

الكود الموجود بالفورم بسيط و هو

Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Const GWL_EXSTYLE As Long = -20
Private Const WS_EX_LAYERED As Long = &H80000

Private Declare Function SetLayeredWindowAttributes Lib "user32.dll" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Const LWA_ALPHA As Long = &H2
Private Const LWA_COLORKEY As Long = &H1

Dim OldExStyle As Long

Private Sub Form_Initialize()
OldExStyle = GetWindowLong(Me.hwnd, GWL_EXSTYLE)
SetWindowLong Me.hwnd, GWL_EXSTYLE, OldExStyle Or WS_EX_LAYERED
SetLayeredWindowAttributes Me.hwnd, &HC8D0D4, 0, LWA_COLORKEY

'vbButtonFace = &HC8D0D4

Flash.Movie = App.Path & "\1.swf"
Flash.Play
End Sub

الدالة GetWindowLong تعود بالعديد من المعلومات على حسب المعامل الثانى و فى حالتنا هذه نستخدم الثابت GWL_EXSTYLE لنعرف الخصائص المتقدمه للفورمة، الدالة تعود لك برقم يمثل الخصائص المتقدمه للفورم Form Extended Style.

بعد ذلك اقوم بدمج القيمة العائدة من الدالة GetWindowLong مع الثابت WS_EX_LAYERED و هى القيمة التى تجعل من الفورم تتكون من عدة طبقات فإن كانت احداهما مختفية فليس بالضرورة ان تكون التى فوقها او تحتها مختفية "هيفهم كلامى جدا اللى اشتغل على برامج رسم او composition زى الفوتوشوب او افتر إفكت".

القيمة الجديدة اقوم بإرسالها للدالة SetWindowLong التى تقوم بتطبيق قيمة معينه على الفورم و هذا طبعا حسب المعامل الثانى، و حيث ان المعامل الثانى فى هذه الحالة هو GWL_EXSTYLE فسيتم تعديل الخصائص المتقدمة للفورم بما يتناسب مع القيمة الجديدة المدخلة فى المعامل الثالث والتى قمنا بمعرفتها من قبل.

بعد ذلك نقوم بإستخدام الدالة SetLayeredWindowAttributes هذه الدالة لها وظيفتان إما إخفاء لون معين من الفورم او جعل الفورم شفافة او يمكن تطبيق العمليتان معاً. هذه الدالة تتكون من اربعة معاملات هما كالتالى:

hwnd : و هو الـ Handle الخاص بالفورم التى تريد جعلها شفافة او حذفف لون معين من عليها و فى هذه الحالة نرسل لهذا المعامل القيمة Me.hwnd

crKey : و هو رقم اللون الذى تريد اخفائه و الأفضل إدخاله بصورة الترقيم السداسى العشرى. هذا المعامل سيتم إستخدامه فى حالة ان المعامل الرابع كانت قيمته او احدى قيمه تساوى LWA_COLORKEY

bAlpha : هذا المعامل يتم إدخال ارقام له فى المدى من صفر و حتى 255 و يمثل درجة الشفافيه للفورم. هذا المعامل سيتم إستخدامه فى حالة ان المعامل الرابع كانت قيمته او احدى قيمه تساوى LWA_ALPHA

dwFlags : هذا المعامل يأخذ إحدى او كل القيم التاليه:

LWA_COLORKEY : فى حال إستخدام هذا الثابت سيتم تطبيق المعامل الثانى فقط.

LWA_ALPHA : فى حال إستخدام هذا الثابت سيتم تطبيق المعامل الثالث فقط.

يمكن إستخدام الثابتين معا و ذلك عن طريق دمجهم بإستخدام العامل Or.

داخل مثالنا هذا قمت بإدراج أداة الفلاش - نسخة Adobe من اداة الفلاش و أسمها FlDbg9c.ocx - و من داخل خصائصها اخترت Custom ثم من خلال الـ Property page التى ظهرت لى عدلت الخاصية Window Mode و جعلتها Transparent.

الدالة SetLayeredWindowAttributes قمت بإرسال اللون الشفاف - وهو اللون الذى سيتم حذفه من الفورم - و هو vbButtonFace - و هو لون خلفية الفورم - و حيث ان هذا الثابت لا ينفع فقمت بتحويل القيمة الخاصه بذلك اللون إلى الترقيم السداسى العشرى و كانت النتيجة كما ترى.

داخل فولدر المثال يوجد ملفين فلاش احداهما عبارة عن طائرة هليكوبتر و الأخر ساعه قم بتغيير اسم الملف الذى تريده التجبره عليه إلى الأسم 1.swf

اتمنى ان يكون المثال نال اعجابكم.

Color_Key_Example.rar

و الله ولى التوفيق

تم تعديل هذه المشاركة بواسطة Game Expert في 12 يناير 2008 في 03:39

مدونتي: C++ Tips and Tricks

#2

اخى والله كلمة شكر قليله عليك ولكن اقول ربنا يجعلها فى ميزان حسناتك ويجعلك تتصفح اكتر وتفيض علينا بكل شيق وجميل

اخى اقول ربنا يوفقنى ويوفقك وجميع الاعضاء

اقتباس
امين

00
 

فاضى 

 

00

#4

مثال رائع 000 كل الشكر

#5

مشكور أخي ....مع تحياتي

#6

1000 شكر

#7

مشكور أخي ....مع تحياتي

#8

موضوع من الآخر شكرا لك , :)

<EMBED src=http://www.abdelghafar.com/images/banners/bm2.swf width=486 height=60 type=application/x-shockwave-flash EMBED < menu="false" loop="true" quality="high">

مواضيع مشابهة