2011-01-11 9 views
1

Ich habe versucht, diese zwei Dinge herauszufinden:Delphi VirtualStringTree Zeichnung

1) Wie kann ich die ganze Reihe der Farbe in Code ändern? Wie wenn die VT wie eine ListView aussieht?

2) Wie mache ich die Checkboxes auch einrücken? Mein Kind Kontrollkästchen und auf dem gleichen "Einzug?" als meine root-Checkboxen.

Danke!

+6

Willkommen bei SO! Zwei Fragen sollten zwei Fragen zu SO entsprechen. Was ist, wenn jemand die Antwort auf eine Ihrer Fragen kennt? Ist das eine Antwort auf Ihre kombinierte Frage? – jpfollenius

+0

1) Und möchten Sie die ganze Zeile auswählen oder jeden Zeilenhintergrund ändern? –

+1

können Sie gut sein * Der 16 Jahre alte Computer Wiz * (sic), aber wirklich, könnten Sie bitte nicht Ihren echten Account hier eher proliferierende personas verwenden ?! –

Antwort

0

1) Versuchen Sie, toFullRowSelect zu TreeOptions.SelectionOptions hinzuzufügen.

2) Ich kann das nicht beantworten. Vielleicht versuchen toFixedIndent.

+0

2) Nein, toFixedIndent fügt alle Knoten auf die gleiche Position ein –

+0

@daemon_x: Danke, das habe ich korrigiert. Ich habe nur geraten. – jpfollenius

2

1)

procedure VSTBeforeItemErase(
    Sender: TBaseVirtualTree; TargetCanvas: TCanvas; Node: PVirtualNode; 
    ItemRect: TRect; var ItemColor: TColor; 
    var EraseAction: TItemEraseAction); 
begin 
    EraseAction := eaColor; 
    ItemColor := clLime; 
end; 

2) Der Einzug für jede Box einzeln Prüfknoten Einstellung ist IMHO unmöglich. Die Baumstruktur verfügt über die Indent-Eigenschaft, mit der die Einrückung für alle Knoten (einschließlich ihrer Kontrollkästchen) festgelegt wird. Intern werden die Methoden AdjustCoordinatesByIndent und PaintCheckImage aufgerufen, beide sind jedoch für Sie ausgeblendet. Änderung von einem von ihnen kann Ihnen helfen, aber Sie müssen sehr spezifisch sein, würde ich sagen, das Beste wäre, Ihren eigenen Bauteilnachkomme zu verursachen.

Wenn Sie etwas auf der Eigenschaftenseite des erweiterten Beispiels erstellen möchten, müssen Sie Knoten zu mehr als einer Ebene in der Baumhierarchie hinzufügen.

Für Ihre Inspiration ...

var CurrentNode: PVirtualNode; 
    CurrentSubnode: PVirtualNode; 

begin 
    VirtualStringTree1.Indent := 50; // this increases indention for all nodes in the tree 

    CurrentNode := VirtualStringTree1.AddChild(nil); // create a node to the root 
    CurrentNode.CheckType := ctCheckBox; // check support of a node 
    CurrentSubnode := VirtualStringTree1.AddChild(CurrentNode); // create a subnode to your first node 
    CurrentSubnode.CheckType := ctCheckBox; // check support of a node 
end;