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

هل ممكن عمل شفافية للبرنامج مثل برامج ويندوز 7 ؟

بدأه PT-DOS في 11 سبتمبر 2010 · 5 رد · 1,651 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي فكرة احاول تنفيذها منذ زمن و لكنها لم تنجح بكل الطرق التي اعرفعا لذلك ارجو ممن لدية طريقة لتنفيذها فليخبرني

و هي جعل الفورم شفاف مثل برامج ونيدوز 7 و صممت صورة الفورم التي يجب ان يكون عليها ببرنامج الفوتوشوب 7

و هذة هي الصور (موجود ملف الصور الكامل بالمرفقات)

هذا هو الشكل الذي اريد ان يبدو علية الفورم

730495089.png

هذا الشكل الذي اريد ان يبدو علية الزر

883489272.png

و لكن لم يمكنني بحفظها بصورة جيدة بامتداد 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 و هي ايضا مرفقة مع البرنامج

و هذا كان الناتج

642608903.jpg

لم تنفع هذة الطريقة لان الفوتوشوب لم يحفظ الملف بالطريقة التي اريدها

و ان المكان الشفاف اظهر لون الفورم الفورم

و هذا ملف البرنامج

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

و هذا كان الناتج

744575787.jpg

و ايضا لم تنفع الطريقة لان الفوتوشوب لم يحفظ الملف بطريقة جيدة و

وايضا المكان الشفاف ظهر فيه لون الفورم

و هذا ملف البرنامج

http://www.4shared.com/file/7b0rZzyx/2_online.html

الطريقة الثالثة و هي باستعمال اداة vcFRMSHAPECTL.ocx

و لمن لا يعرف هذة الادة هي ادة تجعل الفورة علي الشكل انت تريدة فقط ضعها في الفورم و احدد لها مسار الصورة التي تريد ان يبدو عليها الفورم و ذلك من نافذة خصائص هذة الاداة و حدد لها الون الذي تريد ان

يتمسح من الصورة

و هذا مثال لها

هذة الصورة التي نريد ان يبدو عليها الفورم

188376128.jpg

نحدد الون الذي سيتم مسحة من الصورة و هو الون الاخضر و تدرجاتة هو

red = 0 ,green = 255 ,blue = 0

و هذا كان الناتج

304952988.jpg

و هذة امثله لها

http://www.4shared.com/file/U1CDIplZ/EX1.html

و ايضا هذة الامثلةليست من تصميمي ة اشكر الذي صممها و صمم هذة الاداة

و لكن المشكلة مع هذة الاداة كان لابد ان اعرف تدرجات الون الشفاف ليتم حذفة و لكن انا لا اعلم ما هي تدرجاتة !!

هذة كانت تجاربي مع الشفافية ارجو من لدية الخبرة ان يساعدني و شكرا

ملفات.rar

تم تعديل هذه المشاركة بواسطة PT-DOS في 11 سبتمبر 2010 في 19:40

#2

السلام عليكم

أنت لم تجرب طريقتي ( لم تقرأ مواضيعي :mad: ) التي ستفيدك إن شاء الله

أولاً : سوف أشرح المشكلة التي عانيت منها ضمن الفوتو شوب

وهي أن هناك فرق شاسع بين صورة الـ gif وصورة الـ png وكثر منا لا يعرفه

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

وبينما الظل الذي صممته للزر له تدرج شفافية أي تدرج لوني يعني (((( أكثر من لون )))) بهذه الطريقة لن تنفعنا صورة الجيف مهما فعلنا

بينما صورة الـ png تستطيع تلقائياً عمل تدرج شفافية أي أكثر من لون ( وهذا يم تلقائيا عند تصميم الصورة ) أظن هنا وضحت الصورة في ذهوننا

أما الحل لهذه المشكلة فهو أداة تعرض صور الـ png وهذا كل ما في الأمر

راجع هذا الرابط( موضوعي الذي طرحته عن صور الـ png ) وحمل الأداة من هناك

رجاءاً أذا أعجبك الموضوع أن تقوم بتقييمه :wink: وإذا لم تحل هذه المشكلة أخبرني وسنقوم معاً بتخطيها بإذن الله

#3

شكرا لك ... و اسف جدا علي عدم قراتي لموضوعك و بالفعل اداة رائعة جدا

و جربت الادة و لكن الشفافية تعطي الفور ( لون الفورم يظهر مكان الشفافية )

هذة كان النتيجة

480939424.jpg

انا اريد ان يظهر الشي الذي خلف الفورم في مكان الشفافية

اريد الفورم كلة شفاف

729385166.jpg

هل هناك طريقة اخي ؟؟

تم تعديل هذه المشاركة بواسطة PT-DOS في 12 سبتمبر 2010 في 03:52

#4

السلام عليكم

أخي الكرم ظننت أن طلبك هو الشفافية داخل الفورم

أما الصورة المرفقة في ردك الأخير فإنها بالتأكيد ليست بالفجول بيزك :excl:

هنا كلام يطرح نفسه ((( حان الوقت للإنتقال الى الدوت نيت ))) ألس كذلك :sleep:

ولكن هناك فكرة خطرت لي وهي الحيلة على البرنامج نفسه

أي نقوم بصنع فورم شفاف وفورم غير شفاف ونقم بربطهم ببعض برمجياً

بهذه الطريقة ستصل الى غايتك مع وجود بعض العوائق

جرب المثال المرفق وستعرف ماذا أعني

إذا أعجبتك الفكرة وأردت أن أساعدك في تطويرها فأنا مستعد بإذن الله :lol:

مثال.rar

#5

السلام عليكم

مشكور جدا علي المساعدة

صراحة انا اصلا طالب مني المهندس برنامج مقهي انترنت بالفيجوال بيسك دوت نت و انا قدر ما حولت اظبط البرنامج ما نفع الانو الاداة المسؤلة عن ادارة الشبكة في الدوت نت هي السوكت socket و لم افهم فيها شيا جلست شهر كاملا ابحث عن شي استطيع ان افهمها بة فلم اجد الي ان قررت ان ارجع الي الفيجوال بيسك القديم و استعمل اداة الشكبة القديمة وينسوك winsock و لكن بعد ان اجهرة بشفافية البرنامج اي يكون البرنامج شكلو جميل جدا لكي ينسا موضوع الدوت نت و السوكت التي لم افهم فيها شيا

اخي ان استطعت ان تحل لي مشكلة ربط كمبيوترين بالسوكت اكون شاكر لك جدا

و بالنسبة للبرنامج الشفافية تقريبا اتحلت الا ان هناك مشكلة بسيطة و هي انني لا استطيع ان الشفافية الي فورم اخر اخي لو استطعت ان تعمل لي مثال بة فورمين شفافين فساكون شاكر لك جدا

#6

لقد و جد هذا المثال

http://www.4shared.com/file/XkEqX4Sg/Transparen2019199112006.html

و باستخدام الاداة التي اعطاني ايها الاخ عبد الله دباس

عدلت البرنامج حتي صار علي هذا الشكل

190985011.jpg

حمل الكود و البرنامج من الرابط الاسفل

http://www.4shared.com/file/bBCBAO_a/calcsfx.html

شكر لك اخ عبد الله دباس

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…