سلام
امیدوارم که درسهای قبلی بدردتون خورده باشه . امروز میخوام آموزش بدم چطوری فرمهایی با اشکال دلخواه ساخت .
آموزش فرم امروز ما به شکل یک نوشته است . روشی که امروز یاد خواهید گرفت به شما این امکان را خواهد داد که بتوانید فرمهایی با اشکال پیچیده بسازید .
در توابع API مفهومی به نام Path وجود دارد که در توابع ترسیمی ازآن استفاده می شود . برای ایجاد یک Path از دستورBeginpath استفاده می کنیم .توابعی که برای این کار استفاده می کنیم عبارتند از :
1- Textout -۲ Roundrect 3- Ellipse ۴- Rectangle 5 – Lineto
6 - Beginpath 7 – StrokeAndfillpath 8 – PathToRegion
۹ – Setwindowrgn 10- Endpath
که پس از استفاده از توابع ترسیمی بایستی از عبارت Endpath استفاده کرد . در ضمن نحوه Declare کردن آنها را هم در زیر آورده ام.
برای اینکه منظورم را متوجه بشوید سورس یک برنامه را براتون مینویسم .
ابتدا این کدها را در ماژول کپی کنید.
Public Declare Function RoundRect Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
Public Declare Function Rectangle Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function Ellipse Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Public Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Public Declare Function PathToRegion Lib "gdi32" (ByVal hdc As Long) As Long
Public Declare Function BeginPath Lib "gdi32" (ByVal hdc As Long) As Long
Public Declare Function EndPath Lib "gdi32" (ByVal hdc As Long) As Long
Public Declare Function StrokeAndFillPath Lib "gdi32" (ByVal hdc As Long) As Long
حالا این کدها را در فرمتون کپی کنید .
Dim m_drag As BooleanDim px As LongDim py As Long
Private Sub Form_Load()Me.ScaleMode = vbpixelsevba_drawpathStrokeAndFillPath hdc
vba_drawpathrgn = PathToRegion(hdc)
SetWindowRgn hWnd, rgn, TrueEnd SubPrivate Sub vba_drawpath()Me.DrawWidth = 2Me.BackColor = RGB(5, 255, 255)Me.FillStyle = vbDiagonalCrossMe.FillColor = RGB(240, 190, 100)
Me.FontName = "Arial black"
BeginPath hdc
Me.FontSize = 30TextOut hdc, 0, 0, "bitajavan", 10
Me.FontSize = 55TextOut hdc, 40, 25, "@", 1
Me.FontSize = 30TextOut hdc, 100, 35, "blogfa.com", 10RoundRect hdc, 30, 48, 400, 91, 10, 10
Me.Font.Italic = TrueMe.Font.Size = 10TextOut hdc, 100, 90, "b i j a n _ h o t 2 0 0 3 @ y a h o o . c o m . ", 46EndPath hdcEnd Sub
Private Sub form_mousedown(button As Integer, shift As Integer, x As Single, y As Single)Select Case buttonCase vbRightButtonUnload MeCase vbLeftButtonm_drag = Truepx = xpy = yEnd SelectEnd Sub
Private Sub form_mousemove(button As Integer, shift As Integer, x As Single, y As Single)If Not m_drag Then Exit SubMe.Move Me.Left + (x - px), Me.Top + (y - py)
End Sub
Private Sub form_mouseup(button As Integer, shift As Integer, x As Single, y As Single)m_drag = FalseEnd Sub