PDA

View Full Version : ساختن تکست باکس زیبا



sheibanizaveh
یک شنبه 27 بهمن 1392, 17:54 عصر
سلام دوستان عزیز یه نمونه برنامه رو براتون میزارم به زبان C# می خواستم لطف کنید اونو تبدیل به زبان Vb.net کنید .
NotifyTextBox.zip (http://barnamenevis.org/attachment.php?attachmentid=98523&d=1358410189)

alimanam
یک شنبه 27 بهمن 1392, 21:13 عصر
با سلام

کلاس اصلی این سورس به وی بی دات نت :


Imports System.Collections.Generic
Imports System.Text
Imports System.Windows.Forms
Imports System.Drawing.Imaging
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Threading
Imports System.ComponentModel

Namespace NotifyTextBox
Public Class Notify
Inherits Component

Public Class FrameControl
Inherits Control

Private _percent As Integer = 0
Private _gradient As LinearGradientBrush = Nothing

Public Sub New()
SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
Me.Enabled = False
End Sub

Public Property Percent() As Integer
Get
Return _percent
End Get
Set(ByVal value As Integer)
_percent = value
Me.Invalidate()
End Set
End Property

Private Sub CreateGradient()
Dim rect As New Rectangle(0, 0, Me.Width, Me.Height)
Dim color1 As Color = Color.FromArgb(255, 255, 255, 255)
Dim color2 As Color = Color.FromArgb(255, 255, 150, 70)
_gradient = New LinearGradientBrush(rect, color1, color2, LinearGradientMode.Horizontal)
Dim bnd As New Blend(3)
bnd.Factors = New Single() { 0, 1, 0 }
bnd.Positions = New Single() { 0, 0.5F, 1 }
_gradient.Blend = bnd
End Sub

Protected Overrides Sub OnSizeChanged(ByVal e As EventArgs)
MyBase.OnSizeChanged(e)
Dim rgn As New Region(New Rectangle(0, 0, Me.Width, Me.Height))
rgn.Exclude(New Rectangle(1, 2, Me.Width - 2, Me.Height - 4))
Me.Region = rgn
CreateGradient()
End Sub

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
If _gradient Is Nothing Then
CreateGradient()
End If
Dim factor As Single = _gradient.Rectangle.Width / 100F
If _percent = 0 Then
_gradient.ResetTransform()
End If
e.Graphics.FillRectangle(_gradient, -_gradient.Rectangle.Width + _percent * factor * 2, 0, _gradient.Rectangle.Width, Me.Height)
_gradient.TranslateTransform(factor * 4, 0)
End Sub
End Class

Private frame As New FrameControl()
Private worker As New BackgroundWorker()

Public Sub New()
worker.WorkerReportsProgress = True
AddHandler worker.DoWork, AddressOf worker_DoWork
AddHandler worker.ProgressChanged, AddressOf worker_ProgressChanged
AddHandler worker.RunWorkerCompleted, AddressOf worker_RunWorkerCompleted
End Sub

Public Sub Show(ByVal ctl As Control)
If worker.IsBusy = False Then
Dim bmp As New Bitmap(ctl.Width, ctl.Height + 2, PixelFormat.Format32bppArgb)
Dim rect As New Rectangle(0, 0, bmp.Width, bmp.Height)
Dim color1 As Color = Color.FromArgb(255, 255, 255, 255)
Dim color2 As Color = Color.FromArgb(255, 255, 150, 70)
frame.Bounds = ctl.Bounds
ctl.Parent.Controls.Add(frame)
frame.BringToFront()
frame.Visible = True
worker.RunWorkerAsync()
End If
End Sub

Private Sub worker_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
Try
For i As Integer = 0 To 100 Step 2
worker.ReportProgress(i)
Thread.Sleep(20)
Next i
Catch
End Try
End Sub

Private Sub worker_ProgressChanged(ByVal sender As Object, ByVal e As ProgressChangedEventArgs)
frame.Percent = e.ProgressPercentage
End Sub

Private Sub worker_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs)
frame.Visible = False
End Sub
End Class

End Namespace

موفق باشید./

sheibanizaveh
یک شنبه 27 بهمن 1392, 21:28 عصر
سلام دوست عزیز
میشه راهنمایی کنید چجوری اونو فراخونی کنم . ممنون

sheibanizaveh
یک شنبه 27 بهمن 1392, 21:41 عصر
ممنون دوست عزیز مشکل حل شد