PDA

View Full Version : نمایش ایکون برنامه در systray بصورت متحرک



programmermp
سه شنبه 26 دی 1385, 16:56 عصر
سلام

همانطور که می دونید با ابزار notifyicon می شه ایکون برنامه رو در systray نشون داد

حالا من می خواهم یک کاری کنم که ایکون برنامم حالت انیمیشنی داشته باشه مثلا

چشمک زن باشه مثل ایکون انتی ویروس ها یا دانلود اکسلریتور یا همین ایکون کانشن

اینترنت (دو تا مانیتور روی هم رو می گم) خلاصه می خواهم متحرک باشه

اگه بخواهیم این کار را با برنامه های ساخت ایکون متحرک انجام بدیم که اولا من سراغ ندارم

به جز یکی که قبلا با هاش کارمی کردم پسوند ایکون رو به cur تبدیل می کنه که دات نت

پشتیبانی نمی کنی برای این ابزار
و یا برای چشمک زن کردنش از خاصیت visible این ابزار استفاده کنیم در تایمر

که تابلو می شه (خیلی معلومه)

از ادرس دهی هم می شه استفاده کرد مثلا یک ایکون جدید رو بهش برای نمایش معرفی کنی
و ایکون قبلی رو دوباره بهش بدی در تایمر که این کار هم جالب نیست

اگه می شد یه جورایی از ایکون هایی که توی قسمت resource از solution explorer
استفاده کرد بدون اینکه نیاز باشه ادرس کامل محل قرار گیری ایکون رو بدی (یعنی فقط نامش) رو ذکر کنی راه خوبی می شد


لطفا دوستان در این زمینه به من کمک کنند ممنون

programmermp
سه شنبه 26 دی 1385, 17:24 عصر
فوری اگه یکم زودتر جواب بدید ممنون می شم

حامد مصافی
سه شنبه 26 دی 1385, 17:42 عصر
دوست عزیز قبل از پرسیدن سوال یه جستجو بکنید:چشمک:
http://www.barnamenevis.org/forum/showthread.php?t=38709 (http://www.barnamenevis.org/forum/showthread.php?t=38709&highlight=tray)

programmermp
سه شنبه 26 دی 1385, 18:51 عصر
سلام

اقا حامد ممنون از لینکتون

اما دو نکته رو من عنوان کنم بد نیست

اولا اینکه من به وبلاگ شما رفتم برای دانلود کانتکس منوی فارسی با دانلود اکسلریتور

و پسورد می خواست چطوری قضیش :متفکر: :متفکر: :متفکر:

دوما لینکی که داده بودید دیدم و این سئوال رو مجدد تکرار می کنم که چطوری می شه

ایکون مورد نظر رو از پوشه resources در پنجره solution Explorer دریافت کرد یعنی

نمی خواهم روی سیستم مقصد ایکون بریزم که لو بره

programmermp
سه شنبه 26 دی 1385, 19:19 عصر
سلام حامد جون

خودم راه حلش رو که به نظر من تنها راه واسه اینه که ایکون رو از رو ی هارد نخونیم هست

پیدا کردم (منظورم اینه که یه جوری از ایکون برای notify icon استفاده کنیم که مجبور نشیم

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

ساده ای که مطمئن همتون می دونید)

کسی اگه خواست بگه تا بهش بگم

joker
سه شنبه 26 دی 1385, 21:24 عصر
از load resouce داخلی خود فایل اجرایی میتونید استفاده کنید ، اینطوری نیازی هم به کپی کرسر روی هارد دیسک نیست
مثال دلفی براش سراغ دارم ولی وی بی نه :)
ولی این که میگین دات نت cur نمیگیره را ولاا نمیدونم ، کار نکردم.

meh_secure
چهارشنبه 27 دی 1385, 00:08 صبح
از ادرس دهی هم می شه استفاده کرد مثلا یک ایکون جدید رو بهش برای نمایش معرفی کنی
و ایکون قبلی رو دوباره بهش بدی در تایمر که این کار هم جالب نیست


خود ویندوز هم از همین روش استفاده می کنه. پس روش جالبی است!
وقتی به شبکه متصل هستید نمونه notify icon آنرا می توانید مشاهده کنید.
موفق باشید.

programmermp
چهارشنبه 27 دی 1385, 09:56 صبح
سلام
ولی روش من به نظرم جالب تره

