AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Programmicon verschwendet bei Mouseover aus der TNA
Thema durchsuchen
Ansicht
Themen-Optionen

Programmicon verschwendet bei Mouseover aus der TNA

Offene Frage von "Svenkan"
Ein Thema von Svenkan · begonnen am 17. Apr 2008 · letzter Beitrag vom 20. Apr 2008
Antwort Antwort
Svenkan

Registriert seit: 10. Feb 2007
Ort: Bersenbrück
547 Beiträge
 
Delphi 7 Enterprise
 
#1

Programmicon verschwendet bei Mouseover aus der TNA

  Alt 17. Apr 2008, 22:06
Hallo!
Ich lasse bei meinem Programm, wenn es minimiert wird, dass Icon in die TNA packen. Ein Anwender hat nun das Problem, dass das Icon bei einem Mouseover verschwindet und er kann nicht mehr auf das Programm zugreifen. Ich habe damals mal einen Code dafür gefunden.

uses CoolTrayIcon
Delphi-Quellcode:
const
  WM_TASKBAREVENT = WM_USER + 1;
Delphi-Quellcode:
   procedure WndProc(var Msg: TMessage); override;
   procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
// auf Mausklicks reagieren, Fensterprozedur erweitern

procedure THauptform.WndProc(var Msg: TMessage);
var
  Point: TPoint;
begin
  // WM_USER + 20 ist unsere TNA Icon Nachricht
  if Msg.Msg = WM_USER + 20 then
  begin
    // im lParam steht die Nachricht
    case Msg.lParam of
      // rechte Taste für Menü
      WM_RBUTTONDOWN:
        begin
          SetForegroundWindow(Handle);
          GetCursorPos(Point);
          PopUpMenu1.PopUp(Point.X, Point.Y);
        end;
      // linke Taste
      WM_LBUTTONDOWN:
        begin
          //ShowMessage('links runter');
        end;
      // Doppelklick
      WM_LBUTTONDBLCLK:
        begin
          // Fenster anzeigen
          Hauptform.Show;
          // Icon entfernen
          Shell_NotifyIcon(NIM_DELETE, @IconData);
        end;
    end;
  end
  // Taskbar wurde im System registriert, Icon einfügen
  else if Msg.Msg = TaskBarNewReg then
  begin
    Shell_NotifyIcon(NIM_ADD, @IconData);
  end;
  inherited;
end;

////////////////////////////////////////////////////////////////////////////////
// beim Minimieren Form verstecken und Icon in die TNA

procedure THauptform.WMSysCommand(var Message: TWMSysCommand);
begin
  // Fenster wurde minimiert
  if Message.CmdType and $FFF0 = SC_MINIMIZE then
  begin
    Hide;
    // Icon in der TNA anzeigen
    Shell_NotifyIcon(NIM_ADD, @IconData);
  end
  else
    inherited;
end;

////////////////////////////////////////////////////////////////////////////////
// Beim Beenden Icon entfernen

procedure THauptform.FormDestroy(Sender: TObject);
begin
  Shell_NotifyIcon(NIM_DELETE, @IconData);
end;

////////////////////////////////////////////////////////////////////////////////
// Beim Erstellen des Formulares TNotifyIconData-Struktur initialisieren
Im Form-Create:

Delphi-Quellcode:
  // Message ID für Message merken, die gesendet wird, wenn die Taskbar im
  // System registriert wird.
  TaskBarNewReg := RegisterWindowMessage('TaskbarCreated');
  ///IconData Struktur füllen
  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 := 'VPlan+ v1.2.3 /8';
  // Icon einfügen. Bei Bedarf sofort
  //Shell_NotifyIcon(NIM_ADD, @IconData);
Er benutzt, genau wie ich, WindowsXP SP2.
Hat vlt jemand ähnlcihe Erfahrungen und kann mir sagen, wie man das Problem löst?
Sven Kannenberg
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Programmicon verschwendet bei Mouseover aus der TNA

  Alt 17. Apr 2008, 22:26
in aller Regel verschwindet das Icon wenn eine Interaktion mit dem Trayicon erfolgt (Mouseover etc.) und die Nachricht dafür nicht an das angegebene Handle gesendet werden kann. Das kommt vor wenn zum Beispiel das angegebene Handle aus deinem FormCreate nicht mehr existent ist weil intern das Fenster neu erzeugt wurde.

