PDA

View Full Version : آموزش: همه چیز را شیشه ای کنید!



Saman_12
پنج شنبه 18 شهریور 1389, 15:45 عصر
سلام دوستان گل برنامه نویس.:قلب:
توب این تایپیک می خوام مطلبی رو بنویس هر چند ساده هست اما واقعا جالبه.(فرمتون رو زیبا می کنه اساسی.):کف:

خوب این کد هر چند ساده یک کلاس هست که می تونه از هر کلاسی که دارای بکگراند ایمیج هست به ارث ببره!(به همین دلیل هم موضوع گذاشتم همه چیز رو شیشه ای کنید.)یعنی شما هر کامپونتی که توی کلاسش بکگراند ایمیج داره رو میتونید اینجوری کنید.(البته باید اول اونو با کلاس بنده ترکیب بفرمایید.)حالا کلا از مزایاش بگزریم آخر این پست یک عکس هم میزارم که ببینید چه می کند این کلاس:لبخند:!!!

اول باید این کلاس رو زیر کلاس اصلی برنامه بنویسید.(البته من می دونم که شما حوصله نوشتن ندارید و کپی می کنید ولی بهتره خودوتون بنویسیدش تا بفهمید چی کار میکنه!) :


'---------------------------------'|
'Imports Needed '|
'________________________________ '|
Imports System.Drawing '|
Imports System.Windows.Forms '|
'---------------------------------'|
Public Class NewBtn

Inherits Button

Public Overloads Function GetLucid(Optional ByVal Lucid As Integer = 127) As Bitmap

'Object Neded
Dim OldTop As Integer = Me.Top 'Set Top Now
Dim Bmp As Bitmap 'Set Bitmap For Get Object To ClipBoard
Dim NewBmp As Bitmap 'Set New Bitmap For Save Image
Dim OldColor As Color 'Set Obj color For get Color

'Set Top
Me.Top = Parent.Height + Me.Height 'Set New top

'Get Picture
Bmp = New Bitmap(Parent.Width, Parent.Height) 'Set Bmp New Bitmap
Parent.DrawToBitmap(Bmp, Parent.DisplayRectangle) 'Draw A Bitmap Screen

'Set New Image
NewBmp = New Bitmap(Parent.Width, Parent.Height) 'Set New Bmp To New Bitmap

'Set Top Old
Me.Top = OldTop 'Set Old Top

'Get & set Image.Color
For X As Integer = Me.Left To (Me.Left + Me.Width) 'Ste For ,For Set And Get X Pixel
For y = Me.Top To (Me.Top + Me.Height) 'Ste For ,For Set And Get y Pixel
Try 'Set New try
Application.DoEvents() 'No
OldColor = Bmp.GetPixel(X + 8, y + 30) 'Get Color
NewBmp.SetPixel((X - Me.Left), (y - Me.Top), Color.FromArgb(Lucid, OldColor)) 'Set Color
Catch ex As Exception 'Catch of try

End Try 'End try
Next 'End for
Next 'End For

'Set GetBitmap
Return NewBmp 'Set GetBitmap to NewBmp

'Dispos Object
Bmp.Dispose() 'Dispos Bmp
NewBmp.Dispose() 'Dis pos New bmp
End Function

End Class


کلاس بالا کلاس باتون رو به اث برده.
براتون توضیح هم نوشتم که بفهمید هر قسمت چی کار میکنه.(البته توضیحش بابا قوریه چون من انگلیسیم خوب نیست در هم هست شما ببخشد.):بامزه:

حالا نوبت توضیح هست این کد میاد و فرم شما رو توی یک بیت مپ رسم میکنه بعد هم جای خودش رو توی تصویر پیدا میکنه بعدهمن پیکس های مربوط به اون مکان رو می خونه و توی یک بیت مپ هم اندازه فرم رسم میکنه.(باید خاصیت BackgroundImageLayout شئ رو روی Tile تنظیم کنید تا تصویر صحیح روی همون مکان باتون بیفته!):کف:.
توی پارمتر های ورودی فانکشن موجود توی این کلاس یک ورودی به نام Lucid که همون شفافیت هستش که بالا ترین عدد 255 (کلا پشت این شئ معلومه.) و کمترین عدد 1(میشه همون رنگ طبیعی شئ)هست.(من پیشنهاد میکنم روی 167 تنظیم بشه.):متعجب:

برای راحتی کار شما میتونید اونو به صورت Dll در بیارین و مثل یک کامپونت معمولی ازش استفاده کنید.(میتونید هرچی کلاس مشابه با ارث بری هایی که دوست دارین داخل یک Dll بزارین این طوری یک Dll اظافه می کنید و تعداد زیادی کامپونت دارید.)

اگه اونو به صورت Dll در نیاوردی هم مشکلی نیست اونو به صورت رانتایم در فرم لود اظافه کنید.(یا تون باشه باید خاصیت بکگراند ایمیج رو روی فانکشن تنظیم کنید.)به طور کلی برای اینکه ضایع نشید باید کد زیر رو توی دوتا از رویداد های فرم بنویسد.(رویداد Load و ResizeEnd):لبخندساده: :


ObjName.BackgroundImageLayout = ImageLayout.Tile
ObjName.BackgroundImage = GetLucid

ObjName همون نام شی هست!
این کلاس یک مضیت داره اونم اینه که :
وقتی شما استایل شئ رو تغییر میدن این کد هم با همون استایل نشون داده میشه.!!:کف::کف:
یک پیشنهاد دوستانه میدم اونم اینه که برای فرم هایی که ریسایز نمیشن استفاده کنید تا کمی سرعت بره بالا.

اینم اون دو تا تصویری که قول داده بودم(البته یکی بیشتر نیست.) :
http://italia-host.coolpage.biz/uploads/1284060884.png