![]() |
Virtual Treeview: Hintergrundgrafik-Fragen
VST bietet ja die Möglichkeit eine Hintergrundgrafik einzubinden. Gehts das auch mit Zeilen, genauergesagt eine Zeilen-Hintergrundgrafik, die die VST Hintergrundgrafik dahinter hat? Kann man die Zeilengrafik halbtransparent machen?
Was ich machen möchte: Ich will einige Zeilen mit dezenten Farben versehen, die vom Inhalt der Zeile abhängt. Die Zeile soll aber nicht die Hintergrundgrafik verdecken, sondern halbtransparent sein. Alternativ ginge eine GIF-Grafik, die ein Schachbrettmuster hat und 50% der Pixel durchsichtig sind. Im Prinzip so wie man es in HTML und einer Tabelle machen würde. |
Re: Virtual Treeview: Hintergrundgrafik-Fragen
machbar sicherlich, aber nicht auf knopfdruck.
du wirst wohl nicht drum rum kommen im on cell erase/paint etwas zu programmieren. |
Re: Virtual Treeview: Hintergrundgrafik-Fragen
Gibts speziellere Tutorials als dieses hier?
--> ![]() Hier werden nur wichtige Dinge beschrieben, nicht aber solche speziellen Sachen... |
Re: Virtual Treeview: Hintergrundgrafik-Fragen
Ich kann ja erstmal leicht anfangen und frage mal, wie färbe ich eine Zeile ein (vielleicht wirds ja automatisch transparent)?
|
Re: Virtual Treeview: Hintergrundgrafik-Fragen
Hallo JPSelter,
das Windows-GDI unterstützt Alphablending (siehe ![]()
Delphi-Quellcode:
Gruß Hawkeye
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; |
Re: Virtual Treeview: Hintergrundgrafik-Fragen
Ich glaube meine Frage war etwas untergegangen: Wie bekomme ich denn einfach nur eine Zelle eingefärbt?
|
Re: Virtual Treeview: Hintergrundgrafik-Fragen
Wenn du ganze Zeilen einfärben möchtest, kannst du das in der Behandlungsroutine für OnBeforeItemErase tun:
Delphi-Quellcode:
Hast du ein mehrspaltiges TreeView, in dem du nur eine Spalte einfärben möchtest, so nimmst du die Behandlungsroutine für OnBeforeCellPaint:
procedure TForm1.VirtualStringTree1BeforeItemErase(
Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; ItemRect: TRect; var ItemColor: TColor; var EraseAction: TItemEraseAction); begin if Odd(Node.Index) then ItemColor := clLime else ItemColor := clRed; EraseAction := eaColor; end;
Delphi-Quellcode:
Gruß Hawkeye
procedure TForm1.VirtualStringTree1BeforeCellPaint(
Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex; CellRect: TRect); begin if (Column = 0) begin TargetCanvas.Brush.Color := clYellow; TargetCanvas.FillRect(CellRect); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:47 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