Sprechblase von TrayIcon
-
Hallo,
Habe nach der Anleitung http://www.swissdelphicenter.ch/torry/showcode.php?id=1164
versucht meinem TrayIcon ein Ballon Tip verpassen. Habe jetzt schon folgenden Code://--------------------------------------------------------------------------- #define _WIN32_IE 0x0600 #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include <Commctrl.h> #include <ShellApi.h> #define ARRAYSIZE(a) (sizeof(a)/sizeof(a[0])) //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { NOTIFYICONDATA IconData = {0}; IconData.cbSize = sizeof(IconData); IconData.uFlags = NIF_INFO; IconData.hWnd = TrayIcon1->Handle; IconData.uTimeout = 15000; // in milliseconds strcpy (IconData.szInfoTitle, "Titel"); strcpy (IconData.szInfo, "Text"); IconData.dwInfoFlags=NIIF_INFO; Shell_NotifyIcon(NIM_MODIFY, &IconData); } //---------------------------------------------------------------------------Nur irgendwie will das noch nicht so richtig funktionieren. Ich bekomme keinen Fehler beim Kopmpilieren. Wenn ich auf den Button drücke, passiert allerdings auch nichts
Sieht vielleicht jemand wo der Fehler liegt.Danke und Gruß
Tobias
-
irgendwie sieht das beispiel bei mir ganz anders aus. Vlei solltest du mal den Rest des Codes auch mit hinschreiben?!
P.S. Probiere doch selber mal ein wenig und komm nicht immer gleich mit: Geht nicht, Laeuft nicht, Macht nichts, usw.. Glaubst Du uns fliegt das alles zu? Nein, wir müssen uns auch erst damit beschäftigen und es ausprobieren!
-
so um mal wieder zum eigentlichen problem zurück zu kommen, hier mal ne übersetzte version, ich will ja schliesslich auch zu den guten gehören.

header-Sektion:
NOTIFYICONDATA IconData; void __fastcall DeleteSysTrayIcon(); void __fastcall ShowBalloonTips(); void __fastcall AddSysTrayIcon(); void __fastcall SysTrayIconMsgHandler(TMessage &Msg); void __fastcall Restore(); void __fastcall Minimize(); void __fastcall WndProc(TMessage &Message);cpp-Sektion;
// ganz oben ins file (allererste zeile) // -> wird benötigt, damit alle Strukturvariablen bekannt sind, die hier // Verwendung finden #define _WIN32_IE 0x0600 //--------------------------------------------------------------------------- // Fensterfunktion hier kommen alle Botschaften an //--------------------------------------------------------------------------- void __fastcall TForm1::WndProc(TMessage &Message) { inherited::WndProc(Message); // auswerten von Minimieren und Wiederherstellen if (Message.Msg == WM_SYSCOMMAND) { if (Message.WParam == SC_MINIMIZE) Minimize(); if (Message.WParam == SC_RESTORE) Restore(); } } //--------------------------------------------------------------------------- // Funktion stellt das Fenster wieder her //--------------------------------------------------------------------------- void __fastcall TForm1::Restore() { // TrayIcon ausblenden DeleteSysTrayIcon(); // Fenster wieder in Taskleiste anzeigen Application->Restore(); ShowWindow(Application->Handle, SW_RESTORE); SetForegroundWindow(Application->Handle); } //--------------------------------------------------------------------------- // Funktion minimiert das Fenster //--------------------------------------------------------------------------- void __fastcall TForm1::Minimize() { // Fenster aus Taskleiste verbannen Application->Minimize(); ShowWindow(Application->Handle, SW_HIDE); // TrayIcon anlegen und anzeigen AddSysTrayIcon(); ShowBalloonTips(); } // Botschaft-Message fuer das TrayIcon #define TRAYICON_CALLBACK_MESSAGE (WM_USER + 29272); //--------------------------------------------------------------------------- // Callback-Funktion fuer das TrayIcon //--------------------------------------------------------------------------- void __fastcall TForm1::SysTrayIconMsgHandler(TMessage &Msg) { switch (Msg.LParam) { // beim Klick mit der Maus auf das Icon, das Fenster wiederherstellen // denkbar wäre das auch bei LBUTTONDBLCLK case WM_LBUTTONDOWN : Restore(); break; // hier kann noch irgendwas gemacht werden case WM_MOUSEMOVE : case WM_LBUTTONUP : case WM_LBUTTONDBLCLK : case WM_RBUTTONDOWN : case WM_RBUTTONUP : case WM_RBUTTONDBLCLK : case NIN_BALLOONSHOW : case NIN_BALLOONHIDE : case NIN_BALLOONTIMEOUT : case NIN_BALLOONUSERCLICK : break; } } //--------------------------------------------------------------------------- // Funktion initialisiert das TrayIcon an //--------------------------------------------------------------------------- void __fastcall TForm1::AddSysTrayIcon() { IconData.cbSize = sizeof(NOTIFYICONDATA); IconData.hWnd = AllocateHWnd(SysTrayIconMsgHandler); IconData.uID = 0; IconData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; IconData.uCallbackMessage = TRAYICON_CALLBACK_MESSAGE; IconData.hIcon = Application->Icon->Handle; strcpy(IconData.szTip, "Standard-Tip, wenn Maus über Icon"); // Icon in Statusbereich einfuegen if (!Shell_NotifyIcon(NIM_ADD, &IconData)) ShowMessage("Failed"); } //--------------------------------------------------------------------------- // Funktion zeigt das TrayIcon an //--------------------------------------------------------------------------- void __fastcall TForm1::ShowBalloonTips() { AnsiString TipInfo = "Programm arbeitet jetzt im Hintergrund"; AnsiString TipTitle = "Programmname"; strncpy(IconData.szInfo, TipInfo.c_str(), sizeof(IconData.szInfo) - 1); strncpy(IconData.szInfoTitle, TipTitle.c_str(), sizeof(IconData.szInfoTitle) - 1); // laut MSDN muss der TimeOut zwischen 10 und 30 Sekunden liegen IconData.cbSize = sizeof(NOTIFYICONDATA); IconData.uFlags = NIF_INFO; IconData.uTimeout = 10000; IconData.dwInfoFlags = NIIF_INFO; //NIIF_ERROR; //NIIF_WARNING; // Icon anpassen Shell_NotifyIcon(NIM_MODIFY, &IconData); // IconData.uVersion = NOTIFYICON_VERSION; // Win2000-Verhalten verwenden // if (!Shell_NotifyIcon(NIM_SETVERSION, &IconData)) // ShowMessage("Failed"); } //--------------------------------------------------------------------------- // Funktion entfernt das TrayIcon //--------------------------------------------------------------------------- void __fastcall TForm1::DeleteSysTrayIcon() { DeallocateHWnd(IconData.hWnd); // Icon aus Statusbereich entfernen if (!Shell_NotifyIcon(NIM_DELETE, &IconData)) ShowMessage("Failed"); }viel spass
-
aehm #include <shellapi.h> fehlt natürlich noch
am besten definiert ihr NOTIFYICONDATA IconData; global in der cpp und nicht im header. bei mir snd sonst alle member-variablen der form immer 0 auch wenn sie gerade initialisiert wurden... seltsam...
-
Müll entfernt.
Kritik an vermeintlich unfreundlichen Antworten ist kontraproduktiv und allenfalls per Mail an den Betreffenden zu richten.
Weitere Offtopic-Beiträge werden kommentarlos gelöscht.