TrayIcon PNG cd32bit przeźroczystość

0

Witam serdecznie, otóż mam taki mały problem próbuję dodać ikonę do tray'a w formacie *.png lecz z pełną transparencją
napisałem sobie coś takiego dla testu:

uses
PngImage

...

procedure TForm1.Button1Click(Sender: TObject);
var
  ImageList: TImageList;
  Bitmap: TBitmap;
  Icon: TIcon;
  PNG: TPngImage;
begin
  PNG := TPngImage.Create;
  PNG.LoadFromFile(WideString(ExtractFilePath(Application.ExeName) + 'test.png')
    );
  Bitmap := TBitmap.Create;
  Icon := TIcon.Create;
  try
    Bitmap.Assign(PNG);
    ImageList := TImageList.CreateSize(Bitmap.Width, Bitmap.Height);
    try
      ImageList.AddMasked(Bitmap, Bitmap.TransparentColor);
      ImageList.GetIcon(0, Icon);
      TrayIcon.Icons := TImageList.Create(Self);
      TrayIcon.Icons.Clear;
      TrayIcon.Icon.Assign(Icon);
      TrayIcon.Icons.AddIcon(Icon);
      TrayIcon.IconIndex := 1;
      TrayIcon.Visible := true;
      TrayIcon.Animate := true;
    finally
      ImageList.Free;
    end;
  finally
    Bitmap.Free;
    PNG.Free;
    Icon.Free;
  end;

end;

oczywiście działa jednak nie do końca
user image
user image
prawidłowo powinno to wyglądać jak ikona po prawej a po lewej jest ikona dodawana przez e mnie
rozumiem że to dla tego że konwertuje png do bitmapy a potem przypisuje jako ikona i transparencja jest wytracana
czy może potrafi mi ktoś pomóc w poprawnym wyświetleniu tej ikony ??
a może istnieje inne lepsze rozwiązanie ??
Pozdrawiam

0

No właśnie nie bardzo znam taką możliwość
bo o ile do bitmapy da się przypisać "każdą" grafikę o tyle do ikony da się przypisać tylko bitmapę chyba że o czymś nie wiem;
Cannot assign TIcon to a PngImage

0

programem do edycji ikonek a nie programowo.

0

Wybacz ale ja potrzebuje dodawać do tray ikony *.png :)

2

Do tego celu używasz TPngImageList. Następnie wskazujesz na ten komponent z grafikami w komponencie od zasobnika.
I nie trzeba konwertować na ICO.

0

Faktycznie Opi, masz absolutną rację. Poradziłem sobie w taki sposób:

var
  PNG: TPngImage;
begin
  Form1.TrayIcon1.Visible := true;
  try
    PNG := TPngImage.Create;
    PNG.LoadFromFile(WideString(ExtractFilePath(Application.ExeName) + 'test.png'));

    PngImageList1.Clear;
    PngImageList1.AddPng(PNG, PNG.TransparentColor);
    Form1.TrayIcon1.IconIndex := 1;
  finally
    PNG.Free;
  end;
end;

user image
Dziękuję wszystkim za pomoc :)

0

a jesli mozna zapytac to z kad macie pngimagelist?
ja uzywam delphi 7 o raz png image 1.5 i nie ma w tej paczce pngimagelist
moze uzywasz innej paczki obslugujacej png lub nowszego delphi ktore obsluguje?

0

Delphi 2010 + PNGComponents

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.