ورود

View Full Version : سوال: Icon



just4froum
دوشنبه 11 مهر 1390, 12:45 عصر
با سلام به همگی

دوستان آیا راهی وجود داره که بشه با vb آیکن یک فایل exe رو خارج کرد ؟

یا میشه مثلا بگیم آیکن برنامه باشه آیکن دوم فایل فلان exe در فلان مسیر ؟؟؟


با تشکر

mr-adler
دوشنبه 11 مهر 1390, 13:15 عصر
با سلام
icon مورد استفاده برای وی بی 6 باید با فرمت ico باشه شما وقتی میخوای از یه برنامه دیگه icon وارد برنامه خودت بکنی تنها وقتی مورد قبوله که پسوندش اونی باشی که اشاره کردم . و چون پسوند icon های مورد استفاده در برنامه ها exe هست امکان نداره .
البته یه راه داره و اونم اینه که icon فایل exe رو ابتدا به پسوند ico تبدیل کنیم و بعد مورد استفاده قرار بدیم....

just4froum
دوشنبه 11 مهر 1390, 16:15 عصر
با تشکر از آقای mr-adler که می دونم قصدشون کمک بود اما خواهش می کنم که اگر اطلاعات کافی در ضمینه ای ندارید پاسخ غلط ندهید که باعث گمراهی طرف مقابل می شود. :متعجب::عصبانی++::متعجب:

چرا نمیشه خوبم میشه اینم یک نمونه برنامه
76182

mr-adler
دوشنبه 11 مهر 1390, 17:27 عصر
عرض سلام و ادب
دوست عزیز خودتونو ناراحت نکنید تا به جواب اخر برسیم که نه باعث گمراهی من بشه و نه خدایی نکرده شما
تمام حرفهای که زده شد کاملا منطقی و درست هست .

یا میشه مثلا بگیم آیکن برنامه باشه آیکن دوم فایل فلان exe در فلان مسیر ؟؟؟
ندیدم icon فایل اپلودی شما عوض شده باشه...:متفکر:
در ضمن جوابتون رو اینجا دادم که:

البته یه راه داره و اونم اینه که icon فایل exe رو ابتدا به پسوند ico تبدیل کنیم و بعد مورد استفاده قرار بدیم....
شما اگه تونستید icon فایلتون رو عوض کنید درحالی که پسوندش چیزی غیر از ico باشه قبول میکنم حرف من نادرست و گمراه کننده بوده...

اصلا بر فرض هم که پاسخ اشتباهه:
1.اولا نظر من این بوده . و اگه هم اشتباهی صورت گرفته این فروم برای رفع اشکال و تبادل نظر ساخته شده نه چیز دیگه
2.یک طرفه قضاوت نکنید و به طرف مقابل هم اجازه دفاع بدید...

به هر حال اگه باز هم نکته نامفهومی هست در مورد پاسخ من بگید
موفق باشید

xrezax
دوشنبه 11 مهر 1390, 20:08 عصر
با تشکر از آقای mr-adler که می دونم قصدشون کمک بود اما خواهش می کنم که اگر اطلاعات کافی در ضمینه ای ندارید پاسخ غلط ندهید که باعث گمراهی طرف مقابل می شود. :متعجب::عصبانی++::متعجب:

چرا نمیشه خوبم میشه اینم یک نمونه برنامه
76182

میشه سورسشو بزاری ؟؟؟/

just4froum
سه شنبه 12 مهر 1390, 19:40 عصر
با تشکر از همگی

مثل این که آقای mr-adler منظور منو بد برداشت کردند یا هرچی که اگرم بی احترامی شد ببخشید

درمورد سورس هم سورسی که بالا با نام icon extractor گذاشتم آیکن یک فایل exe رو در یک picturebox ذخیره میکنه که شما میتونید با
set me.icon = picturebox1.picture
آیکن برنامه ی خودتونو به اون تغییر دهید البته فقط موقع اجرا.

xrezax
سه شنبه 12 مهر 1390, 21:10 عصر
icon extractor که گذاشتین فقط برنامشه. سورسشو بی زحمت بزاری

