منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : dark form
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم

عندي 3 فورم  فورم رئيسي وفورم تظليل وفورم اخر

الفورم الثالث عند فتحة يجعل الفورم الثاني شفاف للفورم الرئيسي

قمت بعمل الفورم الثاني شفاف وتغير درجة الشفافية كل شيء تمام بس لما بيظهر الفورم الثالث الثاني الشفاف يظهر بعيدا عن الفورم الرئيسي ولا ينطبق علية

قمت بعمل فورم التظليل الشفاف center parent

ولكن يظهر في مكان خلاف الفورم الرئيسي 

اريد ان ينطبق علي الفورم الرئيسي ويكون الفورم الثالث  center parent

طبعا مش هينفع اعمل الفورم الفورم الثاني  show dialog عشان اظهر الفورم الثالث
حاول تضع مثال يعبر عن الفكرة التي تتحدث عنها
وعليكم السلام

ممكن يكون هذا الموضوع نفس المطلوب لان فيه مرفق باسم DarkenForm.zip
http://vb4arb.com/vb/showthread.php?tid=7969
(30-11-17, 03:31 PM)ﻣﺒﺘﺪﺉ كتب : [ -> ]وعليكم السلام

ممكن يكون هذا الموضوع نفس المطلوب لان فيه مرفق باسم  DarkenForm.zip
http://vb4arb.com/vb/showthread.php?tid=7969

هذا هو طلبي لكن الروابط كلها لاتعمل
(30-11-17, 06:51 PM)Amir_alzubidy كتب : [ -> ]
السلام عليكم و رحمة الله 
هذا مثال : 




انا عايز الفورم يظلل فورم اخر وليش شاشة الكمبيوتر

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

Dim plexi = New Form()
plexi.FormBorderStyle = FormBorderStyle.None
plexi.Size = New Size(Me.Width, Me.Height - 30)
plexi.StartPosition = FormStartPosition.CenterParent
plexi.AutoScaleMode = AutoScaleMode.None
plexi.ShowInTaskbar = False
plexi.BackColor = Color.Black
plexi.Opacity = 0.45
plexi.Location = New Point(Me.Left, Me.Top - 30)
plexi.Show()
يا ليت الادارة تعيد تحديث المرفق DarkenForm.zip في الرابط
http://vb4arb.com/vb/showthread.php?tid=7969
أضف الكلاس التالي الي مشروعك
وهو سيعمل بمثابة DarkForm
أنا فقط أعطيته اسما أخر هو BlendForm

PHP كود :
Public Class BlendForm
    Inherits Form

    Public Sub 
New(rect As RectanglecolorBack As Coloralpha As Byte)
 
       MyBase.StartPosition FormStartPosition.Manual
        MyBase
.FormBorderStyle FormBorderStyle.None
        MyBase
.TopLevel True
        MyBase
.TopMost True
        MyBase
.ShowInTaskbar False
        MyBase
.ShowIcon False
        MyBase
.BackColor colorBack
        Me
.DoubleBuffered True
        Me
.Opacity GetOpacity(alphaMyBase.BackColor)
 
       Me.Bounds rect
    End Sub

    Friend 
Function GetOpacity(sca As BytesourceColor As Color) As Double
        sca 
Byte.MaxValue sca
        Dim dest 
As Color Color.FromArgb(CInt((- (sca Byte.MaxValue)) * Byte.MaxValue), sourceColor)
 
       Return CDbl(CByte(If(dest.255255, If(dest.00dest.A))) / Byte.MaxValue)
 
   End Function

End Class 

الكود التالي يوضح لك كيفية حساب مكان الفورم الرئيسي علي شاشة الكمبيوتر
ومن ثم نقوم بإظهار BlendForm فوقه تماما


PHP كود :
Public Class Form1

    Private blend 
As BlendForm

    Private Sub Form1_Load
(sender As ObjectAs EventArgsHandles MyBase.Load
        ShowBlendForm
()
 
   End Sub

    Private Sub ShowBlendForm
()
 
       Dim rect As Rectangle GetWindowBounds(Me.Bounds)
 
       rect.rect.+ (SystemInformation.FrameBorderSize.Width)
 
       rect.Width rect.Width - (SystemInformation.FrameBorderSize.Width)
 
       rect.Height rect.Height - (SystemInformation.FrameBorderSize.Height)
 
       Dim alpha As Byte 128
        Dim blendColor 
As Color Color.Blue
        blend 
= New BlendForm(rectblendColoralpha)
 
       blend.Show()
 
   End Sub

    Friend 
Function GetWindowBounds(ByRef rect As Rectangle) As Rectangle
        Dim scrBounds 
As Rectangle SystemInformation.VirtualScreen
        Dim topleft 
As Point = New Point(Math.Max(rect.LeftscrBounds.X), Math.Max(rect.TopscrBounds.Y))
 
       Dim bottomRight As Point = New Point(Math.Min(rect.RightscrBounds.scrBounds.Width), Math.Min(rect.BottomscrBounds.scrBounds.Height))
 
       rect.Location topleft
        rect
.Height Math.Abs(bottomRight.rect.Top)
 
       rect.Width Math.Abs(bottomRight.rect.Left)
 
       Return rect
    End 
Function


End Class 
ملحوظة أخيرة
الفورم غالبا يرسم نفسه بطرق مختلفة حسب نظام التشغيل 
مثلا الحسابات اعلاه صالحة للويندوز 10 بشرظ أن الفورم الرئيسي يكون Sizable
و غالبا إن الأفضل أنك تستغني عن الأسطر التالية من الكود
والموجودة في الروتين ShowBlendForm
PHP كود :
       rect.rect.+ (SystemInformation.FrameBorderSize.Width)
 
       rect.Width rect.Width - (SystemInformation.FrameBorderSize.Width)
 
       rect.Height rect.Height - (SystemInformation.FrameBorderSize.Height
(01-12-17, 10:47 AM)silverlight كتب : [ -> ]أضف الكلاس التالي الي مشروعك
وهو سيعمل بمثابة DarkForm
أنا فقط أعطيته اسما أخر هو BlendForm

PHP كود :
Public Class BlendForm
    Inherits Form

    Public Sub 
New(rect As RectanglecolorBack As Coloralpha As Byte)
 
       MyBase.StartPosition FormStartPosition.Manual
        MyBase
.FormBorderStyle FormBorderStyle.None
        MyBase
.TopLevel True
        MyBase
.TopMost True
        MyBase
.ShowInTaskbar False
        MyBase
.ShowIcon False
        MyBase
.BackColor colorBack
        Me
.DoubleBuffered True
        Me
.Opacity GetOpacity(alphaMyBase.BackColor)
 
       Me.Bounds rect
    End Sub

    Friend 
Function GetOpacity(sca As BytesourceColor As Color) As Double
        sca 
Byte.MaxValue sca
        Dim dest 
As Color Color.FromArgb(CInt((- (sca Byte.MaxValue)) * Byte.MaxValue), sourceColor)
 
       Return CDbl(CByte(If(dest.255255, If(dest.00dest.A))) / Byte.MaxValue)
 
   End Function

End Class 

الكود التالي يوضح لك كيفية حساب مكان الفورم الرئيسي علي شاشة الكمبيوتر
ومن ثم نقوم بإظهار BlendForm فوقه تماما


PHP كود :
Public Class Form1

    Private blend 
As BlendForm

    Private Sub Form1_Load
(sender As ObjectAs EventArgsHandles MyBase.Load
        ShowBlendForm
()
 
   End Sub

    Private Sub ShowBlendForm
()
 
       Dim rect As Rectangle GetWindowBounds(Me.Bounds)
 
       rect.rect.+ (SystemInformation.FrameBorderSize.Width)
 
       rect.Width rect.Width - (SystemInformation.FrameBorderSize.Width)
 
       rect.Height rect.Height - (SystemInformation.FrameBorderSize.Height)
 
       Dim alpha As Byte 128
        Dim blendColor 
As Color Color.Blue
        blend 
= New BlendForm(rectblendColoralpha)
 
       blend.Show()
 
   End Sub

    Friend 
Function GetWindowBounds(ByRef rect As Rectangle) As Rectangle
        Dim scrBounds 
As Rectangle SystemInformation.VirtualScreen
        Dim topleft 
As Point = New Point(Math.Max(rect.LeftscrBounds.X), Math.Max(rect.TopscrBounds.Y))
 
       Dim bottomRight As Point = New Point(Math.Min(rect.RightscrBounds.scrBounds.Width), Math.Min(rect.BottomscrBounds.scrBounds.Height))
 
       rect.Location topleft
        rect
.Height Math.Abs(bottomRight.rect.Top)
 
       rect.Width Math.Abs(bottomRight.rect.Left)
 
       Return rect
    End 
Function


End Class 
ملحوظة أخيرة
الفورم غالبا يرسم نفسه بطرق مختلفة حسب نظام التشغيل 
مثلا الحسابات اعلاه صالحة للويندوز 10 بشرظ أن الفورم الرئيسي يكون Sizable
و غالبا إن الأفضل أنك تستغني عن الأسطر التالية من الكود
والموجودة في الروتين ShowBlendForm
PHP كود :
       rect.rect.+ (SystemInformation.FrameBorderSize.Width)
 
       rect.Width rect.Width - (SystemInformation.FrameBorderSize.Width)
 
       rect.Height rect.Height - (SystemInformation.FrameBorderSize.Height

الف شكر علي ردك  انا عدلت الكود الي في اول  الخاص بالاستاذ Amir_alzubidy     وظبط معايا بس في مشكلة اخري   وايضا نفس المشكلة بالكودد الخاص بك

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

PHP كود :
 Dim dark = New Form()
 
           dark.FormBorderStyle FormBorderStyle.None
            dark
.Size = New Size(Me.WidthMe.Height)
 
           dark.StartPosition FormStartPosition.Manual
            dark
.AutoScaleMode AutoScaleMode.None
            dark
.ShowInTaskbar False
            dark
.TopMost True
            dark
.BackColor Color.Black
            dark
.Opacity 0.45
            dark
.Location = New Point(Me.LeftMe.Top)
 
           dark.Show() 
ما فهمته من سؤالك أنك لديك عدد 2 فورم
وتريد عندما يظهر الفورم الثاني
تقوم بتظليل الفورم الرئيسي
عموما الأكواد اعلاه مجرد مرجع لك لتنفيذ فكرتك

في المرفقات ستجد تفاصيل أكثر
انظر المرفقات