Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Was für ne scharfe Auswahlleiste (https://www.delphipraxis.net/95822-fuer-ne-scharfe-auswahlleiste.html)

Ghostwalker 16. Jul 2007 12:14

Re: Was für ne scharfe Auswahlleiste
 
ok...mit .NET 3 tuts.

Jelly 16. Jul 2007 21:05

Re: Was für ne scharfe Auswahlleiste
 
Zurück zur eigentlichen Delphi Frage.
Ich habe jetzt diesen Code von Jens angekuckt, und damit lässt sich schon bischen was anfangen.

Nur krieg ich damit keinen progressive Erhöhung der Transparenz nach rechts hin... Wie könnte man denn da den Code anpassen ?

SirThornberry 16. Jul 2007 23:53

Re: Was für ne scharfe Auswahlleiste
 
dafür muss
Delphi-Quellcode:
LBlendFunc.AlphaFormat := 0;
zu
Delphi-Quellcode:
LBlendFunc.AlphaFormat := AC_SRC_ALPHA;
werden. Das Bitmap muss dann natürlich auch 32bit Farbtiefe haben.
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).

SirThornberry 17. Jul 2007 08:55

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:
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;
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.

OregonGhost 17. Jul 2007 09:26

Re: Was für ne scharfe Auswahlleiste
 
Zitat:

# Es wird nur in Hardware rendert wenn du eine DX9 Karte mit Pixelshader 2.0 hast, auch wenn das gar nicht notwendig gewesen wäre. (gilt ebenfalls für Aero in Vista)
Das gilt aber doch nur für Effekte, die Tier 2 benötigen, oder? Also z.B. radiale Farbverläufe. Alle einfacheren Sachen sollten auch mit Tier 1 funktionieren (mal abgesehen davon, dass man Karten unter SM3 eigentlich kaum noch bekommt, Tier 1 ist alles ab Radeon256 / Geforce256, Tier 2 ab Radeon 9500 / GeForce 5).
Und aus der Tier-1-Liste:
Zitat:

Most 2D rendering is supported. [...]
Most 3D rasterization is supported. [...]
On Windows Vista, layered windows are hardware accelerated.
Also nicht ganz so schlimm.

Jelly 17. Jul 2007 17:02

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.

DeddyH 17. Jul 2007 17:19

Re: Was für ne scharfe Auswahlleiste
 
Zitat:

Zitat von Jelly
Werde wohl die Tage mich ransetzen, damit eine Delphi Komponente zu schreiben

Würdest Du die auch hier veröffentlichen? Da hängt zwar nicht mein Leben daran, aber es sieht wirklich nett aus, das muss ich zugeben.

Jelly 17. Jul 2007 17:56

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.

lbccaleb 17. Jul 2007 19:08

Re: Was für ne scharfe Auswahlleiste
 
Zitat:

Zitat von dominikkv
Zitat:

Zitat von Jelly
(Das linke Menü ist kein Problem, dafür hätte ich eine Komponente.)

welche :stupid:


auch dafür kann man die komponente raize components benutzen, leider ist die kostenpflichtig, gibt aber ne trial version...

ztu downen @raize components

Khabarakh 17. Jul 2007 19:27

Re: Was für ne scharfe Auswahlleiste
 
Zitat:

Zitat von Jelly
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.

Sowohl Paint.Net als auch Gimp besitzen Alpha-Channel-(und damit natürlich auch PNG-)Support, auch wenn mir bei beiden die Möglichkeit fehlt, den Alphakanal direkt zu bearbeiten (wie es bei PSP möglich war/ist) - vielleicht habe ich ihn auch nur noch nicht entdeckt :stupid: .


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:20 Uhr.
Seite 3 von 4     123 4      

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