من اینکار رو می کنم که چهار تا ایکون (حالت های مختلف از یک ایکون) رو به چهار تا

notify icon نسبت می دم بعد notify icon پنجمی رو خالی می زارم بعد توی یک تایمر

بهش می گم که با هر بار زیاد شدن متغیر مثلا n که تا 5 مقدار می تونه داشته باشه

توسط دستور select case مقدار n رو بگیره و notify icon مربوطه رو برابر با notify icon

پنجمی قرار بده

این روش یک مزیت خوبی که داره اینه که دیگه نیاز به وجود ایکون ها بعد از build کردن برنامه

نداریم من امتحان کردم جواب هم داده

پس این روش بهتر از روش ویندوز هست

با تشکر:لبخند: :لبخند: :لبخند: :قهقهه: :قهقهه:

حامد مصافی
چهارشنبه 27 دی 1385, 11:07 صبح
سلام جناب صالحی
چه کاریه؟؟
من در لینکی که معرفی کردم خیلی وقت پیش جواب دادم به همین دلیل یادم نیست از چه روشی استفاده کردم!!
اما شما همیشه می تونید از ImageList استفاده کنید.
در ضمن اگر احساس می کنید جوابی که پیدا کردید حتی به یک نفر کمک می کنه بهتره که جوابتونو بنویسید (به جای اطلاعیه)
ممنون

programmermp
چهارشنبه 27 دی 1385, 11:15 صبح
سلام

دوست من من که نتونستم از imagelist استفاده کنم یعنی نتونستم به notify icon بگم

که ایکون رو از image list بگیره چون تمام ایتم هایی که من در اونت های imagelist دیدم

از نوع image بودن نه از نوع icon

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

پست قبلی من رو که خوندید انشاء الله توی ان نوشتم چکار کردم

با تشکر:تشویق: :تشویق:

Sub Zero
چهارشنبه 27 دی 1385, 12:41 عصر
حالا که بحث ایکونهای SystemTry و NotifyIcon شد بهتره یه مطلبی رو بگم البته نمی دونم چیزی رو که می خوام بگم اسمشو میشه گذاشت آیکون یانه .

حتما تابه حال برنامه های مدیریت حافظه Ram رو دیدید. بعضی از اونا ایکونشون به صورت یه عدده است . مثلا برنامه Casheman ایکونش یه عدده که میزان فضای خالی Ram رو نشون میده .
حالا این ایکون ممکنه در هر لحظه یک عدد رو نشون بده و بسته به میزان فضای خالی تغییر کنه .

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

programmermp
پنج شنبه 28 دی 1385, 11:16 صبح
حالا که بحث ایکونهای SystemTry و NotifyIcon شد بهتره یه مطلبی رو بگم البته نمی دونم چیزی رو که می خوام بگم اسمشو میشه گذاشت آیکون یانه .

حتما تابه حال برنامه های مدیریت حافظه Ram رو دیدید. بعضی از اونا ایکونشون به صورت یه عدده است . مثلا برنامه Casheman ایکونش یه عدده که میزان فضای خالی Ram رو نشون میده .
حالا این ایکون ممکنه در هر لحظه یک عدد رو نشون بده و بسته به میزان فضای خالی تغییر کنه .

به نظر شما این کار چطور انجام میشه .
ایا می شه یه عدد یا تکست به بیتمپ و بعدشم به یه ایکون تبدیل بشه یا چیز دیگه ای در کاره :متفکر:
=================================

سلام

اقا مصطفی در این مورد (مورد بالا) به نتیجه ای نرسیدید

دوستان دیگه هم لطف کنند در این مورد نظر بدند

Neeloofar
پنج شنبه 28 دی 1385, 11:53 صبح
حالا که بحث ایکونهای SystemTry و NotifyIcon شد بهتره یه مطلبی رو بگم البته نمی دونم چیزی رو که می خوام بگم اسمشو میشه گذاشت آیکون یانه .

حتما تابه حال برنامه های مدیریت حافظه Ram رو دیدید. بعضی از اونا ایکونشون به صورت یه عدده است . مثلا برنامه Casheman ایکونش یه عدده که میزان فضای خالی Ram رو نشون میده .
حالا این ایکون ممکنه در هر لحظه یک عدد رو نشون بده و بسته به میزان فضای خالی تغییر کنه .

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