just4froum
سه شنبه 12 مهر 1390, 21:42 عصر
ببخشید اصلا حواسم نبود که سورس نیست

اینم از سورس 76245


موفق باشید.

xrezax
سه شنبه 12 مهر 1390, 22:57 عصر
میشه این سورسو ایدیت کنید طوری که بشه آیکن مورد نظر رو بصورت آیکن کنار برنامه ذخیره کنه؟

xrezax
پنج شنبه 14 مهر 1390, 23:07 عصر
منتظرم آآآآآآآآآآآآآآآآآآآآآآآآآ

just4froum
جمعه 15 مهر 1390, 11:13 صبح
میشه این سورسو ایدیت کنید طوری که بشه آیکن مورد نظر رو بصورت آیکن کنار برنامه ذخیره کنه؟

از این که منتظر بودی ببخشید ولی من فقط دوماهه که دارم vb یاد میگیرم و چنین کاری از دستم بر نمیاد.

محسن واژدی
جمعه 15 مهر 1390, 12:38 عصر
سلام،
میتوانید از کد زیر نیز برای استخراج آیکون های یک فایل استفاده کنید:

Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long
Private Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long

Private Sub Command1_Click()
Dim mcur_h&, i&
AutoRedraw = True
Me.WindowState = vbMaximized
Cls
Me.ScaleLeft = 0
Me.ScaleTop = 0
Do
mcur_h& = ExtractIcon(Me.hWnd, Environ("windir") & "\system32\shell32.dll", i)
DrawIcon Me.hdc, Me.ScaleLeft, Me.ScaleTop, mcur_h&
Me.ScaleLeft = Me.ScaleLeft + 50
If Me.ScaleLeft >= Me.ScaleWidth Then
Me.ScaleLeft = 0
Me.ScaleTop = Me.ScaleTop + 50
End If

i& = i& + 1
Refresh
DoEvents
Loop Until mcur_h& = 0

End Sub

موفق باشید

just4froum
جمعه 15 مهر 1390, 13:05 عصر
با تشکر فراوان از آقای واژدی

فقط میشه یه توضیح مختصر راجع به آرگومان اول این دو تابع بدید ؟؟؟

بازم ممنون
:قلب::قلب:

xrezax
جمعه 15 مهر 1390, 13:06 عصر
سورس جالبی بود.
اما من می خوام هر فایلی که بهش بدم با هر پسوندی که من آدرس اونو به برنامه بدم . فایل آیکنشو کنار برنامه به عنوان ذخیره کنه. میشه سورس بزاری در این زمینه

aria1o
جمعه 15 مهر 1390, 15:31 عصر
ﺳﻠﺎﻡ
ﺍﻟﺎﻥ ﻣﺤﻞ ﮐﺎﺭﻡ ﻫﺴﺘﻢ.ﺑﮕﺮﺩ ﺍﮔﻪ ﭘﯿﺪﺍ ﻧﮑﺮﺩﯼ ﻓﺮﺩﺍ ﺍﻭﻝ ﻭﻗﺖ ﺑﺮﺍﺕ ﻣﯿﺰﺍﺭﻡ .
نﻣﻨﻢ ﺯﯾﺎﺩ ﮔﺸﺘﻢ، ﺍﮐﺜﺮﺍ ﺍﻭﻥ ﭼﯿﺰﯼ ﻧﺒﻮﺩ ﮐﻪ ﻣﻦ ﻭ ﺷﻤﺎ ﺩﻧﺒﺎﻟﺸﯿﻢ...

محسن واژدی
جمعه 15 مهر 1390, 15:40 عصر
فقط میشه یه توضیح مختصر راجع به آرگومان اول این دو تابع بدید ؟؟؟

سلام

Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long

hInst: هندل برنامه (hWnd) را جایگزین میکنیم، برای اینکه مشخص شود چه برنامه ای به این تابع مراجعه کرده است


Private Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long

hDC :hdc شی مورد نظر (HandleDeviceContext)



