ايران ويج

نسخه‌ی کامل: null کردن آیکن
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام دوستان،
گاهی لازم میشه این کار رو انجام داد،(الان متاسفانه واسه من لازم شده) پس لطفا نگید نیازی به ابن کار نیست ویا جوابی بدید که منو حرصی کنه...

وقتی به یک فرم و یا یک شی مثل SysTray، از طریق مشخصه ی Iconش بهش آیکن میدیم،
چطوری میتونیم
اون آیکن رو (درحین برنامه نویسی)، Null کنیم (یعنی بدون آیکن)
ودوباره وقتی نیازش داشتیم برابر همون مقدار آیکن قبلی بکنیم ( یعنی با آیکن)
من اینو نوشتم ولی جواب نداد:
systray.Icon= "C:\address\address...\icon.ICO" '<<<adrese icon
نوشتم ولی اررو 13 رو میده
یا این:
systray.Icon=vbnull
حالا من شی (چی) کنم؟!
شما نباید آیکن رو نال کنید باید برنامه رو از حالت نمایش تو systray خارج کنید.
این سورس رو برات نوشتم

ماژول
کد:
Public Declare Function SetWindowLongA Lib "user32" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProcA Lib "user32" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function Shell_NotifyIconA Lib "shell32.dll" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

Public Type NOTIFYICONDATA
  cbSize As Long
  hWnd As Long
  uID As Long
  uFlags As Long
  uCallbackMessage As Long
  hIcon As Long
  szTip As String * 64
End Type

Public Const NIM_ADD = &H0
Public Const NIM_MODIFY = &H1
Public Const NIM_DELETE = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_ICON = &H2
Public Const NIF_TIP = &H4

Public formloaded As Boolean
Public oldproc As Long

Public Function proc&(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long)
  If Msg = 1400 And lParam = 517 And formloaded Then Form1.PopupMenu Form1.mnu
  proc = CallWindowProcA(oldproc, hWnd, Msg, wParam, lParam)
End Function

فرم
کد:
Option Explicit

Private Sub Command1_Click()
  Dim nid As NOTIFYICONDATA
  With nid
    .hWnd = Me.hWnd
    .cbSize = Len(nid)
    .uID = 0
  End With
  Shell_NotifyIconA NIM_DELETE, nid
  SetWindowLongA Me.hWnd, -4, oldproc
End Sub

Private Sub Command2_Click()
  Dim nid As NOTIFYICONDATA
  With nid
    .cbSize = Len(nid)
    .hWnd = Form1.hWnd
    .uID = 0
    .uFlags = NIF_MESSAGE Or NIF_ICON Or NIF_TIP
    .uCallbackMessage = 1400
    .hIcon = Form1.Icon
    .szTip = "Tooltip here" & vbNullChar
  End With
  Shell_NotifyIconA NIM_ADD, nid
End Sub

[تصویر:  untitled.jpg]
HamedFaa ی عزیز، جوابت از اونایی بود که اول تاپیک گفتم از این جوابا ندید،
من مشکلی توی نمایش دادن یا عدم نمایش دادن ایکن ندارم....

اول اینکه من از کامپوننت Codejock.Controls استفاده میکنم که یک شی systray داره و من از این شی استفاده میکنم
دوم اینکه وقتی که فرم رو توسط دستور
("CloseIt = FindWindow(vbNullString, "Form1
(PostMessage CloseIt, WM_CLOSE, CLng(0), CLng(0
میبندم،
فرم درواقع (ظاهرا) exit میشه اما یه فرم دیگه همچنان با اون فرمی که توسط دستور بالا بسته شده کار میکنه(به هر دلیلی)
وقتی این اتفاق میفته ایکن فرمی که (همون فرمی که با دستور بالا بستیمش) کاربر exitش کرده، دوباره نمایش داده میشه
نمونه کوچکش رو برای رفع خطا پایین گذاشتم ببینید:
توروخدا جواب بدین، مهمه واسم
اگه راهی هست بگین.
سلام دوستان منم دونبال همچین چیزیم
منو تو command میام یک عکس توش لود میکنم
کارم که تموم میشه میخوام عکس حذف بشه دستوری مخوام انجام بدم
command1.picture="adres"
command1.picture=vbnull
vbempty
""
اینا را قرار دادم اما اررور میده چی کار کنم؟
lvlehdi دوست گرامی
سلام
خودم فهمبدم باید چیکار کنم،
دوتا pictureBox رو فرم میزارم، یکیش رو خالی(null) میزاریم بمونه، یکیش رو هم، خاصیت Pictureش رو برابر آیکن مورد نظرمون قرار میدیم،
وقتی میخواستیم null بشه خاصیت Icon یا picture شی مورد نظرمون رو برابر Picture_Null.Picture قرار میدیم
و وقتی دوباره میخواستیم حاوی Icon یا عکس مورد نظر بشه، شی مورد نظرمون رو برابر Picture_NotNull.Picture قرار میدیم.
شاید روش درستی نباشه ولی بهرحال واسه من جواب داد
---
ااگه واسه توام جواب داد خبرشو بده
mabus دوست گرامی
سلام
واقعا ممنون مرسی جواب داد من بجای Picturebox از image استفاده کردم
بهترین راحل هم همین بود که شما گفتیدWink
*دوتا image mizarim اولی را icon مورد نظر را لود میکنی تو image2 را خالی قرار میدیم
command1.picture=image1.picture
این حالت عکس را تو command لود میکنه برای اینکه null بشه
از
command1.picture=image2.picture
چون تو image2 چیزی نداشتیم بخاطر همین اینجا دیگه تو command هیچ عکسی قابل نمایش نیست و null شده:X
البته این جواب سوال شما نبود. یه راه حل بود.

برای خالی کردن کنترل image یا picture میتونید از این کد هم استفاده کنید.
کد:
Picture1.Picture = LoadPicture("")