HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

SystemTray ikon üzenete


Példaprogram letöltése

13751 bájt

A ToolBar kontrolgyűjteményében találunk egy NotifyIcon nevű kontrolt, melynek segítségével a program indulásakor elhelyezhetünk egy tetszőleges ikont a Tálcán. Az ikonhoz gyorsmenü rendelhető, valamint elérhető, hogy az egérmutatót a kép fölé mozgatva tájékoztató üzenet jelenjen meg a programmal kapcsolatban. Ezeket a funkciókat egészítjük ki a cikkben elkészített saját komponensünkben úgy, hogy az ikonra történő kattintáskor jelenjen meg egy úgynevezett „balloon”-típusú üzenet, a komponens property-jében megadott szöveggel.

A mellékelt példa két projektet tartalmaz. A NIMComponent projekt tartalmazza a Tálca-ikon megjelenítését végző komponens kódját. A komponenst az NIMClient alkalmazásban tesztelhetjük, annak elindulásakor egy kis mosolygó figura jelenik meg a Tálcán.
Az ikonra kattintva megjelenik egy – a hagyományos NotifyIcon komponens felbukkanó üzenetétől eltérő – üzenet, a komponens Text property-jében szerkesztési időben beállított karakterlánccal.
A megoldás lényege, hogy a komponens osztályában létre kell hoznunk egy, a Form osztályból származó osztályt, mely fogadja majd az ikonra, mint űrlapra történő kattintás üzenetét.
private class NotifyForm : System.Windows.Forms.Form
{
Ennek érdekében az osztályban létrehozunk egy saját eseménykezelő delegáltat, valamint egy eseményt a kattintáshoz.
  public delegate void NIHandler(object sender, uint id);
  public event NIHandler ClickOnIt;
  ...
}
Az esemény kezeléséhez felül kell deklarálnunk az osztály DefWndProc metódusát, hogy az egér bal gombjára történő kattintás üzenete feldolgozható legyen.
protected override void DefWndProc(ref Message msg)
{
  if(msg.Msg == 0x400)
  {
Miután eldöntöttük, hogy az ikon által kapott üzenet a felhasználótól származik – WM_USER (0x004) -, lekérdezzük paramétereit.
    uint msgId = (uint)msg.LParam;
    uint id = (uint)msg.WParam;
    switch(msgId)
    {
Amennyiben az első paraméter az egér bal gombjának lenyomásakor keletkező üzenet volt, nem teszünk semmit.
      case 0x201:
        break;
A gomb felengedésének üzenetére azonban kiváltjuk a fent deklarált eseményt.
      case 0x202:
        if(ClickOnIt != null) ClickOnIt(this, id);
        break;
    }
  }
  ...
}
A komponensünk osztályában deklarálnunk kell még változókat ahhoz, hogy az üzenet megjeleníthető legyen, többek közt létre kell hoznunk egy példányt a fent deklarált osztályból.
private static NotifyForm nForm = new NotifyForm();
Az ikon megjelenítése, program bezárásakor történő eltüntetése és az üzenet megjelenítése mind egy API függvény meghívásával történik, csak különböző paraméterekkel.
[DllImport("shell32.Dll")]
private static extern System.Int32 Shell_NotifyIcon(NotifyCommand cmd, ref NotifyIconData data);
A függvény első paramétere egy felsorolt típus három eleme közül egy, melyek jelzik, hogy létrehozni, eltüntetni, vagy módosítani kell az adott ikont.
private enum NotifyCommand {Add=0x00, Delete=0x02, Modify=0x01}
A függvény második paramétere egy struktúra, melyhez létrehoztuk a menedzselt kódbeli megfelelőjét.
[StructLayout(LayoutKind.Sequential)]
private struct NotifyIconData
{
  ...
}
A program indulásakor a Create metódusba ágyazott kóddal hozzuk létre az ikont. Ekkor feltöltjük adatokkal az említett struktúra példányát, majd meghívjuk a Shell_NotifyIcon függvényt, első paraméterében a megfelelő értékkel.
NotifyIconData data = new NotifyIconData();
...
Shell_NotifyIcon(NotifyCommand.Add, ref data);
A Remove metódusban található kód a program bezárásakor fut le, eltüntetve az ikont a Tálcáról. Ekkor a NotifyCommand felsorolt típus Delete értékét adjuk meg a Shell_NotifyIcon metódus első paraméterében.
Shell_NotifyIcon(NotifyCommand.Delete, ref data);
A ShowBalloon metódusban úgy hívjuk meg a Shell_NotifyIcon metódust, hogy első paramétere NotifyCommand.Modify lesz, vagyis a második paraméterben megadott struktúrában meghatározzuk, hogy mi lesz ez a módosítás. Ekkor jelenítjük meg az üzenetet, a Text property-ben megadott értékkel.
public void ShowBalloon()
{
  NotifyIconData data = new NotifyIconData();
  data.cbSize = (uint)Marshal.SizeOf(data);
  data.hWnd = nForm.Handle;
A struktúra hWnd mezőjében adjuk meg a kezelőjét a komponensünk által tagobjektumként tartalmazott Form objektumnak, hogy a rendszer tudja, melyik ikonra kattintottuk a Tálcán.
  data.uFlags = NotifyFlags.Info;
Az uFlags mezőben megadjuk, hogy egy információs üzenetet kívánunk megjeleníteni, vagyis egy felkiáltójeles ikon legyen az üzenetablak bal sarkában.
Beállíthatjuk az üzenetablak fejlécszövegét is.
  data.szInfoTitle = "NotifyInfoMessage alkalmazás";
Majd megadjuk a szöveget is, ami az üzenet maga lesz.
  data.szInfo = text;
Végül meghívjuk a Shell_NotifyIcon függvényt.
  Shell_NotifyIcon(NotifyCommand.Modify, ref data);
}
Kipróbáláshoz regisztráljuk a NIMComponent komponensünket a ToolBox palettán, majd dobjuk azt a NIMClient alkalmazás Form-jára. Adjunk meg egy szöveget a komponens Text property-jében, valamint a Visible property-t állítsuk igazra. Indítsuk el a mellékelt NIMClient alkalmazást, majd kattintsunk az egér bal gombjával a kis ikonon.