Was mich wundert. Du bindest in den Uses das CoolTrayIcon ein aber am Ende nutzt du die Komponente gar nicht sondern machst trotzdem alles direkt (Icon registrieren etc.). Wenn du die Komponente verwendest sollte dein Problem verschwunden sein weil die Komponente intern ein eigenes Fenster erzeugt was über die ganze Zeit erhalten bleibt und nicht durch Anzeigen des Fensters eventuell neu erstellt wird.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Svenkan

Registriert seit: 10. Feb 2007
Ort: Bersenbrück
547 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Programmicon verschwendet bei Mouseover aus der TNA

  Alt 18. Apr 2008, 11:55
Mal ganz davon abgesehn, dass du vollkommen Recht hast, habe ich jetzt komplett auf's CoolTrayIcon umgestellt. Das Problem besteht bei diesem User aber immer noch.
Sven Kannenberg
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Programmicon verschwendet bei Mouseover aus der TNA

  Alt 18. Apr 2008, 12:20
Hat der User vielleicht Dein Programm komplett geschlossen?
Dann bleibt nämlich manchmal das Icon in der TNA, obwohl das Programm nicht mehr läuft.
Erst bei Drüberfahren merkt Windows schliesslich, dass dieses Icon entfernt werden muss.

Als guter Tip kommt da immer:
"Das Kreuz oben rechts soll das Programm in die TNA minimieren, nicht komplett schliessen".
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Programmicon verschwendet bei Mouseover aus der TNA

  Alt 18. Apr 2008, 12:35
Zitat von RavenIV:
Hat der User vielleicht Dein Programm komplett geschlossen?
Dann bleibt nämlich manchmal das Icon in der TNA, obwohl das Programm nicht mehr läuft.
Aber nur, wenn der Programmierer Mist gebaut hat.

Zitat:
Als guter Tip kommt da immer:
"Das Kreuz oben rechts soll das Programm in die TNA minimieren, nicht komplett schliessen".
Das war jetzt hoffentlich ironisch gemeint. Wenn ich auf das Keruz klicke, dann erwarte ich, dass sich das Hauptfenster schliesst und der Prozess beendet wird.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Programmicon verschwendet bei Mouseover aus der TNA

  Alt 18. Apr 2008, 12:59
Zitat von Luckie:
Zitat von RavenIV:
Als guter Tip kommt da immer:
"Das Kreuz oben rechts soll das Programm in die TNA minimieren, nicht komplett schliessen".
Das war jetzt hoffentlich ironisch gemeint. Wenn ich auf das Keruz klicke, dann erwarte ich, dass sich das Hauptfenster schliesst und der Prozess beendet wird.
Meine User haben sich mehrfach beschwert, weil das so war.
Nun gehen alle meine TNA-Programm nicht mehr komplett weg, sondern werden in die TNA minimiert.

Und ich hab's so eigentlich auch lieber.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
s-off
(Gast)

n/a Beiträge
 
#7

Re: Programmicon verschwendet bei Mouseover aus der TNA

  Alt 18. Apr 2008, 13:05
Zitat von RavenIV:
Und ich hab's so eigentlich auch lieber.
Ich auch. Dennoch sollte man diese Entscheidung dem Anwender überlassen.
  Mit Zitat antworten Zitat
Svenkan

Registriert seit: 10. Feb 2007
Ort: Bersenbrück
547 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Programmicon verschwendet bei Mouseover aus der TNA

  Alt 20. Apr 2008, 00:20
Zitat von Luckie:
Zitat von RavenIV:
Hat der User vielleicht Dein Programm komplett geschlossen?
Dann bleibt nämlich manchmal das Icon in der TNA, obwohl das Programm nicht mehr läuft.
Aber nur, wenn der Programmierer Mist gebaut hat.
Der Fehler tritt nur bei dem einen Anwender auf, sonst hab ich bisher keinerlei solcher Meldungen bekommen und auch bei mir selbst läuft es (ebenfalls unter WinXP SP2) wunderbar. Das ist ja das seltsame. Und das Programm ist nicht abgestürzt, da es im Taskmanager immer noch vorhanden ist (denn darüber muss er das Programm dann zwangsweise beenden).
Sven Kannenberg
  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 17:14 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