Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Anwendung in Taskleiste rechts (https://www.delphipraxis.net/38039-anwendung-taskleiste-rechts.html)

Reini64 13. Jan 2005 20:44


Anwendung in Taskleiste rechts
 
Guten Abend zusammen,

ich habe mal wieder eine Frage !

Was muß ich machen um unter Delphi eine Anwendung zuschreiben die wenn mann sie startet als Icon in der Taskleiste unteren rechten Rand (neben der Uhr ) angezeigt wird???

Ich arbeite mit Delphi 6.0 Pro und habe mir Delphi 2005 Pro gekauft (muss mich haber erstmal durchlesen)

Also wehr kann mir da weiter helfen ?

Danke

Reini64

Dax 13. Jan 2005 20:44

Re: Anwendung in Taskleiste rechts
 
TNATNA

Nikolas 13. Jan 2005 20:45

Re: Anwendung in Taskleiste rechts
 
Such mal nach 'CoolTrayIcon'. Mit der Komponente kannst du sowas recht einfach machen. Ob Delphi 2005 selbst was mitbringt, weiss ich nicht.

Reini64 13. Jan 2005 20:56

Re: Anwendung in Taskleiste rechts
 
Hi Dax,

danke für die schnelle Info !

Aber mir wird kein Icon angezeigt !

Reini64

Matze 13. Jan 2005 21:25

Re: Anwendung in Taskleiste rechts
 
Hast du den Code aus der Code-Library genau so ausgeführt, wie beschrieben? Bei mir geht das einwandfrei.

alcaeus 13. Jan 2005 21:32

Re: Anwendung in Taskleiste rechts
 
Tada: http://www.delphipraxis.net/internal...ct.php?t=36388
Wenn du alles so machst wie ich es beschrieben habe, funktioniert es auch. Einziger Nachteil: du musst eine Komponente verwenden. Fuer den Anfang empfehle ich dir das aber.

Greetz
alcaeus

Reini64 13. Jan 2005 21:33

Re: Anwendung in Taskleiste rechts
 
Also ich habe den Code kopiert und die Objecte eingefügt.

Wenn ich nun auf minimieren gehe wird kein Icon angezeigt!

hier nochmal den Code
Delphi-Quellcode:
nit Unit1;

interface

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

type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    Item31: TMenuItem;
    Item21: TMenuItem;
    Item11: 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.

Luckie 13. Jan 2005 21:35

Re: Anwendung in Taskleiste rechts
 
Hast du die Ereignisse auch im OI zugewiesen?

Reini64 13. Jan 2005 21:50

Re: Anwendung in Taskleiste rechts
 
Vielen Dank für den Tipp,

habe das komplett vergessen!!

Jetzt klappt es auch,

als nochmals herzlichen Dank

Reinhard

arbu man 14. Jan 2005 13:20

Re: Anwendung in Taskleiste rechts
 
Bei JEDI is auch ne coole Komponente dabei

Luckie 14. Jan 2005 13:23

Re: Anwendung in Taskleiste rechts
 
Zitat:

Zitat von arbu man
Bei JEDI is auch ne coole Komponente dabei

Man kann aber zur Abwechslung auch mal was selber programmieren. Vorallem, wenn es so etwas triviales ist. Für jeden Fliegendreck eine Komponente und dann wundert man sich, warum mal asl Delphi-Prpgrammierer ls Klickibunti-Programmierer verschrien ist. :roll:

ArmyMan 11. Feb 2005 14:30

Re: Anwendung in Taskleiste rechts
 
Ich hab auch noch eine Frage.
Wie kann ich den Text der erscheint wenn man über das Icon in der Taskleiste geht ändern??

Könnte ich sehr gut gebrauchen.

ArmyMan

phlux 11. Feb 2005 15:26

Re: Anwendung in Taskleiste rechts
 
Guckst du hier:
Delphi-Quellcode:
  IconData.szTip := 'Dies ist ein TNA-Icon';
Änderst du krass auf den Tooltipp deiner Wahl ;)

mfg :hi:

Luckie 11. Feb 2005 15:30

Re: Anwendung in Taskleiste rechts
 
Danach muss aber dann auch
Code:
Shell_NotifyIcon([b]NIM_MODIFY[/b], @IconData);
aufgerufen werden!

phlux 11. Feb 2005 15:34

Re: Anwendung in Taskleiste rechts
 
Stimmt, hat ich vergessen zu erwähnen, ein glück das es luckie gibt :wink:

ArmyMan 11. Feb 2005 16:06

Re: Anwendung in Taskleiste rechts
 
Das weiss ich schon. Kann man aber eine Variable anstelle von dem direkten String machen?? Bei mir funktioniert das nicht.
Ich meine so:

text := 'bla';
IconData.szTip := text;

Kann mir jemand sagen wie ich sowas hinkriege.
Danke
ArmyMan

Kernel32.DLL 11. Feb 2005 16:08

Re: Anwendung in Taskleiste rechts
 
was funzt denn nicht?

ArmyMan 11. Feb 2005 16:17

Re: Anwendung in Taskleiste rechts
 
Das mit der Variable geht nicht. Es kommt ein Fehler wegen Array und String oder so was. Das muss doch irgendwie gehen dass ich in einer Variable den Text speichern kann den er da anzeigen sollte.

ArmyMan

freak4fun 11. Feb 2005 16:21

Re: Anwendung in Taskleiste rechts
 
Zitat:

Zitat von ArmyMan
Kann mir jemand sagen wie ich sowas hinkriege.

Delphi-Quellcode:
text := 'bla';
IconData.szTip[x] := text;
:gruebel:

[edit] Da war was mit Delphi-Code :mrgreen: [/edit]

MfG
freak

ArmyMan 11. Feb 2005 16:27

Re: Anwendung in Taskleiste rechts
 
Was kommt bei dem "x" hin?? So gehts nicht.

ArmyMan

phlux 11. Feb 2005 16:27

Re: Anwendung in Taskleiste rechts
 
wenn iconData dein TNotify... Typ ist und text deine String-Variable versuch mal:

Delphi-Quellcode:
  StrCopy(IconData.szTip, PChar(text));
  Shell_NotifyIcon(NIM_MODIFY, @IconData);

Luckie 11. Feb 2005 16:32

Re: Anwendung in Taskleiste rechts
 
Caste die String-Variable beim Zuweisen nach PChar und es sollte gehen.

ArmyMan 11. Feb 2005 16:32

Re: Anwendung in Taskleiste rechts
 
Funktioniert Super!
Vielen Dank.
ArmyMan


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz