كنت اتصفح الأمثله التى صنعتها من قبل على جهازى فوجدت هذا المثال فقررت مشاركتكم أياه
المثال عبارة عن تشغيل فلاشه على الفورم و إخفاء كل شئ على الفورم ماعدا الفلاشه و الناتج سيكون كالتالى
المثال بالمرفقات و التالى هو شرح الكود
الكود الموجود بالفورم بسيط و هو
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
اتمنى ان يكون المثال نال اعجابكم.
و الله ولى التوفيق