اونا عدد ور به تصویر تیدیل نمیکنند. ضمنا میزان حافظه رو نشون نمیده. بلکه به درصد نشون میده. (فرض کنید حافظه یک سیستم 4000 مگ باشه اونوقت نمایش اون مشکل داره)
بلکه آیکون ها طراحی میکنند.
من یک نمونه از این آیکون ها رو در اختیار شما میذارم

حالا چه کار کنیم از روی ریسورس پروژه بتونیم این آکونها رو با عدد مورد نظر نمایش بدیم. من نمونه تایمر رو مثال میزنم یعنی از 0 شروع میکنه تا 100.

اول به قسمت Proreties پروژه برید و قسمت Resources و از نوار ابزار بالایی از دکمه اول Icons رو انتخاب کنید و سپس از دکمه دوم منوی Add Existing File را انتخاب و مسیر این آیکونها رو که از اینجا دانلود کردید پیدا کرده و تمامی آنها را انتخاب و وارد نمایید. چون اسم فایلها با عدد شروع میشه بنابراین ویژال استدیو یک کاراکتر "_" به ایتدای هر ریسورس اضافه میکنه.(نام ریسورس نمیتونه با عدد اغاز بشه)

حالا یک فرم جدید ایجاد کرده و یک کنترل NotifyIcon به آن اضافه کنید.
یک تایمر هم به فرم اضافه کنید و Enabled آنرا True و Interval رو 100 قرار بدید.
روی تایمر دوبار کلیک کرده و در روال Timer1_Tick این کدها را قرار دهید:



Static s As Integer
If s < 100 Then
NotifyIcon1.Icon = My.Resources.ResourceManager.GetObject("_" & CStr(Microsoft.VisualBasic.Strings.Format(s, "00")))
Else
NotifyIcon1.Icon = My.Resources.ResourceManager.GetObject("_100")
End If
s = s + 1
If s > 100 Then s = 0


اکنون برنامه را اجرا نمایید. مشاهده میکنید که در SysTray اعداد از 0 تا 100 شمرده میشوند و پس از رسیدن به 100 مجدد از 0 شروع به شمردن میکند. بدون اینکه مسیر آیکون از روی هارد باشه.

موفق باشید:چشمک:
.
.
.

Sub Zero
پنج شنبه 28 دی 1385, 17:04 عصر
ممنون از جوابتون اما نیلوفر خانم :

میزان حافظه رو نشون نمیده. بلکه به درصد نشون میده. (فرض کنید حافظه یک سیستم 4000 مگ باشه اونوقت نمایش اون مشکل داره)
برعکس میزان حافظه رو نشون می ده روی یه سیستم با 1Gb Ram هم امتحانش کردم .
چیزی هم که شما فرستادین یه نمونه دیگست . مطمئنم برنامه Cacheman از این روش استفاده نمیکنه چون اصلا ایکونش Background رنگی نداره مثل چیزی که شما گذاشتین . می تونید از روی عکسی که گذاشتم ببینید .
منتظر جوابم .

programmermp
پنج شنبه 28 دی 1385, 18:48 عصر
ساعت ویندوز چطوریه

اونهم عددیه که به تصویر تبدیل شده و هر لحظه ریفرش می شه

درسته

Sub Zero
پنج شنبه 28 دی 1385, 19:36 عصر
من میتونم در ویژال بیسک 6 این کار رو انجام بدم. ولی با دات زیاد در این موارد کار نکردم. اگر خیلی لازمه میتونم با VB6 یک نمونه آماده کنم. (چون وقت گیره و نمونه آماده ندارم).
مرسی نیلوفر خانم اگه ممکنه روش کار یا الگوریتم کار رو بگید تا با Net. بیفتیم به جونش اگه نتونستیم زحمتشو می ندازیم گردن خودت .

Neeloofar
جمعه 29 دی 1385, 00:52 صبح
ساعت ویندوز چطوریه

اونهم عددیه که به تصویر تبدیل شده و هر لحظه ریفرش می شه

درسته

اصلا کل ویندوز یعنی رسم. نقاشی. در واقع مثلا ساعت 12:00 رو در اونجا ترسیم میکنه. و هینطور تمام نقاط صفحه. (تابع DrawText از فایل "user32.dll" ویندوز)
در واقع مکان رسم ساعت یک Window هست در SysTray ویندوز.

