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

كود لجعل الفورم شفاف

مغلق
بدأه مجرد مسلم في 22 أكتوبر 2007 · 4 رد · 1,178 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

منقول من منتدى فيجول بيسك

نكتب هذا الأمر في التصريح General

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نكتب هذا الكود فى الفورم :

نكتب هذا الكود في الفورم في الحدث RESIZEPrivate Sub Form_Resize()

TransparentForm Me

End Sub

وبالتوفيق

نحن لن نستسلم ننتصر أونموت

#2

أهلا بالعضو مجرد مسلم

و شكرا على موضوعك.

---

ما ذكرت كله يمكن عمله بسهولة بدالة SetLayeredWindowAttributes و الكود سيكون حوالى 10 أسطر فقط.

---

منتظرين مواضيع أقوى فالمنتدى هنا تخطى مرحلة الكماليات و الأساسيات (<---- ليس أستهزاء بموضوعك و لكن للتوضيح فقط و الله يعلم ما فى قلبى :) )

#3

سلام

لم أقم بتجريب الكود أعلاه,لكن و من خلال خبرتي في لبرمجة api win32

يبين لي أن الكود ليست له أي علاقة بخلق منظر شفاف,كون دوال المستعملة متخصصة في الاستذارة و الجوانب ...

للاشارة أخي msayed2004

الدالة SetLayeredWindowAttributes لاتعمل في vs6إذا سطر واحد لا يكفي أحيانا

أما فيما يخص ذالة TransparentForm فهو اسم form

سلام الله عليكم

#4
msayed2004 كتب:
ما ذكرت كله يمكن عمله بسهولة بدالة SetLayeredWindowAttributes و الكود سيكون حوالى 10 أسطر فقط.
زهيرر كتب:
للاشارة أخي msayed2004

الدالة SetLayeredWindowAttributes لاتعمل في vs6إذا سطر واحد لا يكفي أحيانا

بل تعمل فى الـ VS6 ;)

و أنا لم أقل سطر واحد :rolleyes: !

- بالمناسبة أنا لم أقرأ سوى أول سطرين من كود اﻷخ "مجرد مسلم"

تم تعديل هذه المشاركة بواسطة msayed2004 في 27 أكتوبر 2007 في 16:12

#5

ماز لت تحتاج إلى الخبرة يا اخي زهيرر

نحن لن نستسلم ننتصر أونموت

هذا الموضوع مغلق.

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

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

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

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

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