AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programm nur als Tray sichtbar

Ein Thema von RuX · begonnen am 16. Aug 2004 · letzter Beitrag vom 13. Sep 2004
Antwort Antwort
RuX

Registriert seit: 21. Jul 2004
Ort: Nürnberg
115 Beiträge
 
Delphi 7 Architect
 
#1

Programm nur als Tray sichtbar

  Alt 16. Aug 2004, 17:06
TNA_FragenCount++;
Mal zur Abwechslung eine Tray Frage.
Ich will das mein Programm nur als TrayIcon sichtbar ist, und nicht auch noch in der Taskbar. Hab vorhin ca 30min hier im Forum gesucht aber nur eine Antwort gefunden die bei mir nicht zu funktionieren scheint (Delphi3):
ShowWindow(self.Handle, SW_HIDE); Hat bei mir irgendwie keine Wirkung, obwohl irgendwo geschrieben wurde dass es so funktionieren sollte. Hat jemand eine Idee?

P.S.: Ich habs ohne Komponente gemacht und will auch wegen allgemeiner Resourcen Einsparung keine verwenden
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Programm nur als Tray sichtbar

  Alt 16. Aug 2004, 17:18
Moin!

Bevor ich mich auf die Suche begebe was bei dir Self ist, folgender Vorschlag: Probier dies mal aus und sage mir, ob dieses Projekt dies ordentlich macht. Wenn ja, dann kannst du den Fehler leicht durch vergleichen herausfinden. Wenn nicht, dann müssen wir uns mal um die Details kümmern warum in D3 die VCL das nicht mag.

MfG
Muetze1
  Mit Zitat antworten Zitat
RuX

Registriert seit: 21. Jul 2004
Ort: Nürnberg
115 Beiträge
 
Delphi 7 Architect
 
#3

Re: Programm nur als Tray sichtbar

  Alt 17. Aug 2004, 09:20
achso ja, self ist bei mir ein formular, ich verwende also das formular handle.
dein beispiel programm scheint auch leider kein delphi3 projekt zu sein, kommt ein stream fehler beim öffnen. source kann ich aber anschaun und wenn ich das richtig sehe wird da ja nur das hinzufügen und entfernen des TNA Icons selber behandelt. mir gings ja aber um das unsichtbarmachen des "normalen" balkens, also der balken der links _neben den tray icons ist. halt der programm balken der bei ganz normalen programmen in der taskbar erscheint. den will ich verstecken das nur noch das trayicon, sprich tna sprich das kleine ding bei der uhr zu sehen ist trotzdem danke schonmal
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Programm nur als Tray sichtbar

  Alt 17. Aug 2004, 10:52
Delphi-Referenz durchsuchenHide heißt die Eigenschaft, die du suchst:

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; // <-- Versteckt das Fenster und läßt es aus der Taskbar verschwinden
    // 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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
RuX

Registriert seit: 21. Jul 2004
Ort: Nürnberg
115 Beiträge
 
Delphi 7 Architect
 
#5

Re: Programm nur als Tray sichtbar

  Alt 17. Aug 2004, 11:51
nein hide kenn ich, das schaltet tform.visible auf false und versteckt somit auch das formular. hm sorry hatte mich unklar ausgedrückt: alles was ich verstecken will ist der balken in der taskleiste nicht aber die anwendung. ich will sozusagen anstatt dem balken ein trayicon. das trayicon soll immer zu sehen sein (aber damit hab ich ja auch keine probleme) und der taskbar programm balken nie.
franz alexanders tbm programm ist zb dazu in der lage, dazu gibs aber leider keine sourcen
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#6

Re: Programm nur als Tray sichtbar

  Alt 17. Aug 2004, 12:06
benutz doch einfach CoolTrayIcon

funzt super!

zum download zb auf
http://www.delphi32.com/vcl/5086/
http://www.chaho.de/templates/show_c...geID=1&GetID=2 (unten in der gruppe system)
http://www.delphipages.com/result.cfm?ID=1368

und vielen, vielen anderen sites
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
RuX

Registriert seit: 21. Jul 2004
Ort: Nürnberg
115 Beiträge
 
Delphi 7 Architect
 
#7

Re: Programm nur als Tray sichtbar

  Alt 17. Aug 2004, 12:16
nein danke wie schon gesagt möchte ich keine fremd komponente benutzen, cooltray icon bläht die anwendung von 200 auf >400k auf. auf dem zielsystem ist resourcensparen angesagt und angebracht und außerdem bin ich neugierig
  Mit Zitat antworten Zitat
Benutzerbild von SleepyMaster
SleepyMaster

Registriert seit: 18. Mai 2003
634 Beiträge
 
#8

Re: Programm nur als Tray sichtbar

  Alt 17. Aug 2004, 12:22
Wenn ich dich richtig verstanden habe dürfte dir das helfen http://www.swissdelphicenter.ch/de/showcode.php?id=54
  Mit Zitat antworten Zitat
RuX

Registriert seit: 21. Jul 2004
Ort: Nürnberg
115 Beiträge
 
Delphi 7 Architect
 
#9

Re: Programm nur als Tray sichtbar

  Alt 17. Aug 2004, 12:45
Zitat von SleepyMaster:
Wenn ich dich richtig verstanden habe dürfte dir das helfen http://www.swissdelphicenter.ch/de/showcode.php?id=54

wunderbar. bei den anderen beispielen wurde bei ShowWindow immer das Handle vom Formular verwendet was nicht funktioniert. Mit dem handle das GetWindow(Handle, GW_OWNER) zurückliefert funktioniert es aber einwandfrei

noch ein kleines manko: windows reserviert anfangs trotzdem platz in der taskleiste für das programm. wenn man ein programm startet schieben sich die anderen ja etwas zusammen, vorrausgesetzt es sind genug. er erzeugt mir also beim start eine lücke. erst wenn ich was neues starte oder ein vorhandenes schließe zeichnet er die leiste neu und entfernt die lücke wieder. aber halb so wild.

aber hat jemand ne ahnung wieso mein tna icon verschwindet (beim drüberfahren, neuzeichnen) wenn ich davor während der laufzeit von formstyle = fsStayOnTop nach formstyle = fsNormal geschaltet habe? andersrum funktionierts
  Mit Zitat antworten Zitat
Igotcha

Registriert seit: 22. Dez 2003
544 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Programm nur als Tray sichtbar

  Alt 13. Sep 2004, 11:50
Zitat von Luckie:
Delphi-Referenz durchsuchenHide heißt die Eigenschaft, die du suchst:
...
Funktioniert bei meinem Anwendungsfall wunderbar. Nur, wie kann ich dann aus meiner Anwendung heraus, wenn das Fenster vom Style "Toolwindow" ist, meine Anwendung per Code minimieren.

Application.minimize, Form.Hide, etc. führen nicht dazu, dass mein Programm dann im Tray angezeigt wird. Im Fenstermenü über "Minimieren" geht es.

Gruß Igotcha
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:40 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