سورس جالبی بود.
اما من می خوام هر فایلی که بهش بدم با هر پسوندی که من آدرس اونو به برنامه بدم . فایل آیکنشو کنار برنامه به عنوان ذخیره کنه. میشه سورس بزاری در این زمینه

بله، تابع بالا فقط آیکون فایل های exe,dll ,ico را برگشت میدهد
برای بدست آوردن آیکون همه انواع فایل ها، چند تابع در این مورد وجود دارد که ما از ExtractAssociatedIcon استفاده میکنیم:

Private Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long
Private Declare Function ExtractAssociatedIcon Lib "shell32.dll" Alias "ExtractAssociatedIconA" (ByVal hInst As Long, ByVal lpIconPath As String, lpiIcon As Long) As Long

Private Sub Command1_Click()
Dim hicon&
AutoRedraw = True
Cls
hicon&= ExtractAssociatedIcon(App.hInstance, "c:\", 0)
DrawIcon hdc, 0, 0, hicon&
Refresh
End Sub

موفق باشید

just4froum
جمعه 15 مهر 1390, 18:46 عصر
حالا چطوری میشه ذخیرش کرد ؟؟؟

من وقتی میریزمش توی picturebox و با savepicture می خوام ذخیرش کنم ارور میده !!!

میشه با فرمت ico هم ذخیرش کرد ؟؟؟

با تشکر از همگی و مخصوصا آقای واژدی

محسن واژدی
جمعه 15 مهر 1390, 19:13 عصر
سلام
با دستور زیر میتوانیم تصویر آیکون را ذخیره کنیم:

Call SavePicture(Picture1.Image, "c:\pic.bmp")


در مورد فرمت ذخیره، خیر معمولا" picturebox فقط با فرمت bmp ذخیره میکند

یه نکته ای هم که یادم رفت در دستورات بالا وارد کنم، این بود که حتما" پس از چاپ آیکون، آنرا توسط تابع DestroyIcon از حافظه حذف کنید، چون با افزایش حجم حافظه، مشکلاتی ایجاد میکند، که تاثیرات آن در ظاهر ویندوز ظاهر میشود و تا کاملا" از برنامه خارج نشده اید این مشکل ادامه دارد
برای حذف آیکون از حافظه هندل آنرا در این تابع وارد میکنیم، در کل دستورات پست 12 را بصورت زیر مینویسیم:

Private Declare Function DestroyIcon Lib "user32" (ByVal hIcon As Long) As Long
Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long
Private Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long

Private Sub Command1_Click()
Dim mcur_h&, i&
AutoRedraw = True
Me.WindowState = vbMaximized
Cls
Me.ScaleLeft = 0
Me.ScaleTop = 0
Do
mcur_h& = ExtractIcon(Me.hWnd, Environ("windir") & "\system32\shell32.dll", i)
DrawIcon Me.hdc, Me.ScaleLeft, Me.ScaleTop, mcur_h&
If mcur_h& <> 0 Then DestroyIcon mcur_h&
Me.ScaleLeft = Me.ScaleLeft + 50
If Me.ScaleLeft >= Me.ScaleWidth Then
Me.ScaleLeft = 0
Me.ScaleTop = Me.ScaleTop + 50
End If

i& = i& + 1
Refresh
DoEvents
Loop Until mcur_h& = 0

End Sub


در مورد پست 16 هم همینطور عمل میکنیم

موفق باشید

just4froum
جمعه 15 مهر 1390, 19:43 عصر
یعنی هیچ راهی نداره آیکنی رو که بدست آوردیم با پسوند Ico ذخیره کنیم ؟؟؟

محسن واژدی
جمعه 15 مهر 1390, 21:01 عصر
چرا کامپوننت های زیادی در این مورد وجود دارند، میتوانید در سایت planet-soure-code.com جستجو کنید
حتما" به نتیجه میرسید

aria1o
شنبه 16 مهر 1390, 20:33 عصر
با سلام،
شرمنده که یکم طول کشید....:چشمک: