Das mit nur gekachelten Hintergrundbildern stimmt so nicht ganz. Dafür gibts beim VST die Eigenschaften toStaticBackground (zu finden unter TreeOptions.PaintOptions), ist diese aktiviert, wird das Bild nicht gekachelt dargestellt.
Mit BackgrpoundOffSetX und BackgroundOffSetY kann man dann die Position der oberen linken Ecke bestimmen.
Aber leider habe ich keine einfache Methode gefunden, dass BackgroundImage zu zentrieren
//Edit
Ich hab mir mal eben was zurecht gefrickelt, vielleicht hilfts ja wem:
Delphi-Quellcode:
procedure TfrmMain.VSTPaintBackground(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; R: TRect; var Handled: Boolean);
var links,oben : Integer;
myVST : TVirtualStringTree;
begin
myVST := TVirtualStringTree(Sender);
//nur nen Offset, wenns Static ist, da bei den Kacheln kein Offset sein sollte
if (toStaticBackground in myVST.TreeOptions.PaintOptions) then
begin
links := (myVST.Width div 2)-(myVST.Background.Width div 2);
oben := (myVST.Height div 2)-(myVST.Background.Height div 2);;
end
else
begin
links := 0;
oben := 0;
end;
myVST.BackgroundOffsetX := links;
myVST.BackgroundOffsetY := oben;
handled := false;
end;
Das ganze ist der Ereignishandler zu OnPaintBackground. Das handled wird auf false gesetzt, da ich nicht selber zeichne. Es flackert minimal, leider hilft VST.DoubleBuffered := true auch nicht wirklich Falls jemand ne Idee hat, mir gehts im Mom so:
//Edit 2
packt den Code lieber in den EreignisHandler OnResize eures Forms und sprecht das VST direkt an, ansonsten kann es beim Resizen zu komischen Effekten kommen