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
 
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
 


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 03:08 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