Ich hatte das Problem auch längere Zeit, dass bei dem erzeugten Overlay-Icon die Transparenz fehlte.
Nach ein paar weiteren Versuchen habe ich eine Lösung gefunden, die für mich funktioniert und ein transparentes Overlay-Icon in der Traybar anzeigt: der temporäre Bitmap-Canvas muss zuerst mit einem psClear-Style übermalt werden.
Delphi-Quellcode:
procedure TForm1.CreateOverlayTrayIcon(iBasis, iOverlay: Integer);
var
aBitmap: TBitMap;
OverlayIndex: Integer;
begin
aBitmap := TBitMap.Create;
try
//Temp. Bitmap transparent bemalen
aBitmap.Width := ilOverlayIcons.Width;
aBitmap.Height := ilOverlayIcons.Height;
aBitmap.Canvas.Pen.Style := psClear;
aBitmap.Canvas.Rectangle(0, 0, aBitmap.Width+1, aBitmap.Height+1);
//Basis und Overlay auf Bitmap zeichnen
OverlayIndex := 0;
ilOverlayIcons.Overlay(iOverlay, OverlayIndex);
ilOverlayIcons.DrawOverlay(aBitmap.Canvas, 0, 0, iBasis, OverlayIndex, True);
//Bitmap zu Imageliste hinzufügen
ilTrayIcon.Clear;
ilTrayIcon.Add(aBitmap, nil);
//Image in TrayIcon neu zeichnen
TrayIcon1.IconIndex := -1;
TrayIcon1.IconIndex := 0;
finally
aBitmap.Free;
end;
end;