Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Programm in der TNA ablegen

  Alt 11. Jun 2002, 15:01
Delphi-Quellcode:
 unit Unit1;

interface

uses
  Windows, Messages, Forms, ShellAPI, Menus, Classes;

type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    Item11: TMenuItem;
    Item21: TMenuItem;
    Item31: TMenuItem;
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    // für MessageID von RegisterWindowsMessage
    TaskBarNewReg : DWORD;
    IconData: TNotifyIconData;
  public
    { Public-Deklarationen }
    procedure WndProc(var Msg: TMessage); override;
    procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

////////////////////////////////////////////////////////////////////////////////
// auf Mausklicks reagieren, Fensterprozedur erweitern

procedure TForm1.WndProc(var Msg: TMessage);
var
  Point: TPoint;
begin
  // WM_USER + 20 ist unsere TNA Icon Nachricht
  if Msg.Msg = WM_USER + 20 then
  begin
    // im lParam steht die Nachricht
    case Msg.lParam of
      // rechte Taste für Menü
      WM_RBUTTONDOWN:
        begin
          SetForegroundWindow(Handle);
          GetCursorPos(Point);
          PopUpMenu1.PopUp(Point.X, Point.Y);
        end;
      // linke Taste
      WM_LBUTTONDOWN:
        begin
          //ShowMessage('links runter');
        end;
      // Doppelklick
      WM_LBUTTONDBLCLK:
        begin
          // Fenster anzeigen
          Form1.Show;
          // Icon entfernen
          Shell_NotifyIcon(NIM_DELETE, @IconData);
        end;
    end;
  end
  // Taskbar wurde im System registriert, Icon einfügen
  else if Msg.Msg = TaskBarNewReg then
  begin
    Shell_NotifyIcon(NIM_ADD, @IconData);
  end;
  inherited;
end;

////////////////////////////////////////////////////////////////////////////////
// beim Minimieren Fomr verstecken und Icon in die TNA

procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
  // Fenster wurde minimiert
  if Message.CmdType and $FFF0 = SC_MINIMIZE then
  begin
    Hide;
    // Icon in der TNA anzeigen
    Shell_NotifyIcon(NIM_ADD, @IconData);
  end
  else
    inherited;
end;

////////////////////////////////////////////////////////////////////////////////
// Beim beenden Icon entfernen

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Shell_NotifyIcon(NIM_DELETE, @IconData);
end;

////////////////////////////////////////////////////////////////////////////////
// Beim Erstellen des Formulares TNotifyIconData-Struktur initialisieren

procedure TForm1.FormCreate(Sender: TObject);
begin
  // Message ID für Message merken, die gesendet wird, wenn die Taskbar im
  // System registriert wird.
  TaskBarNewReg := RegisterWindowMessage('TaskbarCreated');
  // IconData Struktur füllen
  IconData.cbSize := SizeOf(IconData);
  IconData.Wnd := Handle;
  IconData.uID := 100;
  IconData.uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
  IconData.uCallBackMessage := WM_USER + 20;
  IconData.hIcon := Application.Icon.Handle;
  IconData.szTip := 'Dies ist ein TNA-Icon';
  // Icon einfügen. Bei Bedarf sofort
  //Shell_NotifyIcon(NIM_ADD, @IconData);
end;

end.
ShellAPI nicht vergessen.

[edit=Matze]Code aktualisiert. Mfg, Matze[/edit]
[edit=Matze]Suchbegriffe hinzugefügt: Tray, Systray, TNA. Mfg, Matze[/edit]
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat