Announcement

Collapse
No announcement yet.

Wie bekomme ich ein Icon von meiner Anwendung in die Taskbar???

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie bekomme ich ein Icon von meiner Anwendung in die Taskbar???

    Hallo,
    <br><br>
    kann mir jemand sagen wie ich es programmtechnisch anstellen muss, damit mein Programm in der Taskbar erscheint???<br><br>
    Gruß,<br>
    Marco

  • #2
    Schaue mal hier nach der Komponente Cooltray:<br>
    http://www3.brinkster.com/troels/delphi.asp<p>
    Schöne Grüße, Mario Noac
    Schöne Grüße, Mario

    Comment


    • #3
      HAllo Mario,<br>Komponenten sind gut. <br>Von Zeit zu Zeit sollte man aber auch etwas selber machen. Machmal programmiere (bzw. versuche) Dinge von denen ich weiss, dass es dafür fertige Komponenten gibt.<br>Irgendwie habe ich das Gefühl, dass ich dabei mehr lerne.
      Hier mein Lösungsvorschlag für das Problem:
      <pre>
      unit Unit1;

      interface

      uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ShellApi, Menus, ExtCtrls;

      const
      WM_TBNA = WM_App+1; // Message aus der TBNA an das Formular

      type
      TForm1 = class(TForm)
      PopupMenu: TPopupMenu;
      pmClose: TMenuItem;
      Image1: TImage;
      Formular1: TMenuItem;
      N1: TMenuItem;
      procedure FormCreate(Sender: TObject);
      procedure pmCloseClick(Sender: TObject);
      procedure FormDestroy(Sender: TObject);
      procedure Formular1Click(Sender: TObject);
      procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
      private
      { Private-Deklarationen }
      FCanClose : Boolean;
      procedure WMTBNA(var Msg : TMessage); message WM_TBNA; // Abfragen der Message
      public
      { Public-Deklarationen }
      end;

      var
      Form1: TForm1;

      implementation

      {$R *.DFM}

      const
      iTBNA_ID = 1;

      procedure TForm1.FormCreate(Sender: TObject);
      var
      NotifyIconData : TNotifyIconData;
      begin
      // Anwendung soll nicht in der TaskBar erscheinen
      SetWindowLong(Application.Handle,GWL_EXSTYLE,
      GetWindowLong(Application.Handle,GWL_EXSTYLE) or
      WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
      Application.ShowMainForm:=False; // Formular verschwinden lassen
      // Programm in der TBNA sichtbar werdfen lassen
      With NotifyIconData do
      begin
      cbSize:=SizeOf(TNotifyIconData); // Größe des Records
      Wnd:=Handle; // Handle des Forms, dass die CallBackMessage erhalten soll
      uID:=iTBNA_ID; // Programminterne ID. Damit man bei Aufräumen die ICON-Instanz in der TBNA wieder findet
      uFlags:=NIF_MESSAGE or NIF_ICON or NIF_TIP; // Die Flags geben an, welche Recordeinträge gültig sind.
      uCallBackMessage:=WM_TBNA; // Wert für die CallBackMessage -> siehe oben
      hIcon:=Image1.Picture.Icon.Handle; // Handle für Icon. MAn köönte auch ein Icon aus einer Resource laden.
      szTip:='Progamm in der TBNA'; // ToolTip-Text
      end;
      Shell_NotifyIcon(NIM_ADD,@NotifyIconData); // Programm in der TBNA verankern
      end;

      procedure TForm1.pmCloseClick(Sender: TObject);
      begin
      // Programm kann nur über das PopupMenu beendet werden !!!
      FCanclose:=True;
      Close;
      end;

      procedure TForm1.WMTBNA(var Msg: TMessage);
      begin
      Case Msg.LParam of
      WM_RBUTTONDOWN : begin
      {Damit das Popupmenu verschwindet, wenn man nicht
      auf ein MenuItem klickt, wird das Fenster in den
      Vordergrund geholt}
      SetForegroundWindow(Handle);
      // Zeige das PopupMenu an
      PopupMenu.Popup(Mouse.CursorPos.X,Mouse.CursorPos. Y);
      end;
      end;
      end;

      procedure TForm1.FormDestroy(Sender: TObject);
      var
      NotifyIconData : TNotifyIconData;
      begin
      // Programm aus der TBNA entfernen
      With NotifyIconData do
      begin
      cbSize:=SizeOf(TNotifyIconData);
      Wnd:=Handle;
      uID:=iTBNA_ID;
      end;
      Shell_NotifyIcon(NIM_DELETE,@NotifyIconData);
      end;

      procedure TForm1.Formular1Click(Sender: TObject);
      begin
      Show; // Zeige das Formular
      end;

      procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
      begin
      Hide; // Formular wieder verstecken
      CanClose:=FCanClose;
      end;

      end.
      </pre&gt

      Comment


      • #4
        hi jens,

        heute will doch niemand mehr was lernen, sondern nur geld verdienen *ggg

        gruß

        marku
        Herzliche Grüße

        Markus Lemcke
        barrierefreies Webdesign

        Comment


        • #5
          Hallo ihr beiden,

          erst mal vielen Dank für eure Hilfe. Also ich persönlich finde es auch besser etwas selbst programmiert zu haben. Daher finde ich es klasse von Jens, dass er mir mit einem Programmbeispiel geholfen hat. Für mich sieht sieht der Programmcode leider sehr kompliziert aus. Frage mich, wie ich das in mein Programm eingliedern soll und was ich genau beachten muß, damit es danach auch noch läuft.<br>
          <br>
          Viele Grüße,
          Marc

          Comment


          • #6
            jens hat eigentlich alles angegeben und kommentiert! kopiere doch mal alles in dein formular an die richtige stelle (ereignis oncreate, ereignis onclose usw.) und teste was passiert!

            gruß

            marku
            Herzliche Grüße

            Markus Lemcke
            barrierefreies Webdesign

            Comment

            Working...
            X