AGB  ·  Datenschutz  ·  Impressum  







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

Das Problem mit dem vergessenem TrayIcon

Ein Thema von Popov · begonnen am 2. Mär 2012 · letzter Beitrag vom 3. Mär 2012
Antwort Antwort
Popov
(Gast)

n/a Beiträge
 
#1

AW: Das Problem mit dem vergessenem TrayIcon

  Alt 2. Mär 2012, 13:39
Gibt es eine Standardkomponente in Delphi 7?

Ich hab mit der Zeit so viele Versionen getestet, eigene Kreationen, aber auch aus dem Internet. Somit kann ich einen beliebigen Code zeigen. Ich glaube die habe ich zuletzt verwendet: http://www.delphipraxis.net/30716-post2.html , da sie sogar passabel funktioniert und der Icon verschwindet fast immer. Einige Male blieb er aber.

Und bevor himitsu wieder fragt, alle enthalten diese Zeile: Shell_NotifyIcon(NIM_DELETE ...
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.222 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Das Problem mit dem vergessenem TrayIcon

  Alt 2. Mär 2012, 13:49
Gibt es eine Standardkomponente in Delphi 7?
AFAIK Nein. Erst in neueren Delphi-Versionen liefert Borland/Codegear/Embaracadero eine Komponenten mit.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

AW: Das Problem mit dem vergessenem TrayIcon

  Alt 2. Mär 2012, 14:14
Hi, meinst du mit:

Zitat:
"Und alles funktioniert auch wie ich es will, nur nicht wenn das Programm beendet wird. "
Inder IDE per Stopp oder bei einem "normalem" Beenden des Programmes ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: Das Problem mit dem vergessenem TrayIcon

  Alt 2. Mär 2012, 14:22
Ich glaube das ist dann der Fall, wenn das Programm abrupt terminiert wird, sodass es nicht aufräumen und somit den Tray wegschießen kann!
Weil unter normalen Umständen verschwindet der auch.
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#5

AW: Das Problem mit dem vergessenem TrayIcon

  Alt 2. Mär 2012, 15:24
Inder IDE per Stopp oder bei einem "normalem" Beenden des Programmes ?
Beides

Zitat von Aphton:
Ich glaube das ist dann der Fall, wenn das Programm abrupt terminiert wird,
Das ist schon in paar hundert mal in paar hundert Programmen passiert. Ich glaube nicht, dass ich sie alle terminiert habe. Nein, soweit hat alles schon seine Richtigkeit und spätestens bei FormDestroy wird alles beendet.

Zitat von shmia:
Es gibt ja 3 Ansätze für Tray Icons:
a) ich hab nichts gegen Komponenten und nehme sie wenn es sein soll, aber aufgrund einige schlechte Erfahrungen gehe ich sehr sparsam mit zusätzlichen Komponenten. Ich investiere (privat) liebe einen Tag mehr in das Programm und kann mir sicher sein, dass ich in 10 Jahren in der fünf höheren Version das Programm aus dem Archiv holen kann und es funktioniert ohne Probleme, und ohne dass ich etwas nachinstallieren muß was vielleicht nicht mehr kompatibel ist. Wie gesagt - privat.

b) gegen eine Klasse habe ich nichts und wenn alles fehlerfrei funktioniert, dann mache ich es sofort. Aber auch wenn die letzte Version relativ gut funktioniert, so nicht 100% fehlerfrei. Mich wundert es, dass es hier noch keinem aufgefallen ist, allerdings ist es nicht ein Problem einzig von mir. Ich hatte schon einige Delphi-Fremdprogramme bei denen auch diese Probleme vorkamen.

c) mag sein, aber nicht selten schreibe ich die paar Zeilen schneller als das ich eine Unit oder Klasse erst suchen muß. Im Grunde genommen sind es nur paar Zeilen Code, wenn man nichts komplexes will, wie z.B. wechselnde Icons, Reaktionen auf verschiedene Aktionen, usw. Wenn man nur ein PopupMenu aufrufen will, sind es nur paar Zeilen.

