PNG alpha jako tło

0

Tworze tlo okna z png z kanalem alpha:

var
  Bitmap32: TBitmap32;
  PNG: TPNGObject;
  BlendFunction: TBlendFunction;
  P: TPoint;
  Size: TSize;
begin
  Bitmap32 := TBitmap32.Create;
  PNG := TPNGObject.Create;
  PNG.Assign(Image.Picture.Graphic);
  PNGToBitmap32(PNG, Bitmap32);

  SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);

  BlendFunction.BlendOp := AC_SRC_OVER;
  BlendFunction.BlendFlags := 0;
  BlendFunction.SourceConstantAlpha := 255;
  BlendFunction.AlphaFormat := AC_SRC_ALPHA;
  P := Point(0, 0);
  Size.cx := Bitmap32.Width;
  Size.cy := Bitmap32.Height;

  UpdateLayeredWindow(Handle, 0, nil, @Size, Bitmap32.Handle, @P, 1, @BlendFunction, ULW_ALPHA);
  PNG.Free;
  Bitmap32.Free;
end;

W oknie sa tez inne komponenty, ktore zostaja przeslaniete. Nie mam pomyslu co zrobic zeby byly widoczne? Moze ktos pomoze?

0
Szczawik napisał(a)

Przezroczysta forma

Nie wychodzi mi polaczenie Twojego kodu z moim :-(

0

Twoje połączenie ograniczy się do kodu:

Bitmap32 := TBitmap32.Create;
PNG := TPNGObject.Create;
try
  PNG.Assign(Image.Picture.Graphic);
  PNGToBitmap32(PNG, Bitmap32);
  //Mój kod operujący na Bitmap32
finally
  PNG.Free;
  Bitmap32.Free;
end;
0

W koncu mi wyszlo. Tylko teraz jest kolejny problem: jak komponenty z przezroczystym tlem, np. etykiety maja tlo w kolorze okna... Jak temu zaradzic?

0

Nie da rady w ten sposób. Możesz próbować ustawiając na formie z kontrolkami kolor przezroczysty, ale - jeśli może on wystąpić na samych komponentach - będzie problem. Większość komponentów jest prostokątna, a pozostałe (jak TLabel) możesz po prostu narysować na oknie i będzie przezroczyste w dowolny sposób.

0
png napisał(a)

W koncu mi wyszlo. Tylko teraz jest kolejny problem: jak komponenty z przezroczystym tlem, np. etykiety maja tlo w kolorze okna... Jak temu zaradzic?

Dodaj do uses XPMan, czesc komponentow bedzie miala przejzroczyste tlo np. label, panel jezeli o to tobie chodzi :p

0
PinguVanEx napisał(a)
png napisał(a)

W koncu mi wyszlo. Tylko teraz jest kolejny problem: jak komponenty z przezroczystym tlem, np. etykiety maja tlo w kolorze okna... Jak temu zaradzic?

Dodaj do uses XPMan, czesc komponentow bedzie miala przejzroczyste tlo np. label, panel jezeli o to tobie chodzi :p

@PinguVanEx: Nie o to mu chodzi i XPMan nie ma nic do tego. Albo nie czytałeś arta przed udzieleniem tej podpowiedzi, albo nie zrozumiałeś podanej tam metody rozwiązania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1