Einzelnen Beitrag anzeigen

Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Virtual Treeview: Hintergrundgrafik-Fragen

  Alt 22. Jun 2006, 14:25
Hallo JPSelter,

das Windows-GDI unterstützt Alphablending (siehe MSDN-Library durchsuchenAlphaBlend). Den folgende Code habe ich schnell zusammengestrickt (es geht sicher schöner und perfomanter). Für den produktiven Einsatz solltest du die Initialisierungen (BlendParams, Bitmap) in die FormCreate-Routine verlagern:

Delphi-Quellcode:
procedure Form1.VirtualStringTree1AfterItemErase (
  Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode;
  ItemRect: TRect);

  var BMP : TBitmap;
      lBlendParams: TBlendFunction;

begin

  // Parameter für Alphablending zusammstellen
  with lBlendParams do
    begin
      BlendOp := AC_SRC_OVER;
      BlendFlags := 0;
      SourceConstantAlpha := 32; // Intensität
      AlphaFormat := 0;
    end;

  BMP := TBitmap.Create;
  try

    // Farbe für Zeile wählen
    with BMP.Canvas.Brush do
      case Node.Index mod 3 of
        0 : Color := RGB(255, 0, 0);
        1 : Color := RGB(0, 255, 0);
        2 : Color := RGB(0, 0, 255);
      end;

    with ItemRect do
      begin

        // Bitmap-Größe einstellen, Bitmap einfärben
        BMP.Width := Right - Left;
        BMP.Height := Bottom - Top;
        BMP.Canvas.FillRect (Rect(0, 0, Width, Height));

        // Alphablending durchführen
        Windows.AlphaBlend(TargetCanvas.Handle, Left, Top, Right - Left, Bottom - Top,
                           BMP.Canvas.Handle, 0, 0, BMP.Width, BMP.Height, lBlendParams);

      end;

  finally
    BMP.Free;
  end;
    
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat