![]() |
Re: Was für ne scharfe Auswahlleiste
ok...mit .NET 3 tuts.
|
Re: Was für ne scharfe Auswahlleiste
Zurück zur eigentlichen Delphi Frage.
Ich habe jetzt ![]() Nur krieg ich damit keinen progressive Erhöhung der Transparenz nach rechts hin... Wie könnte man denn da den Code anpassen ? |
Re: Was für ne scharfe Auswahlleiste
dafür muss
Delphi-Quellcode:
zu
LBlendFunc.AlphaFormat := 0;
Delphi-Quellcode:
werden. Das Bitmap muss dann natürlich auch 32bit Farbtiefe haben.
LBlendFunc.AlphaFormat := AC_SRC_ALPHA;
Es kann sein das Windows dabei noch irgendwas verbockt. Ich schau mir das mal an und poste notfalls noch meine eigene Routine (wobei die auch fix zusammengetippt ist). |
Re: Was für ne scharfe Auswahlleiste
Liste der Anhänge anzeigen (Anzahl: 2)
Da die Windows-Funktion einem das Leben schwer macht in dem sie auch den Alphakanal des Ziel-HDC berücksichtig hab ich mal eine eigene Funktion geschrieben:
Delphi-Quellcode:
Die Funktion ist wie die Funktion BitBlt zu nutzen. Anstelle eine Src-HDC übergibt man ein Src-Bitmap. Wenn dieses eine Farbtiefe von 32bit hat wird der Alphakanal beim blitten berücksichtigt.
procedure BitBltAlpha(DestDC: HDC; X, Y, Width, Height: Integer; SrcBmp: TBitmap; XSrc, YSrc: Integer);
var lDst : TBitmap; lPixelDst, lPixelSrc : PRGBQuad; lCountX, lCountY : Integer; lAlphaNeg : Byte; begin if (SrcBmp.PixelFormat <> pf32bit) then BitBlt(DestDC, X, Y, Width, Height, SrcBmp.Canvas.Handle, XSrc, YSrc, SRCCOPY) else begin if (Width > SrcBmp.Width) then Width := SrcBmp.Width; if (Height > SrcBmp.Height) then Height := SrcBmp.Height; lDst := TBitmap.Create(); lDst.PixelFormat := pf32bit; lDst.SetSize(Width, Height); BitBlt(lDst.Canvas.Handle, 0, 0, Width, Height, DestDC, X, Y, SRCCOPY); lPixelSrc := SrcBmp.ScanLine[SrcBmp.Height - 1]; lPixelDst := lDst.ScanLine[lDst.Height - 1]; for lCountY := lDst.Height - 1 downto 0 do begin for lCountX := lDst.Width - 1 downto 0 do begin lAlphaNeg := not(lPixelSrc.rgbReserved); lPixelDst.rgbBlue := ((lPixelSrc.rgbBlue * lPixelSrc.rgbReserved) + (lPixelDst.rgbBlue * lAlphaNeg)) div 255; lPixelDst.rgbGreen := ((lPixelSrc.rgbGreen * lPixelSrc.rgbReserved) + (lPixelDst.rgbGreen * lAlphaNeg)) div 255; lPixelDst.rgbRed := ((lPixelSrc.rgbRed * lPixelSrc.rgbReserved) + (lPixelDst.rgbRed * lAlphaNeg)) div 255; inc(lPixelDst); inc(lPixelSrc); end; end; BitBlt(DestDC, X, Y, Width, Height, lDst.Canvas.Handle, 0, 0, SRCCOPY); lDst.Free; end; end; |
Re: Was für ne scharfe Auswahlleiste
Zitat:
Und aus der Tier-1-Liste: Zitat:
|
Re: Was für ne scharfe Auswahlleiste
Ganz herzlichen Dank, Jens. Damit kann ich doch was anfangen. Werde wohl die Tage mich ransetzen, damit eine Delphi Komponente zu schreiben, denn solch eine Select-Liste macht sich einfach nur genial.
|
Re: Was für ne scharfe Auswahlleiste
Zitat:
|
Re: Was für ne scharfe Auswahlleiste
So war das schon gedacht, zumal der Verdienst ja nicht dann mir gilt sondern dem Jens.
Aber mal noch eine Frage... Mit welchem Programm kann ich denn eine 32bit Bitmap erzeugen. Meine Palette reicht von Paint, Paint.NET bis hin zu Macromedia Fireworks, und die können alle nur bis 24bit. |
Re: Was für ne scharfe Auswahlleiste
Zitat:
auch dafür kann man die komponente raize components benutzen, leider ist die kostenpflichtig, gibt aber ne trial version... ztu downen @ ![]() |
Re: Was für ne scharfe Auswahlleiste
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:20 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