TrayIcon PNG cd32bit przeźroczystość

TrayIcon PNG cd32bit przeźroczystość
kamerok
  • Rejestracja:prawie 18 lat
  • Ostatnio:5 dni
  • Postów:76
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:

Kopiuj
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


KAmerOK
edytowany 1x, ostatnio: kamerok
cimak
a nie mozesz po prostu zapisac png jako ikony?
kamerok
No właśnie nie bardzo znam taką możliwość Cannot assign TIcon to a PngImage
kamerok
  • Rejestracja:prawie 18 lat
  • Ostatnio:5 dni
  • Postów:76
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


KAmerOK
edytowany 4x, ostatnio: kamerok
cimak
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 9 lat
  • Postów:1668
0

programem do edycji ikonek a nie programowo.

kamerok
  • Rejestracja:prawie 18 lat
  • Ostatnio:5 dni
  • Postów:76
0

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


KAmerOK
edytowany 1x, ostatnio: kamerok
Opi
  • Rejestracja:ponad 20 lat
  • Ostatnio:3 dni
  • Postów:1030
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.

kamerok
  • Rejestracja:prawie 18 lat
  • Ostatnio:5 dni
  • Postów:76
0

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

Kopiuj
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 :)


KAmerOK
edytowany 4x, ostatnio: kamerok
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?

kamerok
  • Rejestracja:prawie 18 lat
  • Ostatnio:5 dni
  • Postów:76
0

Delphi 2010 + PNGComponents


KAmerOK
edytowany 1x, ostatnio: kamerok

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.