Autor Beitrag
Peter2002
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 103

Win XP, Win 7
Delphi 2007 / XE3
BeitragVerfasst: Fr 27.09.02 15:18 
hallo,
wie kann ich mein Programm in dem Moment, in dem es minimiert wird nicht in die Taskbar sonder in die TNA schicken?
So wie es z.B. Morpheus tut
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Fr 27.09.02 16:10 
Such mal hier im Forum nach TNA!

Gruß
TINO
Peter2002 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 103

Win XP, Win 7
Delphi 2007 / XE3
BeitragVerfasst: Fr 27.09.02 19:07 
hab ich schon.
wie ich ein Programm in die TNA kriege weis ich auch.
... OK hab mich vielleicht unverständlich ausgedrückt...

Ich will mein Prog. in die TNA schieben, wenn ich das Programm minimiert wird. Wenn ich die entsprechenden Proceduren im OnMinimize aufrufe, dann klappt das genau einmal. Wenn ich das Prog nämlich aus der TNA wiederherstelle und später irgendwann auf minimieren klicke, dann landet das Programm in der Taskbar nicht in der TNA.
Außerdem geht die Animation immer in Richtung Taskbar nicht in Richtung TNA.
Ex0rzist
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 550

Win XP Prof.
Mandrake 10.0

D6
BeitragVerfasst: Fr 27.09.02 19:37 
Hi Peter2002,

ich weiss nicht, wie es jetzt ist, aber Morpheus legt sich nur in die TNA wenn man auf "Schließen"(also das Kreuz) klickt.
Und die Animation geht auch in Richtung Taskbar und anschließend in den Tray.


_____________

Ex0rzist
DeCodeGuru
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1333
Erhaltene Danke: 1

Arch Linux
Eclipse
BeitragVerfasst: Fr 27.09.02 19:51 
wenn du das übers Kreuz in der Titelleiste machen willst, kannst du im OnCloseQuery-Ereignis einfach nur Form1.Hide oder so aufrufen und dann das Beenden unterbinden. Eine Abfrage, ob das Programm beendet werden darf wäre natürlich nicht schlecht, sonst kann man das Programm nicht beenden :wink:

_________________
Viele Grüße
Jakob
O'rallY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: Fr 27.09.02 21:20 
EDH hat folgendes geschrieben:

Falls eine Anwendung, die ihr Symbol im SystemTray zeigt und nicht in der Taskleiste,
verkleinert wird, sieht es unprofessionell aus, wenn die Animation (der Verkleinerung)
zur Taskleiste geht und nicht zum Systemtray. Das erreicht man mit der Funktion:
ausblenden Quelltext
1:
2:
3:
4:
5:
with Screen do
  DrawAnimatedRects(Handle, 
                    3,
                    BoundsRect,
                    Rect(Width-20, Height, Width-10, Height));



Die Animation aus dem Systemtray erreicht man durch Tauschen der beiden Parameter:

ausblenden Quelltext
1:
2:
3:
4:
5:
with Screen do
  DrawAnimatedRects(Handle,
                    3,
                    Rect(Width-20, Height, Width-10, Height),
                    BoundsRect);


Das müsste dein "Animationsproblem" lösen. Ich empfehle auch allen immer wieder die CoolTray-Komponente. Kannste ja mal ausprobieren. :idea:

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 28.09.02 08:55 
ausblenden Quelltext
1:
2:
3:
4:
5:
with Screen do
  DrawAnimatedRects(Handle, 
                    3,
                    BoundsRect,
                    Rect(Width-20, Height, Width-10, Height));

O'rallY hat folgendes geschrieben:
Das müsste dein "Animationsproblem" lösen.

Wenn ich das richtig sehe, dann geht die Animation nach rechts unten?! Dumm nur, weil man die Startleiste ja auch beliebig anordnen kann. Meine ist z.B. am linken Rand, im Hintergrund. Mit anderen Worten - ein Programm, dass diese Funktion aus dem EDH benutzt und sich dann minimiert, trifft trotzdem nicht meine TNA. :)

Warum ist das so wichtig, wie die Animation abläuft? Wäre nicht wichtiger, dass das Programm vernünftig funktioniert? Manch einer (ich z.B.) hat diesen ganzen überflüssigen Animationskram (egal ob nun 9x oder XP) sowieso abgestellt.

Ex0rzist hat folgendes geschrieben:
... aber Morpheus legt sich nur in die TNA wenn man auf "Schließen"(also das Kreuz) klickt. ...

Ich hoffe, dieses Fehlverhalten setzt sich nicht durch. Wenn ich auf Schließen klicke, dann erwarte ich auch, dass sich ein Programm schließt. Zum Minimieren in die TNA kann man auch die Minimieren-Funktion benutzen!


@Peter2002: Kannst du evtl. mal Teile deines Codes posten? Ich habe nämlich ehrlich gesagt keine Probleme mit dem Minimieren in die TNA gehabt. Und das klappt auch mehrfach, nicht bloß einmal. Möglich, dass sich bei dir ein kleiner Fehler eingeschlichen hat oder so.

PS:
Ich habe gerade festgestellt, dass das Fenster nur in die Taskbar und nicht in die TNA minimiert wird, wenn man den Hotkey [WIN-Taste]-M benutzt. Wenn das dein Problem ist, Peter, dann weiß ich -ehrlich gesagt- auch keine Lösung.
Beim normalen Minimieren geht es bei mir allerdings wunderbar. Und auch ohne Komponente, weil´s nur ein paar Zeilen sind.
O'rallY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: Sa 28.09.02 12:54 
MathiasSimmack hat folgendes geschrieben:
Wenn ich das richtig sehe, dann geht die Animation nach rechts unten?!

Das ist ja auch im Allgemeinen der Ort, wo sich die Taskleiste befindet, auch wenn Manche sie woanders hingeräumt haben. Aber wie du schon sagtest, eigentlich ist das ja nicht so wichtig wie die Animation nun aussieht; ich persönlich habe den "ganzen überflüssigen Animationskram" sowieso abgeschaltet. :)

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
Peter2002 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 103

Win XP, Win 7
Delphi 2007 / XE3
BeitragVerfasst: Mo 30.09.02 09:27 
also, mit den prceduren, die ich hier im forum gefunden habe, krieg ich meine Anwendung sehr wohl in die TNA -auch mehrfach- vorausgesetzt ich mache das über einen eigenen Button. Wenn ich das aber im OnMinimize mache, dann geht die animation zuerst zur taskbar, dann zur TNA. Das Programm verschwindet beim ersten mal dann auch aus der Taskbar. Ab da, krieg ich zwar mein Icon in der TNA, aber der Taskbarbutton bleibt da.
PS: OK, Morpheus macht das beim Schließen. Ich mache das aber lieber beim minimieren.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 30.09.02 09:40 
Also, um die Sache abzukürzen - dieser Code funktioniert bei jedem Minimieren:
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    procedure MinimizeToTNA(Sender: TObject);
  public
  protected
    procedure WndProc(var Message: TMessage); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

uses
  ShellAPI;

const
  WM_TRAYMSG = WM_USER + 10;
var
  NID : TNotifyIconData = (
    cbsize           : sizeof(TNotifyIconData);
    uID              : 0;
    uFlags           : NIF_MESSAGE or NIF_ICON or NIF_TIP;
    uCallbackMessage : WM_TRAYMSG;
    szTip            : 'Beispiel';
  );


procedure TForm1.FormCreate(Sender: TObject);
begin
  // die noch notwendigen Zuordnungen
  NID.Wnd := self.Handle;
  NID.hIcon := Application.Icon.Handle;

  // "OnMinimize"-Event ändern
  Application.OnMinimize := MinimizeToTNA;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  // nur zur Sicherheit
  Shell_NotifyIcon(NIM_DELETE,@NID);
end;

procedure TForm1.MinimizeToTNA(Sender: TObject);
begin
  // wenn das TNA-Symbol ezeugt werden konnte, ...
  if(Shell_NotifyIcon(NIM_ADD,@NID)) then
  // ... dann weg mit dem Taskbar-Button
    ShowWindow(Application.Handle,SW_HIDE);
end;

procedure TForm1.WndProc(var Message: TMessage);
begin
  case Message.Msg of
    WM_TRAYMSG:
      case Message.lParam of
        WM_LBUTTONDBLCLK:
          begin
            // weg mit dem TNA-Symbol!
            Shell_NotifyIcon(NIM_DELETE,@NID);
            // den Taskbar-Button wieder anzeigen
            // (egal, wie der Status von "Shell_NotifyIcon" ist)
            ShowWindow(Application.Handle,SW_SHOW);
            // und das hier auch noch, um die Anwendung
            // zu aktivieren und ggf. in den Vordergrund
            // zu holen
            Application.Restore;
          end;
      end;
    else
      inherited WndProc(Message);
  end;
end;

Die Animation ist mir dabei gleichgültig. Hier geht´s nur um das Minimieren und nicht um irgendwelche grafischen Spielereien. Wie gesagt: wenn du den Hotkey [WIN]-M benutzt, bleibt der Taskbar-Button. Bei allen anderen Wegen (Maus, Systemmenü) verschwindet er - immer, egal wie oft du das Programm minimierst und wieder anzeigen lässt.

Vergleich´s mit deinem Code, möglich, dass bei dir nur ein kleiner Fehler den Erfolg verhindert.
Peter2002 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 103

Win XP, Win 7
Delphi 2007 / XE3
BeitragVerfasst: Mo 30.09.02 15:26 
Wirklich nur ein kleiner unterschied, mit großer wirkung.
Ich habe das bisher mit Form1.hide und Form1.show gemacht.
Mit ShowWindow (...) klappts!
Die Animation ist ja nicht so wichtig

Dankeschön
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 30.09.02 16:54 
Na siehste. :)
MasterHiggins
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64



BeitragVerfasst: Do 13.02.03 13:31 
Titel: TNA Icon ändern?
Um Mathias Simmacks Bitte nachzukommen:

Dein Quelltext zum minimieren ins System Tray funktioniert einwandfrei, nur leider bin ich zu sehr Anfänger um den Quelltext zu durchsteigen :cry:

Deshalb zwei Fragen:

1. Ich habe meiner Form1 ein eigenes Icon zugewiesen, leider ist das Icon vom minimierten Programm wieder das Standard-Delphi-Icon. Wie kann ich das ändern?

2. Keine Ahnung ob man mir da helfen kann, aber ab und zu (ab und zu auch nicht) verschwindet das Icon aus dem SystemTray, im Taskmanager ist das Programm aber noch aktiv. Ich glaube das passiert immer dann wenn sich irgendetwas im System Tray ändert (z.B. Netscape Mailbenachrichtigung springt an). Wie kann ich das ändern?

Tausend Dank für eure Mühe:

MasterH
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 13.02.03 13:57 
Titel: Re: TNA Icon ändern?
MasterHiggins hat folgendes geschrieben:
1. Ich habe meiner Form1 ein eigenes Icon zugewiesen, leider ist das Icon vom minimierten Programm wieder das Standard-Delphi-Icon. Wie kann ich das ändern?

ausblenden Quelltext
1:
NID.hIcon := Application.Icon.Handle;					

ersetzen durch:
ausblenden Quelltext
1:
NID.hIcon := Form1.Icon.Handle;					


Zitat:
2. Keine Ahnung ob man mir da helfen kann, aber ab und zu (ab und zu auch nicht) verschwindet das Icon aus dem SystemTray, im Taskmanager ist das Programm aber noch aktiv. Ich glaube das passiert immer dann wenn sich irgendetwas im System Tray ändert (z.B. Netscape Mailbenachrichtigung springt an). Wie kann ich das ändern?

Dürfte normalerweise nicht geschehen. Auch nicht, wenn neue Icons dazu kommen oder entfernt werden. Ist mir bisher noch nie aufgefallen. Der o.g. Code reagiert ohnehin nur auf das Minimieren und Wiederherstellen - nur dann wird das TNA-Icon gesetzt oder wieder entfernt.
MasterHiggins
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64



BeitragVerfasst: Do 13.02.03 14:04 
Titel: Weg isses
Habe ich gemacht, aber dann ist das Icon im System Tray unsichtbar :?:

Was mache ich denn jetzt schon wieder falsch??
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 13.02.03 14:08 
Dann lass die Zeile so wie im Originalcode, und benutze das Icon für deine Anwendung. Sprich: Menü -> Projekt -> Optionen -> Anwendung -> Symbol. Dann sollte es gehen.
MasterHiggins
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64



BeitragVerfasst: Do 13.02.03 14:23 
Titel: nö
leider der gleiche effekt.
Abgesehen davon wäre dann ja auch der Pfad absolut fest vorgeschrieben und das Programm würde das Icon auf einem anderen Rechner nicht mehr finden, oder wird das Icon in die Exe eingebunden?
MasterHiggins
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 64



BeitragVerfasst: Do 13.02.03 14:35 
Titel: Halt, Stop, Polizei
Ich Idi** habe vergessen wieder auf
NID.hIcon := Application.Icon.Handle;
zurückzuändern!

Danke danke und Entschuldigung.

Wenn das Icon jetzt noch fest in der exe gespeichert wird ist alles perfekt.

DANKE
makena76
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Fr 20.06.03 20:23 
Hallo,

der Quellcode von Matthias funktioniert perfekt :). Nun habe ich aber das Problem, dass ich mit MinimizeToTNA nicht die ganze Applikation minimieren will, sondern nur das Hauptfenster. Evtl. offene Unterfenster (die zur Laufzeit per Create / Show dargestellt werden) sollen weiter offen bleiben. Was muss ich denn da im Code abändern?

Und wie kann ich minimierte Unterfenster anzeigen lassen, wenn das Hauptfenster minimiert ist?

Danke.

cu makena