السلام عليكم
لدي فكرة احاول تنفيذها منذ زمن و لكنها لم تنجح بكل الطرق التي اعرفعا لذلك ارجو ممن لدية طريقة لتنفيذها فليخبرني
و هي جعل الفورم شفاف مثل برامج ونيدوز 7 و صممت صورة الفورم التي يجب ان يكون عليها ببرنامج الفوتوشوب 7
و هذة هي الصور (موجود ملف الصور الكامل بالمرفقات)
هذا هو الشكل الذي اريد ان يبدو علية الفورم
هذا الشكل الذي اريد ان يبدو علية الزر
و لكن لم يمكنني بحفظها بصورة جيدة بامتداد gif و لكن اتحفظت جيدا بضيغة png و لكن بحثت طويلا عن ادة تعرض هذا انوع من الملفات و لم اجد
و هذة الطريقتين التي جربتها
الطريقة الاولي باستعمل هذا الكود
Option Explicit Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, _ ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As _ Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal _ nCombineMode As Long) As Long Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As _ Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long Public Sub TransparentForm(frm As Form) frm.ScaleMode = vbPixels Const RGN_DIFF = 4 Const RGN_OR = 2 Dim outer_rgn As Long Dim inner_rgn As Long Dim wid As Single Dim hgt As Single Dim border_width As Single Dim title_height As Single Dim ctl_left As Single Dim ctl_top As Single Dim ctl_right As Single Dim ctl_bottom As Single Dim control_rgn As Long Dim combined_rgn As Long Dim ctl As Control If frm.WindowState = vbMinimized Then Exit Sub wid = frm.ScaleX(frm.Width, vbTwips, vbPixels) hgt = frm.ScaleY(frm.Height, vbTwips, vbPixels) outer_rgn = CreateRectRgn(0, 0, wid, hgt) border_width = (wid - frm.ScaleWidth) / 2 title_height = hgt - border_width - frm.ScaleHeight inner_rgn = CreateRectRgn(border_width, title_height, wid - border_width, hgt - border_width) combined_rgn = CreateRectRgn(0, 0, 0, 0) CombineRgn combined_rgn, outer_rgn, inner_rgn, RGN_DIFF For Each ctl In frm.Controls If ctl.Container Is frm Then ctl_left = frm.ScaleX(ctl.Left, frm.ScaleMode, vbPixels) _ + border_width ctl_top = frm.ScaleX(ctl.Top, frm.ScaleMode, vbPixels) + title_height ctl_right = frm.ScaleX(ctl.Width, frm.ScaleMode, vbPixels) + ctl_left ctl_bottom = frm.ScaleX(ctl.Height, frm.ScaleMode, vbPixels) + ctl_top control_rgn = CreateRectRgn(ctl_left, ctl_top, ctl_right, ctl_bottom) CombineRgn combined_rgn, combined_rgn, control_rgn, RGN_OR End If Next ctl SetWindowRgn frm.hWnd, combined_rgn, True End Sub Private Sub Form_Load() Gif89a1.FileName = App.Path & "\be.gif" End Sub Private Sub Form_Resize() TransparentForm Me Gif89a1.FileName = App.Path & "\ba.gif" End Sub
(هذا الكود ليس لي و انما لشخص ما و اشكرة جدا علي هذا الكود و اتمني ان يواصلني(
و باستعمال هذة الاداة Gif89.ocx لعرض الgif و هي ايضا مرفقة مع البرنامج
و هذا كان الناتج
لم تنفع هذة الطريقة لان الفوتوشوب لم يحفظ الملف بالطريقة التي اريدها
و ان المكان الشفاف اظهر لون الفورم الفورم
و هذا ملف البرنامج
http://www.4shared.com/file/oaAvzt5W/1_online.html
الطريقة الثانية باستعمال هذا الكود
Private Declare Function SetLayeredWindowAttributes Lib "user32.dll" (ByVal hwnd As Long, ByValcrKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Boolean Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Const LWA_ALPHA = 2 Const GWL_EXSTYLE = (-20) Const WS_EX_LAYERED = &H80000 Private Sub Form_Load() SetWindowLong hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) Or WS_EX_LAYERED SetLayeredWindowAttributes hwnd, 0, 128, LWA_ALPHA Gif89a1.FileName = App.Path & "\ba.gif" End Sub
(هذا الكود ليس لي و انما لشخص ما و اشكرة جدا علي هذا الكود و اتمني ان يواصلني(
و باستعمال نفس الاداة لعرض ملفات الgif
و هذا كان الناتج
و ايضا لم تنفع الطريقة لان الفوتوشوب لم يحفظ الملف بطريقة جيدة و
وايضا المكان الشفاف ظهر فيه لون الفورم
و هذا ملف البرنامج
http://www.4shared.com/file/7b0rZzyx/2_online.html
الطريقة الثالثة و هي باستعمال اداة vcFRMSHAPECTL.ocx
و لمن لا يعرف هذة الادة هي ادة تجعل الفورة علي الشكل انت تريدة فقط ضعها في الفورم و احدد لها مسار الصورة التي تريد ان يبدو عليها الفورم و ذلك من نافذة خصائص هذة الاداة و حدد لها الون الذي تريد ان
يتمسح من الصورة
و هذا مثال لها
هذة الصورة التي نريد ان يبدو عليها الفورم
نحدد الون الذي سيتم مسحة من الصورة و هو الون الاخضر و تدرجاتة هو
red = 0 ,green = 255 ,blue = 0
و هذا كان الناتج
و هذة امثله لها
http://www.4shared.com/file/U1CDIplZ/EX1.html
و ايضا هذة الامثلةليست من تصميمي ة اشكر الذي صممها و صمم هذة الاداة
و لكن المشكلة مع هذة الاداة كان لابد ان اعرف تدرجات الون الشفاف ليتم حذفة و لكن انا لا اعلم ما هي تدرجاتة !!
هذة كانت تجاربي مع الشفافية ارجو من لدية الخبرة ان يساعدني و شكرا








