AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Icon im Tray (TNA) animieren bzw. ändern
Thema durchsuchen
Ansicht
Themen-Optionen

Icon im Tray (TNA) animieren bzw. ändern

Ein Thema von Peter Müller · begonnen am 4. Feb 2010 · letzter Beitrag vom 7. Feb 2010
Antwort Antwort
Peter Müller

Registriert seit: 15. Mär 2006
Ort: Stuttgart
22 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Icon im Tray (TNA) animieren bzw. ändern

  Alt 4. Feb 2010, 22:54
Hallo,

möchte gerne ein Icon im Tray (TNA) animieren bzw. zur Laufzeit verändern.
Das Handle auf das Icon habe ich, wie bekomme ich Zugriff auf dessen Canvas?

Vielen Dank für eure Anworten,
"Der Erfolg besteht manchmal in der Kunst, das für sich zu behalten, was man nicht weiß." Sir Peter Ustinov
  Mit Zitat antworten Zitat
Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
293 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Icon im Tray (TNA) animieren bzw. ändern

  Alt 4. Feb 2010, 23:12
Hai!

Handle? Hast du da nicht eine Komponente genommen? Dort kann man eine TImageList hinterlegen und ablaufen lassen. TCoolTrayIcon oder das Standardteil aus den neueren Versionen.

Stefan
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

Re: Icon im Tray (TNA) animieren bzw. ändern

  Alt 4. Feb 2010, 23:22
Hi,

eine andere Möglichkeit wäre die Verwendung von Shell_NotifyIcon():
Hier einige Auszüge.... Geht nur mit ICONs zum convertieren zw. bmp und ICO gibs hier auch code.
Farbige TrayIcons funktionieren erst ab WinXp.

Das CahngeTrayIcon in nen Thread gepackt ne TimageList mit ICONs dazu und fertig ist das Ganze... Die "WM_USER_ICONMSG" dient lediglich um Mausklicks auf dem icon auszuwerten. Diese Message muss in der WndProc des in "FIconData.Wnd" angegebenen Fensters entsprechend abgefangen werdne.

Shalom

Delphi-Quellcode:
uses
  ShellApi;

const
  WM_USER_ICONMSG = WM_USER + 123;

var
    FIconData: TNotifyIconData;


function GetAppIcon(var AIcon: TIcon; const ASmall: Boolean = False): Boolean;
const
  dwIconFlags : array[Boolean]of DWORD = (SHGFI_LARGEICON, SHGFI_SMALLICON);
var
  fi : TSHFileInfo;
begin
  Result := False;
  Assert(AIcon <> nil);

  // Symbol der Datei aus dem System ermitteln
  // Typ (= groß/klein) richtet sich nach dem
  // Funktionsparameter "fSmall" (default = false)
  ZeroMemory(@fi, sizeof(fi));
  SHGetFileInfo(pchar(Application.Exename), 0, fi, sizeof(fi),
    SHGFI_ICON or dwIconFlags[ASmall]);

  // Symbol ermittelt
  if (fi.hIcon <> 0) then
  begin
    AIcon.Handle := fi.hIcon;
    Result := True;
  end;
end;


procedure CreateIconData;
var
  i: Integer;
begin

    GetAppIcon(FAppIconICO, True);
    FIconData.cbSize := SizeOf(FIconData);
    FIconData.Wnd := FWindow.Handle;
    FIconData.uID := 123;
    FIconData.uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
    FIconData.uCallBackMessage := WM_USER_ICONMSG;
    FIconData.hIcon := FAppIconICO.Handle;
    for i := 1 to Length(Application.Title) do begin
      FIconData.szTip[i-1] := Application.Title[i];
    end;
end;



procedure AddIconToTNA;
begin
  if not FTNAIconActive then
    if Shell_NotifyIcon(NIM_ADD, @FIconData) then begin
      FTNAIconActive := True;
    end;
end;


procedure ChangeTrayIcon(AIcon: HICON; const AHint: String);
var
  i: Integer;
begin

    if AIcon <> INVALID_HANDLE_VALUE then
      FIconData.hIcon := AIcon;
    for i := 1 to Length(AHint) do begin
      FIconData.szTip[i-1] := AHint[i];
    end;
    Shell_NotifyIcon(NIM_MODIFY, @FIconData); //Icon aktualisiern

end;
  Mit Zitat antworten Zitat
Peter Müller

Registriert seit: 15. Mär 2006
Ort: Stuttgart
22 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

Re: Icon im Tray (TNA) animieren bzw. ändern

  Alt 7. Feb 2010, 19:14
Danke für die Antworten, habe mich wohl nicht klar genug ausgedrückt:

