Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Tray-Icon (https://www.delphipraxis.net/53893-tray-icon.html)

Xenonz 24. Sep 2005 18:54


Tray-Icon
 
Hallo,
Ich habe ein kleines Programm geschrieben. Ich würde in dieses gerne einen Button einfügen, der bewirkt, dass sich das Programm im Tray versteckt und keine Task mehr einnimmt. Es soll lediglich durch einen Mausklick auf das Icon wieder aufgerufen werden. Ein Menü ist nicht nötig.
Wie kann man das möglichst einfach realisieren?
Mfg Xenonz

Zacherl 24. Sep 2005 18:56

Re: Tray-Icon
 
Wenn du die JEDI Komponenten installiert hast, versuch mal TJvTrayIcon.
Ansonsten die DP Suche.

Florian

faux 24. Sep 2005 19:13

Re: Tray-Icon
 
http://www.dsdt.info/tipps/?id=35

Grüße
Faux

Matze 24. Sep 2005 19:16

Re: Tray-Icon
 
Oder in unserer Code-Library: TNATNA

Muetze1 24. Sep 2005 19:53

Re: Tray-Icon
 
In der CodeLib fehlt immernoch das neu registrieren des Icons, wenn der Explorer abgestürzt ist. Das hatte ich aber schonmal samt Code vor rund einem Dreivierteljahr angemerkt, aber irgendwie dauert das wohl alles recht lange....

Matze 24. Sep 2005 20:02

Re: Tray-Icon
 
Zitat:

Zitat von Muetze1
In der CodeLib fehlt immernoch das neu registrieren des Icons, wenn der Explorer abgestürzt ist. Das hatte ich aber schonmal samt Code vor rund einem Dreivierteljahr angemerkt, aber irgendwie dauert das wohl alles recht lange....

:shock: Das habe ich nicht mitbekommen.

Xenonz 25. Sep 2005 17:39

Re: Tray-Icon
 
Danke für die Antworten!
Ich verstehe an Luckies Code kaum etwas...
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellAPI, Menus;

type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    Item11: TMenuItem;
    Item21: TMenuItem;
    Item31: TMenuItem;
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    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
  if Msg.Msg = WM_USER + 20 then
  begin
    case Msg.lParam of
      WM_RBUTTONDOWN:
        begin
          SetForegroundWindow(Handle);
          GetCursorPos(Point);
          PopUpMenu1.PopUp(Point.X, Point.Y);
        end;
      WM_LBUTTONDOWN:
        begin
          //ShowMessage('links runter');
        end;
      WM_LBUTTONDBLCLK:
        begin
          Form1.Show;
          // Icon nur anzeigen wenn Fenster minimiert
          Shell_NotifyIcon(NIM_DELETE, @IconData);
        end;
    end;
  end;
  inherited;
end;

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

procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
  if Message.CmdType and $FFF0 = SC_MINIMIZE then
  begin
    Hide;
    // Icon nur anzeigen wenn Fenster minimiert
    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
  //Application.ShowMainForm := False; //Programm gar nicht erst anzeigen
  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';
  //Shell_NotifyIcon(NIM_ADD, @IconData); // fügt das Icon ein end;
end;

end.
Kann vielleicht jemand von Euch für mich Kommentare dahintersetzen, um mir den Code verständlich zu machen?

faux 25. Sep 2005 17:42

Re: Tray-Icon
 
Vielleicht wäre es umgekehrt sinnvoller, wenn du markierst, was du nicht verstehst? :roll:

Grüße
Faux

Xenonz 25. Sep 2005 17:49

Re: Tray-Icon
 
Also:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ShellAPI, Menus;

type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    Item11: TMenuItem;                                   //in welchem Reiter sind diese Menüs?
    Item21: TMenuItem;
    Item31: TMenuItem;
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    IconData: TNotifyIconData;
  public
    { Public-Deklarationen }
    procedure WndProc(var Msg: TMessage); override;
    procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;     //was ist der Unterschied                          
                                                                                    //zw. Public und Private?
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

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

procedure TForm1.WndProc(var Msg: TMessage);
var
  Point: TPoint;                                                //was ist ein TPoint?
begin
  if Msg.Msg = WM_USER + 20 then                               //   <hä?>
  begin
    case Msg.lParam of
      WM_RBUTTONDOWN:
        begin
          SetForegroundWindow(Handle);
          GetCursorPos(Point);
          PopUpMenu1.PopUp(Point.X, Point.Y);
        end;
      WM_LBUTTONDOWN:
        begin
          //ShowMessage('links runter');
        end;
      WM_LBUTTONDBLCLK:
        begin
          Form1.Show;
          // Icon nur anzeigen wenn Fenster minimiert
          Shell_NotifyIcon(NIM_DELETE, @IconData);
        end;
    end;
  end;
  inherited;
end;

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

procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
  if Message.CmdType and $FFF0 = SC_MINIMIZE then
  begin
    Hide;
    // Icon nur anzeigen wenn Fenster minimiert
    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
  //Application.ShowMainForm := False; //Programm gar nicht erst anzeigen
  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';
  //Shell_NotifyIcon(NIM_ADD, @IconData); // fügt das Icon ein end;        //</hä?>
end;

end.
Das sind meine Probleme.

PierreB 25. Sep 2005 17:59

Re: Tray-Icon
 
Beispiel: "Was ist der Unterschied zw. public & private"

Das hat wohl mit diesem Thema nichts zu tun und zählt eher zu Delphi-Grundlagen. Das solltest du dir also mal etwas genauer angucken. ;) http://www.dsdt.info

P.S.: Auf der Webseite ^^ gibt es den "Easy Helper", indem du viele Delphitipps findest. Unter anderem auch eine komplette Anleitung wie du das was du machen willst in dein Programm einbaust. :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:13 Uhr.
Seite 1 von 2  1 2      

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