گرد کردن گوشه برنامه در vb.net

pilevar

Member
سلام

من میخوام گوشه برنامه ای که با vb.net نوشتم رو گرد کنم.

مثل این تصویر که برای nero هست:(پشت قسمت گرد شده معلومه)
sxgmsh.gif


ممنون میشم کمکم کنید.:cry:
 
آخرین ویرایش:

saalek110

Well-Known Member
من در گوگل این را :
visual basic rounded form
سرچ کردم.
دومین نتیجه جستجو این سایت بود:
http://www.a1vbcode.com/app-2407.asp
یک سورس 2003 درش بود. دانلود کردم. با api فرم حلقوی ساخته. نمی دونم روش خوبیه یا نه.
بعد اومدم خودم یک پروژه جدید ساختم. از منوی پروجکت در 2005 گزینه ((شو آل فایلز)) را زدم. در فرم1.دیزاینر.وی بی زیر خط:
Inherits System.Windows.Forms.Form
این را اضافه کردم:
کد:
Private Const BORDER_DIAMETER As Short = 1445
    Private Const FORM_DIAMETER As Short = 18000
    Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Integer, ByVal Y1 As Integer, ByVal X2 As Integer, ByVal Y2 As Integer) As Integer
    Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Integer, ByVal hRgn As Integer, ByVal bRedraw As Integer) As Integer
در فرم_لود هم این را:
کد:
        Dim i, j As Short
        Dim hr, dl As Integer
        Dim usew, useh As Integer
        'Make round form
        Me.Width = FORM_DIAMETER
        Me.Height = FORM_DIAMETER
        usew = Me.Width / FORM_DIAMETER
        useh = Me.Height / FORM_DIAMETER
        hr = CreateEllipticRgn(400, 419, usew, useh)
        dl = SetWindowRgn(Me.Handle.ToInt32, hr, True)
        Me.Height = (FORM_DIAMETER + 50)
        Me.Width = (FORM_DIAMETER + 50)
ولی به نظرم وقتی فرم را جابجا می کنیم کمی کنده.
 

pilevar

Member
مرسی خیلی جالب بود.

فقط یه چیزی:

اگر بخوایم فقط دوتا گوشه پایینی کمی گرد بشه(به اندازه گردی بالای پنجره های ویندوز) چی کار باید بکنیم؟؟؟
 

pilevar

Member
هیچی از این متوجه نشدم.:sad:

الان که کداشو تست کردم دیدم درسته.

اینم کدش(برای عزیزان دیگه:
کد:
        Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
        Dim p As New Drawing2D.GraphicsPath()
        p.StartFigure()
        p.AddArc(New Rectangle(0, 0, 35, 35), 180, 90)
        p.AddLine(35, 0, Me.Width - 35, 0)
        p.AddArc(New Rectangle(Me.Width - 35, 0, 35, 35), -90, 90)
        p.AddLine(Me.Width, 35, Me.Width, Me.Height - 35)
        p.AddArc(New Rectangle(Me.Width - 35, Me.Height - 35, 35, 35), 0, 90)
        p.AddLine(Me.Width - 35, Me.Height, 35, Me.Height)
        p.AddArc(New Rectangle(0, Me.Height - 35, 35, 35), 90, 90)
        p.CloseFigure()
        Me.Region = New Region(p)

اینو توی حالت load فرم تون قرار بدید.
این 35 ها رو که تغییر بدید مقدار گردی لبه ها تغییر میکنه.

saalek110 عزیز واقعا متشکرم
 

pilevar

Member
اینم کد برای اینکه بالاش حلت گردی نداشته باشه:
کد:
        Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
        Dim p As New Drawing2D.GraphicsPath()
        p.StartFigure()
        p.AddArc(New Rectangle(0, 0, 1, 1), 0, 0)
        p.AddLine(0, 0, Me.Width, 0)
        p.AddArc(New Rectangle(Me.Width - 30, Me.Height - 30, 30, 30), 0, 90)
        p.AddLine(Me.Width - 30, Me.Height, 30, Me.Height)
        p.AddArc(New Rectangle(0, Me.Height - 30, 30, 30), 90, 90)
        p.CloseFigure()
        Me.Region = New Region(p)
 

جدیدترین ارسال ها

بالا