Eigentlich möchte ich einen Text in der TNA anzeigen, der zu lang für ein einzelnes Icon ist.
Habe es mit mehreren TextTrayIcons versucht, was auch funktioniert, aber ein längerer Text sollte nicht nach 2 Zeichen unterbrochen sein und es sieht halt irgendwie komisch aus, wenn auf jedem Icon nur 2 Zeichen stehen.

Meine Idee war, mehrere CoolTrayIcons zu nehmen und den Text auf diese zu verteilen. Was mich dabei stört, sind die Trennpixel zwischen den Icons. Bekomme ich die irgendwie weg?

Könnte ich nicht auch ein Panel oder Label über mehrere CoolTrayIcons legen und darauf den Text schreiben, also den Inhalt der Icons mitsamt Trennpixel einfach überschreiben? Wie bekomme ich dann die Positionen (X/Y) aller meiner Icons auf dem Desktop?

Vielen Dank für eure Antworten.
"Der Erfolg besteht manchmal in der Kunst, das für sich zu behalten, was man nicht weiß." Sir Peter Ustinov
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Icon im Tray (TNA) animieren bzw. ändern

  Alt 7. Feb 2010, 19:17
Der Bereich ist nicht dazu gedacht einen Text darzustellen, sondern eben nur Icons. Und ein Programm, welches da unter gleich drei Icons produziert, wäre nicht lange auf meinem Rechner.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Icon im Tray (TNA) animieren bzw. ändern

  Alt 7. Feb 2010, 19:19
Außerdem kann man ja auch ungenutzte Icons im Tray-Bereich ausblenden. Deine Idee wird also wohl nicht so richtig funktionieren. Was du dir evtl. anschauen könntest, wäre ein sog. Hier im Forum suchenDeskband.

mfg
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
Peter Müller

Registriert seit: 15. Mär 2006
Ort: Stuttgart
22 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

Re: Icon im Tray (TNA) animieren bzw. ändern

  Alt 7. Feb 2010, 20:04
Es war nicht meine Idee, aber ein mir bekannter Admin möchte unbedingt auf allen Computern in der TNA direkt links neben der Uhr einen Text stehen haben.
Ein Deskband kommt nicht in Frage, da es zu weit links liegt, vom Benutzer ausgeblendet werden kann und für jeden Benutzer einzeln eingeblendet werden muss. Diese Lösung hatte ich ihm bereits präsentiert. Auch die "tolle", funktionierende "zwei Zeichen je Icon"-Lösung fand bei ihm keine Gnade. Auch meine Lösung mit Überschreiben der Uhr mochte er nicht, da wohl ein paar Anwender allergisch reagieren, wenn sie "ihre" Uhr nicht mehr sehen...

Icons kann man so einrichten, dass sie immer angezeigt werden, das ist also nicht mein Problem.

Über TextTrayIcon1.Icon.Handle bzw. CoolTrayIcon1.Icon.Handle bekomme ich das Handle auf das Icon vom Typ HICON. Wie kann ich daraus die Position auf dem Desktop feststellen?

In diesem Artikel Icons in Win32 bekomme ich über die Funktion GetIconInfo zwar xHotspot und yHotspot, bin mir aber irgendwie nicht sicher, ob das die gesuchten Koordinaten sind. Vielleicht habe ich in dem etwas längeren Artikel auch die richtige Stelle überlesen...
"Der Erfolg besteht manchmal in der Kunst, das für sich zu behalten, was man nicht weiß." Sir Peter Ustinov
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Icon im Tray (TNA) animieren bzw. ändern

  Alt 7. Feb 2010, 20:08
Zitat von Peter Müller:
Icons kann man so einrichten, dass sie immer angezeigt werden, das ist also nicht mein Problem.
Richtig, aber du hast auch keinen Einfluss darauf, wo die Icons in der TNA angezeigt werden. Noch mal, die TNA ist einfach nicht dafür gedacht Text anzuzeigen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Peter Müller

Registriert seit: 15. Mär 2006
Ort: Stuttgart
22 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#9

Re: Icon im Tray (TNA) animieren bzw. ändern

  Alt 7. Feb 2010, 20:17
Doch, das habe ich nämlich bereits programmiert. Alle Icons werden so sortiert, dass meine in der richtigen Reihenfolge stehen und zwar das letzte ganz rechts. Auch daran, dass neue Symbole auftauchen und wieder verschwinden können, habe ich bereits gedacht und meine Symbole werden notfalls neu angeordnet.

Das ist alles soweit gelöst, jetzt benötige ich nur noch deren Koordinaten auf dem Desktop...

Geht nicht, gibt es bei mir nicht.
"Der Erfolg besteht manchmal in der Kunst, das für sich zu behalten, was man nicht weiß." Sir Peter Ustinov
  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 09:52 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