Aber hier geht es nicht drum was die einzig richtige Methode ist, sondern warum das Problem besteht. Soll ich irgendwann im hohen Alter meinen Enkeln erzählen, ich hatte da ein Problem, ich habe es aber nicht gelöst, ich habe einfach eine Fremdkomponente genommen?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Das Problem mit dem vergessenem TrayIcon

  Alt 2. Mär 2012, 15:34
Du hast doch ne CallBack in der Shell_NotifyIcon API
Welche Message verwendest du denn dafür?

Und das wäre eine möglichkeit!

FindWindowEx
GetClientRect
SendMessage

gruss

Geändert von EWeiss ( 2. Mär 2012 um 16:17 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: Das Problem mit dem vergessenem TrayIcon

  Alt 2. Mär 2012, 16:15
Du hast doch ne CallBack in der Shell_NotifyIcon API
Welche Message verwendest du denn dafür?
Guck dir mal das Beispiel hier an: http://www.delphipraxis.net/30716-post2.html In wichtigen Punkten waren meine Zeilen gleich. Unterschiede lagen in Details, wie z. B. andere Bezeichner usw. Wobei ich durchaus experimentierfreudig war, denn es gibt viele Möglichkeiten um ans Ziel zu kommen, aber alle waren in wichtigen Punkten gleich.

Wobei sich das obere Beispiel in einem Punkt von allen meinen Versuchen unterscheidet: es führt in FormDestroy die ganze Prozedur ein zweites Mal durch. Ich, und eigentlich auch die anderen Beispiele, führten in FormDestroy einfach nur Shell_NotifyIcon(NIM_DELETE, @NotifyIconData) aus, hier ward alles noch mal zugewiesen. Aber bis auf NotifyIconData.Wnd Zuweisung sehe ich da keinen nennenswerten Unterschied. Trotzdem funktioniert der Code besser als die anderen. Aber auch nicht perfekt.

Zitat:
Und das wäre eine möglichkeit!

FindWindowEx
GetClientRect
SendMessage
Ich hab sehr vieles versucht, auch den Tray Bereich mit Messages Mausklick Simulationen bombardiert. Richtig gebracht hat nichts.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: Das Problem mit dem vergessenem TrayIcon

  Alt 2. Mär 2012, 16:17

Zitat:
Und das wäre eine möglichkeit!

FindWindowEx
GetClientRect
SendMessage
Ich hab sehr vieles versucht, auch den Tray Bereich mit Messages Mausklick Simulationen bombardiert. Richtig gebracht hat nichts.
Du solltest halt auch dafür sorgen das die Icons angesprochen werden.
Das sollte gehen. (Auf die schnelle zusammengetippt (Ungetestet))
Warnung API vom Cowboy-Programmierer

Delphi-Quellcode:
procedure CleanTray;
  {Entfernt ungenutzte icons vom system tray}
var
   TrayNotifyHwnd: HWND;
   ParentHwnd: HWND;
   TrayWindowRect: TRect;
   x: integer;
   y: integer;
begin
   ParentHwnd := FindWindow('Shell_TrayWnd', '');
   //Hwnd vom TrayNotifyWnd ermitteln
   TrayNotifyHwnd := FindWindowEx(ParentHwnd, 0, 'TrayNotifyWnd', '');
   //ClientRect von der Classe TrayNotifyWnd einlesen
   GetClientRect(TrayNotifyHwnd, TrayWindowRect);

   x :=0;
   y :=0;

   while x < TrayWindowRect.Right do begin
     while y < TrayWindowRect.Bottom do begin
       SendMessage(TrayNotifyHwnd, WM_MOUSEMOVE, 0, (y shl 16) + x);
       y := y + 5;
     end;
     x := x + 5;
   end;
end;
gruss

Geändert von EWeiss ( 2. Mär 2012 um 16:20 Uhr)
  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 18:45 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