PDA

View Full Version : آموزش استفاده از آیکن 32 بیتی (32bpp) برای برنامه



saber67
پنج شنبه 11 مهر 1392, 12:17 عصر
یه دلیل قدیمی بودن VB6 از آیکن های با کیفیت یا 32 بیتی پشتیبانی نمیکنه، و همین موضوع باعث میشه برنامه های ساخته شده با VB6 از نظر زیبایی و کاربر پسند بودن به مشکل بر بخورن

در این آموزش می خوام نحوه استفاده از آیکنهای با کیفیت (32 بیتی) در برنامه های VB6 رو توضیح بدم.
(کاملا واقعی و 100% تست شده)

اول باید یه چیزی رو روشن کنیم.
آیکن دو ویژگی مهم داره یکی کیفیتش و یکی اندازه ش که معمولا کاربران تازه کار این دوتا رو با هم اشتباه می گیرن. مثلا وقتی میگیم آیکن 32*32 یعنی آیکنی با اندازه 32 که می تونه هر کیفیتی داشته باشه، مثلا کیفیت 32bpp (32 بیتی) یا 24bpp (24 بیتی) یا 256 (8 بیتی) یا ... (به ترتیب کیفیت کم میشه)
اما وقتی می گیم یه آیکون 32bpp یا 32 بیتی منظور آیکونی با کیفیت "32 بیت برای هر پیکسل" هستش که می تونه هر اندازه ای داشته باشه، مثلا 256*256 یا 64*64 یا 32*32 یا ...

بریم سراغ آموزش:چشمک:


قسمت اول:

1- ابتدا یک آیکن با کیفیت (32 بیتی) با اندازه دلخواه انتخاب کنید (ترجیحا یک آیکن باشه که سایزهای مختلف رو درون خودش داشته باشه، به تصویر ها دقت کنید)

2- برنامه ای برای ویرایش آیکن نیاز داریم، می تونید از برنامه IconLover یا هر برنامه مشابه دیگه استفاده کنید

3- اگر آیکن شما در لیستش دارای سایز 16*16 نیست، براش ایجاد کنید (با کیفیت 32 بیتی)

4- از آیکنهای موجود در لیست یکی رو انتخاب کنید (همیشه بزرگترین اونا بهتره چون جزئیات بیشتری داره!) و از طریق اون یک آیکن با سایز 32*32 و با کیفیت 256 (کیفیتی کمتر از 24 بیت) بسازید

توی تصاویر زیر روش این کار در برنامه IconLover نمایش داده شده:
- روی آیکنی که می خواید آیکن جدید از روی اون ساخته بشه کلیک راست کنید و گزینه New Image... رو انتخاب کنید
- در پنجره ای که باز شده در قسمت Size گزینه 32*32 و در قسمت Color گزینه 256 (8 بیت) رو انتخاب کنید
- روی دکمه OK کلیک کنید تا آیکن جدید به لیست آیکنها اضافه بشه (همون طور که در تصویر می بینید)

5- همون طور که در تصویر مشخص هستش تمام آیکنهای ما (درون لیست) با کیفیت 32 بیت هستن به غیر از آیکنی که خودمون اضافه کردیم که کیفیت 256 (8 بیت) داره

6- این مجموعه آیکن رو به صورت یک فایل آیکن (*.ico) ذخیره کنید

VB رو اجرا کنید و آیکنی که ایجاد کردید رو به طور عادی به فرم اضافه کنید. آیکن باید بدون هیچ خطایی به فرم اضافه بشه.
از برنامه خروجی بگیرید (فایل EXE رو بسازید) مشاهده می کنید که آیکن برنامه (فایل اجرایی) با کیفیت 32 بیتی هستش.
تا اینجای کار رو با روش های پیچیده تر هم میشد انجام داد، اما ادامه آموزش مهمتره!


قسمت دوم:

برنامه ای که ساختید رو اجرا کنید. می بینید با وجود اینکه آیکن فایل اجرایی با کیفیت شده اما هنوز آیکن روی فرم برنامه در حال اجرا، آیکن با کیفیت پایین هستش (همون آیکن با کیفیت 256 که ایجاد کردیم اینجا قرار گرفته)
برای حل این مشکل و استفاده از آیکن 32 بیتی روی فرم باید کمی کد نویسی کنیم.

یک ماژول ایجاد کنید و کد زیر رو درون اون کپی کنید:

Option Explicit

Public hIcon As Long

Public Const WINDOWS_ICON As Integer = 1
Public Const ICON_JUMBO As Long = 256

Public Const ICON_BIG As Long = 1
Public Const ICON_SMALL As Long = 0
Public Const WM_SETICON As Long = &H80

Public Enum E_LoadImage_Type
IMAGE_BITMAP = 0
IMAGE_ICON = 1
IMAGE_CURSOR = 2
End Enum

Public Enum E_LoadImage_fuLoad
LR_DEFAULTCOLOR = &H0
LR_MONOCHROME = &H1
LR_LOADFROMFILE = &H10
LR_LOADTRANSPARENT = &H20
LR_DEFAULTSIZE = &H40
LR_VGACOLOR = &H80
LR_LOADMAP3DCOLORS = &H1000
LR_CREATEDIBSECTION = &H2000
LR_SHARED = &H8000&
End Enum

Public Declare Function LoadImageW Lib "user32.dll" ( _
ByVal hInst As Long, _
ByVal lpszName As Long, _
Optional ByVal uType As E_LoadImage_Type = IMAGE_BITMAP, _
Optional ByVal cxDesired As Long, _
Optional ByVal cyDesired As Long, _
Optional ByVal fuLoad As E_LoadImage_fuLoad = LR_DEFAULTCOLOR _
) As Long

Public Declare Function SendMessageW Lib "user32.dll" ( _
ByVal hWnd As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long _
) As Long

در رویداد Form Load کد زیر رو بنویسید:

Private Sub Form_Load()
If App.LogMode Then
hIcon = LoadImageW(App.hInstance, WINDOWS_ICON, IMAGE_ICON, ICON_JUMBO, ICON_JUMBO)
SendMessageW hWnd, WM_SETICON, ICON_BIG, LoadImageW(App.hInstance, WINDOWS_ICON, IMAGE_ICON, , , LR_DEFAULTSIZE)
SendMessageW hWnd, WM_SETICON, ICON_SMALL, LoadImageW(App.hInstance, WINDOWS_ICON, IMAGE_ICON, 16&, 16&)
End If
End Sub

و در رویداد Form Unload کد زیر رو بنویسید:

Private Sub Form_Unload(Cancel As Integer)
SendMessageW hWnd, WM_SETICON, ICON_BIG, 0&
SendMessageW hWnd, WM_SETICON, ICON_SMALL, 0&
End Sub

حالا دوباره فایل اجرایی برنامه رو بسازید و برنامه رو اجرا کنید. می بینید که آیکن روی فرم هم کیفیت 32 بیتی داره!:تشویق:

نکته: این روش فقط روی فایل EXE برنامه اثر داره و آیکن فرم های اون رو 32 بیتی می کنه، یعنی اگه در محیط خود VB برنامه رو اجرا کنید مشاهده می کنید که روی فرم آیکن 32 بیتی نیست. این طبیعیه و مشکل از کار شما نیست.