AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TTrayIcon mit overlay nummer bereits verfügbar?

TTrayIcon mit overlay nummer bereits verfügbar?

Ein Thema von KodeZwerg · begonnen am 16. Okt 2019 · letzter Beitrag vom 18. Okt 2019
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.216 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: TTrayIcon mit overlay nummer bereits verfügbar?

  Alt 16. Okt 2019, 15:34
Leicht off topic: Sind typische Icons da rechts unten nicht sowieso so klein dass man ein Zahlen-Overlay nicht vernünftig entziffern könnte? Alles was ich da unten rechts kenne stellt etwas "neues" mit einem roten Punkt dar, verzichtet aber darauf, da noch weitere Informationen unterzubringen.

PS: https://devblogs.microsoft.com/oldne...10-00/?p=42583
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TTrayIcon mit overlay nummer bereits verfügbar?

  Alt 16. Okt 2019, 15:46
Hmm..

Bei D6 hatte ich das noch selber gemacht, deshalb meine Frage zum TTrayIcon von Emba:

Dies hat doch eine Property 'Icon', schon mal versucht ein selbst erstelltes Icon mit Overlay diesem zuzuweisen?
Ohne ImageList?
@holger, genau das tat ich, aber mein code (morgen zeig ich) versaut mehr das ergebnis anstelle das da was gutes rauskommt.

Leicht off topic: Sind typische Icons da rechts unten nicht sowieso so klein dass man ein Zahlen-Overlay nicht vernünftig entziffern könnte? Alles was ich da unten rechts kenne stellt etwas "neues" mit einem roten Punkt dar, verzichtet aber darauf, da noch weitere Informationen unterzubringen.

PS: https://devblogs.microsoft.com/oldne...10-00/?p=42583
@günther ......hmmmm.... jo das ginge tatsächlich und vereinfacht alles enorm... der wunsch nach nummer bleibt dennoch erstmal vorhanden.... der gedanke an sich gefällt mir dennoch (wenn nichts klappt wirds so gemacht) guter tipp von Dir !
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: TTrayIcon mit overlay nummer bereits verfügbar?

  Alt 17. Okt 2019, 07:13
Hab was gebastelt was den Anschein hat zu funktionieren.
Das ganze basiert auf einer Projekt JEDI Methode.
Damit ist auch das 15 Bilder Overlay Limit gesprengt.

Im Anhang kleines Binary plus kompl. Source.

Zur Veranschaulichung hier der Haupt-Quelltext.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Forms, Controls, Classes, Graphics, StdCtrls, ExtCtrls, CommCtrl;
// JclShell;

type
  TForm1 = class(TForm)
    TrayIcon1: TTrayIcon;
    CheckBox1: TCheckBox;
    Button1: TButton;
    Image1: TImage;
    Image2: TImage;
    Label1: TLabel;
    Image3: TImage;
    procedure FormShow(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
  Image1.Picture.Icon := TrayIcon1.Icon;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  TrayIcon1.Visible := (Sender as TCheckBox).Checked;
end;

function OverlayIcon(var Icon: HICON; Overlay: HICON; Large: Boolean): Boolean;
// source aus JclShell.pas datei!!!
var
  Source, Dest: HIMAGELIST;
  Width, Height: Integer;
begin
  Result := False;
  if Large then
  begin
    Width := GetSystemMetrics(SM_CXICON);
    Height := GetSystemMetrics(SM_CYICON);
    Source := ImageList_Create(Width, Height, ILC_MASK or ILC_COLOR32, 1, 0);
  end
  else
  begin
    Width := GetSystemMetrics(SM_CXSMICON);
    Height := GetSystemMetrics(SM_CYSMICON);
    Source := ImageList_Create(Width, Height, ILC_MASK or ILC_COLOR32, 1, 0);
  end;
  if Source <> 0 then
  begin
    if (ImageList_AddIcon(Source, Icon) <> -1) and
      (ImageList_AddIcon(Source, Overlay) <> -1) then
    begin
      Dest := HIMAGELIST(ImageList_Merge(Source, 0, Source, 1, 0, 0));
      if Dest <> 0 then
      begin
        DestroyIcon(Icon);
        Icon := ImageList_ExtractIcon(0, Dest, 0);
        ImageList_Destroy(Dest);
        Result := True;
      end;
    end;
    ImageList_Destroy(Source);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Ico: HICON;
begin
  Ico := TrayIcon1.Icon.Handle;
  OverlayIcon(Ico, Image2.Picture.Icon.Handle, False);
  Image3.Picture.Icon.Handle := Ico;
  TrayIcon1.Icon.Handle := Ico;
  TrayIcon1.SetDefaultIcon;
end;

end.
Angehängte Dateien
Dateityp: zip TTrayIcon_Overlay.zip (385,5 KB, 7x aufgerufen)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.291 Beiträge
 
Delphi 12 Athens
 
#4

AW: TTrayIcon mit overlay nummer bereits verfügbar?

  Alt 18. Okt 2019, 07:00
Also ich hab sowas ähnliches vor vielen Jahren auch mal gemacht. Zwar nicht mit Zahlen sondern mit Symbolen aber ist ja egal. Dabei habe ich die Icons in der ImageList zur Laufzeit selbst generiert. Erst in einem TBitmap (Canvas) gezeichnet und dann dynamisch zur ImageList hinzugefügt. Leider finde ich das Projekt nicht mehr...

Bei Windows 10 gibt es auch noch etwas neues neben der TNA (früher mal "DNU" genannt ^^), wo der Button vom Benachrichtigungscenter eingebettet ist. Zwischen Uhr und Aeropeek-Button. Würde mich mal interessieren, ob man da auch eigene Anwendungen rein bekommt. Also nicht ins Benachrichtigungscenter sondern in diesen Buttonbereich der Taskleiste. Weil da gehen größere Symbole, nicht nur 16x16.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:16 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