Programm in die Tasbar
Quellcode mit Beschreibung:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//WICHTIG!!!
//In ShellAPI.h wird die Struktur NOTIFYICONDATA beschrieben
#include <shellapi.h>
/*
WICHTIG!!!
//Muß für die gesamte Form gelten, da sonst die Variable
//verloren geht und das Icon nicht mehr aus der TaskBar entfernt
werden kann
*/
NOTIFYICONDATA tsym;
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//Konstruktor
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
/*
Diese Funktion zaubert die Anwendung (bei TRUE) in die
Taskleiste und holt sie (bei FALSE) wieder raus
*/
void __fastcall TForm1::InTaskBar(bool ja)
{
if(ja)
{
//true übergeben, also ab in die Leiste
//hier wird die Größe der Struktur erwartet
tsym.cbSize = sizeof(NOTIFYICONDATA);
//Handle der Form, das über den MessageHandler in der
//Bar angesprochen werden kann
tsym.hWnd = Handle;
//Ansprechnummer des Icons in der TaskBar
tsym.uID = 1;
//Icon soll angezeigt werden; CallBack-Message aktiviert;
//ToolTop beim Überfahren mit der Maus soll angezeigt werden
tsym.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
/*
Für den Callback (hier: Mausbenachrichtigungen beim Linksklick
auf das Icon in der Taskbar) soll ein eigener Messagehandler
namens WM_MYCALLBACK benutzt werden; Dekla siehe Header-Datei!
*/
tsym.uCallbackMessage = WM_MYCALLBACK;
//Icon für die Bar wird gesetzt
tsym.hIcon = (HICON)Image1->Picture->Icon->Handle;
//Tooltip wird gesetzt
strcpy(tsym.szTip,"MeinProgramm");
//Und ab in die Bar!
Shell_NotifyIcon(NIM_ADD, &tsym);
}
else
//und raus aus der Bar!
Shell_NotifyIcon(NIM_DELETE, &tsym);
}
//Klick auf Button ruft o.a. Funktion mit TRUE auf
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form1->Hide();
InTaskBar(true);
}
/*
Diese Funktion wird durch den eigenen MessageHandler aufgerufen.
wie das mit der Umleitung geht, siehe
BEGIN_MESSAGE_MAP
in der Header-Datei*/
void __fastcall TForm1::MausUeberIconInTaskBar(TMessage& Msg)
{
//Auswertung der Mausmessage, die durch den eigenen Handler
//weitergeleitet wurde
switch(Msg.LParam)
{
case WM_LBUTTONUP:
{
//linke Maustaste gedrückt = Icon aus der Bar und Form zeigen
Form1->Show();
InTaskBar(false);
}
}
}