این دو نمونه پیدا کردم. (ولی TextOnIcon در ویندوز 98 کار میکنه)
بد نیست به نمونه ProgressBar هم یک نگاهی بندازید. در همین رابطه ست. شاید بدردتون بخوره.
اگر بازم پیدا کردم میذارم.

Neeloofar
جمعه 29 دی 1385, 19:37 عصر
روش کار اینطوریه که ابتدا توسط دستور ذیل عدد مورد نظر رو در PictureBox ترسیم میکنیم.

Picture1.Print "123"
سپس تصویر ایجاد شده را با فرمت ico دریک جا ذخیره میکنیم.

SavePicture Picture1.Picture, "C:\123.ico"
حال آیکون ذخیره شده را دوباره در یک PictureBox دیگه تنظیم میکنیم.

Pictrue2.Picture = LoadPicture ("C:\123.ico")
اکنون یک متن تبدیل به تصویر شده با فرمت آیکون در Picture2 داریم برای نمایش در SysTray.
این راهش در VB6.0 هست.
من اصلا با ابزارهای گرافیکی .Net کار نکردم و اصلا نمیدونم چی هستند.

حامد مصافی
شنبه 30 دی 1385, 12:01 عصر
سلام

نیلوفر خانم متد های پیش ساخته گرافیکی Vb دیگه در دات نت پشتیبانی نمیشن! یعنی این کد معادل دقیق در دات نت نداره!

من الان شهر خودم نیستم (دیگه همه به این موضوع عادت کردن بس که نبودم!) و نمی تونم سورس براتون بنویسم
ولی اگه حافظهیاری کنه یک اشاره کوچک میکنم:

هر Bitmap یک متد با نام GetHIcon دارد که اشاره گر آیکون از آن را بر می گرداند
و هر Icon یک متد با نام FromHandle دارد که آیکون را بر مبنای یک اشاره گر می سازد

اگه اشتباه نکنم یه چیزی مثل این:


'bmp is a system.drawing.bitmap
dim ico as new icon = icon.fromHandle(bmp.GetHIcon)


دیگه فهمیدین....
یعنی bitmap , Image رو می تونید به صورت ایکون در بیارید
حتی می تونید یک Bitmap ایجاد کنید و توسط متد DrawString شما مورد نظرتونو روی اون بنویسید و یک آیکون از روی اون بسازید و در tray قرار بدید

OK?

Sub Zero
یک شنبه 08 بهمن 1385, 02:39 صبح
بالاخره نوشتمش :

Dim img As New Bitmap(15, 15, Imaging.PixelFormat.Format32bppArgb)
Dim g As Graphics = Graphics.FromImage(img)
g.DrawString("10", New Font("Arial", 8), Brushes.Black, 0, 0)
NotifyIcon.Icon = Drawing.Icon.FromHandle(img.GetHicon)
Me.Icon = Drawing.Icon.FromHandle(img.GetHicon)
فقط یه مشکل کوچیک داره اونم اینه که وقتی عدد 3 رقمی می شه یکم بهم می ریزه اگه کسی میتونه درستش کنه .
در ضمن بسته به اندازه فونتی که انتخاب میکنین اندازه Bitmap هم باید تغییر کنه .

حامد مصافی
یک شنبه 08 بهمن 1385, 12:29 عصر
سلام
اندازه Bitmap که نباید تغییر کنه چون در Tray محدودیت اندازه داریم!
شما باید اندازه فونت رو تنظیم کنید. برای مثال از فونت های کم عرض استفاده کنید

rostamy.m
سه شنبه 16 مرداد 1386, 15:25 عصر
ببخشید من دیدم همه اساتید جمع هستند گفتم این سوال را هم بپرسم
چه طور میشه یه بر نامه ای را که فقط notify آن فعال هست با یک کلید به اون دستور داد در صورتی که روی آن focus نیست مثل babylon اگه کسی میدونه به من هم بگه لطفا

ghafoori
سه شنبه 16 مرداد 1386, 16:54 عصر
دوست عزیز داخل سایت کلمه hot keys را جستجو کن

rostamy.m
سه شنبه 23 مرداد 1386, 07:24 صبح
من در مورد hot key چیزی پیدا نکردم
:عصبانی++:

ghafoori
سه شنبه 23 مرداد 1386, 08:12 صبح
http://barnamenevis.org/forum/showthread.php?t=69231&highlight=hotkeys