Cikksorozat

#IDKategóriaCikk címeSorozat
2591WindowsTippek és trükkök - RAS - Modem csengetési szám állítása1. rész
2622WindowsTippek és trükkök - Program futtatása más felhasználóként2. rész
2640WindowsA Windows ikonméretének megváltoztatása és Windows 2000 Asztaltémák3. rész
2657WindowsTippek és trükkök - Internet Explorer4. rész
2667WindowsTippek és trükkök5. rész
2684WindowsAlapértelmezések állítása, telepítési fájlok helye, intéző nézetek6. rész
2696WindowsBiztonsági trükkök7. rész
2702WindowsWindows XP trükkök8. rész
2729WindowsWindows 2000 és XP tippek, trükkök9. rész
2757WindowsRegistry trükkök10. rész
2784WindowsTippek, trükkök11. rész
2829WindowsTippek, trükkök12. rész
2889WindowsWindows XP tippek13. rész
2909WindowsTippek Windows XP-hez14. rész
2919WindowsWindows tippek15. rész
2924WindowsWindows tippek16. rész
2963WindowsWindows tippek17. rész
2973WindowsWindows Tippek18. rész
2981WindowsWindows tippek19. rész
2990WindowsTippek-trükkök20. rész
3027WindowsIIS tippek21. rész
3034WindowsWindows XP tippek-trükkök22. rész
3088WindowsWindows 2000/XP tippek, trükkök23. rész
3133WindowsWindows XP tippcsokor24. rész
3140WindowsWindows XP tippek, trükkök25. rész
3152WindowsXP és IIS tippek - trükkök26. rész
3158WindowsWindows XP tippek, trükkök27. rész
3168WindowsTippek, trükkök28. rész
3170WindowsRegistry trükkök29. rész
3179WindowsTippek, trükkök30. rész
3197WindowsWindows XP tippek, trükkök31. rész
3205WindowsTippek, trükkök32. rész
3214WindowsTippek, trükkök33. rész
3223WindowsTippek, trükkök34. rész
3233WindowsTippek, trükkök35. rész
3271WindowsTippek, trükkök36. rész
3307WindowsTippek, trükkök37. rész
3370WindowsTippek, trükkök38. rész
3399WindowsTippek, trükkök39. rész
3510WindowsTippek, trükkök40. rész
3611WindowsHardverrel kapcsolatos tippek, trükkök41. rész
3668WindowsRegistry trükkök42. rész
3711WindowsTippek, trükkök43. rész
3771WindowsTippek, trükkök44. rész
3801WindowsTippek, trükkök45. rész
3831WindowsTippek, trükkök46. rész
3891WindowsTippek, trükkök47. rész
3921WindowsTippek, trükkök48. rész
3981WindowsTippek, trükkök49. rész
4041WindowsTippek, trükkök50. rész
4071WindowsTippek, trükkök51. rész
4151WindowsTippek, trükkök52. rész
4171C#Tippek, trükkök53. rész
4211WindowsTippek, trükkök54. rész
4251WindowsTippek, trükkök55. rész
4281WindowsTippek, trükkök56. rész
3589DelphiTippek, trükkök57. rész
3718DelphiTippek, trükkök58. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 402. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |