AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Programm ohne Fenster in TNA ablegen
Thema durchsuchen
Ansicht
Themen-Optionen

Programm ohne Fenster in TNA ablegen

Ein Thema von hirnstroem · begonnen am 5. Jun 2007 · letzter Beitrag vom 5. Jun 2007
 
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#1

Programm ohne Fenster in TNA ablegen

  Alt 5. Jun 2007, 12:53
'loha Folks,

http://www.delphipraxis.net/internal_redirect.php?t=137

^^ gemäss dieser Vorlage versuche ich ein Programm, welches keine Fenster hat, in der Tray Notification Area abzulegen, bekomme dies aber nicht hin -.-

Folgendermassen müsste die entsprechende Unit (in etwa) aussehen

Delphi-Quellcode:
unit UTrayNotificationArea;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IWStandAloneServer, ExtCtrls, StdCtrls, Buttons, ShellAPI, Menus;

type
  TTrayNotificationArea = class(TForm) // <- da kein Formular fehlt ja dann auch irgendwie ein .dfm
    //
    procedure btnFACTSClick(Sender: TObject);
    procedure FACTSffnen1Click(Sender: TObject);
    procedure Beenden1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    //
    TaskBarNewReg : DWORD;
    IconData: TNotifyIconData;
    pmTrayNotificationArea: TPopupMenu;
    IWStandAloneServer: TIWStandAloneServer;
    FACTSOeffnen1: TMenuItem;
    Beenden1: TMenuItem;
    //
  public
    { Public-Deklarationen }
    constructor Create; overload;
    destructor Destroy; overload;
    //
    procedure WndProc(var Msg: TMessage); override;
    procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
    //
  end;

var
  TrayNotificationArea: TTrayNotificationArea;

implementation

{$R *.dfm}

procedure TTrayNotificationArea.WndProc(var Msg: TMessage);
var
  Point: TPoint;
begin
  // WM_USER + 20 is the TNA message
  if Msg.Msg = WM_USER + 20 then
  begin
    // lParam contains the message
    case Msg.lParam of
      WM_RBUTTONUP:
      begin
        SetForegroundWindow(Handle);
        GetCursorPos(Point);
        pmTrayNotificationArea.PopUp(Point.X, Point.Y);
      end;
      WM_LBUTTONDBLCLK:
      begin
        IWStandAloneServer.Run;
      end;
    end;
  end
  else if Msg.Msg = TaskBarNewReg then
  begin
    Shell_NotifyIcon(NIM_ADD, @IconData);
  end;
  inherited;
end;

procedure TTrayNotificationArea.WMSysCommand(var Message: TWMSysCommand);
begin
  // Fenster wurde minimiert
  if Message.CmdType and $FFF0 = SC_MINIMIZE then
  begin
    Hide;
    // show icon in tray
    Shell_NotifyIcon(NIM_ADD, @IconData);
  end
  else
  begin
    inherited;
  end;
end;

procedure TTrayNotificationArea.Beenden1Click(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TTrayNotificationArea.btnFACTSClick(Sender: TObject);
begin
  IWStandAloneServer.Run;
end;

procedure TTrayNotificationArea.FACTSffnen1Click(Sender: TObject);
begin
  IWStandAloneServer.Run;
end;

constructor TTrayNotificationArea.Create;
begin
  // create popup menu and menu items
  pmTrayNotificationArea := TPopupMenu.Create(nil);
  FACTSOeffnen1 := TMenuItem.Create(pmTrayNotificationArea);
  FACTSOeffnen1.OnClick := FACTSffnen1Click;
  Beenden1 := TMenuItem.Create(pmTrayNotificationArea);
  Beenden1.OnClick := Beenden1Click;

  TaskBarNewReg := RegisterWindowMessage('TaskbarCreated');
  // IconData fill stucture
  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 := 'FACTS Server Application';
  // show icon in tray (comment out if not needed)
  Shell_NotifyIcon(NIM_ADD, @IconData);
end;

destructor TTrayNotificationArea.Destroy;
begin
  Shell_NotifyIcon(NIM_DELETE, @IconData);
end;

initialization
  TrayNotificationArea.Create;

finalization
  TrayNotificationArea.Destroy;

end.
Bin ich da völlig auf dem Holzweg, oder lässt sich damit etwas anfangen?

Grüsse
hirnstroem
inde deus abest
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz