Autor |
Beitrag |
Peter2002
      
Beiträge: 103
Win XP, Win 7
Delphi 2007 / XE3
|
Verfasst: 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
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Fr 27.09.02 16:10
Such mal hier im Forum nach TNA!
Gruß
TINO
|
|
Peter2002 
      
Beiträge: 103
Win XP, Win 7
Delphi 2007 / XE3
|
Verfasst: 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
      
Beiträge: 550
Win XP Prof. Mandrake 10.0
D6
|
Verfasst: 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
      
Beiträge: 1333
Erhaltene Danke: 1
Arch Linux
Eclipse
|
Verfasst: 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 
_________________ Viele Grüße
Jakob
|
|
O'rallY
      
Beiträge: 563
|
Verfasst: 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:
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:
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. 
_________________ .oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 28.09.02 08:55
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
      
Beiträge: 563
|
Verfasst: 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 
      
Beiträge: 103
Win XP, Win 7
Delphi 2007 / XE3
|
Verfasst: 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
|
Verfasst: Mo 30.09.02 09:40
Also, um die Sache abzukürzen - dieser Code funktioniert bei jedem Minimieren:
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 
      
Beiträge: 103
Win XP, Win 7
Delphi 2007 / XE3
|
Verfasst: 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
|
Verfasst: Mo 30.09.02 16:54
Na siehste. 
|
|
MasterHiggins
      
Beiträge: 64
|
Verfasst: 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
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
|
Verfasst: Do 13.02.03 13:57
Titel: Re: TNA Icon ändern?
|
|
MasterHiggins
      
Beiträge: 64
|
Verfasst: 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
|
Verfasst: 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
      
Beiträge: 64
|
Verfasst: 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
      
Beiträge: 64
|
Verfasst: 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
      
Beiträge: 41
|
Verfasst: 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
|
|